<?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>217302</bug_id>
          
          <creation_ts>2020-10-04 17:21:16 -0700</creation_ts>
          <short_desc>Add implementation of &lt;filesystem&gt; to WTF for macOS 10.14</short_desc>
          <delta_ts>2020-10-05 17:29:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mjs</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1694598</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 17:21:16 -0700</bug_when>
    <thetext>Add implementation of &lt;filesystem&gt; to WTF for macOS 10.14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694600</commentid>
    <comment_count>1</comment_count>
      <attachid>410490</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 17:26:23 -0700</bug_when>
    <thetext>Created attachment 410490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694603</commentid>
    <comment_count>2</comment_count>
      <attachid>410492</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 17:49:31 -0700</bug_when>
    <thetext>Created attachment 410492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694604</commentid>
    <comment_count>3</comment_count>
      <attachid>410493</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 17:55:49 -0700</bug_when>
    <thetext>Created attachment 410493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694605</commentid>
    <comment_count>4</comment_count>
      <attachid>410494</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 18:20:53 -0700</bug_when>
    <thetext>Created attachment 410494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694606</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 18:30:55 -0700</bug_when>
    <thetext>Alexey, given the existing MIT licensed code, and that these files are dual licensed under the MIT and the University of Illinois Open Source Licenses, do you have concerns about landing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694607</commentid>
    <comment_count>6</comment_count>
      <attachid>410494</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2020-10-04 18:49:31 -0700</bug_when>
    <thetext>Comment on attachment 410494
Patch

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

&gt; Source/WTF/ChangeLog:9
&gt; +        from libc++ (628a319475) and modifies them to build outside of

This doesn&apos;t match actually imported revision</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694609</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-10-04 18:55:37 -0700</bug_when>
    <thetext>I&apos;m honestly not sure. Maciej may know the rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694611</commentid>
    <comment_count>8</comment_count>
      <attachid>410496</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 19:03:05 -0700</bug_when>
    <thetext>Created attachment 410496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694612</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 19:03:12 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #6)
&gt; Comment on attachment 410494 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=410494&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:9
&gt; &gt; +        from libc++ (628a319475) and modifies them to build outside of
&gt; 
&gt; This doesn&apos;t match actually imported revision

Oops. I went back to an older revision so that it would actually build on 10.14. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694942</commentid>
    <comment_count>10</comment_count>
      <attachid>410586</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-05 16:36:25 -0700</bug_when>
    <thetext>Created attachment 410586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694972</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-05 17:28:11 -0700</bug_when>
    <thetext>Committed r268020: &lt;https://trac.webkit.org/changeset/268020&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410586.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694973</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-05 17:29:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/69978322&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410490</attachid>
            <date>2020-10-04 17:26:23 -0700</date>
            <delta_ts>2020-10-04 17:56:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217302-20201004172622.patch</filename>
            <type>text/plain</type>
            <size>170119</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5NTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTA0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gb2YgPGZpbGVzeXN0ZW0+
IHRvIFdURiBmb3IgbWFjT1MgMTAuMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBhbmQgaXRzIG5l
ZWRlZCBpbXBsZW1lbnRhdGlvbiBmaWxlcworICAgICAgICBmcm9tIGxpYmMrKyAoNjI4YTMxOTQ3
NSkgYW5kIG1vZGlmaWVzIHRoZW0gdG8gYnVpbGQgb3V0c2lkZSBvZgorICAgICAgICBsaWJjKysu
IFRoaXMgaXMgb25seSBuZWVkZWQgYW5kIG9ubHkgYnVpbHQgZm9yIHZlcnNpb25zIG9mIG1hY09T
IDwgMTAuMTUKKyAgICAgICAgYW5kIGNhbiBiZSBkcm9wcGVkIHdoZW4gd2UgcmVxdWlyZSAxMC4x
NS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvU3RkRmlsZXN5c3RlbS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHd0Zi9TdGRGaWxlc3lzdGVtLmg6IEFkZGVkLgorCiAyMDIwLTEwLTAz
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSW50
cm9kdWNlIEpJVE9wZXJhdGlvbkxpc3QgdG8gdmFsaWRhdGUgSklULWNhZ2VkIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
Nzk0OCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKIAkJN0E2RUJBMzQyMDc0NkMzNDAwNEY5QzQ0IC8q
IE1hY2hTZW5kUmlnaHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0E2RUJBMzMyMDc0NkMzNDAwNEY5QzQ0IC8qIE1hY2hTZW5kUmlnaHQuY3BwICov
OyB9OwogCQk3QUYwMjNCNTIwNjFFMTcwMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYwMjNCNDIw
NjFFMTZGMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAgKi87IH07CiAJCTdBRkVDNkIx
MUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAq
LzsgfTsKKwkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1OTVGRkQyNTJB
OTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4MTM0MDEzODE1QjA5
MkZEMDAxRkYwQjggLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxMzQwMTM2MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQuY3BwICov
OyB9OwogCQk4MzQ4QkEwRTIxRkJDMEQ1MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4QkEwRDIx
RkJDMEQ0MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgKi87IH07CiAJCTkzOTM0QkQz
MThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2QTEgLyog
U3RyaW5nVmlld0NvY29hLm1tICovOyB9OwpAQCAtNDYyLDYgKzQ2Myw4IEBACiAJCTdDNDIzMDcy
MjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzQyMzA3MzIzQ0UyRDhCMDA2RTU0RDAgLyogUGxhdGZvcm1PUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNDIzMDc0MjNDRUIxODcwMDZFNTREMCAvKiBQbGF0Zm9ybUxlZ2FjeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUxlZ2FjeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QzU5NUZGQzI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3Rl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRGaWxlc3lzdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNTk1RkZEMjUyQTk2RTAwMEU0MjE2OCAvKiBT
dGRGaWxlc3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
ZEZpbGVzeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzk2OTI5NDFG
NjYzMDZFMDAyNjdBOUUgLyogS2V5VmFsdWVQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtleVZhbHVlUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Qzk4Q0RDNzIzRTdBOUI4MDAxMkYyMzIgLyogUGxhdGZvcm1FbmFibGVDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUVuYWJsZUNvY29hLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOThDREM4MjNFN0FGQzgwMDEyRjIzMiAvKiBQbGF0Zm9y
bUVuYWJsZVdpbkFwcGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRm
b3JtRW5hYmxlV2luQXBwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDUs
NiArMTI0OCw4IEBACiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMu
aCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8s
CiAJCQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQk3
QzU5NUZGRDI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5jcHAgKi8sCisJCQkJN0M1
OTVGRkMyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLywKIAkJCQlGRTk3RjZB
ODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8sCiAJCQkJQThBNDczMTExNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCUZGMEE0MzY1ODg5NTRGM0NC
MDdEQkVDQSAvKiBTdGRMaXN0LmggKi8sCkBAIC0xNzQ1LDYgKzE3NTAsNyBAQAogCQkJCUZFRUE0
REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1BvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzMzN0RCOUNFNzQzNDEwRkFGMDc2RTE3IC8qIFN0YWNrVHJhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5NUI2MzcyMENCNUVGRDAwNDc5NjM1IC8qIFN0cmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhENkUyNzFGNTUyMkUz
MDBBNzVDQzQgLyogU3RyaW5nQnVpbGRlckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY3OTQ4KQorKysgU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgU3RhY2tTaG90UHJvZmlsZXIuaAogICAgIFN0YWNrU3RhdHMuaAog
ICAgIFN0YWNrVHJhY2UuaAorICAgIFN0ZEZpbGVzeXN0ZW0uaAogICAgIFN0ZEludEV4dHJhcy5o
CiAgICAgU3RkTGliRXh0cmFzLmgKICAgICBTdGRMaXN0LmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0ZEZpbGVzeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVz
eXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY3NyBAQAorLy89PT0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFN0ZEZpbGVzeXN0ZW0uY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJh
c3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2Vz
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKworLyogSW1wb3J0cyBhIGNvcHkgb2YgZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5o
LCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAsCisgICBmaWxlc3lzdGVtL2ludDEy
OF9idWlsdGlucy5jcHAgYW5kIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgZnJvbSA2MjhhMzE5
NDc1IG9mIHRoZQorICAgbGliYysrIHByb2plY3QgYW5kIGhhcyBtb2RpZmllZCB0aGVtIHRvIHdv
cmsgb3V0c2lkZSBvZiBhIGJ1aWxkIG9mIGxpYmMrKyBpdHNlbGYuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShNQUMp
CisKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPCAxMDE1MDAKKworI2luY2x1ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKworCisj
aW5jbHVkZSA8X19jb25maWc+CisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9j
b21tb24uaCAtLSAqLworCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y2hyb25vPgorI2lu
Y2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNs
dWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgOjp1dGltZXMgYXMgdXNlZCBpbiBfX2xhc3Rfd3JpdGVf
dGltZQorI2luY2x1ZGUgPGZjbnRsLmg+ICAgIC8qIHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKwor
LyogI2luY2x1ZGUgIi4uL2luY2x1ZGUvYXBwbGVfYXZhaWxhYmlsaXR5LmgiICovCisKKyNpZiAh
ZGVmaW5lZChfX0FQUExFX18pCisvLyBXZSBjYW4gdXNlIHRoZSBwcmVzZW5jZSBvZiBVVElNRV9P
TUlUIHRvIGRldGVjdCBwbGF0Zm9ybXMgdGhhdCBwcm92aWRlCisvLyB1dGltZW5zYXQuCisjaWYg
ZGVmaW5lZChVVElNRV9PTUlUKQorI2RlZmluZSBfTElCQ1BQX1VTRV9VVElNRU5TQVQKKyNlbmRp
ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9u
IgorI2VuZGlmCisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNw
YWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCitzdGF0aWMgc3RyaW5nIGZvcm1hdF9zdHJpbmdf
aW1wKGNvbnN0IGNoYXIqIG1zZywgLi4uKSB7CisgIC8vIHdlIG1pZ2h0IG5lZWQgYSBzZWNvbmQg
c2hvdCBhdCB0aGlzLCBzbyBwcmUtZW1wdGl2bHkgbWFrZSBhIGNvcHkKKyAgc3RydWN0IEd1YXJk
VkFMaXN0IHsKKyAgICB2YV9saXN0JiB0YXJnZXQ7CisgICAgYm9vbCBhY3RpdmUgPSB0cnVlOwor
ICAgIEd1YXJkVkFMaXN0KHZhX2xpc3QmIHRhcmdldCkgOiB0YXJnZXQodGFyZ2V0KSwgYWN0aXZl
KHRydWUpIHt9CisgICAgdm9pZCBjbGVhcigpIHsKKyAgICAgIGlmIChhY3RpdmUpCisgICAgICAg
IHZhX2VuZCh0YXJnZXQpOworICAgICAgYWN0aXZlID0gZmFsc2U7CisgICAgfQorICAgIH5HdWFy
ZFZBTGlzdCgpIHsKKyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0YXJnZXQpOwor
ICAgIH0KKyAgfTsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBtc2cpOworICBH
dWFyZFZBTGlzdCBhcmdzX2d1YXJkKGFyZ3MpOworCisgIHZhX2xpc3QgYXJnc19jcDsKKyAgdmFf
Y29weShhcmdzX2NwLCBhcmdzKTsKKyAgR3VhcmRWQUxpc3QgYXJnc19jb3B5X2d1YXJkKGFyZ3Nf
Y3ApOworCisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKworICBhcnJheTxjaGFyLCAyNTY+IGxvY2Fs
X2J1ZmY7CisgIHNpemVfdCBzaXplX3dpdGhfbnVsbCA9IGxvY2FsX2J1ZmYuc2l6ZSgpOworICBh
dXRvIHJldCA9IDo6dnNucHJpbnRmKGxvY2FsX2J1ZmYuZGF0YSgpLCBzaXplX3dpdGhfbnVsbCwg
bXNnLCBhcmdzX2NwKTsKKworICBhcmdzX2NvcHlfZ3VhcmQuY2xlYXIoKTsKKworICAvLyBoYW5k
bGUgZW1wdHkgZXhwYW5zaW9uCisgIGlmIChyZXQgPT0gMCkKKyAgICByZXR1cm4gcmVzdWx0Owor
ICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpIDwgc2l6ZV93aXRoX251bGwpIHsKKyAgICBy
ZXN1bHQuYXNzaWduKGxvY2FsX2J1ZmYuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHJldCkp
OworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvLyB3ZSBkaWQgbm90IHByb3ZpZGUgYSBs
b25nIGVub3VnaCBidWZmZXIgb24gb3VyIGZpcnN0IGF0dGVtcHQuIFRoZQorICAvLyByZXR1cm4g
dmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyAoZXhjbHVkaW5nIHRoZSBudWxsIGJ5dGUpIHRo
YXQgYXJlCisgIC8vIG5lZWRlZCBmb3IgZm9ybWF0dGluZy4KKyAgc2l6ZV93aXRoX251bGwgPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KHJldCkgKyAxOworICByZXN1bHQuX19yZXNpemVfZGVmYXVsdF9p
bml0KHNpemVfd2l0aF9udWxsIC0gMSk7CisgIHJldCA9IDo6dnNucHJpbnRmKCZyZXN1bHRbMF0s
IHNpemVfd2l0aF9udWxsLCBtc2csIGFyZ3MpOworICBfTElCQ1BQX0FTU0VSVChzdGF0aWNfY2Fz
dDxzaXplX3Q+KHJldCkgPT0gKHNpemVfd2l0aF9udWxsIC0gMSksICJUT0RPIik7CisKKyAgcmV0
dXJuIHJlc3VsdDsKK30KKworY29uc3QgY2hhciogdW53cmFwKHN0cmluZyBjb25zdCYgcykgeyBy
ZXR1cm4gcy5jX3N0cigpOyB9Citjb25zdCBjaGFyKiB1bndyYXAocGF0aCBjb25zdCYgcCkgeyBy
ZXR1cm4gcC5uYXRpdmUoKS5jX3N0cigpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgQXJnPgorQXJnIGNv
bnN0JiB1bndyYXAoQXJnIGNvbnN0JiBhKSB7CisgIHN0YXRpY19hc3NlcnQoIWlzX2NsYXNzPEFy
Zz46OnZhbHVlLCAiY2Fubm90IHBhc3MgY2xhc3MgaGVyZSIpOworICByZXR1cm4gYTsKK30KKwor
dGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CitzdHJpbmcgZm9ybWF0X3N0cmluZyhjb25zdCBjaGFy
KiBmbXQsIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIHsKKyAgcmV0dXJuIGZvcm1hdF9zdHJpbmdfaW1w
KGZtdCwgdW53cmFwKGFyZ3MpLi4uKTsKK30KKworZXJyb3JfY29kZSBjYXB0dXJlX2Vycm5vKCkg
eworICBfTElCQ1BQX0FTU0VSVChlcnJubywgIkV4cGVjdGVkIGVycm5vIHRvIGJlIG5vbi16ZXJv
Iik7CisgIHJldHVybiBlcnJvcl9jb2RlKGVycm5vLCBnZW5lcmljX2NhdGVnb3J5KCkpOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK1QgZXJyb3JfdmFsdWUoKTsKK3RlbXBsYXRlIDw+CitfTElC
Q1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSB2b2lkIGVycm9yX3ZhbHVlPHZvaWQ+KCkge30KK3Rl
bXBsYXRlIDw+Citib29sIGVycm9yX3ZhbHVlPGJvb2w+KCkgeworICByZXR1cm4gZmFsc2U7Cit9
Cit0ZW1wbGF0ZSA8PgordWludG1heF90IGVycm9yX3ZhbHVlPHVpbnRtYXhfdD4oKSB7CisgIHJl
dHVybiB1aW50bWF4X3QoLTEpOworfQordGVtcGxhdGUgPD4KK19MSUJDUFBfQ09OU1RFWFBSX0FG
VEVSX0NYWDExIGZpbGVfdGltZV90eXBlIGVycm9yX3ZhbHVlPGZpbGVfdGltZV90eXBlPigpIHsK
KyAgcmV0dXJuIGZpbGVfdGltZV90eXBlOjptaW4oKTsKK30KK3RlbXBsYXRlIDw+CitwYXRoIGVy
cm9yX3ZhbHVlPHBhdGg+KCkgeworICByZXR1cm4ge307Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBU
Pgorc3RydWN0IEVycm9ySGFuZGxlciB7CisgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZTsKKyAgZXJy
b3JfY29kZSogZWMgPSBudWxscHRyOworICBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHI7CisgIGNv
bnN0IHBhdGgqIHAyID0gbnVsbHB0cjsKKworICBFcnJvckhhbmRsZXIoY29uc3QgY2hhciogZm5h
bWUsIGVycm9yX2NvZGUqIGVjLCBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHIsCisgICAgICAgICAg
ICAgICBjb25zdCBwYXRoKiBwMiA9IG51bGxwdHIpCisgICAgICA6IGZ1bmNfbmFtZShmbmFtZSks
IGVjKGVjKSwgcDEocDEpLCBwMihwMikgeworICAgIGlmIChlYykKKyAgICAgIGVjLT5jbGVhcigp
OworICB9CisKKyAgVCByZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYykgY29uc3QgeworICAg
IGlmIChlYykgeworICAgICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92YWx1ZTxU
PigpOworICAgIH0KKyAgICBzdHJpbmcgd2hhdCA9IHN0cmluZygiaW4gIikgKyBmdW5jX25hbWU7
CisgICAgc3dpdGNoIChib29sKHAxKSArIGJvb2wocDIpKSB7CisgICAgY2FzZSAwOgorICAgICAg
X190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsIG1fZWMpOworICAgIGNhc2UgMToKKyAgICAg
IF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOworICAgIGNhc2UgMjoK
KyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9lYyk7Cisg
ICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFz
cy4uLiBBcmdzPgorICBUIHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2VjLCBjb25zdCBjaGFy
KiBtc2csIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICplYyA9IG1fZWM7CisgICAgICByZXR1cm4gZXJyb3JfdmFsdWU8VD4oKTsKKyAgICB9CisgICAg
c3RyaW5nIHdoYXQgPQorICAgICAgICBzdHJpbmcoImluICIpICsgZnVuY19uYW1lICsgIjogIiAr
IGZvcm1hdF9zdHJpbmcobXNnLCBhcmdzLi4uKTsKKyAgICBzd2l0Y2ggKGJvb2wocDEpICsgYm9v
bChwMikpIHsKKyAgICBjYXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hh
dCwgbV9lYyk7CisgICAgY2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdo
YXQsICpwMSwgbV9lYyk7CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vy
cm9yKHdoYXQsICpwMSwgKnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJM
RSgpOworICB9CisKKyAgVCByZXBvcnQoZXJyYyBjb25zdCYgZXJyKSBjb25zdCB7IHJldHVybiBy
ZXBvcnQobWFrZV9lcnJvcl9jb2RlKGVycikpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFy
Z3M+CisgIFQgcmVwb3J0KGVycmMgY29uc3QmIGVyciwgY29uc3QgY2hhciogbXNnLCBBcmdzIGNv
bnN0Ji4uLiBhcmdzKSBjb25zdCB7CisgICAgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9yX2NvZGUo
ZXJyKSwgbXNnLCBhcmdzLi4uKTsKKyAgfQorCitwcml2YXRlOgorICBFcnJvckhhbmRsZXIoRXJy
b3JIYW5kbGVyIGNvbnN0JikgPSBkZWxldGU7CisgIEVycm9ySGFuZGxlciYgb3BlcmF0b3I9KEVy
cm9ySGFuZGxlciBjb25zdCYpID0gZGVsZXRlOworfTsKKwordXNpbmcgY2hyb25vOjpkdXJhdGlv
bjsKK3VzaW5nIGNocm9ubzo6ZHVyYXRpb25fY2FzdDsKKwordXNpbmcgVGltZVNwZWMgPSBzdHJ1
Y3QgOjp0aW1lc3BlYzsKK3VzaW5nIFN0YXRUID0gc3RydWN0IDo6c3RhdDsKKwordGVtcGxhdGUg
PGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQsCisgICAgICAgICAgYm9vbCBJc0Zsb2F0ID0g
aXNfZmxvYXRpbmdfcG9pbnQ8dHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA+Ojp2YWx1ZT4KK3N0cnVj
dCB0aW1lX3V0aWxfYmFzZSB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVw
OworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRpb247Cisg
IHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19uYW5vc2Vjb25k
cyA9IGR1cmF0aW9uPHJlcCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9IGR1cmF0
aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9zZWNvbmRzID0K
KyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4
KCkpLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWF4X25zZWMgPQorICAgICAg
ZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkg
LQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtYXhfc2Vj
b25kcykpCisgICAgICAgICAgLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWlu
X3NlY29uZHMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1
cmF0aW9uOjptaW4oKSkuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtaW5fbnNl
Y190aW1lc3BlYyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigKKyAgICAg
ICAgICAoRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkgLSBmc19zZWNvbmRzKG1pbl9zZWNvbmRz
KSkgKworICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgLmNvdW50KCk7CisKK3By
aXZhdGU6CisjaWYgX0xJQkNQUF9TVERfVkVSID4gMTEgJiYgIWRlZmluZWQoX0xJQkNQUF9IQVNf
Tk9fQ1hYMTRfQ09OU1RFWFBSKQorICBzdGF0aWMgY29uc3RleHByIGZzX2R1cmF0aW9uIGdldF9t
aW5fbnNlY3MoKSB7CisgICAgcmV0dXJuIGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+KAorICAg
ICAgICBmc19uYW5vc2Vjb25kcyhtaW5fbnNlY190aW1lc3BlYykgLQorICAgICAgICBkdXJhdGlv
bl9jYXN0PGZzX25hbm9zZWNvbmRzPihmc19zZWNvbmRzKDEpKSk7CisgIH0KKyAgLy8gU3RhdGlj
IGFzc2VydCB0aGF0IHRoZXNlIHZhbHVlcyBwcm9wZXJseSByb3VuZCB0cmlwLgorICBzdGF0aWNf
YXNzZXJ0KGZzX3NlY29uZHMobWluX3NlY29uZHMpICsgZ2V0X21pbl9uc2VjcygpID09CisgICAg
ICAgICAgICAgICAgICAgIEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpLAorICAgICAgICAgICAg
ICAgICJ2YWx1ZSBkb2Vzbid0IHJvdW5kdHJpcCIpOworCisgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBjaGVja19yYW5nZSgpIHsKKyAgICAvLyBUaGlzIGtpbmRhIHN1Y2tzLCBidXQgaXQncyB3aGF0
IGhhcHBlbnMgd2hlbiB3ZSBkb24ndCBoYXZlIF9faW50MTI4X3QuCisgICAgaWYgKHNpemVvZihU
aW1lVCkgPT0gc2l6ZW9mKHJlcCkpIHsKKyAgICAgIHR5cGVkZWYgZHVyYXRpb248bG9uZyBsb25n
LCByYXRpbzwzNjAwICogMjQgKiAzNjU+ID4gWWVhcnM7CisgICAgICByZXR1cm4gZHVyYXRpb25f
Y2FzdDxZZWFycz4oZnNfc2Vjb25kcyhtYXhfc2Vjb25kcykpID4gWWVhcnMoMjUwKSAmJgorICAg
ICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWluX3NlY29uZHMpKSA8
IFllYXJzKC0yNTApOworICAgIH0KKyAgICByZXR1cm4gbWF4X3NlY29uZHMgPj0gbnVtZXJpY19s
aW1pdHM8VGltZVQ+OjptYXgoKSAmJgorICAgICAgICAgICBtaW5fc2Vjb25kcyA8PSBudW1lcmlj
X2xpbWl0czxUaW1lVD46Om1pbigpOworICB9CisgIHN0YXRpY19hc3NlcnQoY2hlY2tfcmFuZ2Uo
KSwgInRoZSByZXByZXNlbnRhYmxlIHJhbmdlIGlzIHVuYWNjZXB0YWJsZSBzbWFsbCIpOworI2Vu
ZGlmCit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK3N0cnVj
dCB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPiB7CisgIHVzaW5nIHJlcCA9
IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5cGVuYW1l
IEZpbGVUaW1lVDo6ZHVyYXRpb247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlvbjxyZXA+
OworICB1c2luZyBmc19uYW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47CisgIHVzaW5n
IGZzX21pY3Jvc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRpYyBjb25z
dCByZXAgbWF4X3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWF4X25zZWM7CisgIHN0YXRp
YyBjb25zdCByZXAgbWluX3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWluX25zZWNfdGlt
ZXNwZWM7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2Nv
bnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVU
LCBUaW1lVCwgdHJ1ZT46Om1heF9zZWNvbmRzID0KKyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19z
ZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKwordGVtcGxhdGUg
PGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6
OnJlcCB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X25zZWMgPQor
ICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1h
eCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1heF9z
ZWNvbmRzKSkKKyAgICAgICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQs
IGNsYXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0
aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWluX3NlY29uZHMgPQorICAgICAgICBk
dXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpKS5jb3Vu
dCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5
cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1l
VCwgdHJ1ZT46Om1pbl9uc2VjX3RpbWVzcGVjID0KKyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19u
YW5vc2Vjb25kcz4oKEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMobWluX3NlY29uZHMpKSArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisgICAgICAg
ICAgICAuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQs
IGNsYXNzIFRpbWVTcGVjVD4KK3N0cnVjdCB0aW1lX3V0aWwgOiB0aW1lX3V0aWxfYmFzZTxGaWxl
VGltZVQsIFRpbWVUPiB7CisgIHVzaW5nIEJhc2UgPSB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQs
IFRpbWVUPjsKKyAgdXNpbmcgQmFzZTo6bWF4X25zZWM7CisgIHVzaW5nIEJhc2U6Om1heF9zZWNv
bmRzOworICB1c2luZyBCYXNlOjptaW5fbnNlY190aW1lc3BlYzsKKyAgdXNpbmcgQmFzZTo6bWlu
X3NlY29uZHM7CisKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfZHVyYXRpb247CisgIHVzaW5n
IHR5cGVuYW1lIEJhc2U6OmZzX21pY3Jvc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6
ZnNfbmFub3NlY29uZHM7CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX3NlY29uZHM7CisKK3B1
YmxpYzoKKyAgdGVtcGxhdGUgPGNsYXNzIENUeXBlLCBjbGFzcyBDaHJvbm9UeXBlPgorICBzdGF0
aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjaGVja2VkX3NldChDVHlwZSog
b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDaHJvbm9UeXBlIHRpbWUpIHsKKyAgICB1c2luZyBMaW0gPSBudW1lcmljX2xpbWl0czxD
VHlwZT47CisgICAgaWYgKHRpbWUgPiBMaW06Om1heCgpIHx8IHRpbWUgPCBMaW06Om1pbigpKQor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICpvdXQgPSBzdGF0aWNfY2FzdDxDVHlwZT4odGltZSk7
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZU
RVJfQ1hYMTEgYm9vbCBpc19yZXByZXNlbnRhYmxlKFRpbWVTcGVjVCB0bSkgeworICAgIGlmICh0
bS50dl9zZWMgPj0gMCkgeworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA8IG1heF9zZWNvbmRzIHx8
CisgICAgICAgICAgICAgKHRtLnR2X3NlYyA9PSBtYXhfc2Vjb25kcyAmJiB0bS50dl9uc2VjIDw9
IG1heF9uc2VjKTsKKyAgICB9IGVsc2UgaWYgKHRtLnR2X3NlYyA9PSAobWluX3NlY29uZHMgLSAx
KSkgeworICAgICAgcmV0dXJuIHRtLnR2X25zZWMgPj0gbWluX25zZWNfdGltZXNwZWM7CisgICAg
fSBlbHNlIHsKKyAgICAgIHJldHVybiB0bS50dl9zZWMgPj0gbWluX3NlY29uZHM7CisgICAgfQor
ICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgaXNfcmVw
cmVzZW50YWJsZShGaWxlVGltZVQgdG0pIHsKKyAgICBhdXRvIHNlY3MgPSBkdXJhdGlvbl9jYXN0
PGZzX3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSk7CisgICAgYXV0byBuc2VjcyA9IGR1
cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSAtIHNlY3Mp
OworICAgIGlmIChuc2Vjcy5jb3VudCgpIDwgMCkgeworICAgICAgc2VjcyA9IHNlY3MgKyBmc19z
ZWNvbmRzKDEpOworICAgICAgbnNlY3MgPSBuc2VjcyArIGZzX3NlY29uZHMoMSk7CisgICAgfQor
ICAgIHVzaW5nIFRMaW0gPSBudW1lcmljX2xpbWl0czxUaW1lVD47CisgICAgaWYgKHNlY3MuY291
bnQoKSA+PSAwKQorICAgICAgcmV0dXJuIHNlY3MuY291bnQoKSA8PSBUTGltOjptYXgoKTsKKyAg
ICByZXR1cm4gc2Vjcy5jb3VudCgpID49IFRMaW06Om1pbigpOworICB9CisKKyAgc3RhdGljIF9M
SUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIEZpbGVUaW1lVAorICBjb252ZXJ0X2Zyb21fdGlt
ZXNwZWMoVGltZVNwZWNUIHRtKSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwIHx8IHRtLnR2X25z
ZWMgPT0gMCkgeworICAgICAgcmV0dXJuIEZpbGVUaW1lVChmc19zZWNvbmRzKHRtLnR2X3NlYykg
KworICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9uPihmc19u
YW5vc2Vjb25kcyh0bS50dl9uc2VjKSkpOworICAgIH0gZWxzZSB7IC8vIHRtLnR2X3NlYyA8IDAK
KyAgICAgIGF1dG8gYWRqX3N1YnNlYyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+KGZzX3Nl
Y29uZHMoMSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnNfbmFub3NlY29uZHModG0udHZfbnNlYykpOworICAgICAgYXV0byBEdXIgPSBmc19z
ZWNvbmRzKHRtLnR2X3NlYyArIDEpIC0gYWRqX3N1YnNlYzsKKyAgICAgIHJldHVybiBGaWxlVGlt
ZVQoRHVyKTsKKyAgICB9CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgU3ViU2VjVD4KKyAgc3Rh
dGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wKKyAgc2V0X3RpbWVzX2NoZWNr
ZWQoVGltZVQqIHNlY19vdXQsIFN1YlNlY1QqIHN1YnNlY19vdXQsIEZpbGVUaW1lVCB0cCkgewor
ICAgIGF1dG8gZHVyID0gdHAudGltZV9zaW5jZV9lcG9jaCgpOworICAgIGF1dG8gc2VjX2R1ciA9
IGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oZHVyKTsKKyAgICBhdXRvIHN1YnNlY19kdXIgPSBk
dXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihkdXIgLSBzZWNfZHVyKTsKKyAgICAvLyBUaGUg
dHZfbnNlYyBhbmQgdHZfdXNlYyBmaWVsZHMgbXVzdCBub3QgYmUgbmVnYXRpdmUgc28gYWRqdXN0
IGFjY29yZGluZ2x5CisgICAgaWYgKHN1YnNlY19kdXIuY291bnQoKSA8IDApIHsKKyAgICAgIGlm
IChzZWNfZHVyLmNvdW50KCkgPiBtaW5fc2Vjb25kcykgeworICAgICAgICBzZWNfZHVyID0gc2Vj
X2R1ciAtIGZzX3NlY29uZHMoMSk7CisgICAgICAgIHN1YnNlY19kdXIgPSBzdWJzZWNfZHVyICsg
ZnNfc2Vjb25kcygxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN1YnNlY19kdXIgPSBmc19u
YW5vc2Vjb25kczo6emVybygpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2hlY2tlZF9z
ZXQoc2VjX291dCwgc2VjX2R1ci5jb3VudCgpKSAmJgorICAgICAgICAgICBjaGVja2VkX3NldChz
dWJzZWNfb3V0LCBzdWJzZWNfZHVyLmNvdW50KCkpOworICB9CisgIHN0YXRpYyBfTElCQ1BQX0NP
TlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGNvbnZlcnRfdG9fdGltZXNwZWMoVGltZVNwZWNUJiBk
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZpbGVUaW1lVCB0cCkgeworICAgIGlmICghaXNfcmVwcmVzZW50YWJsZSh0
cCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHNldF90aW1lc19jaGVja2VkKCZk
ZXN0LnR2X3NlYywgJmRlc3QudHZfbnNlYywgdHApOworICB9Cit9OworCit1c2luZyBmc190aW1l
ID0gdGltZV91dGlsPGZpbGVfdGltZV90eXBlLCB0aW1lX3QsIFRpbWVTcGVjPjsKKworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25zdCYgc3Qp
IHsgcmV0dXJuIHN0LnN0X210aW1lc3BlYzsgfQorVGltZVNwZWMgZXh0cmFjdF9hdGltZShTdGF0
VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0X2F0aW1lc3BlYzsgfQorI2Vsc2UKK1RpbWVTcGVj
IGV4dHJhY3RfbXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGltOyB9CitU
aW1lU3BlYyBleHRyYWN0X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfYXRp
bTsgfQorI2VuZGlmCisKKy8vIGFsbG93IHRoZSB1dGltZXMgaW1wbGVtZW50YXRpb24gdG8gY29t
cGlsZSBldmVuIGl0IHdlJ3JlIG5vdCBnb2luZworLy8gdG8gdXNlIGl0LgorCitib29sIHBvc2l4
X3V0aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMs
CisgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICB1c2luZyBuYW1lc3BhY2Ug
Y2hyb25vOworICBhdXRvIENvbnZlcnQgPSBbXShsb25nIG5zZWMpIHsKKyAgICB1c2luZyBpbnRf
dHlwZSA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDwgOjp0aW1ldmFsPigpLnR2X3VzZWMpOworICAg
IGF1dG8gZHVyID0gZHVyYXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KG5hbm9zZWNvbmRzKG5zZWMp
KS5jb3VudCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oZHVyKTsKKyAgfTsK
KyAgc3RydWN0IDo6dGltZXZhbCBDb252ZXJ0ZWRUU1syXSA9IHt7VFNbMF0udHZfc2VjLCBDb252
ZXJ0KFRTWzBdLnR2X25zZWMpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7VFNbMV0udHZfc2VjLCBDb252ZXJ0KFRTWzFdLnR2X25zZWMpfX07CisgIGlmICg6OnV0aW1l
cyhwLmNfc3RyKCksIENvbnZlcnRlZFRTKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJu
bygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworI2lmIGRl
ZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorYm9vbCBwb3NpeF91dGltZW5zYXQoY29uc3Qg
cGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAorICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6dXRpbWVuc2F0KEFUX0ZEQ1dELCBw
LmNfc3RyKCksIFRTLmRhdGEoKSwgMCkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8o
KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwor
Ym9vbCBzZXRfZmlsZV90aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAy
PiBjb25zdCYgVFMsCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisjaWYg
IWRlZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorICByZXR1cm4gcG9zaXhfdXRpbWVzKHAs
IFRTLCBlYyk7CisjZWxzZQorICByZXR1cm4gcG9zaXhfdXRpbWVuc2F0KHAsIFRTLCBlYyk7Cisj
ZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRhaWwKKwor
X0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0v
ZmlsZXN5c3RlbV9jb21tb24uaCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2RpcmVj
dG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkK
KyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNl
CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiAj
aW5jbHVkZSAiZmlsZXN5c3RlbV9jb21tb24uaCIgKi8KKworX0xJQkNQUF9CRUdJTl9OQU1FU1BB
Q0VfRklMRVNZU1RFTQorCituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKKyNpZiAh
ZGVmaW5lZChfTElCQ1BQX1dJTjMyQVBJKQorCisjaWYgZGVmaW5lZChEVF9CTEspCit0ZW1wbGF0
ZSA8Y2xhc3MgRGlyRW50VCwgY2xhc3MgPSBkZWNsdHlwZShEaXJFbnRUOjpkX3R5cGUpPgorc3Rh
dGljIGZpbGVfdHlwZSBnZXRfZmlsZV90eXBlKERpckVudFQqIGVudCwgaW50KSB7CisgIHN3aXRj
aCAoZW50LT5kX3R5cGUpIHsKKyAgY2FzZSBEVF9CTEs6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6
YmxvY2s7CisgIGNhc2UgRFRfQ0hSOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmNoYXJhY3RlcjsK
KyAgY2FzZSBEVF9ESVI6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworICBjYXNl
IERUX0ZJRk86CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6ZmlmbzsKKyAgY2FzZSBEVF9MTks6Cisg
ICAgcmV0dXJuIGZpbGVfdHlwZTo6c3ltbGluazsKKyAgY2FzZSBEVF9SRUc6CisgICAgcmV0dXJu
IGZpbGVfdHlwZTo6cmVndWxhcjsKKyAgY2FzZSBEVF9TT0NLOgorICAgIHJldHVybiBmaWxlX3R5
cGU6OnNvY2tldDsKKyAgLy8gVW5saWtlIGluIGxzdGF0LCBoaXR0aW5nICJ1bmtub3duIiBoZXJl
IHNpbXBseSBtZWFucyB0aGF0IHRoZSB1bmRlcmx5aW5nCisgIC8vIGZpbGVzeXN0ZW0gZG9lc24n
dCBzdXBwb3J0IGRfdHlwZS4gUmVwb3J0IGlzIGFzICdub25lJyBzbyB3ZSBjb3JyZWN0bHkKKyAg
Ly8gc2V0IHRoZSBjYWNoZSB0byBlbXB0eS4KKyAgY2FzZSBEVF9VTktOT1dOOgorICAgIGJyZWFr
OworICB9CisgIHJldHVybiBmaWxlX3R5cGU6Om5vbmU7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChE
VF9CTEspCisKK3RlbXBsYXRlIDxjbGFzcyBEaXJFbnRUPgorc3RhdGljIGZpbGVfdHlwZSBnZXRf
ZmlsZV90eXBlKERpckVudFQqIGVudCwgbG9uZykgeworICByZXR1cm4gZmlsZV90eXBlOjpub25l
OworfQorCitzdGF0aWMgcGFpcjxzdHJpbmdfdmlldywgZmlsZV90eXBlPiBwb3NpeF9yZWFkZGly
KERJUiogZGlyX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgc3RydWN0IGRpcmVudCogZGlyX2VudHJ5
X3B0ciA9IG51bGxwdHI7CisgIGVycm5vID0gMDsgLy8gemVybyBlcnJubyBpbiBvcmRlciB0byBk
ZXRlY3QgZXJyb3JzCisgIGVjLmNsZWFyKCk7CisgIGlmICgoZGlyX2VudHJ5X3B0ciA9IDo6cmVh
ZGRpcihkaXJfc3RyZWFtKSkgPT0gbnVsbHB0cikgeworICAgIGlmIChlcnJubykKKyAgICAgIGVj
ID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB7fTsKKyAgfSBlbHNlIHsKKyAgICByZXR1
cm4ge2Rpcl9lbnRyeV9wdHItPmRfbmFtZSwgZ2V0X2ZpbGVfdHlwZShkaXJfZW50cnlfcHRyLCAw
KX07CisgIH0KK30KKyNlbHNlCisKK3N0YXRpYyBmaWxlX3R5cGUgZ2V0X2ZpbGVfdHlwZShjb25z
dCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgLy9hdXRvIGF0dHJzID0gZGF0YS5kd0ZpbGVB
dHRyaWJ1dGVzOworICAvLyBGSVhNRShFcmljV0YpCisgIHJldHVybiBmaWxlX3R5cGU6OnVua25v
d247Cit9CitzdGF0aWMgdWludG1heF90IGdldF9maWxlX3NpemUoY29uc3QgV0lOMzJfRklORF9E
QVRBJiBkYXRhKSB7CisgIHJldHVybiAoZGF0YS5uRmlsZVNpemVIaWdoICogKE1BWERXT1JEICsg
MSkpICsgZGF0YS5uRmlsZVNpemVMb3c7Cit9CitzdGF0aWMgZmlsZV90aW1lX3R5cGUgZ2V0X3dy
aXRlX3RpbWUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIFVMQVJHRV9JTlRFR0VS
IHRtcDsKKyAgY29uc3QgRklMRVRJTUUmIHRpbWUgPSBkYXRhLmZ0TGFzdFdyaXRlVGltZTsKKyAg
dG1wLnUuTG93UGFydCA9IHRpbWUuZHdMb3dEYXRlVGltZTsKKyAgdG1wLnUuSGlnaFBhcnQgPSB0
aW1lLmR3SGlnaERhdGVUaW1lOworICByZXR1cm4gZmlsZV90aW1lX3R5cGUoZmlsZV90aW1lX3R5
cGU6OmR1cmF0aW9uKHRtcC5RdWFkUGFydCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OkVycm9ySGFuZGxlcjsK
KworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKK2NsYXNzIF9fZGlyX3N0cmVhbSB7Citw
dWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJlYW0mIG9wZXJh
dG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9zdHJlYW0oX19k
aXJfc3RyZWFtJiYgX19kcykgbm9leGNlcHQgOiBfX3N0cmVhbV8oX19kcy5fX3N0cmVhbV8pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jvb3RfKG1v
dmUoX19kcy5fX3Jvb3RfKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZW50cnlfKG1vdmUoX19kcy5fX2VudHJ5XykpIHsKKyAgICBfX2RzLl9fc3Ry
ZWFtXyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICB9CisKKyAgX19kaXJfc3RyZWFtKGNvbnN0
IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUmIGVjKQorICAg
ICAgOiBfX3N0cmVhbV8oSU5WQUxJRF9IQU5ETEVfVkFMVUUpLCBfX3Jvb3RfKHJvb3QpIHsKKyAg
ICBfX3N0cmVhbV8gPSA6OkZpbmRGaXJzdEZpbGUocm9vdC5jX3N0cigpLCAmX19kYXRhXyk7Cisg
ICAgaWYgKF9fc3RyZWFtXyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgZWMgPSBl
cnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0ZWdvcnkoKSk7CisgICAgICBj
b25zdCBib29sIGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCA9CisgICAgICAgICAgYm9vbChvcHRz
ICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOworICAgICAgaWYg
KGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCAmJiBlYy52YWx1ZSgpID09IEVSUk9SX0FDQ0VTU19E
RU5JRUQpCisgICAgICAgIGVjLmNsZWFyKCk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisK
KyAgfl9fZGlyX3N0cmVhbSgpIG5vZXhjZXB0IHsKKyAgICBpZiAoX19zdHJlYW1fID09IElOVkFM
SURfSEFORExFX1ZBTFVFKQorICAgICAgcmV0dXJuOworICAgIGNsb3NlKCk7CisgIH0KKworICBi
b29sIGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0cmVhbV8gIT0gSU5WQUxJRF9I
QU5ETEVfVkFMVUU7IH0KKworICBib29sIGFkdmFuY2UoZXJyb3JfY29kZSYgZWMpIHsKKyAgICB3
aGlsZSAoOjpGaW5kTmV4dEZpbGUoX19zdHJlYW1fLCAmX19kYXRhXykpIHsKKyAgICAgIGlmICgh
c3RyY21wKF9fZGF0YV8uY0ZpbGVOYW1lLCAiLiIpIHx8IHN0cmNtcChfX2RhdGFfLmNGaWxlTmFt
ZSwgIi4uIikpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgLy8gRklYTUU6IENhY2hlIG1vcmUg
b2YgdGhpcworICAgICAgLy9kaXJlY3RvcnlfZW50cnk6Ol9fY2FjaGVkX2RhdGEgY2RhdGE7Cisg
ICAgICAvL2NkYXRhLl9fdHlwZV8gPSBnZXRfZmlsZV90eXBlKF9fZGF0YV8pOworICAgICAgLy9j
ZGF0YS5fX3NpemVfID0gZ2V0X2ZpbGVfc2l6ZShfX2RhdGFfKTsKKyAgICAgIC8vY2RhdGEuX193
cml0ZV90aW1lXyA9IGdldF93cml0ZV90aW1lKF9fZGF0YV8pOworICAgICAgX19lbnRyeV8uX19h
c3NpZ25faXRlcl9lbnRyeSgKKyAgICAgICAgICBfX3Jvb3RfIC8gX19kYXRhXy5jRmlsZU5hbWUs
CisgICAgICAgICAgZGlyZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9pdGVyX3Jlc3VsdChkZXRhaWw6
OmdldF9maWxlX3R5cGUoX19kYXRhKSkpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkpOwor
ICAgIGNsb3NlKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKK3ByaXZhdGU6CisgIGVycm9y
X2NvZGUgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBlYzsKKyAgICBpZiAoITo6
RmluZENsb3NlKF9fc3RyZWFtXykpCisgICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJy
b3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgpKTsKKyAgICBfX3N0cmVhbV8gPSBJTlZBTElEX0hBTkRM
RV9WQUxVRTsKKyAgICByZXR1cm4gZWM7CisgIH0KKworICBIQU5ETEUgX19zdHJlYW1fe0lOVkFM
SURfSEFORExFX1ZBTFVFfTsKKyAgV0lOMzJfRklORF9EQVRBIF9fZGF0YV87CisKK3B1YmxpYzoK
KyAgcGF0aCBfX3Jvb3RfOworICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2Vsc2UK
K2NsYXNzIF9fZGlyX3N0cmVhbSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVsZXRl
OworICBfX2Rpcl9zdHJlYW0mIG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRlbGV0
ZTsKKworICBfX2Rpcl9zdHJlYW0oX19kaXJfc3RyZWFtJiYgb3RoZXIpIG5vZXhjZXB0IDogX19z
dHJlYW1fKG90aGVyLl9fc3RyZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Jvb3RfKG1vdmUob3RoZXIuX19yb290XykpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShvdGhl
ci5fX2VudHJ5XykpIHsKKyAgICBvdGhlci5fX3N0cmVhbV8gPSBudWxscHRyOworICB9CisKKyAg
X19kaXJfc3RyZWFtKGNvbnN0IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVy
cm9yX2NvZGUmIGVjKQorICAgICAgOiBfX3N0cmVhbV8obnVsbHB0ciksIF9fcm9vdF8ocm9vdCkg
eworICAgIGlmICgoX19zdHJlYW1fID0gOjpvcGVuZGlyKHJvb3QuY19zdHIoKSkpID09IG51bGxw
dHIpIHsKKyAgICAgIGVjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgICAgICBjb25zdCBi
b29sIGFsbG93X2VhY2VzcyA9CisgICAgICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29wdGlv
bnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOworICAgICAgaWYgKGFsbG93X2VhY2VzcyAmJiBl
Yy52YWx1ZSgpID09IEVBQ0NFUykKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYWR2YW5jZShlYyk7CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9leGNl
cHQgeworICAgIGlmIChfX3N0cmVhbV8pCisgICAgICBjbG9zZSgpOworICB9CisKKyAgYm9vbCBn
b29kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19zdHJlYW1fICE9IG51bGxwdHI7IH0KKwor
ICBib29sIGFkdmFuY2UoZXJyb3JfY29kZSYgZWMpIHsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgYXV0byBzdHJfdHlwZV9wYWlyID0gZGV0YWlsOjpwb3NpeF9yZWFkZGlyKF9fc3RyZWFtXywg
ZWMpOworICAgICAgYXV0byYgc3RyID0gc3RyX3R5cGVfcGFpci5maXJzdDsKKyAgICAgIGlmIChz
dHIgPT0gIi4iIHx8IHN0ciA9PSAiLi4iKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfSBl
bHNlIGlmIChlYyB8fCBzdHIuZW1wdHkoKSkgeworICAgICAgICBjbG9zZSgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICBfX2VudHJ5Xy5fX2Fzc2lnbl9p
dGVyX2VudHJ5KAorICAgICAgICAgICAgX19yb290XyAvIHN0ciwKKyAgICAgICAgICAgIGRpcmVj
dG9yeV9lbnRyeTo6X19jcmVhdGVfaXRlcl9yZXN1bHQoc3RyX3R5cGVfcGFpci5zZWNvbmQpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9CisKK3ByaXZhdGU6Cisg
IGVycm9yX2NvZGUgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBtX2VjOworICAg
IGlmICg6OmNsb3NlZGlyKF9fc3RyZWFtXykgPT0gLTEpCisgICAgICBtX2VjID0gZGV0YWlsOjpj
YXB0dXJlX2Vycm5vKCk7CisgICAgX19zdHJlYW1fID0gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9l
YzsKKyAgfQorCisgIERJUiogX19zdHJlYW1fe251bGxwdHJ9OworCitwdWJsaWM6CisgIHBhdGgg
X19yb290XzsKKyAgZGlyZWN0b3J5X2VudHJ5IF9fZW50cnlfOworfTsKKyNlbmRpZgorCisvLyBk
aXJlY3RvcnlfaXRlcmF0b3IKKworZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRlcmF0
b3IoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzKSB7CisgIEVycm9ySGFuZGxl
cjx2b2lkPiBlcnIoImRpcmVjdG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5X2l0ZXJhdG9yKC4uLiki
LCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgX19pbXBfID0gbWFrZV9zaGFyZWQ8
X19kaXJfc3RyZWFtPihwLCBvcHRzLCBtX2VjKTsKKyAgaWYgKGVjKQorICAgICplYyA9IG1fZWM7
CisgIGlmICghX19pbXBfLT5nb29kKCkpIHsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBpZiAo
bV9lYykKKyAgICAgIGVyci5yZXBvcnQobV9lYyk7CisgIH0KK30KKworZGlyZWN0b3J5X2l0ZXJh
dG9yJiBkaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7Cisg
IF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIkF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGFuIGludmFs
aWQgaXRlcmF0b3IiKTsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0ZXJh
dG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoIV9f
aW1wXy0+YWR2YW5jZShtX2VjKSkgeworICAgIHBhdGggcm9vdCA9IG1vdmUoX19pbXBfLT5fX3Jv
b3RfKTsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5yZXBv
cnQobV9lYywgImF0IHJvb3QgXCIlc1wiIiwgcm9vdCk7CisgIH0KKyAgcmV0dXJuICp0aGlzOwor
fQorCitkaXJlY3RvcnlfZW50cnkgY29uc3QmIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJlZmVy
ZW5jZSgpIGNvbnN0IHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0byBk
ZXJlZmVyZW5jZSBhbiBpbnZhbGlkIGl0ZXJhdG9yIik7CisgIHJldHVybiBfX2ltcF8tPl9fZW50
cnlfOworfQorCisvLyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK3N0cnVjdCByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3NoYXJlZF9pbXAgeworICBzdGFjazxfX2Rpcl9z
dHJlYW0+IF9fc3RhY2tfOworICBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdGlvbnNfOworfTsKKwor
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cigKKyAgICBjb25zdCBwYXRoJiBwLCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHQsIGVycm9yX2NvZGUq
IGVjKQorICAgIDogX19pbXBfKG51bGxwdHIpLCBfX3JlY18odHJ1ZSkgeworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIiwgZWMsICZwKTsKKwor
ICBlcnJvcl9jb2RlIG1fZWM7CisgIF9fZGlyX3N0cmVhbSBuZXdfcyhwLCBvcHQsIG1fZWMpOwor
ICBpZiAobV9lYykKKyAgICBlcnIucmVwb3J0KG1fZWMpOworICBpZiAobV9lYyB8fCAhbmV3X3Mu
Z29vZCgpKQorICAgIHJldHVybjsKKworICBfX2ltcF8gPSBtYWtlX3NoYXJlZDxfX3NoYXJlZF9p
bXA+KCk7CisgIF9faW1wXy0+X19vcHRpb25zXyA9IG9wdDsKKyAgX19pbXBfLT5fX3N0YWNrXy5w
dXNoKG1vdmUobmV3X3MpKTsKK30KKwordm9pZCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
OjpfX3BvcChlcnJvcl9jb2RlKiBlYykgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJQb3Bw
aW5nIHRoZSBlbmQgaXRlcmF0b3IiKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworICBf
X2ltcF8tPl9fc3RhY2tfLnBvcCgpOworICBpZiAoX19pbXBfLT5fX3N0YWNrXy5zaXplKCkgPT0g
MCkKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgZWxzZQorICAgIF9fYWR2YW5jZShlYyk7Cit9CisK
K2RpcmVjdG9yeV9vcHRpb25zIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wdGlvbnMo
KSBjb25zdCB7CisgIHJldHVybiBfX2ltcF8tPl9fb3B0aW9uc187Cit9CisKK2ludCByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpkZXB0aCgpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1wXy0+
X19zdGFja18uc2l6ZSgpIC0gMTsKK30KKworY29uc3QgZGlyZWN0b3J5X2VudHJ5JiByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICByZXR1cm4g
X19pbXBfLT5fX3N0YWNrXy50b3AoKS5fX2VudHJ5XzsKK30KKworcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvciYKK3JlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50KGVy
cm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHJlY3Vy
c2lvbl9wZW5kaW5nKCkpIHsKKyAgICBpZiAoX190cnlfcmVjdXJzaW9uKGVjKSB8fCAoZWMgJiYg
KmVjKSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgfQorICBfX3JlY18gPSB0cnVlOworICBfX2Fk
dmFuY2UoZWMpOworICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcjo6X19hZHZhbmNlKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2
b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVj
KTsKKworICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3IgZW5kX2l0OworICBhdXRvJiBzdGFjayA9
IF9faW1wXy0+X19zdGFja187CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgd2hpbGUgKHN0YWNrLnNp
emUoKSA+IDApIHsKKyAgICBpZiAoc3RhY2sudG9wKCkuYWR2YW5jZShtX2VjKSkKKyAgICAgIHJl
dHVybjsKKyAgICBpZiAobV9lYykKKyAgICAgIGJyZWFrOworICAgIHN0YWNrLnBvcCgpOworICB9
CisKKyAgaWYgKG1fZWMpIHsKKyAgICBwYXRoIHJvb3QgPSBtb3ZlKHN0YWNrLnRvcCgpLl9fcm9v
dF8pOworICAgIF9faW1wXy5yZXNldCgpOworICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJvb3Qg
XCIlc1wiIiwgcm9vdCk7CisgIH0gZWxzZSB7CisgICAgX19pbXBfLnJlc2V0KCk7CisgIH0KK30K
KworYm9vbCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3RyeV9yZWN1cnNpb24oZXJy
b3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIiwgZWMpOworCisgIGJvb2wgcmVjX3N5bSA9IGJv
b2wob3B0aW9ucygpICYgZGlyZWN0b3J5X29wdGlvbnM6OmZvbGxvd19kaXJlY3Rvcnlfc3ltbGlu
ayk7CisKKyAgYXV0byYgY3Vycl9pdCA9IF9faW1wXy0+X19zdGFja18udG9wKCk7CisKKyAgYm9v
bCBza2lwX3JlYyA9IGZhbHNlOworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICghcmVjX3N5bSkg
eworICAgIGZpbGVfc3RhdHVzIHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfc3ltX2Z0KCZtX2Vj
KSk7CisgICAgaWYgKG1fZWMgJiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xlYXIo
KTsKKyAgICBpZiAobV9lYyB8fCBpc19zeW1saW5rKHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0KSkK
KyAgICAgIHNraXBfcmVjID0gdHJ1ZTsKKyAgfSBlbHNlIHsKKyAgICBmaWxlX3N0YXR1cyBzdChj
dXJyX2l0Ll9fZW50cnlfLl9fZ2V0X2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3RhdHVz
X2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8fCAhaXNfZGly
ZWN0b3J5KHN0KSkKKyAgICAgIHNraXBfcmVjID0gdHJ1ZTsKKyAgfQorCisgIGlmICghc2tpcF9y
ZWMpIHsKKyAgICBfX2Rpcl9zdHJlYW0gbmV3X2l0KGN1cnJfaXQuX19lbnRyeV8ucGF0aCgpLCBf
X2ltcF8tPl9fb3B0aW9uc18sIG1fZWMpOworICAgIGlmIChuZXdfaXQuZ29vZCgpKSB7CisgICAg
ICBfX2ltcF8tPl9fc3RhY2tfLnB1c2gobW92ZShuZXdfaXQpKTsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgfQorICBpZiAobV9lYykgeworICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFjZXNz
ID0KKyAgICAgICAgYm9vbChfX2ltcF8tPl9fb3B0aW9uc18gJiBkaXJlY3Rvcnlfb3B0aW9uczo6
c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgaWYgKG1fZWMudmFsdWUoKSA9PSBFQUNDRVMg
JiYgYWxsb3dfZWFjZXNzKSB7CisgICAgICBpZiAoZWMpCisgICAgICAgIGVjLT5jbGVhcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICBwYXRoIGF0X2VudCA9IG1vdmUoY3Vycl9pdC5fX2VudHJ5Xy5f
X3BfKTsKKyAgICAgIF9faW1wXy5yZXNldCgpOworICAgICAgZXJyLnJlcG9ydChtX2VjLCAiYXR0
ZW1wdGluZyByZWN1cnNpb24gaW50byBcIiVzXCIiLCBhdF9lbnQpOworICAgIH0KKyAgfQorICBy
ZXR1cm4gZmFsc2U7Cit9CisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8q
IC0tIEVORCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworLyogLS0g
QkVHSU4gZmlsZXN5c3RlbS9pbnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qID09PS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS09PT0KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBfX211bG90aTQsIGFuZCBp
cyBzdG9sZW4gZnJvbSB0aGUgY29tcGlsZXJfcnQgbGlicmFyeS4KKyAqCisgKiBGSVhNRTogd2Ug
c3RlYWwgYW5kIHJlLWNvbXBpbGUgaXQgaW50byBmaWxlc3lzdGVtLCB3aGljaCB1c2VzIF9faW50
MTI4X3QsCisgKiBhbmQgcmVxdWlyZXMgdGhpcyBidWlsdGluIHdoZW4gc2FuaXRpemVkLiBTZWUg
bGx2bS5vcmcvUFIzMDY0MworICoKKyAqID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisvKiAj
aW5jbHVkZSAiX19jb25maWciICovCisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2lmICFkZWZpbmVk
KF9MSUJDUFBfSEFTX05PX0lOVDEyOCkKKworZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKChub19z
YW5pdGl6ZSgidW5kZWZpbmVkIikpKSBfTElCQ1BQX0ZVTkNfVklTCitfX2ludDEyOF90IF9fbXVs
b3RpNChfX2ludDEyOF90IGEsIF9faW50MTI4X3QgYiwgaW50KiBvdmVyZmxvdykgeworICBjb25z
dCBpbnQgTiA9IChpbnQpKHNpemVvZihfX2ludDEyOF90KSAqIENIQVJfQklUKTsKKyAgY29uc3Qg
X19pbnQxMjhfdCBNSU4gPSAoX19pbnQxMjhfdCkxIDw8IChOIC0gMSk7CisgIGNvbnN0IF9faW50
MTI4X3QgTUFYID0gfk1JTjsKKyAgKm92ZXJmbG93ID0gMDsKKyAgX19pbnQxMjhfdCByZXN1bHQg
PSBhICogYjsKKyAgaWYgKGEgPT0gTUlOKSB7CisgICAgaWYgKGIgIT0gMCAmJiBiICE9IDEpCisg
ICAgICAqb3ZlcmZsb3cgPSAxOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKGIgPT0g
TUlOKSB7CisgICAgaWYgKGEgIT0gMCAmJiBhICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOwor
ICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgX19pbnQxMjhfdCBzYSA9IGEgPj4gKE4gLSAxKTsK
KyAgX19pbnQxMjhfdCBhYnNfYSA9IChhIF4gc2EpIC0gc2E7CisgIF9faW50MTI4X3Qgc2IgPSBi
ID4+IChOIC0gMSk7CisgIF9faW50MTI4X3QgYWJzX2IgPSAoYiBeIHNiKSAtIHNiOworICBpZiAo
YWJzX2EgPCAyIHx8IGFic19iIDwgMikKKyAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc2EgPT0g
c2IpIHsKKyAgICBpZiAoYWJzX2EgPiBNQVggLyBhYnNfYikKKyAgICAgICpvdmVyZmxvdyA9IDE7
CisgIH0gZWxzZSB7CisgICAgaWYgKGFic19hID4gTUlOIC8gLWFic19iKQorICAgICAgKm92ZXJm
bG93ID0gMTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYKKworLyogLS0gRU5E
IGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxl
c3lzdGVtL29wZXJhdGlvbnMuY3BwIC0tICovCisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtIiAq
LworI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPGZzdHJl
YW0+CisjaW5jbHVkZSA8cmFuZG9tPiAvKiBmb3IgdW5pcXVlX3BhdGggKi8KKyNpbmNsdWRlIDxz
dHJpbmdfdmlldz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
aW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjbGltaXRzPgorCisvKiAjaW5jbHVkZSAiZmls
ZXN5c3RlbV9jb21tb24uaCIgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+Cisj
aW5jbHVkZSA8ZmNudGwuaD4gLyogdmFsdWVzIGZvciBmY2htb2RhdCAqLworCisjaWYgZGVmaW5l
ZChfX2xpbnV4X18pCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2lmIExJTlVYX1ZFUlNJ
T05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAzMykKKyNpbmNsdWRlIDxzeXMvc2VuZGZp
bGUuaD4KKyNkZWZpbmUgX0xJQkNQUF9VU0VfU0VOREZJTEUKKyNlbmRpZgorI2VsaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IF9faGFzX2luY2x1ZGUoPGNvcHlmaWxlLmg+KQorI2luY2x1ZGUgPGNv
cHlmaWxlLmg+CisjZGVmaW5lIF9MSUJDUFBfVVNFX0NPUFlGSUxFCisjZW5kaWYKKworI2lmICFk
ZWZpbmVkKENMT0NLX1JFQUxUSU1FKQorI2luY2x1ZGUgPHN5cy90aW1lLmg+IC8vIGZvciBnZXR0
aW1lb2ZkYXkgYW5kIHRpbWV2YWwKKyNlbmRpZiAvLyAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkK
KworI2lmIGRlZmluZWQoX19FTEZfXykgJiYgZGVmaW5lZChfTElCQ1BQX0xJTktfUlRfTElCKQor
I3ByYWdtYSBjb21tZW50KGxpYiwgInJ0IikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTElCQ1BQ
X0NPTVBJTEVSX0dDQykKKyNpZiBfR05VQ19WRVIgPCA1MDAKKyNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIKKyNlbmRpZgorI2VuZGlm
CisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIHsKK25h
bWVzcGFjZSBwYXJzZXIgeworCit1c2luZyBzdHJpbmdfdmlld190ID0gcGF0aDo6X19zdHJpbmdf
dmlldzsKK3VzaW5nIHN0cmluZ192aWV3X3BhaXIgPSBwYWlyPHN0cmluZ192aWV3X3QsIHN0cmlu
Z192aWV3X3Q+OwordXNpbmcgUG9zUHRyID0gcGF0aDo6dmFsdWVfdHlwZSBjb25zdCo7CisKK3N0
cnVjdCBQYXRoUGFyc2VyIHsKKyAgZW51bSBQYXJzZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgewor
ICAgIC8vIFplcm8gaXMgYSBzcGVjaWFsIHNlbnRpbmVsIHZhbHVlIHVzZWQgYnkgZGVmYXVsdCBj
b25zdHJ1Y3RlZCBpdGVyYXRvcnMuCisgICAgUFNfQmVmb3JlQmVnaW4gPSBwYXRoOjppdGVyYXRv
cjo6X0JlZm9yZUJlZ2luLAorICAgIFBTX0luUm9vdE5hbWUgPSBwYXRoOjppdGVyYXRvcjo6X0lu
Um9vdE5hbWUsCisgICAgUFNfSW5Sb290RGlyID0gcGF0aDo6aXRlcmF0b3I6Ol9JblJvb3REaXIs
CisgICAgUFNfSW5GaWxlbmFtZXMgPSBwYXRoOjppdGVyYXRvcjo6X0luRmlsZW5hbWVzLAorICAg
IFBTX0luVHJhaWxpbmdTZXAgPSBwYXRoOjppdGVyYXRvcjo6X0luVHJhaWxpbmdTZXAsCisgICAg
UFNfQXRFbmQgPSBwYXRoOjppdGVyYXRvcjo6X0F0RW5kCisgIH07CisKKyAgY29uc3Qgc3RyaW5n
X3ZpZXdfdCBQYXRoOworICBzdHJpbmdfdmlld190IFJhd0VudHJ5OworICBQYXJzZXJTdGF0ZSBT
dGF0ZTsKKworcHJpdmF0ZToKKyAgUGF0aFBhcnNlcihzdHJpbmdfdmlld190IFAsIFBhcnNlclN0
YXRlIFN0YXRlKSBub2V4Y2VwdCA6IFBhdGgoUCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZShTdGF0ZSkge30KKworcHVi
bGljOgorICBQYXRoUGFyc2VyKHN0cmluZ192aWV3X3QgUCwgc3RyaW5nX3ZpZXdfdCBFLCB1bnNp
Z25lZCBjaGFyIFMpCisgICAgICA6IFBhdGgoUCksIFJhd0VudHJ5KEUpLCBTdGF0ZShzdGF0aWNf
Y2FzdDxQYXJzZXJTdGF0ZT4oUykpIHsKKyAgICAvLyBTIGNhbm5vdCBiZSAnMCcgb3IgUFNfQmVm
b3JlQmVnaW4uCisgIH0KKworICBzdGF0aWMgUGF0aFBhcnNlciBDcmVhdGVCZWdpbihzdHJpbmdf
dmlld190IFApIG5vZXhjZXB0IHsKKyAgICBQYXRoUGFyc2VyIFBQKFAsIFBTX0JlZm9yZUJlZ2lu
KTsKKyAgICBQUC5pbmNyZW1lbnQoKTsKKyAgICByZXR1cm4gUFA7CisgIH0KKworICBzdGF0aWMg
UGF0aFBhcnNlciBDcmVhdGVFbmQoc3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0
aFBhcnNlciBQUChQLCBQU19BdEVuZCk7CisgICAgcmV0dXJuIFBQOworICB9CisKKyAgUG9zUHRy
IHBlZWsoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgYXV0byBUa0VuZCA9IGdldE5leHRUb2tlblN0
YXJ0UG9zKCk7CisgICAgYXV0byBFbmQgPSBnZXRBZnRlckJhY2soKTsKKyAgICByZXR1cm4gVGtF
bmQgPT0gRW5kID8gbnVsbHB0ciA6IFRrRW5kOworICB9CisKKyAgdm9pZCBpbmNyZW1lbnQoKSBu
b2V4Y2VwdCB7CisgICAgY29uc3QgUG9zUHRyIEVuZCA9IGdldEFmdGVyQmFjaygpOworICAgIGNv
bnN0IFBvc1B0ciBTdGFydCA9IGdldE5leHRUb2tlblN0YXJ0UG9zKCk7CisgICAgaWYgKFN0YXJ0
ID09IEVuZCkKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfQXRFbmQpOworCisgICAgc3dpdGNo
IChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46IHsKKyAgICAgIFBvc1B0ciBUa0Vu
ZCA9IGNvbnN1bWVTZXBhcmF0b3IoU3RhcnQsIEVuZCk7CisgICAgICBpZiAoVGtFbmQpCisgICAg
ICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290RGlyLCBTdGFydCwgVGtFbmQpOworICAgICAg
ZWxzZQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTdGFydCwgY29u
c3VtZU5hbWUoU3RhcnQsIEVuZCkpOworICAgIH0KKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAg
ICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShT
dGFydCwgRW5kKSk7CisKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOiB7CisgICAgICBQb3NQdHIg
U2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihTdGFydCwgRW5kKTsKKyAgICAgIGlmIChTZXBFbmQg
IT0gRW5kKSB7CisgICAgICAgIFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgRW5k
KTsKKyAgICAgICAgaWYgKFRrRW5kKQorICAgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5G
aWxlbmFtZXMsIFNlcEVuZCwgVGtFbmQpOworICAgICAgfQorICAgICAgcmV0dXJuIG1ha2VTdGF0
ZShQU19JblRyYWlsaW5nU2VwLCBTdGFydCwgU2VwRW5kKTsKKyAgICB9CisKKyAgICBjYXNlIFBT
X0luVHJhaWxpbmdTZXA6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0F0RW5kKTsKKworICAg
IGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgX0xJQkNQUF9V
TlJFQUNIQUJMRSgpOworICAgIH0KKyAgfQorCisgIHZvaWQgZGVjcmVtZW50KCkgbm9leGNlcHQg
eworICAgIGNvbnN0IFBvc1B0ciBSRW5kID0gZ2V0QmVmb3JlRnJvbnQoKTsKKyAgICBjb25zdCBQ
b3NQdHIgUlN0YXJ0ID0gZ2V0Q3VycmVudFRva2VuU3RhcnRQb3MoKSAtIDE7CisgICAgaWYgKFJT
dGFydCA9PSBSRW5kKSAvLyB3ZSdyZSBkZWNyZW1lbnRpbmcgdGhlIGJlZ2luCisgICAgICByZXR1
cm4gbWFrZVN0YXRlKFBTX0JlZm9yZUJlZ2luKTsKKworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAg
ICBjYXNlIFBTX0F0RW5kOiB7CisgICAgICAvLyBUcnkgdG8gY29uc3VtZSBhIHRyYWlsaW5nIHNl
cGFyYXRvciBvciByb290IGRpcmVjdG9yeSBmaXJzdC4KKyAgICAgIGlmIChQb3NQdHIgU2VwRW5k
ID0gY29uc3VtZVNlcGFyYXRvcihSU3RhcnQsIFJFbmQpKSB7CisgICAgICAgIGlmIChTZXBFbmQg
PT0gUkVuZCkKKyAgICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgUGF0aC5k
YXRhKCksIFJTdGFydCArIDEpOworICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxp
bmdTZXAsIFNlcEVuZCArIDEsIFJTdGFydCArIDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
UG9zUHRyIFRrU3RhcnQgPSBjb25zdW1lTmFtZShSU3RhcnQsIFJFbmQpOworICAgICAgICByZXR1
cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBUa1N0YXJ0ICsgMSwgUlN0YXJ0ICsgMSk7Cisg
ICAgICB9CisgICAgfQorICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiBt
YWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIGNvbnN1bWVOYW1lKFJTdGFydCwgUkVuZCkgKyAxLAor
ICAgICAgICAgICAgICAgICAgICAgICBSU3RhcnQgKyAxKTsKKyAgICBjYXNlIFBTX0luRmlsZW5h
bWVzOiB7CisgICAgICBQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihSU3RhcnQsIFJF
bmQpOworICAgICAgaWYgKFNlcEVuZCA9PSBSRW5kKQorICAgICAgICByZXR1cm4gbWFrZVN0YXRl
KFBTX0luUm9vdERpciwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOworICAgICAgUG9zUHRyIFRr
RW5kID0gY29uc3VtZU5hbWUoU2VwRW5kLCBSRW5kKTsKKyAgICAgIHJldHVybiBtYWtlU3RhdGUo
UFNfSW5GaWxlbmFtZXMsIFRrRW5kICsgMSwgU2VwRW5kICsgMSk7CisgICAgfQorICAgIGNhc2Ug
UFNfSW5Sb290RGlyOgorICAgICAgLy8gcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3ROYW1lLCBQ
YXRoLmRhdGEoKSwgUlN0YXJ0ICsgMSk7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNh
c2UgUFNfQmVmb3JlQmVnaW46CisgICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQor
ICB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSB2aWV3IHdpdGggdGhlICJwcmVmZXJyZWQgcmVw
cmVzZW50YXRpb24iIG9mIHRoZSBjdXJyZW50CisgIC8vLyAgIGVsZW1lbnQuIEZvciBleGFtcGxl
IHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHJlcHJlc2VudGVkIGFzIGEgJy4nCisgIHN0cmluZ192
aWV3X3Qgb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsK
KyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgIGNhc2UgUFNfQXRFbmQ6CisgICAgICByZXR1
cm4gIiI7CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAgICByZXR1cm4gIi8iOworICAgIGNh
c2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIFBTX0luUm9v
dE5hbWU6CisgICAgY2FzZSBQU19JbkZpbGVuYW1lczoKKyAgICAgIHJldHVybiBSYXdFbnRyeTsK
KyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgIT0gUFNfQmVm
b3JlQmVnaW4gJiYgU3RhdGUgIT0gUFNfQXRFbmQ7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVy
YXRvcisrKCkgbm9leGNlcHQgeworICAgIGluY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsK
KyAgfQorCisgIFBhdGhQYXJzZXImIG9wZXJhdG9yLS0oKSBub2V4Y2VwdCB7CisgICAgZGVjcmVt
ZW50KCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgYm9vbCBhdEVuZCgpIGNvbnN0IG5v
ZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgPT0gUFNfQXRFbmQ7CisgIH0KKworICBib29sIGlu
Um9vdERpcigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgPT0gUFNfSW5Sb290
RGlyOworICB9CisKKyAgYm9vbCBpblJvb3ROYW1lKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBTdGF0ZSA9PSBQU19JblJvb3ROYW1lOworICB9CisKKyAgYm9vbCBpblJvb3RQYXRoKCkg
Y29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBpblJvb3ROYW1lKCkgfHwgaW5Sb290RGlyKCk7
CisgIH0KKworcHJpdmF0ZToKKyAgdm9pZCBtYWtlU3RhdGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUs
IFBvc1B0ciBTdGFydCwgUG9zUHRyIEVuZCkgbm9leGNlcHQgeworICAgIFN0YXRlID0gTmV3U3Rh
dGU7CisgICAgUmF3RW50cnkgPSBzdHJpbmdfdmlld190KFN0YXJ0LCBFbmQgLSBTdGFydCk7Cisg
IH0KKyAgdm9pZCBtYWtlU3RhdGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUpIG5vZXhjZXB0IHsKKyAg
ICBTdGF0ZSA9IE5ld1N0YXRlOworICAgIFJhd0VudHJ5ID0ge307CisgIH0KKworICBQb3NQdHIg
Z2V0QWZ0ZXJCYWNrKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gUGF0aC5kYXRhKCkgKyBQYXRo
LnNpemUoKTsgfQorCisgIFBvc1B0ciBnZXRCZWZvcmVGcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsg
cmV0dXJuIFBhdGguZGF0YSgpIC0gMTsgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRl
ciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgLy8vICAgbGV4
ZWQgZWxlbWVudC4KKyAgUG9zUHRyIGdldE5leHRUb2tlblN0YXJ0UG9zKCkgY29uc3Qgbm9leGNl
cHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAg
ICAgcmV0dXJuIFBhdGguZGF0YSgpOworICAgIGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNl
IFBTX0luUm9vdERpcjoKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAgICAgcmV0dXJuICZS
YXdFbnRyeS5iYWNrKCkgKyAxOworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICBjYXNl
IFBTX0F0RW5kOgorICAgICAgcmV0dXJuIGdldEFmdGVyQmFjaygpOworICAgIH0KKyAgICBfTElC
Q1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICAvLy8gXGJyaWVmIFJldHVybiBhIHBvaW50ZXIg
dG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudGx5IGxleGVkCisgIC8vLyAgIGVs
ZW1lbnQuCisgIFBvc1B0ciBnZXRDdXJyZW50VG9rZW5TdGFydFBvcygpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICBj
YXNlIFBTX0luUm9vdE5hbWU6CisgICAgICByZXR1cm4gJlBhdGguZnJvbnQoKTsKKyAgICBjYXNl
IFBTX0luUm9vdERpcjoKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAgIGNhc2UgUFNfSW5U
cmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiAmUmF3RW50cnkuZnJvbnQoKTsKKyAgICBjYXNlIFBT
X0F0RW5kOgorICAgICAgcmV0dXJuICZQYXRoLmJhY2soKSArIDE7CisgICAgfQorICAgIF9MSUJD
UFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lU2VwYXJhdG9yKFBvc1B0
ciBQLCBQb3NQdHIgRW5kKSBjb25zdCBub2V4Y2VwdCB7CisgICAgaWYgKFAgPT0gRW5kIHx8ICpQ
ICE9ICcvJykKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IGludCBJbmMgPSBQIDwg
RW5kID8gMSA6IC0xOworICAgIFAgKz0gSW5jOworICAgIHdoaWxlIChQICE9IEVuZCAmJiAqUCA9
PSAnLycpCisgICAgICBQICs9IEluYzsKKyAgICByZXR1cm4gUDsKKyAgfQorCisgIFBvc1B0ciBj
b25zdW1lTmFtZShQb3NQdHIgUCwgUG9zUHRyIEVuZCkgY29uc3Qgbm9leGNlcHQgeworICAgIGlm
IChQID09IEVuZCB8fCAqUCA9PSAnLycpCisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25z
dCBpbnQgSW5jID0gUCA8IEVuZCA/IDEgOiAtMTsKKyAgICBQICs9IEluYzsKKyAgICB3aGlsZSAo
UCAhPSBFbmQgJiYgKlAgIT0gJy8nKQorICAgICAgUCArPSBJbmM7CisgICAgcmV0dXJuIFA7Cisg
IH0KK307CisKK3N0cmluZ192aWV3X3BhaXIgc2VwYXJhdGVfZmlsZW5hbWUoc3RyaW5nX3ZpZXdf
dCBjb25zdCYgcykgeworICBpZiAocyA9PSAiLiIgfHwgcyA9PSAiLi4iIHx8IHMuZW1wdHkoKSkK
KyAgICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntzLCAiIn07CisgIGF1dG8gcG9zID0gcy5maW5k
X2xhc3Rfb2YoJy4nKTsKKyAgaWYgKHBvcyA9PSBzdHJpbmdfdmlld190OjpucG9zIHx8IHBvcyA9
PSAwKQorICAgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3MsIHN0cmluZ192aWV3X3R7fX07Cisg
IHJldHVybiBzdHJpbmdfdmlld19wYWlye3Muc3Vic3RyKDAsIHBvcyksIHMuc3Vic3RyKHBvcyl9
OworfQorCitzdHJpbmdfdmlld190IGNyZWF0ZVZpZXcoUG9zUHRyIFMsIFBvc1B0ciBFKSBub2V4
Y2VwdCB7CisgIHJldHVybiB7Uywgc3RhdGljX2Nhc3Q8c2l6ZV90PihFIC0gUykgKyAxfTsKK30K
KworfSAvLyBuYW1lc3BhY2UgcGFyc2VyCit9IC8vIG5hbWVzcGFjZQorCisvLyAgICAgICAgICAg
ICAgICAgICAgICAgUE9TSVggSEVMUEVSUworCituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFj
ZSB7CisKK3VzaW5nIHZhbHVlX3R5cGUgPSBwYXRoOjp2YWx1ZV90eXBlOwordXNpbmcgc3RyaW5n
X3R5cGUgPSBwYXRoOjpzdHJpbmdfdHlwZTsKKworc3RydWN0IEZpbGVEZXNjcmlwdG9yIHsKKyAg
Y29uc3QgcGF0aCYgbmFtZTsKKyAgaW50IGZkID0gLTE7CisgIFN0YXRUIG1fc3RhdDsKKyAgZmls
ZV9zdGF0dXMgbV9zdGF0dXM7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIHN0YXRp
YyBGaWxlRGVzY3JpcHRvciBjcmVhdGUoY29uc3QgcGF0aCogcCwgZXJyb3JfY29kZSYgZWMsIEFy
Z3MuLi4gYXJncykgeworICAgIGVjLmNsZWFyKCk7CisgICAgaW50IGZkOworICAgIGlmICgoZmQg
PSA6Om9wZW4ocC0+Y19zdHIoKSwgYXJncy4uLikpID09IC0xKSB7CisgICAgICBlYyA9IGNhcHR1
cmVfZXJybm8oKTsKKyAgICAgIHJldHVybiBGaWxlRGVzY3JpcHRvcntwfTsKKyAgICB9CisgICAg
cmV0dXJuIEZpbGVEZXNjcmlwdG9yKHAsIGZkKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcy4u
LiBBcmdzPgorICBzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlX3dpdGhfc3RhdHVzKGNvbnN0
IHBhdGgqIHAsIGVycm9yX2NvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZ3MuLi4gYXJncykgeworICAgIEZpbGVEZXNjcmlwdG9yIGZkID0gY3Jl
YXRlKHAsIGVjLCBhcmdzLi4uKTsKKyAgICBpZiAoIWVjKQorICAgICAgZmQucmVmcmVzaF9zdGF0
dXMoZWMpOworCisgICAgcmV0dXJuIGZkOworICB9CisKKyAgZmlsZV9zdGF0dXMgZ2V0X3N0YXR1
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgIFN0YXRUIGNvbnN0JiBnZXRfc3RhdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdDsgfQorCisgIGJvb2wgc3RhdHVzX2tub3duKCkgY29uc3Qg
eyByZXR1cm4gX1ZTVERfRlM6OnN0YXR1c19rbm93bihtX3N0YXR1cyk7IH0KKworICBmaWxlX3N0
YXR1cyByZWZyZXNoX3N0YXR1cyhlcnJvcl9jb2RlJiBlYyk7CisKKyAgdm9pZCBjbG9zZSgpIG5v
ZXhjZXB0IHsKKyAgICBpZiAoZmQgIT0gLTEpCisgICAgICA6OmNsb3NlKGZkKTsKKyAgICBmZCA9
IC0xOworICB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0b3ImJiBvdGhlcikKKyAg
ICAgIDogbmFtZShvdGhlci5uYW1lKSwgZmQob3RoZXIuZmQpLCBtX3N0YXQob3RoZXIubV9zdGF0
KSwKKyAgICAgICAgbV9zdGF0dXMob3RoZXIubV9zdGF0dXMpIHsKKyAgICBvdGhlci5mZCA9IC0x
OworICAgIG90aGVyLm1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgfQorCisgIH5GaWxlRGVz
Y3JpcHRvcigpIHsgY2xvc2UoKTsgfQorCisgIEZpbGVEZXNjcmlwdG9yKEZpbGVEZXNjcmlwdG9y
IGNvbnN0JikgPSBkZWxldGU7CisgIEZpbGVEZXNjcmlwdG9yJiBvcGVyYXRvcj0oRmlsZURlc2Ny
aXB0b3IgY29uc3QmKSA9IGRlbGV0ZTsKKworcHJpdmF0ZToKKyAgZXhwbGljaXQgRmlsZURlc2Ny
aXB0b3IoY29uc3QgcGF0aCogcCwgaW50IGZkID0gLTEpIDogbmFtZSgqcCksIGZkKGZkKSB7fQor
fTsKKworcGVybXMgcG9zaXhfZ2V0X3Blcm1zKGNvbnN0IFN0YXRUJiBzdCkgbm9leGNlcHQgewor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0LnN0X21vZGUpICYgcGVybXM6Om1hc2s7Cit9
CisKKzo6bW9kZV90IHBvc2l4X2NvbnZlcnRfcGVybXMocGVybXMgcHJtcykgeworICByZXR1cm4g
c3RhdGljX2Nhc3Q8IDo6bW9kZV90Pihwcm1zICYgcGVybXM6Om1hc2spOworfQorCitmaWxlX3N0
YXR1cyBjcmVhdGVfZmlsZV9zdGF0dXMoZXJyb3JfY29kZSYgbV9lYywgcGF0aCBjb25zdCYgcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0VCYgcGF0aF9zdGF0LCBl
cnJvcl9jb2RlKiBlYykgeworICBpZiAoZWMpCisgICAgKmVjID0gbV9lYzsKKyAgaWYgKG1fZWMg
JiYgKG1fZWMudmFsdWUoKSA9PSBFTk9FTlQgfHwgbV9lYy52YWx1ZSgpID09IEVOT1RESVIpKSB7
CisgICAgcmV0dXJuIGZpbGVfc3RhdHVzKGZpbGVfdHlwZTo6bm90X2ZvdW5kKTsKKyAgfSBlbHNl
IGlmIChtX2VjKSB7CisgICAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicG9zaXhfc3RhdCIsIGVj
LCAmcCk7CisgICAgZXJyLnJlcG9ydChtX2VjLCAiZmFpbGVkIHRvIGRldGVybWluZSBhdHRyaWJ1
dGVzIGZvciB0aGUgc3BlY2lmaWVkIHBhdGgiKTsKKyAgICByZXR1cm4gZmlsZV9zdGF0dXMoZmls
ZV90eXBlOjpub25lKTsKKyAgfQorICAvLyBlbHNlCisKKyAgZmlsZV9zdGF0dXMgZnNfdG1wOwor
ICBhdXRvIGNvbnN0IG1vZGUgPSBwYXRoX3N0YXQuc3RfbW9kZTsKKyAgaWYgKFNfSVNMTksobW9k
ZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpzeW1saW5rKTsKKyAgZWxzZSBpZiAoU19J
U1JFRyhtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnJlZ3VsYXIpOworICBlbHNl
IGlmIChTX0lTRElSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6ZGlyZWN0b3J5
KTsKKyAgZWxzZSBpZiAoU19JU0JMSyhtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6
OmJsb2NrKTsKKyAgZWxzZSBpZiAoU19JU0NIUihtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxl
X3R5cGU6OmNoYXJhY3Rlcik7CisgIGVsc2UgaWYgKFNfSVNGSUZPKG1vZGUpKQorICAgIGZzX3Rt
cC50eXBlKGZpbGVfdHlwZTo6Zmlmbyk7CisgIGVsc2UgaWYgKFNfSVNTT0NLKG1vZGUpKQorICAg
IGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6c29ja2V0KTsKKyAgZWxzZQorICAgIGZzX3RtcC50eXBl
KGZpbGVfdHlwZTo6dW5rbm93bik7CisKKyAgZnNfdG1wLnBlcm1pc3Npb25zKGRldGFpbDo6cG9z
aXhfZ2V0X3Blcm1zKHBhdGhfc3RhdCkpOworICByZXR1cm4gZnNfdG1wOworfQorCitmaWxlX3N0
YXR1cyBwb3NpeF9zdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBwYXRoX3N0YXQsIGVycm9yX2Nv
ZGUqIGVjKSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6c3RhdChwLmNfc3RyKCksICZw
YXRoX3N0YXQpID09IC0xKQorICAgIG1fZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAg
cmV0dXJuIGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBwLCBwYXRoX3N0YXQsIGVjKTsKK30KKwor
ZmlsZV9zdGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlKiBlYykgewor
ICBTdGF0VCBwYXRoX3N0YXQ7CisgIHJldHVybiBwb3NpeF9zdGF0KHAsIHBhdGhfc3RhdCwgZWMp
OworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0JiBwLCBTdGF0VCYgcGF0
aF9zdGF0LCBlcnJvcl9jb2RlKiBlYykgeworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6Omxz
dGF0KHAuY19zdHIoKSwgJnBhdGhfc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGRldGFpbDo6Y2Fw
dHVyZV9lcnJubygpOworICByZXR1cm4gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIHAsIHBhdGhf
c3RhdCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0JiBwLCBl
cnJvcl9jb2RlKiBlYykgeworICBTdGF0VCBwYXRoX3N0YXQ7CisgIHJldHVybiBwb3NpeF9sc3Rh
dChwLCBwYXRoX3N0YXQsIGVjKTsKK30KKworLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9v
bmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2Z0cnVuY2F0ZS5odG1sCitib29sIHBvc2l4
X2Z0cnVuY2F0ZShjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQsIG9mZl90IHRvX3NpemUsIGVycm9y
X2NvZGUmIGVjKSB7CisgIGlmICg6OmZ0cnVuY2F0ZShmZC5mZCwgdG9fc2l6ZSkgPT0gLTEpIHsK
KyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBlYy5j
bGVhcigpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgcG9zaXhfZmNobW9kKGNvbnN0IEZp
bGVEZXNjcmlwdG9yJiBmZCwgY29uc3QgU3RhdFQmIHN0LCBlcnJvcl9jb2RlJiBlYykgeworICBp
ZiAoOjpmY2htb2QoZmQuZmQsIHN0LnN0X21vZGUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJl
X2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIHN0YXRfZXF1aXZhbGVudChjb25zdCBTdGF0VCYgc3QxLCBjb25z
dCBTdGF0VCYgc3QyKSB7CisgIHJldHVybiAoc3QxLnN0X2RldiA9PSBzdDIuc3RfZGV2ICYmIHN0
MS5zdF9pbm8gPT0gc3QyLnN0X2lubyk7Cit9CisKK2ZpbGVfc3RhdHVzIEZpbGVEZXNjcmlwdG9y
OjpyZWZyZXNoX3N0YXR1cyhlcnJvcl9jb2RlJiBlYykgeworICAvLyBGRCBtdXN0IGJlIG9wZW4g
YW5kIGdvb2QuCisgIG1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgbV9zdGF0ID0ge307Cisg
IGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6ZnN0YXQoZmQsICZtX3N0YXQpID09IC0xKQorICAg
IG1fZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgIG1fc3RhdHVzID0gY3JlYXRlX2ZpbGVfc3RhdHVz
KG1fZWMsIG5hbWUsIG1fc3RhdCwgJmVjKTsKKyAgcmV0dXJuIG1fc3RhdHVzOworfQorfSAvLyBu
YW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRhaWwKKwordXNpbmcgZGV0YWlsOjpjYXB0
dXJlX2Vycm5vOwordXNpbmcgZGV0YWlsOjpFcnJvckhhbmRsZXI7Cit1c2luZyBkZXRhaWw6OlN0
YXRUOwordXNpbmcgZGV0YWlsOjpUaW1lU3BlYzsKK3VzaW5nIHBhcnNlcjo6Y3JlYXRlVmlldzsK
K3VzaW5nIHBhcnNlcjo6UGF0aFBhcnNlcjsKK3VzaW5nIHBhcnNlcjo6c3RyaW5nX3ZpZXdfdDsK
KworY29uc3QgYm9vbCBfRmlsZXN5c3RlbUNsb2NrOjppc19zdGVhZHk7CisKK19GaWxlc3lzdGVt
Q2xvY2s6OnRpbWVfcG9pbnQgX0ZpbGVzeXN0ZW1DbG9jazo6bm93KCkgbm9leGNlcHQgeworICB0
eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisjaWYgZGVmaW5lZChDTE9DS19S
RUFMVElNRSkKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgbmFubz4gX19uc2VjczsK
KyAgc3RydWN0IHRpbWVzcGVjIHRwOworICBpZiAoMCAhPSBjbG9ja19nZXR0aW1lKENMT0NLX1JF
QUxUSU1FLCAmdHApKQorICAgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGVycm5vLCAiY2xvY2tfZ2V0
dGltZShDTE9DS19SRUFMVElNRSkgZmFpbGVkIik7CisgIHJldHVybiB0aW1lX3BvaW50KF9fc2Vj
cyh0cC50dl9zZWMpICsKKyAgICAgICAgICAgICAgICAgICAgY2hyb25vOjpkdXJhdGlvbl9jYXN0
PGR1cmF0aW9uPihfX25zZWNzKHRwLnR2X25zZWMpKSk7CisjZWxzZQorICB0eXBlZGVmIGNocm9u
bzo6ZHVyYXRpb248cmVwLCBtaWNybz4gX19taWNyb3NlY3M7CisgIHRpbWV2YWwgdHY7CisgIGdl
dHRpbWVvZmRheSgmdHYsIDApOworICByZXR1cm4gdGltZV9wb2ludChfX3NlY3ModHYudHZfc2Vj
KSArIF9fbWljcm9zZWNzKHR2LnR2X3VzZWMpKTsKKyNlbmRpZiAvLyBDTE9DS19SRUFMVElNRQor
fQorCitmaWxlc3lzdGVtX2Vycm9yOjp+ZmlsZXN5c3RlbV9lcnJvcigpIHt9CisKK3ZvaWQgZmls
ZXN5c3RlbV9lcnJvcjo6X19jcmVhdGVfd2hhdChpbnQgX19udW1fcGF0aHMpIHsKKyAgY29uc3Qg
Y2hhciogZGVyaXZlZF93aGF0ID0gc3lzdGVtX2Vycm9yOjp3aGF0KCk7CisgIF9fc3RvcmFnZV8t
Pl9fd2hhdF8gPSBbJl0oKSAtPiBzdHJpbmcgeworICAgIGNvbnN0IGNoYXIqIHAxID0gcGF0aDEo
KS5uYXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDEoKS5jX3N0cigpOworICAgIGNvbnN0
IGNoYXIqIHAyID0gcGF0aDIoKS5uYXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDIoKS5j
X3N0cigpOworICAgIHN3aXRjaCAoX19udW1fcGF0aHMpIHsKKyAgICBkZWZhdWx0OgorICAgICAg
cmV0dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMiLCBkZXJp
dmVkX3doYXQpOworICAgIGNhc2UgMToKKyAgICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJp
bmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIFslc10iLCBkZXJpdmVkX3doYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAxKTsKKyAgICBjYXNlIDI6CisgICAgICByZXR1cm4g
ZGV0YWlsOjpmb3JtYXRfc3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyBbJXNdIFslc10iLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkX3doYXQsIHAxLCBwMik7
CisgICAgfQorICB9KCk7Cit9CisKK3N0YXRpYyBwYXRoIF9fZG9fYWJzb2x1dGUoY29uc3QgcGF0
aCYgcCwgcGF0aCogY3dkLCBlcnJvcl9jb2RlKiBlYykgeworICBpZiAoZWMpCisgICAgZWMtPmNs
ZWFyKCk7CisgIGlmIChwLmlzX2Fic29sdXRlKCkpCisgICAgcmV0dXJuIHA7CisgICpjd2QgPSBf
X2N1cnJlbnRfcGF0aChlYyk7CisgIGlmIChlYyAmJiAqZWMpCisgICAgcmV0dXJuIHt9OworICBy
ZXR1cm4gKCpjd2QpIC8gcDsKK30KKworcGF0aCBfX2Fic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIHBhdGggY3dkOworICByZXR1cm4gX19kb19hYnNvbHV0ZShwLCAm
Y3dkLCBlYyk7Cit9CisKK3BhdGggX19jYW5vbmljYWwocGF0aCBjb25zdCYgb3JpZ19wLCBlcnJv
cl9jb2RlKiBlYykgeworICBwYXRoIGN3ZDsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY2Fu
b25pY2FsIiwgZWMsICZvcmlnX3AsICZjd2QpOworCisgIHBhdGggcCA9IF9fZG9fYWJzb2x1dGUo
b3JpZ19wLCAmY3dkLCBlYyk7CisjaWYgX1BPU0lYX1ZFUlNJT04gPj0gMjAwMTEyCisgIHN0ZDo6
dW5pcXVlX3B0cjxjaGFyLCBkZWNsdHlwZSgmOjpmcmVlKT4KKyAgICBob2xkKDo6cmVhbHBhdGgo
cC5jX3N0cigpLCBudWxscHRyKSwgJjo6ZnJlZSk7CisgIGlmIChob2xkLmdldCgpID09IG51bGxw
dHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIHto
b2xkLmdldCgpfTsKKyNlbHNlCisgIGNoYXIgYnVmZltQQVRIX01BWCArIDFdOworICBjaGFyKiBy
ZXQ7CisgIGlmICgocmV0ID0gOjpyZWFscGF0aChwLmNfc3RyKCksIGJ1ZmYpKSA9PSBudWxscHRy
KQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIHJldHVybiB7cmV0
fTsKKyNlbmRpZgorfQorCit2b2lkIF9fY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRo
JiB0bywgY29weV9vcHRpb25zIG9wdGlvbnMsCisgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykg
eworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjb3B5IiwgZWMsICZmcm9tLCAmdG8pOworCisg
IGNvbnN0IGJvb2wgc3ltX3N0YXR1cyA9IGJvb2woCisgICAgICBvcHRpb25zICYgKGNvcHlfb3B0
aW9uczo6Y3JlYXRlX3N5bWxpbmtzIHwgY29weV9vcHRpb25zOjpza2lwX3N5bWxpbmtzKSk7CisK
KyAgY29uc3QgYm9vbCBzeW1fc3RhdHVzMiA9IGJvb2wob3B0aW9ucyAmIGNvcHlfb3B0aW9uczo6
Y29weV9zeW1saW5rcyk7CisKKyAgZXJyb3JfY29kZSBtX2VjMTsKKyAgU3RhdFQgZl9zdCA9IHt9
OworICBjb25zdCBmaWxlX3N0YXR1cyBmID0gc3ltX3N0YXR1cyB8fCBzeW1fc3RhdHVzMgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gZGV0YWlsOjpwb3NpeF9sc3RhdChmcm9tLCBmX3N0
LCAmbV9lYzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X3N0
YXQoZnJvbSwgZl9zdCwgJm1fZWMxKTsKKyAgaWYgKG1fZWMxKQorICAgIHJldHVybiBlcnIucmVw
b3J0KG1fZWMxKTsKKworICBTdGF0VCB0X3N0ID0ge307CisgIGNvbnN0IGZpbGVfc3RhdHVzIHQg
PSBzeW1fc3RhdHVzID8gZGV0YWlsOjpwb3NpeF9sc3RhdCh0bywgdF9zdCwgJm1fZWMxKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfc3RhdCh0bywg
dF9zdCwgJm1fZWMxKTsKKworICBpZiAobm90IHN0YXR1c19rbm93bih0KSkKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChtX2VjMSk7CisKKyAgaWYgKCFleGlzdHMoZikgfHwgaXNfb3RoZXIoZikgfHwg
aXNfb3RoZXIodCkgfHwKKyAgICAgIChpc19kaXJlY3RvcnkoZikgJiYgaXNfcmVndWxhcl9maWxl
KHQpKSB8fAorICAgICAgZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoZl9zdCwgdF9zdCkpIHsKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmdW5jdGlvbl9ub3Rfc3VwcG9ydGVkKTsKKyAgfQor
CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKworICBpZiAoaXNfc3ltbGluayhmKSkgewor
ICAgIGlmIChib29sKGNvcHlfb3B0aW9uczo6c2tpcF9zeW1saW5rcyAmIG9wdGlvbnMpKSB7Cisg
ICAgICAvLyBkbyBub3RoaW5nCisgICAgfSBlbHNlIGlmIChub3QgZXhpc3RzKHQpKSB7CisgICAg
ICBfX2NvcHlfc3ltbGluayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1
cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7CisgICAgfQorICAgIHJldHVybjsKKyAg
fSBlbHNlIGlmIChpc19yZWd1bGFyX2ZpbGUoZikpIHsKKyAgICBpZiAoYm9vbChjb3B5X29wdGlv
bnM6OmRpcmVjdG9yaWVzX29ubHkgJiBvcHRpb25zKSkgeworICAgICAgLy8gZG8gbm90aGluZwor
ICAgIH0gZWxzZSBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlv
bnMpKSB7CisgICAgICBfX2NyZWF0ZV9zeW1saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNl
IGlmIChib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX2hhcmRfbGlua3MgJiBvcHRpb25zKSkgewor
ICAgICAgX19jcmVhdGVfaGFyZF9saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChp
c19kaXJlY3RvcnkodCkpIHsKKyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvIC8gZnJvbS5maWxl
bmFtZSgpLCBvcHRpb25zLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIF9fY29weV9maWxlKGZy
b20sIHRvLCBvcHRpb25zLCBlYyk7CisgICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChp
c19kaXJlY3RvcnkoZikgJiYgYm9vbChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyAmIG9w
dGlvbnMpKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6aXNfYV9kaXJlY3RvcnkpOwor
ICB9IGVsc2UgaWYgKGlzX2RpcmVjdG9yeShmKSAmJiAoYm9vbChjb3B5X29wdGlvbnM6OnJlY3Vy
c2l2ZSAmIG9wdGlvbnMpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5
X29wdGlvbnM6Om5vbmUgPT0gb3B0aW9ucykpIHsKKworICAgIGlmICghZXhpc3RzKHQpKSB7Cisg
ICAgICAvLyBjcmVhdGUgZGlyZWN0b3J5IHRvIHdpdGggYXR0cmlidXRlcyBmcm9tICdmcm9tJy4K
KyAgICAgIF9fY3JlYXRlX2RpcmVjdG9yeSh0bywgZnJvbSwgZWMpOworICAgICAgaWYgKGVjICYm
ICplYykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIGRpcmVjdG9yeV9p
dGVyYXRvciBpdCA9CisgICAgICAgIGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKGZyb20sICplYykg
OiBkaXJlY3RvcnlfaXRlcmF0b3IoZnJvbSk7CisgICAgaWYgKGVjICYmICplYykgeworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBlcnJvcl9jb2RlIG1fZWMyOworICAgIGZvciAoOyBpdCAhPSBk
aXJlY3RvcnlfaXRlcmF0b3IoKTsgaXQuaW5jcmVtZW50KG1fZWMyKSkgeworICAgICAgaWYgKG1f
ZWMyKSB7CisgICAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMyKTsKKyAgICAgIH0KKyAgICAg
IF9fY29weShpdC0+cGF0aCgpLCB0byAvIGl0LT5wYXRoKCkuZmlsZW5hbWUoKSwKKyAgICAgICAg
ICAgICBvcHRpb25zIHwgY29weV9vcHRpb25zOjpfX2luX3JlY3Vyc2l2ZV9jb3B5LCBlYyk7Cisg
ICAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9Cisg
IH0KK30KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCisjaWZkZWYgX0xJQkNQ
UF9VU0VfU0VOREZJTEUKK2Jvb2wgY29weV9maWxlX2ltcGxfc2VuZGZpbGUoRmlsZURlc2NyaXB0
b3ImIHJlYWRfZmQsIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKworICBzaXplX3QgY291bnQgPSByZWFkX2Zk
LmdldF9zdGF0KCkuc3Rfc2l6ZTsKKyAgZG8geworICAgIHNzaXplX3QgcmVzOworICAgIGlmICgo
cmVzID0gOjpzZW5kZmlsZSh3cml0ZV9mZC5mZCwgcmVhZF9mZC5mZCwgbnVsbHB0ciwgY291bnQp
KSA9PSAtMSkgeworICAgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGNvdW50IC09IHJlczsKKyAgfSB3aGlsZSAoY291bnQgPiAwKTsKKwor
ICBlYy5jbGVhcigpOworCisgIHJldHVybiB0cnVlOworfQorI2VsaWYgZGVmaW5lZChfTElCQ1BQ
X1VTRV9DT1BZRklMRSkKK2Jvb2wgY29weV9maWxlX2ltcGxfY29weWZpbGUoRmlsZURlc2NyaXB0
b3ImIHJlYWRfZmQsIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgc3RydWN0IENvcHlGaWxlU3RhdGUgewor
ICAgIGNvcHlmaWxlX3N0YXRlX3Qgc3RhdGU7CisgICAgQ29weUZpbGVTdGF0ZSgpIHsgc3RhdGUg
PSBjb3B5ZmlsZV9zdGF0ZV9hbGxvYygpOyB9CisgICAgfkNvcHlGaWxlU3RhdGUoKSB7IGNvcHlm
aWxlX3N0YXRlX2ZyZWUoc3RhdGUpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBDb3B5RmlsZVN0YXRl
KENvcHlGaWxlU3RhdGUgY29uc3QmKSA9IGRlbGV0ZTsKKyAgICBDb3B5RmlsZVN0YXRlJiBvcGVy
YXRvcj0oQ29weUZpbGVTdGF0ZSBjb25zdCYpID0gZGVsZXRlOworICB9OworCisgIENvcHlGaWxl
U3RhdGUgY2ZzOworICBpZiAoZmNvcHlmaWxlKHJlYWRfZmQuZmQsIHdyaXRlX2ZkLmZkLCBjZnMu
c3RhdGUsIENPUFlGSUxFX0RBVEEpIDwgMCkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOwor
ICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGVjLmNsZWFyKCk7CisgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKKy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgZ3VhcmRlZCBieSBpZmRl
ZidzIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bnVzZWQKKy8vIGluIG9yZGVyIHRvIGFzc3VyZSBp
dCBzdGlsbCBjb21waWxlcy4KK19fYXR0cmlidXRlX18oKHVudXNlZCkpIGJvb2wgY29weV9maWxl
X2ltcGxfZGVmYXVsdChGaWxlRGVzY3JpcHRvciYgcmVhZF9mZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvciYgd3JpdGVf
ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSYgZWMpIHsKKyAgaWZzdHJlYW0gaW47CisgIGluLl9fb3BlbihyZWFkX2ZkLmZk
LCBpb3M6OmJpbmFyeSk7CisgIGlmICghaW4uaXNfb3BlbigpKSB7CisgICAgLy8gVGhpcyBhc3N1
bWVzIHRoYXQgX19vcGVuIGRpZG4ndCByZXNldCB0aGUgZXJyb3IgY29kZS4KKyAgICBlYyA9IGNh
cHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgb2ZzdHJlYW0gb3V0Owor
ICBvdXQuX19vcGVuKHdyaXRlX2ZkLmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghb3V0LmlzX29w
ZW4oKSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxzZTsKKyAg
fQorCisgIGlmIChpbi5nb29kKCkgJiYgb3V0Lmdvb2QoKSkgeworICAgIHVzaW5nIEluSXQgPSBp
c3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIHVzaW5nIE91dEl0ID0gb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxjaGFyPjsKKyAgICBJbkl0IGJpbihpbik7CisgICAgSW5JdCBlaW47CisgICAgT3V0
SXQgYm91dChvdXQpOworICAgIGNvcHkoYmluLCBlaW4sIGJvdXQpOworICB9CisgIGlmIChvdXQu
ZmFpbCgpIHx8IGluLmZhaWwoKSkgeworICAgIGVjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Omlv
X2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBlYy5jbGVhcigpOworICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBjb3B5X2ZpbGVfaW1wbChGaWxlRGVzY3JpcHRvciYgZnJvbSwg
RmlsZURlc2NyaXB0b3ImIHRvLCBlcnJvcl9jb2RlJiBlYykgeworI2lmIGRlZmluZWQoX0xJQkNQ
UF9VU0VfU0VOREZJTEUpCisgIHJldHVybiBjb3B5X2ZpbGVfaW1wbF9zZW5kZmlsZShmcm9tLCB0
bywgZWMpOworI2VsaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKKyAgcmV0dXJuIGNv
cHlfZmlsZV9pbXBsX2NvcHlmaWxlKGZyb20sIHRvLCBlYyk7CisjZWxzZQorICByZXR1cm4gY29w
eV9maWxlX2ltcGxfZGVmYXVsdChmcm9tLCB0bywgZWMpOworI2VuZGlmCit9CisKK30gLy8gbmFt
ZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKworYm9vbCBfX2NvcHlfZmlsZShjb25zdCBw
YXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbnMsCisgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6RmlsZURlc2NyaXB0
b3I7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNvcHlfZmlsZSIsIGVjLCAmdG8sICZmcm9t
KTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIEZpbGVEZXNjcmlwdG9yIGZyb21fZmQgPQorICAg
ICAgRmlsZURlc2NyaXB0b3I6OmNyZWF0ZV93aXRoX3N0YXR1cygmZnJvbSwgbV9lYywgT19SRE9O
TFkgfCBPX05PTkJMT0NLKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9l
Yyk7CisKKyAgYXV0byBmcm9tX3N0ID0gZnJvbV9mZC5nZXRfc3RhdHVzKCk7CisgIFN0YXRUIGNv
bnN0JiBmcm9tX3N0YXQgPSBmcm9tX2ZkLmdldF9zdGF0KCk7CisgIGlmICghaXNfcmVndWxhcl9m
aWxlKGZyb21fc3QpKSB7CisgICAgaWYgKG5vdCBtX2VjKQorICAgICAgbV9lYyA9IG1ha2VfZXJy
b3JfY29kZShlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2Vj
KTsKKyAgfQorCisgIGNvbnN0IGJvb2wgc2tpcF9leGlzdGluZyA9IGJvb2woY29weV9vcHRpb25z
Ojpza2lwX2V4aXN0aW5nICYgb3B0aW9ucyk7CisgIGNvbnN0IGJvb2wgdXBkYXRlX2V4aXN0aW5n
ID0gYm9vbChjb3B5X29wdGlvbnM6OnVwZGF0ZV9leGlzdGluZyAmIG9wdGlvbnMpOworICBjb25z
dCBib29sIG92ZXJ3cml0ZV9leGlzdGluZyA9CisgICAgICBib29sKGNvcHlfb3B0aW9uczo6b3Zl
cndyaXRlX2V4aXN0aW5nICYgb3B0aW9ucyk7CisKKyAgU3RhdFQgdG9fc3RhdF9wYXRoOworICBm
aWxlX3N0YXR1cyB0b19zdCA9IGRldGFpbDo6cG9zaXhfc3RhdCh0bywgdG9fc3RhdF9wYXRoLCAm
bV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHRvX3N0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChtX2VjKTsKKworICBjb25zdCBib29sIHRvX2V4aXN0cyA9IGV4aXN0cyh0b19zdCk7CisgIGlm
ICh0b19leGlzdHMgJiYgIWlzX3JlZ3VsYXJfZmlsZSh0b19zdCkpCisgICAgcmV0dXJuIGVyci5y
ZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisKKyAgaWYgKHRvX2V4aXN0cyAmJiBkZXRhaWw6
OnN0YXRfZXF1aXZhbGVudChmcm9tX3N0YXQsIHRvX3N0YXRfcGF0aCkpCisgICAgcmV0dXJuIGVy
ci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMpOworCisgIGlmICh0b19leGlzdHMgJiYgc2tpcF9l
eGlzdGluZykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgYm9vbCBTaG91bGRDb3B5ID0gWyZdKCkg
eworICAgIGlmICh0b19leGlzdHMgJiYgdXBkYXRlX2V4aXN0aW5nKSB7CisgICAgICBhdXRvIGZy
b21fdGltZSA9IGRldGFpbDo6ZXh0cmFjdF9tdGltZShmcm9tX3N0YXQpOworICAgICAgYXV0byB0
b190aW1lID0gZGV0YWlsOjpleHRyYWN0X210aW1lKHRvX3N0YXRfcGF0aCk7CisgICAgICBpZiAo
ZnJvbV90aW1lLnR2X3NlYyA8IHRvX3RpbWUudHZfc2VjKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICBpZiAoZnJvbV90aW1lLnR2X3NlYyA9PSB0b190aW1lLnR2X3NlYyAmJgorICAgICAg
ICAgIGZyb21fdGltZS50dl9uc2VjIDw9IHRvX3RpbWUudHZfbnNlYykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghdG9fZXhpc3RzIHx8
IG92ZXJ3cml0ZV9leGlzdGluZykKKyAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBlcnIu
cmVwb3J0KGVycmM6OmZpbGVfZXhpc3RzKTsKKyAgfSgpOworICBpZiAoIVNob3VsZENvcHkpCisg
ICAgcmV0dXJuIGZhbHNlOworCisgIC8vIERvbid0IHRydW5jYXRlIHJpZ2h0IGF3YXkuIFdlIG1h
eSBub3QgYmUgb3BlbmluZyB0aGUgZmlsZSB3ZSBvcmlnaW5hbGx5CisgIC8vIGxvb2tlZCBhdDsg
d2UnbGwgY2hlY2sgdGhpcyBsYXRlci4KKyAgaW50IHRvX29wZW5fZmxhZ3MgPSBPX1dST05MWTsK
KyAgaWYgKCF0b19leGlzdHMpCisgICAgdG9fb3Blbl9mbGFncyB8PSBPX0NSRUFUOworICBGaWxl
RGVzY3JpcHRvciB0b19mZCA9IEZpbGVEZXNjcmlwdG9yOjpjcmVhdGVfd2l0aF9zdGF0dXMoCisg
ICAgICAmdG8sIG1fZWMsIHRvX29wZW5fZmxhZ3MsIGZyb21fc3RhdC5zdF9tb2RlKTsKKyAgaWYg
KG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisKKyAgaWYgKHRvX2V4aXN0cykg
eworICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgd2UgaW5pdGlhbGx5IHN0YXQnZWQgaXMgZXF1
aXZhbGVudCB0byB0aGUgb25lCisgICAgLy8gd2Ugb3BlbmVkLgorICAgIC8vIEZJWE1FOiByZXBv
cnQgdGhpcyBiZXR0ZXIuCisgICAgaWYgKCFkZXRhaWw6OnN0YXRfZXF1aXZhbGVudCh0b19zdGF0
X3BhdGgsIHRvX2ZkLmdldF9zdGF0KCkpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6
YmFkX2ZpbGVfZGVzY3JpcHRvcik7CisKKyAgICAvLyBTZXQgdGhlIHBlcm1pc3Npb25zIGFuZCB0
cnVuY2F0ZSB0aGUgZmlsZSB3ZSBvcGVuZWQuCisgICAgaWYgKGRldGFpbDo6cG9zaXhfZmNobW9k
KHRvX2ZkLCBmcm9tX3N0YXQsIG1fZWMpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7
CisgICAgaWYgKGRldGFpbDo6cG9zaXhfZnRydW5jYXRlKHRvX2ZkLCAwLCBtX2VjKSkKKyAgICAg
IHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICB9CisKKyAgaWYgKCFjb3B5X2ZpbGVfaW1wbChm
cm9tX2ZkLCB0b19mZCwgbV9lYykpIHsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBkZXN0IGZp
bGUgaWYgd2UgZmFpbGVkLCBhbmQgaXQgZGlkbid0IGV4aXN0IHByZXZpb3VzbHkuCisgICAgcmV0
dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBf
X2NvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBu
ZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgY29u
c3QgcGF0aCByZWFsX3BhdGgoX19yZWFkX3N5bWxpbmsoZXhpc3Rpbmdfc3ltbGluaywgZWMpKTsK
KyAgaWYgKGVjICYmICplYykgeworICAgIHJldHVybjsKKyAgfQorICAvLyBOT1RFOiBwcm9wb3Nh
bCBzYXlzIHlvdSBzaG91bGQgZGV0ZWN0IGlmIHlvdSBzaG91bGQgY2FsbAorICAvLyBjcmVhdGVf
c3ltbGluayBvciBjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsuIEkgZG9uJ3QgdGhpbmsgdGhpcwor
ICAvLyBpcyBuZWVkZWQgd2l0aCBQT1NJWAorICBfX2NyZWF0ZV9zeW1saW5rKHJlYWxfcGF0aCwg
bmV3X3N5bWxpbmssIGVjKTsKK30KKworYm9vbCBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVh
dGVfZGlyZWN0b3JpZXMiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgYXV0byBj
b25zdCBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCAmbV9lYyk7CisgIGlmICghc3RhdHVzX2tu
b3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgZWxzZSBpZiAoaXNfZGly
ZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZmFsc2U7CisgIGVsc2UgaWYgKGV4aXN0cyhzdCkpCisg
ICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMpOworCisgIGNvbnN0IHBhdGgg
cGFyZW50ID0gcC5wYXJlbnRfcGF0aCgpOworICBpZiAoIXBhcmVudC5lbXB0eSgpKSB7CisgICAg
Y29uc3QgZmlsZV9zdGF0dXMgcGFyZW50X3N0ID0gc3RhdHVzKHBhcmVudCwgbV9lYyk7CisgICAg
aWYgKG5vdCBzdGF0dXNfa25vd24ocGFyZW50X3N0KSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0
KG1fZWMpOworICAgIGlmIChub3QgZXhpc3RzKHBhcmVudF9zdCkpIHsKKyAgICAgIF9fY3JlYXRl
X2RpcmVjdG9yaWVzKHBhcmVudCwgZWMpOworICAgICAgaWYgKGVjICYmICplYykgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBfX2NyZWF0ZV9k
aXJlY3RvcnkocCwgZWMpOworfQorCitib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVf
ZGlyZWN0b3J5IiwgZWMsICZwKTsKKworICBpZiAoOjpta2RpcihwLmNfc3RyKCksIHN0YXRpY19j
YXN0PGludD4ocGVybXM6OmFsbCkpID09IDApCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChlcnJu
byAhPSBFRVhJU1QpCisgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3J5KHBhdGggY29uc3QmIHAsIHBhdGgg
Y29uc3QmIGF0dHJpYnV0ZXMsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29s
PiBlcnIoImNyZWF0ZV9kaXJlY3RvcnkiLCBlYywgJnAsICZhdHRyaWJ1dGVzKTsKKworICBTdGF0
VCBhdHRyX3N0YXQ7CisgIGVycm9yX2NvZGUgbWVjOworICBhdXRvIHN0ID0gZGV0YWlsOjpwb3Np
eF9zdGF0KGF0dHJpYnV0ZXMsIGF0dHJfc3RhdCwgJm1lYyk7CisgIGlmICghc3RhdHVzX2tub3du
KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtZWMpOworICBpZiAoIWlzX2RpcmVjdG9yeShz
dCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X2FfZGlyZWN0b3J5LAorICAgICAg
ICAgICAgICAgICAgICAgICJ0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBwYXRoIGlzIGludmFsaWQi
KTsKKworICBpZiAoOjpta2RpcihwLmNfc3RyKCksIGF0dHJfc3RhdC5zdF9tb2RlKSA9PSAwKQor
ICAgIHJldHVybiB0cnVlOworICBpZiAoZXJybm8gIT0gRUVYSVNUKQorICAgIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIF9fY3JlYXRlX2Rp
cmVjdG9yeV9zeW1saW5rKHBhdGggY29uc3QmIGZyb20sIHBhdGggY29uc3QmIHRvLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsiLCBlYywgJmZyb20sICZ0byk7
CisgIGlmICg6OnN5bWxpbmsoZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSAhPSAwKQorICAgIHJl
dHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19jcmVhdGVfaGFy
ZF9saW5rKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYykg
eworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjcmVhdGVfaGFyZF9saW5rIiwgZWMsICZmcm9t
LCAmdG8pOworICBpZiAoOjpsaW5rKGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCisg
ICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwordm9pZCBfX2NyZWF0
ZV9zeW1saW5rKHBhdGggY29uc3QmIGZyb20sIHBhdGggY29uc3QmIHRvLCBlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjcmVhdGVfc3ltbGluayIsIGVjLCAmZnJv
bSwgJnRvKTsKKyAgaWYgKDo6c3ltbGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0x
KQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3BhdGggX19j
dXJyZW50X3BhdGgoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigi
Y3VycmVudF9wYXRoIiwgZWMpOworCisgIGF1dG8gc2l6ZSA9IDo6cGF0aGNvbmYoIi4iLCBfUENf
UEFUSF9NQVgpOworICBfTElCQ1BQX0FTU0VSVChzaXplID49IDAsICJwYXRoY29uZiByZXR1cm5l
ZCBhIDAgYXMgbWF4IHNpemUiKTsKKworICBhdXRvIGJ1ZmYgPSB1bmlxdWVfcHRyPGNoYXJbXT4o
bmV3IGNoYXJbc2l6ZSArIDFdKTsKKyAgY2hhciogcmV0OworICBpZiAoKHJldCA9IDo6Z2V0Y3dk
KGJ1ZmYuZ2V0KCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkpKSA9PSBudWxscHRyKQorICAg
IHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSwgImNhbGwgdG8gZ2V0Y3dkIGZhaWxl
ZCIpOworCisgIHJldHVybiB7YnVmZi5nZXQoKX07Cit9CisKK3ZvaWQgX19jdXJyZW50X3BhdGgo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVy
cigiY3VycmVudF9wYXRoIiwgZWMsICZwKTsKKyAgaWYgKDo6Y2hkaXIocC5jX3N0cigpKSA9PSAt
MSkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK2Jvb2wgX19lcXVpdmFs
ZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBwMiwgZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPGJvb2w+IGVycigiZXF1aXZhbGVudCIsIGVjLCAmcDEsICZwMik7CisKKyAg
ZXJyb3JfY29kZSBlYzEsIGVjMjsKKyAgU3RhdFQgc3QxID0ge30sIHN0MiA9IHt9OworICBhdXRv
IHMxID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAxLm5hdGl2ZSgpLCBzdDEsICZlYzEpOworICBpZiAo
IWV4aXN0cyhzMSkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7
CisgIGF1dG8gczIgPSBkZXRhaWw6OnBvc2l4X3N0YXQocDIubmF0aXZlKCksIHN0MiwgJmVjMik7
CisgIGlmICghZXhpc3RzKHMyKSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3Vw
cG9ydGVkKTsKKworICByZXR1cm4gZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoc3QxLCBzdDIpOwor
fQorCit1aW50bWF4X3QgX19maWxlX3NpemUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMp
IHsKKyAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJmaWxlX3NpemUiLCBlYywgJnApOwor
CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRl
dGFpbDo6cG9zaXhfc3RhdChwLCBzdCwgJm1fZWMpOworICBpZiAoIWV4aXN0cyhmc3QpIHx8ICFp
c19yZWd1bGFyX2ZpbGUoZnN0KSkgeworICAgIGVycmMgZXJyb3Jfa2luZCA9CisgICAgICAgIGlz
X2RpcmVjdG9yeShmc3QpID8gZXJyYzo6aXNfYV9kaXJlY3RvcnkgOiBlcnJjOjpub3Rfc3VwcG9y
dGVkOworICAgIGlmICghbV9lYykKKyAgICAgIG1fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyb3Jf
a2luZCk7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKyAgLy8gaXNfcmVndWxh
cl9maWxlKHApID09IHRydWUKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oc3Quc3Rf
c2l6ZSk7Cit9CisKK3VpbnRtYXhfdCBfX2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoImhhcmRfbGlu
a19jb3VudCIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBzdDsKKyAg
ZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVy
biBlcnIucmVwb3J0KG1fZWMpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90PihzdC5z
dF9ubGluayk7Cit9CisKK2Jvb2wgX19mc19pc19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9j
b2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJpc19lbXB0eSIsIGVjLCAmcCk7
CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBwc3Q7CisgIGF1dG8gc3QgPSBkZXRhaWw6
OnBvc2l4X3N0YXQocCwgcHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMpOworICBlbHNlIGlmICghaXNfZGlyZWN0b3J5KHN0KSAmJiAhaXNfcmVndWxh
cl9maWxlKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsK
KyAgZWxzZSBpZiAoaXNfZGlyZWN0b3J5KHN0KSkgeworICAgIGF1dG8gaXQgPSBlYyA/IGRpcmVj
dG9yeV9pdGVyYXRvcihwLCAqZWMpIDogZGlyZWN0b3J5X2l0ZXJhdG9yKHApOworICAgIGlmIChl
YyAmJiAqZWMpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGl0ID09IGRpcmVjdG9y
eV9pdGVyYXRvcnt9OworICB9IGVsc2UgaWYgKGlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4ocHN0LnN0X3NpemUpID09IDA7CisKKyAgX0xJQkNQ
UF9VTlJFQUNIQUJMRSgpOworfQorCitzdGF0aWMgZmlsZV90aW1lX3R5cGUgX19leHRyYWN0X2xh
c3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBjb25zdCBTdGF0VCYgc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgewor
ICB1c2luZyBkZXRhaWw6OmZzX3RpbWU7CisgIEVycm9ySGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4g
ZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOworCisgIGF1dG8gdHMgPSBkZXRhaWw6OmV4
dHJhY3RfbXRpbWUoc3QpOworICBpZiAoIWZzX3RpbWU6OmlzX3JlcHJlc2VudGFibGUodHMpKQor
ICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OnZhbHVlX3Rvb19sYXJnZSk7CisKKyAgcmV0dXJu
IGZzX3RpbWU6OmNvbnZlcnRfZnJvbV90aW1lc3BlYyh0cyk7Cit9CisKK2ZpbGVfdGltZV90eXBl
IF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIHVz
aW5nIG5hbWVzcGFjZSBjaHJvbm87CisgIEVycm9ySGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJy
KCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgU3Rh
dFQgc3Q7CisgIGRldGFpbDo6cG9zaXhfc3RhdChwLCBzdCwgJm1fZWMpOworICBpZiAobV9lYykK
KyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgcmV0dXJuIF9fZXh0cmFjdF9sYXN0X3dy
aXRlX3RpbWUocCwgc3QsIGVjKTsKK30KKwordm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBw
YXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSwgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNp
bmcgZGV0YWlsOjpmc190aW1lOworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJsYXN0X3dyaXRl
X3RpbWUiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgYXJyYXk8VGltZVNwZWMs
IDI+IHRidWY7CisjaWYgIWRlZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIGhhcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gZGV0ZXJtaW5pbmcg
dGhlCisgIC8vIGxhc3QgYWNjZXNzIHRpbWUgYW5kIGF0dGVtcHRpbmcgdG8gc2V0IGl0IHRvIHRo
ZSBzYW1lIHZhbHVlIHVzaW5nCisgIC8vIDo6dXRpbWVzCisgIFN0YXRUIHN0OworICBmaWxlX3N0
YXR1cyBmc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMp
CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIHRidWZbMF0gPSBkZXRhaWw6OmV4dHJh
Y3RfYXRpbWUoc3QpOworI2Vsc2UKKyAgdGJ1ZlswXS50dl9zZWMgPSAwOworICB0YnVmWzBdLnR2
X25zZWMgPSBVVElNRV9PTUlUOworI2VuZGlmCisgIGlmICghZnNfdGltZTo6Y29udmVydF90b190
aW1lc3BlYyh0YnVmWzFdLCBuZXdfdGltZSkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6
dmFsdWVfdG9vX2xhcmdlKTsKKworICBkZXRhaWw6OnNldF9maWxlX3RpbWVzKHAsIHRidWYsIG1f
ZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKK30KKwordm9p
ZCBfX3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmIHAsIHBlcm1zIHBybXMsIHBlcm1fb3B0aW9ucyBv
cHRzLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjx2b2lkPiBlcnIoInBlcm1pc3Npb25zIiwgZWMsICZwKTsKKworICBhdXRvIGhhc19vcHQgPSBb
Jl0ocGVybV9vcHRpb25zIG8pIHsgcmV0dXJuIGJvb2wobyAmIG9wdHMpOyB9OworICBjb25zdCBi
b29sIHJlc29sdmVfc3ltbGlua3MgPSAhaGFzX29wdChwZXJtX29wdGlvbnM6Om5vZm9sbG93KTsK
KyAgY29uc3QgYm9vbCBhZGRfcGVybXMgPSBoYXNfb3B0KHBlcm1fb3B0aW9uczo6YWRkKTsKKyAg
Y29uc3QgYm9vbCByZW1vdmVfcGVybXMgPSBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVtb3ZlKTsK
KyAgX0xJQkNQUF9BU1NFUlQoCisgICAgICAoYWRkX3Blcm1zICsgcmVtb3ZlX3Blcm1zICsgaGFz
X29wdChwZXJtX29wdGlvbnM6OnJlcGxhY2UpKSA9PSAxLAorICAgICAgIk9uZSBhbmQgb25seSBv
bmUgb2YgdGhlIHBlcm1fb3B0aW9ucyBjb25zdGFudHMgcmVwbGFjZSwgYWRkLCBvciByZW1vdmUg
IgorICAgICAgImlzIHByZXNlbnQgaW4gb3B0cyIpOworCisgIGJvb2wgc2V0X3N5bV9wZXJtcyA9
IGZhbHNlOworICBwcm1zICY9IHBlcm1zOjptYXNrOworICBpZiAoIXJlc29sdmVfc3ltbGlua3Mg
fHwgKGFkZF9wZXJtcyB8fCByZW1vdmVfcGVybXMpKSB7CisgICAgZXJyb3JfY29kZSBtX2VjOwor
ICAgIGZpbGVfc3RhdHVzIHN0ID0gcmVzb2x2ZV9zeW1saW5rcyA/IGRldGFpbDo6cG9zaXhfc3Rh
dChwLCAmbV9lYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRh
aWw6OnBvc2l4X2xzdGF0KHAsICZtX2VjKTsKKyAgICBzZXRfc3ltX3Blcm1zID0gaXNfc3ltbGlu
ayhzdCk7CisgICAgaWYgKG1fZWMpCisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAg
ICBfTElCQ1BQX0FTU0VSVChzdC5wZXJtaXNzaW9ucygpICE9IHBlcm1zOjp1bmtub3duLAorICAg
ICAgICAgICAgICAgICAgICJQZXJtaXNzaW9ucyB1bmV4cGVjdGVkbHkgdW5rbm93biIpOworICAg
IGlmIChhZGRfcGVybXMpCisgICAgICBwcm1zIHw9IHN0LnBlcm1pc3Npb25zKCk7CisgICAgZWxz
ZSBpZiAocmVtb3ZlX3Blcm1zKQorICAgICAgcHJtcyA9IHN0LnBlcm1pc3Npb25zKCkgJiB+cHJt
czsKKyAgfQorICBjb25zdCBhdXRvIHJlYWxfcGVybXMgPSBkZXRhaWw6OnBvc2l4X2NvbnZlcnRf
cGVybXMocHJtcyk7CisKKyNpZiBkZWZpbmVkKEFUX1NZTUxJTktfTk9GT0xMT1cpICYmIGRlZmlu
ZWQoQVRfRkRDV0QpCisgIGNvbnN0IGludCBmbGFncyA9IHNldF9zeW1fcGVybXMgPyBBVF9TWU1M
SU5LX05PRk9MTE9XIDogMDsKKyAgaWYgKDo6ZmNobW9kYXQoQVRfRkRDV0QsIHAuY19zdHIoKSwg
cmVhbF9wZXJtcywgZmxhZ3MpID09IC0xKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVy
ZV9lcnJubygpKTsKKyAgfQorI2Vsc2UKKyAgaWYgKHNldF9zeW1fcGVybXMpCisgICAgcmV0dXJu
IGVyci5yZXBvcnQoZXJyYzo6b3BlcmF0aW9uX25vdF9zdXBwb3J0ZWQpOworICBpZiAoOjpjaG1v
ZChwLmNfc3RyKCksIHJlYWxfcGVybXMpID09IC0xKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKKyAgfQorI2VuZGlmCit9CisKK3BhdGggX19yZWFkX3N5bWxpbmso
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVy
cigicmVhZF9zeW1saW5rIiwgZWMsICZwKTsKKworI2lmZGVmIFBBVEhfTUFYCisgIHN0cnVjdCBO
dWxsRGVsZXRlciB7IHZvaWQgb3BlcmF0b3IoKSh2b2lkKikgY29uc3Qge30gfTsKKyAgY29uc3Qg
c2l6ZV90IHNpemUgPSBQQVRIX01BWCArIDE7CisgIGNoYXIgc3RhY2tfYnVmZltzaXplXTsKKyAg
YXV0byBidWZmID0gc3RkOjp1bmlxdWVfcHRyPGNoYXJbXSwgTnVsbERlbGV0ZXI+KHN0YWNrX2J1
ZmYpOworI2Vsc2UKKyAgU3RhdFQgc2I7CisgIGlmICg6OmxzdGF0KHAuY19zdHIoKSwgJnNiKSA9
PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIH0KKyAg
Y29uc3Qgc2l6ZV90IHNpemUgPSBzYi5zdF9zaXplICsgMTsKKyAgYXV0byBidWZmID0gdW5pcXVl
X3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemVdKTsKKyNlbmRpZgorICA6OnNzaXplX3QgcmV0Owor
ICBpZiAoKHJldCA9IDo6cmVhZGxpbmsocC5jX3N0cigpLCBidWZmLmdldCgpLCBzaXplKSkgPT0g
LTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgX0xJQkNQUF9B
U1NFUlQocmV0ID4gMCwgIlRPRE8iKTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmV0KSA+
PSBzaXplKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OnZhbHVlX3Rvb19sYXJnZSk7Cisg
IGJ1ZmZbcmV0XSA9IDA7CisgIHJldHVybiB7YnVmZi5nZXQoKX07Cit9CisKK2Jvb2wgX19yZW1v
dmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+
IGVycigicmVtb3ZlIiwgZWMsICZwKTsKKyAgaWYgKDo6cmVtb3ZlKHAuY19zdHIoKSkgPT0gLTEp
IHsKKyAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vy
cm5vKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworbmFt
ZXNwYWNlIHsKKwordWludG1heF90IHJlbW92ZV9hbGxfaW1wbChwYXRoIGNvbnN0JiBwLCBlcnJv
cl9jb2RlJiBlYykgeworICBjb25zdCBhdXRvIG5wb3MgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+
KC0xKTsKKyAgY29uc3QgZmlsZV9zdGF0dXMgc3QgPSBfX3N5bWxpbmtfc3RhdHVzKHAsICZlYyk7
CisgIGlmIChlYykKKyAgICByZXR1cm4gbnBvczsKKyAgdWludG1heF90IGNvdW50ID0gMTsKKyAg
aWYgKGlzX2RpcmVjdG9yeShzdCkpIHsKKyAgICBmb3IgKGRpcmVjdG9yeV9pdGVyYXRvciBpdChw
LCBlYyk7ICFlYyAmJiBpdCAhPSBkaXJlY3RvcnlfaXRlcmF0b3IoKTsKKyAgICAgICAgIGl0Lmlu
Y3JlbWVudChlYykpIHsKKyAgICAgIGF1dG8gb3RoZXJfY291bnQgPSByZW1vdmVfYWxsX2ltcGwo
aXQtPnBhdGgoKSwgZWMpOworICAgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gbnBvczsKKyAg
ICAgIGNvdW50ICs9IG90aGVyX2NvdW50OworICAgIH0KKyAgICBpZiAoZWMpCisgICAgICByZXR1
cm4gbnBvczsKKyAgfQorICBpZiAoIV9fcmVtb3ZlKHAsICZlYykpCisgICAgcmV0dXJuIG5wb3M7
CisgIHJldHVybiBjb3VudDsKK30KKworfSAvLyBlbmQgbmFtZXNwYWNlCisKK3VpbnRtYXhfdCBf
X3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5k
bGVyPHVpbnRtYXhfdD4gZXJyKCJyZW1vdmVfYWxsIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2Rl
IG1lYzsKKyAgYXV0byBjb3VudCA9IHJlbW92ZV9hbGxfaW1wbChwLCBtZWMpOworICBpZiAobWVj
KSB7CisgICAgaWYgKG1lYyA9PSBlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KQorICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobWVjKTsKKyAgfQorICByZXR1cm4g
Y291bnQ7Cit9CisKK3ZvaWQgX19yZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYg
dG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlbmFtZSIs
IGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6cmVuYW1lKGZyb20uY19zdHIoKSwgdG8uY19zdHIo
KSkgPT0gLTEpCisgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCit2b2lkIF9f
cmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUsIGVycm9yX2NvZGUqIGVj
KSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlc2l6ZV9maWxlIiwgZWMsICZwKTsKKyAg
aWYgKDo6dHJ1bmNhdGUocC5jX3N0cigpLCBzdGF0aWNfY2FzdDwgOjpvZmZfdD4oc2l6ZSkpID09
IC0xKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3NwYWNl
X2luZm8gX19zcGFjZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhh
bmRsZXI8dm9pZD4gZXJyKCJzcGFjZSIsIGVjLCAmcCk7CisgIHNwYWNlX2luZm8gc2k7CisgIHN0
cnVjdCBzdGF0dmZzIG1fc3ZmcyA9IHt9OworICBpZiAoOjpzdGF0dmZzKHAuY19zdHIoKSwgJm1f
c3ZmcykgPT0gLTEpIHsKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgICAgc2ku
Y2FwYWNpdHkgPSBzaS5mcmVlID0gc2kuYXZhaWxhYmxlID0gc3RhdGljX2Nhc3Q8dWludG1heF90
PigtMSk7CisgICAgcmV0dXJuIHNpOworICB9CisgIC8vIE11bHRpcGx5IHdpdGggb3ZlcmZsb3cg
Y2hlY2tpbmcuCisgIGF1dG8gZG9fbXVsdCA9IFsmXSh1aW50bWF4X3QmIG91dCwgdWludG1heF90
IG90aGVyKSB7CisgICAgb3V0ID0gb3RoZXIgKiBtX3N2ZnMuZl9mcnNpemU7CisgICAgaWYgKG90
aGVyID09IDAgfHwgb3V0IC8gb3RoZXIgIT0gbV9zdmZzLmZfZnJzaXplKQorICAgICAgb3V0ID0g
c3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgIH07CisgIGRvX211bHQoc2kuY2FwYWNpdHks
IG1fc3Zmcy5mX2Jsb2Nrcyk7CisgIGRvX211bHQoc2kuZnJlZSwgbV9zdmZzLmZfYmZyZWUpOwor
ICBkb19tdWx0KHNpLmF2YWlsYWJsZSwgbV9zdmZzLmZfYmF2YWlsKTsKKyAgcmV0dXJuIHNpOwor
fQorCitmaWxlX3N0YXR1cyBfX3N0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykg
eworICByZXR1cm4gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIGVjKTsKK30KKworZmlsZV9zdGF0dXMg
X19zeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICByZXR1
cm4gZGV0YWlsOjpwb3NpeF9sc3RhdChwLCBlYyk7Cit9CisKK3BhdGggX190ZW1wX2RpcmVjdG9y
eV9wYXRoKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoInRlbXBf
ZGlyZWN0b3J5X3BhdGgiLCBlYyk7CisKKyAgY29uc3QgY2hhciogZW52X3BhdGhzW10gPSB7IlRN
UERJUiIsICJUTVAiLCAiVEVNUCIsICJURU1QRElSIn07CisgIGNvbnN0IGNoYXIqIHJldCA9IG51
bGxwdHI7CisKKyAgZm9yIChhdXRvJiBlcCA6IGVudl9wYXRocykKKyAgICBpZiAoKHJldCA9IGdl
dGVudihlcCkpKQorICAgICAgYnJlYWs7CisgIGlmIChyZXQgPT0gbnVsbHB0cikKKyAgICByZXQg
PSAiL3RtcCI7CisKKyAgcGF0aCBwKHJldCk7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgZmlsZV9z
dGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgJm1fZWMpOworICBpZiAoIXN0YXR1c19r
bm93bihzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYywgImNhbm5vdCBhY2Nlc3MgcGF0
aCBcIiVzXCIiLCBwKTsKKworICBpZiAoIWV4aXN0cyhzdCkgfHwgIWlzX2RpcmVjdG9yeShzdCkp
CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X2FfZGlyZWN0b3J5LCAicGF0aCBcIiVz
XCIgaXMgbm90IGEgZGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICBwKTsKKworICBy
ZXR1cm4gcDsKK30KKworcGF0aCBfX3dlYWtseV9jYW5vbmljYWwoY29uc3QgcGF0aCYgcCwgZXJy
b3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigid2Vha2x5X2Nhbm9uaWNh
bCIsIGVjLCAmcCk7CisKKyAgaWYgKHAuZW1wdHkoKSkKKyAgICByZXR1cm4gX19jYW5vbmljYWwo
IiIsIGVjKTsKKworICBwYXRoIHJlc3VsdDsKKyAgcGF0aCB0bXA7CisgIHRtcC5fX3Jlc2VydmUo
cC5uYXRpdmUoKS5zaXplKCkpOworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlRW5kKHAu
bmF0aXZlKCkpOworICAtLVBQOworICB2ZWN0b3I8c3RyaW5nX3ZpZXdfdD4gRE5FUGFydHM7CisK
KyAgd2hpbGUgKFBQLlN0YXRlICE9IFBhdGhQYXJzZXI6OlBTX0JlZm9yZUJlZ2luKSB7CisgICAg
dG1wLmFzc2lnbihjcmVhdGVWaWV3KHAubmF0aXZlKCkuZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFj
aygpKSk7CisgICAgZXJyb3JfY29kZSBtX2VjOworICAgIGZpbGVfc3RhdHVzIHN0ID0gX19zdGF0
dXModG1wLCAmbV9lYyk7CisgICAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7CisgICAgICByZXR1
cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICB9IGVsc2UgaWYgKGV4aXN0cyhzdCkpIHsKKyAgICAg
IHJlc3VsdCA9IF9fY2Fub25pY2FsKHRtcCwgZWMpOworICAgICAgYnJlYWs7CisgICAgfQorICAg
IERORVBhcnRzLnB1c2hfYmFjaygqUFApOworICAgIC0tUFA7CisgIH0KKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0JlZm9yZUJlZ2luKQorICAgIHJlc3VsdCA9IF9fY2Fub25pY2Fs
KCIiLCBlYyk7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKERORVBhcnRzLmVt
cHR5KCkpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgZm9yIChhdXRvIEl0ID0gRE5FUGFydHMucmJl
Z2luKCk7IEl0ICE9IERORVBhcnRzLnJlbmQoKTsgKytJdCkKKyAgICByZXN1bHQgLz0gKkl0Owor
ICByZXR1cm4gcmVzdWx0LmxleGljYWxseV9ub3JtYWwoKTsKK30KKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBkZWZpbml0aW9ucwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitjb25zdGV4cHIgcGF0aDo6dmFsdWVfdHlwZSBwYXRo
OjpwcmVmZXJyZWRfc2VwYXJhdG9yOworCitwYXRoJiBwYXRoOjpyZXBsYWNlX2V4dGVuc2lvbihw
YXRoIGNvbnN0JiByZXBsYWNlbWVudCkgeworICBwYXRoIHAgPSBleHRlbnNpb24oKTsKKyAgaWYg
KG5vdCBwLmVtcHR5KCkpIHsKKyAgICBfX3BuXy5lcmFzZShfX3BuXy5zaXplKCkgLSBwLm5hdGl2
ZSgpLnNpemUoKSk7CisgIH0KKyAgaWYgKCFyZXBsYWNlbWVudC5lbXB0eSgpKSB7CisgICAgaWYg
KHJlcGxhY2VtZW50Lm5hdGl2ZSgpWzBdICE9ICcuJykgeworICAgICAgX19wbl8gKz0gIi4iOwor
ICAgIH0KKyAgICBfX3BuXy5hcHBlbmQocmVwbGFjZW1lbnQuX19wbl8pOworICB9CisgIHJldHVy
biAqdGhpczsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5kZWNvbXBvc2UK
Kworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3Jvb3RfbmFtZSgpIGNvbnN0IHsKKyAgYXV0byBQUCA9
IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQ
YXJzZXI6OlBTX0luUm9vdE5hbWUpCisgICAgcmV0dXJuICpQUDsKKyAgcmV0dXJuIHt9OworfQor
CitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgIGF1dG8g
UFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQ
YXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKQorICAgICsrUFA7CisgIGlmIChQUC5TdGF0ZSA9PSBQ
YXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisgICAgcmV0dXJuICpQUDsKKyAgcmV0dXJuIHt9Owor
fQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9wYXRoX3JhdygpIGNvbnN0IHsKKyAgYXV0
byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYgKFBQLlN0YXRlID09
IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpIHsKKyAgICBhdXRvIE5leHRDaCA9IFBQLnBlZWso
KTsKKyAgICBpZiAoTmV4dENoICYmICpOZXh0Q2ggPT0gJy8nKSB7CisgICAgICArK1BQOworICAg
ICAgcmV0dXJuIGNyZWF0ZVZpZXcoX19wbl8uZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKTsK
KyAgICB9CisgICAgcmV0dXJuIFBQLlJhd0VudHJ5OworICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQ
YXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisgICAgcmV0dXJuICpQUDsKKyAgcmV0dXJuIHt9Owor
fQorCitzdGF0aWMgYm9vbCBDb25zdW1lUm9vdE5hbWUoUGF0aFBhcnNlciAqUFApIHsKKyAgc3Rh
dGljX2Fzc2VydChQYXRoUGFyc2VyOjpQU19CZWZvcmVCZWdpbiA9PSAxICYmCisgICAgICBQYXRo
UGFyc2VyOjpQU19JblJvb3ROYW1lID09IDIsCisgICAgICAiVmFsdWVzIGZvciBlbnVtcyBhcmUg
aW5jb3JyZWN0Iik7CisgIHdoaWxlIChQUC0+U3RhdGUgPD0gUGF0aFBhcnNlcjo6UFNfSW5Sb290
TmFtZSkKKyAgICArKygqUFApOworICByZXR1cm4gUFAtPlN0YXRlID09IFBhdGhQYXJzZXI6OlBT
X0F0RW5kOworfQorCitzdGF0aWMgYm9vbCBDb25zdW1lUm9vdERpcihQYXRoUGFyc2VyKiBQUCkg
eworICBzdGF0aWNfYXNzZXJ0KFBhdGhQYXJzZXI6OlBTX0JlZm9yZUJlZ2luID09IDEgJiYKKyAg
ICAgICAgICAgICAgICBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lID09IDIgJiYKKyAgICAgICAg
ICAgICAgICBQYXRoUGFyc2VyOjpQU19JblJvb3REaXIgPT0gMywgIlZhbHVlcyBmb3IgZW51bXMg
YXJlIGluY29ycmVjdCIpOworICB3aGlsZSAoUFAtPlN0YXRlIDw9IFBhdGhQYXJzZXI6OlBTX0lu
Um9vdERpcikKKyAgICArKygqUFApOworICByZXR1cm4gUFAtPlN0YXRlID09IFBhdGhQYXJzZXI6
OlBTX0F0RW5kOworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcmVsYXRpdmVfcGF0aCgpIGNv
bnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYg
KENvbnN1bWVSb290RGlyKCZQUCkpCisgICAgcmV0dXJuIHt9OworICByZXR1cm4gY3JlYXRlVmll
dyhQUC5SYXdFbnRyeS5kYXRhKCksICZfX3BuXy5iYWNrKCkpOworfQorCitzdHJpbmdfdmlld190
IHBhdGg6Ol9fcGFyZW50X3BhdGgoKSBjb25zdCB7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVy
biB7fTsKKyAgLy8gRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByb290IHBhdGggYnV0IG5vdCBhIHJl
bGF0aXZlIHBhdGguIEluIHRoYXQgY2FzZQorICAvLyByZXR1cm4gKnRoaXMuCisgIHsKKyAgICBh
dXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGlmIChDb25zdW1l
Um9vdERpcigmUFApKQorICAgICAgcmV0dXJuIF9fcG5fOworICB9CisgIC8vIE90aGVyd2lzZSBy
ZW1vdmUgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBlbmQgb2YgdGhlIHBhdGgsIGFuZCByZXR1
cm4KKyAgLy8gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoYXQgcGF0aAorICB7CisgICAgYXV0byBQ
UCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUVuZChfX3BuXyk7CisgICAgLS1QUDsKKyAgICBpZiAoUFAu
UmF3RW50cnkuZGF0YSgpID09IF9fcG5fLmRhdGEoKSkKKyAgICAgIHJldHVybiB7fTsKKyAgICAt
LVBQOworICAgIHJldHVybiBjcmVhdGVWaWV3KF9fcG5fLmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJh
Y2soKSk7CisgIH0KK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2ZpbGVuYW1lKCkgY29uc3Qg
eworICBpZiAoZW1wdHkoKSkKKyAgICByZXR1cm4ge307CisgIHsKKyAgICBQYXRoUGFyc2VyIFBQ
ID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGlmIChDb25zdW1lUm9vdERp
cigmUFApKQorICAgICAgcmV0dXJuIHt9OworICB9CisgIHJldHVybiAqKC0tUGF0aFBhcnNlcjo6
Q3JlYXRlRW5kKF9fcG5fKSk7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19zdGVtKCkgY29u
c3QgeworICByZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1lKCkpLmZp
cnN0OworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fZXh0ZW5zaW9uKCkgY29uc3QgeworICBy
ZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1lKCkpLnNlY29uZDsKK30K
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5nZW4KKworZW51bSBQYXRoUGFydEtpbmQg
OiB1bnNpZ25lZCBjaGFyIHsKKyAgUEtfTm9uZSwKKyAgUEtfUm9vdFNlcCwKKyAgUEtfRmlsZW5h
bWUsCisgIFBLX0RvdCwKKyAgUEtfRG90RG90LAorICBQS19UcmFpbGluZ1NlcAorfTsKKworc3Rh
dGljIFBhdGhQYXJ0S2luZCBDbGFzc2lmeVBhdGhQYXJ0KHN0cmluZ192aWV3X3QgUGFydCkgewor
ICBpZiAoUGFydC5lbXB0eSgpKQorICAgIHJldHVybiBQS19UcmFpbGluZ1NlcDsKKyAgaWYgKFBh
cnQgPT0gIi4iKQorICAgIHJldHVybiBQS19Eb3Q7CisgIGlmIChQYXJ0ID09ICIuLiIpCisgICAg
cmV0dXJuIFBLX0RvdERvdDsKKyAgaWYgKFBhcnQgPT0gIi8iKQorICAgIHJldHVybiBQS19Sb290
U2VwOworICByZXR1cm4gUEtfRmlsZW5hbWU7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5X25v
cm1hbCgpIGNvbnN0IHsKKyAgaWYgKF9fcG5fLmVtcHR5KCkpCisgICAgcmV0dXJuICp0aGlzOwor
CisgIHVzaW5nIFBhcnRLaW5kUGFpciA9IHBhaXI8c3RyaW5nX3ZpZXdfdCwgUGF0aFBhcnRLaW5k
PjsKKyAgdmVjdG9yPFBhcnRLaW5kUGFpcj4gUGFydHM7CisgIC8vIEd1ZXNzIGFzIHRvIGhvdyBt
YW55IGVsZW1lbnRzIHRoZSBwYXRoIGhhcyB0byBhdm9pZCByZWFsbG9jYXRpbmcuCisgIFBhcnRz
LnJlc2VydmUoMzIpOworCisgIC8vIFRyYWNrIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBwYXJ0cyBh
cyB3ZSBjb2xsZWN0IHRoZW0uIFRoaXMgYWxsb3dzIHRoZQorICAvLyByZXN1bHRpbmcgcGF0aCB0
byByZXNlcnZlIHRoZSBjb3JyZWN0IGFtb3VudCBvZiBtZW1vcnkuCisgIHNpemVfdCBOZXdQYXRo
U2l6ZSA9IDA7CisgIGF1dG8gQWRkUGFydCA9IFsmXShQYXRoUGFydEtpbmQgSywgc3RyaW5nX3Zp
ZXdfdCBQKSB7CisgICAgTmV3UGF0aFNpemUgKz0gUC5zaXplKCk7CisgICAgUGFydHMuZW1wbGFj
ZV9iYWNrKFAsIEspOworICB9OworICBhdXRvIExhc3RQYXJ0S2luZCA9IFsmXSgpIHsKKyAgICBp
ZiAoUGFydHMuZW1wdHkoKSkKKyAgICAgIHJldHVybiBQS19Ob25lOworICAgIHJldHVybiBQYXJ0
cy5iYWNrKCkuc2Vjb25kOworICB9OworCisgIGJvb2wgTWF5YmVOZWVkVHJhaWxpbmdTZXAgPSBm
YWxzZTsKKyAgLy8gQnVpbGQgYSBzdGFjayBjb250YWluaW5nIHRoZSByZW1haW5pbmcgZWxlbWVu
dHMgb2YgdGhlIHBhdGgsIHBvcHBpbmcgb2ZmCisgIC8vIGVsZW1lbnRzIHdoaWNoIG9jY3VyIGJl
Zm9yZSBhICcuLicgZW50cnkuCisgIGZvciAoYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJl
Z2luKF9fcG5fKTsgUFA7ICsrUFApIHsKKyAgICBhdXRvIFBhcnQgPSAqUFA7CisgICAgUGF0aFBh
cnRLaW5kIEtpbmQgPSBDbGFzc2lmeVBhdGhQYXJ0KFBhcnQpOworICAgIHN3aXRjaCAoS2luZCkg
eworICAgIGNhc2UgUEtfRmlsZW5hbWU6CisgICAgY2FzZSBQS19Sb290U2VwOiB7CisgICAgICAv
LyBBZGQgYWxsIG5vbi1kb3QgYW5kIG5vbi1kb3QtZG90IGVsZW1lbnRzIHRvIHRoZSBzdGFjayBv
ZiBlbGVtZW50cy4KKyAgICAgIEFkZFBhcnQoS2luZCwgUGFydCk7CisgICAgICBNYXliZU5lZWRU
cmFpbGluZ1NlcCA9IGZhbHNlOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEtfRG90
RG90OiB7CisgICAgICAvLyBPbmx5IHB1c2ggYSAiLi4iIGVsZW1lbnQgaWYgdGhlcmUgYXJlIG5v
IGVsZW1lbnRzIHByZWNlZGluZyB0aGUgIi4uIiwKKyAgICAgIC8vIG9yIGlmIHRoZSBwcmVjZWRp
bmcgZWxlbWVudCBpcyBpdHNlbGYgIi4uIi4KKyAgICAgIGF1dG8gTGFzdEtpbmQgPSBMYXN0UGFy
dEtpbmQoKTsKKyAgICAgIGlmIChMYXN0S2luZCA9PSBQS19GaWxlbmFtZSkgeworICAgICAgICBO
ZXdQYXRoU2l6ZSAtPSBQYXJ0cy5iYWNrKCkuZmlyc3Quc2l6ZSgpOworICAgICAgICBQYXJ0cy5w
b3BfYmFjaygpOworICAgICAgfSBlbHNlIGlmIChMYXN0S2luZCAhPSBQS19Sb290U2VwKQorICAg
ICAgICBBZGRQYXJ0KFBLX0RvdERvdCwgIi4uIik7CisgICAgICBNYXliZU5lZWRUcmFpbGluZ1Nl
cCA9IExhc3RLaW5kID09IFBLX0ZpbGVuYW1lOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUEtfRG90OgorICAgIGNhc2UgUEtfVHJhaWxpbmdTZXA6IHsKKyAgICAgIE1heWJlTmVlZFRy
YWlsaW5nU2VwID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBLX05vbmU6
CisgICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisgIC8vIFtmcy5wYXRo
LmdlbmVyaWNdcDYuODogSWYgdGhlIHBhdGggaXMgZW1wdHksIGFkZCBhIGRvdC4KKyAgaWYgKFBh
cnRzLmVtcHR5KCkpCisgICAgcmV0dXJuICIuIjsKKworICAvLyBbZnMucGF0aC5nZW5lcmljXXA2
Ljc6IElmIHRoZSBsYXN0IGZpbGVuYW1lIGlzIGRvdC1kb3QsIHJlbW92ZSBhbnkKKyAgLy8gdHJh
aWxpbmcgZGlyZWN0b3J5LXNlcGFyYXRvci4KKyAgYm9vbCBOZWVkVHJhaWxpbmdTZXAgPSBNYXli
ZU5lZWRUcmFpbGluZ1NlcCAmJiBMYXN0UGFydEtpbmQoKSA9PSBQS19GaWxlbmFtZTsKKworICBw
YXRoIFJlc3VsdDsKKyAgUmVzdWx0Ll9fcG5fLnJlc2VydmUoUGFydHMuc2l6ZSgpICsgTmV3UGF0
aFNpemUgKyBOZWVkVHJhaWxpbmdTZXApOworICBmb3IgKGF1dG8mIFBLIDogUGFydHMpCisgICAg
UmVzdWx0IC89IFBLLmZpcnN0OworCisgIGlmIChOZWVkVHJhaWxpbmdTZXApCisgICAgUmVzdWx0
IC89ICIiOworCisgIHJldHVybiBSZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgRGV0ZXJtaW5lTGV4
aWNhbEVsZW1lbnRDb3VudChQYXRoUGFyc2VyIFBQKSB7CisgIGludCBDb3VudCA9IDA7CisgIGZv
ciAoOyBQUDsgKytQUCkgeworICAgIGF1dG8gRWxlbSA9ICpQUDsKKyAgICBpZiAoRWxlbSA9PSAi
Li4iKQorICAgICAgLS1Db3VudDsKKyAgICBlbHNlIGlmIChFbGVtICE9ICIuIiAmJiBFbGVtICE9
ICIiKQorICAgICAgKytDb3VudDsKKyAgfQorICByZXR1cm4gQ291bnQ7Cit9CisKK3BhdGggcGF0
aDo6bGV4aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgmIGJhc2UpIGNvbnN0IHsKKyAgeyAvLyBw
ZXJmb3JtIHJvb3QtbmFtZS9yb290LWRpcmVjdG9yeSBtaXNtYXRjaCBjaGVja3MKKyAgICBhdXRv
IFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGF1dG8gUFBCYXNlID0g
UGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7CisgICAgYXV0byBDaGVja0l0ZXJN
aXNtYXRjaEF0QmFzZSA9IFsmXSgpIHsKKyAgICAgIHJldHVybiBQUC5TdGF0ZSAhPSBQUEJhc2Uu
U3RhdGUgJiYKKyAgICAgICAgICAgICAoUFAuaW5Sb290UGF0aCgpIHx8IFBQQmFzZS5pblJvb3RQ
YXRoKCkpOworICAgIH07CisgICAgaWYgKFBQLmluUm9vdE5hbWUoKSAmJiBQUEJhc2UuaW5Sb290
TmFtZSgpKSB7CisgICAgICBpZiAoKlBQICE9ICpQUEJhc2UpCisgICAgICAgIHJldHVybiB7fTsK
KyAgICB9IGVsc2UgaWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNlKCkpCisgICAgICByZXR1cm4g
e307CisKKyAgICBpZiAoUFAuaW5Sb290UGF0aCgpKQorICAgICAgKytQUDsKKyAgICBpZiAoUFBC
YXNlLmluUm9vdFBhdGgoKSkKKyAgICAgICsrUFBCYXNlOworICAgIGlmIChDaGVja0l0ZXJNaXNt
YXRjaEF0QmFzZSgpKQorICAgICAgcmV0dXJuIHt9OworICB9CisKKyAgLy8gRmluZCB0aGUgZmly
c3QgbWlzbWF0Y2hpbmcgZWxlbWVudAorICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVn
aW4oX19wbl8pOworICBhdXRvIFBQQmFzZSA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKGJhc2Uu
X19wbl8pOworICB3aGlsZSAoUFAgJiYgUFBCYXNlICYmIFBQLlN0YXRlID09IFBQQmFzZS5TdGF0
ZSAmJiAqUFAgPT0gKlBQQmFzZSkgeworICAgICsrUFA7CisgICAgKytQUEJhc2U7CisgIH0KKwor
ICAvLyBJZiB0aGVyZSBpcyBubyBtaXNtYXRjaCwgcmV0dXJuICIuIi4KKyAgaWYgKCFQUCAmJiAh
UFBCYXNlKQorICAgIHJldHVybiAiLiI7CisKKyAgLy8gT3RoZXJ3aXNlLCBkZXRlcm1pbmUgdGhl
IG51bWJlciBvZiBlbGVtZW50cywgJ24nLCB3aGljaCBhcmUgbm90IGRvdCBvcgorICAvLyBkb3Qt
ZG90IG1pbnVzIHRoZSBudW1iZXIgb2YgZG90LWRvdCBlbGVtZW50cy4KKyAgaW50IEVsZW1Db3Vu
dCA9IERldGVybWluZUxleGljYWxFbGVtZW50Q291bnQoUFBCYXNlKTsKKyAgaWYgKEVsZW1Db3Vu
dCA8IDApCisgICAgcmV0dXJuIHt9OworCisgIC8vIGlmIG4gPT0gMCBhbmQgKGEgPT0gZW5kKCkg
fHwgYS0+ZW1wdHkoKSksIHJldHVybnMgcGF0aCgiLiIpOyBvdGhlcndpc2UKKyAgaWYgKEVsZW1D
b3VudCA9PSAwICYmIChQUC5hdEVuZCgpIHx8ICpQUCA9PSAiIikpCisgICAgcmV0dXJuICIuIjsK
KworICAvLyByZXR1cm4gYSBwYXRoIGNvbnN0cnVjdGVkIHdpdGggJ24nIGRvdC1kb3QgZWxlbWVu
dHMsIGZvbGxvd2VkIGJ5IHRoZSB0aGUKKyAgLy8gZWxlbWVudHMgb2YgJyp0aGlzJyBhZnRlciB0
aGUgbWlzbWF0Y2guCisgIHBhdGggUmVzdWx0OworICAvLyBGSVhNRTogUmVzZXJ2ZSBlbm91Z2gg
cm9vbSBpbiBSZXN1bHQgdGhhdCBpdCB3b24ndCBoYXZlIHRvIHJlLWFsbG9jYXRlLgorICB3aGls
ZSAoRWxlbUNvdW50LS0pCisgICAgUmVzdWx0IC89ICIuLiI7CisgIGZvciAoOyBQUDsgKytQUCkK
KyAgICBSZXN1bHQgLz0gKlBQOworICByZXR1cm4gUmVzdWx0OworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLyBwYXRoLmNvbXBhcmlzb25zCitzdGF0aWMgaW50IENvbXBhcmVSb290TmFtZShQ
YXRoUGFyc2VyICpMSFMsIFBhdGhQYXJzZXIgKlJIUykgeworICBpZiAoIUxIUy0+aW5Sb290TmFt
ZSgpICYmICFSSFMtPmluUm9vdE5hbWUoKSkKKyAgICByZXR1cm4gMDsKKworICBhdXRvIEdldFJv
b3ROYW1lID0gW10oUGF0aFBhcnNlciAqUGFyc2VyKSAtPiBzdHJpbmdfdmlld190IHsKKyAgICBy
ZXR1cm4gUGFyc2VyLT5pblJvb3ROYW1lKCkgPyAqKlBhcnNlciA6ICIiOworICB9OworICBpbnQg
cmVzID0gR2V0Um9vdE5hbWUoTEhTKS5jb21wYXJlKEdldFJvb3ROYW1lKFJIUykpOworICBDb25z
dW1lUm9vdE5hbWUoTEhTKTsKKyAgQ29uc3VtZVJvb3ROYW1lKFJIUyk7CisgIHJldHVybiByZXM7
Cit9CisKK3N0YXRpYyBpbnQgQ29tcGFyZVJvb3REaXIoUGF0aFBhcnNlciAqTEhTLCBQYXRoUGFy
c2VyICpSSFMpIHsKKyAgaWYgKCFMSFMtPmluUm9vdERpcigpICYmIFJIUy0+aW5Sb290RGlyKCkp
CisgICAgcmV0dXJuIC0xOworICBlbHNlIGlmIChMSFMtPmluUm9vdERpcigpICYmICFSSFMtPmlu
Um9vdERpcigpKQorICAgIHJldHVybiAxOworICBlbHNlIHsKKyAgICBDb25zdW1lUm9vdERpcihM
SFMpOworICAgIENvbnN1bWVSb290RGlyKFJIUyk7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKwor
c3RhdGljIGludCBDb21wYXJlUmVsYXRpdmUoUGF0aFBhcnNlciAqTEhTUHRyLCBQYXRoUGFyc2Vy
ICpSSFNQdHIpIHsKKyAgYXV0byAmTEhTID0gKkxIU1B0cjsKKyAgYXV0byAmUkhTID0gKlJIU1B0
cjsKKworICBpbnQgcmVzOworICB3aGlsZSAoTEhTICYmIFJIUykgeworICAgIGlmICgocmVzID0g
KCpMSFMpLmNvbXBhcmUoKlJIUykpICE9IDApCisgICAgICByZXR1cm4gcmVzOworICAgICsrTEhT
OworICAgICsrUkhTOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IENvbXBhcmVF
bmRTdGF0ZShQYXRoUGFyc2VyICpMSFMsIFBhdGhQYXJzZXIgKlJIUykgeworICBpZiAoTEhTLT5h
dEVuZCgpICYmICFSSFMtPmF0RW5kKCkpCisgICAgcmV0dXJuIC0xOworICBlbHNlIGlmICghTEhT
LT5hdEVuZCgpICYmIFJIUy0+YXRFbmQoKSkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9
CisKK2ludCBwYXRoOjpfX2NvbXBhcmUoc3RyaW5nX3ZpZXdfdCBfX3MpIGNvbnN0IHsKKyAgYXV0
byBMSFMgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGF1dG8gUkhTID0gUGF0
aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19zKTsKKyAgaW50IHJlczsKKworICBpZiAoKHJlcyA9IENv
bXBhcmVSb290TmFtZSgmTEhTLCAmUkhTKSkgIT0gMCkKKyAgICByZXR1cm4gcmVzOworCisgIGlm
ICgocmVzID0gQ29tcGFyZVJvb3REaXIoJkxIUywgJlJIUykpICE9IDApCisgICAgcmV0dXJuIHJl
czsKKworICBpZiAoKHJlcyA9IENvbXBhcmVSZWxhdGl2ZSgmTEhTLCAmUkhTKSkgIT0gMCkKKyAg
ICByZXR1cm4gcmVzOworCisgIHJldHVybiBDb21wYXJlRW5kU3RhdGUoJkxIUywgJlJIUyk7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGgubm9ubWVtYmVycworc2l6ZV90IGhhc2hf
dmFsdWUoY29uc3QgcGF0aCYgX19wKSBub2V4Y2VwdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2Vy
OjpDcmVhdGVCZWdpbihfX3AubmF0aXZlKCkpOworICBzaXplX3QgaGFzaF92YWx1ZSA9IDA7Cisg
IGhhc2g8c3RyaW5nX3ZpZXdfdD4gaGFzaGVyOworICB3aGlsZSAoUFApIHsKKyAgICBoYXNoX3Zh
bHVlID0gX19oYXNoX2NvbWJpbmUoaGFzaF92YWx1ZSwgaGFzaGVyKCpQUCkpOworICAgICsrUFA7
CisgIH0KKyAgcmV0dXJuIGhhc2hfdmFsdWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
IHBhdGguaXRyCitwYXRoOjppdGVyYXRvciBwYXRoOjpiZWdpbigpIGNvbnN0IHsKKyAgYXV0byBQ
UCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaXRlcmF0b3IgaXQ7CisgIGl0
Ll9fcGF0aF9wdHJfID0gdGhpczsKKyAgaXQuX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxwYXRoOjpp
dGVyYXRvcjo6X1BhcnNlclN0YXRlPihQUC5TdGF0ZSk7CisgIGl0Ll9fZW50cnlfID0gUFAuUmF3
RW50cnk7CisgIGl0Ll9fc3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVy
biBpdDsKK30KKworcGF0aDo6aXRlcmF0b3IgcGF0aDo6ZW5kKCkgY29uc3QgeworICBpdGVyYXRv
ciBpdHt9OworICBpdC5fX3N0YXRlXyA9IHBhdGg6Oml0ZXJhdG9yOjpfQXRFbmQ7CisgIGl0Ll9f
cGF0aF9wdHJfID0gdGhpczsKKyAgcmV0dXJuIGl0OworfQorCitwYXRoOjppdGVyYXRvciYgcGF0
aDo6aXRlcmF0b3I6Ol9faW5jcmVtZW50KCkgeworICBQYXRoUGFyc2VyIFBQKF9fcGF0aF9wdHJf
LT5uYXRpdmUoKSwgX19lbnRyeV8sIF9fc3RhdGVfKTsKKyAgKytQUDsKKyAgX19zdGF0ZV8gPSBz
dGF0aWNfY2FzdDxfUGFyc2VyU3RhdGU+KFBQLlN0YXRlKTsKKyAgX19lbnRyeV8gPSBQUC5SYXdF
bnRyeTsKKyAgX19zdGFzaGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuICp0
aGlzOworfQorCitwYXRoOjppdGVyYXRvciYgcGF0aDo6aXRlcmF0b3I6Ol9fZGVjcmVtZW50KCkg
eworICBQYXRoUGFyc2VyIFBQKF9fcGF0aF9wdHJfLT5uYXRpdmUoKSwgX19lbnRyeV8sIF9fc3Rh
dGVfKTsKKyAgLS1QUDsKKyAgX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxfUGFyc2VyU3RhdGU+KFBQ
LlN0YXRlKTsKKyAgX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsKKyAgX19zdGFzaGVkX2VsZW1fLl9f
YXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBlbnRyeSBkZWZp
bml0aW9ucworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9MSUJDUFBfV0lOMzJB
UEkKK2Vycm9yX2NvZGUgZGlyZWN0b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBub2V4Y2VwdCB7
CisgIF9fZGF0YV8uX19yZXNldCgpOworICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7CisKKyAgU3Rh
dFQgZnVsbF9zdDsKKyAgZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X2xzdGF0KF9fcF8s
IGZ1bGxfc3QsICZmYWlsdXJlX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7CisgICAg
X19kYXRhXy5fX3Jlc2V0KCk7CisgICAgcmV0dXJuIGZhaWx1cmVfZWM7CisgIH0KKworICBpZiAo
IV9WU1REX0ZTOjpleGlzdHMoc3QpIHx8ICFfVlNURF9GUzo6aXNfc3ltbGluayhzdCkpIHsKKyAg
ICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoTm9uU3lt
bGluazsKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25v
bl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgfSBlbHNlIHsgLy8gd2UgaGF2ZSBh
IHN5bWxpbmsKKyAgICBfX2RhdGFfLl9fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7Cisg
ICAgLy8gR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2VkIGVudGl0eS4KKyAgICAv
LyBJZ25vcmUgZXJyb3JzIGZyb20gc3RhdCwgc2luY2Ugd2UgZG9uJ3Qgd2FudCBlcnJvcnMgcmVn
YXJkaW5nIHN5bWxpbmsKKyAgICAvLyByZXNvbHV0aW9uIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSB1
c2VyLgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBzdCA9IGRldGFpbDo6cG9zaXhf
c3RhdChfX3BfLCBmdWxsX3N0LCAmaWdub3JlZF9lYyk7CisKKyAgICBfX2RhdGFfLl9fdHlwZV8g
PSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lv
bnMoKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaW5rLCB0aGVuIG9u
bHkgcGFydGlhbGx5IHBvcHVsYXRlIHRoZQorICAgIC8vIGNhY2hlLgorICAgIGlmICghc3RhdHVz
X2tub3duKHN0KSkgeworICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2Vu
dHJ5OjpfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOworICAgICAgcmV0dXJuIGVycm9yX2NvZGV7
fTsKKyAgICB9CisgICAgLy8gT3RoZXJ3aXNlLCB3ZSByZXNvbHZlZCB0aGUgbGluaywgcG90ZW50
aWFsbHkgYXMgbm90IGV4aXN0aW5nLgorICAgIC8vIFRoYXQncyBPSy4KKyAgICBfX2RhdGFfLl9f
Y2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGluazsKKyAgfQorCisg
IGlmIChfVlNURF9GUzo6aXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICBfX2RhdGFfLl9fc2l6ZV8g
PSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KGZ1bGxfc3Quc3Rfc2l6ZSk7CisKKyAgaWYgKF9WU1RE
X0ZTOjpleGlzdHMoc3QpKSB7CisgICAgX19kYXRhXy5fX25saW5rXyA9IHN0YXRpY19jYXN0PHVp
bnRtYXhfdD4oZnVsbF9zdC5zdF9ubGluayk7CisKKyAgICAvLyBBdHRlbXB0IHRvIGV4dHJhY3Qg
dGhlIG10aW1lLCBhbmQgZmFpbCBpZiBpdCdzIG5vdCByZXByZXNlbnRhYmxlIHVzaW5nCisgICAg
Ly8gZmlsZV90aW1lX3R5cGUuIEZvciBub3cgd2UgaWdub3JlIHRoZSBlcnJvciwgYXMgd2UnbGwg
cmVwb3J0IGl0IHdoZW4KKyAgICAvLyB0aGUgdmFsdWUgaXMgYWN0dWFsbHkgdXNlZC4KKyAgICBl
cnJvcl9jb2RlIGlnbm9yZWRfZWM7CisgICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID0KKyAgICAg
ICAgX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShfX3BfLCBmdWxsX3N0LCAmaWdub3JlZF9lYyk7
CisgIH0KKworICByZXR1cm4gZmFpbHVyZV9lYzsKK30KKyNlbHNlCitlcnJvcl9jb2RlIGRpcmVj
dG9yeV9lbnRyeTo6X19kb19yZWZyZXNoKCkgbm9leGNlcHQgeworICBfX2RhdGFfLl9fcmVzZXQo
KTsKKyAgZXJyb3JfY29kZSBmYWlsdXJlX2VjOworCisgIGZpbGVfc3RhdHVzIHN0ID0gX1ZTVERf
RlM6OnN5bWxpbmtfc3RhdHVzKF9fcF8sIGZhaWx1cmVfZWMpOworICBpZiAoIXN0YXR1c19rbm93
bihzdCkpIHsKKyAgICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgICByZXR1cm4gZmFpbHVyZV9lYzsK
KyAgfQorCisgIGlmICghX1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9WU1REX0ZTOjppc19zeW1s
aW5rKHN0KSkgeworICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6
X1JlZnJlc2hOb25TeW1saW5rOworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAg
ICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICB9IGVsc2Ug
eyAvLyB3ZSBoYXZlIGEgc3ltbGluaworICAgIF9fZGF0YV8uX19zeW1fcGVybXNfID0gc3QucGVy
bWlzc2lvbnMoKTsKKyAgICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rZWQg
ZW50aXR5LgorICAgIC8vIElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBzaW5jZSB3ZSBkb24ndCB3
YW50IGVycm9ycyByZWdhcmRpbmcgc3ltbGluaworICAgIC8vIHJlc29sdXRpb24gdG8gYmUgcmVw
b3J0ZWQgdG8gdGhlIHVzZXIuCisgICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIHN0ID0g
X1ZTVERfRlM6OnN0YXR1cyhfX3BfLCBpZ25vcmVkX2VjKTsKKworICAgIF9fZGF0YV8uX190eXBl
XyA9IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNz
aW9ucygpOworCisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4g
b25seSBwYXJ0aWFsbHkgcG9wdWxhdGUgdGhlCisgICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0
dXNfa25vd24oc3QpKSB7CisgICAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3Rvcnlf
ZW50cnk6Ol9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29k
ZXt9OworICAgIH0KKyAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6
Ol9SZWZyZXNoU3ltbGluazsKKyAgfQorCisgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSBi
cm9rZW4sIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb25seSBhIHBsYWNlaG9sZGVyLgorICAvLyBX
ZSBuZWVkIHRvIGNhY2hlIGxhc3Rfd3JpdGVfdGltZSwgZmlsZV9zaXplLCBhbmQgaGFyZF9saW5r
X2NvdW50IGhlcmUgYmVmb3JlCisgIC8vIHRoZSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSB3b3Jr
cy4KKworICByZXR1cm4gZmFpbHVyZV9lYzsKK30KKyNlbmRpZgorCitfTElCQ1BQX0VORF9OQU1F
U1BBQ0VfRklMRVNZU1RFTQorCisvKiAtLSBFTkQgZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCAt
LSAqLworCisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTUw
MAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVz
eXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjY3NCBAQAorLy8gLSotIEMrKyAtKi0KKy8vPT09LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIGZpbGVzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZy
YXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBN
SVQgYW5kIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4KKy8vIFNvdXJjZSBMaWNlbnNl
cy4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09
PS8vCisKKyNpZiBfX2hhc19pbmNsdWRlKDxmaWxlc3lzdGVtPikKKyNpbmNsdWRlIDxmaWxlc3lz
dGVtPgorI2Vsc2UKKworLyogSW1wb3J0cyBhIGNvcHkgb2YgPGZpbGVzeXN0ZW0+IGZyb20gNjI4
YTMxOTQ3NSBvZiB0aGUgbGliYysrIHByb2plY3QuIFRoaXMKKyAgIGlzIG9ubHkgbmVlZGVkIHVu
dGlsIG1hY09TIDEwLjE0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYXQgd2hpY2ggcG9pbnQgYWxs
CisgICBwb3J0cyB3aWxsIHN1cHBvcnQgPGZpbGVzeXN0ZW0+IGRpcmVjdGx5LgorKi8KKworI2lm
bmRlZiBfTElCQ1BQX0ZJTEVTWVNURU0KKyNkZWZpbmUgX0xJQkNQUF9GSUxFU1lTVEVNCisvKgor
ICAgIGZpbGVzeXN0ZW0gc3lub3BzaXMKKworICAgIG5hbWVzcGFjZSBzdGQgeyBuYW1lc3BhY2Ug
ZmlsZXN5c3RlbSB7CisKKyAgICBjbGFzcyBwYXRoOworCisgICAgdm9pZCBzd2FwKHBhdGgmIGxo
cywgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRo
JiBwKSBub2V4Y2VwdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNv
bnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgm
IGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPCAoY29u
c3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9v
bCBvcGVyYXRvcj4gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsK
KyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5v
ZXhjZXB0OworCisgICAgcGF0aCBvcGVyYXRvci8gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0
aCYgcmhzKTsKKworICAgIC8vIGZzLnBhdGguaW8gb3BlcmF0b3JzIGFyZSBmcmllbmRzIG9mIHBh
dGguCisgICAgdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHM+CisgICAgZnJpZW5k
IGJhc2ljX29zdHJlYW08Y2hhclQsIHRyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXJULCB0cmFpdHM+JiBvcywgY29uc3QgcGF0aCYgcCk7CisKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cz4KKyAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxjaGFy
VCwgdHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4m
IGlzLCBwYXRoJiBwKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTb3VyY2U+CisgICAgICBwYXRo
IHU4cGF0aChjb25zdCBTb3VyY2UmIHNvdXJjZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIElucHV0
SXRlcmF0b3I+CisgICAgICBwYXRoIHU4cGF0aChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0
ZXJhdG9yIGxhc3QpOworCisgICAgY2xhc3MgZmlsZXN5c3RlbV9lcnJvcjsKKyAgICBjbGFzcyBk
aXJlY3RvcnlfZW50cnk7CisKKyAgICBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAv
LyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisg
ICAgZGlyZWN0b3J5X2l0ZXJhdG9yIGJlZ2luKGRpcmVjdG9yeV9pdGVyYXRvciBpdGVyKSBub2V4
Y2VwdDsKKyAgICBkaXJlY3RvcnlfaXRlcmF0b3IgZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRv
ciYpIG5vZXhjZXB0OworCisgICAgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsK
KworICAgIC8vIGVuYWJsZSByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2Vk
IGZvciBzdGF0ZW1lbnRzCisgICAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBiZWdpbihy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IgZW5kKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0
b3ImKSBub2V4Y2VwdDsKKworICAgIGNsYXNzIGZpbGVfc3RhdHVzOworCisgICAgc3RydWN0IHNw
YWNlX2luZm8KKyAgICB7CisgICAgICB1aW50bWF4X3QgY2FwYWNpdHk7CisgICAgICB1aW50bWF4
X3QgZnJlZTsKKyAgICAgIHVpbnRtYXhfdCBhdmFpbGFibGU7CisgICAgfTsKKworICAgIGVudW0g
Y2xhc3MgZmlsZV90eXBlOworICAgIGVudW0gY2xhc3MgcGVybXM7CisgICAgZW51bSBjbGFzcyBw
ZXJtX29wdGlvbnM7CisgICAgZW51bSBjbGFzcyBjb3B5X29wdGlvbnM7CisgICAgZW51bSBjbGFz
cyBkaXJlY3Rvcnlfb3B0aW9uczsKKworICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHRy
aXZpYWwtY2xvY2s+ICBmaWxlX3RpbWVfdHlwZTsKKworICAgIC8vIG9wZXJhdGlvbmFsIGZ1bmN0
aW9ucworCisgICAgcGF0aCBhYnNvbHV0ZShjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIGFic29s
dXRlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUgJmVjKTsKKworICAgIHBhdGggY2Fub25pY2Fs
KGNvbnN0IHBhdGgmIHApOworICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKTsKKworICAgIHZvaWQgY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRo
JiB0byk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBl
cnJvcl9jb2RlJiBlYyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBh
dGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9ucyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgm
IGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRo
JiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYg
ZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUmIGVjKTsKKyAgICBib29sIGNvcHlfZmls
ZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbik7
CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNv
cHlfb3B0aW9ucyBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBlYyk7CisKKyAgICB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1s
aW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluayk7CisgICAgdm9pZCBjb3B5X3N5bWxpbmsoY29u
c3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAg
ICBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0
ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29s
IGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0
b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wg
Y3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzKTsK
KyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0
cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7CisKKyAgICB2b2lkIGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBw
YXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX2RpcmVj
dG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBu
b2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29u
c3QgcGF0aCYgbmV3X2hhcmRfbGluayk7CisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0
IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3Jl
YXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAg
ICB2b2lkIGNyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3lt
bGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgcGF0aCBjdXJyZW50X3BhdGgoKTsKKyAgICBwYXRoIGN1cnJlbnRfcGF0
aChlcnJvcl9jb2RlJiBlYyk7CisgICAgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCk7
CisgICAgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgYm9vbCBleGlzdHMoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAg
Ym9vbCBleGlzdHMoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0
IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBwMik7CisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBh
dGgmIHAxLCBjb25zdCBwYXRoJiBwMiwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAg
dWludG1heF90ICAgIGZpbGVfc2l6ZShjb25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAg
ZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAg
IHVpbnRtYXhfdCAgICBoYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1h
eF90ICAgIGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICBib29sIGlzX2Jsb2NrX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7
CisgICAgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfYmxv
Y2tfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBi
b29sIGlzX2NoYXJhY3Rlcl9maWxlKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wg
aXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJf
ZmlsZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29s
IGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2RpcmVj
dG9yeShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2VtcHR5KGNvbnN0IHBh
dGgmIHApOworICAgIGJvb2wgaXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgYm9vbCBpc19maWZvKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0Owor
ICAgIGJvb2wgaXNfZmlmbyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2ZpZm8oY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19vdGhlcihm
aWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIHAp
OworICAgIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworCisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7
CisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19y
ZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisg
ICAgYm9vbCBpc19zb2NrZXQoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19z
b2NrZXQoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19zeW1saW5rKGZpbGVfc3Rh
dHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAg
ICBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgZmlsZV90aW1lX3R5cGUgIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwKTsK
KyAgICBmaWxlX3RpbWVfdHlwZSAgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKSBub2V4Y2VwdDsKKyAgICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRo
JiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSk7CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUo
Y29uc3QgcGF0aCYgcCwgZmlsZV90aW1lX3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHBl
cm1pc3Npb25zKGNvbnN0IHBhdGgmIHAsIHBlcm1zIHBybXMsCisgICAgICAgICAgICAgICAgICAg
ICBwZXJtX29wdGlvbnMgb3B0cz1wZXJtX29wdGlvbnM6OnJlcGxhY2UpOworICAgIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVy
bV9vcHRpb25zIG9wdHMsCisgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisK
KyAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAg
cGF0aCBwcm94aW1hdGUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSA9IGN1cnJlbnRf
cGF0aCgpKTsKKyAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBi
YXNlLCBlcnJvcl9jb2RlICZlYyk7CisKKyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRo
JiBwKTsKKyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBl
Yyk7CisKKyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsK
KyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2U9Y3VycmVu
dF9wYXRoKCkpOworICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYg
YmFzZSwgZXJyb3JfY29kZSYgZWMpOworCisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCk7
CisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgdWludG1heF90ICAgIHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCk7CisgICAgdWlu
dG1heF90ICAgIHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisg
ICAgdm9pZCByZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZv
aWQgcmVuYW1lKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRt
YXhfdCBzaXplKTsKKyAgICB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhf
dCBzaXplLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBzcGFjZV9pbmZvICAgc3Bh
Y2UoY29uc3QgcGF0aCYgcCk7CisgICAgc3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGZpbGVfc3RhdHVzICBzdGF0dXMoY29u
c3QgcGF0aCYgcCk7CisgICAgZmlsZV9zdGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIHN0YXR1c19rbm93bihmaWxlX3N0YXR1
cyBzKSBub2V4Y2VwdDsKKworICAgIGZpbGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBw
YXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRo
KCk7CisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKworICAg
IHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBwKTsKKyAgICBwYXRoIHdlYWtseV9j
YW5vbmljYWwocGF0aCBjb25zdCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisKK30gfSAgLy8gbmFt
ZXNwYWNlcyBzdGQ6OmZpbGVzeXN0ZW0KKworKi8KKworI2luY2x1ZGUgPF9fY29uZmlnPgorI2lu
Y2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjaHJvbm8+Cisj
aW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxvY2FsZT4K
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGlv
bWFuaXA+IC8vIGZvciBxdW90ZWQKKyNpbmNsdWRlIDxzdHJpbmdfdmlldz4KKy8qICNpbmNsdWRl
IDx2ZXJzaW9uPiAqLworCisjaW5jbHVkZSA8X19kZWJ1Zz4KKworI2lmIF9MSUJDUFBfU1REX1ZF
UiA+PSAxNworI2RlZmluZSBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAg
X0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfU1REIGlubGluZSBuYW1lc3BhY2UgX19mcyB7IG5hbWVz
cGFjZSBmaWxlc3lzdGVtIHsKKyNlbHNlCisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNF
X0ZJTEVTWVNURU0gXAorICBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQgbmFtZXNwYWNlIF9f
ZnMgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7CisjZW5kaWYKKworI2RlZmluZSBfTElCQ1BQX0VO
RF9OQU1FU1BBQ0VfRklMRVNZU1RFTSBcCisgIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9TVEQgfSB9
CisKKyNkZWZpbmUgX1ZTVERfRlMgX1ZTVEQ6Ol9fZnM6OmZpbGVzeXN0ZW0KKworI2RlZmluZSBf
TElCQ1BQX0FWQUlMQUJJTElUWV9GSUxFU1lTVEVNCisjZGVmaW5lIF9MSUJDUFBfQVZBSUxBQklM
SVRZX0ZJTEVTWVNURU1fUFVTSAorI2RlZmluZSBfTElCQ1BQX0FWQUlMQUJJTElUWV9GSUxFU1lT
VEVNX1BPUAorCisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fUFJBR01BX1NZU1RFTV9IRUFE
RVIpCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworX0xJQkNQUF9QVVNIX01B
Q1JPUworI2luY2x1ZGUgPF9fdW5kZWZfbWFjcm9zPgorCisjaWZuZGVmIF9MSUJDUFBfQ1hYMDNf
TEFORworCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK19MSUJDUFBfQVZB
SUxBQklMSVRZX0ZJTEVTWVNURU1fUFVTSAorCit0eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDxf
RmlsZXN5c3RlbUNsb2NrPiBmaWxlX3RpbWVfdHlwZTsKKworc3RydWN0IF9MSUJDUFBfVFlQRV9W
SVMgc3BhY2VfaW5mbyB7CisgIHVpbnRtYXhfdCBjYXBhY2l0eTsKKyAgdWludG1heF90IGZyZWU7
CisgIHVpbnRtYXhfdCBhdmFpbGFibGU7Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9W
SVMgZmlsZV90eXBlIDogc2lnbmVkIGNoYXIgeworICBub25lID0gMCwKKyAgbm90X2ZvdW5kID0g
LTEsCisgIHJlZ3VsYXIgPSAxLAorICBkaXJlY3RvcnkgPSAyLAorICBzeW1saW5rID0gMywKKyAg
YmxvY2sgPSA0LAorICBjaGFyYWN0ZXIgPSA1LAorICBmaWZvID0gNiwKKyAgc29ja2V0ID0gNywK
KyAgdW5rbm93biA9IDgKK307CisKK2VudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBwZXJtcyA6
IHVuc2lnbmVkIHsKKyAgbm9uZSA9IDAsCisKKyAgb3duZXJfcmVhZCA9IDA0MDAsCisgIG93bmVy
X3dyaXRlID0gMDIwMCwKKyAgb3duZXJfZXhlYyA9IDAxMDAsCisgIG93bmVyX2FsbCA9IDA3MDAs
CisKKyAgZ3JvdXBfcmVhZCA9IDA0MCwKKyAgZ3JvdXBfd3JpdGUgPSAwMjAsCisgIGdyb3VwX2V4
ZWMgPSAwMTAsCisgIGdyb3VwX2FsbCA9IDA3MCwKKworICBvdGhlcnNfcmVhZCA9IDA0LAorICBv
dGhlcnNfd3JpdGUgPSAwMiwKKyAgb3RoZXJzX2V4ZWMgPSAwMSwKKyAgb3RoZXJzX2FsbCA9IDA3
LAorCisgIGFsbCA9IDA3NzcsCisKKyAgc2V0X3VpZCA9IDA0MDAwLAorICBzZXRfZ2lkID0gMDIw
MDAsCisgIHN0aWNreV9iaXQgPSAwMTAwMCwKKyAgbWFzayA9IDA3Nzc3LAorICB1bmtub3duID0g
MHhGRkZGLAorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhw
ciBwZXJtcyBvcGVyYXRvciYocGVybXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcnwo
cGVybXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0
YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcl4ocGVybXMgX0xIUywgcGVybXMg
X1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVk
PihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0
ZXhwciBwZXJtcyBvcGVyYXRvcn4ocGVybXMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
cGVybXM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykpOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yJj0ocGVybXMmIF9MSFMsIHBlcm1z
IF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsgfQorCitfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yfD0ocGVybXMmIF9MSFMsIHBlcm1zIF9S
SFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsgfQorCitfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yXj0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMp
IHsgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsgfQorCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5V
TV9WSVMgcGVybV9vcHRpb25zIDogdW5zaWduZWQgY2hhciB7CisgIHJlcGxhY2UgPSAxLAorICBh
ZGQgPSAyLAorICByZW1vdmUgPSA0LAorICBub2ZvbGxvdyA9IDgKK307CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yJihw
ZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpICYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsK
K30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29w
dGlvbnMgb3BlcmF0b3J8KHBlcm1fb3B0aW9ucyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgewor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
X0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUg
Y29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcl4ocGVybV9vcHRpb25zIF9MSFMsIHBlcm1f
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yfihwZXJtX29w
dGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPih+c3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIHBlcm1fb3B0aW9ucyYgb3BlcmF0b3ImPShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1f
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yfD0ocGVy
bV9vcHRpb25zJiBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9M
SFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9v
cHRpb25zJiBvcGVyYXRvcl49KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMp
IHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQ
X0VOVU1fVklTIGNvcHlfb3B0aW9ucyA6IHVuc2lnbmVkIHNob3J0IHsKKyAgbm9uZSA9IDAsCisg
IHNraXBfZXhpc3RpbmcgPSAxLAorICBvdmVyd3JpdGVfZXhpc3RpbmcgPSAyLAorICB1cGRhdGVf
ZXhpc3RpbmcgPSA0LAorICByZWN1cnNpdmUgPSA4LAorICBjb3B5X3N5bWxpbmtzID0gMTYsCisg
IHNraXBfc3ltbGlua3MgPSAzMiwKKyAgZGlyZWN0b3JpZXNfb25seSA9IDY0LAorICBjcmVhdGVf
c3ltbGlua3MgPSAxMjgsCisgIGNyZWF0ZV9oYXJkX2xpbmtzID0gMjU2LAorICBfX2luX3JlY3Vy
c2l2ZV9jb3B5ID0gNTEyLAorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5l
IGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3ImKGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5
X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykgJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVy
YXRvcnwoY29weV9vcHRpb25zIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxjb3B5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhT
KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGlu
ZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yXihjb3B5X29wdGlvbnMgX0xIUywgY29w
eV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9ucz4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpIF4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3Bl
cmF0b3J+KGNvcHlfb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29w
dGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykpOworfQorCitfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvciY9KGNvcHlf
b3B0aW9ucyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhT
ICYgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0
aW9ucyYgb3BlcmF0b3J8PShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7
CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBjb3B5X29wdGlvbnMmIG9wZXJhdG9yXj0oY29weV9vcHRpb25zJiBfTEhT
LCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOworfQor
CitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZGlyZWN0b3J5X29wdGlvbnMgOiB1bnNpZ25l
ZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisgIGZvbGxvd19kaXJlY3Rvcnlfc3ltbGluayA9IDEsCisg
IHNraXBfcGVybWlzc2lvbl9kZW5pZWQgPSAyCit9OworCitfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yJihkaXJlY3Rv
cnlfb3B0aW9ucyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGly
ZWN0b3J5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpICYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25z
dGV4cHIgZGlyZWN0b3J5X29wdGlvbnMgb3BlcmF0b3J8KGRpcmVjdG9yeV9vcHRpb25zIF9MSFMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlf
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30K
KworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlf
b3B0aW9ucyBvcGVyYXRvcl4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9y
fihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rv
cnlfb3B0aW9ucz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRv
ciY9KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhT
ICYgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9y
eV9vcHRpb25zJiBvcGVyYXRvcnw9KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAg
cmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvcl49KGRpcmVjdG9yeV9vcHRpb25z
JiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9v
cHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworY2xhc3Mg
X0xJQkNQUF9UWVBFX1ZJUyBmaWxlX3N0YXR1cyB7CitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9y
cworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzKCkgbm9leGNlcHQg
OiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vbmUpIHt9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgZXhwbGljaXQgZmlsZV9zdGF0dXMoZmlsZV90eXBlIF9fZnQsIHBlcm1zIF9fcHJt
cyA9IHBlcm1zOjp1bmtub3duKSBub2V4Y2VwdAorICAgICAgOiBfX2Z0XyhfX2Z0KSwKKyAgICAg
ICAgX19wcm1zXyhfX3BybXMpIHt9CisKKyAgZmlsZV9zdGF0dXMoY29uc3QgZmlsZV9zdGF0dXMm
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzKGZpbGVfc3RhdHVzJiYpIG5vZXhj
ZXB0ID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIH5maWxlX3N0
YXR1cygpIHt9CisKKyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShjb25zdCBmaWxlX3N0YXR1cyYp
IG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShmaWxlX3N0YXR1
cyYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgLy8gb2JzZXJ2ZXJzCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90eXBlIHR5cGUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVy
biBfX2Z0XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGVybXMgcGVybWlz
c2lvbnMoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BybXNfOyB9CisKKyAgLy8gbW9kaWZp
ZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCB0eXBlKGZpbGVfdHlwZSBf
X2Z0KSBub2V4Y2VwdCB7IF9fZnRfID0gX19mdDsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgdm9pZCBwZXJtaXNzaW9ucyhwZXJtcyBfX3ApIG5vZXhjZXB0IHsgX19wcm1zXyA9
IF9fcDsgfQorCitwcml2YXRlOgorICBmaWxlX3R5cGUgX19mdF87CisgIHBlcm1zIF9fcHJtc187
Cit9OworCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGRpcmVjdG9yeV9lbnRyeTsKKwordGVtcGxh
dGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXIgeworICBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IGZhbHNlOworfTsKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3Qg
X19jYW5fY29udmVydF9jaGFyPGNvbnN0IF9UcD4gOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFy
PF9UcD4ge307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyPiB7
CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUg
PSBjaGFyOworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPHdjaGFy
X3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2luZyBfX2NoYXJf
dHlwZSA9IHdjaGFyX3Q7Cit9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2No
YXI8Y2hhcjE2X3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2lu
ZyBfX2NoYXJfdHlwZSA9IGNoYXIxNl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5f
Y29udmVydF9jaGFyPGNoYXIzMl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMzJfdDsKK307CisKK3RlbXBsYXRlIDxjbGFz
cyBfRUNoYXJUPgordHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJU
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitfX2lzX3NlcGFyYXRvcihfRUNoYXJUIF9fZSkgeworICBy
ZXR1cm4gX19lID09IF9FQ2hhclQoJy8nKTsKK30KKworc3RydWN0IF9OdWxsU2VudGluYWwge307
CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+Cit1c2luZyBfVm9pZCA9IHZvaWQ7CisKK3RlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzID0gdm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZyA6
IHB1YmxpYyBmYWxzZV90eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0FsbG9jPgorc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAorICAg
IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+LAorICAgIF9Wb2lkPHR5cGVu
YW1lIF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IHB1
YmxpYyBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD4geworICB1c2luZyBfU3RyID0gYmFzaWNf
c3RyaW5nPF9FQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz47CisgIHVzaW5nIF9CYXNlID0gX19jYW5f
Y29udmVydF9jaGFyPF9FQ2hhclQ+OworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9i
ZWdpbihfU3RyIGNvbnN0JiBfX3MpIHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KKyAgc3RhdGljIF9F
Q2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBf
X3MuZGF0YSgpICsgX19zLmxlbmd0aCgpOworICB9CisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rf
b3JfbnVsbChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNo
YXJUe30gOiBfX3NbMF07CisgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFz
cyBfVHJhaXRzPgorc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAorICAgIGJhc2ljX3N0cmlu
Z192aWV3PF9FQ2hhclQsIF9UcmFpdHM+LAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZl
cnRfY2hhcjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IHB1YmxpYyBfX2Nhbl9jb252
ZXJ0X2NoYXI8X0VDaGFyVD4geworICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8X0VD
aGFyVCwgX1RyYWl0cz47CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hh
clQ+OworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBf
X3MpIHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFu
Z2VfZW5kKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxl
bmd0aCgpOworICB9CisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0
JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07Cisg
IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyBfRFMgPSB0eXBlbmFtZSBk
ZWNheTxfU291cmNlPjo6dHlwZSwKKyAgICAgICAgICBjbGFzcyBfVW5xdWFsUHRyVHlwZSA9Cisg
ICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdDx0eXBlbmFtZSByZW1vdmVfcG9pbnRl
cjxfRFM+Ojp0eXBlPjo6dHlwZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJQdHIgPSBpc19wb2lu
dGVyPF9EUz46OnZhbHVlJiYKKyAgICAgICAgICAgICAgX19jYW5fY29udmVydF9jaGFyPF9VbnF1
YWxQdHJUeXBlPjo6dmFsdWU+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9jaGFyX2FycmF5IDogZmFs
c2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNzIF9FQ2hhclQsIGNs
YXNzIF9VUHRyPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheTxfU291cmNlLCBfRUNo
YXJUKiwgX1VQdHIsIHRydWU+CisgICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgcmVt
b3ZlX2NvbnN0PF9FQ2hhclQ+Ojp0eXBlPiB7CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVy
dF9jaGFyPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT47CisKKyAgc3RhdGlj
IF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oY29uc3QgX0VDaGFyVCogX19iKSB7IHJldHVy
biBfX2I7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKGNvbnN0IF9FQ2hh
clQqIF9fYikgeworICAgIHVzaW5nIF9JdGVyID0gY29uc3QgX0VDaGFyVCo7CisgICAgY29uc3Qg
X0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIF9JdGVyIF9fZSA9IF9fYjsKKyAg
ICBmb3IgKDsgKl9fZSAhPSBfX3NlbnRpbmFsOyArK19fZSkKKyAgICAgIDsKKyAgICByZXR1cm4g
X19lOworICB9CisKKyAgc3RhdGljIF9FQ2hhclQgX19maXJzdF9vcl9udWxsKGNvbnN0IF9FQ2hh
clQqIF9fYikgeyByZXR1cm4gKl9fYjsgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyLCBi
b29sIF9Jc0l0ID0gX19pc19jcHAxN19pbnB1dF9pdGVyYXRvcjxfSXRlcj46OnZhbHVlLAorICAg
ICAgICAgIGNsYXNzID0gdm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2l0ZXIgOiBmYWxzZV90
eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9p
dGVyPAorICAgIF9JdGVyLCB0cnVlLAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRf
Y2hhcjwKKyAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlw
ZT46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZT4geworICB1c2luZyBfRUNoYXJUID0gdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZTsKKyAgdXNpbmcgX0Jhc2Ug
PSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD47CisKKyAgc3RhdGljIF9JdGVyIF9fcmFuZ2Vf
YmVnaW4oX0l0ZXIgX19iKSB7IHJldHVybiBfX2I7IH0KKyAgc3RhdGljIF9OdWxsU2VudGluYWwg
X19yYW5nZV9lbmQoX0l0ZXIpIHsgcmV0dXJuIF9OdWxsU2VudGluYWx7fTsgfQorCisgIHN0YXRp
YyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfSXRlciBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307
CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX0lzU3RyaW5nVCA9IF9faXNfcGF0aGFibGVf
c3RyaW5nPF9UcD46OnZhbHVlLAorICAgICAgICAgIGJvb2wgX0lzQ2hhckl0ZXJUID0gX19pc19w
YXRoYWJsZV9jaGFyX2FycmF5PF9UcD46OnZhbHVlLAorICAgICAgICAgIGJvb2wgX0lzSXRlclQg
PSAhX0lzQ2hhckl0ZXJUICYmIF9faXNfcGF0aGFibGVfaXRlcjxfVHA+Ojp2YWx1ZT4KK3N0cnVj
dCBfX2lzX3BhdGhhYmxlIDogZmFsc2VfdHlwZSB7CisgIHN0YXRpY19hc3NlcnQoIV9Jc1N0cmlu
Z1QgJiYgIV9Jc0NoYXJJdGVyVCAmJiAhX0lzSXRlclQsICJNdXN0IGFsbCBiZSBmYWxzZSIpOwor
fTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgdHJ1
ZSwgZmFsc2UsIGZhbHNlPiA6IF9faXNfcGF0aGFibGVfc3RyaW5nPF9UcD4ge307CisKK3RlbXBs
YXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIGZhbHNlLCB0cnVlLCBm
YWxzZT4gOiBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1RwPiB7Cit9OworCit0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwgZmFsc2UsIHRydWU+
IDogX19pc19wYXRoYWJsZV9pdGVyPF9UcD4ge307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJU
Pgorc3RydWN0IF9QYXRoQ1ZUIHsKKyAgc3RhdGljX2Fzc2VydChfX2Nhbl9jb252ZXJ0X2NoYXI8
X0VDaGFyVD46OnZhbHVlLAorICAgICAgICAgICAgICAgICJDaGFyIHR5cGUgbm90IGNvbnZlcnRp
YmxlIik7CisKKyAgdHlwZWRlZiBfX25hcnJvd190b191dGY4PHNpemVvZihfRUNoYXJUKSAqIF9f
Q0hBUl9CSVRfXz4gX05hcnJvd2VyOworCisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0
cmluZyYgX19kZXN0LCBfRUNoYXJUIGNvbnN0KiBfX2IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9FQ2hhclQgY29uc3QqIF9fZSkgeworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0
ZXIoX19kZXN0KSwgX19iLCBfX2UpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgor
ICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBf
SXRlciBfX2UpIHsKKyAgICBzdGF0aWNfYXNzZXJ0KCFpc19zYW1lPF9JdGVyLCBfRUNoYXJUKj46
OnZhbHVlLCAiQ2FsbCBjb25zdCBvdmVybG9hZCIpOworICAgIGlmIChfX2IgPT0gX19lKQorICAg
ICAgcmV0dXJuOworICAgIGJhc2ljX3N0cmluZzxfRUNoYXJUPiBfX3RtcChfX2IsIF9fZSk7Cisg
ICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3QpLCBfX3RtcC5kYXRhKCksCisgICAg
ICAgICAgICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVuZ3RoKCkpOworICB9CisKKyAgdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcm
IF9fZGVzdCwgX0l0ZXIgX19iLCBfTnVsbFNlbnRpbmFsKSB7CisgICAgc3RhdGljX2Fzc2VydCgh
aXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsK
KyAgICBjb25zdCBfRUNoYXJUIF9fc2VudGluYWwgPSBfRUNoYXJUe307CisgICAgaWYgKCpfX2Ig
PT0gX19zZW50aW5hbCkKKyAgICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4g
X190bXA7CisgICAgZm9yICg7ICpfX2IgIT0gX19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX3Rt
cC5wdXNoX2JhY2soKl9fYik7CisgICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3Qp
LCBfX3RtcC5kYXRhKCksCisgICAgICAgICAgICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVu
Z3RoKCkpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lk
IF9fYXBwZW5kX3NvdXJjZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7Cisg
ICAgdXNpbmcgX1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRf
cmFuZ2UoX19kZXN0LCBfVHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAg
ICAgICAgX1RyYWl0czo6X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK3RlbXBsYXRlIDw+
CitzdHJ1Y3QgX1BhdGhDVlQ8Y2hhcj4geworCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAg
c3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2V4YWN0bHlfY3BwMTdfaW5wdXRfaXRlcmF0
b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKKyAgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3Qs
IF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgZm9yICg7IF9fYiAhPSBfX2U7ICsrX19iKQor
ICAgICAgX19kZXN0LnB1c2hfYmFjaygqX19iKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
SXRlcj4KKyAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2NwcDE3X2ZvcndhcmRfaXRl
cmF0b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKKyAgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rl
c3QsIF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgX19kZXN0Ll9fYXBwZW5kX2ZvcndhcmRf
dW5zYWZlKF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3Rh
dGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxT
ZW50aW5hbCkgeworICAgIGNvbnN0IGNoYXIgX19zZW50aW5hbCA9IGNoYXJ7fTsKKyAgICBmb3Ig
KDsgKl9fYiAhPSBfX3NlbnRpbmFsOyArK19fYikKKyAgICAgIF9fZGVzdC5wdXNoX2JhY2soKl9f
Yik7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgc3RhdGljIHZvaWQgX19h
cHBlbmRfc291cmNlKHN0cmluZyYgX19kZXN0LCBfU291cmNlIGNvbnN0JiBfX3MpIHsKKyAgICB1
c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsKKyAgICBfX2FwcGVuZF9yYW5n
ZShfX2Rlc3QsIF9UcmFpdHM6Ol9fcmFuZ2VfYmVnaW4oX19zKSwKKyAgICAgICAgICAgICAgICAg
ICBfVHJhaXRzOjpfX3JhbmdlX2VuZChfX3MpKTsKKyAgfQorfTsKKworY2xhc3MgX0xJQkNQUF9U
WVBFX1ZJUyBwYXRoIHsKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2VPckl0ZXIsIGNsYXNzIF9U
cCA9IHBhdGgmPgorICB1c2luZyBfRW5hYmxlSWZQYXRoYWJsZSA9CisgICAgICB0eXBlbmFtZSBl
bmFibGVfaWY8X19pc19wYXRoYWJsZTxfU291cmNlT3JJdGVyPjo6dmFsdWUsIF9UcD46OnR5cGU7
CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgdXNpbmcgX1NvdXJjZUNoYXIgPSB0eXBlbmFt
ZSBfX2lzX3BhdGhhYmxlPF9UcD46Ol9fY2hhcl90eXBlOworCisgIHRlbXBsYXRlIDxjbGFzcyBf
VHA+CisgIHVzaW5nIF9Tb3VyY2VDVlQgPSBfUGF0aENWVDxfU291cmNlQ2hhcjxfVHA+ID47CisK
K3B1YmxpYzoKKyAgdHlwZWRlZiBjaGFyIHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPHZhbHVlX3R5cGU+IHN0cmluZ190eXBlOworICB0eXBlZGVmIF9WU1REOjpzdHJpbmdfdmll
dyBfX3N0cmluZ192aWV3OworICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVk
X3NlcGFyYXRvciA9ICcvJzsKKworICBlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZm9ybWF0
IDogdW5zaWduZWQgY2hhciB7CisgICAgYXV0b19mb3JtYXQsCisgICAgbmF0aXZlX2Zvcm1hdCwK
KyAgICBnZW5lcmljX2Zvcm1hdAorICB9OworCisgIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1
Y3RvcgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgoKSBub2V4Y2VwdCB7fQorICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgoY29uc3QgcGF0aCYgX19wKSA6IF9fcG5fKF9f
cC5fX3BuXykge30KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKHBhdGgmJiBfX3Ap
IG5vZXhjZXB0CisgICAgICA6IF9fcG5fKF9WU1REOjptb3ZlKF9fcC5fX3BuXykpIHt9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoKHN0cmluZ190eXBlJiYgX19zLCBmb3Jt
YXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KSBub2V4Y2VwdAorICAgICAgOiBfX3BuXyhfVlNURDo6
bW92ZShfX3MpKSB7fQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyA9IF9FbmFi
bGVJZlBhdGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KKyAgcGF0aChjb25zdCBfU291cmNlJiBfX3Ny
YywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgeworICAgIF9Tb3VyY2VDVlQ8X1NvdXJj
ZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX19zcmMpOworICB9CisKKyAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0PgorICBwYXRoKF9JbnB1dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9fbGFzdCwg
Zm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlwZSBfSXRWYWw7CisgICAgX1BhdGhDVlQ8
X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgIH0KKwor
ICAvLyBUT0RPIEltcGxlbWVudCBsb2NhbGUgY29udmVyc2lvbnMuCisgIHRlbXBsYXRlIDxjbGFz
cyBfU291cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KKyAg
cGF0aChjb25zdCBfU291cmNlJiBfX3NyYywgY29uc3QgbG9jYWxlJiBfX2xvYywgZm9ybWF0ID0g
Zm9ybWF0OjphdXRvX2Zvcm1hdCk7CisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KKyAgcGF0
aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfbGFzdCwgY29uc3QgbG9jYWxlJiBfX2xvYywK
KyAgICAgICBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KTsKKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIH5wYXRoKCkgPSBkZWZhdWx0OworCisgIC8vIGFzc2lnbm1lbnRzCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3I9KGNvbnN0IHBhdGgm
IF9fcCkgeworICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgIHJldHVybiAqdGhpczsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3I9KHBhdGgmJiBf
X3ApIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcC5fX3BuXyk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzID0gdm9pZD4KKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJiBvcGVyYXRvcj0oc3RyaW5nX3R5cGUmJiBfX3MpIG5v
ZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7CisgICAgcmV0dXJuICp0aGlz
OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBhc3NpZ24oc3Ry
aW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+Cisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4KKyAg
b3BlcmF0b3I9KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFzc2ln
bihfX3NyYyk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlm
UGF0aGFibGU8X1NvdXJjZT4gYXNzaWduKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgX19w
bl8uY2xlYXIoKTsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19w
bl8sIF9fc3JjKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXQ+CisgIHBhdGgmIGFzc2lnbihfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xh
c3QpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZh
bHVlX3R5cGUgX0l0VmFsOworICAgIF9fcG5fLmNsZWFyKCk7CisgICAgX1BhdGhDVlQ8X0l0VmFs
Pjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0
aGlzOworICB9CisKK3ByaXZhdGU6CisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorICBzdGF0
aWMgYm9vbCBfX3NvdXJjZV9pc19hYnNvbHV0ZShfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbCkgewor
ICAgIHJldHVybiBfX2lzX3NlcGFyYXRvcihfX2ZpcnN0X29yX251bGwpOworICB9CisKK3B1Ymxp
YzoKKyAgLy8gYXBwZW5kcworICBwYXRoJiBvcGVyYXRvci89KGNvbnN0IHBhdGgmIF9fcCkgewor
ICAgIGlmIChfX3AuaXNfYWJzb2x1dGUoKSkgeworICAgICAgX19wbl8gPSBfX3AuX19wbl87Cisg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAg
IF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX19wbl8gKz0gX19wLm5hdGl2ZSgp
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIEZJWE1FOiBVc2UgX0xJQkNQUF9ESUFH
Tk9TRV9XQVJOSU5HIHRvIHByb2R1Y2UgYSBkaWFnbm9zdGljIHdoZW4gX19zcmMKKyAgLy8gaXMg
a25vd24gYXQgY29tcGlsZSB0aW1lIHRvIGJlICIvJyBzaW5jZSB0aGUgdXNlciBhbG1vc3QgY2Vy
dGFpbmx5IGludGVuZGVkCisgIC8vIHRvIGFwcGVuZCBhIHNlcGFyYXRvciBpbnN0ZWFkIG9mIG92
ZXJ3cml0aW5nIHRoZSBwYXRoIHdpdGggIi8iCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+Cisg
IG9wZXJhdG9yLz0oY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICByZXR1cm4gdGhpcy0+YXBw
ZW5kKF9fc3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfRW5hYmxl
SWZQYXRoYWJsZTxfU291cmNlPiBhcHBlbmQoY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICB1
c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsKKyAgICB1c2luZyBfQ1ZUID0g
X1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1NvdXJjZT4gPjsKKyAgICBpZiAoX19zb3VyY2VfaXNfYWJz
b2x1dGUoX1RyYWl0czo6X19maXJzdF9vcl9udWxsKF9fc3JjKSkpCisgICAgICBfX3BuXy5jbGVh
cigpOworICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgpKQorICAgICAgX19wbl8gKz0gcHJlZmVy
cmVkX3NlcGFyYXRvcjsKKyAgICBfQ1ZUOjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+Cisg
IHBhdGgmIGFwcGVuZChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0
VmFsOworICAgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9jaGFyPF9JdFZhbD46OnZhbHVl
LCAiTXVzdCBjb252ZXJ0aWJsZSIpOworICAgIHVzaW5nIF9DVlQgPSBfUGF0aENWVDxfSXRWYWw+
OworICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3NvdXJjZV9pc19hYnNvbHV0ZSgqX19m
aXJzdCkpCisgICAgICBfX3BuXy5jbGVhcigpOworICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgp
KQorICAgICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICBfQ1ZUOjpfX2FwcGVu
ZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0K
KworICAvLyBjb25jYXRlbmF0aW9uCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0
aCYgb3BlcmF0b3IrPShjb25zdCBwYXRoJiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3guX19wbl87
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBwYXRoJiBvcGVyYXRvcis9KGNvbnN0IHN0cmluZ190eXBlJiBfX3gpIHsKKyAgICBfX3BuXyAr
PSBfX3g7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBwYXRoJiBvcGVyYXRvcis9KF9fc3RyaW5nX3ZpZXcgX194KSB7CisgICAgX19wbl8g
Kz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90eXBlKiBfX3gpIHsKKyAgICBf
X3BuXyArPSBfX3g7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcis9KHZhbHVlX3R5cGUgX194KSB7CisgICAgX19w
bl8gKz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
RUNoYXJUPgorICB0eXBlbmFtZSBlbmFibGVfaWY8X19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+
Ojp2YWx1ZSwgcGF0aCY+Ojp0eXBlCisgIG9wZXJhdG9yKz0oX0VDaGFyVCBfX3gpIHsKKyAgICBi
YXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXA7CisgICAgX190bXAgKz0gX194OworICAgIF9QYXRo
Q1ZUPF9FQ2hhclQ+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fdG1wKTsKKyAgICByZXR1cm4g
KnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0
aGFibGU8X1NvdXJjZT4gb3BlcmF0b3IrPShjb25zdCBfU291cmNlJiBfX3gpIHsKKyAgICByZXR1
cm4gdGhpcy0+Y29uY2F0KF9feCk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4K
KyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gY29uY2F0KGNvbnN0IF9Tb3VyY2UmIF9feCkg
eworICAgIF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX194KTsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+Cisg
IHBhdGgmIGNvbmNhdChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0
VmFsOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0
LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIG1vZGlmaWVycworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgY2xlYXIoKSBub2V4Y2VwdCB7IF9fcG5f
LmNsZWFyKCk7IH0KKworICBwYXRoJiBtYWtlX3ByZWZlcnJlZCgpIHsgcmV0dXJuICp0aGlzOyB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiByZW1vdmVfZmlsZW5hbWUo
KSB7CisgICAgYXV0byBfX2ZuYW1lID0gX19maWxlbmFtZSgpOworICAgIGlmICghX19mbmFtZS5l
bXB0eSgpKQorICAgICAgX19wbl8uZXJhc2UoX19mbmFtZS5kYXRhKCkgLSBfX3BuXy5kYXRhKCkp
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHBhdGgmIHJlcGxhY2VfZmlsZW5hbWUoY29u
c3QgcGF0aCYgX19yZXBsYWNlbWVudCkgeworICAgIHJlbW92ZV9maWxlbmFtZSgpOworICAgIHJl
dHVybiAoKnRoaXMgLz0gX19yZXBsYWNlbWVudCk7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2V4
dGVuc2lvbihjb25zdCBwYXRoJiBfX3JlcGxhY2VtZW50ID0gcGF0aCgpKTsKKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgc3dhcChwYXRoJiBfX3Jocykgbm9leGNlcHQgeyBf
X3BuXy5zd2FwKF9fcmhzLl9fcG5fKTsgfQorCisgIC8vIHByaXZhdGUgaGVscGVyIHRvIGFsbG93
IHJlc2VydmluZyBtZW1vcnkgaW4gdGhlIHBhdGgKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB2b2lkIF9fcmVzZXJ2ZShzaXplX3QgX19zKSB7IF9fcG5fLnJlc2VydmUoX19zKTsgfQor
CisgIC8vIG5hdGl2ZSBmb3JtYXQgb2JzZXJ2ZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgY29uc3Qgc3RyaW5nX3R5cGUmIG5hdGl2ZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJu
IF9fcG5fOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCB2YWx1ZV90
eXBlKiBjX3N0cigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5fLmNfc3RyKCk7IH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIG9wZXJhdG9yIHN0cmluZ190eXBlKCkgY29uc3Qg
eyByZXR1cm4gX19wbl87IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3MgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9FQ2hhclQ+LAorICAgICAgICAgICAgY2xhc3MgX0FsbG9jYXRv
ciA9IGFsbG9jYXRvcjxfRUNoYXJUPiA+CisgIGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRz
LCBfQWxsb2NhdG9yPgorICBzdHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRv
cigpKSBjb25zdCB7CisgICAgdXNpbmcgX0NWVCA9IF9fd2lkZW5fZnJvbV91dGY4PHNpemVvZihf
RUNoYXJUKSAqIF9fQ0hBUl9CSVRfXz47CisgICAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZzxf
RUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPjsKKyAgICBfU3RyIF9fcyhfX2EpOworICAgIF9f
cy5yZXNlcnZlKF9fcG5fLnNpemUoKSk7CisgICAgX0NWVCgpKGJhY2tfaW5zZXJ0ZXIoX19zKSwg
X19wbl8uZGF0YSgpLCBfX3BuXy5kYXRhKCkgKyBfX3BuXy5zaXplKCkpOworICAgIHJldHVybiBf
X3M7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHN0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
c3RkOjp3c3RyaW5nIHdzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzx3Y2hhcl90
PigpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjpzdHJpbmcgdThzdHJp
bmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHN0ZDo6dTE2c3RyaW5nIHUxNnN0cmluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNo
YXIxNl90PigpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp1MzJzdHJp
bmcgdTMyc3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8Y2hhcjMyX3Q+KCk7Cisg
IH0KKworICAvLyBnZW5lcmljIGZvcm1hdCBvYnNlcnZlcnMKKyAgdGVtcGxhdGUgPGNsYXNzIF9F
Q2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAg
IGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8
X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4KKyAgZ2VuZXJpY19zdHJpbmcoY29uc3QgX0Fs
bG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxf
RUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPihfX2EpOworICB9CisKKyAgc3RkOjpzdHJpbmcg
Z2VuZXJpY19zdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6OndzdHJpbmcg
Z2VuZXJpY193c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nPHdjaGFyX3Q+KCk7IH0KKyAg
c3RkOjpzdHJpbmcgZ2VuZXJpY191OHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9Cisg
IHN0ZDo6dTE2c3RyaW5nIGdlbmVyaWNfdTE2c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
PGNoYXIxNl90PigpOyB9CisgIHN0ZDo6dTMyc3RyaW5nIGdlbmVyaWNfdTMyc3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOyB9CisKK3ByaXZhdGU6CisgIGludCBfX2Nv
bXBhcmUoX19zdHJpbmdfdmlldykgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290X25hbWUo
KSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3Jvb3RfZGlyZWN0b3J5KCkgY29uc3Q7CisgIF9f
c3RyaW5nX3ZpZXcgX19yb290X3BhdGhfcmF3KCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19y
ZWxhdGl2ZV9wYXRoKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19wYXJlbnRfcGF0aCgpIGNv
bnN0OworICBfX3N0cmluZ192aWV3IF9fZmlsZW5hbWUoKSBjb25zdDsKKyAgX19zdHJpbmdfdmll
dyBfX3N0ZW0oKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX2V4dGVuc2lvbigpIGNvbnN0Owor
CitwdWJsaWM6CisgIC8vIGNvbXBhcmUKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQg
Y29tcGFyZShjb25zdCBwYXRoJiBfX3ApIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19j
b21wYXJlKF9fcC5fX3BuXyk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQg
Y29tcGFyZShjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29t
cGFyZShfX3MpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUo
X19zdHJpbmdfdmlldyBfX3MpIGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcyk7Cisg
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCB2YWx1ZV90
eXBlKiBfX3MpIGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcyk7CisgIH0KKworICAv
LyBkZWNvbXBvc2l0aW9uCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290X25h
bWUoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcm9vdF9uYW1lKCkpOworICB9
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290X2RpcmVjdG9yeSgpIGNvbnN0
IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19yb290X2RpcmVjdG9yeSgpKTsKKyAgfQorICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9wYXRoKCkgY29uc3QgeworICAgIHJl
dHVybiByb290X25hbWUoKS5hcHBlbmQoc3RyaW5nX3R5cGUoX19yb290X2RpcmVjdG9yeSgpKSk7
CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlX3BhdGgoKSBj
b25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcmVsYXRpdmVfcGF0aCgpKTsKKyAgfQor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcGFyZW50X3BhdGgoKSBjb25zdCB7Cisg
ICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcGFyZW50X3BhdGgoKSk7CisgIH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIGZpbGVuYW1lKCkgY29uc3QgeworICAgIHJldHVybiBzdHJp
bmdfdHlwZShfX2ZpbGVuYW1lKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
cGF0aCBzdGVtKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nX3R5cGUoX19zdGVtKCkpOyB9CisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBleHRlbnNpb24oKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZ190eXBlKF9fZXh0ZW5zaW9uKCkpOworICB9CisKKyAgLy8gcXVlcnkKKyAgX0xJ
QkNQUF9OT0RJU0NBUkRfQUZURVJfQ1hYMTcgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
CisgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BuXy5lbXB0eSgpOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yb290X25hbWUoKSBj
b25zdCB7CisgICAgcmV0dXJuICFfX3Jvb3RfbmFtZSgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAg
ICByZXR1cm4gIV9fcm9vdF9kaXJlY3RvcnkoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAh
X19yb290X3BhdGhfcmF3KCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaGFzX3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3JlbGF0
aXZlX3BhdGgoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBoYXNfcGFyZW50X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3BhcmVudF9wYXRoKCku
ZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX2ZpbGVu
YW1lKCkgY29uc3QgeworICAgIHJldHVybiAhX19maWxlbmFtZSgpLmVtcHR5KCk7CisgIH0KKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19zdGVtKCkgY29uc3QgeyByZXR1cm4g
IV9fc3RlbSgpLmVtcHR5KCk7IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhh
c19leHRlbnNpb24oKSBjb25zdCB7CisgICAgcmV0dXJuICFfX2V4dGVuc2lvbigpLmVtcHR5KCk7
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYWJzb2x1dGUoKSBj
b25zdCB7CisgICAgcmV0dXJuIGhhc19yb290X2RpcmVjdG9yeSgpOworICB9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19yZWxhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFpc19h
YnNvbHV0ZSgpOyB9CisKKyAgLy8gcmVsYXRpdmUgcGF0aHMKKyAgcGF0aCBsZXhpY2FsbHlfbm9y
bWFsKCkgY29uc3Q7CisgIHBhdGggbGV4aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgmIF9fYmFz
ZSkgY29uc3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGxleGljYWxseV9w
cm94aW1hdGUoY29uc3QgcGF0aCYgX19iYXNlKSBjb25zdCB7CisgICAgcGF0aCBfX3Jlc3VsdCA9
IHRoaXMtPmxleGljYWxseV9yZWxhdGl2ZShfX2Jhc2UpOworICAgIGlmIChfX3Jlc3VsdC5uYXRp
dmUoKS5lbXB0eSgpKQorICAgICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBfX3Jlc3VsdDsK
KyAgfQorCisgIC8vIGl0ZXJhdG9ycworICBjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGl0ZXJhdG9y
OworICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3Q7CisgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgIHRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5k
CisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8aXNfc2FtZTxfQ2hhclQsIGNoYXI+Ojp2YWx1ZSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zYW1lPF9UcmFpdHMsIGNoYXJfdHJh
aXRzPGNoYXI+ID46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiY+Ojp0eXBlCisgICAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0aCYgX19wKSB7CisgICAgX19vcyA8
PCBzdGQ6Ol9fcXVvdGVkKF9fcC5uYXRpdmUoKSk7CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGZyaWVuZAorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPCFpc19zYW1lPF9D
aGFyVCwgY2hhcj46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19z
YW1lPF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiY+Ojp0eXBlCisgICAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0
aCYgX19wKSB7CisgICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9fcC5zdHJpbmc8X0NoYXJULCBf
VHJhaXRzPigpKTsKKyAgICByZXR1cm4gX19vczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5k
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIHBhdGgmIF9fcCkgeworICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHM+IF9fdG1wOworICAgIF9faXMgPj4gX19xdW90ZWQoX190bXApOwor
ICAgIF9fcCA9IF9fdG1wOworICAgIHJldHVybiBfX2lzOworICB9CisKKyAgZnJpZW5kIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhdGgmIF9fbGhzLCBj
b25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICAgIHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSA9PSAwOworICB9CisgIGZyaWVuZCBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBwYXRoJiBfX2xocywgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsKKyAgfQorICBmcmllbmQg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPChjb25zdCBwYXRoJiBfX2xo
cywgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPCAwOworICB9CisgIGZyaWVuZCBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBfX2xocywgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsKKyAgfQorICBmcmll
bmQgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPihjb25zdCBwYXRoJiBf
X2xocywgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19saHMuY29t
cGFyZShfX3JocykgPiAwOworICB9CisgIGZyaWVuZCBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYXRoJiBfX2xocywgY29uc3QgcGF0aCYgX19yaHMpIG5v
ZXhjZXB0IHsKKyAgICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsKKyAgfQorCisg
IGZyaWVuZCBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggb3BlcmF0b3IvKGNvbnN0IHBh
dGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwYXRoJiBfX3JocykgeworICAgIHBhdGggX19yZXN1bHQoX19saHMpOworICAg
IF9fcmVzdWx0IC89IF9fcmhzOworICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgfQorcHJpdmF0ZToK
KyAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCYKKyAgX19hc3NpZ25fdmll
dyhfX3N0cmluZ192aWV3IGNvbnN0JiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IHN0cmlu
Z190eXBlKF9fcyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHN0cmluZ190eXBlIF9fcG5f
OworfTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBzd2FwKHBhdGgm
IF9fbGhzLCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICBfX2xocy5zd2FwKF9fcmhzKTsKK30K
KworX0xJQkNQUF9GVU5DX1ZJUworc2l6ZV90IGhhc2hfdmFsdWUoY29uc3QgcGF0aCYgX19wKSBu
b2V4Y2VwdDsKKwordGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CitfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0aGFibGU8X1NvdXJjZT46OnZh
bHVlLCBwYXRoPjo6dHlwZQorICAgIHU4cGF0aChjb25zdCBfU291cmNlJiBfX3MpIHsKKyAgc3Rh
dGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlwZW5hbWUgX19pc19wYXRoYWJsZTxfU291cmNl
Pjo6X19jaGFyX3R5cGUsIGNoYXI+Ojp2YWx1ZSwKKyAgICAgICJ1OHBhdGgoU291cmNlIGNvbnN0
JikgcmVxdWlyZXMgU291cmNlIGhhdmUgYSBjaGFyYWN0ZXIgdHlwZSBvZiB0eXBlICIKKyAgICAg
ICInY2hhciciKTsKKyAgcmV0dXJuIHBhdGgoX19zKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0PgorX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICAgIHR5cGVuYW1lIGVuYWJsZV9p
ZjxfX2lzX3BhdGhhYmxlPF9JbnB1dEl0Pjo6dmFsdWUsIHBhdGg+Ojp0eXBlCisgICAgdThwYXRo
KF9JbnB1dEl0IF9fZiwgX0lucHV0SXQgX19sKSB7CisgIHN0YXRpY19hc3NlcnQoCisgICAgICBp
c19zYW1lPHR5cGVuYW1lIF9faXNfcGF0aGFibGU8X0lucHV0SXQ+OjpfX2NoYXJfdHlwZSwgY2hh
cj46OnZhbHVlLAorICAgICAgInU4cGF0aChJdGVyLCBJdGVyKSByZXF1aXJlcyBJdGVyIGhhdmUg
YSB2YWx1ZV90eXBlIG9mIHR5cGUgJ2NoYXInIik7CisgIHJldHVybiBwYXRoKF9fZiwgX19sKTsK
K30KKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBwYXRoOjppdGVyYXRvciB7CitwdWJsaWM6Cisg
IGVudW0gX1BhcnNlclN0YXRlIDogdW5zaWduZWQgY2hhciB7CisgICAgX1Npbmd1bGFyLAorICAg
IF9CZWZvcmVCZWdpbiwKKyAgICBfSW5Sb290TmFtZSwKKyAgICBfSW5Sb290RGlyLAorICAgIF9J
bkZpbGVuYW1lcywKKyAgICBfSW5UcmFpbGluZ1NlcCwKKyAgICBfQXRFbmQKKyAgfTsKKworcHVi
bGljOgorICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OworCisgIHR5cGVkZWYgcGF0aCB2YWx1ZV90eXBlOworICB0eXBlZGVmIHN0ZDo6cHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgdHlwZWRlZiBjb25zdCBwYXRoKiBwb2ludGVyOworICB0
eXBlZGVmIGNvbnN0IHBhdGgmIHJlZmVyZW5jZTsKKworICB0eXBlZGVmIHZvaWQKKyAgICAgIF9f
c3Rhc2hpbmdfaXRlcmF0b3JfdGFnOyAvLyBTZWUgcmV2ZXJzZV9pdGVyYXRvciBhbmQgX19pc19z
dGFzaGluZ19pdGVyYXRvcgorCitwdWJsaWM6CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgaXRlcmF0b3IoKQorICAgICAgOiBfX3N0YXNoZWRfZWxlbV8oKSwgX19wYXRoX3B0cl8obnVs
bHB0ciksIF9fZW50cnlfKCksCisgICAgICAgIF9fc3RhdGVfKF9TaW5ndWxhcikge30KKworICBp
dGVyYXRvcihjb25zdCBpdGVyYXRvciYpID0gZGVmYXVsdDsKKyAgfml0ZXJhdG9yKCkgPSBkZWZh
dWx0OworCisgIGl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgaXRlcmF0b3ImKSA9IGRlZmF1bHQ7
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gX19zdGFzaGVkX2VsZW1fOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmX19zdGFzaGVk
X2VsZW1fOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpIHsKKyAgICBfTElCQ1BQX0FTU0VSVChfX3N0YXRlXyAhPSBfU2luZ3VsYXIsCisg
ICAgICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGEgc2luZ3VsYXIgaXRl
cmF0b3IiKTsKKyAgICBfTElCQ1BQX0FTU0VSVChfX3N0YXRlXyAhPSBfQXRFbmQsCisgICAgICAg
ICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSBlbmQgaXRlcmF0b3IiKTsK
KyAgICByZXR1cm4gX19pbmNyZW1lbnQoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKKyAgICBpdGVyYXRvciBfX2l0KCp0
aGlzKTsKKyAgICB0aGlzLT5vcGVyYXRvcisrKCk7CisgICAgcmV0dXJuIF9faXQ7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewor
ICAgIF9MSUJDUFBfQVNTRVJUKF9fc3RhdGVfICE9IF9TaW5ndWxhciwKKyAgICAgICAgICAgICAg
ICAgICAiYXR0ZW1wdGluZyB0byBkZWNyZW1lbnQgYSBzaW5ndWxhciBpdGVyYXRvciIpOworICAg
IF9MSUJDUFBfQVNTRVJUKF9fZW50cnlfLmRhdGEoKSAhPSBfX3BhdGhfcHRyXy0+bmF0aXZlKCku
ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGRlY3JlbWVudCB0aGUg
YmVnaW4gaXRlcmF0b3IiKTsKKyAgICByZXR1cm4gX19kZWNyZW1lbnQoKTsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKKyAg
ICBpdGVyYXRvciBfX2l0KCp0aGlzKTsKKyAgICB0aGlzLT5vcGVyYXRvci0tKCk7CisgICAgcmV0
dXJuIF9faXQ7CisgIH0KKworcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIHBhdGg7CisKKyAgaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaXRlcmF0b3ImKTsKKworICBpdGVyYXRvciYgX19pbmNyZW1l
bnQoKTsKKyAgaXRlcmF0b3ImIF9fZGVjcmVtZW50KCk7CisKKyAgcGF0aCBfX3N0YXNoZWRfZWxl
bV87CisgIGNvbnN0IHBhdGgqIF9fcGF0aF9wdHJfOworICBwYXRoOjpfX3N0cmluZ192aWV3IF9f
ZW50cnlfOworICBfUGFyc2VyU3RhdGUgX19zdGF0ZV87Cit9OworCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9f
bGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhdGg6Oml0ZXJhdG9yJiBfX3JocykgeworICByZXR1cm4gX19saHMuX19wYXRoX3B0cl8g
PT0gX19yaHMuX19wYXRoX3B0cl8gJiYKKyAgICAgICAgIF9fbGhzLl9fZW50cnlfLmRhdGEoKSA9
PSBfX3Jocy5fX2VudHJ5Xy5kYXRhKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYXRoOjppdGVyYXRvciYgX19saHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6
aXRlcmF0b3ImIF9fcmhzKSB7CisgIHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsKK30KKworLy8g
VE9ETyhsZGlvbm5lKTogV2UgbmVlZCB0byBwb3AgdGhlIHByYWdtYSBhbmQgcHVzaCBpdCBhZ2Fp
biBhZnRlcgorLy8gICAgICAgICAgICAgICAgZmlsZXN5c3RlbV9lcnJvciB0byB3b3JrIGFyb3Vu
ZCBQUjQxMDc4LgorX0xJQkNQUF9BVkFJTEFCSUxJVFlfRklMRVNZU1RFTV9QT1AKKworY2xhc3Mg
X0xJQkNQUF9BVkFJTEFCSUxJVFlfRklMRVNZU1RFTSBfTElCQ1BQX0VYQ0VQVElPTl9BQkkgZmls
ZXN5c3RlbV9lcnJvciA6IHB1YmxpYyBzeXN0ZW1fZXJyb3IgeworcHVibGljOgorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3do
YXQsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCks
CisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KHBhdGgoKSwgcGF0aCgp
KSkgeworICAgIF9fY3JlYXRlX3doYXQoMCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBh
dGgmIF9fcDEsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9f
d2hhdCksCisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIHBh
dGgoKSkpIHsKKyAgICBfX2NyZWF0ZV93aGF0KDEpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0LCBjb25z
dCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLAorICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAg
IF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIF9fcDIpKSB7CisgICAgX19j
cmVhdGVfd2hhdCgyKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29u
c3QgcGF0aCYgcGF0aDEoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3Ax
XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0aCYgcGF0aDIo
KSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AyXzsgfQorCisgIGZpbGVz
eXN0ZW1fZXJyb3IoY29uc3QgZmlsZXN5c3RlbV9lcnJvciYpID0gZGVmYXVsdDsKKyAgfmZpbGVz
eXN0ZW1fZXJyb3IoKSBvdmVycmlkZTsgLy8ga2V5IGZ1bmN0aW9uCisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJp
ZGUgeworICAgIHJldHVybiBfX3N0b3JhZ2VfLT5fX3doYXRfLmNfc3RyKCk7CisgIH0KKworICB2
b2lkIF9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKTsKKworcHJpdmF0ZToKKyAgc3RydWN0
IF9MSUJDUFBfSElEREVOIF9TdG9yYWdlIHsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgX1N0b3JhZ2UoY29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMikgOiBfX3Ax
XyhfX3AxKSwgX19wMl8oX19wMikge30KKworICAgIHBhdGggX19wMV87CisgICAgcGF0aCBfX3Ay
XzsKKyAgICBzdHJpbmcgX193aGF0XzsKKyAgfTsKKyAgc2hhcmVkX3B0cjxfU3RvcmFnZT4gX19z
dG9yYWdlXzsKK307CisKK19MSUJDUFBfQVZBSUxBQklMSVRZX0ZJTEVTWVNURU1fUFVTSAorCit0
ZW1wbGF0ZSA8Y2xhc3MuLi4gX0FyZ3M+CitfTElCQ1BQX05PUkVUVVJOIGlubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisjaWZuZGVmIF9MSUJDUFBfTk9fRVhDRVBUSU9OUwordm9pZCBf
X3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3IoX0FyZ3MmJi4uLiBfX2FyZ3MpIHsKKyAgdGhyb3cgZmls
ZXN5c3RlbV9lcnJvcihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworfQorI2Vsc2UK
K3ZvaWQgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKF9BcmdzJiYuLi4pIHsKKyAgX1ZTVEQ6OmFi
b3J0KCk7Cit9CisjZW5kaWYKKworLy8gb3BlcmF0aW9uYWwgZnVuY3Rpb25zCisKK19MSUJDUFBf
RlVOQ19WSVMKK3BhdGggX19hYnNvbHV0ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9
IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX2Nhbm9uaWNhbChjb25zdCBwYXRo
JiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBf
X2NvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMg
X19vcHQsCisgICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQ
X0ZVTkNfVklTCitib29sIF9fY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0
aCYgX190bywgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY29weV9zeW1saW5r
KGNvbnN0IHBhdGgmIF9fZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgX19uZXdfc3ltbGlu
aywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJ
QkNQUF9GVU5DX1ZJUworYm9vbCBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2NyZWF0
ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGNv
bnN0IHBhdGgmIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
KiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NyZWF0ZV9kaXJlY3Rv
cnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0
cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRo
JiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19oYXJkX2xpbmssCisgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lk
IF9fY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfc3lt
bGluaywKKyAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7
CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fY3VycmVudF9wYXRoKGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jdXJyZW50X3BhdGgoY29uc3Qg
cGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jv
b2wgX19lcXVpdmFsZW50KGNvbnN0IHBhdGgmLCBjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19l
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordWludG1heF90IF9fZmlsZV9zaXplKGNv
bnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
Cit1aW50bWF4X3QgX19oYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19mc19pc19lbXB0eShjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwor
ZmlsZV90aW1lX3R5cGUgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19sYXN0X3dyaXRlX3Rp
bWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1lX3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2
b2lkIF9fcGVybWlzc2lvbnMoY29uc3QgcGF0aCYsIHBlcm1zLCBwZXJtX29wdGlvbnMsIGVycm9y
X2NvZGUqID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fcmVhZF9zeW1saW5r
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNf
VklTCitib29sIF9fcmVtb3ZlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0
cik7CitfTElCQ1BQX0ZVTkNfVklTCit1aW50bWF4X3QgX19yZW1vdmVfYWxsKGNvbnN0IHBhdGgm
IHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9f
cmVuYW1lKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYyA9
IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX3Jlc2l6ZV9maWxlKGNvbnN0IHBh
dGgmIHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUworc3BhY2VfaW5mbyBfX3NwYWNlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBf
X2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3N0YXR1cyBfX3N0YXR1cyhj
b25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJ
UworZmlsZV9zdGF0dXMgX19zeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiwgZXJyb3JfY29kZSog
X19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX3N5c3RlbV9jb21wbGV0
ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5D
X1ZJUworcGF0aCBfX3RlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSogX19lYyA9IG51bGxw
dHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX3dlYWtseV9jYW5vbmljYWwocGF0aCBjb25z
dCYgX19wLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggY3VycmVudF9wYXRoKCkgeworICByZXR1cm4gX19jdXJyZW50
X3BhdGgoKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBjdXJy
ZW50X3BhdGgoZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19jdXJyZW50X3BhdGgoJl9f
ZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGN1cnJlbnRf
cGF0aChjb25zdCBwYXRoJiBfX3ApIHsKKyAgX19jdXJyZW50X3BhdGgoX19wKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0
aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2N1cnJlbnRfcGF0aChfX3AsICZf
X2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBhYnNvbHV0
ZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fYWJzb2x1dGUoX19wKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBhYnNvbHV0ZShjb25zdCBwYXRoJiBf
X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fYWJzb2x1dGUoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgm
IF9fcCkgeworICByZXR1cm4gX19jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICByZXR1cm4gX19jYW5vbmljYWwoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bykg
eworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9t
LCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgY29weV9v
cHRpb25zOjpub25lLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zIF9fb3B0
KSB7CisgIF9fY29weShfX2Zyb20sIF9fdG8sIF9fb3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0
aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5
X29wdGlvbnMgX19vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBfX29wdCwgJl9f
ZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNvcHlfZmls
ZShjb25zdCBwYXRoJiBfX2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvKSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShf
X2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wKK2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0
IHBhdGgmIF9fdG8sIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9f
ZnJvbSwgX190bywgY29weV9vcHRpb25zOjpub25lLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20s
IGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCkgeworICByZXR1cm4gX19jb3B5
X2ZpbGUoX19mcm9tLCBfX3RvLCBfX29wdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlv
bnMgX19vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8s
IF9fb3B0LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQgY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXhpc3RpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25ldykgewor
ICBfX2NvcHlfc3ltbGluayhfX2V4aXN0aW5nLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NvcHlfc3ltbGluayhjb25zdCBwYXRoJiBfX2V4dCwg
Y29uc3QgcGF0aCYgX19uZXcsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jb3B5
X3N5bWxpbmsoX19leHQsIF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3JpZXMoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3JpZXMoX19w
LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY3Jl
YXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVj
dG9yeShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitj
cmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNl
cHQgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHBhdGgmIF9fYXR0cnMpIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVj
dG9yeShfX3AsIF9fYXR0cnMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sCitjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCwgY29uc3QgcGF0aCYgX19h
dHRycywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCwgX19hdHRycywgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitjcmVhdGVfZGlyZWN0b3J5X3N5bWxp
bmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfZGly
ZWN0b3J5X3N5bWxpbmsoX190bywgX19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSB2b2lkCitjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgX190
bywgY29uc3QgcGF0aCYgX19uZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29k
ZSYgX19lYykgbm9leGNlcHQgeworICBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhfX3RvLCBf
X25ldywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lk
IGNyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25ldykgewor
ICBfX2NyZWF0ZV9oYXJkX2xpbmsoX190bywgX19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSB2b2lkCitjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8s
IGNvbnN0IHBhdGgmIF9fbmV3LAorICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7CisgIF9fY3JlYXRlX2hhcmRfbGluayhfX3RvLCBfX25ldywgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNyZWF0ZV9zeW1saW5rKGNv
bnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX3N5bWxpbmsoX190
bywgX19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitj
cmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywgZXJyb3Jf
Y29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19jcmVhdGVfc3ltbGluayhfX3RvLCBf
X25ldywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IHN0YXR1c19rbm93bihmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50
eXBlKCkgIT0gZmlsZV90eXBlOjpub25lOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGV4aXN0cyhmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IHN0YXR1c19rbm93bihfX3MpICYmIF9fcy50eXBlKCkgIT0gZmlsZV90eXBlOjpub3RfZm91bmQ7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gZXhpc3RzKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBfX3As
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIGF1dG8gX19zID0gX19zdGF0dXMoX19wLCAmX19lYyk7Cisg
IGlmIChzdGF0dXNfa25vd24oX19zKSkKKyAgICBfX2VjLmNsZWFyKCk7CisgIHJldHVybiBleGlz
dHMoX19zKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBlcXVp
dmFsZW50KGNvbnN0IHBhdGgmIF9fcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19wMikgeworICByZXR1cm4gX19lcXVpdmFs
ZW50KF9fcDEsIF9fcDIpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sCitlcXVpdmFsZW50KGNvbnN0IHBhdGgmIF9fcDEsIGNvbnN0IHBhdGgmIF9fcDIsIGVycm9y
X2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fZXF1aXZhbGVudChfX3AxLCBfX3Ay
LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhf
dCBmaWxlX3NpemUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2ZpbGVfc2l6ZShfX3Ap
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QKK2ZpbGVf
c2l6ZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIF9fZmlsZV9zaXplKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSB1aW50bWF4X3QgaGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gX19oYXJkX2xpbmtfY291bnQoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdWludG1heF90CitoYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19w
LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2hhcmRfbGlua19jb3Vu
dChfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBpc19ibG9ja19maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19z
LnR5cGUoKSA9PSBmaWxlX3R5cGU6OmJsb2NrOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGlzX2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBpc19ibG9ja19maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sIGlzX2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2Jsb2NrX2ZpbGUoX19zdGF0dXMoX19wLCAm
X19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitpc19j
aGFyYWN0ZXJfZmlsZShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50
eXBlKCkgPT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBpc19jaGFyYWN0ZXJfZmlsZShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0
aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19jaGFyYWN0
ZXJfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfZGlyZWN0b3J5KGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQg
eworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0
aCYgX19wKSB7CisgIHJldHVybiBpc19kaXJlY3RvcnkoX19zdGF0dXMoX19wKSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBh
dGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2RpcmVjdG9yeShf
X3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaXNfZW1wdHkoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2ZzX2lzX2Vt
cHR5KF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNf
ZW1wdHkoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2ZzX2lzX2VtcHR5
KF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX2ZpZm8oZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgp
ID09IGZpbGVfdHlwZTo6ZmlmbzsKK30KK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgaXNfZmlmbyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2ZpZm8oX19zdGF0
dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNf
Zmlmbyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfZmlm
byhfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wKK2lzX3JlZ3VsYXJfZmlsZShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsK
KyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRo
JiBfX3ApIHsKKyAgcmV0dXJuIGlzX3JlZ3VsYXJfZmlsZShfX3N0YXR1cyhfX3ApKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfcmVndWxhcl9maWxlKGNv
bnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNf
cmVndWxhcl9maWxlKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zb2NrZXQoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6c29ja2V0OworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIGlzX3NvY2tldChfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgX19wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29k
ZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfc29ja2V0KF9fc3RhdHVzKF9fcCwgJl9f
ZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1s
aW5rKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBm
aWxlX3R5cGU6OnN5bWxpbms7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX3N5bWxpbmso
X19zeW1saW5rX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbCBpc19zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBpc19zeW1saW5rKF9fc3ltbGlua19zdGF0dXMoX19wLCAmX19lYykpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGZpbGVf
c3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gZXhpc3RzKF9fcykgJiYgIWlzX3JlZ3Vs
YXJfZmlsZShfX3MpICYmICFpc19kaXJlY3RvcnkoX19zKSAmJgorICAgICAgICAgIWlzX3N5bWxp
bmsoX19zKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19v
dGhlcihjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX290aGVyKF9fc3RhdHVzKF9fcCkp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGNv
bnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfb3RoZXIoX19z
dGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBmaWxlX3RpbWVfdHlwZQorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCkgeworICBy
ZXR1cm4gX19sYXN0X3dyaXRlX3RpbWUoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZmlsZV90aW1lX3R5cGUKK2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBf
X3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGFzdF93cml0ZV90
aW1lKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2
b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3RpbWVfdHlwZSBfX3QpIHsK
KyAgX19sYXN0X3dyaXRlX3RpbWUoX19wLCBfX3QpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSB2b2lkCitsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wLCBmaWxl
X3RpbWVfdHlwZSBfX3QsCisgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNl
cHQgeworICBfX2xhc3Rfd3JpdGVfdGltZShfX3AsIF9fdCwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBf
X3AsIHBlcm1zIF9fcHJtcywKKyAgICAgICAgICAgIHBlcm1fb3B0aW9ucyBfX29wdHMgPSBwZXJt
X29wdGlvbnM6OnJlcGxhY2UpIHsKKyAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywgX19vcHRz
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBwZXJtaXNzaW9u
cyhjb25zdCBwYXRoJiBfX3AsIHBlcm1zIF9fcHJtcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgewor
ICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBwZXJtX29wdGlvbnM6OnJlcGxhY2UsICZfX2Vj
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBwZXJtaXNzaW9u
cyhjb25zdCBwYXRoJiBfX3AsIHBlcm1zIF9fcHJtcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBfX29wdHMsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBwcm94aW1hdGUoY29uc3QgcGF0
aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICBwYXRoIF9fdG1wID0gX193ZWFrbHlf
Y2Fub25pY2FsKF9fcCwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4ge307CisgIHBh
dGggX190bXBfYmFzZSA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UsICZfX2VjKTsKKyAgaWYg
KF9fZWMpCisgICAgcmV0dXJuIHt9OworICByZXR1cm4gX190bXAubGV4aWNhbGx5X3Byb3hpbWF0
ZShfX3RtcF9iYXNlKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0
aCBwcm94aW1hdGUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gcHJveGlt
YXRlKF9fcCwgY3VycmVudF9wYXRoKCksIF9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoCitwcm94aW1hdGUoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRo
JiBfX2Jhc2UgPSBjdXJyZW50X3BhdGgoKSkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2Fs
KF9fcCkubGV4aWNhbGx5X3Byb3hpbWF0ZSgKKyAgICAgIF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jh
c2UpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWFkX3N5
bWxpbmsoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX3JlYWRfc3ltbGluayhfX3ApOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRfc3ltbGluayhj
b25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3JlYWRfc3ltbGluayhf
X3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBy
ZWxhdGl2ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fYmFzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICBwYXRoIF9f
dG1wID0gX193ZWFrbHlfY2Fub25pY2FsKF9fcCwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICBy
ZXR1cm4gcGF0aCgpOworICBwYXRoIF9fdG1wYmFzZSA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jh
c2UsICZfX2VjKTsKKyAgaWYgKF9fZWMpCisgICAgcmV0dXJuIHBhdGgoKTsKKyAgcmV0dXJuIF9f
dG1wLmxleGljYWxseV9yZWxhdGl2ZShfX3RtcGJhc2UpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
eworICByZXR1cm4gcmVsYXRpdmUoX19wLCBjdXJyZW50X3BhdGgoKSwgX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgKK3JlbGF0aXZlKGNvbnN0IHBhdGgm
IF9fcCwgY29uc3QgcGF0aCYgX19iYXNlID0gY3VycmVudF9wYXRoKCkpIHsKKyAgcmV0dXJuIF9f
d2Vha2x5X2Nhbm9uaWNhbChfX3ApLmxleGljYWxseV9yZWxhdGl2ZShfX3dlYWtseV9jYW5vbmlj
YWwoX19iYXNlKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
cmVtb3ZlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19yZW1vdmUoX19wKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYg
X19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19yZW1vdmUoX19wLCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCByZW1vdmVfYWxs
KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19yZW1vdmVfYWxsKF9fcCk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCByZW1vdmVfYWxsKGNvbnN0
IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVtb3ZlX2FsbChfX3As
ICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCByZW5h
bWUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bykgeworICByZXR1cm4gX19yZW5hbWUoX19mcm9t
LCBfX3RvKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorcmVu
YW1lKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgZXJyb3JfY29kZSYgX19l
Yykgbm9leGNlcHQgeworICByZXR1cm4gX19yZW5hbWUoX19mcm9tLCBfX3RvLCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcmVzaXplX2ZpbGUoY29u
c3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50bWF4X3QgX19ucykgeworICByZXR1cm4gX19yZXNpemVfZmlsZShfX3AsIF9f
bnMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCityZXNpemVf
ZmlsZShjb25zdCBwYXRoJiBfX3AsIHVpbnRtYXhfdCBfX25zLCBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX3Jlc2l6ZV9maWxlKF9fcCwgX19ucywgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzcGFjZV9pbmZvIHNwYWNlKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19zcGFjZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBzcGFjZV9pbmZvIHNwYWNlKGNvbnN0IHBhdGgmIF9fcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29k
ZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19zcGFjZShfX3AsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMgc3RhdHVzKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19zdGF0dXMoX19wKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMgc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3N0YXR1cyhfX3AsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMgc3ltbGlu
a19zdGF0dXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9f
cCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzCitz
eW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggdGVtcF9kaXJlY3RvcnlfcGF0aCgpIHsKKyAg
cmV0dXJuIF9fdGVtcF9kaXJlY3RvcnlfcGF0aCgpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSYgX19lYykg
eworICByZXR1cm4gX190ZW1wX2RpcmVjdG9yeV9wYXRoKCZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3Qm
IF9fcCkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9fcCk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9f
cCwgJl9fZWMpOworfQorCitjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CitjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworY2xhc3MgX0xJQkNQUF9ISURERU4gX19kaXJfc3RyZWFt
OworCitjbGFzcyBkaXJlY3RvcnlfZW50cnkgeworICB0eXBlZGVmIF9WU1REX0ZTOjpwYXRoIF9Q
YXRoOworCitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMKKyAgZGly
ZWN0b3J5X2VudHJ5KCkgbm9leGNlcHQgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50cnkoZGly
ZWN0b3J5X2VudHJ5IGNvbnN0JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50cnkoZGlyZWN0
b3J5X2VudHJ5JiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGV4cGxpY2l0IGRpcmVjdG9yeV9lbnRyeShfUGF0aCBjb25zdCYgX19wKSA6IF9f
cF8oX19wKSB7CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGRpcmVjdG9yeV9lbnRyeShfUGF0
aCBjb25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSA6IF9fcF8oX19wKSB7CisgICAgX19yZWZy
ZXNoKCZfX2VjKTsKKyAgfQorCisgIH5kaXJlY3RvcnlfZW50cnkoKSB7fQorCisgIGRpcmVjdG9y
eV9lbnRyeSYgb3BlcmF0b3I9KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYpID0gZGVmYXVsdDsKKyAg
ZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvcj0oZGlyZWN0b3J5X2VudHJ5JiYpIG5vZXhjZXB0ID0g
ZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgYXNzaWduKF9Q
YXRoIGNvbnN0JiBfX3ApIHsKKyAgICBfX3BfID0gX19wOworICAgIGVycm9yX2NvZGUgX19lYzsK
KyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB2b2lkIGFzc2lnbihfUGF0aCBjb25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSB7Cisg
ICAgX19wXyA9IF9fcDsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlcGxhY2VfZmlsZW5hbWUoX1BhdGggY29uc3QmIF9f
cCkgeworICAgIF9fcF8ucmVwbGFjZV9maWxlbmFtZShfX3ApOworICAgIGVycm9yX2NvZGUgX19l
YzsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICB2b2lkIHJlcGxhY2VfZmlsZW5hbWUoX1BhdGggY29uc3QmIF9fcCwgZXJyb3JfY29k
ZSYgX19lYykgeworICAgIF9fcF8gPSBfX3BfLnBhcmVudF9wYXRoKCkgLyBfX3A7CisgICAgX19y
ZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9p
ZCByZWZyZXNoKCkgeyBfX3JlZnJlc2goKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdm9pZCByZWZyZXNoKGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsgX19yZWZyZXNo
KCZfX2VjKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgX1BhdGggY29uc3Qm
IHBhdGgoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BfOyB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBvcGVyYXRvciBjb25zdCBfUGF0aCYoKSBjb25zdCBub2V4Y2VwdCB7
IHJldHVybiBfX3BfOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGV4
aXN0cygpIGNvbnN0IHsgcmV0dXJuIF9WU1REX0ZTOjpleGlzdHMoZmlsZV9zdGF0dXN7X19nZXRf
ZnQoKX0pOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGV4aXN0cyhl
cnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9WU1REX0ZTOjpl
eGlzdHMoZmlsZV9zdGF0dXN7X19nZXRfZnQoJl9fZWMpfSk7CisgIH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfYmxvY2tfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9f
Z2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpibG9jazsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgYm9vbCBpc19ibG9ja19maWxlKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6YmxvY2s7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfY2hhcmFjdGVyX2Zp
bGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6Y2hhcmFjdGVyOyB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2NoYXJhY3Rlcl9maWxl
KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQo
Jl9fZWMpID09IGZpbGVfdHlwZTo6Y2hhcmFjdGVyOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBib29sIGlzX2RpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0
KCkgPT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgaXNfZGlyZWN0b3J5KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5Owor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2ZpZm8oKSBjb25z
dCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6ZmlmbzsgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19maWZvKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6Zmlm
bzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19vdGhlcigp
IGNvbnN0IHsgcmV0dXJuIF9WU1REX0ZTOjppc19vdGhlcihmaWxlX3N0YXR1c3tfX2dldF9mdCgp
fSk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfb3RoZXIoZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfVlNURF9GUzo6aXNf
b3RoZXIoZmlsZV9zdGF0dXN7X19nZXRfZnQoJl9fZWMpfSk7CisgIH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfcmVndWxhcl9maWxlKCkgY29uc3QgeyByZXR1cm4g
X19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfcmVndWxhcl9maWxlKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6cmVn
dWxhcjsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19zb2Nr
ZXQoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6c29ja2V0OyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3NvY2tldChlcnJvcl9jb2Rl
JiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBm
aWxlX3R5cGU6OnNvY2tldDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBpc19zeW1saW5rKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3ltX2Z0KCkgPT0gZmlsZV90
eXBlOjpzeW1saW5rOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlz
X3N5bWxpbmsoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBf
X2dldF9zeW1fZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6c3ltbGluazsKKyAgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBmaWxlX3NpemUoKSBjb25zdCB7IHJldHVy
biBfX2dldF9zaXplKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRt
YXhfdCBmaWxlX3NpemUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBfX2dldF9zaXplKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X25s
aW5rKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBoYXJk
X2xpbmtfY291bnQoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVy
biBfX2dldF9ubGluaygmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGZpbGVfdGltZV90eXBlIGxhc3Rfd3JpdGVfdGltZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0
X3dyaXRlX3RpbWUoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90
aW1lX3R5cGUgbGFzdF93cml0ZV90aW1lKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgmX19lYyk7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IF9fZ2V0X3N0YXR1cygpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxl
X3N0YXR1cyBzdGF0dXMoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBfX2dldF9zdGF0dXMoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0
X3N5bWxpbmtfc3RhdHVzKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZp
bGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0dXMoJl9fZWMpOworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJhdG9yPChkaXJlY3RvcnlfZW50cnkg
Y29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPCBfX3Jocy5f
X3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJhdG9y
PT0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBfX3BfID09IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgb3BlcmF0b3IhPShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gIT0gX19yaHMuX19wXzsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcjw9KGRpcmVjdG9yeV9lbnRy
eSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA8PSBfX3Jo
cy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJh
dG9yPihkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9fcF8gPiBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBib29sIG9wZXJhdG9yPj0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29u
c3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfID49IF9fcmhzLl9fcF87CisgIH0KKworcHJp
dmF0ZToKKyAgZnJpZW5kIGNsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJpZW5kIGNsYXNz
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyBfX2Rpcl9zdHJl
YW07CisKKyAgZW51bSBfQ2FjaGVUeXBlIDogdW5zaWduZWQgY2hhciB7CisgICAgX0VtcHR5LAor
ICAgIF9JdGVyU3ltbGluaywKKyAgICBfSXRlck5vblN5bWxpbmssCisgICAgX1JlZnJlc2hTeW1s
aW5rLAorICAgIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQsCisgICAgX1JlZnJlc2hOb25TeW1s
aW5rCisgIH07CisKKyAgc3RydWN0IF9fY2FjaGVkX2RhdGEgeworICAgIHVpbnRtYXhfdCBfX3Np
emVfOworICAgIHVpbnRtYXhfdCBfX25saW5rXzsKKyAgICBmaWxlX3RpbWVfdHlwZSBfX3dyaXRl
X3RpbWVfOworICAgIHBlcm1zIF9fc3ltX3Blcm1zXzsKKyAgICBwZXJtcyBfX25vbl9zeW1fcGVy
bXNfOworICAgIGZpbGVfdHlwZSBfX3R5cGVfOworICAgIF9DYWNoZVR5cGUgX19jYWNoZV90eXBl
XzsKKworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICBfX2NhY2hlZF9kYXRhKCkg
bm9leGNlcHQgeyBfX3Jlc2V0KCk7IH0KKworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgICB2b2lkIF9fcmVzZXQoKSB7CisgICAgICBfX2NhY2hlX3R5cGVfID0gX0VtcHR5OworICAg
ICAgX190eXBlXyA9IGZpbGVfdHlwZTo6bm9uZTsKKyAgICAgIF9fc3ltX3Blcm1zXyA9IF9fbm9u
X3N5bV9wZXJtc18gPSBwZXJtczo6dW5rbm93bjsKKyAgICAgIF9fc2l6ZV8gPSBfX25saW5rXyA9
IHVpbnRtYXhfdCgtMSk7CisgICAgICBfX3dyaXRlX3RpbWVfID0gZmlsZV90aW1lX3R5cGU6Om1p
bigpOworICAgIH0KKyAgfTsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHN0YXRp
YyBfX2NhY2hlZF9kYXRhIF9fY3JlYXRlX2l0ZXJfcmVzdWx0KGZpbGVfdHlwZSBfX2Z0KSB7Cisg
ICAgX19jYWNoZWRfZGF0YSBfX2RhdGE7CisgICAgX19kYXRhLl9fdHlwZV8gPSBfX2Z0OworICAg
IF9fZGF0YS5fX2NhY2hlX3R5cGVfID0gWyZdKCkgeworICAgICAgc3dpdGNoIChfX2Z0KSB7Cisg
ICAgICBjYXNlIGZpbGVfdHlwZTo6bm9uZToKKyAgICAgICAgcmV0dXJuIF9FbXB0eTsKKyAgICAg
IGNhc2UgZmlsZV90eXBlOjpzeW1saW5rOgorICAgICAgICByZXR1cm4gX0l0ZXJTeW1saW5rOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIF9JdGVyTm9uU3ltbGluazsKKyAgICAgIH0K
KyAgICB9KCk7CisgICAgcmV0dXJuIF9fZGF0YTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgdm9pZCBfX2Fzc2lnbl9pdGVyX2VudHJ5KF9QYXRoJiYgX19wLCBfX2NhY2hl
ZF9kYXRhIF9fZHQpIHsKKyAgICBfX3BfID0gc3RkOjptb3ZlKF9fcCk7CisgICAgX19kYXRhXyA9
IF9fZHQ7CisgIH0KKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGVycm9yX2NvZGUgX19kb19yZWZy
ZXNoKCkgbm9leGNlcHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBzdGF0aWMg
Ym9vbCBfX2lzX2RuZV9lcnJvcihlcnJvcl9jb2RlIGNvbnN0JiBfX2VjKSB7CisgICAgaWYgKCFf
X2VjKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxlcnJjPihf
X2VjLnZhbHVlKCkpKSB7CisgICAgY2FzZSBlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5
OgorICAgIGNhc2UgZXJyYzo6bm90X2FfZGlyZWN0b3J5OgorICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgX19oYW5kbGVfZXJyb3IoY29uc3QgY2hhciogX19t
c2csIGVycm9yX2NvZGUqIF9fZGVzdF9lYywKKyAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlIGNvbnN0JiBfX2VjLCBib29sIF9fYWxsb3dfZG5lID0gZmFsc2UpIGNvbnN0IHsKKyAgICBp
ZiAoX19kZXN0X2VjKSB7CisgICAgICAqX19kZXN0X2VjID0gX19lYzsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKF9fZWMgJiYgKCFfX2FsbG93X2RuZSB8fCAhX19pc19kbmVfZXJyb3Io
X19lYykpKQorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKF9fbXNnLCBfX3BfLCBfX2Vj
KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX3JlZnJlc2go
ZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIHsKKyAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGly
ZWN0b3J5X2VudHJ5OjpyZWZyZXNoIiwgX19lYywgX19kb19yZWZyZXNoKCksCisgICAgICAgICAg
ICAgICAgICAgLyphbGxvd19kbmUqLyB0cnVlKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgZmlsZV90eXBlIF9fZ2V0X3N5bV9mdChlcnJvcl9jb2RlKiBfX2VjID0gbnVs
bHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAg
Y2FzZSBfRW1wdHk6CisgICAgICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3BfLCBfX2VjKS50
eXBlKCk7CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6
CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgaWYgKF9fZWMpCisg
ICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gZmlsZV90eXBlOjpzeW1saW5rOwor
ICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOgor
ICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2RhdGFfLl9fdHlwZV8pOworICAgICAgaWYgKF9fZWMg
JiYgIV9WU1REX0ZTOjpleGlzdHMoX19zdCkpCisgICAgICAgICpfX2VjID0gbWFrZV9lcnJvcl9j
b2RlKGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3RvcnkpOworICAgICAgZWxzZSBpZiAoX19l
YykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBfX2RhdGFfLl9fdHlwZV87
CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90eXBlIF9fZ2V0X2Z0KGVycm9yX2NvZGUqIF9fZWMgPSBu
dWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAg
ICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNo
U3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX19zdGF0dXMoX19wXywgX19lYykudHlw
ZSgpOworICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1s
aW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOiB7CisgICAgICBmaWxlX3N0YXR1cyBfX3N0
KF9fZGF0YV8uX190eXBlXyk7CisgICAgICBpZiAoX19lYyAmJiAhX1ZTVERfRlM6OmV4aXN0cyhf
X3N0KSkKKyAgICAgICAgKl9fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm9fc3VjaF9maWxl
X29yX2RpcmVjdG9yeSk7CisgICAgICBlbHNlIGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVh
cigpOworICAgICAgcmV0dXJuIF9fZGF0YV8uX190eXBlXzsKKyAgICB9CisgICAgfQorICAgIF9M
SUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgZmlsZV9zdGF0dXMgX19nZXRfc3RhdHVzKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBj
b25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9F
bXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoK
KyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX19zdGF0
dXMoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgY2FzZSBf
UmVmcmVzaFN5bWxpbms6CisgICAgICByZXR1cm4gZmlsZV9zdGF0dXMoX19nZXRfZnQoX19lYyks
IF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFC
TEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMg
X19nZXRfc3ltbGlua19zdGF0dXMoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsK
KyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5Ogor
ICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgICAg
cmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVzaE5v
blN5bWxpbms6CisgICAgICByZXR1cm4gZmlsZV9zdGF0dXMoX19nZXRfc3ltX2Z0KF9fZWMpLCBf
X2RhdGFfLl9fbm9uX3N5bV9wZXJtc18pOworICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAg
IGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBmaWxlX3N0YXR1
cyhfX2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19zeW1fcGVybXNfKTsKKyAgICB9CisgICAg
X0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB1aW50bWF4X3QgX19nZXRfc2l6ZShlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29u
c3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1w
dHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6Cisg
ICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZT
OjpfX2ZpbGVfc2l6ZShfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAg
ICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7Cisg
ICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZ2V0X2Z0KCZfX21fZWMpKTsKKyAgICAgIF9faGFuZGxl
X2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OmZpbGVfc2l6ZSIsIF9fZWMsIF9fbV9lYyk7Cisg
ICAgICBpZiAoX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSAmJiAhX1ZTVERfRlM6OmlzX3JlZ3VsYXJf
ZmlsZShfX3N0KSkgeworICAgICAgICBlcnJjIF9fZXJyX2tpbmQgPSBfVlNURF9GUzo6aXNfZGly
ZWN0b3J5KF9fc3QpID8gZXJyYzo6aXNfYV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVycmM6Om5vdF9zdXBwb3J0ZWQ7
CisgICAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OmZpbGVfc2l6ZSIs
IF9fZWMsCisgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZXJyb3JfY29kZShfX2Vycl9raW5k
KSk7CisgICAgICB9CisgICAgICByZXR1cm4gX19kYXRhXy5fX3NpemVfOworICAgIH0KKyAgICB9
CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB1aW50bWF4X3QgX19nZXRfbmxpbmsoZXJyb3JfY29kZSogX19lYyA9IG51bGxw
dHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNh
c2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX0l0ZXJTeW1s
aW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBf
VlNURF9GUzo6X19oYXJkX2xpbmtfY291bnQoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVz
aFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6IHsKKyAgICAgIGVycm9yX2Nv
ZGUgX19tX2VjOworICAgICAgKHZvaWQpX19nZXRfZnQoJl9fbV9lYyk7CisgICAgICBfX2hhbmRs
ZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpoYXJkX2xpbmtfY291bnQiLCBfX2VjLCBfX21f
ZWMpOworICAgICAgcmV0dXJuIF9fZGF0YV8uX19ubGlua187CisgICAgfQorICAgIH0KKyAgICBf
TElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGZpbGVfdGltZV90eXBlIF9fZ2V0X3dyaXRlX3RpbWUoZXJyb3JfY29kZSogX19lYyA9IG51
bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAg
IGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX0l0ZXJT
eW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVy
biBfVlNURF9GUzo6X19sYXN0X3dyaXRlX3RpbWUoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVm
cmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6IHsKKyAgICAgIGVycm9y
X2NvZGUgX19tX2VjOworICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2dldF9mdCgmX19tX2VjKSk7
CisgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpsYXN0X3dyaXRlX3Rp
bWUiLCBfX2VjLCBfX21fZWMpOworICAgICAgaWYgKF9WU1REX0ZTOjpleGlzdHMoX19zdCkgJiYK
KyAgICAgICAgICBfX2RhdGFfLl9fd3JpdGVfdGltZV8gPT0gZmlsZV90aW1lX3R5cGU6Om1pbigp
KQorICAgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpsYXN0X3dyaXRl
X3RpbWUiLCBfX2VjLAorICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Vycm9yX2NvZGUoZXJy
Yzo6dmFsdWVfdG9vX2xhcmdlKSk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX3dyaXRlX3RpbWVf
OworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKK3ByaXZh
dGU6CisgIF9QYXRoIF9fcF87CisgIF9fY2FjaGVkX2RhdGEgX19kYXRhXzsKK307CisKK2NsYXNz
IF9fZGlyX2VsZW1lbnRfcHJveHkgeworcHVibGljOgorICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBkaXJlY3RvcnlfZW50cnkgb3BlcmF0b3IqKCkgeworICAgIHJldHVybiBfVlNU
RDo6bW92ZShfX2VsZW1fKTsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgZGlyZWN0
b3J5X2l0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cjsKKyAgZXhwbGljaXQgX19kaXJfZWxlbWVudF9wcm94eShkaXJlY3RvcnlfZW50cnkgY29uc3Qm
IF9fZSkgOiBfX2VsZW1fKF9fZSkge30KKyAgX19kaXJfZWxlbWVudF9wcm94eShfX2Rpcl9lbGVt
ZW50X3Byb3h5JiYgX19vKQorICAgICAgOiBfX2VsZW1fKF9WU1REOjptb3ZlKF9fby5fX2VsZW1f
KSkge30KKyAgZGlyZWN0b3J5X2VudHJ5IF9fZWxlbV87Cit9OworCitjbGFzcyBkaXJlY3Rvcnlf
aXRlcmF0b3IgeworcHVibGljOgorICB0eXBlZGVmIGRpcmVjdG9yeV9lbnRyeSB2YWx1ZV90eXBl
OworICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgIHR5cGVkZWYgdmFsdWVf
dHlwZSBjb25zdCogcG9pbnRlcjsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0JiByZWZlcmVu
Y2U7CisgIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCitw
dWJsaWM6CisgIC8vY3RvciAmIGR0b3IKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKCkgbm9leGNlcHQg
e30KKworICBleHBsaWNpdCBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wKQorICAg
ICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBudWxscHRyKSB7fQorCisgIGRpcmVjdG9yeV9p
dGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0cykKKyAgICAg
IDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgbnVsbHB0ciwgX19vcHRzKSB7fQorCisgIGRpcmVj
dG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6
IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsICZfX2VjKSB7fQorCisgIGRpcmVjdG9yeV9pdGVyYXRv
cihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0cywKKyAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihf
X3AsICZfX2VjLCBfX29wdHMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IGRpcmVj
dG9yeV9pdGVyYXRvciYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGRpcmVjdG9y
eV9pdGVyYXRvciYmKSA9IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3I9
KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBkaXJlY3RvcnlfaXRl
cmF0b3ImIG9wZXJhdG9yPShkaXJlY3RvcnlfaXRlcmF0b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAg
ICAvLyBub24tZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCB0byBzdXBwb3J0IHNlbGYt
bW92ZSBhc3NpZ24uCisgICAgaWYgKHRoaXMgIT0gJl9fbykgeworICAgICAgX19pbXBfID0gX1ZT
VEQ6Om1vdmUoX19vLl9faW1wXyk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisg
IH5kaXJlY3RvcnlfaXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgY29uc3QgZGlyZWN0b3J5X2Vu
dHJ5JiBvcGVyYXRvciooKSBjb25zdCB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiVGhl
IGVuZCBpdGVyYXRvciBjYW5ub3QgYmUgZGVyZWZlcmVuY2VkIik7CisgICAgcmV0dXJuIF9fZGVy
ZWZlcmVuY2UoKTsKKyAgfQorCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuICYqKnRoaXM7IH0KKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIG9wZXJh
dG9yKysoKSB7IHJldHVybiBfX2luY3JlbWVudCgpOyB9CisKKyAgX19kaXJfZWxlbWVudF9wcm94
eSBvcGVyYXRvcisrKGludCkgeworICAgIF9fZGlyX2VsZW1lbnRfcHJveHkgX19wKCoqdGhpcyk7
CisgICAgX19pbmNyZW1lbnQoKTsKKyAgICByZXR1cm4gX19wOworICB9CisKKyAgZGlyZWN0b3J5
X2l0ZXJhdG9yJiBpbmNyZW1lbnQoZXJyb3JfY29kZSYgX19lYykgeyByZXR1cm4gX19pbmNyZW1l
bnQoJl9fZWMpOyB9CisKK3ByaXZhdGU6CisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBf
X2xocywKKyAgICAgICAgICAgICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4
Y2VwdDsKKworICAvLyBjb25zdHJ1Y3QgdGhlIGRpcl9zdHJlYW0KKyAgX0xJQkNQUF9GVU5DX1ZJ
UworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqLAorICAgICAg
ICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgPSBkaXJlY3Rvcnlfb3B0aW9uczo6bm9u
ZSk7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBkaXJlY3RvcnlfaXRlcmF0b3ImIF9faW5jcmVt
ZW50KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisg
IGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgX19kZXJlZmVyZW5jZSgpIGNvbnN0OworCitwcml2YXRl
OgorICBzaGFyZWRfcHRyPF9fZGlyX3N0cmVhbT4gX19pbXBfOworfTsKKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorb3BlcmF0b3I9PShjb25zdCBkaXJlY3RvcnlfaXRl
cmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhz
KSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5fX2ltcF8gPT0gX19yaHMuX19pbXBfOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvciE9KGNvbnN0
IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeV9p
dGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOwor
fQorCisvLyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1l
bnRzCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBkaXJlY3RvcnlfaXRlcmF0b3IK
K2JlZ2luKGRpcmVjdG9yeV9pdGVyYXRvciBfX2l0ZXIpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9f
aXRlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZGlyZWN0b3J5X2l0
ZXJhdG9yCitlbmQoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICByZXR1
cm4gZGlyZWN0b3J5X2l0ZXJhdG9yKCk7Cit9CisKK2NsYXNzIHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3IgeworcHVibGljOgorICB1c2luZyB2YWx1ZV90eXBlID0gZGlyZWN0b3J5X2VudHJ5
OworICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSBzdGQ6OnB0cmRpZmZfdDsKKyAgdXNpbmcgcG9p
bnRlciA9IGRpcmVjdG9yeV9lbnRyeSBjb25zdCo7CisgIHVzaW5nIHJlZmVyZW5jZSA9IGRpcmVj
dG9yeV9lbnRyeSBjb25zdCY7CisgIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjppbnB1
dF9pdGVyYXRvcl90YWc7CisKK3B1YmxpYzoKKyAgLy8gY29uc3RydWN0b3JzIGFuZCBkZXN0cnVj
dG9yCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9p
dGVyYXRvcigpIG5vZXhjZXB0IDogX19yZWNfKGZhbHNlKSB7fQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigKKyAg
ICAgIGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX194b3B0aW9ucyA9IGRpcmVj
dG9yeV9vcHRpb25zOjpub25lKQorICAgICAgOiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
KF9fcCwgX194b3B0aW9ucywgbnVsbHB0cikge30KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBkaXJl
Y3Rvcnlfb3B0aW9ucyBfX3hvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Io
X19wLCBfX3hvcHRpb25zLCAmX19lYykge30KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9j
b2RlJiBfX2VjKQorICAgICAgOiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgZGly
ZWN0b3J5X29wdGlvbnM6Om5vbmUsICZfX2VjKSB7fQorCisgIHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3IoY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYpID0gZGVmYXVsdDsK
KyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yJiYpID0gZGVmYXVsdDsKKworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJgorICBv
cGVyYXRvcj0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYpID0gZGVmYXVsdDsK
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3ImCisgIG9wZXJhdG9yPShyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiYgX19vKSBu
b2V4Y2VwdCB7CisgICAgLy8gbm9uLWRlZmF1bHQgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgdG8g
c3VwcG9ydCBzZWxmLW1vdmUgYXNzaWduLgorICAgIGlmICh0aGlzICE9ICZfX28pIHsKKyAgICAg
IF9faW1wXyA9IF9WU1REOjptb3ZlKF9fby5fX2ltcF8pOworICAgICAgX19yZWNfID0gX19vLl9f
cmVjXzsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgfnJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9f
ZGVyZWZlcmVuY2UoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3Qg
ZGlyZWN0b3J5X2VudHJ5KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJl9fZGVyZWZlcmVu
Y2UoKTsgfQorCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7
IHJldHVybiBfX2luY3JlbWVudCgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKysoaW50KSB7CisgICAgX19kaXJfZWxlbWVu
dF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3JlbWVudCgpOworICAgIHJldHVybiBfX3A7
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImIGluY3JlbWVudChlcnJvcl9jb2RlJiBfX2VjKSB7CisgICAgcmV0dXJuIF9f
aW5jcmVtZW50KCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfRlVOQ19WSVMgZGlyZWN0b3J5X29w
dGlvbnMgb3B0aW9ucygpIGNvbnN0OworICBfTElCQ1BQX0ZVTkNfVklTIGludCBkZXB0aCgpIGNv
bnN0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBwb3AoKSB7IF9fcG9w
KCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcG9wKGVycm9yX2Nv
ZGUmIF9fZWMpIHsgX19wb3AoJl9fZWMpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIHJlY3Vyc2lvbl9wZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gX19yZWNfOyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIGRpc2FibGVfcmVjdXJzaW9uX3Bl
bmRpbmcoKSB7IF9fcmVjXyA9IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgIF9MSUJDUFBfRlVOQ19W
SVMKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVj
dG9yeV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2Vu
dHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBib29s
IF9fdHJ5X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBfX2VjKTsKKworICBfTElCQ1BQX0ZVTkNfVklT
CisgIHZvaWQgX19hZHZhbmNlKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElC
Q1BQX0ZVTkNfVklTCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9faW5jcmVtZW50
KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHZv
aWQgX19wb3AoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIGlubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvciYsCisgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgIHN0cnVjdCBfTElCQ1BQX0hJRERFTiBf
X3NoYXJlZF9pbXA7CisgIHNoYXJlZF9wdHI8X19zaGFyZWRfaW1wPiBfX2ltcF87CisgIGJvb2wg
X19yZWNfOworfTsgLy8gY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09KGNvbnN0IHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMu
X19pbXBfID09IF9fcmhzLl9faW1wXzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
JiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMp
OworfQorLy8gZW5hYmxlIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQg
Zm9yIHN0YXRlbWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2JlZ2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Ig
X19pdGVyKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25z
dCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICByZXR1cm4gcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpOworfQorCitfTElCQ1BQX0FWQUlMQUJJTElUWV9G
SUxFU1lTVEVNX1BPUAorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisjZW5k
aWYgLy8gIV9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQX1BPUF9NQUNST1MKKworI2VuZGlm
IC8vIF9MSUJDUFBfRklMRVNZU1RFTQorI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="426443"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410492</attachid>
            <date>2020-10-04 17:49:31 -0700</date>
            <delta_ts>2020-10-04 17:56:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217302-20201004174930.patch</filename>
            <type>text/plain</type>
            <size>168587</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5NTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTA0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gb2YgPGZpbGVzeXN0ZW0+
IHRvIFdURiBmb3IgbWFjT1MgMTAuMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBhbmQgaXRzIG5l
ZWRlZCBpbXBsZW1lbnRhdGlvbiBmaWxlcworICAgICAgICBmcm9tIGxpYmMrKyAoNjI4YTMxOTQ3
NSkgYW5kIG1vZGlmaWVzIHRoZW0gdG8gYnVpbGQgb3V0c2lkZSBvZgorICAgICAgICBsaWJjKysu
IFRoaXMgaXMgb25seSBuZWVkZWQgYW5kIG9ubHkgYnVpbHQgZm9yIHZlcnNpb25zIG9mIG1hY09T
IDwgMTAuMTUKKyAgICAgICAgYW5kIGNhbiBiZSBkcm9wcGVkIHdoZW4gd2UgcmVxdWlyZSAxMC4x
NS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvU3RkRmlsZXN5c3RlbS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHd0Zi9TdGRGaWxlc3lzdGVtLmg6IEFkZGVkLgorCiAyMDIwLTEwLTAz
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSW50
cm9kdWNlIEpJVE9wZXJhdGlvbkxpc3QgdG8gdmFsaWRhdGUgSklULWNhZ2VkIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
Nzk0OCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKIAkJN0E2RUJBMzQyMDc0NkMzNDAwNEY5QzQ0IC8q
IE1hY2hTZW5kUmlnaHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0E2RUJBMzMyMDc0NkMzNDAwNEY5QzQ0IC8qIE1hY2hTZW5kUmlnaHQuY3BwICov
OyB9OwogCQk3QUYwMjNCNTIwNjFFMTcwMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYwMjNCNDIw
NjFFMTZGMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAgKi87IH07CiAJCTdBRkVDNkIx
MUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAq
LzsgfTsKKwkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1OTVGRkQyNTJB
OTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4MTM0MDEzODE1QjA5
MkZEMDAxRkYwQjggLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxMzQwMTM2MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQuY3BwICov
OyB9OwogCQk4MzQ4QkEwRTIxRkJDMEQ1MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4QkEwRDIx
RkJDMEQ0MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgKi87IH07CiAJCTkzOTM0QkQz
MThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2QTEgLyog
U3RyaW5nVmlld0NvY29hLm1tICovOyB9OwpAQCAtNDYyLDYgKzQ2Myw4IEBACiAJCTdDNDIzMDcy
MjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzQyMzA3MzIzQ0UyRDhCMDA2RTU0RDAgLyogUGxhdGZvcm1PUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNDIzMDc0MjNDRUIxODcwMDZFNTREMCAvKiBQbGF0Zm9ybUxlZ2FjeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUxlZ2FjeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QzU5NUZGQzI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3Rl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRGaWxlc3lzdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNTk1RkZEMjUyQTk2RTAwMEU0MjE2OCAvKiBT
dGRGaWxlc3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
ZEZpbGVzeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzk2OTI5NDFG
NjYzMDZFMDAyNjdBOUUgLyogS2V5VmFsdWVQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtleVZhbHVlUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Qzk4Q0RDNzIzRTdBOUI4MDAxMkYyMzIgLyogUGxhdGZvcm1FbmFibGVDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUVuYWJsZUNvY29hLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOThDREM4MjNFN0FGQzgwMDEyRjIzMiAvKiBQbGF0Zm9y
bUVuYWJsZVdpbkFwcGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRm
b3JtRW5hYmxlV2luQXBwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDUs
NiArMTI0OCw4IEBACiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMu
aCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8s
CiAJCQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQk3
QzU5NUZGRDI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5jcHAgKi8sCisJCQkJN0M1
OTVGRkMyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLywKIAkJCQlGRTk3RjZB
ODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8sCiAJCQkJQThBNDczMTExNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCUZGMEE0MzY1ODg5NTRGM0NC
MDdEQkVDQSAvKiBTdGRMaXN0LmggKi8sCkBAIC0xNzQ1LDYgKzE3NTAsNyBAQAogCQkJCUZFRUE0
REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1BvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzMzN0RCOUNFNzQzNDEwRkFGMDc2RTE3IC8qIFN0YWNrVHJhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5NUI2MzcyMENCNUVGRDAwNDc5NjM1IC8qIFN0cmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhENkUyNzFGNTUyMkUz
MDBBNzVDQzQgLyogU3RyaW5nQnVpbGRlckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY3OTQ4KQorKysgU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgU3RhY2tTaG90UHJvZmlsZXIuaAogICAgIFN0YWNrU3RhdHMuaAog
ICAgIFN0YWNrVHJhY2UuaAorICAgIFN0ZEZpbGVzeXN0ZW0uaAogICAgIFN0ZEludEV4dHJhcy5o
CiAgICAgU3RkTGliRXh0cmFzLmgKICAgICBTdGRMaXN0LmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0ZEZpbGVzeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVz
eXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYwNCBAQAorLy89PT0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFN0ZEZpbGVzeXN0ZW0uY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJh
c3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2Vz
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKworLyogSW1wb3J0cyBhIGNvcHkgb2YgZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5o
LCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAsCisgICBmaWxlc3lzdGVtL2ludDEy
OF9idWlsdGlucy5jcHAgYW5kIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgZnJvbSByMzQzODM4
IG9mIHRoZQorICAgbGliYysrIHByb2plY3QgYW5kIGhhcyBtb2RpZmllZCB0aGVtIHRvIHdvcmsg
b3V0c2lkZSBvZiBhIGJ1aWxkIG9mIGxpYmMrKyBpdHNlbGYuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisK
KyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPCAxMDE1MDAKKworI2luY2x1ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKworI2luY2x1
ZGUgPF9fY29uZmlnPgorCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9u
LmggLS0gKi8KKworI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPGNsaW1pdHM+CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4gLy8gZm9yIDo6dXRpbWVzIGFzIHVzZWQgaW4gX19sYXN0X3dyaXRlX3RpbWUK
KyNpbmNsdWRlIDxmY250bC5oPiAgICAvKiB2YWx1ZXMgZm9yIGZjaG1vZGF0ICovCisKKy8qICNp
bmNsdWRlICIuLi9pbmNsdWRlL2FwcGxlX2F2YWlsYWJpbGl0eS5oIiAqLworCisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKQorLy8gV2UgY2FuIHVzZSB0aGUgcHJlc2VuY2Ugb2YgVVRJTUVfT01JVCB0
byBkZXRlY3QgcGxhdGZvcm1zIHRoYXQgcHJvdmlkZQorLy8gdXRpbWVuc2F0LgorI2lmIGRlZmlu
ZWQoVVRJTUVfT01JVCkKKyNkZWZpbmUgX0xJQkNQUF9VU0VfVVRJTUVOU0FUCisjZW5kaWYKKyNl
bmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz
aAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNl
bmRpZgorCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFjZSBk
ZXRhaWwgeworbmFtZXNwYWNlIHsKKworc3RhdGljIHN0cmluZyBmb3JtYXRfc3RyaW5nX2ltcChj
b25zdCBjaGFyKiBtc2csIC4uLikgeworICAvLyB3ZSBtaWdodCBuZWVkIGEgc2Vjb25kIHNob3Qg
YXQgdGhpcywgc28gcHJlLWVtcHRpdmx5IG1ha2UgYSBjb3B5CisgIHN0cnVjdCBHdWFyZFZBTGlz
dCB7CisgICAgdmFfbGlzdCYgdGFyZ2V0OworICAgIGJvb2wgYWN0aXZlID0gdHJ1ZTsKKyAgICBH
dWFyZFZBTGlzdCh2YV9saXN0JiB0YXJnZXQpIDogdGFyZ2V0KHRhcmdldCksIGFjdGl2ZSh0cnVl
KSB7fQorICAgIHZvaWQgY2xlYXIoKSB7CisgICAgICBpZiAoYWN0aXZlKQorICAgICAgICB2YV9l
bmQodGFyZ2V0KTsKKyAgICAgIGFjdGl2ZSA9IGZhbHNlOworICAgIH0KKyAgICB+R3VhcmRWQUxp
c3QoKSB7CisgICAgICBpZiAoYWN0aXZlKQorICAgICAgICB2YV9lbmQodGFyZ2V0KTsKKyAgICB9
CisgIH07CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgbXNnKTsKKyAgR3VhcmRW
QUxpc3QgYXJnc19ndWFyZChhcmdzKTsKKworICB2YV9saXN0IGFyZ3NfY3A7CisgIHZhX2NvcHko
YXJnc19jcCwgYXJncyk7CisgIEd1YXJkVkFMaXN0IGFyZ3NfY29weV9ndWFyZChhcmdzX2NwKTsK
KworICBhcnJheTxjaGFyLCAyNTY+IGxvY2FsX2J1ZmY7CisgIHNpemVfdCBzaXplID0gbG9jYWxf
YnVmZi5zaXplKCk7CisKKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0
ZXJhbCIKKyNlbmRpZgorICBhdXRvIHJldCA9IDo6dnNucHJpbnRmKGxvY2FsX2J1ZmYuZGF0YSgp
LCBzaXplLCBtc2csIGFyZ3NfY3ApOworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyAgYXJnc19jb3B5X2d1YXJkLmNsZWFyKCk7CisKKyAg
Ly8gaGFuZGxlIGVtcHR5IGV4cGFuc2lvbgorICBpZiAocmV0ID09IDApCisgICAgcmV0dXJuIHN0
cmluZ3t9OworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpIDwgc2l6ZSkKKyAgICByZXR1
cm4gc3RyaW5nKGxvY2FsX2J1ZmYuZGF0YSgpKTsKKworICAvLyB3ZSBkaWQgbm90IHByb3ZpZGUg
YSBsb25nIGVub3VnaCBidWZmZXIgb24gb3VyIGZpcnN0IGF0dGVtcHQuCisgIC8vIGFkZCAxIHRv
IHNpemUgdG8gYWNjb3VudCBmb3IgbnVsbC1ieXRlIGluIHNpemUgY2FzdCB0byBwcmV2ZW50IG92
ZXJmbG93CisgIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJldCkgKyAxOworICBhdXRvIGJ1
ZmZfcHRyID0gdW5pcXVlX3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemVdKTsKKworI2lmZGVmIF9f
Y2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgorI2VuZGlmCisgIHJldCA9IDo6
dnNucHJpbnRmKGJ1ZmZfcHRyLmdldCgpLCBzaXplLCBtc2csIGFyZ3MpOworI2lmZGVmIF9fY2xh
bmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyAgcmV0dXJuIHN0
cmluZyhidWZmX3B0ci5nZXQoKSk7Cit9CisKK2NvbnN0IGNoYXIqIHVud3JhcChzdHJpbmcgY29u
c3QmIHMpIHsgcmV0dXJuIHMuY19zdHIoKTsgfQorY29uc3QgY2hhciogdW53cmFwKHBhdGggY29u
c3QmIHApIHsgcmV0dXJuIHAubmF0aXZlKCkuY19zdHIoKTsgfQordGVtcGxhdGUgPGNsYXNzIEFy
Zz4KK0FyZyBjb25zdCYgdW53cmFwKEFyZyBjb25zdCYgYSkgeworICBzdGF0aWNfYXNzZXJ0KCFp
c19jbGFzczxBcmc+Ojp2YWx1ZSwgImNhbm5vdCBwYXNzIGNsYXNzIGhlcmUiKTsKKyAgcmV0dXJu
IGE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgorc3RyaW5nIGZvcm1hdF9zdHJpbmco
Y29uc3QgY2hhciogZm10LCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSB7CisgIHJldHVybiBmb3JtYXRf
c3RyaW5nX2ltcChmbXQsIHVud3JhcChhcmdzKS4uLik7Cit9CisKK2Vycm9yX2NvZGUgY2FwdHVy
ZV9lcnJubygpIHsKKyAgX0xJQkNQUF9BU1NFUlQoZXJybm8sICJFeHBlY3RlZCBlcnJubyB0byBi
ZSBub24temVybyIpOworICByZXR1cm4gZXJyb3JfY29kZShlcnJubywgZ2VuZXJpY19jYXRlZ29y
eSgpKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitUIGVycm9yX3ZhbHVlKCk7Cit0ZW1wbGF0
ZSA8PgorX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgdm9pZCBlcnJvcl92YWx1ZTx2b2lk
PigpIHt9Cit0ZW1wbGF0ZSA8PgorYm9vbCBlcnJvcl92YWx1ZTxib29sPigpIHsKKyAgcmV0dXJu
IGZhbHNlOworfQordGVtcGxhdGUgPD4KK3VpbnRtYXhfdCBlcnJvcl92YWx1ZTx1aW50bWF4X3Q+
KCkgeworICByZXR1cm4gdWludG1heF90KC0xKTsKK30KK3RlbXBsYXRlIDw+CitfTElCQ1BQX0NP
TlNURVhQUl9BRlRFUl9DWFgxMSBmaWxlX3RpbWVfdHlwZSBlcnJvcl92YWx1ZTxmaWxlX3RpbWVf
dHlwZT4oKSB7CisgIHJldHVybiBmaWxlX3RpbWVfdHlwZTo6bWluKCk7Cit9Cit0ZW1wbGF0ZSA8
PgorcGF0aCBlcnJvcl92YWx1ZTxwYXRoPigpIHsKKyAgcmV0dXJuIHt9OworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgVD4KK3N0cnVjdCBFcnJvckhhbmRsZXIgeworICBjb25zdCBjaGFyKiBmdW5jX25h
bWU7CisgIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cjsKKyAgY29uc3QgcGF0aCogcDEgPSBudWxs
cHRyOworICBjb25zdCBwYXRoKiBwMiA9IG51bGxwdHI7CisKKyAgRXJyb3JIYW5kbGVyKGNvbnN0
IGNoYXIqIGZuYW1lLCBlcnJvcl9jb2RlKiBlYywgY29uc3QgcGF0aCogcDEgPSBudWxscHRyLAor
ICAgICAgICAgICAgICAgY29uc3QgcGF0aCogcDIgPSBudWxscHRyKQorICAgICAgOiBmdW5jX25h
bWUoZm5hbWUpLCBlYyhlYyksIHAxKHAxKSwgcDIocDIpIHsKKyAgICBpZiAoZWMpCisgICAgICBl
Yy0+Y2xlYXIoKTsKKyAgfQorCisgIFQgcmVwb3J0KGNvbnN0IGVycm9yX2NvZGUmIG1fZWMpIGNv
bnN0IHsKKyAgICBpZiAoZWMpIHsKKyAgICAgICplYyA9IG1fZWM7CisgICAgICByZXR1cm4gZXJy
b3JfdmFsdWU8VD4oKTsKKyAgICB9CisgICAgc3RyaW5nIHdoYXQgPSBzdHJpbmcoImluICIpICsg
ZnVuY19uYW1lOworICAgIHN3aXRjaCAoYm9vbChwMSkgKyBib29sKHAyKSkgeworICAgIGNhc2Ug
MDoKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCBtX2VjKTsKKyAgICBjYXNl
IDE6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCBtX2VjKTsKKyAg
ICBjYXNlIDI6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCAqcDIs
IG1fZWMpOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgVCByZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYywg
Y29uc3QgY2hhciogbXNnLCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSBjb25zdCB7CisgICAgaWYgKGVj
KSB7CisgICAgICAqZWMgPSBtX2VjOworICAgICAgcmV0dXJuIGVycm9yX3ZhbHVlPFQ+KCk7Cisg
ICAgfQorICAgIHN0cmluZyB3aGF0ID0KKyAgICAgICAgc3RyaW5nKCJpbiAiKSArIGZ1bmNfbmFt
ZSArICI6ICIgKyBmb3JtYXRfc3RyaW5nKG1zZywgYXJncy4uLik7CisgICAgc3dpdGNoIChib29s
KHAxKSArIGJvb2wocDIpKSB7CisgICAgY2FzZSAwOgorICAgICAgX190aHJvd19maWxlc3lzdGVt
X2Vycm9yKHdoYXQsIG1fZWMpOworICAgIGNhc2UgMToKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3Rl
bV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOworICAgIGNhc2UgMjoKKyAgICAgIF9fdGhyb3dfZmls
ZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9lYyk7CisgICAgfQorICAgIF9MSUJDUFBf
VU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIFQgcmVwb3J0KGVycmMgY29uc3QmIGVycikgY29uc3Qg
eyByZXR1cm4gcmVwb3J0KG1ha2VfZXJyb3JfY29kZShlcnIpKTsgfQorCisgIHRlbXBsYXRlIDxj
bGFzcy4uLiBBcmdzPgorICBUIHJlcG9ydChlcnJjIGNvbnN0JiBlcnIsIGNvbnN0IGNoYXIqIG1z
ZywgQXJncyBjb25zdCYuLi4gYXJncykgY29uc3QgeworICAgIHJldHVybiByZXBvcnQobWFrZV9l
cnJvcl9jb2RlKGVyciksIG1zZywgYXJncy4uLik7CisgIH0KKworcHJpdmF0ZToKKyAgRXJyb3JI
YW5kbGVyKEVycm9ySGFuZGxlciBjb25zdCYpID0gZGVsZXRlOworICBFcnJvckhhbmRsZXImIG9w
ZXJhdG9yPShFcnJvckhhbmRsZXIgY29uc3QmKSA9IGRlbGV0ZTsKK307CisKK3VzaW5nIGNocm9u
bzo6ZHVyYXRpb247Cit1c2luZyBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q7CisKK3VzaW5nIFRpbWVT
cGVjID0gc3RydWN0IDo6dGltZXNwZWM7Cit1c2luZyBTdGF0VCA9IHN0cnVjdCA6OnN0YXQ7CisK
K3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVULAorICAgICAgICAgIGJvb2wg
SXNGbG9hdCA9IGlzX2Zsb2F0aW5nX3BvaW50PHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwPjo6dmFs
dWU+CitzdHJ1Y3QgdGltZV91dGlsX2Jhc2UgeworICB1c2luZyByZXAgPSB0eXBlbmFtZSBGaWxl
VGltZVQ6OnJlcDsKKyAgdXNpbmcgZnNfZHVyYXRpb24gPSB0eXBlbmFtZSBGaWxlVGltZVQ6OmR1
cmF0aW9uOworICB1c2luZyBmc19zZWNvbmRzID0gZHVyYXRpb248cmVwPjsKKyAgdXNpbmcgZnNf
bmFub3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG5hbm8+OworICB1c2luZyBmc19taWNyb3NlY29u
ZHMgPSBkdXJhdGlvbjxyZXAsIG1pY3JvPjsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtYXhf
c2Vjb25kcyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVy
YXRpb246Om1heCgpKS5jb3VudCgpOworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9uc2Vj
ID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRp
b246Om1heCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29u
ZHMobWF4X3NlY29uZHMpKQorICAgICAgICAgIC5jb3VudCgpOworCisgIHN0YXRpYyBjb25zdGV4
cHIgcmVwIG1pbl9zZWNvbmRzID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmls
ZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkpLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciBy
ZXAgbWluX25zZWNfdGltZXNwZWMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25k
cz4oCisgICAgICAgICAgKEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0gZnNfc2Vjb25kcyht
aW5fc2Vjb25kcykpICsKKyAgICAgICAgICBmc19zZWNvbmRzKDEpKQorICAgICAgICAgIC5jb3Vu
dCgpOworCitwcml2YXRlOgorI2lmIF9MSUJDUFBfU1REX1ZFUiA+IDExICYmICFkZWZpbmVkKF9M
SUJDUFBfSEFTX05PX0NYWDE0X0NPTlNURVhQUikKKyAgc3RhdGljIGNvbnN0ZXhwciBmc19kdXJh
dGlvbiBnZXRfbWluX25zZWNzKCkgeworICAgIHJldHVybiBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0
aW9uPigKKyAgICAgICAgZnNfbmFub3NlY29uZHMobWluX25zZWNfdGltZXNwZWMpIC0KKyAgICAg
ICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oZnNfc2Vjb25kcygxKSkpOworICB9Cisg
IC8vIFN0YXRpYyBhc3NlcnQgdGhhdCB0aGVzZSB2YWx1ZXMgcHJvcGVybHkgcm91bmQgdHJpcC4K
KyAgc3RhdGljX2Fzc2VydChmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSArIGdldF9taW5fbnNlY3Mo
KSA9PQorICAgICAgICAgICAgICAgICAgICBGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSwKKyAg
ICAgICAgICAgICAgICAidmFsdWUgZG9lc24ndCByb3VuZHRyaXAiKTsKKworICBzdGF0aWMgY29u
c3RleHByIGJvb2wgY2hlY2tfcmFuZ2UoKSB7CisgICAgLy8gVGhpcyBraW5kYSBzdWNrcywgYnV0
IGl0J3Mgd2hhdCBoYXBwZW5zIHdoZW4gd2UgZG9uJ3QgaGF2ZSBfX2ludDEyOF90LgorICAgIGlm
IChzaXplb2YoVGltZVQpID09IHNpemVvZihyZXApKSB7CisgICAgICB0eXBlZGVmIGR1cmF0aW9u
PGxvbmcgbG9uZywgcmF0aW88MzYwMCAqIDI0ICogMzY1PiA+IFllYXJzOworICAgICAgcmV0dXJu
IGR1cmF0aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWF4X3NlY29uZHMpKSA+IFllYXJzKDI1
MCkgJiYKKyAgICAgICAgICAgICBkdXJhdGlvbl9jYXN0PFllYXJzPihmc19zZWNvbmRzKG1pbl9z
ZWNvbmRzKSkgPCBZZWFycygtMjUwKTsKKyAgICB9CisgICAgcmV0dXJuIG1heF9zZWNvbmRzID49
IG51bWVyaWNfbGltaXRzPFRpbWVUPjo6bWF4KCkgJiYKKyAgICAgICAgICAgbWluX3NlY29uZHMg
PD0gbnVtZXJpY19saW1pdHM8VGltZVQ+OjptaW4oKTsKKyAgfQorICBzdGF0aWNfYXNzZXJ0KGNo
ZWNrX3JhbmdlKCksICJ0aGUgcmVwcmVzZW50YWJsZSByYW5nZSBpcyB1bmFjY2VwdGFibGUgc21h
bGwiKTsKKyNlbmRpZgorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGlt
ZVQ+CitzdHJ1Y3QgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT4geworICB1
c2luZyByZXAgPSB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcDsKKyAgdXNpbmcgZnNfZHVyYXRpb24g
PSB0eXBlbmFtZSBGaWxlVGltZVQ6OmR1cmF0aW9uOworICB1c2luZyBmc19zZWNvbmRzID0gZHVy
YXRpb248cmVwPjsKKyAgdXNpbmcgZnNfbmFub3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG5hbm8+
OworICB1c2luZyBmc19taWNyb3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG1pY3JvPjsKKworICBz
dGF0aWMgY29uc3QgcmVwIG1heF9zZWNvbmRzOworICBzdGF0aWMgY29uc3QgcmVwIG1heF9uc2Vj
OworICBzdGF0aWMgY29uc3QgcmVwIG1pbl9zZWNvbmRzOworICBzdGF0aWMgY29uc3QgcmVwIG1p
bl9uc2VjX3RpbWVzcGVjOworfTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3Mg
VGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcAorICAgIHRpbWVfdXRpbF9iYXNl
PEZpbGVUaW1lVCwgVGltZVQsIHRydWU+OjptYXhfc2Vjb25kcyA9CisgICAgICAgIGR1cmF0aW9u
X2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkpLmNvdW50KCk7CisK
K3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUg
RmlsZVRpbWVUOjpyZXAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1h
eF9uc2VjID0KKyAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihGaWxlVGltZVQ6OmR1
cmF0aW9uOjptYXgoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vj
b25kcyhtYXhfc2Vjb25kcykpCisgICAgICAgIC5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3Mg
RmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisg
ICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1pbl9zZWNvbmRzID0K
KyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjpt
aW4oKSkuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+
Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcAorICAgIHRpbWVfdXRpbF9iYXNlPEZpbGVU
aW1lVCwgVGltZVQsIHRydWU+OjptaW5fbnNlY190aW1lc3BlYyA9CisgICAgICAgIGR1cmF0aW9u
X2Nhc3Q8ZnNfbmFub3NlY29uZHM+KChGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSAtCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1pbl9zZWNvbmRz
KSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKDEp
KQorICAgICAgICAgICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNs
YXNzIFRpbWVULCBjbGFzcyBUaW1lU3BlY1Q+CitzdHJ1Y3QgdGltZV91dGlsIDogdGltZV91dGls
X2Jhc2U8RmlsZVRpbWVULCBUaW1lVD4geworICB1c2luZyBCYXNlID0gdGltZV91dGlsX2Jhc2U8
RmlsZVRpbWVULCBUaW1lVD47CisgIHVzaW5nIEJhc2U6Om1heF9uc2VjOworICB1c2luZyBCYXNl
OjptYXhfc2Vjb25kczsKKyAgdXNpbmcgQmFzZTo6bWluX25zZWNfdGltZXNwZWM7CisgIHVzaW5n
IEJhc2U6Om1pbl9zZWNvbmRzOworCisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX2R1cmF0aW9u
OworICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19taWNyb3NlY29uZHM7CisgIHVzaW5nIHR5cGVu
YW1lIEJhc2U6OmZzX25hbm9zZWNvbmRzOworICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19zZWNv
bmRzOworCitwdWJsaWM6CisgIHRlbXBsYXRlIDxjbGFzcyBDVHlwZSwgY2xhc3MgQ2hyb25vVHlw
ZT4KKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgY2hlY2tlZF9z
ZXQoQ1R5cGUqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ2hyb25vVHlwZSB0aW1lKSB7CisgICAgdXNpbmcgTGltID0gbnVtZXJp
Y19saW1pdHM8Q1R5cGU+OworICAgIGlmICh0aW1lID4gTGltOjptYXgoKSB8fCB0aW1lIDwgTGlt
OjptaW4oKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqb3V0ID0gc3RhdGljX2Nhc3Q8Q1R5
cGU+KHRpbWUpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09O
U1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgaXNfcmVwcmVzZW50YWJsZShUaW1lU3BlY1QgdG0pIHsK
KyAgICBpZiAodG0udHZfc2VjID49IDApIHsKKyAgICAgIHJldHVybiB0bS50dl9zZWMgPCBtYXhf
c2Vjb25kcyB8fAorICAgICAgICAgICAgICh0bS50dl9zZWMgPT0gbWF4X3NlY29uZHMgJiYgdG0u
dHZfbnNlYyA8PSBtYXhfbnNlYyk7CisgICAgfSBlbHNlIGlmICh0bS50dl9zZWMgPT0gKG1pbl9z
ZWNvbmRzIC0gMSkpIHsKKyAgICAgIHJldHVybiB0bS50dl9uc2VjID49IG1pbl9uc2VjX3RpbWVz
cGVjOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdG0udHZfc2VjID49IG1pbl9zZWNvbmRz
OworICAgIH0KKyAgfQorCisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBi
b29sIGlzX3JlcHJlc2VudGFibGUoRmlsZVRpbWVUIHRtKSB7CisgICAgYXV0byBzZWNzID0gZHVy
YXRpb25fY2FzdDxmc19zZWNvbmRzPih0bS50aW1lX3NpbmNlX2Vwb2NoKCkpOworICAgIGF1dG8g
bnNlY3MgPSBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPih0bS50aW1lX3NpbmNlX2Vwb2No
KCkgLSBzZWNzKTsKKyAgICBpZiAobnNlY3MuY291bnQoKSA8IDApIHsKKyAgICAgIHNlY3MgPSBz
ZWNzICsgZnNfc2Vjb25kcygxKTsKKyAgICAgIG5zZWNzID0gbnNlY3MgKyBmc19zZWNvbmRzKDEp
OworICAgIH0KKyAgICB1c2luZyBUTGltID0gbnVtZXJpY19saW1pdHM8VGltZVQ+OworICAgIGlm
IChzZWNzLmNvdW50KCkgPj0gMCkKKyAgICAgIHJldHVybiBzZWNzLmNvdW50KCkgPD0gVExpbTo6
bWF4KCk7CisgICAgcmV0dXJuIHNlY3MuY291bnQoKSA+PSBUTGltOjptaW4oKTsKKyAgfQorCisg
IHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBGaWxlVGltZVQKKyAgY29udmVy
dF9mcm9tX3RpbWVzcGVjKFRpbWVTcGVjVCB0bSkgeworICAgIGlmICh0bS50dl9zZWMgPj0gMCB8
fCB0bS50dl9uc2VjID09IDApIHsKKyAgICAgIHJldHVybiBGaWxlVGltZVQoZnNfc2Vjb25kcyh0
bS50dl9zZWMpICsKKyAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fY2FzdDxmc19kdXJh
dGlvbj4oZnNfbmFub3NlY29uZHModG0udHZfbnNlYykpKTsKKyAgICB9IGVsc2UgeyAvLyB0bS50
dl9zZWMgPCAwCisgICAgICBhdXRvIGFkal9zdWJzZWMgPSBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0
aW9uPihmc19zZWNvbmRzKDEpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZzX25hbm9zZWNvbmRzKHRtLnR2X25zZWMpKTsKKyAgICAgIGF1dG8g
RHVyID0gZnNfc2Vjb25kcyh0bS50dl9zZWMgKyAxKSAtIGFkal9zdWJzZWM7CisgICAgICByZXR1
cm4gRmlsZVRpbWVUKER1cik7CisgICAgfQorICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIFN1YlNl
Y1Q+CisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sCisgIHNldF90
aW1lc19jaGVja2VkKFRpbWVUKiBzZWNfb3V0LCBTdWJTZWNUKiBzdWJzZWNfb3V0LCBGaWxlVGlt
ZVQgdHApIHsKKyAgICBhdXRvIGR1ciA9IHRwLnRpbWVfc2luY2VfZXBvY2goKTsKKyAgICBhdXRv
IHNlY19kdXIgPSBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KGR1cik7CisgICAgYXV0byBzdWJz
ZWNfZHVyID0gZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oZHVyIC0gc2VjX2R1cik7Cisg
ICAgLy8gVGhlIHR2X25zZWMgYW5kIHR2X3VzZWMgZmllbGRzIG11c3Qgbm90IGJlIG5lZ2F0aXZl
IHNvIGFkanVzdCBhY2NvcmRpbmdseQorICAgIGlmIChzdWJzZWNfZHVyLmNvdW50KCkgPCAwKSB7
CisgICAgICBpZiAoc2VjX2R1ci5jb3VudCgpID4gbWluX3NlY29uZHMpIHsKKyAgICAgICAgc2Vj
X2R1ciA9IHNlY19kdXIgLSBmc19zZWNvbmRzKDEpOworICAgICAgICBzdWJzZWNfZHVyID0gc3Vi
c2VjX2R1ciArIGZzX3NlY29uZHMoMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdWJzZWNf
ZHVyID0gZnNfbmFub3NlY29uZHM6Onplcm8oKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGNoZWNrZWRfc2V0KHNlY19vdXQsIHNlY19kdXIuY291bnQoKSkgJiYKKyAgICAgICAgICAgY2hl
Y2tlZF9zZXQoc3Vic2VjX291dCwgc3Vic2VjX2R1ci5jb3VudCgpKTsKKyAgfQorICBzdGF0aWMg
X0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjb252ZXJ0X3RvX3RpbWVzcGVjKFRp
bWVTcGVjVCYgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGaWxlVGltZVQgdHApIHsKKyAgICBpZiAoIWlzX3JlcHJl
c2VudGFibGUodHApKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzZXRfdGltZXNf
Y2hlY2tlZCgmZGVzdC50dl9zZWMsICZkZXN0LnR2X25zZWMsIHRwKTsKKyAgfQorfTsKKwordXNp
bmcgZnNfdGltZSA9IHRpbWVfdXRpbDxmaWxlX3RpbWVfdHlwZSwgdGltZV90LCBUaW1lU3BlYz47
CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKK1RpbWVTcGVjIGV4dHJhY3RfbXRpbWUoU3RhdFQg
Y29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGltZXNwZWM7IH0KK1RpbWVTcGVjIGV4dHJhY3Rf
YXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9hdGltZXNwZWM7IH0KKyNlbHNl
CitUaW1lU3BlYyBleHRyYWN0X210aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3Rf
bXRpbTsgfQorVGltZVNwZWMgZXh0cmFjdF9hdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJu
IHN0LnN0X2F0aW07IH0KKyNlbmRpZgorCisvLyBhbGxvdyB0aGUgdXRpbWVzIGltcGxlbWVudGF0
aW9uIHRvIGNvbXBpbGUgZXZlbiBpdCB3ZSdyZSBub3QgZ29pbmcKKy8vIHRvIHVzZSBpdC4KKwor
Ym9vbCBwb3NpeF91dGltZXMoY29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywgMj4g
Y29uc3QmIFRTLAorICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgdXNpbmcg
bmFtZXNwYWNlIGNocm9ubzsKKyAgYXV0byBDb252ZXJ0ID0gW10obG9uZyBuc2VjKSB7CisgICAg
dXNpbmcgaW50X3R5cGUgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8IDo6dGltZXZhbD4oKS50dl91
c2VjKTsKKyAgICBhdXRvIGR1ciA9IGR1cmF0aW9uX2Nhc3Q8bWljcm9zZWNvbmRzPihuYW5vc2Vj
b25kcyhuc2VjKSkuY291bnQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KGR1
cik7CisgIH07CisgIHN0cnVjdCA6OnRpbWV2YWwgQ29udmVydGVkVFNbMl0gPSB7e1RTWzBdLnR2
X3NlYywgQ29udmVydChUU1swXS50dl9uc2VjKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge1RTWzFdLnR2X3NlYywgQ29udmVydChUU1sxXS50dl9uc2VjKX19OworICBp
ZiAoOjp1dGltZXMocC5jX3N0cigpLCBDb252ZXJ0ZWRUUykgPT0gLTEpIHsKKyAgICBlYyA9IGNh
cHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9
CisKKyNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKK2Jvb2wgcG9zaXhfdXRpbWVu
c2F0KGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNwZWMsIDI+IGNvbnN0JiBUUywKKyAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIGlmICg6OnV0aW1lbnNhdChB
VF9GRENXRCwgcC5jX3N0cigpLCBUUy5kYXRhKCksIDApID09IC0xKSB7CisgICAgZWMgPSBjYXB0
dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmCisKK2Jvb2wgc2V0X2ZpbGVfdGltZXMoY29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxU
aW1lU3BlYywgMj4gY29uc3QmIFRTLAorICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBl
YykgeworI2lmICFkZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKKyAgcmV0dXJuIHBvc2l4
X3V0aW1lcyhwLCBUUywgZWMpOworI2Vsc2UKKyAgcmV0dXJuIHBvc2l4X3V0aW1lbnNhdChwLCBU
UywgZWMpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlCit9IC8vIGVuZCBuYW1lc3BhY2Ug
ZGV0YWlsCisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVORCBm
aWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmggLS0gKi8KKworLyogLS0gQkVHSU4gZmlsZXN5
c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwIC0tICovCisKKyNpZiBkZWZpbmVkKF9MSUJDUFBf
V0lOMzJBUEkpCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDxXaW5kb3dz
Lmg+CisjZWxzZQorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8u
aD4KKworLyogI2luY2x1ZGUgImZpbGVzeXN0ZW1fY29tbW9uLmgiICovCisKK19MSUJDUFBfQkVH
SU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3BhY2Ug
eworCisjaWYgIWRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKK3RlbXBsYXRlIDxjbGFzcyBEaXJF
bnRULCBjbGFzcyA9IGRlY2x0eXBlKERpckVudFQ6OmRfdHlwZSk+CitzdGF0aWMgZmlsZV90eXBl
IGdldF9maWxlX3R5cGUoRGlyRW50VCogZW50LCBpbnQpIHsKKyAgc3dpdGNoIChlbnQtPmRfdHlw
ZSkgeworICBjYXNlIERUX0JMSzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpibG9jazsKKyAgY2Fz
ZSBEVF9DSFI6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6Y2hhcmFjdGVyOworICBjYXNlIERUX0RJ
UjoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpkaXJlY3Rvcnk7CisgIGNhc2UgRFRfRklGTzoKKyAg
ICByZXR1cm4gZmlsZV90eXBlOjpmaWZvOworICBjYXNlIERUX0xOSzoKKyAgICByZXR1cm4gZmls
ZV90eXBlOjpzeW1saW5rOworICBjYXNlIERUX1JFRzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpy
ZWd1bGFyOworICBjYXNlIERUX1NPQ0s6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6c29ja2V0Owor
ICAvLyBVbmxpa2UgaW4gbHN0YXQsIGhpdHRpbmcgInVua25vd24iIGhlcmUgc2ltcGx5IG1lYW5z
IHRoYXQgdGhlIHVuZGVybHlpbmcKKyAgLy8gZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgZF90
eXBlLiBSZXBvcnQgaXMgYXMgJ25vbmUnIHNvIHdlIGNvcnJlY3RseQorICAvLyBzZXQgdGhlIGNh
Y2hlIHRvIGVtcHR5LgorICBjYXNlIERUX1VOS05PV046CisgICAgYnJlYWs7CisgIH0KKyAgcmV0
dXJuIGZpbGVfdHlwZTo6bm9uZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIERpckVudFQ+CitzdGF0
aWMgZmlsZV90eXBlIGdldF9maWxlX3R5cGUoRGlyRW50VCogZW50LCBsb25nKSB7CisgIHJldHVy
biBmaWxlX3R5cGU6Om5vbmU7Cit9CisKK3N0YXRpYyBwYWlyPHN0cmluZ192aWV3LCBmaWxlX3R5
cGU+IHBvc2l4X3JlYWRkaXIoRElSKiBkaXJfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBzdHJ1Y3Qg
ZGlyZW50KiBkaXJfZW50cnlfcHRyID0gbnVsbHB0cjsKKyAgZXJybm8gPSAwOyAvLyB6ZXJvIGVy
cm5vIGluIG9yZGVyIHRvIGRldGVjdCBlcnJvcnMKKyAgZWMuY2xlYXIoKTsKKyAgaWYgKChkaXJf
ZW50cnlfcHRyID0gOjpyZWFkZGlyKGRpcl9zdHJlYW0pKSA9PSBudWxscHRyKSB7CisgICAgaWYg
KGVycm5vKQorICAgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIHt9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7ZGlyX2VudHJ5X3B0ci0+ZF9uYW1lLCBnZXRfZmlsZV90eXBl
KGRpcl9lbnRyeV9wdHIsIDApfTsKKyAgfQorfQorI2Vsc2UKKworc3RhdGljIGZpbGVfdHlwZSBn
ZXRfZmlsZV90eXBlKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0YSkgeworICAvL2F1dG8gYXR0
cnMgPSBkYXRhLmR3RmlsZUF0dHJpYnV0ZXM7CisgIC8vIEZJWE1FKEVyaWNXRikKKyAgcmV0dXJu
IGZpbGVfdHlwZTo6dW5rbm93bjsKK30KK3N0YXRpYyB1aW50bWF4X3QgZ2V0X2ZpbGVfc2l6ZShj
b25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgcmV0dXJuIChkYXRhLm5GaWxlU2l6ZUhp
Z2h0ICogKE1BWERXT1JEICsgMSkpICsgZGF0YS5uRmlsZVNpemVMb3c7Cit9CitzdGF0aWMgZmls
ZV90aW1lX3R5cGUgZ2V0X3dyaXRlX3RpbWUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7
CisgIFVMQVJHRV9JTlRFR0VSIHRtcDsKKyAgRklMRVRJTUUmIHRpbWUgPSBkYXRhLmZ0TGFzdFdy
aXRlVGltZTsKKyAgdG1wLnUuTG93UGFydCA9IHRpbWUuZHdMb3dEYXRlVGltZTsKKyAgdG1wLnUu
SGlnaFBhcnQgPSB0aW1lLmR3SGlnaERhdGVUaW1lOworICByZXR1cm4gZmlsZV90aW1lX3R5cGUo
ZmlsZV90aW1lX3R5cGU6OmR1cmF0aW9uKHRpbWUuUXVhZFBhcnQpKTsKK30KKworI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKwordXNpbmcgZGV0YWlsOjpF
cnJvckhhbmRsZXI7CisKKyNpZiBkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCitjbGFzcyBfX2Rp
cl9zdHJlYW0geworcHVibGljOgorICBfX2Rpcl9zdHJlYW0oKSA9IGRlbGV0ZTsKKyAgX19kaXJf
c3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgX19kaXJfc3RyZWFtJikgPSBkZWxldGU7CisKKyAgX19k
aXJfc3RyZWFtKF9fZGlyX3N0cmVhbSYmIF9fZHMpIG5vZXhjZXB0IDogX19zdHJlYW1fKF9fZHMu
X19zdHJlYW1fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19yb290Xyhtb3ZlKF9fZHMuX19yb290XykpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2VudHJ5Xyhtb3ZlKF9fZHMuX19lbnRyeV8pKSB7Cisg
ICAgX19kcy5fX3N0cmVhbV8gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgfQorCisgIF9fZGly
X3N0cmVhbShjb25zdCBwYXRoJiByb290LCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzLCBlcnJvcl9j
b2RlJiBlYykKKyAgICAgIDogX19zdHJlYW1fKElOVkFMSURfSEFORExFX1ZBTFVFKSwgX19yb290
Xyhyb290KSB7CisgICAgX19zdHJlYW1fID0gOjpGaW5kRmlyc3RGaWxlRXgocm9vdC5jX3N0cigp
LCAmX19kYXRhXyk7CisgICAgaWYgKF9fc3RyZWFtXyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkg
eworICAgICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0ZWdv
cnkoKSk7CisgICAgICBjb25zdCBib29sIGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCA9CisgICAg
ICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5p
ZWQpOworICAgICAgaWYgKGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCAmJiBlYy52YWx1ZSgpID09
IEVSUk9SX0FDQ0VTU19ERU5JRUQpCisgICAgICAgIGVjLmNsZWFyKCk7CisgICAgICByZXR1cm47
CisgICAgfQorICB9CisKKyAgfl9fZGlyX3N0cmVhbSgpIG5vZXhjZXB0IHsKKyAgICBpZiAoX19z
dHJlYW1fID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgcmV0dXJuOworICAgIGNsb3Nl
KCk7CisgIH0KKworICBib29sIGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0cmVh
bV8gIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7IH0KKworICBib29sIGFkdmFuY2UoZXJyb3JfY29k
ZSYgZWMpIHsKKyAgICB3aGlsZSAoOjpGaW5kTmV4dEZpbGUoX19zdHJlYW1fLCAmX19kYXRhXykp
IHsKKyAgICAgIGlmICghc3RyY21wKF9fZGF0YV8uY0ZpbGVOYW1lLCAiLiIpIHx8IHN0cmNtcChf
X2RhdGFfLmNGaWxlTmFtZSwgIi4uIikpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgLy8gRklY
TUU6IENhY2hlIG1vcmUgb2YgdGhpcworICAgICAgLy9kaXJlY3RvcnlfZW50cnk6Ol9fY2FjaGVk
X2RhdGEgY2RhdGE7CisgICAgICAvL2NkYXRhLl9fdHlwZV8gPSBnZXRfZmlsZV90eXBlKF9fZGF0
YV8pOworICAgICAgLy9jZGF0YS5fX3NpemVfID0gZ2V0X2ZpbGVfc2l6ZShfX2RhdGFfKTsKKyAg
ICAgIC8vY2RhdGEuX193cml0ZV90aW1lXyA9IGdldF93cml0ZV90aW1lKF9fZGF0YV8pOworICAg
ICAgX19lbnRyeV8uX19hc3NpZ25faXRlcl9lbnRyeSgKKyAgICAgICAgICBfX3Jvb3RfIC8gX19k
YXRhXy5jRmlsZU5hbWUsCisgICAgICAgICAgZGlyZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9pdGVy
X3Jlc3VsdChnZXRfZmlsZV90eXBlKF9fZGF0YSkpKTsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29y
eSgpKTsKKyAgICBjbG9zZSgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCitwcml2YXRlOgor
ICBlcnJvcl9jb2RlIGNsb3NlKCkgbm9leGNlcHQgeworICAgIGVycm9yX2NvZGUgZWM7CisgICAg
aWYgKCE6OkZpbmRDbG9zZShfX3N0cmVhbV8pKQorICAgICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0
TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0ZWdvcnkoKSk7CisgICAgX19zdHJlYW1fID0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUU7CisgICAgcmV0dXJuIGVjOworICB9CisKKyAgSEFORExFIF9fc3RyZWFt
X3tJTlZBTElEX0hBTkRMRV9WQUxVRX07CisgIFdJTjMyX0ZJTkRfREFUQSBfX2RhdGFfOworCitw
dWJsaWM6CisgIHBhdGggX19yb290XzsKKyAgZGlyZWN0b3J5X2VudHJ5IF9fZW50cnlfOworfTsK
KyNlbHNlCitjbGFzcyBfX2Rpcl9zdHJlYW0geworcHVibGljOgorICBfX2Rpcl9zdHJlYW0oKSA9
IGRlbGV0ZTsKKyAgX19kaXJfc3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgX19kaXJfc3RyZWFtJikg
PSBkZWxldGU7CisKKyAgX19kaXJfc3RyZWFtKF9fZGlyX3N0cmVhbSYmIG90aGVyKSBub2V4Y2Vw
dCA6IF9fc3RyZWFtXyhvdGhlci5fX3N0cmVhbV8pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yb290Xyhtb3ZlKG90aGVyLl9fcm9vdF8pKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW50cnlfKG1v
dmUob3RoZXIuX19lbnRyeV8pKSB7CisgICAgb3RoZXIuX19zdHJlYW1fID0gbnVsbHB0cjsKKyAg
fQorCisgIF9fZGlyX3N0cmVhbShjb25zdCBwYXRoJiByb290LCBkaXJlY3Rvcnlfb3B0aW9ucyBv
cHRzLCBlcnJvcl9jb2RlJiBlYykKKyAgICAgIDogX19zdHJlYW1fKG51bGxwdHIpLCBfX3Jvb3Rf
KHJvb3QpIHsKKyAgICBpZiAoKF9fc3RyZWFtXyA9IDo6b3BlbmRpcihyb290LmNfc3RyKCkpKSA9
PSBudWxscHRyKSB7CisgICAgICBlYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOworICAgICAg
Y29uc3QgYm9vbCBhbGxvd19lYWNlc3MgPQorICAgICAgICAgIGJvb2wob3B0cyAmIGRpcmVjdG9y
eV9vcHRpb25zOjpza2lwX3Blcm1pc3Npb25fZGVuaWVkKTsKKyAgICAgIGlmIChhbGxvd19lYWNl
c3MgJiYgZWMudmFsdWUoKSA9PSBFQUNDRVMpCisgICAgICAgIGVjLmNsZWFyKCk7CisgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGFkdmFuY2UoZWMpOworICB9CisKKyAgfl9fZGlyX3N0cmVhbSgp
IG5vZXhjZXB0IHsKKyAgICBpZiAoX19zdHJlYW1fKQorICAgICAgY2xvc2UoKTsKKyAgfQorCisg
IGJvb2wgZ29vZCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAhPSBudWxscHRy
OyB9CisKKyAgYm9vbCBhZHZhbmNlKGVycm9yX2NvZGUmIGVjKSB7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgIGF1dG8gc3RyX3R5cGVfcGFpciA9IGRldGFpbDo6cG9zaXhfcmVhZGRpcihfX3N0
cmVhbV8sIGVjKTsKKyAgICAgIGF1dG8mIHN0ciA9IHN0cl90eXBlX3BhaXIuZmlyc3Q7CisgICAg
ICBpZiAoc3RyID09ICIuIiB8fCBzdHIgPT0gIi4uIikgeworICAgICAgICBjb250aW51ZTsKKyAg
ICAgIH0gZWxzZSBpZiAoZWMgfHwgc3RyLmVtcHR5KCkpIHsKKyAgICAgICAgY2xvc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX19lbnRyeV8uX19h
c3NpZ25faXRlcl9lbnRyeSgKKyAgICAgICAgICAgIF9fcm9vdF8gLyBzdHIsCisgICAgICAgICAg
ICBkaXJlY3RvcnlfZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVzdWx0KHN0cl90eXBlX3BhaXIuc2Vj
b25kKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorCitwcml2
YXRlOgorICBlcnJvcl9jb2RlIGNsb3NlKCkgbm9leGNlcHQgeworICAgIGVycm9yX2NvZGUgbV9l
YzsKKyAgICBpZiAoOjpjbG9zZWRpcihfX3N0cmVhbV8pID09IC0xKQorICAgICAgbV9lYyA9IGRl
dGFpbDo6Y2FwdHVyZV9lcnJubygpOworICAgIF9fc3RyZWFtXyA9IG51bGxwdHI7CisgICAgcmV0
dXJuIG1fZWM7CisgIH0KKworICBESVIqIF9fc3RyZWFtX3tudWxscHRyfTsKKworcHVibGljOgor
ICBwYXRoIF9fcm9vdF87CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VudHJ5XzsKK307CisjZW5kaWYK
KworLy8gZGlyZWN0b3J5X2l0ZXJhdG9yCisKK2RpcmVjdG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5
X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgb3B0cykgeworICBFcnJv
ckhhbmRsZXI8dm9pZD4gZXJyKCJkaXJlY3RvcnlfaXRlcmF0b3I6OmRpcmVjdG9yeV9pdGVyYXRv
ciguLi4pIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIF9faW1wXyA9IG1ha2Vf
c2hhcmVkPF9fZGlyX3N0cmVhbT4ocCwgb3B0cywgbV9lYyk7CisgIGlmIChlYykKKyAgICAqZWMg
PSBtX2VjOworICBpZiAoIV9faW1wXy0+Z29vZCgpKSB7CisgICAgX19pbXBfLnJlc2V0KCk7Cisg
ICAgaWYgKG1fZWMpCisgICAgICBlcnIucmVwb3J0KG1fZWMpOworICB9Cit9CisKK2RpcmVjdG9y
eV9pdGVyYXRvciYgZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2luY3JlbWVudChlcnJvcl9jb2RlKiBl
YykgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJBdHRlbXB0aW5nIHRvIGluY3JlbWVudCBh
biBpbnZhbGlkIGl0ZXJhdG9yIik7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImRpcmVjdG9y
eV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIiwgZWMpOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAg
aWYgKCFfX2ltcF8tPmFkdmFuY2UobV9lYykpIHsKKyAgICBwYXRoIHJvb3QgPSBtb3ZlKF9faW1w
Xy0+X19yb290Xyk7CisgICAgX19pbXBfLnJlc2V0KCk7CisgICAgaWYgKG1fZWMpCisgICAgICBl
cnIucmVwb3J0KG1fZWMsICJhdCByb290IFwiJXNcIiIsIHJvb3QpOworICB9CisgIHJldHVybiAq
dGhpczsKK30KKworZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBkaXJlY3RvcnlfaXRlcmF0b3I6Ol9f
ZGVyZWZlcmVuY2UoKSBjb25zdCB7CisgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIkF0dGVtcHRp
bmcgdG8gZGVyZWZlcmVuY2UgYW4gaW52YWxpZCBpdGVyYXRvciIpOworICByZXR1cm4gX19pbXBf
LT5fX2VudHJ5XzsKK30KKworLy8gcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitzdHJ1
Y3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19zaGFyZWRfaW1wIHsKKyAgc3RhY2s8
X19kaXJfc3RyZWFtPiBfX3N0YWNrXzsKKyAgZGlyZWN0b3J5X29wdGlvbnMgX19vcHRpb25zXzsK
K307CisKK3JlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6OnJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3IoCisgICAgY29uc3QgcGF0aCYgcCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0LCBlcnJv
cl9jb2RlKiBlYykKKyAgICA6IF9faW1wXyhudWxscHRyKSwgX19yZWNfKHRydWUpIHsKKyAgRXJy
b3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciIsIGVjLCAm
cCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBfX2Rpcl9zdHJlYW0gbmV3X3MocCwgb3B0LCBt
X2VjKTsKKyAgaWYgKG1fZWMpCisgICAgZXJyLnJlcG9ydChtX2VjKTsKKyAgaWYgKG1fZWMgfHwg
IW5ld19zLmdvb2QoKSkKKyAgICByZXR1cm47CisKKyAgX19pbXBfID0gbWFrZV9zaGFyZWQ8X19z
aGFyZWRfaW1wPigpOworICBfX2ltcF8tPl9fb3B0aW9uc18gPSBvcHQ7CisgIF9faW1wXy0+X19z
dGFja18ucHVzaChtb3ZlKG5ld19zKSk7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVjdG9yeV9p
dGVyYXRvcjo6X19wb3AoZXJyb3JfY29kZSogZWMpIHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBf
LCAiUG9wcGluZyB0aGUgZW5kIGl0ZXJhdG9yIik7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIo
KTsKKyAgX19pbXBfLT5fX3N0YWNrXy5wb3AoKTsKKyAgaWYgKF9faW1wXy0+X19zdGFja18uc2l6
ZSgpID09IDApCisgICAgX19pbXBfLnJlc2V0KCk7CisgIGVsc2UKKyAgICBfX2FkdmFuY2UoZWMp
OworfQorCitkaXJlY3Rvcnlfb3B0aW9ucyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpv
cHRpb25zKCkgY29uc3QgeworICByZXR1cm4gX19pbXBfLT5fX29wdGlvbnNfOworfQorCitpbnQg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6ZGVwdGgoKSBjb25zdCB7CisgIHJldHVybiBf
X2ltcF8tPl9fc3RhY2tfLnNpemUoKSAtIDE7Cit9CisKK2NvbnN0IGRpcmVjdG9yeV9lbnRyeSYg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJlZmVyZW5jZSgpIGNvbnN0IHsKKyAg
cmV0dXJuIF9faW1wXy0+X19zdGFja18udG9wKCkuX19lbnRyeV87Cit9CisKK3JlY3Vyc2l2ZV9k
aXJlY3RvcnlfaXRlcmF0b3ImCityZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2luY3Jl
bWVudChlcnJvcl9jb2RlKiBlYykgeworICBpZiAoZWMpCisgICAgZWMtPmNsZWFyKCk7CisgIGlm
IChyZWN1cnNpb25fcGVuZGluZygpKSB7CisgICAgaWYgKF9fdHJ5X3JlY3Vyc2lvbihlYykgfHwg
KGVjICYmICplYykpCisgICAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgX19yZWNfID0gdHJ1ZTsK
KyAgX19hZHZhbmNlKGVjKTsKKyAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIHJlY3Vyc2l2ZV9k
aXJlY3RvcnlfaXRlcmF0b3I6Ol9fYWR2YW5jZShlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhh
bmRsZXI8dm9pZD4gZXJyKCJyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisr
KCkiLCBlYyk7CisKKyAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yIGVuZF9pdDsKKyAgYXV0byYg
c3RhY2sgPSBfX2ltcF8tPl9fc3RhY2tfOworICBlcnJvcl9jb2RlIG1fZWM7CisgIHdoaWxlIChz
dGFjay5zaXplKCkgPiAwKSB7CisgICAgaWYgKHN0YWNrLnRvcCgpLmFkdmFuY2UobV9lYykpCisg
ICAgICByZXR1cm47CisgICAgaWYgKG1fZWMpCisgICAgICBicmVhazsKKyAgICBzdGFjay5wb3Ao
KTsKKyAgfQorCisgIGlmIChtX2VjKSB7CisgICAgcGF0aCByb290ID0gbW92ZShzdGFjay50b3Ao
KS5fX3Jvb3RfKTsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBlcnIucmVwb3J0KG1fZWMsICJh
dCByb290IFwiJXNcIiIsIHJvb3QpOworICB9IGVsc2UgeworICAgIF9faW1wXy5yZXNldCgpOwor
ICB9Cit9CisKK2Jvb2wgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X190cnlfcmVjdXJz
aW9uKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBib29sIHJlY19z
eW0gPSBib29sKG9wdGlvbnMoKSAmIGRpcmVjdG9yeV9vcHRpb25zOjpmb2xsb3dfZGlyZWN0b3J5
X3N5bWxpbmspOworCisgIGF1dG8mIGN1cnJfaXQgPSBfX2ltcF8tPl9fc3RhY2tfLnRvcCgpOwor
CisgIGJvb2wgc2tpcF9yZWMgPSBmYWxzZTsKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoIXJl
Y19zeW0pIHsKKyAgICBmaWxlX3N0YXR1cyBzdChjdXJyX2l0Ll9fZW50cnlfLl9fZ2V0X3N5bV9m
dCgmbV9lYykpOworICAgIGlmIChtX2VjICYmIHN0YXR1c19rbm93bihzdCkpCisgICAgICBtX2Vj
LmNsZWFyKCk7CisgICAgaWYgKG1fZWMgfHwgaXNfc3ltbGluayhzdCkgfHwgIWlzX2RpcmVjdG9y
eShzdCkpCisgICAgICBza2lwX3JlYyA9IHRydWU7CisgIH0gZWxzZSB7CisgICAgZmlsZV9zdGF0
dXMgc3QoY3Vycl9pdC5fX2VudHJ5Xy5fX2dldF9mdCgmbV9lYykpOworICAgIGlmIChtX2VjICYm
IHN0YXR1c19rbm93bihzdCkpCisgICAgICBtX2VjLmNsZWFyKCk7CisgICAgaWYgKG1fZWMgfHwg
IWlzX2RpcmVjdG9yeShzdCkpCisgICAgICBza2lwX3JlYyA9IHRydWU7CisgIH0KKworICBpZiAo
IXNraXBfcmVjKSB7CisgICAgX19kaXJfc3RyZWFtIG5ld19pdChjdXJyX2l0Ll9fZW50cnlfLnBh
dGgoKSwgX19pbXBfLT5fX29wdGlvbnNfLCBtX2VjKTsKKyAgICBpZiAobmV3X2l0Lmdvb2QoKSkg
eworICAgICAgX19pbXBfLT5fX3N0YWNrXy5wdXNoKG1vdmUobmV3X2l0KSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKG1fZWMpIHsKKyAgICBjb25zdCBib29sIGFsbG93
X2VhY2VzcyA9CisgICAgICAgIGJvb2woX19pbXBfLT5fX29wdGlvbnNfICYgZGlyZWN0b3J5X29w
dGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOworICAgIGlmIChtX2VjLnZhbHVlKCkgPT0g
RUFDQ0VTICYmIGFsbG93X2VhY2VzcykgeworICAgICAgaWYgKGVjKQorICAgICAgICBlYy0+Y2xl
YXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgcGF0aCBhdF9lbnQgPSBtb3ZlKGN1cnJfaXQuX19l
bnRyeV8uX19wXyk7CisgICAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICAgIGVyci5yZXBvcnQobV9l
YywgImF0dGVtcHRpbmcgcmVjdXJzaW9uIGludG8gXCIlc1wiIiwgYXRfZW50KTsKKyAgICB9Cisg
IH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RF
TQorCisvKiAtLSBFTkQgZmlsZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwIC0tICovCisK
Ky8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLworCisvKiA9
PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgX19tdWxvdGk0
LCBhbmQgaXMgc3RvbGVuIGZyb20gdGhlIGNvbXBpbGVyX3J0IGxpYnJhcnkuCisgKgorICogRklY
TUU6IHdlIHN0ZWFsIGFuZCByZS1jb21waWxlIGl0IGludG8gZmlsZXN5c3RlbSwgd2hpY2ggdXNl
cyBfX2ludDEyOF90LAorICogYW5kIHJlcXVpcmVzIHRoaXMgYnVpbHRpbiB3aGVuIHNhbml0aXpl
ZC4gU2VlIGxsdm0ub3JnL1BSMzA2NDMKKyAqCisgKiA9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8K
KworLyogI2luY2x1ZGUgIl9fY29uZmlnIiAqLworI2luY2x1ZGUgPGNsaW1pdHM+CisKKyNpZm5k
ZWYgX19TSVpFT0ZfSU5UMTI4X18KKyNkZWZpbmUgX0xJQkNQUF9IQVNfTk9fSU5UMTI4CisjZW5k
aWYKKworI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05PX0lOVDEyOCkKKworI2lmZGVmIF9fY2xh
bmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV21pc3NpbmctcHJvdG90eXBlcyIKKyNlbmRpZgorZXh0ZXJuICJDIiBf
X2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgidW5kZWZpbmVkIikpKQorX19pbnQxMjhfdCBfX211
bG90aTQoX19pbnQxMjhfdCBhLCBfX2ludDEyOF90IGIsIGludCogb3ZlcmZsb3cpIHsKKyAgY29u
c3QgaW50IE4gPSAoaW50KShzaXplb2YoX19pbnQxMjhfdCkgKiBDSEFSX0JJVCk7CisgIGNvbnN0
IF9faW50MTI4X3QgTUlOID0gKF9faW50MTI4X3QpMSA8PCAoTiAtIDEpOworICBjb25zdCBfX2lu
dDEyOF90IE1BWCA9IH5NSU47CisgICpvdmVyZmxvdyA9IDA7CisgIF9faW50MTI4X3QgcmVzdWx0
ID0gYSAqIGI7CisgIGlmIChhID09IE1JTikgeworICAgIGlmIChiICE9IDAgJiYgYiAhPSAxKQor
ICAgICAgKm92ZXJmbG93ID0gMTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGlmIChiID09
IE1JTikgeworICAgIGlmIChhICE9IDAgJiYgYSAhPSAxKQorICAgICAgKm92ZXJmbG93ID0gMTsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIF9faW50MTI4X3Qgc2EgPSBhID4+IChOIC0gMSk7
CisgIF9faW50MTI4X3QgYWJzX2EgPSAoYSBeIHNhKSAtIHNhOworICBfX2ludDEyOF90IHNiID0g
YiA+PiAoTiAtIDEpOworICBfX2ludDEyOF90IGFic19iID0gKGIgXiBzYikgLSBzYjsKKyAgaWYg
KGFic19hIDwgMiB8fCBhYnNfYiA8IDIpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgaWYgKHNhID09
IHNiKSB7CisgICAgaWYgKGFic19hID4gTUFYIC8gYWJzX2IpCisgICAgICAqb3ZlcmZsb3cgPSAx
OworICB9IGVsc2UgeworICAgIGlmIChhYnNfYSA+IE1JTiAvIC1hYnNfYikKKyAgICAgICpvdmVy
ZmxvdyA9IDE7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNpZmRlZiBfX2NsYW5nX18KKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYKKworLyogLS0gRU5E
IGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxl
c3lzdGVtL29wZXJhdGlvbnMuY3BwIC0tICovCisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtIiAq
LworI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPGZzdHJl
YW0+CisjaW5jbHVkZSA8cmFuZG9tPiAvKiBmb3IgdW5pcXVlX3BhdGggKi8KKyNpbmNsdWRlIDxz
dHJpbmdfdmlldz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
aW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjbGltaXRzPgorCisvKiAjaW5jbHVkZSAiZmls
ZXN5c3RlbV9jb21tb24uaCIgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+Cisj
aW5jbHVkZSA8ZmNudGwuaD4gLyogdmFsdWVzIGZvciBmY2htb2RhdCAqLworCisjaWYgZGVmaW5l
ZChfX2xpbnV4X18pCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2lmIExJTlVYX1ZFUlNJ
T05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAzMykKKyNpbmNsdWRlIDxzeXMvc2VuZGZp
bGUuaD4KKyNkZWZpbmUgX0xJQkNQUF9VU0VfU0VOREZJTEUKKyNlbmRpZgorI2VsaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IF9faGFzX2luY2x1ZGUoPGNvcHlmaWxlLmg+KQorI2luY2x1ZGUgPGNv
cHlmaWxlLmg+CisjZGVmaW5lIF9MSUJDUFBfVVNFX0NPUFlGSUxFCisjZW5kaWYKKworI2lmICFk
ZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRQorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkgfHwgIWRlZmluZWQoX0xJQkNQUF9V
U0VfQ0xPQ0tfR0VUVElNRSkKKyNpbmNsdWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgZ2V0dGltZW9m
ZGF5IGFuZCB0aW1ldmFsCisjZW5kaWYgICAgICAgICAgICAgICAgLy8gIWRlZmluZWQoQ0xPQ0tf
UkVBTFRJTUUpCisKKyNpZiBkZWZpbmVkKF9MSUJDUFBfQ09NUElMRVJfR0NDKQorI2lmIF9HTlVD
X1ZFUiA8IDUwMAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctZmll
bGQtaW5pdGlhbGl6ZXJzIgorI2VuZGlmCisjZW5kaWYKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BB
Q0VfRklMRVNZU1RFTQorCituYW1lc3BhY2UgeworbmFtZXNwYWNlIHBhcnNlciB7CisKK3VzaW5n
IHN0cmluZ192aWV3X3QgPSBwYXRoOjpfX3N0cmluZ192aWV3OwordXNpbmcgc3RyaW5nX3ZpZXdf
cGFpciA9IHBhaXI8c3RyaW5nX3ZpZXdfdCwgc3RyaW5nX3ZpZXdfdD47Cit1c2luZyBQb3NQdHIg
PSBwYXRoOjp2YWx1ZV90eXBlIGNvbnN0KjsKKworc3RydWN0IFBhdGhQYXJzZXIgeworICBlbnVt
IFBhcnNlclN0YXRlIDogdW5zaWduZWQgY2hhciB7CisgICAgLy8gWmVybyBpcyBhIHNwZWNpYWwg
c2VudGluZWwgdmFsdWUgdXNlZCBieSBkZWZhdWx0IGNvbnN0cnVjdGVkIGl0ZXJhdG9ycy4KKyAg
ICBQU19CZWZvcmVCZWdpbiA9IHBhdGg6Oml0ZXJhdG9yOjpfQmVmb3JlQmVnaW4sCisgICAgUFNf
SW5Sb290TmFtZSA9IHBhdGg6Oml0ZXJhdG9yOjpfSW5Sb290TmFtZSwKKyAgICBQU19JblJvb3RE
aXIgPSBwYXRoOjppdGVyYXRvcjo6X0luUm9vdERpciwKKyAgICBQU19JbkZpbGVuYW1lcyA9IHBh
dGg6Oml0ZXJhdG9yOjpfSW5GaWxlbmFtZXMsCisgICAgUFNfSW5UcmFpbGluZ1NlcCA9IHBhdGg6
Oml0ZXJhdG9yOjpfSW5UcmFpbGluZ1NlcCwKKyAgICBQU19BdEVuZCA9IHBhdGg6Oml0ZXJhdG9y
OjpfQXRFbmQKKyAgfTsKKworICBjb25zdCBzdHJpbmdfdmlld190IFBhdGg7CisgIHN0cmluZ192
aWV3X3QgUmF3RW50cnk7CisgIFBhcnNlclN0YXRlIFN0YXRlOworCitwcml2YXRlOgorICBQYXRo
UGFyc2VyKHN0cmluZ192aWV3X3QgUCwgUGFyc2VyU3RhdGUgU3RhdGUpIG5vZXhjZXB0IDogUGF0
aChQKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YXRlKFN0YXRlKSB7fQorCitwdWJsaWM6CisgIFBhdGhQYXJzZXIoc3RyaW5n
X3ZpZXdfdCBQLCBzdHJpbmdfdmlld190IEUsIHVuc2lnbmVkIGNoYXIgUykKKyAgICAgIDogUGF0
aChQKSwgUmF3RW50cnkoRSksIFN0YXRlKHN0YXRpY19jYXN0PFBhcnNlclN0YXRlPihTKSkgewor
ICAgIC8vIFMgY2Fubm90IGJlICcwJyBvciBQU19CZWZvcmVCZWdpbi4KKyAgfQorCisgIHN0YXRp
YyBQYXRoUGFyc2VyIENyZWF0ZUJlZ2luKHN0cmluZ192aWV3X3QgUCkgbm9leGNlcHQgeworICAg
IFBhdGhQYXJzZXIgUFAoUCwgUFNfQmVmb3JlQmVnaW4pOworICAgIFBQLmluY3JlbWVudCgpOwor
ICAgIHJldHVybiBQUDsKKyAgfQorCisgIHN0YXRpYyBQYXRoUGFyc2VyIENyZWF0ZUVuZChzdHJp
bmdfdmlld190IFApIG5vZXhjZXB0IHsKKyAgICBQYXRoUGFyc2VyIFBQKFAsIFBTX0F0RW5kKTsK
KyAgICByZXR1cm4gUFA7CisgIH0KKworICBQb3NQdHIgcGVlaygpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICBhdXRvIFRrRW5kID0gZ2V0TmV4dFRva2VuU3RhcnRQb3MoKTsKKyAgICBhdXRvIEVuZCA9
IGdldEFmdGVyQmFjaygpOworICAgIHJldHVybiBUa0VuZCA9PSBFbmQgPyBudWxscHRyIDogVGtF
bmQ7CisgIH0KKworICB2b2lkIGluY3JlbWVudCgpIG5vZXhjZXB0IHsKKyAgICBjb25zdCBQb3NQ
dHIgRW5kID0gZ2V0QWZ0ZXJCYWNrKCk7CisgICAgY29uc3QgUG9zUHRyIFN0YXJ0ID0gZ2V0TmV4
dFRva2VuU3RhcnRQb3MoKTsKKyAgICBpZiAoU3RhcnQgPT0gRW5kKQorICAgICAgcmV0dXJuIG1h
a2VTdGF0ZShQU19BdEVuZCk7CisKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19C
ZWZvcmVCZWdpbjogeworICAgICAgUG9zUHRyIFRrRW5kID0gY29uc3VtZVNlcGFyYXRvcihTdGFy
dCwgRW5kKTsKKyAgICAgIGlmIChUa0VuZCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19J
blJvb3REaXIsIFN0YXJ0LCBUa0VuZCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBtYWtl
U3RhdGUoUFNfSW5GaWxlbmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShTdGFydCwgRW5kKSk7Cisg
ICAgfQorICAgIGNhc2UgUFNfSW5Sb290RGlyOgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19J
bkZpbGVuYW1lcywgU3RhcnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKKworICAgIGNhc2Ug
UFNfSW5GaWxlbmFtZXM6IHsKKyAgICAgIFBvc1B0ciBTZXBFbmQgPSBjb25zdW1lU2VwYXJhdG9y
KFN0YXJ0LCBFbmQpOworICAgICAgaWYgKFNlcEVuZCAhPSBFbmQpIHsKKyAgICAgICAgUG9zUHRy
IFRrRW5kID0gY29uc3VtZU5hbWUoU2VwRW5kLCBFbmQpOworICAgICAgICBpZiAoVGtFbmQpCisg
ICAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgU2VwRW5kLCBUa0VuZCk7
CisgICAgICB9CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxpbmdTZXAsIFN0YXJ0
LCBTZXBFbmQpOworICAgIH0KKworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJl
dHVybiBtYWtlU3RhdGUoUFNfQXRFbmQpOworCisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAg
IGNhc2UgUFNfQXRFbmQ6CisgICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9
CisKKyAgdm9pZCBkZWNyZW1lbnQoKSBub2V4Y2VwdCB7CisgICAgY29uc3QgUG9zUHRyIFJFbmQg
PSBnZXRCZWZvcmVGcm9udCgpOworICAgIGNvbnN0IFBvc1B0ciBSU3RhcnQgPSBnZXRDdXJyZW50
VG9rZW5TdGFydFBvcygpIC0gMTsKKyAgICBpZiAoUlN0YXJ0ID09IFJFbmQpIC8vIHdlJ3JlIGRl
Y3JlbWVudGluZyB0aGUgYmVnaW4KKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfQmVmb3JlQmVn
aW4pOworCisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQXRFbmQ6IHsKKyAgICAg
IC8vIFRyeSB0byBjb25zdW1lIGEgdHJhaWxpbmcgc2VwYXJhdG9yIG9yIHJvb3QgZGlyZWN0b3J5
IGZpcnN0LgorICAgICAgaWYgKFBvc1B0ciBTZXBFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFJTdGFy
dCwgUkVuZCkpIHsKKyAgICAgICAgaWYgKFNlcEVuZCA9PSBSRW5kKQorICAgICAgICAgIHJldHVy
biBtYWtlU3RhdGUoUFNfSW5Sb290RGlyLCBQYXRoLmRhdGEoKSwgUlN0YXJ0ICsgMSk7CisgICAg
ICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU2VwRW5kICsgMSwgUlN0YXJ0
ICsgMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBQb3NQdHIgVGtTdGFydCA9IGNvbnN1bWVO
YW1lKFJTdGFydCwgUkVuZCk7CisgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFt
ZXMsIFRrU3RhcnQgKyAxLCBSU3RhcnQgKyAxKTsKKyAgICAgIH0KKyAgICB9CisgICAgY2FzZSBQ
U19JblRyYWlsaW5nU2VwOgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywg
Y29uc3VtZU5hbWUoUlN0YXJ0LCBSRW5kKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgIFJT
dGFydCArIDEpOworICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6IHsKKyAgICAgIFBvc1B0ciBTZXBF
bmQgPSBjb25zdW1lU2VwYXJhdG9yKFJTdGFydCwgUkVuZCk7CisgICAgICBpZiAoU2VwRW5kID09
IFJFbmQpCisgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290RGlyLCBQYXRoLmRhdGEo
KSwgUlN0YXJ0ICsgMSk7CisgICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lTmFtZShTZXBFbmQs
IFJFbmQpOworICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgVGtFbmQgKyAx
LCBTZXBFbmQgKyAxKTsKKyAgICB9CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAgICAvLyBy
ZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdE5hbWUsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsK
KyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICAg
IF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKworICAvLy8gXGJyaWVmIFJldHVy
biBhIHZpZXcgd2l0aCB0aGUgInByZWZlcnJlZCByZXByZXNlbnRhdGlvbiIgb2YgdGhlIGN1cnJl
bnQKKyAgLy8vICAgZWxlbWVudC4gRm9yIGV4YW1wbGUgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUg
cmVwcmVzZW50ZWQgYXMgYSAnLicKKyAgc3RyaW5nX3ZpZXdfdCBvcGVyYXRvciooKSBjb25zdCBu
b2V4Y2VwdCB7CisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46
CisgICAgY2FzZSBQU19BdEVuZDoKKyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIFBTX0luUm9v
dERpcjoKKyAgICAgIHJldHVybiAiLyI7CisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAg
ICAgcmV0dXJuICIiOworICAgIGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0luRmls
ZW5hbWVzOgorICAgICAgcmV0dXJuIFJhd0VudHJ5OworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVB
Q0hBQkxFKCk7CisgIH0KKworICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNl
cHQgeworICAgIHJldHVybiBTdGF0ZSAhPSBQU19CZWZvcmVCZWdpbiAmJiBTdGF0ZSAhPSBQU19B
dEVuZDsKKyAgfQorCisgIFBhdGhQYXJzZXImIG9wZXJhdG9yKysoKSBub2V4Y2VwdCB7CisgICAg
aW5jcmVtZW50KCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgUGF0aFBhcnNlciYgb3Bl
cmF0b3ItLSgpIG5vZXhjZXB0IHsKKyAgICBkZWNyZW1lbnQoKTsKKyAgICByZXR1cm4gKnRoaXM7
CisgIH0KKworICBib29sIGluUm9vdFBhdGgoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJu
IFN0YXRlID09IFBTX0luUm9vdERpciB8fCBTdGF0ZSA9PSBQU19JblJvb3ROYW1lOworICB9CisK
K3ByaXZhdGU6CisgIHZvaWQgbWFrZVN0YXRlKFBhcnNlclN0YXRlIE5ld1N0YXRlLCBQb3NQdHIg
U3RhcnQsIFBvc1B0ciBFbmQpIG5vZXhjZXB0IHsKKyAgICBTdGF0ZSA9IE5ld1N0YXRlOworICAg
IFJhd0VudHJ5ID0gc3RyaW5nX3ZpZXdfdChTdGFydCwgRW5kIC0gU3RhcnQpOworICB9CisgIHZv
aWQgbWFrZVN0YXRlKFBhcnNlclN0YXRlIE5ld1N0YXRlKSBub2V4Y2VwdCB7CisgICAgU3RhdGUg
PSBOZXdTdGF0ZTsKKyAgICBSYXdFbnRyeSA9IHt9OworICB9CisKKyAgUG9zUHRyIGdldEFmdGVy
QmFjaygpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGguZGF0YSgpICsgUGF0aC5zaXplKCk7
IH0KKworICBQb3NQdHIgZ2V0QmVmb3JlRnJvbnQoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBQ
YXRoLmRhdGEoKSAtIDE7IH0KKworICAvLy8gXGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8gdGhl
IGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgY3VycmVudGx5CisgIC8vLyAgIGxleGVkIGVsZW1l
bnQuCisgIFBvc1B0ciBnZXROZXh0VG9rZW5TdGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKyAg
ICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICAgIHJldHVy
biBQYXRoLmRhdGEoKTsKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19JblJv
b3REaXI6CisgICAgY2FzZSBQU19JbkZpbGVuYW1lczoKKyAgICAgIHJldHVybiAmUmF3RW50cnku
YmFjaygpICsgMTsKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgY2FzZSBQU19BdEVu
ZDoKKyAgICAgIHJldHVybiBnZXRBZnRlckJhY2soKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJF
QUNIQUJMRSgpOworICB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBm
aXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnRseSBsZXhlZAorICAvLy8gICBlbGVtZW50Lgor
ICBQb3NQdHIgZ2V0Q3VycmVudFRva2VuU3RhcnRQb3MoKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
c3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAgY2FzZSBQU19J
blJvb3ROYW1lOgorICAgICAgcmV0dXJuICZQYXRoLmZyb250KCk7CisgICAgY2FzZSBQU19JblJv
b3REaXI6CisgICAgY2FzZSBQU19JbkZpbGVuYW1lczoKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdT
ZXA6CisgICAgICByZXR1cm4gJlJhd0VudHJ5LmZyb250KCk7CisgICAgY2FzZSBQU19BdEVuZDoK
KyAgICAgIHJldHVybiAmUGF0aC5iYWNrKCkgKyAxOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVB
Q0hBQkxFKCk7CisgIH0KKworICBQb3NQdHIgY29uc3VtZVNlcGFyYXRvcihQb3NQdHIgUCwgUG9z
UHRyIEVuZCkgY29uc3Qgbm9leGNlcHQgeworICAgIGlmIChQID09IEVuZCB8fCAqUCAhPSAnLycp
CisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBpbnQgSW5jID0gUCA8IEVuZCA/IDEg
OiAtMTsKKyAgICBQICs9IEluYzsKKyAgICB3aGlsZSAoUCAhPSBFbmQgJiYgKlAgPT0gJy8nKQor
ICAgICAgUCArPSBJbmM7CisgICAgcmV0dXJuIFA7CisgIH0KKworICBQb3NQdHIgY29uc3VtZU5h
bWUoUG9zUHRyIFAsIFBvc1B0ciBFbmQpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBpZiAoUCA9PSBF
bmQgfHwgKlAgPT0gJy8nKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgaW50IElu
YyA9IFAgPCBFbmQgPyAxIDogLTE7CisgICAgUCArPSBJbmM7CisgICAgd2hpbGUgKFAgIT0gRW5k
ICYmICpQICE9ICcvJykKKyAgICAgIFAgKz0gSW5jOworICAgIHJldHVybiBQOworICB9Cit9Owor
CitzdGF0aWMgc3RyaW5nX3ZpZXdfcGFpciBzZXBhcmF0ZV9maWxlbmFtZShzdHJpbmdfdmlld190
IGNvbnN0JiBzKSB7CisgIGlmIChzID09ICIuIiB8fCBzID09ICIuLiIgfHwgcy5lbXB0eSgpKQor
ICAgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3MsICIifTsKKyAgYXV0byBwb3MgPSBzLmZpbmRf
bGFzdF9vZignLicpOworICBpZiAocG9zID09IHN0cmluZ192aWV3X3Q6Om5wb3MgfHwgcG9zID09
IDApCisgICAgcmV0dXJuIHN0cmluZ192aWV3X3BhaXJ7cywgc3RyaW5nX3ZpZXdfdHt9fTsKKyAg
cmV0dXJuIHN0cmluZ192aWV3X3BhaXJ7cy5zdWJzdHIoMCwgcG9zKSwgcy5zdWJzdHIocG9zKX07
Cit9CisKK3N0YXRpYyBzdHJpbmdfdmlld190IGNyZWF0ZVZpZXcoUG9zUHRyIFMsIFBvc1B0ciBF
KSBub2V4Y2VwdCB7CisgIHJldHVybiB7Uywgc3RhdGljX2Nhc3Q8c2l6ZV90PihFIC0gUykgKyAx
fTsKK30KKworfSAvLyBuYW1lc3BhY2UgcGFyc2VyCit9IC8vIG5hbWVzcGFjZQorCisvLyAgICAg
ICAgICAgICAgICAgICAgICAgUE9TSVggSEVMUEVSUworCituYW1lc3BhY2UgZGV0YWlsIHsKK25h
bWVzcGFjZSB7CisKK3VzaW5nIHZhbHVlX3R5cGUgPSBwYXRoOjp2YWx1ZV90eXBlOwordXNpbmcg
c3RyaW5nX3R5cGUgPSBwYXRoOjpzdHJpbmdfdHlwZTsKKworc3RydWN0IEZpbGVEZXNjcmlwdG9y
IHsKKyAgY29uc3QgcGF0aCYgbmFtZTsKKyAgaW50IGZkID0gLTE7CisgIFN0YXRUIG1fc3RhdDsK
KyAgZmlsZV9zdGF0dXMgbV9zdGF0dXM7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Cisg
IHN0YXRpYyBGaWxlRGVzY3JpcHRvciBjcmVhdGUoY29uc3QgcGF0aCogcCwgZXJyb3JfY29kZSYg
ZWMsIEFyZ3MuLi4gYXJncykgeworICAgIGVjLmNsZWFyKCk7CisgICAgaW50IGZkOworICAgIGlm
ICgoZmQgPSA6Om9wZW4ocC0+Y19zdHIoKSwgYXJncy4uLikpID09IC0xKSB7CisgICAgICBlYyA9
IGNhcHR1cmVfZXJybm8oKTsKKyAgICAgIHJldHVybiBGaWxlRGVzY3JpcHRvcntwfTsKKyAgICB9
CisgICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9yKHAsIGZkKTsKKyAgfQorCisgIHRlbXBsYXRlIDxj
bGFzcy4uLiBBcmdzPgorICBzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlX3dpdGhfc3RhdHVz
KGNvbnN0IHBhdGgqIHAsIGVycm9yX2NvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4gYXJncykgeworICAgIEZpbGVEZXNjcmlwdG9yIGZk
ID0gY3JlYXRlKHAsIGVjLCBhcmdzLi4uKTsKKyAgICBpZiAoIWVjKQorICAgICAgZmQucmVmcmVz
aF9zdGF0dXMoZWMpOworCisgICAgcmV0dXJuIGZkOworICB9CisKKyAgZmlsZV9zdGF0dXMgZ2V0
X3N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgIFN0YXRUIGNvbnN0JiBnZXRf
c3RhdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdDsgfQorCisgIGJvb2wgc3RhdHVzX2tub3duKCkg
Y29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OnN0YXR1c19rbm93bihtX3N0YXR1cyk7IH0KKworICBm
aWxlX3N0YXR1cyByZWZyZXNoX3N0YXR1cyhlcnJvcl9jb2RlJiBlYyk7CisKKyAgdm9pZCBjbG9z
ZSgpIG5vZXhjZXB0IHsKKyAgICBpZiAoZmQgIT0gLTEpCisgICAgICA6OmNsb3NlKGZkKTsKKyAg
ICBmZCA9IC0xOworICB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0b3ImJiBvdGhl
cikKKyAgICAgIDogbmFtZShvdGhlci5uYW1lKSwgZmQob3RoZXIuZmQpLCBtX3N0YXQob3RoZXIu
bV9zdGF0KSwKKyAgICAgICAgbV9zdGF0dXMob3RoZXIubV9zdGF0dXMpIHsKKyAgICBvdGhlci5m
ZCA9IC0xOworICAgIG90aGVyLm1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgfQorCisgIH5G
aWxlRGVzY3JpcHRvcigpIHsgY2xvc2UoKTsgfQorCisgIEZpbGVEZXNjcmlwdG9yKEZpbGVEZXNj
cmlwdG9yIGNvbnN0JikgPSBkZWxldGU7CisgIEZpbGVEZXNjcmlwdG9yJiBvcGVyYXRvcj0oRmls
ZURlc2NyaXB0b3IgY29uc3QmKSA9IGRlbGV0ZTsKKworcHJpdmF0ZToKKyAgZXhwbGljaXQgRmls
ZURlc2NyaXB0b3IoY29uc3QgcGF0aCogcCwgaW50IGZkID0gLTEpIDogbmFtZSgqcCksIGZkKGZk
KSB7fQorfTsKKworcGVybXMgcG9zaXhfZ2V0X3Blcm1zKGNvbnN0IFN0YXRUJiBzdCkgbm9leGNl
cHQgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0LnN0X21vZGUpICYgcGVybXM6Om1h
c2s7Cit9CisKKzo6bW9kZV90IHBvc2l4X2NvbnZlcnRfcGVybXMocGVybXMgcHJtcykgeworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8IDo6bW9kZV90Pihwcm1zICYgcGVybXM6Om1hc2spOworfQorCitm
aWxlX3N0YXR1cyBjcmVhdGVfZmlsZV9zdGF0dXMoZXJyb3JfY29kZSYgbV9lYywgcGF0aCBjb25z
dCYgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0VCYgcGF0aF9z
dGF0LCBlcnJvcl9jb2RlKiBlYykgeworICBpZiAoZWMpCisgICAgKmVjID0gbV9lYzsKKyAgaWYg
KG1fZWMgJiYgKG1fZWMudmFsdWUoKSA9PSBFTk9FTlQgfHwgbV9lYy52YWx1ZSgpID09IEVOT1RE
SVIpKSB7CisgICAgcmV0dXJuIGZpbGVfc3RhdHVzKGZpbGVfdHlwZTo6bm90X2ZvdW5kKTsKKyAg
fSBlbHNlIGlmIChtX2VjKSB7CisgICAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicG9zaXhfc3Rh
dCIsIGVjLCAmcCk7CisgICAgZXJyLnJlcG9ydChtX2VjLCAiZmFpbGVkIHRvIGRldGVybWluZSBh
dHRyaWJ1dGVzIGZvciB0aGUgc3BlY2lmaWVkIHBhdGgiKTsKKyAgICByZXR1cm4gZmlsZV9zdGF0
dXMoZmlsZV90eXBlOjpub25lKTsKKyAgfQorICAvLyBlbHNlCisKKyAgZmlsZV9zdGF0dXMgZnNf
dG1wOworICBhdXRvIGNvbnN0IG1vZGUgPSBwYXRoX3N0YXQuc3RfbW9kZTsKKyAgaWYgKFNfSVNM
TksobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpzeW1saW5rKTsKKyAgZWxzZSBp
ZiAoU19JU1JFRyhtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnJlZ3VsYXIpOwor
ICBlbHNlIGlmIChTX0lTRElSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6ZGly
ZWN0b3J5KTsKKyAgZWxzZSBpZiAoU19JU0JMSyhtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxl
X3R5cGU6OmJsb2NrKTsKKyAgZWxzZSBpZiAoU19JU0NIUihtb2RlKSkKKyAgICBmc190bXAudHlw
ZShmaWxlX3R5cGU6OmNoYXJhY3Rlcik7CisgIGVsc2UgaWYgKFNfSVNGSUZPKG1vZGUpKQorICAg
IGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6Zmlmbyk7CisgIGVsc2UgaWYgKFNfSVNTT0NLKG1vZGUp
KQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6c29ja2V0KTsKKyAgZWxzZQorICAgIGZzX3Rt
cC50eXBlKGZpbGVfdHlwZTo6dW5rbm93bik7CisKKyAgZnNfdG1wLnBlcm1pc3Npb25zKGRldGFp
bDo6cG9zaXhfZ2V0X3Blcm1zKHBhdGhfc3RhdCkpOworICByZXR1cm4gZnNfdG1wOworfQorCitm
aWxlX3N0YXR1cyBwb3NpeF9zdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBwYXRoX3N0YXQsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6c3RhdChwLmNfc3Ry
KCksICZwYXRoX3N0YXQpID09IC0xKQorICAgIG1fZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8o
KTsKKyAgcmV0dXJuIGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBwLCBwYXRoX3N0YXQsIGVjKTsK
K30KKworZmlsZV9zdGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlKiBl
YykgeworICBTdGF0VCBwYXRoX3N0YXQ7CisgIHJldHVybiBwb3NpeF9zdGF0KHAsIHBhdGhfc3Rh
dCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0JiBwLCBTdGF0
VCYgcGF0aF9zdGF0LCBlcnJvcl9jb2RlKiBlYykgeworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlm
ICg6OmxzdGF0KHAuY19zdHIoKSwgJnBhdGhfc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGRldGFp
bDo6Y2FwdHVyZV9lcnJubygpOworICByZXR1cm4gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIHAs
IHBhdGhfc3RhdCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0
JiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBTdGF0VCBwYXRoX3N0YXQ7CisgIHJldHVybiBwb3Np
eF9sc3RhdChwLCBwYXRoX3N0YXQsIGVjKTsKK30KKworYm9vbCBwb3NpeF9mdHJ1bmNhdGUoY29u
c3QgRmlsZURlc2NyaXB0b3ImIGZkLCBzaXplX3QgdG9fc2l6ZSwgZXJyb3JfY29kZSYgZWMpIHsK
KyAgaWYgKDo6ZnRydW5jYXRlKGZkLmZkLCB0b19zaXplKSA9PSAtMSkgeworICAgIGVjID0gY2Fw
dHVyZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIGVjLmNsZWFyKCk7CisgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBwb3NpeF9mY2htb2QoY29uc3QgRmlsZURlc2NyaXB0b3Im
IGZkLCBjb25zdCBTdGF0VCYgc3QsIGVycm9yX2NvZGUmIGVjKSB7CisgIGlmICg6OmZjaG1vZChm
ZC5mZCwgc3Quc3RfbW9kZSkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfQorICBlYy5jbGVhcigpOworICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgc3RhdF9lcXVpdmFsZW50KGNvbnN0IFN0YXRUJiBzdDEsIGNvbnN0IFN0YXRUJiBzdDIp
IHsKKyAgcmV0dXJuIChzdDEuc3RfZGV2ID09IHN0Mi5zdF9kZXYgJiYgc3QxLnN0X2lubyA9PSBz
dDIuc3RfaW5vKTsKK30KKworZmlsZV9zdGF0dXMgRmlsZURlc2NyaXB0b3I6OnJlZnJlc2hfc3Rh
dHVzKGVycm9yX2NvZGUmIGVjKSB7CisgIC8vIEZEIG11c3QgYmUgb3BlbiBhbmQgZ29vZC4KKyAg
bV9zdGF0dXMgPSBmaWxlX3N0YXR1c3t9OworICBtX3N0YXQgPSB7fTsKKyAgZXJyb3JfY29kZSBt
X2VjOworICBpZiAoOjpmc3RhdChmZCwgJm1fc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGNhcHR1
cmVfZXJybm8oKTsKKyAgbV9zdGF0dXMgPSBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgbmFtZSwg
bV9zdGF0LCAmZWMpOworICByZXR1cm4gbV9zdGF0dXM7Cit9Cit9IC8vIG5hbWVzcGFjZQorfSAv
LyBlbmQgbmFtZXNwYWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OmNhcHR1cmVfZXJybm87Cit1
c2luZyBkZXRhaWw6OkVycm9ySGFuZGxlcjsKK3VzaW5nIGRldGFpbDo6U3RhdFQ7Cit1c2luZyBk
ZXRhaWw6OlRpbWVTcGVjOwordXNpbmcgcGFyc2VyOjpjcmVhdGVWaWV3OwordXNpbmcgcGFyc2Vy
OjpQYXRoUGFyc2VyOwordXNpbmcgcGFyc2VyOjpzdHJpbmdfdmlld190OworCitjb25zdCBib29s
IF9GaWxlc3lzdGVtQ2xvY2s6OmlzX3N0ZWFkeTsKKworX0ZpbGVzeXN0ZW1DbG9jazo6dGltZV9w
b2ludCBfRmlsZXN5c3RlbUNsb2NrOjpub3coKSBub2V4Y2VwdCB7CisgIHR5cGVkZWYgY2hyb25v
OjpkdXJhdGlvbjxyZXA+IF9fc2VjczsKKyNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NMT0NLX0dF
VFRJTUUpICYmIGRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpCisgIHR5cGVkZWYgY2hyb25vOjpkdXJh
dGlvbjxyZXAsIG5hbm8+IF9fbnNlY3M7CisgIHN0cnVjdCB0aW1lc3BlYyB0cDsKKyAgaWYgKDAg
IT0gY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRwKSkKKyAgICBfX3Rocm93X3N5c3Rl
bV9lcnJvcihlcnJubywgImNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUpIGZhaWxlZCIpOwor
ICByZXR1cm4gdGltZV9wb2ludChfX3NlY3ModHAudHZfc2VjKSArCisgICAgICAgICAgICAgICAg
ICAgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxkdXJhdGlvbj4oX19uc2Vjcyh0cC50dl9uc2VjKSkp
OworI2Vsc2UKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgbWljcm8+IF9fbWljcm9z
ZWNzOworICB0aW1ldmFsIHR2OworICBnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKyAgcmV0dXJuIHRp
bWVfcG9pbnQoX19zZWNzKHR2LnR2X3NlYykgKyBfX21pY3Jvc2Vjcyh0di50dl91c2VjKSk7Cisj
ZW5kaWYgLy8gX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRSAmJiBDTE9DS19SRUFMVElNRQorfQor
CitmaWxlc3lzdGVtX2Vycm9yOjp+ZmlsZXN5c3RlbV9lcnJvcigpIHt9CisKK3ZvaWQgZmlsZXN5
c3RlbV9lcnJvcjo6X19jcmVhdGVfd2hhdChpbnQgX19udW1fcGF0aHMpIHsKKyAgY29uc3QgY2hh
ciogZGVyaXZlZF93aGF0ID0gc3lzdGVtX2Vycm9yOjp3aGF0KCk7CisgIF9fc3RvcmFnZV8tPl9f
d2hhdF8gPSBbJl0oKSAtPiBzdHJpbmcgeworICAgIGNvbnN0IGNoYXIqIHAxID0gcGF0aDEoKS5u
YXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDEoKS5jX3N0cigpOworICAgIGNvbnN0IGNo
YXIqIHAyID0gcGF0aDIoKS5uYXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDIoKS5jX3N0
cigpOworICAgIHN3aXRjaCAoX19udW1fcGF0aHMpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMiLCBkZXJpdmVk
X3doYXQpOworICAgIGNhc2UgMToKKyAgICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJpbmco
ImZpbGVzeXN0ZW0gZXJyb3I6ICVzIFslc10iLCBkZXJpdmVkX3doYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHAxKTsKKyAgICBjYXNlIDI6CisgICAgICByZXR1cm4gZGV0
YWlsOjpmb3JtYXRfc3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyBbJXNdIFslc10iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkX3doYXQsIHAxLCBwMik7Cisg
ICAgfQorICB9KCk7Cit9CisKK3N0YXRpYyBwYXRoIF9fZG9fYWJzb2x1dGUoY29uc3QgcGF0aCYg
cCwgcGF0aCogY3dkLCBlcnJvcl9jb2RlKiBlYykgeworICBpZiAoZWMpCisgICAgZWMtPmNsZWFy
KCk7CisgIGlmIChwLmlzX2Fic29sdXRlKCkpCisgICAgcmV0dXJuIHA7CisgICpjd2QgPSBfX2N1
cnJlbnRfcGF0aChlYyk7CisgIGlmIChlYyAmJiAqZWMpCisgICAgcmV0dXJuIHt9OworICByZXR1
cm4gKCpjd2QpIC8gcDsKK30KKworcGF0aCBfX2Fic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUqIGVjKSB7CisgIHBhdGggY3dkOworICByZXR1cm4gX19kb19hYnNvbHV0ZShwLCAmY3dk
LCBlYyk7Cit9CisKK3BhdGggX19jYW5vbmljYWwocGF0aCBjb25zdCYgb3JpZ19wLCBlcnJvcl9j
b2RlKiBlYykgeworICBwYXRoIGN3ZDsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY2Fub25p
Y2FsIiwgZWMsICZvcmlnX3AsICZjd2QpOworCisgIHBhdGggcCA9IF9fZG9fYWJzb2x1dGUob3Jp
Z19wLCAmY3dkLCBlYyk7CisgIGNoYXIgYnVmZltQQVRIX01BWCArIDFdOworICBjaGFyKiByZXQ7
CisgIGlmICgocmV0ID0gOjpyZWFscGF0aChwLmNfc3RyKCksIGJ1ZmYpKSA9PSBudWxscHRyKQor
ICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIHJldHVybiB7cmV0fTsK
K30KKwordm9pZCBfX2NvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlf
b3B0aW9ucyBvcHRpb25zLAorICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPHZvaWQ+IGVycigiY29weSIsIGVjLCAmZnJvbSwgJnRvKTsKKworICBjb25zdCBib29s
IHN5bV9zdGF0dXMgPSBib29sKAorICAgICAgb3B0aW9ucyAmIChjb3B5X29wdGlvbnM6OmNyZWF0
ZV9zeW1saW5rcyB8IGNvcHlfb3B0aW9uczo6c2tpcF9zeW1saW5rcykpOworCisgIGNvbnN0IGJv
b2wgc3ltX3N0YXR1czIgPSBib29sKG9wdGlvbnMgJiBjb3B5X29wdGlvbnM6OmNvcHlfc3ltbGlu
a3MpOworCisgIGVycm9yX2NvZGUgbV9lYzE7CisgIFN0YXRUIGZfc3QgPSB7fTsKKyAgY29uc3Qg
ZmlsZV9zdGF0dXMgZiA9IHN5bV9zdGF0dXMgfHwgc3ltX3N0YXR1czIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IGRldGFpbDo6cG9zaXhfbHN0YXQoZnJvbSwgZl9zdCwgJm1fZWMxKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9zdGF0KGZyb20sIGZf
c3QsICZtX2VjMSk7CisgIGlmIChtX2VjMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjMSk7
CisKKyAgU3RhdFQgdF9zdCA9IHt9OworICBjb25zdCBmaWxlX3N0YXR1cyB0ID0gc3ltX3N0YXR1
cyA/IGRldGFpbDo6cG9zaXhfbHN0YXQodG8sIHRfc3QsICZtX2VjMSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQodG8sIHRfc3QsICZtX2Vj
MSk7CisKKyAgaWYgKG5vdCBzdGF0dXNfa25vd24odCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQo
bV9lYzEpOworCisgIGlmICghZXhpc3RzKGYpIHx8IGlzX290aGVyKGYpIHx8IGlzX290aGVyKHQp
IHx8CisgICAgICAoaXNfZGlyZWN0b3J5KGYpICYmIGlzX3JlZ3VsYXJfZmlsZSh0KSkgfHwKKyAg
ICAgIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KGZfc3QsIHRfc3QpKSB7CisgICAgcmV0dXJuIGVy
ci5yZXBvcnQoZXJyYzo6ZnVuY3Rpb25fbm90X3N1cHBvcnRlZCk7CisgIH0KKworICBpZiAoZWMp
CisgICAgZWMtPmNsZWFyKCk7CisKKyAgaWYgKGlzX3N5bWxpbmsoZikpIHsKKyAgICBpZiAoYm9v
bChjb3B5X29wdGlvbnM6OnNraXBfc3ltbGlua3MgJiBvcHRpb25zKSkgeworICAgICAgLy8gZG8g
bm90aGluZworICAgIH0gZWxzZSBpZiAobm90IGV4aXN0cyh0KSkgeworICAgICAgX19jb3B5X3N5
bWxpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGVyci5yZXBv
cnQoZXJyYzo6ZmlsZV9leGlzdHMpOworICAgIH0KKyAgICByZXR1cm47CisgIH0gZWxzZSBpZiAo
aXNfcmVndWxhcl9maWxlKGYpKSB7CisgICAgaWYgKGJvb2woY29weV9vcHRpb25zOjpkaXJlY3Rv
cmllc19vbmx5ICYgb3B0aW9ucykpIHsKKyAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9IGVsc2Ug
aWYgKGJvb2woY29weV9vcHRpb25zOjpjcmVhdGVfc3ltbGlua3MgJiBvcHRpb25zKSkgeworICAg
ICAgX19jcmVhdGVfc3ltbGluayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSBpZiAoYm9vbChj
b3B5X29wdGlvbnM6OmNyZWF0ZV9oYXJkX2xpbmtzICYgb3B0aW9ucykpIHsKKyAgICAgIF9fY3Jl
YXRlX2hhcmRfbGluayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSBpZiAoaXNfZGlyZWN0b3J5
KHQpKSB7CisgICAgICBfX2NvcHlfZmlsZShmcm9tLCB0byAvIGZyb20uZmlsZW5hbWUoKSwgb3B0
aW9ucywgZWMpOworICAgIH0gZWxzZSB7CisgICAgICBfX2NvcHlfZmlsZShmcm9tLCB0bywgb3B0
aW9ucywgZWMpOworICAgIH0KKyAgICByZXR1cm47CisgIH0gZWxzZSBpZiAoaXNfZGlyZWN0b3J5
KGYpICYmIGJvb2woY29weV9vcHRpb25zOjpjcmVhdGVfc3ltbGlua3MgJiBvcHRpb25zKSkgewor
ICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmlzX2FfZGlyZWN0b3J5KTsKKyAgfSBlbHNlIGlm
IChpc19kaXJlY3RvcnkoZikgJiYgKGJvb2woY29weV9vcHRpb25zOjpyZWN1cnNpdmUgJiBvcHRp
b25zKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zOjpu
b25lID09IG9wdGlvbnMpKSB7CisKKyAgICBpZiAoIWV4aXN0cyh0KSkgeworICAgICAgLy8gY3Jl
YXRlIGRpcmVjdG9yeSB0byB3aXRoIGF0dHJpYnV0ZXMgZnJvbSAnZnJvbScuCisgICAgICBfX2Ny
ZWF0ZV9kaXJlY3RvcnkodG8sIGZyb20sIGVjKTsKKyAgICAgIGlmIChlYyAmJiAqZWMpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICBkaXJlY3RvcnlfaXRlcmF0b3IgaXQg
PQorICAgICAgICBlYyA/IGRpcmVjdG9yeV9pdGVyYXRvcihmcm9tLCAqZWMpIDogZGlyZWN0b3J5
X2l0ZXJhdG9yKGZyb20pOworICAgIGlmIChlYyAmJiAqZWMpIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZXJyb3JfY29kZSBtX2VjMjsKKyAgICBmb3IgKDsgaXQgIT0gZGlyZWN0b3J5X2l0
ZXJhdG9yKCk7IGl0LmluY3JlbWVudChtX2VjMikpIHsKKyAgICAgIGlmIChtX2VjMikgeworICAg
ICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjMik7CisgICAgICB9CisgICAgICBfX2NvcHkoaXQt
PnBhdGgoKSwgdG8gLyBpdC0+cGF0aCgpLmZpbGVuYW1lKCksCisgICAgICAgICAgICAgb3B0aW9u
cyB8IGNvcHlfb3B0aW9uczo6X19pbl9yZWN1cnNpdmVfY29weSwgZWMpOworICAgICAgaWYgKGVj
ICYmICplYykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9Cit9CisKK25h
bWVzcGFjZSBkZXRhaWwgeworbmFtZXNwYWNlIHsKKworI2lmZGVmIF9MSUJDUFBfVVNFX1NFTkRG
SUxFCitib29sIGNvcHlfZmlsZV9pbXBsX3NlbmRmaWxlKEZpbGVEZXNjcmlwdG9yJiByZWFkX2Zk
LCBGaWxlRGVzY3JpcHRvciYgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUmIGVjKSB7CisKKyAgc2l6ZV90IGNvdW50ID0gcmVhZF9mZC5nZXRfc3RhdCgp
LnN0X3NpemU7CisgIGRvIHsKKyAgICBzc2l6ZV90IHJlczsKKyAgICBpZiAoKHJlcyA9IDo6c2Vu
ZGZpbGUod3JpdGVfZmQuZmQsIHJlYWRfZmQuZmQsIG51bGxwdHIsIGNvdW50KSkgPT0gLTEpIHsK
KyAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBjb3VudCAtPSByZXM7CisgIH0gd2hpbGUgKGNvdW50ID4gMCk7CisKKyAgZWMuY2xlYXIo
KTsKKworICByZXR1cm4gdHJ1ZTsKK30KKyNlbGlmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJ
TEUpCitib29sIGNvcHlfZmlsZV9pbXBsX2NvcHlmaWxlKEZpbGVEZXNjcmlwdG9yJiByZWFkX2Zk
LCBGaWxlRGVzY3JpcHRvciYgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUmIGVjKSB7CisgIHN0cnVjdCBDb3B5RmlsZVN0YXRlIHsKKyAgICBjb3B5Zmls
ZV9zdGF0ZV90IHN0YXRlOworICAgIENvcHlGaWxlU3RhdGUoKSB7IHN0YXRlID0gY29weWZpbGVf
c3RhdGVfYWxsb2MoKTsgfQorICAgIH5Db3B5RmlsZVN0YXRlKCkgeyBjb3B5ZmlsZV9zdGF0ZV9m
cmVlKHN0YXRlKTsgfQorCisgIHByaXZhdGU6CisgICAgQ29weUZpbGVTdGF0ZShDb3B5RmlsZVN0
YXRlIGNvbnN0JikgPSBkZWxldGU7CisgICAgQ29weUZpbGVTdGF0ZSYgb3BlcmF0b3I9KENvcHlG
aWxlU3RhdGUgY29uc3QmKSA9IGRlbGV0ZTsKKyAgfTsKKworICBDb3B5RmlsZVN0YXRlIGNmczsK
KyAgaWYgKGZjb3B5ZmlsZShyZWFkX2ZkLmZkLCB3cml0ZV9mZC5mZCwgY2ZzLnN0YXRlLCBDT1BZ
RklMRV9EQVRBKSA8IDApIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4g
ZmFsc2U7CisgIH0KKworICBlYy5jbGVhcigpOworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
CisvLyBUaGlzIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgaWZkZWYncyBpbiBKdW5pcGVyIGR1ZSB0
byB0aGUgY3VycmVudAorLy8gY2xhbmcgbm90IHN1cHBvcnRpbmcgYW4gX19vcGVuIGZ1bmN0aW9u
IG9uIGlmc3RyZWFtIGFuZCBvZnN0cmVhbS4KKyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9TRU5E
RklMRSkgJiYgIWRlZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJTEUpCisvLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGlzbid0IGd1YXJkZWQgYnkgaWZkZWYncyBldmVuIHRob3VnaCBpdCBtYXkgYmUgdW51
c2VkCisvLyBpbiBvcmRlciB0byBhc3N1cmUgaXQgc3RpbGwgY29tcGlsZXMuCitfX2F0dHJpYnV0
ZV9fKCh1bnVzZWQpKSBib29sIGNvcHlfZmlsZV9pbXBsX2RlZmF1bHQoRmlsZURlc2NyaXB0b3Im
IHJlYWRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmlsZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIGlmc3RyZWFt
IGluOworICBpbi5fX29wZW4ocmVhZF9mZC5mZCwgaW9zOjpiaW5hcnkpOworICBpZiAoIWluLmlz
X29wZW4oKSkgeworICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IF9fb3BlbiBkaWRuJ3QgcmVzZXQg
dGhlIGVycm9yIGNvZGUuCisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIGZh
bHNlOworICB9CisgIG9mc3RyZWFtIG91dDsKKyAgb3V0Ll9fb3Blbih3cml0ZV9mZC5mZCwgaW9z
OjpiaW5hcnkpOworICBpZiAoIW91dC5pc19vcGVuKCkpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJy
bm8oKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoaW4uZ29vZCgpICYmIG91dC5n
b29kKCkpIHsKKyAgICB1c2luZyBJbkl0ID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPjsKKyAg
ICB1c2luZyBPdXRJdCA9IG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj47CisgICAgSW5JdCBiaW4o
aW4pOworICAgIEluSXQgZWluOworICAgIE91dEl0IGJvdXQob3V0KTsKKyAgICBjb3B5KGJpbiwg
ZWluLCBib3V0KTsKKyAgfQorICBpZiAob3V0LmZhaWwoKSB8fCBpbi5mYWlsKCkpIHsKKyAgICBl
YyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjppb19lcnJvcik7CisgICAgcmV0dXJuIGZhbHNlOwor
ICB9CisKKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworYm9vbCBj
b3B5X2ZpbGVfaW1wbChGaWxlRGVzY3JpcHRvciYgZnJvbSwgRmlsZURlc2NyaXB0b3ImIHRvLCBl
cnJvcl9jb2RlJiBlYykgeworI2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfU0VOREZJTEUpCisgIHJl
dHVybiBjb3B5X2ZpbGVfaW1wbF9zZW5kZmlsZShmcm9tLCB0bywgZWMpOworI2VsaWYgZGVmaW5l
ZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX2NvcHlmaWxl
KGZyb20sIHRvLCBlYyk7CisjZWxzZQorICByZXR1cm4gY29weV9maWxlX2ltcGxfZGVmYXVsdChm
cm9tLCB0bywgZWMpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFj
ZSBkZXRhaWwKKworYm9vbCBfX2NvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRo
JiB0bywgY29weV9vcHRpb25zIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUq
IGVjKSB7CisgIHVzaW5nIGRldGFpbDo6RmlsZURlc2NyaXB0b3I7CisgIEVycm9ySGFuZGxlcjxi
b29sPiBlcnIoImNvcHlfZmlsZSIsIGVjLCAmdG8sICZmcm9tKTsKKworICBlcnJvcl9jb2RlIG1f
ZWM7CisgIEZpbGVEZXNjcmlwdG9yIGZyb21fZmQgPQorICAgICAgRmlsZURlc2NyaXB0b3I6OmNy
ZWF0ZV93aXRoX3N0YXR1cygmZnJvbSwgbV9lYywgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKKyAg
aWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisKKyAgYXV0byBmcm9tX3N0
ID0gZnJvbV9mZC5nZXRfc3RhdHVzKCk7CisgIFN0YXRUIGNvbnN0JiBmcm9tX3N0YXQgPSBmcm9t
X2ZkLmdldF9zdGF0KCk7CisgIGlmICghaXNfcmVndWxhcl9maWxlKGZyb21fc3QpKSB7CisgICAg
aWYgKG5vdCBtX2VjKQorICAgICAgbV9lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjpub3Rfc3Vw
cG9ydGVkKTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorCisgIGNvbnN0IGJv
b2wgc2tpcF9leGlzdGluZyA9IGJvb2woY29weV9vcHRpb25zOjpza2lwX2V4aXN0aW5nICYgb3B0
aW9ucyk7CisgIGNvbnN0IGJvb2wgdXBkYXRlX2V4aXN0aW5nID0gYm9vbChjb3B5X29wdGlvbnM6
OnVwZGF0ZV9leGlzdGluZyAmIG9wdGlvbnMpOworICBjb25zdCBib29sIG92ZXJ3cml0ZV9leGlz
dGluZyA9CisgICAgICBib29sKGNvcHlfb3B0aW9uczo6b3ZlcndyaXRlX2V4aXN0aW5nICYgb3B0
aW9ucyk7CisKKyAgU3RhdFQgdG9fc3RhdF9wYXRoOworICBmaWxlX3N0YXR1cyB0b19zdCA9IGRl
dGFpbDo6cG9zaXhfc3RhdCh0bywgdG9fc3RhdF9wYXRoLCAmbV9lYyk7CisgIGlmICghc3RhdHVz
X2tub3duKHRvX3N0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKworICBjb25zdCBi
b29sIHRvX2V4aXN0cyA9IGV4aXN0cyh0b19zdCk7CisgIGlmICh0b19leGlzdHMgJiYgIWlzX3Jl
Z3VsYXJfZmlsZSh0b19zdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBv
cnRlZCk7CisKKyAgaWYgKHRvX2V4aXN0cyAmJiBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChmcm9t
X3N0YXQsIHRvX3N0YXRfcGF0aCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9l
eGlzdHMpOworCisgIGlmICh0b19leGlzdHMgJiYgc2tpcF9leGlzdGluZykKKyAgICByZXR1cm4g
ZmFsc2U7CisKKyAgYm9vbCBTaG91bGRDb3B5ID0gWyZdKCkgeworICAgIGlmICh0b19leGlzdHMg
JiYgdXBkYXRlX2V4aXN0aW5nKSB7CisgICAgICBhdXRvIGZyb21fdGltZSA9IGRldGFpbDo6ZXh0
cmFjdF9tdGltZShmcm9tX3N0YXQpOworICAgICAgYXV0byB0b190aW1lID0gZGV0YWlsOjpleHRy
YWN0X210aW1lKHRvX3N0YXRfcGF0aCk7CisgICAgICBpZiAoZnJvbV90aW1lLnR2X3NlYyA8IHRv
X3RpbWUudHZfc2VjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBpZiAoZnJvbV90aW1l
LnR2X3NlYyA9PSB0b190aW1lLnR2X3NlYyAmJgorICAgICAgICAgIGZyb21fdGltZS50dl9uc2Vj
IDw9IHRvX3RpbWUudHZfbnNlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGlmICghdG9fZXhpc3RzIHx8IG92ZXJ3cml0ZV9leGlzdGluZykK
KyAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmZpbGVfZXhp
c3RzKTsKKyAgfSgpOworICBpZiAoIVNob3VsZENvcHkpCisgICAgcmV0dXJuIGZhbHNlOworCisg
IC8vIERvbid0IHRydW5jYXRlIHJpZ2h0IGF3YXkuIFdlIG1heSBub3QgYmUgb3BlbmluZyB0aGUg
ZmlsZSB3ZSBvcmlnaW5hbGx5CisgIC8vIGxvb2tlZCBhdDsgd2UnbGwgY2hlY2sgdGhpcyBsYXRl
ci4KKyAgaW50IHRvX29wZW5fZmxhZ3MgPSBPX1dST05MWTsKKyAgaWYgKCF0b19leGlzdHMpCisg
ICAgdG9fb3Blbl9mbGFncyB8PSBPX0NSRUFUOworICBGaWxlRGVzY3JpcHRvciB0b19mZCA9IEZp
bGVEZXNjcmlwdG9yOjpjcmVhdGVfd2l0aF9zdGF0dXMoCisgICAgICAmdG8sIG1fZWMsIHRvX29w
ZW5fZmxhZ3MsIGZyb21fc3RhdC5zdF9tb2RlKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVy
ci5yZXBvcnQobV9lYyk7CisKKyAgaWYgKHRvX2V4aXN0cykgeworICAgIC8vIENoZWNrIHRoYXQg
dGhlIGZpbGUgd2UgaW5pdGlhbGx5IHN0YXQnZWQgaXMgZXF1aXZhbGVudCB0byB0aGUgb25lCisg
ICAgLy8gd2Ugb3BlbmVkLgorICAgIC8vIEZJWE1FOiByZXBvcnQgdGhpcyBiZXR0ZXIuCisgICAg
aWYgKCFkZXRhaWw6OnN0YXRfZXF1aXZhbGVudCh0b19zdGF0X3BhdGgsIHRvX2ZkLmdldF9zdGF0
KCkpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6YmFkX2ZpbGVfZGVzY3JpcHRvcik7
CisKKyAgICAvLyBTZXQgdGhlIHBlcm1pc3Npb25zIGFuZCB0cnVuY2F0ZSB0aGUgZmlsZSB3ZSBv
cGVuZWQuCisgICAgaWYgKGRldGFpbDo6cG9zaXhfZmNobW9kKHRvX2ZkLCBmcm9tX3N0YXQsIG1f
ZWMpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgaWYgKGRldGFpbDo6cG9z
aXhfZnRydW5jYXRlKHRvX2ZkLCAwLCBtX2VjKSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMpOworICB9CisKKyAgaWYgKCFjb3B5X2ZpbGVfaW1wbChmcm9tX2ZkLCB0b19mZCwgbV9lYykp
IHsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBkZXN0IGZpbGUgaWYgd2UgZmFpbGVkLCBhbmQg
aXQgZGlkbid0IGV4aXN0IHByZXZpb3VzbHkuCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7
CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBfX2NvcHlfc3ltbGluayhjb25zdCBw
YXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgY29uc3QgcGF0aCByZWFsX3BhdGgoX19y
ZWFkX3N5bWxpbmsoZXhpc3Rpbmdfc3ltbGluaywgZWMpKTsKKyAgaWYgKGVjICYmICplYykgewor
ICAgIHJldHVybjsKKyAgfQorICAvLyBOT1RFOiBwcm9wb3NhbCBzYXlzIHlvdSBzaG91bGQgZGV0
ZWN0IGlmIHlvdSBzaG91bGQgY2FsbAorICAvLyBjcmVhdGVfc3ltbGluayBvciBjcmVhdGVfZGly
ZWN0b3J5X3N5bWxpbmsuIEkgZG9uJ3QgdGhpbmsgdGhpcworICAvLyBpcyBuZWVkZWQgd2l0aCBQ
T1NJWAorICBfX2NyZWF0ZV9zeW1saW5rKHJlYWxfcGF0aCwgbmV3X3N5bWxpbmssIGVjKTsKK30K
KworYm9vbCBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3JpZXMiLCBlYywg
JnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgYXV0byBjb25zdCBzdCA9IGRldGFpbDo6cG9z
aXhfc3RhdChwLCAmbV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChtX2VjKTsKKyAgZWxzZSBpZiAoaXNfZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1
cm4gZmFsc2U7CisgIGVsc2UgaWYgKGV4aXN0cyhzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQo
ZXJyYzo6ZmlsZV9leGlzdHMpOworCisgIGNvbnN0IHBhdGggcGFyZW50ID0gcC5wYXJlbnRfcGF0
aCgpOworICBpZiAoIXBhcmVudC5lbXB0eSgpKSB7CisgICAgY29uc3QgZmlsZV9zdGF0dXMgcGFy
ZW50X3N0ID0gc3RhdHVzKHBhcmVudCwgbV9lYyk7CisgICAgaWYgKG5vdCBzdGF0dXNfa25vd24o
cGFyZW50X3N0KSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIGlmIChub3Qg
ZXhpc3RzKHBhcmVudF9zdCkpIHsKKyAgICAgIF9fY3JlYXRlX2RpcmVjdG9yaWVzKHBhcmVudCwg
ZWMpOworICAgICAgaWYgKGVjICYmICplYykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgfQorICB9CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkocCwgZWMpOworfQor
Citib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykg
eworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3J5IiwgZWMsICZwKTsK
KworICBpZiAoOjpta2RpcihwLmNfc3RyKCksIHN0YXRpY19jYXN0PGludD4ocGVybXM6OmFsbCkp
ID09IDApCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChlcnJubyAhPSBFRVhJU1QpCisgICAgZXJy
LnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgX19j
cmVhdGVfZGlyZWN0b3J5KHBhdGggY29uc3QmIHAsIHBhdGggY29uc3QmIGF0dHJpYnV0ZXMsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJlY3Rv
cnkiLCBlYywgJnAsICZhdHRyaWJ1dGVzKTsKKworICBTdGF0VCBhdHRyX3N0YXQ7CisgIGVycm9y
X2NvZGUgbWVjOworICBhdXRvIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KGF0dHJpYnV0ZXMsIGF0
dHJfc3RhdCwgJm1lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChtZWMpOworICBpZiAoIWlzX2RpcmVjdG9yeShzdCkpCisgICAgcmV0dXJuIGVyci5y
ZXBvcnQoZXJyYzo6bm90X2FfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICJ0aGUg
c3BlY2lmaWVkIGF0dHJpYnV0ZSBwYXRoIGlzIGludmFsaWQiKTsKKworICBpZiAoOjpta2Rpcihw
LmNfc3RyKCksIGF0dHJfc3RhdC5zdF9tb2RlKSA9PSAwKQorICAgIHJldHVybiB0cnVlOworICBp
ZiAoZXJybm8gIT0gRUVYSVNUKQorICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKHBhdGgg
Y29uc3QmIGZyb20sIHBhdGggY29uc3QmIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjcmVhdGVf
ZGlyZWN0b3J5X3N5bWxpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OnN5bWxpbmsoZnJv
bS5jX3N0cigpLCB0by5jX3N0cigpKSAhPSAwKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIGZy
b20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9p
ZD4gZXJyKCJjcmVhdGVfaGFyZF9saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpsaW5r
KGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKK30KKwordm9pZCBfX2NyZWF0ZV9zeW1saW5rKHBhdGggY29uc3Qm
IGZyb20sIHBhdGggY29uc3QmIHRvLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
dm9pZD4gZXJyKCJjcmVhdGVfc3ltbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6c3lt
bGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIHJldHVybiBlcnIucmVw
b3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3BhdGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29k
ZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY3VycmVudF9wYXRoIiwgZWMpOwor
CisgIGF1dG8gc2l6ZSA9IDo6cGF0aGNvbmYoIi4iLCBfUENfUEFUSF9NQVgpOworICBfTElCQ1BQ
X0FTU0VSVChzaXplID49IDAsICJwYXRoY29uZiByZXR1cm5lZCBhIDAgYXMgbWF4IHNpemUiKTsK
KworICBhdXRvIGJ1ZmYgPSB1bmlxdWVfcHRyPGNoYXJbXT4obmV3IGNoYXJbc2l6ZSArIDFdKTsK
KyAgY2hhciogcmV0OworICBpZiAoKHJldCA9IDo6Z2V0Y3dkKGJ1ZmYuZ2V0KCksIHN0YXRpY19j
YXN0PHNpemVfdD4oc2l6ZSkpKSA9PSBudWxscHRyKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNh
cHR1cmVfZXJybm8oKSwgImNhbGwgdG8gZ2V0Y3dkIGZhaWxlZCIpOworCisgIHJldHVybiB7YnVm
Zi5nZXQoKX07Cit9CisKK3ZvaWQgX19jdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiY3VycmVudF9wYXRoIiwgZWMs
ICZwKTsKKyAgaWYgKDo6Y2hkaXIocC5jX3N0cigpKSA9PSAtMSkKKyAgICBlcnIucmVwb3J0KGNh
cHR1cmVfZXJybm8oKSk7Cit9CisKK2Jvb2wgX19lcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBj
b25zdCBwYXRoJiBwMiwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVy
cigiZXF1aXZhbGVudCIsIGVjLCAmcDEsICZwMik7CisKKyAgZXJyb3JfY29kZSBlYzEsIGVjMjsK
KyAgU3RhdFQgc3QxID0ge30sIHN0MiA9IHt9OworICBhdXRvIHMxID0gZGV0YWlsOjpwb3NpeF9z
dGF0KHAxLm5hdGl2ZSgpLCBzdDEsICZlYzEpOworICBpZiAoIWV4aXN0cyhzMSkpCisgICAgcmV0
dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisgIGF1dG8gczIgPSBkZXRhaWw6
OnBvc2l4X3N0YXQocDIubmF0aXZlKCksIHN0MiwgJmVjMik7CisgIGlmICghZXhpc3RzKHMyKSkK
KyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKworICByZXR1cm4g
ZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoc3QxLCBzdDIpOworfQorCit1aW50bWF4X3QgX19maWxl
X3NpemUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHVp
bnRtYXhfdD4gZXJyKCJmaWxlX3NpemUiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsK
KyAgU3RhdFQgc3Q7CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBz
dCwgJm1fZWMpOworICBpZiAoIWV4aXN0cyhmc3QpIHx8ICFpc19yZWd1bGFyX2ZpbGUoZnN0KSkg
eworICAgIGVycmMgZXJyb3Jfa2luZCA9CisgICAgICAgIGlzX2RpcmVjdG9yeShmc3QpID8gZXJy
Yzo6aXNfYV9kaXJlY3RvcnkgOiBlcnJjOjpub3Rfc3VwcG9ydGVkOworICAgIGlmICghbV9lYykK
KyAgICAgIG1fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyb3Jfa2luZCk7CisgICAgcmV0dXJuIGVy
ci5yZXBvcnQobV9lYyk7CisgIH0KKyAgLy8gaXNfcmVndWxhcl9maWxlKHApID09IHRydWUKKyAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oc3Quc3Rfc2l6ZSk7Cit9CisKK3VpbnRtYXhf
dCBfX2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBF
cnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoImhhcmRfbGlua19jb3VudCIsIGVjLCAmcCk7CisK
KyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBzdDsKKyAgZGV0YWlsOjpwb3NpeF9zdGF0KHAs
IHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOwor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90PihzdC5zdF9ubGluayk7Cit9CisKK2Jvb2wg
X19mc19pc19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhh
bmRsZXI8Ym9vbD4gZXJyKCJpc19lbXB0eSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2Vj
OworICBTdGF0VCBwc3Q7CisgIGF1dG8gc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgcHN0LCAm
bV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICBlbHNl
IGlmICghaXNfZGlyZWN0b3J5KHN0KSAmJiAhaXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICByZXR1
cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKyAgZWxzZSBpZiAoaXNfZGlyZWN0
b3J5KHN0KSkgeworICAgIGF1dG8gaXQgPSBlYyA/IGRpcmVjdG9yeV9pdGVyYXRvcihwLCAqZWMp
IDogZGlyZWN0b3J5X2l0ZXJhdG9yKHApOworICAgIGlmIChlYyAmJiAqZWMpCisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGl0ID09IGRpcmVjdG9yeV9pdGVyYXRvcnt9OworICB9IGVs
c2UgaWYgKGlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnRt
YXhfdD4ocHN0LnN0X3NpemUpID09IDA7CisKKyAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworfQor
CitzdGF0aWMgZmlsZV90aW1lX3R5cGUgX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShjb25zdCBw
YXRoJiBwLCBjb25zdCBTdGF0VCYgc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBkZXRhaWw6OmZzX3Rp
bWU7CisgIEVycm9ySGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJyKCJsYXN0X3dyaXRlX3RpbWUi
LCBlYywgJnApOworCisgIGF1dG8gdHMgPSBkZXRhaWw6OmV4dHJhY3RfbXRpbWUoc3QpOworICBp
ZiAoIWZzX3RpbWU6OmlzX3JlcHJlc2VudGFibGUodHMpKQorICAgIHJldHVybiBlcnIucmVwb3J0
KGVycmM6OnZhbHVlX3Rvb19sYXJnZSk7CisKKyAgcmV0dXJuIGZzX3RpbWU6OmNvbnZlcnRfZnJv
bV90aW1lc3BlYyh0cyk7Cit9CisKK2ZpbGVfdGltZV90eXBlIF9fbGFzdF93cml0ZV90aW1lKGNv
bnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIG5hbWVzcGFjZSBjaHJvbm87
CisgIEVycm9ySGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBl
YywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7CisgIGRldGFpbDo6cG9z
aXhfc3RhdChwLCBzdCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChtX2VjKTsKKyAgcmV0dXJuIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUocCwgc3QsIGVjKTsK
K30KKwordm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlw
ZSBuZXdfdGltZSwgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWlsOjpmc190aW1lOwor
ICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOworCisg
IGVycm9yX2NvZGUgbV9lYzsKKyAgYXJyYXk8VGltZVNwZWMsIDI+IHRidWY7CisjaWYgIWRlZmlu
ZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBh
IHJhY2UgY29uZGl0aW9uIGJldHdlZW4gZGV0ZXJtaW5pbmcgdGhlCisgIC8vIGxhc3QgYWNjZXNz
IHRpbWUgYW5kIGF0dGVtcHRpbmcgdG8gc2V0IGl0IHRvIHRoZSBzYW1lIHZhbHVlIHVzaW5nCisg
IC8vIDo6dXRpbWVzCisgIFN0YXRUIHN0OworICBmaWxlX3N0YXR1cyBmc3QgPSBkZXRhaWw6OnBv
c2l4X3N0YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBv
cnQobV9lYyk7CisgIHRidWZbMF0gPSBkZXRhaWw6OmV4dHJhY3RfYXRpbWUoc3QpOworI2Vsc2UK
KyAgdGJ1ZlswXS50dl9zZWMgPSAwOworICB0YnVmWzBdLnR2X25zZWMgPSBVVElNRV9PTUlUOwor
I2VuZGlmCisgIGlmICghZnNfdGltZTo6Y29udmVydF90b190aW1lc3BlYyh0YnVmWzFdLCBuZXdf
dGltZSkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6dmFsdWVfdG9vX2xhcmdlKTsKKwor
ICBkZXRhaWw6OnNldF9maWxlX3RpbWVzKHAsIHRidWYsIG1fZWMpOworICBpZiAobV9lYykKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKK30KKwordm9pZCBfX3Blcm1pc3Npb25zKGNvbnN0
IHBhdGgmIHAsIHBlcm1zIHBybXMsIHBlcm1fb3B0aW9ucyBvcHRzLAorICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInBlcm1pc3Np
b25zIiwgZWMsICZwKTsKKworICBhdXRvIGhhc19vcHQgPSBbJl0ocGVybV9vcHRpb25zIG8pIHsg
cmV0dXJuIGJvb2wobyAmIG9wdHMpOyB9OworICBjb25zdCBib29sIHJlc29sdmVfc3ltbGlua3Mg
PSAhaGFzX29wdChwZXJtX29wdGlvbnM6Om5vZm9sbG93KTsKKyAgY29uc3QgYm9vbCBhZGRfcGVy
bXMgPSBoYXNfb3B0KHBlcm1fb3B0aW9uczo6YWRkKTsKKyAgY29uc3QgYm9vbCByZW1vdmVfcGVy
bXMgPSBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVtb3ZlKTsKKyAgX0xJQkNQUF9BU1NFUlQoCisg
ICAgICAoYWRkX3Blcm1zICsgcmVtb3ZlX3Blcm1zICsgaGFzX29wdChwZXJtX29wdGlvbnM6OnJl
cGxhY2UpKSA9PSAxLAorICAgICAgIk9uZSBhbmQgb25seSBvbmUgb2YgdGhlIHBlcm1fb3B0aW9u
cyBjb25zdGFudHMgcmVwbGFjZSwgYWRkLCBvciByZW1vdmUgIgorICAgICAgImlzIHByZXNlbnQg
aW4gb3B0cyIpOworCisgIGJvb2wgc2V0X3N5bV9wZXJtcyA9IGZhbHNlOworICBwcm1zICY9IHBl
cm1zOjptYXNrOworICBpZiAoIXJlc29sdmVfc3ltbGlua3MgfHwgKGFkZF9wZXJtcyB8fCByZW1v
dmVfcGVybXMpKSB7CisgICAgZXJyb3JfY29kZSBtX2VjOworICAgIGZpbGVfc3RhdHVzIHN0ID0g
cmVzb2x2ZV9zeW1saW5rcyA/IGRldGFpbDo6cG9zaXhfc3RhdChwLCAmbV9lYykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAsICZt
X2VjKTsKKyAgICBzZXRfc3ltX3Blcm1zID0gaXNfc3ltbGluayhzdCk7CisgICAgaWYgKG1fZWMp
CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBfTElCQ1BQX0FTU0VSVChzdC5w
ZXJtaXNzaW9ucygpICE9IHBlcm1zOjp1bmtub3duLAorICAgICAgICAgICAgICAgICAgICJQZXJt
aXNzaW9ucyB1bmV4cGVjdGVkbHkgdW5rbm93biIpOworICAgIGlmIChhZGRfcGVybXMpCisgICAg
ICBwcm1zIHw9IHN0LnBlcm1pc3Npb25zKCk7CisgICAgZWxzZSBpZiAocmVtb3ZlX3Blcm1zKQor
ICAgICAgcHJtcyA9IHN0LnBlcm1pc3Npb25zKCkgJiB+cHJtczsKKyAgfQorICBjb25zdCBhdXRv
IHJlYWxfcGVybXMgPSBkZXRhaWw6OnBvc2l4X2NvbnZlcnRfcGVybXMocHJtcyk7CisKKyNpZiBk
ZWZpbmVkKEFUX1NZTUxJTktfTk9GT0xMT1cpICYmIGRlZmluZWQoQVRfRkRDV0QpCisgIGNvbnN0
IGludCBmbGFncyA9IHNldF9zeW1fcGVybXMgPyBBVF9TWU1MSU5LX05PRk9MTE9XIDogMDsKKyAg
aWYgKDo6ZmNobW9kYXQoQVRfRkRDV0QsIHAuY19zdHIoKSwgcmVhbF9wZXJtcywgZmxhZ3MpID09
IC0xKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgfQorI2Vs
c2UKKyAgaWYgKHNldF9zeW1fcGVybXMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6b3Bl
cmF0aW9uX25vdF9zdXBwb3J0ZWQpOworICBpZiAoOjpjaG1vZChwLmNfc3RyKCksIHJlYWxfcGVy
bXMpID09IC0xKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAg
fQorI2VuZGlmCit9CisKK3BhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigicmVhZF9zeW1saW5rIiwgZWMs
ICZwKTsKKworICBjaGFyIGJ1ZmZbUEFUSF9NQVggKyAxXTsKKyAgZXJyb3JfY29kZSBtX2VjOwor
ICA6OnNzaXplX3QgcmV0OworICBpZiAoKHJldCA9IDo6cmVhZGxpbmsocC5jX3N0cigpLCBidWZm
LCBQQVRIX01BWCkpID09IC0xKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJu
bygpKTsKKyAgfQorICBfTElCQ1BQX0FTU0VSVChyZXQgPD0gUEFUSF9NQVgsICJUT0RPIik7Cisg
IF9MSUJDUFBfQVNTRVJUKHJldCA+IDAsICJUT0RPIik7CisgIGJ1ZmZbcmV0XSA9IDA7CisgIHJl
dHVybiB7YnVmZn07Cit9CisKK2Jvb2wgX19yZW1vdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigicmVtb3ZlIiwgZWMsICZwKTsKKyAg
aWYgKDo6cmVtb3ZlKHAuY19zdHIoKSkgPT0gLTEpIHsKKyAgICBpZiAoZXJybm8gIT0gRU5PRU5U
KQorICAgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworbmFtZXNwYWNlIHsKKwordWludG1heF90IHJlbW92
ZV9hbGxfaW1wbChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlJiBlYykgeworICBjb25zdCBhdXRv
IG5wb3MgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAgY29uc3QgZmlsZV9zdGF0dXMg
c3QgPSBfX3N5bWxpbmtfc3RhdHVzKHAsICZlYyk7CisgIGlmIChlYykKKyAgICByZXR1cm4gbnBv
czsKKyAgdWludG1heF90IGNvdW50ID0gMTsKKyAgaWYgKGlzX2RpcmVjdG9yeShzdCkpIHsKKyAg
ICBmb3IgKGRpcmVjdG9yeV9pdGVyYXRvciBpdChwLCBlYyk7ICFlYyAmJiBpdCAhPSBkaXJlY3Rv
cnlfaXRlcmF0b3IoKTsKKyAgICAgICAgIGl0LmluY3JlbWVudChlYykpIHsKKyAgICAgIGF1dG8g
b3RoZXJfY291bnQgPSByZW1vdmVfYWxsX2ltcGwoaXQtPnBhdGgoKSwgZWMpOworICAgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gbnBvczsKKyAgICAgIGNvdW50ICs9IG90aGVyX2NvdW50Owor
ICAgIH0KKyAgICBpZiAoZWMpCisgICAgICByZXR1cm4gbnBvczsKKyAgfQorICBpZiAoIV9fcmVt
b3ZlKHAsICZlYykpCisgICAgcmV0dXJuIG5wb3M7CisgIHJldHVybiBjb3VudDsKK30KKworfSAv
LyBlbmQgbmFtZXNwYWNlCisKK3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJyZW1vdmVf
YWxsIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1lYzsKKyAgYXV0byBjb3VudCA9IHJlbW92
ZV9hbGxfaW1wbChwLCBtZWMpOworICBpZiAobWVjKSB7CisgICAgaWYgKG1lYyA9PSBlcnJjOjpu
b19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KQorICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGVy
ci5yZXBvcnQobWVjKTsKKyAgfQorICByZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQgX19yZW5hbWUo
Y29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVy
cm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlbmFtZSIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6
cmVuYW1lKGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCisgICAgZXJyLnJlcG9ydChj
YXB0dXJlX2Vycm5vKCkpOworfQorCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwg
dWludG1heF90IHNpemUsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBl
cnIoInJlc2l6ZV9maWxlIiwgZWMsICZwKTsKKyAgaWYgKDo6dHJ1bmNhdGUocC5jX3N0cigpLCBz
dGF0aWNfY2FzdDwgOjpvZmZfdD4oc2l6ZSkpID09IC0xKQorICAgIHJldHVybiBlcnIucmVwb3J0
KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3NwYWNlX2luZm8gX19zcGFjZShjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJzcGFjZSIsIGVj
LCAmcCk7CisgIHNwYWNlX2luZm8gc2k7CisgIHN0cnVjdCBzdGF0dmZzIG1fc3ZmcyA9IHt9Owor
ICBpZiAoOjpzdGF0dmZzKHAuY19zdHIoKSwgJm1fc3ZmcykgPT0gLTEpIHsKKyAgICBlcnIucmVw
b3J0KGNhcHR1cmVfZXJybm8oKSk7CisgICAgc2kuY2FwYWNpdHkgPSBzaS5mcmVlID0gc2kuYXZh
aWxhYmxlID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgICAgcmV0dXJuIHNpOworICB9
CisgIC8vIE11bHRpcGx5IHdpdGggb3ZlcmZsb3cgY2hlY2tpbmcuCisgIGF1dG8gZG9fbXVsdCA9
IFsmXSh1aW50bWF4X3QmIG91dCwgdWludG1heF90IG90aGVyKSB7CisgICAgb3V0ID0gb3RoZXIg
KiBtX3N2ZnMuZl9mcnNpemU7CisgICAgaWYgKG90aGVyID09IDAgfHwgb3V0IC8gb3RoZXIgIT0g
bV9zdmZzLmZfZnJzaXplKQorICAgICAgb3V0ID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7
CisgIH07CisgIGRvX211bHQoc2kuY2FwYWNpdHksIG1fc3Zmcy5mX2Jsb2Nrcyk7CisgIGRvX211
bHQoc2kuZnJlZSwgbV9zdmZzLmZfYmZyZWUpOworICBkb19tdWx0KHNpLmF2YWlsYWJsZSwgbV9z
dmZzLmZfYmF2YWlsKTsKKyAgcmV0dXJuIHNpOworfQorCitmaWxlX3N0YXR1cyBfX3N0YXR1cyhj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICByZXR1cm4gZGV0YWlsOjpwb3NpeF9z
dGF0KHAsIGVjKTsKK30KKworZmlsZV9zdGF0dXMgX19zeW1saW5rX3N0YXR1cyhjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYykgeworICByZXR1cm4gZGV0YWlsOjpwb3NpeF9sc3RhdChwLCBl
Yyk7Cit9CisKK3BhdGggX190ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUqIGVjKSB7Cisg
IEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoInRlbXBfZGlyZWN0b3J5X3BhdGgiLCBlYyk7CisKKyAg
Y29uc3QgY2hhciogZW52X3BhdGhzW10gPSB7IlRNUERJUiIsICJUTVAiLCAiVEVNUCIsICJURU1Q
RElSIn07CisgIGNvbnN0IGNoYXIqIHJldCA9IG51bGxwdHI7CisKKyAgZm9yIChhdXRvJiBlcCA6
IGVudl9wYXRocykKKyAgICBpZiAoKHJldCA9IGdldGVudihlcCkpKQorICAgICAgYnJlYWs7Cisg
IGlmIChyZXQgPT0gbnVsbHB0cikKKyAgICByZXQgPSAiL3RtcCI7CisKKyAgcGF0aCBwKHJldCk7
CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X3N0
YXQocCwgJm1fZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0dXJuIGVyci5y
ZXBvcnQobV9lYywgImNhbm5vdCBhY2Nlc3MgcGF0aCBcIiVzXCIiLCBwKTsKKworICBpZiAoIWV4
aXN0cyhzdCkgfHwgIWlzX2RpcmVjdG9yeShzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJy
Yzo6bm90X2FfZGlyZWN0b3J5LCAicGF0aCBcIiVzXCIgaXMgbm90IGEgZGlyZWN0b3J5IiwKKyAg
ICAgICAgICAgICAgICAgICAgICBwKTsKKworICByZXR1cm4gcDsKK30KKworcGF0aCBfX3dlYWts
eV9jYW5vbmljYWwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5k
bGVyPHBhdGg+IGVycigid2Vha2x5X2Nhbm9uaWNhbCIsIGVjLCAmcCk7CisKKyAgaWYgKHAuZW1w
dHkoKSkKKyAgICByZXR1cm4gX19jYW5vbmljYWwoIiIsIGVjKTsKKworICBwYXRoIHJlc3VsdDsK
KyAgcGF0aCB0bXA7CisgIHRtcC5fX3Jlc2VydmUocC5uYXRpdmUoKS5zaXplKCkpOworICBhdXRv
IFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlRW5kKHAubmF0aXZlKCkpOworICAtLVBQOworICB2ZWN0
b3I8c3RyaW5nX3ZpZXdfdD4gRE5FUGFydHM7CisKKyAgd2hpbGUgKFBQLlN0YXRlICE9IFBhdGhQ
YXJzZXI6OlBTX0JlZm9yZUJlZ2luKSB7CisgICAgdG1wLmFzc2lnbihjcmVhdGVWaWV3KHAubmF0
aXZlKCkuZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKSk7CisgICAgZXJyb3JfY29kZSBtX2Vj
OworICAgIGZpbGVfc3RhdHVzIHN0ID0gX19zdGF0dXModG1wLCAmbV9lYyk7CisgICAgaWYgKCFz
dGF0dXNfa25vd24oc3QpKSB7CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICB9
IGVsc2UgaWYgKGV4aXN0cyhzdCkpIHsKKyAgICAgIHJlc3VsdCA9IF9fY2Fub25pY2FsKHRtcCwg
ZWMpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIERORVBhcnRzLnB1c2hfYmFjaygqUFApOwor
ICAgIC0tUFA7CisgIH0KKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0JlZm9yZUJl
Z2luKQorICAgIHJlc3VsdCA9IF9fY2Fub25pY2FsKCIiLCBlYyk7CisgIGlmIChlYykKKyAgICBl
Yy0+Y2xlYXIoKTsKKyAgaWYgKERORVBhcnRzLmVtcHR5KCkpCisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgZm9yIChhdXRvIEl0ID0gRE5FUGFydHMucmJlZ2luKCk7IEl0ICE9IERORVBhcnRzLnJlbmQo
KTsgKytJdCkKKyAgICByZXN1bHQgLz0gKkl0OworICByZXR1cm4gcmVzdWx0LmxleGljYWxseV9u
b3JtYWwoKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGF0aCBkZWZpbml0aW9ucworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitj
b25zdGV4cHIgcGF0aDo6dmFsdWVfdHlwZSBwYXRoOjpwcmVmZXJyZWRfc2VwYXJhdG9yOworCitw
YXRoJiBwYXRoOjpyZXBsYWNlX2V4dGVuc2lvbihwYXRoIGNvbnN0JiByZXBsYWNlbWVudCkgewor
ICBwYXRoIHAgPSBleHRlbnNpb24oKTsKKyAgaWYgKG5vdCBwLmVtcHR5KCkpIHsKKyAgICBfX3Bu
Xy5lcmFzZShfX3BuXy5zaXplKCkgLSBwLm5hdGl2ZSgpLnNpemUoKSk7CisgIH0KKyAgaWYgKCFy
ZXBsYWNlbWVudC5lbXB0eSgpKSB7CisgICAgaWYgKHJlcGxhY2VtZW50Lm5hdGl2ZSgpWzBdICE9
ICcuJykgeworICAgICAgX19wbl8gKz0gIi4iOworICAgIH0KKyAgICBfX3BuXy5hcHBlbmQocmVw
bGFjZW1lbnQuX19wbl8pOworICB9CisgIHJldHVybiAqdGhpczsKK30KKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworLy8gcGF0aC5kZWNvbXBvc2UKKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3Jv
b3RfbmFtZSgpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9f
cG5fKTsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpCisgICAg
cmV0dXJuICpQUDsKKyAgcmV0dXJuIHt9OworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9v
dF9kaXJlY3RvcnkoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdp
bihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKQor
ICAgICsrUFA7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisg
ICAgcmV0dXJuICpQUDsKKyAgcmV0dXJuIHt9OworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9f
cm9vdF9wYXRoX3JhdygpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJl
Z2luKF9fcG5fKTsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUp
IHsKKyAgICBhdXRvIE5leHRDaCA9IFBQLnBlZWsoKTsKKyAgICBpZiAoTmV4dENoICYmICpOZXh0
Q2ggPT0gJy8nKSB7CisgICAgICArK1BQOworICAgICAgcmV0dXJuIGNyZWF0ZVZpZXcoX19wbl8u
ZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKTsKKyAgICB9CisgICAgcmV0dXJuIFBQLlJhd0Vu
dHJ5OworICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisg
ICAgcmV0dXJuICpQUDsKKyAgcmV0dXJuIHt9OworfQorCitzdGF0aWMgYm9vbCBDb25zdW1lUm9v
dERpcihQYXRoUGFyc2VyKiBQUCkgeworICB3aGlsZSAoUFAtPlN0YXRlIDw9IFBhdGhQYXJzZXI6
OlBTX0luUm9vdERpcikKKyAgICArKygqUFApOworICByZXR1cm4gUFAtPlN0YXRlID09IFBhdGhQ
YXJzZXI6OlBTX0F0RW5kOworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcmVsYXRpdmVfcGF0
aCgpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsK
KyAgaWYgKENvbnN1bWVSb290RGlyKCZQUCkpCisgICAgcmV0dXJuIHt9OworICByZXR1cm4gY3Jl
YXRlVmlldyhQUC5SYXdFbnRyeS5kYXRhKCksICZfX3BuXy5iYWNrKCkpOworfQorCitzdHJpbmdf
dmlld190IHBhdGg6Ol9fcGFyZW50X3BhdGgoKSBjb25zdCB7CisgIGlmIChlbXB0eSgpKQorICAg
IHJldHVybiB7fTsKKyAgLy8gRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByb290IHBhdGggYnV0IG5v
dCBhIHJlbGF0aXZlIHBhdGguIEluIHRoYXQgY2FzZQorICAvLyByZXR1cm4gKnRoaXMuCisgIHsK
KyAgICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGlmIChD
b25zdW1lUm9vdERpcigmUFApKQorICAgICAgcmV0dXJuIF9fcG5fOworICB9CisgIC8vIE90aGVy
d2lzZSByZW1vdmUgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBlbmQgb2YgdGhlIHBhdGgsIGFu
ZCByZXR1cm4KKyAgLy8gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoYXQgcGF0aAorICB7CisgICAg
YXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUVuZChfX3BuXyk7CisgICAgLS1QUDsKKyAgICBp
ZiAoUFAuUmF3RW50cnkuZGF0YSgpID09IF9fcG5fLmRhdGEoKSkKKyAgICAgIHJldHVybiB7fTsK
KyAgICAtLVBQOworICAgIHJldHVybiBjcmVhdGVWaWV3KF9fcG5fLmRhdGEoKSwgJlBQLlJhd0Vu
dHJ5LmJhY2soKSk7CisgIH0KK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2ZpbGVuYW1lKCkg
Y29uc3QgeworICBpZiAoZW1wdHkoKSkKKyAgICByZXR1cm4ge307CisgIHsKKyAgICBQYXRoUGFy
c2VyIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGlmIChDb25zdW1l
Um9vdERpcigmUFApKQorICAgICAgcmV0dXJuIHt9OworICB9CisgIHJldHVybiAqKC0tUGF0aFBh
cnNlcjo6Q3JlYXRlRW5kKF9fcG5fKSk7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19zdGVt
KCkgY29uc3QgeworICByZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1l
KCkpLmZpcnN0OworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fZXh0ZW5zaW9uKCkgY29uc3Qg
eworICByZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1lKCkpLnNlY29u
ZDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5nZW4KKworZW51bSBQYXRoUGFy
dEtpbmQgOiB1bnNpZ25lZCBjaGFyIHsKKyAgUEtfTm9uZSwKKyAgUEtfUm9vdFNlcCwKKyAgUEtf
RmlsZW5hbWUsCisgIFBLX0RvdCwKKyAgUEtfRG90RG90LAorICBQS19UcmFpbGluZ1NlcAorfTsK
Kworc3RhdGljIFBhdGhQYXJ0S2luZCBDbGFzc2lmeVBhdGhQYXJ0KHN0cmluZ192aWV3X3QgUGFy
dCkgeworICBpZiAoUGFydC5lbXB0eSgpKQorICAgIHJldHVybiBQS19UcmFpbGluZ1NlcDsKKyAg
aWYgKFBhcnQgPT0gIi4iKQorICAgIHJldHVybiBQS19Eb3Q7CisgIGlmIChQYXJ0ID09ICIuLiIp
CisgICAgcmV0dXJuIFBLX0RvdERvdDsKKyAgaWYgKFBhcnQgPT0gIi8iKQorICAgIHJldHVybiBQ
S19Sb290U2VwOworICByZXR1cm4gUEtfRmlsZW5hbWU7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNh
bGx5X25vcm1hbCgpIGNvbnN0IHsKKyAgaWYgKF9fcG5fLmVtcHR5KCkpCisgICAgcmV0dXJuICp0
aGlzOworCisgIHVzaW5nIFBhcnRLaW5kUGFpciA9IHBhaXI8c3RyaW5nX3ZpZXdfdCwgUGF0aFBh
cnRLaW5kPjsKKyAgdmVjdG9yPFBhcnRLaW5kUGFpcj4gUGFydHM7CisgIC8vIEd1ZXNzIGFzIHRv
IGhvdyBtYW55IGVsZW1lbnRzIHRoZSBwYXRoIGhhcyB0byBhdm9pZCByZWFsbG9jYXRpbmcuCisg
IFBhcnRzLnJlc2VydmUoMzIpOworCisgIC8vIFRyYWNrIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBw
YXJ0cyBhcyB3ZSBjb2xsZWN0IHRoZW0uIFRoaXMgYWxsb3dzIHRoZQorICAvLyByZXN1bHRpbmcg
cGF0aCB0byByZXNlcnZlIHRoZSBjb3JyZWN0IGFtb3VudCBvZiBtZW1vcnkuCisgIHNpemVfdCBO
ZXdQYXRoU2l6ZSA9IDA7CisgIGF1dG8gQWRkUGFydCA9IFsmXShQYXRoUGFydEtpbmQgSywgc3Ry
aW5nX3ZpZXdfdCBQKSB7CisgICAgTmV3UGF0aFNpemUgKz0gUC5zaXplKCk7CisgICAgUGFydHMu
ZW1wbGFjZV9iYWNrKFAsIEspOworICB9OworICBhdXRvIExhc3RQYXJ0S2luZCA9IFsmXSgpIHsK
KyAgICBpZiAoUGFydHMuZW1wdHkoKSkKKyAgICAgIHJldHVybiBQS19Ob25lOworICAgIHJldHVy
biBQYXJ0cy5iYWNrKCkuc2Vjb25kOworICB9OworCisgIGJvb2wgTWF5YmVOZWVkVHJhaWxpbmdT
ZXAgPSBmYWxzZTsKKyAgLy8gQnVpbGQgYSBzdGFjayBjb250YWluaW5nIHRoZSByZW1haW5pbmcg
ZWxlbWVudHMgb2YgdGhlIHBhdGgsIHBvcHBpbmcgb2ZmCisgIC8vIGVsZW1lbnRzIHdoaWNoIG9j
Y3VyIGJlZm9yZSBhICcuLicgZW50cnkuCisgIGZvciAoYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNy
ZWF0ZUJlZ2luKF9fcG5fKTsgUFA7ICsrUFApIHsKKyAgICBhdXRvIFBhcnQgPSAqUFA7CisgICAg
UGF0aFBhcnRLaW5kIEtpbmQgPSBDbGFzc2lmeVBhdGhQYXJ0KFBhcnQpOworICAgIHN3aXRjaCAo
S2luZCkgeworICAgIGNhc2UgUEtfRmlsZW5hbWU6CisgICAgY2FzZSBQS19Sb290U2VwOiB7Cisg
ICAgICAvLyBBZGQgYWxsIG5vbi1kb3QgYW5kIG5vbi1kb3QtZG90IGVsZW1lbnRzIHRvIHRoZSBz
dGFjayBvZiBlbGVtZW50cy4KKyAgICAgIEFkZFBhcnQoS2luZCwgUGFydCk7CisgICAgICBNYXli
ZU5lZWRUcmFpbGluZ1NlcCA9IGZhbHNlOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
UEtfRG90RG90OiB7CisgICAgICAvLyBPbmx5IHB1c2ggYSAiLi4iIGVsZW1lbnQgaWYgdGhlcmUg
YXJlIG5vIGVsZW1lbnRzIHByZWNlZGluZyB0aGUgIi4uIiwKKyAgICAgIC8vIG9yIGlmIHRoZSBw
cmVjZWRpbmcgZWxlbWVudCBpcyBpdHNlbGYgIi4uIi4KKyAgICAgIGF1dG8gTGFzdEtpbmQgPSBM
YXN0UGFydEtpbmQoKTsKKyAgICAgIGlmIChMYXN0S2luZCA9PSBQS19GaWxlbmFtZSkgeworICAg
ICAgICBOZXdQYXRoU2l6ZSAtPSBQYXJ0cy5iYWNrKCkuZmlyc3Quc2l6ZSgpOworICAgICAgICBQ
YXJ0cy5wb3BfYmFjaygpOworICAgICAgfSBlbHNlIGlmIChMYXN0S2luZCAhPSBQS19Sb290U2Vw
KQorICAgICAgICBBZGRQYXJ0KFBLX0RvdERvdCwgIi4uIik7CisgICAgICBNYXliZU5lZWRUcmFp
bGluZ1NlcCA9IExhc3RLaW5kID09IFBLX0ZpbGVuYW1lOworICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUEtfRG90OgorICAgIGNhc2UgUEtfVHJhaWxpbmdTZXA6IHsKKyAgICAgIE1heWJl
TmVlZFRyYWlsaW5nU2VwID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBL
X05vbmU6CisgICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisgIC8vIFtm
cy5wYXRoLmdlbmVyaWNdcDYuODogSWYgdGhlIHBhdGggaXMgZW1wdHksIGFkZCBhIGRvdC4KKyAg
aWYgKFBhcnRzLmVtcHR5KCkpCisgICAgcmV0dXJuICIuIjsKKworICAvLyBbZnMucGF0aC5nZW5l
cmljXXA2Ljc6IElmIHRoZSBsYXN0IGZpbGVuYW1lIGlzIGRvdC1kb3QsIHJlbW92ZSBhbnkKKyAg
Ly8gdHJhaWxpbmcgZGlyZWN0b3J5LXNlcGFyYXRvci4KKyAgYm9vbCBOZWVkVHJhaWxpbmdTZXAg
PSBNYXliZU5lZWRUcmFpbGluZ1NlcCAmJiBMYXN0UGFydEtpbmQoKSA9PSBQS19GaWxlbmFtZTsK
KworICBwYXRoIFJlc3VsdDsKKyAgUmVzdWx0Ll9fcG5fLnJlc2VydmUoUGFydHMuc2l6ZSgpICsg
TmV3UGF0aFNpemUgKyBOZWVkVHJhaWxpbmdTZXApOworICBmb3IgKGF1dG8mIFBLIDogUGFydHMp
CisgICAgUmVzdWx0IC89IFBLLmZpcnN0OworCisgIGlmIChOZWVkVHJhaWxpbmdTZXApCisgICAg
UmVzdWx0IC89ICIiOworCisgIHJldHVybiBSZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgRGV0ZXJt
aW5lTGV4aWNhbEVsZW1lbnRDb3VudChQYXRoUGFyc2VyIFBQKSB7CisgIGludCBDb3VudCA9IDA7
CisgIGZvciAoOyBQUDsgKytQUCkgeworICAgIGF1dG8gRWxlbSA9ICpQUDsKKyAgICBpZiAoRWxl
bSA9PSAiLi4iKQorICAgICAgLS1Db3VudDsKKyAgICBlbHNlIGlmIChFbGVtICE9ICIuIikKKyAg
ICAgICsrQ291bnQ7CisgIH0KKyAgcmV0dXJuIENvdW50OworfQorCitwYXRoIHBhdGg6OmxleGlj
YWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBiYXNlKSBjb25zdCB7CisgIHsgLy8gcGVyZm9ybSBy
b290LW5hbWUvcm9vdC1kaXJlY3RvcnkgbWlzbWF0Y2ggY2hlY2tzCisgICAgYXV0byBQUCA9IFBh
dGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgICBhdXRvIFBQQmFzZSA9IFBhdGhQYXJz
ZXI6OkNyZWF0ZUJlZ2luKGJhc2UuX19wbl8pOworICAgIGF1dG8gQ2hlY2tJdGVyTWlzbWF0Y2hB
dEJhc2UgPSBbJl0oKSB7CisgICAgICByZXR1cm4gUFAuU3RhdGUgIT0gUFBCYXNlLlN0YXRlICYm
CisgICAgICAgICAgICAgKFBQLmluUm9vdFBhdGgoKSB8fCBQUEJhc2UuaW5Sb290UGF0aCgpKTsK
KyAgICB9OworICAgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lICYm
CisgICAgICAgIFBQQmFzZS5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKSB7Cisg
ICAgICBpZiAoKlBQICE9ICpQUEJhc2UpCisgICAgICAgIHJldHVybiB7fTsKKyAgICB9IGVsc2Ug
aWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNlKCkpCisgICAgICByZXR1cm4ge307CisKKyAgICBp
ZiAoUFAuaW5Sb290UGF0aCgpKQorICAgICAgKytQUDsKKyAgICBpZiAoUFBCYXNlLmluUm9vdFBh
dGgoKSkKKyAgICAgICsrUFBCYXNlOworICAgIGlmIChDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSgp
KQorICAgICAgcmV0dXJuIHt9OworICB9CisKKyAgLy8gRmluZCB0aGUgZmlyc3QgbWlzbWF0Y2hp
bmcgZWxlbWVudAorICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOwor
ICBhdXRvIFBQQmFzZSA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKGJhc2UuX19wbl8pOworICB3
aGlsZSAoUFAgJiYgUFBCYXNlICYmIFBQLlN0YXRlID09IFBQQmFzZS5TdGF0ZSAmJiAqUFAgPT0g
KlBQQmFzZSkgeworICAgICsrUFA7CisgICAgKytQUEJhc2U7CisgIH0KKworICAvLyBJZiB0aGVy
ZSBpcyBubyBtaXNtYXRjaCwgcmV0dXJuICIuIi4KKyAgaWYgKCFQUCAmJiAhUFBCYXNlKQorICAg
IHJldHVybiAiLiI7CisKKyAgLy8gT3RoZXJ3aXNlLCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBl
bGVtZW50cywgJ24nLCB3aGljaCBhcmUgbm90IGRvdCBvcgorICAvLyBkb3QtZG90IG1pbnVzIHRo
ZSBudW1iZXIgb2YgZG90LWRvdCBlbGVtZW50cy4KKyAgaW50IEVsZW1Db3VudCA9IERldGVybWlu
ZUxleGljYWxFbGVtZW50Q291bnQoUFBCYXNlKTsKKyAgaWYgKEVsZW1Db3VudCA8IDApCisgICAg
cmV0dXJuIHt9OworCisgIC8vIHJldHVybiBhIHBhdGggY29uc3RydWN0ZWQgd2l0aCAnbicgZG90
LWRvdCBlbGVtZW50cywgZm9sbG93ZWQgYnkgdGhlIHRoZQorICAvLyBlbGVtZW50cyBvZiAnKnRo
aXMnIGFmdGVyIHRoZSBtaXNtYXRjaC4KKyAgcGF0aCBSZXN1bHQ7CisgIC8vIEZJWE1FOiBSZXNl
cnZlIGVub3VnaCByb29tIGluIFJlc3VsdCB0aGF0IGl0IHdvbid0IGhhdmUgdG8gcmUtYWxsb2Nh
dGUuCisgIHdoaWxlIChFbGVtQ291bnQtLSkKKyAgICBSZXN1bHQgLz0gIi4uIjsKKyAgZm9yICg7
IFBQOyArK1BQKQorICAgIFJlc3VsdCAvPSAqUFA7CisgIHJldHVybiBSZXN1bHQ7Cit9CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGguY29tcGFyaXNvbnMKK2ludCBwYXRoOjpfX2NvbXBh
cmUoc3RyaW5nX3ZpZXdfdCBfX3MpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNy
ZWF0ZUJlZ2luKF9fcG5fKTsKKyAgYXV0byBQUDIgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihf
X3MpOworICB3aGlsZSAoUFAgJiYgUFAyKSB7CisgICAgaW50IHJlcyA9ICgqUFApLmNvbXBhcmUo
KlBQMik7CisgICAgaWYgKHJlcyAhPSAwKQorICAgICAgcmV0dXJuIHJlczsKKyAgICArK1BQOwor
ICAgICsrUFAyOworICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQUDIuU3RhdGUgJiYgIVBQKQorICAg
IHJldHVybiAwOworICBpZiAoIVBQKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDE7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGgubm9ubWVtYmVycworc2l6ZV90IGhhc2hfdmFs
dWUoY29uc3QgcGF0aCYgX19wKSBub2V4Y2VwdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpD
cmVhdGVCZWdpbihfX3AubmF0aXZlKCkpOworICBzaXplX3QgaGFzaF92YWx1ZSA9IDA7CisgIGhh
c2g8c3RyaW5nX3ZpZXdfdD4gaGFzaGVyOworICB3aGlsZSAoUFApIHsKKyAgICBoYXNoX3ZhbHVl
ID0gX19oYXNoX2NvbWJpbmUoaGFzaF92YWx1ZSwgaGFzaGVyKCpQUCkpOworICAgICsrUFA7Cisg
IH0KKyAgcmV0dXJuIGhhc2hfdmFsdWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBh
dGguaXRyCitwYXRoOjppdGVyYXRvciBwYXRoOjpiZWdpbigpIGNvbnN0IHsKKyAgYXV0byBQUCA9
IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaXRlcmF0b3IgaXQ7CisgIGl0Ll9f
cGF0aF9wdHJfID0gdGhpczsKKyAgaXQuX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxwYXRoOjppdGVy
YXRvcjo6X1BhcnNlclN0YXRlPihQUC5TdGF0ZSk7CisgIGl0Ll9fZW50cnlfID0gUFAuUmF3RW50
cnk7CisgIGl0Ll9fc3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVybiBp
dDsKK30KKworcGF0aDo6aXRlcmF0b3IgcGF0aDo6ZW5kKCkgY29uc3QgeworICBpdGVyYXRvciBp
dHt9OworICBpdC5fX3N0YXRlXyA9IHBhdGg6Oml0ZXJhdG9yOjpfQXRFbmQ7CisgIGl0Ll9fcGF0
aF9wdHJfID0gdGhpczsKKyAgcmV0dXJuIGl0OworfQorCitwYXRoOjppdGVyYXRvciYgcGF0aDo6
aXRlcmF0b3I6Ol9faW5jcmVtZW50KCkgeworICBQYXRoUGFyc2VyIFBQKF9fcGF0aF9wdHJfLT5u
YXRpdmUoKSwgX19lbnRyeV8sIF9fc3RhdGVfKTsKKyAgKytQUDsKKyAgX19zdGF0ZV8gPSBzdGF0
aWNfY2FzdDxfUGFyc2VyU3RhdGU+KFBQLlN0YXRlKTsKKyAgX19lbnRyeV8gPSBQUC5SYXdFbnRy
eTsKKyAgX19zdGFzaGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuICp0aGlz
OworfQorCitwYXRoOjppdGVyYXRvciYgcGF0aDo6aXRlcmF0b3I6Ol9fZGVjcmVtZW50KCkgewor
ICBQYXRoUGFyc2VyIFBQKF9fcGF0aF9wdHJfLT5uYXRpdmUoKSwgX19lbnRyeV8sIF9fc3RhdGVf
KTsKKyAgLS1QUDsKKyAgX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxfUGFyc2VyU3RhdGU+KFBQLlN0
YXRlKTsKKyAgX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsKKyAgX19zdGFzaGVkX2VsZW1fLl9fYXNz
aWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBlbnRyeSBkZWZpbml0
aW9ucworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9MSUJDUFBfV0lOMzJBUEkK
K2Vycm9yX2NvZGUgZGlyZWN0b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBub2V4Y2VwdCB7Cisg
IF9fZGF0YV8uX19yZXNldCgpOworICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7CisKKyAgU3RhdFQg
ZnVsbF9zdDsKKyAgZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X2xzdGF0KF9fcF8sIGZ1
bGxfc3QsICZmYWlsdXJlX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7CisgICAgX19k
YXRhXy5fX3Jlc2V0KCk7CisgICAgcmV0dXJuIGZhaWx1cmVfZWM7CisgIH0KKworICBpZiAoIV9W
U1REX0ZTOjpleGlzdHMoc3QpIHx8ICFfVlNURF9GUzo6aXNfc3ltbGluayhzdCkpIHsKKyAgICBf
X2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoTm9uU3ltbGlu
azsKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9z
eW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgfSBlbHNlIHsgLy8gd2UgaGF2ZSBhIHN5
bWxpbmsKKyAgICBfX2RhdGFfLl9fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgICAg
Ly8gR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2VkIGVudGl0eS4KKyAgICAvLyBJ
Z25vcmUgZXJyb3JzIGZyb20gc3RhdCwgc2luY2Ugd2UgZG9uJ3Qgd2FudCBlcnJvcnMgcmVnYXJk
aW5nIHN5bWxpbmsKKyAgICAvLyByZXNvbHV0aW9uIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSB1c2Vy
LgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBzdCA9IGRldGFpbDo6cG9zaXhfc3Rh
dChfX3BfLCBmdWxsX3N0LCAmaWdub3JlZF9lYyk7CisKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBz
dC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMo
KTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaW5rLCB0aGVuIG9ubHkg
cGFydGlhbGx5IHBvcHVsYXRlIHRoZQorICAgIC8vIGNhY2hlLgorICAgIGlmICghc3RhdHVzX2tu
b3duKHN0KSkgeworICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5
OjpfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOworICAgICAgcmV0dXJuIGVycm9yX2NvZGV7fTsK
KyAgICB9CisgICAgLy8gT3RoZXJ3aXNlLCB3ZSByZXNvbHZlZCB0aGUgbGluaywgcG90ZW50aWFs
bHkgYXMgbm90IGV4aXN0aW5nLgorICAgIC8vIFRoYXQncyBPSy4KKyAgICBfX2RhdGFfLl9fY2Fj
aGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGluazsKKyAgfQorCisgIGlm
IChfVlNURF9GUzo6aXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICBfX2RhdGFfLl9fc2l6ZV8gPSBz
dGF0aWNfY2FzdDx1aW50bWF4X3Q+KGZ1bGxfc3Quc3Rfc2l6ZSk7CisKKyAgaWYgKF9WU1REX0ZT
OjpleGlzdHMoc3QpKSB7CisgICAgX19kYXRhXy5fX25saW5rXyA9IHN0YXRpY19jYXN0PHVpbnRt
YXhfdD4oZnVsbF9zdC5zdF9ubGluayk7CisKKyAgICAvLyBBdHRlbXB0IHRvIGV4dHJhY3QgdGhl
IG10aW1lLCBhbmQgZmFpbCBpZiBpdCdzIG5vdCByZXByZXNlbnRhYmxlIHVzaW5nCisgICAgLy8g
ZmlsZV90aW1lX3R5cGUuIEZvciBub3cgd2UgaWdub3JlIHRoZSBlcnJvciwgYXMgd2UnbGwgcmVw
b3J0IGl0IHdoZW4KKyAgICAvLyB0aGUgdmFsdWUgaXMgYWN0dWFsbHkgdXNlZC4KKyAgICBlcnJv
cl9jb2RlIGlnbm9yZWRfZWM7CisgICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID0KKyAgICAgICAg
X19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShfX3BfLCBmdWxsX3N0LCAmaWdub3JlZF9lYyk7Cisg
IH0KKworICByZXR1cm4gZmFpbHVyZV9lYzsKK30KKyNlbHNlCitlcnJvcl9jb2RlIGRpcmVjdG9y
eV9lbnRyeTo6X19kb19yZWZyZXNoKCkgbm9leGNlcHQgeworICBfX2RhdGFfLl9fcmVzZXQoKTsK
KyAgZXJyb3JfY29kZSBmYWlsdXJlX2VjOworCisgIGZpbGVfc3RhdHVzIHN0ID0gX1ZTVERfRlM6
OnN5bWxpbmtfc3RhdHVzKF9fcF8sIGZhaWx1cmVfZWMpOworICBpZiAoIXN0YXR1c19rbm93bihz
dCkpIHsKKyAgICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgICByZXR1cm4gZmFpbHVyZV9lYzsKKyAg
fQorCisgIGlmICghX1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9WU1REX0ZTOjppc19zeW1saW5r
KHN0KSkgeworICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1Jl
ZnJlc2hOb25TeW1saW5rOworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAgICBf
X2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICB9IGVsc2UgeyAv
LyB3ZSBoYXZlIGEgc3ltbGluaworICAgIF9fZGF0YV8uX19zeW1fcGVybXNfID0gc3QucGVybWlz
c2lvbnMoKTsKKyAgICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rZWQgZW50
aXR5LgorICAgIC8vIElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBzaW5jZSB3ZSBkb24ndCB3YW50
IGVycm9ycyByZWdhcmRpbmcgc3ltbGluaworICAgIC8vIHJlc29sdXRpb24gdG8gYmUgcmVwb3J0
ZWQgdG8gdGhlIHVzZXIuCisgICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIHN0ID0gX1ZT
VERfRlM6OnN0YXR1cyhfX3BfLCBpZ25vcmVkX2VjKTsKKworICAgIF9fZGF0YV8uX190eXBlXyA9
IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9u
cygpOworCisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4gb25s
eSBwYXJ0aWFsbHkgcG9wdWxhdGUgdGhlCisgICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0dXNf
a25vd24oc3QpKSB7CisgICAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50
cnk6Ol9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29kZXt9
OworICAgIH0KKyAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9S
ZWZyZXNoU3ltbGluazsKKyAgfQorCisgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSBicm9r
ZW4sIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb25seSBhIHBsYWNlaG9sZGVyLgorICAvLyBXZSBu
ZWVkIHRvIGNhY2hlIGxhc3Rfd3JpdGVfdGltZSwgZmlsZV9zaXplLCBhbmQgaGFyZF9saW5rX2Nv
dW50IGhlcmUgYmVmb3JlCisgIC8vIHRoZSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSB3b3Jrcy4K
KworICByZXR1cm4gZmFpbHVyZV9lYzsKK30KKyNlbmRpZgorCitfTElCQ1BQX0VORF9OQU1FU1BB
Q0VfRklMRVNZU1RFTQorCisvKiAtLSBFTkQgZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCAtLSAq
LworCisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTUwMAor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0
ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjcwMyBAQAorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZmls
ZXN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyAgICAg
ICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8g
VGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgdGhlIFVuaXZlcnNp
dHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2VzLiBTZWUgTElDRU5TRS5UWFQg
Zm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmIF9faGFzX2lu
Y2x1ZGUoPGZpbGVzeXN0ZW0+KQorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CisjZWxzZQorCisvKiBJ
bXBvcnRzIGEgY29weSBvZiA8ZmlsZXN5c3RlbT4gZnJvbSByMzQzODM4IG9mIHRoZSBsaWJjKysg
cHJvamVjdC4gVGhpcworICAgaXMgb25seSBuZWVkZWQgdW50aWwgbWFjT1MgMTAuMTQgaXMgbm8g
bG9uZ2VyIHN1cHBvcnRlZCBhdCB3aGljaCBwb2ludCBhbGwKKyAgIHBvcnRzIHdpbGwgc3VwcG9y
dCA8ZmlsZXN5c3RlbT4gZGlyZWN0bHkuCisqLworCisKKyNpZm5kZWYgX0xJQkNQUF9GSUxFU1lT
VEVNCisjZGVmaW5lIF9MSUJDUFBfRklMRVNZU1RFTQorLyoKKyAgICBmaWxlc3lzdGVtIHN5bm9w
c2lzCisKKyAgICBuYW1lc3BhY2Ugc3RkIHsgbmFtZXNwYWNlIGZpbGVzeXN0ZW0geworCisgICAg
Y2xhc3MgcGF0aDsKKworICAgIHZvaWQgc3dhcChwYXRoJiBsaHMsIHBhdGgmIHJocykgbm9leGNl
cHQ7CisgICAgc2l6ZV90IGhhc2hfdmFsdWUoY29uc3QgcGF0aCYgcCkgbm9leGNlcHQ7CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhj
ZXB0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJo
cykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IHBhdGgmIGxocywgY29uc3Qg
cGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgcGF0aCYgbGhz
LCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I+IChjb25zdCBw
YXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKworICAgIHBhdGgg
b3BlcmF0b3IvIChjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocyk7CisKKyAgICAvLyBm
cy5wYXRoLmlvIG9wZXJhdG9ycyBhcmUgZnJpZW5kcyBvZiBwYXRoLgorICAgIHRlbXBsYXRlIDxj
bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzPgorICAgIGZyaWVuZCBiYXNpY19vc3RyZWFtPGNoYXJU
LCB0cmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyVCwgdHJhaXRzPiYg
b3MsIGNvbnN0IHBhdGgmIHApOworCisgICAgdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHM+CisgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4mCisgICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXJULCB0cmFpdHM+JiBpcywgcGF0aCYgcCk7CisKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgU291cmNlPgorICAgICAgcGF0aCB1OHBhdGgoY29uc3QgU291cmNl
JiBzb3VyY2UpOworICAgIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgorICAgICAgcGF0
aCB1OHBhdGgoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTsKKworICAg
IGNsYXNzIGZpbGVzeXN0ZW1fZXJyb3I7CisgICAgY2xhc3MgZGlyZWN0b3J5X2VudHJ5OworCisg
ICAgY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yOworCisgICAgLy8gZW5hYmxlIGRpcmVjdG9yeV9p
dGVyYXRvciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cworICAgIGRpcmVjdG9yeV9pdGVyYXRv
ciBiZWdpbihkaXJlY3RvcnlfaXRlcmF0b3IgaXRlcikgbm9leGNlcHQ7CisgICAgZGlyZWN0b3J5
X2l0ZXJhdG9yIGVuZChjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdDsKKworICAg
IGNsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAvLyBlbmFibGUgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cworICAg
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgYmVnaW4ocmVjdXJzaXZlX2RpcmVjdG9yeV9p
dGVyYXRvciBpdGVyKSBub2V4Y2VwdDsKKyAgICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
IGVuZChjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQ7CisKKyAg
ICBjbGFzcyBmaWxlX3N0YXR1czsKKworICAgIHN0cnVjdCBzcGFjZV9pbmZvCisgICAgeworICAg
ICAgdWludG1heF90IGNhcGFjaXR5OworICAgICAgdWludG1heF90IGZyZWU7CisgICAgICB1aW50
bWF4X3QgYXZhaWxhYmxlOworICAgIH07CisKKyAgICBlbnVtIGNsYXNzIGZpbGVfdHlwZTsKKyAg
ICBlbnVtIGNsYXNzIHBlcm1zOworICAgIGVudW0gY2xhc3MgcGVybV9vcHRpb25zOworICAgIGVu
dW0gY2xhc3MgY29weV9vcHRpb25zOworICAgIGVudW0gY2xhc3MgZGlyZWN0b3J5X29wdGlvbnM7
CisKKyAgICB0eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDx0cml2aWFsLWNsb2NrPiAgZmlsZV90
aW1lX3R5cGU7CisKKyAgICAvLyBvcGVyYXRpb25hbCBmdW5jdGlvbnMKKworICAgIHBhdGggYWJz
b2x1dGUoY29uc3QgcGF0aCYgcCk7CisgICAgcGF0aCBhYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlICZlYyk7CisKKyAgICBwYXRoIGNhbm9uaWNhbChjb25zdCBwYXRoJiBwKTsKKyAg
ICBwYXRoIGNhbm9uaWNhbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2
b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZvaWQgY29w
eShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSYgZWMpOworICAg
IHZvaWQgY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25z
IG9wdGlvbnMpOworICAgIHZvaWQgY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0
bywgY29weV9vcHRpb25zIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
ZWMpOworCisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYg
dG8pOworICAgIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRv
LCBlcnJvcl9jb2RlJiBlYyk7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwg
Y29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb24pOworICAgIGJvb2wgY29weV9maWxl
KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCBj
b3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgbmV3
X3N5bWxpbmspOworICAgIHZvaWQgY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIGV4aXN0aW5nX3N5
bWxpbmssIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBjcmVhdGVfZGlyZWN0
b3JpZXMoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNv
bnN0IHBhdGgmIHApOworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29u
c3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcyk7CisgICAgYm9vbCBjcmVhdGVfZGly
ZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGF0dHJpYnV0ZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAg
dm9pZCBjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgm
IG5ld19zeW1saW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBw
YXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IGNyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19oYXJkX2xp
bmspOworICAgIHZvaWQgY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0
aCYgbmV3X2hhcmRfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIGNyZWF0ZV9zeW1saW5rKGNvbnN0IHBh
dGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluayk7CisgICAgdm9pZCBjcmVhdGVfc3ltbGlu
ayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHBhdGgg
Y3VycmVudF9wYXRoKCk7CisgICAgcGF0aCBjdXJyZW50X3BhdGgoZXJyb3JfY29kZSYgZWMpOwor
ICAgIHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIHApOworICAgIHZvaWQgY3VycmVudF9w
YXRoKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wg
ZXhpc3RzKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgZXhpc3RzKGNvbnN0IHBh
dGgmIHApOworICAgIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBu
b2V4Y2VwdDsKKworICAgIGJvb2wgZXF1aXZhbGVudChjb25zdCBwYXRoJiBwMSwgY29uc3QgcGF0
aCYgcDIpOworICAgIGJvb2wgZXF1aXZhbGVudChjb25zdCBwYXRoJiBwMSwgY29uc3QgcGF0aCYg
cDIsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHVpbnRtYXhfdCAgICBmaWxlX3Np
emUoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIGZpbGVfc2l6ZShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB1aW50bWF4X3QgICAgaGFyZF9s
aW5rX2NvdW50KGNvbnN0IHBhdGgmIHApOworICAgIHVpbnRtYXhfdCAgICBoYXJkX2xpbmtfY291
bnQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBp
c19ibG9ja19maWxlKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfYmxvY2tf
ZmlsZShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmls
ZShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGNv
bnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19kaXJlY3RvcnkoZmlsZV9z
dGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCk7
CisgICAgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlz
X2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJv
b2wgaXNfZmlmbyhmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2ZpZm8oY29u
c3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUm
IGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfb3RoZXIoZmlsZV9zdGF0dXMgcykgbm9leGNl
cHQ7CisgICAgYm9vbCBpc19vdGhlcihjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX290aGVy
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNf
cmVndWxhcl9maWxlKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfcmVndWxh
cl9maWxlKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfcmVndWxhcl9maWxlKGNvbnN0IHBh
dGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfc29ja2V0KGZp
bGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIHAp
OworICAgIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4
Y2VwdDsKKworICAgIGJvb2wgaXNfc3ltbGluayhmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAg
ICBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19zeW1saW5rKGNv
bnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGZpbGVfdGltZV90
eXBlICBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCk7CisgICAgZmlsZV90aW1lX3R5cGUg
IGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7
CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1lX3R5cGUg
bmV3X3RpbWUpOworICAgIHZvaWQgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVf
dGltZV90eXBlIG5ld190aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRo
JiBwLCBwZXJtcyBwcm1zLAorICAgICAgICAgICAgICAgICAgICAgcGVybV9vcHRpb25zIG9wdHM9
cGVybV9vcHRpb25zOjpyZXBsYWNlKTsKKyAgICB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgm
IHAsIHBlcm1zIHBybXMsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKyAgICB2b2lkIHBlcm1p
c3Npb25zKGNvbnN0IHBhdGgmIHAsIHBlcm1zIHBybXMsIHBlcm1fb3B0aW9ucyBvcHRzLAorICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpOworCisgICAgcGF0aCBwcm94aW1hdGUo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworICAgIHBhdGggcHJveGltYXRlKGNvbnN0
IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2UgPSBjdXJyZW50X3BhdGgoKSk7CisgICAgcGF0aCBw
cm94aW1hdGUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSwgZXJyb3JfY29kZSAmZWMp
OworCisgICAgcGF0aCByZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCk7CisgICAgcGF0aCByZWFk
X3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgcGF0aCByZWxh
dGl2ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgcGF0aCByZWxhdGl2ZShj
b25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlPWN1cnJlbnRfcGF0aCgpKTsKKyAgICBwYXRo
IHJlbGF0aXZlKGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2UsIGVycm9yX2NvZGUmIGVj
KTsKKworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgcmVtb3ZlKGNv
bnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHVpbnRtYXhfdCAg
ICByZW1vdmVfYWxsKGNvbnN0IHBhdGgmIHApOworICAgIHVpbnRtYXhfdCAgICByZW1vdmVfYWxs
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHZvaWQgcmVuYW1lKGNvbnN0
IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvKTsKKyAgICB2b2lkIHJlbmFtZShjb25zdCBwYXRo
JiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAg
dm9pZCByZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSk7CisgICAgdm9p
ZCByZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSwgZXJyb3JfY29kZSYg
ZWMpIG5vZXhjZXB0OworCisgICAgc3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHApOwor
ICAgIHNwYWNlX2luZm8gICBzcGFjZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICBmaWxlX3N0YXR1cyAgc3RhdHVzKGNvbnN0IHBhdGgmIHApOworICAgIGZp
bGVfc3RhdHVzICBzdGF0dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgYm9vbCBzdGF0dXNfa25vd24oZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisKKyAg
ICBmaWxlX3N0YXR1cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCk7CisgICAgZmlsZV9z
dGF0dXMgIHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4
Y2VwdDsKKworICAgIHBhdGggdGVtcF9kaXJlY3RvcnlfcGF0aCgpOworICAgIHBhdGggdGVtcF9k
aXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHdlYWtseV9jYW5vbmlj
YWwocGF0aCBjb25zdCYgcCk7CisgICAgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3Qm
IHAsIGVycm9yX2NvZGUmIGVjKTsKKworCit9IH0gIC8vIG5hbWVzcGFjZXMgc3RkOjpmaWxlc3lz
dGVtCisKKyovCisKKyNpbmNsdWRlIDxfX2NvbmZpZz4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2lu
Y2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgor
I2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8bWVtb3J5Pgor
I2luY2x1ZGUgPHN0YWNrPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzeXN0ZW1fZXJy
b3I+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxpb21hbmlwPiAvLyBmb3IgcXVvdGVk
CisjaW5jbHVkZSA8c3RyaW5nX3ZpZXc+CisvKiAjaW5jbHVkZSA8dmVyc2lvbj4gKi8KKworI2lu
Y2x1ZGUgPF9fZGVidWc+CisKKyNpZiBfTElCQ1BQX1NURF9WRVIgPj0gMTcKKyNkZWZpbmUgX0xJ
QkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTSBcCisgIF9MSUJDUFBfQkVHSU5fTkFNRVNQ
QUNFX1NURCBpbmxpbmUgbmFtZXNwYWNlIF9fZnMgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7Cisj
ZWxzZQorI2RlZmluZSBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJ
QkNQUF9CRUdJTl9OQU1FU1BBQ0VfU1REIG5hbWVzcGFjZSBfX2ZzIHsgbmFtZXNwYWNlIGZpbGVz
eXN0ZW0geworI2VuZGlmCisKKyNkZWZpbmUgX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNU
RU0gXAorICBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1REIH0gfQorCisjZGVmaW5lIF9WU1REX0ZT
IF9WU1REOjpfX2ZzOjpmaWxlc3lzdGVtCisKKyNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19Q
UkFHTUFfU1lTVEVNX0hFQURFUikKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgor
CitfTElCQ1BQX1BVU0hfTUFDUk9TCisjaW5jbHVkZSA8X191bmRlZl9tYWNyb3M+CisKKyNpZm5k
ZWYgX0xJQkNQUF9DWFgwM19MQU5HCisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNU
RU0KKworc3RydWN0IF9GaWxlc3lzdGVtQ2xvY2sgeworI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFT
X05PX0lOVDEyOCkKKyAgdHlwZWRlZiBfX2ludDEyOF90IHJlcDsKKyAgdHlwZWRlZiBuYW5vIHBl
cmlvZDsKKyNlbHNlCisgIHR5cGVkZWYgbG9uZyBsb25nIHJlcDsKKyAgdHlwZWRlZiBuYW5vIHBl
cmlvZDsKKyNlbmRpZgorCisgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXAsIHBlcmlvZD4g
ZHVyYXRpb247CisgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PF9GaWxlc3lzdGVtQ2xvY2s+
IHRpbWVfcG9pbnQ7CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGNv
bnN0IGJvb2wgaXNfc3RlYWR5ID0gZmFsc2U7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUyBzdGF0aWMg
dGltZV9wb2ludCBub3coKSBub2V4Y2VwdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIHN0YXRpYyB0aW1lX3QgdG9fdGltZV90KGNvbnN0IHRpbWVfcG9pbnQmIF9fdCkgbm9leGNl
cHQgeworICAgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXA+IF9fc2VjczsKKyAgICByZXR1
cm4gdGltZV90KAorICAgICAgICBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8X19zZWNzPihfX3QudGlt
ZV9zaW5jZV9lcG9jaCgpKS5jb3VudCgpKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgc3RhdGljIHRpbWVfcG9pbnQgZnJvbV90aW1lX3QodGltZV90IF9fdCkgbm9leGNl
cHQgeworICAgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXA+IF9fc2VjczsKKyAgICByZXR1
cm4gdGltZV9wb2ludChfX3NlY3MoX190KSk7CisgIH0KK307CisKK3R5cGVkZWYgY2hyb25vOjp0
aW1lX3BvaW50PF9GaWxlc3lzdGVtQ2xvY2s+IGZpbGVfdGltZV90eXBlOworCitzdHJ1Y3QgX0xJ
QkNQUF9UWVBFX1ZJUyBzcGFjZV9pbmZvIHsKKyAgdWludG1heF90IGNhcGFjaXR5OworICB1aW50
bWF4X3QgZnJlZTsKKyAgdWludG1heF90IGF2YWlsYWJsZTsKK307CisKK2VudW0gY2xhc3MgX0xJ
QkNQUF9FTlVNX1ZJUyBmaWxlX3R5cGUgOiBzaWduZWQgY2hhciB7CisgIG5vbmUgPSAwLAorICBu
b3RfZm91bmQgPSAtMSwKKyAgcmVndWxhciA9IDEsCisgIGRpcmVjdG9yeSA9IDIsCisgIHN5bWxp
bmsgPSAzLAorICBibG9jayA9IDQsCisgIGNoYXJhY3RlciA9IDUsCisgIGZpZm8gPSA2LAorICBz
b2NrZXQgPSA3LAorICB1bmtub3duID0gOAorfTsKKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1f
VklTIHBlcm1zIDogdW5zaWduZWQgeworICBub25lID0gMCwKKworICBvd25lcl9yZWFkID0gMDQw
MCwKKyAgb3duZXJfd3JpdGUgPSAwMjAwLAorICBvd25lcl9leGVjID0gMDEwMCwKKyAgb3duZXJf
YWxsID0gMDcwMCwKKworICBncm91cF9yZWFkID0gMDQwLAorICBncm91cF93cml0ZSA9IDAyMCwK
KyAgZ3JvdXBfZXhlYyA9IDAxMCwKKyAgZ3JvdXBfYWxsID0gMDcwLAorCisgIG90aGVyc19yZWFk
ID0gMDQsCisgIG90aGVyc193cml0ZSA9IDAyLAorICBvdGhlcnNfZXhlYyA9IDAxLAorICBvdGhl
cnNfYWxsID0gMDcsCisKKyAgYWxsID0gMDc3NywKKworICBzZXRfdWlkID0gMDQwMDAsCisgIHNl
dF9naWQgPSAwMjAwMCwKKyAgc3RpY2t5X2JpdCA9IDAxMDAwLAorICBtYXNrID0gMDc3NzcsCisg
IHVua25vd24gPSAweEZGRkYsCit9OworCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgY29uc3RleHByIHBlcm1zIG9wZXJhdG9yJihwZXJtcyBfTEhTLCBwZXJtcyBfUkhTKSB7Cisg
IHJldHVybiBzdGF0aWNfY2FzdDxwZXJtcz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpICYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykp
OworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1z
IG9wZXJhdG9yfChwZXJtcyBfTEhTLCBwZXJtcyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2Fz
dDxwZXJtcz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1zIG9wZXJhdG9yXihwZXJtcyBf
TEhTLCBwZXJtcyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtcz4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KF9MSFMpIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitp
bmxpbmUgY29uc3RleHByIHBlcm1zIG9wZXJhdG9yfihwZXJtcyBfTEhTKSB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxwZXJtcz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSk7Cit9CisKK19M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtcyYgb3BlcmF0b3ImPShwZXJtcyYg
X0xIUywgcGVybXMgX1JIUykgeyByZXR1cm4gX0xIUyA9IF9MSFMgJiBfUkhTOyB9CisKK19MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtcyYgb3BlcmF0b3J8PShwZXJtcyYgX0xI
UywgcGVybXMgX1JIUykgeyByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOyB9CisKK19MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtcyYgb3BlcmF0b3JePShwZXJtcyYgX0xIUywg
cGVybXMgX1JIUykgeyByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOyB9CisKK2VudW0gY2xhc3Mg
X0xJQkNQUF9FTlVNX1ZJUyBwZXJtX29wdGlvbnMgOiB1bnNpZ25lZCBjaGFyIHsKKyAgcmVwbGFj
ZSA9IDEsCisgIGFkZCA9IDIsCisgIHJlbW92ZSA9IDQsCisgIG5vZm9sbG93ID0gOAorfTsKKwor
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMg
b3BlcmF0b3ImKHBlcm1fb3B0aW9ucyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1
cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykg
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3Rl
eHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcnwocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0
PHVuc2lnbmVkPihfTEhTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yXihwZXJtX29wdGlvbnMg
X0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0
aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpIF4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0
b3J+KHBlcm1fb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlv
bnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykpOworfQorCitfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCitpbmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRvciY9KHBlcm1fb3B0aW9ucyYg
X0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsK
K30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1fb3B0aW9ucyYgb3Bl
cmF0b3J8PShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVy
biBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yXj0ocGVybV9vcHRpb25zJiBfTEhTLCBwZXJtX29w
dGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOworfQorCitlbnVtIGNs
YXNzIF9MSUJDUFBfRU5VTV9WSVMgY29weV9vcHRpb25zIDogdW5zaWduZWQgc2hvcnQgeworICBu
b25lID0gMCwKKyAgc2tpcF9leGlzdGluZyA9IDEsCisgIG92ZXJ3cml0ZV9leGlzdGluZyA9IDIs
CisgIHVwZGF0ZV9leGlzdGluZyA9IDQsCisgIHJlY3Vyc2l2ZSA9IDgsCisgIGNvcHlfc3ltbGlu
a3MgPSAxNiwKKyAgc2tpcF9zeW1saW5rcyA9IDMyLAorICBkaXJlY3Rvcmllc19vbmx5ID0gNjQs
CisgIGNyZWF0ZV9zeW1saW5rcyA9IDEyOCwKKyAgY3JlYXRlX2hhcmRfbGlua3MgPSAyNTYsCisg
IF9faW5fcmVjdXJzaXZlX2NvcHkgPSA1MTIsCit9OworCitfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvciYoY29weV9vcHRpb25z
IF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29w
dGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSAmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7
Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9v
cHRpb25zIG9wZXJhdG9yfChjb3B5X29wdGlvbnMgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3JeKGNvcHlfb3B0aW9u
cyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9v
cHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykgXgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX1JIUykp
OworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlf
b3B0aW9ucyBvcGVyYXRvcn4oY29weV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvcHlfb3B0aW9ucz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb3B5X29wdGlvbnMmIG9wZXJh
dG9yJj0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4g
X0xIUyA9IF9MSFMgJiBfUkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgY29weV9vcHRpb25zJiBvcGVyYXRvcnw9KGNvcHlfb3B0aW9ucyYgX0xIUywgY29weV9vcHRp
b25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3JePShjb3B5X29w
dGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBe
IF9SSFM7Cit9CisKK2VudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBkaXJlY3Rvcnlfb3B0aW9u
cyA6IHVuc2lnbmVkIGNoYXIgeworICBub25lID0gMCwKKyAgZm9sbG93X2RpcmVjdG9yeV9zeW1s
aW5rID0gMSwKKyAgc2tpcF9wZXJtaXNzaW9uX2RlbmllZCA9IDIKK307CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgZGlyZWN0b3J5X29wdGlvbnMgb3BlcmF0
b3ImKGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0
aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xI
UykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvcnwoZGlyZWN0b3J5X29w
dGlvbnMgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGRpcmVjdG9y
eV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
X1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHBy
IGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yXihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlv
bnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfUkhTKSk7Cit9CisKK19M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgZGlyZWN0b3J5X29wdGlv
bnMgb3BlcmF0b3J+KGRpcmVjdG9yeV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PGRpcmVjdG9yeV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xIUykp
OworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgZGlyZWN0b3J5X29wdGlv
bnMmIG9wZXJhdG9yJj0oZGlyZWN0b3J5X29wdGlvbnMmIF9MSFMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4g
X0xIUyA9IF9MSFMgJiBfUkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgZGlyZWN0b3J5X29wdGlvbnMmIG9wZXJhdG9yfD0oZGlyZWN0b3J5X29wdGlvbnMmIF9MSFMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMg
X1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgZGlyZWN0b3J5X29wdGlvbnMmIG9wZXJhdG9yXj0oZGlyZWN0
b3J5X29wdGlvbnMmIF9MSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOwor
fQorCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGZpbGVfc3RhdHVzIHsKK3B1YmxpYzoKKyAgLy8g
Y29uc3RydWN0b3JzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMo
KSBub2V4Y2VwdCA6IGZpbGVfc3RhdHVzKGZpbGVfdHlwZTo6bm9uZSkge30KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCBmaWxlX3N0YXR1cyhmaWxlX3R5cGUgX19mdCwg
cGVybXMgX19wcm1zID0gcGVybXM6OnVua25vd24pIG5vZXhjZXB0CisgICAgICA6IF9fZnRfKF9f
ZnQpLAorICAgICAgICBfX3BybXNfKF9fcHJtcykge30KKworICBmaWxlX3N0YXR1cyhjb25zdCBm
aWxlX3N0YXR1cyYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZmlsZV9zdGF0dXMoZmlsZV9zdGF0
dXMmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgfmZpbGVfc3RhdHVzKCkge30KKworICBmaWxlX3N0YXR1cyYgb3BlcmF0b3I9KGNvbnN0IGZp
bGVfc3RhdHVzJikgbm9leGNlcHQgPSBkZWZhdWx0OworICBmaWxlX3N0YXR1cyYgb3BlcmF0b3I9
KGZpbGVfc3RhdHVzJiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICAvLyBvYnNlcnZlcnMKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgdHlwZSgpIGNvbnN0IG5vZXhj
ZXB0IHsgcmV0dXJuIF9fZnRfOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBw
ZXJtcyBwZXJtaXNzaW9ucygpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcHJtc187IH0KKwor
ICAvLyBtb2RpZmllcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHR5cGUo
ZmlsZV90eXBlIF9fZnQpIG5vZXhjZXB0IHsgX19mdF8gPSBfX2Z0OyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICB2b2lkIHBlcm1pc3Npb25zKHBlcm1zIF9fcCkgbm9leGNlcHQg
eyBfX3BybXNfID0gX19wOyB9CisKK3ByaXZhdGU6CisgIGZpbGVfdHlwZSBfX2Z0XzsKKyAgcGVy
bXMgX19wcm1zXzsKK307CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgZGlyZWN0b3J5X2VudHJ5
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhciB7Cisg
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cit9OwordGVtcGxhdGUgPGNsYXNzIF9U
cD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8Y29uc3QgX1RwPiA6IHB1YmxpYyBfX2Nhbl9j
b252ZXJ0X2NoYXI8X1RwPiB7fTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29udmVydF9j
aGFyPGNoYXI+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2luZyBf
X2NoYXJfdHlwZSA9IGNoYXI7Cit9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0
X2NoYXI8d2NoYXJfdD4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgIHVz
aW5nIF9fY2hhcl90eXBlID0gd2NoYXJfdDsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2Fu
X2NvbnZlcnRfY2hhcjxjaGFyMTZfdD4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0gY2hhcjE2X3Q7Cit9OwordGVtcGxhdGUgPD4KK3N0
cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8Y2hhcjMyX3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOworICB1c2luZyBfX2NoYXJfdHlwZSA9IGNoYXIzMl90OworfTsKKwordGVt
cGxhdGUgPGNsYXNzIF9FQ2hhclQ+Cit0eXBlbmFtZSBlbmFibGVfaWY8X19jYW5fY29udmVydF9j
aGFyPF9FQ2hhclQ+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK19faXNfc2VwYXJhdG9yKF9FQ2hhclQg
X19lKSB7CisgIHJldHVybiBfX2UgPT0gX0VDaGFyVCgnLycpOworfQorCitzdHJ1Y3QgX051bGxT
ZW50aW5hbCB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3VzaW5nIF9Wb2lkID0gdm9pZDsK
KwordGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgPSB2b2lkPgorc3RydWN0IF9faXNfcGF0aGFi
bGVfc3RyaW5nIDogcHVibGljIGZhbHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNo
YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9z
dHJpbmc8CisgICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4sCisgICAg
X1ZvaWQ8dHlwZW5hbWUgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OjpfX2NoYXJfdHlwZT4g
PgorICAgIDogcHVibGljIF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPiB7CisgIHVzaW5nIF9T
dHIgPSBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jPjsKKyAgdXNpbmcgX0Jh
c2UgPSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD47CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0
KiBfX3JhbmdlX2JlZ2luKF9TdHIgY29uc3QmIF9fcykgeyByZXR1cm4gX19zLmRhdGEoKTsgfQor
ICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9lbmQoX1N0ciBjb25zdCYgX19zKSB7Cisg
ICAgcmV0dXJuIF9fcy5kYXRhKCkgKyBfX3MubGVuZ3RoKCk7CisgIH0KKyAgc3RhdGljIF9FQ2hh
clQgX19maXJzdF9vcl9udWxsKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBfX3MuZW1w
dHkoKSA/IF9FQ2hhclR7fSA6IF9fc1swXTsKKyAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9F
Q2hhclQsIGNsYXNzIF9UcmFpdHM+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9zdHJpbmc8CisgICAg
YmFzaWNfc3RyaW5nX3ZpZXc8X0VDaGFyVCwgX1RyYWl0cz4sCisgICAgX1ZvaWQ8dHlwZW5hbWUg
X19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OjpfX2NoYXJfdHlwZT4gPgorICAgIDogcHVibGlj
IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPiB7CisgIHVzaW5nIF9TdHIgPSBiYXNpY19zdHJp
bmdfdmlldzxfRUNoYXJULCBfVHJhaXRzPjsKKyAgdXNpbmcgX0Jhc2UgPSBfX2Nhbl9jb252ZXJ0
X2NoYXI8X0VDaGFyVD47CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2JlZ2luKF9T
dHIgY29uc3QmIF9fcykgeyByZXR1cm4gX19zLmRhdGEoKTsgfQorICBzdGF0aWMgX0VDaGFyVCBj
b25zdCogX19yYW5nZV9lbmQoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5kYXRh
KCkgKyBfX3MubGVuZ3RoKCk7CisgIH0KKyAgc3RhdGljIF9FQ2hhclQgX19maXJzdF9vcl9udWxs
KF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBfX3MuZW1wdHkoKSA/IF9FQ2hhclR7fSA6
IF9fc1swXTsKKyAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNzIF9EUyA9
IHR5cGVuYW1lIGRlY2F5PF9Tb3VyY2U+Ojp0eXBlLAorICAgICAgICAgIGNsYXNzIF9VbnF1YWxQ
dHJUeXBlID0KKyAgICAgICAgICAgICAgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHJl
bW92ZV9wb2ludGVyPF9EUz46OnR5cGU+Ojp0eXBlLAorICAgICAgICAgIGJvb2wgX0lzQ2hhclB0
ciA9IGlzX3BvaW50ZXI8X0RTPjo6dmFsdWUmJgorICAgICAgICAgICAgICBfX2Nhbl9jb252ZXJ0
X2NoYXI8X1VucXVhbFB0clR5cGU+Ojp2YWx1ZT4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2NoYXJf
YXJyYXkgOiBmYWxzZV90eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3Mg
X0VDaGFyVCwgY2xhc3MgX1VQdHI+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9T
b3VyY2UsIF9FQ2hhclQqLCBfVVB0ciwgdHJ1ZT4KKyAgICA6IF9fY2FuX2NvbnZlcnRfY2hhcjx0
eXBlbmFtZSByZW1vdmVfY29uc3Q8X0VDaGFyVD46OnR5cGU+IHsKKyAgdXNpbmcgX0Jhc2UgPSBf
X2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PF9FQ2hhclQ+Ojp0eXBlPjsK
KworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9iZWdpbihjb25zdCBfRUNoYXJUKiBf
X2IpIHsgcmV0dXJuIF9fYjsgfQorICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9lbmQo
Y29uc3QgX0VDaGFyVCogX19iKSB7CisgICAgdXNpbmcgX0l0ZXIgPSBjb25zdCBfRUNoYXJUKjsK
KyAgICBjb25zdCBfRUNoYXJUIF9fc2VudGluYWwgPSBfRUNoYXJUe307CisgICAgX0l0ZXIgX19l
ID0gX19iOworICAgIGZvciAoOyAqX19lICE9IF9fc2VudGluYWw7ICsrX19lKQorICAgICAgOwor
ICAgIHJldHVybiBfX2U7CisgIH0KKworICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwo
Y29uc3QgX0VDaGFyVCogX19iKSB7IHJldHVybiAqX19iOyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXIsIGJvb2wgX0lzSXQgPSBfX2lzX2lucHV0X2l0ZXJhdG9yPF9JdGVyPjo6dmFsdWUs
CisgICAgICAgICAgY2xhc3MgPSB2b2lkPgorc3RydWN0IF9faXNfcGF0aGFibGVfaXRlciA6IGZh
bHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxjbGFzcyBfSXRlcj4KK3N0cnVjdCBfX2lzX3BhdGhh
YmxlX2l0ZXI8CisgICAgX0l0ZXIsIHRydWUsCisgICAgX1ZvaWQ8dHlwZW5hbWUgX19jYW5fY29u
dmVydF9jaGFyPAorICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1
ZV90eXBlPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IF9fY2FuX2NvbnZlcnRfY2hhcjx0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlPiB7CisgIHVzaW5nIF9FQ2hhclQg
PSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlOworICB1c2luZyBf
QmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKworICBzdGF0aWMgX0l0ZXIgX19y
YW5nZV9iZWdpbihfSXRlciBfX2IpIHsgcmV0dXJuIF9fYjsgfQorICBzdGF0aWMgX051bGxTZW50
aW5hbCBfX3JhbmdlX2VuZChfSXRlcikgeyByZXR1cm4gX051bGxTZW50aW5hbHt9OyB9CisKKyAg
c3RhdGljIF9FQ2hhclQgX19maXJzdF9vcl9udWxsKF9JdGVyIF9fYikgeyByZXR1cm4gKl9fYjsg
fQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfSXNTdHJpbmdUID0gX19pc19wYXRo
YWJsZV9zdHJpbmc8X1RwPjo6dmFsdWUsCisgICAgICAgICAgYm9vbCBfSXNDaGFySXRlclQgPSBf
X2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1RwPjo6dmFsdWUsCisgICAgICAgICAgYm9vbCBfSXNJ
dGVyVCA9ICFfSXNDaGFySXRlclQgJiYgX19pc19wYXRoYWJsZV9pdGVyPF9UcD46OnZhbHVlPgor
c3RydWN0IF9faXNfcGF0aGFibGUgOiBmYWxzZV90eXBlIHsKKyAgc3RhdGljX2Fzc2VydCghX0lz
U3RyaW5nVCAmJiAhX0lzQ2hhckl0ZXJUICYmICFfSXNJdGVyVCwgIk11c3QgYWxsIGJlIGZhbHNl
Iik7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1Rw
LCB0cnVlLCBmYWxzZSwgZmFsc2U+IDogX19pc19wYXRoYWJsZV9zdHJpbmc8X1RwPiB7fTsKKwor
dGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgZmFsc2UsIHRy
dWUsIGZhbHNlPiA6IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheTxfVHA+IHsKK307CisKK3RlbXBs
YXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIGZhbHNlLCBmYWxzZSwg
dHJ1ZT4gOiBfX2lzX3BhdGhhYmxlX2l0ZXI8X1RwPiB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9F
Q2hhclQ+CitzdHJ1Y3QgX1BhdGhDVlQgeworICBzdGF0aWNfYXNzZXJ0KF9fY2FuX2NvbnZlcnRf
Y2hhcjxfRUNoYXJUPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgIkNoYXIgdHlwZSBub3QgY29u
dmVydGlibGUiKTsKKworICB0eXBlZGVmIF9fbmFycm93X3RvX3V0Zjg8c2l6ZW9mKF9FQ2hhclQp
ICogX19DSEFSX0JJVF9fPiBfTmFycm93ZXI7CisKKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFu
Z2Uoc3RyaW5nJiBfX2Rlc3QsIF9FQ2hhclQgY29uc3QqIF9fYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0VDaGFyVCBjb25zdCogX19lKSB7CisgICAgX05hcnJvd2VyKCkoYmFja19p
bnNlcnRlcihfX2Rlc3QpLCBfX2IsIF9fZSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXI+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBf
X2IsIF9JdGVyIF9fZSkgeworICAgIHN0YXRpY19hc3NlcnQoIWlzX3NhbWU8X0l0ZXIsIF9FQ2hh
clQqPjo6dmFsdWUsICJDYWxsIGNvbnN0IG92ZXJsb2FkIik7CisgICAgaWYgKF9fYiA9PSBfX2Up
CisgICAgICByZXR1cm47CisgICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQ+IF9fdG1wKF9fYiwgX19l
KTsKKyAgICBfTmFycm93ZXIoKShiYWNrX2luc2VydGVyKF9fZGVzdCksIF9fdG1wLmRhdGEoKSwK
KyAgICAgICAgICAgICAgICBfX3RtcC5kYXRhKCkgKyBfX3RtcC5sZW5ndGgoKSk7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0
cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9OdWxsU2VudGluYWwpIHsKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFpc19zYW1lPF9JdGVyLCBfRUNoYXJUKj46OnZhbHVlLCAiQ2FsbCBjb25zdCBvdmVybG9h
ZCIpOworICAgIGNvbnN0IF9FQ2hhclQgX19zZW50aW5hbCA9IF9FQ2hhclR7fTsKKyAgICBpZiAo
Kl9fYiA9PSBfX3NlbnRpbmFsKQorICAgICAgcmV0dXJuOworICAgIGJhc2ljX3N0cmluZzxfRUNo
YXJUPiBfX3RtcDsKKyAgICBmb3IgKDsgKl9fYiAhPSBfX3NlbnRpbmFsOyArK19fYikKKyAgICAg
IF9fdG1wLnB1c2hfYmFjaygqX19iKTsKKyAgICBfTmFycm93ZXIoKShiYWNrX2luc2VydGVyKF9f
ZGVzdCksIF9fdG1wLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBfX3RtcC5kYXRhKCkgKyBfX3Rt
cC5sZW5ndGgoKSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgc3RhdGlj
IHZvaWQgX19hcHBlbmRfc291cmNlKHN0cmluZyYgX19kZXN0LCBfU291cmNlIGNvbnN0JiBfX3Mp
IHsKKyAgICB1c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsKKyAgICBfX2Fw
cGVuZF9yYW5nZShfX2Rlc3QsIF9UcmFpdHM6Ol9fcmFuZ2VfYmVnaW4oX19zKSwKKyAgICAgICAg
ICAgICAgICAgICBfVHJhaXRzOjpfX3JhbmdlX2VuZChfX3MpKTsKKyAgfQorfTsKKwordGVtcGxh
dGUgPD4KK3N0cnVjdCBfUGF0aENWVDxjaGFyPiB7CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgorICBzdGF0aWMgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfZXhhY3RseV9pbnB1dF9pdGVyYXRv
cjxfSXRlcj46OnZhbHVlPjo6dHlwZQorICBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwg
X0l0ZXIgX19iLCBfSXRlciBfX2UpIHsKKyAgICBmb3IgKDsgX19iICE9IF9fZTsgKytfX2IpCisg
ICAgICBfX2Rlc3QucHVzaF9iYWNrKCpfX2IpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgorICBzdGF0aWMgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfZm9yd2FyZF9pdGVyYXRvcjxf
SXRlcj46OnZhbHVlPjo6dHlwZQorICBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0
ZXIgX19iLCBfSXRlciBfX2UpIHsKKyAgICBfX2Rlc3QuX19hcHBlbmRfZm9yd2FyZF91bnNhZmUo
X19iLCBfX2UpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorICBzdGF0aWMgdm9p
ZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfTnVsbFNlbnRpbmFs
KSB7CisgICAgY29uc3QgY2hhciBfX3NlbnRpbmFsID0gY2hhcnt9OworICAgIGZvciAoOyAqX19i
ICE9IF9fc2VudGluYWw7ICsrX19iKQorICAgICAgX19kZXN0LnB1c2hfYmFjaygqX19iKTsKKyAg
fQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9z
b3VyY2Uoc3RyaW5nJiBfX2Rlc3QsIF9Tb3VyY2UgY29uc3QmIF9fcykgeworICAgIHVzaW5nIF9U
cmFpdHMgPSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OworICAgIF9fYXBwZW5kX3JhbmdlKF9fZGVz
dCwgX1RyYWl0czo6X19yYW5nZV9iZWdpbihfX3MpLAorICAgICAgICAgICAgICAgICAgIF9UcmFp
dHM6Ol9fcmFuZ2VfZW5kKF9fcykpOworICB9Cit9OworCitjbGFzcyBfTElCQ1BQX1RZUEVfVklT
IHBhdGggeworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZU9ySXRlciwgY2xhc3MgX1RwID0gcGF0
aCY+CisgIHVzaW5nIF9FbmFibGVJZlBhdGhhYmxlID0KKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9p
ZjxfX2lzX3BhdGhhYmxlPF9Tb3VyY2VPckl0ZXI+Ojp2YWx1ZSwgX1RwPjo6dHlwZTsKKworICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICB1c2luZyBfU291cmNlQ2hhciA9IHR5cGVuYW1lIF9faXNf
cGF0aGFibGU8X1RwPjo6X19jaGFyX3R5cGU7CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAg
dXNpbmcgX1NvdXJjZUNWVCA9IF9QYXRoQ1ZUPF9Tb3VyY2VDaGFyPF9UcD4gPjsKKworcHVibGlj
OgorICB0eXBlZGVmIGNoYXIgdmFsdWVfdHlwZTsKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8dmFs
dWVfdHlwZT4gc3RyaW5nX3R5cGU7CisgIHR5cGVkZWYgX1ZTVEQ6OnN0cmluZ192aWV3IF9fc3Ry
aW5nX3ZpZXc7CisgIHN0YXRpYyBjb25zdGV4cHIgdmFsdWVfdHlwZSBwcmVmZXJyZWRfc2VwYXJh
dG9yID0gJy8nOworCisgIGVudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBmb3JtYXQgOiB1bnNp
Z25lZCBjaGFyIHsKKyAgICBhdXRvX2Zvcm1hdCwKKyAgICBuYXRpdmVfZm9ybWF0LAorICAgIGdl
bmVyaWNfZm9ybWF0CisgIH07CisKKyAgLy8gY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9yCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCgpIG5vZXhjZXB0IHt9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aChjb25zdCBwYXRoJiBfX3ApIDogX19wbl8oX19wLl9fcG5f
KSB7fQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgocGF0aCYmIF9fcCkgbm9leGNl
cHQKKyAgICAgIDogX19wbl8oX1ZTVEQ6Om1vdmUoX19wLl9fcG5fKSkge30KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgoc3RyaW5nX3R5cGUmJiBfX3MsIGZvcm1hdCA9IGZv
cm1hdDo6YXV0b19mb3JtYXQpIG5vZXhjZXB0CisgICAgICA6IF9fcG5fKF9WU1REOjptb3ZlKF9f
cykpIHt9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNzID0gX0VuYWJsZUlmUGF0
aGFibGU8X1NvdXJjZSwgdm9pZD4gPgorICBwYXRoKGNvbnN0IF9Tb3VyY2UmIF9fc3JjLCBmb3Jt
YXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KSB7CisgICAgX1NvdXJjZUNWVDxfU291cmNlPjo6X19h
cHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXQ+CisgIHBhdGgoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0LCBmb3JtYXQg
PSBmb3JtYXQ6OmF1dG9fZm9ybWF0KSB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBfUGF0aENWVDxfSXRWYWw+
OjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsKKyAgfQorCisgIC8vIFRP
RE8gSW1wbGVtZW50IGxvY2FsZSBjb252ZXJzaW9ucy4KKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3Vy
Y2UsIGNsYXNzID0gX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZSwgdm9pZD4gPgorICBwYXRoKGNv
bnN0IF9Tb3VyY2UmIF9fc3JjLCBjb25zdCBsb2NhbGUmIF9fbG9jLCBmb3JtYXQgPSBmb3JtYXQ6
OmF1dG9fZm9ybWF0KTsKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoKF9JbnB1
dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9sYXN0LCBjb25zdCBsb2NhbGUmIF9fbG9jLAorICAgICAg
IGZvcm1hdCA9IGZvcm1hdDo6YXV0b19mb3JtYXQpOworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgfnBhdGgoKSA9IGRlZmF1bHQ7CisKKyAgLy8gYXNzaWdubWVudHMKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcj0oY29uc3QgcGF0aCYgX19wKSB7
CisgICAgX19wbl8gPSBfX3AuX19wbl87CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcj0ocGF0aCYmIF9fcCkgbm9l
eGNlcHQgeworICAgIF9fcG5fID0gX1ZTVEQ6Om1vdmUoX19wLl9fcG5fKTsKKyAgICByZXR1cm4g
KnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgPSB2b2lkPgorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGgmIG9wZXJhdG9yPShzdHJpbmdfdHlwZSYmIF9fcykgbm9leGNlcHQg
eworICAgIF9fcG5fID0gX1ZTVEQ6Om1vdmUoX19zKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIGFzc2lnbihzdHJpbmdfdHlw
ZSYmIF9fcykgbm9leGNlcHQgeworICAgIF9fcG5fID0gX1ZTVEQ6Om1vdmUoX19zKTsKKyAgICBy
ZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPgorICBvcGVyYXRv
cj0oY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3Jj
KTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfRW5hYmxlSWZQYXRoYWJs
ZTxfU291cmNlPiBhc3NpZ24oY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICBfX3BuXy5jbGVh
cigpOworICAgIF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX19z
cmMpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dD4KKyAgcGF0aCYgYXNzaWduKF9JbnB1dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9fbGFzdCkgewor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlw
ZSBfSXRWYWw7CisgICAgX19wbl8uY2xlYXIoKTsKKyAgICBfUGF0aENWVDxfSXRWYWw+OjpfX2Fw
cGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsKKyAgICByZXR1cm4gKnRoaXM7Cisg
IH0KKworcHJpdmF0ZToKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQ+CisgIHN0YXRpYyBib29s
IF9fc291cmNlX2lzX2Fic29sdXRlKF9FQ2hhclQgX19maXJzdF9vcl9udWxsKSB7CisgICAgcmV0
dXJuIF9faXNfc2VwYXJhdG9yKF9fZmlyc3Rfb3JfbnVsbCk7CisgIH0KKworcHVibGljOgorICAv
LyBhcHBlbmRzCisgIHBhdGgmIG9wZXJhdG9yLz0oY29uc3QgcGF0aCYgX19wKSB7CisgICAgaWYg
KF9fcC5pc19hYnNvbHV0ZSgpKSB7CisgICAgICBfX3BuXyA9IF9fcC5fX3BuXzsKKyAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgaWYgKGhhc19maWxlbmFtZSgpKQorICAgICAgX19wbl8g
Kz0gcHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICBfX3BuXyArPSBfX3AubmF0aXZlKCk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gRklYTUU6IFVzZSBfTElCQ1BQX0RJQUdOT1NFX1dB
Uk5JTkcgdG8gcHJvZHVjZSBhIGRpYWdub3N0aWMgd2hlbiBfX3NyYworICAvLyBpcyBrbm93biBh
dCBjb21waWxlIHRpbWUgdG8gYmUgIi8nIHNpbmNlIHRoZSB1c2VyIGFsbW9zdCBjZXJ0YWlubHkg
aW50ZW5kZWQKKyAgLy8gdG8gYXBwZW5kIGEgc2VwYXJhdG9yIGluc3RlYWQgb2Ygb3ZlcndyaXRp
bmcgdGhlIHBhdGggd2l0aCAiLyIKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4KKyAgb3BlcmF0
b3IvPShjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHJldHVybiB0aGlzLT5hcHBlbmQoX19z
cmMpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhh
YmxlPF9Tb3VyY2U+IGFwcGVuZChjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHVzaW5nIF9U
cmFpdHMgPSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OworICAgIHVzaW5nIF9DVlQgPSBfUGF0aENW
VDxfU291cmNlQ2hhcjxfU291cmNlPiA+OworICAgIGlmIChfX3NvdXJjZV9pc19hYnNvbHV0ZShf
VHJhaXRzOjpfX2ZpcnN0X29yX251bGwoX19zcmMpKSkKKyAgICAgIF9fcG5fLmNsZWFyKCk7Cisg
ICAgZWxzZSBpZiAoaGFzX2ZpbGVuYW1lKCkpCisgICAgICBfX3BuXyArPSBwcmVmZXJyZWRfc2Vw
YXJhdG9yOworICAgIF9DVlQ6Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX19zcmMpOworICAgIHJl
dHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KKyAgcGF0aCYg
YXBwZW5kKF9JbnB1dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9fbGFzdCkgeworICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlwZSBfSXRWYWw7Cisg
ICAgc3RhdGljX2Fzc2VydChfX2Nhbl9jb252ZXJ0X2NoYXI8X0l0VmFsPjo6dmFsdWUsICJNdXN0
IGNvbnZlcnRpYmxlIik7CisgICAgdXNpbmcgX0NWVCA9IF9QYXRoQ1ZUPF9JdFZhbD47CisgICAg
aWYgKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fc291cmNlX2lzX2Fic29sdXRlKCpfX2ZpcnN0KSkK
KyAgICAgIF9fcG5fLmNsZWFyKCk7CisgICAgZWxzZSBpZiAoaGFzX2ZpbGVuYW1lKCkpCisgICAg
ICBfX3BuXyArPSBwcmVmZXJyZWRfc2VwYXJhdG9yOworICAgIF9DVlQ6Ol9fYXBwZW5kX3Jhbmdl
KF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8v
IGNvbmNhdGVuYXRpb24KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVy
YXRvcis9KGNvbnN0IHBhdGgmIF9feCkgeworICAgIF9fcG5fICs9IF9feC5fX3BuXzsKKyAgICBy
ZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgm
IG9wZXJhdG9yKz0oY29uc3Qgc3RyaW5nX3R5cGUmIF9feCkgeworICAgIF9fcG5fICs9IF9feDsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHBhdGgmIG9wZXJhdG9yKz0oX19zdHJpbmdfdmlldyBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3g7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBwYXRoJiBvcGVyYXRvcis9KGNvbnN0IHZhbHVlX3R5cGUqIF9feCkgeworICAgIF9fcG5fICs9
IF9feDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHBhdGgmIG9wZXJhdG9yKz0odmFsdWVfdHlwZSBfX3gpIHsKKyAgICBfX3BuXyArPSBf
X3g7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQ+
CisgIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46OnZhbHVl
LCBwYXRoJj46OnR5cGUKKyAgb3BlcmF0b3IrPShfRUNoYXJUIF9feCkgeworICAgIGJhc2ljX3N0
cmluZzxfRUNoYXJUPiBfX3RtcDsKKyAgICBfX3RtcCArPSBfX3g7CisgICAgX1BhdGhDVlQ8X0VD
aGFyVD46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX190bXApOworICAgIHJldHVybiAqdGhpczsK
KyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfRW5hYmxlSWZQYXRoYWJsZTxf
U291cmNlPiBvcGVyYXRvcis9KGNvbnN0IF9Tb3VyY2UmIF9feCkgeworICAgIHJldHVybiB0aGlz
LT5jb25jYXQoX194KTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfRW5h
YmxlSWZQYXRoYWJsZTxfU291cmNlPiBjb25jYXQoY29uc3QgX1NvdXJjZSYgX194KSB7CisgICAg
X1NvdXJjZUNWVDxfU291cmNlPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3gpOworICAgIHJl
dHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KKyAgcGF0aCYg
Y29uY2F0KF9JbnB1dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9fbGFzdCkgeworICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlwZSBfSXRWYWw7Cisg
ICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFz
dCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gbW9kaWZpZXJzCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBjbGVhcigpIG5vZXhjZXB0IHsgX19wbl8uY2xlYXIo
KTsgfQorCisgIHBhdGgmIG1ha2VfcHJlZmVycmVkKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIHJlbW92ZV9maWxlbmFtZSgpIHsKKyAg
ICBhdXRvIF9fZm5hbWUgPSBfX2ZpbGVuYW1lKCk7CisgICAgaWYgKCFfX2ZuYW1lLmVtcHR5KCkp
CisgICAgICBfX3BuXy5lcmFzZShfX2ZuYW1lLmRhdGEoKSAtIF9fcG5fLmRhdGEoKSk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9maWxlbmFtZShjb25zdCBwYXRo
JiBfX3JlcGxhY2VtZW50KSB7CisgICAgcmVtb3ZlX2ZpbGVuYW1lKCk7CisgICAgcmV0dXJuICgq
dGhpcyAvPSBfX3JlcGxhY2VtZW50KTsKKyAgfQorCisgIHBhdGgmIHJlcGxhY2VfZXh0ZW5zaW9u
KGNvbnN0IHBhdGgmIF9fcmVwbGFjZW1lbnQgPSBwYXRoKCkpOworCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgdm9pZCBzd2FwKHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7IF9fcG5fLnN3
YXAoX19yaHMuX19wbl8pOyB9CisKKyAgLy8gcHJpdmF0ZSBoZWxwZXIgdG8gYWxsb3cgcmVzZXJ2
aW5nIG1lbW9yeSBpbiB0aGUgcGF0aAorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZv
aWQgX19yZXNlcnZlKHNpemVfdCBfX3MpIHsgX19wbl8ucmVzZXJ2ZShfX3MpOyB9CisKKyAgLy8g
bmF0aXZlIGZvcm1hdCBvYnNlcnZlcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBj
b25zdCBzdHJpbmdfdHlwZSYgbmF0aXZlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wbl87
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IHZhbHVlX3R5cGUqIGNf
c3RyKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wbl8uY19zdHIoKTsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgb3BlcmF0b3Igc3RyaW5nX3R5cGUoKSBjb25zdCB7IHJldHVy
biBfX3BuXzsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFzcyBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0VDaGFyVD4sCisgICAgICAgICAgICBjbGFzcyBfQWxsb2NhdG9yID0gYWxs
b2NhdG9yPF9FQ2hhclQ+ID4KKyAgYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Y2F0b3I+CisgIHN0cmluZyhjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpIGNv
bnN0IHsKKyAgICB1c2luZyBfQ1ZUID0gX193aWRlbl9mcm9tX3V0Zjg8c2l6ZW9mKF9FQ2hhclQp
ICogX19DSEFSX0JJVF9fPjsKKyAgICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nPF9FQ2hhclQs
IF9UcmFpdHMsIF9BbGxvY2F0b3I+OworICAgIF9TdHIgX19zKF9fYSk7CisgICAgX19zLnJlc2Vy
dmUoX19wbl8uc2l6ZSgpKTsKKyAgICBfQ1ZUKCkoYmFja19pbnNlcnRlcihfX3MpLCBfX3BuXy5k
YXRhKCksIF9fcG5fLmRhdGEoKSArIF9fcG5fLnNpemUoKSk7CisgICAgcmV0dXJuIF9fczsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjpzdHJpbmcgc3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gX19wbl87IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6Ondz
dHJpbmcgd3N0cmluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPHdjaGFyX3Q+KCk7Cisg
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnN0cmluZyB1OHN0cmluZygpIGNv
bnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp1
MTZzdHJpbmcgdTE2c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8Y2hhcjE2X3Q+
KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnUzMnN0cmluZyB1MzJz
dHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxjaGFyMzJfdD4oKTsKKyAgfQorCisg
IC8vIGdlbmVyaWMgZm9ybWF0IG9ic2VydmVycworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwg
Y2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9FQ2hhclQ+LAorICAgICAgICAgICAgY2xhc3Mg
X0FsbG9jYXRvciA9IGFsbG9jYXRvcjxfRUNoYXJUPiA+CisgIGJhc2ljX3N0cmluZzxfRUNoYXJU
LCBfVHJhaXRzLCBfQWxsb2NhdG9yPgorICBnZW5lcmljX3N0cmluZyhjb25zdCBfQWxsb2NhdG9y
JiBfX2EgPSBfQWxsb2NhdG9yKCkpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPF9FQ2hhclQs
IF9UcmFpdHMsIF9BbGxvY2F0b3I+KF9fYSk7CisgIH0KKworICBzdGQ6OnN0cmluZyBnZW5lcmlj
X3N0cmluZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIHN0ZDo6d3N0cmluZyBnZW5lcmlj
X3dzdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpbmc8d2NoYXJfdD4oKTsgfQorICBzdGQ6OnN0
cmluZyBnZW5lcmljX3U4c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgc3RkOjp1
MTZzdHJpbmcgZ2VuZXJpY191MTZzdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpbmc8Y2hhcjE2
X3Q+KCk7IH0KKyAgc3RkOjp1MzJzdHJpbmcgZ2VuZXJpY191MzJzdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBzdHJpbmc8Y2hhcjMyX3Q+KCk7IH0KKworcHJpdmF0ZToKKyAgaW50IF9fY29tcGFyZShf
X3N0cmluZ192aWV3KSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3Jvb3RfbmFtZSgpIGNvbnN0
OworICBfX3N0cmluZ192aWV3IF9fcm9vdF9kaXJlY3RvcnkoKSBjb25zdDsKKyAgX19zdHJpbmdf
dmlldyBfX3Jvb3RfcGF0aF9yYXcoKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3JlbGF0aXZl
X3BhdGgoKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3BhcmVudF9wYXRoKCkgY29uc3Q7Cisg
IF9fc3RyaW5nX3ZpZXcgX19maWxlbmFtZSgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fc3Rl
bSgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fZXh0ZW5zaW9uKCkgY29uc3Q7CisKK3B1Ymxp
YzoKKyAgLy8gY29tcGFyZQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJl
KGNvbnN0IHBhdGgmIF9fcCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2NvbXBhcmUo
X19wLl9fcG5fKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJl
KGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9f
cyk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShfX3N0cmlu
Z192aWV3IF9fcykgY29uc3QgeworICAgIHJldHVybiBfX2NvbXBhcmUoX19zKTsKKyAgfQorICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJlKGNvbnN0IHZhbHVlX3R5cGUqIF9f
cykgY29uc3QgeworICAgIHJldHVybiBfX2NvbXBhcmUoX19zKTsKKyAgfQorCisgIC8vIGRlY29t
cG9zaXRpb24KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJvb3RfbmFtZSgpIGNv
bnN0IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19yb290X25hbWUoKSk7CisgIH0KKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJvb3RfZGlyZWN0b3J5KCkgY29uc3QgeworICAg
IHJldHVybiBzdHJpbmdfdHlwZShfX3Jvb3RfZGlyZWN0b3J5KCkpOworICB9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuIHJv
b3RfbmFtZSgpLmFwcGVuZChzdHJpbmdfdHlwZShfX3Jvb3RfZGlyZWN0b3J5KCkpKTsKKyAgfQor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVsYXRpdmVfcGF0aCgpIGNvbnN0IHsK
KyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19yZWxhdGl2ZV9wYXRoKCkpOworICB9CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBwYXJlbnRfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1
cm4gc3RyaW5nX3R5cGUoX19wYXJlbnRfcGF0aCgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIHBhdGggZmlsZW5hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBl
KF9fZmlsZW5hbWUoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHN0
ZW0oKSBjb25zdCB7IHJldHVybiBzdHJpbmdfdHlwZShfX3N0ZW0oKSk7IH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIGV4dGVuc2lvbigpIGNvbnN0IHsKKyAgICByZXR1cm4gc3Ry
aW5nX3R5cGUoX19leHRlbnNpb24oKSk7CisgIH0KKworICAvLyBxdWVyeQorICBfTElCQ1BQX05P
RElTQ0FSRF9BRlRFUl9DWFgxNyBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKKyAgZW1w
dHkoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcG5fLmVtcHR5KCk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3Jvb3RfbmFtZSgpIGNvbnN0IHsK
KyAgICByZXR1cm4gIV9fcm9vdF9uYW1lKCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaGFzX3Jvb3RfZGlyZWN0b3J5KCkgY29uc3QgeworICAgIHJldHVy
biAhX19yb290X2RpcmVjdG9yeSgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGhhc19yb290X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3Jvb3Rf
cGF0aF9yYXcoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBoYXNfcmVsYXRpdmVfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcmVsYXRpdmVfcGF0
aCgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19w
YXJlbnRfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcGFyZW50X3BhdGgoKS5lbXB0eSgp
OworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfZmlsZW5hbWUoKSBj
b25zdCB7CisgICAgcmV0dXJuICFfX2ZpbGVuYW1lKCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3N0ZW0oKSBjb25zdCB7IHJldHVybiAhX19zdGVt
KCkuZW1wdHkoKTsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX2V4dGVu
c2lvbigpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fZXh0ZW5zaW9uKCkuZW1wdHkoKTsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19hYnNvbHV0ZSgpIGNvbnN0IHsK
KyAgICByZXR1cm4gaGFzX3Jvb3RfZGlyZWN0b3J5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGlzX3JlbGF0aXZlKCkgY29uc3QgeyByZXR1cm4gIWlzX2Fic29sdXRl
KCk7IH0KKworICAvLyByZWxhdGl2ZSBwYXRocworICBwYXRoIGxleGljYWxseV9ub3JtYWwoKSBj
b25zdDsKKyAgcGF0aCBsZXhpY2FsbHlfcmVsYXRpdmUoY29uc3QgcGF0aCYgX19iYXNlKSBjb25z
dDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggbGV4aWNhbGx5X3Byb3hpbWF0
ZShjb25zdCBwYXRoJiBfX2Jhc2UpIGNvbnN0IHsKKyAgICBwYXRoIF9fcmVzdWx0ID0gdGhpcy0+
bGV4aWNhbGx5X3JlbGF0aXZlKF9fYmFzZSk7CisgICAgaWYgKF9fcmVzdWx0Lm5hdGl2ZSgpLmVt
cHR5KCkpCisgICAgICByZXR1cm4gKnRoaXM7CisgICAgcmV0dXJuIF9fcmVzdWx0OworICB9CisK
KyAgLy8gaXRlcmF0b3JzCisgIGNsYXNzIF9MSUJDUFBfVFlQRV9WSVMgaXRlcmF0b3I7CisgIHR5
cGVkZWYgaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dDsKKyAgaXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwg
Y2xhc3MgX1RyYWl0cz4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmllbmQKKyAgICAg
IHR5cGVuYW1lIGVuYWJsZV9pZjxpc19zYW1lPF9DaGFyVCwgY2hhcj46OnZhbHVlICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NhbWU8X1RyYWl0cywgY2hhcl90cmFpdHM8Y2hh
cj4gPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Jj46OnR5cGUKKyAgICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBwYXRoJiBfX3ApIHsKKyAgICBfX29zIDw8IHN0ZDo6
X19xdW90ZWQoX19wLm5hdGl2ZSgpKTsKKyAgICByZXR1cm4gX19vczsKKyAgfQorCisgIHRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgZnJpZW5kCisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8IWlzX3NhbWU8X0NoYXJULCBj
aGFyPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzX3NhbWU8X1Ry
YWl0cywgY2hhcl90cmFpdHM8Y2hhcj4gPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jj46OnR5cGUKKyAgICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgICBfX29zIDw8IHN0ZDo6X19xdW90ZWQoX19wLnN0cmluZzxfQ2hhclQsIF9UcmFpdHM+
KCkpOworICAgIHJldHVybiBfX29zOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwg
Y2xhc3MgX1RyYWl0cz4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmllbmQgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19pcywgcGF0aCYgX19wKSB7CisgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cz4gX190bXA7CisgICAgX19pcyA+PiBfX3F1b3RlZChfX3RtcCk7CisgICAgX19w
ID0gX190bXA7CisgICAgcmV0dXJuIF9faXM7CisgIH0KKworcHJpdmF0ZToKKyAgaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCYKKyAgX19hc3NpZ25fdmlldyhfX3N0cmluZ192
aWV3IGNvbnN0JiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IHN0cmluZ190eXBlKF9fcyk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHN0cmluZ190eXBlIF9fcG5fOworfTsKKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBzd2FwKHBhdGgmIF9fbGhzLCBwYXRo
JiBfX3Jocykgbm9leGNlcHQgeworICBfX2xocy5zd2FwKF9fcmhzKTsKK30KKworX0xJQkNQUF9G
VU5DX1ZJUworc2l6ZV90IGhhc2hfdmFsdWUoY29uc3QgcGF0aCYgX19wKSBub2V4Y2VwdDsKKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh
dGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA9PSAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IG9wZXJhdG9yIT0oY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19y
aHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBh
dGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA8PSAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IG9wZXJhdG9yPihjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJl
dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jo
cykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBvcGVyYXRvci8oY29uc3QgcGF0
aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBwYXRoJiBfX3JocykgeworICBwYXRoIF9fcmVzdWx0KF9fbGhzKTsKKyAgX19yZXN1
bHQgLz0gX19yaHM7CisgIHJldHVybiBfX3Jlc3VsdDsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9T
b3VyY2U+CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgdHlwZW5hbWUgZW5hYmxlX2lm
PF9faXNfcGF0aGFibGU8X1NvdXJjZT46OnZhbHVlLCBwYXRoPjo6dHlwZQorICAgIHU4cGF0aChj
b25zdCBfU291cmNlJiBfX3MpIHsKKyAgc3RhdGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlw
ZW5hbWUgX19pc19wYXRoYWJsZTxfU291cmNlPjo6X19jaGFyX3R5cGUsIGNoYXI+Ojp2YWx1ZSwK
KyAgICAgICJ1OHBhdGgoU291cmNlIGNvbnN0JikgcmVxdWlyZXMgU291cmNlIGhhdmUgYSBjaGFy
YWN0ZXIgdHlwZSBvZiB0eXBlICIKKyAgICAgICInY2hhciciKTsKKyAgcmV0dXJuIHBhdGgoX19z
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICAgIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX3BhdGhhYmxlPF9JbnB1dEl0Pjo6dmFs
dWUsIHBhdGg+Ojp0eXBlCisgICAgdThwYXRoKF9JbnB1dEl0IF9fZiwgX0lucHV0SXQgX19sKSB7
CisgIHN0YXRpY19hc3NlcnQoCisgICAgICBpc19zYW1lPHR5cGVuYW1lIF9faXNfcGF0aGFibGU8
X0lucHV0SXQ+OjpfX2NoYXJfdHlwZSwgY2hhcj46OnZhbHVlLAorICAgICAgInU4cGF0aChJdGVy
LCBJdGVyKSByZXF1aXJlcyBJdGVyIGhhdmUgYSB2YWx1ZV90eXBlIG9mIHR5cGUgJ2NoYXInIik7
CisgIHJldHVybiBwYXRoKF9fZiwgX19sKTsKK30KKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBw
YXRoOjppdGVyYXRvciB7CitwdWJsaWM6CisgIGVudW0gX1BhcnNlclN0YXRlIDogdW5zaWduZWQg
Y2hhciB7CisgICAgX1Npbmd1bGFyLAorICAgIF9CZWZvcmVCZWdpbiwKKyAgICBfSW5Sb290TmFt
ZSwKKyAgICBfSW5Sb290RGlyLAorICAgIF9JbkZpbGVuYW1lcywKKyAgICBfSW5UcmFpbGluZ1Nl
cCwKKyAgICBfQXRFbmQKKyAgfTsKKworcHVibGljOgorICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgIHR5cGVkZWYgcGF0aCB2YWx1ZV90
eXBlOworICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgdHlwZWRl
ZiBjb25zdCBwYXRoKiBwb2ludGVyOworICB0eXBlZGVmIGNvbnN0IHBhdGgmIHJlZmVyZW5jZTsK
KworICB0eXBlZGVmIHZvaWQKKyAgICAgIF9fc3Rhc2hpbmdfaXRlcmF0b3JfdGFnOyAvLyBTZWUg
cmV2ZXJzZV9pdGVyYXRvciBhbmQgX19pc19zdGFzaGluZ19pdGVyYXRvcgorCitwdWJsaWM6Cisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRlcmF0b3IoKQorICAgICAgOiBfX3N0YXNo
ZWRfZWxlbV8oKSwgX19wYXRoX3B0cl8obnVsbHB0ciksIF9fZW50cnlfKCksCisgICAgICAgIF9f
c3RhdGVfKF9TaW5ndWxhcikge30KKworICBpdGVyYXRvcihjb25zdCBpdGVyYXRvciYpID0gZGVm
YXVsdDsKKyAgfml0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgIGl0ZXJhdG9yJiBvcGVyYXRvcj0o
Y29uc3QgaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX19zdGFzaGVkX2VsZW1f
OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwb2ludGVyIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmX19zdGFzaGVkX2VsZW1fOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKKyAgICBfTElCQ1BQX0FTU0VS
VChfX3N0YXRlXyAhPSBfU2luZ3VsYXIsCisgICAgICAgICAgICAgICAgICAgImF0dGVtcHRpbmcg
dG8gaW5jcmVtZW50IGEgc2luZ3VsYXIgaXRlcmF0b3IiKTsKKyAgICBfTElCQ1BQX0FTU0VSVChf
X3N0YXRlXyAhPSBfQXRFbmQsCisgICAgICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gaW5j
cmVtZW50IHRoZSBlbmQgaXRlcmF0b3IiKTsKKyAgICByZXR1cm4gX19pbmNyZW1lbnQoKTsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRlcmF0b3Igb3BlcmF0b3IrKyhp
bnQpIHsKKyAgICBpdGVyYXRvciBfX2l0KCp0aGlzKTsKKyAgICB0aGlzLT5vcGVyYXRvcisrKCk7
CisgICAgcmV0dXJuIF9faXQ7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgeworICAgIF9MSUJDUFBfQVNTRVJUKF9fc3RhdGVfICE9
IF9TaW5ndWxhciwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBkZWNyZW1lbnQg
YSBzaW5ndWxhciBpdGVyYXRvciIpOworICAgIF9MSUJDUFBfQVNTRVJUKF9fZW50cnlfLmRhdGEo
KSAhPSBfX3BhdGhfcHRyXy0+bmF0aXZlKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICJh
dHRlbXB0aW5nIHRvIGRlY3JlbWVudCB0aGUgYmVnaW4gaXRlcmF0b3IiKTsKKyAgICByZXR1cm4g
X19kZWNyZW1lbnQoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRl
cmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKKyAgICBpdGVyYXRvciBfX2l0KCp0aGlzKTsKKyAgICB0
aGlzLT5vcGVyYXRvci0tKCk7CisgICAgcmV0dXJuIF9faXQ7CisgIH0KKworcHJpdmF0ZToKKyAg
ZnJpZW5kIGNsYXNzIHBhdGg7CisKKyAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlcmF0b3Im
KTsKKworICBpdGVyYXRvciYgX19pbmNyZW1lbnQoKTsKKyAgaXRlcmF0b3ImIF9fZGVjcmVtZW50
KCk7CisKKyAgcGF0aCBfX3N0YXNoZWRfZWxlbV87CisgIGNvbnN0IHBhdGgqIF9fcGF0aF9wdHJf
OworICBwYXRoOjpfX3N0cmluZ192aWV3IF9fZW50cnlfOworICBfUGFyc2VyU3RhdGUgX19zdGF0
ZV87Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9y
PT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX3Jocykgewor
ICByZXR1cm4gX19saHMuX19wYXRoX3B0cl8gPT0gX19yaHMuX19wYXRoX3B0cl8gJiYKKyAgICAg
ICAgIF9fbGhzLl9fZW50cnlfLmRhdGEoKSA9PSBfX3Jocy5fX2VudHJ5Xy5kYXRhKCk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3IhPShjb25zdCBw
YXRoOjppdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fcmhzKSB7CisgIHJldHVybiAh
KF9fbGhzID09IF9fcmhzKTsKK30KKworY2xhc3MgX0xJQkNQUF9FWENFUFRJT05fQUJJIGZpbGVz
eXN0ZW1fZXJyb3IgOiBwdWJsaWMgc3lzdGVtX2Vycm9yIHsKK3B1YmxpYzoKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0
LCBlcnJvcl9jb2RlIF9fZWMpCisgICAgICA6IHN5c3RlbV9lcnJvcihfX2VjLCBfX3doYXQpLAor
ICAgICAgICBfX3N0b3JhZ2VfKG1ha2Vfc2hhcmVkPF9TdG9yYWdlPihwYXRoKCksIHBhdGgoKSkp
IHsKKyAgICBfX2NyZWF0ZV93aGF0KDApOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0LCBjb25zdCBwYXRo
JiBfX3AxLCBlcnJvcl9jb2RlIF9fZWMpCisgICAgICA6IHN5c3RlbV9lcnJvcihfX2VjLCBfX3do
YXQpLAorICAgICAgICBfX3N0b3JhZ2VfKG1ha2Vfc2hhcmVkPF9TdG9yYWdlPihfX3AxLCBwYXRo
KCkpKSB7CisgICAgX19jcmVhdGVfd2hhdCgxKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgZmlsZXN5c3RlbV9lcnJvcihjb25zdCBzdHJpbmcmIF9fd2hhdCwgY29uc3Qg
cGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMiwKKyAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlIF9fZWMpCisgICAgICA6IHN5c3RlbV9lcnJvcihfX2VjLCBfX3doYXQpLAorICAgICAgICBf
X3N0b3JhZ2VfKG1ha2Vfc2hhcmVkPF9TdG9yYWdlPihfX3AxLCBfX3AyKSkgeworICAgIF9fY3Jl
YXRlX3doYXQoMik7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0
IHBhdGgmIHBhdGgxKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19zdG9yYWdlXy0+X19wMV87
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IHBhdGgmIHBhdGgyKCkg
Y29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19zdG9yYWdlXy0+X19wMl87IH0KKworICB+ZmlsZXN5
c3RlbV9lcnJvcigpIG92ZXJyaWRlOyAvLyBrZXkgZnVuY3Rpb24KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlk
ZSB7CisgICAgcmV0dXJuIF9fc3RvcmFnZV8tPl9fd2hhdF8uY19zdHIoKTsKKyAgfQorCisgIF9M
SUJDUFBfRlVOQ19WSVMKKyAgdm9pZCBfX2NyZWF0ZV93aGF0KGludCBfX251bV9wYXRocyk7CisK
K3ByaXZhdGU6CisgIHN0cnVjdCBfU3RvcmFnZSB7CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICAgIF9TdG9yYWdlKGNvbnN0IHBhdGgmIF9fcDEsIGNvbnN0IHBhdGgmIF9fcDIpIDog
X19wMV8oX19wMSksIF9fcDJfKF9fcDIpIHt9CisKKyAgICBwYXRoIF9fcDFfOworICAgIHBhdGgg
X19wMl87CisgICAgc3RyaW5nIF9fd2hhdF87CisgIH07CisgIHNoYXJlZF9wdHI8X1N0b3JhZ2U+
IF9fc3RvcmFnZV87Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MuLi4gX0FyZ3M+CitfTElCQ1BQX05P
UkVUVVJOIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisjaWZuZGVmIF9MSUJDUFBf
Tk9fRVhDRVBUSU9OUworICAgIHZvaWQKKyAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3IoX0Fy
Z3MmJi4uLiBfX2FyZ3MpIHsKKyAgdGhyb3cgZmlsZXN5c3RlbV9lcnJvcihzdGQ6OmZvcndhcmQ8
X0FyZ3M+KF9fYXJncykuLi4pOworfQorI2Vsc2UKKyAgICB2b2lkCisgICAgX190aHJvd19maWxl
c3lzdGVtX2Vycm9yKF9BcmdzJiYuLi4pIHsKKyAgX1ZTVEQ6OmFib3J0KCk7Cit9CisjZW5kaWYK
KworLy8gb3BlcmF0aW9uYWwgZnVuY3Rpb25zCisKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19h
YnNvbHV0ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUworcGF0aCBfX2Nhbm9uaWNhbChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19l
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NvcHkoY29uc3QgcGF0aCYg
X19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMgX19vcHQsCisgICAgICAgICAg
ICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9f
Y29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29weV9vcHRp
b25zIF9fb3B0LAorICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7
CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXhp
c3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgX19uZXdfc3ltbGluaywKKyAgICAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9v
bCBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51
bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jv
b2wgX19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGF0dHJpYnV0
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOwor
X0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBw
YXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNf
VklTCit2b2lkIF9fY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRo
JiBfX25ld19oYXJkX2xpbmssCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBf
X2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX3N5bWxpbmso
Y29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfc3ltbGluaywKKyAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
CitwYXRoIF9fY3VycmVudF9wYXRoKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK3ZvaWQgX19jdXJyZW50X3BhdGgoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19lcXVpdmFsZW50KGNv
bnN0IHBhdGgmLCBjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJ
QkNQUF9GVU5DX1ZJUwordWludG1heF90IF9fZmlsZV9zaXplKGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit1aW50bWF4X3QgX19oYXJk
X2xpbmtfY291bnQoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19mc19pc19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9j
b2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworZmlsZV90aW1lX3R5cGUgX19s
YXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsK
K19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwg
ZmlsZV90aW1lX3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fcGVybWlzc2lvbnMo
Y29uc3QgcGF0aCYsIHBlcm1zLCBwZXJtX29wdGlvbnMsIGVycm9yX2NvZGUqID0gbnVsbHB0cik7
CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fcmVtb3Zl
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNf
VklTCit1aW50bWF4X3QgX19yZW1vdmVfYWxsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVj
ID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fcmVuYW1lKGNvbnN0IHBhdGgm
IGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUwordm9pZCBfX3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBz
aXplLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworc3BhY2Vf
aW5mbyBfX3NwYWNlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7Citf
TElCQ1BQX0ZVTkNfVklTCitmaWxlX3N0YXR1cyBfX3N0YXR1cyhjb25zdCBwYXRoJiwgZXJyb3Jf
Y29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworZmlsZV9zdGF0dXMgX19z
eW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwor
X0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX3N5c3RlbV9jb21wbGV0ZShjb25zdCBwYXRoJiwgZXJy
b3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX3RlbXBf
ZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5D
X1ZJUworcGF0aCBfX3dlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wLCBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBh
dGggY3VycmVudF9wYXRoKCkgeworICByZXR1cm4gX19jdXJyZW50X3BhdGgoKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBjdXJyZW50X3BhdGgoZXJyb3JfY29k
ZSYgX19lYykgeworICByZXR1cm4gX19jdXJyZW50X3BhdGgoJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBf
X3ApIHsKKyAgX19jdXJyZW50X3BhdGgoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
Yykgbm9leGNlcHQgeworICBfX2N1cnJlbnRfcGF0aChfX3AsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBhYnNvbHV0ZShjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgcmV0dXJuIF9fYWJzb2x1dGUoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgcGF0aCBhYnNvbHV0ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAg
cmV0dXJuIF9fYWJzb2x1dGUoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4g
X19jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
cGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19j
YW5vbmljYWwoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bykgeworICBfX2NvcHkoX19mcm9t
LCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3Rv
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgY29weV9vcHRpb25zOjpub25lLCAmX19l
Yyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weShjb25z
dCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zIF9fb3B0KSB7CisgIF9fY29weShfX2Zy
b20sIF9fdG8sIF9fb3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19vcHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBfX29wdCwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zy
b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXRoJiBfX3RvKSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIGNvcHlf
b3B0aW9uczo6bm9uZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wKK2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGVycm9y
X2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgY29weV9v
cHRpb25zOjpub25lLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wKK2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8s
IGNvcHlfb3B0aW9ucyBfX29wdCkgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3Rv
LCBfX29wdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY29w
eV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19vcHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIF9fb3B0LCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weV9zeW1saW5rKGNv
bnN0IHBhdGgmIF9fZXhpc3RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25ldykgeworICBfX2NvcHlfc3ltbGluayhf
X2V4aXN0aW5nLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHZvaWQKK2NvcHlfc3ltbGluayhjb25zdCBwYXRoJiBfX2V4dCwgY29uc3QgcGF0aCYgX19uZXcs
IGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jb3B5X3N5bWxpbmsoX19leHQsIF9f
bmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
Y3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19jcmVhdGVf
ZGlyZWN0b3JpZXMoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3JpZXMoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3ApOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitjcmVhdGVfZGlyZWN0b3J5KGNv
bnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19j
cmVhdGVfZGlyZWN0b3J5KF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dGgmIF9fYXR0cnMpIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3AsIF9fYXR0cnMp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitjcmVhdGVfZGly
ZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCwgY29uc3QgcGF0aCYgX19hdHRycywKKyAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19jcmVhdGVfZGly
ZWN0b3J5KF9fcCwgX19hdHRycywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSB2b2lkCitjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgX190
bywgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoX190
bywgX19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitj
cmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19u
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhfX3RvLCBfX25ldywgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNyZWF0ZV9oYXJkX2xpbmso
Y29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9oYXJkX2xp
bmsoX190bywgX19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2
b2lkCitjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3
LAorICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fY3Jl
YXRlX2hhcmRfbGluayhfX3RvLCBfX25ldywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSB2b2lkIGNyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX3N5bWxpbmsoX190bywgX19uZXcpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitjcmVhdGVfc3ltbGluayhjb25z
dCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywgZXJyb3JfY29kZSYgX19lYykgbm9leGNl
cHQgeworICByZXR1cm4gX19jcmVhdGVfc3ltbGluayhfX3RvLCBfX25ldywgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIHN0YXR1c19rbm93bihmaWxl
X3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgIT0gZmlsZV90eXBl
Ojpub25lOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGV4aXN0
cyhmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIHN0YXR1c19rbm93bihfX3Mp
ICYmIF9fcy50eXBlKCkgIT0gZmlsZV90eXBlOjpub3RfZm91bmQ7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIF9fcCkgeworICBy
ZXR1cm4gZXhpc3RzKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIGF1dG8gX19zID0gX19zdGF0dXMoX19wLCAmX19lYyk7CisgIGlmIChzdGF0dXNfa25vd24o
X19zKSkKKyAgICBfX2VjLmNsZWFyKCk7CisgIHJldHVybiBleGlzdHMoX19zKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgm
IF9fcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19wMikgeworICByZXR1cm4gX19lcXVpdmFsZW50KF9fcDEsIF9fcDIpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitlcXVpdmFsZW50KGNv
bnN0IHBhdGgmIF9fcDEsIGNvbnN0IHBhdGgmIF9fcDIsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIF9fZXF1aXZhbGVudChfX3AxLCBfX3AyLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCBmaWxlX3NpemUoY29uc3Qg
cGF0aCYgX19wKSB7CisgIHJldHVybiBfX2ZpbGVfc2l6ZShfX3ApOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QKK2ZpbGVfc2l6ZShjb25zdCBwYXRoJiBf
X3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fZmlsZV9zaXplKF9f
cCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4
X3QgaGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19oYXJkX2xp
bmtfY291bnQoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWlu
dG1heF90CitoYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2Vj
KSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2hhcmRfbGlua19jb3VudChfX3AsICZfX2VjKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19maWxlKGZp
bGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5
cGU6OmJsb2NrOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlz
X2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19ibG9ja19maWxlKF9f
c3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsK
KyAgcmV0dXJuIGlzX2Jsb2NrX2ZpbGUoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitpc19jaGFyYWN0ZXJfZmlsZShmaWxl
X3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBl
OjpjaGFyYWN0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
aXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19jaGFyYWN0
ZXJfZmlsZShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbAoraXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19jaGFyYWN0ZXJfZmlsZShfX3N0YXR1cyhf
X3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
aXNfZGlyZWN0b3J5KGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5
cGUoKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBpc19kaXJlY3RvcnkoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2RpcmVjdG9yeShfX3N0YXR1cyhfX3AsICZfX2Vj
KSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZW1wdHko
Y29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2ZzX2lzX2VtcHR5KF9fcCk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZW1wdHkoY29uc3QgcGF0aCYg
X19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2ZzX2lzX2VtcHR5KF9fcCwgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2ZpZm8oZmlsZV9zdGF0
dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6Zmlm
bzsKK30KK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZmlmbyhjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2ZpZm8oX19zdGF0dXMoX19wKSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZmlmbyhjb25zdCBwYXRoJiBf
X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfZmlmbyhfX3N0YXR1cyhfX3AsICZf
X2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX3Jl
Z3VsYXJfZmlsZShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJu
IGlzX3JlZ3VsYXJfZmlsZShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfcmVndWxhcl9maWxlKGNvbnN0IHBhdGgmIF9fcCwgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfcmVndWxhcl9maWxlKF9fc3Rh
dHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbCBpc19zb2NrZXQoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3Mu
dHlwZSgpID09IGZpbGVfdHlwZTo6c29ja2V0OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlz
X3NvY2tldChfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gaXNfc29ja2V0KF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1saW5rKGZpbGVfc3RhdHVzIF9f
cykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc3ltbGluayhj
b25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX3N5bWxpbmsoX19zeW1saW5rX3N0YXR1cyhf
X3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1s
aW5rKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19z
eW1saW5rKF9fc3ltbGlua19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGZpbGVfc3RhdHVzIF9fcykgbm9leGNl
cHQgeworICByZXR1cm4gZXhpc3RzKF9fcykgJiYgIWlzX3JlZ3VsYXJfZmlsZShfX3MpICYmICFp
c19kaXJlY3RvcnkoX19zKSAmJgorICAgICAgICAgIWlzX3N5bWxpbmsoX19zKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19vdGhlcihjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIGlzX290aGVyKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIF9fcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfb3RoZXIoX19zdGF0dXMoX19wLCAmX19lYykp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3RpbWVfdHlwZQor
bGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19sYXN0X3dyaXRl
X3RpbWUoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV90
aW1lX3R5cGUKK2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGFzdF93cml0ZV90aW1lKF9fcCwgJl9fZWMpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGxhc3Rfd3JpdGVfdGlt
ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWxlX3RpbWVfdHlwZSBfX3QpIHsKKyAgX19sYXN0X3dyaXRlX3Rp
bWUoX19wLCBfX3QpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lk
CitsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wLCBmaWxlX3RpbWVfdHlwZSBfX3QsCisg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2xhc3Rfd3Jp
dGVfdGltZShfX3AsIF9fdCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSB2b2lkCitwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBfX3AsIHBlcm1zIF9fcHJtcywK
KyAgICAgICAgICAgIHBlcm1fb3B0aW9ucyBfX29wdHMgPSBwZXJtX29wdGlvbnM6OnJlcGxhY2Up
IHsKKyAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywgX19vcHRzKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBfX3As
IHBlcm1zIF9fcHJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX3Blcm1pc3Npb25zKF9f
cCwgX19wcm1zLCBwZXJtX29wdGlvbnM6OnJlcGxhY2UsICZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBfX3As
IHBlcm1zIF9fcHJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICBfX3Blcm1pc3Np
b25zKF9fcCwgX19wcm1zLCBfX29wdHMsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgcGF0aCBwcm94aW1hdGUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19iYXNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgX19lYykgeworICBwYXRoIF9fdG1wID0gX193ZWFrbHlfY2Fub25pY2FsKF9fcCwgJl9f
ZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4ge307CisgIHBhdGggX190bXBfYmFzZSA9IF9f
d2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UsICZfX2VjKTsKKyAgaWYgKF9fZWMpCisgICAgcmV0dXJu
IHt9OworICByZXR1cm4gX190bXAubGV4aWNhbGx5X3Byb3hpbWF0ZShfX3RtcF9iYXNlKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBwcm94aW1hdGUoY29uc3Qg
cGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gcHJveGltYXRlKF9fcCwgY3VycmVudF9w
YXRoKCksIF9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
Citwcm94aW1hdGUoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2Jhc2UgPSBjdXJyZW50
X3BhdGgoKSkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9fcCkubGV4aWNhbGx5X3By
b3hpbWF0ZSgKKyAgICAgIF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UpKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYg
X19wKSB7CisgIHJldHVybiBfX3JlYWRfc3ltbGluayhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBfX3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3JlYWRfc3ltbGluayhfX3AsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZShjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhdGgmIF9fYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICBwYXRoIF9fdG1wID0gX193ZWFrbHlfY2Fu
b25pY2FsKF9fcCwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4gcGF0aCgpOworICBw
YXRoIF9fdG1wYmFzZSA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UsICZfX2VjKTsKKyAgaWYg
KF9fZWMpCisgICAgcmV0dXJuIHBhdGgoKTsKKyAgcmV0dXJuIF9fdG1wLmxleGljYWxseV9yZWxh
dGl2ZShfX3RtcGJhc2UpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBw
YXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gcmVsYXRp
dmUoX19wLCBjdXJyZW50X3BhdGgoKSwgX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGgKK3JlbGF0aXZlKGNvbnN0IHBhdGgmIF9fcCwgY29uc3QgcGF0aCYg
X19iYXNlID0gY3VycmVudF9wYXRoKCkpIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChf
X3ApLmxleGljYWxseV9yZWxhdGl2ZShfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlKSk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgcmVtb3ZlKGNvbnN0IHBhdGgm
IF9fcCkgeworICByZXR1cm4gX19yZW1vdmUoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNl
cHQgeworICByZXR1cm4gX19yZW1vdmUoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCByZW1vdmVfYWxsKGNvbnN0IHBhdGgmIF9fcCkg
eworICByZXR1cm4gX19yZW1vdmVfYWxsKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHVpbnRtYXhfdCByZW1vdmVfYWxsKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVtb3ZlX2FsbChfX3AsICZfX2VjKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCByZW5hbWUoY29uc3QgcGF0aCYgX19m
cm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cGF0aCYgX190bykgeworICByZXR1cm4gX19yZW5hbWUoX19mcm9tLCBfX3RvKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorcmVuYW1lKGNvbnN0IHBhdGgmIF9f
ZnJvbSwgY29uc3QgcGF0aCYgX190bywgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gX19yZW5hbWUoX19mcm9tLCBfX3RvLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgX19wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50bWF4X3Qg
X19ucykgeworICByZXR1cm4gX19yZXNpemVfZmlsZShfX3AsIF9fbnMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCityZXNpemVfZmlsZShjb25zdCBwYXRoJiBf
X3AsIHVpbnRtYXhfdCBfX25zLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVy
biBfX3Jlc2l6ZV9maWxlKF9fcCwgX19ucywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBzcGFjZV9pbmZvIHNwYWNlKGNvbnN0IHBhdGgmIF9fcCkgeworICBy
ZXR1cm4gX19zcGFjZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBzcGFjZV9pbmZvIHNwYWNlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gX19zcGFjZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMgc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCkgeworICBy
ZXR1cm4gX19zdGF0dXMoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgZmlsZV9zdGF0dXMgc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4
Y2VwdCB7CisgIHJldHVybiBfX3N0YXR1cyhfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0
aCYgX19wKSB7CisgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9fcCk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzCitzeW1saW5rX3N0YXR1cyhjb25z
dCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fc3lt
bGlua19zdGF0dXMoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHBhdGggdGVtcF9kaXJlY3RvcnlfcGF0aCgpIHsKKyAgcmV0dXJuIF9fdGVtcF9kaXJl
Y3RvcnlfcGF0aCgpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IHRlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX190ZW1w
X2RpcmVjdG9yeV9wYXRoKCZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCkgeworICByZXR1cm4g
X193ZWFrbHlfY2Fub25pY2FsKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9fcCwgJl9fZWMpOworfQorCitj
bGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CitjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOworY2xhc3MgX19kaXJfc3RyZWFtOworCitjbGFzcyBkaXJlY3RvcnlfZW50cnkgeworICB0
eXBlZGVmIF9WU1REX0ZTOjpwYXRoIF9QYXRoOworCitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9y
cyBhbmQgZGVzdHJ1Y3RvcnMKKyAgZGlyZWN0b3J5X2VudHJ5KCkgbm9leGNlcHQgPSBkZWZhdWx0
OworICBkaXJlY3RvcnlfZW50cnkoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JikgPSBkZWZhdWx0Owor
ICBkaXJlY3RvcnlfZW50cnkoZGlyZWN0b3J5X2VudHJ5JiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsK
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IGRpcmVjdG9yeV9lbnRy
eShfUGF0aCBjb25zdCYgX19wKSA6IF9fcF8oX19wKSB7CisgICAgZXJyb3JfY29kZSBfX2VjOwor
ICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGRpcmVjdG9yeV9lbnRyeShfUGF0aCBjb25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSA6
IF9fcF8oX19wKSB7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIH5kaXJlY3Rvcnlf
ZW50cnkoKSB7fQorCisgIGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3I9KGRpcmVjdG9yeV9lbnRy
eSBjb25zdCYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvcj0oZGlyZWN0
b3J5X2VudHJ5JiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHZvaWQgYXNzaWduKF9QYXRoIGNvbnN0JiBfX3ApIHsKKyAgICBfX3BfID0gX19w
OworICAgIGVycm9yX2NvZGUgX19lYzsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIGFzc2lnbihfUGF0aCBjb25zdCYgX19w
LCBlcnJvcl9jb2RlJiBfX2VjKSB7CisgICAgX19wXyA9IF9fcDsKKyAgICBfX3JlZnJlc2goJl9f
ZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlcGxhY2Vf
ZmlsZW5hbWUoX1BhdGggY29uc3QmIF9fcCkgeworICAgIF9fcF8ucmVwbGFjZV9maWxlbmFtZShf
X3ApOworICAgIGVycm9yX2NvZGUgX19lYzsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlcGxhY2VfZmlsZW5hbWUoX1Bh
dGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgeworICAgIF9fcF8gPSBfX3BfLnBhcmVu
dF9wYXRoKCkgLyBfX3A7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCByZWZyZXNoKCkgeyBfX3JlZnJlc2goKTsgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCByZWZyZXNoKGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsgX19yZWZyZXNoKCZfX2VjKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgX1BhdGggY29uc3QmIHBhdGgoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBf
X3BfOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBvcGVyYXRvciBjb25zdCBf
UGF0aCYoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BfOyB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBib29sIGV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIF9WU1REX0ZTOjpl
eGlzdHMoZmlsZV9zdGF0dXN7X19nZXRfZnQoKX0pOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBib29sIGV4aXN0cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIF9WU1REX0ZTOjpleGlzdHMoZmlsZV9zdGF0dXN7X19nZXRfZnQoJl9fZWMp
fSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfYmxvY2tf
ZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpibG9jazsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19ibG9ja19maWxlKGVycm9y
X2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMp
ID09IGZpbGVfdHlwZTo6YmxvY2s7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09
IGZpbGVfdHlwZTo6Y2hhcmFjdGVyOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6Y2hhcmFjdGVyOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2RpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7IH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZGlyZWN0b3J5KGVycm9yX2Nv
ZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09
IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIGlzX2ZpZm8oKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlw
ZTo6ZmlmbzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19maWZv
KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQo
Jl9fZWMpID09IGZpbGVfdHlwZTo6ZmlmbzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgYm9vbCBpc19vdGhlcigpIGNvbnN0IHsgcmV0dXJuIF9WU1REX0ZTOjppc19vdGhl
cihmaWxlX3N0YXR1c3tfX2dldF9mdCgpfSk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgaXNfb3RoZXIoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfVlNURF9GUzo6aXNfb3RoZXIoZmlsZV9zdGF0dXN7X19nZXRfZnQoJl9fZWMp
fSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfcmVndWxh
cl9maWxlKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfcmVndWxhcl9maWxl
KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQo
Jl9fZWMpID09IGZpbGVfdHlwZTo6cmVndWxhcjsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgYm9vbCBpc19zb2NrZXQoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09
IGZpbGVfdHlwZTo6c29ja2V0OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBi
b29sIGlzX3NvY2tldChlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0
dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnNvY2tldDsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19zeW1saW5rKCkgY29uc3QgeyByZXR1cm4g
X19nZXRfc3ltX2Z0KCkgPT0gZmlsZV90eXBlOjpzeW1saW5rOyB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBib29sIGlzX3N5bWxpbmsoZXJyb3JfY29kZSYgX19lYykgY29uc3Qg
bm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zeW1fZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6
c3ltbGluazsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBm
aWxlX3NpemUoKSBjb25zdCB7IHJldHVybiBfX2dldF9zaXplKCk7IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBmaWxlX3NpemUoZXJyb3JfY29kZSYgX19lYykg
Y29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zaXplKCZfX2VjKTsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudCgp
IGNvbnN0IHsgcmV0dXJuIF9fZ2V0X25saW5rKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHVpbnRtYXhfdCBoYXJkX2xpbmtfY291bnQoZXJyb3JfY29kZSYgX19lYykgY29u
c3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9ubGluaygmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdGltZV90eXBlIGxhc3Rfd3JpdGVfdGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3dyaXRlX3RpbWUoKTsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgbGFzdF93cml0ZV90aW1lKGVycm9yX2Nv
ZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgm
X19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVz
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3N0YXR1cygpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBzdGF0dXMoZXJyb3JfY29kZSYgX19lYykg
Y29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zdGF0dXMoJl9fZWMpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1
cygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3N5bWxpbmtfc3RhdHVzKCk7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKGVycm9yX2Nv
ZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0
dXMoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9w
ZXJhdG9yPChkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7Cisg
ICAgcmV0dXJuIF9fcF8gPCBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBib29sIG9wZXJhdG9yPT0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3Jocykg
Y29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfID09IF9fcmhzLl9fcF87CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3IhPShkaXJlY3Rvcnlf
ZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gIT0g
X19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBv
cGVyYXRvcjw9KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gX19wXyA8PSBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBib29sIG9wZXJhdG9yPihkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhz
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPiBfX3Jocy5fX3BfOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJhdG9yPj0oZGlyZWN0b3J5
X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfID49
IF9fcmhzLl9fcF87CisgIH0KKworcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIGRpcmVjdG9yeV9p
dGVyYXRvcjsKKyAgZnJpZW5kIGNsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7Cisg
IGZyaWVuZCBjbGFzcyBfX2Rpcl9zdHJlYW07CisKKyAgZW51bSBfQ2FjaGVUeXBlIDogdW5zaWdu
ZWQgY2hhciB7CisgICAgX0VtcHR5LAorICAgIF9JdGVyU3ltbGluaywKKyAgICBfSXRlck5vblN5
bWxpbmssCisgICAgX1JlZnJlc2hTeW1saW5rLAorICAgIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2
ZWQsCisgICAgX1JlZnJlc2hOb25TeW1saW5rCisgIH07CisKKyAgc3RydWN0IF9fY2FjaGVkX2Rh
dGEgeworICAgIHVpbnRtYXhfdCBfX3NpemVfOworICAgIHVpbnRtYXhfdCBfX25saW5rXzsKKyAg
ICBmaWxlX3RpbWVfdHlwZSBfX3dyaXRlX3RpbWVfOworICAgIHBlcm1zIF9fc3ltX3Blcm1zXzsK
KyAgICBwZXJtcyBfX25vbl9zeW1fcGVybXNfOworICAgIGZpbGVfdHlwZSBfX3R5cGVfOworICAg
IF9DYWNoZVR5cGUgX19jYWNoZV90eXBlXzsKKworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgICBfX2NhY2hlZF9kYXRhKCkgbm9leGNlcHQgeyBfX3Jlc2V0KCk7IH0KKworICAgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB2b2lkIF9fcmVzZXQoKSB7CisgICAgICBfX2Nh
Y2hlX3R5cGVfID0gX0VtcHR5OworICAgICAgX190eXBlXyA9IGZpbGVfdHlwZTo6bm9uZTsKKyAg
ICAgIF9fc3ltX3Blcm1zXyA9IF9fbm9uX3N5bV9wZXJtc18gPSBwZXJtczo6dW5rbm93bjsKKyAg
ICAgIF9fc2l6ZV8gPSBfX25saW5rXyA9IHVpbnRtYXhfdCgtMSk7CisgICAgICBfX3dyaXRlX3Rp
bWVfID0gZmlsZV90aW1lX3R5cGU6Om1pbigpOworICAgIH0KKyAgfTsKKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHN0YXRpYyBfX2NhY2hlZF9kYXRhIF9fY3JlYXRlX2l0ZXJfcmVz
dWx0KGZpbGVfdHlwZSBfX2Z0KSB7CisgICAgX19jYWNoZWRfZGF0YSBfX2RhdGE7CisgICAgX19k
YXRhLl9fdHlwZV8gPSBfX2Z0OworICAgIF9fZGF0YS5fX2NhY2hlX3R5cGVfID0gWyZdKCkgewor
ICAgICAgc3dpdGNoIChfX2Z0KSB7CisgICAgICBjYXNlIGZpbGVfdHlwZTo6bm9uZToKKyAgICAg
ICAgcmV0dXJuIF9FbXB0eTsKKyAgICAgIGNhc2UgZmlsZV90eXBlOjpzeW1saW5rOgorICAgICAg
ICByZXR1cm4gX0l0ZXJTeW1saW5rOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIF9J
dGVyTm9uU3ltbGluazsKKyAgICAgIH0KKyAgICB9KCk7CisgICAgcmV0dXJuIF9fZGF0YTsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX2Fzc2lnbl9pdGVyX2Vu
dHJ5KF9QYXRoJiYgX19wLCBfX2NhY2hlZF9kYXRhIF9fZHQpIHsKKyAgICBfX3BfID0gc3RkOjpt
b3ZlKF9fcCk7CisgICAgX19kYXRhXyA9IF9fZHQ7CisgIH0KKworICBfTElCQ1BQX0ZVTkNfVklT
CisgIGVycm9yX2NvZGUgX19kb19yZWZyZXNoKCkgbm9leGNlcHQ7CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBzdGF0aWMgYm9vbCBfX2lzX2RuZV9lcnJvcihlcnJvcl9jb2RlIGNv
bnN0JiBfX2VjKSB7CisgICAgaWYgKCFfX2VjKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dp
dGNoIChzdGF0aWNfY2FzdDxlcnJjPihfX2VjLnZhbHVlKCkpKSB7CisgICAgY2FzZSBlcnJjOjpu
b19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5OgorICAgIGNhc2UgZXJyYzo6bm90X2FfZGlyZWN0b3J5
OgorICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgX19oYW5k
bGVfZXJyb3IoY29uc3QgY2hhciogX19tc2csIGVycm9yX2NvZGUqIF9fZGVzdF9lYywKKyAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlIGNvbnN0JiBfX2VjLCBib29sIF9fYWxsb3dfZG5l
ID0gZmFsc2UpIGNvbnN0IHsKKyAgICBpZiAoX19kZXN0X2VjKSB7CisgICAgICAqX19kZXN0X2Vj
ID0gX19lYzsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKF9fZWMgJiYgKCFfX2FsbG93
X2RuZSB8fCAhX19pc19kbmVfZXJyb3IoX19lYykpKQorICAgICAgX190aHJvd19maWxlc3lzdGVt
X2Vycm9yKF9fbXNnLCBfX3BfLCBfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgdm9pZCBfX3JlZnJlc2goZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIHsKKyAg
ICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpyZWZyZXNoIiwgX19lYywgX19k
b19yZWZyZXNoKCksCisgICAgICAgICAgICAgICAgICAgLyphbGxvd19kbmUqLyB0cnVlKTsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90eXBlIF9fZ2V0X3N5bV9m
dChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRh
Xy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgICByZXR1cm4gX19zeW1s
aW5rX3N0YXR1cyhfX3BfLCBfX2VjKS50eXBlKCk7CisgICAgY2FzZSBfSXRlclN5bWxpbms6Cisg
ICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29s
dmVkOgorICAgICAgaWYgKF9fZWMpCisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1
cm4gZmlsZV90eXBlOjpzeW1saW5rOworICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNh
c2UgX1JlZnJlc2hOb25TeW1saW5rOgorICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2RhdGFfLl9f
dHlwZV8pOworICAgICAgaWYgKF9fZWMgJiYgIV9WU1REX0ZTOjpleGlzdHMoX19zdCkpCisgICAg
ICAgICpfX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3Rv
cnkpOworICAgICAgZWxzZSBpZiAoX19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAg
IHJldHVybiBfX2RhdGFfLl9fdHlwZV87CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUo
KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90eXBlIF9fZ2V0
X2Z0KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2Rh
dGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyU3lt
bGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4g
X19zdGF0dXMoX19wXywgX19lYykudHlwZSgpOworICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgor
ICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOiB7
CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZGF0YV8uX190eXBlXyk7CisgICAgICBpZiAoX19l
YyAmJiAhX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSkKKyAgICAgICAgKl9fZWMgPSBtYWtlX2Vycm9y
X2NvZGUoZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSk7CisgICAgICBlbHNlIGlmIChf
X2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAgICAgcmV0dXJuIF9fZGF0YV8uX190eXBl
XzsKKyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgX19nZXRfc3RhdHVzKGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2Fj
aGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoK
KyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2
ZWQ6CisgICAgICByZXR1cm4gX19zdGF0dXMoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVz
aE5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgICByZXR1cm4gZmls
ZV9zdGF0dXMoX19nZXRfZnQoX19lYyksIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyk7CisgICAg
fQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgX19nZXRfc3ltbGlua19zdGF0dXMoZXJyb3JfY29kZSog
X19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBl
XykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNh
c2UgX0l0ZXJTeW1saW5rOgorICAgICAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wXywgX19l
Yyk7CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgICByZXR1cm4gZmlsZV9zdGF0
dXMoX19nZXRfc3ltX2Z0KF9fZWMpLCBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18pOworICAgIGNh
c2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoK
KyAgICAgIHJldHVybiBmaWxlX3N0YXR1cyhfX2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19z
eW1fcGVybXNfKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgX19nZXRfc2l6ZShlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hl
X3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6Cisg
ICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVk
OgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2ZpbGVfc2l6ZShfX3BfLCBfX2VjKTsKKyAgICBj
YXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazogeworICAg
ICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZ2V0X2Z0KCZf
X21fZWMpKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OmZpbGVf
c2l6ZSIsIF9fZWMsIF9fbV9lYyk7CisgICAgICBpZiAoX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSAm
JiAhX1ZTVERfRlM6OmlzX3JlZ3VsYXJfZmlsZShfX3N0KSkgeworICAgICAgICBlcnJjIF9fZXJy
X2tpbmQgPSBfVlNURF9GUzo6aXNfZGlyZWN0b3J5KF9fc3QpID8gZXJyYzo6aXNfYV9kaXJlY3Rv
cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IGVycmM6Om5vdF9zdXBwb3J0ZWQ7CisgICAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJl
Y3RvcnlfZW50cnk6OmZpbGVfc2l6ZSIsIF9fZWMsCisgICAgICAgICAgICAgICAgICAgICAgIG1h
a2VfZXJyb3JfY29kZShfX2Vycl9raW5kKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX19kYXRh
Xy5fX3NpemVfOworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgX19nZXRfbmxpbmso
ZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8u
X19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1s
aW5rOgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5y
ZXNvbHZlZDoKKyAgICAgIHJldHVybiBfVlNURF9GUzo6X19oYXJkX2xpbmtfY291bnQoX19wXywg
X19lYyk7CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5
bWxpbms6IHsKKyAgICAgIGVycm9yX2NvZGUgX19tX2VjOworICAgICAgKHZvaWQpX19nZXRfZnQo
Jl9fbV9lYyk7CisgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpoYXJk
X2xpbmtfY291bnQiLCBfX2VjLCBfX21fZWMpOworICAgICAgcmV0dXJuIF9fZGF0YV8uX19ubGlu
a187CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdGltZV90eXBlIF9fZ2V0X3dyaXRlX3Rp
bWUoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0
YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25T
eW1saW5rOgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5r
VW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBfVlNURF9GUzo6X19sYXN0X3dyaXRlX3RpbWUoX19w
XywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5v
blN5bWxpbms6IHsKKyAgICAgIGVycm9yX2NvZGUgX19tX2VjOworICAgICAgZmlsZV9zdGF0dXMg
X19zdChfX2dldF9mdCgmX19tX2VjKSk7CisgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0
b3J5X2VudHJ5OjpsYXN0X3dyaXRlX3RpbWUiLCBfX2VjLCBfX21fZWMpOworICAgICAgaWYgKF9W
U1REX0ZTOjpleGlzdHMoX19zdCkgJiYKKyAgICAgICAgICBfX2RhdGFfLl9fd3JpdGVfdGltZV8g
PT0gZmlsZV90aW1lX3R5cGU6Om1pbigpKQorICAgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGly
ZWN0b3J5X2VudHJ5OjpsYXN0X3dyaXRlX3RpbWUiLCBfX2VjLAorICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6dmFsdWVfdG9vX2xhcmdlKSk7CisgICAgICByZXR1
cm4gX19kYXRhXy5fX3dyaXRlX3RpbWVfOworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJF
QUNIQUJMRSgpOworICB9CisKK3ByaXZhdGU6CisgIF9QYXRoIF9fcF87CisgIF9fY2FjaGVkX2Rh
dGEgX19kYXRhXzsKK307CisKK2NsYXNzIF9fZGlyX2VsZW1lbnRfcHJveHkgeworcHVibGljOgor
ICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBkaXJlY3RvcnlfZW50cnkgb3BlcmF0
b3IqKCkgeworICAgIHJldHVybiBfVlNURDo6bW92ZShfX2VsZW1fKTsKKyAgfQorCitwcml2YXRl
OgorICBmcmllbmQgY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZXhwbGljaXQgX19kaXJfZWxlbWVudF9wcm94
eShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fZSkgOiBfX2VsZW1fKF9fZSkge30KKyAgX19kaXJf
ZWxlbWVudF9wcm94eShfX2Rpcl9lbGVtZW50X3Byb3h5JiYgX19vKQorICAgICAgOiBfX2VsZW1f
KF9WU1REOjptb3ZlKF9fby5fX2VsZW1fKSkge30KKyAgZGlyZWN0b3J5X2VudHJ5IF9fZWxlbV87
Cit9OworCitjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3IgeworcHVibGljOgorICB0eXBlZGVmIGRp
cmVjdG9yeV9lbnRyeSB2YWx1ZV90eXBlOworICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CisgIHR5cGVkZWYgdmFsdWVfdHlwZSBjb25zdCogcG9pbnRlcjsKKyAgdHlwZWRlZiB2
YWx1ZV90eXBlIGNvbnN0JiByZWZlcmVuY2U7CisgIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OworCitwdWJsaWM6CisgIC8vY3RvciAmIGR0b3IKKyAgZGlyZWN0
b3J5X2l0ZXJhdG9yKCkgbm9leGNlcHQge30KKworICBleHBsaWNpdCBkaXJlY3RvcnlfaXRlcmF0
b3IoY29uc3QgcGF0aCYgX19wKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBudWxs
cHRyKSB7fQorCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9y
eV9vcHRpb25zIF9fb3B0cykKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgbnVsbHB0
ciwgX19vcHRzKSB7fQorCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGVy
cm9yX2NvZGUmIF9fZWMpCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsICZfX2VjKSB7
fQorCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRp
b25zIF9fb3B0cywKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpCisgICAg
ICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsICZfX2VjLCBfX29wdHMpIHt9CisKKyAgZGlyZWN0
b3J5X2l0ZXJhdG9yKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpID0gZGVmYXVsdDsKKyAgZGly
ZWN0b3J5X2l0ZXJhdG9yKGRpcmVjdG9yeV9pdGVyYXRvciYmKSA9IGRlZmF1bHQ7CisgIGRpcmVj
dG9yeV9pdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpID0gZGVm
YXVsdDsKKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIG9wZXJhdG9yPShkaXJlY3RvcnlfaXRlcmF0
b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAgICAvLyBub24tZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBw
cm92aWRlZCB0byBzdXBwb3J0IHNlbGYtbW92ZSBhc3NpZ24uCisgICAgaWYgKHRoaXMgIT0gJl9f
bykgeworICAgICAgX19pbXBfID0gX1ZTVEQ6Om1vdmUoX19vLl9faW1wXyk7CisgICAgfQorICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIH5kaXJlY3RvcnlfaXRlcmF0b3IoKSA9IGRlZmF1bHQ7
CisKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvciooKSBjb25zdCB7CisgICAgX0xJ
QkNQUF9BU1NFUlQoX19pbXBfLCAiVGhlIGVuZCBpdGVyYXRvciBjYW5ub3QgYmUgZGVyZWZlcmVu
Y2VkIik7CisgICAgcmV0dXJuIF9fZGVyZWZlcmVuY2UoKTsKKyAgfQorCisgIGNvbnN0IGRpcmVj
dG9yeV9lbnRyeSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYqKnRoaXM7IH0KKworICBk
aXJlY3RvcnlfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IHJldHVybiBfX2luY3JlbWVudCgpOyB9
CisKKyAgX19kaXJfZWxlbWVudF9wcm94eSBvcGVyYXRvcisrKGludCkgeworICAgIF9fZGlyX2Vs
ZW1lbnRfcHJveHkgX19wKCoqdGhpcyk7CisgICAgX19pbmNyZW1lbnQoKTsKKyAgICByZXR1cm4g
X19wOworICB9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBpbmNyZW1lbnQoZXJyb3JfY29kZSYg
X19lYykgeyByZXR1cm4gX19pbmNyZW1lbnQoJl9fZWMpOyB9CisKK3ByaXZhdGU6CisgIGlubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29u
c3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICBjb25zdCBkaXJlY3Rv
cnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdDsKKworICAvLyBjb25zdHJ1Y3QgdGhlIGRpcl9z
dHJlYW0KKyAgX0xJQkNQUF9GVU5DX1ZJUworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0
aCYsIGVycm9yX2NvZGUqLAorICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMg
PSBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSk7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBkaXJl
Y3RvcnlfaXRlcmF0b3ImIF9faW5jcmVtZW50KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsK
KworICBfTElCQ1BQX0ZVTkNfVklTCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgX19kZXJlZmVy
ZW5jZSgpIGNvbnN0OworCitwcml2YXRlOgorICBzaGFyZWRfcHRyPF9fZGlyX3N0cmVhbT4gX19p
bXBfOworfTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorb3BlcmF0
b3I9PShjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCBk
aXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5fX2lt
cF8gPT0gX19yaHMuX19pbXBfOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sCitvcGVyYXRvciE9KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAg
ICAgICAgIGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuICEoX19saHMgPT0gX19yaHMpOworfQorCisvLyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJhdG9y
IHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSBkaXJlY3RvcnlfaXRlcmF0b3IKK2JlZ2luKGRpcmVjdG9yeV9pdGVyYXRvciBfX2l0ZXIp
IG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9faXRlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZGlyZWN0b3J5X2l0ZXJhdG9yCitlbmQoY29uc3QgZGlyZWN0b3J5X2l0ZXJh
dG9yJikgbm9leGNlcHQgeworICByZXR1cm4gZGlyZWN0b3J5X2l0ZXJhdG9yKCk7Cit9CisKK2Ns
YXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgeworcHVibGljOgorICB1c2luZyB2YWx1
ZV90eXBlID0gZGlyZWN0b3J5X2VudHJ5OworICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSBzdGQ6
OnB0cmRpZmZfdDsKKyAgdXNpbmcgcG9pbnRlciA9IGRpcmVjdG9yeV9lbnRyeSBjb25zdCo7Cisg
IHVzaW5nIHJlZmVyZW5jZSA9IGRpcmVjdG9yeV9lbnRyeSBjb25zdCY7CisgIHVzaW5nIGl0ZXJh
dG9yX2NhdGVnb3J5ID0gc3RkOjppbnB1dF9pdGVyYXRvcl90YWc7CisKK3B1YmxpYzoKKyAgLy8g
Y29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9yCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpIG5vZXhjZXB0IDogX19yZWNfKGZhbHNl
KSB7fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvcigKKyAgICAgIGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX194b3B0aW9ucyA9IGRpcmVjdG9yeV9vcHRpb25zOjpub25lKQorICAgICAgOiByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgX194b3B0aW9ucywgbnVsbHB0cikge30KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0
b3IoY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX3hvcHRpb25zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBfX3hvcHRpb25zLCAmX19lYykge30KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Io
Y29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yKF9fcCwgZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUsICZfX2VjKSB7fQor
CisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvciYpID0gZGVmYXVsdDsKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiYpID0gZGVmYXVsdDsKKworICByZWN1cnNpdmVf
ZGlyZWN0b3J5X2l0ZXJhdG9yJgorICBvcGVyYXRvcj0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImCisgIG9wZXJhdG9yPShyZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yJiYgX19vKSBub2V4Y2VwdCB7CisgICAgLy8gbm9uLWRlZmF1bHQgaW1w
bGVtZW50YXRpb24gcHJvdmlkZWQgdG8gc3VwcG9ydCBzZWxmLW1vdmUgYXNzaWduLgorICAgIGlm
ICh0aGlzICE9ICZfX28pIHsKKyAgICAgIF9faW1wXyA9IF9WU1REOjptb3ZlKF9fby5fX2ltcF8p
OworICAgICAgX19yZWNfID0gX19vLl9fcmVjXzsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOwor
ICB9CisKKyAgfnJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIF9fZGVyZWZlcmVuY2UoKTsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5KiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gJl9fZGVyZWZlcmVuY2UoKTsgfQorCisgIHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IHJldHVybiBfX2luY3JlbWVudCgpOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKyso
aW50KSB7CisgICAgX19kaXJfZWxlbWVudF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3Jl
bWVudCgpOworICAgIHJldHVybiBfX3A7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIGluY3JlbWVudChlcnJvcl9jb2Rl
JiBfX2VjKSB7CisgICAgcmV0dXJuIF9faW5jcmVtZW50KCZfX2VjKTsKKyAgfQorCisgIF9MSUJD
UFBfRlVOQ19WSVMgZGlyZWN0b3J5X29wdGlvbnMgb3B0aW9ucygpIGNvbnN0OworICBfTElCQ1BQ
X0ZVTkNfVklTIGludCBkZXB0aCgpIGNvbnN0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdm9pZCBwb3AoKSB7IF9fcG9wKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHZvaWQgcG9wKGVycm9yX2NvZGUmIF9fZWMpIHsgX19wb3AoJl9fZWMpOyB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIHJlY3Vyc2lvbl9wZW5kaW5nKCkgY29u
c3QgeyByZXR1cm4gX19yZWNfOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2
b2lkIGRpc2FibGVfcmVjdXJzaW9uX3BlbmRpbmcoKSB7IF9fcmVjXyA9IGZhbHNlOyB9CisKK3By
aXZhdGU6CisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBk
aXJlY3Rvcnlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2RlKiBfX2VjKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGNvbnN0IGRpcmVjdG9y
eV9lbnRyeSYgX19kZXJlZmVyZW5jZSgpIGNvbnN0OworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAg
Ym9vbCBfX3RyeV9yZWN1cnNpb24oZXJyb3JfY29kZSogX19lYyk7CisKKyAgX0xJQkNQUF9GVU5D
X1ZJUworICB2b2lkIF9fYWR2YW5jZShlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKKyAg
X0xJQkNQUF9GVU5DX1ZJUworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2luY3Jl
bWVudChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUwor
ICB2b2lkIF9fcG9wKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmllbmQgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IHJl
Y3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImLAorICAgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdDsKKworICBzdHJ1Y3QgX19zaGFyZWRfaW1w
OworICBzaGFyZWRfcHRyPF9fc2hhcmVkX2ltcD4gX19pbXBfOworICBib29sIF9fcmVjXzsKK307
IC8vIGNsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorb3BlcmF0b3I9PShjb25zdCByZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLl9faW1wXyA9PSBf
X3Jocy5fX2ltcF87Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Im
IF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsKK30KKy8vIGVu
YWJsZSByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1l
bnRzCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSByZWN1cnNpdmVfZGlyZWN0b3J5
X2l0ZXJhdG9yCitiZWdpbihyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIF9faXRlcikgbm9l
eGNlcHQgeworICByZXR1cm4gX19pdGVyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCitlbmQoY29uc3QgcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3IoKTsKK30KKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNURU0K
KworI2VuZGlmIC8vICFfTElCQ1BQX0NYWDAzX0xBTkcKKworX0xJQkNQUF9QT1BfTUFDUk9TCisK
KyNlbmRpZiAvLyBfTElCQ1BQX0ZJTEVTWVNURU0KKyNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="426442"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410493</attachid>
            <date>2020-10-04 17:55:49 -0700</date>
            <delta_ts>2020-10-04 18:21:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217302-20201004175548.patch</filename>
            <type>text/plain</type>
            <size>168640</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5NTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTA0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gb2YgPGZpbGVzeXN0ZW0+
IHRvIFdURiBmb3IgbWFjT1MgMTAuMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBhbmQgaXRzIG5l
ZWRlZCBpbXBsZW1lbnRhdGlvbiBmaWxlcworICAgICAgICBmcm9tIGxpYmMrKyAoNjI4YTMxOTQ3
NSkgYW5kIG1vZGlmaWVzIHRoZW0gdG8gYnVpbGQgb3V0c2lkZSBvZgorICAgICAgICBsaWJjKysu
IFRoaXMgaXMgb25seSBuZWVkZWQgYW5kIG9ubHkgYnVpbHQgZm9yIHZlcnNpb25zIG9mIG1hY09T
IDwgMTAuMTUKKyAgICAgICAgYW5kIGNhbiBiZSBkcm9wcGVkIHdoZW4gd2UgcmVxdWlyZSAxMC4x
NS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvU3RkRmlsZXN5c3RlbS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHd0Zi9TdGRGaWxlc3lzdGVtLmg6IEFkZGVkLgorCiAyMDIwLTEwLTAz
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSW50
cm9kdWNlIEpJVE9wZXJhdGlvbkxpc3QgdG8gdmFsaWRhdGUgSklULWNhZ2VkIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
Nzk0OCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKIAkJN0E2RUJBMzQyMDc0NkMzNDAwNEY5QzQ0IC8q
IE1hY2hTZW5kUmlnaHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0E2RUJBMzMyMDc0NkMzNDAwNEY5QzQ0IC8qIE1hY2hTZW5kUmlnaHQuY3BwICov
OyB9OwogCQk3QUYwMjNCNTIwNjFFMTcwMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYwMjNCNDIw
NjFFMTZGMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAgKi87IH07CiAJCTdBRkVDNkIx
MUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAq
LzsgfTsKKwkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1OTVGRkQyNTJB
OTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4MTM0MDEzODE1QjA5
MkZEMDAxRkYwQjggLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxMzQwMTM2MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQuY3BwICov
OyB9OwogCQk4MzQ4QkEwRTIxRkJDMEQ1MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4QkEwRDIx
RkJDMEQ0MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgKi87IH07CiAJCTkzOTM0QkQz
MThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2QTEgLyog
U3RyaW5nVmlld0NvY29hLm1tICovOyB9OwpAQCAtNDYyLDYgKzQ2Myw4IEBACiAJCTdDNDIzMDcy
MjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzQyMzA3MzIzQ0UyRDhCMDA2RTU0RDAgLyogUGxhdGZvcm1PUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNDIzMDc0MjNDRUIxODcwMDZFNTREMCAvKiBQbGF0Zm9ybUxlZ2FjeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUxlZ2FjeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QzU5NUZGQzI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3Rl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRGaWxlc3lzdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNTk1RkZEMjUyQTk2RTAwMEU0MjE2OCAvKiBT
dGRGaWxlc3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
ZEZpbGVzeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzk2OTI5NDFG
NjYzMDZFMDAyNjdBOUUgLyogS2V5VmFsdWVQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtleVZhbHVlUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Qzk4Q0RDNzIzRTdBOUI4MDAxMkYyMzIgLyogUGxhdGZvcm1FbmFibGVDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUVuYWJsZUNvY29hLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOThDREM4MjNFN0FGQzgwMDEyRjIzMiAvKiBQbGF0Zm9y
bUVuYWJsZVdpbkFwcGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRm
b3JtRW5hYmxlV2luQXBwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDUs
NiArMTI0OCw4IEBACiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMu
aCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8s
CiAJCQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQk3
QzU5NUZGRDI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5jcHAgKi8sCisJCQkJN0M1
OTVGRkMyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLywKIAkJCQlGRTk3RjZB
ODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8sCiAJCQkJQThBNDczMTExNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCUZGMEE0MzY1ODg5NTRGM0NC
MDdEQkVDQSAvKiBTdGRMaXN0LmggKi8sCkBAIC0xNzQ1LDYgKzE3NTAsNyBAQAogCQkJCUZFRUE0
REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1BvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzMzN0RCOUNFNzQzNDEwRkFGMDc2RTE3IC8qIFN0YWNrVHJhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5NUI2MzcyMENCNUVGRDAwNDc5NjM1IC8qIFN0cmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhENkUyNzFGNTUyMkUz
MDBBNzVDQzQgLyogU3RyaW5nQnVpbGRlckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY3OTQ4KQorKysgU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgU3RhY2tTaG90UHJvZmlsZXIuaAogICAgIFN0YWNrU3RhdHMuaAog
ICAgIFN0YWNrVHJhY2UuaAorICAgIFN0ZEZpbGVzeXN0ZW0uaAogICAgIFN0ZEludEV4dHJhcy5o
CiAgICAgU3RkTGliRXh0cmFzLmgKICAgICBTdGRMaXN0LmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0ZEZpbGVzeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVz
eXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYwNSBAQAorLy89PT0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFN0ZEZpbGVzeXN0ZW0uY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJh
c3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2Vz
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKworLyogSW1wb3J0cyBhIGNvcHkgb2YgZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5o
LCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAsCisgICBmaWxlc3lzdGVtL2ludDEy
OF9idWlsdGlucy5jcHAgYW5kIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgZnJvbSByMzQzODM4
IG9mIHRoZQorICAgbGliYysrIHByb2plY3QgYW5kIGhhcyBtb2RpZmllZCB0aGVtIHRvIHdvcmsg
b3V0c2lkZSBvZiBhIGJ1aWxkIG9mIGxpYmMrKyBpdHNlbGYuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisK
KyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPCAxMDE1MDAKKworI2luY2x1ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKworI2luY2x1
ZGUgPF9fY29uZmlnPgorCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9u
LmggLS0gKi8KKworI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPGNsaW1pdHM+CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4gLy8gZm9yIDo6dXRpbWVzIGFzIHVzZWQgaW4gX19sYXN0X3dyaXRlX3RpbWUK
KyNpbmNsdWRlIDxmY250bC5oPiAgICAvKiB2YWx1ZXMgZm9yIGZjaG1vZGF0ICovCisKKy8qICNp
bmNsdWRlICIuLi9pbmNsdWRlL2FwcGxlX2F2YWlsYWJpbGl0eS5oIiAqLworCisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKQorLy8gV2UgY2FuIHVzZSB0aGUgcHJlc2VuY2Ugb2YgVVRJTUVfT01JVCB0
byBkZXRlY3QgcGxhdGZvcm1zIHRoYXQgcHJvdmlkZQorLy8gdXRpbWVuc2F0LgorI2lmIGRlZmlu
ZWQoVVRJTUVfT01JVCkKKyNkZWZpbmUgX0xJQkNQUF9VU0VfVVRJTUVOU0FUCisjZW5kaWYKKyNl
bmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz
aAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcGFyYW1ldGVyIgorI2VuZGlm
CisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIGRldGFp
bCB7CituYW1lc3BhY2UgeworCitzdGF0aWMgc3RyaW5nIGZvcm1hdF9zdHJpbmdfaW1wKGNvbnN0
IGNoYXIqIG1zZywgLi4uKSB7CisgIC8vIHdlIG1pZ2h0IG5lZWQgYSBzZWNvbmQgc2hvdCBhdCB0
aGlzLCBzbyBwcmUtZW1wdGl2bHkgbWFrZSBhIGNvcHkKKyAgc3RydWN0IEd1YXJkVkFMaXN0IHsK
KyAgICB2YV9saXN0JiB0YXJnZXQ7CisgICAgYm9vbCBhY3RpdmUgPSB0cnVlOworICAgIEd1YXJk
VkFMaXN0KHZhX2xpc3QmIHRhcmdldCkgOiB0YXJnZXQodGFyZ2V0KSwgYWN0aXZlKHRydWUpIHt9
CisgICAgdm9pZCBjbGVhcigpIHsKKyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0
YXJnZXQpOworICAgICAgYWN0aXZlID0gZmFsc2U7CisgICAgfQorICAgIH5HdWFyZFZBTGlzdCgp
IHsKKyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0YXJnZXQpOworICAgIH0KKyAg
fTsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBtc2cpOworICBHdWFyZFZBTGlz
dCBhcmdzX2d1YXJkKGFyZ3MpOworCisgIHZhX2xpc3QgYXJnc19jcDsKKyAgdmFfY29weShhcmdz
X2NwLCBhcmdzKTsKKyAgR3VhcmRWQUxpc3QgYXJnc19jb3B5X2d1YXJkKGFyZ3NfY3ApOworCisg
IGFycmF5PGNoYXIsIDI1Nj4gbG9jYWxfYnVmZjsKKyAgc2l6ZV90IHNpemUgPSBsb2NhbF9idWZm
LnNpemUoKTsKKworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFs
IgorI2VuZGlmCisgIGF1dG8gcmV0ID0gOjp2c25wcmludGYobG9jYWxfYnVmZi5kYXRhKCksIHNp
emUsIG1zZywgYXJnc19jcCk7CisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCisjZW5kaWYKKworICBhcmdzX2NvcHlfZ3VhcmQuY2xlYXIoKTsKKworICAvLyBo
YW5kbGUgZW1wdHkgZXhwYW5zaW9uCisgIGlmIChyZXQgPT0gMCkKKyAgICByZXR1cm4gc3RyaW5n
e307CisgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHJldCkgPCBzaXplKQorICAgIHJldHVybiBz
dHJpbmcobG9jYWxfYnVmZi5kYXRhKCkpOworCisgIC8vIHdlIGRpZCBub3QgcHJvdmlkZSBhIGxv
bmcgZW5vdWdoIGJ1ZmZlciBvbiBvdXIgZmlyc3QgYXR0ZW1wdC4KKyAgLy8gYWRkIDEgdG8gc2l6
ZSB0byBhY2NvdW50IGZvciBudWxsLWJ5dGUgaW4gc2l6ZSBjYXN0IHRvIHByZXZlbnQgb3ZlcmZs
b3cKKyAgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmV0KSArIDE7CisgIGF1dG8gYnVmZl9w
dHIgPSB1bmlxdWVfcHRyPGNoYXJbXT4obmV3IGNoYXJbc2l6ZV0pOworCisjaWZkZWYgX19jbGFu
Z19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCisjZW5kaWYKKyAgcmV0ID0gOjp2c25w
cmludGYoYnVmZl9wdHIuZ2V0KCksIHNpemUsIG1zZywgYXJncyk7CisjaWZkZWYgX19jbGFuZ19f
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworICByZXR1cm4gc3RyaW5n
KGJ1ZmZfcHRyLmdldCgpKTsKK30KKworY29uc3QgY2hhciogdW53cmFwKHN0cmluZyBjb25zdCYg
cykgeyByZXR1cm4gcy5jX3N0cigpOyB9Citjb25zdCBjaGFyKiB1bndyYXAocGF0aCBjb25zdCYg
cCkgeyByZXR1cm4gcC5uYXRpdmUoKS5jX3N0cigpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgQXJnPgor
QXJnIGNvbnN0JiB1bndyYXAoQXJnIGNvbnN0JiBhKSB7CisgIHN0YXRpY19hc3NlcnQoIWlzX2Ns
YXNzPEFyZz46OnZhbHVlLCAiY2Fubm90IHBhc3MgY2xhc3MgaGVyZSIpOworICByZXR1cm4gYTsK
K30KKwordGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CitzdHJpbmcgZm9ybWF0X3N0cmluZyhjb25z
dCBjaGFyKiBmbXQsIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIHsKKyAgcmV0dXJuIGZvcm1hdF9zdHJp
bmdfaW1wKGZtdCwgdW53cmFwKGFyZ3MpLi4uKTsKK30KKworZXJyb3JfY29kZSBjYXB0dXJlX2Vy
cm5vKCkgeworICBfTElCQ1BQX0FTU0VSVChlcnJubywgIkV4cGVjdGVkIGVycm5vIHRvIGJlIG5v
bi16ZXJvIik7CisgIHJldHVybiBlcnJvcl9jb2RlKGVycm5vLCBnZW5lcmljX2NhdGVnb3J5KCkp
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK1QgZXJyb3JfdmFsdWUoKTsKK3RlbXBsYXRlIDw+
CitfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSB2b2lkIGVycm9yX3ZhbHVlPHZvaWQ+KCkg
e30KK3RlbXBsYXRlIDw+Citib29sIGVycm9yX3ZhbHVlPGJvb2w+KCkgeworICByZXR1cm4gZmFs
c2U7Cit9Cit0ZW1wbGF0ZSA8PgordWludG1heF90IGVycm9yX3ZhbHVlPHVpbnRtYXhfdD4oKSB7
CisgIHJldHVybiB1aW50bWF4X3QoLTEpOworfQordGVtcGxhdGUgPD4KK19MSUJDUFBfQ09OU1RF
WFBSX0FGVEVSX0NYWDExIGZpbGVfdGltZV90eXBlIGVycm9yX3ZhbHVlPGZpbGVfdGltZV90eXBl
PigpIHsKKyAgcmV0dXJuIGZpbGVfdGltZV90eXBlOjptaW4oKTsKK30KK3RlbXBsYXRlIDw+Citw
YXRoIGVycm9yX3ZhbHVlPHBhdGg+KCkgeworICByZXR1cm4ge307Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBUPgorc3RydWN0IEVycm9ySGFuZGxlciB7CisgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZTsK
KyAgZXJyb3JfY29kZSogZWMgPSBudWxscHRyOworICBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHI7
CisgIGNvbnN0IHBhdGgqIHAyID0gbnVsbHB0cjsKKworICBFcnJvckhhbmRsZXIoY29uc3QgY2hh
ciogZm5hbWUsIGVycm9yX2NvZGUqIGVjLCBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHIsCisgICAg
ICAgICAgICAgICBjb25zdCBwYXRoKiBwMiA9IG51bGxwdHIpCisgICAgICA6IGZ1bmNfbmFtZShm
bmFtZSksIGVjKGVjKSwgcDEocDEpLCBwMihwMikgeworICAgIGlmIChlYykKKyAgICAgIGVjLT5j
bGVhcigpOworICB9CisKKyAgVCByZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYykgY29uc3Qg
eworICAgIGlmIChlYykgeworICAgICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92
YWx1ZTxUPigpOworICAgIH0KKyAgICBzdHJpbmcgd2hhdCA9IHN0cmluZygiaW4gIikgKyBmdW5j
X25hbWU7CisgICAgc3dpdGNoIChib29sKHAxKSArIGJvb2wocDIpKSB7CisgICAgY2FzZSAwOgor
ICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsIG1fZWMpOworICAgIGNhc2UgMToK
KyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOworICAgIGNh
c2UgMjoKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9l
Yyk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIHRlbXBsYXRl
IDxjbGFzcy4uLiBBcmdzPgorICBUIHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2VjLCBjb25z
dCBjaGFyKiBtc2csIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICplYyA9IG1fZWM7CisgICAgICByZXR1cm4gZXJyb3JfdmFsdWU8VD4oKTsKKyAgICB9
CisgICAgc3RyaW5nIHdoYXQgPQorICAgICAgICBzdHJpbmcoImluICIpICsgZnVuY19uYW1lICsg
IjogIiArIGZvcm1hdF9zdHJpbmcobXNnLCBhcmdzLi4uKTsKKyAgICBzd2l0Y2ggKGJvb2wocDEp
ICsgYm9vbChwMikpIHsKKyAgICBjYXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJy
b3Iod2hhdCwgbV9lYyk7CisgICAgY2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vy
cm9yKHdoYXQsICpwMSwgbV9lYyk7CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lz
dGVtX2Vycm9yKHdoYXQsICpwMSwgKnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJF
QUNIQUJMRSgpOworICB9CisKKyAgVCByZXBvcnQoZXJyYyBjb25zdCYgZXJyKSBjb25zdCB7IHJl
dHVybiByZXBvcnQobWFrZV9lcnJvcl9jb2RlKGVycikpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
Li4uIEFyZ3M+CisgIFQgcmVwb3J0KGVycmMgY29uc3QmIGVyciwgY29uc3QgY2hhciogbXNnLCBB
cmdzIGNvbnN0Ji4uLiBhcmdzKSBjb25zdCB7CisgICAgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9y
X2NvZGUoZXJyKSwgbXNnLCBhcmdzLi4uKTsKKyAgfQorCitwcml2YXRlOgorICBFcnJvckhhbmRs
ZXIoRXJyb3JIYW5kbGVyIGNvbnN0JikgPSBkZWxldGU7CisgIEVycm9ySGFuZGxlciYgb3BlcmF0
b3I9KEVycm9ySGFuZGxlciBjb25zdCYpID0gZGVsZXRlOworfTsKKwordXNpbmcgY2hyb25vOjpk
dXJhdGlvbjsKK3VzaW5nIGNocm9ubzo6ZHVyYXRpb25fY2FzdDsKKwordXNpbmcgVGltZVNwZWMg
PSBzdHJ1Y3QgOjp0aW1lc3BlYzsKK3VzaW5nIFN0YXRUID0gc3RydWN0IDo6c3RhdDsKKwordGVt
cGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQsCisgICAgICAgICAgYm9vbCBJc0Zs
b2F0ID0gaXNfZmxvYXRpbmdfcG9pbnQ8dHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA+Ojp2YWx1ZT4K
K3N0cnVjdCB0aW1lX3V0aWxfYmFzZSB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1l
VDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRp
b247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19uYW5v
c2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9
IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9zZWNv
bmRzID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlv
bjo6bWF4KCkpLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWF4X25zZWMgPQor
ICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6
bWF4KCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyht
YXhfc2Vjb25kcykpCisgICAgICAgICAgLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciBy
ZXAgbWluX3NlY29uZHMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGlt
ZVQ6OmR1cmF0aW9uOjptaW4oKSkuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBt
aW5fbnNlY190aW1lc3BlYyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigK
KyAgICAgICAgICAoRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkgLSBmc19zZWNvbmRzKG1pbl9z
ZWNvbmRzKSkgKworICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgLmNvdW50KCk7
CisKK3ByaXZhdGU6CisjaWYgX0xJQkNQUF9TVERfVkVSID4gMTEgJiYgIWRlZmluZWQoX0xJQkNQ
UF9IQVNfTk9fQ1hYMTRfQ09OU1RFWFBSKQorICBzdGF0aWMgY29uc3RleHByIGZzX2R1cmF0aW9u
IGdldF9taW5fbnNlY3MoKSB7CisgICAgcmV0dXJuIGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+
KAorICAgICAgICBmc19uYW5vc2Vjb25kcyhtaW5fbnNlY190aW1lc3BlYykgLQorICAgICAgICBk
dXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihmc19zZWNvbmRzKDEpKSk7CisgIH0KKyAgLy8g
U3RhdGljIGFzc2VydCB0aGF0IHRoZXNlIHZhbHVlcyBwcm9wZXJseSByb3VuZCB0cmlwLgorICBz
dGF0aWNfYXNzZXJ0KGZzX3NlY29uZHMobWluX3NlY29uZHMpICsgZ2V0X21pbl9uc2VjcygpID09
CisgICAgICAgICAgICAgICAgICAgIEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpLAorICAgICAg
ICAgICAgICAgICJ2YWx1ZSBkb2Vzbid0IHJvdW5kdHJpcCIpOworCisgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBjaGVja19yYW5nZSgpIHsKKyAgICAvLyBUaGlzIGtpbmRhIHN1Y2tzLCBidXQgaXQn
cyB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBkb24ndCBoYXZlIF9faW50MTI4X3QuCisgICAgaWYgKHNp
emVvZihUaW1lVCkgPT0gc2l6ZW9mKHJlcCkpIHsKKyAgICAgIHR5cGVkZWYgZHVyYXRpb248bG9u
ZyBsb25nLCByYXRpbzwzNjAwICogMjQgKiAzNjU+ID4gWWVhcnM7CisgICAgICByZXR1cm4gZHVy
YXRpb25fY2FzdDxZZWFycz4oZnNfc2Vjb25kcyhtYXhfc2Vjb25kcykpID4gWWVhcnMoMjUwKSAm
JgorICAgICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWluX3NlY29u
ZHMpKSA8IFllYXJzKC0yNTApOworICAgIH0KKyAgICByZXR1cm4gbWF4X3NlY29uZHMgPj0gbnVt
ZXJpY19saW1pdHM8VGltZVQ+OjptYXgoKSAmJgorICAgICAgICAgICBtaW5fc2Vjb25kcyA8PSBu
dW1lcmljX2xpbWl0czxUaW1lVD46Om1pbigpOworICB9CisgIHN0YXRpY19hc3NlcnQoY2hlY2tf
cmFuZ2UoKSwgInRoZSByZXByZXNlbnRhYmxlIHJhbmdlIGlzIHVuYWNjZXB0YWJsZSBzbWFsbCIp
OworI2VuZGlmCit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4K
K3N0cnVjdCB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPiB7CisgIHVzaW5n
IHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5
cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRpb247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlv
bjxyZXA+OworICB1c2luZyBmc19uYW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47Cisg
IHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRp
YyBjb25zdCByZXAgbWF4X3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWF4X25zZWM7Cisg
IHN0YXRpYyBjb25zdCByZXAgbWluX3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWluX25z
ZWNfdGltZXNwZWM7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1l
VD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8Rmls
ZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1heF9zZWNvbmRzID0KKyAgICAgICAgZHVyYXRpb25fY2Fz
dDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKwordGVt
cGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxl
VGltZVQ6OnJlcCB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X25z
ZWMgPQorICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRp
b246Om1heCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRz
KG1heF9zZWNvbmRzKSkKKyAgICAgICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxl
VGltZVQsIGNsYXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0
aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWluX3NlY29uZHMgPQorICAg
ICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigp
KS5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2Nv
bnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVU
LCBUaW1lVCwgdHJ1ZT46Om1pbl9uc2VjX3RpbWVzcGVjID0KKyAgICAgICAgZHVyYXRpb25fY2Fz
dDxmc19uYW5vc2Vjb25kcz4oKEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMobWluX3NlY29uZHMpKSAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisg
ICAgICAgICAgICAuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3Mg
VGltZVQsIGNsYXNzIFRpbWVTcGVjVD4KK3N0cnVjdCB0aW1lX3V0aWwgOiB0aW1lX3V0aWxfYmFz
ZTxGaWxlVGltZVQsIFRpbWVUPiB7CisgIHVzaW5nIEJhc2UgPSB0aW1lX3V0aWxfYmFzZTxGaWxl
VGltZVQsIFRpbWVUPjsKKyAgdXNpbmcgQmFzZTo6bWF4X25zZWM7CisgIHVzaW5nIEJhc2U6Om1h
eF9zZWNvbmRzOworICB1c2luZyBCYXNlOjptaW5fbnNlY190aW1lc3BlYzsKKyAgdXNpbmcgQmFz
ZTo6bWluX3NlY29uZHM7CisKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfZHVyYXRpb247Cisg
IHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX21pY3Jvc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUg
QmFzZTo6ZnNfbmFub3NlY29uZHM7CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX3NlY29uZHM7
CisKK3B1YmxpYzoKKyAgdGVtcGxhdGUgPGNsYXNzIENUeXBlLCBjbGFzcyBDaHJvbm9UeXBlPgor
ICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjaGVja2VkX3NldChD
VHlwZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDaHJvbm9UeXBlIHRpbWUpIHsKKyAgICB1c2luZyBMaW0gPSBudW1lcmljX2xp
bWl0czxDVHlwZT47CisgICAgaWYgKHRpbWUgPiBMaW06Om1heCgpIHx8IHRpbWUgPCBMaW06Om1p
bigpKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgICpvdXQgPSBzdGF0aWNfY2FzdDxDVHlwZT4o
dGltZSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVY
UFJfQUZURVJfQ1hYMTEgYm9vbCBpc19yZXByZXNlbnRhYmxlKFRpbWVTcGVjVCB0bSkgeworICAg
IGlmICh0bS50dl9zZWMgPj0gMCkgeworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA8IG1heF9zZWNv
bmRzIHx8CisgICAgICAgICAgICAgKHRtLnR2X3NlYyA9PSBtYXhfc2Vjb25kcyAmJiB0bS50dl9u
c2VjIDw9IG1heF9uc2VjKTsKKyAgICB9IGVsc2UgaWYgKHRtLnR2X3NlYyA9PSAobWluX3NlY29u
ZHMgLSAxKSkgeworICAgICAgcmV0dXJuIHRtLnR2X25zZWMgPj0gbWluX25zZWNfdGltZXNwZWM7
CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB0bS50dl9zZWMgPj0gbWluX3NlY29uZHM7Cisg
ICAgfQorICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wg
aXNfcmVwcmVzZW50YWJsZShGaWxlVGltZVQgdG0pIHsKKyAgICBhdXRvIHNlY3MgPSBkdXJhdGlv
bl9jYXN0PGZzX3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSk7CisgICAgYXV0byBuc2Vj
cyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSAt
IHNlY3MpOworICAgIGlmIChuc2Vjcy5jb3VudCgpIDwgMCkgeworICAgICAgc2VjcyA9IHNlY3Mg
KyBmc19zZWNvbmRzKDEpOworICAgICAgbnNlY3MgPSBuc2VjcyArIGZzX3NlY29uZHMoMSk7Cisg
ICAgfQorICAgIHVzaW5nIFRMaW0gPSBudW1lcmljX2xpbWl0czxUaW1lVD47CisgICAgaWYgKHNl
Y3MuY291bnQoKSA+PSAwKQorICAgICAgcmV0dXJuIHNlY3MuY291bnQoKSA8PSBUTGltOjptYXgo
KTsKKyAgICByZXR1cm4gc2Vjcy5jb3VudCgpID49IFRMaW06Om1pbigpOworICB9CisKKyAgc3Rh
dGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIEZpbGVUaW1lVAorICBjb252ZXJ0X2Zy
b21fdGltZXNwZWMoVGltZVNwZWNUIHRtKSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwIHx8IHRt
LnR2X25zZWMgPT0gMCkgeworICAgICAgcmV0dXJuIEZpbGVUaW1lVChmc19zZWNvbmRzKHRtLnR2
X3NlYykgKworICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9u
Pihmc19uYW5vc2Vjb25kcyh0bS50dl9uc2VjKSkpOworICAgIH0gZWxzZSB7IC8vIHRtLnR2X3Nl
YyA8IDAKKyAgICAgIGF1dG8gYWRqX3N1YnNlYyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+
KGZzX3NlY29uZHMoMSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnNfbmFub3NlY29uZHModG0udHZfbnNlYykpOworICAgICAgYXV0byBEdXIg
PSBmc19zZWNvbmRzKHRtLnR2X3NlYyArIDEpIC0gYWRqX3N1YnNlYzsKKyAgICAgIHJldHVybiBG
aWxlVGltZVQoRHVyKTsKKyAgICB9CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgU3ViU2VjVD4K
KyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wKKyAgc2V0X3RpbWVz
X2NoZWNrZWQoVGltZVQqIHNlY19vdXQsIFN1YlNlY1QqIHN1YnNlY19vdXQsIEZpbGVUaW1lVCB0
cCkgeworICAgIGF1dG8gZHVyID0gdHAudGltZV9zaW5jZV9lcG9jaCgpOworICAgIGF1dG8gc2Vj
X2R1ciA9IGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oZHVyKTsKKyAgICBhdXRvIHN1YnNlY19k
dXIgPSBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihkdXIgLSBzZWNfZHVyKTsKKyAgICAv
LyBUaGUgdHZfbnNlYyBhbmQgdHZfdXNlYyBmaWVsZHMgbXVzdCBub3QgYmUgbmVnYXRpdmUgc28g
YWRqdXN0IGFjY29yZGluZ2x5CisgICAgaWYgKHN1YnNlY19kdXIuY291bnQoKSA8IDApIHsKKyAg
ICAgIGlmIChzZWNfZHVyLmNvdW50KCkgPiBtaW5fc2Vjb25kcykgeworICAgICAgICBzZWNfZHVy
ID0gc2VjX2R1ciAtIGZzX3NlY29uZHMoMSk7CisgICAgICAgIHN1YnNlY19kdXIgPSBzdWJzZWNf
ZHVyICsgZnNfc2Vjb25kcygxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN1YnNlY19kdXIg
PSBmc19uYW5vc2Vjb25kczo6emVybygpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2hl
Y2tlZF9zZXQoc2VjX291dCwgc2VjX2R1ci5jb3VudCgpKSAmJgorICAgICAgICAgICBjaGVja2Vk
X3NldChzdWJzZWNfb3V0LCBzdWJzZWNfZHVyLmNvdW50KCkpOworICB9CisgIHN0YXRpYyBfTElC
Q1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGNvbnZlcnRfdG9fdGltZXNwZWMoVGltZVNw
ZWNUJiBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZpbGVUaW1lVCB0cCkgeworICAgIGlmICghaXNfcmVwcmVzZW50
YWJsZSh0cCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHNldF90aW1lc19jaGVj
a2VkKCZkZXN0LnR2X3NlYywgJmRlc3QudHZfbnNlYywgdHApOworICB9Cit9OworCit1c2luZyBm
c190aW1lID0gdGltZV91dGlsPGZpbGVfdGltZV90eXBlLCB0aW1lX3QsIFRpbWVTcGVjPjsKKwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25z
dCYgc3QpIHsgcmV0dXJuIHN0LnN0X210aW1lc3BlYzsgfQorVGltZVNwZWMgZXh0cmFjdF9hdGlt
ZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0X2F0aW1lc3BlYzsgfQorI2Vsc2UKK1Rp
bWVTcGVjIGV4dHJhY3RfbXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGlt
OyB9CitUaW1lU3BlYyBleHRyYWN0X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Qu
c3RfYXRpbTsgfQorI2VuZGlmCisKKy8vIGFsbG93IHRoZSB1dGltZXMgaW1wbGVtZW50YXRpb24g
dG8gY29tcGlsZSBldmVuIGl0IHdlJ3JlIG5vdCBnb2luZworLy8gdG8gdXNlIGl0LgorCitib29s
IHBvc2l4X3V0aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25z
dCYgVFMsCisgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICB1c2luZyBuYW1l
c3BhY2UgY2hyb25vOworICBhdXRvIENvbnZlcnQgPSBbXShsb25nIG5zZWMpIHsKKyAgICB1c2lu
ZyBpbnRfdHlwZSA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDwgOjp0aW1ldmFsPigpLnR2X3VzZWMp
OworICAgIGF1dG8gZHVyID0gZHVyYXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KG5hbm9zZWNvbmRz
KG5zZWMpKS5jb3VudCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oZHVyKTsK
KyAgfTsKKyAgc3RydWN0IDo6dGltZXZhbCBDb252ZXJ0ZWRUU1syXSA9IHt7VFNbMF0udHZfc2Vj
LCBDb252ZXJ0KFRTWzBdLnR2X25zZWMpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7VFNbMV0udHZfc2VjLCBDb252ZXJ0KFRTWzFdLnR2X25zZWMpfX07CisgIGlmICg6
OnV0aW1lcyhwLmNfc3RyKCksIENvbnZlcnRlZFRTKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVy
ZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKwor
I2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorYm9vbCBwb3NpeF91dGltZW5zYXQo
Y29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAorICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6dXRpbWVuc2F0KEFUX0ZE
Q1dELCBwLmNfc3RyKCksIFRTLmRhdGEoKSwgMCkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVf
ZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKworYm9vbCBzZXRfZmlsZV90aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVT
cGVjLCAyPiBjb25zdCYgVFMsCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7
CisjaWYgIWRlZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorICByZXR1cm4gcG9zaXhfdXRp
bWVzKHAsIFRTLCBlYyk7CisjZWxzZQorICByZXR1cm4gcG9zaXhfdXRpbWVuc2F0KHAsIFRTLCBl
Yyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRh
aWwKKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVz
eXN0ZW0vZmlsZXN5c3RlbV9jb21tb24uaCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVt
L2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4z
MkFQSSkKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPFdpbmRvd3MuaD4K
KyNlbHNlCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgor
CisvKiAjaW5jbHVkZSAiZmlsZXN5c3RlbV9jb21tb24uaCIgKi8KKworX0xJQkNQUF9CRUdJTl9O
QU1FU1BBQ0VfRklMRVNZU1RFTQorCituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisK
KyNpZiAhZGVmaW5lZChfTElCQ1BQX1dJTjMyQVBJKQordGVtcGxhdGUgPGNsYXNzIERpckVudFQs
IGNsYXNzID0gZGVjbHR5cGUoRGlyRW50VDo6ZF90eXBlKT4KK3N0YXRpYyBmaWxlX3R5cGUgZ2V0
X2ZpbGVfdHlwZShEaXJFbnRUKiBlbnQsIGludCkgeworICBzd2l0Y2ggKGVudC0+ZF90eXBlKSB7
CisgIGNhc2UgRFRfQkxLOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmJsb2NrOworICBjYXNlIERU
X0NIUjoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpjaGFyYWN0ZXI7CisgIGNhc2UgRFRfRElSOgor
ICAgIHJldHVybiBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKKyAgY2FzZSBEVF9GSUZPOgorICAgIHJl
dHVybiBmaWxlX3R5cGU6OmZpZm87CisgIGNhc2UgRFRfTE5LOgorICAgIHJldHVybiBmaWxlX3R5
cGU6OnN5bWxpbms7CisgIGNhc2UgRFRfUkVHOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnJlZ3Vs
YXI7CisgIGNhc2UgRFRfU09DSzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpzb2NrZXQ7CisgIC8v
IFVubGlrZSBpbiBsc3RhdCwgaGl0dGluZyAidW5rbm93biIgaGVyZSBzaW1wbHkgbWVhbnMgdGhh
dCB0aGUgdW5kZXJseWluZworICAvLyBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBkX3R5cGUu
IFJlcG9ydCBpcyBhcyAnbm9uZScgc28gd2UgY29ycmVjdGx5CisgIC8vIHNldCB0aGUgY2FjaGUg
dG8gZW1wdHkuCisgIGNhc2UgRFRfVU5LTk9XTjoKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4g
ZmlsZV90eXBlOjpub25lOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRGlyRW50VD4KK3N0YXRpYyBm
aWxlX3R5cGUgZ2V0X2ZpbGVfdHlwZShEaXJFbnRUKiBlbnQsIGxvbmcpIHsKKyAgcmV0dXJuIGZp
bGVfdHlwZTo6bm9uZTsKK30KKworc3RhdGljIHBhaXI8c3RyaW5nX3ZpZXcsIGZpbGVfdHlwZT4g
cG9zaXhfcmVhZGRpcihESVIqIGRpcl9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIHN0cnVjdCBkaXJl
bnQqIGRpcl9lbnRyeV9wdHIgPSBudWxscHRyOworICBlcnJubyA9IDA7IC8vIHplcm8gZXJybm8g
aW4gb3JkZXIgdG8gZGV0ZWN0IGVycm9ycworICBlYy5jbGVhcigpOworICBpZiAoKGRpcl9lbnRy
eV9wdHIgPSA6OnJlYWRkaXIoZGlyX3N0cmVhbSkpID09IG51bGxwdHIpIHsKKyAgICBpZiAoZXJy
bm8pCisgICAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4ge307CisgIH0gZWxz
ZSB7CisgICAgcmV0dXJuIHtkaXJfZW50cnlfcHRyLT5kX25hbWUsIGdldF9maWxlX3R5cGUoZGly
X2VudHJ5X3B0ciwgMCl9OworICB9Cit9CisjZWxzZQorCitzdGF0aWMgZmlsZV90eXBlIGdldF9m
aWxlX3R5cGUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIC8vYXV0byBhdHRycyA9
IGRhdGEuZHdGaWxlQXR0cmlidXRlczsKKyAgLy8gRklYTUUoRXJpY1dGKQorICByZXR1cm4gZmls
ZV90eXBlOjp1bmtub3duOworfQorc3RhdGljIHVpbnRtYXhfdCBnZXRfZmlsZV9zaXplKGNvbnN0
IFdJTjMyX0ZJTkRfREFUQSYgZGF0YSkgeworICByZXR1cm4gKGRhdGEubkZpbGVTaXplSGlnaHQg
KiAoTUFYRFdPUkQgKyAxKSkgKyBkYXRhLm5GaWxlU2l6ZUxvdzsKK30KK3N0YXRpYyBmaWxlX3Rp
bWVfdHlwZSBnZXRfd3JpdGVfdGltZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAg
VUxBUkdFX0lOVEVHRVIgdG1wOworICBGSUxFVElNRSYgdGltZSA9IGRhdGEuZnRMYXN0V3JpdGVU
aW1lOworICB0bXAudS5Mb3dQYXJ0ID0gdGltZS5kd0xvd0RhdGVUaW1lOworICB0bXAudS5IaWdo
UGFydCA9IHRpbWUuZHdIaWdoRGF0ZVRpbWU7CisgIHJldHVybiBmaWxlX3RpbWVfdHlwZShmaWxl
X3RpbWVfdHlwZTo6ZHVyYXRpb24odGltZS5RdWFkUGFydCkpOworfQorCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OkVycm9y
SGFuZGxlcjsKKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKK2NsYXNzIF9fZGlyX3N0
cmVhbSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJl
YW0mIG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9z
dHJlYW0oX19kaXJfc3RyZWFtJiYgX19kcykgbm9leGNlcHQgOiBfX3N0cmVhbV8oX19kcy5fX3N0
cmVhbV8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jvb3RfKG1vdmUoX19kcy5fX3Jvb3RfKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZW50cnlfKG1vdmUoX19kcy5fX2VudHJ5XykpIHsKKyAgICBf
X2RzLl9fc3RyZWFtXyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICB9CisKKyAgX19kaXJfc3Ry
ZWFtKGNvbnN0IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUm
IGVjKQorICAgICAgOiBfX3N0cmVhbV8oSU5WQUxJRF9IQU5ETEVfVkFMVUUpLCBfX3Jvb3RfKHJv
b3QpIHsKKyAgICBfX3N0cmVhbV8gPSA6OkZpbmRGaXJzdEZpbGVFeChyb290LmNfc3RyKCksICZf
X2RhdGFfKTsKKyAgICBpZiAoX19zdHJlYW1fID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Cisg
ICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgp
KTsKKyAgICAgIGNvbnN0IGJvb2wgaWdub3JlX3Blcm1pc3Npb25fZGVuaWVkID0KKyAgICAgICAg
ICBib29sKG9wdHMgJiBkaXJlY3Rvcnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7
CisgICAgICBpZiAoaWdub3JlX3Blcm1pc3Npb25fZGVuaWVkICYmIGVjLnZhbHVlKCkgPT0gRVJS
T1JfQUNDRVNTX0RFTklFRCkKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9leGNlcHQgeworICAgIGlmIChfX3N0cmVh
bV8gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICByZXR1cm47CisgICAgY2xvc2UoKTsK
KyAgfQorCisgIGJvb2wgZ29vZCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAh
PSBJTlZBTElEX0hBTkRMRV9WQUxVRTsgfQorCisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBl
YykgeworICAgIHdoaWxlICg6OkZpbmROZXh0RmlsZShfX3N0cmVhbV8sICZfX2RhdGFfKSkgewor
ICAgICAgaWYgKCFzdHJjbXAoX19kYXRhXy5jRmlsZU5hbWUsICIuIikgfHwgc3RyY21wKF9fZGF0
YV8uY0ZpbGVOYW1lLCAiLi4iKSkKKyAgICAgICAgY29udGludWU7CisgICAgICAvLyBGSVhNRTog
Q2FjaGUgbW9yZSBvZiB0aGlzCisgICAgICAvL2RpcmVjdG9yeV9lbnRyeTo6X19jYWNoZWRfZGF0
YSBjZGF0YTsKKyAgICAgIC8vY2RhdGEuX190eXBlXyA9IGdldF9maWxlX3R5cGUoX19kYXRhXyk7
CisgICAgICAvL2NkYXRhLl9fc2l6ZV8gPSBnZXRfZmlsZV9zaXplKF9fZGF0YV8pOworICAgICAg
Ly9jZGF0YS5fX3dyaXRlX3RpbWVfID0gZ2V0X3dyaXRlX3RpbWUoX19kYXRhXyk7CisgICAgICBf
X2VudHJ5Xy5fX2Fzc2lnbl9pdGVyX2VudHJ5KAorICAgICAgICAgIF9fcm9vdF8gLyBfX2RhdGFf
LmNGaWxlTmFtZSwKKyAgICAgICAgICBkaXJlY3RvcnlfZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVz
dWx0KGdldF9maWxlX3R5cGUoX19kYXRhKSkpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkp
OworICAgIGNsb3NlKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKK3ByaXZhdGU6CisgIGVy
cm9yX2NvZGUgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBlYzsKKyAgICBpZiAo
ITo6RmluZENsb3NlKF9fc3RyZWFtXykpCisgICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0
RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgpKTsKKyAgICBfX3N0cmVhbV8gPSBJTlZBTElEX0hB
TkRMRV9WQUxVRTsKKyAgICByZXR1cm4gZWM7CisgIH0KKworICBIQU5ETEUgX19zdHJlYW1fe0lO
VkFMSURfSEFORExFX1ZBTFVFfTsKKyAgV0lOMzJfRklORF9EQVRBIF9fZGF0YV87CisKK3B1Ymxp
YzoKKyAgcGF0aCBfX3Jvb3RfOworICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2Vs
c2UKK2NsYXNzIF9fZGlyX3N0cmVhbSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVs
ZXRlOworICBfX2Rpcl9zdHJlYW0mIG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRl
bGV0ZTsKKworICBfX2Rpcl9zdHJlYW0oX19kaXJfc3RyZWFtJiYgb3RoZXIpIG5vZXhjZXB0IDog
X19zdHJlYW1fKG90aGVyLl9fc3RyZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3Jvb3RfKG1vdmUob3RoZXIuX19yb290XykpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShv
dGhlci5fX2VudHJ5XykpIHsKKyAgICBvdGhlci5fX3N0cmVhbV8gPSBudWxscHRyOworICB9CisK
KyAgX19kaXJfc3RyZWFtKGNvbnN0IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMs
IGVycm9yX2NvZGUmIGVjKQorICAgICAgOiBfX3N0cmVhbV8obnVsbHB0ciksIF9fcm9vdF8ocm9v
dCkgeworICAgIGlmICgoX19zdHJlYW1fID0gOjpvcGVuZGlyKHJvb3QuY19zdHIoKSkpID09IG51
bGxwdHIpIHsKKyAgICAgIGVjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgICAgICBjb25z
dCBib29sIGFsbG93X2VhY2VzcyA9CisgICAgICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29w
dGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOworICAgICAgaWYgKGFsbG93X2VhY2VzcyAm
JiBlYy52YWx1ZSgpID09IEVBQ0NFUykKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYWR2YW5jZShlYyk7CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9l
eGNlcHQgeworICAgIGlmIChfX3N0cmVhbV8pCisgICAgICBjbG9zZSgpOworICB9CisKKyAgYm9v
bCBnb29kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19zdHJlYW1fICE9IG51bGxwdHI7IH0K
KworICBib29sIGFkdmFuY2UoZXJyb3JfY29kZSYgZWMpIHsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgYXV0byBzdHJfdHlwZV9wYWlyID0gZGV0YWlsOjpwb3NpeF9yZWFkZGlyKF9fc3RyZWFt
XywgZWMpOworICAgICAgYXV0byYgc3RyID0gc3RyX3R5cGVfcGFpci5maXJzdDsKKyAgICAgIGlm
IChzdHIgPT0gIi4iIHx8IHN0ciA9PSAiLi4iKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAg
fSBlbHNlIGlmIChlYyB8fCBzdHIuZW1wdHkoKSkgeworICAgICAgICBjbG9zZSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICBfX2VudHJ5Xy5fX2Fzc2ln
bl9pdGVyX2VudHJ5KAorICAgICAgICAgICAgX19yb290XyAvIHN0ciwKKyAgICAgICAgICAgIGRp
cmVjdG9yeV9lbnRyeTo6X19jcmVhdGVfaXRlcl9yZXN1bHQoc3RyX3R5cGVfcGFpci5zZWNvbmQp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9CisKK3ByaXZhdGU6
CisgIGVycm9yX2NvZGUgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBtX2VjOwor
ICAgIGlmICg6OmNsb3NlZGlyKF9fc3RyZWFtXykgPT0gLTEpCisgICAgICBtX2VjID0gZGV0YWls
OjpjYXB0dXJlX2Vycm5vKCk7CisgICAgX19zdHJlYW1fID0gbnVsbHB0cjsKKyAgICByZXR1cm4g
bV9lYzsKKyAgfQorCisgIERJUiogX19zdHJlYW1fe251bGxwdHJ9OworCitwdWJsaWM6CisgIHBh
dGggX19yb290XzsKKyAgZGlyZWN0b3J5X2VudHJ5IF9fZW50cnlfOworfTsKKyNlbmRpZgorCisv
LyBkaXJlY3RvcnlfaXRlcmF0b3IKKworZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRl
cmF0b3IoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzKSB7CisgIEVycm9ySGFu
ZGxlcjx2b2lkPiBlcnIoImRpcmVjdG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5X2l0ZXJhdG9yKC4u
LikiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgX19pbXBfID0gbWFrZV9zaGFy
ZWQ8X19kaXJfc3RyZWFtPihwLCBvcHRzLCBtX2VjKTsKKyAgaWYgKGVjKQorICAgICplYyA9IG1f
ZWM7CisgIGlmICghX19pbXBfLT5nb29kKCkpIHsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBp
ZiAobV9lYykKKyAgICAgIGVyci5yZXBvcnQobV9lYyk7CisgIH0KK30KKworZGlyZWN0b3J5X2l0
ZXJhdG9yJiBkaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7
CisgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIkF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGFuIGlu
dmFsaWQgaXRlcmF0b3IiKTsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0
ZXJhdG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAo
IV9faW1wXy0+YWR2YW5jZShtX2VjKSkgeworICAgIHBhdGggcm9vdCA9IG1vdmUoX19pbXBfLT5f
X3Jvb3RfKTsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5y
ZXBvcnQobV9lYywgImF0IHJvb3QgXCIlc1wiIiwgcm9vdCk7CisgIH0KKyAgcmV0dXJuICp0aGlz
OworfQorCitkaXJlY3RvcnlfZW50cnkgY29uc3QmIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJl
ZmVyZW5jZSgpIGNvbnN0IHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0
byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIGl0ZXJhdG9yIik7CisgIHJldHVybiBfX2ltcF8tPl9f
ZW50cnlfOworfQorCisvLyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK3N0cnVjdCBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3NoYXJlZF9pbXAgeworICBzdGFjazxfX2Rp
cl9zdHJlYW0+IF9fc3RhY2tfOworICBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdGlvbnNfOworfTsK
KworcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcigKKyAgICBjb25zdCBwYXRoJiBwLCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHQsIGVycm9yX2Nv
ZGUqIGVjKQorICAgIDogX19pbXBfKG51bGxwdHIpLCBfX3JlY18odHJ1ZSkgeworICBFcnJvckhh
bmRsZXI8dm9pZD4gZXJyKCJyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIiwgZWMsICZwKTsK
KworICBlcnJvcl9jb2RlIG1fZWM7CisgIF9fZGlyX3N0cmVhbSBuZXdfcyhwLCBvcHQsIG1fZWMp
OworICBpZiAobV9lYykKKyAgICBlcnIucmVwb3J0KG1fZWMpOworICBpZiAobV9lYyB8fCAhbmV3
X3MuZ29vZCgpKQorICAgIHJldHVybjsKKworICBfX2ltcF8gPSBtYWtlX3NoYXJlZDxfX3NoYXJl
ZF9pbXA+KCk7CisgIF9faW1wXy0+X19vcHRpb25zXyA9IG9wdDsKKyAgX19pbXBfLT5fX3N0YWNr
Xy5wdXNoKG1vdmUobmV3X3MpKTsKK30KKwordm9pZCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOjpfX3BvcChlcnJvcl9jb2RlKiBlYykgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJQ
b3BwaW5nIHRoZSBlbmQgaXRlcmF0b3IiKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOwor
ICBfX2ltcF8tPl9fc3RhY2tfLnBvcCgpOworICBpZiAoX19pbXBfLT5fX3N0YWNrXy5zaXplKCkg
PT0gMCkKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgZWxzZQorICAgIF9fYWR2YW5jZShlYyk7Cit9
CisKK2RpcmVjdG9yeV9vcHRpb25zIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wdGlv
bnMoKSBjb25zdCB7CisgIHJldHVybiBfX2ltcF8tPl9fb3B0aW9uc187Cit9CisKK2ludCByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpkZXB0aCgpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1w
Xy0+X19zdGFja18uc2l6ZSgpIC0gMTsKK30KKworY29uc3QgZGlyZWN0b3J5X2VudHJ5JiByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICByZXR1
cm4gX19pbXBfLT5fX3N0YWNrXy50b3AoKS5fX2VudHJ5XzsKK30KKworcmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvciYKK3JlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50
KGVycm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHJl
Y3Vyc2lvbl9wZW5kaW5nKCkpIHsKKyAgICBpZiAoX190cnlfcmVjdXJzaW9uKGVjKSB8fCAoZWMg
JiYgKmVjKSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgfQorICBfX3JlY18gPSB0cnVlOworICBf
X2FkdmFuY2UoZWMpOworICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvcjo6X19hZHZhbmNlKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjx2b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIs
IGVjKTsKKworICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3IgZW5kX2l0OworICBhdXRvJiBzdGFj
ayA9IF9faW1wXy0+X19zdGFja187CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgd2hpbGUgKHN0YWNr
LnNpemUoKSA+IDApIHsKKyAgICBpZiAoc3RhY2sudG9wKCkuYWR2YW5jZShtX2VjKSkKKyAgICAg
IHJldHVybjsKKyAgICBpZiAobV9lYykKKyAgICAgIGJyZWFrOworICAgIHN0YWNrLnBvcCgpOwor
ICB9CisKKyAgaWYgKG1fZWMpIHsKKyAgICBwYXRoIHJvb3QgPSBtb3ZlKHN0YWNrLnRvcCgpLl9f
cm9vdF8pOworICAgIF9faW1wXy5yZXNldCgpOworICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJv
b3QgXCIlc1wiIiwgcm9vdCk7CisgIH0gZWxzZSB7CisgICAgX19pbXBfLnJlc2V0KCk7CisgIH0K
K30KKworYm9vbCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3RyeV9yZWN1cnNpb24o
ZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIiwgZWMpOworCisgIGJvb2wgcmVjX3N5bSA9
IGJvb2wob3B0aW9ucygpICYgZGlyZWN0b3J5X29wdGlvbnM6OmZvbGxvd19kaXJlY3Rvcnlfc3lt
bGluayk7CisKKyAgYXV0byYgY3Vycl9pdCA9IF9faW1wXy0+X19zdGFja18udG9wKCk7CisKKyAg
Ym9vbCBza2lwX3JlYyA9IGZhbHNlOworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICghcmVjX3N5
bSkgeworICAgIGZpbGVfc3RhdHVzIHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfc3ltX2Z0KCZt
X2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xl
YXIoKTsKKyAgICBpZiAobV9lYyB8fCBpc19zeW1saW5rKHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0
KSkKKyAgICAgIHNraXBfcmVjID0gdHJ1ZTsKKyAgfSBlbHNlIHsKKyAgICBmaWxlX3N0YXR1cyBz
dChjdXJyX2l0Ll9fZW50cnlfLl9fZ2V0X2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3Rh
dHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8fCAhaXNf
ZGlyZWN0b3J5KHN0KSkKKyAgICAgIHNraXBfcmVjID0gdHJ1ZTsKKyAgfQorCisgIGlmICghc2tp
cF9yZWMpIHsKKyAgICBfX2Rpcl9zdHJlYW0gbmV3X2l0KGN1cnJfaXQuX19lbnRyeV8ucGF0aCgp
LCBfX2ltcF8tPl9fb3B0aW9uc18sIG1fZWMpOworICAgIGlmIChuZXdfaXQuZ29vZCgpKSB7Cisg
ICAgICBfX2ltcF8tPl9fc3RhY2tfLnB1c2gobW92ZShuZXdfaXQpKTsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgfQorICBpZiAobV9lYykgeworICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFj
ZXNzID0KKyAgICAgICAgYm9vbChfX2ltcF8tPl9fb3B0aW9uc18gJiBkaXJlY3Rvcnlfb3B0aW9u
czo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgaWYgKG1fZWMudmFsdWUoKSA9PSBFQUND
RVMgJiYgYWxsb3dfZWFjZXNzKSB7CisgICAgICBpZiAoZWMpCisgICAgICAgIGVjLT5jbGVhcigp
OworICAgIH0gZWxzZSB7CisgICAgICBwYXRoIGF0X2VudCA9IG1vdmUoY3Vycl9pdC5fX2VudHJ5
Xy5fX3BfKTsKKyAgICAgIF9faW1wXy5yZXNldCgpOworICAgICAgZXJyLnJlcG9ydChtX2VjLCAi
YXR0ZW1wdGluZyByZWN1cnNpb24gaW50byBcIiVzXCIiLCBhdF9lbnQpOworICAgIH0KKyAgfQor
ICByZXR1cm4gZmFsc2U7Cit9CisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisK
Ky8qIC0tIEVORCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworLyog
LS0gQkVHSU4gZmlsZXN5c3RlbS9pbnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qID09PS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS09PT0KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBfX211bG90aTQsIGFu
ZCBpcyBzdG9sZW4gZnJvbSB0aGUgY29tcGlsZXJfcnQgbGlicmFyeS4KKyAqCisgKiBGSVhNRTog
d2Ugc3RlYWwgYW5kIHJlLWNvbXBpbGUgaXQgaW50byBmaWxlc3lzdGVtLCB3aGljaCB1c2VzIF9f
aW50MTI4X3QsCisgKiBhbmQgcmVxdWlyZXMgdGhpcyBidWlsdGluIHdoZW4gc2FuaXRpemVkLiBT
ZWUgbGx2bS5vcmcvUFIzMDY0MworICoKKyAqID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisv
KiAjaW5jbHVkZSAiX19jb25maWciICovCisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2lmbmRlZiBf
X1NJWkVPRl9JTlQxMjhfXworI2RlZmluZSBfTElCQ1BQX0hBU19OT19JTlQxMjgKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fSU5UMTI4KQorCisjaWZkZWYgX19jbGFuZ19f
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgorI2VuZGlmCitleHRlcm4gIkMiIF9fYXR0
cmlidXRlX18oKG5vX3Nhbml0aXplKCJ1bmRlZmluZWQiKSkpCitfX2ludDEyOF90IF9fbXVsb3Rp
NChfX2ludDEyOF90IGEsIF9faW50MTI4X3QgYiwgaW50KiBvdmVyZmxvdykgeworICBjb25zdCBp
bnQgTiA9IChpbnQpKHNpemVvZihfX2ludDEyOF90KSAqIENIQVJfQklUKTsKKyAgY29uc3QgX19p
bnQxMjhfdCBNSU4gPSAoX19pbnQxMjhfdCkxIDw8IChOIC0gMSk7CisgIGNvbnN0IF9faW50MTI4
X3QgTUFYID0gfk1JTjsKKyAgKm92ZXJmbG93ID0gMDsKKyAgX19pbnQxMjhfdCByZXN1bHQgPSBh
ICogYjsKKyAgaWYgKGEgPT0gTUlOKSB7CisgICAgaWYgKGIgIT0gMCAmJiBiICE9IDEpCisgICAg
ICAqb3ZlcmZsb3cgPSAxOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKGIgPT0gTUlO
KSB7CisgICAgaWYgKGEgIT0gMCAmJiBhICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICAg
IHJldHVybiByZXN1bHQ7CisgIH0KKyAgX19pbnQxMjhfdCBzYSA9IGEgPj4gKE4gLSAxKTsKKyAg
X19pbnQxMjhfdCBhYnNfYSA9IChhIF4gc2EpIC0gc2E7CisgIF9faW50MTI4X3Qgc2IgPSBiID4+
IChOIC0gMSk7CisgIF9faW50MTI4X3QgYWJzX2IgPSAoYiBeIHNiKSAtIHNiOworICBpZiAoYWJz
X2EgPCAyIHx8IGFic19iIDwgMikKKyAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc2EgPT0gc2Ip
IHsKKyAgICBpZiAoYWJzX2EgPiBNQVggLyBhYnNfYikKKyAgICAgICpvdmVyZmxvdyA9IDE7Cisg
IH0gZWxzZSB7CisgICAgaWYgKGFic19hID4gTUlOIC8gLWFic19iKQorICAgICAgKm92ZXJmbG93
ID0gMTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorI2lmZGVmIF9fY2xhbmdfXworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyNlbmRpZgorCisvKiAtLSBFTkQgZmls
ZXN5c3RlbS9pbnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0
ZW0vb3BlcmF0aW9ucy5jcHAgLS0gKi8KKworLyogI2luY2x1ZGUgImZpbGVzeXN0ZW0iICovCisj
aW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4K
KyNpbmNsdWRlIDxyYW5kb20+IC8qIGZvciB1bmlxdWVfcGF0aCAqLworI2luY2x1ZGUgPHN0cmlu
Z192aWV3PgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNs
dWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNsaW1pdHM+CisKKy8qICNpbmNsdWRlICJmaWxlc3lz
dGVtX2NvbW1vbi5oIiAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0
YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNs
dWRlIDxmY250bC5oPiAvKiB2YWx1ZXMgZm9yIGZjaG1vZGF0ICovCisKKyNpZiBkZWZpbmVkKF9f
bGludXhfXykKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaWYgTElOVVhfVkVSU0lPTl9D
T0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDMzKQorI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5o
PgorI2RlZmluZSBfTElCQ1BQX1VTRV9TRU5ERklMRQorI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgX19oYXNfaW5jbHVkZSg8Y29weWZpbGUuaD4pCisjaW5jbHVkZSA8Y29weWZp
bGUuaD4KKyNkZWZpbmUgX0xJQkNQUF9VU0VfQ09QWUZJTEUKKyNlbmRpZgorCisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKQorI2RlZmluZSBfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FCisjZW5kaWYK
KworI2lmICFkZWZpbmVkKENMT0NLX1JFQUxUSU1FKSB8fCAhZGVmaW5lZChfTElCQ1BQX1VTRV9D
TE9DS19HRVRUSU1FKQorI2luY2x1ZGUgPHN5cy90aW1lLmg+IC8vIGZvciBnZXR0aW1lb2ZkYXkg
YW5kIHRpbWV2YWwKKyNlbmRpZiAgICAgICAgICAgICAgICAvLyAhZGVmaW5lZChDTE9DS19SRUFM
VElNRSkKKworI2lmIGRlZmluZWQoX0xJQkNQUF9DT01QSUxFUl9HQ0MpCisjaWYgX0dOVUNfVkVS
IDwgNTAwCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1maWVsZC1p
bml0aWFsaXplcnMiCisjZW5kaWYKKyNlbmRpZgorCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9G
SUxFU1lTVEVNCisKK25hbWVzcGFjZSB7CituYW1lc3BhY2UgcGFyc2VyIHsKKwordXNpbmcgc3Ry
aW5nX3ZpZXdfdCA9IHBhdGg6Ol9fc3RyaW5nX3ZpZXc7Cit1c2luZyBzdHJpbmdfdmlld19wYWly
ID0gcGFpcjxzdHJpbmdfdmlld190LCBzdHJpbmdfdmlld190PjsKK3VzaW5nIFBvc1B0ciA9IHBh
dGg6OnZhbHVlX3R5cGUgY29uc3QqOworCitzdHJ1Y3QgUGF0aFBhcnNlciB7CisgIGVudW0gUGFy
c2VyU3RhdGUgOiB1bnNpZ25lZCBjaGFyIHsKKyAgICAvLyBaZXJvIGlzIGEgc3BlY2lhbCBzZW50
aW5lbCB2YWx1ZSB1c2VkIGJ5IGRlZmF1bHQgY29uc3RydWN0ZWQgaXRlcmF0b3JzLgorICAgIFBT
X0JlZm9yZUJlZ2luID0gcGF0aDo6aXRlcmF0b3I6Ol9CZWZvcmVCZWdpbiwKKyAgICBQU19JblJv
b3ROYW1lID0gcGF0aDo6aXRlcmF0b3I6Ol9JblJvb3ROYW1lLAorICAgIFBTX0luUm9vdERpciA9
IHBhdGg6Oml0ZXJhdG9yOjpfSW5Sb290RGlyLAorICAgIFBTX0luRmlsZW5hbWVzID0gcGF0aDo6
aXRlcmF0b3I6Ol9JbkZpbGVuYW1lcywKKyAgICBQU19JblRyYWlsaW5nU2VwID0gcGF0aDo6aXRl
cmF0b3I6Ol9JblRyYWlsaW5nU2VwLAorICAgIFBTX0F0RW5kID0gcGF0aDo6aXRlcmF0b3I6Ol9B
dEVuZAorICB9OworCisgIGNvbnN0IHN0cmluZ192aWV3X3QgUGF0aDsKKyAgc3RyaW5nX3ZpZXdf
dCBSYXdFbnRyeTsKKyAgUGFyc2VyU3RhdGUgU3RhdGU7CisKK3ByaXZhdGU6CisgIFBhdGhQYXJz
ZXIoc3RyaW5nX3ZpZXdfdCBQLCBQYXJzZXJTdGF0ZSBTdGF0ZSkgbm9leGNlcHQgOiBQYXRoKFAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhdGUoU3RhdGUpIHt9CisKK3B1YmxpYzoKKyAgUGF0aFBhcnNlcihzdHJpbmdfdmll
d190IFAsIHN0cmluZ192aWV3X3QgRSwgdW5zaWduZWQgY2hhciBTKQorICAgICAgOiBQYXRoKFAp
LCBSYXdFbnRyeShFKSwgU3RhdGUoc3RhdGljX2Nhc3Q8UGFyc2VyU3RhdGU+KFMpKSB7CisgICAg
Ly8gUyBjYW5ub3QgYmUgJzAnIG9yIFBTX0JlZm9yZUJlZ2luLgorICB9CisKKyAgc3RhdGljIFBh
dGhQYXJzZXIgQ3JlYXRlQmVnaW4oc3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0
aFBhcnNlciBQUChQLCBQU19CZWZvcmVCZWdpbik7CisgICAgUFAuaW5jcmVtZW50KCk7CisgICAg
cmV0dXJuIFBQOworICB9CisKKyAgc3RhdGljIFBhdGhQYXJzZXIgQ3JlYXRlRW5kKHN0cmluZ192
aWV3X3QgUCkgbm9leGNlcHQgeworICAgIFBhdGhQYXJzZXIgUFAoUCwgUFNfQXRFbmQpOworICAg
IHJldHVybiBQUDsKKyAgfQorCisgIFBvc1B0ciBwZWVrKCkgY29uc3Qgbm9leGNlcHQgeworICAg
IGF1dG8gVGtFbmQgPSBnZXROZXh0VG9rZW5TdGFydFBvcygpOworICAgIGF1dG8gRW5kID0gZ2V0
QWZ0ZXJCYWNrKCk7CisgICAgcmV0dXJuIFRrRW5kID09IEVuZCA/IG51bGxwdHIgOiBUa0VuZDsK
KyAgfQorCisgIHZvaWQgaW5jcmVtZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0ciBF
bmQgPSBnZXRBZnRlckJhY2soKTsKKyAgICBjb25zdCBQb3NQdHIgU3RhcnQgPSBnZXROZXh0VG9r
ZW5TdGFydFBvcygpOworICAgIGlmIChTdGFydCA9PSBFbmQpCisgICAgICByZXR1cm4gbWFrZVN0
YXRlKFBTX0F0RW5kKTsKKworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9y
ZUJlZ2luOiB7CisgICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFN0YXJ0LCBF
bmQpOworICAgICAgaWYgKFRrRW5kKQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9v
dERpciwgU3RhcnQsIFRrRW5kKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0
ZShQU19JbkZpbGVuYW1lcywgU3RhcnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKKyAgICB9
CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmls
ZW5hbWVzLCBTdGFydCwgY29uc3VtZU5hbWUoU3RhcnQsIEVuZCkpOworCisgICAgY2FzZSBQU19J
bkZpbGVuYW1lczogeworICAgICAgUG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoU3Rh
cnQsIEVuZCk7CisgICAgICBpZiAoU2VwRW5kICE9IEVuZCkgeworICAgICAgICBQb3NQdHIgVGtF
bmQgPSBjb25zdW1lTmFtZShTZXBFbmQsIEVuZCk7CisgICAgICAgIGlmIChUa0VuZCkKKyAgICAg
ICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTZXBFbmQsIFRrRW5kKTsKKyAg
ICAgIH0KKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU3RhcnQsIFNl
cEVuZCk7CisgICAgfQorCisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgICAgcmV0dXJu
IG1ha2VTdGF0ZShQU19BdEVuZCk7CisKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2Fz
ZSBQU19BdEVuZDoKKyAgICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKwor
ICB2b2lkIGRlY3JlbWVudCgpIG5vZXhjZXB0IHsKKyAgICBjb25zdCBQb3NQdHIgUkVuZCA9IGdl
dEJlZm9yZUZyb250KCk7CisgICAgY29uc3QgUG9zUHRyIFJTdGFydCA9IGdldEN1cnJlbnRUb2tl
blN0YXJ0UG9zKCkgLSAxOworICAgIGlmIChSU3RhcnQgPT0gUkVuZCkgLy8gd2UncmUgZGVjcmVt
ZW50aW5nIHRoZSBiZWdpbgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19CZWZvcmVCZWdpbik7
CisKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19BdEVuZDogeworICAgICAgLy8g
VHJ5IHRvIGNvbnN1bWUgYSB0cmFpbGluZyBzZXBhcmF0b3Igb3Igcm9vdCBkaXJlY3RvcnkgZmly
c3QuCisgICAgICBpZiAoUG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoUlN0YXJ0LCBS
RW5kKSkgeworICAgICAgICBpZiAoU2VwRW5kID09IFJFbmQpCisgICAgICAgICAgcmV0dXJuIG1h
a2VTdGF0ZShQU19JblJvb3REaXIsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VTdGF0ZShQU19JblRyYWlsaW5nU2VwLCBTZXBFbmQgKyAxLCBSU3RhcnQgKyAx
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFBvc1B0ciBUa1N0YXJ0ID0gY29uc3VtZU5hbWUo
UlN0YXJ0LCBSRW5kKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywg
VGtTdGFydCArIDEsIFJTdGFydCArIDEpOworICAgICAgfQorICAgIH0KKyAgICBjYXNlIFBTX0lu
VHJhaWxpbmdTZXA6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBjb25z
dW1lTmFtZShSU3RhcnQsIFJFbmQpICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgUlN0YXJ0
ICsgMSk7CisgICAgY2FzZSBQU19JbkZpbGVuYW1lczogeworICAgICAgUG9zUHRyIFNlcEVuZCA9
IGNvbnN1bWVTZXBhcmF0b3IoUlN0YXJ0LCBSRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgPT0gUkVu
ZCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3REaXIsIFBhdGguZGF0YSgpLCBS
U3RhcnQgKyAxKTsKKyAgICAgIFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgUkVu
ZCk7CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBUa0VuZCArIDEsIFNl
cEVuZCArIDEpOworICAgIH0KKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIC8vIHJldHVy
biBtYWtlU3RhdGUoUFNfSW5Sb290TmFtZSwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOworICAg
IGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgX0xJ
QkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0KKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEg
dmlldyB3aXRoIHRoZSAicHJlZmVycmVkIHJlcHJlc2VudGF0aW9uIiBvZiB0aGUgY3VycmVudAor
ICAvLy8gICBlbGVtZW50LiBGb3IgZXhhbXBsZSB0cmFpbGluZyBzZXBhcmF0b3JzIGFyZSByZXBy
ZXNlbnRlZCBhcyBhICcuJworICBzdHJpbmdfdmlld190IG9wZXJhdG9yKigpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAg
ICBjYXNlIFBTX0F0RW5kOgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgUFNfSW5Sb290RGly
OgorICAgICAgcmV0dXJuICIvIjsKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICBy
ZXR1cm4gIiI7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfSW5GaWxlbmFt
ZXM6CisgICAgICByZXR1cm4gUmF3RW50cnk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFC
TEUoKTsKKyAgfQorCisgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIFN0YXRlICE9IFBTX0JlZm9yZUJlZ2luICYmIFN0YXRlICE9IFBTX0F0RW5k
OworICB9CisKKyAgUGF0aFBhcnNlciYgb3BlcmF0b3IrKygpIG5vZXhjZXB0IHsKKyAgICBpbmNy
ZW1lbnQoKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRv
ci0tKCkgbm9leGNlcHQgeworICAgIGRlY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAg
fQorCisgIGJvb2wgaW5Sb290UGF0aCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3Rh
dGUgPT0gUFNfSW5Sb290RGlyIHx8IFN0YXRlID09IFBTX0luUm9vdE5hbWU7CisgIH0KKworcHJp
dmF0ZToKKyAgdm9pZCBtYWtlU3RhdGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUsIFBvc1B0ciBTdGFy
dCwgUG9zUHRyIEVuZCkgbm9leGNlcHQgeworICAgIFN0YXRlID0gTmV3U3RhdGU7CisgICAgUmF3
RW50cnkgPSBzdHJpbmdfdmlld190KFN0YXJ0LCBFbmQgLSBTdGFydCk7CisgIH0KKyAgdm9pZCBt
YWtlU3RhdGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUpIG5vZXhjZXB0IHsKKyAgICBTdGF0ZSA9IE5l
d1N0YXRlOworICAgIFJhd0VudHJ5ID0ge307CisgIH0KKworICBQb3NQdHIgZ2V0QWZ0ZXJCYWNr
KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gUGF0aC5kYXRhKCkgKyBQYXRoLnNpemUoKTsgfQor
CisgIFBvc1B0ciBnZXRCZWZvcmVGcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGgu
ZGF0YSgpIC0gMTsgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmly
c3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgLy8vICAgbGV4ZWQgZWxlbWVudC4K
KyAgUG9zUHRyIGdldE5leHRUb2tlblN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHN3
aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgcmV0dXJuIFBh
dGguZGF0YSgpOworICAgIGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0luUm9vdERp
cjoKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAgICAgcmV0dXJuICZSYXdFbnRyeS5iYWNr
KCkgKyAxOworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICBjYXNlIFBTX0F0RW5kOgor
ICAgICAgcmV0dXJuIGdldEFmdGVyQmFjaygpOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hB
QkxFKCk7CisgIH0KKworICAvLy8gXGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0
IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudGx5IGxleGVkCisgIC8vLyAgIGVsZW1lbnQuCisgIFBv
c1B0ciBnZXRDdXJyZW50VG9rZW5TdGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0
Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICBjYXNlIFBTX0luUm9v
dE5hbWU6CisgICAgICByZXR1cm4gJlBhdGguZnJvbnQoKTsKKyAgICBjYXNlIFBTX0luUm9vdERp
cjoKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoK
KyAgICAgIHJldHVybiAmUmF3RW50cnkuZnJvbnQoKTsKKyAgICBjYXNlIFBTX0F0RW5kOgorICAg
ICAgcmV0dXJuICZQYXRoLmJhY2soKSArIDE7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFC
TEUoKTsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lU2VwYXJhdG9yKFBvc1B0ciBQLCBQb3NQdHIg
RW5kKSBjb25zdCBub2V4Y2VwdCB7CisgICAgaWYgKFAgPT0gRW5kIHx8ICpQICE9ICcvJykKKyAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IGludCBJbmMgPSBQIDwgRW5kID8gMSA6IC0x
OworICAgIFAgKz0gSW5jOworICAgIHdoaWxlIChQICE9IEVuZCAmJiAqUCA9PSAnLycpCisgICAg
ICBQICs9IEluYzsKKyAgICByZXR1cm4gUDsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lTmFtZShQ
b3NQdHIgUCwgUG9zUHRyIEVuZCkgY29uc3Qgbm9leGNlcHQgeworICAgIGlmIChQID09IEVuZCB8
fCAqUCA9PSAnLycpCisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBpbnQgSW5jID0g
UCA8IEVuZCA/IDEgOiAtMTsKKyAgICBQICs9IEluYzsKKyAgICB3aGlsZSAoUCAhPSBFbmQgJiYg
KlAgIT0gJy8nKQorICAgICAgUCArPSBJbmM7CisgICAgcmV0dXJuIFA7CisgIH0KK307CisKK3N0
YXRpYyBzdHJpbmdfdmlld19wYWlyIHNlcGFyYXRlX2ZpbGVuYW1lKHN0cmluZ192aWV3X3QgY29u
c3QmIHMpIHsKKyAgaWYgKHMgPT0gIi4iIHx8IHMgPT0gIi4uIiB8fCBzLmVtcHR5KCkpCisgICAg
cmV0dXJuIHN0cmluZ192aWV3X3BhaXJ7cywgIiJ9OworICBhdXRvIHBvcyA9IHMuZmluZF9sYXN0
X29mKCcuJyk7CisgIGlmIChwb3MgPT0gc3RyaW5nX3ZpZXdfdDo6bnBvcyB8fCBwb3MgPT0gMCkK
KyAgICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntzLCBzdHJpbmdfdmlld190e319OworICByZXR1
cm4gc3RyaW5nX3ZpZXdfcGFpcntzLnN1YnN0cigwLCBwb3MpLCBzLnN1YnN0cihwb3MpfTsKK30K
Kworc3RhdGljIHN0cmluZ192aWV3X3QgY3JlYXRlVmlldyhQb3NQdHIgUywgUG9zUHRyIEUpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIHtTLCBzdGF0aWNfY2FzdDxzaXplX3Q+KEUgLSBTKSArIDF9Owor
fQorCit9IC8vIG5hbWVzcGFjZSBwYXJzZXIKK30gLy8gbmFtZXNwYWNlCisKKy8vICAgICAgICAg
ICAgICAgICAgICAgICBQT1NJWCBIRUxQRVJTCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFtZXNw
YWNlIHsKKwordXNpbmcgdmFsdWVfdHlwZSA9IHBhdGg6OnZhbHVlX3R5cGU7Cit1c2luZyBzdHJp
bmdfdHlwZSA9IHBhdGg6OnN0cmluZ190eXBlOworCitzdHJ1Y3QgRmlsZURlc2NyaXB0b3Igewor
ICBjb25zdCBwYXRoJiBuYW1lOworICBpbnQgZmQgPSAtMTsKKyAgU3RhdFQgbV9zdGF0OworICBm
aWxlX3N0YXR1cyBtX3N0YXR1czsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgc3Rh
dGljIEZpbGVEZXNjcmlwdG9yIGNyZWF0ZShjb25zdCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywg
QXJncy4uLiBhcmdzKSB7CisgICAgZWMuY2xlYXIoKTsKKyAgICBpbnQgZmQ7CisgICAgaWYgKChm
ZCA9IDo6b3BlbihwLT5jX3N0cigpLCBhcmdzLi4uKSkgPT0gLTEpIHsKKyAgICAgIGVjID0gY2Fw
dHVyZV9lcnJubygpOworICAgICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9ye3B9OworICAgIH0KKyAg
ICByZXR1cm4gRmlsZURlc2NyaXB0b3IocCwgZmQpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
Li4uIEFyZ3M+CisgIHN0YXRpYyBGaWxlRGVzY3JpcHRvciBjcmVhdGVfd2l0aF9zdGF0dXMoY29u
c3QgcGF0aCogcCwgZXJyb3JfY29kZSYgZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJncy4uLiBhcmdzKSB7CisgICAgRmlsZURlc2NyaXB0b3IgZmQgPSBj
cmVhdGUocCwgZWMsIGFyZ3MuLi4pOworICAgIGlmICghZWMpCisgICAgICBmZC5yZWZyZXNoX3N0
YXR1cyhlYyk7CisKKyAgICByZXR1cm4gZmQ7CisgIH0KKworICBmaWxlX3N0YXR1cyBnZXRfc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgU3RhdFQgY29uc3QmIGdldF9zdGF0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0OyB9CisKKyAgYm9vbCBzdGF0dXNfa25vd24oKSBjb25z
dCB7IHJldHVybiBfVlNURF9GUzo6c3RhdHVzX2tub3duKG1fc3RhdHVzKTsgfQorCisgIGZpbGVf
c3RhdHVzIHJlZnJlc2hfc3RhdHVzKGVycm9yX2NvZGUmIGVjKTsKKworICB2b2lkIGNsb3NlKCkg
bm9leGNlcHQgeworICAgIGlmIChmZCAhPSAtMSkKKyAgICAgIDo6Y2xvc2UoZmQpOworICAgIGZk
ID0gLTE7CisgIH0KKworICBGaWxlRGVzY3JpcHRvcihGaWxlRGVzY3JpcHRvciYmIG90aGVyKQor
ICAgICAgOiBuYW1lKG90aGVyLm5hbWUpLCBmZChvdGhlci5mZCksIG1fc3RhdChvdGhlci5tX3N0
YXQpLAorICAgICAgICBtX3N0YXR1cyhvdGhlci5tX3N0YXR1cykgeworICAgIG90aGVyLmZkID0g
LTE7CisgICAgb3RoZXIubV9zdGF0dXMgPSBmaWxlX3N0YXR1c3t9OworICB9CisKKyAgfkZpbGVE
ZXNjcmlwdG9yKCkgeyBjbG9zZSgpOyB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0
b3IgY29uc3QmKSA9IGRlbGV0ZTsKKyAgRmlsZURlc2NyaXB0b3ImIG9wZXJhdG9yPShGaWxlRGVz
Y3JpcHRvciBjb25zdCYpID0gZGVsZXRlOworCitwcml2YXRlOgorICBleHBsaWNpdCBGaWxlRGVz
Y3JpcHRvcihjb25zdCBwYXRoKiBwLCBpbnQgZmQgPSAtMSkgOiBuYW1lKCpwKSwgZmQoZmQpIHt9
Cit9OworCitwZXJtcyBwb3NpeF9nZXRfcGVybXMoY29uc3QgU3RhdFQmIHN0KSBub2V4Y2VwdCB7
CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtcz4oc3Quc3RfbW9kZSkgJiBwZXJtczo6bWFzazsK
K30KKworOjptb2RlX3QgcG9zaXhfY29udmVydF9wZXJtcyhwZXJtcyBwcm1zKSB7CisgIHJldHVy
biBzdGF0aWNfY2FzdDwgOjptb2RlX3Q+KHBybXMgJiBwZXJtczo6bWFzayk7Cit9CisKK2ZpbGVf
c3RhdHVzIGNyZWF0ZV9maWxlX3N0YXR1cyhlcnJvcl9jb2RlJiBtX2VjLCBwYXRoIGNvbnN0JiBw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0YXRUJiBwYXRoX3N0YXQs
IGVycm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICAqZWMgPSBtX2VjOworICBpZiAobV9l
YyAmJiAobV9lYy52YWx1ZSgpID09IEVOT0VOVCB8fCBtX2VjLnZhbHVlKCkgPT0gRU5PVERJUikp
IHsKKyAgICByZXR1cm4gZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpub3RfZm91bmQpOworICB9IGVs
c2UgaWYgKG1fZWMpIHsKKyAgICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJwb3NpeF9zdGF0Iiwg
ZWMsICZwKTsKKyAgICBlcnIucmVwb3J0KG1fZWMsICJmYWlsZWQgdG8gZGV0ZXJtaW5lIGF0dHJp
YnV0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGF0aCIpOworICAgIHJldHVybiBmaWxlX3N0YXR1cyhm
aWxlX3R5cGU6Om5vbmUpOworICB9CisgIC8vIGVsc2UKKworICBmaWxlX3N0YXR1cyBmc190bXA7
CisgIGF1dG8gY29uc3QgbW9kZSA9IHBhdGhfc3RhdC5zdF9tb2RlOworICBpZiAoU19JU0xOSyht
b2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnN5bWxpbmspOworICBlbHNlIGlmIChT
X0lTUkVHKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6cmVndWxhcik7CisgIGVs
c2UgaWYgKFNfSVNESVIobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpkaXJlY3Rv
cnkpOworICBlbHNlIGlmIChTX0lTQkxLKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlw
ZTo6YmxvY2spOworICBlbHNlIGlmIChTX0lTQ0hSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZp
bGVfdHlwZTo6Y2hhcmFjdGVyKTsKKyAgZWxzZSBpZiAoU19JU0ZJRk8obW9kZSkpCisgICAgZnNf
dG1wLnR5cGUoZmlsZV90eXBlOjpmaWZvKTsKKyAgZWxzZSBpZiAoU19JU1NPQ0sobW9kZSkpCisg
ICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpzb2NrZXQpOworICBlbHNlCisgICAgZnNfdG1wLnR5
cGUoZmlsZV90eXBlOjp1bmtub3duKTsKKworICBmc190bXAucGVybWlzc2lvbnMoZGV0YWlsOjpw
b3NpeF9nZXRfcGVybXMocGF0aF9zdGF0KSk7CisgIHJldHVybiBmc190bXA7Cit9CisKK2ZpbGVf
c3RhdHVzIHBvc2l4X3N0YXQocGF0aCBjb25zdCYgcCwgU3RhdFQmIHBhdGhfc3RhdCwgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoOjpzdGF0KHAuY19zdHIoKSwg
JnBhdGhfc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOwor
ICByZXR1cm4gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIHAsIHBhdGhfc3RhdCwgZWMpOworfQor
CitmaWxlX3N0YXR1cyBwb3NpeF9zdGF0KHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUqIGVjKSB7
CisgIFN0YXRUIHBhdGhfc3RhdDsKKyAgcmV0dXJuIHBvc2l4X3N0YXQocCwgcGF0aF9zdGF0LCBl
Yyk7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBw
YXRoX3N0YXQsIGVycm9yX2NvZGUqIGVjKSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6
bHN0YXQocC5jX3N0cigpLCAmcGF0aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpj
YXB0dXJlX2Vycm5vKCk7CisgIHJldHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0
aF9zdGF0LCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIFN0YXRUIHBhdGhfc3RhdDsKKyAgcmV0dXJuIHBvc2l4X2xz
dGF0KHAsIHBhdGhfc3RhdCwgZWMpOworfQorCitib29sIHBvc2l4X2Z0cnVuY2F0ZShjb25zdCBG
aWxlRGVzY3JpcHRvciYgZmQsIHNpemVfdCB0b19zaXplLCBlcnJvcl9jb2RlJiBlYykgeworICBp
ZiAoOjpmdHJ1bmNhdGUoZmQuZmQsIHRvX3NpemUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJl
X2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIHBvc2l4X2ZjaG1vZChjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQs
IGNvbnN0IFN0YXRUJiBzdCwgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6ZmNobW9kKGZkLmZk
LCBzdC5zdF9tb2RlKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJl
dHVybiB0cnVlOworICB9CisgIGVjLmNsZWFyKCk7CisgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBzdGF0X2VxdWl2YWxlbnQoY29uc3QgU3RhdFQmIHN0MSwgY29uc3QgU3RhdFQmIHN0Mikgewor
ICByZXR1cm4gKHN0MS5zdF9kZXYgPT0gc3QyLnN0X2RldiAmJiBzdDEuc3RfaW5vID09IHN0Mi5z
dF9pbm8pOworfQorCitmaWxlX3N0YXR1cyBGaWxlRGVzY3JpcHRvcjo6cmVmcmVzaF9zdGF0dXMo
ZXJyb3JfY29kZSYgZWMpIHsKKyAgLy8gRkQgbXVzdCBiZSBvcGVuIGFuZCBnb29kLgorICBtX3N0
YXR1cyA9IGZpbGVfc3RhdHVze307CisgIG1fc3RhdCA9IHt9OworICBlcnJvcl9jb2RlIG1fZWM7
CisgIGlmICg6OmZzdGF0KGZkLCAmbV9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gY2FwdHVyZV9l
cnJubygpOworICBtX3N0YXR1cyA9IGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBuYW1lLCBtX3N0
YXQsICZlYyk7CisgIHJldHVybiBtX3N0YXR1czsKK30KK30gLy8gbmFtZXNwYWNlCit9IC8vIGVu
ZCBuYW1lc3BhY2UgZGV0YWlsCisKK3VzaW5nIGRldGFpbDo6Y2FwdHVyZV9lcnJubzsKK3VzaW5n
IGRldGFpbDo6RXJyb3JIYW5kbGVyOwordXNpbmcgZGV0YWlsOjpTdGF0VDsKK3VzaW5nIGRldGFp
bDo6VGltZVNwZWM7Cit1c2luZyBwYXJzZXI6OmNyZWF0ZVZpZXc7Cit1c2luZyBwYXJzZXI6OlBh
dGhQYXJzZXI7Cit1c2luZyBwYXJzZXI6OnN0cmluZ192aWV3X3Q7CisKK2NvbnN0IGJvb2wgX0Zp
bGVzeXN0ZW1DbG9jazo6aXNfc3RlYWR5OworCitfRmlsZXN5c3RlbUNsb2NrOjp0aW1lX3BvaW50
IF9GaWxlc3lzdGVtQ2xvY2s6Om5vdygpIG5vZXhjZXB0IHsKKyAgdHlwZWRlZiBjaHJvbm86OmR1
cmF0aW9uPHJlcD4gX19zZWNzOworI2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElN
RSkgJiYgZGVmaW5lZChDTE9DS19SRUFMVElNRSkKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9u
PHJlcCwgbmFubz4gX19uc2VjczsKKyAgc3RydWN0IHRpbWVzcGVjIHRwOworICBpZiAoMCAhPSBj
bG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHApKQorICAgIF9fdGhyb3dfc3lzdGVtX2Vy
cm9yKGVycm5vLCAiY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSkgZmFpbGVkIik7CisgIHJl
dHVybiB0aW1lX3BvaW50KF9fc2Vjcyh0cC50dl9zZWMpICsKKyAgICAgICAgICAgICAgICAgICAg
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PGR1cmF0aW9uPihfX25zZWNzKHRwLnR2X25zZWMpKSk7Cisj
ZWxzZQorICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwLCBtaWNybz4gX19taWNyb3NlY3M7
CisgIHRpbWV2YWwgdHY7CisgIGdldHRpbWVvZmRheSgmdHYsIDApOworICByZXR1cm4gdGltZV9w
b2ludChfX3NlY3ModHYudHZfc2VjKSArIF9fbWljcm9zZWNzKHR2LnR2X3VzZWMpKTsKKyNlbmRp
ZiAvLyBfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FICYmIENMT0NLX1JFQUxUSU1FCit9CisKK2Zp
bGVzeXN0ZW1fZXJyb3I6On5maWxlc3lzdGVtX2Vycm9yKCkge30KKwordm9pZCBmaWxlc3lzdGVt
X2Vycm9yOjpfX2NyZWF0ZV93aGF0KGludCBfX251bV9wYXRocykgeworICBjb25zdCBjaGFyKiBk
ZXJpdmVkX3doYXQgPSBzeXN0ZW1fZXJyb3I6OndoYXQoKTsKKyAgX19zdG9yYWdlXy0+X193aGF0
XyA9IFsmXSgpIC0+IHN0cmluZyB7CisgICAgY29uc3QgY2hhciogcDEgPSBwYXRoMSgpLm5hdGl2
ZSgpLmVtcHR5KCkgPyAiXCJcIiIgOiBwYXRoMSgpLmNfc3RyKCk7CisgICAgY29uc3QgY2hhciog
cDIgPSBwYXRoMigpLm5hdGl2ZSgpLmVtcHR5KCkgPyAiXCJcIiIgOiBwYXRoMigpLmNfc3RyKCk7
CisgICAgc3dpdGNoIChfX251bV9wYXRocykgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4g
ZGV0YWlsOjpmb3JtYXRfc3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyIsIGRlcml2ZWRfd2hh
dCk7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmls
ZXN5c3RlbSBlcnJvcjogJXMgWyVzXSIsIGRlcml2ZWRfd2hhdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcDEpOworICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiBkZXRhaWw6
OmZvcm1hdF9zdHJpbmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIFslc10gWyVzXSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcml2ZWRfd2hhdCwgcDEsIHAyKTsKKyAgICB9
CisgIH0oKTsKK30KKworc3RhdGljIHBhdGggX19kb19hYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBw
YXRoKiBjd2QsIGVycm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsK
KyAgaWYgKHAuaXNfYWJzb2x1dGUoKSkKKyAgICByZXR1cm4gcDsKKyAgKmN3ZCA9IF9fY3VycmVu
dF9wYXRoKGVjKTsKKyAgaWYgKGVjICYmICplYykKKyAgICByZXR1cm4ge307CisgIHJldHVybiAo
KmN3ZCkgLyBwOworfQorCitwYXRoIF9fYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgcGF0aCBjd2Q7CisgIHJldHVybiBfX2RvX2Fic29sdXRlKHAsICZjd2QsIGVj
KTsKK30KKworcGF0aCBfX2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBvcmlnX3AsIGVycm9yX2NvZGUq
IGVjKSB7CisgIHBhdGggY3dkOworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJjYW5vbmljYWwi
LCBlYywgJm9yaWdfcCwgJmN3ZCk7CisKKyAgcGF0aCBwID0gX19kb19hYnNvbHV0ZShvcmlnX3As
ICZjd2QsIGVjKTsKKyAgY2hhciBidWZmW1BBVEhfTUFYICsgMV07CisgIGNoYXIqIHJldDsKKyAg
aWYgKChyZXQgPSA6OnJlYWxwYXRoKHAuY19zdHIoKSwgYnVmZikpID09IG51bGxwdHIpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIHtyZXR9OworfQor
Cit2b2lkIF9fY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRp
b25zIG9wdGlvbnMsCisgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJjb3B5IiwgZWMsICZmcm9tLCAmdG8pOworCisgIGNvbnN0IGJvb2wgc3lt
X3N0YXR1cyA9IGJvb2woCisgICAgICBvcHRpb25zICYgKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5
bWxpbmtzIHwgY29weV9vcHRpb25zOjpza2lwX3N5bWxpbmtzKSk7CisKKyAgY29uc3QgYm9vbCBz
eW1fc3RhdHVzMiA9IGJvb2wob3B0aW9ucyAmIGNvcHlfb3B0aW9uczo6Y29weV9zeW1saW5rcyk7
CisKKyAgZXJyb3JfY29kZSBtX2VjMTsKKyAgU3RhdFQgZl9zdCA9IHt9OworICBjb25zdCBmaWxl
X3N0YXR1cyBmID0gc3ltX3N0YXR1cyB8fCBzeW1fc3RhdHVzMgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gZGV0YWlsOjpwb3NpeF9sc3RhdChmcm9tLCBmX3N0LCAmbV9lYzEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQoZnJvbSwgZl9zdCwg
Jm1fZWMxKTsKKyAgaWYgKG1fZWMxKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMxKTsKKwor
ICBTdGF0VCB0X3N0ID0ge307CisgIGNvbnN0IGZpbGVfc3RhdHVzIHQgPSBzeW1fc3RhdHVzID8g
ZGV0YWlsOjpwb3NpeF9sc3RhdCh0bywgdF9zdCwgJm1fZWMxKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfc3RhdCh0bywgdF9zdCwgJm1fZWMxKTsK
KworICBpZiAobm90IHN0YXR1c19rbm93bih0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2Vj
MSk7CisKKyAgaWYgKCFleGlzdHMoZikgfHwgaXNfb3RoZXIoZikgfHwgaXNfb3RoZXIodCkgfHwK
KyAgICAgIChpc19kaXJlY3RvcnkoZikgJiYgaXNfcmVndWxhcl9maWxlKHQpKSB8fAorICAgICAg
ZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoZl9zdCwgdF9zdCkpIHsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjpmdW5jdGlvbl9ub3Rfc3VwcG9ydGVkKTsKKyAgfQorCisgIGlmIChlYykKKyAg
ICBlYy0+Y2xlYXIoKTsKKworICBpZiAoaXNfc3ltbGluayhmKSkgeworICAgIGlmIChib29sKGNv
cHlfb3B0aW9uczo6c2tpcF9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3Ro
aW5nCisgICAgfSBlbHNlIGlmIChub3QgZXhpc3RzKHQpKSB7CisgICAgICBfX2NvcHlfc3ltbGlu
ayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChl
cnJjOjpmaWxlX2V4aXN0cyk7CisgICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChpc19y
ZWd1bGFyX2ZpbGUoZikpIHsKKyAgICBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmRpcmVjdG9yaWVz
X29ubHkgJiBvcHRpb25zKSkgeworICAgICAgLy8gZG8gbm90aGluZworICAgIH0gZWxzZSBpZiAo
Ym9vbChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICBf
X2NyZWF0ZV9zeW1saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChib29sKGNvcHlf
b3B0aW9uczo6Y3JlYXRlX2hhcmRfbGlua3MgJiBvcHRpb25zKSkgeworICAgICAgX19jcmVhdGVf
aGFyZF9saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkodCkp
IHsKKyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvIC8gZnJvbS5maWxlbmFtZSgpLCBvcHRpb25z
LCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvLCBvcHRpb25z
LCBlYyk7CisgICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkoZikg
JiYgYm9vbChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6aXNfYV9kaXJlY3RvcnkpOworICB9IGVsc2UgaWYgKGlz
X2RpcmVjdG9yeShmKSAmJiAoYm9vbChjb3B5X29wdGlvbnM6OnJlY3Vyc2l2ZSAmIG9wdGlvbnMp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnM6Om5vbmUg
PT0gb3B0aW9ucykpIHsKKworICAgIGlmICghZXhpc3RzKHQpKSB7CisgICAgICAvLyBjcmVhdGUg
ZGlyZWN0b3J5IHRvIHdpdGggYXR0cmlidXRlcyBmcm9tICdmcm9tJy4KKyAgICAgIF9fY3JlYXRl
X2RpcmVjdG9yeSh0bywgZnJvbSwgZWMpOworICAgICAgaWYgKGVjICYmICplYykgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIGRpcmVjdG9yeV9pdGVyYXRvciBpdCA9Cisg
ICAgICAgIGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKGZyb20sICplYykgOiBkaXJlY3RvcnlfaXRl
cmF0b3IoZnJvbSk7CisgICAgaWYgKGVjICYmICplYykgeworICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBlcnJvcl9jb2RlIG1fZWMyOworICAgIGZvciAoOyBpdCAhPSBkaXJlY3RvcnlfaXRlcmF0
b3IoKTsgaXQuaW5jcmVtZW50KG1fZWMyKSkgeworICAgICAgaWYgKG1fZWMyKSB7CisgICAgICAg
IHJldHVybiBlcnIucmVwb3J0KG1fZWMyKTsKKyAgICAgIH0KKyAgICAgIF9fY29weShpdC0+cGF0
aCgpLCB0byAvIGl0LT5wYXRoKCkuZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICBvcHRpb25zIHwg
Y29weV9vcHRpb25zOjpfX2luX3JlY3Vyc2l2ZV9jb3B5LCBlYyk7CisgICAgICBpZiAoZWMgJiYg
KmVjKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbmFtZXNw
YWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCisjaWZkZWYgX0xJQkNQUF9VU0VfU0VOREZJTEUK
K2Jvb2wgY29weV9maWxlX2ltcGxfc2VuZGZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZp
bGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgZWMpIHsKKworICBzaXplX3QgY291bnQgPSByZWFkX2ZkLmdldF9zdGF0KCkuc3Rf
c2l6ZTsKKyAgZG8geworICAgIHNzaXplX3QgcmVzOworICAgIGlmICgocmVzID0gOjpzZW5kZmls
ZSh3cml0ZV9mZC5mZCwgcmVhZF9mZC5mZCwgbnVsbHB0ciwgY291bnQpKSA9PSAtMSkgeworICAg
ICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGNvdW50IC09IHJlczsKKyAgfSB3aGlsZSAoY291bnQgPiAwKTsKKworICBlYy5jbGVhcigpOwor
CisgIHJldHVybiB0cnVlOworfQorI2VsaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkK
K2Jvb2wgY29weV9maWxlX2ltcGxfY29weWZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZp
bGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgZWMpIHsKKyAgc3RydWN0IENvcHlGaWxlU3RhdGUgeworICAgIGNvcHlmaWxlX3N0
YXRlX3Qgc3RhdGU7CisgICAgQ29weUZpbGVTdGF0ZSgpIHsgc3RhdGUgPSBjb3B5ZmlsZV9zdGF0
ZV9hbGxvYygpOyB9CisgICAgfkNvcHlGaWxlU3RhdGUoKSB7IGNvcHlmaWxlX3N0YXRlX2ZyZWUo
c3RhdGUpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBDb3B5RmlsZVN0YXRlKENvcHlGaWxlU3RhdGUg
Y29uc3QmKSA9IGRlbGV0ZTsKKyAgICBDb3B5RmlsZVN0YXRlJiBvcGVyYXRvcj0oQ29weUZpbGVT
dGF0ZSBjb25zdCYpID0gZGVsZXRlOworICB9OworCisgIENvcHlGaWxlU3RhdGUgY2ZzOworICBp
ZiAoZmNvcHlmaWxlKHJlYWRfZmQuZmQsIHdyaXRlX2ZkLmZkLCBjZnMuc3RhdGUsIENPUFlGSUxF
X0RBVEEpIDwgMCkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorCisgIGVjLmNsZWFyKCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKKy8v
IFRoaXMgZnVuY3Rpb24gaXMgZ3VhcmRlZCBieSBpZmRlZidzIGluIEp1bmlwZXIgZHVlIHRvIHRo
ZSBjdXJyZW50CisvLyBjbGFuZyBub3Qgc3VwcG9ydGluZyBhbiBfX29wZW4gZnVuY3Rpb24gb24g
aWZzdHJlYW0gYW5kIG9mc3RyZWFtLgorI2lmICFkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxF
KSAmJiAhZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKKy8vIE5vdGU6IFRoaXMgZnVuY3Rp
b24gaXNuJ3QgZ3VhcmRlZCBieSBpZmRlZidzIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bnVzZWQK
Ky8vIGluIG9yZGVyIHRvIGFzc3VyZSBpdCBzdGlsbCBjb21waWxlcy4KK19fYXR0cmlidXRlX18o
KHVudXNlZCkpIGJvb2wgY29weV9maWxlX2ltcGxfZGVmYXVsdChGaWxlRGVzY3JpcHRvciYgcmVh
ZF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGaWxlRGVzY3JpcHRvciYgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWZzdHJlYW0gaW47
CisgIGluLl9fb3BlbihyZWFkX2ZkLmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghaW4uaXNfb3Bl
bigpKSB7CisgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgX19vcGVuIGRpZG4ndCByZXNldCB0aGUg
ZXJyb3IgY29kZS4KKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gZmFsc2U7
CisgIH0KKyAgb2ZzdHJlYW0gb3V0OworICBvdXQuX19vcGVuKHdyaXRlX2ZkLmZkLCBpb3M6OmJp
bmFyeSk7CisgIGlmICghb3V0LmlzX29wZW4oKSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygp
OworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmIChpbi5nb29kKCkgJiYgb3V0Lmdvb2Qo
KSkgeworICAgIHVzaW5nIEluSXQgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIHVz
aW5nIE91dEl0ID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPjsKKyAgICBJbkl0IGJpbihpbik7
CisgICAgSW5JdCBlaW47CisgICAgT3V0SXQgYm91dChvdXQpOworICAgIGNvcHkoYmluLCBlaW4s
IGJvdXQpOworICB9CisgIGlmIChvdXQuZmFpbCgpIHx8IGluLmZhaWwoKSkgeworICAgIGVjID0g
bWFrZV9lcnJvcl9jb2RlKGVycmM6OmlvX2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBlYy5jbGVhcigpOworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIGNvcHlf
ZmlsZV9pbXBsKEZpbGVEZXNjcmlwdG9yJiBmcm9tLCBGaWxlRGVzY3JpcHRvciYgdG8sIGVycm9y
X2NvZGUmIGVjKSB7CisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9TRU5ERklMRSkKKyAgcmV0dXJu
IGNvcHlfZmlsZV9pbXBsX3NlbmRmaWxlKGZyb20sIHRvLCBlYyk7CisjZWxpZiBkZWZpbmVkKF9M
SUJDUFBfVVNFX0NPUFlGSUxFKQorICByZXR1cm4gY29weV9maWxlX2ltcGxfY29weWZpbGUoZnJv
bSwgdG8sIGVjKTsKKyNlbHNlCisgIHJldHVybiBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KGZyb20s
IHRvLCBlYyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIGRl
dGFpbAorCitib29sIF9fY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRv
LCBjb3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMp
IHsKKyAgdXNpbmcgZGV0YWlsOjpGaWxlRGVzY3JpcHRvcjsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+
IGVycigiY29weV9maWxlIiwgZWMsICZ0bywgJmZyb20pOworCisgIGVycm9yX2NvZGUgbV9lYzsK
KyAgRmlsZURlc2NyaXB0b3IgZnJvbV9mZCA9CisgICAgICBGaWxlRGVzY3JpcHRvcjo6Y3JlYXRl
X3dpdGhfc3RhdHVzKCZmcm9tLCBtX2VjLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworICBpZiAo
bV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKworICBhdXRvIGZyb21fc3QgPSBm
cm9tX2ZkLmdldF9zdGF0dXMoKTsKKyAgU3RhdFQgY29uc3QmIGZyb21fc3RhdCA9IGZyb21fZmQu
Z2V0X3N0YXQoKTsKKyAgaWYgKCFpc19yZWd1bGFyX2ZpbGUoZnJvbV9zdCkpIHsKKyAgICBpZiAo
bm90IG1fZWMpCisgICAgICBtX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vdF9zdXBwb3J0
ZWQpOworICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICB9CisKKyAgY29uc3QgYm9vbCBz
a2lwX2V4aXN0aW5nID0gYm9vbChjb3B5X29wdGlvbnM6OnNraXBfZXhpc3RpbmcgJiBvcHRpb25z
KTsKKyAgY29uc3QgYm9vbCB1cGRhdGVfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6dXBk
YXRlX2V4aXN0aW5nICYgb3B0aW9ucyk7CisgIGNvbnN0IGJvb2wgb3ZlcndyaXRlX2V4aXN0aW5n
ID0KKyAgICAgIGJvb2woY29weV9vcHRpb25zOjpvdmVyd3JpdGVfZXhpc3RpbmcgJiBvcHRpb25z
KTsKKworICBTdGF0VCB0b19zdGF0X3BhdGg7CisgIGZpbGVfc3RhdHVzIHRvX3N0ID0gZGV0YWls
Ojpwb3NpeF9zdGF0KHRvLCB0b19zdGF0X3BhdGgsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25v
d24odG9fc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworCisgIGNvbnN0IGJvb2wg
dG9fZXhpc3RzID0gZXhpc3RzKHRvX3N0KTsKKyAgaWYgKHRvX2V4aXN0cyAmJiAhaXNfcmVndWxh
cl9maWxlKHRvX3N0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVk
KTsKKworICBpZiAodG9fZXhpc3RzICYmIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KGZyb21fc3Rh
dCwgdG9fc3RhdF9wYXRoKSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0
cyk7CisKKyAgaWYgKHRvX2V4aXN0cyAmJiBza2lwX2V4aXN0aW5nKQorICAgIHJldHVybiBmYWxz
ZTsKKworICBib29sIFNob3VsZENvcHkgPSBbJl0oKSB7CisgICAgaWYgKHRvX2V4aXN0cyAmJiB1
cGRhdGVfZXhpc3RpbmcpIHsKKyAgICAgIGF1dG8gZnJvbV90aW1lID0gZGV0YWlsOjpleHRyYWN0
X210aW1lKGZyb21fc3RhdCk7CisgICAgICBhdXRvIHRvX3RpbWUgPSBkZXRhaWw6OmV4dHJhY3Rf
bXRpbWUodG9fc3RhdF9wYXRoKTsKKyAgICAgIGlmIChmcm9tX3RpbWUudHZfc2VjIDwgdG9fdGlt
ZS50dl9zZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGlmIChmcm9tX3RpbWUudHZf
c2VjID09IHRvX3RpbWUudHZfc2VjICYmCisgICAgICAgICAgZnJvbV90aW1lLnR2X25zZWMgPD0g
dG9fdGltZS50dl9uc2VjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKCF0b19leGlzdHMgfHwgb3ZlcndyaXRlX2V4aXN0aW5nKQorICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMp
OworICB9KCk7CisgIGlmICghU2hvdWxkQ29weSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLy8g
RG9uJ3QgdHJ1bmNhdGUgcmlnaHQgYXdheS4gV2UgbWF5IG5vdCBiZSBvcGVuaW5nIHRoZSBmaWxl
IHdlIG9yaWdpbmFsbHkKKyAgLy8gbG9va2VkIGF0OyB3ZSdsbCBjaGVjayB0aGlzIGxhdGVyLgor
ICBpbnQgdG9fb3Blbl9mbGFncyA9IE9fV1JPTkxZOworICBpZiAoIXRvX2V4aXN0cykKKyAgICB0
b19vcGVuX2ZsYWdzIHw9IE9fQ1JFQVQ7CisgIEZpbGVEZXNjcmlwdG9yIHRvX2ZkID0gRmlsZURl
c2NyaXB0b3I6OmNyZWF0ZV93aXRoX3N0YXR1cygKKyAgICAgICZ0bywgbV9lYywgdG9fb3Blbl9m
bGFncywgZnJvbV9zdGF0LnN0X21vZGUpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKworICBpZiAodG9fZXhpc3RzKSB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
ZmlsZSB3ZSBpbml0aWFsbHkgc3RhdCdlZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvbmUKKyAgICAv
LyB3ZSBvcGVuZWQuCisgICAgLy8gRklYTUU6IHJlcG9ydCB0aGlzIGJldHRlci4KKyAgICBpZiAo
IWRldGFpbDo6c3RhdF9lcXVpdmFsZW50KHRvX3N0YXRfcGF0aCwgdG9fZmQuZ2V0X3N0YXQoKSkp
CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpiYWRfZmlsZV9kZXNjcmlwdG9yKTsKKwor
ICAgIC8vIFNldCB0aGUgcGVybWlzc2lvbnMgYW5kIHRydW5jYXRlIHRoZSBmaWxlIHdlIG9wZW5l
ZC4KKyAgICBpZiAoZGV0YWlsOjpwb3NpeF9mY2htb2QodG9fZmQsIGZyb21fc3RhdCwgbV9lYykp
CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBpZiAoZGV0YWlsOjpwb3NpeF9m
dHJ1bmNhdGUodG9fZmQsIDAsIG1fZWMpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7
CisgIH0KKworICBpZiAoIWNvcHlfZmlsZV9pbXBsKGZyb21fZmQsIHRvX2ZkLCBtX2VjKSkgewor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGRlc3QgZmlsZSBpZiB3ZSBmYWlsZWQsIGFuZCBpdCBk
aWRuJ3QgZXhpc3QgcHJldmlvdXNseS4KKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAg
fQorCisgIHJldHVybiB0cnVlOworfQorCit2b2lkIF9fY29weV9zeW1saW5rKGNvbnN0IHBhdGgm
IGV4aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBjb25zdCBwYXRoIHJlYWxfcGF0aChfX3JlYWRf
c3ltbGluayhleGlzdGluZ19zeW1saW5rLCBlYykpOworICBpZiAoZWMgJiYgKmVjKSB7CisgICAg
cmV0dXJuOworICB9CisgIC8vIE5PVEU6IHByb3Bvc2FsIHNheXMgeW91IHNob3VsZCBkZXRlY3Qg
aWYgeW91IHNob3VsZCBjYWxsCisgIC8vIGNyZWF0ZV9zeW1saW5rIG9yIGNyZWF0ZV9kaXJlY3Rv
cnlfc3ltbGluay4gSSBkb24ndCB0aGluayB0aGlzCisgIC8vIGlzIG5lZWRlZCB3aXRoIFBPU0lY
CisgIF9fY3JlYXRlX3N5bWxpbmsocmVhbF9wYXRoLCBuZXdfc3ltbGluaywgZWMpOworfQorCiti
b29sIF9fY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7
CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJlY3RvcmllcyIsIGVjLCAmcCk7
CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBhdXRvIGNvbnN0IHN0ID0gZGV0YWlsOjpwb3NpeF9z
dGF0KHAsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMpOworICBlbHNlIGlmIChpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBm
YWxzZTsKKyAgZWxzZSBpZiAoZXhpc3RzKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJj
OjpmaWxlX2V4aXN0cyk7CisKKyAgY29uc3QgcGF0aCBwYXJlbnQgPSBwLnBhcmVudF9wYXRoKCk7
CisgIGlmICghcGFyZW50LmVtcHR5KCkpIHsKKyAgICBjb25zdCBmaWxlX3N0YXR1cyBwYXJlbnRf
c3QgPSBzdGF0dXMocGFyZW50LCBtX2VjKTsKKyAgICBpZiAobm90IHN0YXR1c19rbm93bihwYXJl
bnRfc3QpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgaWYgKG5vdCBleGlz
dHMocGFyZW50X3N0KSkgeworICAgICAgX19jcmVhdGVfZGlyZWN0b3JpZXMocGFyZW50LCBlYyk7
CisgICAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShwLCBlYyk7Cit9CisKK2Jv
b2wgX19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJlY3RvcnkiLCBlYywgJnApOworCisg
IGlmICg6Om1rZGlyKHAuY19zdHIoKSwgc3RhdGljX2Nhc3Q8aW50PihwZXJtczo6YWxsKSkgPT0g
MCkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVw
b3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBfX2NyZWF0
ZV9kaXJlY3RvcnkocGF0aCBjb25zdCYgcCwgcGF0aCBjb25zdCYgYXR0cmlidXRlcywgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIs
IGVjLCAmcCwgJmF0dHJpYnV0ZXMpOworCisgIFN0YXRUIGF0dHJfc3RhdDsKKyAgZXJyb3JfY29k
ZSBtZWM7CisgIGF1dG8gc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQoYXR0cmlidXRlcywgYXR0cl9z
dGF0LCAmbWVjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVw
b3J0KG1lYyk7CisgIGlmICghaXNfZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChlcnJjOjpub3RfYV9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBzcGVj
aWZpZWQgYXR0cmlidXRlIHBhdGggaXMgaW52YWxpZCIpOworCisgIGlmICg6Om1rZGlyKHAuY19z
dHIoKSwgYXR0cl9zdGF0LnN0X21vZGUpID09IDApCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChl
cnJubyAhPSBFRVhJU1QpCisgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsocGF0aCBjb25z
dCYgZnJvbSwgcGF0aCBjb25zdCYgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9kaXJl
Y3Rvcnlfc3ltbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6c3ltbGluayhmcm9tLmNf
c3RyKCksIHRvLmNfc3RyKCkpICE9IDApCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9l
cnJubygpKTsKK30KKwordm9pZCBfX2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgZnJvbSwg
Y29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBl
cnIoImNyZWF0ZV9oYXJkX2xpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OmxpbmsoZnJv
bS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0
dXJlX2Vycm5vKCkpOworfQorCit2b2lkIF9fY3JlYXRlX3N5bWxpbmsocGF0aCBjb25zdCYgZnJv
bSwgcGF0aCBjb25zdCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lk
PiBlcnIoImNyZWF0ZV9zeW1saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1saW5r
KGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKK30KKworcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYyk7CisKKyAg
YXV0byBzaXplID0gOjpwYXRoY29uZigiLiIsIF9QQ19QQVRIX01BWCk7CisgIF9MSUJDUFBfQVNT
RVJUKHNpemUgPj0gMCwgInBhdGhjb25mIHJldHVybmVkIGEgMCBhcyBtYXggc2l6ZSIpOworCisg
IGF1dG8gYnVmZiA9IHVuaXF1ZV9wdHI8Y2hhcltdPihuZXcgY2hhcltzaXplICsgMV0pOworICBj
aGFyKiByZXQ7CisgIGlmICgocmV0ID0gOjpnZXRjd2QoYnVmZi5nZXQoKSwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaXplKSkpID09IG51bGxwdHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVy
ZV9lcnJubygpLCAiY2FsbCB0byBnZXRjd2QgZmFpbGVkIik7CisKKyAgcmV0dXJuIHtidWZmLmdl
dCgpfTsKK30KKwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYywgJnAp
OworICBpZiAoOjpjaGRpcihwLmNfc3RyKCkpID09IC0xKQorICAgIGVyci5yZXBvcnQoY2FwdHVy
ZV9lcnJubygpKTsKK30KKworYm9vbCBfX2VxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0
IHBhdGgmIHAyLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJl
cXVpdmFsZW50IiwgZWMsICZwMSwgJnAyKTsKKworICBlcnJvcl9jb2RlIGVjMSwgZWMyOworICBT
dGF0VCBzdDEgPSB7fSwgc3QyID0ge307CisgIGF1dG8gczEgPSBkZXRhaWw6OnBvc2l4X3N0YXQo
cDEubmF0aXZlKCksIHN0MSwgJmVjMSk7CisgIGlmICghZXhpc3RzKHMxKSkKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKyAgYXV0byBzMiA9IGRldGFpbDo6cG9z
aXhfc3RhdChwMi5uYXRpdmUoKSwgc3QyLCAmZWMyKTsKKyAgaWYgKCFleGlzdHMoczIpKQorICAg
IHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworCisgIHJldHVybiBkZXRh
aWw6OnN0YXRfZXF1aXZhbGVudChzdDEsIHN0Mik7Cit9CisKK3VpbnRtYXhfdCBfX2ZpbGVfc2l6
ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1h
eF90PiBlcnIoImZpbGVfc2l6ZSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBT
dGF0VCBzdDsKKyAgZmlsZV9zdGF0dXMgZnN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAm
bV9lYyk7CisgIGlmICghZXhpc3RzKGZzdCkgfHwgIWlzX3JlZ3VsYXJfZmlsZShmc3QpKSB7Cisg
ICAgZXJyYyBlcnJvcl9raW5kID0KKyAgICAgICAgaXNfZGlyZWN0b3J5KGZzdCkgPyBlcnJjOjpp
c19hX2RpcmVjdG9yeSA6IGVycmM6Om5vdF9zdXBwb3J0ZWQ7CisgICAgaWYgKCFtX2VjKQorICAg
ICAgbV9lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJvcl9raW5kKTsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKyAgfQorICAvLyBpc19yZWd1bGFyX2ZpbGUocCkgPT0gdHJ1ZQorICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludG1heF90PihzdC5zdF9zaXplKTsKK30KKwordWludG1heF90IF9f
aGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9y
SGFuZGxlcjx1aW50bWF4X3Q+IGVycigiaGFyZF9saW5rX2NvdW50IiwgZWMsICZwKTsKKworICBl
cnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHN0OworICBkZXRhaWw6OnBvc2l4X3N0YXQocCwgc3Qs
ICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KHN0LnN0X25saW5rKTsKK30KKworYm9vbCBfX2Zz
X2lzX2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjxib29sPiBlcnIoImlzX2VtcHR5IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7Cisg
IFN0YXRUIHBzdDsKKyAgYXV0byBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBwc3QsICZtX2Vj
KTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIGVsc2UgaWYg
KCFpc19kaXJlY3Rvcnkoc3QpICYmICFpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBl
cnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICBlbHNlIGlmIChpc19kaXJlY3Rvcnko
c3QpKSB7CisgICAgYXV0byBpdCA9IGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKHAsICplYykgOiBk
aXJlY3RvcnlfaXRlcmF0b3IocCk7CisgICAgaWYgKGVjICYmICplYykKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gaXQgPT0gZGlyZWN0b3J5X2l0ZXJhdG9ye307CisgIH0gZWxzZSBp
ZiAoaXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90
Pihwc3Quc3Rfc2l6ZSkgPT0gMDsKKworICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cit9CisKK3N0
YXRpYyBmaWxlX3RpbWVfdHlwZSBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgm
IHAsIGNvbnN0IFN0YXRUJiBzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNfdGltZTsK
KyAgRXJyb3JIYW5kbGVyPGZpbGVfdGltZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVj
LCAmcCk7CisKKyAgYXV0byB0cyA9IGRldGFpbDo6ZXh0cmFjdF9tdGltZShzdCk7CisgIGlmICgh
ZnNfdGltZTo6aXNfcmVwcmVzZW50YWJsZSh0cykpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJy
Yzo6dmFsdWVfdG9vX2xhcmdlKTsKKworICByZXR1cm4gZnNfdGltZTo6Y29udmVydF9mcm9tX3Rp
bWVzcGVjKHRzKTsKK30KKworZmlsZV90aW1lX3R5cGUgX19sYXN0X3dyaXRlX3RpbWUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgbmFtZXNwYWNlIGNocm9ubzsKKyAg
RXJyb3JIYW5kbGVyPGZpbGVfdGltZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAm
cCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBzdDsKKyAgZGV0YWlsOjpwb3NpeF9z
dGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMpOworICByZXR1cm4gX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShwLCBzdCwgZWMpOworfQor
Cit2b2lkIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5l
d190aW1lLCBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBkZXRhaWw6OmZzX3RpbWU7CisgIEVy
cm9ySGFuZGxlcjx2b2lkPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgZXJy
b3JfY29kZSBtX2VjOworICBhcnJheTxUaW1lU3BlYywgMj4gdGJ1ZjsKKyNpZiAhZGVmaW5lZChf
TElCQ1BQX1VTRV9VVElNRU5TQVQpCisgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaGFzIGEgcmFj
ZSBjb25kaXRpb24gYmV0d2VlbiBkZXRlcm1pbmluZyB0aGUKKyAgLy8gbGFzdCBhY2Nlc3MgdGlt
ZSBhbmQgYXR0ZW1wdGluZyB0byBzZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgdXNpbmcKKyAgLy8g
Ojp1dGltZXMKKyAgU3RhdFQgc3Q7CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhf
c3RhdChwLCBzdCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydCht
X2VjKTsKKyAgdGJ1ZlswXSA9IGRldGFpbDo6ZXh0cmFjdF9hdGltZShzdCk7CisjZWxzZQorICB0
YnVmWzBdLnR2X3NlYyA9IDA7CisgIHRidWZbMF0udHZfbnNlYyA9IFVUSU1FX09NSVQ7CisjZW5k
aWYKKyAgaWYgKCFmc190aW1lOjpjb252ZXJ0X3RvX3RpbWVzcGVjKHRidWZbMV0sIG5ld190aW1l
KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjp2YWx1ZV90b29fbGFyZ2UpOworCisgIGRl
dGFpbDo6c2V0X2ZpbGVfdGltZXMocCwgdGJ1ZiwgbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJl
dHVybiBlcnIucmVwb3J0KG1fZWMpOworfQorCit2b2lkIF9fcGVybWlzc2lvbnMoY29uc3QgcGF0
aCYgcCwgcGVybXMgcHJtcywgcGVybV9vcHRpb25zIG9wdHMsCisgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicGVybWlzc2lvbnMi
LCBlYywgJnApOworCisgIGF1dG8gaGFzX29wdCA9IFsmXShwZXJtX29wdGlvbnMgbykgeyByZXR1
cm4gYm9vbChvICYgb3B0cyk7IH07CisgIGNvbnN0IGJvb2wgcmVzb2x2ZV9zeW1saW5rcyA9ICFo
YXNfb3B0KHBlcm1fb3B0aW9uczo6bm9mb2xsb3cpOworICBjb25zdCBib29sIGFkZF9wZXJtcyA9
IGhhc19vcHQocGVybV9vcHRpb25zOjphZGQpOworICBjb25zdCBib29sIHJlbW92ZV9wZXJtcyA9
IGhhc19vcHQocGVybV9vcHRpb25zOjpyZW1vdmUpOworICBfTElCQ1BQX0FTU0VSVCgKKyAgICAg
IChhZGRfcGVybXMgKyByZW1vdmVfcGVybXMgKyBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVwbGFj
ZSkpID09IDEsCisgICAgICAiT25lIGFuZCBvbmx5IG9uZSBvZiB0aGUgcGVybV9vcHRpb25zIGNv
bnN0YW50cyByZXBsYWNlLCBhZGQsIG9yIHJlbW92ZSAiCisgICAgICAiaXMgcHJlc2VudCBpbiBv
cHRzIik7CisKKyAgYm9vbCBzZXRfc3ltX3Blcm1zID0gZmFsc2U7CisgIHBybXMgJj0gcGVybXM6
Om1hc2s7CisgIGlmICghcmVzb2x2ZV9zeW1saW5rcyB8fCAoYWRkX3Blcm1zIHx8IHJlbW92ZV9w
ZXJtcykpIHsKKyAgICBlcnJvcl9jb2RlIG1fZWM7CisgICAgZmlsZV9zdGF0dXMgc3QgPSByZXNv
bHZlX3N5bWxpbmtzID8gZGV0YWlsOjpwb3NpeF9zdGF0KHAsICZtX2VjKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfbHN0YXQocCwgJm1fZWMp
OworICAgIHNldF9zeW1fcGVybXMgPSBpc19zeW1saW5rKHN0KTsKKyAgICBpZiAobV9lYykKKyAg
ICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIF9MSUJDUFBfQVNTRVJUKHN0LnBlcm1p
c3Npb25zKCkgIT0gcGVybXM6OnVua25vd24sCisgICAgICAgICAgICAgICAgICAgIlBlcm1pc3Np
b25zIHVuZXhwZWN0ZWRseSB1bmtub3duIik7CisgICAgaWYgKGFkZF9wZXJtcykKKyAgICAgIHBy
bXMgfD0gc3QucGVybWlzc2lvbnMoKTsKKyAgICBlbHNlIGlmIChyZW1vdmVfcGVybXMpCisgICAg
ICBwcm1zID0gc3QucGVybWlzc2lvbnMoKSAmIH5wcm1zOworICB9CisgIGNvbnN0IGF1dG8gcmVh
bF9wZXJtcyA9IGRldGFpbDo6cG9zaXhfY29udmVydF9wZXJtcyhwcm1zKTsKKworI2lmIGRlZmlu
ZWQoQVRfU1lNTElOS19OT0ZPTExPVykgJiYgZGVmaW5lZChBVF9GRENXRCkKKyAgY29uc3QgaW50
IGZsYWdzID0gc2V0X3N5bV9wZXJtcyA/IEFUX1NZTUxJTktfTk9GT0xMT1cgOiAwOworICBpZiAo
OjpmY2htb2RhdChBVF9GRENXRCwgcC5jX3N0cigpLCByZWFsX3Blcm1zLCBmbGFncykgPT0gLTEp
IHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisjZWxzZQor
ICBpZiAoc2V0X3N5bV9wZXJtcykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpvcGVyYXRp
b25fbm90X3N1cHBvcnRlZCk7CisgIGlmICg6OmNobW9kKHAuY19zdHIoKSwgcmVhbF9wZXJtcykg
PT0gLTEpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9Cisj
ZW5kaWYKK30KKworcGF0aCBfX3JlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJyZWFkX3N5bWxpbmsiLCBlYywgJnAp
OworCisgIGNoYXIgYnVmZltQQVRIX01BWCArIDFdOworICBlcnJvcl9jb2RlIG1fZWM7CisgIDo6
c3NpemVfdCByZXQ7CisgIGlmICgocmV0ID0gOjpyZWFkbGluayhwLmNfc3RyKCksIGJ1ZmYsIFBB
VEhfTUFYKSkgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkp
OworICB9CisgIF9MSUJDUFBfQVNTRVJUKHJldCA8PSBQQVRIX01BWCwgIlRPRE8iKTsKKyAgX0xJ
QkNQUF9BU1NFUlQocmV0ID4gMCwgIlRPRE8iKTsKKyAgYnVmZltyZXRdID0gMDsKKyAgcmV0dXJu
IHtidWZmfTsKK30KKworYm9vbCBfX3JlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJyZW1vdmUiLCBlYywgJnApOworICBpZiAo
OjpyZW1vdmUocC5jX3N0cigpKSA9PSAtMSkgeworICAgIGlmIChlcnJubyAhPSBFTk9FTlQpCisg
ICAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9
CisgIHJldHVybiB0cnVlOworfQorCituYW1lc3BhY2UgeworCit1aW50bWF4X3QgcmVtb3ZlX2Fs
bF9pbXBsKHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUmIGVjKSB7CisgIGNvbnN0IGF1dG8gbnBv
cyA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oLTEpOworICBjb25zdCBmaWxlX3N0YXR1cyBzdCA9
IF9fc3ltbGlua19zdGF0dXMocCwgJmVjKTsKKyAgaWYgKGVjKQorICAgIHJldHVybiBucG9zOwor
ICB1aW50bWF4X3QgY291bnQgPSAxOworICBpZiAoaXNfZGlyZWN0b3J5KHN0KSkgeworICAgIGZv
ciAoZGlyZWN0b3J5X2l0ZXJhdG9yIGl0KHAsIGVjKTsgIWVjICYmIGl0ICE9IGRpcmVjdG9yeV9p
dGVyYXRvcigpOworICAgICAgICAgaXQuaW5jcmVtZW50KGVjKSkgeworICAgICAgYXV0byBvdGhl
cl9jb3VudCA9IHJlbW92ZV9hbGxfaW1wbChpdC0+cGF0aCgpLCBlYyk7CisgICAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiBucG9zOworICAgICAgY291bnQgKz0gb3RoZXJfY291bnQ7CisgICAg
fQorICAgIGlmIChlYykKKyAgICAgIHJldHVybiBucG9zOworICB9CisgIGlmICghX19yZW1vdmUo
cCwgJmVjKSkKKyAgICByZXR1cm4gbnBvczsKKyAgcmV0dXJuIGNvdW50OworfQorCit9IC8vIGVu
ZCBuYW1lc3BhY2UKKwordWludG1heF90IF9fcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoInJlbW92ZV9hbGwi
LCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbWVjOworICBhdXRvIGNvdW50ID0gcmVtb3ZlX2Fs
bF9pbXBsKHAsIG1lYyk7CisgIGlmIChtZWMpIHsKKyAgICBpZiAobWVjID09IGVycmM6Om5vX3N1
Y2hfZmlsZV9vcl9kaXJlY3RvcnkpCisgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChtZWMpOworICB9CisgIHJldHVybiBjb3VudDsKK30KKwordm9pZCBfX3JlbmFtZShjb25z
dCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPHZvaWQ+IGVycigicmVuYW1lIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpyZW5h
bWUoZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19yZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50
bWF4X3Qgc2l6ZSwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigi
cmVzaXplX2ZpbGUiLCBlYywgJnApOworICBpZiAoOjp0cnVuY2F0ZShwLmNfc3RyKCksIHN0YXRp
Y19jYXN0PCA6Om9mZl90PihzaXplKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2Fw
dHVyZV9lcnJubygpKTsKK30KKworc3BhY2VfaW5mbyBfX3NwYWNlKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInNwYWNlIiwgZWMsICZw
KTsKKyAgc3BhY2VfaW5mbyBzaTsKKyAgc3RydWN0IHN0YXR2ZnMgbV9zdmZzID0ge307CisgIGlm
ICg6OnN0YXR2ZnMocC5jX3N0cigpLCAmbV9zdmZzKSA9PSAtMSkgeworICAgIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKKyAgICBzaS5jYXBhY2l0eSA9IHNpLmZyZWUgPSBzaS5hdmFpbGFi
bGUgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAgICByZXR1cm4gc2k7CisgIH0KKyAg
Ly8gTXVsdGlwbHkgd2l0aCBvdmVyZmxvdyBjaGVja2luZy4KKyAgYXV0byBkb19tdWx0ID0gWyZd
KHVpbnRtYXhfdCYgb3V0LCB1aW50bWF4X3Qgb3RoZXIpIHsKKyAgICBvdXQgPSBvdGhlciAqIG1f
c3Zmcy5mX2Zyc2l6ZTsKKyAgICBpZiAob3RoZXIgPT0gMCB8fCBvdXQgLyBvdGhlciAhPSBtX3N2
ZnMuZl9mcnNpemUpCisgICAgICBvdXQgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAg
fTsKKyAgZG9fbXVsdChzaS5jYXBhY2l0eSwgbV9zdmZzLmZfYmxvY2tzKTsKKyAgZG9fbXVsdChz
aS5mcmVlLCBtX3N2ZnMuZl9iZnJlZSk7CisgIGRvX211bHQoc2kuYXZhaWxhYmxlLCBtX3N2ZnMu
Zl9iYXZhaWwpOworICByZXR1cm4gc2k7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0
IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIHJldHVybiBkZXRhaWw6OnBvc2l4X3N0YXQo
cCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBfX3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIHJldHVybiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAsIGVjKTsK
K30KKworcGF0aCBfX3RlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJy
b3JIYW5kbGVyPHBhdGg+IGVycigidGVtcF9kaXJlY3RvcnlfcGF0aCIsIGVjKTsKKworICBjb25z
dCBjaGFyKiBlbnZfcGF0aHNbXSA9IHsiVE1QRElSIiwgIlRNUCIsICJURU1QIiwgIlRFTVBESVIi
fTsKKyAgY29uc3QgY2hhciogcmV0ID0gbnVsbHB0cjsKKworICBmb3IgKGF1dG8mIGVwIDogZW52
X3BhdGhzKQorICAgIGlmICgocmV0ID0gZ2V0ZW52KGVwKSkpCisgICAgICBicmVhazsKKyAgaWYg
KHJldCA9PSBudWxscHRyKQorICAgIHJldCA9ICIvdG1wIjsKKworICBwYXRoIHAocmV0KTsKKyAg
ZXJyb3JfY29kZSBtX2VjOworICBmaWxlX3N0YXR1cyBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChw
LCAmbV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChtX2VjLCAiY2Fubm90IGFjY2VzcyBwYXRoIFwiJXNcIiIsIHApOworCisgIGlmICghZXhpc3Rz
KHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpu
b3RfYV9kaXJlY3RvcnksICJwYXRoIFwiJXNcIiBpcyBub3QgYSBkaXJlY3RvcnkiLAorICAgICAg
ICAgICAgICAgICAgICAgIHApOworCisgIHJldHVybiBwOworfQorCitwYXRoIF9fd2Vha2x5X2Nh
bm9uaWNhbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
cGF0aD4gZXJyKCJ3ZWFrbHlfY2Fub25pY2FsIiwgZWMsICZwKTsKKworICBpZiAocC5lbXB0eSgp
KQorICAgIHJldHVybiBfX2Nhbm9uaWNhbCgiIiwgZWMpOworCisgIHBhdGggcmVzdWx0OworICBw
YXRoIHRtcDsKKyAgdG1wLl9fcmVzZXJ2ZShwLm5hdGl2ZSgpLnNpemUoKSk7CisgIGF1dG8gUFAg
PSBQYXRoUGFyc2VyOjpDcmVhdGVFbmQocC5uYXRpdmUoKSk7CisgIC0tUFA7CisgIHZlY3Rvcjxz
dHJpbmdfdmlld190PiBETkVQYXJ0czsKKworICB3aGlsZSAoUFAuU3RhdGUgIT0gUGF0aFBhcnNl
cjo6UFNfQmVmb3JlQmVnaW4pIHsKKyAgICB0bXAuYXNzaWduKGNyZWF0ZVZpZXcocC5uYXRpdmUo
KS5kYXRhKCksICZQUC5SYXdFbnRyeS5iYWNrKCkpKTsKKyAgICBlcnJvcl9jb2RlIG1fZWM7Cisg
ICAgZmlsZV9zdGF0dXMgc3QgPSBfX3N0YXR1cyh0bXAsICZtX2VjKTsKKyAgICBpZiAoIXN0YXR1
c19rbm93bihzdCkpIHsKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIH0gZWxz
ZSBpZiAoZXhpc3RzKHN0KSkgeworICAgICAgcmVzdWx0ID0gX19jYW5vbmljYWwodG1wLCBlYyk7
CisgICAgICBicmVhazsKKyAgICB9CisgICAgRE5FUGFydHMucHVzaF9iYWNrKCpQUCk7CisgICAg
LS1QUDsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfQmVmb3JlQmVnaW4p
CisgICAgcmVzdWx0ID0gX19jYW5vbmljYWwoIiIsIGVjKTsKKyAgaWYgKGVjKQorICAgIGVjLT5j
bGVhcigpOworICBpZiAoRE5FUGFydHMuZW1wdHkoKSkKKyAgICByZXR1cm4gcmVzdWx0OworICBm
b3IgKGF1dG8gSXQgPSBETkVQYXJ0cy5yYmVnaW4oKTsgSXQgIT0gRE5FUGFydHMucmVuZCgpOyAr
K0l0KQorICAgIHJlc3VsdCAvPSAqSXQ7CisgIHJldHVybiByZXN1bHQubGV4aWNhbGx5X25vcm1h
bCgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoIGRlZmluaXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0
ZXhwciBwYXRoOjp2YWx1ZV90eXBlIHBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3I7CisKK3BhdGgm
IHBhdGg6OnJlcGxhY2VfZXh0ZW5zaW9uKHBhdGggY29uc3QmIHJlcGxhY2VtZW50KSB7CisgIHBh
dGggcCA9IGV4dGVuc2lvbigpOworICBpZiAobm90IHAuZW1wdHkoKSkgeworICAgIF9fcG5fLmVy
YXNlKF9fcG5fLnNpemUoKSAtIHAubmF0aXZlKCkuc2l6ZSgpKTsKKyAgfQorICBpZiAoIXJlcGxh
Y2VtZW50LmVtcHR5KCkpIHsKKyAgICBpZiAocmVwbGFjZW1lbnQubmF0aXZlKClbMF0gIT0gJy4n
KSB7CisgICAgICBfX3BuXyArPSAiLiI7CisgICAgfQorICAgIF9fcG5fLmFwcGVuZChyZXBsYWNl
bWVudC5fX3BuXyk7CisgIH0KKyAgcmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLyBwYXRoLmRlY29tcG9zZQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9u
YW1lKCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8p
OworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkKKyAgICByZXR1
cm4gKlBQOworICByZXR1cm4ge307Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yb290X2Rp
cmVjdG9yeSgpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9f
cG5fKTsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpCisgICAg
KytQUDsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikKKyAgICBy
ZXR1cm4gKlBQOworICByZXR1cm4ge307Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yb290
X3BhdGhfcmF3KCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4o
X19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkgewor
ICAgIGF1dG8gTmV4dENoID0gUFAucGVlaygpOworICAgIGlmIChOZXh0Q2ggJiYgKk5leHRDaCA9
PSAnLycpIHsKKyAgICAgICsrUFA7CisgICAgICByZXR1cm4gY3JlYXRlVmlldyhfX3BuXy5kYXRh
KCksICZQUC5SYXdFbnRyeS5iYWNrKCkpOworICAgIH0KKyAgICByZXR1cm4gUFAuUmF3RW50cnk7
CisgIH0KKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikKKyAgICBy
ZXR1cm4gKlBQOworICByZXR1cm4ge307Cit9CisKK3N0YXRpYyBib29sIENvbnN1bWVSb290RGly
KFBhdGhQYXJzZXIqIFBQKSB7CisgIHdoaWxlIChQUC0+U3RhdGUgPD0gUGF0aFBhcnNlcjo6UFNf
SW5Sb290RGlyKQorICAgICsrKCpQUCk7CisgIHJldHVybiBQUC0+U3RhdGUgPT0gUGF0aFBhcnNl
cjo6UFNfQXRFbmQ7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yZWxhdGl2ZV9wYXRoKCkg
Y29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBp
ZiAoQ29uc3VtZVJvb3REaXIoJlBQKSkKKyAgICByZXR1cm4ge307CisgIHJldHVybiBjcmVhdGVW
aWV3KFBQLlJhd0VudHJ5LmRhdGEoKSwgJl9fcG5fLmJhY2soKSk7Cit9CisKK3N0cmluZ192aWV3
X3QgcGF0aDo6X19wYXJlbnRfcGF0aCgpIGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0
dXJuIHt9OworICAvLyBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJvb3QgcGF0aCBidXQgbm90IGEg
cmVsYXRpdmUgcGF0aC4gSW4gdGhhdCBjYXNlCisgIC8vIHJldHVybiAqdGhpcy4KKyAgeworICAg
IGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1
bWVSb290RGlyKCZQUCkpCisgICAgICByZXR1cm4gX19wbl87CisgIH0KKyAgLy8gT3RoZXJ3aXNl
IHJlbW92ZSBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcGF0aCwgYW5kIHJl
dHVybgorICAvLyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhhdCBwYXRoCisgIHsKKyAgICBhdXRv
IFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlRW5kKF9fcG5fKTsKKyAgICAtLVBQOworICAgIGlmIChQ
UC5SYXdFbnRyeS5kYXRhKCkgPT0gX19wbl8uZGF0YSgpKQorICAgICAgcmV0dXJuIHt9OworICAg
IC0tUFA7CisgICAgcmV0dXJuIGNyZWF0ZVZpZXcoX19wbl8uZGF0YSgpLCAmUFAuUmF3RW50cnku
YmFjaygpKTsKKyAgfQorfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fZmlsZW5hbWUoKSBjb25z
dCB7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiB7fTsKKyAgeworICAgIFBhdGhQYXJzZXIg
UFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1bWVSb290
RGlyKCZQUCkpCisgICAgICByZXR1cm4ge307CisgIH0KKyAgcmV0dXJuICooLS1QYXRoUGFyc2Vy
OjpDcmVhdGVFbmQoX19wbl8pKTsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3N0ZW0oKSBj
b25zdCB7CisgIHJldHVybiBwYXJzZXI6OnNlcGFyYXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSku
Zmlyc3Q7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19leHRlbnNpb24oKSBjb25zdCB7Cisg
IHJldHVybiBwYXJzZXI6OnNlcGFyYXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSkuc2Vjb25kOwor
fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmdlbgorCitlbnVtIFBhdGhQYXJ0S2lu
ZCA6IHVuc2lnbmVkIGNoYXIgeworICBQS19Ob25lLAorICBQS19Sb290U2VwLAorICBQS19GaWxl
bmFtZSwKKyAgUEtfRG90LAorICBQS19Eb3REb3QsCisgIFBLX1RyYWlsaW5nU2VwCit9OworCitz
dGF0aWMgUGF0aFBhcnRLaW5kIENsYXNzaWZ5UGF0aFBhcnQoc3RyaW5nX3ZpZXdfdCBQYXJ0KSB7
CisgIGlmIChQYXJ0LmVtcHR5KCkpCisgICAgcmV0dXJuIFBLX1RyYWlsaW5nU2VwOworICBpZiAo
UGFydCA9PSAiLiIpCisgICAgcmV0dXJuIFBLX0RvdDsKKyAgaWYgKFBhcnQgPT0gIi4uIikKKyAg
ICByZXR1cm4gUEtfRG90RG90OworICBpZiAoUGFydCA9PSAiLyIpCisgICAgcmV0dXJuIFBLX1Jv
b3RTZXA7CisgIHJldHVybiBQS19GaWxlbmFtZTsKK30KKworcGF0aCBwYXRoOjpsZXhpY2FsbHlf
bm9ybWFsKCkgY29uc3QgeworICBpZiAoX19wbl8uZW1wdHkoKSkKKyAgICByZXR1cm4gKnRoaXM7
CisKKyAgdXNpbmcgUGFydEtpbmRQYWlyID0gcGFpcjxzdHJpbmdfdmlld190LCBQYXRoUGFydEtp
bmQ+OworICB2ZWN0b3I8UGFydEtpbmRQYWlyPiBQYXJ0czsKKyAgLy8gR3Vlc3MgYXMgdG8gaG93
IG1hbnkgZWxlbWVudHMgdGhlIHBhdGggaGFzIHRvIGF2b2lkIHJlYWxsb2NhdGluZy4KKyAgUGFy
dHMucmVzZXJ2ZSgzMik7CisKKyAgLy8gVHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHBhcnRz
IGFzIHdlIGNvbGxlY3QgdGhlbS4gVGhpcyBhbGxvd3MgdGhlCisgIC8vIHJlc3VsdGluZyBwYXRo
IHRvIHJlc2VydmUgdGhlIGNvcnJlY3QgYW1vdW50IG9mIG1lbW9yeS4KKyAgc2l6ZV90IE5ld1Bh
dGhTaXplID0gMDsKKyAgYXV0byBBZGRQYXJ0ID0gWyZdKFBhdGhQYXJ0S2luZCBLLCBzdHJpbmdf
dmlld190IFApIHsKKyAgICBOZXdQYXRoU2l6ZSArPSBQLnNpemUoKTsKKyAgICBQYXJ0cy5lbXBs
YWNlX2JhY2soUCwgSyk7CisgIH07CisgIGF1dG8gTGFzdFBhcnRLaW5kID0gWyZdKCkgeworICAg
IGlmIChQYXJ0cy5lbXB0eSgpKQorICAgICAgcmV0dXJuIFBLX05vbmU7CisgICAgcmV0dXJuIFBh
cnRzLmJhY2soKS5zZWNvbmQ7CisgIH07CisKKyAgYm9vbCBNYXliZU5lZWRUcmFpbGluZ1NlcCA9
IGZhbHNlOworICAvLyBCdWlsZCBhIHN0YWNrIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyBlbGVt
ZW50cyBvZiB0aGUgcGF0aCwgcG9wcGluZyBvZmYKKyAgLy8gZWxlbWVudHMgd2hpY2ggb2NjdXIg
YmVmb3JlIGEgJy4uJyBlbnRyeS4KKyAgZm9yIChhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRl
QmVnaW4oX19wbl8pOyBQUDsgKytQUCkgeworICAgIGF1dG8gUGFydCA9ICpQUDsKKyAgICBQYXRo
UGFydEtpbmQgS2luZCA9IENsYXNzaWZ5UGF0aFBhcnQoUGFydCk7CisgICAgc3dpdGNoIChLaW5k
KSB7CisgICAgY2FzZSBQS19GaWxlbmFtZToKKyAgICBjYXNlIFBLX1Jvb3RTZXA6IHsKKyAgICAg
IC8vIEFkZCBhbGwgbm9uLWRvdCBhbmQgbm9uLWRvdC1kb3QgZWxlbWVudHMgdG8gdGhlIHN0YWNr
IG9mIGVsZW1lbnRzLgorICAgICAgQWRkUGFydChLaW5kLCBQYXJ0KTsKKyAgICAgIE1heWJlTmVl
ZFRyYWlsaW5nU2VwID0gZmFsc2U7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQS19E
b3REb3Q6IHsKKyAgICAgIC8vIE9ubHkgcHVzaCBhICIuLiIgZWxlbWVudCBpZiB0aGVyZSBhcmUg
bm8gZWxlbWVudHMgcHJlY2VkaW5nIHRoZSAiLi4iLAorICAgICAgLy8gb3IgaWYgdGhlIHByZWNl
ZGluZyBlbGVtZW50IGlzIGl0c2VsZiAiLi4iLgorICAgICAgYXV0byBMYXN0S2luZCA9IExhc3RQ
YXJ0S2luZCgpOworICAgICAgaWYgKExhc3RLaW5kID09IFBLX0ZpbGVuYW1lKSB7CisgICAgICAg
IE5ld1BhdGhTaXplIC09IFBhcnRzLmJhY2soKS5maXJzdC5zaXplKCk7CisgICAgICAgIFBhcnRz
LnBvcF9iYWNrKCk7CisgICAgICB9IGVsc2UgaWYgKExhc3RLaW5kICE9IFBLX1Jvb3RTZXApCisg
ICAgICAgIEFkZFBhcnQoUEtfRG90RG90LCAiLi4iKTsKKyAgICAgIE1heWJlTmVlZFRyYWlsaW5n
U2VwID0gTGFzdEtpbmQgPT0gUEtfRmlsZW5hbWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBQS19Eb3Q6CisgICAgY2FzZSBQS19UcmFpbGluZ1NlcDogeworICAgICAgTWF5YmVOZWVk
VHJhaWxpbmdTZXAgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEtfTm9u
ZToKKyAgICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKyAgLy8gW2ZzLnBh
dGguZ2VuZXJpY11wNi44OiBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgYWRkIGEgZG90LgorICBpZiAo
UGFydHMuZW1wdHkoKSkKKyAgICByZXR1cm4gIi4iOworCisgIC8vIFtmcy5wYXRoLmdlbmVyaWNd
cDYuNzogSWYgdGhlIGxhc3QgZmlsZW5hbWUgaXMgZG90LWRvdCwgcmVtb3ZlIGFueQorICAvLyB0
cmFpbGluZyBkaXJlY3Rvcnktc2VwYXJhdG9yLgorICBib29sIE5lZWRUcmFpbGluZ1NlcCA9IE1h
eWJlTmVlZFRyYWlsaW5nU2VwICYmIExhc3RQYXJ0S2luZCgpID09IFBLX0ZpbGVuYW1lOworCisg
IHBhdGggUmVzdWx0OworICBSZXN1bHQuX19wbl8ucmVzZXJ2ZShQYXJ0cy5zaXplKCkgKyBOZXdQ
YXRoU2l6ZSArIE5lZWRUcmFpbGluZ1NlcCk7CisgIGZvciAoYXV0byYgUEsgOiBQYXJ0cykKKyAg
ICBSZXN1bHQgLz0gUEsuZmlyc3Q7CisKKyAgaWYgKE5lZWRUcmFpbGluZ1NlcCkKKyAgICBSZXN1
bHQgLz0gIiI7CisKKyAgcmV0dXJuIFJlc3VsdDsKK30KKworc3RhdGljIGludCBEZXRlcm1pbmVM
ZXhpY2FsRWxlbWVudENvdW50KFBhdGhQYXJzZXIgUFApIHsKKyAgaW50IENvdW50ID0gMDsKKyAg
Zm9yICg7IFBQOyArK1BQKSB7CisgICAgYXV0byBFbGVtID0gKlBQOworICAgIGlmIChFbGVtID09
ICIuLiIpCisgICAgICAtLUNvdW50OworICAgIGVsc2UgaWYgKEVsZW0gIT0gIi4iKQorICAgICAg
KytDb3VudDsKKyAgfQorICByZXR1cm4gQ291bnQ7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5
X3JlbGF0aXZlKGNvbnN0IHBhdGgmIGJhc2UpIGNvbnN0IHsKKyAgeyAvLyBwZXJmb3JtIHJvb3Qt
bmFtZS9yb290LWRpcmVjdG9yeSBtaXNtYXRjaCBjaGVja3MKKyAgICBhdXRvIFBQID0gUGF0aFBh
cnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGF1dG8gUFBCYXNlID0gUGF0aFBhcnNlcjo6
Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7CisgICAgYXV0byBDaGVja0l0ZXJNaXNtYXRjaEF0QmFz
ZSA9IFsmXSgpIHsKKyAgICAgIHJldHVybiBQUC5TdGF0ZSAhPSBQUEJhc2UuU3RhdGUgJiYKKyAg
ICAgICAgICAgICAoUFAuaW5Sb290UGF0aCgpIHx8IFBQQmFzZS5pblJvb3RQYXRoKCkpOworICAg
IH07CisgICAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUgJiYKKyAg
ICAgICAgUFBCYXNlLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpIHsKKyAgICAg
IGlmICgqUFAgIT0gKlBQQmFzZSkKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH0gZWxzZSBpZiAo
Q2hlY2tJdGVyTWlzbWF0Y2hBdEJhc2UoKSkKKyAgICAgIHJldHVybiB7fTsKKworICAgIGlmIChQ
UC5pblJvb3RQYXRoKCkpCisgICAgICArK1BQOworICAgIGlmIChQUEJhc2UuaW5Sb290UGF0aCgp
KQorICAgICAgKytQUEJhc2U7CisgICAgaWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNlKCkpCisg
ICAgICByZXR1cm4ge307CisgIH0KKworICAvLyBGaW5kIHRoZSBmaXJzdCBtaXNtYXRjaGluZyBl
bGVtZW50CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGF1
dG8gUFBCYXNlID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7CisgIHdoaWxl
IChQUCAmJiBQUEJhc2UgJiYgUFAuU3RhdGUgPT0gUFBCYXNlLlN0YXRlICYmICpQUCA9PSAqUFBC
YXNlKSB7CisgICAgKytQUDsKKyAgICArK1BQQmFzZTsKKyAgfQorCisgIC8vIElmIHRoZXJlIGlz
IG5vIG1pc21hdGNoLCByZXR1cm4gIi4iLgorICBpZiAoIVBQICYmICFQUEJhc2UpCisgICAgcmV0
dXJuICIuIjsKKworICAvLyBPdGhlcndpc2UsIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzLCAnbicsIHdoaWNoIGFyZSBub3QgZG90IG9yCisgIC8vIGRvdC1kb3QgbWludXMgdGhlIG51
bWJlciBvZiBkb3QtZG90IGVsZW1lbnRzLgorICBpbnQgRWxlbUNvdW50ID0gRGV0ZXJtaW5lTGV4
aWNhbEVsZW1lbnRDb3VudChQUEJhc2UpOworICBpZiAoRWxlbUNvdW50IDwgMCkKKyAgICByZXR1
cm4ge307CisKKyAgLy8gcmV0dXJuIGEgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoICduJyBkb3QtZG90
IGVsZW1lbnRzLCBmb2xsb3dlZCBieSB0aGUgdGhlCisgIC8vIGVsZW1lbnRzIG9mICcqdGhpcycg
YWZ0ZXIgdGhlIG1pc21hdGNoLgorICBwYXRoIFJlc3VsdDsKKyAgLy8gRklYTUU6IFJlc2VydmUg
ZW5vdWdoIHJvb20gaW4gUmVzdWx0IHRoYXQgaXQgd29uJ3QgaGF2ZSB0byByZS1hbGxvY2F0ZS4K
KyAgd2hpbGUgKEVsZW1Db3VudC0tKQorICAgIFJlc3VsdCAvPSAiLi4iOworICBmb3IgKDsgUFA7
ICsrUFApCisgICAgUmVzdWx0IC89ICpQUDsKKyAgcmV0dXJuIFJlc3VsdDsKK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8gcGF0aC5jb21wYXJpc29ucworaW50IHBhdGg6Ol9fY29tcGFyZShz
dHJpbmdfdmlld190IF9fcykgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRl
QmVnaW4oX19wbl8pOworICBhdXRvIFBQMiA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcyk7
CisgIHdoaWxlIChQUCAmJiBQUDIpIHsKKyAgICBpbnQgcmVzID0gKCpQUCkuY29tcGFyZSgqUFAy
KTsKKyAgICBpZiAocmVzICE9IDApCisgICAgICByZXR1cm4gcmVzOworICAgICsrUFA7CisgICAg
KytQUDI7CisgIH0KKyAgaWYgKFBQLlN0YXRlID09IFBQMi5TdGF0ZSAmJiAhUFApCisgICAgcmV0
dXJuIDA7CisgIGlmICghUFApCisgICAgcmV0dXJuIC0xOworICByZXR1cm4gMTsKK30KKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5ub25tZW1iZXJzCitzaXplX3QgaGFzaF92YWx1ZShj
b25zdCBwYXRoJiBfX3ApIG5vZXhjZXB0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0
ZUJlZ2luKF9fcC5uYXRpdmUoKSk7CisgIHNpemVfdCBoYXNoX3ZhbHVlID0gMDsKKyAgaGFzaDxz
dHJpbmdfdmlld190PiBoYXNoZXI7CisgIHdoaWxlIChQUCkgeworICAgIGhhc2hfdmFsdWUgPSBf
X2hhc2hfY29tYmluZShoYXNoX3ZhbHVlLCBoYXNoZXIoKlBQKSk7CisgICAgKytQUDsKKyAgfQor
ICByZXR1cm4gaGFzaF92YWx1ZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5p
dHIKK3BhdGg6Oml0ZXJhdG9yIHBhdGg6OmJlZ2luKCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0
aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpdGVyYXRvciBpdDsKKyAgaXQuX19wYXRo
X3B0cl8gPSB0aGlzOworICBpdC5fX3N0YXRlXyA9IHN0YXRpY19jYXN0PHBhdGg6Oml0ZXJhdG9y
OjpfUGFyc2VyU3RhdGU+KFBQLlN0YXRlKTsKKyAgaXQuX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsK
KyAgaXQuX19zdGFzaGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuIGl0Owor
fQorCitwYXRoOjppdGVyYXRvciBwYXRoOjplbmQoKSBjb25zdCB7CisgIGl0ZXJhdG9yIGl0e307
CisgIGl0Ll9fc3RhdGVfID0gcGF0aDo6aXRlcmF0b3I6Ol9BdEVuZDsKKyAgaXQuX19wYXRoX3B0
cl8gPSB0aGlzOworICByZXR1cm4gaXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVy
YXRvcjo6X19pbmNyZW1lbnQoKSB7CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0cl8tPm5hdGl2
ZSgpLCBfX2VudHJ5XywgX19zdGF0ZV8pOworICArK1BQOworICBfX3N0YXRlXyA9IHN0YXRpY19j
YXN0PF9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJhd0VudHJ5Owor
ICBfX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFApOworICByZXR1cm4gKnRoaXM7Cit9
CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVyYXRvcjo6X19kZWNyZW1lbnQoKSB7CisgIFBh
dGhQYXJzZXIgUFAoX19wYXRoX3B0cl8tPm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0ZV8pOwor
ICAtLVBQOworICBfX3N0YXRlXyA9IHN0YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUp
OworICBfX2VudHJ5XyA9IFBQLlJhd0VudHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25f
dmlldygqUFApOworICByZXR1cm4gKnRoaXM7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGVudHJ5IGRlZmluaXRpb25z
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgX0xJQkNQUF9XSU4zMkFQSQorZXJy
b3JfY29kZSBkaXJlY3RvcnlfZW50cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsKKyAgX19k
YXRhXy5fX3Jlc2V0KCk7CisgIGVycm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBTdGF0VCBmdWxs
X3N0OworICBmaWxlX3N0YXR1cyBzdCA9IGRldGFpbDo6cG9zaXhfbHN0YXQoX19wXywgZnVsbF9z
dCwgJmZhaWx1cmVfZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICBfX2RhdGFf
Ll9fcmVzZXQoKTsKKyAgICByZXR1cm4gZmFpbHVyZV9lYzsKKyAgfQorCisgIGlmICghX1ZTVERf
RlM6OmV4aXN0cyhzdCkgfHwgIV9WU1REX0ZTOjppc19zeW1saW5rKHN0KSkgeworICAgIF9fZGF0
YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hOb25TeW1saW5rOwor
ICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9w
ZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICB9IGVsc2UgeyAvLyB3ZSBoYXZlIGEgc3ltbGlu
aworICAgIF9fZGF0YV8uX19zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgICAvLyBH
ZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rZWQgZW50aXR5LgorICAgIC8vIElnbm9y
ZSBlcnJvcnMgZnJvbSBzdGF0LCBzaW5jZSB3ZSBkb24ndCB3YW50IGVycm9ycyByZWdhcmRpbmcg
c3ltbGluaworICAgIC8vIHJlc29sdXRpb24gdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuCisg
ICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KF9f
cF8sIGZ1bGxfc3QsICZpZ25vcmVkX2VjKTsKKworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5
cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOwor
CisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4gb25seSBwYXJ0
aWFsbHkgcG9wdWxhdGUgdGhlCisgICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0dXNfa25vd24o
c3QpKSB7CisgICAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9S
ZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29kZXt9OworICAg
IH0KKyAgICAvLyBPdGhlcndpc2UsIHdlIHJlc29sdmVkIHRoZSBsaW5rLCBwb3RlbnRpYWxseSBh
cyBub3QgZXhpc3RpbmcuCisgICAgLy8gVGhhdCdzIE9LLgorICAgIF9fZGF0YV8uX19jYWNoZV90
eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAgaWYgKF9W
U1REX0ZTOjppc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIF9fZGF0YV8uX19zaXplXyA9IHN0YXRp
Y19jYXN0PHVpbnRtYXhfdD4oZnVsbF9zdC5zdF9zaXplKTsKKworICBpZiAoX1ZTVERfRlM6OmV4
aXN0cyhzdCkpIHsKKyAgICBfX2RhdGFfLl9fbmxpbmtfID0gc3RhdGljX2Nhc3Q8dWludG1heF90
PihmdWxsX3N0LnN0X25saW5rKTsKKworICAgIC8vIEF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgbXRp
bWUsIGFuZCBmYWlsIGlmIGl0J3Mgbm90IHJlcHJlc2VudGFibGUgdXNpbmcKKyAgICAvLyBmaWxl
X3RpbWVfdHlwZS4gRm9yIG5vdyB3ZSBpZ25vcmUgdGhlIGVycm9yLCBhcyB3ZSdsbCByZXBvcnQg
aXQgd2hlbgorICAgIC8vIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSB1c2VkLgorICAgIGVycm9yX2Nv
ZGUgaWdub3JlZF9lYzsKKyAgICBfX2RhdGFfLl9fd3JpdGVfdGltZV8gPQorICAgICAgICBfX2V4
dHJhY3RfbGFzdF93cml0ZV90aW1lKF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVkX2VjKTsKKyAgfQor
CisgIHJldHVybiBmYWlsdXJlX2VjOworfQorI2Vsc2UKK2Vycm9yX2NvZGUgZGlyZWN0b3J5X2Vu
dHJ5OjpfX2RvX3JlZnJlc2goKSBub2V4Y2VwdCB7CisgIF9fZGF0YV8uX19yZXNldCgpOworICBl
cnJvcl9jb2RlIGZhaWx1cmVfZWM7CisKKyAgZmlsZV9zdGF0dXMgc3QgPSBfVlNURF9GUzo6c3lt
bGlua19zdGF0dXMoX19wXywgZmFpbHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkg
eworICAgIF9fZGF0YV8uX19yZXNldCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOworICB9CisK
KyAgaWYgKCFfVlNURF9GUzo6ZXhpc3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxpbmsoc3Qp
KSB7CisgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVz
aE5vblN5bWxpbms7CisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0
YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7IC8vIHdl
IGhhdmUgYSBzeW1saW5rCisgICAgX19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9u
cygpOworICAgIC8vIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBlbnRpdHku
CisgICAgLy8gSWdub3JlIGVycm9ycyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdhbnQgZXJy
b3JzIHJlZ2FyZGluZyBzeW1saW5rCisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBvcnRlZCB0
byB0aGUgdXNlci4KKyAgICBlcnJvcl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBfVlNURF9G
Uzo6c3RhdHVzKF9fcF8sIGlnbm9yZWRfZWMpOworCisgICAgX19kYXRhXy5fX3R5cGVfID0gc3Qu
dHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7
CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbGluaywgdGhlbiBvbmx5IHBh
cnRpYWxseSBwb3B1bGF0ZSB0aGUKKyAgICAvLyBjYWNoZS4KKyAgICBpZiAoIXN0YXR1c19rbm93
bihzdCkpIHsKKyAgICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6
X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDsKKyAgICAgIHJldHVybiBlcnJvcl9jb2Rle307Cisg
ICAgfQorICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJl
c2hTeW1saW5rOworICB9CisKKyAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiwg
YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvbmx5IGEgcGxhY2Vob2xkZXIuCisgIC8vIFdlIG5lZWQg
dG8gY2FjaGUgbGFzdF93cml0ZV90aW1lLCBmaWxlX3NpemUsIGFuZCBoYXJkX2xpbmtfY291bnQg
aGVyZSBiZWZvcmUKKyAgLy8gdGhlIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHdvcmtzLgorCisg
IHJldHVybiBmYWlsdXJlX2VjOworfQorI2VuZGlmCisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9G
SUxFU1lTVEVNCisKKy8qIC0tIEVORCBmaWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIC0tICovCisK
KyNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxNTAwCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0uaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNzAzIEBACisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaWxlc3lz
dGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAg
ICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlz
IGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBv
ZiBJbGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLlRYVCBmb3Ig
ZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWYgX19oYXNfaW5jbHVk
ZSg8ZmlsZXN5c3RlbT4pCisjaW5jbHVkZSA8ZmlsZXN5c3RlbT4KKyNlbHNlCisKKy8qIEltcG9y
dHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBmcm9tIHIzNDM4Mzggb2YgdGhlIGxpYmMrKyBwcm9q
ZWN0LiBUaGlzCisgICBpcyBvbmx5IG5lZWRlZCB1bnRpbCBtYWNPUyAxMC4xNCBpcyBubyBsb25n
ZXIgc3VwcG9ydGVkIGF0IHdoaWNoIHBvaW50IGFsbAorICAgcG9ydHMgd2lsbCBzdXBwb3J0IDxm
aWxlc3lzdGVtPiBkaXJlY3RseS4KKyovCisKKworI2lmbmRlZiBfTElCQ1BQX0ZJTEVTWVNURU0K
KyNkZWZpbmUgX0xJQkNQUF9GSUxFU1lTVEVNCisvKgorICAgIGZpbGVzeXN0ZW0gc3lub3BzaXMK
KworICAgIG5hbWVzcGFjZSBzdGQgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7CisKKyAgICBjbGFz
cyBwYXRoOworCisgICAgdm9pZCBzd2FwKHBhdGgmIGxocywgcGF0aCYgcmhzKSBub2V4Y2VwdDsK
KyAgICBzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdDsKKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBu
b2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRo
JiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBsaHMsIGNv
bnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IHBhdGgm
IGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworCisgICAgcGF0aCBvcGVy
YXRvci8gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKTsKKworICAgIC8vIGZzLnBh
dGguaW8gb3BlcmF0b3JzIGFyZSBmcmllbmRzIG9mIHBhdGguCisgICAgdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHM+CisgICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhclQsIHRy
YWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXJULCB0cmFpdHM+JiBvcywg
Y29uc3QgcGF0aCYgcCk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cz4KKyAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYKKyAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4mIGlzLCBwYXRoJiBwKTsKKworICAgIHRl
bXBsYXRlIDxjbGFzcyBTb3VyY2U+CisgICAgICBwYXRoIHU4cGF0aChjb25zdCBTb3VyY2UmIHNv
dXJjZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CisgICAgICBwYXRoIHU4
cGF0aChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOworCisgICAgY2xh
c3MgZmlsZXN5c3RlbV9lcnJvcjsKKyAgICBjbGFzcyBkaXJlY3RvcnlfZW50cnk7CisKKyAgICBj
bGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAvLyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJh
dG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgZGlyZWN0b3J5X2l0ZXJhdG9yIGJl
Z2luKGRpcmVjdG9yeV9pdGVyYXRvciBpdGVyKSBub2V4Y2VwdDsKKyAgICBkaXJlY3RvcnlfaXRl
cmF0b3IgZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgICAgY2xh
c3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKworICAgIC8vIGVuYWJsZSByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBiZWdpbihyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgZW5k
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdDsKKworICAgIGNs
YXNzIGZpbGVfc3RhdHVzOworCisgICAgc3RydWN0IHNwYWNlX2luZm8KKyAgICB7CisgICAgICB1
aW50bWF4X3QgY2FwYWNpdHk7CisgICAgICB1aW50bWF4X3QgZnJlZTsKKyAgICAgIHVpbnRtYXhf
dCBhdmFpbGFibGU7CisgICAgfTsKKworICAgIGVudW0gY2xhc3MgZmlsZV90eXBlOworICAgIGVu
dW0gY2xhc3MgcGVybXM7CisgICAgZW51bSBjbGFzcyBwZXJtX29wdGlvbnM7CisgICAgZW51bSBj
bGFzcyBjb3B5X29wdGlvbnM7CisgICAgZW51bSBjbGFzcyBkaXJlY3Rvcnlfb3B0aW9uczsKKwor
ICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHRyaXZpYWwtY2xvY2s+ICBmaWxlX3RpbWVf
dHlwZTsKKworICAgIC8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucworCisgICAgcGF0aCBhYnNvbHV0
ZShjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUgJmVjKTsKKworICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHApOworICAgIHBh
dGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHZvaWQg
Y29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgdm9pZCBjb3B5KGNv
bnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgdm9p
ZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0
aW9ucyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBj
b3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7
CisKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7
CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVy
cm9yX2NvZGUmIGVjKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25z
dCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbik7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29u
c3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2b2lkIGNvcHlf
c3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3lt
bGluayk7CisgICAgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGlu
aywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmll
cyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBw
YXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rv
cnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3
X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgm
IHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3Jl
YXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X2hhcmRfbGluayk7
CisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBu
ZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYg
dG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9zeW1saW5rKGNv
bnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgcGF0aCBjdXJy
ZW50X3BhdGgoKTsKKyAgICBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBlYyk7CisgICAg
dm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCk7CisgICAgdm9pZCBjdXJyZW50X3BhdGgo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBleGlz
dHMoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYg
cCk7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBw
Mik7CisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBwMiwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIGZpbGVfc2l6ZShj
b25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHVpbnRtYXhfdCAgICBoYXJkX2xpbmtf
Y291bnQoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIGhhcmRfbGlua19jb3VudChj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2Js
b2NrX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19ibG9ja19maWxl
KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGZp
bGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1
cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwKTsKKyAg
ICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNl
cHQ7CisKKyAgICBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfZW1w
dHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBp
c19maWZvKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfZmlmbyhjb25zdCBw
YXRoJiBwKTsKKyAgICBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgYm9vbCBpc19vdGhlcihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsK
KyAgICBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfb3RoZXIoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19yZWd1
bGFyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19zb2NrZXQoZmlsZV9z
dGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCk7Cisg
ICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgYm9vbCBpc19zeW1saW5rKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJv
b2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3N5bWxpbmsoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgZmlsZV90aW1lX3R5cGUg
IGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3RpbWVfdHlwZSAgbGFz
dF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKyAg
ICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdf
dGltZSk7CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1l
X3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIHAs
IHBlcm1zIHBybXMsCisgICAgICAgICAgICAgICAgICAgICBwZXJtX29wdGlvbnMgb3B0cz1wZXJt
X29wdGlvbnM6OnJlcGxhY2UpOworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwg
cGVybXMgcHJtcywgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworICAgIHZvaWQgcGVybWlzc2lv
bnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVybV9vcHRpb25zIG9wdHMsCisgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHByb3hpbWF0ZShjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgcGF0aCBwcm94aW1hdGUoY29uc3QgcGF0
aCYgcCwgY29uc3QgcGF0aCYgYmFzZSA9IGN1cnJlbnRfcGF0aCgpKTsKKyAgICBwYXRoIHByb3hp
bWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlLCBlcnJvcl9jb2RlICZlYyk7CisK
KyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIHJlYWRfc3lt
bGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHJlbGF0aXZl
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0
IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2U9Y3VycmVudF9wYXRoKCkpOworICAgIHBhdGggcmVs
YXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSwgZXJyb3JfY29kZSYgZWMpOwor
CisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCByZW1vdmUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIHJl
bW92ZV9hbGwoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIHJlbW92ZV9hbGwoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCByZW5hbWUoY29uc3QgcGF0
aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZvaWQgcmVuYW1lKGNvbnN0IHBhdGgmIGZy
b20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplKTsKKyAgICB2b2lkIHJl
c2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisKKyAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0aCYgcCk7CisgICAg
c3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2Vw
dDsKKworICAgIGZpbGVfc3RhdHVzICBzdGF0dXMoY29uc3QgcGF0aCYgcCk7CisgICAgZmlsZV9z
dGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisK
KyAgICBib29sIHN0YXR1c19rbm93bihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKworICAgIGZp
bGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1
cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCk7CisgICAgcGF0aCB0ZW1wX2RpcmVj
dG9yeV9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChw
YXRoIGNvbnN0JiBwKTsKKyAgICBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgcCwg
ZXJyb3JfY29kZSYgZWMpOworCisKK30gfSAgLy8gbmFtZXNwYWNlcyBzdGQ6OmZpbGVzeXN0ZW0K
KworKi8KKworI2luY2x1ZGUgPF9fY29uZmlnPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5j
bHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4K
KyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGlvbWFuaXA+IC8vIGZvciBxdW90ZWQKKyNp
bmNsdWRlIDxzdHJpbmdfdmlldz4KKy8qICNpbmNsdWRlIDx2ZXJzaW9uPiAqLworCisjaW5jbHVk
ZSA8X19kZWJ1Zz4KKworI2lmIF9MSUJDUFBfU1REX1ZFUiA+PSAxNworI2RlZmluZSBfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0Vf
U1REIGlubGluZSBuYW1lc3BhY2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKyNlbHNl
CisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0gXAorICBfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9TVEQgbmFtZXNwYWNlIF9fZnMgeyBuYW1lc3BhY2UgZmlsZXN5c3Rl
bSB7CisjZW5kaWYKKworI2RlZmluZSBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTSBc
CisgIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9TVEQgfSB9CisKKyNkZWZpbmUgX1ZTVERfRlMgX1ZT
VEQ6Ol9fZnM6OmZpbGVzeXN0ZW0KKworI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05PX1BSQUdN
QV9TWVNURU1fSEVBREVSKQorI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKK19M
SUJDUFBfUFVTSF9NQUNST1MKKyNpbmNsdWRlIDxfX3VuZGVmX21hY3Jvcz4KKworI2lmbmRlZiBf
TElCQ1BQX0NYWDAzX0xBTkcKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQor
CitzdHJ1Y3QgX0ZpbGVzeXN0ZW1DbG9jayB7CisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9f
SU5UMTI4KQorICB0eXBlZGVmIF9faW50MTI4X3QgcmVwOworICB0eXBlZGVmIG5hbm8gcGVyaW9k
OworI2Vsc2UKKyAgdHlwZWRlZiBsb25nIGxvbmcgcmVwOworICB0eXBlZGVmIG5hbm8gcGVyaW9k
OworI2VuZGlmCisKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgcGVyaW9kPiBkdXJh
dGlvbjsKKyAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gdGlt
ZV9wb2ludDsKKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgY29uc3Qg
Ym9vbCBpc19zdGVhZHkgPSBmYWxzZTsKKworICBfTElCQ1BQX0ZVTkNfVklTIHN0YXRpYyB0aW1l
X3BvaW50IG5vdygpIG5vZXhjZXB0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
c3RhdGljIHRpbWVfdCB0b190aW1lX3QoY29uc3QgdGltZV9wb2ludCYgX190KSBub2V4Y2VwdCB7
CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJldHVybiB0
aW1lX3QoCisgICAgICAgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxfX3NlY3M+KF9fdC50aW1lX3Np
bmNlX2Vwb2NoKCkpLmNvdW50KCkpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBzdGF0aWMgdGltZV9wb2ludCBmcm9tX3RpbWVfdCh0aW1lX3QgX190KSBub2V4Y2VwdCB7
CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJldHVybiB0
aW1lX3BvaW50KF9fc2VjcyhfX3QpKTsKKyAgfQorfTsKKwordHlwZWRlZiBjaHJvbm86OnRpbWVf
cG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gZmlsZV90aW1lX3R5cGU7CisKK3N0cnVjdCBfTElCQ1BQ
X1RZUEVfVklTIHNwYWNlX2luZm8geworICB1aW50bWF4X3QgY2FwYWNpdHk7CisgIHVpbnRtYXhf
dCBmcmVlOworICB1aW50bWF4X3QgYXZhaWxhYmxlOworfTsKKworZW51bSBjbGFzcyBfTElCQ1BQ
X0VOVU1fVklTIGZpbGVfdHlwZSA6IHNpZ25lZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisgIG5vdF9m
b3VuZCA9IC0xLAorICByZWd1bGFyID0gMSwKKyAgZGlyZWN0b3J5ID0gMiwKKyAgc3ltbGluayA9
IDMsCisgIGJsb2NrID0gNCwKKyAgY2hhcmFjdGVyID0gNSwKKyAgZmlmbyA9IDYsCisgIHNvY2tl
dCA9IDcsCisgIHVua25vd24gPSA4Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMg
cGVybXMgOiB1bnNpZ25lZCB7CisgIG5vbmUgPSAwLAorCisgIG93bmVyX3JlYWQgPSAwNDAwLAor
ICBvd25lcl93cml0ZSA9IDAyMDAsCisgIG93bmVyX2V4ZWMgPSAwMTAwLAorICBvd25lcl9hbGwg
PSAwNzAwLAorCisgIGdyb3VwX3JlYWQgPSAwNDAsCisgIGdyb3VwX3dyaXRlID0gMDIwLAorICBn
cm91cF9leGVjID0gMDEwLAorICBncm91cF9hbGwgPSAwNzAsCisKKyAgb3RoZXJzX3JlYWQgPSAw
NCwKKyAgb3RoZXJzX3dyaXRlID0gMDIsCisgIG90aGVyc19leGVjID0gMDEsCisgIG90aGVyc19h
bGwgPSAwNywKKworICBhbGwgPSAwNzc3LAorCisgIHNldF91aWQgPSAwNDAwMCwKKyAgc2V0X2dp
ZCA9IDAyMDAwLAorICBzdGlja3lfYml0ID0gMDEwMDAsCisgIG1hc2sgPSAwNzc3NywKKyAgdW5r
bm93biA9IDB4RkZGRiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBj
b25zdGV4cHIgcGVybXMgb3BlcmF0b3ImKHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0
dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3Bl
cmF0b3J8KHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBl
cm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3JeKHBlcm1zIF9MSFMs
IHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGlu
ZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3J+KHBlcm1zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PHBlcm1zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvciY9KHBlcm1zJiBfTEhT
LCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7IH0KKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcnw9KHBlcm1zJiBfTEhTLCBw
ZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7IH0KKworX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcl49KHBlcm1zJiBfTEhTLCBwZXJt
cyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7IH0KKworZW51bSBjbGFzcyBfTElC
Q1BQX0VOVU1fVklTIHBlcm1fb3B0aW9ucyA6IHVuc2lnbmVkIGNoYXIgeworICByZXBsYWNlID0g
MSwKKyAgYWRkID0gMiwKKyAgcmVtb3ZlID0gNCwKKyAgbm9mb2xsb3cgPSA4Cit9OworCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVy
YXRvciYocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihf
UkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIg
cGVybV9vcHRpb25zIG9wZXJhdG9yfChwZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRpb25zIF9S
SFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3JeKHBlcm1fb3B0aW9ucyBfTEhT
LCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25z
PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcn4o
cGVybV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4o
fnN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yJj0ocGVybV9vcHRpb25zJiBfTEhT
LCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgJiBfUkhTOworfQor
CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRv
cnw9KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9M
SFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5l
IHBlcm1fb3B0aW9ucyYgb3BlcmF0b3JePShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisKK2VudW0gY2xhc3Mg
X0xJQkNQUF9FTlVNX1ZJUyBjb3B5X29wdGlvbnMgOiB1bnNpZ25lZCBzaG9ydCB7CisgIG5vbmUg
PSAwLAorICBza2lwX2V4aXN0aW5nID0gMSwKKyAgb3ZlcndyaXRlX2V4aXN0aW5nID0gMiwKKyAg
dXBkYXRlX2V4aXN0aW5nID0gNCwKKyAgcmVjdXJzaXZlID0gOCwKKyAgY29weV9zeW1saW5rcyA9
IDE2LAorICBza2lwX3N5bWxpbmtzID0gMzIsCisgIGRpcmVjdG9yaWVzX29ubHkgPSA2NCwKKyAg
Y3JlYXRlX3N5bWxpbmtzID0gMTI4LAorICBjcmVhdGVfaGFyZF9saW5rcyA9IDI1NiwKKyAgX19p
bl9yZWN1cnNpdmVfY29weSA9IDUxMiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
K2lubGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yJihjb3B5X29wdGlvbnMgX0xI
UywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9u
cz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpICYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30K
KworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlv
bnMgb3BlcmF0b3J8KGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvcl4oY29weV9vcHRpb25zIF9M
SFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlv
bnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSBeCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRp
b25zIG9wZXJhdG9yfihjb3B5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29weV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpKTsKK30KKwor
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3Im
PShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhT
ID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBj
b3B5X29wdGlvbnMmIG9wZXJhdG9yfD0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMg
X1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvcl49KGNvcHlfb3B0aW9u
cyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JI
UzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGRpcmVjdG9yeV9vcHRpb25zIDog
dW5zaWduZWQgY2hhciB7CisgIG5vbmUgPSAwLAorICBmb2xsb3dfZGlyZWN0b3J5X3N5bWxpbmsg
PSAxLAorICBza2lwX3Blcm1pc3Npb25fZGVuaWVkID0gMgorfTsKKworX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvciYo
ZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSAm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yfChkaXJlY3Rvcnlfb3B0aW9u
cyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29w
dGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfUkhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgZGly
ZWN0b3J5X29wdGlvbnMgb3BlcmF0b3JeKGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBf
UkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBv
cGVyYXRvcn4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZGlyZWN0b3J5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYg
b3BlcmF0b3ImPShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhT
ID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBk
aXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3J8PShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhT
KSB7CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3JePShkaXJlY3Rvcnlf
b3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJl
Y3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisK
K2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgZmlsZV9zdGF0dXMgeworcHVibGljOgorICAvLyBjb25z
dHJ1Y3RvcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cygpIG5v
ZXhjZXB0IDogZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpub25lKSB7fQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IGZpbGVfc3RhdHVzKGZpbGVfdHlwZSBfX2Z0LCBwZXJt
cyBfX3BybXMgPSBwZXJtczo6dW5rbm93bikgbm9leGNlcHQKKyAgICAgIDogX19mdF8oX19mdCks
CisgICAgICAgIF9fcHJtc18oX19wcm1zKSB7fQorCisgIGZpbGVfc3RhdHVzKGNvbnN0IGZpbGVf
c3RhdHVzJikgbm9leGNlcHQgPSBkZWZhdWx0OworICBmaWxlX3N0YXR1cyhmaWxlX3N0YXR1cyYm
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB+
ZmlsZV9zdGF0dXMoKSB7fQorCisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oY29uc3QgZmlsZV9z
dGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oZmls
ZV9zdGF0dXMmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIC8vIG9ic2VydmVycworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSB0eXBlKCkgY29uc3Qgbm9leGNlcHQg
eyByZXR1cm4gX19mdF87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBlcm1z
IHBlcm1pc3Npb25zKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wcm1zXzsgfQorCisgIC8v
IG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgdHlwZShmaWxl
X3R5cGUgX19mdCkgbm9leGNlcHQgeyBfX2Z0XyA9IF9fZnQ7IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIHZvaWQgcGVybWlzc2lvbnMocGVybXMgX19wKSBub2V4Y2VwdCB7IF9f
cHJtc18gPSBfX3A7IH0KKworcHJpdmF0ZToKKyAgZmlsZV90eXBlIF9fZnRfOworICBwZXJtcyBf
X3BybXNfOworfTsKKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBkaXJlY3RvcnlfZW50cnk7CisK
K3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyIHsKKyAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKK307Cit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgor
c3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjb25zdCBfVHA+IDogcHVibGljIF9fY2FuX2NvbnZl
cnRfY2hhcjxfVHA+IHt9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8
Y2hhcj4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hh
cl90eXBlID0gY2hhcjsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hh
cjx3Y2hhcl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcg
X19jaGFyX3R5cGUgPSB3Y2hhcl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29u
dmVydF9jaGFyPGNoYXIxNl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsK
KyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMTZfdDsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0
IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyMzJfdD4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0gY2hhcjMyX3Q7Cit9OworCit0ZW1wbGF0
ZSA8Y2xhc3MgX0VDaGFyVD4KK3R5cGVuYW1lIGVuYWJsZV9pZjxfX2Nhbl9jb252ZXJ0X2NoYXI8
X0VDaGFyVD46OnZhbHVlLCBib29sPjo6dHlwZQorX19pc19zZXBhcmF0b3IoX0VDaGFyVCBfX2Up
IHsKKyAgcmV0dXJuIF9fZSA9PSBfRUNoYXJUKCcvJyk7Cit9CisKK3N0cnVjdCBfTnVsbFNlbnRp
bmFsIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgordXNpbmcgX1ZvaWQgPSB2b2lkOworCit0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9z
dHJpbmcgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmlu
ZzwKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jPiwKKyAgICBfVm9p
ZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+Cisg
ICAgOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9
IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+OworICB1c2luZyBfQmFzZSA9
IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9f
cmFuZ2VfYmVnaW4oX1N0ciBjb25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0
YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICBy
ZXR1cm4gX19zLmRhdGEoKSArIF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBf
X2ZpcnN0X29yX251bGwoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgp
ID8gX0VDaGFyVHt9IDogX19zWzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VCwgY2xhc3MgX1RyYWl0cz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZzwKKyAgICBiYXNp
Y19zdHJpbmdfdmlldzxfRUNoYXJULCBfVHJhaXRzPiwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nh
bl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBwdWJsaWMgX19j
YW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZ192
aWV3PF9FQ2hhclQsIF9UcmFpdHM+OworICB1c2luZyBfQmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hh
cjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oX1N0ciBj
b25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0
KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmRhdGEoKSAr
IF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX1N0
ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgpID8gX0VDaGFyVHt9IDogX19z
WzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgX0RTID0gdHlw
ZW5hbWUgZGVjYXk8X1NvdXJjZT46OnR5cGUsCisgICAgICAgICAgY2xhc3MgX1VucXVhbFB0clR5
cGUgPQorICAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3Q8dHlwZW5hbWUgcmVtb3Zl
X3BvaW50ZXI8X0RTPjo6dHlwZT46OnR5cGUsCisgICAgICAgICAgYm9vbCBfSXNDaGFyUHRyID0g
aXNfcG9pbnRlcjxfRFM+Ojp2YWx1ZSYmCisgICAgICAgICAgICAgIF9fY2FuX2NvbnZlcnRfY2hh
cjxfVW5xdWFsUHRyVHlwZT46OnZhbHVlPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hhcl9hcnJh
eSA6IGZhbHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyBfRUNo
YXJULCBjbGFzcyBfVVB0cj4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1NvdXJj
ZSwgX0VDaGFyVCosIF9VUHRyLCB0cnVlPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVu
YW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT4geworICB1c2luZyBfQmFzZSA9IF9fY2Fu
X2NvbnZlcnRfY2hhcjx0eXBlbmFtZSByZW1vdmVfY29uc3Q8X0VDaGFyVD46OnR5cGU+OworCisg
IHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2JlZ2luKGNvbnN0IF9FQ2hhclQqIF9fYikg
eyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChjb25z
dCBfRUNoYXJUKiBfX2IpIHsKKyAgICB1c2luZyBfSXRlciA9IGNvbnN0IF9FQ2hhclQqOworICAg
IGNvbnN0IF9FQ2hhclQgX19zZW50aW5hbCA9IF9FQ2hhclR7fTsKKyAgICBfSXRlciBfX2UgPSBf
X2I7CisgICAgZm9yICg7ICpfX2UgIT0gX19zZW50aW5hbDsgKytfX2UpCisgICAgICA7CisgICAg
cmV0dXJuIF9fZTsKKyAgfQorCisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChjb25z
dCBfRUNoYXJUKiBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBf
SXRlciwgYm9vbCBfSXNJdCA9IF9faXNfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZSwKKyAg
ICAgICAgICBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyIDogZmFsc2Vf
dHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorc3RydWN0IF9faXNfcGF0aGFibGVf
aXRlcjwKKyAgICBfSXRlciwgdHJ1ZSwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0
X2NoYXI8CisgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGU+OjpfX2NoYXJfdHlwZT4gPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU+IHsKKyAgdXNpbmcgX0VDaGFyVCA9IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU7CisgIHVzaW5nIF9CYXNl
ID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OworCisgIHN0YXRpYyBfSXRlciBfX3Jhbmdl
X2JlZ2luKF9JdGVyIF9fYikgeyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfTnVsbFNlbnRpbmFs
IF9fcmFuZ2VfZW5kKF9JdGVyKSB7IHJldHVybiBfTnVsbFNlbnRpbmFse307IH0KKworICBzdGF0
aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX0l0ZXIgX19iKSB7IHJldHVybiAqX19iOyB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9Jc1N0cmluZ1QgPSBfX2lzX3BhdGhhYmxl
X3N0cmluZzxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJJdGVyVCA9IF9faXNf
cGF0aGFibGVfY2hhcl9hcnJheTxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0l0ZXJU
ID0gIV9Jc0NoYXJJdGVyVCAmJiBfX2lzX3BhdGhhYmxlX2l0ZXI8X1RwPjo6dmFsdWU+CitzdHJ1
Y3QgX19pc19wYXRoYWJsZSA6IGZhbHNlX3R5cGUgeworICBzdGF0aWNfYXNzZXJ0KCFfSXNTdHJp
bmdUICYmICFfSXNDaGFySXRlclQgJiYgIV9Jc0l0ZXJULCAiTXVzdCBhbGwgYmUgZmFsc2UiKTsK
K307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIHRy
dWUsIGZhbHNlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX3N0cmluZzxfVHA+IHt9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwgdHJ1ZSwg
ZmFsc2U+IDogX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD4geworfTsKKwordGVtcGxhdGUg
PGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgZmFsc2UsIGZhbHNlLCB0cnVl
PiA6IF9faXNfcGF0aGFibGVfaXRlcjxfVHA+IHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VD4KK3N0cnVjdCBfUGF0aENWVCB7CisgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9jaGFy
PF9FQ2hhclQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAiQ2hhciB0eXBlIG5vdCBjb252ZXJ0
aWJsZSIpOworCisgIHR5cGVkZWYgX19uYXJyb3dfdG9fdXRmODxzaXplb2YoX0VDaGFyVCkgKiBf
X0NIQVJfQklUX18+IF9OYXJyb3dlcjsKKworICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShz
dHJpbmcmIF9fZGVzdCwgX0VDaGFyVCBjb25zdCogX19iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRUNoYXJUIGNvbnN0KiBfX2UpIHsKKyAgICBfTmFycm93ZXIoKShiYWNrX2luc2Vy
dGVyKF9fZGVzdCksIF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4K
KyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwg
X0l0ZXIgX19lKSB7CisgICAgc3RhdGljX2Fzc2VydCghaXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+
Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKKyAgICBpZiAoX19iID09IF9fZSkKKyAg
ICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXAoX19iLCBfX2UpOwor
ICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX190bXAuZGF0YSgpLAorICAg
ICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxlbmd0aCgpKTsKKyAgfQorCisgIHRl
bXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5n
JiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgeworICAgIHN0YXRpY19hc3NlcnQo
IWlzX3NhbWU8X0l0ZXIsIF9FQ2hhclQqPjo6dmFsdWUsICJDYWxsIGNvbnN0IG92ZXJsb2FkIik7
CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIGlmICgqX19i
ID09IF9fc2VudGluYWwpCisgICAgICByZXR1cm47CisgICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQ+
IF9fdG1wOworICAgIGZvciAoOyAqX19iICE9IF9fc2VudGluYWw7ICsrX19iKQorICAgICAgX190
bXAucHVzaF9iYWNrKCpfX2IpOworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0
KSwgX190bXAuZGF0YSgpLAorICAgICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxl
bmd0aCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBzdGF0aWMgdm9p
ZCBfX2FwcGVuZF9zb3VyY2Uoc3RyaW5nJiBfX2Rlc3QsIF9Tb3VyY2UgY29uc3QmIF9fcykgewor
ICAgIHVzaW5nIF9UcmFpdHMgPSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OworICAgIF9fYXBwZW5k
X3JhbmdlKF9fZGVzdCwgX1RyYWl0czo6X19yYW5nZV9iZWdpbihfX3MpLAorICAgICAgICAgICAg
ICAgICAgIF9UcmFpdHM6Ol9fcmFuZ2VfZW5kKF9fcykpOworICB9Cit9OworCit0ZW1wbGF0ZSA8
Pgorc3RydWN0IF9QYXRoQ1ZUPGNoYXI+IHsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cisg
IHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19leGFjdGx5X2lucHV0X2l0ZXJhdG9yPF9J
dGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRl
ciBfX2IsIF9JdGVyIF9fZSkgeworICAgIGZvciAoOyBfX2IgIT0gX19lOyArK19fYikKKyAgICAg
IF9fZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19mb3J3YXJkX2l0ZXJhdG9yPF9JdGVy
Pjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBf
X2IsIF9JdGVyIF9fZSkgeworICAgIF9fZGVzdC5fX2FwcGVuZF9mb3J3YXJkX3Vuc2FmZShfX2Is
IF9fZSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB2b2lkIF9f
YXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9OdWxsU2VudGluYWwpIHsK
KyAgICBjb25zdCBjaGFyIF9fc2VudGluYWwgPSBjaGFye307CisgICAgZm9yICg7ICpfX2IgIT0g
X19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX2Rlc3QucHVzaF9iYWNrKCpfX2IpOworICB9CisK
KyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3NvdXJj
ZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7CisgICAgdXNpbmcgX1RyYWl0
cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRfcmFuZ2UoX19kZXN0LCBf
VHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAgICAgICAgX1RyYWl0czo6
X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0
aCB7CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlT3JJdGVyLCBjbGFzcyBfVHAgPSBwYXRoJj4K
KyAgdXNpbmcgX0VuYWJsZUlmUGF0aGFibGUgPQorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9f
aXNfcGF0aGFibGU8X1NvdXJjZU9ySXRlcj46OnZhbHVlLCBfVHA+Ojp0eXBlOworCisgIHRlbXBs
YXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3VyY2VDaGFyID0gdHlwZW5hbWUgX19pc19wYXRo
YWJsZTxfVHA+OjpfX2NoYXJfdHlwZTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICB1c2lu
ZyBfU291cmNlQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1RwPiA+OworCitwdWJsaWM6Cisg
IHR5cGVkZWYgY2hhciB2YWx1ZV90eXBlOworICB0eXBlZGVmIGJhc2ljX3N0cmluZzx2YWx1ZV90
eXBlPiBzdHJpbmdfdHlwZTsKKyAgdHlwZWRlZiBfVlNURDo6c3RyaW5nX3ZpZXcgX19zdHJpbmdf
dmlldzsKKyAgc3RhdGljIGNvbnN0ZXhwciB2YWx1ZV90eXBlIHByZWZlcnJlZF9zZXBhcmF0b3Ig
PSAnLyc7CisKKyAgZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGZvcm1hdCA6IHVuc2lnbmVk
IGNoYXIgeworICAgIGF1dG9fZm9ybWF0LAorICAgIG5hdGl2ZV9mb3JtYXQsCisgICAgZ2VuZXJp
Y19mb3JtYXQKKyAgfTsKKworICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKCkgbm9leGNlcHQge30KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoKGNvbnN0IHBhdGgmIF9fcCkgOiBfX3BuXyhfX3AuX19wbl8pIHt9
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aChwYXRoJiYgX19wKSBub2V4Y2VwdAor
ICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3AuX19wbl8pKSB7fQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgcGF0aChzdHJpbmdfdHlwZSYmIF9fcywgZm9ybWF0ID0gZm9ybWF0
OjphdXRvX2Zvcm1hdCkgbm9leGNlcHQKKyAgICAgIDogX19wbl8oX1ZTVEQ6Om1vdmUoX19zKSkg
e30KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJs
ZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3QgX1NvdXJjZSYgX19zcmMsIGZvcm1hdCA9
IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVu
ZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QsIGZvcm1hdCA9IGZv
cm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9f
YXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICB9CisKKyAgLy8gVE9ETyBJ
bXBsZW1lbnQgbG9jYWxlIGNvbnZlcnNpb25zLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwg
Y2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3Qg
X1NvdXJjZSYgX19zcmMsIGNvbnN0IGxvY2FsZSYgX19sb2MsIGZvcm1hdCA9IGZvcm1hdDo6YXV0
b19mb3JtYXQpOworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgoX0lucHV0SXQg
X19maXJzdCwgX0lucHV0SXQgX2xhc3QsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgICAgICAgZm9y
bWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB+cGF0aCgpID0gZGVmYXVsdDsKKworICAvLyBhc3NpZ25tZW50cworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShjb25zdCBwYXRoJiBfX3ApIHsKKyAg
ICBfX3BuXyA9IF9fcC5fX3BuXzsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShwYXRoJiYgX19wKSBub2V4Y2Vw
dCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3AuX19wbl8pOworICAgIHJldHVybiAqdGhp
czsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyA9IHZvaWQ+CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCYgb3BlcmF0b3I9KHN0cmluZ190eXBlJiYgX19zKSBub2V4Y2VwdCB7Cisg
ICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgYXNzaWduKHN0cmluZ190eXBlJiYg
X19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJhdG9yPShj
b25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zcmMpOwor
ICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9T
b3VyY2U+IGFzc2lnbihjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIF9fcG5fLmNsZWFyKCk7
CisgICAgX1NvdXJjZUNWVDxfU291cmNlPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0Pgor
ICBwYXRoJiBhc3NpZ24oX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9J
dFZhbDsKKyAgICBfX3BuXy5jbGVhcigpOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5k
X3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQor
Citwcml2YXRlOgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAgc3RhdGljIGJvb2wgX19z
b3VyY2VfaXNfYWJzb2x1dGUoX0VDaGFyVCBfX2ZpcnN0X29yX251bGwpIHsKKyAgICByZXR1cm4g
X19pc19zZXBhcmF0b3IoX19maXJzdF9vcl9udWxsKTsKKyAgfQorCitwdWJsaWM6CisgIC8vIGFw
cGVuZHMKKyAgcGF0aCYgb3BlcmF0b3IvPShjb25zdCBwYXRoJiBfX3ApIHsKKyAgICBpZiAoX19w
LmlzX2Fic29sdXRlKCkpIHsKKyAgICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICBpZiAoaGFzX2ZpbGVuYW1lKCkpCisgICAgICBfX3BuXyArPSBw
cmVmZXJyZWRfc2VwYXJhdG9yOworICAgIF9fcG5fICs9IF9fcC5uYXRpdmUoKTsKKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KKworICAvLyBGSVhNRTogVXNlIF9MSUJDUFBfRElBR05PU0VfV0FSTklO
RyB0byBwcm9kdWNlIGEgZGlhZ25vc3RpYyB3aGVuIF9fc3JjCisgIC8vIGlzIGtub3duIGF0IGNv
bXBpbGUgdGltZSB0byBiZSAiLycgc2luY2UgdGhlIHVzZXIgYWxtb3N0IGNlcnRhaW5seSBpbnRl
bmRlZAorICAvLyB0byBhcHBlbmQgYSBzZXBhcmF0b3IgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0
aGUgcGF0aCB3aXRoICIvIgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPgorICBvcGVyYXRvci89
KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3NyYyk7
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8
X1NvdXJjZT4gYXBwZW5kKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgdXNpbmcgX1RyYWl0
cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgdXNpbmcgX0NWVCA9IF9QYXRoQ1ZUPF9T
b3VyY2VDaGFyPF9Tb3VyY2U+ID47CisgICAgaWYgKF9fc291cmNlX2lzX2Fic29sdXRlKF9UcmFp
dHM6Ol9fZmlyc3Rfb3JfbnVsbChfX3NyYykpKQorICAgICAgX19wbl8uY2xlYXIoKTsKKyAgICBl
bHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0
b3I7CisgICAgX0NWVDo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBhcHBl
bmQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBz
dGF0aWNfYXNzZXJ0KF9fY2FuX2NvbnZlcnRfY2hhcjxfSXRWYWw+Ojp2YWx1ZSwgIk11c3QgY29u
dmVydGlibGUiKTsKKyAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X0l0VmFsPjsKKyAgICBpZiAo
X19maXJzdCAhPSBfX2xhc3QgJiYgX19zb3VyY2VfaXNfYWJzb2x1dGUoKl9fZmlyc3QpKQorICAg
ICAgX19wbl8uY2xlYXIoKTsKKyAgICBlbHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9f
cG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX0NWVDo6X19hcHBlbmRfcmFuZ2UoX19w
bl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gY29u
Y2F0ZW5hdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9y
Kz0oY29uc3QgcGF0aCYgX194KSB7CisgICAgX19wbl8gKz0gX194Ll9fcG5fOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3Bl
cmF0b3IrPShjb25zdCBzdHJpbmdfdHlwZSYgX194KSB7CisgICAgX19wbl8gKz0gX194OworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0
aCYgb3BlcmF0b3IrPShfX3N0cmluZ192aWV3IF9feCkgeworICAgIF9fcG5fICs9IF9feDsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBh
dGgmIG9wZXJhdG9yKz0oY29uc3QgdmFsdWVfdHlwZSogX194KSB7CisgICAgX19wbl8gKz0gX194
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcGF0aCYgb3BlcmF0b3IrPSh2YWx1ZV90eXBlIF9feCkgeworICAgIF9fcG5fICs9IF9feDsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAg
dHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6dmFsdWUsIHBh
dGgmPjo6dHlwZQorICBvcGVyYXRvcis9KF9FQ2hhclQgX194KSB7CisgICAgYmFzaWNfc3RyaW5n
PF9FQ2hhclQ+IF9fdG1wOworICAgIF9fdG1wICs9IF9feDsKKyAgICBfUGF0aENWVDxfRUNoYXJU
Pjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3RtcCk7CisgICAgcmV0dXJuICp0aGlzOworICB9
CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3Vy
Y2U+IG9wZXJhdG9yKz0oY29uc3QgX1NvdXJjZSYgX194KSB7CisgICAgcmV0dXJuIHRoaXMtPmNv
bmNhdChfX3gpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJ
ZlBhdGhhYmxlPF9Tb3VyY2U+IGNvbmNhdChjb25zdCBfU291cmNlJiBfX3gpIHsKKyAgICBfU291
cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9feCk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBjb25j
YXQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBf
UGF0aENWVDxfSXRWYWw+OjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBtb2RpZmllcnMKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIGNsZWFyKCkgbm9leGNlcHQgeyBfX3BuXy5jbGVhcigpOyB9
CisKKyAgcGF0aCYgbWFrZV9wcmVmZXJyZWQoKSB7IHJldHVybiAqdGhpczsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgcmVtb3ZlX2ZpbGVuYW1lKCkgeworICAgIGF1
dG8gX19mbmFtZSA9IF9fZmlsZW5hbWUoKTsKKyAgICBpZiAoIV9fZm5hbWUuZW1wdHkoKSkKKyAg
ICAgIF9fcG5fLmVyYXNlKF9fZm5hbWUuZGF0YSgpIC0gX19wbl8uZGF0YSgpKTsKKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2ZpbGVuYW1lKGNvbnN0IHBhdGgmIF9f
cmVwbGFjZW1lbnQpIHsKKyAgICByZW1vdmVfZmlsZW5hbWUoKTsKKyAgICByZXR1cm4gKCp0aGlz
IC89IF9fcmVwbGFjZW1lbnQpOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9leHRlbnNpb24oY29u
c3QgcGF0aCYgX19yZXBsYWNlbWVudCA9IHBhdGgoKSk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB2b2lkIHN3YXAocGF0aCYgX19yaHMpIG5vZXhjZXB0IHsgX19wbl8uc3dhcChf
X3Jocy5fX3BuXyk7IH0KKworICAvLyBwcml2YXRlIGhlbHBlciB0byBhbGxvdyByZXNlcnZpbmcg
bWVtb3J5IGluIHRoZSBwYXRoCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBf
X3Jlc2VydmUoc2l6ZV90IF9fcykgeyBfX3BuXy5yZXNlcnZlKF9fcyk7IH0KKworICAvLyBuYXRp
dmUgZm9ybWF0IG9ic2VydmVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0
IHN0cmluZ190eXBlJiBuYXRpdmUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXzsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgdmFsdWVfdHlwZSogY19zdHIo
KSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXy5jX3N0cigpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBvcGVyYXRvciBzdHJpbmdfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9f
cG5fOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0
b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRv
cj4KKyAgc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkgY29uc3Qg
eworICAgIHVzaW5nIF9DVlQgPSBfX3dpZGVuX2Zyb21fdXRmODxzaXplb2YoX0VDaGFyVCkgKiBf
X0NIQVJfQklUX18+OworICAgIHVzaW5nIF9TdHIgPSBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jYXRvcj47CisgICAgX1N0ciBfX3MoX19hKTsKKyAgICBfX3MucmVzZXJ2ZShf
X3BuXy5zaXplKCkpOworICAgIF9DVlQoKShiYWNrX2luc2VydGVyKF9fcyksIF9fcG5fLmRhdGEo
KSwgX19wbl8uZGF0YSgpICsgX19wbl8uc2l6ZSgpKTsKKyAgICByZXR1cm4gX19zOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnN0cmluZyBzdHJpbmcoKSBjb25zdCB7
IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6d3N0cmlu
ZyB3c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8d2NoYXJfdD4oKTsKKyAgfQor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHU4c3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gX19wbl87IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnUxNnN0
cmluZyB1MTZzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxjaGFyMTZfdD4oKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTMyc3RyaW5nIHUzMnN0cmlu
ZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOworICB9CisKKyAgLy8g
Z2VuZXJpYyBmb3JtYXQgb2JzZXJ2ZXJzCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFz
cyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0VDaGFyVD4sCisgICAgICAgICAgICBjbGFzcyBfQWxs
b2NhdG9yID0gYWxsb2NhdG9yPF9FQ2hhclQ+ID4KKyAgYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9U
cmFpdHMsIF9BbGxvY2F0b3I+CisgIGdlbmVyaWNfc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9f
YSA9IF9BbGxvY2F0b3IoKSkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jYXRvcj4oX19hKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGdlbmVyaWNfc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgc3RkOjp3c3RyaW5nIGdlbmVyaWNfd3N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzx3Y2hhcl90PigpOyB9CisgIHN0ZDo6c3RyaW5n
IGdlbmVyaWNfdThzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6OnUxNnN0
cmluZyBnZW5lcmljX3UxNnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzxjaGFyMTZfdD4o
KTsgfQorICBzdGQ6OnUzMnN0cmluZyBnZW5lcmljX3UzMnN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHN0cmluZzxjaGFyMzJfdD4oKTsgfQorCitwcml2YXRlOgorICBpbnQgX19jb21wYXJlKF9fc3Ry
aW5nX3ZpZXcpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcm9vdF9uYW1lKCkgY29uc3Q7Cisg
IF9fc3RyaW5nX3ZpZXcgX19yb290X2RpcmVjdG9yeSgpIGNvbnN0OworICBfX3N0cmluZ192aWV3
IF9fcm9vdF9wYXRoX3JhdygpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcmVsYXRpdmVfcGF0
aCgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcGFyZW50X3BhdGgoKSBjb25zdDsKKyAgX19z
dHJpbmdfdmlldyBfX2ZpbGVuYW1lKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19zdGVtKCkg
Y29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19leHRlbnNpb24oKSBjb25zdDsKKworcHVibGljOgor
ICAvLyBjb21wYXJlCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29u
c3QgcGF0aCYgX19wKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3Au
X19wbl8pOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29u
c3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QgeworICAgIHJldHVybiBfX2NvbXBhcmUoX19zKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJlKF9fc3RyaW5nX3Zp
ZXcgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSogX19zKSBj
b25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisKKyAgLy8gZGVjb21wb3Np
dGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9uYW1lKCkgY29uc3Qg
eworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3Jvb3RfbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoIHJvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gcm9vdF9u
YW1lKCkuYXBwZW5kKHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSkpOworICB9CisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAg
IHJldHVybiBzdHJpbmdfdHlwZShfX3JlbGF0aXZlX3BhdGgoKSk7CisgIH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIHBhcmVudF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiBz
dHJpbmdfdHlwZShfX3BhcmVudF9wYXRoKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19m
aWxlbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggc3RlbSgp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ190eXBlKF9fc3RlbSgpKTsgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGggZXh0ZW5zaW9uKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdf
dHlwZShfX2V4dGVuc2lvbigpKTsKKyAgfQorCisgIC8vIHF1ZXJ5CisgIF9MSUJDUFBfTk9ESVND
QVJEX0FGVEVSX0NYWDE3IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorICBlbXB0eSgp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wbl8uZW1wdHkoKTsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9uYW1lKCkgY29uc3QgeworICAg
IHJldHVybiAhX19yb290X25hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0dXJuICFf
X3Jvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaGFzX3Jvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcm9vdF9wYXRo
X3JhdygpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhh
c19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19yZWxhdGl2ZV9wYXRoKCku
ZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3BhcmVu
dF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19wYXJlbnRfcGF0aCgpLmVtcHR5KCk7Cisg
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19maWxlbmFtZSgpIGNvbnN0
IHsKKyAgICByZXR1cm4gIV9fZmlsZW5hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfc3RlbSgpIGNvbnN0IHsgcmV0dXJuICFfX3N0ZW0oKS5l
bXB0eSgpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfZXh0ZW5zaW9u
KCkgY29uc3QgeworICAgIHJldHVybiAhX19leHRlbnNpb24oKS5lbXB0eSgpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Fic29sdXRlKCkgY29uc3QgeworICAg
IHJldHVybiBoYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiAhaXNfYWJzb2x1dGUoKTsg
fQorCisgIC8vIHJlbGF0aXZlIHBhdGhzCisgIHBhdGggbGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0
OworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBfX2Jhc2UpIGNvbnN0Owor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBsZXhpY2FsbHlfcHJveGltYXRlKGNv
bnN0IHBhdGgmIF9fYmFzZSkgY29uc3QgeworICAgIHBhdGggX19yZXN1bHQgPSB0aGlzLT5sZXhp
Y2FsbHlfcmVsYXRpdmUoX19iYXNlKTsKKyAgICBpZiAoX19yZXN1bHQubmF0aXZlKCkuZW1wdHko
KSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICByZXR1cm4gX19yZXN1bHQ7CisgIH0KKworICAv
LyBpdGVyYXRvcnMKKyAgY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBpdGVyYXRvcjsKKyAgdHlwZWRl
ZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICBpdGVyYXRvciBiZWdpbigpIGNvbnN0Owor
ICBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZAorICAgICAgdHlw
ZW5hbWUgZW5hYmxlX2lmPGlzX3NhbWU8X0NoYXJULCBjaGFyPjo6dmFsdWUgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfc2FtZTxfVHJhaXRzLCBjaGFyX3RyYWl0czxjaGFyPiA+
Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fb3MgPDwgc3RkOjpfX3F1
b3RlZChfX3AubmF0aXZlKCkpOworICAgIHJldHVybiBfX29zOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBmcmllbmQKKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfc2FtZTxfQ2hhclQsIGNoYXI+
Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNfc2FtZTxfVHJhaXRz
LCBjaGFyX3RyYWl0czxjaGFyPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgewor
ICAgIF9fb3MgPDwgc3RkOjpfX3F1b3RlZChfX3Auc3RyaW5nPF9DaGFyVCwgX1RyYWl0cz4oKSk7
CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX2lzLCBwYXRoJiBfX3ApIHsKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzPiBfX3RtcDsKKyAgICBfX2lzID4+IF9fcXVvdGVkKF9fdG1wKTsKKyAgICBfX3AgPSBf
X3RtcDsKKyAgICByZXR1cm4gX19pczsKKyAgfQorCitwcml2YXRlOgorICBpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJgorICBfX2Fzc2lnbl92aWV3KF9fc3RyaW5nX3ZpZXcg
Y29uc3QmIF9fcykgbm9leGNlcHQgeworICAgIF9fcG5fID0gc3RyaW5nX3R5cGUoX19zKTsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKyAgc3RyaW5nX3R5cGUgX19wbl87Cit9OworCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHN3YXAocGF0aCYgX19saHMsIHBhdGgmIF9f
cmhzKSBub2V4Y2VwdCB7CisgIF9fbGhzLnN3YXAoX19yaHMpOworfQorCitfTElCQ1BQX0ZVTkNf
VklTCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhjZXB0OworCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aCYg
X19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpID09IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykg
bm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGF0aCYg
X19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDw9IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIG9wZXJhdG9yLyhjb25zdCBwYXRoJiBf
X2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhdGgmIF9fcmhzKSB7CisgIHBhdGggX19yZXN1bHQoX19saHMpOworICBfX3Jlc3VsdCAv
PSBfX3JoczsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJj
ZT4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19p
c19wYXRoYWJsZTxfU291cmNlPjo6dmFsdWUsIHBhdGg+Ojp0eXBlCisgICAgdThwYXRoKGNvbnN0
IF9Tb3VyY2UmIF9fcykgeworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgaXNfc2FtZTx0eXBlbmFt
ZSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OjpfX2NoYXJfdHlwZSwgY2hhcj46OnZhbHVlLAorICAg
ICAgInU4cGF0aChTb3VyY2UgY29uc3QmKSByZXF1aXJlcyBTb3VyY2UgaGF2ZSBhIGNoYXJhY3Rl
ciB0eXBlIG9mIHR5cGUgIgorICAgICAgIidjaGFyJyIpOworICByZXR1cm4gcGF0aChfX3MpOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0aGFibGU8X0lucHV0SXQ+Ojp2YWx1ZSwg
cGF0aD46OnR5cGUKKyAgICB1OHBhdGgoX0lucHV0SXQgX19mLCBfSW5wdXRJdCBfX2wpIHsKKyAg
c3RhdGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlwZW5hbWUgX19pc19wYXRoYWJsZTxfSW5w
dXRJdD46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCisgICAgICAidThwYXRoKEl0ZXIsIEl0
ZXIpIHJlcXVpcmVzIEl0ZXIgaGF2ZSBhIHZhbHVlX3R5cGUgb2YgdHlwZSAnY2hhciciKTsKKyAg
cmV0dXJuIHBhdGgoX19mLCBfX2wpOworfQorCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIHBhdGg6
Oml0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgZW51bSBfUGFyc2VyU3RhdGUgOiB1bnNpZ25lZCBjaGFy
IHsKKyAgICBfU2luZ3VsYXIsCisgICAgX0JlZm9yZUJlZ2luLAorICAgIF9JblJvb3ROYW1lLAor
ICAgIF9JblJvb3REaXIsCisgICAgX0luRmlsZW5hbWVzLAorICAgIF9JblRyYWlsaW5nU2VwLAor
ICAgIF9BdEVuZAorICB9OworCitwdWJsaWM6CisgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgdHlwZWRlZiBwYXRoIHZhbHVlX3R5cGU7
CisgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICB0eXBlZGVmIGNv
bnN0IHBhdGgqIHBvaW50ZXI7CisgIHR5cGVkZWYgY29uc3QgcGF0aCYgcmVmZXJlbmNlOworCisg
IHR5cGVkZWYgdm9pZAorICAgICAgX19zdGFzaGluZ19pdGVyYXRvcl90YWc7IC8vIFNlZSByZXZl
cnNlX2l0ZXJhdG9yIGFuZCBfX2lzX3N0YXNoaW5nX2l0ZXJhdG9yCisKK3B1YmxpYzoKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvcigpCisgICAgICA6IF9fc3Rhc2hlZF9l
bGVtXygpLCBfX3BhdGhfcHRyXyhudWxscHRyKSwgX19lbnRyeV8oKSwKKyAgICAgICAgX19zdGF0
ZV8oX1Npbmd1bGFyKSB7fQorCisgIGl0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0
OworICB+aXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgaXRlcmF0b3ImIG9wZXJhdG9yPShjb25z
dCBpdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfX3N0YXNoZWRfZWxlbV87IH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICZfX3N0YXNoZWRfZWxlbV87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeworICAgIF9MSUJDUFBfQVNTRVJUKF9f
c3RhdGVfICE9IF9TaW5ndWxhciwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBp
bmNyZW1lbnQgYSBzaW5ndWxhciBpdGVyYXRvciIpOworICAgIF9MSUJDUFBfQVNTRVJUKF9fc3Rh
dGVfICE9IF9BdEVuZCwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBpbmNyZW1l
bnQgdGhlIGVuZCBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2luY3JlbWVudCgpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkg
eworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMtPm9wZXJhdG9yKysoKTsKKyAg
ICByZXR1cm4gX19pdDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRl
cmF0b3ImIG9wZXJhdG9yLS0oKSB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX1Np
bmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGRlY3JlbWVudCBhIHNp
bmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9BU1NFUlQoX19lbnRyeV8uZGF0YSgpICE9
IF9fcGF0aF9wdHJfLT5uYXRpdmUoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgImF0dGVt
cHRpbmcgdG8gZGVjcmVtZW50IHRoZSBiZWdpbiBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2Rl
Y3JlbWVudCgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRv
ciBvcGVyYXRvci0tKGludCkgeworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMt
Pm9wZXJhdG9yLS0oKTsKKyAgICByZXR1cm4gX19pdDsKKyAgfQorCitwcml2YXRlOgorICBmcmll
bmQgY2xhc3MgcGF0aDsKKworICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciYpOwor
CisgIGl0ZXJhdG9yJiBfX2luY3JlbWVudCgpOworICBpdGVyYXRvciYgX19kZWNyZW1lbnQoKTsK
KworICBwYXRoIF9fc3Rhc2hlZF9lbGVtXzsKKyAgY29uc3QgcGF0aCogX19wYXRoX3B0cl87Cisg
IHBhdGg6Ol9fc3RyaW5nX3ZpZXcgX19lbnRyeV87CisgIF9QYXJzZXJTdGF0ZSBfX3N0YXRlXzsK
K307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBwYXRoOjppdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fcmhzKSB7CisgIHJl
dHVybiBfX2xocy5fX3BhdGhfcHRyXyA9PSBfX3Jocy5fX3BhdGhfcHRyXyAmJgorICAgICAgICAg
X19saHMuX19lbnRyeV8uZGF0YSgpID09IF9fcmhzLl9fZW50cnlfLmRhdGEoKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGg6
Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYgX19yaHMpIHsKKyAgcmV0dXJuICEoX19s
aHMgPT0gX19yaHMpOworfQorCitjbGFzcyBfTElCQ1BQX0VYQ0VQVElPTl9BQkkgZmlsZXN5c3Rl
bV9lcnJvciA6IHB1YmxpYyBzeXN0ZW1fZXJyb3IgeworcHVibGljOgorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGVy
cm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAg
ICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KHBhdGgoKSwgcGF0aCgpKSkgewor
ICAgIF9fY3JlYXRlX3doYXQoMCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBhdGgmIF9f
cDEsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCks
CisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIHBhdGgoKSkp
IHsKKyAgICBfX2NyZWF0ZV93aGF0KDEpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0LCBjb25zdCBwYXRo
JiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUg
X19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAgIF9fc3Rv
cmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIF9fcDIpKSB7CisgICAgX19jcmVhdGVf
d2hhdCgyKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0
aCYgcGF0aDEoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AxXzsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0aCYgcGF0aDIoKSBjb25z
dCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AyXzsgfQorCisgIH5maWxlc3lzdGVt
X2Vycm9yKCkgb3ZlcnJpZGU7IC8vIGtleSBmdW5jdGlvbgorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlIHsK
KyAgICByZXR1cm4gX19zdG9yYWdlXy0+X193aGF0Xy5jX3N0cigpOworICB9CisKKyAgX0xJQkNQ
UF9GVU5DX1ZJUworICB2b2lkIF9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKTsKKworcHJp
dmF0ZToKKyAgc3RydWN0IF9TdG9yYWdlIHsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgX1N0b3JhZ2UoY29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMikgOiBfX3Ax
XyhfX3AxKSwgX19wMl8oX19wMikge30KKworICAgIHBhdGggX19wMV87CisgICAgcGF0aCBfX3Ay
XzsKKyAgICBzdHJpbmcgX193aGF0XzsKKyAgfTsKKyAgc2hhcmVkX3B0cjxfU3RvcmFnZT4gX19z
dG9yYWdlXzsKK307CisKK3RlbXBsYXRlIDxjbGFzcy4uLiBfQXJncz4KK19MSUJDUFBfTk9SRVRV
Uk4gaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyNpZm5kZWYgX0xJQkNQUF9OT19F
WENFUFRJT05TCisgICAgdm9pZAorICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfQXJncyYm
Li4uIF9fYXJncykgeworICB0aHJvdyBmaWxlc3lzdGVtX2Vycm9yKHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLik7Cit9CisjZWxzZQorICAgIHZvaWQKKyAgICBfX3Rocm93X2ZpbGVzeXN0
ZW1fZXJyb3IoX0FyZ3MmJi4uLikgeworICBfVlNURDo6YWJvcnQoKTsKK30KKyNlbmRpZgorCisv
LyBvcGVyYXRpb25hbCBmdW5jdGlvbnMKKworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX2Fic29s
dXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCitwYXRoIF9fY2Fub25pY2FsKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0g
bnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY29weShjb25zdCBwYXRoJiBfX2Zy
b20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAgIGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jb3B5
X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMg
X19vcHQsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgX19leGlzdGlu
Z19zeW1saW5rLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9f
Y3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0
cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBf
X2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgm
IF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9f
bmV3X2hhcmRfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVfc3ltbGluayhjb25z
dCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3Bh
dGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9G
VU5DX1ZJUwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19l
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2VxdWl2YWxlbnQoY29uc3Qg
cGF0aCYsIGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQ
X0ZVTkNfVklTCit1aW50bWF4X3QgX19maWxlX3NpemUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX2hhcmRfbGlu
a19jb3VudChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUworYm9vbCBfX2ZzX2lzX2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rf
d3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJ
QkNQUF9GVU5DX1ZJUwordm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxl
X3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSog
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19wZXJtaXNzaW9ucyhjb25z
dCBwYXRoJiwgcGVybXMsIHBlcm1fb3B0aW9ucywgZXJyb3JfY29kZSogPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3BhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19yZW1vdmUoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19yZW5hbWUoY29uc3QgcGF0aCYgZnJv
bSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUs
IGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitzcGFjZV9pbmZv
IF9fc3BhY2UoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3N0YXR1cyBfX3N5bWxp
bmtfc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCitwYXRoIF9fc3lzdGVtX2NvbXBsZXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fdGVtcF9kaXJl
Y3RvcnlfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
CitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBj
dXJyZW50X3BhdGgoKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIF9fcCkg
eworICBfX2N1cnJlbnRfcGF0aChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7CisgIF9fY3VycmVudF9wYXRoKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gX19hYnNvbHV0ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1
cm4gX19hYnNvbHV0ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2Nh
bm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2Nhbm9u
aWNhbChfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvKSB7CisgIF9fY29weShfX2Zyb20sIF9f
dG8sIGNvcHlfb3B0aW9uczo6bm9uZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBh
dGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19vcHQpIHsKKyAgX19jb3B5KF9fZnJvbSwg
X190bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lk
IGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIF9fY29weShfX2Zyb20sIF9fdG8sIF9fb3B0LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgY29weV9vcHRp
b25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAor
Y29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgZXJyb3JfY29k
ZSYgX19lYykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlv
bnM6Om5vbmUsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29w
eV9vcHRpb25zIF9fb3B0KSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIF9f
b3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjb3B5X2Zp
bGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsK
KyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3Qg
cGF0aCYgX19leGlzdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY29weV9zeW1saW5rKF9fZXhp
c3RpbmcsIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9p
ZAorY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXh0LCBjb25zdCBwYXRoJiBfX25ldywgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2NvcHlfc3ltbGluayhfX2V4dCwgX19uZXcs
ICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVh
dGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJl
Y3RvcmllcyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcmllcyhfX3AsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYg
X19hdHRycykgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCwgX19hdHRycyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3Rv
cnkoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2F0dHJzLAorICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3Rv
cnkoX19wLCBfX2F0dHJzLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHZvaWQKK2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBj
b25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhfX3RvLCBf
X25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0
ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX2hhcmRfbGluayhjb25z
dCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX2hhcmRfbGluayhf
X3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQK
K2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcsCisg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jcmVhdGVf
aGFyZF9saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0
aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfc3ltbGluayhfX3RvLCBfX25ldyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBh
dGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX2NyZWF0ZV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgc3RhdHVzX2tub3duKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5v
bmU7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGZp
bGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gc3RhdHVzX2tub3duKF9fcykgJiYg
X19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5vdF9mb3VuZDsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBleGlzdHMoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAg
YXV0byBfX3MgPSBfX3N0YXR1cyhfX3AsICZfX2VjKTsKKyAgaWYgKHN0YXR1c19rbm93bihfX3Mp
KQorICAgIF9fZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGV4aXN0cyhfX3MpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgX19w
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXRoJiBfX3AyKSB7CisgIHJldHVybiBfX2VxdWl2YWxlbnQoX19wMSwgX19wMik7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2VxdWl2YWxlbnQoY29uc3Qg
cGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMiwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gX19lcXVpdmFsZW50KF9fcDEsIF9fcDIsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGZpbGVfc2l6ZShjb25zdCBwYXRo
JiBfX3ApIHsKKyAgcmV0dXJuIF9fZmlsZV9zaXplKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAorZmlsZV9zaXplKGNvbnN0IHBhdGgmIF9fcCwg
ZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19maWxlX3NpemUoX19wLCAm
X19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCBo
YXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2hhcmRfbGlua19j
b3VudChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4
X3QKK2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9fcCwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Jsb2NrX2ZpbGUoZmlsZV9z
dGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6
YmxvY2s7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYmxv
Y2tfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2Jsb2NrX2ZpbGUoX19zdGF0
dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNf
YmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX2NoYXJhY3Rlcl9maWxlKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OmNo
YXJhY3RlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19j
aGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9m
aWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sCitpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9maWxlKF9fc3RhdHVzKF9fcCwg
Jl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19k
aXJlY3RvcnkoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgp
ID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlz
X2RpcmVjdG9yeShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBfX3As
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZmlmbyhmaWxlX3N0YXR1cyBf
X3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpmaWZvOwor
fQoraW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gaXNfZmlmbyhfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19maWZvKF9fc3RhdHVzKF9fcCwgJl9fZWMp
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfcmVndWxh
cl9maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9
PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaXNfcmVndWxhcl9maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNf
cmVndWxhcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19yZWd1bGFyX2ZpbGUoX19zdGF0dXMo
X19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX3NvY2tldChmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpzb2NrZXQ7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc29j
a2V0KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmsoZmlsZV9zdGF0dXMgX19zKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6c3ltbGluazsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1saW5rKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc3ltbGluayhfX3N5bWxpbmtfc3RhdHVzKF9fcCkp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmso
Y29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX3N5bWxp
bmsoX19zeW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7
CisgIHJldHVybiBleGlzdHMoX19zKSAmJiAhaXNfcmVndWxhcl9maWxlKF9fcykgJiYgIWlzX2Rp
cmVjdG9yeShfX3MpICYmCisgICAgICAgICAhaXNfc3ltbGluayhfX3MpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIF9fcCkg
eworICByZXR1cm4gaXNfb3RoZXIoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19vdGhlcihfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBlCitsYXN0
X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2xhc3Rfd3JpdGVfdGlt
ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3RpbWVf
dHlwZQorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gX19sYXN0X3dyaXRlX3RpbWUoX19wLCAmX19lYyk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgbGFzdF93cml0ZV90aW1lKGNv
bnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVfdGltZV90eXBlIF9fdCkgeworICBfX2xhc3Rfd3JpdGVfdGltZShf
X3AsIF9fdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2xh
c3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsIGZpbGVfdGltZV90eXBlIF9fdCwKKyAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fbGFzdF93cml0ZV90
aW1lKF9fcCwgX190LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHZvaWQKK3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVybXMgX19wcm1zLAorICAg
ICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cyA9IHBlcm1fb3B0aW9uczo6cmVwbGFjZSkgewor
ICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBfX29wdHMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVy
bXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fcGVybWlzc2lvbnMoX19wLCBf
X3BybXMsIHBlcm1fb3B0aW9uczo6cmVwbGFjZSwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVy
bXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwZXJtX29wdGlvbnMgX19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIF9fcGVybWlzc2lvbnMo
X19wLCBfX3BybXMsIF9fb3B0cywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2Jhc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7
CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAgcGF0aCBfX3RtcF9iYXNlID0gX193ZWFr
bHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4ge307
CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcHJveGltYXRlKF9fdG1wX2Jhc2UpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBwcm94aW1hdGUoX19wLCBjdXJyZW50X3BhdGgo
KSwgX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgKK3By
b3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1cnJlbnRfcGF0
aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2FsbHlfcHJveGlt
YXRlKAorICAgICAgX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSkpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIF9f
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cGF0aCYgX19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmlj
YWwoX19wLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiBwYXRoKCk7CisgIHBhdGgg
X190bXBiYXNlID0gX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19l
YykKKyAgICByZXR1cm4gcGF0aCgpOworICByZXR1cm4gX190bXAubGV4aWNhbGx5X3JlbGF0aXZl
KF9fdG1wYmFzZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
cmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiByZWxhdGl2ZShf
X3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aAorcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2Jh
c2UgPSBjdXJyZW50X3BhdGgoKSkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9fcCku
bGV4aWNhbGx5X3JlbGF0aXZlKF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UpKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBfX3JlbW92ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX3JlbW92ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBfX3JlbW92ZV9hbGwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgeworICByZXR1cm4gX19yZW1vdmVfYWxsKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBfX2Zyb20s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRo
JiBfX3RvKSB7CisgIHJldHVybiBfX3JlbmFtZShfX2Zyb20sIF9fdG8pOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCityZW5hbWUoY29uc3QgcGF0aCYgX19mcm9t
LCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVy
biBfX3JlbmFtZShfX2Zyb20sIF9fdG8sICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdm9pZCByZXNpemVfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRtYXhfdCBfX25z
KSB7CisgIHJldHVybiBfX3Jlc2l6ZV9maWxlKF9fcCwgX19ucyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIF9fcCwg
dWludG1heF90IF9fbnMsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9f
cmVzaXplX2ZpbGUoX19wLCBfX25zLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHNwYWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX3NwYWNlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHNw
YWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX3NwYWNlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBm
aWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fc3RhdHVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMKK3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBh
dGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19zeW1saW5r
X3N0YXR1cyhfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCkgeworICByZXR1cm4gX190ZW1wX2RpcmVjdG9y
eV9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggdGVt
cF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3RlbXBfZGly
ZWN0b3J5X3BhdGgoJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wKSB7CisgIHJldHVybiBfX3dl
YWtseV9jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7Cit9CisKK2NsYXNz
IGRpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7
CitjbGFzcyBfX2Rpcl9zdHJlYW07CisKK2NsYXNzIGRpcmVjdG9yeV9lbnRyeSB7CisgIHR5cGVk
ZWYgX1ZTVERfRlM6OnBhdGggX1BhdGg7CisKK3B1YmxpYzoKKyAgLy8gY29uc3RydWN0b3JzIGFu
ZCBkZXN0cnVjdG9ycworICBkaXJlY3RvcnlfZW50cnkoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Cisg
IGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9IGRlZmF1bHQ7CisgIGRp
cmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgZGlyZWN0b3J5X2VudHJ5KF9Q
YXRoIGNvbnN0JiBfX3ApIDogX19wXyhfX3ApIHsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAg
X19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
ZGlyZWN0b3J5X2VudHJ5KF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIDogX19w
XyhfX3ApIHsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgfmRpcmVjdG9yeV9lbnRy
eSgpIHt9CisKKyAgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvcj0oZGlyZWN0b3J5X2VudHJ5IGNv
bnN0JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yPShkaXJlY3Rvcnlf
ZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCkgeworICAgIF9fcF8gPSBfX3A7Cisg
ICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgYXNzaWduKF9QYXRoIGNvbnN0JiBfX3AsIGVy
cm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19wOworICAgIF9fcmVmcmVzaCgmX19lYyk7
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxl
bmFtZShfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19wXy5yZXBsYWNlX2ZpbGVuYW1lKF9fcCk7
CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxlbmFtZShfUGF0aCBj
b25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSB7CisgICAgX19wXyA9IF9fcF8ucGFyZW50X3Bh
dGgoKSAvIF9fcDsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goKSB7IF9fcmVmcmVzaCgpOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeyBfX3JlZnJlc2goJl9fZWMpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBfUGF0aCBjb25zdCYgcGF0aCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIG9wZXJhdG9yIGNvbnN0IF9QYXRo
JigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmV4aXN0
cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgpfSk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgZXhpc3RzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gX1ZTVERfRlM6OmV4aXN0cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19lYyl9KTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19ibG9ja19maWxl
KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmJsb2NrOyB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Jsb2NrX2ZpbGUoZXJyb3JfY29k
ZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0g
ZmlsZV90eXBlOjpibG9jazsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBpc19jaGFyYWN0ZXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmls
ZV90eXBlOjpjaGFyYWN0ZXI7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJv
b2wgaXNfY2hhcmFjdGVyX2ZpbGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19kaXJlY3RvcnkoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmls
ZV90eXBlOjpkaXJlY3Rvcnk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfZmlmbygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpm
aWZvOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2ZpZm8oZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpmaWZvOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIGlzX290aGVyKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmlzX290aGVyKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgYm9vbCBpc19vdGhlcihlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9WU1REX0ZTOjppc19vdGhlcihmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19lYyl9KTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6cmVndWxhcjsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBib29sIGlzX3NvY2tldCgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmls
ZV90eXBlOjpzb2NrZXQ7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wg
aXNfc29ja2V0KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4g
X19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6c29ja2V0OworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3N5bWxpbmsoKSBjb25zdCB7IHJldHVybiBfX2dl
dF9zeW1fZnQoKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluayhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4
Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bV9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpzeW1s
aW5rOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3NpemUoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVfc2l6ZShlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3NpemUoJl9fZWMpOworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgaGFyZF9saW5rX2NvdW50KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfbmxpbmsoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudChlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X25saW5rKCZfX2VjKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgbGFzdF93cml0ZV90aW1lKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF93cml0ZV90aW1lKCZfX2Vj
KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3RhdHVzKCk7IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN0YXR1cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N0YXR1cygmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0dXMoKTsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zeW1saW5rX3N0YXR1cygm
X19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0
b3I8KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gX19wXyA8IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgb3BlcmF0b3I9PShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPT0gX19yaHMuX19wXzsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvciE9KGRpcmVjdG9yeV9lbnRy
eSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyAhPSBfX3Jo
cy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJh
dG9yPD0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAg
IHJldHVybiBfX3BfIDw9IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGJvb2wgb3BlcmF0b3I+KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNv
bnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+IF9fcmhzLl9fcF87CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I+PShkaXJlY3RvcnlfZW50
cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPj0gX19y
aHMuX19wXzsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgZGlyZWN0b3J5X2l0ZXJh
dG9yOworICBmcmllbmQgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJp
ZW5kIGNsYXNzIF9fZGlyX3N0cmVhbTsKKworICBlbnVtIF9DYWNoZVR5cGUgOiB1bnNpZ25lZCBj
aGFyIHsKKyAgICBfRW1wdHksCisgICAgX0l0ZXJTeW1saW5rLAorICAgIF9JdGVyTm9uU3ltbGlu
aywKKyAgICBfUmVmcmVzaFN5bWxpbmssCisgICAgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZCwK
KyAgICBfUmVmcmVzaE5vblN5bWxpbmsKKyAgfTsKKworICBzdHJ1Y3QgX19jYWNoZWRfZGF0YSB7
CisgICAgdWludG1heF90IF9fc2l6ZV87CisgICAgdWludG1heF90IF9fbmxpbmtfOworICAgIGZp
bGVfdGltZV90eXBlIF9fd3JpdGVfdGltZV87CisgICAgcGVybXMgX19zeW1fcGVybXNfOworICAg
IHBlcm1zIF9fbm9uX3N5bV9wZXJtc187CisgICAgZmlsZV90eXBlIF9fdHlwZV87CisgICAgX0Nh
Y2hlVHlwZSBfX2NhY2hlX3R5cGVfOworCisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICAgIF9fY2FjaGVkX2RhdGEoKSBub2V4Y2VwdCB7IF9fcmVzZXQoKTsgfQorCisgICAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICAgIHZvaWQgX19yZXNldCgpIHsKKyAgICAgIF9fY2FjaGVf
dHlwZV8gPSBfRW1wdHk7CisgICAgICBfX3R5cGVfID0gZmlsZV90eXBlOjpub25lOworICAgICAg
X19zeW1fcGVybXNfID0gX19ub25fc3ltX3Blcm1zXyA9IHBlcm1zOjp1bmtub3duOworICAgICAg
X19zaXplXyA9IF9fbmxpbmtfID0gdWludG1heF90KC0xKTsKKyAgICAgIF9fd3JpdGVfdGltZV8g
PSBmaWxlX3RpbWVfdHlwZTo6bWluKCk7CisgICAgfQorICB9OworCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgc3RhdGljIF9fY2FjaGVkX2RhdGEgX19jcmVhdGVfaXRlcl9yZXN1bHQo
ZmlsZV90eXBlIF9fZnQpIHsKKyAgICBfX2NhY2hlZF9kYXRhIF9fZGF0YTsKKyAgICBfX2RhdGEu
X190eXBlXyA9IF9fZnQ7CisgICAgX19kYXRhLl9fY2FjaGVfdHlwZV8gPSBbJl0oKSB7CisgICAg
ICBzd2l0Y2ggKF9fZnQpIHsKKyAgICAgIGNhc2UgZmlsZV90eXBlOjpub25lOgorICAgICAgICBy
ZXR1cm4gX0VtcHR5OworICAgICAgY2FzZSBmaWxlX3R5cGU6OnN5bWxpbms6CisgICAgICAgIHJl
dHVybiBfSXRlclN5bWxpbms7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gX0l0ZXJO
b25TeW1saW5rOworICAgICAgfQorICAgIH0oKTsKKyAgICByZXR1cm4gX19kYXRhOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fYXNzaWduX2l0ZXJfZW50cnko
X1BhdGgmJiBfX3AsIF9fY2FjaGVkX2RhdGEgX19kdCkgeworICAgIF9fcF8gPSBzdGQ6Om1vdmUo
X19wKTsKKyAgICBfX2RhdGFfID0gX19kdDsKKyAgfQorCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAg
ZXJyb3JfY29kZSBfX2RvX3JlZnJlc2goKSBub2V4Y2VwdDsKKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIHN0YXRpYyBib29sIF9faXNfZG5lX2Vycm9yKGVycm9yX2NvZGUgY29uc3Qm
IF9fZWMpIHsKKyAgICBpZiAoIV9fZWMpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PGVycmM+KF9fZWMudmFsdWUoKSkpIHsKKyAgICBjYXNlIGVycmM6Om5vX3N1
Y2hfZmlsZV9vcl9kaXJlY3Rvcnk6CisgICAgY2FzZSBlcnJjOjpub3RfYV9kaXJlY3Rvcnk6Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX2hhbmRsZV9l
cnJvcihjb25zdCBjaGFyKiBfX21zZywgZXJyb3JfY29kZSogX19kZXN0X2VjLAorICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUgY29uc3QmIF9fZWMsIGJvb2wgX19hbGxvd19kbmUgPSBm
YWxzZSkgY29uc3QgeworICAgIGlmIChfX2Rlc3RfZWMpIHsKKyAgICAgICpfX2Rlc3RfZWMgPSBf
X2VjOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoX19lYyAmJiAoIV9fYWxsb3dfZG5l
IHx8ICFfX2lzX2RuZV9lcnJvcihfX2VjKSkpCisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJy
b3IoX19tc2csIF9fcF8sIF9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB2b2lkIF9fcmVmcmVzaChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgeworICAgIF9f
aGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OnJlZnJlc2giLCBfX2VjLCBfX2RvX3Jl
ZnJlc2goKSwKKyAgICAgICAgICAgICAgICAgICAvKmFsbG93X2RuZSovIHRydWUpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfc3ltX2Z0KGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9f
Y2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICAgIHJldHVybiBfX3N5bWxpbmtf
c3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBj
YXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6
CisgICAgICBpZiAoX19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBm
aWxlX3R5cGU6OnN5bWxpbms7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
UmVmcmVzaE5vblN5bWxpbms6CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZGF0YV8uX190eXBl
Xyk7CisgICAgICBpZiAoX19lYyAmJiAhX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSkKKyAgICAgICAg
Kl9fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSk7
CisgICAgICBlbHNlIGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAgICAgcmV0
dXJuIF9fZGF0YV8uX190eXBlXzsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfZnQo
ZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8u
X19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJTeW1saW5r
OgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBfX3N0
YXR1cyhfX3BfLCBfX2VjKS50eXBlKCk7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAg
Y2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6IHsKKyAg
ICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKKyAgICAgIGlmIChfX2VjICYm
ICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAgICAqX19lYyA9IG1ha2VfZXJyb3JfY29k
ZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKKyAgICAgIGVsc2UgaWYgKF9fZWMp
CisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX3R5cGVfOwor
ICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zdGF0dXMoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90
eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAg
IGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoK
KyAgICAgIHJldHVybiBfX3N0YXR1cyhfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoTm9u
U3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0
YXR1cyhfX2dldF9mdChfX2VjKSwgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfKTsKKyAgICB9Cisg
ICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zeW1saW5rX3N0YXR1cyhlcnJvcl9jb2RlKiBfX2Vj
ID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7
CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
SXRlclN5bWxpbms6CisgICAgICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3BfLCBfX2VjKTsK
KyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0YXR1cyhf
X2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyk7CisgICAgY2FzZSBf
UmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAg
ICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5fX3N5bV9w
ZXJtc18pOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9zaXplKGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlw
ZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBj
YXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Cisg
ICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fZmlsZV9zaXplKF9fcF8sIF9fZWMpOworICAgIGNhc2Ug
X1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7CisgICAgICBl
cnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRfZnQoJl9fbV9l
YykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6ZmlsZV9zaXpl
IiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNURF9GUzo6ZXhpc3RzKF9fc3QpICYmICFf
VlNURF9GUzo6aXNfcmVndWxhcl9maWxlKF9fc3QpKSB7CisgICAgICAgIGVycmMgX19lcnJfa2lu
ZCA9IF9WU1REX0ZTOjppc19kaXJlY3RvcnkoX19zdCkgPyBlcnJjOjppc19hX2RpcmVjdG9yeQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
ZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9y
eV9lbnRyeTo6ZmlsZV9zaXplIiwgX19lYywKKyAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9l
cnJvcl9jb2RlKF9fZXJyX2tpbmQpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfX2RhdGFfLl9f
c2l6ZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9ubGluayhlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6
CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29s
dmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2hhcmRfbGlua19jb3VudChfX3BfLCBfX2Vj
KTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGlu
azogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICAodm9pZClfX2dldF9mdCgmX19t
X2VjKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OmhhcmRfbGlu
a19jb3VudCIsIF9fZWMsIF9fbV9lYyk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX25saW5rXzsK
KyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgX19nZXRfd3JpdGVfdGltZShl
cnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5f
X2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxp
bms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJl
c29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2xhc3Rfd3JpdGVfdGltZShfX3BfLCBf
X2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3lt
bGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICBmaWxlX3N0YXR1cyBfX3N0
KF9fZ2V0X2Z0KCZfX21fZWMpKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3Rvcnlf
ZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsIF9fbV9lYyk7CisgICAgICBpZiAoX1ZTVERf
RlM6OmV4aXN0cyhfX3N0KSAmJgorICAgICAgICAgIF9fZGF0YV8uX193cml0ZV90aW1lXyA9PSBm
aWxlX3RpbWVfdHlwZTo6bWluKCkpCisgICAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3Rv
cnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsCisgICAgICAgICAgICAgICAgICAgICAg
IG1ha2VfZXJyb3JfY29kZShlcnJjOjp2YWx1ZV90b29fbGFyZ2UpKTsKKyAgICAgIHJldHVybiBf
X2RhdGFfLl9fd3JpdGVfdGltZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hB
QkxFKCk7CisgIH0KKworcHJpdmF0ZToKKyAgX1BhdGggX19wXzsKKyAgX19jYWNoZWRfZGF0YSBf
X2RhdGFfOworfTsKKworY2xhc3MgX19kaXJfZWxlbWVudF9wcm94eSB7CitwdWJsaWM6CisgIGlu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9lbnRyeSBvcGVyYXRvcioo
KSB7CisgICAgcmV0dXJuIF9WU1REOjptb3ZlKF9fZWxlbV8pOworICB9CisKK3ByaXZhdGU6Cisg
IGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBleHBsaWNpdCBfX2Rpcl9lbGVtZW50X3Byb3h5KGRp
cmVjdG9yeV9lbnRyeSBjb25zdCYgX19lKSA6IF9fZWxlbV8oX19lKSB7fQorICBfX2Rpcl9lbGVt
ZW50X3Byb3h5KF9fZGlyX2VsZW1lbnRfcHJveHkmJiBfX28pCisgICAgICA6IF9fZWxlbV8oX1ZT
VEQ6Om1vdmUoX19vLl9fZWxlbV8pKSB7fQorICBkaXJlY3RvcnlfZW50cnkgX19lbGVtXzsKK307
CisKK2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHR5cGVkZWYgZGlyZWN0
b3J5X2VudHJ5IHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0KiBwb2ludGVyOworICB0eXBlZGVmIHZhbHVl
X3R5cGUgY29uc3QmIHJlZmVyZW5jZTsKKyAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CisKK3B1YmxpYzoKKyAgLy9jdG9yICYgZHRvcgorICBkaXJlY3Rvcnlf
aXRlcmF0b3IoKSBub2V4Y2VwdCB7fQorCisgIGV4cGxpY2l0IGRpcmVjdG9yeV9pdGVyYXRvcihj
b25zdCBwYXRoJiBfX3ApCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsIG51bGxwdHIp
IHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX19vcHRzKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBudWxscHRyLCBf
X29wdHMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3Jf
Y29kZSYgX19lYykKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMpIHt9CisK
KyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMg
X19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDog
ZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMsIF9fb3B0cykge30KKworICBkaXJlY3Rvcnlf
aXRlcmF0b3IoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworICBkaXJlY3Rv
cnlfaXRlcmF0b3IoZGlyZWN0b3J5X2l0ZXJhdG9yJiYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5
X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0
OworCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3I9KGRpcmVjdG9yeV9pdGVyYXRvciYm
IF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3Zp
ZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBpZiAodGhpcyAhPSAmX19vKSB7
CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKKyAgICB9CisgICAgcmV0
dXJuICp0aGlzOworICB9CisKKyAgfmRpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKwor
ICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yKigpIGNvbnN0IHsKKyAgICBfTElCQ1BQ
X0FTU0VSVChfX2ltcF8sICJUaGUgZW5kIGl0ZXJhdG9yIGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQi
KTsKKyAgICByZXR1cm4gX19kZXJlZmVyZW5jZSgpOworICB9CisKKyAgY29uc3QgZGlyZWN0b3J5
X2VudHJ5KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJioqdGhpczsgfQorCisgIGRpcmVj
dG9yeV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKwor
ICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKysoaW50KSB7CisgICAgX19kaXJfZWxlbWVu
dF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3JlbWVudCgpOworICAgIHJldHVybiBfX3A7
CisgIH0KKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIGluY3JlbWVudChlcnJvcl9jb2RlJiBfX2Vj
KSB7IHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7IH0KKworcHJpdmF0ZToKKyAgaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBk
aXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeV9p
dGVyYXRvciYgX19yaHMpIG5vZXhjZXB0OworCisgIC8vIGNvbnN0cnVjdCB0aGUgZGlyX3N0cmVh
bQorICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiwg
ZXJyb3JfY29kZSosCisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyA9IGRp
cmVjdG9yeV9vcHRpb25zOjpub25lKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9y
eV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisg
IF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBfX2RlcmVmZXJlbmNl
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHNoYXJlZF9wdHI8X19kaXJfc3RyZWFtPiBfX2ltcF87
Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09
KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgIGNvbnN0IGRpcmVj
dG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLl9faW1wXyA9
PSBfX3Jocy5fX2ltcF87Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wKK29wZXJhdG9yIT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAg
ICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4g
IShfX2xocyA9PSBfX3Jocyk7Cit9CisKKy8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFu
Z2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGRpcmVjdG9yeV9pdGVyYXRvcgorYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIF9faXRlcikgbm9l
eGNlcHQgeworICByZXR1cm4gX19pdGVyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBkaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3Im
KSBub2V4Y2VwdCB7CisgIHJldHVybiBkaXJlY3RvcnlfaXRlcmF0b3IoKTsKK30KKworY2xhc3Mg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHVzaW5nIHZhbHVlX3R5
cGUgPSBkaXJlY3RvcnlfZW50cnk7CisgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRy
ZGlmZl90OworICB1c2luZyBwb2ludGVyID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0KjsKKyAgdXNp
bmcgcmVmZXJlbmNlID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0JjsKKyAgdXNpbmcgaXRlcmF0b3Jf
Y2F0ZWdvcnkgPSBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZzsKKworcHVibGljOgorICAvLyBjb25z
dHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgbm9leGNlcHQgOiBfX3JlY18oZmFsc2UpIHt9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yKAorICAgICAgY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9u
cyBfX3hvcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpCisgICAgICA6IHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBfX3hvcHRpb25zLCBudWxscHRyKSB7fQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihj
b25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlvbnMsICZfX2VjKSB7fQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25z
dCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3IoX19wLCBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSwgJl9fZWMpIHt9CisKKyAg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJikgPSBkZWZhdWx0OworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZhdWx0OworCisgIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3ImCisgIG9wZXJhdG9yPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3BlcmF0b3I9KHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAgICAvLyBub24tZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBwcm92aWRlZCB0byBzdXBwb3J0IHNlbGYtbW92ZSBhc3NpZ24uCisgICAgaWYgKHRo
aXMgIT0gJl9fbykgeworICAgICAgX19pbXBfID0gX1ZTVEQ6Om1vdmUoX19vLl9faW1wXyk7Cisg
ICAgICBfX3JlY18gPSBfX28uX19yZWNfOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0K
KworICB+cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBjb25zdCBkaXJlY3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0b3IrKyhpbnQp
IHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOworICAgIF9faW5jcmVtZW50
KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgaW5jcmVtZW50KGVycm9yX2NvZGUmIF9f
ZWMpIHsKKyAgICByZXR1cm4gX19pbmNyZW1lbnQoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9G
VU5DX1ZJUyBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRpb25zKCkgY29uc3Q7CisgIF9MSUJDUFBfRlVO
Q19WSVMgaW50IGRlcHRoKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICB2b2lkIHBvcCgpIHsgX19wb3AoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgdm9pZCBwb3AoZXJyb3JfY29kZSYgX19lYykgeyBfX3BvcCgmX19lYyk7IH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgcmVjdXJzaW9uX3BlbmRpbmcoKSBjb25zdCB7
IHJldHVybiBfX3JlY187IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQg
ZGlzYWJsZV9yZWN1cnNpb25fcGVuZGluZygpIHsgX19yZWNfID0gZmFsc2U7IH0KKworcHJpdmF0
ZToKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVj
dG9yeV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2Vu
dHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBib29s
IF9fdHJ5X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBfX2VjKTsKKworICBfTElCQ1BQX0ZVTkNfVklT
CisgIHZvaWQgX19hZHZhbmNlKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElC
Q1BQX0ZVTkNfVklTCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9faW5jcmVtZW50
KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHZv
aWQgX19wb3AoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIGlubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvciYsCisgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgIHN0cnVjdCBfX3NoYXJlZF9pbXA7Cisg
IHNoYXJlZF9wdHI8X19zaGFyZWRfaW1wPiBfX2ltcF87CisgIGJvb2wgX19yZWNfOworfTsgLy8g
Y2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuX19pbXBfID09IF9fcmhz
Ll9faW1wXzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19y
aHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOworfQorLy8gZW5hYmxl
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3IKK2JlZ2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICByZXR1cm4gcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcigpOworfQorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisj
ZW5kaWYgLy8gIV9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQX1BPUF9NQUNST1MKKworI2Vu
ZGlmIC8vIF9MSUJDUFBfRklMRVNZU1RFTQorI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="426445"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410494</attachid>
            <date>2020-10-04 18:20:53 -0700</date>
            <delta_ts>2020-10-04 19:03:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217302-20201004182052.patch</filename>
            <type>text/plain</type>
            <size>168646</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5NTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTA0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gb2YgPGZpbGVzeXN0ZW0+
IHRvIFdURiBmb3IgbWFjT1MgMTAuMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBhbmQgaXRzIG5l
ZWRlZCBpbXBsZW1lbnRhdGlvbiBmaWxlcworICAgICAgICBmcm9tIGxpYmMrKyAoNjI4YTMxOTQ3
NSkgYW5kIG1vZGlmaWVzIHRoZW0gdG8gYnVpbGQgb3V0c2lkZSBvZgorICAgICAgICBsaWJjKysu
IFRoaXMgaXMgb25seSBuZWVkZWQgYW5kIG9ubHkgYnVpbHQgZm9yIHZlcnNpb25zIG9mIG1hY09T
IDwgMTAuMTUKKyAgICAgICAgYW5kIGNhbiBiZSBkcm9wcGVkIHdoZW4gd2UgcmVxdWlyZSAxMC4x
NS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvU3RkRmlsZXN5c3RlbS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHd0Zi9TdGRGaWxlc3lzdGVtLmg6IEFkZGVkLgorCiAyMDIwLTEwLTAz
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSW50
cm9kdWNlIEpJVE9wZXJhdGlvbkxpc3QgdG8gdmFsaWRhdGUgSklULWNhZ2VkIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
Nzk0OCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKIAkJN0E2RUJBMzQyMDc0NkMzNDAwNEY5QzQ0IC8q
IE1hY2hTZW5kUmlnaHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0E2RUJBMzMyMDc0NkMzNDAwNEY5QzQ0IC8qIE1hY2hTZW5kUmlnaHQuY3BwICov
OyB9OwogCQk3QUYwMjNCNTIwNjFFMTcwMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYwMjNCNDIw
NjFFMTZGMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAgKi87IH07CiAJCTdBRkVDNkIx
MUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAq
LzsgfTsKKwkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1OTVGRkQyNTJB
OTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4MTM0MDEzODE1QjA5
MkZEMDAxRkYwQjggLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxMzQwMTM2MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQuY3BwICov
OyB9OwogCQk4MzQ4QkEwRTIxRkJDMEQ1MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4QkEwRDIx
RkJDMEQ0MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgKi87IH07CiAJCTkzOTM0QkQz
MThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2QTEgLyog
U3RyaW5nVmlld0NvY29hLm1tICovOyB9OwpAQCAtNDYyLDYgKzQ2Myw4IEBACiAJCTdDNDIzMDcy
MjNDRTJEOEEwMDZFNTREMCAvKiBQbGF0Zm9ybUNQVS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybUNQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzQyMzA3MzIzQ0UyRDhCMDA2RTU0RDAgLyogUGxhdGZvcm1PUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNDIzMDc0MjNDRUIxODcwMDZFNTREMCAvKiBQbGF0Zm9ybUxlZ2FjeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUxlZ2FjeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QzU5NUZGQzI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3Rl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRGaWxlc3lzdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNTk1RkZEMjUyQTk2RTAwMEU0MjE2OCAvKiBT
dGRGaWxlc3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
ZEZpbGVzeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzk2OTI5NDFG
NjYzMDZFMDAyNjdBOUUgLyogS2V5VmFsdWVQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtleVZhbHVlUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Qzk4Q0RDNzIzRTdBOUI4MDAxMkYyMzIgLyogUGxhdGZvcm1FbmFibGVDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUVuYWJsZUNvY29hLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOThDREM4MjNFN0FGQzgwMDEyRjIzMiAvKiBQbGF0Zm9y
bUVuYWJsZVdpbkFwcGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRm
b3JtRW5hYmxlV2luQXBwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDUs
NiArMTI0OCw4IEBACiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMu
aCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8s
CiAJCQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQk3
QzU5NUZGRDI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5jcHAgKi8sCisJCQkJN0M1
OTVGRkMyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLywKIAkJCQlGRTk3RjZB
ODI0NUNFNUREMDBDNjNGQzYgLyogU3RkSW50RXh0cmFzLmggKi8sCiAJCQkJQThBNDczMTExNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCUZGMEE0MzY1ODg5NTRGM0NC
MDdEQkVDQSAvKiBTdGRMaXN0LmggKi8sCkBAIC0xNzQ1LDYgKzE3NTAsNyBAQAogCQkJCUZFRUE0
REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1BvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzMzN0RCOUNFNzQzNDEwRkFGMDc2RTE3IC8qIFN0YWNrVHJhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5NUI2MzcyMENCNUVGRDAwNDc5NjM1IC8qIFN0cmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhENkUyNzFGNTUyMkUz
MDBBNzVDQzQgLyogU3RyaW5nQnVpbGRlckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjY3OTQ4KQorKysgU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgU3RhY2tTaG90UHJvZmlsZXIuaAogICAgIFN0YWNrU3RhdHMuaAog
ICAgIFN0YWNrVHJhY2UuaAorICAgIFN0ZEZpbGVzeXN0ZW0uaAogICAgIFN0ZEludEV4dHJhcy5o
CiAgICAgU3RkTGliRXh0cmFzLmgKICAgICBTdGRMaXN0LmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0ZEZpbGVzeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVz
eXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYwNSBAQAorLy89PT0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFN0ZEZpbGVzeXN0ZW0uY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJh
c3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2Vz
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKworLyogSW1wb3J0cyBhIGNvcHkgb2YgZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5o
LCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAsCisgICBmaWxlc3lzdGVtL2ludDEy
OF9idWlsdGlucy5jcHAgYW5kIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgZnJvbSByMzQzODM4
IG9mIHRoZQorICAgbGliYysrIHByb2plY3QgYW5kIGhhcyBtb2RpZmllZCB0aGVtIHRvIHdvcmsg
b3V0c2lkZSBvZiBhIGJ1aWxkIG9mIGxpYmMrKyBpdHNlbGYuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisK
KyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPCAxMDE1MDAKKworI2luY2x1ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKworI2luY2x1
ZGUgPF9fY29uZmlnPgorCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9u
LmggLS0gKi8KKworI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPGNsaW1pdHM+CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4gLy8gZm9yIDo6dXRpbWVzIGFzIHVzZWQgaW4gX19sYXN0X3dyaXRlX3RpbWUK
KyNpbmNsdWRlIDxmY250bC5oPiAgICAvKiB2YWx1ZXMgZm9yIGZjaG1vZGF0ICovCisKKy8qICNp
bmNsdWRlICIuLi9pbmNsdWRlL2FwcGxlX2F2YWlsYWJpbGl0eS5oIiAqLworCisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKQorLy8gV2UgY2FuIHVzZSB0aGUgcHJlc2VuY2Ugb2YgVVRJTUVfT01JVCB0
byBkZXRlY3QgcGxhdGZvcm1zIHRoYXQgcHJvdmlkZQorLy8gdXRpbWVuc2F0LgorI2lmIGRlZmlu
ZWQoVVRJTUVfT01JVCkKKyNkZWZpbmUgX0xJQkNQUF9VU0VfVVRJTUVOU0FUCisjZW5kaWYKKyNl
bmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz
aAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcGFyYW1ldGVyIgorI2VuZGlm
CisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIGRldGFp
bCB7CituYW1lc3BhY2UgeworCitzdGF0aWMgc3RyaW5nIGZvcm1hdF9zdHJpbmdfaW1wKGNvbnN0
IGNoYXIqIG1zZywgLi4uKSB7CisgIC8vIHdlIG1pZ2h0IG5lZWQgYSBzZWNvbmQgc2hvdCBhdCB0
aGlzLCBzbyBwcmUtZW1wdGl2bHkgbWFrZSBhIGNvcHkKKyAgc3RydWN0IEd1YXJkVkFMaXN0IHsK
KyAgICB2YV9saXN0JiB0YXJnZXQ7CisgICAgYm9vbCBhY3RpdmUgPSB0cnVlOworICAgIEd1YXJk
VkFMaXN0KHZhX2xpc3QmIHRhcmdldCkgOiB0YXJnZXQodGFyZ2V0KSwgYWN0aXZlKHRydWUpIHt9
CisgICAgdm9pZCBjbGVhcigpIHsKKyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0
YXJnZXQpOworICAgICAgYWN0aXZlID0gZmFsc2U7CisgICAgfQorICAgIH5HdWFyZFZBTGlzdCgp
IHsKKyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0YXJnZXQpOworICAgIH0KKyAg
fTsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBtc2cpOworICBHdWFyZFZBTGlz
dCBhcmdzX2d1YXJkKGFyZ3MpOworCisgIHZhX2xpc3QgYXJnc19jcDsKKyAgdmFfY29weShhcmdz
X2NwLCBhcmdzKTsKKyAgR3VhcmRWQUxpc3QgYXJnc19jb3B5X2d1YXJkKGFyZ3NfY3ApOworCisg
IGFycmF5PGNoYXIsIDI1Nj4gbG9jYWxfYnVmZjsKKyAgc2l6ZV90IHNpemUgPSBsb2NhbF9idWZm
LnNpemUoKTsKKworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFs
IgorI2VuZGlmCisgIGF1dG8gcmV0ID0gOjp2c25wcmludGYobG9jYWxfYnVmZi5kYXRhKCksIHNp
emUsIG1zZywgYXJnc19jcCk7CisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCisjZW5kaWYKKworICBhcmdzX2NvcHlfZ3VhcmQuY2xlYXIoKTsKKworICAvLyBo
YW5kbGUgZW1wdHkgZXhwYW5zaW9uCisgIGlmIChyZXQgPT0gMCkKKyAgICByZXR1cm4gc3RyaW5n
e307CisgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHJldCkgPCBzaXplKQorICAgIHJldHVybiBz
dHJpbmcobG9jYWxfYnVmZi5kYXRhKCkpOworCisgIC8vIHdlIGRpZCBub3QgcHJvdmlkZSBhIGxv
bmcgZW5vdWdoIGJ1ZmZlciBvbiBvdXIgZmlyc3QgYXR0ZW1wdC4KKyAgLy8gYWRkIDEgdG8gc2l6
ZSB0byBhY2NvdW50IGZvciBudWxsLWJ5dGUgaW4gc2l6ZSBjYXN0IHRvIHByZXZlbnQgb3ZlcmZs
b3cKKyAgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmV0KSArIDE7CisgIGF1dG8gYnVmZl9w
dHIgPSB1bmlxdWVfcHRyPGNoYXJbXT4obmV3IGNoYXJbc2l6ZV0pOworCisjaWZkZWYgX19jbGFu
Z19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCisjZW5kaWYKKyAgcmV0ID0gOjp2c25w
cmludGYoYnVmZl9wdHIuZ2V0KCksIHNpemUsIG1zZywgYXJncyk7CisjaWZkZWYgX19jbGFuZ19f
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworICByZXR1cm4gc3RyaW5n
KGJ1ZmZfcHRyLmdldCgpKTsKK30KKworY29uc3QgY2hhciogdW53cmFwKHN0cmluZyBjb25zdCYg
cykgeyByZXR1cm4gcy5jX3N0cigpOyB9Citjb25zdCBjaGFyKiB1bndyYXAocGF0aCBjb25zdCYg
cCkgeyByZXR1cm4gcC5uYXRpdmUoKS5jX3N0cigpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgQXJnPgor
QXJnIGNvbnN0JiB1bndyYXAoQXJnIGNvbnN0JiBhKSB7CisgIHN0YXRpY19hc3NlcnQoIWlzX2Ns
YXNzPEFyZz46OnZhbHVlLCAiY2Fubm90IHBhc3MgY2xhc3MgaGVyZSIpOworICByZXR1cm4gYTsK
K30KKwordGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CitzdHJpbmcgZm9ybWF0X3N0cmluZyhjb25z
dCBjaGFyKiBmbXQsIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIHsKKyAgcmV0dXJuIGZvcm1hdF9zdHJp
bmdfaW1wKGZtdCwgdW53cmFwKGFyZ3MpLi4uKTsKK30KKworZXJyb3JfY29kZSBjYXB0dXJlX2Vy
cm5vKCkgeworICBfTElCQ1BQX0FTU0VSVChlcnJubywgIkV4cGVjdGVkIGVycm5vIHRvIGJlIG5v
bi16ZXJvIik7CisgIHJldHVybiBlcnJvcl9jb2RlKGVycm5vLCBnZW5lcmljX2NhdGVnb3J5KCkp
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK1QgZXJyb3JfdmFsdWUoKTsKK3RlbXBsYXRlIDw+
CitfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSB2b2lkIGVycm9yX3ZhbHVlPHZvaWQ+KCkg
e30KK3RlbXBsYXRlIDw+Citib29sIGVycm9yX3ZhbHVlPGJvb2w+KCkgeworICByZXR1cm4gZmFs
c2U7Cit9Cit0ZW1wbGF0ZSA8PgordWludG1heF90IGVycm9yX3ZhbHVlPHVpbnRtYXhfdD4oKSB7
CisgIHJldHVybiB1aW50bWF4X3QoLTEpOworfQordGVtcGxhdGUgPD4KK19MSUJDUFBfQ09OU1RF
WFBSX0FGVEVSX0NYWDExIGZpbGVfdGltZV90eXBlIGVycm9yX3ZhbHVlPGZpbGVfdGltZV90eXBl
PigpIHsKKyAgcmV0dXJuIGZpbGVfdGltZV90eXBlOjptaW4oKTsKK30KK3RlbXBsYXRlIDw+Citw
YXRoIGVycm9yX3ZhbHVlPHBhdGg+KCkgeworICByZXR1cm4ge307Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBUPgorc3RydWN0IEVycm9ySGFuZGxlciB7CisgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZTsK
KyAgZXJyb3JfY29kZSogZWMgPSBudWxscHRyOworICBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHI7
CisgIGNvbnN0IHBhdGgqIHAyID0gbnVsbHB0cjsKKworICBFcnJvckhhbmRsZXIoY29uc3QgY2hh
ciogZm5hbWUsIGVycm9yX2NvZGUqIGVjLCBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHIsCisgICAg
ICAgICAgICAgICBjb25zdCBwYXRoKiBwMiA9IG51bGxwdHIpCisgICAgICA6IGZ1bmNfbmFtZShm
bmFtZSksIGVjKGVjKSwgcDEocDEpLCBwMihwMikgeworICAgIGlmIChlYykKKyAgICAgIGVjLT5j
bGVhcigpOworICB9CisKKyAgVCByZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYykgY29uc3Qg
eworICAgIGlmIChlYykgeworICAgICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92
YWx1ZTxUPigpOworICAgIH0KKyAgICBzdHJpbmcgd2hhdCA9IHN0cmluZygiaW4gIikgKyBmdW5j
X25hbWU7CisgICAgc3dpdGNoIChib29sKHAxKSArIGJvb2wocDIpKSB7CisgICAgY2FzZSAwOgor
ICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsIG1fZWMpOworICAgIGNhc2UgMToK
KyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOworICAgIGNh
c2UgMjoKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9l
Yyk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIHRlbXBsYXRl
IDxjbGFzcy4uLiBBcmdzPgorICBUIHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2VjLCBjb25z
dCBjaGFyKiBtc2csIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICplYyA9IG1fZWM7CisgICAgICByZXR1cm4gZXJyb3JfdmFsdWU8VD4oKTsKKyAgICB9
CisgICAgc3RyaW5nIHdoYXQgPQorICAgICAgICBzdHJpbmcoImluICIpICsgZnVuY19uYW1lICsg
IjogIiArIGZvcm1hdF9zdHJpbmcobXNnLCBhcmdzLi4uKTsKKyAgICBzd2l0Y2ggKGJvb2wocDEp
ICsgYm9vbChwMikpIHsKKyAgICBjYXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJy
b3Iod2hhdCwgbV9lYyk7CisgICAgY2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vy
cm9yKHdoYXQsICpwMSwgbV9lYyk7CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lz
dGVtX2Vycm9yKHdoYXQsICpwMSwgKnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJF
QUNIQUJMRSgpOworICB9CisKKyAgVCByZXBvcnQoZXJyYyBjb25zdCYgZXJyKSBjb25zdCB7IHJl
dHVybiByZXBvcnQobWFrZV9lcnJvcl9jb2RlKGVycikpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
Li4uIEFyZ3M+CisgIFQgcmVwb3J0KGVycmMgY29uc3QmIGVyciwgY29uc3QgY2hhciogbXNnLCBB
cmdzIGNvbnN0Ji4uLiBhcmdzKSBjb25zdCB7CisgICAgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9y
X2NvZGUoZXJyKSwgbXNnLCBhcmdzLi4uKTsKKyAgfQorCitwcml2YXRlOgorICBFcnJvckhhbmRs
ZXIoRXJyb3JIYW5kbGVyIGNvbnN0JikgPSBkZWxldGU7CisgIEVycm9ySGFuZGxlciYgb3BlcmF0
b3I9KEVycm9ySGFuZGxlciBjb25zdCYpID0gZGVsZXRlOworfTsKKwordXNpbmcgY2hyb25vOjpk
dXJhdGlvbjsKK3VzaW5nIGNocm9ubzo6ZHVyYXRpb25fY2FzdDsKKwordXNpbmcgVGltZVNwZWMg
PSBzdHJ1Y3QgOjp0aW1lc3BlYzsKK3VzaW5nIFN0YXRUID0gc3RydWN0IDo6c3RhdDsKKwordGVt
cGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQsCisgICAgICAgICAgYm9vbCBJc0Zs
b2F0ID0gaXNfZmxvYXRpbmdfcG9pbnQ8dHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA+Ojp2YWx1ZT4K
K3N0cnVjdCB0aW1lX3V0aWxfYmFzZSB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1l
VDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRp
b247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19uYW5v
c2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9
IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9zZWNv
bmRzID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlv
bjo6bWF4KCkpLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWF4X25zZWMgPQor
ICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6
bWF4KCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyht
YXhfc2Vjb25kcykpCisgICAgICAgICAgLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciBy
ZXAgbWluX3NlY29uZHMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGlt
ZVQ6OmR1cmF0aW9uOjptaW4oKSkuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBt
aW5fbnNlY190aW1lc3BlYyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigK
KyAgICAgICAgICAoRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkgLSBmc19zZWNvbmRzKG1pbl9z
ZWNvbmRzKSkgKworICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgLmNvdW50KCk7
CisKK3ByaXZhdGU6CisjaWYgX0xJQkNQUF9TVERfVkVSID4gMTEgJiYgIWRlZmluZWQoX0xJQkNQ
UF9IQVNfTk9fQ1hYMTRfQ09OU1RFWFBSKQorICBzdGF0aWMgY29uc3RleHByIGZzX2R1cmF0aW9u
IGdldF9taW5fbnNlY3MoKSB7CisgICAgcmV0dXJuIGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+
KAorICAgICAgICBmc19uYW5vc2Vjb25kcyhtaW5fbnNlY190aW1lc3BlYykgLQorICAgICAgICBk
dXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihmc19zZWNvbmRzKDEpKSk7CisgIH0KKyAgLy8g
U3RhdGljIGFzc2VydCB0aGF0IHRoZXNlIHZhbHVlcyBwcm9wZXJseSByb3VuZCB0cmlwLgorICBz
dGF0aWNfYXNzZXJ0KGZzX3NlY29uZHMobWluX3NlY29uZHMpICsgZ2V0X21pbl9uc2VjcygpID09
CisgICAgICAgICAgICAgICAgICAgIEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpLAorICAgICAg
ICAgICAgICAgICJ2YWx1ZSBkb2Vzbid0IHJvdW5kdHJpcCIpOworCisgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBjaGVja19yYW5nZSgpIHsKKyAgICAvLyBUaGlzIGtpbmRhIHN1Y2tzLCBidXQgaXQn
cyB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBkb24ndCBoYXZlIF9faW50MTI4X3QuCisgICAgaWYgKHNp
emVvZihUaW1lVCkgPT0gc2l6ZW9mKHJlcCkpIHsKKyAgICAgIHR5cGVkZWYgZHVyYXRpb248bG9u
ZyBsb25nLCByYXRpbzwzNjAwICogMjQgKiAzNjU+ID4gWWVhcnM7CisgICAgICByZXR1cm4gZHVy
YXRpb25fY2FzdDxZZWFycz4oZnNfc2Vjb25kcyhtYXhfc2Vjb25kcykpID4gWWVhcnMoMjUwKSAm
JgorICAgICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWluX3NlY29u
ZHMpKSA8IFllYXJzKC0yNTApOworICAgIH0KKyAgICByZXR1cm4gbWF4X3NlY29uZHMgPj0gbnVt
ZXJpY19saW1pdHM8VGltZVQ+OjptYXgoKSAmJgorICAgICAgICAgICBtaW5fc2Vjb25kcyA8PSBu
dW1lcmljX2xpbWl0czxUaW1lVD46Om1pbigpOworICB9CisgIHN0YXRpY19hc3NlcnQoY2hlY2tf
cmFuZ2UoKSwgInRoZSByZXByZXNlbnRhYmxlIHJhbmdlIGlzIHVuYWNjZXB0YWJsZSBzbWFsbCIp
OworI2VuZGlmCit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4K
K3N0cnVjdCB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPiB7CisgIHVzaW5n
IHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5
cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRpb247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlv
bjxyZXA+OworICB1c2luZyBmc19uYW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47Cisg
IHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRp
YyBjb25zdCByZXAgbWF4X3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWF4X25zZWM7Cisg
IHN0YXRpYyBjb25zdCByZXAgbWluX3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWluX25z
ZWNfdGltZXNwZWM7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1l
VD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8Rmls
ZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1heF9zZWNvbmRzID0KKyAgICAgICAgZHVyYXRpb25fY2Fz
dDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKwordGVt
cGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxl
VGltZVQ6OnJlcCB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X25z
ZWMgPQorICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRp
b246Om1heCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRz
KG1heF9zZWNvbmRzKSkKKyAgICAgICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxl
VGltZVQsIGNsYXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0
aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWluX3NlY29uZHMgPQorICAg
ICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigp
KS5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2Nv
bnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVU
LCBUaW1lVCwgdHJ1ZT46Om1pbl9uc2VjX3RpbWVzcGVjID0KKyAgICAgICAgZHVyYXRpb25fY2Fz
dDxmc19uYW5vc2Vjb25kcz4oKEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMobWluX3NlY29uZHMpKSAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisg
ICAgICAgICAgICAuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3Mg
VGltZVQsIGNsYXNzIFRpbWVTcGVjVD4KK3N0cnVjdCB0aW1lX3V0aWwgOiB0aW1lX3V0aWxfYmFz
ZTxGaWxlVGltZVQsIFRpbWVUPiB7CisgIHVzaW5nIEJhc2UgPSB0aW1lX3V0aWxfYmFzZTxGaWxl
VGltZVQsIFRpbWVUPjsKKyAgdXNpbmcgQmFzZTo6bWF4X25zZWM7CisgIHVzaW5nIEJhc2U6Om1h
eF9zZWNvbmRzOworICB1c2luZyBCYXNlOjptaW5fbnNlY190aW1lc3BlYzsKKyAgdXNpbmcgQmFz
ZTo6bWluX3NlY29uZHM7CisKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfZHVyYXRpb247Cisg
IHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX21pY3Jvc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUg
QmFzZTo6ZnNfbmFub3NlY29uZHM7CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX3NlY29uZHM7
CisKK3B1YmxpYzoKKyAgdGVtcGxhdGUgPGNsYXNzIENUeXBlLCBjbGFzcyBDaHJvbm9UeXBlPgor
ICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjaGVja2VkX3NldChD
VHlwZSogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDaHJvbm9UeXBlIHRpbWUpIHsKKyAgICB1c2luZyBMaW0gPSBudW1lcmljX2xp
bWl0czxDVHlwZT47CisgICAgaWYgKHRpbWUgPiBMaW06Om1heCgpIHx8IHRpbWUgPCBMaW06Om1p
bigpKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgICpvdXQgPSBzdGF0aWNfY2FzdDxDVHlwZT4o
dGltZSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVY
UFJfQUZURVJfQ1hYMTEgYm9vbCBpc19yZXByZXNlbnRhYmxlKFRpbWVTcGVjVCB0bSkgeworICAg
IGlmICh0bS50dl9zZWMgPj0gMCkgeworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA8IG1heF9zZWNv
bmRzIHx8CisgICAgICAgICAgICAgKHRtLnR2X3NlYyA9PSBtYXhfc2Vjb25kcyAmJiB0bS50dl9u
c2VjIDw9IG1heF9uc2VjKTsKKyAgICB9IGVsc2UgaWYgKHRtLnR2X3NlYyA9PSAobWluX3NlY29u
ZHMgLSAxKSkgeworICAgICAgcmV0dXJuIHRtLnR2X25zZWMgPj0gbWluX25zZWNfdGltZXNwZWM7
CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB0bS50dl9zZWMgPj0gbWluX3NlY29uZHM7Cisg
ICAgfQorICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wg
aXNfcmVwcmVzZW50YWJsZShGaWxlVGltZVQgdG0pIHsKKyAgICBhdXRvIHNlY3MgPSBkdXJhdGlv
bl9jYXN0PGZzX3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSk7CisgICAgYXV0byBuc2Vj
cyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSAt
IHNlY3MpOworICAgIGlmIChuc2Vjcy5jb3VudCgpIDwgMCkgeworICAgICAgc2VjcyA9IHNlY3Mg
KyBmc19zZWNvbmRzKDEpOworICAgICAgbnNlY3MgPSBuc2VjcyArIGZzX3NlY29uZHMoMSk7Cisg
ICAgfQorICAgIHVzaW5nIFRMaW0gPSBudW1lcmljX2xpbWl0czxUaW1lVD47CisgICAgaWYgKHNl
Y3MuY291bnQoKSA+PSAwKQorICAgICAgcmV0dXJuIHNlY3MuY291bnQoKSA8PSBUTGltOjptYXgo
KTsKKyAgICByZXR1cm4gc2Vjcy5jb3VudCgpID49IFRMaW06Om1pbigpOworICB9CisKKyAgc3Rh
dGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIEZpbGVUaW1lVAorICBjb252ZXJ0X2Zy
b21fdGltZXNwZWMoVGltZVNwZWNUIHRtKSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwIHx8IHRt
LnR2X25zZWMgPT0gMCkgeworICAgICAgcmV0dXJuIEZpbGVUaW1lVChmc19zZWNvbmRzKHRtLnR2
X3NlYykgKworICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9u
Pihmc19uYW5vc2Vjb25kcyh0bS50dl9uc2VjKSkpOworICAgIH0gZWxzZSB7IC8vIHRtLnR2X3Nl
YyA8IDAKKyAgICAgIGF1dG8gYWRqX3N1YnNlYyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+
KGZzX3NlY29uZHMoMSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnNfbmFub3NlY29uZHModG0udHZfbnNlYykpOworICAgICAgYXV0byBEdXIg
PSBmc19zZWNvbmRzKHRtLnR2X3NlYyArIDEpIC0gYWRqX3N1YnNlYzsKKyAgICAgIHJldHVybiBG
aWxlVGltZVQoRHVyKTsKKyAgICB9CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgU3ViU2VjVD4K
KyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wKKyAgc2V0X3RpbWVz
X2NoZWNrZWQoVGltZVQqIHNlY19vdXQsIFN1YlNlY1QqIHN1YnNlY19vdXQsIEZpbGVUaW1lVCB0
cCkgeworICAgIGF1dG8gZHVyID0gdHAudGltZV9zaW5jZV9lcG9jaCgpOworICAgIGF1dG8gc2Vj
X2R1ciA9IGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oZHVyKTsKKyAgICBhdXRvIHN1YnNlY19k
dXIgPSBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihkdXIgLSBzZWNfZHVyKTsKKyAgICAv
LyBUaGUgdHZfbnNlYyBhbmQgdHZfdXNlYyBmaWVsZHMgbXVzdCBub3QgYmUgbmVnYXRpdmUgc28g
YWRqdXN0IGFjY29yZGluZ2x5CisgICAgaWYgKHN1YnNlY19kdXIuY291bnQoKSA8IDApIHsKKyAg
ICAgIGlmIChzZWNfZHVyLmNvdW50KCkgPiBtaW5fc2Vjb25kcykgeworICAgICAgICBzZWNfZHVy
ID0gc2VjX2R1ciAtIGZzX3NlY29uZHMoMSk7CisgICAgICAgIHN1YnNlY19kdXIgPSBzdWJzZWNf
ZHVyICsgZnNfc2Vjb25kcygxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN1YnNlY19kdXIg
PSBmc19uYW5vc2Vjb25kczo6emVybygpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2hl
Y2tlZF9zZXQoc2VjX291dCwgc2VjX2R1ci5jb3VudCgpKSAmJgorICAgICAgICAgICBjaGVja2Vk
X3NldChzdWJzZWNfb3V0LCBzdWJzZWNfZHVyLmNvdW50KCkpOworICB9CisgIHN0YXRpYyBfTElC
Q1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGNvbnZlcnRfdG9fdGltZXNwZWMoVGltZVNw
ZWNUJiBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZpbGVUaW1lVCB0cCkgeworICAgIGlmICghaXNfcmVwcmVzZW50
YWJsZSh0cCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHNldF90aW1lc19jaGVj
a2VkKCZkZXN0LnR2X3NlYywgJmRlc3QudHZfbnNlYywgdHApOworICB9Cit9OworCit1c2luZyBm
c190aW1lID0gdGltZV91dGlsPGZpbGVfdGltZV90eXBlLCB0aW1lX3QsIFRpbWVTcGVjPjsKKwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25z
dCYgc3QpIHsgcmV0dXJuIHN0LnN0X210aW1lc3BlYzsgfQorVGltZVNwZWMgZXh0cmFjdF9hdGlt
ZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0X2F0aW1lc3BlYzsgfQorI2Vsc2UKK1Rp
bWVTcGVjIGV4dHJhY3RfbXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGlt
OyB9CitUaW1lU3BlYyBleHRyYWN0X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Qu
c3RfYXRpbTsgfQorI2VuZGlmCisKKy8vIGFsbG93IHRoZSB1dGltZXMgaW1wbGVtZW50YXRpb24g
dG8gY29tcGlsZSBldmVuIGl0IHdlJ3JlIG5vdCBnb2luZworLy8gdG8gdXNlIGl0LgorCitib29s
IHBvc2l4X3V0aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25z
dCYgVFMsCisgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICB1c2luZyBuYW1l
c3BhY2UgY2hyb25vOworICBhdXRvIENvbnZlcnQgPSBbXShsb25nIG5zZWMpIHsKKyAgICB1c2lu
ZyBpbnRfdHlwZSA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDwgOjp0aW1ldmFsPigpLnR2X3VzZWMp
OworICAgIGF1dG8gZHVyID0gZHVyYXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KG5hbm9zZWNvbmRz
KG5zZWMpKS5jb3VudCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oZHVyKTsK
KyAgfTsKKyAgc3RydWN0IDo6dGltZXZhbCBDb252ZXJ0ZWRUU1syXSA9IHt7VFNbMF0udHZfc2Vj
LCBDb252ZXJ0KFRTWzBdLnR2X25zZWMpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7VFNbMV0udHZfc2VjLCBDb252ZXJ0KFRTWzFdLnR2X25zZWMpfX07CisgIGlmICg6
OnV0aW1lcyhwLmNfc3RyKCksIENvbnZlcnRlZFRTKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVy
ZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKwor
I2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorYm9vbCBwb3NpeF91dGltZW5zYXQo
Y29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAorICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6dXRpbWVuc2F0KEFUX0ZE
Q1dELCBwLmNfc3RyKCksIFRTLmRhdGEoKSwgMCkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVf
ZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKworYm9vbCBzZXRfZmlsZV90aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVT
cGVjLCAyPiBjb25zdCYgVFMsCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7
CisjaWYgIWRlZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQorICByZXR1cm4gcG9zaXhfdXRp
bWVzKHAsIFRTLCBlYyk7CisjZWxzZQorICByZXR1cm4gcG9zaXhfdXRpbWVuc2F0KHAsIFRTLCBl
Yyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRh
aWwKKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVz
eXN0ZW0vZmlsZXN5c3RlbV9jb21tb24uaCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVt
L2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4z
MkFQSSkKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPFdpbmRvd3MuaD4K
KyNlbHNlCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgor
CisvKiAjaW5jbHVkZSAiZmlsZXN5c3RlbV9jb21tb24uaCIgKi8KKworX0xJQkNQUF9CRUdJTl9O
QU1FU1BBQ0VfRklMRVNZU1RFTQorCituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisK
KyNpZiAhZGVmaW5lZChfTElCQ1BQX1dJTjMyQVBJKQordGVtcGxhdGUgPGNsYXNzIERpckVudFQs
IGNsYXNzID0gZGVjbHR5cGUoRGlyRW50VDo6ZF90eXBlKT4KK3N0YXRpYyBmaWxlX3R5cGUgZ2V0
X2ZpbGVfdHlwZShEaXJFbnRUKiBlbnQsIGludCkgeworICBzd2l0Y2ggKGVudC0+ZF90eXBlKSB7
CisgIGNhc2UgRFRfQkxLOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmJsb2NrOworICBjYXNlIERU
X0NIUjoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpjaGFyYWN0ZXI7CisgIGNhc2UgRFRfRElSOgor
ICAgIHJldHVybiBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKKyAgY2FzZSBEVF9GSUZPOgorICAgIHJl
dHVybiBmaWxlX3R5cGU6OmZpZm87CisgIGNhc2UgRFRfTE5LOgorICAgIHJldHVybiBmaWxlX3R5
cGU6OnN5bWxpbms7CisgIGNhc2UgRFRfUkVHOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnJlZ3Vs
YXI7CisgIGNhc2UgRFRfU09DSzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpzb2NrZXQ7CisgIC8v
IFVubGlrZSBpbiBsc3RhdCwgaGl0dGluZyAidW5rbm93biIgaGVyZSBzaW1wbHkgbWVhbnMgdGhh
dCB0aGUgdW5kZXJseWluZworICAvLyBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBkX3R5cGUu
IFJlcG9ydCBpcyBhcyAnbm9uZScgc28gd2UgY29ycmVjdGx5CisgIC8vIHNldCB0aGUgY2FjaGUg
dG8gZW1wdHkuCisgIGNhc2UgRFRfVU5LTk9XTjoKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4g
ZmlsZV90eXBlOjpub25lOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRGlyRW50VD4KK3N0YXRpYyBm
aWxlX3R5cGUgZ2V0X2ZpbGVfdHlwZShEaXJFbnRUKiBlbnQsIGxvbmcpIHsKKyAgcmV0dXJuIGZp
bGVfdHlwZTo6bm9uZTsKK30KKworc3RhdGljIHBhaXI8c3RyaW5nX3ZpZXcsIGZpbGVfdHlwZT4g
cG9zaXhfcmVhZGRpcihESVIqIGRpcl9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIHN0cnVjdCBkaXJl
bnQqIGRpcl9lbnRyeV9wdHIgPSBudWxscHRyOworICBlcnJubyA9IDA7IC8vIHplcm8gZXJybm8g
aW4gb3JkZXIgdG8gZGV0ZWN0IGVycm9ycworICBlYy5jbGVhcigpOworICBpZiAoKGRpcl9lbnRy
eV9wdHIgPSA6OnJlYWRkaXIoZGlyX3N0cmVhbSkpID09IG51bGxwdHIpIHsKKyAgICBpZiAoZXJy
bm8pCisgICAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4ge307CisgIH0gZWxz
ZSB7CisgICAgcmV0dXJuIHtkaXJfZW50cnlfcHRyLT5kX25hbWUsIGdldF9maWxlX3R5cGUoZGly
X2VudHJ5X3B0ciwgMCl9OworICB9Cit9CisjZWxzZQorCitzdGF0aWMgZmlsZV90eXBlIGdldF9m
aWxlX3R5cGUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIC8vYXV0byBhdHRycyA9
IGRhdGEuZHdGaWxlQXR0cmlidXRlczsKKyAgLy8gRklYTUUoRXJpY1dGKQorICByZXR1cm4gZmls
ZV90eXBlOjp1bmtub3duOworfQorc3RhdGljIHVpbnRtYXhfdCBnZXRfZmlsZV9zaXplKGNvbnN0
IFdJTjMyX0ZJTkRfREFUQSYgZGF0YSkgeworICByZXR1cm4gKGRhdGEubkZpbGVTaXplSGlnaHQg
KiAoTUFYRFdPUkQgKyAxKSkgKyBkYXRhLm5GaWxlU2l6ZUxvdzsKK30KK3N0YXRpYyBmaWxlX3Rp
bWVfdHlwZSBnZXRfd3JpdGVfdGltZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAg
VUxBUkdFX0lOVEVHRVIgdG1wOworICBGSUxFVElNRSYgdGltZSA9IGRhdGEuZnRMYXN0V3JpdGVU
aW1lOworICB0bXAudS5Mb3dQYXJ0ID0gdGltZS5kd0xvd0RhdGVUaW1lOworICB0bXAudS5IaWdo
UGFydCA9IHRpbWUuZHdIaWdoRGF0ZVRpbWU7CisgIHJldHVybiBmaWxlX3RpbWVfdHlwZShmaWxl
X3RpbWVfdHlwZTo6ZHVyYXRpb24odGltZS5RdWFkUGFydCkpOworfQorCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OkVycm9y
SGFuZGxlcjsKKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKK2NsYXNzIF9fZGlyX3N0
cmVhbSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJl
YW0mIG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9z
dHJlYW0oX19kaXJfc3RyZWFtJiYgX19kcykgbm9leGNlcHQgOiBfX3N0cmVhbV8oX19kcy5fX3N0
cmVhbV8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jvb3RfKG1vdmUoX19kcy5fX3Jvb3RfKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZW50cnlfKG1vdmUoX19kcy5fX2VudHJ5XykpIHsKKyAgICBf
X2RzLl9fc3RyZWFtXyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICB9CisKKyAgX19kaXJfc3Ry
ZWFtKGNvbnN0IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUm
IGVjKQorICAgICAgOiBfX3N0cmVhbV8oSU5WQUxJRF9IQU5ETEVfVkFMVUUpLCBfX3Jvb3RfKHJv
b3QpIHsKKyAgICBfX3N0cmVhbV8gPSA6OkZpbmRGaXJzdEZpbGVFeChyb290LmNfc3RyKCksICZf
X2RhdGFfKTsKKyAgICBpZiAoX19zdHJlYW1fID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Cisg
ICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgp
KTsKKyAgICAgIGNvbnN0IGJvb2wgaWdub3JlX3Blcm1pc3Npb25fZGVuaWVkID0KKyAgICAgICAg
ICBib29sKG9wdHMgJiBkaXJlY3Rvcnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7
CisgICAgICBpZiAoaWdub3JlX3Blcm1pc3Npb25fZGVuaWVkICYmIGVjLnZhbHVlKCkgPT0gRVJS
T1JfQUNDRVNTX0RFTklFRCkKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9leGNlcHQgeworICAgIGlmIChfX3N0cmVh
bV8gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICByZXR1cm47CisgICAgY2xvc2UoKTsK
KyAgfQorCisgIGJvb2wgZ29vZCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAh
PSBJTlZBTElEX0hBTkRMRV9WQUxVRTsgfQorCisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBl
YykgeworICAgIHdoaWxlICg6OkZpbmROZXh0RmlsZShfX3N0cmVhbV8sICZfX2RhdGFfKSkgewor
ICAgICAgaWYgKCFzdHJjbXAoX19kYXRhXy5jRmlsZU5hbWUsICIuIikgfHwgc3RyY21wKF9fZGF0
YV8uY0ZpbGVOYW1lLCAiLi4iKSkKKyAgICAgICAgY29udGludWU7CisgICAgICAvLyBGSVhNRTog
Q2FjaGUgbW9yZSBvZiB0aGlzCisgICAgICAvL2RpcmVjdG9yeV9lbnRyeTo6X19jYWNoZWRfZGF0
YSBjZGF0YTsKKyAgICAgIC8vY2RhdGEuX190eXBlXyA9IGdldF9maWxlX3R5cGUoX19kYXRhXyk7
CisgICAgICAvL2NkYXRhLl9fc2l6ZV8gPSBnZXRfZmlsZV9zaXplKF9fZGF0YV8pOworICAgICAg
Ly9jZGF0YS5fX3dyaXRlX3RpbWVfID0gZ2V0X3dyaXRlX3RpbWUoX19kYXRhXyk7CisgICAgICBf
X2VudHJ5Xy5fX2Fzc2lnbl9pdGVyX2VudHJ5KAorICAgICAgICAgIF9fcm9vdF8gLyBfX2RhdGFf
LmNGaWxlTmFtZSwKKyAgICAgICAgICBkaXJlY3RvcnlfZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVz
dWx0KGdldF9maWxlX3R5cGUoX19kYXRhKSkpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkp
OworICAgIGNsb3NlKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKK3ByaXZhdGU6CisgIGVy
cm9yX2NvZGUgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBlYzsKKyAgICBpZiAo
ITo6RmluZENsb3NlKF9fc3RyZWFtXykpCisgICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0
RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgpKTsKKyAgICBfX3N0cmVhbV8gPSBJTlZBTElEX0hB
TkRMRV9WQUxVRTsKKyAgICByZXR1cm4gZWM7CisgIH0KKworICBIQU5ETEUgX19zdHJlYW1fe0lO
VkFMSURfSEFORExFX1ZBTFVFfTsKKyAgV0lOMzJfRklORF9EQVRBIF9fZGF0YV87CisKK3B1Ymxp
YzoKKyAgcGF0aCBfX3Jvb3RfOworICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2Vs
c2UKK2NsYXNzIF9fZGlyX3N0cmVhbSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVs
ZXRlOworICBfX2Rpcl9zdHJlYW0mIG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRl
bGV0ZTsKKworICBfX2Rpcl9zdHJlYW0oX19kaXJfc3RyZWFtJiYgb3RoZXIpIG5vZXhjZXB0IDog
X19zdHJlYW1fKG90aGVyLl9fc3RyZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3Jvb3RfKG1vdmUob3RoZXIuX19yb290XykpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShv
dGhlci5fX2VudHJ5XykpIHsKKyAgICBvdGhlci5fX3N0cmVhbV8gPSBudWxscHRyOworICB9CisK
KyAgX19kaXJfc3RyZWFtKGNvbnN0IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMs
IGVycm9yX2NvZGUmIGVjKQorICAgICAgOiBfX3N0cmVhbV8obnVsbHB0ciksIF9fcm9vdF8ocm9v
dCkgeworICAgIGlmICgoX19zdHJlYW1fID0gOjpvcGVuZGlyKHJvb3QuY19zdHIoKSkpID09IG51
bGxwdHIpIHsKKyAgICAgIGVjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgICAgICBjb25z
dCBib29sIGFsbG93X2VhY2VzcyA9CisgICAgICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29w
dGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOworICAgICAgaWYgKGFsbG93X2VhY2VzcyAm
JiBlYy52YWx1ZSgpID09IEVBQ0NFUykKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYWR2YW5jZShlYyk7CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9l
eGNlcHQgeworICAgIGlmIChfX3N0cmVhbV8pCisgICAgICBjbG9zZSgpOworICB9CisKKyAgYm9v
bCBnb29kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19zdHJlYW1fICE9IG51bGxwdHI7IH0K
KworICBib29sIGFkdmFuY2UoZXJyb3JfY29kZSYgZWMpIHsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgYXV0byBzdHJfdHlwZV9wYWlyID0gZGV0YWlsOjpwb3NpeF9yZWFkZGlyKF9fc3RyZWFt
XywgZWMpOworICAgICAgYXV0byYgc3RyID0gc3RyX3R5cGVfcGFpci5maXJzdDsKKyAgICAgIGlm
IChzdHIgPT0gIi4iIHx8IHN0ciA9PSAiLi4iKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAg
fSBlbHNlIGlmIChlYyB8fCBzdHIuZW1wdHkoKSkgeworICAgICAgICBjbG9zZSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICBfX2VudHJ5Xy5fX2Fzc2ln
bl9pdGVyX2VudHJ5KAorICAgICAgICAgICAgX19yb290XyAvIHN0ciwKKyAgICAgICAgICAgIGRp
cmVjdG9yeV9lbnRyeTo6X19jcmVhdGVfaXRlcl9yZXN1bHQoc3RyX3R5cGVfcGFpci5zZWNvbmQp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9CisKK3ByaXZhdGU6
CisgIGVycm9yX2NvZGUgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBtX2VjOwor
ICAgIGlmICg6OmNsb3NlZGlyKF9fc3RyZWFtXykgPT0gLTEpCisgICAgICBtX2VjID0gZGV0YWls
OjpjYXB0dXJlX2Vycm5vKCk7CisgICAgX19zdHJlYW1fID0gbnVsbHB0cjsKKyAgICByZXR1cm4g
bV9lYzsKKyAgfQorCisgIERJUiogX19zdHJlYW1fe251bGxwdHJ9OworCitwdWJsaWM6CisgIHBh
dGggX19yb290XzsKKyAgZGlyZWN0b3J5X2VudHJ5IF9fZW50cnlfOworfTsKKyNlbmRpZgorCisv
LyBkaXJlY3RvcnlfaXRlcmF0b3IKKworZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRl
cmF0b3IoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzKSB7CisgIEVycm9ySGFu
ZGxlcjx2b2lkPiBlcnIoImRpcmVjdG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5X2l0ZXJhdG9yKC4u
LikiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgX19pbXBfID0gbWFrZV9zaGFy
ZWQ8X19kaXJfc3RyZWFtPihwLCBvcHRzLCBtX2VjKTsKKyAgaWYgKGVjKQorICAgICplYyA9IG1f
ZWM7CisgIGlmICghX19pbXBfLT5nb29kKCkpIHsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBp
ZiAobV9lYykKKyAgICAgIGVyci5yZXBvcnQobV9lYyk7CisgIH0KK30KKworZGlyZWN0b3J5X2l0
ZXJhdG9yJiBkaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7
CisgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIkF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGFuIGlu
dmFsaWQgaXRlcmF0b3IiKTsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0
ZXJhdG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAo
IV9faW1wXy0+YWR2YW5jZShtX2VjKSkgeworICAgIHBhdGggcm9vdCA9IG1vdmUoX19pbXBfLT5f
X3Jvb3RfKTsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5y
ZXBvcnQobV9lYywgImF0IHJvb3QgXCIlc1wiIiwgcm9vdCk7CisgIH0KKyAgcmV0dXJuICp0aGlz
OworfQorCitkaXJlY3RvcnlfZW50cnkgY29uc3QmIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJl
ZmVyZW5jZSgpIGNvbnN0IHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0
byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIGl0ZXJhdG9yIik7CisgIHJldHVybiBfX2ltcF8tPl9f
ZW50cnlfOworfQorCisvLyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK3N0cnVjdCBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3NoYXJlZF9pbXAgeworICBzdGFjazxfX2Rp
cl9zdHJlYW0+IF9fc3RhY2tfOworICBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdGlvbnNfOworfTsK
KworcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcigKKyAgICBjb25zdCBwYXRoJiBwLCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHQsIGVycm9yX2Nv
ZGUqIGVjKQorICAgIDogX19pbXBfKG51bGxwdHIpLCBfX3JlY18odHJ1ZSkgeworICBFcnJvckhh
bmRsZXI8dm9pZD4gZXJyKCJyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIiwgZWMsICZwKTsK
KworICBlcnJvcl9jb2RlIG1fZWM7CisgIF9fZGlyX3N0cmVhbSBuZXdfcyhwLCBvcHQsIG1fZWMp
OworICBpZiAobV9lYykKKyAgICBlcnIucmVwb3J0KG1fZWMpOworICBpZiAobV9lYyB8fCAhbmV3
X3MuZ29vZCgpKQorICAgIHJldHVybjsKKworICBfX2ltcF8gPSBtYWtlX3NoYXJlZDxfX3NoYXJl
ZF9pbXA+KCk7CisgIF9faW1wXy0+X19vcHRpb25zXyA9IG9wdDsKKyAgX19pbXBfLT5fX3N0YWNr
Xy5wdXNoKG1vdmUobmV3X3MpKTsKK30KKwordm9pZCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOjpfX3BvcChlcnJvcl9jb2RlKiBlYykgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJQ
b3BwaW5nIHRoZSBlbmQgaXRlcmF0b3IiKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOwor
ICBfX2ltcF8tPl9fc3RhY2tfLnBvcCgpOworICBpZiAoX19pbXBfLT5fX3N0YWNrXy5zaXplKCkg
PT0gMCkKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgZWxzZQorICAgIF9fYWR2YW5jZShlYyk7Cit9
CisKK2RpcmVjdG9yeV9vcHRpb25zIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wdGlv
bnMoKSBjb25zdCB7CisgIHJldHVybiBfX2ltcF8tPl9fb3B0aW9uc187Cit9CisKK2ludCByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpkZXB0aCgpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1w
Xy0+X19zdGFja18uc2l6ZSgpIC0gMTsKK30KKworY29uc3QgZGlyZWN0b3J5X2VudHJ5JiByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICByZXR1
cm4gX19pbXBfLT5fX3N0YWNrXy50b3AoKS5fX2VudHJ5XzsKK30KKworcmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvciYKK3JlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50
KGVycm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHJl
Y3Vyc2lvbl9wZW5kaW5nKCkpIHsKKyAgICBpZiAoX190cnlfcmVjdXJzaW9uKGVjKSB8fCAoZWMg
JiYgKmVjKSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgfQorICBfX3JlY18gPSB0cnVlOworICBf
X2FkdmFuY2UoZWMpOworICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvcjo6X19hZHZhbmNlKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjx2b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIs
IGVjKTsKKworICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3IgZW5kX2l0OworICBhdXRvJiBzdGFj
ayA9IF9faW1wXy0+X19zdGFja187CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgd2hpbGUgKHN0YWNr
LnNpemUoKSA+IDApIHsKKyAgICBpZiAoc3RhY2sudG9wKCkuYWR2YW5jZShtX2VjKSkKKyAgICAg
IHJldHVybjsKKyAgICBpZiAobV9lYykKKyAgICAgIGJyZWFrOworICAgIHN0YWNrLnBvcCgpOwor
ICB9CisKKyAgaWYgKG1fZWMpIHsKKyAgICBwYXRoIHJvb3QgPSBtb3ZlKHN0YWNrLnRvcCgpLl9f
cm9vdF8pOworICAgIF9faW1wXy5yZXNldCgpOworICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJv
b3QgXCIlc1wiIiwgcm9vdCk7CisgIH0gZWxzZSB7CisgICAgX19pbXBfLnJlc2V0KCk7CisgIH0K
K30KKworYm9vbCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3RyeV9yZWN1cnNpb24o
ZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIiwgZWMpOworCisgIGJvb2wgcmVjX3N5bSA9
IGJvb2wob3B0aW9ucygpICYgZGlyZWN0b3J5X29wdGlvbnM6OmZvbGxvd19kaXJlY3Rvcnlfc3lt
bGluayk7CisKKyAgYXV0byYgY3Vycl9pdCA9IF9faW1wXy0+X19zdGFja18udG9wKCk7CisKKyAg
Ym9vbCBza2lwX3JlYyA9IGZhbHNlOworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICghcmVjX3N5
bSkgeworICAgIGZpbGVfc3RhdHVzIHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfc3ltX2Z0KCZt
X2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xl
YXIoKTsKKyAgICBpZiAobV9lYyB8fCBpc19zeW1saW5rKHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0
KSkKKyAgICAgIHNraXBfcmVjID0gdHJ1ZTsKKyAgfSBlbHNlIHsKKyAgICBmaWxlX3N0YXR1cyBz
dChjdXJyX2l0Ll9fZW50cnlfLl9fZ2V0X2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3Rh
dHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8fCAhaXNf
ZGlyZWN0b3J5KHN0KSkKKyAgICAgIHNraXBfcmVjID0gdHJ1ZTsKKyAgfQorCisgIGlmICghc2tp
cF9yZWMpIHsKKyAgICBfX2Rpcl9zdHJlYW0gbmV3X2l0KGN1cnJfaXQuX19lbnRyeV8ucGF0aCgp
LCBfX2ltcF8tPl9fb3B0aW9uc18sIG1fZWMpOworICAgIGlmIChuZXdfaXQuZ29vZCgpKSB7Cisg
ICAgICBfX2ltcF8tPl9fc3RhY2tfLnB1c2gobW92ZShuZXdfaXQpKTsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgfQorICBpZiAobV9lYykgeworICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFj
ZXNzID0KKyAgICAgICAgYm9vbChfX2ltcF8tPl9fb3B0aW9uc18gJiBkaXJlY3Rvcnlfb3B0aW9u
czo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgaWYgKG1fZWMudmFsdWUoKSA9PSBFQUND
RVMgJiYgYWxsb3dfZWFjZXNzKSB7CisgICAgICBpZiAoZWMpCisgICAgICAgIGVjLT5jbGVhcigp
OworICAgIH0gZWxzZSB7CisgICAgICBwYXRoIGF0X2VudCA9IG1vdmUoY3Vycl9pdC5fX2VudHJ5
Xy5fX3BfKTsKKyAgICAgIF9faW1wXy5yZXNldCgpOworICAgICAgZXJyLnJlcG9ydChtX2VjLCAi
YXR0ZW1wdGluZyByZWN1cnNpb24gaW50byBcIiVzXCIiLCBhdF9lbnQpOworICAgIH0KKyAgfQor
ICByZXR1cm4gZmFsc2U7Cit9CisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisK
Ky8qIC0tIEVORCBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworLyog
LS0gQkVHSU4gZmlsZXN5c3RlbS9pbnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qID09PS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS09PT0KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBfX211bG90aTQsIGFu
ZCBpcyBzdG9sZW4gZnJvbSB0aGUgY29tcGlsZXJfcnQgbGlicmFyeS4KKyAqCisgKiBGSVhNRTog
d2Ugc3RlYWwgYW5kIHJlLWNvbXBpbGUgaXQgaW50byBmaWxlc3lzdGVtLCB3aGljaCB1c2VzIF9f
aW50MTI4X3QsCisgKiBhbmQgcmVxdWlyZXMgdGhpcyBidWlsdGluIHdoZW4gc2FuaXRpemVkLiBT
ZWUgbGx2bS5vcmcvUFIzMDY0MworICoKKyAqID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisv
KiAjaW5jbHVkZSAiX19jb25maWciICovCisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2lmbmRlZiBf
X1NJWkVPRl9JTlQxMjhfXworI2RlZmluZSBfTElCQ1BQX0hBU19OT19JTlQxMjgKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fSU5UMTI4KQorCisjaWZkZWYgX19jbGFuZ19f
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgorI2VuZGlmCitleHRlcm4gIkMiIF9fYXR0
cmlidXRlX18oKG5vX3Nhbml0aXplKCJ1bmRlZmluZWQiKSkpCitfX2ludDEyOF90IF9fbXVsb3Rp
NChfX2ludDEyOF90IGEsIF9faW50MTI4X3QgYiwgaW50KiBvdmVyZmxvdykgeworICBjb25zdCBp
bnQgTiA9IChpbnQpKHNpemVvZihfX2ludDEyOF90KSAqIENIQVJfQklUKTsKKyAgY29uc3QgX19p
bnQxMjhfdCBNSU4gPSAoX19pbnQxMjhfdCkxIDw8IChOIC0gMSk7CisgIGNvbnN0IF9faW50MTI4
X3QgTUFYID0gfk1JTjsKKyAgKm92ZXJmbG93ID0gMDsKKyAgX19pbnQxMjhfdCByZXN1bHQgPSBh
ICogYjsKKyAgaWYgKGEgPT0gTUlOKSB7CisgICAgaWYgKGIgIT0gMCAmJiBiICE9IDEpCisgICAg
ICAqb3ZlcmZsb3cgPSAxOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKGIgPT0gTUlO
KSB7CisgICAgaWYgKGEgIT0gMCAmJiBhICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICAg
IHJldHVybiByZXN1bHQ7CisgIH0KKyAgX19pbnQxMjhfdCBzYSA9IGEgPj4gKE4gLSAxKTsKKyAg
X19pbnQxMjhfdCBhYnNfYSA9IChhIF4gc2EpIC0gc2E7CisgIF9faW50MTI4X3Qgc2IgPSBiID4+
IChOIC0gMSk7CisgIF9faW50MTI4X3QgYWJzX2IgPSAoYiBeIHNiKSAtIHNiOworICBpZiAoYWJz
X2EgPCAyIHx8IGFic19iIDwgMikKKyAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc2EgPT0gc2Ip
IHsKKyAgICBpZiAoYWJzX2EgPiBNQVggLyBhYnNfYikKKyAgICAgICpvdmVyZmxvdyA9IDE7Cisg
IH0gZWxzZSB7CisgICAgaWYgKGFic19hID4gTUlOIC8gLWFic19iKQorICAgICAgKm92ZXJmbG93
ID0gMTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorI2lmZGVmIF9fY2xhbmdfXworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyNlbmRpZgorCisvKiAtLSBFTkQgZmls
ZXN5c3RlbS9pbnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0
ZW0vb3BlcmF0aW9ucy5jcHAgLS0gKi8KKworLyogI2luY2x1ZGUgImZpbGVzeXN0ZW0iICovCisj
aW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4K
KyNpbmNsdWRlIDxyYW5kb20+IC8qIGZvciB1bmlxdWVfcGF0aCAqLworI2luY2x1ZGUgPHN0cmlu
Z192aWV3PgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNs
dWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNsaW1pdHM+CisKKy8qICNpbmNsdWRlICJmaWxlc3lz
dGVtX2NvbW1vbi5oIiAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0
YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNs
dWRlIDxmY250bC5oPiAvKiB2YWx1ZXMgZm9yIGZjaG1vZGF0ICovCisKKyNpZiBkZWZpbmVkKF9f
bGludXhfXykKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaWYgTElOVVhfVkVSU0lPTl9D
T0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDMzKQorI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5o
PgorI2RlZmluZSBfTElCQ1BQX1VTRV9TRU5ERklMRQorI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgX19oYXNfaW5jbHVkZSg8Y29weWZpbGUuaD4pCisjaW5jbHVkZSA8Y29weWZp
bGUuaD4KKyNkZWZpbmUgX0xJQkNQUF9VU0VfQ09QWUZJTEUKKyNlbmRpZgorCisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKQorI2RlZmluZSBfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FCisjZW5kaWYK
KworI2lmICFkZWZpbmVkKENMT0NLX1JFQUxUSU1FKSB8fCAhZGVmaW5lZChfTElCQ1BQX1VTRV9D
TE9DS19HRVRUSU1FKQorI2luY2x1ZGUgPHN5cy90aW1lLmg+IC8vIGZvciBnZXR0aW1lb2ZkYXkg
YW5kIHRpbWV2YWwKKyNlbmRpZiAgICAgICAgICAgICAgICAvLyAhZGVmaW5lZChDTE9DS19SRUFM
VElNRSkKKworI2lmIGRlZmluZWQoX0xJQkNQUF9DT01QSUxFUl9HQ0MpCisjaWYgX0dOVUNfVkVS
IDwgNTAwCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1maWVsZC1p
bml0aWFsaXplcnMiCisjZW5kaWYKKyNlbmRpZgorCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9G
SUxFU1lTVEVNCisKK25hbWVzcGFjZSB7CituYW1lc3BhY2UgcGFyc2VyIHsKKwordXNpbmcgc3Ry
aW5nX3ZpZXdfdCA9IHBhdGg6Ol9fc3RyaW5nX3ZpZXc7Cit1c2luZyBzdHJpbmdfdmlld19wYWly
ID0gcGFpcjxzdHJpbmdfdmlld190LCBzdHJpbmdfdmlld190PjsKK3VzaW5nIFBvc1B0ciA9IHBh
dGg6OnZhbHVlX3R5cGUgY29uc3QqOworCitzdHJ1Y3QgUGF0aFBhcnNlciB7CisgIGVudW0gUGFy
c2VyU3RhdGUgOiB1bnNpZ25lZCBjaGFyIHsKKyAgICAvLyBaZXJvIGlzIGEgc3BlY2lhbCBzZW50
aW5lbCB2YWx1ZSB1c2VkIGJ5IGRlZmF1bHQgY29uc3RydWN0ZWQgaXRlcmF0b3JzLgorICAgIFBT
X0JlZm9yZUJlZ2luID0gcGF0aDo6aXRlcmF0b3I6Ol9CZWZvcmVCZWdpbiwKKyAgICBQU19JblJv
b3ROYW1lID0gcGF0aDo6aXRlcmF0b3I6Ol9JblJvb3ROYW1lLAorICAgIFBTX0luUm9vdERpciA9
IHBhdGg6Oml0ZXJhdG9yOjpfSW5Sb290RGlyLAorICAgIFBTX0luRmlsZW5hbWVzID0gcGF0aDo6
aXRlcmF0b3I6Ol9JbkZpbGVuYW1lcywKKyAgICBQU19JblRyYWlsaW5nU2VwID0gcGF0aDo6aXRl
cmF0b3I6Ol9JblRyYWlsaW5nU2VwLAorICAgIFBTX0F0RW5kID0gcGF0aDo6aXRlcmF0b3I6Ol9B
dEVuZAorICB9OworCisgIGNvbnN0IHN0cmluZ192aWV3X3QgUGF0aDsKKyAgc3RyaW5nX3ZpZXdf
dCBSYXdFbnRyeTsKKyAgUGFyc2VyU3RhdGUgU3RhdGU7CisKK3ByaXZhdGU6CisgIFBhdGhQYXJz
ZXIoc3RyaW5nX3ZpZXdfdCBQLCBQYXJzZXJTdGF0ZSBTdGF0ZSkgbm9leGNlcHQgOiBQYXRoKFAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhdGUoU3RhdGUpIHt9CisKK3B1YmxpYzoKKyAgUGF0aFBhcnNlcihzdHJpbmdfdmll
d190IFAsIHN0cmluZ192aWV3X3QgRSwgdW5zaWduZWQgY2hhciBTKQorICAgICAgOiBQYXRoKFAp
LCBSYXdFbnRyeShFKSwgU3RhdGUoc3RhdGljX2Nhc3Q8UGFyc2VyU3RhdGU+KFMpKSB7CisgICAg
Ly8gUyBjYW5ub3QgYmUgJzAnIG9yIFBTX0JlZm9yZUJlZ2luLgorICB9CisKKyAgc3RhdGljIFBh
dGhQYXJzZXIgQ3JlYXRlQmVnaW4oc3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0
aFBhcnNlciBQUChQLCBQU19CZWZvcmVCZWdpbik7CisgICAgUFAuaW5jcmVtZW50KCk7CisgICAg
cmV0dXJuIFBQOworICB9CisKKyAgc3RhdGljIFBhdGhQYXJzZXIgQ3JlYXRlRW5kKHN0cmluZ192
aWV3X3QgUCkgbm9leGNlcHQgeworICAgIFBhdGhQYXJzZXIgUFAoUCwgUFNfQXRFbmQpOworICAg
IHJldHVybiBQUDsKKyAgfQorCisgIFBvc1B0ciBwZWVrKCkgY29uc3Qgbm9leGNlcHQgeworICAg
IGF1dG8gVGtFbmQgPSBnZXROZXh0VG9rZW5TdGFydFBvcygpOworICAgIGF1dG8gRW5kID0gZ2V0
QWZ0ZXJCYWNrKCk7CisgICAgcmV0dXJuIFRrRW5kID09IEVuZCA/IG51bGxwdHIgOiBUa0VuZDsK
KyAgfQorCisgIHZvaWQgaW5jcmVtZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0ciBF
bmQgPSBnZXRBZnRlckJhY2soKTsKKyAgICBjb25zdCBQb3NQdHIgU3RhcnQgPSBnZXROZXh0VG9r
ZW5TdGFydFBvcygpOworICAgIGlmIChTdGFydCA9PSBFbmQpCisgICAgICByZXR1cm4gbWFrZVN0
YXRlKFBTX0F0RW5kKTsKKworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9y
ZUJlZ2luOiB7CisgICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFN0YXJ0LCBF
bmQpOworICAgICAgaWYgKFRrRW5kKQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9v
dERpciwgU3RhcnQsIFRrRW5kKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0
ZShQU19JbkZpbGVuYW1lcywgU3RhcnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKKyAgICB9
CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmls
ZW5hbWVzLCBTdGFydCwgY29uc3VtZU5hbWUoU3RhcnQsIEVuZCkpOworCisgICAgY2FzZSBQU19J
bkZpbGVuYW1lczogeworICAgICAgUG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoU3Rh
cnQsIEVuZCk7CisgICAgICBpZiAoU2VwRW5kICE9IEVuZCkgeworICAgICAgICBQb3NQdHIgVGtF
bmQgPSBjb25zdW1lTmFtZShTZXBFbmQsIEVuZCk7CisgICAgICAgIGlmIChUa0VuZCkKKyAgICAg
ICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTZXBFbmQsIFRrRW5kKTsKKyAg
ICAgIH0KKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU3RhcnQsIFNl
cEVuZCk7CisgICAgfQorCisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgICAgcmV0dXJu
IG1ha2VTdGF0ZShQU19BdEVuZCk7CisKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2Fz
ZSBQU19BdEVuZDoKKyAgICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKwor
ICB2b2lkIGRlY3JlbWVudCgpIG5vZXhjZXB0IHsKKyAgICBjb25zdCBQb3NQdHIgUkVuZCA9IGdl
dEJlZm9yZUZyb250KCk7CisgICAgY29uc3QgUG9zUHRyIFJTdGFydCA9IGdldEN1cnJlbnRUb2tl
blN0YXJ0UG9zKCkgLSAxOworICAgIGlmIChSU3RhcnQgPT0gUkVuZCkgLy8gd2UncmUgZGVjcmVt
ZW50aW5nIHRoZSBiZWdpbgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19CZWZvcmVCZWdpbik7
CisKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19BdEVuZDogeworICAgICAgLy8g
VHJ5IHRvIGNvbnN1bWUgYSB0cmFpbGluZyBzZXBhcmF0b3Igb3Igcm9vdCBkaXJlY3RvcnkgZmly
c3QuCisgICAgICBpZiAoUG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoUlN0YXJ0LCBS
RW5kKSkgeworICAgICAgICBpZiAoU2VwRW5kID09IFJFbmQpCisgICAgICAgICAgcmV0dXJuIG1h
a2VTdGF0ZShQU19JblJvb3REaXIsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VTdGF0ZShQU19JblRyYWlsaW5nU2VwLCBTZXBFbmQgKyAxLCBSU3RhcnQgKyAx
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFBvc1B0ciBUa1N0YXJ0ID0gY29uc3VtZU5hbWUo
UlN0YXJ0LCBSRW5kKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywg
VGtTdGFydCArIDEsIFJTdGFydCArIDEpOworICAgICAgfQorICAgIH0KKyAgICBjYXNlIFBTX0lu
VHJhaWxpbmdTZXA6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBjb25z
dW1lTmFtZShSU3RhcnQsIFJFbmQpICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgUlN0YXJ0
ICsgMSk7CisgICAgY2FzZSBQU19JbkZpbGVuYW1lczogeworICAgICAgUG9zUHRyIFNlcEVuZCA9
IGNvbnN1bWVTZXBhcmF0b3IoUlN0YXJ0LCBSRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgPT0gUkVu
ZCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3REaXIsIFBhdGguZGF0YSgpLCBS
U3RhcnQgKyAxKTsKKyAgICAgIFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgUkVu
ZCk7CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBUa0VuZCArIDEsIFNl
cEVuZCArIDEpOworICAgIH0KKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIC8vIHJldHVy
biBtYWtlU3RhdGUoUFNfSW5Sb290TmFtZSwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOworICAg
IGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgX0xJ
QkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0KKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEg
dmlldyB3aXRoIHRoZSAicHJlZmVycmVkIHJlcHJlc2VudGF0aW9uIiBvZiB0aGUgY3VycmVudAor
ICAvLy8gICBlbGVtZW50LiBGb3IgZXhhbXBsZSB0cmFpbGluZyBzZXBhcmF0b3JzIGFyZSByZXBy
ZXNlbnRlZCBhcyBhICcuJworICBzdHJpbmdfdmlld190IG9wZXJhdG9yKigpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAg
ICBjYXNlIFBTX0F0RW5kOgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgUFNfSW5Sb290RGly
OgorICAgICAgcmV0dXJuICIvIjsKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICBy
ZXR1cm4gIiI7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfSW5GaWxlbmFt
ZXM6CisgICAgICByZXR1cm4gUmF3RW50cnk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFC
TEUoKTsKKyAgfQorCisgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIFN0YXRlICE9IFBTX0JlZm9yZUJlZ2luICYmIFN0YXRlICE9IFBTX0F0RW5k
OworICB9CisKKyAgUGF0aFBhcnNlciYgb3BlcmF0b3IrKygpIG5vZXhjZXB0IHsKKyAgICBpbmNy
ZW1lbnQoKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRv
ci0tKCkgbm9leGNlcHQgeworICAgIGRlY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAg
fQorCisgIGJvb2wgaW5Sb290UGF0aCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3Rh
dGUgPT0gUFNfSW5Sb290RGlyIHx8IFN0YXRlID09IFBTX0luUm9vdE5hbWU7CisgIH0KKworcHJp
dmF0ZToKKyAgdm9pZCBtYWtlU3RhdGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUsIFBvc1B0ciBTdGFy
dCwgUG9zUHRyIEVuZCkgbm9leGNlcHQgeworICAgIFN0YXRlID0gTmV3U3RhdGU7CisgICAgUmF3
RW50cnkgPSBzdHJpbmdfdmlld190KFN0YXJ0LCBFbmQgLSBTdGFydCk7CisgIH0KKyAgdm9pZCBt
YWtlU3RhdGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUpIG5vZXhjZXB0IHsKKyAgICBTdGF0ZSA9IE5l
d1N0YXRlOworICAgIFJhd0VudHJ5ID0ge307CisgIH0KKworICBQb3NQdHIgZ2V0QWZ0ZXJCYWNr
KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gUGF0aC5kYXRhKCkgKyBQYXRoLnNpemUoKTsgfQor
CisgIFBvc1B0ciBnZXRCZWZvcmVGcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGgu
ZGF0YSgpIC0gMTsgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmly
c3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgLy8vICAgbGV4ZWQgZWxlbWVudC4K
KyAgUG9zUHRyIGdldE5leHRUb2tlblN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHN3
aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgcmV0dXJuIFBh
dGguZGF0YSgpOworICAgIGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0luUm9vdERp
cjoKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAgICAgcmV0dXJuICZSYXdFbnRyeS5iYWNr
KCkgKyAxOworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICBjYXNlIFBTX0F0RW5kOgor
ICAgICAgcmV0dXJuIGdldEFmdGVyQmFjaygpOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hB
QkxFKCk7CisgIH0KKworICAvLy8gXGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0
IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudGx5IGxleGVkCisgIC8vLyAgIGVsZW1lbnQuCisgIFBv
c1B0ciBnZXRDdXJyZW50VG9rZW5TdGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0
Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICBjYXNlIFBTX0luUm9v
dE5hbWU6CisgICAgICByZXR1cm4gJlBhdGguZnJvbnQoKTsKKyAgICBjYXNlIFBTX0luUm9vdERp
cjoKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoK
KyAgICAgIHJldHVybiAmUmF3RW50cnkuZnJvbnQoKTsKKyAgICBjYXNlIFBTX0F0RW5kOgorICAg
ICAgcmV0dXJuICZQYXRoLmJhY2soKSArIDE7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFC
TEUoKTsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lU2VwYXJhdG9yKFBvc1B0ciBQLCBQb3NQdHIg
RW5kKSBjb25zdCBub2V4Y2VwdCB7CisgICAgaWYgKFAgPT0gRW5kIHx8ICpQICE9ICcvJykKKyAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IGludCBJbmMgPSBQIDwgRW5kID8gMSA6IC0x
OworICAgIFAgKz0gSW5jOworICAgIHdoaWxlIChQICE9IEVuZCAmJiAqUCA9PSAnLycpCisgICAg
ICBQICs9IEluYzsKKyAgICByZXR1cm4gUDsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lTmFtZShQ
b3NQdHIgUCwgUG9zUHRyIEVuZCkgY29uc3Qgbm9leGNlcHQgeworICAgIGlmIChQID09IEVuZCB8
fCAqUCA9PSAnLycpCisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBpbnQgSW5jID0g
UCA8IEVuZCA/IDEgOiAtMTsKKyAgICBQICs9IEluYzsKKyAgICB3aGlsZSAoUCAhPSBFbmQgJiYg
KlAgIT0gJy8nKQorICAgICAgUCArPSBJbmM7CisgICAgcmV0dXJuIFA7CisgIH0KK307CisKK3N0
YXRpYyBzdHJpbmdfdmlld19wYWlyIHNlcGFyYXRlX2ZpbGVuYW1lKHN0cmluZ192aWV3X3QgY29u
c3QmIHMpIHsKKyAgaWYgKHMgPT0gIi4iIHx8IHMgPT0gIi4uIiB8fCBzLmVtcHR5KCkpCisgICAg
cmV0dXJuIHN0cmluZ192aWV3X3BhaXJ7cywgIiJ9OworICBhdXRvIHBvcyA9IHMuZmluZF9sYXN0
X29mKCcuJyk7CisgIGlmIChwb3MgPT0gc3RyaW5nX3ZpZXdfdDo6bnBvcyB8fCBwb3MgPT0gMCkK
KyAgICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntzLCBzdHJpbmdfdmlld190e319OworICByZXR1
cm4gc3RyaW5nX3ZpZXdfcGFpcntzLnN1YnN0cigwLCBwb3MpLCBzLnN1YnN0cihwb3MpfTsKK30K
Kworc3RhdGljIHN0cmluZ192aWV3X3QgY3JlYXRlVmlldyhQb3NQdHIgUywgUG9zUHRyIEUpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIHtTLCBzdGF0aWNfY2FzdDxzaXplX3Q+KEUgLSBTKSArIDF9Owor
fQorCit9IC8vIG5hbWVzcGFjZSBwYXJzZXIKK30gLy8gbmFtZXNwYWNlCisKKy8vICAgICAgICAg
ICAgICAgICAgICAgICBQT1NJWCBIRUxQRVJTCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFtZXNw
YWNlIHsKKwordXNpbmcgdmFsdWVfdHlwZSA9IHBhdGg6OnZhbHVlX3R5cGU7Cit1c2luZyBzdHJp
bmdfdHlwZSA9IHBhdGg6OnN0cmluZ190eXBlOworCitzdHJ1Y3QgRmlsZURlc2NyaXB0b3Igewor
ICBjb25zdCBwYXRoJiBuYW1lOworICBpbnQgZmQgPSAtMTsKKyAgU3RhdFQgbV9zdGF0OworICBm
aWxlX3N0YXR1cyBtX3N0YXR1czsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgc3Rh
dGljIEZpbGVEZXNjcmlwdG9yIGNyZWF0ZShjb25zdCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywg
QXJncy4uLiBhcmdzKSB7CisgICAgZWMuY2xlYXIoKTsKKyAgICBpbnQgZmQ7CisgICAgaWYgKChm
ZCA9IDo6b3BlbihwLT5jX3N0cigpLCBhcmdzLi4uKSkgPT0gLTEpIHsKKyAgICAgIGVjID0gY2Fw
dHVyZV9lcnJubygpOworICAgICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9ye3B9OworICAgIH0KKyAg
ICByZXR1cm4gRmlsZURlc2NyaXB0b3IocCwgZmQpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
Li4uIEFyZ3M+CisgIHN0YXRpYyBGaWxlRGVzY3JpcHRvciBjcmVhdGVfd2l0aF9zdGF0dXMoY29u
c3QgcGF0aCogcCwgZXJyb3JfY29kZSYgZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJncy4uLiBhcmdzKSB7CisgICAgRmlsZURlc2NyaXB0b3IgZmQgPSBj
cmVhdGUocCwgZWMsIGFyZ3MuLi4pOworICAgIGlmICghZWMpCisgICAgICBmZC5yZWZyZXNoX3N0
YXR1cyhlYyk7CisKKyAgICByZXR1cm4gZmQ7CisgIH0KKworICBmaWxlX3N0YXR1cyBnZXRfc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgU3RhdFQgY29uc3QmIGdldF9zdGF0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0OyB9CisKKyAgYm9vbCBzdGF0dXNfa25vd24oKSBjb25z
dCB7IHJldHVybiBfVlNURF9GUzo6c3RhdHVzX2tub3duKG1fc3RhdHVzKTsgfQorCisgIGZpbGVf
c3RhdHVzIHJlZnJlc2hfc3RhdHVzKGVycm9yX2NvZGUmIGVjKTsKKworICB2b2lkIGNsb3NlKCkg
bm9leGNlcHQgeworICAgIGlmIChmZCAhPSAtMSkKKyAgICAgIDo6Y2xvc2UoZmQpOworICAgIGZk
ID0gLTE7CisgIH0KKworICBGaWxlRGVzY3JpcHRvcihGaWxlRGVzY3JpcHRvciYmIG90aGVyKQor
ICAgICAgOiBuYW1lKG90aGVyLm5hbWUpLCBmZChvdGhlci5mZCksIG1fc3RhdChvdGhlci5tX3N0
YXQpLAorICAgICAgICBtX3N0YXR1cyhvdGhlci5tX3N0YXR1cykgeworICAgIG90aGVyLmZkID0g
LTE7CisgICAgb3RoZXIubV9zdGF0dXMgPSBmaWxlX3N0YXR1c3t9OworICB9CisKKyAgfkZpbGVE
ZXNjcmlwdG9yKCkgeyBjbG9zZSgpOyB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0
b3IgY29uc3QmKSA9IGRlbGV0ZTsKKyAgRmlsZURlc2NyaXB0b3ImIG9wZXJhdG9yPShGaWxlRGVz
Y3JpcHRvciBjb25zdCYpID0gZGVsZXRlOworCitwcml2YXRlOgorICBleHBsaWNpdCBGaWxlRGVz
Y3JpcHRvcihjb25zdCBwYXRoKiBwLCBpbnQgZmQgPSAtMSkgOiBuYW1lKCpwKSwgZmQoZmQpIHt9
Cit9OworCitwZXJtcyBwb3NpeF9nZXRfcGVybXMoY29uc3QgU3RhdFQmIHN0KSBub2V4Y2VwdCB7
CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtcz4oc3Quc3RfbW9kZSkgJiBwZXJtczo6bWFzazsK
K30KKworOjptb2RlX3QgcG9zaXhfY29udmVydF9wZXJtcyhwZXJtcyBwcm1zKSB7CisgIHJldHVy
biBzdGF0aWNfY2FzdDwgOjptb2RlX3Q+KHBybXMgJiBwZXJtczo6bWFzayk7Cit9CisKK2ZpbGVf
c3RhdHVzIGNyZWF0ZV9maWxlX3N0YXR1cyhlcnJvcl9jb2RlJiBtX2VjLCBwYXRoIGNvbnN0JiBw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0YXRUJiBwYXRoX3N0YXQs
IGVycm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICAqZWMgPSBtX2VjOworICBpZiAobV9l
YyAmJiAobV9lYy52YWx1ZSgpID09IEVOT0VOVCB8fCBtX2VjLnZhbHVlKCkgPT0gRU5PVERJUikp
IHsKKyAgICByZXR1cm4gZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpub3RfZm91bmQpOworICB9IGVs
c2UgaWYgKG1fZWMpIHsKKyAgICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJwb3NpeF9zdGF0Iiwg
ZWMsICZwKTsKKyAgICBlcnIucmVwb3J0KG1fZWMsICJmYWlsZWQgdG8gZGV0ZXJtaW5lIGF0dHJp
YnV0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGF0aCIpOworICAgIHJldHVybiBmaWxlX3N0YXR1cyhm
aWxlX3R5cGU6Om5vbmUpOworICB9CisgIC8vIGVsc2UKKworICBmaWxlX3N0YXR1cyBmc190bXA7
CisgIGF1dG8gY29uc3QgbW9kZSA9IHBhdGhfc3RhdC5zdF9tb2RlOworICBpZiAoU19JU0xOSyht
b2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnN5bWxpbmspOworICBlbHNlIGlmIChT
X0lTUkVHKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6cmVndWxhcik7CisgIGVs
c2UgaWYgKFNfSVNESVIobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpkaXJlY3Rv
cnkpOworICBlbHNlIGlmIChTX0lTQkxLKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlw
ZTo6YmxvY2spOworICBlbHNlIGlmIChTX0lTQ0hSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZp
bGVfdHlwZTo6Y2hhcmFjdGVyKTsKKyAgZWxzZSBpZiAoU19JU0ZJRk8obW9kZSkpCisgICAgZnNf
dG1wLnR5cGUoZmlsZV90eXBlOjpmaWZvKTsKKyAgZWxzZSBpZiAoU19JU1NPQ0sobW9kZSkpCisg
ICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpzb2NrZXQpOworICBlbHNlCisgICAgZnNfdG1wLnR5
cGUoZmlsZV90eXBlOjp1bmtub3duKTsKKworICBmc190bXAucGVybWlzc2lvbnMoZGV0YWlsOjpw
b3NpeF9nZXRfcGVybXMocGF0aF9zdGF0KSk7CisgIHJldHVybiBmc190bXA7Cit9CisKK2ZpbGVf
c3RhdHVzIHBvc2l4X3N0YXQocGF0aCBjb25zdCYgcCwgU3RhdFQmIHBhdGhfc3RhdCwgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoOjpzdGF0KHAuY19zdHIoKSwg
JnBhdGhfc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOwor
ICByZXR1cm4gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIHAsIHBhdGhfc3RhdCwgZWMpOworfQor
CitmaWxlX3N0YXR1cyBwb3NpeF9zdGF0KHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUqIGVjKSB7
CisgIFN0YXRUIHBhdGhfc3RhdDsKKyAgcmV0dXJuIHBvc2l4X3N0YXQocCwgcGF0aF9zdGF0LCBl
Yyk7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBw
YXRoX3N0YXQsIGVycm9yX2NvZGUqIGVjKSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6
bHN0YXQocC5jX3N0cigpLCAmcGF0aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpj
YXB0dXJlX2Vycm5vKCk7CisgIHJldHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0
aF9zdGF0LCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIFN0YXRUIHBhdGhfc3RhdDsKKyAgcmV0dXJuIHBvc2l4X2xz
dGF0KHAsIHBhdGhfc3RhdCwgZWMpOworfQorCitib29sIHBvc2l4X2Z0cnVuY2F0ZShjb25zdCBG
aWxlRGVzY3JpcHRvciYgZmQsIHNpemVfdCB0b19zaXplLCBlcnJvcl9jb2RlJiBlYykgeworICBp
ZiAoOjpmdHJ1bmNhdGUoZmQuZmQsIHRvX3NpemUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJl
X2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIHBvc2l4X2ZjaG1vZChjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQs
IGNvbnN0IFN0YXRUJiBzdCwgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6ZmNobW9kKGZkLmZk
LCBzdC5zdF9tb2RlKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJl
dHVybiB0cnVlOworICB9CisgIGVjLmNsZWFyKCk7CisgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBzdGF0X2VxdWl2YWxlbnQoY29uc3QgU3RhdFQmIHN0MSwgY29uc3QgU3RhdFQmIHN0Mikgewor
ICByZXR1cm4gKHN0MS5zdF9kZXYgPT0gc3QyLnN0X2RldiAmJiBzdDEuc3RfaW5vID09IHN0Mi5z
dF9pbm8pOworfQorCitmaWxlX3N0YXR1cyBGaWxlRGVzY3JpcHRvcjo6cmVmcmVzaF9zdGF0dXMo
ZXJyb3JfY29kZSYgZWMpIHsKKyAgLy8gRkQgbXVzdCBiZSBvcGVuIGFuZCBnb29kLgorICBtX3N0
YXR1cyA9IGZpbGVfc3RhdHVze307CisgIG1fc3RhdCA9IHt9OworICBlcnJvcl9jb2RlIG1fZWM7
CisgIGlmICg6OmZzdGF0KGZkLCAmbV9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gY2FwdHVyZV9l
cnJubygpOworICBtX3N0YXR1cyA9IGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBuYW1lLCBtX3N0
YXQsICZlYyk7CisgIHJldHVybiBtX3N0YXR1czsKK30KK30gLy8gbmFtZXNwYWNlCit9IC8vIGVu
ZCBuYW1lc3BhY2UgZGV0YWlsCisKK3VzaW5nIGRldGFpbDo6Y2FwdHVyZV9lcnJubzsKK3VzaW5n
IGRldGFpbDo6RXJyb3JIYW5kbGVyOwordXNpbmcgZGV0YWlsOjpTdGF0VDsKK3VzaW5nIGRldGFp
bDo6VGltZVNwZWM7Cit1c2luZyBwYXJzZXI6OmNyZWF0ZVZpZXc7Cit1c2luZyBwYXJzZXI6OlBh
dGhQYXJzZXI7Cit1c2luZyBwYXJzZXI6OnN0cmluZ192aWV3X3Q7CisKK2NvbnN0IGJvb2wgX0Zp
bGVzeXN0ZW1DbG9jazo6aXNfc3RlYWR5OworCitfRmlsZXN5c3RlbUNsb2NrOjp0aW1lX3BvaW50
IF9GaWxlc3lzdGVtQ2xvY2s6Om5vdygpIG5vZXhjZXB0IHsKKyAgdHlwZWRlZiBjaHJvbm86OmR1
cmF0aW9uPHJlcD4gX19zZWNzOworI2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElN
RSkgJiYgZGVmaW5lZChDTE9DS19SRUFMVElNRSkKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9u
PHJlcCwgbmFubz4gX19uc2VjczsKKyAgc3RydWN0IHRpbWVzcGVjIHRwOworICBpZiAoMCAhPSBj
bG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHApKQorICAgIF9fdGhyb3dfc3lzdGVtX2Vy
cm9yKGVycm5vLCAiY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSkgZmFpbGVkIik7CisgIHJl
dHVybiB0aW1lX3BvaW50KF9fc2Vjcyh0cC50dl9zZWMpICsKKyAgICAgICAgICAgICAgICAgICAg
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PGR1cmF0aW9uPihfX25zZWNzKHRwLnR2X25zZWMpKSk7Cisj
ZWxzZQorICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwLCBtaWNybz4gX19taWNyb3NlY3M7
CisgIHRpbWV2YWwgdHY7CisgIGdldHRpbWVvZmRheSgmdHYsIDApOworICByZXR1cm4gdGltZV9w
b2ludChfX3NlY3ModHYudHZfc2VjKSArIF9fbWljcm9zZWNzKHR2LnR2X3VzZWMpKTsKKyNlbmRp
ZiAvLyBfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FICYmIENMT0NLX1JFQUxUSU1FCit9CisKK2Zp
bGVzeXN0ZW1fZXJyb3I6On5maWxlc3lzdGVtX2Vycm9yKCkge30KKwordm9pZCBmaWxlc3lzdGVt
X2Vycm9yOjpfX2NyZWF0ZV93aGF0KGludCBfX251bV9wYXRocykgeworICBjb25zdCBjaGFyKiBk
ZXJpdmVkX3doYXQgPSBzeXN0ZW1fZXJyb3I6OndoYXQoKTsKKyAgX19zdG9yYWdlXy0+X193aGF0
XyA9IFsmXSgpIC0+IHN0cmluZyB7CisgICAgY29uc3QgY2hhciogcDEgPSBwYXRoMSgpLm5hdGl2
ZSgpLmVtcHR5KCkgPyAiXCJcIiIgOiBwYXRoMSgpLmNfc3RyKCk7CisgICAgY29uc3QgY2hhciog
cDIgPSBwYXRoMigpLm5hdGl2ZSgpLmVtcHR5KCkgPyAiXCJcIiIgOiBwYXRoMigpLmNfc3RyKCk7
CisgICAgc3dpdGNoIChfX251bV9wYXRocykgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4g
ZGV0YWlsOjpmb3JtYXRfc3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyIsIGRlcml2ZWRfd2hh
dCk7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmls
ZXN5c3RlbSBlcnJvcjogJXMgWyVzXSIsIGRlcml2ZWRfd2hhdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcDEpOworICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiBkZXRhaWw6
OmZvcm1hdF9zdHJpbmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIFslc10gWyVzXSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcml2ZWRfd2hhdCwgcDEsIHAyKTsKKyAgICB9
CisgIH0oKTsKK30KKworc3RhdGljIHBhdGggX19kb19hYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBw
YXRoKiBjd2QsIGVycm9yX2NvZGUqIGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsK
KyAgaWYgKHAuaXNfYWJzb2x1dGUoKSkKKyAgICByZXR1cm4gcDsKKyAgKmN3ZCA9IF9fY3VycmVu
dF9wYXRoKGVjKTsKKyAgaWYgKGVjICYmICplYykKKyAgICByZXR1cm4ge307CisgIHJldHVybiAo
KmN3ZCkgLyBwOworfQorCitwYXRoIF9fYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgcGF0aCBjd2Q7CisgIHJldHVybiBfX2RvX2Fic29sdXRlKHAsICZjd2QsIGVj
KTsKK30KKworcGF0aCBfX2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBvcmlnX3AsIGVycm9yX2NvZGUq
IGVjKSB7CisgIHBhdGggY3dkOworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJjYW5vbmljYWwi
LCBlYywgJm9yaWdfcCwgJmN3ZCk7CisKKyAgcGF0aCBwID0gX19kb19hYnNvbHV0ZShvcmlnX3As
ICZjd2QsIGVjKTsKKyAgY2hhciBidWZmW1BBVEhfTUFYICsgMV07CisgIGNoYXIqIHJldDsKKyAg
aWYgKChyZXQgPSA6OnJlYWxwYXRoKHAuY19zdHIoKSwgYnVmZikpID09IG51bGxwdHIpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIHtyZXR9OworfQor
Cit2b2lkIF9fY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRp
b25zIG9wdGlvbnMsCisgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJjb3B5IiwgZWMsICZmcm9tLCAmdG8pOworCisgIGNvbnN0IGJvb2wgc3lt
X3N0YXR1cyA9IGJvb2woCisgICAgICBvcHRpb25zICYgKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5
bWxpbmtzIHwgY29weV9vcHRpb25zOjpza2lwX3N5bWxpbmtzKSk7CisKKyAgY29uc3QgYm9vbCBz
eW1fc3RhdHVzMiA9IGJvb2wob3B0aW9ucyAmIGNvcHlfb3B0aW9uczo6Y29weV9zeW1saW5rcyk7
CisKKyAgZXJyb3JfY29kZSBtX2VjMTsKKyAgU3RhdFQgZl9zdCA9IHt9OworICBjb25zdCBmaWxl
X3N0YXR1cyBmID0gc3ltX3N0YXR1cyB8fCBzeW1fc3RhdHVzMgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gZGV0YWlsOjpwb3NpeF9sc3RhdChmcm9tLCBmX3N0LCAmbV9lYzEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQoZnJvbSwgZl9zdCwg
Jm1fZWMxKTsKKyAgaWYgKG1fZWMxKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMxKTsKKwor
ICBTdGF0VCB0X3N0ID0ge307CisgIGNvbnN0IGZpbGVfc3RhdHVzIHQgPSBzeW1fc3RhdHVzID8g
ZGV0YWlsOjpwb3NpeF9sc3RhdCh0bywgdF9zdCwgJm1fZWMxKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfc3RhdCh0bywgdF9zdCwgJm1fZWMxKTsK
KworICBpZiAobm90IHN0YXR1c19rbm93bih0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2Vj
MSk7CisKKyAgaWYgKCFleGlzdHMoZikgfHwgaXNfb3RoZXIoZikgfHwgaXNfb3RoZXIodCkgfHwK
KyAgICAgIChpc19kaXJlY3RvcnkoZikgJiYgaXNfcmVndWxhcl9maWxlKHQpKSB8fAorICAgICAg
ZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoZl9zdCwgdF9zdCkpIHsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjpmdW5jdGlvbl9ub3Rfc3VwcG9ydGVkKTsKKyAgfQorCisgIGlmIChlYykKKyAg
ICBlYy0+Y2xlYXIoKTsKKworICBpZiAoaXNfc3ltbGluayhmKSkgeworICAgIGlmIChib29sKGNv
cHlfb3B0aW9uczo6c2tpcF9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3Ro
aW5nCisgICAgfSBlbHNlIGlmIChub3QgZXhpc3RzKHQpKSB7CisgICAgICBfX2NvcHlfc3ltbGlu
ayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChl
cnJjOjpmaWxlX2V4aXN0cyk7CisgICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChpc19y
ZWd1bGFyX2ZpbGUoZikpIHsKKyAgICBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmRpcmVjdG9yaWVz
X29ubHkgJiBvcHRpb25zKSkgeworICAgICAgLy8gZG8gbm90aGluZworICAgIH0gZWxzZSBpZiAo
Ym9vbChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICBf
X2NyZWF0ZV9zeW1saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChib29sKGNvcHlf
b3B0aW9uczo6Y3JlYXRlX2hhcmRfbGlua3MgJiBvcHRpb25zKSkgeworICAgICAgX19jcmVhdGVf
aGFyZF9saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkodCkp
IHsKKyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvIC8gZnJvbS5maWxlbmFtZSgpLCBvcHRpb25z
LCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvLCBvcHRpb25z
LCBlYyk7CisgICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkoZikg
JiYgYm9vbChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6aXNfYV9kaXJlY3RvcnkpOworICB9IGVsc2UgaWYgKGlz
X2RpcmVjdG9yeShmKSAmJiAoYm9vbChjb3B5X29wdGlvbnM6OnJlY3Vyc2l2ZSAmIG9wdGlvbnMp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnM6Om5vbmUg
PT0gb3B0aW9ucykpIHsKKworICAgIGlmICghZXhpc3RzKHQpKSB7CisgICAgICAvLyBjcmVhdGUg
ZGlyZWN0b3J5IHRvIHdpdGggYXR0cmlidXRlcyBmcm9tICdmcm9tJy4KKyAgICAgIF9fY3JlYXRl
X2RpcmVjdG9yeSh0bywgZnJvbSwgZWMpOworICAgICAgaWYgKGVjICYmICplYykgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIGRpcmVjdG9yeV9pdGVyYXRvciBpdCA9Cisg
ICAgICAgIGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKGZyb20sICplYykgOiBkaXJlY3RvcnlfaXRl
cmF0b3IoZnJvbSk7CisgICAgaWYgKGVjICYmICplYykgeworICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBlcnJvcl9jb2RlIG1fZWMyOworICAgIGZvciAoOyBpdCAhPSBkaXJlY3RvcnlfaXRlcmF0
b3IoKTsgaXQuaW5jcmVtZW50KG1fZWMyKSkgeworICAgICAgaWYgKG1fZWMyKSB7CisgICAgICAg
IHJldHVybiBlcnIucmVwb3J0KG1fZWMyKTsKKyAgICAgIH0KKyAgICAgIF9fY29weShpdC0+cGF0
aCgpLCB0byAvIGl0LT5wYXRoKCkuZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICBvcHRpb25zIHwg
Y29weV9vcHRpb25zOjpfX2luX3JlY3Vyc2l2ZV9jb3B5LCBlYyk7CisgICAgICBpZiAoZWMgJiYg
KmVjKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbmFtZXNw
YWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCisjaWZkZWYgX0xJQkNQUF9VU0VfU0VOREZJTEUK
K2Jvb2wgY29weV9maWxlX2ltcGxfc2VuZGZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZp
bGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgZWMpIHsKKworICBzaXplX3QgY291bnQgPSByZWFkX2ZkLmdldF9zdGF0KCkuc3Rf
c2l6ZTsKKyAgZG8geworICAgIHNzaXplX3QgcmVzOworICAgIGlmICgocmVzID0gOjpzZW5kZmls
ZSh3cml0ZV9mZC5mZCwgcmVhZF9mZC5mZCwgbnVsbHB0ciwgY291bnQpKSA9PSAtMSkgeworICAg
ICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGNvdW50IC09IHJlczsKKyAgfSB3aGlsZSAoY291bnQgPiAwKTsKKworICBlYy5jbGVhcigpOwor
CisgIHJldHVybiB0cnVlOworfQorI2VsaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkK
K2Jvb2wgY29weV9maWxlX2ltcGxfY29weWZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZp
bGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgZWMpIHsKKyAgc3RydWN0IENvcHlGaWxlU3RhdGUgeworICAgIGNvcHlmaWxlX3N0
YXRlX3Qgc3RhdGU7CisgICAgQ29weUZpbGVTdGF0ZSgpIHsgc3RhdGUgPSBjb3B5ZmlsZV9zdGF0
ZV9hbGxvYygpOyB9CisgICAgfkNvcHlGaWxlU3RhdGUoKSB7IGNvcHlmaWxlX3N0YXRlX2ZyZWUo
c3RhdGUpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBDb3B5RmlsZVN0YXRlKENvcHlGaWxlU3RhdGUg
Y29uc3QmKSA9IGRlbGV0ZTsKKyAgICBDb3B5RmlsZVN0YXRlJiBvcGVyYXRvcj0oQ29weUZpbGVT
dGF0ZSBjb25zdCYpID0gZGVsZXRlOworICB9OworCisgIENvcHlGaWxlU3RhdGUgY2ZzOworICBp
ZiAoZmNvcHlmaWxlKHJlYWRfZmQuZmQsIHdyaXRlX2ZkLmZkLCBjZnMuc3RhdGUsIENPUFlGSUxF
X0RBVEEpIDwgMCkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorCisgIGVjLmNsZWFyKCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKKy8v
IFRoaXMgZnVuY3Rpb24gaXMgZ3VhcmRlZCBieSBpZmRlZidzIGluIEp1bmlwZXIgZHVlIHRvIHRo
ZSBjdXJyZW50CisvLyBjbGFuZyBub3Qgc3VwcG9ydGluZyBhbiBfX29wZW4gZnVuY3Rpb24gb24g
aWZzdHJlYW0gYW5kIG9mc3RyZWFtLgorI2lmICFkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxF
KSAmJiAhZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKKy8vIE5vdGU6IFRoaXMgZnVuY3Rp
b24gaXNuJ3QgZ3VhcmRlZCBieSBpZmRlZidzIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bnVzZWQK
Ky8vIGluIG9yZGVyIHRvIGFzc3VyZSBpdCBzdGlsbCBjb21waWxlcy4KK19fYXR0cmlidXRlX18o
KHVudXNlZCkpIGJvb2wgY29weV9maWxlX2ltcGxfZGVmYXVsdChGaWxlRGVzY3JpcHRvciYgcmVh
ZF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGaWxlRGVzY3JpcHRvciYgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWZzdHJlYW0gaW47
CisgIGluLl9fb3BlbihyZWFkX2ZkLmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghaW4uaXNfb3Bl
bigpKSB7CisgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgX19vcGVuIGRpZG4ndCByZXNldCB0aGUg
ZXJyb3IgY29kZS4KKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gZmFsc2U7
CisgIH0KKyAgb2ZzdHJlYW0gb3V0OworICBvdXQuX19vcGVuKHdyaXRlX2ZkLmZkLCBpb3M6OmJp
bmFyeSk7CisgIGlmICghb3V0LmlzX29wZW4oKSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygp
OworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmIChpbi5nb29kKCkgJiYgb3V0Lmdvb2Qo
KSkgeworICAgIHVzaW5nIEluSXQgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIHVz
aW5nIE91dEl0ID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPjsKKyAgICBJbkl0IGJpbihpbik7
CisgICAgSW5JdCBlaW47CisgICAgT3V0SXQgYm91dChvdXQpOworICAgIGNvcHkoYmluLCBlaW4s
IGJvdXQpOworICB9CisgIGlmIChvdXQuZmFpbCgpIHx8IGluLmZhaWwoKSkgeworICAgIGVjID0g
bWFrZV9lcnJvcl9jb2RlKGVycmM6OmlvX2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBlYy5jbGVhcigpOworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIGNvcHlf
ZmlsZV9pbXBsKEZpbGVEZXNjcmlwdG9yJiBmcm9tLCBGaWxlRGVzY3JpcHRvciYgdG8sIGVycm9y
X2NvZGUmIGVjKSB7CisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9TRU5ERklMRSkKKyAgcmV0dXJu
IGNvcHlfZmlsZV9pbXBsX3NlbmRmaWxlKGZyb20sIHRvLCBlYyk7CisjZWxpZiBkZWZpbmVkKF9M
SUJDUFBfVVNFX0NPUFlGSUxFKQorICByZXR1cm4gY29weV9maWxlX2ltcGxfY29weWZpbGUoZnJv
bSwgdG8sIGVjKTsKKyNlbHNlCisgIHJldHVybiBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KGZyb20s
IHRvLCBlYyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIGRl
dGFpbAorCitib29sIF9fY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRv
LCBjb3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMp
IHsKKyAgdXNpbmcgZGV0YWlsOjpGaWxlRGVzY3JpcHRvcjsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+
IGVycigiY29weV9maWxlIiwgZWMsICZ0bywgJmZyb20pOworCisgIGVycm9yX2NvZGUgbV9lYzsK
KyAgRmlsZURlc2NyaXB0b3IgZnJvbV9mZCA9CisgICAgICBGaWxlRGVzY3JpcHRvcjo6Y3JlYXRl
X3dpdGhfc3RhdHVzKCZmcm9tLCBtX2VjLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworICBpZiAo
bV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKworICBhdXRvIGZyb21fc3QgPSBm
cm9tX2ZkLmdldF9zdGF0dXMoKTsKKyAgU3RhdFQgY29uc3QmIGZyb21fc3RhdCA9IGZyb21fZmQu
Z2V0X3N0YXQoKTsKKyAgaWYgKCFpc19yZWd1bGFyX2ZpbGUoZnJvbV9zdCkpIHsKKyAgICBpZiAo
bm90IG1fZWMpCisgICAgICBtX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vdF9zdXBwb3J0
ZWQpOworICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICB9CisKKyAgY29uc3QgYm9vbCBz
a2lwX2V4aXN0aW5nID0gYm9vbChjb3B5X29wdGlvbnM6OnNraXBfZXhpc3RpbmcgJiBvcHRpb25z
KTsKKyAgY29uc3QgYm9vbCB1cGRhdGVfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6dXBk
YXRlX2V4aXN0aW5nICYgb3B0aW9ucyk7CisgIGNvbnN0IGJvb2wgb3ZlcndyaXRlX2V4aXN0aW5n
ID0KKyAgICAgIGJvb2woY29weV9vcHRpb25zOjpvdmVyd3JpdGVfZXhpc3RpbmcgJiBvcHRpb25z
KTsKKworICBTdGF0VCB0b19zdGF0X3BhdGg7CisgIGZpbGVfc3RhdHVzIHRvX3N0ID0gZGV0YWls
Ojpwb3NpeF9zdGF0KHRvLCB0b19zdGF0X3BhdGgsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25v
d24odG9fc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworCisgIGNvbnN0IGJvb2wg
dG9fZXhpc3RzID0gZXhpc3RzKHRvX3N0KTsKKyAgaWYgKHRvX2V4aXN0cyAmJiAhaXNfcmVndWxh
cl9maWxlKHRvX3N0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVk
KTsKKworICBpZiAodG9fZXhpc3RzICYmIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KGZyb21fc3Rh
dCwgdG9fc3RhdF9wYXRoKSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0
cyk7CisKKyAgaWYgKHRvX2V4aXN0cyAmJiBza2lwX2V4aXN0aW5nKQorICAgIHJldHVybiBmYWxz
ZTsKKworICBib29sIFNob3VsZENvcHkgPSBbJl0oKSB7CisgICAgaWYgKHRvX2V4aXN0cyAmJiB1
cGRhdGVfZXhpc3RpbmcpIHsKKyAgICAgIGF1dG8gZnJvbV90aW1lID0gZGV0YWlsOjpleHRyYWN0
X210aW1lKGZyb21fc3RhdCk7CisgICAgICBhdXRvIHRvX3RpbWUgPSBkZXRhaWw6OmV4dHJhY3Rf
bXRpbWUodG9fc3RhdF9wYXRoKTsKKyAgICAgIGlmIChmcm9tX3RpbWUudHZfc2VjIDwgdG9fdGlt
ZS50dl9zZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGlmIChmcm9tX3RpbWUudHZf
c2VjID09IHRvX3RpbWUudHZfc2VjICYmCisgICAgICAgICAgZnJvbV90aW1lLnR2X25zZWMgPD0g
dG9fdGltZS50dl9uc2VjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKCF0b19leGlzdHMgfHwgb3ZlcndyaXRlX2V4aXN0aW5nKQorICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMp
OworICB9KCk7CisgIGlmICghU2hvdWxkQ29weSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLy8g
RG9uJ3QgdHJ1bmNhdGUgcmlnaHQgYXdheS4gV2UgbWF5IG5vdCBiZSBvcGVuaW5nIHRoZSBmaWxl
IHdlIG9yaWdpbmFsbHkKKyAgLy8gbG9va2VkIGF0OyB3ZSdsbCBjaGVjayB0aGlzIGxhdGVyLgor
ICBpbnQgdG9fb3Blbl9mbGFncyA9IE9fV1JPTkxZOworICBpZiAoIXRvX2V4aXN0cykKKyAgICB0
b19vcGVuX2ZsYWdzIHw9IE9fQ1JFQVQ7CisgIEZpbGVEZXNjcmlwdG9yIHRvX2ZkID0gRmlsZURl
c2NyaXB0b3I6OmNyZWF0ZV93aXRoX3N0YXR1cygKKyAgICAgICZ0bywgbV9lYywgdG9fb3Blbl9m
bGFncywgZnJvbV9zdGF0LnN0X21vZGUpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKworICBpZiAodG9fZXhpc3RzKSB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
ZmlsZSB3ZSBpbml0aWFsbHkgc3RhdCdlZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvbmUKKyAgICAv
LyB3ZSBvcGVuZWQuCisgICAgLy8gRklYTUU6IHJlcG9ydCB0aGlzIGJldHRlci4KKyAgICBpZiAo
IWRldGFpbDo6c3RhdF9lcXVpdmFsZW50KHRvX3N0YXRfcGF0aCwgdG9fZmQuZ2V0X3N0YXQoKSkp
CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpiYWRfZmlsZV9kZXNjcmlwdG9yKTsKKwor
ICAgIC8vIFNldCB0aGUgcGVybWlzc2lvbnMgYW5kIHRydW5jYXRlIHRoZSBmaWxlIHdlIG9wZW5l
ZC4KKyAgICBpZiAoZGV0YWlsOjpwb3NpeF9mY2htb2QodG9fZmQsIGZyb21fc3RhdCwgbV9lYykp
CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBpZiAoZGV0YWlsOjpwb3NpeF9m
dHJ1bmNhdGUodG9fZmQsIDAsIG1fZWMpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7
CisgIH0KKworICBpZiAoIWNvcHlfZmlsZV9pbXBsKGZyb21fZmQsIHRvX2ZkLCBtX2VjKSkgewor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGRlc3QgZmlsZSBpZiB3ZSBmYWlsZWQsIGFuZCBpdCBk
aWRuJ3QgZXhpc3QgcHJldmlvdXNseS4KKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAg
fQorCisgIHJldHVybiB0cnVlOworfQorCit2b2lkIF9fY29weV9zeW1saW5rKGNvbnN0IHBhdGgm
IGV4aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBjb25zdCBwYXRoIHJlYWxfcGF0aChfX3JlYWRf
c3ltbGluayhleGlzdGluZ19zeW1saW5rLCBlYykpOworICBpZiAoZWMgJiYgKmVjKSB7CisgICAg
cmV0dXJuOworICB9CisgIC8vIE5PVEU6IHByb3Bvc2FsIHNheXMgeW91IHNob3VsZCBkZXRlY3Qg
aWYgeW91IHNob3VsZCBjYWxsCisgIC8vIGNyZWF0ZV9zeW1saW5rIG9yIGNyZWF0ZV9kaXJlY3Rv
cnlfc3ltbGluay4gSSBkb24ndCB0aGluayB0aGlzCisgIC8vIGlzIG5lZWRlZCB3aXRoIFBPU0lY
CisgIF9fY3JlYXRlX3N5bWxpbmsocmVhbF9wYXRoLCBuZXdfc3ltbGluaywgZWMpOworfQorCiti
b29sIF9fY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7
CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJlY3RvcmllcyIsIGVjLCAmcCk7
CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBhdXRvIGNvbnN0IHN0ID0gZGV0YWlsOjpwb3NpeF9z
dGF0KHAsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMpOworICBlbHNlIGlmIChpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBm
YWxzZTsKKyAgZWxzZSBpZiAoZXhpc3RzKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJj
OjpmaWxlX2V4aXN0cyk7CisKKyAgY29uc3QgcGF0aCBwYXJlbnQgPSBwLnBhcmVudF9wYXRoKCk7
CisgIGlmICghcGFyZW50LmVtcHR5KCkpIHsKKyAgICBjb25zdCBmaWxlX3N0YXR1cyBwYXJlbnRf
c3QgPSBzdGF0dXMocGFyZW50LCBtX2VjKTsKKyAgICBpZiAobm90IHN0YXR1c19rbm93bihwYXJl
bnRfc3QpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgaWYgKG5vdCBleGlz
dHMocGFyZW50X3N0KSkgeworICAgICAgX19jcmVhdGVfZGlyZWN0b3JpZXMocGFyZW50LCBlYyk7
CisgICAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShwLCBlYyk7Cit9CisKK2Jv
b2wgX19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJlY3RvcnkiLCBlYywgJnApOworCisg
IGlmICg6Om1rZGlyKHAuY19zdHIoKSwgc3RhdGljX2Nhc3Q8aW50PihwZXJtczo6YWxsKSkgPT0g
MCkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVw
b3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBfX2NyZWF0
ZV9kaXJlY3RvcnkocGF0aCBjb25zdCYgcCwgcGF0aCBjb25zdCYgYXR0cmlidXRlcywgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIs
IGVjLCAmcCwgJmF0dHJpYnV0ZXMpOworCisgIFN0YXRUIGF0dHJfc3RhdDsKKyAgZXJyb3JfY29k
ZSBtZWM7CisgIGF1dG8gc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQoYXR0cmlidXRlcywgYXR0cl9z
dGF0LCAmbWVjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVw
b3J0KG1lYyk7CisgIGlmICghaXNfZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChlcnJjOjpub3RfYV9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBzcGVj
aWZpZWQgYXR0cmlidXRlIHBhdGggaXMgaW52YWxpZCIpOworCisgIGlmICg6Om1rZGlyKHAuY19z
dHIoKSwgYXR0cl9zdGF0LnN0X21vZGUpID09IDApCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChl
cnJubyAhPSBFRVhJU1QpCisgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsocGF0aCBjb25z
dCYgZnJvbSwgcGF0aCBjb25zdCYgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9kaXJl
Y3Rvcnlfc3ltbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6c3ltbGluayhmcm9tLmNf
c3RyKCksIHRvLmNfc3RyKCkpICE9IDApCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9l
cnJubygpKTsKK30KKwordm9pZCBfX2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgZnJvbSwg
Y29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBl
cnIoImNyZWF0ZV9oYXJkX2xpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OmxpbmsoZnJv
bS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0
dXJlX2Vycm5vKCkpOworfQorCit2b2lkIF9fY3JlYXRlX3N5bWxpbmsocGF0aCBjb25zdCYgZnJv
bSwgcGF0aCBjb25zdCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lk
PiBlcnIoImNyZWF0ZV9zeW1saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1saW5r
KGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKK30KKworcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYyk7CisKKyAg
YXV0byBzaXplID0gOjpwYXRoY29uZigiLiIsIF9QQ19QQVRIX01BWCk7CisgIF9MSUJDUFBfQVNT
RVJUKHNpemUgPj0gMCwgInBhdGhjb25mIHJldHVybmVkIGEgMCBhcyBtYXggc2l6ZSIpOworCisg
IGF1dG8gYnVmZiA9IHVuaXF1ZV9wdHI8Y2hhcltdPihuZXcgY2hhcltzaXplICsgMV0pOworICBj
aGFyKiByZXQ7CisgIGlmICgocmV0ID0gOjpnZXRjd2QoYnVmZi5nZXQoKSwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaXplKSkpID09IG51bGxwdHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVy
ZV9lcnJubygpLCAiY2FsbCB0byBnZXRjd2QgZmFpbGVkIik7CisKKyAgcmV0dXJuIHtidWZmLmdl
dCgpfTsKK30KKwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYywgJnAp
OworICBpZiAoOjpjaGRpcihwLmNfc3RyKCkpID09IC0xKQorICAgIGVyci5yZXBvcnQoY2FwdHVy
ZV9lcnJubygpKTsKK30KKworYm9vbCBfX2VxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0
IHBhdGgmIHAyLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJl
cXVpdmFsZW50IiwgZWMsICZwMSwgJnAyKTsKKworICBlcnJvcl9jb2RlIGVjMSwgZWMyOworICBT
dGF0VCBzdDEgPSB7fSwgc3QyID0ge307CisgIGF1dG8gczEgPSBkZXRhaWw6OnBvc2l4X3N0YXQo
cDEubmF0aXZlKCksIHN0MSwgJmVjMSk7CisgIGlmICghZXhpc3RzKHMxKSkKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKyAgYXV0byBzMiA9IGRldGFpbDo6cG9z
aXhfc3RhdChwMi5uYXRpdmUoKSwgc3QyLCAmZWMyKTsKKyAgaWYgKCFleGlzdHMoczIpKQorICAg
IHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworCisgIHJldHVybiBkZXRh
aWw6OnN0YXRfZXF1aXZhbGVudChzdDEsIHN0Mik7Cit9CisKK3VpbnRtYXhfdCBfX2ZpbGVfc2l6
ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1h
eF90PiBlcnIoImZpbGVfc2l6ZSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBT
dGF0VCBzdDsKKyAgZmlsZV9zdGF0dXMgZnN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAm
bV9lYyk7CisgIGlmICghZXhpc3RzKGZzdCkgfHwgIWlzX3JlZ3VsYXJfZmlsZShmc3QpKSB7Cisg
ICAgZXJyYyBlcnJvcl9raW5kID0KKyAgICAgICAgaXNfZGlyZWN0b3J5KGZzdCkgPyBlcnJjOjpp
c19hX2RpcmVjdG9yeSA6IGVycmM6Om5vdF9zdXBwb3J0ZWQ7CisgICAgaWYgKCFtX2VjKQorICAg
ICAgbV9lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJvcl9raW5kKTsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKyAgfQorICAvLyBpc19yZWd1bGFyX2ZpbGUocCkgPT0gdHJ1ZQorICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludG1heF90PihzdC5zdF9zaXplKTsKK30KKwordWludG1heF90IF9f
aGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9y
SGFuZGxlcjx1aW50bWF4X3Q+IGVycigiaGFyZF9saW5rX2NvdW50IiwgZWMsICZwKTsKKworICBl
cnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHN0OworICBkZXRhaWw6OnBvc2l4X3N0YXQocCwgc3Qs
ICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KHN0LnN0X25saW5rKTsKK30KKworYm9vbCBfX2Zz
X2lzX2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjxib29sPiBlcnIoImlzX2VtcHR5IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7Cisg
IFN0YXRUIHBzdDsKKyAgYXV0byBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBwc3QsICZtX2Vj
KTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIGVsc2UgaWYg
KCFpc19kaXJlY3Rvcnkoc3QpICYmICFpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBl
cnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICBlbHNlIGlmIChpc19kaXJlY3Rvcnko
c3QpKSB7CisgICAgYXV0byBpdCA9IGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKHAsICplYykgOiBk
aXJlY3RvcnlfaXRlcmF0b3IocCk7CisgICAgaWYgKGVjICYmICplYykKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gaXQgPT0gZGlyZWN0b3J5X2l0ZXJhdG9ye307CisgIH0gZWxzZSBp
ZiAoaXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90
Pihwc3Quc3Rfc2l6ZSkgPT0gMDsKKworICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cit9CisKK3N0
YXRpYyBmaWxlX3RpbWVfdHlwZSBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgm
IHAsIGNvbnN0IFN0YXRUJiBzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNfdGltZTsK
KyAgRXJyb3JIYW5kbGVyPGZpbGVfdGltZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVj
LCAmcCk7CisKKyAgYXV0byB0cyA9IGRldGFpbDo6ZXh0cmFjdF9tdGltZShzdCk7CisgIGlmICgh
ZnNfdGltZTo6aXNfcmVwcmVzZW50YWJsZSh0cykpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJy
Yzo6dmFsdWVfdG9vX2xhcmdlKTsKKworICByZXR1cm4gZnNfdGltZTo6Y29udmVydF9mcm9tX3Rp
bWVzcGVjKHRzKTsKK30KKworZmlsZV90aW1lX3R5cGUgX19sYXN0X3dyaXRlX3RpbWUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgbmFtZXNwYWNlIGNocm9ubzsKKyAg
RXJyb3JIYW5kbGVyPGZpbGVfdGltZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAm
cCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBzdDsKKyAgZGV0YWlsOjpwb3NpeF9z
dGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMpOworICByZXR1cm4gX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShwLCBzdCwgZWMpOworfQor
Cit2b2lkIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5l
d190aW1lLCBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBkZXRhaWw6OmZzX3RpbWU7CisgIEVy
cm9ySGFuZGxlcjx2b2lkPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgZXJy
b3JfY29kZSBtX2VjOworICBhcnJheTxUaW1lU3BlYywgMj4gdGJ1ZjsKKyNpZiAhZGVmaW5lZChf
TElCQ1BQX1VTRV9VVElNRU5TQVQpCisgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaGFzIGEgcmFj
ZSBjb25kaXRpb24gYmV0d2VlbiBkZXRlcm1pbmluZyB0aGUKKyAgLy8gbGFzdCBhY2Nlc3MgdGlt
ZSBhbmQgYXR0ZW1wdGluZyB0byBzZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgdXNpbmcKKyAgLy8g
Ojp1dGltZXMKKyAgU3RhdFQgc3Q7CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhf
c3RhdChwLCBzdCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydCht
X2VjKTsKKyAgdGJ1ZlswXSA9IGRldGFpbDo6ZXh0cmFjdF9hdGltZShzdCk7CisjZWxzZQorICB0
YnVmWzBdLnR2X3NlYyA9IDA7CisgIHRidWZbMF0udHZfbnNlYyA9IFVUSU1FX09NSVQ7CisjZW5k
aWYKKyAgaWYgKCFmc190aW1lOjpjb252ZXJ0X3RvX3RpbWVzcGVjKHRidWZbMV0sIG5ld190aW1l
KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjp2YWx1ZV90b29fbGFyZ2UpOworCisgIGRl
dGFpbDo6c2V0X2ZpbGVfdGltZXMocCwgdGJ1ZiwgbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJl
dHVybiBlcnIucmVwb3J0KG1fZWMpOworfQorCit2b2lkIF9fcGVybWlzc2lvbnMoY29uc3QgcGF0
aCYgcCwgcGVybXMgcHJtcywgcGVybV9vcHRpb25zIG9wdHMsCisgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicGVybWlzc2lvbnMi
LCBlYywgJnApOworCisgIGF1dG8gaGFzX29wdCA9IFsmXShwZXJtX29wdGlvbnMgbykgeyByZXR1
cm4gYm9vbChvICYgb3B0cyk7IH07CisgIGNvbnN0IGJvb2wgcmVzb2x2ZV9zeW1saW5rcyA9ICFo
YXNfb3B0KHBlcm1fb3B0aW9uczo6bm9mb2xsb3cpOworICBjb25zdCBib29sIGFkZF9wZXJtcyA9
IGhhc19vcHQocGVybV9vcHRpb25zOjphZGQpOworICBjb25zdCBib29sIHJlbW92ZV9wZXJtcyA9
IGhhc19vcHQocGVybV9vcHRpb25zOjpyZW1vdmUpOworICBfTElCQ1BQX0FTU0VSVCgKKyAgICAg
IChhZGRfcGVybXMgKyByZW1vdmVfcGVybXMgKyBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVwbGFj
ZSkpID09IDEsCisgICAgICAiT25lIGFuZCBvbmx5IG9uZSBvZiB0aGUgcGVybV9vcHRpb25zIGNv
bnN0YW50cyByZXBsYWNlLCBhZGQsIG9yIHJlbW92ZSAiCisgICAgICAiaXMgcHJlc2VudCBpbiBv
cHRzIik7CisKKyAgYm9vbCBzZXRfc3ltX3Blcm1zID0gZmFsc2U7CisgIHBybXMgJj0gcGVybXM6
Om1hc2s7CisgIGlmICghcmVzb2x2ZV9zeW1saW5rcyB8fCAoYWRkX3Blcm1zIHx8IHJlbW92ZV9w
ZXJtcykpIHsKKyAgICBlcnJvcl9jb2RlIG1fZWM7CisgICAgZmlsZV9zdGF0dXMgc3QgPSByZXNv
bHZlX3N5bWxpbmtzID8gZGV0YWlsOjpwb3NpeF9zdGF0KHAsICZtX2VjKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfbHN0YXQocCwgJm1fZWMp
OworICAgIHNldF9zeW1fcGVybXMgPSBpc19zeW1saW5rKHN0KTsKKyAgICBpZiAobV9lYykKKyAg
ICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIF9MSUJDUFBfQVNTRVJUKHN0LnBlcm1p
c3Npb25zKCkgIT0gcGVybXM6OnVua25vd24sCisgICAgICAgICAgICAgICAgICAgIlBlcm1pc3Np
b25zIHVuZXhwZWN0ZWRseSB1bmtub3duIik7CisgICAgaWYgKGFkZF9wZXJtcykKKyAgICAgIHBy
bXMgfD0gc3QucGVybWlzc2lvbnMoKTsKKyAgICBlbHNlIGlmIChyZW1vdmVfcGVybXMpCisgICAg
ICBwcm1zID0gc3QucGVybWlzc2lvbnMoKSAmIH5wcm1zOworICB9CisgIGNvbnN0IGF1dG8gcmVh
bF9wZXJtcyA9IGRldGFpbDo6cG9zaXhfY29udmVydF9wZXJtcyhwcm1zKTsKKworI2lmIGRlZmlu
ZWQoQVRfU1lNTElOS19OT0ZPTExPVykgJiYgZGVmaW5lZChBVF9GRENXRCkKKyAgY29uc3QgaW50
IGZsYWdzID0gc2V0X3N5bV9wZXJtcyA/IEFUX1NZTUxJTktfTk9GT0xMT1cgOiAwOworICBpZiAo
OjpmY2htb2RhdChBVF9GRENXRCwgcC5jX3N0cigpLCByZWFsX3Blcm1zLCBmbGFncykgPT0gLTEp
IHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisjZWxzZQor
ICBpZiAoc2V0X3N5bV9wZXJtcykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpvcGVyYXRp
b25fbm90X3N1cHBvcnRlZCk7CisgIGlmICg6OmNobW9kKHAuY19zdHIoKSwgcmVhbF9wZXJtcykg
PT0gLTEpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9Cisj
ZW5kaWYKK30KKworcGF0aCBfX3JlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJyZWFkX3N5bWxpbmsiLCBlYywgJnAp
OworCisgIGNoYXIgYnVmZltQQVRIX01BWCArIDFdOworICBlcnJvcl9jb2RlIG1fZWM7CisgIDo6
c3NpemVfdCByZXQ7CisgIGlmICgocmV0ID0gOjpyZWFkbGluayhwLmNfc3RyKCksIGJ1ZmYsIFBB
VEhfTUFYKSkgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkp
OworICB9CisgIF9MSUJDUFBfQVNTRVJUKHJldCA8PSBQQVRIX01BWCwgIlRPRE8iKTsKKyAgX0xJ
QkNQUF9BU1NFUlQocmV0ID4gMCwgIlRPRE8iKTsKKyAgYnVmZltyZXRdID0gMDsKKyAgcmV0dXJu
IHtidWZmfTsKK30KKworYm9vbCBfX3JlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJyZW1vdmUiLCBlYywgJnApOworICBpZiAo
OjpyZW1vdmUocC5jX3N0cigpKSA9PSAtMSkgeworICAgIGlmIChlcnJubyAhPSBFTk9FTlQpCisg
ICAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9
CisgIHJldHVybiB0cnVlOworfQorCituYW1lc3BhY2UgeworCit1aW50bWF4X3QgcmVtb3ZlX2Fs
bF9pbXBsKHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUmIGVjKSB7CisgIGNvbnN0IGF1dG8gbnBv
cyA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oLTEpOworICBjb25zdCBmaWxlX3N0YXR1cyBzdCA9
IF9fc3ltbGlua19zdGF0dXMocCwgJmVjKTsKKyAgaWYgKGVjKQorICAgIHJldHVybiBucG9zOwor
ICB1aW50bWF4X3QgY291bnQgPSAxOworICBpZiAoaXNfZGlyZWN0b3J5KHN0KSkgeworICAgIGZv
ciAoZGlyZWN0b3J5X2l0ZXJhdG9yIGl0KHAsIGVjKTsgIWVjICYmIGl0ICE9IGRpcmVjdG9yeV9p
dGVyYXRvcigpOworICAgICAgICAgaXQuaW5jcmVtZW50KGVjKSkgeworICAgICAgYXV0byBvdGhl
cl9jb3VudCA9IHJlbW92ZV9hbGxfaW1wbChpdC0+cGF0aCgpLCBlYyk7CisgICAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiBucG9zOworICAgICAgY291bnQgKz0gb3RoZXJfY291bnQ7CisgICAg
fQorICAgIGlmIChlYykKKyAgICAgIHJldHVybiBucG9zOworICB9CisgIGlmICghX19yZW1vdmUo
cCwgJmVjKSkKKyAgICByZXR1cm4gbnBvczsKKyAgcmV0dXJuIGNvdW50OworfQorCit9IC8vIGVu
ZCBuYW1lc3BhY2UKKwordWludG1heF90IF9fcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoInJlbW92ZV9hbGwi
LCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbWVjOworICBhdXRvIGNvdW50ID0gcmVtb3ZlX2Fs
bF9pbXBsKHAsIG1lYyk7CisgIGlmIChtZWMpIHsKKyAgICBpZiAobWVjID09IGVycmM6Om5vX3N1
Y2hfZmlsZV9vcl9kaXJlY3RvcnkpCisgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChtZWMpOworICB9CisgIHJldHVybiBjb3VudDsKK30KKwordm9pZCBfX3JlbmFtZShjb25z
dCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPHZvaWQ+IGVycigicmVuYW1lIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpyZW5h
bWUoZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19yZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50
bWF4X3Qgc2l6ZSwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigi
cmVzaXplX2ZpbGUiLCBlYywgJnApOworICBpZiAoOjp0cnVuY2F0ZShwLmNfc3RyKCksIHN0YXRp
Y19jYXN0PCA6Om9mZl90PihzaXplKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2Fw
dHVyZV9lcnJubygpKTsKK30KKworc3BhY2VfaW5mbyBfX3NwYWNlKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInNwYWNlIiwgZWMsICZw
KTsKKyAgc3BhY2VfaW5mbyBzaTsKKyAgc3RydWN0IHN0YXR2ZnMgbV9zdmZzID0ge307CisgIGlm
ICg6OnN0YXR2ZnMocC5jX3N0cigpLCAmbV9zdmZzKSA9PSAtMSkgeworICAgIGVyci5yZXBvcnQo
Y2FwdHVyZV9lcnJubygpKTsKKyAgICBzaS5jYXBhY2l0eSA9IHNpLmZyZWUgPSBzaS5hdmFpbGFi
bGUgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAgICByZXR1cm4gc2k7CisgIH0KKyAg
Ly8gTXVsdGlwbHkgd2l0aCBvdmVyZmxvdyBjaGVja2luZy4KKyAgYXV0byBkb19tdWx0ID0gWyZd
KHVpbnRtYXhfdCYgb3V0LCB1aW50bWF4X3Qgb3RoZXIpIHsKKyAgICBvdXQgPSBvdGhlciAqIG1f
c3Zmcy5mX2Zyc2l6ZTsKKyAgICBpZiAob3RoZXIgPT0gMCB8fCBvdXQgLyBvdGhlciAhPSBtX3N2
ZnMuZl9mcnNpemUpCisgICAgICBvdXQgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAg
fTsKKyAgZG9fbXVsdChzaS5jYXBhY2l0eSwgbV9zdmZzLmZfYmxvY2tzKTsKKyAgZG9fbXVsdChz
aS5mcmVlLCBtX3N2ZnMuZl9iZnJlZSk7CisgIGRvX211bHQoc2kuYXZhaWxhYmxlLCBtX3N2ZnMu
Zl9iYXZhaWwpOworICByZXR1cm4gc2k7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0
IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIHJldHVybiBkZXRhaWw6OnBvc2l4X3N0YXQo
cCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBfX3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIHJldHVybiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAsIGVjKTsK
K30KKworcGF0aCBfX3RlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJy
b3JIYW5kbGVyPHBhdGg+IGVycigidGVtcF9kaXJlY3RvcnlfcGF0aCIsIGVjKTsKKworICBjb25z
dCBjaGFyKiBlbnZfcGF0aHNbXSA9IHsiVE1QRElSIiwgIlRNUCIsICJURU1QIiwgIlRFTVBESVIi
fTsKKyAgY29uc3QgY2hhciogcmV0ID0gbnVsbHB0cjsKKworICBmb3IgKGF1dG8mIGVwIDogZW52
X3BhdGhzKQorICAgIGlmICgocmV0ID0gZ2V0ZW52KGVwKSkpCisgICAgICBicmVhazsKKyAgaWYg
KHJldCA9PSBudWxscHRyKQorICAgIHJldCA9ICIvdG1wIjsKKworICBwYXRoIHAocmV0KTsKKyAg
ZXJyb3JfY29kZSBtX2VjOworICBmaWxlX3N0YXR1cyBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChw
LCAmbV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChtX2VjLCAiY2Fubm90IGFjY2VzcyBwYXRoIFwiJXNcIiIsIHApOworCisgIGlmICghZXhpc3Rz
KHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpu
b3RfYV9kaXJlY3RvcnksICJwYXRoIFwiJXNcIiBpcyBub3QgYSBkaXJlY3RvcnkiLAorICAgICAg
ICAgICAgICAgICAgICAgIHApOworCisgIHJldHVybiBwOworfQorCitwYXRoIF9fd2Vha2x5X2Nh
bm9uaWNhbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
cGF0aD4gZXJyKCJ3ZWFrbHlfY2Fub25pY2FsIiwgZWMsICZwKTsKKworICBpZiAocC5lbXB0eSgp
KQorICAgIHJldHVybiBfX2Nhbm9uaWNhbCgiIiwgZWMpOworCisgIHBhdGggcmVzdWx0OworICBw
YXRoIHRtcDsKKyAgdG1wLl9fcmVzZXJ2ZShwLm5hdGl2ZSgpLnNpemUoKSk7CisgIGF1dG8gUFAg
PSBQYXRoUGFyc2VyOjpDcmVhdGVFbmQocC5uYXRpdmUoKSk7CisgIC0tUFA7CisgIHZlY3Rvcjxz
dHJpbmdfdmlld190PiBETkVQYXJ0czsKKworICB3aGlsZSAoUFAuU3RhdGUgIT0gUGF0aFBhcnNl
cjo6UFNfQmVmb3JlQmVnaW4pIHsKKyAgICB0bXAuYXNzaWduKGNyZWF0ZVZpZXcocC5uYXRpdmUo
KS5kYXRhKCksICZQUC5SYXdFbnRyeS5iYWNrKCkpKTsKKyAgICBlcnJvcl9jb2RlIG1fZWM7Cisg
ICAgZmlsZV9zdGF0dXMgc3QgPSBfX3N0YXR1cyh0bXAsICZtX2VjKTsKKyAgICBpZiAoIXN0YXR1
c19rbm93bihzdCkpIHsKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIH0gZWxz
ZSBpZiAoZXhpc3RzKHN0KSkgeworICAgICAgcmVzdWx0ID0gX19jYW5vbmljYWwodG1wLCBlYyk7
CisgICAgICBicmVhazsKKyAgICB9CisgICAgRE5FUGFydHMucHVzaF9iYWNrKCpQUCk7CisgICAg
LS1QUDsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfQmVmb3JlQmVnaW4p
CisgICAgcmVzdWx0ID0gX19jYW5vbmljYWwoIiIsIGVjKTsKKyAgaWYgKGVjKQorICAgIGVjLT5j
bGVhcigpOworICBpZiAoRE5FUGFydHMuZW1wdHkoKSkKKyAgICByZXR1cm4gcmVzdWx0OworICBm
b3IgKGF1dG8gSXQgPSBETkVQYXJ0cy5yYmVnaW4oKTsgSXQgIT0gRE5FUGFydHMucmVuZCgpOyAr
K0l0KQorICAgIHJlc3VsdCAvPSAqSXQ7CisgIHJldHVybiByZXN1bHQubGV4aWNhbGx5X25vcm1h
bCgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoIGRlZmluaXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qIGNv
bnN0ZXhwciBwYXRoOjp2YWx1ZV90eXBlIHBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3I7ICovCisK
K3BhdGgmIHBhdGg6OnJlcGxhY2VfZXh0ZW5zaW9uKHBhdGggY29uc3QmIHJlcGxhY2VtZW50KSB7
CisgIHBhdGggcCA9IGV4dGVuc2lvbigpOworICBpZiAobm90IHAuZW1wdHkoKSkgeworICAgIF9f
cG5fLmVyYXNlKF9fcG5fLnNpemUoKSAtIHAubmF0aXZlKCkuc2l6ZSgpKTsKKyAgfQorICBpZiAo
IXJlcGxhY2VtZW50LmVtcHR5KCkpIHsKKyAgICBpZiAocmVwbGFjZW1lbnQubmF0aXZlKClbMF0g
IT0gJy4nKSB7CisgICAgICBfX3BuXyArPSAiLiI7CisgICAgfQorICAgIF9fcG5fLmFwcGVuZChy
ZXBsYWNlbWVudC5fX3BuXyk7CisgIH0KKyAgcmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLyBwYXRoLmRlY29tcG9zZQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9f
cm9vdF9uYW1lKCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4o
X19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkKKyAg
ICByZXR1cm4gKlBQOworICByZXR1cm4ge307Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19y
b290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJl
Z2luKF9fcG5fKTsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUp
CisgICAgKytQUDsKKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikK
KyAgICByZXR1cm4gKlBQOworICByZXR1cm4ge307Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6
X19yb290X3BhdGhfcmF3KCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRl
QmVnaW4oX19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFt
ZSkgeworICAgIGF1dG8gTmV4dENoID0gUFAucGVlaygpOworICAgIGlmIChOZXh0Q2ggJiYgKk5l
eHRDaCA9PSAnLycpIHsKKyAgICAgICsrUFA7CisgICAgICByZXR1cm4gY3JlYXRlVmlldyhfX3Bu
Xy5kYXRhKCksICZQUC5SYXdFbnRyeS5iYWNrKCkpOworICAgIH0KKyAgICByZXR1cm4gUFAuUmF3
RW50cnk7CisgIH0KKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikK
KyAgICByZXR1cm4gKlBQOworICByZXR1cm4ge307Cit9CisKK3N0YXRpYyBib29sIENvbnN1bWVS
b290RGlyKFBhdGhQYXJzZXIqIFBQKSB7CisgIHdoaWxlIChQUC0+U3RhdGUgPD0gUGF0aFBhcnNl
cjo6UFNfSW5Sb290RGlyKQorICAgICsrKCpQUCk7CisgIHJldHVybiBQUC0+U3RhdGUgPT0gUGF0
aFBhcnNlcjo6UFNfQXRFbmQ7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yZWxhdGl2ZV9w
YXRoKCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8p
OworICBpZiAoQ29uc3VtZVJvb3REaXIoJlBQKSkKKyAgICByZXR1cm4ge307CisgIHJldHVybiBj
cmVhdGVWaWV3KFBQLlJhd0VudHJ5LmRhdGEoKSwgJl9fcG5fLmJhY2soKSk7Cit9CisKK3N0cmlu
Z192aWV3X3QgcGF0aDo6X19wYXJlbnRfcGF0aCgpIGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisg
ICAgcmV0dXJuIHt9OworICAvLyBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJvb3QgcGF0aCBidXQg
bm90IGEgcmVsYXRpdmUgcGF0aC4gSW4gdGhhdCBjYXNlCisgIC8vIHJldHVybiAqdGhpcy4KKyAg
eworICAgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgaWYg
KENvbnN1bWVSb290RGlyKCZQUCkpCisgICAgICByZXR1cm4gX19wbl87CisgIH0KKyAgLy8gT3Ro
ZXJ3aXNlIHJlbW92ZSBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcGF0aCwg
YW5kIHJldHVybgorICAvLyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhhdCBwYXRoCisgIHsKKyAg
ICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlRW5kKF9fcG5fKTsKKyAgICAtLVBQOworICAg
IGlmIChQUC5SYXdFbnRyeS5kYXRhKCkgPT0gX19wbl8uZGF0YSgpKQorICAgICAgcmV0dXJuIHt9
OworICAgIC0tUFA7CisgICAgcmV0dXJuIGNyZWF0ZVZpZXcoX19wbl8uZGF0YSgpLCAmUFAuUmF3
RW50cnkuYmFjaygpKTsKKyAgfQorfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fZmlsZW5hbWUo
KSBjb25zdCB7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiB7fTsKKyAgeworICAgIFBhdGhQ
YXJzZXIgUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1
bWVSb290RGlyKCZQUCkpCisgICAgICByZXR1cm4ge307CisgIH0KKyAgcmV0dXJuICooLS1QYXRo
UGFyc2VyOjpDcmVhdGVFbmQoX19wbl8pKTsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3N0
ZW0oKSBjb25zdCB7CisgIHJldHVybiBwYXJzZXI6OnNlcGFyYXRlX2ZpbGVuYW1lKF9fZmlsZW5h
bWUoKSkuZmlyc3Q7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19leHRlbnNpb24oKSBjb25z
dCB7CisgIHJldHVybiBwYXJzZXI6OnNlcGFyYXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSkuc2Vj
b25kOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmdlbgorCitlbnVtIFBhdGhQ
YXJ0S2luZCA6IHVuc2lnbmVkIGNoYXIgeworICBQS19Ob25lLAorICBQS19Sb290U2VwLAorICBQ
S19GaWxlbmFtZSwKKyAgUEtfRG90LAorICBQS19Eb3REb3QsCisgIFBLX1RyYWlsaW5nU2VwCit9
OworCitzdGF0aWMgUGF0aFBhcnRLaW5kIENsYXNzaWZ5UGF0aFBhcnQoc3RyaW5nX3ZpZXdfdCBQ
YXJ0KSB7CisgIGlmIChQYXJ0LmVtcHR5KCkpCisgICAgcmV0dXJuIFBLX1RyYWlsaW5nU2VwOwor
ICBpZiAoUGFydCA9PSAiLiIpCisgICAgcmV0dXJuIFBLX0RvdDsKKyAgaWYgKFBhcnQgPT0gIi4u
IikKKyAgICByZXR1cm4gUEtfRG90RG90OworICBpZiAoUGFydCA9PSAiLyIpCisgICAgcmV0dXJu
IFBLX1Jvb3RTZXA7CisgIHJldHVybiBQS19GaWxlbmFtZTsKK30KKworcGF0aCBwYXRoOjpsZXhp
Y2FsbHlfbm9ybWFsKCkgY29uc3QgeworICBpZiAoX19wbl8uZW1wdHkoKSkKKyAgICByZXR1cm4g
KnRoaXM7CisKKyAgdXNpbmcgUGFydEtpbmRQYWlyID0gcGFpcjxzdHJpbmdfdmlld190LCBQYXRo
UGFydEtpbmQ+OworICB2ZWN0b3I8UGFydEtpbmRQYWlyPiBQYXJ0czsKKyAgLy8gR3Vlc3MgYXMg
dG8gaG93IG1hbnkgZWxlbWVudHMgdGhlIHBhdGggaGFzIHRvIGF2b2lkIHJlYWxsb2NhdGluZy4K
KyAgUGFydHMucmVzZXJ2ZSgzMik7CisKKyAgLy8gVHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhl
IHBhcnRzIGFzIHdlIGNvbGxlY3QgdGhlbS4gVGhpcyBhbGxvd3MgdGhlCisgIC8vIHJlc3VsdGlu
ZyBwYXRoIHRvIHJlc2VydmUgdGhlIGNvcnJlY3QgYW1vdW50IG9mIG1lbW9yeS4KKyAgc2l6ZV90
IE5ld1BhdGhTaXplID0gMDsKKyAgYXV0byBBZGRQYXJ0ID0gWyZdKFBhdGhQYXJ0S2luZCBLLCBz
dHJpbmdfdmlld190IFApIHsKKyAgICBOZXdQYXRoU2l6ZSArPSBQLnNpemUoKTsKKyAgICBQYXJ0
cy5lbXBsYWNlX2JhY2soUCwgSyk7CisgIH07CisgIGF1dG8gTGFzdFBhcnRLaW5kID0gWyZdKCkg
eworICAgIGlmIChQYXJ0cy5lbXB0eSgpKQorICAgICAgcmV0dXJuIFBLX05vbmU7CisgICAgcmV0
dXJuIFBhcnRzLmJhY2soKS5zZWNvbmQ7CisgIH07CisKKyAgYm9vbCBNYXliZU5lZWRUcmFpbGlu
Z1NlcCA9IGZhbHNlOworICAvLyBCdWlsZCBhIHN0YWNrIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmlu
ZyBlbGVtZW50cyBvZiB0aGUgcGF0aCwgcG9wcGluZyBvZmYKKyAgLy8gZWxlbWVudHMgd2hpY2gg
b2NjdXIgYmVmb3JlIGEgJy4uJyBlbnRyeS4KKyAgZm9yIChhdXRvIFBQID0gUGF0aFBhcnNlcjo6
Q3JlYXRlQmVnaW4oX19wbl8pOyBQUDsgKytQUCkgeworICAgIGF1dG8gUGFydCA9ICpQUDsKKyAg
ICBQYXRoUGFydEtpbmQgS2luZCA9IENsYXNzaWZ5UGF0aFBhcnQoUGFydCk7CisgICAgc3dpdGNo
IChLaW5kKSB7CisgICAgY2FzZSBQS19GaWxlbmFtZToKKyAgICBjYXNlIFBLX1Jvb3RTZXA6IHsK
KyAgICAgIC8vIEFkZCBhbGwgbm9uLWRvdCBhbmQgbm9uLWRvdC1kb3QgZWxlbWVudHMgdG8gdGhl
IHN0YWNrIG9mIGVsZW1lbnRzLgorICAgICAgQWRkUGFydChLaW5kLCBQYXJ0KTsKKyAgICAgIE1h
eWJlTmVlZFRyYWlsaW5nU2VwID0gZmFsc2U7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQS19Eb3REb3Q6IHsKKyAgICAgIC8vIE9ubHkgcHVzaCBhICIuLiIgZWxlbWVudCBpZiB0aGVy
ZSBhcmUgbm8gZWxlbWVudHMgcHJlY2VkaW5nIHRoZSAiLi4iLAorICAgICAgLy8gb3IgaWYgdGhl
IHByZWNlZGluZyBlbGVtZW50IGlzIGl0c2VsZiAiLi4iLgorICAgICAgYXV0byBMYXN0S2luZCA9
IExhc3RQYXJ0S2luZCgpOworICAgICAgaWYgKExhc3RLaW5kID09IFBLX0ZpbGVuYW1lKSB7Cisg
ICAgICAgIE5ld1BhdGhTaXplIC09IFBhcnRzLmJhY2soKS5maXJzdC5zaXplKCk7CisgICAgICAg
IFBhcnRzLnBvcF9iYWNrKCk7CisgICAgICB9IGVsc2UgaWYgKExhc3RLaW5kICE9IFBLX1Jvb3RT
ZXApCisgICAgICAgIEFkZFBhcnQoUEtfRG90RG90LCAiLi4iKTsKKyAgICAgIE1heWJlTmVlZFRy
YWlsaW5nU2VwID0gTGFzdEtpbmQgPT0gUEtfRmlsZW5hbWU7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQS19Eb3Q6CisgICAgY2FzZSBQS19UcmFpbGluZ1NlcDogeworICAgICAgTWF5
YmVOZWVkVHJhaWxpbmdTZXAgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
UEtfTm9uZToKKyAgICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKyAgLy8g
W2ZzLnBhdGguZ2VuZXJpY11wNi44OiBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgYWRkIGEgZG90Lgor
ICBpZiAoUGFydHMuZW1wdHkoKSkKKyAgICByZXR1cm4gIi4iOworCisgIC8vIFtmcy5wYXRoLmdl
bmVyaWNdcDYuNzogSWYgdGhlIGxhc3QgZmlsZW5hbWUgaXMgZG90LWRvdCwgcmVtb3ZlIGFueQor
ICAvLyB0cmFpbGluZyBkaXJlY3Rvcnktc2VwYXJhdG9yLgorICBib29sIE5lZWRUcmFpbGluZ1Nl
cCA9IE1heWJlTmVlZFRyYWlsaW5nU2VwICYmIExhc3RQYXJ0S2luZCgpID09IFBLX0ZpbGVuYW1l
OworCisgIHBhdGggUmVzdWx0OworICBSZXN1bHQuX19wbl8ucmVzZXJ2ZShQYXJ0cy5zaXplKCkg
KyBOZXdQYXRoU2l6ZSArIE5lZWRUcmFpbGluZ1NlcCk7CisgIGZvciAoYXV0byYgUEsgOiBQYXJ0
cykKKyAgICBSZXN1bHQgLz0gUEsuZmlyc3Q7CisKKyAgaWYgKE5lZWRUcmFpbGluZ1NlcCkKKyAg
ICBSZXN1bHQgLz0gIiI7CisKKyAgcmV0dXJuIFJlc3VsdDsKK30KKworc3RhdGljIGludCBEZXRl
cm1pbmVMZXhpY2FsRWxlbWVudENvdW50KFBhdGhQYXJzZXIgUFApIHsKKyAgaW50IENvdW50ID0g
MDsKKyAgZm9yICg7IFBQOyArK1BQKSB7CisgICAgYXV0byBFbGVtID0gKlBQOworICAgIGlmIChF
bGVtID09ICIuLiIpCisgICAgICAtLUNvdW50OworICAgIGVsc2UgaWYgKEVsZW0gIT0gIi4iKQor
ICAgICAgKytDb3VudDsKKyAgfQorICByZXR1cm4gQ291bnQ7Cit9CisKK3BhdGggcGF0aDo6bGV4
aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgmIGJhc2UpIGNvbnN0IHsKKyAgeyAvLyBwZXJmb3Jt
IHJvb3QtbmFtZS9yb290LWRpcmVjdG9yeSBtaXNtYXRjaCBjaGVja3MKKyAgICBhdXRvIFBQID0g
UGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGF1dG8gUFBCYXNlID0gUGF0aFBh
cnNlcjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7CisgICAgYXV0byBDaGVja0l0ZXJNaXNtYXRj
aEF0QmFzZSA9IFsmXSgpIHsKKyAgICAgIHJldHVybiBQUC5TdGF0ZSAhPSBQUEJhc2UuU3RhdGUg
JiYKKyAgICAgICAgICAgICAoUFAuaW5Sb290UGF0aCgpIHx8IFBQQmFzZS5pblJvb3RQYXRoKCkp
OworICAgIH07CisgICAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUg
JiYKKyAgICAgICAgUFBCYXNlLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpIHsK
KyAgICAgIGlmICgqUFAgIT0gKlBQQmFzZSkKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH0gZWxz
ZSBpZiAoQ2hlY2tJdGVyTWlzbWF0Y2hBdEJhc2UoKSkKKyAgICAgIHJldHVybiB7fTsKKworICAg
IGlmIChQUC5pblJvb3RQYXRoKCkpCisgICAgICArK1BQOworICAgIGlmIChQUEJhc2UuaW5Sb290
UGF0aCgpKQorICAgICAgKytQUEJhc2U7CisgICAgaWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNl
KCkpCisgICAgICByZXR1cm4ge307CisgIH0KKworICAvLyBGaW5kIHRoZSBmaXJzdCBtaXNtYXRj
aGluZyBlbGVtZW50CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7
CisgIGF1dG8gUFBCYXNlID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7Cisg
IHdoaWxlIChQUCAmJiBQUEJhc2UgJiYgUFAuU3RhdGUgPT0gUFBCYXNlLlN0YXRlICYmICpQUCA9
PSAqUFBCYXNlKSB7CisgICAgKytQUDsKKyAgICArK1BQQmFzZTsKKyAgfQorCisgIC8vIElmIHRo
ZXJlIGlzIG5vIG1pc21hdGNoLCByZXR1cm4gIi4iLgorICBpZiAoIVBQICYmICFQUEJhc2UpCisg
ICAgcmV0dXJuICIuIjsKKworICAvLyBPdGhlcndpc2UsIGRldGVybWluZSB0aGUgbnVtYmVyIG9m
IGVsZW1lbnRzLCAnbicsIHdoaWNoIGFyZSBub3QgZG90IG9yCisgIC8vIGRvdC1kb3QgbWludXMg
dGhlIG51bWJlciBvZiBkb3QtZG90IGVsZW1lbnRzLgorICBpbnQgRWxlbUNvdW50ID0gRGV0ZXJt
aW5lTGV4aWNhbEVsZW1lbnRDb3VudChQUEJhc2UpOworICBpZiAoRWxlbUNvdW50IDwgMCkKKyAg
ICByZXR1cm4ge307CisKKyAgLy8gcmV0dXJuIGEgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoICduJyBk
b3QtZG90IGVsZW1lbnRzLCBmb2xsb3dlZCBieSB0aGUgdGhlCisgIC8vIGVsZW1lbnRzIG9mICcq
dGhpcycgYWZ0ZXIgdGhlIG1pc21hdGNoLgorICBwYXRoIFJlc3VsdDsKKyAgLy8gRklYTUU6IFJl
c2VydmUgZW5vdWdoIHJvb20gaW4gUmVzdWx0IHRoYXQgaXQgd29uJ3QgaGF2ZSB0byByZS1hbGxv
Y2F0ZS4KKyAgd2hpbGUgKEVsZW1Db3VudC0tKQorICAgIFJlc3VsdCAvPSAiLi4iOworICBmb3Ig
KDsgUFA7ICsrUFApCisgICAgUmVzdWx0IC89ICpQUDsKKyAgcmV0dXJuIFJlc3VsdDsKK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5jb21wYXJpc29ucworaW50IHBhdGg6Ol9fY29t
cGFyZShzdHJpbmdfdmlld190IF9fcykgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6
Q3JlYXRlQmVnaW4oX19wbl8pOworICBhdXRvIFBQMiA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2lu
KF9fcyk7CisgIHdoaWxlIChQUCAmJiBQUDIpIHsKKyAgICBpbnQgcmVzID0gKCpQUCkuY29tcGFy
ZSgqUFAyKTsKKyAgICBpZiAocmVzICE9IDApCisgICAgICByZXR1cm4gcmVzOworICAgICsrUFA7
CisgICAgKytQUDI7CisgIH0KKyAgaWYgKFBQLlN0YXRlID09IFBQMi5TdGF0ZSAmJiAhUFApCisg
ICAgcmV0dXJuIDA7CisgIGlmICghUFApCisgICAgcmV0dXJuIC0xOworICByZXR1cm4gMTsKK30K
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5ub25tZW1iZXJzCitzaXplX3QgaGFzaF92
YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhjZXB0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6
OkNyZWF0ZUJlZ2luKF9fcC5uYXRpdmUoKSk7CisgIHNpemVfdCBoYXNoX3ZhbHVlID0gMDsKKyAg
aGFzaDxzdHJpbmdfdmlld190PiBoYXNoZXI7CisgIHdoaWxlIChQUCkgeworICAgIGhhc2hfdmFs
dWUgPSBfX2hhc2hfY29tYmluZShoYXNoX3ZhbHVlLCBoYXNoZXIoKlBQKSk7CisgICAgKytQUDsK
KyAgfQorICByZXR1cm4gaGFzaF92YWx1ZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8g
cGF0aC5pdHIKK3BhdGg6Oml0ZXJhdG9yIHBhdGg6OmJlZ2luKCkgY29uc3QgeworICBhdXRvIFBQ
ID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpdGVyYXRvciBpdDsKKyAgaXQu
X19wYXRoX3B0cl8gPSB0aGlzOworICBpdC5fX3N0YXRlXyA9IHN0YXRpY19jYXN0PHBhdGg6Oml0
ZXJhdG9yOjpfUGFyc2VyU3RhdGU+KFBQLlN0YXRlKTsKKyAgaXQuX19lbnRyeV8gPSBQUC5SYXdF
bnRyeTsKKyAgaXQuX19zdGFzaGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJu
IGl0OworfQorCitwYXRoOjppdGVyYXRvciBwYXRoOjplbmQoKSBjb25zdCB7CisgIGl0ZXJhdG9y
IGl0e307CisgIGl0Ll9fc3RhdGVfID0gcGF0aDo6aXRlcmF0b3I6Ol9BdEVuZDsKKyAgaXQuX19w
YXRoX3B0cl8gPSB0aGlzOworICByZXR1cm4gaXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRo
OjppdGVyYXRvcjo6X19pbmNyZW1lbnQoKSB7CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0cl8t
Pm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0ZV8pOworICArK1BQOworICBfX3N0YXRlXyA9IHN0
YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJhd0Vu
dHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFApOworICByZXR1cm4gKnRo
aXM7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVyYXRvcjo6X19kZWNyZW1lbnQoKSB7
CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0cl8tPm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0
ZV8pOworICAtLVBQOworICBfX3N0YXRlXyA9IHN0YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAu
U3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJhd0VudHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19h
c3NpZ25fdmlldygqUFApOworICByZXR1cm4gKnRoaXM7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGVudHJ5IGRlZmlu
aXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgX0xJQkNQUF9XSU4zMkFQ
SQorZXJyb3JfY29kZSBkaXJlY3RvcnlfZW50cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsK
KyAgX19kYXRhXy5fX3Jlc2V0KCk7CisgIGVycm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBTdGF0
VCBmdWxsX3N0OworICBmaWxlX3N0YXR1cyBzdCA9IGRldGFpbDo6cG9zaXhfbHN0YXQoX19wXywg
ZnVsbF9zdCwgJmZhaWx1cmVfZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICBf
X2RhdGFfLl9fcmVzZXQoKTsKKyAgICByZXR1cm4gZmFpbHVyZV9lYzsKKyAgfQorCisgIGlmICgh
X1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9WU1REX0ZTOjppc19zeW1saW5rKHN0KSkgeworICAg
IF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hOb25TeW1s
aW5rOworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9u
X3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICB9IGVsc2UgeyAvLyB3ZSBoYXZlIGEg
c3ltbGluaworICAgIF9fZGF0YV8uX19zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAg
ICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rZWQgZW50aXR5LgorICAgIC8v
IElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBzaW5jZSB3ZSBkb24ndCB3YW50IGVycm9ycyByZWdh
cmRpbmcgc3ltbGluaworICAgIC8vIHJlc29sdXRpb24gdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHVz
ZXIuCisgICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIHN0ID0gZGV0YWlsOjpwb3NpeF9z
dGF0KF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVkX2VjKTsKKworICAgIF9fZGF0YV8uX190eXBlXyA9
IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9u
cygpOworCisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4gb25s
eSBwYXJ0aWFsbHkgcG9wdWxhdGUgdGhlCisgICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0dXNf
a25vd24oc3QpKSB7CisgICAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50
cnk6Ol9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29kZXt9
OworICAgIH0KKyAgICAvLyBPdGhlcndpc2UsIHdlIHJlc29sdmVkIHRoZSBsaW5rLCBwb3RlbnRp
YWxseSBhcyBub3QgZXhpc3RpbmcuCisgICAgLy8gVGhhdCdzIE9LLgorICAgIF9fZGF0YV8uX19j
YWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAg
aWYgKF9WU1REX0ZTOjppc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIF9fZGF0YV8uX19zaXplXyA9
IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oZnVsbF9zdC5zdF9zaXplKTsKKworICBpZiAoX1ZTVERf
RlM6OmV4aXN0cyhzdCkpIHsKKyAgICBfX2RhdGFfLl9fbmxpbmtfID0gc3RhdGljX2Nhc3Q8dWlu
dG1heF90PihmdWxsX3N0LnN0X25saW5rKTsKKworICAgIC8vIEF0dGVtcHQgdG8gZXh0cmFjdCB0
aGUgbXRpbWUsIGFuZCBmYWlsIGlmIGl0J3Mgbm90IHJlcHJlc2VudGFibGUgdXNpbmcKKyAgICAv
LyBmaWxlX3RpbWVfdHlwZS4gRm9yIG5vdyB3ZSBpZ25vcmUgdGhlIGVycm9yLCBhcyB3ZSdsbCBy
ZXBvcnQgaXQgd2hlbgorICAgIC8vIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSB1c2VkLgorICAgIGVy
cm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBfX2RhdGFfLl9fd3JpdGVfdGltZV8gPQorICAgICAg
ICBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVkX2VjKTsK
KyAgfQorCisgIHJldHVybiBmYWlsdXJlX2VjOworfQorI2Vsc2UKK2Vycm9yX2NvZGUgZGlyZWN0
b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBub2V4Y2VwdCB7CisgIF9fZGF0YV8uX19yZXNldCgp
OworICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7CisKKyAgZmlsZV9zdGF0dXMgc3QgPSBfVlNURF9G
Uzo6c3ltbGlua19zdGF0dXMoX19wXywgZmFpbHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3du
KHN0KSkgeworICAgIF9fZGF0YV8uX19yZXNldCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOwor
ICB9CisKKyAgaWYgKCFfVlNURF9GUzo6ZXhpc3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxp
bmsoc3QpKSB7CisgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5Ojpf
UmVmcmVzaE5vblN5bWxpbms7CisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAg
IF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7
IC8vIHdlIGhhdmUgYSBzeW1saW5rCisgICAgX19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJt
aXNzaW9ucygpOworICAgIC8vIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBl
bnRpdHkuCisgICAgLy8gSWdub3JlIGVycm9ycyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdh
bnQgZXJyb3JzIHJlZ2FyZGluZyBzeW1saW5rCisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBv
cnRlZCB0byB0aGUgdXNlci4KKyAgICBlcnJvcl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBf
VlNURF9GUzo6c3RhdHVzKF9fcF8sIGlnbm9yZWRfZWMpOworCisgICAgX19kYXRhXy5fX3R5cGVf
ID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Np
b25zKCk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbGluaywgdGhlbiBv
bmx5IHBhcnRpYWxseSBwb3B1bGF0ZSB0aGUKKyAgICAvLyBjYWNoZS4KKyAgICBpZiAoIXN0YXR1
c19rbm93bihzdCkpIHsKKyAgICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9l
bnRyeTo6X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDsKKyAgICAgIHJldHVybiBlcnJvcl9jb2Rl
e307CisgICAgfQorICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6
X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGJy
b2tlbiwgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvbmx5IGEgcGxhY2Vob2xkZXIuCisgIC8vIFdl
IG5lZWQgdG8gY2FjaGUgbGFzdF93cml0ZV90aW1lLCBmaWxlX3NpemUsIGFuZCBoYXJkX2xpbmtf
Y291bnQgaGVyZSBiZWZvcmUKKyAgLy8gdGhlIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHdvcmtz
LgorCisgIHJldHVybiBmYWlsdXJlX2VjOworfQorI2VuZGlmCisKK19MSUJDUFBfRU5EX05BTUVT
UEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVORCBmaWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIC0t
ICovCisKKyNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxNTAw
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dURi93dGYvU3RkRmlsZXN5
c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNzAzIEBACisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBm
aWxlc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAg
ICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisv
LyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVy
c2l0eSBvZiBJbGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLlRY
VCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWYgX19oYXNf
aW5jbHVkZSg8ZmlsZXN5c3RlbT4pCisjaW5jbHVkZSA8ZmlsZXN5c3RlbT4KKyNlbHNlCisKKy8q
IEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBmcm9tIHIzNDM4Mzggb2YgdGhlIGxpYmMr
KyBwcm9qZWN0LiBUaGlzCisgICBpcyBvbmx5IG5lZWRlZCB1bnRpbCBtYWNPUyAxMC4xNCBpcyBu
byBsb25nZXIgc3VwcG9ydGVkIGF0IHdoaWNoIHBvaW50IGFsbAorICAgcG9ydHMgd2lsbCBzdXBw
b3J0IDxmaWxlc3lzdGVtPiBkaXJlY3RseS4KKyovCisKKworI2lmbmRlZiBfTElCQ1BQX0ZJTEVT
WVNURU0KKyNkZWZpbmUgX0xJQkNQUF9GSUxFU1lTVEVNCisvKgorICAgIGZpbGVzeXN0ZW0gc3lu
b3BzaXMKKworICAgIG5hbWVzcGFjZSBzdGQgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7CisKKyAg
ICBjbGFzcyBwYXRoOworCisgICAgdm9pZCBzd2FwKHBhdGgmIGxocywgcGF0aCYgcmhzKSBub2V4
Y2VwdDsKKyAgICBzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdDsKKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9l
eGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYg
cmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgcGF0aCYgbGhzLCBjb25z
dCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBs
aHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0
IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9y
Pj0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworCisgICAgcGF0
aCBvcGVyYXRvci8gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKTsKKworICAgIC8v
IGZzLnBhdGguaW8gb3BlcmF0b3JzIGFyZSBmcmllbmRzIG9mIHBhdGguCisgICAgdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHM+CisgICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hh
clQsIHRyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXJULCB0cmFpdHM+
JiBvcywgY29uc3QgcGF0aCYgcCk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cz4KKyAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYKKyAgICBv
cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4mIGlzLCBwYXRoJiBwKTsKKwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBTb3VyY2U+CisgICAgICBwYXRoIHU4cGF0aChjb25zdCBTb3Vy
Y2UmIHNvdXJjZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CisgICAgICBw
YXRoIHU4cGF0aChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOworCisg
ICAgY2xhc3MgZmlsZXN5c3RlbV9lcnJvcjsKKyAgICBjbGFzcyBkaXJlY3RvcnlfZW50cnk7CisK
KyAgICBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAvLyBlbmFibGUgZGlyZWN0b3J5
X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgZGlyZWN0b3J5X2l0ZXJh
dG9yIGJlZ2luKGRpcmVjdG9yeV9pdGVyYXRvciBpdGVyKSBub2V4Y2VwdDsKKyAgICBkaXJlY3Rv
cnlfaXRlcmF0b3IgZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisg
ICAgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKworICAgIC8vIGVuYWJsZSBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisg
ICAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBiZWdpbihyZWN1cnNpdmVfZGlyZWN0b3J5
X2l0ZXJhdG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0
b3IgZW5kKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdDsKKwor
ICAgIGNsYXNzIGZpbGVfc3RhdHVzOworCisgICAgc3RydWN0IHNwYWNlX2luZm8KKyAgICB7Cisg
ICAgICB1aW50bWF4X3QgY2FwYWNpdHk7CisgICAgICB1aW50bWF4X3QgZnJlZTsKKyAgICAgIHVp
bnRtYXhfdCBhdmFpbGFibGU7CisgICAgfTsKKworICAgIGVudW0gY2xhc3MgZmlsZV90eXBlOwor
ICAgIGVudW0gY2xhc3MgcGVybXM7CisgICAgZW51bSBjbGFzcyBwZXJtX29wdGlvbnM7CisgICAg
ZW51bSBjbGFzcyBjb3B5X29wdGlvbnM7CisgICAgZW51bSBjbGFzcyBkaXJlY3Rvcnlfb3B0aW9u
czsKKworICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHRyaXZpYWwtY2xvY2s+ICBmaWxl
X3RpbWVfdHlwZTsKKworICAgIC8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucworCisgICAgcGF0aCBh
YnNvbHV0ZShjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUgJmVjKTsKKworICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHApOwor
ICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAg
IHZvaWQgY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgdm9pZCBj
b3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYyk7Cisg
ICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlv
bnMgb3B0aW9ucyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgm
IHRvLCBjb3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBlYyk7CisKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRo
JiB0byk7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYg
dG8sIGVycm9yX2NvZGUmIGVjKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9t
LCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbik7CisgICAgYm9vbCBjb3B5X2Zp
bGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2b2lk
IGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBu
ZXdfc3ltbGluayk7CisgICAgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgZXhpc3Rpbmdf
c3ltbGluaywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGNyZWF0ZV9kaXJl
Y3Rvcmllcyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcnko
Y29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShj
b25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzKTsKKyAgICBib29sIGNyZWF0ZV9k
aXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAg
ICB2b2lkIGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0
aCYgbmV3X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0
IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZv
aWQgY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X2hhcmRf
bGluayk7CisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBw
YXRoJiBuZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3Qg
cGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9zeW1s
aW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgcGF0
aCBjdXJyZW50X3BhdGgoKTsKKyAgICBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBlYyk7
CisgICAgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCk7CisgICAgdm9pZCBjdXJyZW50
X3BhdGgoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9v
bCBleGlzdHMoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBleGlzdHMoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBw
YXRoJiBwMik7CisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRo
JiBwMiwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIGZpbGVf
c2l6ZShjb25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBh
dGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHVpbnRtYXhfdCAgICBoYXJk
X2xpbmtfY291bnQoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIGhhcmRfbGlua19j
b3VudChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29s
IGlzX2Jsb2NrX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19ibG9j
a19maWxlKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9m
aWxlKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUo
Y29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2RpcmVjdG9yeShmaWxl
X3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBw
KTsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisKKyAgICBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wg
aXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAg
Ym9vbCBpc19maWZvKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfZmlmbyhj
b25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19vdGhlcihmaWxlX3N0YXR1cyBzKSBub2V4
Y2VwdDsKKyAgICBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfb3Ro
ZXIoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBp
c19yZWd1bGFyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19yZWd1
bGFyX2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19zb2NrZXQo
ZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYg
cCk7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgYm9vbCBpc19zeW1saW5rKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0Owor
ICAgIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3N5bWxpbmso
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgZmlsZV90aW1l
X3R5cGUgIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3RpbWVfdHlw
ZSAgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2Vw
dDsKKyAgICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlw
ZSBuZXdfdGltZSk7CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmls
ZV90aW1lX3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBh
dGgmIHAsIHBlcm1zIHBybXMsCisgICAgICAgICAgICAgICAgICAgICBwZXJtX29wdGlvbnMgb3B0
cz1wZXJtX29wdGlvbnM6OnJlcGxhY2UpOworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0
aCYgcCwgcGVybXMgcHJtcywgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworICAgIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVybV9vcHRpb25zIG9wdHMsCisg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHByb3hpbWF0
ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgcGF0aCBwcm94aW1hdGUoY29u
c3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSA9IGN1cnJlbnRfcGF0aCgpKTsKKyAgICBwYXRo
IHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlLCBlcnJvcl9jb2RlICZl
Yyk7CisKKyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIHJl
YWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHJl
bGF0aXZlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKyAgICBwYXRoIHJlbGF0aXZl
KGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2U9Y3VycmVudF9wYXRoKCkpOworICAgIHBh
dGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSwgZXJyb3JfY29kZSYg
ZWMpOworCisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCByZW1vdmUo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90
ICAgIHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIHJlbW92ZV9h
bGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCByZW5hbWUoY29u
c3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZvaWQgcmVuYW1lKGNvbnN0IHBh
dGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAg
ICB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplKTsKKyAgICB2
b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2Rl
JiBlYykgbm9leGNlcHQ7CisKKyAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0aCYgcCk7
CisgICAgc3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBu
b2V4Y2VwdDsKKworICAgIGZpbGVfc3RhdHVzICBzdGF0dXMoY29uc3QgcGF0aCYgcCk7CisgICAg
ZmlsZV9zdGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNl
cHQ7CisKKyAgICBib29sIHN0YXR1c19rbm93bihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKwor
ICAgIGZpbGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxl
X3N0YXR1cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCk7CisgICAgcGF0aCB0ZW1w
X2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggd2Vha2x5X2Nhbm9u
aWNhbChwYXRoIGNvbnN0JiBwKTsKKyAgICBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25z
dCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisKK30gfSAgLy8gbmFtZXNwYWNlcyBzdGQ6OmZpbGVz
eXN0ZW0KKworKi8KKworI2luY2x1ZGUgPF9fY29uZmlnPgorI2luY2x1ZGUgPGNzdGRkZWY+Cisj
aW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8aXRlcmF0b3I+
CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxtZW1vcnk+
CisjaW5jbHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN5c3RlbV9l
cnJvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGlvbWFuaXA+IC8vIGZvciBxdW90
ZWQKKyNpbmNsdWRlIDxzdHJpbmdfdmlldz4KKy8qICNpbmNsdWRlIDx2ZXJzaW9uPiAqLworCisj
aW5jbHVkZSA8X19kZWJ1Zz4KKworI2lmIF9MSUJDUFBfU1REX1ZFUiA+PSAxNworI2RlZmluZSBf
TElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJQkNQUF9CRUdJTl9OQU1F
U1BBQ0VfU1REIGlubGluZSBuYW1lc3BhY2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsK
KyNlbHNlCisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0gXAorICBf
TElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQgbmFtZXNwYWNlIF9fZnMgeyBuYW1lc3BhY2UgZmls
ZXN5c3RlbSB7CisjZW5kaWYKKworI2RlZmluZSBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZ
U1RFTSBcCisgIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9TVEQgfSB9CisKKyNkZWZpbmUgX1ZTVERf
RlMgX1ZTVEQ6Ol9fZnM6OmZpbGVzeXN0ZW0KKworI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05P
X1BSQUdNQV9TWVNURU1fSEVBREVSKQorI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlm
CisKK19MSUJDUFBfUFVTSF9NQUNST1MKKyNpbmNsdWRlIDxfX3VuZGVmX21hY3Jvcz4KKworI2lm
bmRlZiBfTElCQ1BQX0NYWDAzX0xBTkcKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZ
U1RFTQorCitzdHJ1Y3QgX0ZpbGVzeXN0ZW1DbG9jayB7CisjaWYgIWRlZmluZWQoX0xJQkNQUF9I
QVNfTk9fSU5UMTI4KQorICB0eXBlZGVmIF9faW50MTI4X3QgcmVwOworICB0eXBlZGVmIG5hbm8g
cGVyaW9kOworI2Vsc2UKKyAgdHlwZWRlZiBsb25nIGxvbmcgcmVwOworICB0eXBlZGVmIG5hbm8g
cGVyaW9kOworI2VuZGlmCisKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgcGVyaW9k
PiBkdXJhdGlvbjsKKyAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8X0ZpbGVzeXN0ZW1DbG9j
az4gdGltZV9wb2ludDsKKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEg
Y29uc3QgYm9vbCBpc19zdGVhZHkgPSBmYWxzZTsKKworICBfTElCQ1BQX0ZVTkNfVklTIHN0YXRp
YyB0aW1lX3BvaW50IG5vdygpIG5vZXhjZXB0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgc3RhdGljIHRpbWVfdCB0b190aW1lX3QoY29uc3QgdGltZV9wb2ludCYgX190KSBub2V4
Y2VwdCB7CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJl
dHVybiB0aW1lX3QoCisgICAgICAgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxfX3NlY3M+KF9fdC50
aW1lX3NpbmNlX2Vwb2NoKCkpLmNvdW50KCkpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBzdGF0aWMgdGltZV9wb2ludCBmcm9tX3RpbWVfdCh0aW1lX3QgX190KSBub2V4
Y2VwdCB7CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJl
dHVybiB0aW1lX3BvaW50KF9fc2VjcyhfX3QpKTsKKyAgfQorfTsKKwordHlwZWRlZiBjaHJvbm86
OnRpbWVfcG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gZmlsZV90aW1lX3R5cGU7CisKK3N0cnVjdCBf
TElCQ1BQX1RZUEVfVklTIHNwYWNlX2luZm8geworICB1aW50bWF4X3QgY2FwYWNpdHk7CisgIHVp
bnRtYXhfdCBmcmVlOworICB1aW50bWF4X3QgYXZhaWxhYmxlOworfTsKKworZW51bSBjbGFzcyBf
TElCQ1BQX0VOVU1fVklTIGZpbGVfdHlwZSA6IHNpZ25lZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisg
IG5vdF9mb3VuZCA9IC0xLAorICByZWd1bGFyID0gMSwKKyAgZGlyZWN0b3J5ID0gMiwKKyAgc3lt
bGluayA9IDMsCisgIGJsb2NrID0gNCwKKyAgY2hhcmFjdGVyID0gNSwKKyAgZmlmbyA9IDYsCisg
IHNvY2tldCA9IDcsCisgIHVua25vd24gPSA4Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5V
TV9WSVMgcGVybXMgOiB1bnNpZ25lZCB7CisgIG5vbmUgPSAwLAorCisgIG93bmVyX3JlYWQgPSAw
NDAwLAorICBvd25lcl93cml0ZSA9IDAyMDAsCisgIG93bmVyX2V4ZWMgPSAwMTAwLAorICBvd25l
cl9hbGwgPSAwNzAwLAorCisgIGdyb3VwX3JlYWQgPSAwNDAsCisgIGdyb3VwX3dyaXRlID0gMDIw
LAorICBncm91cF9leGVjID0gMDEwLAorICBncm91cF9hbGwgPSAwNzAsCisKKyAgb3RoZXJzX3Jl
YWQgPSAwNCwKKyAgb3RoZXJzX3dyaXRlID0gMDIsCisgIG90aGVyc19leGVjID0gMDEsCisgIG90
aGVyc19hbGwgPSAwNywKKworICBhbGwgPSAwNzc3LAorCisgIHNldF91aWQgPSAwNDAwMCwKKyAg
c2V0X2dpZCA9IDAyMDAwLAorICBzdGlja3lfYml0ID0gMDEwMDAsCisgIG1hc2sgPSAwNzc3NywK
KyAgdW5rbm93biA9IDB4RkZGRiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3ImKHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykg
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVy
bXMgb3BlcmF0b3J8KHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3JeKHBlcm1z
IF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
K2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3J+KHBlcm1zIF9MSFMpIHsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PHBlcm1zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKwor
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvciY9KHBlcm1z
JiBfTEhTLCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7IH0KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcnw9KHBlcm1zJiBf
TEhTLCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7IH0KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcl49KHBlcm1zJiBfTEhT
LCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7IH0KKworZW51bSBjbGFz
cyBfTElCQ1BQX0VOVU1fVklTIHBlcm1fb3B0aW9ucyA6IHVuc2lnbmVkIGNoYXIgeworICByZXBs
YWNlID0gMSwKKyAgYWRkID0gMiwKKyAgcmVtb3ZlID0gNCwKKyAgbm9mb2xsb3cgPSA4Cit9Owor
CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9u
cyBvcGVyYXRvciYocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhT
KSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25z
dGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yfChwZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRp
b25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3JeKHBlcm1fb3B0aW9u
cyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9v
cHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVy
YXRvcn4ocGVybV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0
aW9ucz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yJj0ocGVybV9vcHRpb25z
JiBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgJiBfUkhT
OworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9vcHRpb25zJiBv
cGVyYXRvcnw9KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0
dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIHBlcm1fb3B0aW9ucyYgb3BlcmF0b3JePShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1f
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisKK2VudW0g
Y2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBjb3B5X29wdGlvbnMgOiB1bnNpZ25lZCBzaG9ydCB7Cisg
IG5vbmUgPSAwLAorICBza2lwX2V4aXN0aW5nID0gMSwKKyAgb3ZlcndyaXRlX2V4aXN0aW5nID0g
MiwKKyAgdXBkYXRlX2V4aXN0aW5nID0gNCwKKyAgcmVjdXJzaXZlID0gOCwKKyAgY29weV9zeW1s
aW5rcyA9IDE2LAorICBza2lwX3N5bWxpbmtzID0gMzIsCisgIGRpcmVjdG9yaWVzX29ubHkgPSA2
NCwKKyAgY3JlYXRlX3N5bWxpbmtzID0gMTI4LAorICBjcmVhdGVfaGFyZF9saW5rcyA9IDI1NiwK
KyAgX19pbl9yZWN1cnNpdmVfY29weSA9IDUxMiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yJihjb3B5X29wdGlv
bnMgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlf
b3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpICYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMp
KTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5
X29wdGlvbnMgb3BlcmF0b3J8KGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykg
eworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvcl4oY29weV9vcHRp
b25zIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5
X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSBeCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29w
eV9vcHRpb25zIG9wZXJhdG9yfihjb3B5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29weV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpKTsK
K30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0aW9ucyYgb3Bl
cmF0b3ImPShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVy
biBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBjb3B5X29wdGlvbnMmIG9wZXJhdG9yfD0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29w
dGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvcl49KGNvcHlf
b3B0aW9ucyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhT
IF4gX1JIUzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGRpcmVjdG9yeV9vcHRp
b25zIDogdW5zaWduZWQgY2hhciB7CisgIG5vbmUgPSAwLAorICBmb2xsb3dfZGlyZWN0b3J5X3N5
bWxpbmsgPSAxLAorICBza2lwX3Blcm1pc3Npb25fZGVuaWVkID0gMgorfTsKKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVy
YXRvciYoZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0
YXRpY19jYXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihf
TEhTKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yfChkaXJlY3Rvcnlf
b3B0aW9ucyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0
b3J5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4
cHIgZGlyZWN0b3J5X29wdGlvbnMgb3BlcmF0b3JeKGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0
aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30KKwor
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0
aW9ucyBvcGVyYXRvcn4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0
aW9ucyYgb3BlcmF0b3ImPShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVy
biBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3J8PShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xI
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3JePShkaXJl
Y3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7
Cit9CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgZmlsZV9zdGF0dXMgeworcHVibGljOgorICAv
LyBjb25zdHJ1Y3RvcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1
cygpIG5vZXhjZXB0IDogZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpub25lKSB7fQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IGZpbGVfc3RhdHVzKGZpbGVfdHlwZSBfX2Z0
LCBwZXJtcyBfX3BybXMgPSBwZXJtczo6dW5rbm93bikgbm9leGNlcHQKKyAgICAgIDogX19mdF8o
X19mdCksCisgICAgICAgIF9fcHJtc18oX19wcm1zKSB7fQorCisgIGZpbGVfc3RhdHVzKGNvbnN0
IGZpbGVfc3RhdHVzJikgbm9leGNlcHQgPSBkZWZhdWx0OworICBmaWxlX3N0YXR1cyhmaWxlX3N0
YXR1cyYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB+ZmlsZV9zdGF0dXMoKSB7fQorCisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oY29uc3Qg
ZmlsZV9zdGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzJiBvcGVyYXRv
cj0oZmlsZV9zdGF0dXMmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIC8vIG9ic2VydmVycwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSB0eXBlKCkgY29uc3Qgbm9l
eGNlcHQgeyByZXR1cm4gX19mdF87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHBlcm1zIHBlcm1pc3Npb25zKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wcm1zXzsgfQor
CisgIC8vIG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgdHlw
ZShmaWxlX3R5cGUgX19mdCkgbm9leGNlcHQgeyBfX2Z0XyA9IF9fZnQ7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcGVybWlzc2lvbnMocGVybXMgX19wKSBub2V4Y2Vw
dCB7IF9fcHJtc18gPSBfX3A7IH0KKworcHJpdmF0ZToKKyAgZmlsZV90eXBlIF9fZnRfOworICBw
ZXJtcyBfX3BybXNfOworfTsKKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBkaXJlY3RvcnlfZW50
cnk7CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyIHsK
KyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKK307Cit0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjb25zdCBfVHA+IDogcHVibGljIF9fY2Fu
X2NvbnZlcnRfY2hhcjxfVHA+IHt9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0
X2NoYXI8Y2hhcj4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgIHVzaW5n
IF9fY2hhcl90eXBlID0gY2hhcjsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZl
cnRfY2hhcjx3Y2hhcl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAg
dXNpbmcgX19jaGFyX3R5cGUgPSB3Y2hhcl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19j
YW5fY29udmVydF9jaGFyPGNoYXIxNl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
dHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMTZfdDsKK307Cit0ZW1wbGF0ZSA8Pgor
c3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyMzJfdD4geworICBzdGF0aWMgY29uc3QgYm9v
bCB2YWx1ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0gY2hhcjMyX3Q7Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KK3R5cGVuYW1lIGVuYWJsZV9pZjxfX2Nhbl9jb252ZXJ0
X2NoYXI8X0VDaGFyVD46OnZhbHVlLCBib29sPjo6dHlwZQorX19pc19zZXBhcmF0b3IoX0VDaGFy
VCBfX2UpIHsKKyAgcmV0dXJuIF9fZSA9PSBfRUNoYXJUKCcvJyk7Cit9CisKK3N0cnVjdCBfTnVs
bFNlbnRpbmFsIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgordXNpbmcgX1ZvaWQgPSB2b2lk
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRo
YWJsZV9zdHJpbmcgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9F
Q2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxl
X3N0cmluZzwKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jPiwKKyAg
ICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBl
PiA+CisgICAgOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcg
X1N0ciA9IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+OworICB1c2luZyBf
QmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29u
c3QqIF9fcmFuZ2VfYmVnaW4oX1N0ciBjb25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9
CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsK
KyAgICByZXR1cm4gX19zLmRhdGEoKSArIF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VD
aGFyVCBfX2ZpcnN0X29yX251bGwoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5l
bXB0eSgpID8gX0VDaGFyVHt9IDogX19zWzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
X0VDaGFyVCwgY2xhc3MgX1RyYWl0cz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZzwKKyAg
ICBiYXNpY19zdHJpbmdfdmlldzxfRUNoYXJULCBfVHJhaXRzPiwKKyAgICBfVm9pZDx0eXBlbmFt
ZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBwdWJs
aWMgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0
cmluZ192aWV3PF9FQ2hhclQsIF9UcmFpdHM+OworICB1c2luZyBfQmFzZSA9IF9fY2FuX2NvbnZl
cnRfY2hhcjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4o
X1N0ciBjb25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0YXRpYyBfRUNoYXJU
IGNvbnN0KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmRh
dGEoKSArIF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251
bGwoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgpID8gX0VDaGFyVHt9
IDogX19zWzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgX0RT
ID0gdHlwZW5hbWUgZGVjYXk8X1NvdXJjZT46OnR5cGUsCisgICAgICAgICAgY2xhc3MgX1VucXVh
bFB0clR5cGUgPQorICAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3Q8dHlwZW5hbWUg
cmVtb3ZlX3BvaW50ZXI8X0RTPjo6dHlwZT46OnR5cGUsCisgICAgICAgICAgYm9vbCBfSXNDaGFy
UHRyID0gaXNfcG9pbnRlcjxfRFM+Ojp2YWx1ZSYmCisgICAgICAgICAgICAgIF9fY2FuX2NvbnZl
cnRfY2hhcjxfVW5xdWFsUHRyVHlwZT46OnZhbHVlPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hh
cl9hcnJheSA6IGZhbHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFz
cyBfRUNoYXJULCBjbGFzcyBfVVB0cj4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8
X1NvdXJjZSwgX0VDaGFyVCosIF9VUHRyLCB0cnVlPgorICAgIDogX19jYW5fY29udmVydF9jaGFy
PHR5cGVuYW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT4geworICB1c2luZyBfQmFzZSA9
IF9fY2FuX2NvbnZlcnRfY2hhcjx0eXBlbmFtZSByZW1vdmVfY29uc3Q8X0VDaGFyVD46OnR5cGU+
OworCisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2JlZ2luKGNvbnN0IF9FQ2hhclQq
IF9fYikgeyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2Vu
ZChjb25zdCBfRUNoYXJUKiBfX2IpIHsKKyAgICB1c2luZyBfSXRlciA9IGNvbnN0IF9FQ2hhclQq
OworICAgIGNvbnN0IF9FQ2hhclQgX19zZW50aW5hbCA9IF9FQ2hhclR7fTsKKyAgICBfSXRlciBf
X2UgPSBfX2I7CisgICAgZm9yICg7ICpfX2UgIT0gX19zZW50aW5hbDsgKytfX2UpCisgICAgICA7
CisgICAgcmV0dXJuIF9fZTsKKyAgfQorCisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVs
bChjb25zdCBfRUNoYXJUKiBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBfSXRlciwgYm9vbCBfSXNJdCA9IF9faXNfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1
ZSwKKyAgICAgICAgICBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyIDog
ZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorc3RydWN0IF9faXNfcGF0
aGFibGVfaXRlcjwKKyAgICBfSXRlciwgdHJ1ZSwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9j
b252ZXJ0X2NoYXI8CisgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZh
bHVlX3R5cGU+OjpfX2NoYXJfdHlwZT4gPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU+IHsKKyAgdXNpbmcgX0VDaGFy
VCA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU7CisgIHVzaW5n
IF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OworCisgIHN0YXRpYyBfSXRlciBf
X3JhbmdlX2JlZ2luKF9JdGVyIF9fYikgeyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfTnVsbFNl
bnRpbmFsIF9fcmFuZ2VfZW5kKF9JdGVyKSB7IHJldHVybiBfTnVsbFNlbnRpbmFse307IH0KKwor
ICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX0l0ZXIgX19iKSB7IHJldHVybiAqX19i
OyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9Jc1N0cmluZ1QgPSBfX2lzX3Bh
dGhhYmxlX3N0cmluZzxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJJdGVyVCA9
IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheTxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9J
c0l0ZXJUID0gIV9Jc0NoYXJJdGVyVCAmJiBfX2lzX3BhdGhhYmxlX2l0ZXI8X1RwPjo6dmFsdWU+
CitzdHJ1Y3QgX19pc19wYXRoYWJsZSA6IGZhbHNlX3R5cGUgeworICBzdGF0aWNfYXNzZXJ0KCFf
SXNTdHJpbmdUICYmICFfSXNDaGFySXRlclQgJiYgIV9Jc0l0ZXJULCAiTXVzdCBhbGwgYmUgZmFs
c2UiKTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxf
VHAsIHRydWUsIGZhbHNlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX3N0cmluZzxfVHA+IHt9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwg
dHJ1ZSwgZmFsc2U+IDogX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD4geworfTsKKwordGVt
cGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgZmFsc2UsIGZhbHNl
LCB0cnVlPiA6IF9faXNfcGF0aGFibGVfaXRlcjxfVHA+IHt9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
X0VDaGFyVD4KK3N0cnVjdCBfUGF0aENWVCB7CisgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVy
dF9jaGFyPF9FQ2hhclQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAiQ2hhciB0eXBlIG5vdCBj
b252ZXJ0aWJsZSIpOworCisgIHR5cGVkZWYgX19uYXJyb3dfdG9fdXRmODxzaXplb2YoX0VDaGFy
VCkgKiBfX0NIQVJfQklUX18+IF9OYXJyb3dlcjsKKworICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9y
YW5nZShzdHJpbmcmIF9fZGVzdCwgX0VDaGFyVCBjb25zdCogX19iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRUNoYXJUIGNvbnN0KiBfX2UpIHsKKyAgICBfTmFycm93ZXIoKShiYWNr
X2luc2VydGVyKF9fZGVzdCksIF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
SXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVy
IF9fYiwgX0l0ZXIgX19lKSB7CisgICAgc3RhdGljX2Fzc2VydCghaXNfc2FtZTxfSXRlciwgX0VD
aGFyVCo+Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKKyAgICBpZiAoX19iID09IF9f
ZSkKKyAgICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXAoX19iLCBf
X2UpOworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX190bXAuZGF0YSgp
LAorICAgICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxlbmd0aCgpKTsKKyAgfQor
CisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uo
c3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgeworICAgIHN0YXRpY19h
c3NlcnQoIWlzX3NhbWU8X0l0ZXIsIF9FQ2hhclQqPjo6dmFsdWUsICJDYWxsIGNvbnN0IG92ZXJs
b2FkIik7CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIGlm
ICgqX19iID09IF9fc2VudGluYWwpCisgICAgICByZXR1cm47CisgICAgYmFzaWNfc3RyaW5nPF9F
Q2hhclQ+IF9fdG1wOworICAgIGZvciAoOyAqX19iICE9IF9fc2VudGluYWw7ICsrX19iKQorICAg
ICAgX190bXAucHVzaF9iYWNrKCpfX2IpOworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIo
X19kZXN0KSwgX190bXAuZGF0YSgpLAorICAgICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9f
dG1wLmxlbmd0aCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBzdGF0
aWMgdm9pZCBfX2FwcGVuZF9zb3VyY2Uoc3RyaW5nJiBfX2Rlc3QsIF9Tb3VyY2UgY29uc3QmIF9f
cykgeworICAgIHVzaW5nIF9UcmFpdHMgPSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OworICAgIF9f
YXBwZW5kX3JhbmdlKF9fZGVzdCwgX1RyYWl0czo6X19yYW5nZV9iZWdpbihfX3MpLAorICAgICAg
ICAgICAgICAgICAgIF9UcmFpdHM6Ol9fcmFuZ2VfZW5kKF9fcykpOworICB9Cit9OworCit0ZW1w
bGF0ZSA8Pgorc3RydWN0IF9QYXRoQ1ZUPGNoYXI+IHsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXI+CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19leGFjdGx5X2lucHV0X2l0ZXJh
dG9yPF9JdGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0
LCBfSXRlciBfX2IsIF9JdGVyIF9fZSkgeworICAgIGZvciAoOyBfX2IgIT0gX19lOyArK19fYikK
KyAgICAgIF9fZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19mb3J3YXJkX2l0ZXJhdG9y
PF9JdGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBf
SXRlciBfX2IsIF9JdGVyIF9fZSkgeworICAgIF9fZGVzdC5fX2FwcGVuZF9mb3J3YXJkX3Vuc2Fm
ZShfX2IsIF9fZSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB2
b2lkIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9OdWxsU2VudGlu
YWwpIHsKKyAgICBjb25zdCBjaGFyIF9fc2VudGluYWwgPSBjaGFye307CisgICAgZm9yICg7ICpf
X2IgIT0gX19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX2Rlc3QucHVzaF9iYWNrKCpfX2IpOwor
ICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5k
X3NvdXJjZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7CisgICAgdXNpbmcg
X1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRfcmFuZ2UoX19k
ZXN0LCBfVHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAgICAgICAgX1Ry
YWl0czo6X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9W
SVMgcGF0aCB7CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlT3JJdGVyLCBjbGFzcyBfVHAgPSBw
YXRoJj4KKyAgdXNpbmcgX0VuYWJsZUlmUGF0aGFibGUgPQorICAgICAgdHlwZW5hbWUgZW5hYmxl
X2lmPF9faXNfcGF0aGFibGU8X1NvdXJjZU9ySXRlcj46OnZhbHVlLCBfVHA+Ojp0eXBlOworCisg
IHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3VyY2VDaGFyID0gdHlwZW5hbWUgX19p
c19wYXRoYWJsZTxfVHA+OjpfX2NoYXJfdHlwZTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgor
ICB1c2luZyBfU291cmNlQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1RwPiA+OworCitwdWJs
aWM6CisgIHR5cGVkZWYgY2hhciB2YWx1ZV90eXBlOworICB0eXBlZGVmIGJhc2ljX3N0cmluZzx2
YWx1ZV90eXBlPiBzdHJpbmdfdHlwZTsKKyAgdHlwZWRlZiBfVlNURDo6c3RyaW5nX3ZpZXcgX19z
dHJpbmdfdmlldzsKKyAgc3RhdGljIGNvbnN0ZXhwciB2YWx1ZV90eXBlIHByZWZlcnJlZF9zZXBh
cmF0b3IgPSAnLyc7CisKKyAgZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGZvcm1hdCA6IHVu
c2lnbmVkIGNoYXIgeworICAgIGF1dG9fZm9ybWF0LAorICAgIG5hdGl2ZV9mb3JtYXQsCisgICAg
Z2VuZXJpY19mb3JtYXQKKyAgfTsKKworICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKCkgbm9leGNlcHQge30KKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKGNvbnN0IHBhdGgmIF9fcCkgOiBfX3BuXyhfX3AuX19w
bl8pIHt9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aChwYXRoJiYgX19wKSBub2V4
Y2VwdAorICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3AuX19wbl8pKSB7fQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aChzdHJpbmdfdHlwZSYmIF9fcywgZm9ybWF0ID0g
Zm9ybWF0OjphdXRvX2Zvcm1hdCkgbm9leGNlcHQKKyAgICAgIDogX19wbl8oX1ZTVEQ6Om1vdmUo
X19zKSkge30KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgPSBfRW5hYmxlSWZQ
YXRoYWJsZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3QgX1NvdXJjZSYgX19zcmMsIGZv
cm1hdCA9IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+Ojpf
X2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QsIGZvcm1h
dCA9IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9QYXRoQ1ZUPF9JdFZh
bD46Ol9fYXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICB9CisKKyAgLy8g
VE9ETyBJbXBsZW1lbnQgbG9jYWxlIGNvbnZlcnNpb25zLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1Nv
dXJjZSwgY2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgo
Y29uc3QgX1NvdXJjZSYgX19zcmMsIGNvbnN0IGxvY2FsZSYgX19sb2MsIGZvcm1hdCA9IGZvcm1h
dDo6YXV0b19mb3JtYXQpOworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgoX0lu
cHV0SXQgX19maXJzdCwgX0lucHV0SXQgX2xhc3QsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgICAg
ICAgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB+cGF0aCgpID0gZGVmYXVsdDsKKworICAvLyBhc3NpZ25tZW50cworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgICBfX3BuXyA9IF9fcC5fX3BuXzsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShwYXRoJiYgX19wKSBu
b2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3AuX19wbl8pOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyA9IHZvaWQ+CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgcGF0aCYgb3BlcmF0b3I9KHN0cmluZ190eXBlJiYgX19zKSBub2V4Y2Vw
dCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVybiAqdGhpczsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgYXNzaWduKHN0cmluZ190
eXBlJiYgX19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJh
dG9yPShjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19z
cmMpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhh
YmxlPF9Tb3VyY2U+IGFzc2lnbihjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIF9fcG5fLmNs
ZWFyKCk7CisgICAgX1NvdXJjZUNWVDxfU291cmNlPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBf
X3NyYyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0PgorICBwYXRoJiBhc3NpZ24oX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90
eXBlIF9JdFZhbDsKKyAgICBfX3BuXy5jbGVhcigpOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9f
YXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsK
KyAgfQorCitwcml2YXRlOgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAgc3RhdGljIGJv
b2wgX19zb3VyY2VfaXNfYWJzb2x1dGUoX0VDaGFyVCBfX2ZpcnN0X29yX251bGwpIHsKKyAgICBy
ZXR1cm4gX19pc19zZXBhcmF0b3IoX19maXJzdF9vcl9udWxsKTsKKyAgfQorCitwdWJsaWM6Cisg
IC8vIGFwcGVuZHMKKyAgcGF0aCYgb3BlcmF0b3IvPShjb25zdCBwYXRoJiBfX3ApIHsKKyAgICBp
ZiAoX19wLmlzX2Fic29sdXRlKCkpIHsKKyAgICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKyAgICBpZiAoaGFzX2ZpbGVuYW1lKCkpCisgICAgICBfX3Bu
XyArPSBwcmVmZXJyZWRfc2VwYXJhdG9yOworICAgIF9fcG5fICs9IF9fcC5uYXRpdmUoKTsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBGSVhNRTogVXNlIF9MSUJDUFBfRElBR05PU0Vf
V0FSTklORyB0byBwcm9kdWNlIGEgZGlhZ25vc3RpYyB3aGVuIF9fc3JjCisgIC8vIGlzIGtub3du
IGF0IGNvbXBpbGUgdGltZSB0byBiZSAiLycgc2luY2UgdGhlIHVzZXIgYWxtb3N0IGNlcnRhaW5s
eSBpbnRlbmRlZAorICAvLyB0byBhcHBlbmQgYSBzZXBhcmF0b3IgaW5zdGVhZCBvZiBvdmVyd3Jp
dGluZyB0aGUgcGF0aCB3aXRoICIvIgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPgorICBvcGVy
YXRvci89KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFwcGVuZChf
X3NyYyk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0
aGFibGU8X1NvdXJjZT4gYXBwZW5kKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgdXNpbmcg
X1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgdXNpbmcgX0NWVCA9IF9QYXRo
Q1ZUPF9Tb3VyY2VDaGFyPF9Tb3VyY2U+ID47CisgICAgaWYgKF9fc291cmNlX2lzX2Fic29sdXRl
KF9UcmFpdHM6Ol9fZmlyc3Rfb3JfbnVsbChfX3NyYykpKQorICAgICAgX19wbl8uY2xlYXIoKTsK
KyAgICBlbHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9z
ZXBhcmF0b3I7CisgICAgX0NWVDo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRo
JiBhcHBlbmQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsK
KyAgICBzdGF0aWNfYXNzZXJ0KF9fY2FuX2NvbnZlcnRfY2hhcjxfSXRWYWw+Ojp2YWx1ZSwgIk11
c3QgY29udmVydGlibGUiKTsKKyAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X0l0VmFsPjsKKyAg
ICBpZiAoX19maXJzdCAhPSBfX2xhc3QgJiYgX19zb3VyY2VfaXNfYWJzb2x1dGUoKl9fZmlyc3Qp
KQorICAgICAgX19wbl8uY2xlYXIoKTsKKyAgICBlbHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAg
ICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX0NWVDo6X19hcHBlbmRfcmFu
Z2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAg
Ly8gY29uY2F0ZW5hdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9w
ZXJhdG9yKz0oY29uc3QgcGF0aCYgX194KSB7CisgICAgX19wbl8gKz0gX194Ll9fcG5fOworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0
aCYgb3BlcmF0b3IrPShjb25zdCBzdHJpbmdfdHlwZSYgX194KSB7CisgICAgX19wbl8gKz0gX194
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcGF0aCYgb3BlcmF0b3IrPShfX3N0cmluZ192aWV3IF9feCkgeworICAgIF9fcG5fICs9IF9f
eDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgdmFsdWVfdHlwZSogX194KSB7CisgICAgX19wbl8g
Kz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPSh2YWx1ZV90eXBlIF9feCkgeworICAgIF9fcG5fICs9
IF9feDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VD4KKyAgdHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6dmFs
dWUsIHBhdGgmPjo6dHlwZQorICBvcGVyYXRvcis9KF9FQ2hhclQgX194KSB7CisgICAgYmFzaWNf
c3RyaW5nPF9FQ2hhclQ+IF9fdG1wOworICAgIF9fdG1wICs9IF9feDsKKyAgICBfUGF0aENWVDxf
RUNoYXJUPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3RtcCk7CisgICAgcmV0dXJuICp0aGlz
OworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxl
PF9Tb3VyY2U+IG9wZXJhdG9yKz0oY29uc3QgX1NvdXJjZSYgX194KSB7CisgICAgcmV0dXJuIHRo
aXMtPmNvbmNhdChfX3gpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9F
bmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+IGNvbmNhdChjb25zdCBfU291cmNlJiBfX3gpIHsKKyAg
ICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9feCk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRo
JiBjb25jYXQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsK
KyAgICBfUGF0aENWVDxfSXRWYWw+OjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19s
YXN0KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBtb2RpZmllcnMKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIGNsZWFyKCkgbm9leGNlcHQgeyBfX3BuXy5jbGVh
cigpOyB9CisKKyAgcGF0aCYgbWFrZV9wcmVmZXJyZWQoKSB7IHJldHVybiAqdGhpczsgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgcmVtb3ZlX2ZpbGVuYW1lKCkgewor
ICAgIGF1dG8gX19mbmFtZSA9IF9fZmlsZW5hbWUoKTsKKyAgICBpZiAoIV9fZm5hbWUuZW1wdHko
KSkKKyAgICAgIF9fcG5fLmVyYXNlKF9fZm5hbWUuZGF0YSgpIC0gX19wbl8uZGF0YSgpKTsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2ZpbGVuYW1lKGNvbnN0IHBh
dGgmIF9fcmVwbGFjZW1lbnQpIHsKKyAgICByZW1vdmVfZmlsZW5hbWUoKTsKKyAgICByZXR1cm4g
KCp0aGlzIC89IF9fcmVwbGFjZW1lbnQpOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9leHRlbnNp
b24oY29uc3QgcGF0aCYgX19yZXBsYWNlbWVudCA9IHBhdGgoKSk7CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIHN3YXAocGF0aCYgX19yaHMpIG5vZXhjZXB0IHsgX19wbl8u
c3dhcChfX3Jocy5fX3BuXyk7IH0KKworICAvLyBwcml2YXRlIGhlbHBlciB0byBhbGxvdyByZXNl
cnZpbmcgbWVtb3J5IGluIHRoZSBwYXRoCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
dm9pZCBfX3Jlc2VydmUoc2l6ZV90IF9fcykgeyBfX3BuXy5yZXNlcnZlKF9fcyk7IH0KKworICAv
LyBuYXRpdmUgZm9ybWF0IG9ic2VydmVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGNvbnN0IHN0cmluZ190eXBlJiBuYXRpdmUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3Bu
XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgdmFsdWVfdHlwZSog
Y19zdHIoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXy5jX3N0cigpOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBvcGVyYXRvciBzdHJpbmdfdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIF9fcG5fOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBh
bGxvY2F0b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0Fs
bG9jYXRvcj4KKyAgc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkg
Y29uc3QgeworICAgIHVzaW5nIF9DVlQgPSBfX3dpZGVuX2Zyb21fdXRmODxzaXplb2YoX0VDaGFy
VCkgKiBfX0NIQVJfQklUX18+OworICAgIHVzaW5nIF9TdHIgPSBiYXNpY19zdHJpbmc8X0VDaGFy
VCwgX1RyYWl0cywgX0FsbG9jYXRvcj47CisgICAgX1N0ciBfX3MoX19hKTsKKyAgICBfX3MucmVz
ZXJ2ZShfX3BuXy5zaXplKCkpOworICAgIF9DVlQoKShiYWNrX2luc2VydGVyKF9fcyksIF9fcG5f
LmRhdGEoKSwgX19wbl8uZGF0YSgpICsgX19wbl8uc2l6ZSgpKTsKKyAgICByZXR1cm4gX19zOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnN0cmluZyBzdHJpbmcoKSBj
b25zdCB7IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6
d3N0cmluZyB3c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8d2NoYXJfdD4oKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHU4c3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6
OnUxNnN0cmluZyB1MTZzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxjaGFyMTZf
dD4oKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTMyc3RyaW5nIHUz
MnN0cmluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOworICB9CisK
KyAgLy8gZ2VuZXJpYyBmb3JtYXQgb2JzZXJ2ZXJzCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJU
LCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0VDaGFyVD4sCisgICAgICAgICAgICBjbGFz
cyBfQWxsb2NhdG9yID0gYWxsb2NhdG9yPF9FQ2hhclQ+ID4KKyAgYmFzaWNfc3RyaW5nPF9FQ2hh
clQsIF9UcmFpdHMsIF9BbGxvY2F0b3I+CisgIGdlbmVyaWNfc3RyaW5nKGNvbnN0IF9BbGxvY2F0
b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8X0VDaGFy
VCwgX1RyYWl0cywgX0FsbG9jYXRvcj4oX19hKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGdlbmVy
aWNfc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgc3RkOjp3c3RyaW5nIGdlbmVy
aWNfd3N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzx3Y2hhcl90PigpOyB9CisgIHN0ZDo6
c3RyaW5nIGdlbmVyaWNfdThzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6
OnUxNnN0cmluZyBnZW5lcmljX3UxNnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzxjaGFy
MTZfdD4oKTsgfQorICBzdGQ6OnUzMnN0cmluZyBnZW5lcmljX3UzMnN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIHN0cmluZzxjaGFyMzJfdD4oKTsgfQorCitwcml2YXRlOgorICBpbnQgX19jb21wYXJl
KF9fc3RyaW5nX3ZpZXcpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcm9vdF9uYW1lKCkgY29u
c3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290X2RpcmVjdG9yeSgpIGNvbnN0OworICBfX3N0cmlu
Z192aWV3IF9fcm9vdF9wYXRoX3JhdygpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcmVsYXRp
dmVfcGF0aCgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcGFyZW50X3BhdGgoKSBjb25zdDsK
KyAgX19zdHJpbmdfdmlldyBfX2ZpbGVuYW1lKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19z
dGVtKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19leHRlbnNpb24oKSBjb25zdDsKKworcHVi
bGljOgorICAvLyBjb21wYXJlCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBh
cmUoY29uc3QgcGF0aCYgX19wKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fY29tcGFy
ZShfX3AuX19wbl8pOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBh
cmUoY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QgeworICAgIHJldHVybiBfX2NvbXBhcmUo
X19zKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJlKF9fc3Ry
aW5nX3ZpZXcgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9Cisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSog
X19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisKKyAgLy8gZGVj
b21wb3NpdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9uYW1lKCkg
Y29uc3QgeworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3Jvb3RfbmFtZSgpKTsKKyAgfQorICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7Cisg
ICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSk7CisgIH0KKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4g
cm9vdF9uYW1lKCkuYXBwZW5kKHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSkpOworICB9
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZV9wYXRoKCkgY29uc3Qg
eworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3JlbGF0aXZlX3BhdGgoKSk7CisgIH0KKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHBhcmVudF9wYXRoKCkgY29uc3QgeworICAgIHJl
dHVybiBzdHJpbmdfdHlwZShfX3BhcmVudF9wYXRoKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5
cGUoX19maWxlbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
c3RlbSgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ190eXBlKF9fc3RlbSgpKTsgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggZXh0ZW5zaW9uKCkgY29uc3QgeworICAgIHJldHVybiBz
dHJpbmdfdHlwZShfX2V4dGVuc2lvbigpKTsKKyAgfQorCisgIC8vIHF1ZXJ5CisgIF9MSUJDUFBf
Tk9ESVNDQVJEX0FGVEVSX0NYWDE3IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorICBl
bXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wbl8uZW1wdHkoKTsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9uYW1lKCkgY29uc3Qg
eworICAgIHJldHVybiAhX19yb290X25hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0
dXJuICFfX3Jvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIGJvb2wgaGFzX3Jvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcm9v
dF9wYXRoX3JhdygpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGhhc19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19yZWxhdGl2ZV9w
YXRoKCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFz
X3BhcmVudF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19wYXJlbnRfcGF0aCgpLmVtcHR5
KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19maWxlbmFtZSgp
IGNvbnN0IHsKKyAgICByZXR1cm4gIV9fZmlsZW5hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfc3RlbSgpIGNvbnN0IHsgcmV0dXJuICFfX3N0
ZW0oKS5lbXB0eSgpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfZXh0
ZW5zaW9uKCkgY29uc3QgeworICAgIHJldHVybiAhX19leHRlbnNpb24oKS5lbXB0eSgpOworICB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Fic29sdXRlKCkgY29uc3Qg
eworICAgIHJldHVybiBoYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiAhaXNfYWJzb2x1
dGUoKTsgfQorCisgIC8vIHJlbGF0aXZlIHBhdGhzCisgIHBhdGggbGV4aWNhbGx5X25vcm1hbCgp
IGNvbnN0OworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBfX2Jhc2UpIGNv
bnN0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBsZXhpY2FsbHlfcHJveGlt
YXRlKGNvbnN0IHBhdGgmIF9fYmFzZSkgY29uc3QgeworICAgIHBhdGggX19yZXN1bHQgPSB0aGlz
LT5sZXhpY2FsbHlfcmVsYXRpdmUoX19iYXNlKTsKKyAgICBpZiAoX19yZXN1bHQubmF0aXZlKCku
ZW1wdHkoKSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICByZXR1cm4gX19yZXN1bHQ7CisgIH0K
KworICAvLyBpdGVyYXRvcnMKKyAgY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBpdGVyYXRvcjsKKyAg
dHlwZWRlZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0OworICBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZAorICAg
ICAgdHlwZW5hbWUgZW5hYmxlX2lmPGlzX3NhbWU8X0NoYXJULCBjaGFyPjo6dmFsdWUgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2FtZTxfVHJhaXRzLCBjaGFyX3RyYWl0czxj
aGFyPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fb3MgPDwgc3Rk
OjpfX3F1b3RlZChfX3AubmF0aXZlKCkpOworICAgIHJldHVybiBfX29zOworICB9CisKKyAgdGVt
cGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBmcmllbmQKKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfc2FtZTxfQ2hhclQs
IGNoYXI+Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNfc2FtZTxf
VHJhaXRzLCBjaGFyX3RyYWl0czxjaGFyPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0
b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9f
cCkgeworICAgIF9fb3MgPDwgc3RkOjpfX3F1b3RlZChfX3Auc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cz4oKSk7CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX2lzLCBwYXRoJiBfX3ApIHsKKyAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzPiBfX3RtcDsKKyAgICBfX2lzID4+IF9fcXVvdGVkKF9fdG1wKTsKKyAgICBf
X3AgPSBfX3RtcDsKKyAgICByZXR1cm4gX19pczsKKyAgfQorCitwcml2YXRlOgorICBpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJgorICBfX2Fzc2lnbl92aWV3KF9fc3RyaW5n
X3ZpZXcgY29uc3QmIF9fcykgbm9leGNlcHQgeworICAgIF9fcG5fID0gc3RyaW5nX3R5cGUoX19z
KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgc3RyaW5nX3R5cGUgX19wbl87Cit9OworCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHN3YXAocGF0aCYgX19saHMsIHBh
dGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIF9fbGhzLnN3YXAoX19yaHMpOworfQorCitfTElCQ1BQ
X0ZVTkNfVklTCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhjZXB0Owor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
cGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpID09IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgewor
ICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGF0aCYgX19saHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBf
X3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPD0oY29uc3Qg
cGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpIDw9IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9f
cmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIG9wZXJhdG9yLyhjb25zdCBw
YXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhdGgmIF9fcmhzKSB7CisgIHBhdGggX19yZXN1bHQoX19saHMpOworICBfX3Jl
c3VsdCAvPSBfX3JoczsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8Y2xhc3Mg
X1NvdXJjZT4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB0eXBlbmFtZSBlbmFibGVf
aWY8X19pc19wYXRoYWJsZTxfU291cmNlPjo6dmFsdWUsIHBhdGg+Ojp0eXBlCisgICAgdThwYXRo
KGNvbnN0IF9Tb3VyY2UmIF9fcykgeworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgaXNfc2FtZTx0
eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OjpfX2NoYXJfdHlwZSwgY2hhcj46OnZhbHVl
LAorICAgICAgInU4cGF0aChTb3VyY2UgY29uc3QmKSByZXF1aXJlcyBTb3VyY2UgaGF2ZSBhIGNo
YXJhY3RlciB0eXBlIG9mIHR5cGUgIgorICAgICAgIidjaGFyJyIpOworICByZXR1cm4gcGF0aChf
X3MpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CitfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0aGFibGU8X0lucHV0SXQ+Ojp2
YWx1ZSwgcGF0aD46OnR5cGUKKyAgICB1OHBhdGgoX0lucHV0SXQgX19mLCBfSW5wdXRJdCBfX2wp
IHsKKyAgc3RhdGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlwZW5hbWUgX19pc19wYXRoYWJs
ZTxfSW5wdXRJdD46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCisgICAgICAidThwYXRoKEl0
ZXIsIEl0ZXIpIHJlcXVpcmVzIEl0ZXIgaGF2ZSBhIHZhbHVlX3R5cGUgb2YgdHlwZSAnY2hhcici
KTsKKyAgcmV0dXJuIHBhdGgoX19mLCBfX2wpOworfQorCitjbGFzcyBfTElCQ1BQX1RZUEVfVklT
IHBhdGg6Oml0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgZW51bSBfUGFyc2VyU3RhdGUgOiB1bnNpZ25l
ZCBjaGFyIHsKKyAgICBfU2luZ3VsYXIsCisgICAgX0JlZm9yZUJlZ2luLAorICAgIF9JblJvb3RO
YW1lLAorICAgIF9JblJvb3REaXIsCisgICAgX0luRmlsZW5hbWVzLAorICAgIF9JblRyYWlsaW5n
U2VwLAorICAgIF9BdEVuZAorICB9OworCitwdWJsaWM6CisgIHR5cGVkZWYgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgdHlwZWRlZiBwYXRoIHZhbHVl
X3R5cGU7CisgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICB0eXBl
ZGVmIGNvbnN0IHBhdGgqIHBvaW50ZXI7CisgIHR5cGVkZWYgY29uc3QgcGF0aCYgcmVmZXJlbmNl
OworCisgIHR5cGVkZWYgdm9pZAorICAgICAgX19zdGFzaGluZ19pdGVyYXRvcl90YWc7IC8vIFNl
ZSByZXZlcnNlX2l0ZXJhdG9yIGFuZCBfX2lzX3N0YXNoaW5nX2l0ZXJhdG9yCisKK3B1YmxpYzoK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvcigpCisgICAgICA6IF9fc3Rh
c2hlZF9lbGVtXygpLCBfX3BhdGhfcHRyXyhudWxscHRyKSwgX19lbnRyeV8oKSwKKyAgICAgICAg
X19zdGF0ZV8oX1Npbmd1bGFyKSB7fQorCisgIGl0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJikgPSBk
ZWZhdWx0OworICB+aXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgaXRlcmF0b3ImIG9wZXJhdG9y
PShjb25zdCBpdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfX3N0YXNoZWRfZWxl
bV87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICZfX3N0YXNoZWRfZWxlbV87IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeworICAgIF9MSUJDUFBfQVNT
RVJUKF9fc3RhdGVfICE9IF9TaW5ndWxhciwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGlu
ZyB0byBpbmNyZW1lbnQgYSBzaW5ndWxhciBpdGVyYXRvciIpOworICAgIF9MSUJDUFBfQVNTRVJU
KF9fc3RhdGVfICE9IF9BdEVuZCwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBp
bmNyZW1lbnQgdGhlIGVuZCBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2luY3JlbWVudCgpOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciBvcGVyYXRvcisr
KGludCkgeworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMtPm9wZXJhdG9yKyso
KTsKKyAgICByZXR1cm4gX19pdDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8g
IT0gX1Npbmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGRlY3JlbWVu
dCBhIHNpbmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9BU1NFUlQoX19lbnRyeV8uZGF0
YSgpICE9IF9fcGF0aF9wdHJfLT5uYXRpdmUoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAg
ImF0dGVtcHRpbmcgdG8gZGVjcmVtZW50IHRoZSBiZWdpbiBpdGVyYXRvciIpOworICAgIHJldHVy
biBfX2RlY3JlbWVudCgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBp
dGVyYXRvciBvcGVyYXRvci0tKGludCkgeworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAg
IHRoaXMtPm9wZXJhdG9yLS0oKTsKKyAgICByZXR1cm4gX19pdDsKKyAgfQorCitwcml2YXRlOgor
ICBmcmllbmQgY2xhc3MgcGF0aDsKKworICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRv
ciYpOworCisgIGl0ZXJhdG9yJiBfX2luY3JlbWVudCgpOworICBpdGVyYXRvciYgX19kZWNyZW1l
bnQoKTsKKworICBwYXRoIF9fc3Rhc2hlZF9lbGVtXzsKKyAgY29uc3QgcGF0aCogX19wYXRoX3B0
cl87CisgIHBhdGg6Ol9fc3RyaW5nX3ZpZXcgX19lbnRyeV87CisgIF9QYXJzZXJTdGF0ZSBfX3N0
YXRlXzsKK307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBwYXRoOjppdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fcmhzKSB7
CisgIHJldHVybiBfX2xocy5fX3BhdGhfcHRyXyA9PSBfX3Jocy5fX3BhdGhfcHRyXyAmJgorICAg
ICAgICAgX19saHMuX19lbnRyeV8uZGF0YSgpID09IF9fcmhzLl9fZW50cnlfLmRhdGEoKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IHBhdGg6Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYgX19yaHMpIHsKKyAgcmV0dXJu
ICEoX19saHMgPT0gX19yaHMpOworfQorCitjbGFzcyBfTElCQ1BQX0VYQ0VQVElPTl9BQkkgZmls
ZXN5c3RlbV9lcnJvciA6IHB1YmxpYyBzeXN0ZW1fZXJyb3IgeworcHVibGljOgorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3do
YXQsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCks
CisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KHBhdGgoKSwgcGF0aCgp
KSkgeworICAgIF9fY3JlYXRlX3doYXQoMCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBh
dGgmIF9fcDEsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9f
d2hhdCksCisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIHBh
dGgoKSkpIHsKKyAgICBfX2NyZWF0ZV93aGF0KDEpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0LCBjb25z
dCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLAorICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAg
IF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIF9fcDIpKSB7CisgICAgX19j
cmVhdGVfd2hhdCgyKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29u
c3QgcGF0aCYgcGF0aDEoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3Ax
XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0aCYgcGF0aDIo
KSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AyXzsgfQorCisgIH5maWxl
c3lzdGVtX2Vycm9yKCkgb3ZlcnJpZGU7IC8vIGtleSBmdW5jdGlvbgorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IG5vZXhjZXB0IG92ZXJy
aWRlIHsKKyAgICByZXR1cm4gX19zdG9yYWdlXy0+X193aGF0Xy5jX3N0cigpOworICB9CisKKyAg
X0xJQkNQUF9GVU5DX1ZJUworICB2b2lkIF9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKTsK
KworcHJpdmF0ZToKKyAgc3RydWN0IF9TdG9yYWdlIHsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgICAgX1N0b3JhZ2UoY29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMikg
OiBfX3AxXyhfX3AxKSwgX19wMl8oX19wMikge30KKworICAgIHBhdGggX19wMV87CisgICAgcGF0
aCBfX3AyXzsKKyAgICBzdHJpbmcgX193aGF0XzsKKyAgfTsKKyAgc2hhcmVkX3B0cjxfU3RvcmFn
ZT4gX19zdG9yYWdlXzsKK307CisKK3RlbXBsYXRlIDxjbGFzcy4uLiBfQXJncz4KK19MSUJDUFBf
Tk9SRVRVUk4gaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyNpZm5kZWYgX0xJQkNQ
UF9OT19FWENFUFRJT05TCisgICAgdm9pZAorICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihf
QXJncyYmLi4uIF9fYXJncykgeworICB0aHJvdyBmaWxlc3lzdGVtX2Vycm9yKHN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLik7Cit9CisjZWxzZQorICAgIHZvaWQKKyAgICBfX3Rocm93X2Zp
bGVzeXN0ZW1fZXJyb3IoX0FyZ3MmJi4uLikgeworICBfVlNURDo6YWJvcnQoKTsKK30KKyNlbmRp
ZgorCisvLyBvcGVyYXRpb25hbCBmdW5jdGlvbnMKKworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBf
X2Fic29sdXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCitwYXRoIF9fY2Fub25pY2FsKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBf
X2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY29weShjb25zdCBwYXRo
JiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAg
ICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wg
X19jb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29w
dGlvbnMgX19vcHQsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRy
KTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgX19l
eGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCiti
b29sIF9fY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0g
bnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwor
Ym9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmli
dXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7
CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0
IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBh
dGgmIF9fbmV3X2hhcmRfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVfc3ltbGlu
ayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19W
SVMKK3BhdGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJ
QkNQUF9GVU5DX1ZJUwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25zdCBwYXRoJiwgZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2VxdWl2YWxlbnQo
Y29uc3QgcGF0aCYsIGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7Citf
TElCQ1BQX0ZVTkNfVklTCit1aW50bWF4X3QgX19maWxlX3NpemUoY29uc3QgcGF0aCYsIGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX2hh
cmRfbGlua19jb3VudChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwor
X0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2ZzX2lzX2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3RpbWVfdHlwZSBf
X2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIp
OworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBw
LCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19wZXJtaXNzaW9u
cyhjb25zdCBwYXRoJiwgcGVybXMsIHBlcm1fb3B0aW9ucywgZXJyb3JfY29kZSogPSBudWxscHRy
KTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19yZW1v
dmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSog
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19yZW5hbWUoY29uc3QgcGF0
aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90
IHNpemUsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitzcGFj
ZV9pbmZvIF9fc3BhY2UoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsK
K19MSUJDUFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3N0YXR1cyBf
X3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7
CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fc3lzdGVtX2NvbXBsZXRlKGNvbnN0IHBhdGgmLCBl
cnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fdGVt
cF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3AsIGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
cGF0aCBjdXJyZW50X3BhdGgoKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9j
b2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgmX19lYyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgm
IF9fcCkgeworICBfX2N1cnJlbnRfcGF0aChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBfX3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBf
X2VjKSBub2V4Y2VwdCB7CisgIF9fY3VycmVudF9wYXRoKF9fcCwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9f
cCkgeworICByZXR1cm4gX19hYnNvbHV0ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgewor
ICByZXR1cm4gX19hYnNvbHV0ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX2Nhbm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBf
X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvKSB7CisgIF9fY29weShfX2Zy
b20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9f
dG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29k
ZSYgX19lYykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUsICZf
X2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNv
bnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19vcHQpIHsKKyAgX19jb3B5KF9f
ZnJvbSwgX190bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIF9fY29weShfX2Zyb20sIF9fdG8sIF9fb3B0LCAmX19lYyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIF9f
ZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhdGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgY29w
eV9vcHRpb25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgZXJy
b3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5
X29wdGlvbnM6Om5vbmUsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190
bywgY29weV9vcHRpb25zIF9fb3B0KSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9f
dG8sIF9fb3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBj
b3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9f
ZWMpIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5X3N5bWxpbmso
Y29uc3QgcGF0aCYgX19leGlzdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY29weV9zeW1saW5r
KF9fZXhpc3RpbmcsIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgdm9pZAorY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXh0LCBjb25zdCBwYXRoJiBfX25l
dywgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2NvcHlfc3ltbGluayhfX2V4dCwg
X19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcmllcyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcmllcyhfX3AsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNv
bnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3Rvcnko
Y29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBf
X2NyZWF0ZV9kaXJlY3RvcnkoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cGF0aCYgX19hdHRycykgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCwgX19hdHRy
cyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9k
aXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2F0dHJzLAorICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9k
aXJlY3RvcnkoX19wLCBfX2F0dHJzLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBf
X3RvLCBjb25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhf
X3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQK
K2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBf
X25ldywKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7CisgIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX2hhcmRfbGlu
ayhjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX2hhcmRf
bGluayhfX3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHZvaWQKK2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19u
ZXcsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19j
cmVhdGVfaGFyZF9saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgcGF0aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfc3ltbGluayhfX3RvLCBfX25ldyk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9zeW1saW5rKGNv
bnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4
Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgc3RhdHVzX2tub3duKGZp
bGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSAhPSBmaWxlX3R5
cGU6Om5vbmU7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhp
c3RzKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gc3RhdHVzX2tub3duKF9f
cykgJiYgX19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5vdF9mb3VuZDsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBleGlzdHMoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgYXV0byBfX3MgPSBfX3N0YXR1cyhfX3AsICZfX2VjKTsKKyAgaWYgKHN0YXR1c19rbm93
bihfX3MpKQorICAgIF9fZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGV4aXN0cyhfX3MpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0
aCYgX19wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBwYXRoJiBfX3AyKSB7CisgIHJldHVybiBfX2VxdWl2YWxlbnQoX19wMSwgX19wMik7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2VxdWl2YWxlbnQo
Y29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMiwgZXJyb3JfY29kZSYgX19lYykgbm9l
eGNlcHQgeworICByZXR1cm4gX19lcXVpdmFsZW50KF9fcDEsIF9fcDIsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGZpbGVfc2l6ZShjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZmlsZV9zaXplKF9fcCk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAorZmlsZV9zaXplKGNvbnN0IHBhdGgm
IF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19maWxlX3NpemUo
X19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRt
YXhfdCBoYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2hhcmRf
bGlua19jb3VudChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1
aW50bWF4X3QKK2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9fcCwgJl9fZWMpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Jsb2NrX2ZpbGUo
ZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVf
dHlwZTo6YmxvY2s7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
aXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2Jsb2NrX2ZpbGUo
X19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX2NoYXJhY3Rlcl9maWxlKGZp
bGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5
cGU6OmNoYXJhY3RlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2NoYXJh
Y3Rlcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sCitpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2Nv
ZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9maWxlKF9fc3RhdHVz
KF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBpc19kaXJlY3RvcnkoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3Mu
dHlwZSgpID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0
dXJuIGlzX2RpcmVjdG9yeShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCwgJl9f
ZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0
eShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wLCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZmlmbyhmaWxlX3N0
YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpm
aWZvOworfQoraW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNv
bnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfZmlmbyhfX3N0YXR1cyhfX3ApKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgm
IF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19maWZvKF9fc3RhdHVzKF9fcCwg
Jl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNf
cmVndWxhcl9maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5
cGUoKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIGJvb2wgaXNfcmVndWxhcl9maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1
cm4gaXNfcmVndWxhcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgX19wLCBl
cnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19yZWd1bGFyX2ZpbGUoX19z
dGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGlzX3NvY2tldChmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9f
cy50eXBlKCkgPT0gZmlsZV90eXBlOjpzb2NrZXQ7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4g
aXNfc29ja2V0KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmsoZmlsZV9zdGF0dXMg
X19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6c3ltbGlu
azsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1saW5r
KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc3ltbGluayhfX3N5bWxpbmtfc3RhdHVz
KF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5
bWxpbmsoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlz
X3N5bWxpbmsoX19zeW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoZmlsZV9zdGF0dXMgX19zKSBub2V4
Y2VwdCB7CisgIHJldHVybiBleGlzdHMoX19zKSAmJiAhaXNfcmVndWxhcl9maWxlKF9fcykgJiYg
IWlzX2RpcmVjdG9yeShfX3MpICYmCisgICAgICAgICAhaXNfc3ltbGluayhfX3MpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGNvbnN0IHBhdGgm
IF9fcCkgeworICByZXR1cm4gaXNfb3RoZXIoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19vdGhlcihfX3N0YXR1cyhfX3AsICZfX2Vj
KSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBl
CitsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2xhc3Rfd3Jp
dGVfdGltZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxl
X3RpbWVfdHlwZQorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19sYXN0X3dyaXRlX3RpbWUoX19wLCAmX19lYyk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgbGFzdF93cml0ZV90
aW1lKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGVfdGltZV90eXBlIF9fdCkgeworICBfX2xhc3Rfd3JpdGVf
dGltZShfX3AsIF9fdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQKK2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsIGZpbGVfdGltZV90eXBlIF9fdCwK
KyAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fbGFzdF93
cml0ZV90aW1lKF9fcCwgX190LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIHZvaWQKK3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVybXMgX19wcm1z
LAorICAgICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cyA9IHBlcm1fb3B0aW9uczo6cmVwbGFj
ZSkgeworICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBfX29wdHMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9f
cCwgcGVybXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fcGVybWlzc2lvbnMo
X19wLCBfX3BybXMsIHBlcm1fb3B0aW9uczo6cmVwbGFjZSwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9f
cCwgcGVybXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwZXJtX29wdGlvbnMgX19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIF9fcGVybWlz
c2lvbnMoX19wLCBfX3BybXMsIF9fb3B0cywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2Jh
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAm
X19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAgcGF0aCBfX3RtcF9iYXNlID0g
X193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1
cm4ge307CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcHJveGltYXRlKF9fdG1wX2Jhc2UpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25z
dCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBwcm94aW1hdGUoX19wLCBjdXJyZW50
X3BhdGgoKSwgX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBh
dGgKK3Byb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1cnJl
bnRfcGF0aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2FsbHlf
cHJveGltYXRlKAorICAgICAgX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSkpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRo
JiBfX3ApIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCwgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlKGNvbnN0IHBh
dGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9j
YW5vbmljYWwoX19wLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiBwYXRoKCk7Cisg
IHBhdGggX190bXBiYXNlID0gX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBp
ZiAoX19lYykKKyAgICByZXR1cm4gcGF0aCgpOworICByZXR1cm4gX190bXAubGV4aWNhbGx5X3Jl
bGF0aXZlKF9fdG1wYmFzZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiByZWxh
dGl2ZShfX3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgcGF0aAorcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRo
JiBfX2Jhc2UgPSBjdXJyZW50X3BhdGgoKSkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2Fs
KF9fcCkubGV4aWNhbGx5X3JlbGF0aXZlKF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UpKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCByZW1vdmUoY29uc3QgcGF0
aCYgX19wKSB7CisgIHJldHVybiBfX3JlbW92ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4
Y2VwdCB7CisgIHJldHVybiBfX3JlbW92ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBfX3JlbW92ZV9hbGwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgX19lYykgeworICByZXR1cm4gX19yZW1vdmVfYWxsKF9fcCwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBf
X2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXRoJiBfX3RvKSB7CisgIHJldHVybiBfX3JlbmFtZShfX2Zyb20sIF9fdG8pOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCityZW5hbWUoY29uc3QgcGF0aCYg
X19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX3JlbmFtZShfX2Zyb20sIF9fdG8sICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCByZXNpemVfZmlsZShjb25zdCBwYXRoJiBfX3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRtYXhf
dCBfX25zKSB7CisgIHJldHVybiBfX3Jlc2l6ZV9maWxlKF9fcCwgX19ucyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgm
IF9fcCwgdWludG1heF90IF9fbnMsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIF9fcmVzaXplX2ZpbGUoX19wLCBfX25zLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHNwYWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBfX3NwYWNlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHNwYWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX3NwYWNlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBfX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIF9fc3RhdHVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cyhjb25zdCBw
YXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMKK3N5bWxpbmtfc3RhdHVzKGNv
bnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19z
eW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCkgeworICByZXR1cm4gX190ZW1wX2Rp
cmVjdG9yeV9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBh
dGggdGVtcF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3Rl
bXBfZGlyZWN0b3J5X3BhdGgoJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wKSB7CisgIHJldHVy
biBfX3dlYWtseV9jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7Cit9CisK
K2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3I7CitjbGFzcyBfX2Rpcl9zdHJlYW07CisKK2NsYXNzIGRpcmVjdG9yeV9lbnRyeSB7Cisg
IHR5cGVkZWYgX1ZTVERfRlM6OnBhdGggX1BhdGg7CisKK3B1YmxpYzoKKyAgLy8gY29uc3RydWN0
b3JzIGFuZCBkZXN0cnVjdG9ycworICBkaXJlY3RvcnlfZW50cnkoKSBub2V4Y2VwdCA9IGRlZmF1
bHQ7CisgIGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9IGRlZmF1bHQ7
CisgIGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0
OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgZGlyZWN0b3J5X2Vu
dHJ5KF9QYXRoIGNvbnN0JiBfX3ApIDogX19wXyhfX3ApIHsKKyAgICBlcnJvcl9jb2RlIF9fZWM7
CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgZGlyZWN0b3J5X2VudHJ5KF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMp
IDogX19wXyhfX3ApIHsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgfmRpcmVjdG9y
eV9lbnRyeSgpIHt9CisKKyAgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvcj0oZGlyZWN0b3J5X2Vu
dHJ5IGNvbnN0JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yPShkaXJl
Y3RvcnlfZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCkgeworICAgIF9fcF8gPSBf
X3A7CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgYXNzaWduKF9QYXRoIGNvbnN0JiBf
X3AsIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19wOworICAgIF9fcmVmcmVzaCgm
X19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFj
ZV9maWxlbmFtZShfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19wXy5yZXBsYWNlX2ZpbGVuYW1l
KF9fcCk7CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxlbmFtZShf
UGF0aCBjb25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSB7CisgICAgX19wXyA9IF9fcF8ucGFy
ZW50X3BhdGgoKSAvIF9fcDsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goKSB7IF9fcmVmcmVzaCgpOyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgeyBfX3JlZnJlc2goJl9fZWMpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBfUGF0aCBjb25zdCYgcGF0aCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJu
IF9fcF87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIG9wZXJhdG9yIGNvbnN0
IF9QYXRoJigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6
OmV4aXN0cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgpfSk7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX1ZTVERfRlM6OmV4aXN0cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19l
Yyl9KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19ibG9j
a19maWxlKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmJsb2NrOyB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Jsb2NrX2ZpbGUoZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpibG9jazsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkg
PT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNl
cHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZGlyZWN0b3J5
KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19kaXJlY3RvcnkoZXJyb3Jf
Y29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykg
PT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgaXNfZmlmbygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90
eXBlOjpmaWZvOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Zp
Zm8oZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9m
dCgmX19lYykgPT0gZmlsZV90eXBlOjpmaWZvOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBib29sIGlzX290aGVyKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmlzX290
aGVyKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgYm9vbCBpc19vdGhlcihlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIF9WU1REX0ZTOjppc19vdGhlcihmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19l
Yyl9KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1
bGFyX2ZpbGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6cmVndWxh
cjsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9m
dCgmX19lYykgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBib29sIGlzX3NvY2tldCgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkg
PT0gZmlsZV90eXBlOjpzb2NrZXQ7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfc29ja2V0KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6c29ja2V0OworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3N5bWxpbmsoKSBjb25zdCB7IHJldHVy
biBfX2dldF9zeW1fZnQoKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluayhlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bV9mdCgmX19lYykgPT0gZmlsZV90eXBl
OjpzeW1saW5rOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90
IGZpbGVfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3NpemUoKTsgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVfc2l6ZShlcnJvcl9jb2RlJiBfX2Vj
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3NpemUoJl9fZWMpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgaGFyZF9saW5rX2NvdW50
KCkgY29uc3QgeyByZXR1cm4gX19nZXRfbmxpbmsoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudChlcnJvcl9jb2RlJiBfX2VjKSBj
b25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X25saW5rKCZfX2VjKTsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgbGFzdF93cml0ZV90
aW1lKCkgY29uc3QgeyByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoZXJyb3Jf
Y29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF93cml0ZV90aW1l
KCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0
dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3RhdHVzKCk7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN0YXR1cyhlcnJvcl9jb2RlJiBfX2Vj
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N0YXR1cygmX19lYyk7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0dXMoKTsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoZXJyb3Jf
Y29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zeW1saW5rX3N0
YXR1cygmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wg
b3BlcmF0b3I8KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gX19wXyA8IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I9PShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhz
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPT0gX19yaHMuX19wXzsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvciE9KGRpcmVjdG9y
eV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyAh
PSBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29s
IG9wZXJhdG9yPD0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQg
eworICAgIHJldHVybiBfX3BfIDw9IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I+KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19y
aHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+IF9fcmhzLl9fcF87CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I+PShkaXJlY3Rv
cnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8g
Pj0gX19yaHMuX19wXzsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgZGlyZWN0b3J5
X2l0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsK
KyAgZnJpZW5kIGNsYXNzIF9fZGlyX3N0cmVhbTsKKworICBlbnVtIF9DYWNoZVR5cGUgOiB1bnNp
Z25lZCBjaGFyIHsKKyAgICBfRW1wdHksCisgICAgX0l0ZXJTeW1saW5rLAorICAgIF9JdGVyTm9u
U3ltbGluaywKKyAgICBfUmVmcmVzaFN5bWxpbmssCisgICAgX1JlZnJlc2hTeW1saW5rVW5yZXNv
bHZlZCwKKyAgICBfUmVmcmVzaE5vblN5bWxpbmsKKyAgfTsKKworICBzdHJ1Y3QgX19jYWNoZWRf
ZGF0YSB7CisgICAgdWludG1heF90IF9fc2l6ZV87CisgICAgdWludG1heF90IF9fbmxpbmtfOwor
ICAgIGZpbGVfdGltZV90eXBlIF9fd3JpdGVfdGltZV87CisgICAgcGVybXMgX19zeW1fcGVybXNf
OworICAgIHBlcm1zIF9fbm9uX3N5bV9wZXJtc187CisgICAgZmlsZV90eXBlIF9fdHlwZV87Cisg
ICAgX0NhY2hlVHlwZSBfX2NhY2hlX3R5cGVfOworCisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICAgIF9fY2FjaGVkX2RhdGEoKSBub2V4Y2VwdCB7IF9fcmVzZXQoKTsgfQorCisgICAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICAgIHZvaWQgX19yZXNldCgpIHsKKyAgICAgIF9f
Y2FjaGVfdHlwZV8gPSBfRW1wdHk7CisgICAgICBfX3R5cGVfID0gZmlsZV90eXBlOjpub25lOwor
ICAgICAgX19zeW1fcGVybXNfID0gX19ub25fc3ltX3Blcm1zXyA9IHBlcm1zOjp1bmtub3duOwor
ICAgICAgX19zaXplXyA9IF9fbmxpbmtfID0gdWludG1heF90KC0xKTsKKyAgICAgIF9fd3JpdGVf
dGltZV8gPSBmaWxlX3RpbWVfdHlwZTo6bWluKCk7CisgICAgfQorICB9OworCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgc3RhdGljIF9fY2FjaGVkX2RhdGEgX19jcmVhdGVfaXRlcl9y
ZXN1bHQoZmlsZV90eXBlIF9fZnQpIHsKKyAgICBfX2NhY2hlZF9kYXRhIF9fZGF0YTsKKyAgICBf
X2RhdGEuX190eXBlXyA9IF9fZnQ7CisgICAgX19kYXRhLl9fY2FjaGVfdHlwZV8gPSBbJl0oKSB7
CisgICAgICBzd2l0Y2ggKF9fZnQpIHsKKyAgICAgIGNhc2UgZmlsZV90eXBlOjpub25lOgorICAg
ICAgICByZXR1cm4gX0VtcHR5OworICAgICAgY2FzZSBmaWxlX3R5cGU6OnN5bWxpbms6CisgICAg
ICAgIHJldHVybiBfSXRlclN5bWxpbms7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
X0l0ZXJOb25TeW1saW5rOworICAgICAgfQorICAgIH0oKTsKKyAgICByZXR1cm4gX19kYXRhOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fYXNzaWduX2l0ZXJf
ZW50cnkoX1BhdGgmJiBfX3AsIF9fY2FjaGVkX2RhdGEgX19kdCkgeworICAgIF9fcF8gPSBzdGQ6
Om1vdmUoX19wKTsKKyAgICBfX2RhdGFfID0gX19kdDsKKyAgfQorCisgIF9MSUJDUFBfRlVOQ19W
SVMKKyAgZXJyb3JfY29kZSBfX2RvX3JlZnJlc2goKSBub2V4Y2VwdDsKKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHN0YXRpYyBib29sIF9faXNfZG5lX2Vycm9yKGVycm9yX2NvZGUg
Y29uc3QmIF9fZWMpIHsKKyAgICBpZiAoIV9fZWMpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBz
d2l0Y2ggKHN0YXRpY19jYXN0PGVycmM+KF9fZWMudmFsdWUoKSkpIHsKKyAgICBjYXNlIGVycmM6
Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3Rvcnk6CisgICAgY2FzZSBlcnJjOjpub3RfYV9kaXJlY3Rv
cnk6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX2hh
bmRsZV9lcnJvcihjb25zdCBjaGFyKiBfX21zZywgZXJyb3JfY29kZSogX19kZXN0X2VjLAorICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUgY29uc3QmIF9fZWMsIGJvb2wgX19hbGxvd19k
bmUgPSBmYWxzZSkgY29uc3QgeworICAgIGlmIChfX2Rlc3RfZWMpIHsKKyAgICAgICpfX2Rlc3Rf
ZWMgPSBfX2VjOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoX19lYyAmJiAoIV9fYWxs
b3dfZG5lIHx8ICFfX2lzX2RuZV9lcnJvcihfX2VjKSkpCisgICAgICBfX3Rocm93X2ZpbGVzeXN0
ZW1fZXJyb3IoX19tc2csIF9fcF8sIF9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB2b2lkIF9fcmVmcmVzaChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgewor
ICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OnJlZnJlc2giLCBfX2VjLCBf
X2RvX3JlZnJlc2goKSwKKyAgICAgICAgICAgICAgICAgICAvKmFsbG93X2RuZSovIHRydWUpOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfc3lt
X2Z0KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2Rh
dGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICAgIHJldHVybiBfX3N5
bWxpbmtfc3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAgICBjYXNlIF9JdGVyU3ltbGluazoK
KyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVz
b2x2ZWQ6CisgICAgICBpZiAoX19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJl
dHVybiBmaWxlX3R5cGU6OnN5bWxpbms7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAg
Y2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZGF0YV8u
X190eXBlXyk7CisgICAgICBpZiAoX19lYyAmJiAhX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSkKKyAg
ICAgICAgKl9fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVj
dG9yeSk7CisgICAgICBlbHNlIGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAg
ICAgcmV0dXJuIF9fZGF0YV8uX190eXBlXzsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJM
RSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19n
ZXRfZnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9f
ZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJT
eW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVy
biBfX3N0YXR1cyhfX3BfLCBfX2VjKS50eXBlKCk7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6
CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6
IHsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKKyAgICAgIGlmIChf
X2VjICYmICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAgICAqX19lYyA9IG1ha2VfZXJy
b3JfY29kZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKKyAgICAgIGVsc2UgaWYg
KF9fZWMpCisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX3R5
cGVfOworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zdGF0dXMoZXJy
b3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19j
YWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5r
OgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNv
bHZlZDoKKyAgICAgIHJldHVybiBfX3N0YXR1cyhfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZy
ZXNoTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICAgIHJldHVybiBm
aWxlX3N0YXR1cyhfX2dldF9mdChfX2VjKSwgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfKTsKKyAg
ICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zeW1saW5rX3N0YXR1cyhlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5
cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAg
Y2FzZSBfSXRlclN5bWxpbms6CisgICAgICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3BfLCBf
X2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0
YXR1cyhfX2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyk7CisgICAg
Y2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVk
OgorICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5f
X3N5bV9wZXJtc18pOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9zaXplKGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2Fj
aGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoK
KyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2
ZWQ6CisgICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fZmlsZV9zaXplKF9fcF8sIF9fZWMpOworICAg
IGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7Cisg
ICAgICBlcnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRfZnQo
Jl9fbV9lYykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6Zmls
ZV9zaXplIiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNURF9GUzo6ZXhpc3RzKF9fc3Qp
ICYmICFfVlNURF9GUzo6aXNfcmVndWxhcl9maWxlKF9fc3QpKSB7CisgICAgICAgIGVycmMgX19l
cnJfa2luZCA9IF9WU1REX0ZTOjppc19kaXJlY3RvcnkoX19zdCkgPyBlcnJjOjppc19hX2RpcmVj
dG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRp
cmVjdG9yeV9lbnRyeTo6ZmlsZV9zaXplIiwgX19lYywKKyAgICAgICAgICAgICAgICAgICAgICAg
bWFrZV9lcnJvcl9jb2RlKF9fZXJyX2tpbmQpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfX2Rh
dGFfLl9fc2l6ZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9ubGlu
ayhlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRh
Xy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5
bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtV
bnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2hhcmRfbGlua19jb3VudChfX3Bf
LCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9u
U3ltbGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICAodm9pZClfX2dldF9m
dCgmX19tX2VjKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6Omhh
cmRfbGlua19jb3VudCIsIF9fZWMsIF9fbV9lYyk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX25s
aW5rXzsKKyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgX19nZXRfd3JpdGVf
dGltZShlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19k
YXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5v
blN5bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxp
bmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2xhc3Rfd3JpdGVfdGltZShf
X3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNo
Tm9uU3ltbGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICBmaWxlX3N0YXR1
cyBfX3N0KF9fZ2V0X2Z0KCZfX21fZWMpKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJl
Y3RvcnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsIF9fbV9lYyk7CisgICAgICBpZiAo
X1ZTVERfRlM6OmV4aXN0cyhfX3N0KSAmJgorICAgICAgICAgIF9fZGF0YV8uX193cml0ZV90aW1l
XyA9PSBmaWxlX3RpbWVfdHlwZTo6bWluKCkpCisgICAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBk
aXJlY3RvcnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsCisgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2VfZXJyb3JfY29kZShlcnJjOjp2YWx1ZV90b29fbGFyZ2UpKTsKKyAgICAgIHJl
dHVybiBfX2RhdGFfLl9fd3JpdGVfdGltZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VO
UkVBQ0hBQkxFKCk7CisgIH0KKworcHJpdmF0ZToKKyAgX1BhdGggX19wXzsKKyAgX19jYWNoZWRf
ZGF0YSBfX2RhdGFfOworfTsKKworY2xhc3MgX19kaXJfZWxlbWVudF9wcm94eSB7CitwdWJsaWM6
CisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9lbnRyeSBvcGVy
YXRvciooKSB7CisgICAgcmV0dXJuIF9WU1REOjptb3ZlKF9fZWxlbV8pOworICB9CisKK3ByaXZh
dGU6CisgIGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBleHBsaWNpdCBfX2Rpcl9lbGVtZW50X3By
b3h5KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19lKSA6IF9fZWxlbV8oX19lKSB7fQorICBfX2Rp
cl9lbGVtZW50X3Byb3h5KF9fZGlyX2VsZW1lbnRfcHJveHkmJiBfX28pCisgICAgICA6IF9fZWxl
bV8oX1ZTVEQ6Om1vdmUoX19vLl9fZWxlbV8pKSB7fQorICBkaXJlY3RvcnlfZW50cnkgX19lbGVt
XzsKK307CisKK2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHR5cGVkZWYg
ZGlyZWN0b3J5X2VudHJ5IHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0KiBwb2ludGVyOworICB0eXBlZGVm
IHZhbHVlX3R5cGUgY29uc3QmIHJlZmVyZW5jZTsKKyAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKK3B1YmxpYzoKKyAgLy9jdG9yICYgZHRvcgorICBkaXJl
Y3RvcnlfaXRlcmF0b3IoKSBub2V4Y2VwdCB7fQorCisgIGV4cGxpY2l0IGRpcmVjdG9yeV9pdGVy
YXRvcihjb25zdCBwYXRoJiBfX3ApCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsIG51
bGxwdHIpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0
b3J5X29wdGlvbnMgX19vcHRzKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBudWxs
cHRyLCBfX29wdHMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwg
ZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMp
IHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAg
ICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMsIF9fb3B0cykge30KKworICBkaXJl
Y3RvcnlfaXRlcmF0b3IoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworICBk
aXJlY3RvcnlfaXRlcmF0b3IoZGlyZWN0b3J5X2l0ZXJhdG9yJiYpID0gZGVmYXVsdDsKKyAgZGly
ZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBk
ZWZhdWx0OworCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3I9KGRpcmVjdG9yeV9pdGVy
YXRvciYmIF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9u
IHByb3ZpZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBpZiAodGhpcyAhPSAm
X19vKSB7CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKKyAgICB9Cisg
ICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgfmRpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVs
dDsKKworICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yKigpIGNvbnN0IHsKKyAgICBf
TElCQ1BQX0FTU0VSVChfX2ltcF8sICJUaGUgZW5kIGl0ZXJhdG9yIGNhbm5vdCBiZSBkZXJlZmVy
ZW5jZWQiKTsKKyAgICByZXR1cm4gX19kZXJlZmVyZW5jZSgpOworICB9CisKKyAgY29uc3QgZGly
ZWN0b3J5X2VudHJ5KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJioqdGhpczsgfQorCisg
IGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7
IH0KKworICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKysoaW50KSB7CisgICAgX19kaXJf
ZWxlbWVudF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3JlbWVudCgpOworICAgIHJldHVy
biBfX3A7CisgIH0KKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIGluY3JlbWVudChlcnJvcl9jb2Rl
JiBfX2VjKSB7IHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7IH0KKworcHJpdmF0ZToKKyAgaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wKKyAgb3BlcmF0b3I9PShj
b25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgIGNvbnN0IGRpcmVj
dG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0OworCisgIC8vIGNvbnN0cnVjdCB0aGUgZGly
X3N0cmVhbQorICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBw
YXRoJiwgZXJyb3JfY29kZSosCisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9u
cyA9IGRpcmVjdG9yeV9vcHRpb25zOjpub25lKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGRp
cmVjdG9yeV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIp
OworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBfX2RlcmVm
ZXJlbmNlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHNoYXJlZF9wdHI8X19kaXJfc3RyZWFtPiBf
X2ltcF87Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVy
YXRvcj09KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgIGNvbnN0
IGRpcmVjdG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLl9f
aW1wXyA9PSBfX3Jocy5fX2ltcF87Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wKK29wZXJhdG9yIT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAg
ICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICBy
ZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7Cit9CisKKy8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0
b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGRpcmVjdG9yeV9pdGVyYXRvcgorYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIF9faXRl
cikgbm9leGNlcHQgeworICByZXR1cm4gX19pdGVyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBkaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCBkaXJlY3RvcnlfaXRl
cmF0b3ImKSBub2V4Y2VwdCB7CisgIHJldHVybiBkaXJlY3RvcnlfaXRlcmF0b3IoKTsKK30KKwor
Y2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHVzaW5nIHZh
bHVlX3R5cGUgPSBkaXJlY3RvcnlfZW50cnk7CisgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0
ZDo6cHRyZGlmZl90OworICB1c2luZyBwb2ludGVyID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0KjsK
KyAgdXNpbmcgcmVmZXJlbmNlID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0JjsKKyAgdXNpbmcgaXRl
cmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZzsKKworcHVibGljOgorICAv
LyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgbm9leGNlcHQgOiBfX3JlY18oZmFs
c2UpIHt9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yKAorICAgICAgY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlf
b3B0aW9ucyBfX3hvcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpCisgICAgICA6IHJl
Y3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBfX3hvcHRpb25zLCBudWxscHRyKSB7fQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9wdGlvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlvbnMsICZfX2VjKSB7fQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cihjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IHJlY3Vyc2l2ZV9k
aXJlY3RvcnlfaXRlcmF0b3IoX19wLCBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSwgJl9fZWMpIHt9
CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCByZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
KHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZhdWx0OworCisgIHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3ImCisgIG9wZXJhdG9yPShjb25zdCByZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3BlcmF0b3I9KHJlY3Vyc2l2ZV9k
aXJlY3RvcnlfaXRlcmF0b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAgICAvLyBub24tZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBwcm92aWRlZCB0byBzdXBwb3J0IHNlbGYtbW92ZSBhc3NpZ24uCisgICAg
aWYgKHRoaXMgIT0gJl9fbykgeworICAgICAgX19pbXBfID0gX1ZTVEQ6Om1vdmUoX19vLl9faW1w
Xyk7CisgICAgICBfX3JlY18gPSBfX28uX19yZWNfOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7
CisgIH0KKworICB+cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBjb25zdCBkaXJlY3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0b3Ir
KyhpbnQpIHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOworICAgIF9faW5j
cmVtZW50KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgaW5jcmVtZW50KGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgICByZXR1cm4gX19pbmNyZW1lbnQoJl9fZWMpOworICB9CisKKyAgX0xJ
QkNQUF9GVU5DX1ZJUyBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRpb25zKCkgY29uc3Q7CisgIF9MSUJD
UFBfRlVOQ19WSVMgaW50IGRlcHRoKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICB2b2lkIHBvcCgpIHsgX19wb3AoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgdm9pZCBwb3AoZXJyb3JfY29kZSYgX19lYykgeyBfX3BvcCgmX19lYyk7IH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgcmVjdXJzaW9uX3BlbmRpbmcoKSBj
b25zdCB7IHJldHVybiBfX3JlY187IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHZvaWQgZGlzYWJsZV9yZWN1cnNpb25fcGVuZGluZygpIHsgX19yZWNfID0gZmFsc2U7IH0KKwor
cHJpdmF0ZToKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3As
IGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0
b3J5X2VudHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUwor
ICBib29sIF9fdHJ5X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBfX2VjKTsKKworICBfTElCQ1BQX0ZV
TkNfVklTCisgIHZvaWQgX19hZHZhbmNlKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKwor
ICBfTElCQ1BQX0ZVTkNfVklTCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9faW5j
cmVtZW50KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklT
CisgIHZvaWQgX19wb3AoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIGlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29uc3Qg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYsCisgICAgICAgICAgICAgY29uc3QgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgIHN0cnVjdCBfX3NoYXJlZF9p
bXA7CisgIHNoYXJlZF9wdHI8X19zaGFyZWRfaW1wPiBfX2ltcF87CisgIGJvb2wgX19yZWNfOwor
fTsgLy8gY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09KGNvbnN0IHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuX19pbXBfID09
IF9fcmhzLl9faW1wXzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
ciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOworfQorLy8g
ZW5hYmxlIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRl
bWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3IKK2JlZ2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICByZXR1cm4gcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcigpOworfQorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RF
TQorCisjZW5kaWYgLy8gIV9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQX1BPUF9NQUNST1MK
KworI2VuZGlmIC8vIF9MSUJDUFBfRklMRVNZU1RFTQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410496</attachid>
            <date>2020-10-04 19:03:05 -0700</date>
            <delta_ts>2020-10-05 16:36:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217302-20201004190304.patch</filename>
            <type>text/plain</type>
            <size>168645</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5NTEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTA0ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gb2YgPGZpbGVzeXN0ZW0+
IHRvIFdURiBmb3IgbWFjT1MgMTAuMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBhbmQgaXRzIG5l
ZWRlZCBpbXBsZW1lbnRhdGlvbiBmaWxlcworICAgICAgICBmcm9tIGxpYmMrKyAocjM0MzgzOCkg
YW5kIG1vZGlmaWVzIHRoZW0gdG8gYnVpbGQgb3V0c2lkZSBvZiAgbGliYysrLiAKKyAgICAgICAg
VGhpcyBpcyBvbmx5IG5lZWRlZCBhbmQgb25seSBidWlsdCBmb3IgdmVyc2lvbnMgb2YgbWFjT1Mg
PCAxMC4xNQorICAgICAgICBhbmQgY2FuIGJlIGRyb3BwZWQgd2hlbiB3ZSByZXF1aXJlIDEwLjE1
LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
d3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9TdGRGaWxlc3lzdGVtLmNwcDogQWRk
ZWQuCisgICAgICAgICogd3RmL1N0ZEZpbGVzeXN0ZW0uaDogQWRkZWQuCisKIDIwMjAtMTAtMDMg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBJbnRy
b2R1Y2UgSklUT3BlcmF0aW9uTGlzdCB0byB2YWxpZGF0ZSBKSVQtY2FnZWQgcG9pbnRlcnMKSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY3
OTUxKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQAogCQk3QTZFQkEzNDIwNzQ2QzM0MDA0RjlDNDQgLyog
TWFjaFNlbmRSaWdodC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTZFQkEzMzIwNzQ2QzM0MDA0RjlDNDQgLyogTWFjaFNlbmRSaWdodC5jcHAgKi87
IH07CiAJCTdBRjAyM0I1MjA2MUUxNzAwMEE4RUZENiAvKiBQcm9jZXNzUHJpdmlsZWdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjAyM0I0MjA2
MUUxNkYwMEE4RUZENiAvKiBQcm9jZXNzUHJpdmlsZWdlLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjEx
RUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICov
OyB9OworCQk3QzU5NUZGRTI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzU5NUZGRDI1MkE5
NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5jcHAgKi87IH07CiAJCTgxMzQwMTM4MTVCMDky
RkQwMDFGRjBCOCAvKiBCYXNlNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODEzNDAxMzYxNUIwOTJGRDAwMUZGMEI4IC8qIEJhc2U2NC5jcHAgKi87
IH07CiAJCTgzNDhCQTBFMjFGQkMwRDUwMEZEMzA1NCAvKiBPYmplY3RJZGVudGlmaWVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNDhCQTBEMjFG
QkMwRDQwMEZEMzA1NCAvKiBPYmplY3RJZGVudGlmaWVyLmNwcCAqLzsgfTsKIAkJOTM5MzRCRDMx
OEExRThDMzAwRDBENkExIC8qIFN0cmluZ1ZpZXdDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTM0QkQyMThBMUU4QzMwMEQwRDZBMSAvKiBT
dHJpbmdWaWV3Q29jb2EubW0gKi87IH07CkBAIC00NjIsNiArNDYzLDggQEAKIAkJN0M0MjMwNzIy
M0NFMkQ4QTAwNkU1NEQwIC8qIFBsYXRmb3JtQ1BVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtQ1BVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
NDIzMDczMjNDRTJEOEIwMDZFNTREMCAvKiBQbGF0Zm9ybU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzQyM0NFQjE4NzAwNkU1NEQwIC8qIFBsYXRmb3JtTGVnYWN5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtTGVnYWN5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdDNTk1RkZDMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEZpbGVzeXN0ZW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M1OTVGRkQyNTJBOTZFMDAwRTQyMTY4IC8qIFN0
ZEZpbGVzeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Rk
RmlsZXN5c3RlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOTY5Mjk0MUY2
NjMwNkUwMDI2N0E5RSAvKiBLZXlWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS2V5VmFsdWVQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
OThDREM3MjNFN0E5QjgwMDEyRjIzMiAvKiBQbGF0Zm9ybUVuYWJsZUNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M5OENEQzgyM0U3QUZDODAwMTJGMjMyIC8qIFBsYXRmb3Jt
RW5hYmxlV2luQXBwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1FbmFibGVXaW5BcHBsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0NSw2
ICsxMjQ4LDggQEAKIAkJCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5o
ICovLAogCQkJCTMxM0VERUM5Nzc4RTQ5QzlCRUE5MUNGQyAvKiBTdGFja1RyYWNlLmNwcCAqLywK
IAkJCQlFRjdENkNENTlEODY0MkE4QTBEQTg2QUQgLyogU3RhY2tUcmFjZS5oICovLAorCQkJCTdD
NTk1RkZEMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLywKKwkJCQk3QzU5
NUZGQzI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5oICovLAogCQkJCUZFOTdGNkE4
MjQ1Q0U1REQwMEM2M0ZDNiAvKiBTdGRJbnRFeHRyYXMuaCAqLywKIAkJCQlBOEE0NzMxMTE1MUE4
MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJRkYwQTQzNjU4ODk1NEYzQ0Iw
N0RCRUNBIC8qIFN0ZExpc3QuaCAqLywKQEAgLTE3NDUsNiArMTc1MCw3IEBACiAJCQkJRkVFQTRE
RjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMzM3REI5Q0U3NDM0MTBGQUYwNzZFMTcgLyogU3RhY2tUcmFjZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3QzU5NUZGRTI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk1QjYzNzIwQ0I1RUZEMDA0Nzk2MzUgLyogU3RyaW5n
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDNDMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOEQ2RTI3MUY1NTIyRTMw
MEE3NUNDNCAvKiBTdHJpbmdCdWlsZGVySlNPTi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNjc5NTEpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDYgKzI0MSw3IEBAIHNldChXVEZfUFVC
TElDX0hFQURFUlMKICAgICBTdGFja1Nob3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAg
ICAgU3RhY2tUcmFjZS5oCisgICAgU3RkRmlsZXN5c3RlbS5oCiAgICAgU3RkSW50RXh0cmFzLmgK
ICAgICBTdGRMaWJFeHRyYXMuaAogICAgIFN0ZExpc3QuaApJbmRleDogU291cmNlL1dURi93dGYv
U3RkRmlsZXN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkRmlsZXN5
c3RlbS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjA1IEBACisvLz09PS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gU3RkRmlsZXN5c3RlbS5jcHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09
PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFz
dHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlU
IGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMu
IFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0v
LworCisvKiBJbXBvcnRzIGEgY29weSBvZiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmgs
IGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCwKKyAgIGZpbGVzeXN0ZW0vaW50MTI4
X2J1aWx0aW5zLmNwcCBhbmQgZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCBmcm9tIHIzNDM4Mzgg
b2YgdGhlCisgICBsaWJjKysgcHJvamVjdCBhbmQgaGFzIG1vZGlmaWVkIHRoZW0gdG8gd29yayBv
dXRzaWRlIG9mIGEgYnVpbGQgb2YgbGliYysrIGl0c2VsZi4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKwor
I2luY2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgorCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDEwMTUwMAorCisjaW5jbHVkZSAiU3RkRmlsZXN5c3RlbS5oIgorCisjaW5jbHVk
ZSA8X19jb25maWc+CisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9jb21tb24u
aCAtLSAqLworCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUg
PGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDxz
eXMvdGltZS5oPiAvLyBmb3IgOjp1dGltZXMgYXMgdXNlZCBpbiBfX2xhc3Rfd3JpdGVfdGltZQor
I2luY2x1ZGUgPGZjbnRsLmg+ICAgIC8qIHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKworLyogI2lu
Y2x1ZGUgIi4uL2luY2x1ZGUvYXBwbGVfYXZhaWxhYmlsaXR5LmgiICovCisKKyNpZiAhZGVmaW5l
ZChfX0FQUExFX18pCisvLyBXZSBjYW4gdXNlIHRoZSBwcmVzZW5jZSBvZiBVVElNRV9PTUlUIHRv
IGRldGVjdCBwbGF0Zm9ybXMgdGhhdCBwcm92aWRlCisvLyB1dGltZW5zYXQuCisjaWYgZGVmaW5l
ZChVVElNRV9PTUlUKQorI2RlZmluZSBfTElCQ1BQX1VTRV9VVElNRU5TQVQKKyNlbmRpZgorI2Vu
ZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNo
CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3By
YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCisjZW5kaWYK
KworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCituYW1lc3BhY2UgZGV0YWls
IHsKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBzdHJpbmcgZm9ybWF0X3N0cmluZ19pbXAoY29uc3Qg
Y2hhciogbXNnLCAuLi4pIHsKKyAgLy8gd2UgbWlnaHQgbmVlZCBhIHNlY29uZCBzaG90IGF0IHRo
aXMsIHNvIHByZS1lbXB0aXZseSBtYWtlIGEgY29weQorICBzdHJ1Y3QgR3VhcmRWQUxpc3Qgewor
ICAgIHZhX2xpc3QmIHRhcmdldDsKKyAgICBib29sIGFjdGl2ZSA9IHRydWU7CisgICAgR3VhcmRW
QUxpc3QodmFfbGlzdCYgdGFyZ2V0KSA6IHRhcmdldCh0YXJnZXQpLCBhY3RpdmUodHJ1ZSkge30K
KyAgICB2b2lkIGNsZWFyKCkgeworICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAgdmFfZW5kKHRh
cmdldCk7CisgICAgICBhY3RpdmUgPSBmYWxzZTsKKyAgICB9CisgICAgfkd1YXJkVkFMaXN0KCkg
eworICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAgdmFfZW5kKHRhcmdldCk7CisgICAgfQorICB9
OworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0KGFyZ3MsIG1zZyk7CisgIEd1YXJkVkFMaXN0
IGFyZ3NfZ3VhcmQoYXJncyk7CisKKyAgdmFfbGlzdCBhcmdzX2NwOworICB2YV9jb3B5KGFyZ3Nf
Y3AsIGFyZ3MpOworICBHdWFyZFZBTGlzdCBhcmdzX2NvcHlfZ3VhcmQoYXJnc19jcCk7CisKKyAg
YXJyYXk8Y2hhciwgMjU2PiBsb2NhbF9idWZmOworICBzaXplX3Qgc2l6ZSA9IGxvY2FsX2J1ZmYu
c2l6ZSgpOworCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVz
aAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwi
CisjZW5kaWYKKyAgYXV0byByZXQgPSA6OnZzbnByaW50Zihsb2NhbF9idWZmLmRhdGEoKSwgc2l6
ZSwgbXNnLCBhcmdzX2NwKTsKKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwb3AKKyNlbmRpZgorCisgIGFyZ3NfY29weV9ndWFyZC5jbGVhcigpOworCisgIC8vIGhh
bmRsZSBlbXB0eSBleHBhbnNpb24KKyAgaWYgKHJldCA9PSAwKQorICAgIHJldHVybiBzdHJpbmd7
fTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmV0KSA8IHNpemUpCisgICAgcmV0dXJuIHN0
cmluZyhsb2NhbF9idWZmLmRhdGEoKSk7CisKKyAgLy8gd2UgZGlkIG5vdCBwcm92aWRlIGEgbG9u
ZyBlbm91Z2ggYnVmZmVyIG9uIG91ciBmaXJzdCBhdHRlbXB0LgorICAvLyBhZGQgMSB0byBzaXpl
IHRvIGFjY291bnQgZm9yIG51bGwtYnl0ZSBpbiBzaXplIGNhc3QgdG8gcHJldmVudCBvdmVyZmxv
dworICBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpICsgMTsKKyAgYXV0byBidWZmX3B0
ciA9IHVuaXF1ZV9wdHI8Y2hhcltdPihuZXcgY2hhcltzaXplXSk7CisKKyNpZmRlZiBfX2NsYW5n
X18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNlbmRpZgorICByZXQgPSA6OnZzbnBy
aW50ZihidWZmX3B0ci5nZXQoKSwgc2l6ZSwgbXNnLCBhcmdzKTsKKyNpZmRlZiBfX2NsYW5nX18K
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisgIHJldHVybiBzdHJpbmco
YnVmZl9wdHIuZ2V0KCkpOworfQorCitjb25zdCBjaGFyKiB1bndyYXAoc3RyaW5nIGNvbnN0JiBz
KSB7IHJldHVybiBzLmNfc3RyKCk7IH0KK2NvbnN0IGNoYXIqIHVud3JhcChwYXRoIGNvbnN0JiBw
KSB7IHJldHVybiBwLm5hdGl2ZSgpLmNfc3RyKCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBBcmc+CitB
cmcgY29uc3QmIHVud3JhcChBcmcgY29uc3QmIGEpIHsKKyAgc3RhdGljX2Fzc2VydCghaXNfY2xh
c3M8QXJnPjo6dmFsdWUsICJjYW5ub3QgcGFzcyBjbGFzcyBoZXJlIik7CisgIHJldHVybiBhOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KK3N0cmluZyBmb3JtYXRfc3RyaW5nKGNvbnN0
IGNoYXIqIGZtdCwgQXJncyBjb25zdCYuLi4gYXJncykgeworICByZXR1cm4gZm9ybWF0X3N0cmlu
Z19pbXAoZm10LCB1bndyYXAoYXJncykuLi4pOworfQorCitlcnJvcl9jb2RlIGNhcHR1cmVfZXJy
bm8oKSB7CisgIF9MSUJDUFBfQVNTRVJUKGVycm5vLCAiRXhwZWN0ZWQgZXJybm8gdG8gYmUgbm9u
LXplcm8iKTsKKyAgcmV0dXJuIGVycm9yX2NvZGUoZXJybm8sIGdlbmVyaWNfY2F0ZWdvcnkoKSk7
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorVCBlcnJvcl92YWx1ZSgpOwordGVtcGxhdGUgPD4K
K19MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIHZvaWQgZXJyb3JfdmFsdWU8dm9pZD4oKSB7
fQordGVtcGxhdGUgPD4KK2Jvb2wgZXJyb3JfdmFsdWU8Ym9vbD4oKSB7CisgIHJldHVybiBmYWxz
ZTsKK30KK3RlbXBsYXRlIDw+Cit1aW50bWF4X3QgZXJyb3JfdmFsdWU8dWludG1heF90PigpIHsK
KyAgcmV0dXJuIHVpbnRtYXhfdCgtMSk7Cit9Cit0ZW1wbGF0ZSA8PgorX0xJQkNQUF9DT05TVEVY
UFJfQUZURVJfQ1hYMTEgZmlsZV90aW1lX3R5cGUgZXJyb3JfdmFsdWU8ZmlsZV90aW1lX3R5cGU+
KCkgeworICByZXR1cm4gZmlsZV90aW1lX3R5cGU6Om1pbigpOworfQordGVtcGxhdGUgPD4KK3Bh
dGggZXJyb3JfdmFsdWU8cGF0aD4oKSB7CisgIHJldHVybiB7fTsKK30KKwordGVtcGxhdGUgPGNs
YXNzIFQ+CitzdHJ1Y3QgRXJyb3JIYW5kbGVyIHsKKyAgY29uc3QgY2hhciogZnVuY19uYW1lOwor
ICBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHI7CisgIGNvbnN0IHBhdGgqIHAxID0gbnVsbHB0cjsK
KyAgY29uc3QgcGF0aCogcDIgPSBudWxscHRyOworCisgIEVycm9ySGFuZGxlcihjb25zdCBjaGFy
KiBmbmFtZSwgZXJyb3JfY29kZSogZWMsIGNvbnN0IHBhdGgqIHAxID0gbnVsbHB0ciwKKyAgICAg
ICAgICAgICAgIGNvbnN0IHBhdGgqIHAyID0gbnVsbHB0cikKKyAgICAgIDogZnVuY19uYW1lKGZu
YW1lKSwgZWMoZWMpLCBwMShwMSksIHAyKHAyKSB7CisgICAgaWYgKGVjKQorICAgICAgZWMtPmNs
ZWFyKCk7CisgIH0KKworICBUIHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2VjKSBjb25zdCB7
CisgICAgaWYgKGVjKSB7CisgICAgICAqZWMgPSBtX2VjOworICAgICAgcmV0dXJuIGVycm9yX3Zh
bHVlPFQ+KCk7CisgICAgfQorICAgIHN0cmluZyB3aGF0ID0gc3RyaW5nKCJpbiAiKSArIGZ1bmNf
bmFtZTsKKyAgICBzd2l0Y2ggKGJvb2wocDEpICsgYm9vbChwMikpIHsKKyAgICBjYXNlIDA6Cisg
ICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgbV9lYyk7CisgICAgY2FzZSAxOgor
ICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwgbV9lYyk7CisgICAgY2Fz
ZSAyOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwgKnAyLCBtX2Vj
KTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzLi4uIEFyZ3M+CisgIFQgcmVwb3J0KGNvbnN0IGVycm9yX2NvZGUmIG1fZWMsIGNvbnN0
IGNoYXIqIG1zZywgQXJncyBjb25zdCYuLi4gYXJncykgY29uc3QgeworICAgIGlmIChlYykgewor
ICAgICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92YWx1ZTxUPigpOworICAgIH0K
KyAgICBzdHJpbmcgd2hhdCA9CisgICAgICAgIHN0cmluZygiaW4gIikgKyBmdW5jX25hbWUgKyAi
OiAiICsgZm9ybWF0X3N0cmluZyhtc2csIGFyZ3MuLi4pOworICAgIHN3aXRjaCAoYm9vbChwMSkg
KyBib29sKHAyKSkgeworICAgIGNhc2UgMDoKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJv
cih3aGF0LCBtX2VjKTsKKyAgICBjYXNlIDE6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJy
b3Iod2hhdCwgKnAxLCBtX2VjKTsKKyAgICBjYXNlIDI6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0
ZW1fZXJyb3Iod2hhdCwgKnAxLCAqcDIsIG1fZWMpOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVB
Q0hBQkxFKCk7CisgIH0KKworICBUIHJlcG9ydChlcnJjIGNvbnN0JiBlcnIpIGNvbnN0IHsgcmV0
dXJuIHJlcG9ydChtYWtlX2Vycm9yX2NvZGUoZXJyKSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mu
Li4gQXJncz4KKyAgVCByZXBvcnQoZXJyYyBjb25zdCYgZXJyLCBjb25zdCBjaGFyKiBtc2csIEFy
Z3MgY29uc3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVwb3J0KG1ha2VfZXJyb3Jf
Y29kZShlcnIpLCBtc2csIGFyZ3MuLi4pOworICB9CisKK3ByaXZhdGU6CisgIEVycm9ySGFuZGxl
cihFcnJvckhhbmRsZXIgY29uc3QmKSA9IGRlbGV0ZTsKKyAgRXJyb3JIYW5kbGVyJiBvcGVyYXRv
cj0oRXJyb3JIYW5kbGVyIGNvbnN0JikgPSBkZWxldGU7Cit9OworCit1c2luZyBjaHJvbm86OmR1
cmF0aW9uOwordXNpbmcgY2hyb25vOjpkdXJhdGlvbl9jYXN0OworCit1c2luZyBUaW1lU3BlYyA9
IHN0cnVjdCA6OnRpbWVzcGVjOwordXNpbmcgU3RhdFQgPSBzdHJ1Y3QgOjpzdGF0OworCit0ZW1w
bGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVCwKKyAgICAgICAgICBib29sIElzRmxv
YXQgPSBpc19mbG9hdGluZ19wb2ludDx0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcD46OnZhbHVlPgor
c3RydWN0IHRpbWVfdXRpbF9iYXNlIHsKKyAgdXNpbmcgcmVwID0gdHlwZW5hbWUgRmlsZVRpbWVU
OjpyZXA7CisgIHVzaW5nIGZzX2R1cmF0aW9uID0gdHlwZW5hbWUgRmlsZVRpbWVUOjpkdXJhdGlv
bjsKKyAgdXNpbmcgZnNfc2Vjb25kcyA9IGR1cmF0aW9uPHJlcD47CisgIHVzaW5nIGZzX25hbm9z
ZWNvbmRzID0gZHVyYXRpb248cmVwLCBuYW5vPjsKKyAgdXNpbmcgZnNfbWljcm9zZWNvbmRzID0g
ZHVyYXRpb248cmVwLCBtaWNybz47CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWF4X3NlY29u
ZHMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9u
OjptYXgoKSkuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtYXhfbnNlYyA9Cisg
ICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjpt
YXgoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1h
eF9zZWNvbmRzKSkKKyAgICAgICAgICAuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJl
cCBtaW5fc2Vjb25kcyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1l
VDo6ZHVyYXRpb246Om1pbigpKS5jb3VudCgpOworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1p
bl9uc2VjX3RpbWVzcGVjID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KAor
ICAgICAgICAgIChGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSAtIGZzX3NlY29uZHMobWluX3Nl
Y29uZHMpKSArCisgICAgICAgICAgZnNfc2Vjb25kcygxKSkKKyAgICAgICAgICAuY291bnQoKTsK
KworcHJpdmF0ZToKKyNpZiBfTElCQ1BQX1NURF9WRVIgPiAxMSAmJiAhZGVmaW5lZChfTElCQ1BQ
X0hBU19OT19DWFgxNF9DT05TVEVYUFIpCisgIHN0YXRpYyBjb25zdGV4cHIgZnNfZHVyYXRpb24g
Z2V0X21pbl9uc2VjcygpIHsKKyAgICByZXR1cm4gZHVyYXRpb25fY2FzdDxmc19kdXJhdGlvbj4o
CisgICAgICAgIGZzX25hbm9zZWNvbmRzKG1pbl9uc2VjX3RpbWVzcGVjKSAtCisgICAgICAgIGR1
cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KGZzX3NlY29uZHMoMSkpKTsKKyAgfQorICAvLyBT
dGF0aWMgYXNzZXJ0IHRoYXQgdGhlc2UgdmFsdWVzIHByb3Blcmx5IHJvdW5kIHRyaXAuCisgIHN0
YXRpY19hc3NlcnQoZnNfc2Vjb25kcyhtaW5fc2Vjb25kcykgKyBnZXRfbWluX25zZWNzKCkgPT0K
KyAgICAgICAgICAgICAgICAgICAgRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCksCisgICAgICAg
ICAgICAgICAgInZhbHVlIGRvZXNuJ3Qgcm91bmR0cmlwIik7CisKKyAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGNoZWNrX3JhbmdlKCkgeworICAgIC8vIFRoaXMga2luZGEgc3Vja3MsIGJ1dCBpdCdz
IHdoYXQgaGFwcGVucyB3aGVuIHdlIGRvbid0IGhhdmUgX19pbnQxMjhfdC4KKyAgICBpZiAoc2l6
ZW9mKFRpbWVUKSA9PSBzaXplb2YocmVwKSkgeworICAgICAgdHlwZWRlZiBkdXJhdGlvbjxsb25n
IGxvbmcsIHJhdGlvPDM2MDAgKiAyNCAqIDM2NT4gPiBZZWFyczsKKyAgICAgIHJldHVybiBkdXJh
dGlvbl9jYXN0PFllYXJzPihmc19zZWNvbmRzKG1heF9zZWNvbmRzKSkgPiBZZWFycygyNTApICYm
CisgICAgICAgICAgICAgZHVyYXRpb25fY2FzdDxZZWFycz4oZnNfc2Vjb25kcyhtaW5fc2Vjb25k
cykpIDwgWWVhcnMoLTI1MCk7CisgICAgfQorICAgIHJldHVybiBtYXhfc2Vjb25kcyA+PSBudW1l
cmljX2xpbWl0czxUaW1lVD46Om1heCgpICYmCisgICAgICAgICAgIG1pbl9zZWNvbmRzIDw9IG51
bWVyaWNfbGltaXRzPFRpbWVUPjo6bWluKCk7CisgIH0KKyAgc3RhdGljX2Fzc2VydChjaGVja19y
YW5nZSgpLCAidGhlIHJlcHJlc2VudGFibGUgcmFuZ2UgaXMgdW5hY2NlcHRhYmxlIHNtYWxsIik7
CisjZW5kaWYKK307CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgor
c3RydWN0IHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+IHsKKyAgdXNpbmcg
cmVwID0gdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA7CisgIHVzaW5nIGZzX2R1cmF0aW9uID0gdHlw
ZW5hbWUgRmlsZVRpbWVUOjpkdXJhdGlvbjsKKyAgdXNpbmcgZnNfc2Vjb25kcyA9IGR1cmF0aW9u
PHJlcD47CisgIHVzaW5nIGZzX25hbm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBuYW5vPjsKKyAg
dXNpbmcgZnNfbWljcm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBtaWNybz47CisKKyAgc3RhdGlj
IGNvbnN0IHJlcCBtYXhfc2Vjb25kczsKKyAgc3RhdGljIGNvbnN0IHJlcCBtYXhfbnNlYzsKKyAg
c3RhdGljIGNvbnN0IHJlcCBtaW5fc2Vjb25kczsKKyAgc3RhdGljIGNvbnN0IHJlcCBtaW5fbnNl
Y190aW1lc3BlYzsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVU
PgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxfYmFzZTxGaWxl
VGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X3NlY29uZHMgPQorICAgICAgICBkdXJhdGlvbl9jYXN0
PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgpKS5jb3VudCgpOworCit0ZW1w
bGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVU
aW1lVDo6cmVwIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+OjptYXhfbnNl
YyA9CisgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlv
bjo6bWF4KCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMo
bWF4X3NlY29uZHMpKQorICAgICAgICAuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVU
aW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcAorICAgIHRp
bWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+OjptaW5fc2Vjb25kcyA9CisgICAg
ICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkp
LmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgorY29u
c3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQs
IFRpbWVULCB0cnVlPjo6bWluX25zZWNfdGltZXNwZWMgPQorICAgICAgICBkdXJhdGlvbl9jYXN0
PGZzX25hbm9zZWNvbmRzPigoRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkgLQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtaW5fc2Vjb25kcykpICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcygxKSkKKyAg
ICAgICAgICAgIC5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBU
aW1lVCwgY2xhc3MgVGltZVNwZWNUPgorc3RydWN0IHRpbWVfdXRpbCA6IHRpbWVfdXRpbF9iYXNl
PEZpbGVUaW1lVCwgVGltZVQ+IHsKKyAgdXNpbmcgQmFzZSA9IHRpbWVfdXRpbF9iYXNlPEZpbGVU
aW1lVCwgVGltZVQ+OworICB1c2luZyBCYXNlOjptYXhfbnNlYzsKKyAgdXNpbmcgQmFzZTo6bWF4
X3NlY29uZHM7CisgIHVzaW5nIEJhc2U6Om1pbl9uc2VjX3RpbWVzcGVjOworICB1c2luZyBCYXNl
OjptaW5fc2Vjb25kczsKKworICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19kdXJhdGlvbjsKKyAg
dXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfbWljcm9zZWNvbmRzOworICB1c2luZyB0eXBlbmFtZSBC
YXNlOjpmc19uYW5vc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfc2Vjb25kczsK
KworcHVibGljOgorICB0ZW1wbGF0ZSA8Y2xhc3MgQ1R5cGUsIGNsYXNzIENocm9ub1R5cGU+Cisg
IHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGNoZWNrZWRfc2V0KENU
eXBlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENocm9ub1R5cGUgdGltZSkgeworICAgIHVzaW5nIExpbSA9IG51bWVyaWNfbGlt
aXRzPENUeXBlPjsKKyAgICBpZiAodGltZSA+IExpbTo6bWF4KCkgfHwgdGltZSA8IExpbTo6bWlu
KCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgKm91dCA9IHN0YXRpY19jYXN0PENUeXBlPih0
aW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQ
Ul9BRlRFUl9DWFgxMSBib29sIGlzX3JlcHJlc2VudGFibGUoVGltZVNwZWNUIHRtKSB7CisgICAg
aWYgKHRtLnR2X3NlYyA+PSAwKSB7CisgICAgICByZXR1cm4gdG0udHZfc2VjIDwgbWF4X3NlY29u
ZHMgfHwKKyAgICAgICAgICAgICAodG0udHZfc2VjID09IG1heF9zZWNvbmRzICYmIHRtLnR2X25z
ZWMgPD0gbWF4X25zZWMpOworICAgIH0gZWxzZSBpZiAodG0udHZfc2VjID09IChtaW5fc2Vjb25k
cyAtIDEpKSB7CisgICAgICByZXR1cm4gdG0udHZfbnNlYyA+PSBtaW5fbnNlY190aW1lc3BlYzsK
KyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA+PSBtaW5fc2Vjb25kczsKKyAg
ICB9CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBp
c19yZXByZXNlbnRhYmxlKEZpbGVUaW1lVCB0bSkgeworICAgIGF1dG8gc2VjcyA9IGR1cmF0aW9u
X2Nhc3Q8ZnNfc2Vjb25kcz4odG0udGltZV9zaW5jZV9lcG9jaCgpKTsKKyAgICBhdXRvIG5zZWNz
ID0gZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4odG0udGltZV9zaW5jZV9lcG9jaCgpIC0g
c2Vjcyk7CisgICAgaWYgKG5zZWNzLmNvdW50KCkgPCAwKSB7CisgICAgICBzZWNzID0gc2VjcyAr
IGZzX3NlY29uZHMoMSk7CisgICAgICBuc2VjcyA9IG5zZWNzICsgZnNfc2Vjb25kcygxKTsKKyAg
ICB9CisgICAgdXNpbmcgVExpbSA9IG51bWVyaWNfbGltaXRzPFRpbWVUPjsKKyAgICBpZiAoc2Vj
cy5jb3VudCgpID49IDApCisgICAgICByZXR1cm4gc2Vjcy5jb3VudCgpIDw9IFRMaW06Om1heCgp
OworICAgIHJldHVybiBzZWNzLmNvdW50KCkgPj0gVExpbTo6bWluKCk7CisgIH0KKworICBzdGF0
aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgRmlsZVRpbWVUCisgIGNvbnZlcnRfZnJv
bV90aW1lc3BlYyhUaW1lU3BlY1QgdG0pIHsKKyAgICBpZiAodG0udHZfc2VjID49IDAgfHwgdG0u
dHZfbnNlYyA9PSAwKSB7CisgICAgICByZXR1cm4gRmlsZVRpbWVUKGZzX3NlY29uZHModG0udHZf
c2VjKSArCisgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+
KGZzX25hbm9zZWNvbmRzKHRtLnR2X25zZWMpKSk7CisgICAgfSBlbHNlIHsgLy8gdG0udHZfc2Vj
IDwgMAorICAgICAgYXV0byBhZGpfc3Vic2VjID0gZHVyYXRpb25fY2FzdDxmc19kdXJhdGlvbj4o
ZnNfc2Vjb25kcygxKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmc19uYW5vc2Vjb25kcyh0bS50dl9uc2VjKSk7CisgICAgICBhdXRvIER1ciA9
IGZzX3NlY29uZHModG0udHZfc2VjICsgMSkgLSBhZGpfc3Vic2VjOworICAgICAgcmV0dXJuIEZp
bGVUaW1lVChEdXIpOworICAgIH0KKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBTdWJTZWNUPgor
ICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbAorICBzZXRfdGltZXNf
Y2hlY2tlZChUaW1lVCogc2VjX291dCwgU3ViU2VjVCogc3Vic2VjX291dCwgRmlsZVRpbWVUIHRw
KSB7CisgICAgYXV0byBkdXIgPSB0cC50aW1lX3NpbmNlX2Vwb2NoKCk7CisgICAgYXV0byBzZWNf
ZHVyID0gZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihkdXIpOworICAgIGF1dG8gc3Vic2VjX2R1
ciA9IGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KGR1ciAtIHNlY19kdXIpOworICAgIC8v
IFRoZSB0dl9uc2VjIGFuZCB0dl91c2VjIGZpZWxkcyBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBzbyBh
ZGp1c3QgYWNjb3JkaW5nbHkKKyAgICBpZiAoc3Vic2VjX2R1ci5jb3VudCgpIDwgMCkgeworICAg
ICAgaWYgKHNlY19kdXIuY291bnQoKSA+IG1pbl9zZWNvbmRzKSB7CisgICAgICAgIHNlY19kdXIg
PSBzZWNfZHVyIC0gZnNfc2Vjb25kcygxKTsKKyAgICAgICAgc3Vic2VjX2R1ciA9IHN1YnNlY19k
dXIgKyBmc19zZWNvbmRzKDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3Vic2VjX2R1ciA9
IGZzX25hbm9zZWNvbmRzOjp6ZXJvKCk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBjaGVj
a2VkX3NldChzZWNfb3V0LCBzZWNfZHVyLmNvdW50KCkpICYmCisgICAgICAgICAgIGNoZWNrZWRf
c2V0KHN1YnNlY19vdXQsIHN1YnNlY19kdXIuY291bnQoKSk7CisgIH0KKyAgc3RhdGljIF9MSUJD
UFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgY29udmVydF90b190aW1lc3BlYyhUaW1lU3Bl
Y1QmIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmlsZVRpbWVUIHRwKSB7CisgICAgaWYgKCFpc19yZXByZXNlbnRh
YmxlKHRwKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2V0X3RpbWVzX2NoZWNr
ZWQoJmRlc3QudHZfc2VjLCAmZGVzdC50dl9uc2VjLCB0cCk7CisgIH0KK307CisKK3VzaW5nIGZz
X3RpbWUgPSB0aW1lX3V0aWw8ZmlsZV90aW1lX3R5cGUsIHRpbWVfdCwgVGltZVNwZWM+OworCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCitUaW1lU3BlYyBleHRyYWN0X210aW1lKFN0YXRUIGNvbnN0
JiBzdCkgeyByZXR1cm4gc3Quc3RfbXRpbWVzcGVjOyB9CitUaW1lU3BlYyBleHRyYWN0X2F0aW1l
KFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfYXRpbWVzcGVjOyB9CisjZWxzZQorVGlt
ZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0X210aW07
IH0KK1RpbWVTcGVjIGV4dHJhY3RfYXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5z
dF9hdGltOyB9CisjZW5kaWYKKworLy8gYWxsb3cgdGhlIHV0aW1lcyBpbXBsZW1lbnRhdGlvbiB0
byBjb21waWxlIGV2ZW4gaXQgd2UncmUgbm90IGdvaW5nCisvLyB0byB1c2UgaXQuCisKK2Jvb2wg
cG9zaXhfdXRpbWVzKGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNwZWMsIDI+IGNvbnN0
JiBUUywKKyAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIHVzaW5nIG5hbWVz
cGFjZSBjaHJvbm87CisgIGF1dG8gQ29udmVydCA9IFtdKGxvbmcgbnNlYykgeworICAgIHVzaW5n
IGludF90eXBlID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPCA6OnRpbWV2YWw+KCkudHZfdXNlYyk7
CisgICAgYXV0byBkdXIgPSBkdXJhdGlvbl9jYXN0PG1pY3Jvc2Vjb25kcz4obmFub3NlY29uZHMo
bnNlYykpLmNvdW50KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihkdXIpOwor
ICB9OworICBzdHJ1Y3QgOjp0aW1ldmFsIENvbnZlcnRlZFRTWzJdID0ge3tUU1swXS50dl9zZWMs
IENvbnZlcnQoVFNbMF0udHZfbnNlYyl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHtUU1sxXS50dl9zZWMsIENvbnZlcnQoVFNbMV0udHZfbnNlYyl9fTsKKyAgaWYgKDo6
dXRpbWVzKHAuY19zdHIoKSwgQ29udmVydGVkVFMpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJl
X2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisj
aWYgZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQpCitib29sIHBvc2l4X3V0aW1lbnNhdChj
b25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMsCisgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjp1dGltZW5zYXQoQVRfRkRD
V0QsIHAuY19zdHIoKSwgVFMuZGF0YSgpLCAwKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9l
cnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZgorCitib29sIHNldF9maWxlX3RpbWVzKGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNw
ZWMsIDI+IGNvbnN0JiBUUywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsK
KyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQpCisgIHJldHVybiBwb3NpeF91dGlt
ZXMocCwgVFMsIGVjKTsKKyNlbHNlCisgIHJldHVybiBwb3NpeF91dGltZW5zYXQocCwgVFMsIGVj
KTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBlbmQgbmFtZXNwYWNlIGRldGFp
bAorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisvKiAtLSBFTkQgZmlsZXN5
c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5oIC0tICovCisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0v
ZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCAtLSAqLworCisjaWYgZGVmaW5lZChfTElCQ1BQX1dJTjMy
QVBJKQorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8V2luZG93cy5oPgor
I2Vsc2UKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisK
Ky8qICNpbmNsdWRlICJmaWxlc3lzdGVtX2NvbW1vbi5oIiAqLworCitfTElCQ1BQX0JFR0lOX05B
TUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFtZXNwYWNlIHsKKwor
I2lmICFkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCit0ZW1wbGF0ZSA8Y2xhc3MgRGlyRW50VCwg
Y2xhc3MgPSBkZWNsdHlwZShEaXJFbnRUOjpkX3R5cGUpPgorc3RhdGljIGZpbGVfdHlwZSBnZXRf
ZmlsZV90eXBlKERpckVudFQqIGVudCwgaW50KSB7CisgIHN3aXRjaCAoZW50LT5kX3R5cGUpIHsK
KyAgY2FzZSBEVF9CTEs6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6YmxvY2s7CisgIGNhc2UgRFRf
Q0hSOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKKyAgY2FzZSBEVF9ESVI6Cisg
ICAgcmV0dXJuIGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworICBjYXNlIERUX0ZJRk86CisgICAgcmV0
dXJuIGZpbGVfdHlwZTo6ZmlmbzsKKyAgY2FzZSBEVF9MTks6CisgICAgcmV0dXJuIGZpbGVfdHlw
ZTo6c3ltbGluazsKKyAgY2FzZSBEVF9SRUc6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6cmVndWxh
cjsKKyAgY2FzZSBEVF9TT0NLOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnNvY2tldDsKKyAgLy8g
VW5saWtlIGluIGxzdGF0LCBoaXR0aW5nICJ1bmtub3duIiBoZXJlIHNpbXBseSBtZWFucyB0aGF0
IHRoZSB1bmRlcmx5aW5nCisgIC8vIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGRfdHlwZS4g
UmVwb3J0IGlzIGFzICdub25lJyBzbyB3ZSBjb3JyZWN0bHkKKyAgLy8gc2V0IHRoZSBjYWNoZSB0
byBlbXB0eS4KKyAgY2FzZSBEVF9VTktOT1dOOgorICAgIGJyZWFrOworICB9CisgIHJldHVybiBm
aWxlX3R5cGU6Om5vbmU7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBEaXJFbnRUPgorc3RhdGljIGZp
bGVfdHlwZSBnZXRfZmlsZV90eXBlKERpckVudFQqIGVudCwgbG9uZykgeworICByZXR1cm4gZmls
ZV90eXBlOjpub25lOworfQorCitzdGF0aWMgcGFpcjxzdHJpbmdfdmlldywgZmlsZV90eXBlPiBw
b3NpeF9yZWFkZGlyKERJUiogZGlyX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgc3RydWN0IGRpcmVu
dCogZGlyX2VudHJ5X3B0ciA9IG51bGxwdHI7CisgIGVycm5vID0gMDsgLy8gemVybyBlcnJubyBp
biBvcmRlciB0byBkZXRlY3QgZXJyb3JzCisgIGVjLmNsZWFyKCk7CisgIGlmICgoZGlyX2VudHJ5
X3B0ciA9IDo6cmVhZGRpcihkaXJfc3RyZWFtKSkgPT0gbnVsbHB0cikgeworICAgIGlmIChlcnJu
bykKKyAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB7fTsKKyAgfSBlbHNl
IHsKKyAgICByZXR1cm4ge2Rpcl9lbnRyeV9wdHItPmRfbmFtZSwgZ2V0X2ZpbGVfdHlwZShkaXJf
ZW50cnlfcHRyLCAwKX07CisgIH0KK30KKyNlbHNlCisKK3N0YXRpYyBmaWxlX3R5cGUgZ2V0X2Zp
bGVfdHlwZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgLy9hdXRvIGF0dHJzID0g
ZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzOworICAvLyBGSVhNRShFcmljV0YpCisgIHJldHVybiBmaWxl
X3R5cGU6OnVua25vd247Cit9CitzdGF0aWMgdWludG1heF90IGdldF9maWxlX3NpemUoY29uc3Qg
V0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIHJldHVybiAoZGF0YS5uRmlsZVNpemVIaWdodCAq
IChNQVhEV09SRCArIDEpKSArIGRhdGEubkZpbGVTaXplTG93OworfQorc3RhdGljIGZpbGVfdGlt
ZV90eXBlIGdldF93cml0ZV90aW1lKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0YSkgeworICBV
TEFSR0VfSU5URUdFUiB0bXA7CisgIEZJTEVUSU1FJiB0aW1lID0gZGF0YS5mdExhc3RXcml0ZVRp
bWU7CisgIHRtcC51Lkxvd1BhcnQgPSB0aW1lLmR3TG93RGF0ZVRpbWU7CisgIHRtcC51LkhpZ2hQ
YXJ0ID0gdGltZS5kd0hpZ2hEYXRlVGltZTsKKyAgcmV0dXJuIGZpbGVfdGltZV90eXBlKGZpbGVf
dGltZV90eXBlOjpkdXJhdGlvbih0aW1lLlF1YWRQYXJ0KSk7Cit9CisKKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisKK3VzaW5nIGRldGFpbDo6RXJyb3JI
YW5kbGVyOworCisjaWYgZGVmaW5lZChfTElCQ1BQX1dJTjMyQVBJKQorY2xhc3MgX19kaXJfc3Ry
ZWFtIHsKK3B1YmxpYzoKKyAgX19kaXJfc3RyZWFtKCkgPSBkZWxldGU7CisgIF9fZGlyX3N0cmVh
bSYgb3BlcmF0b3I9KGNvbnN0IF9fZGlyX3N0cmVhbSYpID0gZGVsZXRlOworCisgIF9fZGlyX3N0
cmVhbShfX2Rpcl9zdHJlYW0mJiBfX2RzKSBub2V4Y2VwdCA6IF9fc3RyZWFtXyhfX2RzLl9fc3Ry
ZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cm9vdF8obW92ZShfX2RzLl9fcm9vdF8pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShfX2RzLl9fZW50cnlfKSkgeworICAgIF9f
ZHMuX19zdHJlYW1fID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgIH0KKworICBfX2Rpcl9zdHJl
YW0oY29uc3QgcGF0aCYgcm9vdCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0cywgZXJyb3JfY29kZSYg
ZWMpCisgICAgICA6IF9fc3RyZWFtXyhJTlZBTElEX0hBTkRMRV9WQUxVRSksIF9fcm9vdF8ocm9v
dCkgeworICAgIF9fc3RyZWFtXyA9IDo6RmluZEZpcnN0RmlsZUV4KHJvb3QuY19zdHIoKSwgJl9f
ZGF0YV8pOworICAgIGlmIChfX3N0cmVhbV8gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAg
ICAgIGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkp
OworICAgICAgY29uc3QgYm9vbCBpZ25vcmVfcGVybWlzc2lvbl9kZW5pZWQgPQorICAgICAgICAg
IGJvb2wob3B0cyAmIGRpcmVjdG9yeV9vcHRpb25zOjpza2lwX3Blcm1pc3Npb25fZGVuaWVkKTsK
KyAgICAgIGlmIChpZ25vcmVfcGVybWlzc2lvbl9kZW5pZWQgJiYgZWMudmFsdWUoKSA9PSBFUlJP
Ul9BQ0NFU1NfREVOSUVEKQorICAgICAgICBlYy5jbGVhcigpOworICAgICAgcmV0dXJuOworICAg
IH0KKyAgfQorCisgIH5fX2Rpcl9zdHJlYW0oKSBub2V4Y2VwdCB7CisgICAgaWYgKF9fc3RyZWFt
XyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgIHJldHVybjsKKyAgICBjbG9zZSgpOwor
ICB9CisKKyAgYm9vbCBnb29kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19zdHJlYW1fICE9
IElOVkFMSURfSEFORExFX1ZBTFVFOyB9CisKKyAgYm9vbCBhZHZhbmNlKGVycm9yX2NvZGUmIGVj
KSB7CisgICAgd2hpbGUgKDo6RmluZE5leHRGaWxlKF9fc3RyZWFtXywgJl9fZGF0YV8pKSB7Cisg
ICAgICBpZiAoIXN0cmNtcChfX2RhdGFfLmNGaWxlTmFtZSwgIi4iKSB8fCBzdHJjbXAoX19kYXRh
Xy5jRmlsZU5hbWUsICIuLiIpKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIC8vIEZJWE1FOiBD
YWNoZSBtb3JlIG9mIHRoaXMKKyAgICAgIC8vZGlyZWN0b3J5X2VudHJ5OjpfX2NhY2hlZF9kYXRh
IGNkYXRhOworICAgICAgLy9jZGF0YS5fX3R5cGVfID0gZ2V0X2ZpbGVfdHlwZShfX2RhdGFfKTsK
KyAgICAgIC8vY2RhdGEuX19zaXplXyA9IGdldF9maWxlX3NpemUoX19kYXRhXyk7CisgICAgICAv
L2NkYXRhLl9fd3JpdGVfdGltZV8gPSBnZXRfd3JpdGVfdGltZShfX2RhdGFfKTsKKyAgICAgIF9f
ZW50cnlfLl9fYXNzaWduX2l0ZXJfZW50cnkoCisgICAgICAgICAgX19yb290XyAvIF9fZGF0YV8u
Y0ZpbGVOYW1lLAorICAgICAgICAgIGRpcmVjdG9yeV9lbnRyeTo6X19jcmVhdGVfaXRlcl9yZXN1
bHQoZ2V0X2ZpbGVfdHlwZShfX2RhdGEpKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0ZWdvcnkoKSk7
CisgICAgY2xvc2UoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworcHJpdmF0ZToKKyAgZXJy
b3JfY29kZSBjbG9zZSgpIG5vZXhjZXB0IHsKKyAgICBlcnJvcl9jb2RlIGVjOworICAgIGlmICgh
OjpGaW5kQ2xvc2UoX19zdHJlYW1fKSkKKyAgICAgIGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RF
cnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkpOworICAgIF9fc3RyZWFtXyA9IElOVkFMSURfSEFO
RExFX1ZBTFVFOworICAgIHJldHVybiBlYzsKKyAgfQorCisgIEhBTkRMRSBfX3N0cmVhbV97SU5W
QUxJRF9IQU5ETEVfVkFMVUV9OworICBXSU4zMl9GSU5EX0RBVEEgX19kYXRhXzsKKworcHVibGlj
OgorICBwYXRoIF9fcm9vdF87CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VudHJ5XzsKK307CisjZWxz
ZQorY2xhc3MgX19kaXJfc3RyZWFtIHsKK3B1YmxpYzoKKyAgX19kaXJfc3RyZWFtKCkgPSBkZWxl
dGU7CisgIF9fZGlyX3N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IF9fZGlyX3N0cmVhbSYpID0gZGVs
ZXRlOworCisgIF9fZGlyX3N0cmVhbShfX2Rpcl9zdHJlYW0mJiBvdGhlcikgbm9leGNlcHQgOiBf
X3N0cmVhbV8ob3RoZXIuX19zdHJlYW1fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcm9vdF8obW92ZShvdGhlci5fX3Jvb3RfKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VudHJ5Xyhtb3ZlKG90
aGVyLl9fZW50cnlfKSkgeworICAgIG90aGVyLl9fc3RyZWFtXyA9IG51bGxwdHI7CisgIH0KKwor
ICBfX2Rpcl9zdHJlYW0oY29uc3QgcGF0aCYgcm9vdCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0cywg
ZXJyb3JfY29kZSYgZWMpCisgICAgICA6IF9fc3RyZWFtXyhudWxscHRyKSwgX19yb290Xyhyb290
KSB7CisgICAgaWYgKChfX3N0cmVhbV8gPSA6Om9wZW5kaXIocm9vdC5jX3N0cigpKSkgPT0gbnVs
bHB0cikgeworICAgICAgZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAgICAgIGNvbnN0
IGJvb2wgYWxsb3dfZWFjZXNzID0KKyAgICAgICAgICBib29sKG9wdHMgJiBkaXJlY3Rvcnlfb3B0
aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgICBpZiAoYWxsb3dfZWFjZXNzICYm
IGVjLnZhbHVlKCkgPT0gRUFDQ0VTKQorICAgICAgICBlYy5jbGVhcigpOworICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBhZHZhbmNlKGVjKTsKKyAgfQorCisgIH5fX2Rpcl9zdHJlYW0oKSBub2V4
Y2VwdCB7CisgICAgaWYgKF9fc3RyZWFtXykKKyAgICAgIGNsb3NlKCk7CisgIH0KKworICBib29s
IGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0cmVhbV8gIT0gbnVsbHB0cjsgfQor
CisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBlYykgeworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICBhdXRvIHN0cl90eXBlX3BhaXIgPSBkZXRhaWw6OnBvc2l4X3JlYWRkaXIoX19zdHJlYW1f
LCBlYyk7CisgICAgICBhdXRvJiBzdHIgPSBzdHJfdHlwZV9wYWlyLmZpcnN0OworICAgICAgaWYg
KHN0ciA9PSAiLiIgfHwgc3RyID09ICIuLiIpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9
IGVsc2UgaWYgKGVjIHx8IHN0ci5lbXB0eSgpKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF9fZW50cnlfLl9fYXNzaWdu
X2l0ZXJfZW50cnkoCisgICAgICAgICAgICBfX3Jvb3RfIC8gc3RyLAorICAgICAgICAgICAgZGly
ZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9pdGVyX3Jlc3VsdChzdHJfdHlwZV9wYWlyLnNlY29uZCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworcHJpdmF0ZToK
KyAgZXJyb3JfY29kZSBjbG9zZSgpIG5vZXhjZXB0IHsKKyAgICBlcnJvcl9jb2RlIG1fZWM7Cisg
ICAgaWYgKDo6Y2xvc2VkaXIoX19zdHJlYW1fKSA9PSAtMSkKKyAgICAgIG1fZWMgPSBkZXRhaWw6
OmNhcHR1cmVfZXJybm8oKTsKKyAgICBfX3N0cmVhbV8gPSBudWxscHRyOworICAgIHJldHVybiBt
X2VjOworICB9CisKKyAgRElSKiBfX3N0cmVhbV97bnVsbHB0cn07CisKK3B1YmxpYzoKKyAgcGF0
aCBfX3Jvb3RfOworICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2VuZGlmCisKKy8v
IGRpcmVjdG9yeV9pdGVyYXRvcgorCitkaXJlY3RvcnlfaXRlcmF0b3I6OmRpcmVjdG9yeV9pdGVy
YXRvcihjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMpIHsKKyAgRXJyb3JIYW5k
bGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRlcmF0b3IoLi4u
KSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBfX2ltcF8gPSBtYWtlX3NoYXJl
ZDxfX2Rpcl9zdHJlYW0+KHAsIG9wdHMsIG1fZWMpOworICBpZiAoZWMpCisgICAgKmVjID0gbV9l
YzsKKyAgaWYgKCFfX2ltcF8tPmdvb2QoKSkgeworICAgIF9faW1wXy5yZXNldCgpOworICAgIGlm
IChtX2VjKQorICAgICAgZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorfQorCitkaXJlY3RvcnlfaXRl
cmF0b3ImIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19pbmNyZW1lbnQoZXJyb3JfY29kZSogZWMpIHsK
KyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgYW4gaW52
YWxpZCBpdGVyYXRvciIpOworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJkaXJlY3RvcnlfaXRl
cmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICgh
X19pbXBfLT5hZHZhbmNlKG1fZWMpKSB7CisgICAgcGF0aCByb290ID0gbW92ZShfX2ltcF8tPl9f
cm9vdF8pOworICAgIF9faW1wXy5yZXNldCgpOworICAgIGlmIChtX2VjKQorICAgICAgZXJyLnJl
cG9ydChtX2VjLCAiYXQgcm9vdCBcIiVzXCIiLCByb290KTsKKyAgfQorICByZXR1cm4gKnRoaXM7
Cit9CisKK2RpcmVjdG9yeV9lbnRyeSBjb25zdCYgZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2RlcmVm
ZXJlbmNlKCkgY29uc3QgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJBdHRlbXB0aW5nIHRv
IGRlcmVmZXJlbmNlIGFuIGludmFsaWQgaXRlcmF0b3IiKTsKKyAgcmV0dXJuIF9faW1wXy0+X19l
bnRyeV87Cit9CisKKy8vIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKKworc3RydWN0IHJl
Y3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fc2hhcmVkX2ltcCB7CisgIHN0YWNrPF9fZGly
X3N0cmVhbT4gX19zdGFja187CisgIGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0aW9uc187Cit9Owor
CityZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yKAorICAgIGNvbnN0IHBhdGgmIHAsIGRpcmVjdG9yeV9vcHRpb25zIG9wdCwgZXJyb3JfY29k
ZSogZWMpCisgICAgOiBfX2ltcF8obnVsbHB0ciksIF9fcmVjXyh0cnVlKSB7CisgIEVycm9ySGFu
ZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IiLCBlYywgJnApOwor
CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgX19kaXJfc3RyZWFtIG5ld19zKHAsIG9wdCwgbV9lYyk7
CisgIGlmIChtX2VjKQorICAgIGVyci5yZXBvcnQobV9lYyk7CisgIGlmIChtX2VjIHx8ICFuZXdf
cy5nb29kKCkpCisgICAgcmV0dXJuOworCisgIF9faW1wXyA9IG1ha2Vfc2hhcmVkPF9fc2hhcmVk
X2ltcD4oKTsKKyAgX19pbXBfLT5fX29wdGlvbnNfID0gb3B0OworICBfX2ltcF8tPl9fc3RhY2tf
LnB1c2gobW92ZShuZXdfcykpOworfQorCit2b2lkIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0
b3I6Ol9fcG9wKGVycm9yX2NvZGUqIGVjKSB7CisgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIlBv
cHBpbmcgdGhlIGVuZCBpdGVyYXRvciIpOworICBpZiAoZWMpCisgICAgZWMtPmNsZWFyKCk7Cisg
IF9faW1wXy0+X19zdGFja18ucG9wKCk7CisgIGlmIChfX2ltcF8tPl9fc3RhY2tfLnNpemUoKSA9
PSAwKQorICAgIF9faW1wXy5yZXNldCgpOworICBlbHNlCisgICAgX19hZHZhbmNlKGVjKTsKK30K
KworZGlyZWN0b3J5X29wdGlvbnMgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6b3B0aW9u
cygpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1wXy0+X19vcHRpb25zXzsKK30KKworaW50IHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6OmRlcHRoKCkgY29uc3QgeworICByZXR1cm4gX19pbXBf
LT5fX3N0YWNrXy5zaXplKCkgLSAxOworfQorCitjb25zdCBkaXJlY3RvcnlfZW50cnkmIHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fZGVyZWZlcmVuY2UoKSBjb25zdCB7CisgIHJldHVy
biBfX2ltcF8tPl9fc3RhY2tfLnRvcCgpLl9fZW50cnlfOworfQorCityZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yJgorcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19pbmNyZW1lbnQo
ZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworICBpZiAocmVj
dXJzaW9uX3BlbmRpbmcoKSkgeworICAgIGlmIChfX3RyeV9yZWN1cnNpb24oZWMpIHx8IChlYyAm
JiAqZWMpKQorICAgICAgcmV0dXJuICp0aGlzOworICB9CisgIF9fcmVjXyA9IHRydWU7CisgIF9f
YWR2YW5jZShlYyk7CisgIHJldHVybiAqdGhpczsKK30KKwordm9pZCByZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yOjpfX2FkdmFuY2UoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVy
PHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIiwg
ZWMpOworCisgIGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciBlbmRfaXQ7CisgIGF1dG8mIHN0YWNr
ID0gX19pbXBfLT5fX3N0YWNrXzsKKyAgZXJyb3JfY29kZSBtX2VjOworICB3aGlsZSAoc3RhY2su
c2l6ZSgpID4gMCkgeworICAgIGlmIChzdGFjay50b3AoKS5hZHZhbmNlKG1fZWMpKQorICAgICAg
cmV0dXJuOworICAgIGlmIChtX2VjKQorICAgICAgYnJlYWs7CisgICAgc3RhY2sucG9wKCk7Cisg
IH0KKworICBpZiAobV9lYykgeworICAgIHBhdGggcm9vdCA9IG1vdmUoc3RhY2sudG9wKCkuX19y
b290Xyk7CisgICAgX19pbXBfLnJlc2V0KCk7CisgICAgZXJyLnJlcG9ydChtX2VjLCAiYXQgcm9v
dCBcIiVzXCIiLCByb290KTsKKyAgfSBlbHNlIHsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgfQor
fQorCitib29sIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fdHJ5X3JlY3Vyc2lvbihl
cnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJyZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisKKyAgYm9vbCByZWNfc3ltID0g
Ym9vbChvcHRpb25zKCkgJiBkaXJlY3Rvcnlfb3B0aW9uczo6Zm9sbG93X2RpcmVjdG9yeV9zeW1s
aW5rKTsKKworICBhdXRvJiBjdXJyX2l0ID0gX19pbXBfLT5fX3N0YWNrXy50b3AoKTsKKworICBi
b29sIHNraXBfcmVjID0gZmFsc2U7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKCFyZWNfc3lt
KSB7CisgICAgZmlsZV9zdGF0dXMgc3QoY3Vycl9pdC5fX2VudHJ5Xy5fX2dldF9zeW1fZnQoJm1f
ZWMpKTsKKyAgICBpZiAobV9lYyAmJiBzdGF0dXNfa25vd24oc3QpKQorICAgICAgbV9lYy5jbGVh
cigpOworICAgIGlmIChtX2VjIHx8IGlzX3N5bWxpbmsoc3QpIHx8ICFpc19kaXJlY3Rvcnkoc3Qp
KQorICAgICAgc2tpcF9yZWMgPSB0cnVlOworICB9IGVsc2UgeworICAgIGZpbGVfc3RhdHVzIHN0
KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfZnQoJm1fZWMpKTsKKyAgICBpZiAobV9lYyAmJiBzdGF0
dXNfa25vd24oc3QpKQorICAgICAgbV9lYy5jbGVhcigpOworICAgIGlmIChtX2VjIHx8ICFpc19k
aXJlY3Rvcnkoc3QpKQorICAgICAgc2tpcF9yZWMgPSB0cnVlOworICB9CisKKyAgaWYgKCFza2lw
X3JlYykgeworICAgIF9fZGlyX3N0cmVhbSBuZXdfaXQoY3Vycl9pdC5fX2VudHJ5Xy5wYXRoKCks
IF9faW1wXy0+X19vcHRpb25zXywgbV9lYyk7CisgICAgaWYgKG5ld19pdC5nb29kKCkpIHsKKyAg
ICAgIF9faW1wXy0+X19zdGFja18ucHVzaChtb3ZlKG5ld19pdCkpOworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICB9CisgIGlmIChtX2VjKSB7CisgICAgY29uc3QgYm9vbCBhbGxvd19lYWNl
c3MgPQorICAgICAgICBib29sKF9faW1wXy0+X19vcHRpb25zXyAmIGRpcmVjdG9yeV9vcHRpb25z
Ojpza2lwX3Blcm1pc3Npb25fZGVuaWVkKTsKKyAgICBpZiAobV9lYy52YWx1ZSgpID09IEVBQ0NF
UyAmJiBhbGxvd19lYWNlc3MpIHsKKyAgICAgIGlmIChlYykKKyAgICAgICAgZWMtPmNsZWFyKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgIHBhdGggYXRfZW50ID0gbW92ZShjdXJyX2l0Ll9fZW50cnlf
Ll9fcF8pOworICAgICAgX19pbXBfLnJlc2V0KCk7CisgICAgICBlcnIucmVwb3J0KG1fZWMsICJh
dHRlbXB0aW5nIHJlY3Vyc2lvbiBpbnRvIFwiJXNcIiIsIGF0X2VudCk7CisgICAgfQorICB9Cisg
IHJldHVybiBmYWxzZTsKK30KKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNURU0KKwor
LyogLS0gRU5EIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCAtLSAqLworCisvKiAt
LSBCRUdJTiBmaWxlc3lzdGVtL2ludDEyOF9idWlsdGlucy5jcHAgLS0gKi8KKworLyogPT09LS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLT09PQorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIF9fbXVsb3RpNCwgYW5k
IGlzIHN0b2xlbiBmcm9tIHRoZSBjb21waWxlcl9ydCBsaWJyYXJ5LgorICoKKyAqIEZJWE1FOiB3
ZSBzdGVhbCBhbmQgcmUtY29tcGlsZSBpdCBpbnRvIGZpbGVzeXN0ZW0sIHdoaWNoIHVzZXMgX19p
bnQxMjhfdCwKKyAqIGFuZCByZXF1aXJlcyB0aGlzIGJ1aWx0aW4gd2hlbiBzYW5pdGl6ZWQuIFNl
ZSBsbHZtLm9yZy9QUjMwNjQzCisgKgorICogPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKy8q
ICNpbmNsdWRlICJfX2NvbmZpZyIgKi8KKyNpbmNsdWRlIDxjbGltaXRzPgorCisjaWZuZGVmIF9f
U0laRU9GX0lOVDEyOF9fCisjZGVmaW5lIF9MSUJDUFBfSEFTX05PX0lOVDEyOAorI2VuZGlmCisK
KyNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19JTlQxMjgpCisKKyNpZmRlZiBfX2NsYW5nX18K
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdtaXNzaW5nLXByb3RvdHlwZXMiCisjZW5kaWYKK2V4dGVybiAiQyIgX19hdHRy
aWJ1dGVfXygobm9fc2FuaXRpemUoInVuZGVmaW5lZCIpKSkKK19faW50MTI4X3QgX19tdWxvdGk0
KF9faW50MTI4X3QgYSwgX19pbnQxMjhfdCBiLCBpbnQqIG92ZXJmbG93KSB7CisgIGNvbnN0IGlu
dCBOID0gKGludCkoc2l6ZW9mKF9faW50MTI4X3QpICogQ0hBUl9CSVQpOworICBjb25zdCBfX2lu
dDEyOF90IE1JTiA9IChfX2ludDEyOF90KTEgPDwgKE4gLSAxKTsKKyAgY29uc3QgX19pbnQxMjhf
dCBNQVggPSB+TUlOOworICAqb3ZlcmZsb3cgPSAwOworICBfX2ludDEyOF90IHJlc3VsdCA9IGEg
KiBiOworICBpZiAoYSA9PSBNSU4pIHsKKyAgICBpZiAoYiAhPSAwICYmIGIgIT0gMSkKKyAgICAg
ICpvdmVyZmxvdyA9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBpZiAoYiA9PSBNSU4p
IHsKKyAgICBpZiAoYSAhPSAwICYmIGEgIT0gMSkKKyAgICAgICpvdmVyZmxvdyA9IDE7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyAgfQorICBfX2ludDEyOF90IHNhID0gYSA+PiAoTiAtIDEpOworICBf
X2ludDEyOF90IGFic19hID0gKGEgXiBzYSkgLSBzYTsKKyAgX19pbnQxMjhfdCBzYiA9IGIgPj4g
KE4gLSAxKTsKKyAgX19pbnQxMjhfdCBhYnNfYiA9IChiIF4gc2IpIC0gc2I7CisgIGlmIChhYnNf
YSA8IDIgfHwgYWJzX2IgPCAyKQorICAgIHJldHVybiByZXN1bHQ7CisgIGlmIChzYSA9PSBzYikg
eworICAgIGlmIChhYnNfYSA+IE1BWCAvIGFic19iKQorICAgICAgKm92ZXJmbG93ID0gMTsKKyAg
fSBlbHNlIHsKKyAgICBpZiAoYWJzX2EgPiBNSU4gLyAtYWJzX2IpCisgICAgICAqb3ZlcmZsb3cg
PSAxOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2VuZGlmCisKKy8qIC0tIEVORCBmaWxl
c3lzdGVtL2ludDEyOF9idWlsdGlucy5jcHAgLS0gKi8KKworLyogLS0gQkVHSU4gZmlsZXN5c3Rl
bS9vcGVyYXRpb25zLmNwcCAtLSAqLworCisvKiAjaW5jbHVkZSAiZmlsZXN5c3RlbSIgKi8KKyNp
bmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgor
I2luY2x1ZGUgPHJhbmRvbT4gLyogZm9yIHVuaXF1ZV9wYXRoICovCisjaW5jbHVkZSA8c3RyaW5n
X3ZpZXc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1
ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKworLyogI2luY2x1ZGUgImZpbGVzeXN0
ZW1fY29tbW9uLmgiICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3Rh
dC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1
ZGUgPGZjbnRsLmg+IC8qIHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKworI2lmIGRlZmluZWQoX19s
aW51eF9fKQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpZiBMSU5VWF9WRVJTSU9OX0NP
REUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMzMpCisjaW5jbHVkZSA8c3lzL3NlbmRmaWxlLmg+
CisjZGVmaW5lIF9MSUJDUFBfVVNFX1NFTkRGSUxFCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBfX2hhc19pbmNsdWRlKDxjb3B5ZmlsZS5oPikKKyNpbmNsdWRlIDxjb3B5Zmls
ZS5oPgorI2RlZmluZSBfTElCQ1BQX1VTRV9DT1BZRklMRQorI2VuZGlmCisKKyNpZiAhZGVmaW5l
ZChfX0FQUExFX18pCisjZGVmaW5lIF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpIHx8ICFkZWZpbmVkKF9MSUJDUFBfVVNFX0NM
T0NLX0dFVFRJTUUpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4gLy8gZm9yIGdldHRpbWVvZmRheSBh
bmQgdGltZXZhbAorI2VuZGlmICAgICAgICAgICAgICAgIC8vICFkZWZpbmVkKENMT0NLX1JFQUxU
SU1FKQorCisjaWYgZGVmaW5lZChfTElCQ1BQX0NPTVBJTEVSX0dDQykKKyNpZiBfR05VQ19WRVIg
PCA1MDAKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWZpZWxkLWlu
aXRpYWxpemVycyIKKyNlbmRpZgorI2VuZGlmCisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJ
TEVTWVNURU0KKworbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBwYXJzZXIgeworCit1c2luZyBzdHJp
bmdfdmlld190ID0gcGF0aDo6X19zdHJpbmdfdmlldzsKK3VzaW5nIHN0cmluZ192aWV3X3BhaXIg
PSBwYWlyPHN0cmluZ192aWV3X3QsIHN0cmluZ192aWV3X3Q+OwordXNpbmcgUG9zUHRyID0gcGF0
aDo6dmFsdWVfdHlwZSBjb25zdCo7CisKK3N0cnVjdCBQYXRoUGFyc2VyIHsKKyAgZW51bSBQYXJz
ZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgeworICAgIC8vIFplcm8gaXMgYSBzcGVjaWFsIHNlbnRp
bmVsIHZhbHVlIHVzZWQgYnkgZGVmYXVsdCBjb25zdHJ1Y3RlZCBpdGVyYXRvcnMuCisgICAgUFNf
QmVmb3JlQmVnaW4gPSBwYXRoOjppdGVyYXRvcjo6X0JlZm9yZUJlZ2luLAorICAgIFBTX0luUm9v
dE5hbWUgPSBwYXRoOjppdGVyYXRvcjo6X0luUm9vdE5hbWUsCisgICAgUFNfSW5Sb290RGlyID0g
cGF0aDo6aXRlcmF0b3I6Ol9JblJvb3REaXIsCisgICAgUFNfSW5GaWxlbmFtZXMgPSBwYXRoOjpp
dGVyYXRvcjo6X0luRmlsZW5hbWVzLAorICAgIFBTX0luVHJhaWxpbmdTZXAgPSBwYXRoOjppdGVy
YXRvcjo6X0luVHJhaWxpbmdTZXAsCisgICAgUFNfQXRFbmQgPSBwYXRoOjppdGVyYXRvcjo6X0F0
RW5kCisgIH07CisKKyAgY29uc3Qgc3RyaW5nX3ZpZXdfdCBQYXRoOworICBzdHJpbmdfdmlld190
IFJhd0VudHJ5OworICBQYXJzZXJTdGF0ZSBTdGF0ZTsKKworcHJpdmF0ZToKKyAgUGF0aFBhcnNl
cihzdHJpbmdfdmlld190IFAsIFBhcnNlclN0YXRlIFN0YXRlKSBub2V4Y2VwdCA6IFBhdGgoUCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdGF0ZShTdGF0ZSkge30KKworcHVibGljOgorICBQYXRoUGFyc2VyKHN0cmluZ192aWV3
X3QgUCwgc3RyaW5nX3ZpZXdfdCBFLCB1bnNpZ25lZCBjaGFyIFMpCisgICAgICA6IFBhdGgoUCks
IFJhd0VudHJ5KEUpLCBTdGF0ZShzdGF0aWNfY2FzdDxQYXJzZXJTdGF0ZT4oUykpIHsKKyAgICAv
LyBTIGNhbm5vdCBiZSAnMCcgb3IgUFNfQmVmb3JlQmVnaW4uCisgIH0KKworICBzdGF0aWMgUGF0
aFBhcnNlciBDcmVhdGVCZWdpbihzdHJpbmdfdmlld190IFApIG5vZXhjZXB0IHsKKyAgICBQYXRo
UGFyc2VyIFBQKFAsIFBTX0JlZm9yZUJlZ2luKTsKKyAgICBQUC5pbmNyZW1lbnQoKTsKKyAgICBy
ZXR1cm4gUFA7CisgIH0KKworICBzdGF0aWMgUGF0aFBhcnNlciBDcmVhdGVFbmQoc3RyaW5nX3Zp
ZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0aFBhcnNlciBQUChQLCBQU19BdEVuZCk7CisgICAg
cmV0dXJuIFBQOworICB9CisKKyAgUG9zUHRyIHBlZWsoKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
YXV0byBUa0VuZCA9IGdldE5leHRUb2tlblN0YXJ0UG9zKCk7CisgICAgYXV0byBFbmQgPSBnZXRB
ZnRlckJhY2soKTsKKyAgICByZXR1cm4gVGtFbmQgPT0gRW5kID8gbnVsbHB0ciA6IFRrRW5kOwor
ICB9CisKKyAgdm9pZCBpbmNyZW1lbnQoKSBub2V4Y2VwdCB7CisgICAgY29uc3QgUG9zUHRyIEVu
ZCA9IGdldEFmdGVyQmFjaygpOworICAgIGNvbnN0IFBvc1B0ciBTdGFydCA9IGdldE5leHRUb2tl
blN0YXJ0UG9zKCk7CisgICAgaWYgKFN0YXJ0ID09IEVuZCkKKyAgICAgIHJldHVybiBtYWtlU3Rh
dGUoUFNfQXRFbmQpOworCisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3Jl
QmVnaW46IHsKKyAgICAgIFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVTZXBhcmF0b3IoU3RhcnQsIEVu
ZCk7CisgICAgICBpZiAoVGtFbmQpCisgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290
RGlyLCBTdGFydCwgVGtFbmQpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gbWFrZVN0YXRl
KFBTX0luRmlsZW5hbWVzLCBTdGFydCwgY29uc3VtZU5hbWUoU3RhcnQsIEVuZCkpOworICAgIH0K
KyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxl
bmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShTdGFydCwgRW5kKSk7CisKKyAgICBjYXNlIFBTX0lu
RmlsZW5hbWVzOiB7CisgICAgICBQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihTdGFy
dCwgRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgIT0gRW5kKSB7CisgICAgICAgIFBvc1B0ciBUa0Vu
ZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgRW5kKTsKKyAgICAgICAgaWYgKFRrRW5kKQorICAgICAg
ICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFNlcEVuZCwgVGtFbmQpOworICAg
ICAgfQorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblRyYWlsaW5nU2VwLCBTdGFydCwgU2Vw
RW5kKTsKKyAgICB9CisKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICByZXR1cm4g
bWFrZVN0YXRlKFBTX0F0RW5kKTsKKworICAgIGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNl
IFBTX0F0RW5kOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0KKyAgfQorCisg
IHZvaWQgZGVjcmVtZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0ciBSRW5kID0gZ2V0
QmVmb3JlRnJvbnQoKTsKKyAgICBjb25zdCBQb3NQdHIgUlN0YXJ0ID0gZ2V0Q3VycmVudFRva2Vu
U3RhcnRQb3MoKSAtIDE7CisgICAgaWYgKFJTdGFydCA9PSBSRW5kKSAvLyB3ZSdyZSBkZWNyZW1l
bnRpbmcgdGhlIGJlZ2luCisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0JlZm9yZUJlZ2luKTsK
KworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0F0RW5kOiB7CisgICAgICAvLyBU
cnkgdG8gY29uc3VtZSBhIHRyYWlsaW5nIHNlcGFyYXRvciBvciByb290IGRpcmVjdG9yeSBmaXJz
dC4KKyAgICAgIGlmIChQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihSU3RhcnQsIFJF
bmQpKSB7CisgICAgICAgIGlmIChTZXBFbmQgPT0gUkVuZCkKKyAgICAgICAgICByZXR1cm4gbWFr
ZVN0YXRlKFBTX0luUm9vdERpciwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOworICAgICAgICBy
ZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxpbmdTZXAsIFNlcEVuZCArIDEsIFJTdGFydCArIDEp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgUG9zUHRyIFRrU3RhcnQgPSBjb25zdW1lTmFtZShS
U3RhcnQsIFJFbmQpOworICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBU
a1N0YXJ0ICsgMSwgUlN0YXJ0ICsgMSk7CisgICAgICB9CisgICAgfQorICAgIGNhc2UgUFNfSW5U
cmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIGNvbnN1
bWVOYW1lKFJTdGFydCwgUkVuZCkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICBSU3RhcnQg
KyAxKTsKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOiB7CisgICAgICBQb3NQdHIgU2VwRW5kID0g
Y29uc3VtZVNlcGFyYXRvcihSU3RhcnQsIFJFbmQpOworICAgICAgaWYgKFNlcEVuZCA9PSBSRW5k
KQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgUGF0aC5kYXRhKCksIFJT
dGFydCArIDEpOworICAgICAgUG9zUHRyIFRrRW5kID0gY29uc3VtZU5hbWUoU2VwRW5kLCBSRW5k
KTsKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFRrRW5kICsgMSwgU2Vw
RW5kICsgMSk7CisgICAgfQorICAgIGNhc2UgUFNfSW5Sb290RGlyOgorICAgICAgLy8gcmV0dXJu
IG1ha2VTdGF0ZShQU19JblJvb3ROYW1lLCBQYXRoLmRhdGEoKSwgUlN0YXJ0ICsgMSk7CisgICAg
Y2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAgICBfTElC
Q1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSB2
aWV3IHdpdGggdGhlICJwcmVmZXJyZWQgcmVwcmVzZW50YXRpb24iIG9mIHRoZSBjdXJyZW50Cisg
IC8vLyAgIGVsZW1lbnQuIEZvciBleGFtcGxlIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHJlcHJl
c2VudGVkIGFzIGEgJy4nCisgIHN0cmluZ192aWV3X3Qgb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNl
cHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAg
IGNhc2UgUFNfQXRFbmQ6CisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBQU19JblJvb3REaXI6
CisgICAgICByZXR1cm4gIi8iOworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJl
dHVybiAiIjsKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19JbkZpbGVuYW1l
czoKKyAgICAgIHJldHVybiBSYXdFbnRyeTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJM
RSgpOworICB9CisKKyAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gU3RhdGUgIT0gUFNfQmVmb3JlQmVnaW4gJiYgU3RhdGUgIT0gUFNfQXRFbmQ7
CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRvcisrKCkgbm9leGNlcHQgeworICAgIGluY3Jl
bWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIFBhdGhQYXJzZXImIG9wZXJhdG9y
LS0oKSBub2V4Y2VwdCB7CisgICAgZGVjcmVtZW50KCk7CisgICAgcmV0dXJuICp0aGlzOworICB9
CisKKyAgYm9vbCBpblJvb3RQYXRoKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBTdGF0
ZSA9PSBQU19JblJvb3REaXIgfHwgU3RhdGUgPT0gUFNfSW5Sb290TmFtZTsKKyAgfQorCitwcml2
YXRlOgorICB2b2lkIG1ha2VTdGF0ZShQYXJzZXJTdGF0ZSBOZXdTdGF0ZSwgUG9zUHRyIFN0YXJ0
LCBQb3NQdHIgRW5kKSBub2V4Y2VwdCB7CisgICAgU3RhdGUgPSBOZXdTdGF0ZTsKKyAgICBSYXdF
bnRyeSA9IHN0cmluZ192aWV3X3QoU3RhcnQsIEVuZCAtIFN0YXJ0KTsKKyAgfQorICB2b2lkIG1h
a2VTdGF0ZShQYXJzZXJTdGF0ZSBOZXdTdGF0ZSkgbm9leGNlcHQgeworICAgIFN0YXRlID0gTmV3
U3RhdGU7CisgICAgUmF3RW50cnkgPSB7fTsKKyAgfQorCisgIFBvc1B0ciBnZXRBZnRlckJhY2so
KSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBQYXRoLmRhdGEoKSArIFBhdGguc2l6ZSgpOyB9CisK
KyAgUG9zUHRyIGdldEJlZm9yZUZyb250KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gUGF0aC5k
YXRhKCkgLSAxOyB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGN1cnJlbnRseQorICAvLy8gICBsZXhlZCBlbGVtZW50Lgor
ICBQb3NQdHIgZ2V0TmV4dFRva2VuU3RhcnRQb3MoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgc3dp
dGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAgICByZXR1cm4gUGF0
aC5kYXRhKCk7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfSW5Sb290RGly
OgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgICByZXR1cm4gJlJhd0VudHJ5LmJhY2so
KSArIDE7CisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgIGNhc2UgUFNfQXRFbmQ6Cisg
ICAgICByZXR1cm4gZ2V0QWZ0ZXJCYWNrKCk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFC
TEUoKTsKKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIGluIHRoZSBjdXJyZW50bHkgbGV4ZWQKKyAgLy8vICAgZWxlbWVudC4KKyAgUG9z
UHRyIGdldEN1cnJlbnRUb2tlblN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHN3aXRj
aCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgIGNhc2UgUFNfSW5Sb290
TmFtZToKKyAgICAgIHJldHVybiAmUGF0aC5mcm9udCgpOworICAgIGNhc2UgUFNfSW5Sb290RGly
OgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgor
ICAgICAgcmV0dXJuICZSYXdFbnRyeS5mcm9udCgpOworICAgIGNhc2UgUFNfQXRFbmQ6CisgICAg
ICByZXR1cm4gJlBhdGguYmFjaygpICsgMTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJM
RSgpOworICB9CisKKyAgUG9zUHRyIGNvbnN1bWVTZXBhcmF0b3IoUG9zUHRyIFAsIFBvc1B0ciBF
bmQpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBpZiAoUCA9PSBFbmQgfHwgKlAgIT0gJy8nKQorICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgaW50IEluYyA9IFAgPCBFbmQgPyAxIDogLTE7
CisgICAgUCArPSBJbmM7CisgICAgd2hpbGUgKFAgIT0gRW5kICYmICpQID09ICcvJykKKyAgICAg
IFAgKz0gSW5jOworICAgIHJldHVybiBQOworICB9CisKKyAgUG9zUHRyIGNvbnN1bWVOYW1lKFBv
c1B0ciBQLCBQb3NQdHIgRW5kKSBjb25zdCBub2V4Y2VwdCB7CisgICAgaWYgKFAgPT0gRW5kIHx8
ICpQID09ICcvJykKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IGludCBJbmMgPSBQ
IDwgRW5kID8gMSA6IC0xOworICAgIFAgKz0gSW5jOworICAgIHdoaWxlIChQICE9IEVuZCAmJiAq
UCAhPSAnLycpCisgICAgICBQICs9IEluYzsKKyAgICByZXR1cm4gUDsKKyAgfQorfTsKKworc3Rh
dGljIHN0cmluZ192aWV3X3BhaXIgc2VwYXJhdGVfZmlsZW5hbWUoc3RyaW5nX3ZpZXdfdCBjb25z
dCYgcykgeworICBpZiAocyA9PSAiLiIgfHwgcyA9PSAiLi4iIHx8IHMuZW1wdHkoKSkKKyAgICBy
ZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntzLCAiIn07CisgIGF1dG8gcG9zID0gcy5maW5kX2xhc3Rf
b2YoJy4nKTsKKyAgaWYgKHBvcyA9PSBzdHJpbmdfdmlld190OjpucG9zIHx8IHBvcyA9PSAwKQor
ICAgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3MsIHN0cmluZ192aWV3X3R7fX07CisgIHJldHVy
biBzdHJpbmdfdmlld19wYWlye3Muc3Vic3RyKDAsIHBvcyksIHMuc3Vic3RyKHBvcyl9OworfQor
CitzdGF0aWMgc3RyaW5nX3ZpZXdfdCBjcmVhdGVWaWV3KFBvc1B0ciBTLCBQb3NQdHIgRSkgbm9l
eGNlcHQgeworICByZXR1cm4ge1MsIHN0YXRpY19jYXN0PHNpemVfdD4oRSAtIFMpICsgMX07Cit9
CisKK30gLy8gbmFtZXNwYWNlIHBhcnNlcgorfSAvLyBuYW1lc3BhY2UKKworLy8gICAgICAgICAg
ICAgICAgICAgICAgIFBPU0lYIEhFTFBFUlMKKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3Bh
Y2UgeworCit1c2luZyB2YWx1ZV90eXBlID0gcGF0aDo6dmFsdWVfdHlwZTsKK3VzaW5nIHN0cmlu
Z190eXBlID0gcGF0aDo6c3RyaW5nX3R5cGU7CisKK3N0cnVjdCBGaWxlRGVzY3JpcHRvciB7Cisg
IGNvbnN0IHBhdGgmIG5hbWU7CisgIGludCBmZCA9IC0xOworICBTdGF0VCBtX3N0YXQ7CisgIGZp
bGVfc3RhdHVzIG1fc3RhdHVzOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgorICBzdGF0
aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlKGNvbnN0IHBhdGgqIHAsIGVycm9yX2NvZGUmIGVjLCBB
cmdzLi4uIGFyZ3MpIHsKKyAgICBlYy5jbGVhcigpOworICAgIGludCBmZDsKKyAgICBpZiAoKGZk
ID0gOjpvcGVuKHAtPmNfc3RyKCksIGFyZ3MuLi4pKSA9PSAtMSkgeworICAgICAgZWMgPSBjYXB0
dXJlX2Vycm5vKCk7CisgICAgICByZXR1cm4gRmlsZURlc2NyaXB0b3J7cH07CisgICAgfQorICAg
IHJldHVybiBGaWxlRGVzY3JpcHRvcihwLCBmZCk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mu
Li4gQXJncz4KKyAgc3RhdGljIEZpbGVEZXNjcmlwdG9yIGNyZWF0ZV93aXRoX3N0YXR1cyhjb25z
dCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmdzLi4uIGFyZ3MpIHsKKyAgICBGaWxlRGVzY3JpcHRvciBmZCA9IGNy
ZWF0ZShwLCBlYywgYXJncy4uLik7CisgICAgaWYgKCFlYykKKyAgICAgIGZkLnJlZnJlc2hfc3Rh
dHVzKGVjKTsKKworICAgIHJldHVybiBmZDsKKyAgfQorCisgIGZpbGVfc3RhdHVzIGdldF9zdGF0
dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICBTdGF0VCBjb25zdCYgZ2V0X3N0YXQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXQ7IH0KKworICBib29sIHN0YXR1c19rbm93bigpIGNvbnN0
IHsgcmV0dXJuIF9WU1REX0ZTOjpzdGF0dXNfa25vd24obV9zdGF0dXMpOyB9CisKKyAgZmlsZV9z
dGF0dXMgcmVmcmVzaF9zdGF0dXMoZXJyb3JfY29kZSYgZWMpOworCisgIHZvaWQgY2xvc2UoKSBu
b2V4Y2VwdCB7CisgICAgaWYgKGZkICE9IC0xKQorICAgICAgOjpjbG9zZShmZCk7CisgICAgZmQg
PSAtMTsKKyAgfQorCisgIEZpbGVEZXNjcmlwdG9yKEZpbGVEZXNjcmlwdG9yJiYgb3RoZXIpCisg
ICAgICA6IG5hbWUob3RoZXIubmFtZSksIGZkKG90aGVyLmZkKSwgbV9zdGF0KG90aGVyLm1fc3Rh
dCksCisgICAgICAgIG1fc3RhdHVzKG90aGVyLm1fc3RhdHVzKSB7CisgICAgb3RoZXIuZmQgPSAt
MTsKKyAgICBvdGhlci5tX3N0YXR1cyA9IGZpbGVfc3RhdHVze307CisgIH0KKworICB+RmlsZURl
c2NyaXB0b3IoKSB7IGNsb3NlKCk7IH0KKworICBGaWxlRGVzY3JpcHRvcihGaWxlRGVzY3JpcHRv
ciBjb25zdCYpID0gZGVsZXRlOworICBGaWxlRGVzY3JpcHRvciYgb3BlcmF0b3I9KEZpbGVEZXNj
cmlwdG9yIGNvbnN0JikgPSBkZWxldGU7CisKK3ByaXZhdGU6CisgIGV4cGxpY2l0IEZpbGVEZXNj
cmlwdG9yKGNvbnN0IHBhdGgqIHAsIGludCBmZCA9IC0xKSA6IG5hbWUoKnApLCBmZChmZCkge30K
K307CisKK3Blcm1zIHBvc2l4X2dldF9wZXJtcyhjb25zdCBTdGF0VCYgc3QpIG5vZXhjZXB0IHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdC5zdF9tb2RlKSAmIHBlcm1zOjptYXNrOwor
fQorCis6Om1vZGVfdCBwb3NpeF9jb252ZXJ0X3Blcm1zKHBlcm1zIHBybXMpIHsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PCA6Om1vZGVfdD4ocHJtcyAmIHBlcm1zOjptYXNrKTsKK30KKworZmlsZV9z
dGF0dXMgY3JlYXRlX2ZpbGVfc3RhdHVzKGVycm9yX2NvZGUmIG1fZWMsIHBhdGggY29uc3QmIHAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RhdFQmIHBhdGhfc3RhdCwg
ZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgICplYyA9IG1fZWM7CisgIGlmIChtX2Vj
ICYmIChtX2VjLnZhbHVlKCkgPT0gRU5PRU5UIHx8IG1fZWMudmFsdWUoKSA9PSBFTk9URElSKSkg
eworICAgIHJldHVybiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vdF9mb3VuZCk7CisgIH0gZWxz
ZSBpZiAobV9lYykgeworICAgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInBvc2l4X3N0YXQiLCBl
YywgJnApOworICAgIGVyci5yZXBvcnQobV9lYywgImZhaWxlZCB0byBkZXRlcm1pbmUgYXR0cmli
dXRlcyBmb3IgdGhlIHNwZWNpZmllZCBwYXRoIik7CisgICAgcmV0dXJuIGZpbGVfc3RhdHVzKGZp
bGVfdHlwZTo6bm9uZSk7CisgIH0KKyAgLy8gZWxzZQorCisgIGZpbGVfc3RhdHVzIGZzX3RtcDsK
KyAgYXV0byBjb25zdCBtb2RlID0gcGF0aF9zdGF0LnN0X21vZGU7CisgIGlmIChTX0lTTE5LKG1v
ZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6c3ltbGluayk7CisgIGVsc2UgaWYgKFNf
SVNSRUcobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpyZWd1bGFyKTsKKyAgZWxz
ZSBpZiAoU19JU0RJUihtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OmRpcmVjdG9y
eSk7CisgIGVsc2UgaWYgKFNfSVNCTEsobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBl
OjpibG9jayk7CisgIGVsc2UgaWYgKFNfSVNDSFIobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmls
ZV90eXBlOjpjaGFyYWN0ZXIpOworICBlbHNlIGlmIChTX0lTRklGTyhtb2RlKSkKKyAgICBmc190
bXAudHlwZShmaWxlX3R5cGU6OmZpZm8pOworICBlbHNlIGlmIChTX0lTU09DSyhtb2RlKSkKKyAg
ICBmc190bXAudHlwZShmaWxlX3R5cGU6OnNvY2tldCk7CisgIGVsc2UKKyAgICBmc190bXAudHlw
ZShmaWxlX3R5cGU6OnVua25vd24pOworCisgIGZzX3RtcC5wZXJtaXNzaW9ucyhkZXRhaWw6OnBv
c2l4X2dldF9wZXJtcyhwYXRoX3N0YXQpKTsKKyAgcmV0dXJuIGZzX3RtcDsKK30KKworZmlsZV9z
dGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBTdGF0VCYgcGF0aF9zdGF0LCBlcnJvcl9j
b2RlKiBlYykgeworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6OnN0YXQocC5jX3N0cigpLCAm
cGF0aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7Cisg
IHJldHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0aF9zdGF0LCBlYyk7Cit9CisK
K2ZpbGVfc3RhdHVzIHBvc2l4X3N0YXQocGF0aCBjb25zdCYgcCwgZXJyb3JfY29kZSogZWMpIHsK
KyAgU3RhdFQgcGF0aF9zdGF0OworICByZXR1cm4gcG9zaXhfc3RhdChwLCBwYXRoX3N0YXQsIGVj
KTsKK30KKworZmlsZV9zdGF0dXMgcG9zaXhfbHN0YXQocGF0aCBjb25zdCYgcCwgU3RhdFQmIHBh
dGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoOjps
c3RhdChwLmNfc3RyKCksICZwYXRoX3N0YXQpID09IC0xKQorICAgIG1fZWMgPSBkZXRhaWw6OmNh
cHR1cmVfZXJybm8oKTsKKyAgcmV0dXJuIGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBwLCBwYXRo
X3N0YXQsIGVjKTsKK30KKworZmlsZV9zdGF0dXMgcG9zaXhfbHN0YXQocGF0aCBjb25zdCYgcCwg
ZXJyb3JfY29kZSogZWMpIHsKKyAgU3RhdFQgcGF0aF9zdGF0OworICByZXR1cm4gcG9zaXhfbHN0
YXQocCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2Jvb2wgcG9zaXhfZnRydW5jYXRlKGNvbnN0IEZp
bGVEZXNjcmlwdG9yJiBmZCwgc2l6ZV90IHRvX3NpemUsIGVycm9yX2NvZGUmIGVjKSB7CisgIGlm
ICg6OmZ0cnVuY2F0ZShmZC5mZCwgdG9fc2l6ZSkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVf
ZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBlYy5jbGVhcigpOworICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgcG9zaXhfZmNobW9kKGNvbnN0IEZpbGVEZXNjcmlwdG9yJiBmZCwg
Y29uc3QgU3RhdFQmIHN0LCBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjpmY2htb2QoZmQuZmQs
IHN0LnN0X21vZGUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IHN0YXRfZXF1aXZhbGVudChjb25zdCBTdGF0VCYgc3QxLCBjb25zdCBTdGF0VCYgc3QyKSB7Cisg
IHJldHVybiAoc3QxLnN0X2RldiA9PSBzdDIuc3RfZGV2ICYmIHN0MS5zdF9pbm8gPT0gc3QyLnN0
X2lubyk7Cit9CisKK2ZpbGVfc3RhdHVzIEZpbGVEZXNjcmlwdG9yOjpyZWZyZXNoX3N0YXR1cyhl
cnJvcl9jb2RlJiBlYykgeworICAvLyBGRCBtdXN0IGJlIG9wZW4gYW5kIGdvb2QuCisgIG1fc3Rh
dHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgbV9zdGF0ID0ge307CisgIGVycm9yX2NvZGUgbV9lYzsK
KyAgaWYgKDo6ZnN0YXQoZmQsICZtX3N0YXQpID09IC0xKQorICAgIG1fZWMgPSBjYXB0dXJlX2Vy
cm5vKCk7CisgIG1fc3RhdHVzID0gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIG5hbWUsIG1fc3Rh
dCwgJmVjKTsKKyAgcmV0dXJuIG1fc3RhdHVzOworfQorfSAvLyBuYW1lc3BhY2UKK30gLy8gZW5k
IG5hbWVzcGFjZSBkZXRhaWwKKwordXNpbmcgZGV0YWlsOjpjYXB0dXJlX2Vycm5vOwordXNpbmcg
ZGV0YWlsOjpFcnJvckhhbmRsZXI7Cit1c2luZyBkZXRhaWw6OlN0YXRUOwordXNpbmcgZGV0YWls
OjpUaW1lU3BlYzsKK3VzaW5nIHBhcnNlcjo6Y3JlYXRlVmlldzsKK3VzaW5nIHBhcnNlcjo6UGF0
aFBhcnNlcjsKK3VzaW5nIHBhcnNlcjo6c3RyaW5nX3ZpZXdfdDsKKworY29uc3QgYm9vbCBfRmls
ZXN5c3RlbUNsb2NrOjppc19zdGVhZHk7CisKK19GaWxlc3lzdGVtQ2xvY2s6OnRpbWVfcG9pbnQg
X0ZpbGVzeXN0ZW1DbG9jazo6bm93KCkgbm9leGNlcHQgeworICB0eXBlZGVmIGNocm9ubzo6ZHVy
YXRpb248cmVwPiBfX3NlY3M7CisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1F
KSAmJiBkZWZpbmVkKENMT0NLX1JFQUxUSU1FKQorICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248
cmVwLCBuYW5vPiBfX25zZWNzOworICBzdHJ1Y3QgdGltZXNwZWMgdHA7CisgIGlmICgwICE9IGNs
b2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCkpCisgICAgX190aHJvd19zeXN0ZW1fZXJy
b3IoZXJybm8sICJjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FKSBmYWlsZWQiKTsKKyAgcmV0
dXJuIHRpbWVfcG9pbnQoX19zZWNzKHRwLnR2X3NlYykgKworICAgICAgICAgICAgICAgICAgICBj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8ZHVyYXRpb24+KF9fbnNlY3ModHAudHZfbnNlYykpKTsKKyNl
bHNlCisgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXAsIG1pY3JvPiBfX21pY3Jvc2VjczsK
KyAgdGltZXZhbCB0djsKKyAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgIHJldHVybiB0aW1lX3Bv
aW50KF9fc2Vjcyh0di50dl9zZWMpICsgX19taWNyb3NlY3ModHYudHZfdXNlYykpOworI2VuZGlm
IC8vIF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUgJiYgQ0xPQ0tfUkVBTFRJTUUKK30KKworZmls
ZXN5c3RlbV9lcnJvcjo6fmZpbGVzeXN0ZW1fZXJyb3IoKSB7fQorCit2b2lkIGZpbGVzeXN0ZW1f
ZXJyb3I6Ol9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKSB7CisgIGNvbnN0IGNoYXIqIGRl
cml2ZWRfd2hhdCA9IHN5c3RlbV9lcnJvcjo6d2hhdCgpOworICBfX3N0b3JhZ2VfLT5fX3doYXRf
ID0gWyZdKCkgLT4gc3RyaW5nIHsKKyAgICBjb25zdCBjaGFyKiBwMSA9IHBhdGgxKCkubmF0aXZl
KCkuZW1wdHkoKSA/ICJcIlwiIiA6IHBhdGgxKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFyKiBw
MiA9IHBhdGgyKCkubmF0aXZlKCkuZW1wdHkoKSA/ICJcIlwiIiA6IHBhdGgyKCkuY19zdHIoKTsK
KyAgICBzd2l0Y2ggKF9fbnVtX3BhdGhzKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBk
ZXRhaWw6OmZvcm1hdF9zdHJpbmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIiwgZGVyaXZlZF93aGF0
KTsKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gZGV0YWlsOjpmb3JtYXRfc3RyaW5nKCJmaWxl
c3lzdGVtIGVycm9yOiAlcyBbJXNdIiwgZGVyaXZlZF93aGF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwMSk7CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJuIGRldGFpbDo6
Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMgWyVzXSBbJXNdIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZF93aGF0LCBwMSwgcDIpOworICAgIH0K
KyAgfSgpOworfQorCitzdGF0aWMgcGF0aCBfX2RvX2Fic29sdXRlKGNvbnN0IHBhdGgmIHAsIHBh
dGgqIGN3ZCwgZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOwor
ICBpZiAocC5pc19hYnNvbHV0ZSgpKQorICAgIHJldHVybiBwOworICAqY3dkID0gX19jdXJyZW50
X3BhdGgoZWMpOworICBpZiAoZWMgJiYgKmVjKQorICAgIHJldHVybiB7fTsKKyAgcmV0dXJuICgq
Y3dkKSAvIHA7Cit9CisKK3BhdGggX19hYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgeworICBwYXRoIGN3ZDsKKyAgcmV0dXJuIF9fZG9fYWJzb2x1dGUocCwgJmN3ZCwgZWMp
OworfQorCitwYXRoIF9fY2Fub25pY2FsKHBhdGggY29uc3QmIG9yaWdfcCwgZXJyb3JfY29kZSog
ZWMpIHsKKyAgcGF0aCBjd2Q7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoImNhbm9uaWNhbCIs
IGVjLCAmb3JpZ19wLCAmY3dkKTsKKworICBwYXRoIHAgPSBfX2RvX2Fic29sdXRlKG9yaWdfcCwg
JmN3ZCwgZWMpOworICBjaGFyIGJ1ZmZbUEFUSF9NQVggKyAxXTsKKyAgY2hhciogcmV0OworICBp
ZiAoKHJldCA9IDo6cmVhbHBhdGgocC5jX3N0cigpLCBidWZmKSkgPT0gbnVsbHB0cikKKyAgICBy
ZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4ge3JldH07Cit9CisK
K3ZvaWQgX19jb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlv
bnMgb3B0aW9ucywKKyAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjx2b2lkPiBlcnIoImNvcHkiLCBlYywgJmZyb20sICZ0byk7CisKKyAgY29uc3QgYm9vbCBzeW1f
c3RhdHVzID0gYm9vbCgKKyAgICAgIG9wdGlvbnMgJiAoY29weV9vcHRpb25zOjpjcmVhdGVfc3lt
bGlua3MgfCBjb3B5X29wdGlvbnM6OnNraXBfc3ltbGlua3MpKTsKKworICBjb25zdCBib29sIHN5
bV9zdGF0dXMyID0gYm9vbChvcHRpb25zICYgY29weV9vcHRpb25zOjpjb3B5X3N5bWxpbmtzKTsK
KworICBlcnJvcl9jb2RlIG1fZWMxOworICBTdGF0VCBmX3N0ID0ge307CisgIGNvbnN0IGZpbGVf
c3RhdHVzIGYgPSBzeW1fc3RhdHVzIHx8IHN5bV9zdGF0dXMyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBkZXRhaWw6OnBvc2l4X2xzdGF0KGZyb20sIGZfc3QsICZtX2VjMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfc3RhdChmcm9tLCBmX3N0LCAm
bV9lYzEpOworICBpZiAobV9lYzEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYzEpOworCisg
IFN0YXRUIHRfc3QgPSB7fTsKKyAgY29uc3QgZmlsZV9zdGF0dXMgdCA9IHN5bV9zdGF0dXMgPyBk
ZXRhaWw6OnBvc2l4X2xzdGF0KHRvLCB0X3N0LCAmbV9lYzEpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9zdGF0KHRvLCB0X3N0LCAmbV9lYzEpOwor
CisgIGlmIChub3Qgc3RhdHVzX2tub3duKHQpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMx
KTsKKworICBpZiAoIWV4aXN0cyhmKSB8fCBpc19vdGhlcihmKSB8fCBpc19vdGhlcih0KSB8fAor
ICAgICAgKGlzX2RpcmVjdG9yeShmKSAmJiBpc19yZWd1bGFyX2ZpbGUodCkpIHx8CisgICAgICBk
ZXRhaWw6OnN0YXRfZXF1aXZhbGVudChmX3N0LCB0X3N0KSkgeworICAgIHJldHVybiBlcnIucmVw
b3J0KGVycmM6OmZ1bmN0aW9uX25vdF9zdXBwb3J0ZWQpOworICB9CisKKyAgaWYgKGVjKQorICAg
IGVjLT5jbGVhcigpOworCisgIGlmIChpc19zeW1saW5rKGYpKSB7CisgICAgaWYgKGJvb2woY29w
eV9vcHRpb25zOjpza2lwX3N5bWxpbmtzICYgb3B0aW9ucykpIHsKKyAgICAgIC8vIGRvIG5vdGhp
bmcKKyAgICB9IGVsc2UgaWYgKG5vdCBleGlzdHModCkpIHsKKyAgICAgIF9fY29weV9zeW1saW5r
KGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KGVy
cmM6OmZpbGVfZXhpc3RzKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9IGVsc2UgaWYgKGlzX3Jl
Z3VsYXJfZmlsZShmKSkgeworICAgIGlmIChib29sKGNvcHlfb3B0aW9uczo6ZGlyZWN0b3JpZXNf
b25seSAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3RoaW5nCisgICAgfSBlbHNlIGlmIChi
b29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzICYgb3B0aW9ucykpIHsKKyAgICAgIF9f
Y3JlYXRlX3N5bWxpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgaWYgKGJvb2woY29weV9v
cHRpb25zOjpjcmVhdGVfaGFyZF9saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICBfX2NyZWF0ZV9o
YXJkX2xpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgaWYgKGlzX2RpcmVjdG9yeSh0KSkg
eworICAgICAgX19jb3B5X2ZpbGUoZnJvbSwgdG8gLyBmcm9tLmZpbGVuYW1lKCksIG9wdGlvbnMs
IGVjKTsKKyAgICB9IGVsc2UgeworICAgICAgX19jb3B5X2ZpbGUoZnJvbSwgdG8sIG9wdGlvbnMs
IGVjKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9IGVsc2UgaWYgKGlzX2RpcmVjdG9yeShmKSAm
JiBib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzICYgb3B0aW9ucykpIHsKKyAgICBy
ZXR1cm4gZXJyLnJlcG9ydChlcnJjOjppc19hX2RpcmVjdG9yeSk7CisgIH0gZWxzZSBpZiAoaXNf
ZGlyZWN0b3J5KGYpICYmIChib29sKGNvcHlfb3B0aW9uczo6cmVjdXJzaXZlICYgb3B0aW9ucykg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9uczo6bm9uZSA9
PSBvcHRpb25zKSkgeworCisgICAgaWYgKCFleGlzdHModCkpIHsKKyAgICAgIC8vIGNyZWF0ZSBk
aXJlY3RvcnkgdG8gd2l0aCBhdHRyaWJ1dGVzIGZyb20gJ2Zyb20nLgorICAgICAgX19jcmVhdGVf
ZGlyZWN0b3J5KHRvLCBmcm9tLCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICAg
IHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgICAgZGlyZWN0b3J5X2l0ZXJhdG9yIGl0ID0KKyAg
ICAgICAgZWMgPyBkaXJlY3RvcnlfaXRlcmF0b3IoZnJvbSwgKmVjKSA6IGRpcmVjdG9yeV9pdGVy
YXRvcihmcm9tKTsKKyAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICByZXR1cm47CisgICAgfQor
ICAgIGVycm9yX2NvZGUgbV9lYzI7CisgICAgZm9yICg7IGl0ICE9IGRpcmVjdG9yeV9pdGVyYXRv
cigpOyBpdC5pbmNyZW1lbnQobV9lYzIpKSB7CisgICAgICBpZiAobV9lYzIpIHsKKyAgICAgICAg
cmV0dXJuIGVyci5yZXBvcnQobV9lYzIpOworICAgICAgfQorICAgICAgX19jb3B5KGl0LT5wYXRo
KCksIHRvIC8gaXQtPnBhdGgoKS5maWxlbmFtZSgpLAorICAgICAgICAgICAgIG9wdGlvbnMgfCBj
b3B5X29wdGlvbnM6Ol9faW5fcmVjdXJzaXZlX2NvcHksIGVjKTsKKyAgICAgIGlmIChlYyAmJiAq
ZWMpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorfQorCituYW1lc3Bh
Y2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKKyNpZmRlZiBfTElCQ1BQX1VTRV9TRU5ERklMRQor
Ym9vbCBjb3B5X2ZpbGVfaW1wbF9zZW5kZmlsZShGaWxlRGVzY3JpcHRvciYgcmVhZF9mZCwgRmls
ZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBlYykgeworCisgIHNpemVfdCBjb3VudCA9IHJlYWRfZmQuZ2V0X3N0YXQoKS5zdF9z
aXplOworICBkbyB7CisgICAgc3NpemVfdCByZXM7CisgICAgaWYgKChyZXMgPSA6OnNlbmRmaWxl
KHdyaXRlX2ZkLmZkLCByZWFkX2ZkLmZkLCBudWxscHRyLCBjb3VudCkpID09IC0xKSB7CisgICAg
ICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Y291bnQgLT0gcmVzOworICB9IHdoaWxlIChjb3VudCA+IDApOworCisgIGVjLmNsZWFyKCk7CisK
KyAgcmV0dXJuIHRydWU7Cit9CisjZWxpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NPUFlGSUxFKQor
Ym9vbCBjb3B5X2ZpbGVfaW1wbF9jb3B5ZmlsZShGaWxlRGVzY3JpcHRvciYgcmVhZF9mZCwgRmls
ZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBlYykgeworICBzdHJ1Y3QgQ29weUZpbGVTdGF0ZSB7CisgICAgY29weWZpbGVfc3Rh
dGVfdCBzdGF0ZTsKKyAgICBDb3B5RmlsZVN0YXRlKCkgeyBzdGF0ZSA9IGNvcHlmaWxlX3N0YXRl
X2FsbG9jKCk7IH0KKyAgICB+Q29weUZpbGVTdGF0ZSgpIHsgY29weWZpbGVfc3RhdGVfZnJlZShz
dGF0ZSk7IH0KKworICBwcml2YXRlOgorICAgIENvcHlGaWxlU3RhdGUoQ29weUZpbGVTdGF0ZSBj
b25zdCYpID0gZGVsZXRlOworICAgIENvcHlGaWxlU3RhdGUmIG9wZXJhdG9yPShDb3B5RmlsZVN0
YXRlIGNvbnN0JikgPSBkZWxldGU7CisgIH07CisKKyAgQ29weUZpbGVTdGF0ZSBjZnM7CisgIGlm
IChmY29weWZpbGUocmVhZF9mZC5mZCwgd3JpdGVfZmQuZmQsIGNmcy5zdGF0ZSwgQ09QWUZJTEVf
REFUQSkgPCAwKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIGZhbHNl
OworICB9CisKKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworLy8g
VGhpcyBmdW5jdGlvbiBpcyBndWFyZGVkIGJ5IGlmZGVmJ3MgaW4gSnVuaXBlciBkdWUgdG8gdGhl
IGN1cnJlbnQKKy8vIGNsYW5nIG5vdCBzdXBwb3J0aW5nIGFuIF9fb3BlbiBmdW5jdGlvbiBvbiBp
ZnN0cmVhbSBhbmQgb2ZzdHJlYW0uCisjaWYgIWRlZmluZWQoX0xJQkNQUF9VU0VfU0VOREZJTEUp
ICYmICFkZWZpbmVkKF9MSUJDUFBfVVNFX0NPUFlGSUxFKQorLy8gTm90ZTogVGhpcyBmdW5jdGlv
biBpc24ndCBndWFyZGVkIGJ5IGlmZGVmJ3MgZXZlbiB0aG91Z2ggaXQgbWF5IGJlIHVudXNlZAor
Ly8gaW4gb3JkZXIgdG8gYXNzdXJlIGl0IHN0aWxsIGNvbXBpbGVzLgorX19hdHRyaWJ1dGVfXygo
dW51c2VkKSkgYm9vbCBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KEZpbGVEZXNjcmlwdG9yJiByZWFk
X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBpZnN0cmVhbSBpbjsK
KyAgaW4uX19vcGVuKHJlYWRfZmQuZmQsIGlvczo6YmluYXJ5KTsKKyAgaWYgKCFpbi5pc19vcGVu
KCkpIHsKKyAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCBfX29wZW4gZGlkbid0IHJlc2V0IHRoZSBl
cnJvciBjb2RlLgorICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorICBvZnN0cmVhbSBvdXQ7CisgIG91dC5fX29wZW4od3JpdGVfZmQuZmQsIGlvczo6Ymlu
YXJ5KTsKKyAgaWYgKCFvdXQuaXNfb3BlbigpKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7
CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGluLmdvb2QoKSAmJiBvdXQuZ29vZCgp
KSB7CisgICAgdXNpbmcgSW5JdCA9IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj47CisgICAgdXNp
bmcgT3V0SXQgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIEluSXQgYmluKGluKTsK
KyAgICBJbkl0IGVpbjsKKyAgICBPdXRJdCBib3V0KG91dCk7CisgICAgY29weShiaW4sIGVpbiwg
Ym91dCk7CisgIH0KKyAgaWYgKG91dC5mYWlsKCkgfHwgaW4uZmFpbCgpKSB7CisgICAgZWMgPSBt
YWtlX2Vycm9yX2NvZGUoZXJyYzo6aW9fZXJyb3IpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQor
CisgIGVjLmNsZWFyKCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jvb2wgY29weV9m
aWxlX2ltcGwoRmlsZURlc2NyaXB0b3ImIGZyb20sIEZpbGVEZXNjcmlwdG9yJiB0bywgZXJyb3Jf
Y29kZSYgZWMpIHsKKyNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxFKQorICByZXR1cm4g
Y29weV9maWxlX2ltcGxfc2VuZGZpbGUoZnJvbSwgdG8sIGVjKTsKKyNlbGlmIGRlZmluZWQoX0xJ
QkNQUF9VU0VfQ09QWUZJTEUpCisgIHJldHVybiBjb3B5X2ZpbGVfaW1wbF9jb3B5ZmlsZShmcm9t
LCB0bywgZWMpOworI2Vsc2UKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX2RlZmF1bHQoZnJvbSwg
dG8sIGVjKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgZGV0
YWlsCisKK2Jvb2wgX19jb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8s
IGNvcHlfb3B0aW9ucyBvcHRpb25zLAorICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykg
eworICB1c2luZyBkZXRhaWw6OkZpbGVEZXNjcmlwdG9yOworICBFcnJvckhhbmRsZXI8Ym9vbD4g
ZXJyKCJjb3B5X2ZpbGUiLCBlYywgJnRvLCAmZnJvbSk7CisKKyAgZXJyb3JfY29kZSBtX2VjOwor
ICBGaWxlRGVzY3JpcHRvciBmcm9tX2ZkID0KKyAgICAgIEZpbGVEZXNjcmlwdG9yOjpjcmVhdGVf
d2l0aF9zdGF0dXMoJmZyb20sIG1fZWMsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CisgIGlmICht
X2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworCisgIGF1dG8gZnJvbV9zdCA9IGZy
b21fZmQuZ2V0X3N0YXR1cygpOworICBTdGF0VCBjb25zdCYgZnJvbV9zdGF0ID0gZnJvbV9mZC5n
ZXRfc3RhdCgpOworICBpZiAoIWlzX3JlZ3VsYXJfZmlsZShmcm9tX3N0KSkgeworICAgIGlmIChu
b3QgbV9lYykKKyAgICAgIG1fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm90X3N1cHBvcnRl
ZCk7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICBjb25zdCBib29sIHNr
aXBfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6c2tpcF9leGlzdGluZyAmIG9wdGlvbnMp
OworICBjb25zdCBib29sIHVwZGF0ZV9leGlzdGluZyA9IGJvb2woY29weV9vcHRpb25zOjp1cGRh
dGVfZXhpc3RpbmcgJiBvcHRpb25zKTsKKyAgY29uc3QgYm9vbCBvdmVyd3JpdGVfZXhpc3Rpbmcg
PQorICAgICAgYm9vbChjb3B5X29wdGlvbnM6Om92ZXJ3cml0ZV9leGlzdGluZyAmIG9wdGlvbnMp
OworCisgIFN0YXRUIHRvX3N0YXRfcGF0aDsKKyAgZmlsZV9zdGF0dXMgdG9fc3QgPSBkZXRhaWw6
OnBvc2l4X3N0YXQodG8sIHRvX3N0YXRfcGF0aCwgJm1fZWMpOworICBpZiAoIXN0YXR1c19rbm93
bih0b19zdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisKKyAgY29uc3QgYm9vbCB0
b19leGlzdHMgPSBleGlzdHModG9fc3QpOworICBpZiAodG9fZXhpc3RzICYmICFpc19yZWd1bGFy
X2ZpbGUodG9fc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQp
OworCisgIGlmICh0b19leGlzdHMgJiYgZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoZnJvbV9zdGF0
LCB0b19zdGF0X3BhdGgpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmZpbGVfZXhpc3Rz
KTsKKworICBpZiAodG9fZXhpc3RzICYmIHNraXBfZXhpc3RpbmcpCisgICAgcmV0dXJuIGZhbHNl
OworCisgIGJvb2wgU2hvdWxkQ29weSA9IFsmXSgpIHsKKyAgICBpZiAodG9fZXhpc3RzICYmIHVw
ZGF0ZV9leGlzdGluZykgeworICAgICAgYXV0byBmcm9tX3RpbWUgPSBkZXRhaWw6OmV4dHJhY3Rf
bXRpbWUoZnJvbV9zdGF0KTsKKyAgICAgIGF1dG8gdG9fdGltZSA9IGRldGFpbDo6ZXh0cmFjdF9t
dGltZSh0b19zdGF0X3BhdGgpOworICAgICAgaWYgKGZyb21fdGltZS50dl9zZWMgPCB0b190aW1l
LnR2X3NlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKGZyb21fdGltZS50dl9z
ZWMgPT0gdG9fdGltZS50dl9zZWMgJiYKKyAgICAgICAgICBmcm9tX3RpbWUudHZfbnNlYyA8PSB0
b190aW1lLnR2X25zZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBpZiAoIXRvX2V4aXN0cyB8fCBvdmVyd3JpdGVfZXhpc3RpbmcpCisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7
CisgIH0oKTsKKyAgaWYgKCFTaG91bGRDb3B5KQorICAgIHJldHVybiBmYWxzZTsKKworICAvLyBE
b24ndCB0cnVuY2F0ZSByaWdodCBhd2F5LiBXZSBtYXkgbm90IGJlIG9wZW5pbmcgdGhlIGZpbGUg
d2Ugb3JpZ2luYWxseQorICAvLyBsb29rZWQgYXQ7IHdlJ2xsIGNoZWNrIHRoaXMgbGF0ZXIuCisg
IGludCB0b19vcGVuX2ZsYWdzID0gT19XUk9OTFk7CisgIGlmICghdG9fZXhpc3RzKQorICAgIHRv
X29wZW5fZmxhZ3MgfD0gT19DUkVBVDsKKyAgRmlsZURlc2NyaXB0b3IgdG9fZmQgPSBGaWxlRGVz
Y3JpcHRvcjo6Y3JlYXRlX3dpdGhfc3RhdHVzKAorICAgICAgJnRvLCBtX2VjLCB0b19vcGVuX2Zs
YWdzLCBmcm9tX3N0YXQuc3RfbW9kZSk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVw
b3J0KG1fZWMpOworCisgIGlmICh0b19leGlzdHMpIHsKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBm
aWxlIHdlIGluaXRpYWxseSBzdGF0J2VkIGlzIGVxdWl2YWxlbnQgdG8gdGhlIG9uZQorICAgIC8v
IHdlIG9wZW5lZC4KKyAgICAvLyBGSVhNRTogcmVwb3J0IHRoaXMgYmV0dGVyLgorICAgIGlmICgh
ZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQodG9fc3RhdF9wYXRoLCB0b19mZC5nZXRfc3RhdCgpKSkK
KyAgICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmJhZF9maWxlX2Rlc2NyaXB0b3IpOworCisg
ICAgLy8gU2V0IHRoZSBwZXJtaXNzaW9ucyBhbmQgdHJ1bmNhdGUgdGhlIGZpbGUgd2Ugb3BlbmVk
LgorICAgIGlmIChkZXRhaWw6OnBvc2l4X2ZjaG1vZCh0b19mZCwgZnJvbV9zdGF0LCBtX2VjKSkK
KyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIGlmIChkZXRhaWw6OnBvc2l4X2Z0
cnVuY2F0ZSh0b19mZCwgMCwgbV9lYykpCisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsK
KyAgfQorCisgIGlmICghY29weV9maWxlX2ltcGwoZnJvbV9mZCwgdG9fZmQsIG1fZWMpKSB7Cisg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZGVzdCBmaWxlIGlmIHdlIGZhaWxlZCwgYW5kIGl0IGRp
ZG4ndCBleGlzdCBwcmV2aW91c2x5LgorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICB9
CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgX19jb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYg
ZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIGNvbnN0IHBhdGggcmVhbF9wYXRoKF9fcmVhZF9z
eW1saW5rKGV4aXN0aW5nX3N5bWxpbmssIGVjKSk7CisgIGlmIChlYyAmJiAqZWMpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gTk9URTogcHJvcG9zYWwgc2F5cyB5b3Ugc2hvdWxkIGRldGVjdCBp
ZiB5b3Ugc2hvdWxkIGNhbGwKKyAgLy8gY3JlYXRlX3N5bWxpbmsgb3IgY3JlYXRlX2RpcmVjdG9y
eV9zeW1saW5rLiBJIGRvbid0IHRoaW5rIHRoaXMKKyAgLy8gaXMgbmVlZGVkIHdpdGggUE9TSVgK
KyAgX19jcmVhdGVfc3ltbGluayhyZWFsX3BhdGgsIG5ld19zeW1saW5rLCBlYyk7Cit9CisKK2Jv
b2wgX19jcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsK
KyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yaWVzIiwgZWMsICZwKTsK
KworICBlcnJvcl9jb2RlIG1fZWM7CisgIGF1dG8gY29uc3Qgc3QgPSBkZXRhaWw6OnBvc2l4X3N0
YXQocCwgJm1fZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0dXJuIGVyci5y
ZXBvcnQobV9lYyk7CisgIGVsc2UgaWYgKGlzX2RpcmVjdG9yeShzdCkpCisgICAgcmV0dXJuIGZh
bHNlOworICBlbHNlIGlmIChleGlzdHMoc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6
OmZpbGVfZXhpc3RzKTsKKworICBjb25zdCBwYXRoIHBhcmVudCA9IHAucGFyZW50X3BhdGgoKTsK
KyAgaWYgKCFwYXJlbnQuZW1wdHkoKSkgeworICAgIGNvbnN0IGZpbGVfc3RhdHVzIHBhcmVudF9z
dCA9IHN0YXR1cyhwYXJlbnQsIG1fZWMpOworICAgIGlmIChub3Qgc3RhdHVzX2tub3duKHBhcmVu
dF9zdCkpCisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBpZiAobm90IGV4aXN0
cyhwYXJlbnRfc3QpKSB7CisgICAgICBfX2NyZWF0ZV9kaXJlY3RvcmllcyhwYXJlbnQsIGVjKTsK
KyAgICAgIGlmIChlYyAmJiAqZWMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQor
ICAgIH0KKyAgfQorICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KHAsIGVjKTsKK30KKworYm9v
bCBfX2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIsIGVjLCAmcCk7CisKKyAg
aWYgKDo6bWtkaXIocC5jX3N0cigpLCBzdGF0aWNfY2FzdDxpbnQ+KHBlcm1zOjphbGwpKSA9PSAw
KQorICAgIHJldHVybiB0cnVlOworICBpZiAoZXJybm8gIT0gRUVYSVNUKQorICAgIGVyci5yZXBv
cnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIF9fY3JlYXRl
X2RpcmVjdG9yeShwYXRoIGNvbnN0JiBwLCBwYXRoIGNvbnN0JiBhdHRyaWJ1dGVzLCBlcnJvcl9j
b2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3J5Iiwg
ZWMsICZwLCAmYXR0cmlidXRlcyk7CisKKyAgU3RhdFQgYXR0cl9zdGF0OworICBlcnJvcl9jb2Rl
IG1lYzsKKyAgYXV0byBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChhdHRyaWJ1dGVzLCBhdHRyX3N0
YXQsICZtZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0dXJuIGVyci5yZXBv
cnQobWVjKTsKKyAgaWYgKCFpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0
KGVycmM6Om5vdF9hX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAidGhlIHNwZWNp
ZmllZCBhdHRyaWJ1dGUgcGF0aCBpcyBpbnZhbGlkIik7CisKKyAgaWYgKDo6bWtkaXIocC5jX3N0
cigpLCBhdHRyX3N0YXQuc3RfbW9kZSkgPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgaWYgKGVy
cm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhwYXRoIGNvbnN0
JiBmcm9tLCBwYXRoIGNvbnN0JiB0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiY3JlYXRlX2RpcmVj
dG9yeV9zeW1saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1saW5rKGZyb20uY19z
dHIoKSwgdG8uY19zdHIoKSkgIT0gMCkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vy
cm5vKCkpOworfQorCit2b2lkIF9fY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiBmcm9tLCBj
b25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVy
cigiY3JlYXRlX2hhcmRfbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6bGluayhmcm9t
LmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19jcmVhdGVfc3ltbGluayhwYXRoIGNvbnN0JiBmcm9t
LCBwYXRoIGNvbnN0JiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+
IGVycigiY3JlYXRlX3N5bWxpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OnN5bWxpbmso
ZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChj
YXB0dXJlX2Vycm5vKCkpOworfQorCitwYXRoIF9fY3VycmVudF9wYXRoKGVycm9yX2NvZGUqIGVj
KSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoImN1cnJlbnRfcGF0aCIsIGVjKTsKKworICBh
dXRvIHNpemUgPSA6OnBhdGhjb25mKCIuIiwgX1BDX1BBVEhfTUFYKTsKKyAgX0xJQkNQUF9BU1NF
UlQoc2l6ZSA+PSAwLCAicGF0aGNvbmYgcmV0dXJuZWQgYSAwIGFzIG1heCBzaXplIik7CisKKyAg
YXV0byBidWZmID0gdW5pcXVlX3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemUgKyAxXSk7CisgIGNo
YXIqIHJldDsKKyAgaWYgKChyZXQgPSA6OmdldGN3ZChidWZmLmdldCgpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpemUpKSkgPT0gbnVsbHB0cikKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJl
X2Vycm5vKCksICJjYWxsIHRvIGdldGN3ZCBmYWlsZWQiKTsKKworICByZXR1cm4ge2J1ZmYuZ2V0
KCl9OworfQorCit2b2lkIF9fY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImN1cnJlbnRfcGF0aCIsIGVjLCAmcCk7
CisgIGlmICg6OmNoZGlyKHAuY19zdHIoKSkgPT0gLTEpCisgICAgZXJyLnJlcG9ydChjYXB0dXJl
X2Vycm5vKCkpOworfQorCitib29sIF9fZXF1aXZhbGVudChjb25zdCBwYXRoJiBwMSwgY29uc3Qg
cGF0aCYgcDIsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImVx
dWl2YWxlbnQiLCBlYywgJnAxLCAmcDIpOworCisgIGVycm9yX2NvZGUgZWMxLCBlYzI7CisgIFN0
YXRUIHN0MSA9IHt9LCBzdDIgPSB7fTsKKyAgYXV0byBzMSA9IGRldGFpbDo6cG9zaXhfc3RhdChw
MS5uYXRpdmUoKSwgc3QxLCAmZWMxKTsKKyAgaWYgKCFleGlzdHMoczEpKQorICAgIHJldHVybiBl
cnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICBhdXRvIHMyID0gZGV0YWlsOjpwb3Np
eF9zdGF0KHAyLm5hdGl2ZSgpLCBzdDIsICZlYzIpOworICBpZiAoIWV4aXN0cyhzMikpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisKKyAgcmV0dXJuIGRldGFp
bDo6c3RhdF9lcXVpdmFsZW50KHN0MSwgc3QyKTsKK30KKwordWludG1heF90IF9fZmlsZV9zaXpl
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx1aW50bWF4
X3Q+IGVycigiZmlsZV9zaXplIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0
YXRUIHN0OworICBmaWxlX3N0YXR1cyBmc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgc3QsICZt
X2VjKTsKKyAgaWYgKCFleGlzdHMoZnN0KSB8fCAhaXNfcmVndWxhcl9maWxlKGZzdCkpIHsKKyAg
ICBlcnJjIGVycm9yX2tpbmQgPQorICAgICAgICBpc19kaXJlY3RvcnkoZnN0KSA/IGVycmM6Omlz
X2FfZGlyZWN0b3J5IDogZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICBpZiAoIW1fZWMpCisgICAg
ICBtX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycm9yX2tpbmQpOworICAgIHJldHVybiBlcnIucmVw
b3J0KG1fZWMpOworICB9CisgIC8vIGlzX3JlZ3VsYXJfZmlsZShwKSA9PSB0cnVlCisgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KHN0LnN0X3NpemUpOworfQorCit1aW50bWF4X3QgX19o
YXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJoYXJkX2xpbmtfY291bnQiLCBlYywgJnApOworCisgIGVy
cm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7CisgIGRldGFpbDo6cG9zaXhfc3RhdChwLCBzdCwg
Jm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oc3Quc3RfbmxpbmspOworfQorCitib29sIF9fZnNf
aXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVy
PGJvb2w+IGVycigiaXNfZW1wdHkiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAg
U3RhdFQgcHN0OworICBhdXRvIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHBzdCwgJm1fZWMp
OworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgZWxzZSBpZiAo
IWlzX2RpcmVjdG9yeShzdCkgJiYgIWlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAgcmV0dXJuIGVy
ci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisgIGVsc2UgaWYgKGlzX2RpcmVjdG9yeShz
dCkpIHsKKyAgICBhdXRvIGl0ID0gZWMgPyBkaXJlY3RvcnlfaXRlcmF0b3IocCwgKmVjKSA6IGRp
cmVjdG9yeV9pdGVyYXRvcihwKTsKKyAgICBpZiAoZWMgJiYgKmVjKQorICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBpdCA9PSBkaXJlY3RvcnlfaXRlcmF0b3J7fTsKKyAgfSBlbHNlIGlm
IChpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+
KHBzdC5zdF9zaXplKSA9PSAwOworCisgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKK30KKworc3Rh
dGljIGZpbGVfdGltZV90eXBlIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYg
cCwgY29uc3QgU3RhdFQmIHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWlsOjpmc190aW1lOwor
ICBFcnJvckhhbmRsZXI8ZmlsZV90aW1lX3R5cGU+IGVycigibGFzdF93cml0ZV90aW1lIiwgZWMs
ICZwKTsKKworICBhdXRvIHRzID0gZGV0YWlsOjpleHRyYWN0X210aW1lKHN0KTsKKyAgaWYgKCFm
c190aW1lOjppc19yZXByZXNlbnRhYmxlKHRzKSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJj
Ojp2YWx1ZV90b29fbGFyZ2UpOworCisgIHJldHVybiBmc190aW1lOjpjb252ZXJ0X2Zyb21fdGlt
ZXNwZWModHMpOworfQorCitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBuYW1lc3BhY2UgY2hyb25vOworICBF
cnJvckhhbmRsZXI8ZmlsZV90aW1lX3R5cGU+IGVycigibGFzdF93cml0ZV90aW1lIiwgZWMsICZw
KTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHN0OworICBkZXRhaWw6OnBvc2l4X3N0
YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9l
Yyk7CisgIHJldHVybiBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKHAsIHN0LCBlYyk7Cit9CisK
K3ZvaWQgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1lX3R5cGUgbmV3
X3RpbWUsIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNfdGltZTsKKyAgRXJy
b3JIYW5kbGVyPHZvaWQ+IGVycigibGFzdF93cml0ZV90aW1lIiwgZWMsICZwKTsKKworICBlcnJv
cl9jb2RlIG1fZWM7CisgIGFycmF5PFRpbWVTcGVjLCAyPiB0YnVmOworI2lmICFkZWZpbmVkKF9M
SUJDUFBfVVNFX1VUSU1FTlNBVCkKKyAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBoYXMgYSByYWNl
IGNvbmRpdGlvbiBiZXR3ZWVuIGRldGVybWluaW5nIHRoZQorICAvLyBsYXN0IGFjY2VzcyB0aW1l
IGFuZCBhdHRlbXB0aW5nIHRvIHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSB1c2luZworICAvLyA6
OnV0aW1lcworICBTdGF0VCBzdDsKKyAgZmlsZV9zdGF0dXMgZnN0ID0gZGV0YWlsOjpwb3NpeF9z
dGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMpOworICB0YnVmWzBdID0gZGV0YWlsOjpleHRyYWN0X2F0aW1lKHN0KTsKKyNlbHNlCisgIHRi
dWZbMF0udHZfc2VjID0gMDsKKyAgdGJ1ZlswXS50dl9uc2VjID0gVVRJTUVfT01JVDsKKyNlbmRp
ZgorICBpZiAoIWZzX3RpbWU6OmNvbnZlcnRfdG9fdGltZXNwZWModGJ1ZlsxXSwgbmV3X3RpbWUp
KQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OnZhbHVlX3Rvb19sYXJnZSk7CisKKyAgZGV0
YWlsOjpzZXRfZmlsZV90aW1lcyhwLCB0YnVmLCBtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0
dXJuIGVyci5yZXBvcnQobV9lYyk7Cit9CisKK3ZvaWQgX19wZXJtaXNzaW9ucyhjb25zdCBwYXRo
JiBwLCBwZXJtcyBwcm1zLCBwZXJtX29wdGlvbnMgb3B0cywKKyAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJwZXJtaXNzaW9ucyIs
IGVjLCAmcCk7CisKKyAgYXV0byBoYXNfb3B0ID0gWyZdKHBlcm1fb3B0aW9ucyBvKSB7IHJldHVy
biBib29sKG8gJiBvcHRzKTsgfTsKKyAgY29uc3QgYm9vbCByZXNvbHZlX3N5bWxpbmtzID0gIWhh
c19vcHQocGVybV9vcHRpb25zOjpub2ZvbGxvdyk7CisgIGNvbnN0IGJvb2wgYWRkX3Blcm1zID0g
aGFzX29wdChwZXJtX29wdGlvbnM6OmFkZCk7CisgIGNvbnN0IGJvb2wgcmVtb3ZlX3Blcm1zID0g
aGFzX29wdChwZXJtX29wdGlvbnM6OnJlbW92ZSk7CisgIF9MSUJDUFBfQVNTRVJUKAorICAgICAg
KGFkZF9wZXJtcyArIHJlbW92ZV9wZXJtcyArIGhhc19vcHQocGVybV9vcHRpb25zOjpyZXBsYWNl
KSkgPT0gMSwKKyAgICAgICJPbmUgYW5kIG9ubHkgb25lIG9mIHRoZSBwZXJtX29wdGlvbnMgY29u
c3RhbnRzIHJlcGxhY2UsIGFkZCwgb3IgcmVtb3ZlICIKKyAgICAgICJpcyBwcmVzZW50IGluIG9w
dHMiKTsKKworICBib29sIHNldF9zeW1fcGVybXMgPSBmYWxzZTsKKyAgcHJtcyAmPSBwZXJtczo6
bWFzazsKKyAgaWYgKCFyZXNvbHZlX3N5bWxpbmtzIHx8IChhZGRfcGVybXMgfHwgcmVtb3ZlX3Bl
cm1zKSkgeworICAgIGVycm9yX2NvZGUgbV9lYzsKKyAgICBmaWxlX3N0YXR1cyBzdCA9IHJlc29s
dmVfc3ltbGlua3MgPyBkZXRhaWw6OnBvc2l4X3N0YXQocCwgJm1fZWMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9sc3RhdChwLCAmbV9lYyk7
CisgICAgc2V0X3N5bV9wZXJtcyA9IGlzX3N5bWxpbmsoc3QpOworICAgIGlmIChtX2VjKQorICAg
ICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgX0xJQkNQUF9BU1NFUlQoc3QucGVybWlz
c2lvbnMoKSAhPSBwZXJtczo6dW5rbm93biwKKyAgICAgICAgICAgICAgICAgICAiUGVybWlzc2lv
bnMgdW5leHBlY3RlZGx5IHVua25vd24iKTsKKyAgICBpZiAoYWRkX3Blcm1zKQorICAgICAgcHJt
cyB8PSBzdC5wZXJtaXNzaW9ucygpOworICAgIGVsc2UgaWYgKHJlbW92ZV9wZXJtcykKKyAgICAg
IHBybXMgPSBzdC5wZXJtaXNzaW9ucygpICYgfnBybXM7CisgIH0KKyAgY29uc3QgYXV0byByZWFs
X3Blcm1zID0gZGV0YWlsOjpwb3NpeF9jb252ZXJ0X3Blcm1zKHBybXMpOworCisjaWYgZGVmaW5l
ZChBVF9TWU1MSU5LX05PRk9MTE9XKSAmJiBkZWZpbmVkKEFUX0ZEQ1dEKQorICBjb25zdCBpbnQg
ZmxhZ3MgPSBzZXRfc3ltX3Blcm1zID8gQVRfU1lNTElOS19OT0ZPTExPVyA6IDA7CisgIGlmICg6
OmZjaG1vZGF0KEFUX0ZEQ1dELCBwLmNfc3RyKCksIHJlYWxfcGVybXMsIGZsYWdzKSA9PSAtMSkg
eworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIH0KKyNlbHNlCisg
IGlmIChzZXRfc3ltX3Blcm1zKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om9wZXJhdGlv
bl9ub3Rfc3VwcG9ydGVkKTsKKyAgaWYgKDo6Y2htb2QocC5jX3N0cigpLCByZWFsX3Blcm1zKSA9
PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIH0KKyNl
bmRpZgorfQorCitwYXRoIF9fcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjKSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoInJlYWRfc3ltbGluayIsIGVjLCAmcCk7
CisKKyAgY2hhciBidWZmW1BBVEhfTUFYICsgMV07CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgOjpz
c2l6ZV90IHJldDsKKyAgaWYgKChyZXQgPSA6OnJlYWRsaW5rKHAuY19zdHIoKSwgYnVmZiwgUEFU
SF9NQVgpKSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7
CisgIH0KKyAgX0xJQkNQUF9BU1NFUlQocmV0IDw9IFBBVEhfTUFYLCAiVE9ETyIpOworICBfTElC
Q1BQX0FTU0VSVChyZXQgPiAwLCAiVE9ETyIpOworICBidWZmW3JldF0gPSAwOworICByZXR1cm4g
e2J1ZmZ9OworfQorCitib29sIF9fcmVtb3ZlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVj
KSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoInJlbW92ZSIsIGVjLCAmcCk7CisgIGlmICg6
OnJlbW92ZShwLmNfc3RyKCkpID09IC0xKSB7CisgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKKyAg
ICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KyAgcmV0dXJuIHRydWU7Cit9CisKK25hbWVzcGFjZSB7CisKK3VpbnRtYXhfdCByZW1vdmVfYWxs
X2ltcGwocGF0aCBjb25zdCYgcCwgZXJyb3JfY29kZSYgZWMpIHsKKyAgY29uc3QgYXV0byBucG9z
ID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgIGNvbnN0IGZpbGVfc3RhdHVzIHN0ID0g
X19zeW1saW5rX3N0YXR1cyhwLCAmZWMpOworICBpZiAoZWMpCisgICAgcmV0dXJuIG5wb3M7Cisg
IHVpbnRtYXhfdCBjb3VudCA9IDE7CisgIGlmIChpc19kaXJlY3Rvcnkoc3QpKSB7CisgICAgZm9y
IChkaXJlY3RvcnlfaXRlcmF0b3IgaXQocCwgZWMpOyAhZWMgJiYgaXQgIT0gZGlyZWN0b3J5X2l0
ZXJhdG9yKCk7CisgICAgICAgICBpdC5pbmNyZW1lbnQoZWMpKSB7CisgICAgICBhdXRvIG90aGVy
X2NvdW50ID0gcmVtb3ZlX2FsbF9pbXBsKGl0LT5wYXRoKCksIGVjKTsKKyAgICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIG5wb3M7CisgICAgICBjb3VudCArPSBvdGhlcl9jb3VudDsKKyAgICB9
CisgICAgaWYgKGVjKQorICAgICAgcmV0dXJuIG5wb3M7CisgIH0KKyAgaWYgKCFfX3JlbW92ZShw
LCAmZWMpKQorICAgIHJldHVybiBucG9zOworICByZXR1cm4gY291bnQ7Cit9CisKK30gLy8gZW5k
IG5hbWVzcGFjZQorCit1aW50bWF4X3QgX19yZW1vdmVfYWxsKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx1aW50bWF4X3Q+IGVycigicmVtb3ZlX2FsbCIs
IGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtZWM7CisgIGF1dG8gY291bnQgPSByZW1vdmVfYWxs
X2ltcGwocCwgbWVjKTsKKyAgaWYgKG1lYykgeworICAgIGlmIChtZWMgPT0gZXJyYzo6bm9fc3Vj
aF9maWxlX29yX2RpcmVjdG9yeSkKKyAgICAgIHJldHVybiAwOworICAgIHJldHVybiBlcnIucmVw
b3J0KG1lYyk7CisgIH0KKyAgcmV0dXJuIGNvdW50OworfQorCit2b2lkIF9fcmVuYW1lKGNvbnN0
IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhh
bmRsZXI8dm9pZD4gZXJyKCJyZW5hbWUiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OnJlbmFt
ZShmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIGVyci5yZXBvcnQoY2FwdHVy
ZV9lcnJubygpKTsKK30KKwordm9pZCBfX3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRt
YXhfdCBzaXplLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJy
ZXNpemVfZmlsZSIsIGVjLCAmcCk7CisgIGlmICg6OnRydW5jYXRlKHAuY19zdHIoKSwgc3RhdGlj
X2Nhc3Q8IDo6b2ZmX3Q+KHNpemUpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0
dXJlX2Vycm5vKCkpOworfQorCitzcGFjZV9pbmZvIF9fc3BhY2UoY29uc3QgcGF0aCYgcCwgZXJy
b3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigic3BhY2UiLCBlYywgJnAp
OworICBzcGFjZV9pbmZvIHNpOworICBzdHJ1Y3Qgc3RhdHZmcyBtX3N2ZnMgPSB7fTsKKyAgaWYg
KDo6c3RhdHZmcyhwLmNfc3RyKCksICZtX3N2ZnMpID09IC0xKSB7CisgICAgZXJyLnJlcG9ydChj
YXB0dXJlX2Vycm5vKCkpOworICAgIHNpLmNhcGFjaXR5ID0gc2kuZnJlZSA9IHNpLmF2YWlsYWJs
ZSA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oLTEpOworICAgIHJldHVybiBzaTsKKyAgfQorICAv
LyBNdWx0aXBseSB3aXRoIG92ZXJmbG93IGNoZWNraW5nLgorICBhdXRvIGRvX211bHQgPSBbJl0o
dWludG1heF90JiBvdXQsIHVpbnRtYXhfdCBvdGhlcikgeworICAgIG91dCA9IG90aGVyICogbV9z
dmZzLmZfZnJzaXplOworICAgIGlmIChvdGhlciA9PSAwIHx8IG91dCAvIG90aGVyICE9IG1fc3Zm
cy5mX2Zyc2l6ZSkKKyAgICAgIG91dCA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oLTEpOworICB9
OworICBkb19tdWx0KHNpLmNhcGFjaXR5LCBtX3N2ZnMuZl9ibG9ja3MpOworICBkb19tdWx0KHNp
LmZyZWUsIG1fc3Zmcy5mX2JmcmVlKTsKKyAgZG9fbXVsdChzaS5hdmFpbGFibGUsIG1fc3Zmcy5m
X2JhdmFpbCk7CisgIHJldHVybiBzaTsKK30KKworZmlsZV9zdGF0dXMgX19zdGF0dXMoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcmV0dXJuIGRldGFpbDo6cG9zaXhfc3RhdChw
LCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSogZWMpIHsKKyAgcmV0dXJuIGRldGFpbDo6cG9zaXhfbHN0YXQocCwgZWMpOwor
fQorCitwYXRoIF9fdGVtcF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlKiBlYykgeworICBFcnJv
ckhhbmRsZXI8cGF0aD4gZXJyKCJ0ZW1wX2RpcmVjdG9yeV9wYXRoIiwgZWMpOworCisgIGNvbnN0
IGNoYXIqIGVudl9wYXRoc1tdID0geyJUTVBESVIiLCAiVE1QIiwgIlRFTVAiLCAiVEVNUERJUiJ9
OworICBjb25zdCBjaGFyKiByZXQgPSBudWxscHRyOworCisgIGZvciAoYXV0byYgZXAgOiBlbnZf
cGF0aHMpCisgICAgaWYgKChyZXQgPSBnZXRlbnYoZXApKSkKKyAgICAgIGJyZWFrOworICBpZiAo
cmV0ID09IG51bGxwdHIpCisgICAgcmV0ID0gIi90bXAiOworCisgIHBhdGggcChyZXQpOworICBl
cnJvcl9jb2RlIG1fZWM7CisgIGZpbGVfc3RhdHVzIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAs
ICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0
KG1fZWMsICJjYW5ub3QgYWNjZXNzIHBhdGggXCIlc1wiIiwgcCk7CisKKyAgaWYgKCFleGlzdHMo
c3QpIHx8ICFpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5v
dF9hX2RpcmVjdG9yeSwgInBhdGggXCIlc1wiIGlzIG5vdCBhIGRpcmVjdG9yeSIsCisgICAgICAg
ICAgICAgICAgICAgICAgcCk7CisKKyAgcmV0dXJuIHA7Cit9CisKK3BhdGggX193ZWFrbHlfY2Fu
b25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxw
YXRoPiBlcnIoIndlYWtseV9jYW5vbmljYWwiLCBlYywgJnApOworCisgIGlmIChwLmVtcHR5KCkp
CisgICAgcmV0dXJuIF9fY2Fub25pY2FsKCIiLCBlYyk7CisKKyAgcGF0aCByZXN1bHQ7CisgIHBh
dGggdG1wOworICB0bXAuX19yZXNlcnZlKHAubmF0aXZlKCkuc2l6ZSgpKTsKKyAgYXV0byBQUCA9
IFBhdGhQYXJzZXI6OkNyZWF0ZUVuZChwLm5hdGl2ZSgpKTsKKyAgLS1QUDsKKyAgdmVjdG9yPHN0
cmluZ192aWV3X3Q+IERORVBhcnRzOworCisgIHdoaWxlIChQUC5TdGF0ZSAhPSBQYXRoUGFyc2Vy
OjpQU19CZWZvcmVCZWdpbikgeworICAgIHRtcC5hc3NpZ24oY3JlYXRlVmlldyhwLm5hdGl2ZSgp
LmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSkpOworICAgIGVycm9yX2NvZGUgbV9lYzsKKyAg
ICBmaWxlX3N0YXR1cyBzdCA9IF9fc3RhdHVzKHRtcCwgJm1fZWMpOworICAgIGlmICghc3RhdHVz
X2tub3duKHN0KSkgeworICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgfSBlbHNl
IGlmIChleGlzdHMoc3QpKSB7CisgICAgICByZXN1bHQgPSBfX2Nhbm9uaWNhbCh0bXAsIGVjKTsK
KyAgICAgIGJyZWFrOworICAgIH0KKyAgICBETkVQYXJ0cy5wdXNoX2JhY2soKlBQKTsKKyAgICAt
LVBQOworICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19CZWZvcmVCZWdpbikK
KyAgICByZXN1bHQgPSBfX2Nhbm9uaWNhbCgiIiwgZWMpOworICBpZiAoZWMpCisgICAgZWMtPmNs
ZWFyKCk7CisgIGlmIChETkVQYXJ0cy5lbXB0eSgpKQorICAgIHJldHVybiByZXN1bHQ7CisgIGZv
ciAoYXV0byBJdCA9IERORVBhcnRzLnJiZWdpbigpOyBJdCAhPSBETkVQYXJ0cy5yZW5kKCk7ICsr
SXQpCisgICAgcmVzdWx0IC89ICpJdDsKKyAgcmV0dXJuIHJlc3VsdC5sZXhpY2FsbHlfbm9ybWFs
KCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGggZGVmaW5pdGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyogY29u
c3RleHByIHBhdGg6OnZhbHVlX3R5cGUgcGF0aDo6cHJlZmVycmVkX3NlcGFyYXRvcjsgKi8KKwor
cGF0aCYgcGF0aDo6cmVwbGFjZV9leHRlbnNpb24ocGF0aCBjb25zdCYgcmVwbGFjZW1lbnQpIHsK
KyAgcGF0aCBwID0gZXh0ZW5zaW9uKCk7CisgIGlmIChub3QgcC5lbXB0eSgpKSB7CisgICAgX19w
bl8uZXJhc2UoX19wbl8uc2l6ZSgpIC0gcC5uYXRpdmUoKS5zaXplKCkpOworICB9CisgIGlmICgh
cmVwbGFjZW1lbnQuZW1wdHkoKSkgeworICAgIGlmIChyZXBsYWNlbWVudC5uYXRpdmUoKVswXSAh
PSAnLicpIHsKKyAgICAgIF9fcG5fICs9ICIuIjsKKyAgICB9CisgICAgX19wbl8uYXBwZW5kKHJl
cGxhY2VtZW50Ll9fcG5fKTsKKyAgfQorICByZXR1cm4gKnRoaXM7Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKy8vIHBhdGguZGVjb21wb3NlCisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19y
b290X25hbWUoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihf
X3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKQorICAg
IHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3Jv
b3RfZGlyZWN0b3J5KCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVn
aW4oX19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkK
KyAgICArK1BQOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290RGlyKQor
ICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpf
X3Jvb3RfcGF0aF9yYXcoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVC
ZWdpbihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1l
KSB7CisgICAgYXV0byBOZXh0Q2ggPSBQUC5wZWVrKCk7CisgICAgaWYgKE5leHRDaCAmJiAqTmV4
dENoID09ICcvJykgeworICAgICAgKytQUDsKKyAgICAgIHJldHVybiBjcmVhdGVWaWV3KF9fcG5f
LmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSk7CisgICAgfQorICAgIHJldHVybiBQUC5SYXdF
bnRyeTsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290RGlyKQor
ICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RhdGljIGJvb2wgQ29uc3VtZVJv
b3REaXIoUGF0aFBhcnNlciogUFApIHsKKyAgd2hpbGUgKFBQLT5TdGF0ZSA8PSBQYXRoUGFyc2Vy
OjpQU19JblJvb3REaXIpCisgICAgKysoKlBQKTsKKyAgcmV0dXJuIFBQLT5TdGF0ZSA9PSBQYXRo
UGFyc2VyOjpQU19BdEVuZDsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3JlbGF0aXZlX3Bh
dGgoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7
CisgIGlmIChDb25zdW1lUm9vdERpcigmUFApKQorICAgIHJldHVybiB7fTsKKyAgcmV0dXJuIGNy
ZWF0ZVZpZXcoUFAuUmF3RW50cnkuZGF0YSgpLCAmX19wbl8uYmFjaygpKTsKK30KKworc3RyaW5n
X3ZpZXdfdCBwYXRoOjpfX3BhcmVudF9wYXRoKCkgY29uc3QgeworICBpZiAoZW1wdHkoKSkKKyAg
ICByZXR1cm4ge307CisgIC8vIERldGVybWluZSBpZiB3ZSBoYXZlIGEgcm9vdCBwYXRoIGJ1dCBu
b3QgYSByZWxhdGl2ZSBwYXRoLiBJbiB0aGF0IGNhc2UKKyAgLy8gcmV0dXJuICp0aGlzLgorICB7
CisgICAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgICBpZiAo
Q29uc3VtZVJvb3REaXIoJlBQKSkKKyAgICAgIHJldHVybiBfX3BuXzsKKyAgfQorICAvLyBPdGhl
cndpc2UgcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBwYXRoLCBh
bmQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGF0IHBhdGgKKyAgeworICAg
IGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVFbmQoX19wbl8pOworICAgIC0tUFA7CisgICAg
aWYgKFBQLlJhd0VudHJ5LmRhdGEoKSA9PSBfX3BuXy5kYXRhKCkpCisgICAgICByZXR1cm4ge307
CisgICAgLS1QUDsKKyAgICByZXR1cm4gY3JlYXRlVmlldyhfX3BuXy5kYXRhKCksICZQUC5SYXdF
bnRyeS5iYWNrKCkpOworICB9Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19maWxlbmFtZSgp
IGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIHt9OworICB7CisgICAgUGF0aFBh
cnNlciBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgICBpZiAoQ29uc3Vt
ZVJvb3REaXIoJlBQKSkKKyAgICAgIHJldHVybiB7fTsKKyAgfQorICByZXR1cm4gKigtLVBhdGhQ
YXJzZXI6OkNyZWF0ZUVuZChfX3BuXykpOworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fc3Rl
bSgpIGNvbnN0IHsKKyAgcmV0dXJuIHBhcnNlcjo6c2VwYXJhdGVfZmlsZW5hbWUoX19maWxlbmFt
ZSgpKS5maXJzdDsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2V4dGVuc2lvbigpIGNvbnN0
IHsKKyAgcmV0dXJuIHBhcnNlcjo6c2VwYXJhdGVfZmlsZW5hbWUoX19maWxlbmFtZSgpKS5zZWNv
bmQ7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGguZ2VuCisKK2VudW0gUGF0aFBh
cnRLaW5kIDogdW5zaWduZWQgY2hhciB7CisgIFBLX05vbmUsCisgIFBLX1Jvb3RTZXAsCisgIFBL
X0ZpbGVuYW1lLAorICBQS19Eb3QsCisgIFBLX0RvdERvdCwKKyAgUEtfVHJhaWxpbmdTZXAKK307
CisKK3N0YXRpYyBQYXRoUGFydEtpbmQgQ2xhc3NpZnlQYXRoUGFydChzdHJpbmdfdmlld190IFBh
cnQpIHsKKyAgaWYgKFBhcnQuZW1wdHkoKSkKKyAgICByZXR1cm4gUEtfVHJhaWxpbmdTZXA7Cisg
IGlmIChQYXJ0ID09ICIuIikKKyAgICByZXR1cm4gUEtfRG90OworICBpZiAoUGFydCA9PSAiLi4i
KQorICAgIHJldHVybiBQS19Eb3REb3Q7CisgIGlmIChQYXJ0ID09ICIvIikKKyAgICByZXR1cm4g
UEtfUm9vdFNlcDsKKyAgcmV0dXJuIFBLX0ZpbGVuYW1lOworfQorCitwYXRoIHBhdGg6OmxleGlj
YWxseV9ub3JtYWwoKSBjb25zdCB7CisgIGlmIChfX3BuXy5lbXB0eSgpKQorICAgIHJldHVybiAq
dGhpczsKKworICB1c2luZyBQYXJ0S2luZFBhaXIgPSBwYWlyPHN0cmluZ192aWV3X3QsIFBhdGhQ
YXJ0S2luZD47CisgIHZlY3RvcjxQYXJ0S2luZFBhaXI+IFBhcnRzOworICAvLyBHdWVzcyBhcyB0
byBob3cgbWFueSBlbGVtZW50cyB0aGUgcGF0aCBoYXMgdG8gYXZvaWQgcmVhbGxvY2F0aW5nLgor
ICBQYXJ0cy5yZXNlcnZlKDMyKTsKKworICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBvZiB0aGUg
cGFydHMgYXMgd2UgY29sbGVjdCB0aGVtLiBUaGlzIGFsbG93cyB0aGUKKyAgLy8gcmVzdWx0aW5n
IHBhdGggdG8gcmVzZXJ2ZSB0aGUgY29ycmVjdCBhbW91bnQgb2YgbWVtb3J5LgorICBzaXplX3Qg
TmV3UGF0aFNpemUgPSAwOworICBhdXRvIEFkZFBhcnQgPSBbJl0oUGF0aFBhcnRLaW5kIEssIHN0
cmluZ192aWV3X3QgUCkgeworICAgIE5ld1BhdGhTaXplICs9IFAuc2l6ZSgpOworICAgIFBhcnRz
LmVtcGxhY2VfYmFjayhQLCBLKTsKKyAgfTsKKyAgYXV0byBMYXN0UGFydEtpbmQgPSBbJl0oKSB7
CisgICAgaWYgKFBhcnRzLmVtcHR5KCkpCisgICAgICByZXR1cm4gUEtfTm9uZTsKKyAgICByZXR1
cm4gUGFydHMuYmFjaygpLnNlY29uZDsKKyAgfTsKKworICBib29sIE1heWJlTmVlZFRyYWlsaW5n
U2VwID0gZmFsc2U7CisgIC8vIEJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyB0aGUgcmVtYWluaW5n
IGVsZW1lbnRzIG9mIHRoZSBwYXRoLCBwb3BwaW5nIG9mZgorICAvLyBlbGVtZW50cyB3aGljaCBv
Y2N1ciBiZWZvcmUgYSAnLi4nIGVudHJ5LgorICBmb3IgKGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpD
cmVhdGVCZWdpbihfX3BuXyk7IFBQOyArK1BQKSB7CisgICAgYXV0byBQYXJ0ID0gKlBQOworICAg
IFBhdGhQYXJ0S2luZCBLaW5kID0gQ2xhc3NpZnlQYXRoUGFydChQYXJ0KTsKKyAgICBzd2l0Y2gg
KEtpbmQpIHsKKyAgICBjYXNlIFBLX0ZpbGVuYW1lOgorICAgIGNhc2UgUEtfUm9vdFNlcDogewor
ICAgICAgLy8gQWRkIGFsbCBub24tZG90IGFuZCBub24tZG90LWRvdCBlbGVtZW50cyB0byB0aGUg
c3RhY2sgb2YgZWxlbWVudHMuCisgICAgICBBZGRQYXJ0KEtpbmQsIFBhcnQpOworICAgICAgTWF5
YmVOZWVkVHJhaWxpbmdTZXAgPSBmYWxzZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFBLX0RvdERvdDogeworICAgICAgLy8gT25seSBwdXNoIGEgIi4uIiBlbGVtZW50IGlmIHRoZXJl
IGFyZSBubyBlbGVtZW50cyBwcmVjZWRpbmcgdGhlICIuLiIsCisgICAgICAvLyBvciBpZiB0aGUg
cHJlY2VkaW5nIGVsZW1lbnQgaXMgaXRzZWxmICIuLiIuCisgICAgICBhdXRvIExhc3RLaW5kID0g
TGFzdFBhcnRLaW5kKCk7CisgICAgICBpZiAoTGFzdEtpbmQgPT0gUEtfRmlsZW5hbWUpIHsKKyAg
ICAgICAgTmV3UGF0aFNpemUgLT0gUGFydHMuYmFjaygpLmZpcnN0LnNpemUoKTsKKyAgICAgICAg
UGFydHMucG9wX2JhY2soKTsKKyAgICAgIH0gZWxzZSBpZiAoTGFzdEtpbmQgIT0gUEtfUm9vdFNl
cCkKKyAgICAgICAgQWRkUGFydChQS19Eb3REb3QsICIuLiIpOworICAgICAgTWF5YmVOZWVkVHJh
aWxpbmdTZXAgPSBMYXN0S2luZCA9PSBQS19GaWxlbmFtZTsKKyAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBLX0RvdDoKKyAgICBjYXNlIFBLX1RyYWlsaW5nU2VwOiB7CisgICAgICBNYXli
ZU5lZWRUcmFpbGluZ1NlcCA9IHRydWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
S19Ob25lOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0KKyAgfQorICAvLyBb
ZnMucGF0aC5nZW5lcmljXXA2Ljg6IElmIHRoZSBwYXRoIGlzIGVtcHR5LCBhZGQgYSBkb3QuCisg
IGlmIChQYXJ0cy5lbXB0eSgpKQorICAgIHJldHVybiAiLiI7CisKKyAgLy8gW2ZzLnBhdGguZ2Vu
ZXJpY11wNi43OiBJZiB0aGUgbGFzdCBmaWxlbmFtZSBpcyBkb3QtZG90LCByZW1vdmUgYW55Cisg
IC8vIHRyYWlsaW5nIGRpcmVjdG9yeS1zZXBhcmF0b3IuCisgIGJvb2wgTmVlZFRyYWlsaW5nU2Vw
ID0gTWF5YmVOZWVkVHJhaWxpbmdTZXAgJiYgTGFzdFBhcnRLaW5kKCkgPT0gUEtfRmlsZW5hbWU7
CisKKyAgcGF0aCBSZXN1bHQ7CisgIFJlc3VsdC5fX3BuXy5yZXNlcnZlKFBhcnRzLnNpemUoKSAr
IE5ld1BhdGhTaXplICsgTmVlZFRyYWlsaW5nU2VwKTsKKyAgZm9yIChhdXRvJiBQSyA6IFBhcnRz
KQorICAgIFJlc3VsdCAvPSBQSy5maXJzdDsKKworICBpZiAoTmVlZFRyYWlsaW5nU2VwKQorICAg
IFJlc3VsdCAvPSAiIjsKKworICByZXR1cm4gUmVzdWx0OworfQorCitzdGF0aWMgaW50IERldGVy
bWluZUxleGljYWxFbGVtZW50Q291bnQoUGF0aFBhcnNlciBQUCkgeworICBpbnQgQ291bnQgPSAw
OworICBmb3IgKDsgUFA7ICsrUFApIHsKKyAgICBhdXRvIEVsZW0gPSAqUFA7CisgICAgaWYgKEVs
ZW0gPT0gIi4uIikKKyAgICAgIC0tQ291bnQ7CisgICAgZWxzZSBpZiAoRWxlbSAhPSAiLiIpCisg
ICAgICArK0NvdW50OworICB9CisgIHJldHVybiBDb3VudDsKK30KKworcGF0aCBwYXRoOjpsZXhp
Y2FsbHlfcmVsYXRpdmUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QgeworICB7IC8vIHBlcmZvcm0g
cm9vdC1uYW1lL3Jvb3QtZGlyZWN0b3J5IG1pc21hdGNoIGNoZWNrcworICAgIGF1dG8gUFAgPSBQ
YXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgYXV0byBQUEJhc2UgPSBQYXRoUGFy
c2VyOjpDcmVhdGVCZWdpbihiYXNlLl9fcG5fKTsKKyAgICBhdXRvIENoZWNrSXRlck1pc21hdGNo
QXRCYXNlID0gWyZdKCkgeworICAgICAgcmV0dXJuIFBQLlN0YXRlICE9IFBQQmFzZS5TdGF0ZSAm
JgorICAgICAgICAgICAgIChQUC5pblJvb3RQYXRoKCkgfHwgUFBCYXNlLmluUm9vdFBhdGgoKSk7
CisgICAgfTsKKyAgICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSAm
JgorICAgICAgICBQUEJhc2UuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkgewor
ICAgICAgaWYgKCpQUCAhPSAqUFBCYXNlKQorICAgICAgICByZXR1cm4ge307CisgICAgfSBlbHNl
IGlmIChDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSgpKQorICAgICAgcmV0dXJuIHt9OworCisgICAg
aWYgKFBQLmluUm9vdFBhdGgoKSkKKyAgICAgICsrUFA7CisgICAgaWYgKFBQQmFzZS5pblJvb3RQ
YXRoKCkpCisgICAgICArK1BQQmFzZTsKKyAgICBpZiAoQ2hlY2tJdGVyTWlzbWF0Y2hBdEJhc2Uo
KSkKKyAgICAgIHJldHVybiB7fTsKKyAgfQorCisgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc21hdGNo
aW5nIGVsZW1lbnQKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsK
KyAgYXV0byBQUEJhc2UgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihiYXNlLl9fcG5fKTsKKyAg
d2hpbGUgKFBQICYmIFBQQmFzZSAmJiBQUC5TdGF0ZSA9PSBQUEJhc2UuU3RhdGUgJiYgKlBQID09
ICpQUEJhc2UpIHsKKyAgICArK1BQOworICAgICsrUFBCYXNlOworICB9CisKKyAgLy8gSWYgdGhl
cmUgaXMgbm8gbWlzbWF0Y2gsIHJldHVybiAiLiIuCisgIGlmICghUFAgJiYgIVBQQmFzZSkKKyAg
ICByZXR1cm4gIi4iOworCisgIC8vIE90aGVyd2lzZSwgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMsICduJywgd2hpY2ggYXJlIG5vdCBkb3Qgb3IKKyAgLy8gZG90LWRvdCBtaW51cyB0
aGUgbnVtYmVyIG9mIGRvdC1kb3QgZWxlbWVudHMuCisgIGludCBFbGVtQ291bnQgPSBEZXRlcm1p
bmVMZXhpY2FsRWxlbWVudENvdW50KFBQQmFzZSk7CisgIGlmIChFbGVtQ291bnQgPCAwKQorICAg
IHJldHVybiB7fTsKKworICAvLyByZXR1cm4gYSBwYXRoIGNvbnN0cnVjdGVkIHdpdGggJ24nIGRv
dC1kb3QgZWxlbWVudHMsIGZvbGxvd2VkIGJ5IHRoZSB0aGUKKyAgLy8gZWxlbWVudHMgb2YgJyp0
aGlzJyBhZnRlciB0aGUgbWlzbWF0Y2guCisgIHBhdGggUmVzdWx0OworICAvLyBGSVhNRTogUmVz
ZXJ2ZSBlbm91Z2ggcm9vbSBpbiBSZXN1bHQgdGhhdCBpdCB3b24ndCBoYXZlIHRvIHJlLWFsbG9j
YXRlLgorICB3aGlsZSAoRWxlbUNvdW50LS0pCisgICAgUmVzdWx0IC89ICIuLiI7CisgIGZvciAo
OyBQUDsgKytQUCkKKyAgICBSZXN1bHQgLz0gKlBQOworICByZXR1cm4gUmVzdWx0OworfQorCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmNvbXBhcmlzb25zCitpbnQgcGF0aDo6X19jb21w
YXJlKHN0cmluZ192aWV3X3QgX19zKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpD
cmVhdGVCZWdpbihfX3BuXyk7CisgIGF1dG8gUFAyID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4o
X19zKTsKKyAgd2hpbGUgKFBQICYmIFBQMikgeworICAgIGludCByZXMgPSAoKlBQKS5jb21wYXJl
KCpQUDIpOworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgIHJldHVybiByZXM7CisgICAgKytQUDsK
KyAgICArK1BQMjsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUFAyLlN0YXRlICYmICFQUCkKKyAg
ICByZXR1cm4gMDsKKyAgaWYgKCFQUCkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiAxOworfQor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLm5vbm1lbWJlcnMKK3NpemVfdCBoYXNoX3Zh
bHVlKGNvbnN0IHBhdGgmIF9fcCkgbm9leGNlcHQgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6
Q3JlYXRlQmVnaW4oX19wLm5hdGl2ZSgpKTsKKyAgc2l6ZV90IGhhc2hfdmFsdWUgPSAwOworICBo
YXNoPHN0cmluZ192aWV3X3Q+IGhhc2hlcjsKKyAgd2hpbGUgKFBQKSB7CisgICAgaGFzaF92YWx1
ZSA9IF9faGFzaF9jb21iaW5lKGhhc2hfdmFsdWUsIGhhc2hlcigqUFApKTsKKyAgICArK1BQOwor
ICB9CisgIHJldHVybiBoYXNoX3ZhbHVlOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBw
YXRoLml0cgorcGF0aDo6aXRlcmF0b3IgcGF0aDo6YmVnaW4oKSBjb25zdCB7CisgIGF1dG8gUFAg
PSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGl0ZXJhdG9yIGl0OworICBpdC5f
X3BhdGhfcHRyXyA9IHRoaXM7CisgIGl0Ll9fc3RhdGVfID0gc3RhdGljX2Nhc3Q8cGF0aDo6aXRl
cmF0b3I6Ol9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBpdC5fX2VudHJ5XyA9IFBQLlJhd0Vu
dHJ5OworICBpdC5fX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFApOworICByZXR1cm4g
aXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yIHBhdGg6OmVuZCgpIGNvbnN0IHsKKyAgaXRlcmF0b3Ig
aXR7fTsKKyAgaXQuX19zdGF0ZV8gPSBwYXRoOjppdGVyYXRvcjo6X0F0RW5kOworICBpdC5fX3Bh
dGhfcHRyXyA9IHRoaXM7CisgIHJldHVybiBpdDsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6
Oml0ZXJhdG9yOjpfX2luY3JlbWVudCgpIHsKKyAgUGF0aFBhcnNlciBQUChfX3BhdGhfcHRyXy0+
bmF0aXZlKCksIF9fZW50cnlfLCBfX3N0YXRlXyk7CisgICsrUFA7CisgIF9fc3RhdGVfID0gc3Rh
dGljX2Nhc3Q8X1BhcnNlclN0YXRlPihQUC5TdGF0ZSk7CisgIF9fZW50cnlfID0gUFAuUmF3RW50
cnk7CisgIF9fc3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVybiAqdGhp
czsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpfX2RlY3JlbWVudCgpIHsK
KyAgUGF0aFBhcnNlciBQUChfX3BhdGhfcHRyXy0+bmF0aXZlKCksIF9fZW50cnlfLCBfX3N0YXRl
Xyk7CisgIC0tUFA7CisgIF9fc3RhdGVfID0gc3RhdGljX2Nhc3Q8X1BhcnNlclN0YXRlPihQUC5T
dGF0ZSk7CisgIF9fZW50cnlfID0gUFAuUmF3RW50cnk7CisgIF9fc3Rhc2hlZF9lbGVtXy5fX2Fz
c2lnbl92aWV3KCpQUCk7CisgIHJldHVybiAqdGhpczsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZW50cnkgZGVmaW5p
dGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmbmRlZiBfTElCQ1BQX1dJTjMyQVBJ
CitlcnJvcl9jb2RlIGRpcmVjdG9yeV9lbnRyeTo6X19kb19yZWZyZXNoKCkgbm9leGNlcHQgewor
ICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgZXJyb3JfY29kZSBmYWlsdXJlX2VjOworCisgIFN0YXRU
IGZ1bGxfc3Q7CisgIGZpbGVfc3RhdHVzIHN0ID0gZGV0YWlsOjpwb3NpeF9sc3RhdChfX3BfLCBm
dWxsX3N0LCAmZmFpbHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkgeworICAgIF9f
ZGF0YV8uX19yZXNldCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOworICB9CisKKyAgaWYgKCFf
VlNURF9GUzo6ZXhpc3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxpbmsoc3QpKSB7CisgICAg
X19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaE5vblN5bWxp
bms7CisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25f
c3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7IC8vIHdlIGhhdmUgYSBz
eW1saW5rCisgICAgX19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICAg
IC8vIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBlbnRpdHkuCisgICAgLy8g
SWdub3JlIGVycm9ycyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdhbnQgZXJyb3JzIHJlZ2Fy
ZGluZyBzeW1saW5rCisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBvcnRlZCB0byB0aGUgdXNl
ci4KKyAgICBlcnJvcl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBkZXRhaWw6OnBvc2l4X3N0
YXQoX19wXywgZnVsbF9zdCwgJmlnbm9yZWRfZWMpOworCisgICAgX19kYXRhXy5fX3R5cGVfID0g
c3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25z
KCk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbGluaywgdGhlbiBvbmx5
IHBhcnRpYWxseSBwb3B1bGF0ZSB0aGUKKyAgICAvLyBjYWNoZS4KKyAgICBpZiAoIXN0YXR1c19r
bm93bihzdCkpIHsKKyAgICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRy
eTo6X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDsKKyAgICAgIHJldHVybiBlcnJvcl9jb2Rle307
CisgICAgfQorICAgIC8vIE90aGVyd2lzZSwgd2UgcmVzb2x2ZWQgdGhlIGxpbmssIHBvdGVudGlh
bGx5IGFzIG5vdCBleGlzdGluZy4KKyAgICAvLyBUaGF0J3MgT0suCisgICAgX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaFN5bWxpbms7CisgIH0KKworICBp
ZiAoX1ZTVERfRlM6OmlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAgX19kYXRhXy5fX3NpemVfID0g
c3RhdGljX2Nhc3Q8dWludG1heF90PihmdWxsX3N0LnN0X3NpemUpOworCisgIGlmIChfVlNURF9G
Uzo6ZXhpc3RzKHN0KSkgeworICAgIF9fZGF0YV8uX19ubGlua18gPSBzdGF0aWNfY2FzdDx1aW50
bWF4X3Q+KGZ1bGxfc3Quc3RfbmxpbmspOworCisgICAgLy8gQXR0ZW1wdCB0byBleHRyYWN0IHRo
ZSBtdGltZSwgYW5kIGZhaWwgaWYgaXQncyBub3QgcmVwcmVzZW50YWJsZSB1c2luZworICAgIC8v
IGZpbGVfdGltZV90eXBlLiBGb3Igbm93IHdlIGlnbm9yZSB0aGUgZXJyb3IsIGFzIHdlJ2xsIHJl
cG9ydCBpdCB3aGVuCisgICAgLy8gdGhlIHZhbHVlIGlzIGFjdHVhbGx5IHVzZWQuCisgICAgZXJy
b3JfY29kZSBpZ25vcmVkX2VjOworICAgIF9fZGF0YV8uX193cml0ZV90aW1lXyA9CisgICAgICAg
IF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUoX19wXywgZnVsbF9zdCwgJmlnbm9yZWRfZWMpOwor
ICB9CisKKyAgcmV0dXJuIGZhaWx1cmVfZWM7Cit9CisjZWxzZQorZXJyb3JfY29kZSBkaXJlY3Rv
cnlfZW50cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsKKyAgX19kYXRhXy5fX3Jlc2V0KCk7
CisgIGVycm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBmaWxlX3N0YXR1cyBzdCA9IF9WU1REX0ZT
OjpzeW1saW5rX3N0YXR1cyhfX3BfLCBmYWlsdXJlX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24o
c3QpKSB7CisgICAgX19kYXRhXy5fX3Jlc2V0KCk7CisgICAgcmV0dXJuIGZhaWx1cmVfZWM7Cisg
IH0KKworICBpZiAoIV9WU1REX0ZTOjpleGlzdHMoc3QpIHx8ICFfVlNURF9GUzo6aXNfc3ltbGlu
ayhzdCkpIHsKKyAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9S
ZWZyZXNoTm9uU3ltbGluazsKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7CisgICAg
X19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgfSBlbHNlIHsg
Ly8gd2UgaGF2ZSBhIHN5bWxpbmsKKyAgICBfX2RhdGFfLl9fc3ltX3Blcm1zXyA9IHN0LnBlcm1p
c3Npb25zKCk7CisgICAgLy8gR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2VkIGVu
dGl0eS4KKyAgICAvLyBJZ25vcmUgZXJyb3JzIGZyb20gc3RhdCwgc2luY2Ugd2UgZG9uJ3Qgd2Fu
dCBlcnJvcnMgcmVnYXJkaW5nIHN5bWxpbmsKKyAgICAvLyByZXNvbHV0aW9uIHRvIGJlIHJlcG9y
dGVkIHRvIHRoZSB1c2VyLgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBzdCA9IF9W
U1REX0ZTOjpzdGF0dXMoX19wXywgaWdub3JlZF9lYyk7CisKKyAgICBfX2RhdGFfLl9fdHlwZV8g
PSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lv
bnMoKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaW5rLCB0aGVuIG9u
bHkgcGFydGlhbGx5IHBvcHVsYXRlIHRoZQorICAgIC8vIGNhY2hlLgorICAgIGlmICghc3RhdHVz
X2tub3duKHN0KSkgeworICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2Vu
dHJ5OjpfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOworICAgICAgcmV0dXJuIGVycm9yX2NvZGV7
fTsKKyAgICB9CisgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5Ojpf
UmVmcmVzaFN5bWxpbms7CisgIH0KKworICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgYnJv
a2VuLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9ubHkgYSBwbGFjZWhvbGRlci4KKyAgLy8gV2Ug
bmVlZCB0byBjYWNoZSBsYXN0X3dyaXRlX3RpbWUsIGZpbGVfc2l6ZSwgYW5kIGhhcmRfbGlua19j
b3VudCBoZXJlIGJlZm9yZQorICAvLyB0aGUgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgd29ya3Mu
CisKKyAgcmV0dXJuIGZhaWx1cmVfZWM7Cit9CisjZW5kaWYKKworX0xJQkNQUF9FTkRfTkFNRVNQ
QUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgLS0g
Ki8KKworI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDE1MDAK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lz
dGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI3MDMgQEAKKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZp
bGVzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAg
ICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8v
IFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIHRoZSBVbml2ZXJz
aXR5IG9mIElsbGlub2lzIE9wZW4KKy8vIFNvdXJjZSBMaWNlbnNlcy4gU2VlIExJQ0VOU0UuVFhU
IGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZiBfX2hhc19p
bmNsdWRlKDxmaWxlc3lzdGVtPikKKyNpbmNsdWRlIDxmaWxlc3lzdGVtPgorI2Vsc2UKKworLyog
SW1wb3J0cyBhIGNvcHkgb2YgPGZpbGVzeXN0ZW0+IGZyb20gcjM0MzgzOCBvZiB0aGUgbGliYysr
IHByb2plY3QuIFRoaXMKKyAgIGlzIG9ubHkgbmVlZGVkIHVudGlsIG1hY09TIDEwLjE0IGlzIG5v
IGxvbmdlciBzdXBwb3J0ZWQgYXQgd2hpY2ggcG9pbnQgYWxsCisgICBwb3J0cyB3aWxsIHN1cHBv
cnQgPGZpbGVzeXN0ZW0+IGRpcmVjdGx5LgorKi8KKworCisjaWZuZGVmIF9MSUJDUFBfRklMRVNZ
U1RFTQorI2RlZmluZSBfTElCQ1BQX0ZJTEVTWVNURU0KKy8qCisgICAgZmlsZXN5c3RlbSBzeW5v
cHNpcworCisgICAgbmFtZXNwYWNlIHN0ZCB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKworICAg
IGNsYXNzIHBhdGg7CisKKyAgICB2b2lkIHN3YXAocGF0aCYgbGhzLCBwYXRoJiByaHMpIG5vZXhj
ZXB0OworICAgIHNpemVfdCBoYXNoX3ZhbHVlKGNvbnN0IHBhdGgmIHApIG5vZXhjZXB0OworCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4
Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiBy
aHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBwYXRoJiBsaHMsIGNvbnN0
IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhdGgmIGxo
cywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPiAoY29uc3Qg
cGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisKKyAgICBwYXRo
IG9wZXJhdG9yLyAoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpOworCisgICAgLy8g
ZnMucGF0aC5pbyBvcGVyYXRvcnMgYXJlIGZyaWVuZHMgb2YgcGF0aC4KKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cz4KKyAgICBmcmllbmQgYmFzaWNfb3N0cmVhbTxjaGFy
VCwgdHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhclQsIHRyYWl0cz4m
IG9zLCBjb25zdCBwYXRoJiBwKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzPgorICAgIGZyaWVuZCBiYXNpY19pc3RyZWFtPGNoYXJULCB0cmFpdHM+JgorICAgIG9w
ZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYgaXMsIHBhdGgmIHApOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFNvdXJjZT4KKyAgICAgIHBhdGggdThwYXRoKGNvbnN0IFNvdXJj
ZSYgc291cmNlKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KKyAgICAgIHBh
dGggdThwYXRoKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CisKKyAg
ICBjbGFzcyBmaWxlc3lzdGVtX2Vycm9yOworICAgIGNsYXNzIGRpcmVjdG9yeV9lbnRyeTsKKwor
ICAgIGNsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKKworICAgIC8vIGVuYWJsZSBkaXJlY3Rvcnlf
aXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKKyAgICBkaXJlY3RvcnlfaXRlcmF0
b3IgYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIGRpcmVjdG9y
eV9pdGVyYXRvciBlbmQoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQ7CisKKyAg
ICBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworCisgICAgLy8gZW5hYmxlIHJl
Y3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKKyAg
ICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIGJlZ2luKHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3IgaXRlcikgbm9leGNlcHQ7CisgICAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
ciBlbmQoY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisg
ICAgY2xhc3MgZmlsZV9zdGF0dXM7CisKKyAgICBzdHJ1Y3Qgc3BhY2VfaW5mbworICAgIHsKKyAg
ICAgIHVpbnRtYXhfdCBjYXBhY2l0eTsKKyAgICAgIHVpbnRtYXhfdCBmcmVlOworICAgICAgdWlu
dG1heF90IGF2YWlsYWJsZTsKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBmaWxlX3R5cGU7Cisg
ICAgZW51bSBjbGFzcyBwZXJtczsKKyAgICBlbnVtIGNsYXNzIHBlcm1fb3B0aW9uczsKKyAgICBl
bnVtIGNsYXNzIGNvcHlfb3B0aW9uczsKKyAgICBlbnVtIGNsYXNzIGRpcmVjdG9yeV9vcHRpb25z
OworCisgICAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8dHJpdmlhbC1jbG9jaz4gIGZpbGVf
dGltZV90eXBlOworCisgICAgLy8gb3BlcmF0aW9uYWwgZnVuY3Rpb25zCisKKyAgICBwYXRoIGFi
c29sdXRlKGNvbnN0IHBhdGgmIHApOworICAgIHBhdGggYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSAmZWMpOworCisgICAgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgcCk7Cisg
ICAgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAg
dm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvKTsKKyAgICB2b2lkIGNv
cHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUmIGVjKTsKKyAg
ICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9u
cyBvcHRpb25zKTsKKyAgICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYg
dG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IGVjKTsKKworICAgIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgm
IHRvKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0
bywgZXJyb3JfY29kZSYgZWMpOworICAgIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20s
IGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9uKTsKKyAgICBib29sIGNvcHlfZmls
ZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHZvaWQg
Y29weV9zeW1saW5rKGNvbnN0IHBhdGgmIGV4aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIG5l
d19zeW1saW5rKTsKKyAgICB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19z
eW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVj
dG9yaWVzKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0
IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShj
b25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNv
bnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGF0dHJpYnV0ZXMpOworICAgIGJvb2wgY3JlYXRlX2Rp
cmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAg
IHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRo
JiBuZXdfc3ltbGluayk7CisgICAgdm9pZCBjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3Qg
cGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdm9p
ZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfaGFyZF9s
aW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBh
dGgmIG5ld19oYXJkX2xpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdm9pZCBjcmVhdGVfc3ltbGluayhjb25zdCBw
YXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX3N5bWxp
bmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBwYXRo
IGN1cnJlbnRfcGF0aCgpOworICAgIHBhdGggY3VycmVudF9wYXRoKGVycm9yX2NvZGUmIGVjKTsK
KyAgICB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwKTsKKyAgICB2b2lkIGN1cnJlbnRf
cGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29s
IGV4aXN0cyhmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGV4aXN0cyhjb25zdCBw
YXRoJiBwKTsKKyAgICBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisKKyAgICBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0IHBh
dGgmIHAyKTsKKyAgICBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgm
IHAyLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB1aW50bWF4X3QgICAgZmlsZV9z
aXplKGNvbnN0IHBhdGgmIHApOworICAgIHVpbnRtYXhfdCAgICBmaWxlX3NpemUoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIGhhcmRf
bGlua19jb3VudChjb25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgaGFyZF9saW5rX2Nv
dW50KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wg
aXNfYmxvY2tfZmlsZShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2Jsb2Nr
X2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgm
IHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2Zp
bGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShj
b25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfZGlyZWN0b3J5KGZpbGVf
c3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAp
OworICAgIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBu
b2V4Y2VwdDsKKworICAgIGJvb2wgaXNfZW1wdHkoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBp
c19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBi
b29sIGlzX2ZpZm8oZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19maWZvKGNv
bnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfZmlmbyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
JiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX290aGVyKGZpbGVfc3RhdHVzIHMpIG5vZXhj
ZXB0OworICAgIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19vdGhl
cihjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlz
X3JlZ3VsYXJfZmlsZShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX3JlZ3Vs
YXJfZmlsZShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX3NvY2tldChm
aWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBw
KTsKKyAgICBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICBib29sIGlzX3N5bWxpbmsoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7Cisg
ICAgYm9vbCBpc19zeW1saW5rKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfc3ltbGluayhj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBmaWxlX3RpbWVf
dHlwZSAgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHApOworICAgIGZpbGVfdGltZV90eXBl
ICBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworICAgIHZvaWQgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBl
IG5ld190aW1lKTsKKyAgICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxl
X3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0
aCYgcCwgcGVybXMgcHJtcywKKyAgICAgICAgICAgICAgICAgICAgIHBlcm1fb3B0aW9ucyBvcHRz
PXBlcm1fb3B0aW9uczo6cmVwbGFjZSk7CisgICAgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRo
JiBwLCBwZXJtcyBwcm1zLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisgICAgdm9pZCBwZXJt
aXNzaW9ucyhjb25zdCBwYXRoJiBwLCBwZXJtcyBwcm1zLCBwZXJtX29wdGlvbnMgb3B0cywKKyAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggcHJveGltYXRl
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKyAgICBwYXRoIHByb3hpbWF0ZShjb25z
dCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlID0gY3VycmVudF9wYXRoKCkpOworICAgIHBhdGgg
cHJveGltYXRlKGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2UsIGVycm9yX2NvZGUgJmVj
KTsKKworICAgIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHApOworICAgIHBhdGggcmVh
ZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggcmVs
YXRpdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworICAgIHBhdGggcmVsYXRpdmUo
Y29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZT1jdXJyZW50X3BhdGgoKSk7CisgICAgcGF0
aCByZWxhdGl2ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlLCBlcnJvcl9jb2RlJiBl
Yyk7CisKKyAgICBib29sIHJlbW92ZShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIHJlbW92ZShj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB1aW50bWF4X3Qg
ICAgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgcmVtb3ZlX2Fs
bChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2b2lkIHJlbmFtZShjb25z
dCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgdm9pZCByZW5hbWUoY29uc3QgcGF0
aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAg
IHZvaWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUpOworICAgIHZv
aWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUsIGVycm9yX2NvZGUm
IGVjKSBub2V4Y2VwdDsKKworICAgIHNwYWNlX2luZm8gICBzcGFjZShjb25zdCBwYXRoJiBwKTsK
KyAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgZmlsZV9zdGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwKTsKKyAgICBm
aWxlX3N0YXR1cyAgc3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2Vw
dDsKKworICAgIGJvb2wgc3RhdHVzX2tub3duKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworCisg
ICAgZmlsZV9zdGF0dXMgIHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHApOworICAgIGZpbGVf
c3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgoKTsKKyAgICBwYXRoIHRlbXBf
ZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSYgZWMpOworCisgICAgcGF0aCB3ZWFrbHlfY2Fub25p
Y2FsKHBhdGggY29uc3QmIHApOworICAgIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0
JiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKworfSB9ICAvLyBuYW1lc3BhY2VzIHN0ZDo6ZmlsZXN5
c3RlbQorCisqLworCisjaW5jbHVkZSA8X19jb25maWc+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNp
bmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxpdGVyYXRvcj4K
KyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPG1lbW9yeT4K
KyNpbmNsdWRlIDxzdGFjaz4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c3lzdGVtX2Vy
cm9yPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8aW9tYW5pcD4gLy8gZm9yIHF1b3Rl
ZAorI2luY2x1ZGUgPHN0cmluZ192aWV3PgorLyogI2luY2x1ZGUgPHZlcnNpb24+ICovCisKKyNp
bmNsdWRlIDxfX2RlYnVnPgorCisjaWYgX0xJQkNQUF9TVERfVkVSID49IDE3CisjZGVmaW5lIF9M
SUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0gXAorICBfTElCQ1BQX0JFR0lOX05BTUVT
UEFDRV9TVEQgaW5saW5lIG5hbWVzcGFjZSBfX2ZzIHsgbmFtZXNwYWNlIGZpbGVzeXN0ZW0gewor
I2Vsc2UKKyNkZWZpbmUgX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTSBcCisgIF9M
SUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURCBuYW1lc3BhY2UgX19mcyB7IG5hbWVzcGFjZSBmaWxl
c3lzdGVtIHsKKyNlbmRpZgorCisjZGVmaW5lIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lT
VEVNIFwKKyAgX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NURCB9IH0KKworI2RlZmluZSBfVlNURF9G
UyBfVlNURDo6X19mczo6ZmlsZXN5c3RlbQorCisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9f
UFJBR01BX1NZU1RFTV9IRUFERVIpCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYK
KworX0xJQkNQUF9QVVNIX01BQ1JPUworI2luY2x1ZGUgPF9fdW5kZWZfbWFjcm9zPgorCisjaWZu
ZGVmIF9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lT
VEVNCisKK3N0cnVjdCBfRmlsZXN5c3RlbUNsb2NrIHsKKyNpZiAhZGVmaW5lZChfTElCQ1BQX0hB
U19OT19JTlQxMjgpCisgIHR5cGVkZWYgX19pbnQxMjhfdCByZXA7CisgIHR5cGVkZWYgbmFubyBw
ZXJpb2Q7CisjZWxzZQorICB0eXBlZGVmIGxvbmcgbG9uZyByZXA7CisgIHR5cGVkZWYgbmFubyBw
ZXJpb2Q7CisjZW5kaWYKKworICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwLCBwZXJpb2Q+
IGR1cmF0aW9uOworICB0eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDxfRmlsZXN5c3RlbUNsb2Nr
PiB0aW1lX3BvaW50OworCisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBj
b25zdCBib29sIGlzX3N0ZWFkeSA9IGZhbHNlOworCisgIF9MSUJDUFBfRlVOQ19WSVMgc3RhdGlj
IHRpbWVfcG9pbnQgbm93KCkgbm9leGNlcHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBzdGF0aWMgdGltZV90IHRvX3RpbWVfdChjb25zdCB0aW1lX3BvaW50JiBfX3QpIG5vZXhj
ZXB0IHsKKyAgICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisgICAgcmV0
dXJuIHRpbWVfdCgKKyAgICAgICAgY2hyb25vOjpkdXJhdGlvbl9jYXN0PF9fc2Vjcz4oX190LnRp
bWVfc2luY2VfZXBvY2goKSkuY291bnQoKSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHN0YXRpYyB0aW1lX3BvaW50IGZyb21fdGltZV90KHRpbWVfdCBfX3QpIG5vZXhj
ZXB0IHsKKyAgICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisgICAgcmV0
dXJuIHRpbWVfcG9pbnQoX19zZWNzKF9fdCkpOworICB9Cit9OworCit0eXBlZGVmIGNocm9ubzo6
dGltZV9wb2ludDxfRmlsZXN5c3RlbUNsb2NrPiBmaWxlX3RpbWVfdHlwZTsKKworc3RydWN0IF9M
SUJDUFBfVFlQRV9WSVMgc3BhY2VfaW5mbyB7CisgIHVpbnRtYXhfdCBjYXBhY2l0eTsKKyAgdWlu
dG1heF90IGZyZWU7CisgIHVpbnRtYXhfdCBhdmFpbGFibGU7Cit9OworCitlbnVtIGNsYXNzIF9M
SUJDUFBfRU5VTV9WSVMgZmlsZV90eXBlIDogc2lnbmVkIGNoYXIgeworICBub25lID0gMCwKKyAg
bm90X2ZvdW5kID0gLTEsCisgIHJlZ3VsYXIgPSAxLAorICBkaXJlY3RvcnkgPSAyLAorICBzeW1s
aW5rID0gMywKKyAgYmxvY2sgPSA0LAorICBjaGFyYWN0ZXIgPSA1LAorICBmaWZvID0gNiwKKyAg
c29ja2V0ID0gNywKKyAgdW5rbm93biA9IDgKK307CisKK2VudW0gY2xhc3MgX0xJQkNQUF9FTlVN
X1ZJUyBwZXJtcyA6IHVuc2lnbmVkIHsKKyAgbm9uZSA9IDAsCisKKyAgb3duZXJfcmVhZCA9IDA0
MDAsCisgIG93bmVyX3dyaXRlID0gMDIwMCwKKyAgb3duZXJfZXhlYyA9IDAxMDAsCisgIG93bmVy
X2FsbCA9IDA3MDAsCisKKyAgZ3JvdXBfcmVhZCA9IDA0MCwKKyAgZ3JvdXBfd3JpdGUgPSAwMjAs
CisgIGdyb3VwX2V4ZWMgPSAwMTAsCisgIGdyb3VwX2FsbCA9IDA3MCwKKworICBvdGhlcnNfcmVh
ZCA9IDA0LAorICBvdGhlcnNfd3JpdGUgPSAwMiwKKyAgb3RoZXJzX2V4ZWMgPSAwMSwKKyAgb3Ro
ZXJzX2FsbCA9IDA3LAorCisgIGFsbCA9IDA3NzcsCisKKyAgc2V0X3VpZCA9IDA0MDAwLAorICBz
ZXRfZ2lkID0gMDIwMDAsCisgIHN0aWNreV9iaXQgPSAwMTAwMCwKKyAgbWFzayA9IDA3Nzc3LAor
ICB1bmtub3duID0gMHhGRkZGLAorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5s
aW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvciYocGVybXMgX0xIUywgcGVybXMgX1JIUykgewor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSAm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMp
KTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJt
cyBvcGVyYXRvcnwocGVybXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nh
c3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcl4ocGVybXMg
X0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRpY19j
YXN0PHVuc2lnbmVkPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcn4ocGVybXMgX0xIUykgeworICByZXR1cm4g
c3RhdGljX2Nhc3Q8cGVybXM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykpOworfQorCitf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yJj0ocGVybXMm
IF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsgfQorCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yfD0ocGVybXMmIF9M
SFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsgfQorCitfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yXj0ocGVybXMmIF9MSFMs
IHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsgfQorCitlbnVtIGNsYXNz
IF9MSUJDUFBfRU5VTV9WSVMgcGVybV9vcHRpb25zIDogdW5zaWduZWQgY2hhciB7CisgIHJlcGxh
Y2UgPSAxLAorICBhZGQgPSAyLAorICByZW1vdmUgPSA0LAorICBub2ZvbGxvdyA9IDgKK307CisK
K19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25z
IG9wZXJhdG9yJihwZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0
dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMp
ICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0
ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3J8KHBlcm1fb3B0aW9ucyBfTEhTLCBwZXJtX29wdGlv
bnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcl4ocGVybV9vcHRpb25z
IF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtX29w
dGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJh
dG9yfihwZXJtX29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRp
b25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQoraW5saW5lIHBlcm1fb3B0aW9ucyYgb3BlcmF0b3ImPShwZXJtX29wdGlvbnMm
IF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7
Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9w
ZXJhdG9yfD0ocGVybV9vcHRpb25zJiBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1
cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitp
bmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRvcl49KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9v
cHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworZW51bSBj
bGFzcyBfTElCQ1BQX0VOVU1fVklTIGNvcHlfb3B0aW9ucyA6IHVuc2lnbmVkIHNob3J0IHsKKyAg
bm9uZSA9IDAsCisgIHNraXBfZXhpc3RpbmcgPSAxLAorICBvdmVyd3JpdGVfZXhpc3RpbmcgPSAy
LAorICB1cGRhdGVfZXhpc3RpbmcgPSA0LAorICByZWN1cnNpdmUgPSA4LAorICBjb3B5X3N5bWxp
bmtzID0gMTYsCisgIHNraXBfc3ltbGlua3MgPSAzMiwKKyAgZGlyZWN0b3JpZXNfb25seSA9IDY0
LAorICBjcmVhdGVfc3ltbGlua3MgPSAxMjgsCisgIGNyZWF0ZV9oYXJkX2xpbmtzID0gMjU2LAor
ICBfX2luX3JlY3Vyc2l2ZV9jb3B5ID0gNTEyLAorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3ImKGNvcHlfb3B0aW9u
cyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9v
cHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykgJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX1JIUykp
OworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlf
b3B0aW9ucyBvcGVyYXRvcnwoY29weV9vcHRpb25zIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7
CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PihfTEhTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yXihjb3B5X29wdGlv
bnMgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlf
b3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpIF4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMp
KTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5
X29wdGlvbnMgb3BlcmF0b3J+KGNvcHlfb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb3B5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykpOwor
fQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVy
YXRvciY9KGNvcHlfb3B0aW9ucyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJu
IF9MSFMgPSBfTEhTICYgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5s
aW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3J8PShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0
aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb3B5X29wdGlvbnMmIG9wZXJhdG9yXj0oY29weV9v
cHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMg
XiBfUkhTOworfQorCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZGlyZWN0b3J5X29wdGlv
bnMgOiB1bnNpZ25lZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisgIGZvbGxvd19kaXJlY3Rvcnlfc3lt
bGluayA9IDEsCisgIHNraXBfcGVybWlzc2lvbl9kZW5pZWQgPSAyCit9OworCitfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJh
dG9yJihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9M
SFMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
K2lubGluZSBjb25zdGV4cHIgZGlyZWN0b3J5X29wdGlvbnMgb3BlcmF0b3J8KGRpcmVjdG9yeV9v
cHRpb25zIF9MSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rv
cnlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhw
ciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvcl4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRp
b25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX1JIUykpOworfQorCitf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRp
b25zIG9wZXJhdG9yfihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNf
Y2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMp
KTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9yeV9vcHRp
b25zJiBvcGVyYXRvciY9KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJu
IF9MSFMgPSBfTEhTICYgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5s
aW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvcnw9KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhT
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25z
IF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvcl49KGRpcmVj
dG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsK
K30KKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBmaWxlX3N0YXR1cyB7CitwdWJsaWM6CisgIC8v
IGNvbnN0cnVjdG9ycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVz
KCkgbm9leGNlcHQgOiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vbmUpIHt9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgZmlsZV9zdGF0dXMoZmlsZV90eXBlIF9fZnQs
IHBlcm1zIF9fcHJtcyA9IHBlcm1zOjp1bmtub3duKSBub2V4Y2VwdAorICAgICAgOiBfX2Z0Xyhf
X2Z0KSwKKyAgICAgICAgX19wcm1zXyhfX3BybXMpIHt9CisKKyAgZmlsZV9zdGF0dXMoY29uc3Qg
ZmlsZV9zdGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzKGZpbGVfc3Rh
dHVzJiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIH5maWxlX3N0YXR1cygpIHt9CisKKyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShjb25zdCBm
aWxlX3N0YXR1cyYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9y
PShmaWxlX3N0YXR1cyYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgLy8gb2JzZXJ2ZXJzCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90eXBlIHR5cGUoKSBjb25zdCBub2V4
Y2VwdCB7IHJldHVybiBfX2Z0XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
cGVybXMgcGVybWlzc2lvbnMoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BybXNfOyB9CisK
KyAgLy8gbW9kaWZpZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCB0eXBl
KGZpbGVfdHlwZSBfX2Z0KSBub2V4Y2VwdCB7IF9fZnRfID0gX19mdDsgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBwZXJtaXNzaW9ucyhwZXJtcyBfX3ApIG5vZXhjZXB0
IHsgX19wcm1zXyA9IF9fcDsgfQorCitwcml2YXRlOgorICBmaWxlX3R5cGUgX19mdF87CisgIHBl
cm1zIF9fcHJtc187Cit9OworCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGRpcmVjdG9yeV9lbnRy
eTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXIgewor
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOworfTsKK3RlbXBsYXRlIDxjbGFzcyBf
VHA+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNvbnN0IF9UcD4gOiBwdWJsaWMgX19jYW5f
Y29udmVydF9jaGFyPF9UcD4ge307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRf
Y2hhcjxjaGFyPiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcg
X19jaGFyX3R5cGUgPSBjaGFyOworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29udmVy
dF9jaGFyPHdjaGFyX3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1
c2luZyBfX2NoYXJfdHlwZSA9IHdjaGFyX3Q7Cit9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nh
bl9jb252ZXJ0X2NoYXI8Y2hhcjE2X3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOworICB1c2luZyBfX2NoYXJfdHlwZSA9IGNoYXIxNl90OworfTsKK3RlbXBsYXRlIDw+Citz
dHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNoYXIzMl90PiB7CisgIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMzJfdDsKK307CisKK3Rl
bXBsYXRlIDxjbGFzcyBfRUNoYXJUPgordHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRf
Y2hhcjxfRUNoYXJUPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitfX2lzX3NlcGFyYXRvcihfRUNoYXJU
IF9fZSkgeworICByZXR1cm4gX19lID09IF9FQ2hhclQoJy8nKTsKK30KKworc3RydWN0IF9OdWxs
U2VudGluYWwge307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+Cit1c2luZyBfVm9pZCA9IHZvaWQ7
CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzID0gdm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhh
YmxlX3N0cmluZyA6IHB1YmxpYyBmYWxzZV90eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VD
aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorc3RydWN0IF9faXNfcGF0aGFibGVf
c3RyaW5nPAorICAgIGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+LAorICAg
IF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+
ID4KKyAgICA6IHB1YmxpYyBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD4geworICB1c2luZyBf
U3RyID0gYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz47CisgIHVzaW5nIF9C
YXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OworICBzdGF0aWMgX0VDaGFyVCBjb25z
dCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBfX3MpIHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0K
KyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKF9TdHIgY29uc3QmIF9fcykgewor
ICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxlbmd0aCgpOworICB9CisgIHN0YXRpYyBfRUNo
YXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmVt
cHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07CisgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBf
RUNoYXJULCBjbGFzcyBfVHJhaXRzPgorc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAorICAg
IGJhc2ljX3N0cmluZ192aWV3PF9FQ2hhclQsIF9UcmFpdHM+LAorICAgIF9Wb2lkPHR5cGVuYW1l
IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IHB1Ymxp
YyBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD4geworICB1c2luZyBfU3RyID0gYmFzaWNfc3Ry
aW5nX3ZpZXc8X0VDaGFyVCwgX1RyYWl0cz47CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVy
dF9jaGFyPF9FQ2hhclQ+OworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9iZWdpbihf
U3RyIGNvbnN0JiBfX3MpIHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KKyAgc3RhdGljIF9FQ2hhclQg
Y29uc3QqIF9fcmFuZ2VfZW5kKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBfX3MuZGF0
YSgpICsgX19zLmxlbmd0aCgpOworICB9CisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVs
bChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNoYXJUe30g
OiBfX3NbMF07CisgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyBfRFMg
PSB0eXBlbmFtZSBkZWNheTxfU291cmNlPjo6dHlwZSwKKyAgICAgICAgICBjbGFzcyBfVW5xdWFs
UHRyVHlwZSA9CisgICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdDx0eXBlbmFtZSBy
ZW1vdmVfcG9pbnRlcjxfRFM+Ojp0eXBlPjo6dHlwZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJQ
dHIgPSBpc19wb2ludGVyPF9EUz46OnZhbHVlJiYKKyAgICAgICAgICAgICAgX19jYW5fY29udmVy
dF9jaGFyPF9VbnF1YWxQdHJUeXBlPjo6dmFsdWU+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9jaGFy
X2FycmF5IDogZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNz
IF9FQ2hhclQsIGNsYXNzIF9VUHRyPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheTxf
U291cmNlLCBfRUNoYXJUKiwgX1VQdHIsIHRydWU+CisgICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8
dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PF9FQ2hhclQ+Ojp0eXBlPiB7CisgIHVzaW5nIF9CYXNlID0g
X19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT47
CisKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oY29uc3QgX0VDaGFyVCog
X19iKSB7IHJldHVybiBfX2I7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfZW5k
KGNvbnN0IF9FQ2hhclQqIF9fYikgeworICAgIHVzaW5nIF9JdGVyID0gY29uc3QgX0VDaGFyVCo7
CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIF9JdGVyIF9f
ZSA9IF9fYjsKKyAgICBmb3IgKDsgKl9fZSAhPSBfX3NlbnRpbmFsOyArK19fZSkKKyAgICAgIDsK
KyAgICByZXR1cm4gX19lOworICB9CisKKyAgc3RhdGljIF9FQ2hhclQgX19maXJzdF9vcl9udWxs
KGNvbnN0IF9FQ2hhclQqIF9fYikgeyByZXR1cm4gKl9fYjsgfQorfTsKKwordGVtcGxhdGUgPGNs
YXNzIF9JdGVyLCBib29sIF9Jc0l0ID0gX19pc19pbnB1dF9pdGVyYXRvcjxfSXRlcj46OnZhbHVl
LAorICAgICAgICAgIGNsYXNzID0gdm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2l0ZXIgOiBm
YWxzZV90eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CitzdHJ1Y3QgX19pc19wYXRo
YWJsZV9pdGVyPAorICAgIF9JdGVyLCB0cnVlLAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2Nv
bnZlcnRfY2hhcjwKKyAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFs
dWVfdHlwZT46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZT4geworICB1c2luZyBfRUNoYXJU
ID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZTsKKyAgdXNpbmcg
X0Jhc2UgPSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD47CisKKyAgc3RhdGljIF9JdGVyIF9f
cmFuZ2VfYmVnaW4oX0l0ZXIgX19iKSB7IHJldHVybiBfX2I7IH0KKyAgc3RhdGljIF9OdWxsU2Vu
dGluYWwgX19yYW5nZV9lbmQoX0l0ZXIpIHsgcmV0dXJuIF9OdWxsU2VudGluYWx7fTsgfQorCisg
IHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfSXRlciBfX2IpIHsgcmV0dXJuICpfX2I7
IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX0lzU3RyaW5nVCA9IF9faXNfcGF0
aGFibGVfc3RyaW5nPF9UcD46OnZhbHVlLAorICAgICAgICAgIGJvb2wgX0lzQ2hhckl0ZXJUID0g
X19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD46OnZhbHVlLAorICAgICAgICAgIGJvb2wgX0lz
SXRlclQgPSAhX0lzQ2hhckl0ZXJUICYmIF9faXNfcGF0aGFibGVfaXRlcjxfVHA+Ojp2YWx1ZT4K
K3N0cnVjdCBfX2lzX3BhdGhhYmxlIDogZmFsc2VfdHlwZSB7CisgIHN0YXRpY19hc3NlcnQoIV9J
c1N0cmluZ1QgJiYgIV9Jc0NoYXJJdGVyVCAmJiAhX0lzSXRlclQsICJNdXN0IGFsbCBiZSBmYWxz
ZSIpOworfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9U
cCwgdHJ1ZSwgZmFsc2UsIGZhbHNlPiA6IF9faXNfcGF0aGFibGVfc3RyaW5nPF9UcD4ge307CisK
K3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIGZhbHNlLCB0
cnVlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1RwPiB7Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwgZmFsc2Us
IHRydWU+IDogX19pc19wYXRoYWJsZV9pdGVyPF9UcD4ge307CisKK3RlbXBsYXRlIDxjbGFzcyBf
RUNoYXJUPgorc3RydWN0IF9QYXRoQ1ZUIHsKKyAgc3RhdGljX2Fzc2VydChfX2Nhbl9jb252ZXJ0
X2NoYXI8X0VDaGFyVD46OnZhbHVlLAorICAgICAgICAgICAgICAgICJDaGFyIHR5cGUgbm90IGNv
bnZlcnRpYmxlIik7CisKKyAgdHlwZWRlZiBfX25hcnJvd190b191dGY4PHNpemVvZihfRUNoYXJU
KSAqIF9fQ0hBUl9CSVRfXz4gX05hcnJvd2VyOworCisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3Jh
bmdlKHN0cmluZyYgX19kZXN0LCBfRUNoYXJUIGNvbnN0KiBfX2IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9FQ2hhclQgY29uc3QqIF9fZSkgeworICAgIF9OYXJyb3dlcigpKGJhY2tf
aW5zZXJ0ZXIoX19kZXN0KSwgX19iLCBfX2UpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIg
X19iLCBfSXRlciBfX2UpIHsKKyAgICBzdGF0aWNfYXNzZXJ0KCFpc19zYW1lPF9JdGVyLCBfRUNo
YXJUKj46OnZhbHVlLCAiQ2FsbCBjb25zdCBvdmVybG9hZCIpOworICAgIGlmIChfX2IgPT0gX19l
KQorICAgICAgcmV0dXJuOworICAgIGJhc2ljX3N0cmluZzxfRUNoYXJUPiBfX3RtcChfX2IsIF9f
ZSk7CisgICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3QpLCBfX3RtcC5kYXRhKCks
CisgICAgICAgICAgICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVuZ3RoKCkpOworICB9CisK
KyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShz
dHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfTnVsbFNlbnRpbmFsKSB7CisgICAgc3RhdGljX2Fz
c2VydCghaXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3Zlcmxv
YWQiKTsKKyAgICBjb25zdCBfRUNoYXJUIF9fc2VudGluYWwgPSBfRUNoYXJUe307CisgICAgaWYg
KCpfX2IgPT0gX19zZW50aW5hbCkKKyAgICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VD
aGFyVD4gX190bXA7CisgICAgZm9yICg7ICpfX2IgIT0gX19zZW50aW5hbDsgKytfX2IpCisgICAg
ICBfX3RtcC5wdXNoX2JhY2soKl9fYik7CisgICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRlcihf
X2Rlc3QpLCBfX3RtcC5kYXRhKCksCisgICAgICAgICAgICAgICAgX190bXAuZGF0YSgpICsgX190
bXAubGVuZ3RoKCkpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRp
YyB2b2lkIF9fYXBwZW5kX3NvdXJjZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19z
KSB7CisgICAgdXNpbmcgX1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19h
cHBlbmRfcmFuZ2UoX19kZXN0LCBfVHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAg
ICAgICAgICAgICAgX1RyYWl0czo6X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgX1BhdGhDVlQ8Y2hhcj4geworCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRl
cj4KKyAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2V4YWN0bHlfaW5wdXRfaXRlcmF0
b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKKyAgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3Qs
IF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgZm9yICg7IF9fYiAhPSBfX2U7ICsrX19iKQor
ICAgICAgX19kZXN0LnB1c2hfYmFjaygqX19iKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
SXRlcj4KKyAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2ZvcndhcmRfaXRlcmF0b3I8
X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKKyAgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9J
dGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgX19kZXN0Ll9fYXBwZW5kX2ZvcndhcmRfdW5zYWZl
KF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZv
aWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5h
bCkgeworICAgIGNvbnN0IGNoYXIgX19zZW50aW5hbCA9IGNoYXJ7fTsKKyAgICBmb3IgKDsgKl9f
YiAhPSBfX3NlbnRpbmFsOyArK19fYikKKyAgICAgIF9fZGVzdC5wdXNoX2JhY2soKl9fYik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRf
c291cmNlKHN0cmluZyYgX19kZXN0LCBfU291cmNlIGNvbnN0JiBfX3MpIHsKKyAgICB1c2luZyBf
VHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsKKyAgICBfX2FwcGVuZF9yYW5nZShfX2Rl
c3QsIF9UcmFpdHM6Ol9fcmFuZ2VfYmVnaW4oX19zKSwKKyAgICAgICAgICAgICAgICAgICBfVHJh
aXRzOjpfX3JhbmdlX2VuZChfX3MpKTsKKyAgfQorfTsKKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJ
UyBwYXRoIHsKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2VPckl0ZXIsIGNsYXNzIF9UcCA9IHBh
dGgmPgorICB1c2luZyBfRW5hYmxlSWZQYXRoYWJsZSA9CisgICAgICB0eXBlbmFtZSBlbmFibGVf
aWY8X19pc19wYXRoYWJsZTxfU291cmNlT3JJdGVyPjo6dmFsdWUsIF9UcD46OnR5cGU7CisKKyAg
dGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgdXNpbmcgX1NvdXJjZUNoYXIgPSB0eXBlbmFtZSBfX2lz
X3BhdGhhYmxlPF9UcD46Ol9fY2hhcl90eXBlOworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+Cisg
IHVzaW5nIF9Tb3VyY2VDVlQgPSBfUGF0aENWVDxfU291cmNlQ2hhcjxfVHA+ID47CisKK3B1Ymxp
YzoKKyAgdHlwZWRlZiBjaGFyIHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHZh
bHVlX3R5cGU+IHN0cmluZ190eXBlOworICB0eXBlZGVmIF9WU1REOjpzdHJpbmdfdmlldyBfX3N0
cmluZ192aWV3OworICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVkX3NlcGFy
YXRvciA9ICcvJzsKKworICBlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZm9ybWF0IDogdW5z
aWduZWQgY2hhciB7CisgICAgYXV0b19mb3JtYXQsCisgICAgbmF0aXZlX2Zvcm1hdCwKKyAgICBn
ZW5lcmljX2Zvcm1hdAorICB9OworCisgIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3Rvcgor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgoKSBub2V4Y2VwdCB7fQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGgoY29uc3QgcGF0aCYgX19wKSA6IF9fcG5fKF9fcC5fX3Bu
Xykge30KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKHBhdGgmJiBfX3ApIG5vZXhj
ZXB0CisgICAgICA6IF9fcG5fKF9WU1REOjptb3ZlKF9fcC5fX3BuXykpIHt9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoKHN0cmluZ190eXBlJiYgX19zLCBmb3JtYXQgPSBm
b3JtYXQ6OmF1dG9fZm9ybWF0KSBub2V4Y2VwdAorICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShf
X3MpKSB7fQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBh
dGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KKyAgcGF0aChjb25zdCBfU291cmNlJiBfX3NyYywgZm9y
bWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgeworICAgIF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9f
YXBwZW5kX3NvdXJjZShfX3BuXywgX19zcmMpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0PgorICBwYXRoKF9JbnB1dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9fbGFzdCwgZm9ybWF0
ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlwZSBfSXRWYWw7CisgICAgX1BhdGhDVlQ8X0l0VmFs
Pjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgIH0KKworICAvLyBU
T0RPIEltcGxlbWVudCBsb2NhbGUgY29udmVyc2lvbnMuCisgIHRlbXBsYXRlIDxjbGFzcyBfU291
cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KKyAgcGF0aChj
b25zdCBfU291cmNlJiBfX3NyYywgY29uc3QgbG9jYWxlJiBfX2xvYywgZm9ybWF0ID0gZm9ybWF0
OjphdXRvX2Zvcm1hdCk7CisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KKyAgcGF0aChfSW5w
dXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfbGFzdCwgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAgICAg
ICBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KTsKKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIH5wYXRoKCkgPSBkZWZhdWx0OworCisgIC8vIGFzc2lnbm1lbnRzCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3I9KGNvbnN0IHBhdGgmIF9fcCkg
eworICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3I9KHBhdGgmJiBfX3ApIG5v
ZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcC5fX3BuXyk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzID0gdm9pZD4KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoJiBvcGVyYXRvcj0oc3RyaW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0
IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7CisgICAgcmV0dXJuICp0aGlzOworICB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBhc3NpZ24oc3RyaW5nX3R5
cGUmJiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4KKyAgb3BlcmF0
b3I9KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Ny
Yyk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFi
bGU8X1NvdXJjZT4gYXNzaWduKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgX19wbl8uY2xl
YXIoKTsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9f
c3JjKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXQ+CisgIHBhdGgmIGFzc2lnbihfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsK
KyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5
cGUgX0l0VmFsOworICAgIF9fcG5fLmNsZWFyKCk7CisgICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19h
cHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOwor
ICB9CisKK3ByaXZhdGU6CisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorICBzdGF0aWMgYm9v
bCBfX3NvdXJjZV9pc19hYnNvbHV0ZShfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbCkgeworICAgIHJl
dHVybiBfX2lzX3NlcGFyYXRvcihfX2ZpcnN0X29yX251bGwpOworICB9CisKK3B1YmxpYzoKKyAg
Ly8gYXBwZW5kcworICBwYXRoJiBvcGVyYXRvci89KGNvbnN0IHBhdGgmIF9fcCkgeworICAgIGlm
IChfX3AuaXNfYWJzb2x1dGUoKSkgeworICAgICAgX19wbl8gPSBfX3AuX19wbl87CisgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorICAgIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5f
ICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX19wbl8gKz0gX19wLm5hdGl2ZSgpOworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIEZJWE1FOiBVc2UgX0xJQkNQUF9ESUFHTk9TRV9X
QVJOSU5HIHRvIHByb2R1Y2UgYSBkaWFnbm9zdGljIHdoZW4gX19zcmMKKyAgLy8gaXMga25vd24g
YXQgY29tcGlsZSB0aW1lIHRvIGJlICIvJyBzaW5jZSB0aGUgdXNlciBhbG1vc3QgY2VydGFpbmx5
IGludGVuZGVkCisgIC8vIHRvIGFwcGVuZCBhIHNlcGFyYXRvciBpbnN0ZWFkIG9mIG92ZXJ3cml0
aW5nIHRoZSBwYXRoIHdpdGggIi8iCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJh
dG9yLz0oY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICByZXR1cm4gdGhpcy0+YXBwZW5kKF9f
c3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfRW5hYmxlSWZQYXRo
YWJsZTxfU291cmNlPiBhcHBlbmQoY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICB1c2luZyBf
VHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsKKyAgICB1c2luZyBfQ1ZUID0gX1BhdGhD
VlQ8X1NvdXJjZUNoYXI8X1NvdXJjZT4gPjsKKyAgICBpZiAoX19zb3VyY2VfaXNfYWJzb2x1dGUo
X1RyYWl0czo6X19maXJzdF9vcl9udWxsKF9fc3JjKSkpCisgICAgICBfX3BuXy5jbGVhcigpOwor
ICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgpKQorICAgICAgX19wbl8gKz0gcHJlZmVycmVkX3Nl
cGFyYXRvcjsKKyAgICBfQ1ZUOjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgICBy
ZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgm
IGFwcGVuZChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOwor
ICAgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9jaGFyPF9JdFZhbD46OnZhbHVlLCAiTXVz
dCBjb252ZXJ0aWJsZSIpOworICAgIHVzaW5nIF9DVlQgPSBfUGF0aENWVDxfSXRWYWw+OworICAg
IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3NvdXJjZV9pc19hYnNvbHV0ZSgqX19maXJzdCkp
CisgICAgICBfX3BuXy5jbGVhcigpOworICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgpKQorICAg
ICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICBfQ1ZUOjpfX2FwcGVuZF9yYW5n
ZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAv
LyBjb25jYXRlbmF0aW9uCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3Bl
cmF0b3IrPShjb25zdCBwYXRoJiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3guX19wbl87CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRo
JiBvcGVyYXRvcis9KGNvbnN0IHN0cmluZ190eXBlJiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3g7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBwYXRoJiBvcGVyYXRvcis9KF9fc3RyaW5nX3ZpZXcgX194KSB7CisgICAgX19wbl8gKz0gX194
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90eXBlKiBfX3gpIHsKKyAgICBfX3BuXyAr
PSBfX3g7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBwYXRoJiBvcGVyYXRvcis9KHZhbHVlX3R5cGUgX194KSB7CisgICAgX19wbl8gKz0g
X194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJU
PgorICB0eXBlbmFtZSBlbmFibGVfaWY8X19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+Ojp2YWx1
ZSwgcGF0aCY+Ojp0eXBlCisgIG9wZXJhdG9yKz0oX0VDaGFyVCBfX3gpIHsKKyAgICBiYXNpY19z
dHJpbmc8X0VDaGFyVD4gX190bXA7CisgICAgX190bXAgKz0gX194OworICAgIF9QYXRoQ1ZUPF9F
Q2hhclQ+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fdG1wKTsKKyAgICByZXR1cm4gKnRoaXM7
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8
X1NvdXJjZT4gb3BlcmF0b3IrPShjb25zdCBfU291cmNlJiBfX3gpIHsKKyAgICByZXR1cm4gdGhp
cy0+Y29uY2F0KF9feCk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0Vu
YWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gY29uY2F0KGNvbnN0IF9Tb3VyY2UmIF9feCkgeworICAg
IF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX194KTsKKyAgICBy
ZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgm
IGNvbmNhdChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOwor
ICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xh
c3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIG1vZGlmaWVycworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgY2xlYXIoKSBub2V4Y2VwdCB7IF9fcG5fLmNsZWFy
KCk7IH0KKworICBwYXRoJiBtYWtlX3ByZWZlcnJlZCgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiByZW1vdmVfZmlsZW5hbWUoKSB7Cisg
ICAgYXV0byBfX2ZuYW1lID0gX19maWxlbmFtZSgpOworICAgIGlmICghX19mbmFtZS5lbXB0eSgp
KQorICAgICAgX19wbl8uZXJhc2UoX19mbmFtZS5kYXRhKCkgLSBfX3BuXy5kYXRhKCkpOworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIHBhdGgmIHJlcGxhY2VfZmlsZW5hbWUoY29uc3QgcGF0
aCYgX19yZXBsYWNlbWVudCkgeworICAgIHJlbW92ZV9maWxlbmFtZSgpOworICAgIHJldHVybiAo
KnRoaXMgLz0gX19yZXBsYWNlbWVudCk7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2V4dGVuc2lv
bihjb25zdCBwYXRoJiBfX3JlcGxhY2VtZW50ID0gcGF0aCgpKTsKKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIHZvaWQgc3dhcChwYXRoJiBfX3Jocykgbm9leGNlcHQgeyBfX3BuXy5z
d2FwKF9fcmhzLl9fcG5fKTsgfQorCisgIC8vIHByaXZhdGUgaGVscGVyIHRvIGFsbG93IHJlc2Vy
dmluZyBtZW1vcnkgaW4gdGhlIHBhdGgKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2
b2lkIF9fcmVzZXJ2ZShzaXplX3QgX19zKSB7IF9fcG5fLnJlc2VydmUoX19zKTsgfQorCisgIC8v
IG5hdGl2ZSBmb3JtYXQgb2JzZXJ2ZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Y29uc3Qgc3RyaW5nX3R5cGUmIG5hdGl2ZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5f
OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCB2YWx1ZV90eXBlKiBj
X3N0cigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5fLmNfc3RyKCk7IH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIG9wZXJhdG9yIHN0cmluZ190eXBlKCkgY29uc3QgeyByZXR1
cm4gX19wbl87IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3MgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9FQ2hhclQ+LAorICAgICAgICAgICAgY2xhc3MgX0FsbG9jYXRvciA9IGFs
bG9jYXRvcjxfRUNoYXJUPiA+CisgIGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxs
b2NhdG9yPgorICBzdHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKSBj
b25zdCB7CisgICAgdXNpbmcgX0NWVCA9IF9fd2lkZW5fZnJvbV91dGY4PHNpemVvZihfRUNoYXJU
KSAqIF9fQ0hBUl9CSVRfXz47CisgICAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZzxfRUNoYXJU
LCBfVHJhaXRzLCBfQWxsb2NhdG9yPjsKKyAgICBfU3RyIF9fcyhfX2EpOworICAgIF9fcy5yZXNl
cnZlKF9fcG5fLnNpemUoKSk7CisgICAgX0NWVCgpKGJhY2tfaW5zZXJ0ZXIoX19zKSwgX19wbl8u
ZGF0YSgpLCBfX3BuXy5kYXRhKCkgKyBfX3BuXy5zaXplKCkpOworICAgIHJldHVybiBfX3M7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHN0cmluZygpIGNv
bnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp3
c3RyaW5nIHdzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzx3Y2hhcl90PigpOwor
ICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjpzdHJpbmcgdThzdHJpbmcoKSBj
b25zdCB7IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6
dTE2c3RyaW5nIHUxNnN0cmluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNoYXIxNl90
PigpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp1MzJzdHJpbmcgdTMy
c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8Y2hhcjMyX3Q+KCk7CisgIH0KKwor
ICAvLyBnZW5lcmljIGZvcm1hdCBvYnNlcnZlcnMKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQs
IGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNsYXNz
IF9BbGxvY2F0b3IgPSBhbGxvY2F0b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VDaGFy
VCwgX1RyYWl0cywgX0FsbG9jYXRvcj4KKyAgZ2VuZXJpY19zdHJpbmcoY29uc3QgX0FsbG9jYXRv
ciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxfRUNoYXJU
LCBfVHJhaXRzLCBfQWxsb2NhdG9yPihfX2EpOworICB9CisKKyAgc3RkOjpzdHJpbmcgZ2VuZXJp
Y19zdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6OndzdHJpbmcgZ2VuZXJp
Y193c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nPHdjaGFyX3Q+KCk7IH0KKyAgc3RkOjpz
dHJpbmcgZ2VuZXJpY191OHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIHN0ZDo6
dTE2c3RyaW5nIGdlbmVyaWNfdTE2c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nPGNoYXIx
Nl90PigpOyB9CisgIHN0ZDo6dTMyc3RyaW5nIGdlbmVyaWNfdTMyc3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOyB9CisKK3ByaXZhdGU6CisgIGludCBfX2NvbXBhcmUo
X19zdHJpbmdfdmlldykgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290X25hbWUoKSBjb25z
dDsKKyAgX19zdHJpbmdfdmlldyBfX3Jvb3RfZGlyZWN0b3J5KCkgY29uc3Q7CisgIF9fc3RyaW5n
X3ZpZXcgX19yb290X3BhdGhfcmF3KCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yZWxhdGl2
ZV9wYXRoKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19wYXJlbnRfcGF0aCgpIGNvbnN0Owor
ICBfX3N0cmluZ192aWV3IF9fZmlsZW5hbWUoKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3N0
ZW0oKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX2V4dGVuc2lvbigpIGNvbnN0OworCitwdWJs
aWM6CisgIC8vIGNvbXBhcmUKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFy
ZShjb25zdCBwYXRoJiBfX3ApIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19jb21wYXJl
KF9fcC5fX3BuXyk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFy
ZShjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShf
X3MpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoX19zdHJp
bmdfdmlldyBfX3MpIGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcyk7CisgIH0KKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCB2YWx1ZV90eXBlKiBf
X3MpIGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcyk7CisgIH0KKworICAvLyBkZWNv
bXBvc2l0aW9uCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290X25hbWUoKSBj
b25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcm9vdF9uYW1lKCkpOworICB9CisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAg
ICByZXR1cm4gc3RyaW5nX3R5cGUoX19yb290X2RpcmVjdG9yeSgpKTsKKyAgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiBy
b290X25hbWUoKS5hcHBlbmQoc3RyaW5nX3R5cGUoX19yb290X2RpcmVjdG9yeSgpKSk7CisgIH0K
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlX3BhdGgoKSBjb25zdCB7
CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcmVsYXRpdmVfcGF0aCgpKTsKKyAgfQorICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcGFyZW50X3BhdGgoKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZ190eXBlKF9fcGFyZW50X3BhdGgoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBwYXRoIGZpbGVuYW1lKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdfdHlw
ZShfX2ZpbGVuYW1lKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBz
dGVtKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nX3R5cGUoX19zdGVtKCkpOyB9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBleHRlbnNpb24oKSBjb25zdCB7CisgICAgcmV0dXJuIHN0
cmluZ190eXBlKF9fZXh0ZW5zaW9uKCkpOworICB9CisKKyAgLy8gcXVlcnkKKyAgX0xJQkNQUF9O
T0RJU0NBUkRfQUZURVJfQ1hYMTcgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCisgIGVt
cHR5KCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BuXy5lbXB0eSgpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yb290X25hbWUoKSBjb25zdCB7
CisgICAgcmV0dXJuICFfX3Jvb3RfbmFtZSgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sIGhhc19yb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAgICByZXR1
cm4gIV9fcm9vdF9kaXJlY3RvcnkoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19yb290
X3BhdGhfcmF3KCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaGFzX3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3JlbGF0aXZlX3Bh
dGgoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNf
cGFyZW50X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3BhcmVudF9wYXRoKCkuZW1wdHko
KTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX2ZpbGVuYW1lKCkg
Y29uc3QgeworICAgIHJldHVybiAhX19maWxlbmFtZSgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19zdGVtKCkgY29uc3QgeyByZXR1cm4gIV9fc3Rl
bSgpLmVtcHR5KCk7IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19leHRl
bnNpb24oKSBjb25zdCB7CisgICAgcmV0dXJuICFfX2V4dGVuc2lvbigpLmVtcHR5KCk7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYWJzb2x1dGUoKSBjb25zdCB7
CisgICAgcmV0dXJuIGhhc19yb290X2RpcmVjdG9yeSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBpc19yZWxhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFpc19hYnNvbHV0
ZSgpOyB9CisKKyAgLy8gcmVsYXRpdmUgcGF0aHMKKyAgcGF0aCBsZXhpY2FsbHlfbm9ybWFsKCkg
Y29uc3Q7CisgIHBhdGggbGV4aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgmIF9fYmFzZSkgY29u
c3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGxleGljYWxseV9wcm94aW1h
dGUoY29uc3QgcGF0aCYgX19iYXNlKSBjb25zdCB7CisgICAgcGF0aCBfX3Jlc3VsdCA9IHRoaXMt
PmxleGljYWxseV9yZWxhdGl2ZShfX2Jhc2UpOworICAgIGlmIChfX3Jlc3VsdC5uYXRpdmUoKS5l
bXB0eSgpKQorICAgICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgfQor
CisgIC8vIGl0ZXJhdG9ycworICBjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGl0ZXJhdG9yOworICB0
eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3Q7CisgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kCisgICAg
ICB0eXBlbmFtZSBlbmFibGVfaWY8aXNfc2FtZTxfQ2hhclQsIGNoYXI+Ojp2YWx1ZSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zYW1lPF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNo
YXI+ID46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiY+Ojp0eXBlCisgICAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0aCYgX19wKSB7CisgICAgX19vcyA8PCBzdGQ6
Ol9fcXVvdGVkKF9fcC5uYXRpdmUoKSk7CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGZyaWVuZAorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPCFpc19zYW1lPF9DaGFyVCwg
Y2hhcj46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19zYW1lPF9U
cmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiY+Ojp0eXBlCisgICAgICBvcGVyYXRv
cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0aCYgX19w
KSB7CisgICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9fcC5zdHJpbmc8X0NoYXJULCBfVHJhaXRz
PigpKTsKKyAgICByZXR1cm4gX19vczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9faXMsIHBhdGgmIF9fcCkgeworICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHM+IF9fdG1wOworICAgIF9faXMgPj4gX19xdW90ZWQoX190bXApOworICAgIF9f
cCA9IF9fdG1wOworICAgIHJldHVybiBfX2lzOworICB9CisKK3ByaXZhdGU6CisgIGlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgmCisgIF9fYXNzaWduX3ZpZXcoX19zdHJpbmdf
dmlldyBjb25zdCYgX19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBzdHJpbmdfdHlwZShfX3Mp
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorICBzdHJpbmdfdHlwZSBfX3BuXzsKK307CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgc3dhcChwYXRoJiBfX2xocywgcGF0
aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgX19saHMuc3dhcChfX3Jocyk7Cit9CisKK19MSUJDUFBf
RlVOQ19WSVMKK3NpemVfdCBoYXNoX3ZhbHVlKGNvbnN0IHBhdGgmIF9fcCkgbm9leGNlcHQ7CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I9PShjb25zdCBw
YXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPT0gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPChjb25zdCBwYXRoJiBfX2xocywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9f
cmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I8PShjb25zdCBw
YXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPD0gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBvcGVyYXRvcj4oY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICBy
ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGF0aCYgX19saHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19y
aHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggb3BlcmF0b3IvKGNvbnN0IHBh
dGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcGF0aCYgX19yaHMpIHsKKyAgcGF0aCBfX3Jlc3VsdChfX2xocyk7CisgIF9fcmVz
dWx0IC89IF9fcmhzOworICByZXR1cm4gX19yZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBf
U291cmNlPgorX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICAgIHR5cGVuYW1lIGVuYWJsZV9p
ZjxfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+Ojp2YWx1ZSwgcGF0aD46OnR5cGUKKyAgICB1OHBhdGgo
Y29uc3QgX1NvdXJjZSYgX19zKSB7CisgIHN0YXRpY19hc3NlcnQoCisgICAgICBpc19zYW1lPHR5
cGVuYW1lIF9faXNfcGF0aGFibGU8X1NvdXJjZT46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUs
CisgICAgICAidThwYXRoKFNvdXJjZSBjb25zdCYpIHJlcXVpcmVzIFNvdXJjZSBoYXZlIGEgY2hh
cmFjdGVyIHR5cGUgb2YgdHlwZSAiCisgICAgICAiJ2NoYXInIik7CisgIHJldHVybiBwYXRoKF9f
cyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19wYXRoYWJsZTxfSW5wdXRJdD46OnZh
bHVlLCBwYXRoPjo6dHlwZQorICAgIHU4cGF0aChfSW5wdXRJdCBfX2YsIF9JbnB1dEl0IF9fbCkg
eworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgaXNfc2FtZTx0eXBlbmFtZSBfX2lzX3BhdGhhYmxl
PF9JbnB1dEl0Pjo6X19jaGFyX3R5cGUsIGNoYXI+Ojp2YWx1ZSwKKyAgICAgICJ1OHBhdGgoSXRl
ciwgSXRlcikgcmVxdWlyZXMgSXRlciBoYXZlIGEgdmFsdWVfdHlwZSBvZiB0eXBlICdjaGFyJyIp
OworICByZXR1cm4gcGF0aChfX2YsIF9fbCk7Cit9CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMg
cGF0aDo6aXRlcmF0b3IgeworcHVibGljOgorICBlbnVtIF9QYXJzZXJTdGF0ZSA6IHVuc2lnbmVk
IGNoYXIgeworICAgIF9TaW5ndWxhciwKKyAgICBfQmVmb3JlQmVnaW4sCisgICAgX0luUm9vdE5h
bWUsCisgICAgX0luUm9vdERpciwKKyAgICBfSW5GaWxlbmFtZXMsCisgICAgX0luVHJhaWxpbmdT
ZXAsCisgICAgX0F0RW5kCisgIH07CisKK3B1YmxpYzoKKyAgdHlwZWRlZiBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICB0eXBlZGVmIHBhdGggdmFsdWVf
dHlwZTsKKyAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgIHR5cGVk
ZWYgY29uc3QgcGF0aCogcG9pbnRlcjsKKyAgdHlwZWRlZiBjb25zdCBwYXRoJiByZWZlcmVuY2U7
CisKKyAgdHlwZWRlZiB2b2lkCisgICAgICBfX3N0YXNoaW5nX2l0ZXJhdG9yX3RhZzsgLy8gU2Vl
IHJldmVyc2VfaXRlcmF0b3IgYW5kIF9faXNfc3Rhc2hpbmdfaXRlcmF0b3IKKworcHVibGljOgor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yKCkKKyAgICAgIDogX19zdGFz
aGVkX2VsZW1fKCksIF9fcGF0aF9wdHJfKG51bGxwdHIpLCBfX2VudHJ5XygpLAorICAgICAgICBf
X3N0YXRlXyhfU2luZ3VsYXIpIHt9CisKKyAgaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImKSA9IGRl
ZmF1bHQ7CisgIH5pdGVyYXRvcigpID0gZGVmYXVsdDsKKworICBpdGVyYXRvciYgb3BlcmF0b3I9
KGNvbnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9fc3Rhc2hlZF9lbGVt
XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcG9pbnRlciBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gJl9fc3Rhc2hlZF9lbGVtXzsgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CisgICAgX0xJQkNQUF9BU1NF
UlQoX19zdGF0ZV8gIT0gX1Npbmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5n
IHRvIGluY3JlbWVudCBhIHNpbmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9BU1NFUlQo
X19zdGF0ZV8gIT0gX0F0RW5kLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGlu
Y3JlbWVudCB0aGUgZW5kIGl0ZXJhdG9yIik7CisgICAgcmV0dXJuIF9faW5jcmVtZW50KCk7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yIG9wZXJhdG9yKyso
aW50KSB7CisgICAgaXRlcmF0b3IgX19pdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3IrKygp
OworICAgIHJldHVybiBfX2l0OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKKyAgICBfTElCQ1BQX0FTU0VSVChfX3N0YXRlXyAh
PSBfU2luZ3VsYXIsCisgICAgICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gZGVjcmVtZW50
IGEgc2luZ3VsYXIgaXRlcmF0b3IiKTsKKyAgICBfTElCQ1BQX0FTU0VSVChfX2VudHJ5Xy5kYXRh
KCkgIT0gX19wYXRoX3B0cl8tPm5hdGl2ZSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAi
YXR0ZW1wdGluZyB0byBkZWNyZW1lbnQgdGhlIGJlZ2luIGl0ZXJhdG9yIik7CisgICAgcmV0dXJu
IF9fZGVjcmVtZW50KCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0
ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CisgICAgaXRlcmF0b3IgX19pdCgqdGhpcyk7CisgICAg
dGhpcy0+b3BlcmF0b3ItLSgpOworICAgIHJldHVybiBfX2l0OworICB9CisKK3ByaXZhdGU6Cisg
IGZyaWVuZCBjbGFzcyBwYXRoOworCisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9y
Jik7CisKKyAgaXRlcmF0b3ImIF9faW5jcmVtZW50KCk7CisgIGl0ZXJhdG9yJiBfX2RlY3JlbWVu
dCgpOworCisgIHBhdGggX19zdGFzaGVkX2VsZW1fOworICBjb25zdCBwYXRoKiBfX3BhdGhfcHRy
XzsKKyAgcGF0aDo6X19zdHJpbmdfdmlldyBfX2VudHJ5XzsKKyAgX1BhcnNlclN0YXRlIF9fc3Rh
dGVfOworfTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYgX19yaHMpIHsK
KyAgcmV0dXJuIF9fbGhzLl9fcGF0aF9wdHJfID09IF9fcmhzLl9fcGF0aF9wdHJfICYmCisgICAg
ICAgICBfX2xocy5fX2VudHJ5Xy5kYXRhKCkgPT0gX19yaHMuX19lbnRyeV8uZGF0YSgpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
cGF0aDo6aXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX3JocykgeworICByZXR1cm4g
IShfX2xocyA9PSBfX3Jocyk7Cit9CisKK2NsYXNzIF9MSUJDUFBfRVhDRVBUSU9OX0FCSSBmaWxl
c3lzdGVtX2Vycm9yIDogcHVibGljIHN5c3RlbV9lcnJvciB7CitwdWJsaWM6CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZXN5c3RlbV9lcnJvcihjb25zdCBzdHJpbmcmIF9fd2hh
dCwgZXJyb3JfY29kZSBfX2VjKQorICAgICAgOiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwK
KyAgICAgICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4ocGF0aCgpLCBwYXRoKCkp
KSB7CisgICAgX19jcmVhdGVfd2hhdCgwKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgZmlsZXN5c3RlbV9lcnJvcihjb25zdCBzdHJpbmcmIF9fd2hhdCwgY29uc3QgcGF0
aCYgX19wMSwgZXJyb3JfY29kZSBfX2VjKQorICAgICAgOiBzeXN0ZW1fZXJyb3IoX19lYywgX193
aGF0KSwKKyAgICAgICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4oX19wMSwgcGF0
aCgpKSkgeworICAgIF9fY3JlYXRlX3doYXQoMSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0
IHBhdGgmIF9fcDEsIGNvbnN0IHBhdGgmIF9fcDIsCisgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSBfX2VjKQorICAgICAgOiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwKKyAgICAgICAg
X19zdG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4oX19wMSwgX19wMikpIHsKKyAgICBfX2Ny
ZWF0ZV93aGF0KDIpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25z
dCBwYXRoJiBwYXRoMSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RvcmFnZV8tPl9fcDFf
OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCBwYXRoJiBwYXRoMigp
IGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RvcmFnZV8tPl9fcDJfOyB9CisKKyAgfmZpbGVz
eXN0ZW1fZXJyb3IoKSBvdmVycmlkZTsgLy8ga2V5IGZ1bmN0aW9uCisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJp
ZGUgeworICAgIHJldHVybiBfX3N0b3JhZ2VfLT5fX3doYXRfLmNfc3RyKCk7CisgIH0KKworICBf
TElCQ1BQX0ZVTkNfVklTCisgIHZvaWQgX19jcmVhdGVfd2hhdChpbnQgX19udW1fcGF0aHMpOwor
Citwcml2YXRlOgorICBzdHJ1Y3QgX1N0b3JhZ2UgeworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgICBfU3RvcmFnZShjb25zdCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyKSA6
IF9fcDFfKF9fcDEpLCBfX3AyXyhfX3AyKSB7fQorCisgICAgcGF0aCBfX3AxXzsKKyAgICBwYXRo
IF9fcDJfOworICAgIHN0cmluZyBfX3doYXRfOworICB9OworICBzaGFyZWRfcHRyPF9TdG9yYWdl
PiBfX3N0b3JhZ2VfOworfTsKKwordGVtcGxhdGUgPGNsYXNzLi4uIF9BcmdzPgorX0xJQkNQUF9O
T1JFVFVSTiBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorI2lmbmRlZiBfTElCQ1BQ
X05PX0VYQ0VQVElPTlMKKyAgICB2b2lkCisgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKF9B
cmdzJiYuLi4gX19hcmdzKSB7CisgIHRocm93IGZpbGVzeXN0ZW1fZXJyb3Ioc3RkOjpmb3J3YXJk
PF9BcmdzPihfX2FyZ3MpLi4uKTsKK30KKyNlbHNlCisgICAgdm9pZAorICAgIF9fdGhyb3dfZmls
ZXN5c3RlbV9lcnJvcihfQXJncyYmLi4uKSB7CisgIF9WU1REOjphYm9ydCgpOworfQorI2VuZGlm
CisKKy8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucworCitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9f
YWJzb2x1dGUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK3BhdGggX19jYW5vbmljYWwoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5KGNvbnN0IHBhdGgm
IF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAgICAg
ICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBf
X2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0
aW9ucyBfX29wdCwKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIp
OworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NvcHlfc3ltbGluayhjb25zdCBwYXRoJiBfX2V4
aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jv
b2wgX19jcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0
IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCiti
b29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1
dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsK
K19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3Qg
cGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5D
X1ZJUwordm9pZCBfX2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0
aCYgX19uZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSog
X19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NyZWF0ZV9zeW1saW5r
KGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJ
UworcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCit2b2lkIF9fY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fZXF1aXZhbGVudChj
b25zdCBwYXRoJiwgY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX2ZpbGVfc2l6ZShjb25zdCBwYXRoJiwgZXJyb3Jf
Y29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordWludG1heF90IF9faGFy
ZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7Citf
TElCQ1BQX0ZVTkNfVklTCitib29sIF9fZnNfaXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2ZpbGVfdGltZV90eXBlIF9f
bGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7
CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAs
IGZpbGVfdGltZV90eXBlIG5ld190aW1lLAorICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX3Blcm1pc3Npb25z
KGNvbnN0IHBhdGgmLCBwZXJtcywgcGVybV9vcHRpb25zLCBlcnJvcl9jb2RlKiA9IG51bGxwdHIp
OworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX3JlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX3JlbW92
ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5D
X1ZJUwordWludG1heF90IF9fcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBl
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX3JlbmFtZShjb25zdCBwYXRo
JiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK3ZvaWQgX19yZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50bWF4X3Qg
c2l6ZSwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3NwYWNl
X2luZm8gX19zcGFjZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwor
X0xJQkNQUF9GVU5DX1ZJUworZmlsZV9zdGF0dXMgX19zdGF0dXMoY29uc3QgcGF0aCYsIGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9f
c3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsK
K19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19zeXN0ZW1fY29tcGxldGUoY29uc3QgcGF0aCYsIGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX190ZW1w
X2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK3BhdGggX193ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCwgZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpOworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBw
YXRoIGN1cnJlbnRfcGF0aCgpIHsKKyAgcmV0dXJuIF9fY3VycmVudF9wYXRoKCk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggY3VycmVudF9wYXRoKGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY3VycmVudF9wYXRoKCZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYg
X19wKSB7CisgIF9fY3VycmVudF9wYXRoKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgX19jdXJyZW50X3BhdGgoX19wLCAmX19lYyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggYWJzb2x1dGUoY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBfX2Fic29sdXRlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGggYWJzb2x1dGUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7Cisg
IHJldHVybiBfX2Fic29sdXRlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoIGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJu
IF9fY2Fub25pY2FsKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9f
Y2Fub25pY2FsKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8pIHsKKyAgX19jb3B5KF9fZnJv
bSwgX190bywgY29weV9vcHRpb25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSB7CisgIF9fY29weShfX2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSwgJl9f
ZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHkoY29u
c3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCkgeworICBfX2NvcHkoX19m
cm9tLCBfX3RvLCBfX29wdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zIF9fb3B0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9f
ZWMpIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgX19vcHQsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19m
cm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgcGF0aCYgX190bykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5
X29wdGlvbnM6Om5vbmUpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sCitjb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBlcnJv
cl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIGNvcHlf
b3B0aW9uczo6bm9uZSwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSBib29sCitjb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3Rv
LCBjb3B5X29wdGlvbnMgX19vcHQpIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190
bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNv
cHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBfX29wdCwgJl9fZWMpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHlfc3ltbGluayhj
b25zdCBwYXRoJiBfX2V4aXN0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jb3B5X3N5bWxpbmso
X19leGlzdGluZywgX19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSB2b2lkCitjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgX19leHQsIGNvbnN0IHBhdGgmIF9fbmV3
LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fY29weV9zeW1saW5rKF9fZXh0LCBf
X25ldywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fY3JlYXRl
X2RpcmVjdG9yaWVzKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9f
ZWMpIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yaWVzKF9fcCwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29u
c3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkoX19wKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorY3JlYXRlX2RpcmVjdG9yeShj
b25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9f
Y3JlYXRlX2RpcmVjdG9yeShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YXRoJiBfX2F0dHJzKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkoX19wLCBfX2F0dHJz
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorY3JlYXRlX2Rp
cmVjdG9yeShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYXR0cnMsCisgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fY3JlYXRlX2Rp
cmVjdG9yeShfX3AsIF9fYXR0cnMsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIF9f
dG8sIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9f
dG8sIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAor
Y3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9f
bmV3LAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoX190bywgX19uZXcsICZfX2VjKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjcmVhdGVfaGFyZF9saW5r
KGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfaGFyZF9s
aW5rKF9fdG8sIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZAorY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25l
dywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2Ny
ZWF0ZV9oYXJkX2xpbmsoX190bywgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjcmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9zeW1saW5rKF9fdG8sIF9fbmV3KTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX3N5bWxpbmsoY29u
c3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIF9fY3JlYXRlX3N5bWxpbmsoX190bywgX19uZXcsICZfX2VjKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBzdGF0dXNfa25vd24oZmls
ZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpICE9IGZpbGVfdHlw
ZTo6bm9uZTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlz
dHMoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBzdGF0dXNfa25vd24oX19z
KSAmJiBfX3MudHlwZSgpICE9IGZpbGVfdHlwZTo6bm90X2ZvdW5kOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAg
cmV0dXJuIGV4aXN0cyhfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICBhdXRvIF9fcyA9IF9fc3RhdHVzKF9fcCwgJl9fZWMpOworICBpZiAoc3RhdHVzX2tub3du
KF9fcykpCisgICAgX19lYy5jbGVhcigpOworICByZXR1cm4gZXhpc3RzKF9fcyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXF1aXZhbGVudChjb25zdCBwYXRo
JiBfX3AxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHBhdGgmIF9fcDIpIHsKKyAgcmV0dXJuIF9fZXF1aXZhbGVudChfX3AxLCBfX3AyKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorZXF1aXZhbGVudChj
b25zdCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4
Y2VwdCB7CisgIHJldHVybiBfX2VxdWl2YWxlbnQoX19wMSwgX19wMiwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgZmlsZV9zaXplKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19maWxlX3NpemUoX19wKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90CitmaWxlX3NpemUoY29uc3QgcGF0aCYg
X19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2ZpbGVfc2l6ZShf
X3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1h
eF90IGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9faGFyZF9s
aW5rX2NvdW50KF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVp
bnRtYXhfdAoraGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19l
Yykgbm9leGNlcHQgeworICByZXR1cm4gX19oYXJkX2xpbmtfY291bnQoX19wLCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYmxvY2tfZmlsZShm
aWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90
eXBlOjpibG9jazsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBp
c19ibG9ja19maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfYmxvY2tfZmlsZShf
X3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBpc19ibG9ja19maWxlKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfY2hhcmFjdGVyX2ZpbGUoZmls
ZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlw
ZTo6Y2hhcmFjdGVyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfY2hhcmFj
dGVyX2ZpbGUoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wKK2lzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29k
ZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfY2hhcmFjdGVyX2ZpbGUoX19zdGF0dXMo
X19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50
eXBlKCkgPT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1
cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBf
X2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19kaXJlY3RvcnkoX19zdGF0dXMoX19wLCAmX19l
YykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2VtcHR5
KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19mc19pc19lbXB0eShfX3ApOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgm
IF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19mc19pc19lbXB0eShfX3AsICZfX2VjKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OmZp
Zm87Cit9CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2ZpZm8oY29u
c3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19maWZvKF9fc3RhdHVzKF9fcCkpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYg
X19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2ZpZm8oX19zdGF0dXMoX19wLCAm
X19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitpc19y
ZWd1bGFyX2ZpbGUoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlw
ZSgpID09IGZpbGVfdHlwZTo6cmVndWxhcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBpc19yZWd1bGFyX2ZpbGUoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wKK2lzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBfX3AsIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX3JlZ3VsYXJfZmlsZShfX3N0
YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgaXNfc29ja2V0KGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19z
LnR5cGUoKSA9PSBmaWxlX3R5cGU6OnNvY2tldDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBp
c19zb2NrZXQoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIGlzX3NvY2tldChfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc3ltbGluayhmaWxlX3N0YXR1cyBf
X3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpzeW1saW5r
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmso
Y29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19zeW1saW5rKF9fc3ltbGlua19zdGF0dXMo
X19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc3lt
bGluayhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNf
c3ltbGluayhfX3N5bWxpbmtfc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19vdGhlcihmaWxlX3N0YXR1cyBfX3MpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIGV4aXN0cyhfX3MpICYmICFpc19yZWd1bGFyX2ZpbGUoX19zKSAmJiAh
aXNfZGlyZWN0b3J5KF9fcykgJiYKKyAgICAgICAgICFpc19zeW1saW5rKF9fcyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYg
X19wKSB7CisgIHJldHVybiBpc19vdGhlcihfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19vdGhlcihjb25zdCBwYXRoJiBfX3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX290aGVyKF9fc3RhdHVzKF9fcCwgJl9fZWMp
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV90aW1lX3R5cGUK
K2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fbGFzdF93cml0
ZV90aW1lKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVf
dGltZV90eXBlCitsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBf
X2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xhc3Rfd3JpdGVfdGltZShfX3AsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBsYXN0X3dyaXRlX3Rp
bWUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsZV90aW1lX3R5cGUgX190KSB7CisgIF9fbGFzdF93cml0ZV90
aW1lKF9fcCwgX190KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9p
ZAorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwgZmlsZV90aW1lX3R5cGUgX190LAor
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19sYXN0X3dy
aXRlX3RpbWUoX19wLCBfX3QsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgdm9pZAorcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3BybXMs
CisgICAgICAgICAgICBwZXJtX29wdGlvbnMgX19vcHRzID0gcGVybV9vcHRpb25zOjpyZXBsYWNl
KSB7CisgIF9fcGVybWlzc2lvbnMoX19wLCBfX3BybXMsIF9fb3B0cyk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgX19w
LCBwZXJtcyBfX3BybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19wZXJtaXNzaW9ucyhf
X3AsIF9fcHJtcywgcGVybV9vcHRpb25zOjpyZXBsYWNlLCAmX19lYyk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgX19w
LCBwZXJtcyBfX3BybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBlcm1fb3B0aW9ucyBfX29wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgX19wZXJtaXNz
aW9ucyhfX3AsIF9fcHJtcywgX19vcHRzLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIF9fZWMpIHsKKyAgcGF0aCBfX3RtcCA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX3AsICZf
X2VjKTsKKyAgaWYgKF9fZWMpCisgICAgcmV0dXJuIHt9OworICBwYXRoIF9fdG1wX2Jhc2UgPSBf
X3dlYWtseV9jYW5vbmljYWwoX19iYXNlLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVy
biB7fTsKKyAgcmV0dXJuIF9fdG1wLmxleGljYWxseV9wcm94aW1hdGUoX190bXBfYmFzZSk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcHJveGltYXRlKGNvbnN0
IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIHByb3hpbWF0ZShfX3AsIGN1cnJlbnRf
cGF0aCgpLCBfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0
aAorcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwgY29uc3QgcGF0aCYgX19iYXNlID0gY3VycmVu
dF9wYXRoKCkpIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChfX3ApLmxleGljYWxseV9w
cm94aW1hdGUoCisgICAgICBfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlKSk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgm
IF9fcCkgeworICByZXR1cm4gX19yZWFkX3N5bWxpbmsoX19wKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgX19wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgX19lYykgeworICByZXR1cm4gX19yZWFkX3N5bWxpbmsoX19wLCAmX19lYyk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0
aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBwYXRoJiBfX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcGF0aCBfX3RtcCA9IF9fd2Vha2x5X2Nh
bm9uaWNhbChfX3AsICZfX2VjKTsKKyAgaWYgKF9fZWMpCisgICAgcmV0dXJuIHBhdGgoKTsKKyAg
cGF0aCBfX3RtcGJhc2UgPSBfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlLCAmX19lYyk7CisgIGlm
IChfX2VjKQorICAgIHJldHVybiBwYXRoKCk7CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcmVs
YXRpdmUoX190bXBiYXNlKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
cGF0aCByZWxhdGl2ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIHJlbGF0
aXZlKF9fcCwgY3VycmVudF9wYXRoKCksIF9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoCityZWxhdGl2ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgm
IF9fYmFzZSA9IGN1cnJlbnRfcGF0aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwo
X19wKS5sZXhpY2FsbHlfcmVsYXRpdmUoX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSkpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRo
JiBfX3ApIHsKKyAgcmV0dXJuIF9fcmVtb3ZlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgcmVtb3ZlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIF9fcmVtb3ZlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgcmV0dXJuIF9fcmVtb3ZlX2FsbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSB1aW50bWF4X3QgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBfX3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3JlbW92ZV9hbGwoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcmVuYW1lKGNvbnN0IHBhdGgmIF9f
ZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHBhdGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fcmVuYW1lKF9fZnJvbSwgX190byk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3JlbmFtZShjb25zdCBwYXRoJiBf
X2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAg
cmV0dXJuIF9fcmVuYW1lKF9fZnJvbSwgX190bywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIF9fcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludG1heF90
IF9fbnMpIHsKKyAgcmV0dXJuIF9fcmVzaXplX2ZpbGUoX19wLCBfX25zKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYg
X19wLCB1aW50bWF4X3QgX19ucywgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1
cm4gX19yZXNpemVfZmlsZShfX3AsIF9fbnMsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgc3BhY2VfaW5mbyBzcGFjZShjb25zdCBwYXRoJiBfX3ApIHsKKyAg
cmV0dXJuIF9fc3BhY2UoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgc3BhY2VfaW5mbyBzcGFjZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fc3BhY2UoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzIHN0YXR1cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAg
cmV0dXJuIF9fc3RhdHVzKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGZpbGVfc3RhdHVzIHN0YXR1cyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9l
eGNlcHQgeworICByZXR1cm4gX19zdGF0dXMoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cworc3ltbGlua19zdGF0dXMoY29u
c3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3N5
bWxpbmtfc3RhdHVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgoKSB7CisgIHJldHVybiBfX3RlbXBfZGly
ZWN0b3J5X3BhdGgoKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0
aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fdGVt
cF9kaXJlY3RvcnlfcGF0aCgmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3ApIHsKKyAgcmV0dXJu
IF9fd2Vha2x5X2Nhbm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKK30KKwor
Y2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yOworY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcjsKK2NsYXNzIF9fZGlyX3N0cmVhbTsKKworY2xhc3MgZGlyZWN0b3J5X2VudHJ5IHsKKyAg
dHlwZWRlZiBfVlNURF9GUzo6cGF0aCBfUGF0aDsKKworcHVibGljOgorICAvLyBjb25zdHJ1Y3Rv
cnMgYW5kIGRlc3RydWN0b3JzCisgIGRpcmVjdG9yeV9lbnRyeSgpIG5vZXhjZXB0ID0gZGVmYXVs
dDsKKyAgZGlyZWN0b3J5X2VudHJ5KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYpID0gZGVmYXVsdDsK
KyAgZGlyZWN0b3J5X2VudHJ5KGRpcmVjdG9yeV9lbnRyeSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCBkaXJlY3RvcnlfZW50
cnkoX1BhdGggY29uc3QmIF9fcCkgOiBfX3BfKF9fcCkgeworICAgIGVycm9yX2NvZGUgX19lYzsK
KyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBkaXJlY3RvcnlfZW50cnkoX1BhdGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSYgX19lYykg
OiBfX3BfKF9fcCkgeworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICB+ZGlyZWN0b3J5
X2VudHJ5KCkge30KKworICBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yPShkaXJlY3RvcnlfZW50
cnkgY29uc3QmKSA9IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3I9KGRpcmVj
dG9yeV9lbnRyeSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB2b2lkIGFzc2lnbihfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19wXyA9IF9f
cDsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9f
cCwgZXJyb3JfY29kZSYgX19lYykgeworICAgIF9fcF8gPSBfX3A7CisgICAgX19yZWZyZXNoKCZf
X2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCByZXBsYWNl
X2ZpbGVuYW1lKF9QYXRoIGNvbnN0JiBfX3ApIHsKKyAgICBfX3BfLnJlcGxhY2VfZmlsZW5hbWUo
X19wKTsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9Q
YXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19wXy5wYXJl
bnRfcGF0aCgpIC8gX19wOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVmcmVzaCgpIHsgX19yZWZyZXNoKCk7IH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVmcmVzaChlcnJvcl9jb2RlJiBf
X2VjKSBub2V4Y2VwdCB7IF9fcmVmcmVzaCgmX19lYyk7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIF9QYXRoIGNvbnN0JiBwYXRoKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4g
X19wXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgb3BlcmF0b3IgY29uc3Qg
X1BhdGgmKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wXzsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBleGlzdHMoKSBjb25zdCB7IHJldHVybiBfVlNURF9GUzo6
ZXhpc3RzKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgYm9vbCBleGlzdHMoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQg
eworICAgIHJldHVybiBfVlNURF9GUzo6ZXhpc3RzKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCZfX2Vj
KX0pOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Jsb2Nr
X2ZpbGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6YmxvY2s7IH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfYmxvY2tfZmlsZShlcnJv
cl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2Vj
KSA9PSBmaWxlX3R5cGU6OmJsb2NrOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9
PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2Vw
dCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19kaXJlY3Rvcnko
KSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2RpcmVjdG9yeShlcnJvcl9j
b2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9
PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBpc19maWZvKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5
cGU6OmZpZm87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZmlm
byhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0
KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmZpZm87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGJvb2wgaXNfb3RoZXIoKSBjb25zdCB7IHJldHVybiBfVlNURF9GUzo6aXNfb3Ro
ZXIoZmlsZV9zdGF0dXN7X19nZXRfZnQoKX0pOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBib29sIGlzX290aGVyKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gX1ZTVERfRlM6OmlzX290aGVyKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCZfX2Vj
KX0pOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3JlZ3Vs
YXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpyZWd1bGFy
OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3JlZ3VsYXJfZmls
ZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0
KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfc29ja2V0KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9
PSBmaWxlX3R5cGU6OnNvY2tldDsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBpc19zb2NrZXQoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpzb2NrZXQ7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluaygpIGNvbnN0IHsgcmV0dXJu
IF9fZ2V0X3N5bV9mdCgpID09IGZpbGVfdHlwZTo6c3ltbGluazsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19zeW1saW5rKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc3ltX2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6
OnN5bWxpbms7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3Qg
ZmlsZV9zaXplKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc2l6ZSgpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgZmlsZV9zaXplKGVycm9yX2NvZGUmIF9fZWMp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc2l6ZSgmX19lYyk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBoYXJkX2xpbmtfY291bnQo
KSBjb25zdCB7IHJldHVybiBfX2dldF9ubGluaygpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB1aW50bWF4X3QgaGFyZF9saW5rX2NvdW50KGVycm9yX2NvZGUmIF9fZWMpIGNv
bnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfbmxpbmsoJl9fZWMpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0X3dyaXRlX3Rp
bWUoKSBjb25zdCB7IHJldHVybiBfX2dldF93cml0ZV90aW1lKCk7IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGZpbGVfdGltZV90eXBlIGxhc3Rfd3JpdGVfdGltZShlcnJvcl9j
b2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3dyaXRlX3RpbWUo
Jl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1
cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBfX2dldF9zdGF0dXMoKTsgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3RhdHVzKGVycm9yX2NvZGUmIF9fZWMp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc3RhdHVzKCZfX2VjKTsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0
dXMoKSBjb25zdCB7IHJldHVybiBfX2dldF9zeW1saW5rX3N0YXR1cygpOyB9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cyhlcnJvcl9j
b2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bWxpbmtfc3Rh
dHVzKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBv
cGVyYXRvcjwoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfX3BfIDwgX19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcj09KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA9PSBfX3Jocy5fX3BfOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJhdG9yIT0oZGlyZWN0b3J5
X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfICE9
IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wg
b3BlcmF0b3I8PShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIF9fcF8gPD0gX19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcj4oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3Jo
cykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfID4gX19yaHMuX19wXzsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcj49KGRpcmVjdG9y
eV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+
PSBfX3Jocy5fX3BfOworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFzcyBkaXJlY3Rvcnlf
aXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOwor
ICBmcmllbmQgY2xhc3MgX19kaXJfc3RyZWFtOworCisgIGVudW0gX0NhY2hlVHlwZSA6IHVuc2ln
bmVkIGNoYXIgeworICAgIF9FbXB0eSwKKyAgICBfSXRlclN5bWxpbmssCisgICAgX0l0ZXJOb25T
eW1saW5rLAorICAgIF9SZWZyZXNoU3ltbGluaywKKyAgICBfUmVmcmVzaFN5bWxpbmtVbnJlc29s
dmVkLAorICAgIF9SZWZyZXNoTm9uU3ltbGluaworICB9OworCisgIHN0cnVjdCBfX2NhY2hlZF9k
YXRhIHsKKyAgICB1aW50bWF4X3QgX19zaXplXzsKKyAgICB1aW50bWF4X3QgX19ubGlua187Cisg
ICAgZmlsZV90aW1lX3R5cGUgX193cml0ZV90aW1lXzsKKyAgICBwZXJtcyBfX3N5bV9wZXJtc187
CisgICAgcGVybXMgX19ub25fc3ltX3Blcm1zXzsKKyAgICBmaWxlX3R5cGUgX190eXBlXzsKKyAg
ICBfQ2FjaGVUeXBlIF9fY2FjaGVfdHlwZV87CisKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgICAgX19jYWNoZWRfZGF0YSgpIG5vZXhjZXB0IHsgX19yZXNldCgpOyB9CisKKyAgICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgdm9pZCBfX3Jlc2V0KCkgeworICAgICAgX19j
YWNoZV90eXBlXyA9IF9FbXB0eTsKKyAgICAgIF9fdHlwZV8gPSBmaWxlX3R5cGU6Om5vbmU7Cisg
ICAgICBfX3N5bV9wZXJtc18gPSBfX25vbl9zeW1fcGVybXNfID0gcGVybXM6OnVua25vd247Cisg
ICAgICBfX3NpemVfID0gX19ubGlua18gPSB1aW50bWF4X3QoLTEpOworICAgICAgX193cml0ZV90
aW1lXyA9IGZpbGVfdGltZV90eXBlOjptaW4oKTsKKyAgICB9CisgIH07CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBzdGF0aWMgX19jYWNoZWRfZGF0YSBfX2NyZWF0ZV9pdGVyX3Jl
c3VsdChmaWxlX3R5cGUgX19mdCkgeworICAgIF9fY2FjaGVkX2RhdGEgX19kYXRhOworICAgIF9f
ZGF0YS5fX3R5cGVfID0gX19mdDsKKyAgICBfX2RhdGEuX19jYWNoZV90eXBlXyA9IFsmXSgpIHsK
KyAgICAgIHN3aXRjaCAoX19mdCkgeworICAgICAgY2FzZSBmaWxlX3R5cGU6Om5vbmU6CisgICAg
ICAgIHJldHVybiBfRW1wdHk7CisgICAgICBjYXNlIGZpbGVfdHlwZTo6c3ltbGluazoKKyAgICAg
ICAgcmV0dXJuIF9JdGVyU3ltbGluazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBf
SXRlck5vblN5bWxpbms7CisgICAgICB9CisgICAgfSgpOworICAgIHJldHVybiBfX2RhdGE7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgX19hc3NpZ25faXRlcl9l
bnRyeShfUGF0aCYmIF9fcCwgX19jYWNoZWRfZGF0YSBfX2R0KSB7CisgICAgX19wXyA9IHN0ZDo6
bW92ZShfX3ApOworICAgIF9fZGF0YV8gPSBfX2R0OworICB9CisKKyAgX0xJQkNQUF9GVU5DX1ZJ
UworICBlcnJvcl9jb2RlIF9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0OworCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgc3RhdGljIGJvb2wgX19pc19kbmVfZXJyb3IoZXJyb3JfY29kZSBj
b25zdCYgX19lYykgeworICAgIGlmICghX19lYykKKyAgICAgIHJldHVybiB0cnVlOworICAgIHN3
aXRjaCAoc3RhdGljX2Nhc3Q8ZXJyYz4oX19lYy52YWx1ZSgpKSkgeworICAgIGNhc2UgZXJyYzo6
bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeToKKyAgICBjYXNlIGVycmM6Om5vdF9hX2RpcmVjdG9y
eToKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9faGFu
ZGxlX2Vycm9yKGNvbnN0IGNoYXIqIF9fbXNnLCBlcnJvcl9jb2RlKiBfX2Rlc3RfZWMsCisgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSBjb25zdCYgX19lYywgYm9vbCBfX2FsbG93X2Ru
ZSA9IGZhbHNlKSBjb25zdCB7CisgICAgaWYgKF9fZGVzdF9lYykgeworICAgICAgKl9fZGVzdF9l
YyA9IF9fZWM7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChfX2VjICYmICghX19hbGxv
d19kbmUgfHwgIV9faXNfZG5lX2Vycm9yKF9fZWMpKSkKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3Rl
bV9lcnJvcihfX21zZywgX19wXywgX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHZvaWQgX19yZWZyZXNoKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSB7Cisg
ICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6cmVmcmVzaCIsIF9fZWMsIF9f
ZG9fcmVmcmVzaCgpLAorICAgICAgICAgICAgICAgICAgIC8qYWxsb3dfZG5lKi8gdHJ1ZSk7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSBfX2dldF9zeW1f
ZnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0
YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgICAgcmV0dXJuIF9fc3lt
bGlua19zdGF0dXMoX19wXywgX19lYykudHlwZSgpOworICAgIGNhc2UgX0l0ZXJTeW1saW5rOgor
ICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNv
bHZlZDoKKyAgICAgIGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAgICAgcmV0
dXJuIGZpbGVfdHlwZTo6c3ltbGluazsKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBj
YXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5f
X3R5cGVfKTsKKyAgICAgIGlmIChfX2VjICYmICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAg
ICAgICAqX19lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0
b3J5KTsKKyAgICAgIGVsc2UgaWYgKF9fZWMpCisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAg
ICByZXR1cm4gX19kYXRhXy5fX3R5cGVfOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxF
KCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSBfX2dl
dF9mdChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19k
YXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlclN5
bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJu
IF9fc3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoK
KyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazog
eworICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2RhdGFfLl9fdHlwZV8pOworICAgICAgaWYgKF9f
ZWMgJiYgIV9WU1REX0ZTOjpleGlzdHMoX19zdCkpCisgICAgICAgICpfX2VjID0gbWFrZV9lcnJv
cl9jb2RlKGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3RvcnkpOworICAgICAgZWxzZSBpZiAo
X19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBfX2RhdGFfLl9fdHlw
ZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIF9fZ2V0X3N0YXR1cyhlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6
CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29s
dmVkOgorICAgICAgcmV0dXJuIF9fc3RhdHVzKF9fcF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJl
c2hOb25TeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgICAgcmV0dXJuIGZp
bGVfc3RhdHVzKF9fZ2V0X2Z0KF9fZWMpLCBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18pOworICAg
IH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIF9fZ2V0X3N5bWxpbmtfc3RhdHVzKGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlw
ZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBj
YXNlIF9JdGVyU3ltbGluazoKKyAgICAgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9fcF8sIF9f
ZWMpOworICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOgorICAgICAgcmV0dXJuIGZpbGVfc3Rh
dHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfKTsKKyAgICBj
YXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6
CisgICAgICByZXR1cm4gZmlsZV9zdGF0dXMoX19nZXRfc3ltX2Z0KF9fZWMpLCBfX2RhdGFfLl9f
c3ltX3Blcm1zXyk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IF9fZ2V0X3NpemUoZXJyb3Jf
Y29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNo
ZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgor
ICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZl
ZDoKKyAgICAgIHJldHVybiBfVlNURF9GUzo6X19maWxlX3NpemUoX19wXywgX19lYyk7CisgICAg
Y2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6IHsKKyAg
ICAgIGVycm9yX2NvZGUgX19tX2VjOworICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2dldF9mdCgm
X19tX2VjKSk7CisgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpmaWxl
X3NpemUiLCBfX2VjLCBfX21fZWMpOworICAgICAgaWYgKF9WU1REX0ZTOjpleGlzdHMoX19zdCkg
JiYgIV9WU1REX0ZTOjppc19yZWd1bGFyX2ZpbGUoX19zdCkpIHsKKyAgICAgICAgZXJyYyBfX2Vy
cl9raW5kID0gX1ZTVERfRlM6OmlzX2RpcmVjdG9yeShfX3N0KSA/IGVycmM6OmlzX2FfZGlyZWN0
b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBlcnJjOjpub3Rfc3VwcG9ydGVkOworICAgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGly
ZWN0b3J5X2VudHJ5OjpmaWxlX3NpemUiLCBfX2VjLAorICAgICAgICAgICAgICAgICAgICAgICBt
YWtlX2Vycm9yX2NvZGUoX19lcnJfa2luZCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9fZGF0
YV8uX19zaXplXzsKKyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IF9fZ2V0X25saW5r
KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFf
Ll9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3lt
bGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1Vu
cmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX1ZTVERfRlM6Ol9faGFyZF9saW5rX2NvdW50KF9fcF8s
IF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25T
eW1saW5rOiB7CisgICAgICBlcnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgICh2b2lkKV9fZ2V0X2Z0
KCZfX21fZWMpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6aGFy
ZF9saW5rX2NvdW50IiwgX19lYywgX19tX2VjKTsKKyAgICAgIHJldHVybiBfX2RhdGFfLl9fbmxp
bmtfOworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBfX2dldF93cml0ZV90
aW1lKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2Rh
dGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9u
U3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlu
a1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fbGFzdF93cml0ZV90aW1lKF9f
cF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hO
b25TeW1saW5rOiB7CisgICAgICBlcnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3RhdHVz
IF9fc3QoX19nZXRfZnQoJl9fbV9lYykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVj
dG9yeV9lbnRyeTo6bGFzdF93cml0ZV90aW1lIiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChf
VlNURF9GUzo6ZXhpc3RzKF9fc3QpICYmCisgICAgICAgICAgX19kYXRhXy5fX3dyaXRlX3RpbWVf
ID09IGZpbGVfdGltZV90eXBlOjptaW4oKSkKKyAgICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRp
cmVjdG9yeV9lbnRyeTo6bGFzdF93cml0ZV90aW1lIiwgX19lYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZV9lcnJvcl9jb2RlKGVycmM6OnZhbHVlX3Rvb19sYXJnZSkpOworICAgICAgcmV0
dXJuIF9fZGF0YV8uX193cml0ZV90aW1lXzsKKyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5S
RUFDSEFCTEUoKTsKKyAgfQorCitwcml2YXRlOgorICBfUGF0aCBfX3BfOworICBfX2NhY2hlZF9k
YXRhIF9fZGF0YV87Cit9OworCitjbGFzcyBfX2Rpcl9lbGVtZW50X3Byb3h5IHsKK3B1YmxpYzoK
KyAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZGlyZWN0b3J5X2VudHJ5IG9wZXJh
dG9yKigpIHsKKyAgICByZXR1cm4gX1ZTVEQ6Om1vdmUoX19lbGVtXyk7CisgIH0KKworcHJpdmF0
ZToKKyAgZnJpZW5kIGNsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJpZW5kIGNsYXNzIHJl
Y3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7CisgIGV4cGxpY2l0IF9fZGlyX2VsZW1lbnRfcHJv
eHkoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX2UpIDogX19lbGVtXyhfX2UpIHt9CisgIF9fZGly
X2VsZW1lbnRfcHJveHkoX19kaXJfZWxlbWVudF9wcm94eSYmIF9fbykKKyAgICAgIDogX19lbGVt
XyhfVlNURDo6bW92ZShfX28uX19lbGVtXykpIHt9CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VsZW1f
OworfTsKKworY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgdHlwZWRlZiBk
aXJlY3RvcnlfZW50cnkgdmFsdWVfdHlwZTsKKyAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j
ZV90eXBlOworICB0eXBlZGVmIHZhbHVlX3R5cGUgY29uc3QqIHBvaW50ZXI7CisgIHR5cGVkZWYg
dmFsdWVfdHlwZSBjb25zdCYgcmVmZXJlbmNlOworICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworcHVibGljOgorICAvL2N0b3IgJiBkdG9yCisgIGRpcmVj
dG9yeV9pdGVyYXRvcigpIG5vZXhjZXB0IHt9CisKKyAgZXhwbGljaXQgZGlyZWN0b3J5X2l0ZXJh
dG9yKGNvbnN0IHBhdGgmIF9fcCkKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgbnVs
bHB0cikge30KKworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rv
cnlfb3B0aW9ucyBfX29wdHMpCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsIG51bGxw
dHIsIF9fb3B0cykge30KKworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBl
cnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCAmX19lYykg
e30KKworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0
aW9ucyBfX29wdHMsCisgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKQorICAg
ICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCAmX19lYywgX19vcHRzKSB7fQorCisgIGRpcmVj
dG9yeV9pdGVyYXRvcihjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisgIGRp
cmVjdG9yeV9pdGVyYXRvcihkaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZhdWx0OworICBkaXJl
Y3RvcnlfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRl
ZmF1bHQ7CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcj0oZGlyZWN0b3J5X2l0ZXJh
dG9yJiYgX19vKSBub2V4Y2VwdCB7CisgICAgLy8gbm9uLWRlZmF1bHQgaW1wbGVtZW50YXRpb24g
cHJvdmlkZWQgdG8gc3VwcG9ydCBzZWxmLW1vdmUgYXNzaWduLgorICAgIGlmICh0aGlzICE9ICZf
X28pIHsKKyAgICAgIF9faW1wXyA9IF9WU1REOjptb3ZlKF9fby5fX2ltcF8pOworICAgIH0KKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKworICB+ZGlyZWN0b3J5X2l0ZXJhdG9yKCkgPSBkZWZhdWx0
OworCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3IqKCkgY29uc3QgeworICAgIF9M
SUJDUFBfQVNTRVJUKF9faW1wXywgIlRoZSBlbmQgaXRlcmF0b3IgY2Fubm90IGJlIGRlcmVmZXJl
bmNlZCIpOworICAgIHJldHVybiBfX2RlcmVmZXJlbmNlKCk7CisgIH0KKworICBjb25zdCBkaXJl
Y3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKip0aGlzOyB9CisKKyAg
ZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4gX19pbmNyZW1lbnQoKTsg
fQorCisgIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0b3IrKyhpbnQpIHsKKyAgICBfX2Rpcl9l
bGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOworICAgIF9faW5jcmVtZW50KCk7CisgICAgcmV0dXJu
IF9fcDsKKyAgfQorCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgaW5jcmVtZW50KGVycm9yX2NvZGUm
IF9fZWMpIHsgcmV0dXJuIF9faW5jcmVtZW50KCZfX2VjKTsgfQorCitwcml2YXRlOgorICBpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmllbmQgYm9vbAorICBvcGVyYXRvcj09KGNv
bnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgY29uc3QgZGlyZWN0
b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQ7CisKKyAgLy8gY29uc3RydWN0IHRoZSBkaXJf
c3RyZWFtCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBh
dGgmLCBlcnJvcl9jb2RlKiwKKyAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25z
ID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgZGly
ZWN0b3J5X2l0ZXJhdG9yJiBfX2luY3JlbWVudChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7
CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIF9fZGVyZWZl
cmVuY2UoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgc2hhcmVkX3B0cjxfX2Rpcl9zdHJlYW0+IF9f
aW1wXzsKK307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK29wZXJh
dG9yPT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgY29uc3Qg
ZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuX19p
bXBfID09IF9fcmhzLl9faW1wXzsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbAorb3BlcmF0b3IhPShjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAg
ICAgICAgICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJl
dHVybiAhKF9fbGhzID09IF9fcmhzKTsKK30KKworLy8gZW5hYmxlIGRpcmVjdG9yeV9pdGVyYXRv
ciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgZGlyZWN0b3J5X2l0ZXJhdG9yCitiZWdpbihkaXJlY3RvcnlfaXRlcmF0b3IgX19pdGVy
KSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGRpcmVjdG9yeV9pdGVyYXRvcgorZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVy
YXRvciYpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGRpcmVjdG9yeV9pdGVyYXRvcigpOworfQorCitj
bGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgdXNpbmcgdmFs
dWVfdHlwZSA9IGRpcmVjdG9yeV9lbnRyeTsKKyAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3Rk
OjpwdHJkaWZmX3Q7CisgIHVzaW5nIHBvaW50ZXIgPSBkaXJlY3RvcnlfZW50cnkgY29uc3QqOwor
ICB1c2luZyByZWZlcmVuY2UgPSBkaXJlY3RvcnlfZW50cnkgY29uc3QmOworICB1c2luZyBpdGVy
YXRvcl9jYXRlZ29yeSA9IHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnOworCitwdWJsaWM6CisgIC8v
IGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoKSBub2V4Y2VwdCA6IF9fcmVjXyhmYWxz
ZSkge30KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IoCisgICAgICBjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9v
cHRpb25zIF9feG9wdGlvbnMgPSBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSkKKyAgICAgIDogcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlvbnMsIG51bGxwdHIpIHt9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX194b3B0aW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgX194b3B0aW9ucywgJl9fZWMpIHt9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
KGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcihfX3AsIGRpcmVjdG9yeV9vcHRpb25zOjpub25lLCAmX19lYykge30K
KworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Io
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYmKSA9IGRlZmF1bHQ7CisKKyAgcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3BlcmF0b3I9KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJgorICBvcGVyYXRvcj0ocmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYmIF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZhdWx0IGlt
cGxlbWVudGF0aW9uIHByb3ZpZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBp
ZiAodGhpcyAhPSAmX19vKSB7CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28uX19pbXBf
KTsKKyAgICAgIF9fcmVjXyA9IF9fby5fX3JlY187CisgICAgfQorICAgIHJldHVybiAqdGhpczsK
KyAgfQorCisgIH5yZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiBfX2RlcmVmZXJlbmNlKCk7IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSogb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICZfX2RlcmVmZXJlbmNlKCk7IH0KKworICByZWN1cnNpdmVfZGlyZWN0b3J5
X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4gX19pbmNyZW1lbnQoKTsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgX19kaXJfZWxlbWVudF9wcm94eSBvcGVyYXRvcisr
KGludCkgeworICAgIF9fZGlyX2VsZW1lbnRfcHJveHkgX19wKCoqdGhpcyk7CisgICAgX19pbmNy
ZW1lbnQoKTsKKyAgICByZXR1cm4gX19wOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBpbmNyZW1lbnQoZXJyb3JfY29k
ZSYgX19lYykgeworICAgIHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7CisgIH0KKworICBfTElC
Q1BQX0ZVTkNfVklTIGRpcmVjdG9yeV9vcHRpb25zIG9wdGlvbnMoKSBjb25zdDsKKyAgX0xJQkNQ
UF9GVU5DX1ZJUyBpbnQgZGVwdGgoKSBjb25zdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHZvaWQgcG9wKCkgeyBfX3BvcCgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICB2b2lkIHBvcChlcnJvcl9jb2RlJiBfX2VjKSB7IF9fcG9wKCZfX2VjKTsgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCByZWN1cnNpb25fcGVuZGluZygpIGNv
bnN0IHsgcmV0dXJuIF9fcmVjXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
dm9pZCBkaXNhYmxlX3JlY3Vyc2lvbl9wZW5kaW5nKCkgeyBfX3JlY18gPSBmYWxzZTsgfQorCitw
cml2YXRlOgorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwg
ZGlyZWN0b3J5X29wdGlvbnMgX19vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSogX19lYyk7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBjb25zdCBkaXJlY3Rv
cnlfZW50cnkmIF9fZGVyZWZlcmVuY2UoKSBjb25zdDsKKworICBfTElCQ1BQX0ZVTkNfVklTCisg
IGJvb2wgX190cnlfcmVjdXJzaW9uKGVycm9yX2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVO
Q19WSVMKKyAgdm9pZCBfX2FkdmFuY2UoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisg
IF9MSUJDUFBfRlVOQ19WSVMKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19pbmNy
ZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIF9MSUJDUFBfRlVOQ19WSVMK
KyAgdm9pZCBfX3BvcChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKKyAgaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiwKKyAgICAgICAgICAgICBjb25zdCByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQ7CisKKyAgc3RydWN0IF9fc2hhcmVkX2lt
cDsKKyAgc2hhcmVkX3B0cjxfX3NoYXJlZF9pbXA+IF9faW1wXzsKKyAgYm9vbCBfX3JlY187Cit9
OyAvLyBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wKK29wZXJhdG9yPT0oY29uc3QgcmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5fX2ltcF8gPT0g
X19yaHMuX19pbXBfOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
JiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7Cit9CisvLyBl
bmFibGUgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciByYW5nZS1iYXNlZCBmb3Igc3RhdGVt
ZW50cworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcgorYmVnaW4ocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBfX2l0ZXIpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIF9faXRlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorZW5kKGNvbnN0IHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdCB7CisgIHJldHVybiByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yKCk7Cit9CisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVN
CisKKyNlbmRpZiAvLyAhX0xJQkNQUF9DWFgwM19MQU5HCisKK19MSUJDUFBfUE9QX01BQ1JPUwor
CisjZW5kaWYgLy8gX0xJQkNQUF9GSUxFU1lTVEVNCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410586</attachid>
            <date>2020-10-05 16:36:25 -0700</date>
            <delta_ts>2020-10-05 17:28:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217302-20201005163624.patch</filename>
            <type>text/plain</type>
            <size>172540</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5ODYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDIwLTEwLTA1ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gb2YgPGZpbGVzeXN0ZW0+
IHRvIFdURiBmb3IgbWFjT1MgMTAuMTQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNzMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgorCisgICAgICAgIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBhbmQgaXRzIG5lZWRl
ZCBpbXBsZW1lbnRhdGlvbiBmaWxlcworICAgICAgICBmcm9tIGxpYmMrKyAocjM0MzgzOCkgYW5k
IG1vZGlmaWVzIHRoZW0gdG8gYnVpbGQgb3V0c2lkZSBvZiAgbGliYysrLiAKKyAgICAgICAgVGhp
cyBpcyBvbmx5IG5lZWRlZCBhbmQgb25seSBidWlsdCBmb3IgdmVyc2lvbnMgb2YgbWFjT1MgPCAx
MC4xNQorICAgICAgICBhbmQgY2FuIGJlIGRyb3BwZWQgd2hlbiB3ZSByZXF1aXJlIDEwLjE1Lgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9TdGRGaWxlc3lzdGVtLmNwcDogQWRkZWQu
CisgICAgICAgICogd3RmL1N0ZEZpbGVzeXN0ZW0uaDogQWRkZWQuCisgICAgICAgICogTElDRU5T
RS1saWJjKysudHh0OiBBZGRlZC4KKwogMjAyMC0xMC0wNSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHN1YnBpeGVs
IENTU09NIHZhbHVlcywgaXQncyBvZmYgYnkgZGVmYXVsdCBldmVyeXdoZXJlIGFuZCBrbm93biB0
byBiZSBub3QtY29tcGF0aWJsZSB3aXRoIHRoZSB3ZWIKSW5kZXg6IFNvdXJjZS9XVEYvTElDRU5T
RS1saWJjKysudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvTElDRU5TRS1saWJjKysudHh0
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvTElDRU5TRS1saWJjKysudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbGliYysrIExp
Y2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbGliYysrIGxpYnJhcnkgaXMgZHVh
bCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisiQlNELUxp
a2UiIGxpY2Vuc2UgYW5kIHRoZSBNSVQgbGljZW5zZS4gIEFzIGEgdXNlciBvZiB0aGlzIGNvZGUg
eW91IG1heSBjaG9vc2UKK3RvIHVzZSBpdCB1bmRlciBlaXRoZXIgbGljZW5zZS4gIEFzIGEgY29u
dHJpYnV0b3IsIHlvdSBhZ3JlZSB0byBhbGxvdyB5b3VyIGNvZGUKK3RvIGJlIHVzZWQgdW5kZXIg
Ym90aC4KKworRnVsbCB0ZXh0IG9mIHRoZSByZWxldmFudCBsaWNlbnNlcyBpcyBpbmNsdWRlZCBi
ZWxvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMv
TkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNyBieSB0
aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorCitEZXZlbG9wZWQgYnk6CisKKyAgICBMTFZNIFRlYW0KKworICAgIFVuaXZlcnNpdHkg
b2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgorCisgICAgaHR0cDovL2xsdm0ub3JnCisK
K1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy
c29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j
dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKK3RoZSBTb2Z0
d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRo
ZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0
ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0
byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8K
K3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcnMuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwg
VW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAorICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCisgICAgICBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYworICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUg
SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT
UyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT05UUklCVVRPUlMg
T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg
T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCitTT0ZU
V0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0
IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK1Blcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu
ZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm
aWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy
ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1
c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv
bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRX
QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY
UFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9S
IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U
SEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S
IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU
SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJF
LgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNjc5ODYpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBACiAJCTdBNkVCQTM0MjA3NDZDMzQwMDRGOUM0
NCAvKiBNYWNoU2VuZFJpZ2h0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBNkVCQTMzMjA3NDZDMzQwMDRGOUM0NCAvKiBNYWNoU2VuZFJpZ2h0LmNw
cCAqLzsgfTsKIAkJN0FGMDIzQjUyMDYxRTE3MDAwQThFRkQ2IC8qIFByb2Nlc3NQcml2aWxlZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGMDIz
QjQyMDYxRTE2RjAwQThFRkQ2IC8qIFByb2Nlc3NQcml2aWxlZ2UuY3BwICovOyB9OwogCQk3QUZF
QzZCMTFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5j
cHAgKi87IH07CisJCTdDNTk1RkZFMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVtLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNTk1RkZE
MjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLzsgfTsKIAkJODEzNDAxMzgx
NUIwOTJGRDAwMUZGMEI4IC8qIEJhc2U2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MTM0MDEzNjE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmNw
cCAqLzsgfTsKIAkJODM0OEJBMEUyMUZCQzBENTAwRkQzMDU0IC8qIE9iamVjdElkZW50aWZpZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0OEJB
MEQyMUZCQzBENDAwRkQzMDU0IC8qIE9iamVjdElkZW50aWZpZXIuY3BwICovOyB9OwogCQk5Mzkz
NEJEMzE4QTFFOEMzMDBEMEQ2QTEgLyogU3RyaW5nVmlld0NvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MzRCRDIxOEExRThDMzAwRDBENkEx
IC8qIFN0cmluZ1ZpZXdDb2NvYS5tbSAqLzsgfTsKQEAgLTQ2Miw2ICs0NjMsOCBAQAogCQk3QzQy
MzA3MjIzQ0UyRDhBMDA2RTU0RDAgLyogUGxhdGZvcm1DUFUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DUFUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzMyM0NFMkQ4QjAwNkU1NEQwIC8qIFBsYXRmb3JtT1MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1PUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzQyMzA3NDIzQ0VCMTg3MDA2RTU0RDAgLyogUGxhdGZvcm1MZWdhY3kuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1MZWdhY3kuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M1OTVGRkMyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVz
eXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RkRmlsZXN5c3RlbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzU5NUZGRDI1MkE5NkUwMDBFNDIxNjgg
LyogU3RkRmlsZXN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGRGaWxlc3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M5Njky
OTQxRjY2MzA2RTAwMjY3QTlFIC8qIEtleVZhbHVlUGFpci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBLZXlWYWx1ZVBhaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M5OENEQzcyM0U3QTlCODAwMTJGMjMyIC8qIFBsYXRmb3JtRW5hYmxlQ29jb2EuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1FbmFibGVDb2NvYS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzk4Q0RDODIzRTdBRkM4MDAxMkYyMzIgLyogUGxh
dGZvcm1FbmFibGVXaW5BcHBsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybUVuYWJsZVdpbkFwcGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjQ1LDYgKzEyNDgsOCBAQAogCQkJCUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0
YXRzLmggKi8sCiAJCQkJMzEzRURFQzk3NzhFNDlDOUJFQTkxQ0ZDIC8qIFN0YWNrVHJhY2UuY3Bw
ICovLAogCQkJCUVGN0Q2Q0Q1OUQ4NjQyQThBMERBODZBRCAvKiBTdGFja1RyYWNlLmggKi8sCisJ
CQkJN0M1OTVGRkQyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovLAorCQkJ
CTdDNTk1RkZDMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVtLmggKi8sCiAJCQkJRkU5
N0Y2QTgyNDVDRTVERDAwQzYzRkM2IC8qIFN0ZEludEV4dHJhcy5oICovLAogCQkJCUE4QTQ3MzEx
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMuaCAqLywKIAkJCQlGRjBBNDM2NTg4OTU0
RjNDQjA3REJFQ0EgLyogU3RkTGlzdC5oICovLApAQCAtMTc0NSw2ICsxNzUwLDcgQEAKIAkJCQlG
RUVBNERGOTIxNkQ3QkU0MDBBQzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMzMzdEQjlDRTc0MzQxMEZBRjA3NkUxNyAvKiBTdGFja1RyYWNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdDNTk1RkZFMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lz
dGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTVCNjM3MjBDQjVFRkQwMDQ3OTYzNSAvKiBT
dHJpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0MxNTFBODI1QjAwNDEy
M0ZGIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM4RDZFMjcxRjU1
MjJFMzAwQTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2Nzk4NikKKysrIFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNiArMjQxLDcgQEAgc2V0KFdU
Rl9QVUJMSUNfSEVBREVSUwogICAgIFN0YWNrU2hvdFByb2ZpbGVyLmgKICAgICBTdGFja1N0YXRz
LmgKICAgICBTdGFja1RyYWNlLmgKKyAgICBTdGRGaWxlc3lzdGVtLmgKICAgICBTdGRJbnRFeHRy
YXMuaAogICAgIFN0ZExpYkV4dHJhcy5oCiAgICAgU3RkTGlzdC5oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9TdGRGaWxlc3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRG
aWxlc3lzdGVtLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lz
dGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MDUgQEAKKy8vPT09LS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBTdGRGaWxlc3lzdGVtLmNwcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJ
bmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBNSVQgYW5kIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4KKy8vIFNvdXJjZSBMaWNl
bnNlcy4gU2VlIExJQ0VOU0UtbGliYysrLnR4dCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS09PT0vLworCisvKiBJbXBvcnRzIGEgY29weSBvZiBmaWxlc3lzdGVtL2ZpbGVzeXN0
ZW1fY29tbW9uLmgsIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCwKKyAgIGZpbGVz
eXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCBhbmQgZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCBm
cm9tIHIzNDM4Mzggb2YgdGhlCisgICBsaWJjKysgcHJvamVjdCBhbmQgaGFzIG1vZGlmaWVkIHRo
ZW0gdG8gd29yayBvdXRzaWRlIG9mIGEgYnVpbGQgb2YgbGliYysrIGl0c2VsZi4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIFBMQVRG
T1JNKE1BQykKKworI2luY2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgorCisjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTUwMAorCisjaW5jbHVkZSAiU3RkRmlsZXN5c3RlbS5o
IgorCisjaW5jbHVkZSA8X19jb25maWc+CisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vZmlsZXN5
c3RlbV9jb21tb24uaCAtLSAqLworCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y2hyb25v
PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4K
KyNpbmNsdWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgOjp1dGltZXMgYXMgdXNlZCBpbiBfX2xhc3Rf
d3JpdGVfdGltZQorI2luY2x1ZGUgPGZjbnRsLmg+ICAgIC8qIHZhbHVlcyBmb3IgZmNobW9kYXQg
Ki8KKworLyogI2luY2x1ZGUgIi4uL2luY2x1ZGUvYXBwbGVfYXZhaWxhYmlsaXR5LmgiICovCisK
KyNpZiAhZGVmaW5lZChfX0FQUExFX18pCisvLyBXZSBjYW4gdXNlIHRoZSBwcmVzZW5jZSBvZiBV
VElNRV9PTUlUIHRvIGRldGVjdCBwbGF0Zm9ybXMgdGhhdCBwcm92aWRlCisvLyB1dGltZW5zYXQu
CisjaWYgZGVmaW5lZChVVElNRV9PTUlUKQorI2RlZmluZSBfTElCQ1BQX1VTRV9VVElNRU5TQVQK
KyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1
bmN0aW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0
ZXIiCisjZW5kaWYKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCituYW1l
c3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBzdHJpbmcgZm9ybWF0X3N0cmlu
Z19pbXAoY29uc3QgY2hhciogbXNnLCAuLi4pIHsKKyAgLy8gd2UgbWlnaHQgbmVlZCBhIHNlY29u
ZCBzaG90IGF0IHRoaXMsIHNvIHByZS1lbXB0aXZseSBtYWtlIGEgY29weQorICBzdHJ1Y3QgR3Vh
cmRWQUxpc3QgeworICAgIHZhX2xpc3QmIHRhcmdldDsKKyAgICBib29sIGFjdGl2ZSA9IHRydWU7
CisgICAgR3VhcmRWQUxpc3QodmFfbGlzdCYgdGFyZ2V0KSA6IHRhcmdldCh0YXJnZXQpLCBhY3Rp
dmUodHJ1ZSkge30KKyAgICB2b2lkIGNsZWFyKCkgeworICAgICAgaWYgKGFjdGl2ZSkKKyAgICAg
ICAgdmFfZW5kKHRhcmdldCk7CisgICAgICBhY3RpdmUgPSBmYWxzZTsKKyAgICB9CisgICAgfkd1
YXJkVkFMaXN0KCkgeworICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAgdmFfZW5kKHRhcmdldCk7
CisgICAgfQorICB9OworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0KGFyZ3MsIG1zZyk7Cisg
IEd1YXJkVkFMaXN0IGFyZ3NfZ3VhcmQoYXJncyk7CisKKyAgdmFfbGlzdCBhcmdzX2NwOworICB2
YV9jb3B5KGFyZ3NfY3AsIGFyZ3MpOworICBHdWFyZFZBTGlzdCBhcmdzX2NvcHlfZ3VhcmQoYXJn
c19jcCk7CisKKyAgYXJyYXk8Y2hhciwgMjU2PiBsb2NhbF9idWZmOworICBzaXplX3Qgc2l6ZSA9
IGxvY2FsX2J1ZmYuc2l6ZSgpOworCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0
LW5vbmxpdGVyYWwiCisjZW5kaWYKKyAgYXV0byByZXQgPSA6OnZzbnByaW50Zihsb2NhbF9idWZm
LmRhdGEoKSwgc2l6ZSwgbXNnLCBhcmdzX2NwKTsKKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisgIGFyZ3NfY29weV9ndWFyZC5jbGVhcigp
OworCisgIC8vIGhhbmRsZSBlbXB0eSBleHBhbnNpb24KKyAgaWYgKHJldCA9PSAwKQorICAgIHJl
dHVybiBzdHJpbmd7fTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmV0KSA8IHNpemUpCisg
ICAgcmV0dXJuIHN0cmluZyhsb2NhbF9idWZmLmRhdGEoKSk7CisKKyAgLy8gd2UgZGlkIG5vdCBw
cm92aWRlIGEgbG9uZyBlbm91Z2ggYnVmZmVyIG9uIG91ciBmaXJzdCBhdHRlbXB0LgorICAvLyBh
ZGQgMSB0byBzaXplIHRvIGFjY291bnQgZm9yIG51bGwtYnl0ZSBpbiBzaXplIGNhc3QgdG8gcHJl
dmVudCBvdmVyZmxvdworICBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpICsgMTsKKyAg
YXV0byBidWZmX3B0ciA9IHVuaXF1ZV9wdHI8Y2hhcltdPihuZXcgY2hhcltzaXplXSk7CisKKyNp
ZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNlbmRpZgorICBy
ZXQgPSA6OnZzbnByaW50ZihidWZmX3B0ci5nZXQoKSwgc2l6ZSwgbXNnLCBhcmdzKTsKKyNpZmRl
ZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisgIHJl
dHVybiBzdHJpbmcoYnVmZl9wdHIuZ2V0KCkpOworfQorCitjb25zdCBjaGFyKiB1bndyYXAoc3Ry
aW5nIGNvbnN0JiBzKSB7IHJldHVybiBzLmNfc3RyKCk7IH0KK2NvbnN0IGNoYXIqIHVud3JhcChw
YXRoIGNvbnN0JiBwKSB7IHJldHVybiBwLm5hdGl2ZSgpLmNfc3RyKCk7IH0KK3RlbXBsYXRlIDxj
bGFzcyBBcmc+CitBcmcgY29uc3QmIHVud3JhcChBcmcgY29uc3QmIGEpIHsKKyAgc3RhdGljX2Fz
c2VydCghaXNfY2xhc3M8QXJnPjo6dmFsdWUsICJjYW5ub3QgcGFzcyBjbGFzcyBoZXJlIik7Cisg
IHJldHVybiBhOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KK3N0cmluZyBmb3JtYXRf
c3RyaW5nKGNvbnN0IGNoYXIqIGZtdCwgQXJncyBjb25zdCYuLi4gYXJncykgeworICByZXR1cm4g
Zm9ybWF0X3N0cmluZ19pbXAoZm10LCB1bndyYXAoYXJncykuLi4pOworfQorCitlcnJvcl9jb2Rl
IGNhcHR1cmVfZXJybm8oKSB7CisgIF9MSUJDUFBfQVNTRVJUKGVycm5vLCAiRXhwZWN0ZWQgZXJy
bm8gdG8gYmUgbm9uLXplcm8iKTsKKyAgcmV0dXJuIGVycm9yX2NvZGUoZXJybm8sIGdlbmVyaWNf
Y2F0ZWdvcnkoKSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorVCBlcnJvcl92YWx1ZSgpOwor
dGVtcGxhdGUgPD4KK19MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIHZvaWQgZXJyb3JfdmFs
dWU8dm9pZD4oKSB7fQordGVtcGxhdGUgPD4KK2Jvb2wgZXJyb3JfdmFsdWU8Ym9vbD4oKSB7Cisg
IHJldHVybiBmYWxzZTsKK30KK3RlbXBsYXRlIDw+Cit1aW50bWF4X3QgZXJyb3JfdmFsdWU8dWlu
dG1heF90PigpIHsKKyAgcmV0dXJuIHVpbnRtYXhfdCgtMSk7Cit9Cit0ZW1wbGF0ZSA8PgorX0xJ
QkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgZmlsZV90aW1lX3R5cGUgZXJyb3JfdmFsdWU8Zmls
ZV90aW1lX3R5cGU+KCkgeworICByZXR1cm4gZmlsZV90aW1lX3R5cGU6Om1pbigpOworfQordGVt
cGxhdGUgPD4KK3BhdGggZXJyb3JfdmFsdWU8cGF0aD4oKSB7CisgIHJldHVybiB7fTsKK30KKwor
dGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgRXJyb3JIYW5kbGVyIHsKKyAgY29uc3QgY2hhciog
ZnVuY19uYW1lOworICBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHI7CisgIGNvbnN0IHBhdGgqIHAx
ID0gbnVsbHB0cjsKKyAgY29uc3QgcGF0aCogcDIgPSBudWxscHRyOworCisgIEVycm9ySGFuZGxl
cihjb25zdCBjaGFyKiBmbmFtZSwgZXJyb3JfY29kZSogZWMsIGNvbnN0IHBhdGgqIHAxID0gbnVs
bHB0ciwKKyAgICAgICAgICAgICAgIGNvbnN0IHBhdGgqIHAyID0gbnVsbHB0cikKKyAgICAgIDog
ZnVuY19uYW1lKGZuYW1lKSwgZWMoZWMpLCBwMShwMSksIHAyKHAyKSB7CisgICAgaWYgKGVjKQor
ICAgICAgZWMtPmNsZWFyKCk7CisgIH0KKworICBUIHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBt
X2VjKSBjb25zdCB7CisgICAgaWYgKGVjKSB7CisgICAgICAqZWMgPSBtX2VjOworICAgICAgcmV0
dXJuIGVycm9yX3ZhbHVlPFQ+KCk7CisgICAgfQorICAgIHN0cmluZyB3aGF0ID0gc3RyaW5nKCJp
biAiKSArIGZ1bmNfbmFtZTsKKyAgICBzd2l0Y2ggKGJvb2wocDEpICsgYm9vbChwMikpIHsKKyAg
ICBjYXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgbV9lYyk7Cisg
ICAgY2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwgbV9l
Yyk7CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpw
MSwgKnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisK
KyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIFQgcmVwb3J0KGNvbnN0IGVycm9yX2NvZGUm
IG1fZWMsIGNvbnN0IGNoYXIqIG1zZywgQXJncyBjb25zdCYuLi4gYXJncykgY29uc3QgeworICAg
IGlmIChlYykgeworICAgICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92YWx1ZTxU
PigpOworICAgIH0KKyAgICBzdHJpbmcgd2hhdCA9CisgICAgICAgIHN0cmluZygiaW4gIikgKyBm
dW5jX25hbWUgKyAiOiAiICsgZm9ybWF0X3N0cmluZyhtc2csIGFyZ3MuLi4pOworICAgIHN3aXRj
aCAoYm9vbChwMSkgKyBib29sKHAyKSkgeworICAgIGNhc2UgMDoKKyAgICAgIF9fdGhyb3dfZmls
ZXN5c3RlbV9lcnJvcih3aGF0LCBtX2VjKTsKKyAgICBjYXNlIDE6CisgICAgICBfX3Rocm93X2Zp
bGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCBtX2VjKTsKKyAgICBjYXNlIDI6CisgICAgICBfX3Ro
cm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCAqcDIsIG1fZWMpOworICAgIH0KKyAgICBf
TElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBUIHJlcG9ydChlcnJjIGNvbnN0JiBlcnIp
IGNvbnN0IHsgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9yX2NvZGUoZXJyKSk7IH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgVCByZXBvcnQoZXJyYyBjb25zdCYgZXJyLCBjb25zdCBj
aGFyKiBtc2csIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVwb3J0
KG1ha2VfZXJyb3JfY29kZShlcnIpLCBtc2csIGFyZ3MuLi4pOworICB9CisKK3ByaXZhdGU6Cisg
IEVycm9ySGFuZGxlcihFcnJvckhhbmRsZXIgY29uc3QmKSA9IGRlbGV0ZTsKKyAgRXJyb3JIYW5k
bGVyJiBvcGVyYXRvcj0oRXJyb3JIYW5kbGVyIGNvbnN0JikgPSBkZWxldGU7Cit9OworCit1c2lu
ZyBjaHJvbm86OmR1cmF0aW9uOwordXNpbmcgY2hyb25vOjpkdXJhdGlvbl9jYXN0OworCit1c2lu
ZyBUaW1lU3BlYyA9IHN0cnVjdCA6OnRpbWVzcGVjOwordXNpbmcgU3RhdFQgPSBzdHJ1Y3QgOjpz
dGF0OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVCwKKyAgICAgICAg
ICBib29sIElzRmxvYXQgPSBpc19mbG9hdGluZ19wb2ludDx0eXBlbmFtZSBGaWxlVGltZVQ6OnJl
cD46OnZhbHVlPgorc3RydWN0IHRpbWVfdXRpbF9iYXNlIHsKKyAgdXNpbmcgcmVwID0gdHlwZW5h
bWUgRmlsZVRpbWVUOjpyZXA7CisgIHVzaW5nIGZzX2R1cmF0aW9uID0gdHlwZW5hbWUgRmlsZVRp
bWVUOjpkdXJhdGlvbjsKKyAgdXNpbmcgZnNfc2Vjb25kcyA9IGR1cmF0aW9uPHJlcD47CisgIHVz
aW5nIGZzX25hbm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBuYW5vPjsKKyAgdXNpbmcgZnNfbWlj
cm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBtaWNybz47CisKKyAgc3RhdGljIGNvbnN0ZXhwciBy
ZXAgbWF4X3NlY29uZHMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGlt
ZVQ6OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBt
YXhfbnNlYyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihGaWxlVGltZVQ6
OmR1cmF0aW9uOjptYXgoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
c19zZWNvbmRzKG1heF9zZWNvbmRzKSkKKyAgICAgICAgICAuY291bnQoKTsKKworICBzdGF0aWMg
Y29uc3RleHByIHJlcCBtaW5fc2Vjb25kcyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29u
ZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpKS5jb3VudCgpOworCisgIHN0YXRpYyBjb25z
dGV4cHIgcmVwIG1pbl9uc2VjX3RpbWVzcGVjID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFu
b3NlY29uZHM+KAorICAgICAgICAgIChGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSAtIGZzX3Nl
Y29uZHMobWluX3NlY29uZHMpKSArCisgICAgICAgICAgZnNfc2Vjb25kcygxKSkKKyAgICAgICAg
ICAuY291bnQoKTsKKworcHJpdmF0ZToKKyNpZiBfTElCQ1BQX1NURF9WRVIgPiAxMSAmJiAhZGVm
aW5lZChfTElCQ1BQX0hBU19OT19DWFgxNF9DT05TVEVYUFIpCisgIHN0YXRpYyBjb25zdGV4cHIg
ZnNfZHVyYXRpb24gZ2V0X21pbl9uc2VjcygpIHsKKyAgICByZXR1cm4gZHVyYXRpb25fY2FzdDxm
c19kdXJhdGlvbj4oCisgICAgICAgIGZzX25hbm9zZWNvbmRzKG1pbl9uc2VjX3RpbWVzcGVjKSAt
CisgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KGZzX3NlY29uZHMoMSkpKTsK
KyAgfQorICAvLyBTdGF0aWMgYXNzZXJ0IHRoYXQgdGhlc2UgdmFsdWVzIHByb3Blcmx5IHJvdW5k
IHRyaXAuCisgIHN0YXRpY19hc3NlcnQoZnNfc2Vjb25kcyhtaW5fc2Vjb25kcykgKyBnZXRfbWlu
X25zZWNzKCkgPT0KKyAgICAgICAgICAgICAgICAgICAgRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWlu
KCksCisgICAgICAgICAgICAgICAgInZhbHVlIGRvZXNuJ3Qgcm91bmR0cmlwIik7CisKKyAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGNoZWNrX3JhbmdlKCkgeworICAgIC8vIFRoaXMga2luZGEgc3Vj
a3MsIGJ1dCBpdCdzIHdoYXQgaGFwcGVucyB3aGVuIHdlIGRvbid0IGhhdmUgX19pbnQxMjhfdC4K
KyAgICBpZiAoc2l6ZW9mKFRpbWVUKSA9PSBzaXplb2YocmVwKSkgeworICAgICAgdHlwZWRlZiBk
dXJhdGlvbjxsb25nIGxvbmcsIHJhdGlvPDM2MDAgKiAyNCAqIDM2NT4gPiBZZWFyczsKKyAgICAg
IHJldHVybiBkdXJhdGlvbl9jYXN0PFllYXJzPihmc19zZWNvbmRzKG1heF9zZWNvbmRzKSkgPiBZ
ZWFycygyNTApICYmCisgICAgICAgICAgICAgZHVyYXRpb25fY2FzdDxZZWFycz4oZnNfc2Vjb25k
cyhtaW5fc2Vjb25kcykpIDwgWWVhcnMoLTI1MCk7CisgICAgfQorICAgIHJldHVybiBtYXhfc2Vj
b25kcyA+PSBudW1lcmljX2xpbWl0czxUaW1lVD46Om1heCgpICYmCisgICAgICAgICAgIG1pbl9z
ZWNvbmRzIDw9IG51bWVyaWNfbGltaXRzPFRpbWVUPjo6bWluKCk7CisgIH0KKyAgc3RhdGljX2Fz
c2VydChjaGVja19yYW5nZSgpLCAidGhlIHJlcHJlc2VudGFibGUgcmFuZ2UgaXMgdW5hY2NlcHRh
YmxlIHNtYWxsIik7CisjZW5kaWYKK307CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNs
YXNzIFRpbWVUPgorc3RydWN0IHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+
IHsKKyAgdXNpbmcgcmVwID0gdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA7CisgIHVzaW5nIGZzX2R1
cmF0aW9uID0gdHlwZW5hbWUgRmlsZVRpbWVUOjpkdXJhdGlvbjsKKyAgdXNpbmcgZnNfc2Vjb25k
cyA9IGR1cmF0aW9uPHJlcD47CisgIHVzaW5nIGZzX25hbm9zZWNvbmRzID0gZHVyYXRpb248cmVw
LCBuYW5vPjsKKyAgdXNpbmcgZnNfbWljcm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBtaWNybz47
CisKKyAgc3RhdGljIGNvbnN0IHJlcCBtYXhfc2Vjb25kczsKKyAgc3RhdGljIGNvbnN0IHJlcCBt
YXhfbnNlYzsKKyAgc3RhdGljIGNvbnN0IHJlcCBtaW5fc2Vjb25kczsKKyAgc3RhdGljIGNvbnN0
IHJlcCBtaW5fbnNlY190aW1lc3BlYzsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQs
IGNsYXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0
aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X3NlY29uZHMgPQorICAgICAgICBk
dXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgpKS5jb3Vu
dCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5
cGVuYW1lIEZpbGVUaW1lVDo6cmVwIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRy
dWU+OjptYXhfbnNlYyA9CisgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oRmlsZVRp
bWVUOjpkdXJhdGlvbjo6bWF4KCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZzX3NlY29uZHMobWF4X3NlY29uZHMpKQorICAgICAgICAuY291bnQoKTsKKwordGVtcGxhdGUg
PGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6
OnJlcAorICAgIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+OjptaW5fc2Vj
b25kcyA9CisgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJh
dGlvbjo6bWluKCkpLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNz
IFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxfYmFz
ZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWluX25zZWNfdGltZXNwZWMgPQorICAgICAgICBk
dXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigoRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkg
LQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtaW5f
c2Vjb25kcykpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vj
b25kcygxKSkKKyAgICAgICAgICAgIC5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRp
bWVULCBjbGFzcyBUaW1lVCwgY2xhc3MgVGltZVNwZWNUPgorc3RydWN0IHRpbWVfdXRpbCA6IHRp
bWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQ+IHsKKyAgdXNpbmcgQmFzZSA9IHRpbWVfdXRp
bF9iYXNlPEZpbGVUaW1lVCwgVGltZVQ+OworICB1c2luZyBCYXNlOjptYXhfbnNlYzsKKyAgdXNp
bmcgQmFzZTo6bWF4X3NlY29uZHM7CisgIHVzaW5nIEJhc2U6Om1pbl9uc2VjX3RpbWVzcGVjOwor
ICB1c2luZyBCYXNlOjptaW5fc2Vjb25kczsKKworICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19k
dXJhdGlvbjsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfbWljcm9zZWNvbmRzOworICB1c2lu
ZyB0eXBlbmFtZSBCYXNlOjpmc19uYW5vc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6
ZnNfc2Vjb25kczsKKworcHVibGljOgorICB0ZW1wbGF0ZSA8Y2xhc3MgQ1R5cGUsIGNsYXNzIENo
cm9ub1R5cGU+CisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGNo
ZWNrZWRfc2V0KENUeXBlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENocm9ub1R5cGUgdGltZSkgeworICAgIHVzaW5nIExpbSA9
IG51bWVyaWNfbGltaXRzPENUeXBlPjsKKyAgICBpZiAodGltZSA+IExpbTo6bWF4KCkgfHwgdGlt
ZSA8IExpbTo6bWluKCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgKm91dCA9IHN0YXRpY19j
YXN0PENUeXBlPih0aW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHN0YXRpYyBfTElC
Q1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGlzX3JlcHJlc2VudGFibGUoVGltZVNwZWNU
IHRtKSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwKSB7CisgICAgICByZXR1cm4gdG0udHZfc2Vj
IDwgbWF4X3NlY29uZHMgfHwKKyAgICAgICAgICAgICAodG0udHZfc2VjID09IG1heF9zZWNvbmRz
ICYmIHRtLnR2X25zZWMgPD0gbWF4X25zZWMpOworICAgIH0gZWxzZSBpZiAodG0udHZfc2VjID09
IChtaW5fc2Vjb25kcyAtIDEpKSB7CisgICAgICByZXR1cm4gdG0udHZfbnNlYyA+PSBtaW5fbnNl
Y190aW1lc3BlYzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA+PSBtaW5f
c2Vjb25kczsKKyAgICB9CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJf
Q1hYMTEgYm9vbCBpc19yZXByZXNlbnRhYmxlKEZpbGVUaW1lVCB0bSkgeworICAgIGF1dG8gc2Vj
cyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4odG0udGltZV9zaW5jZV9lcG9jaCgpKTsKKyAg
ICBhdXRvIG5zZWNzID0gZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4odG0udGltZV9zaW5j
ZV9lcG9jaCgpIC0gc2Vjcyk7CisgICAgaWYgKG5zZWNzLmNvdW50KCkgPCAwKSB7CisgICAgICBz
ZWNzID0gc2VjcyArIGZzX3NlY29uZHMoMSk7CisgICAgICBuc2VjcyA9IG5zZWNzICsgZnNfc2Vj
b25kcygxKTsKKyAgICB9CisgICAgdXNpbmcgVExpbSA9IG51bWVyaWNfbGltaXRzPFRpbWVUPjsK
KyAgICBpZiAoc2Vjcy5jb3VudCgpID49IDApCisgICAgICByZXR1cm4gc2Vjcy5jb3VudCgpIDw9
IFRMaW06Om1heCgpOworICAgIHJldHVybiBzZWNzLmNvdW50KCkgPj0gVExpbTo6bWluKCk7Cisg
IH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgRmlsZVRpbWVUCisg
IGNvbnZlcnRfZnJvbV90aW1lc3BlYyhUaW1lU3BlY1QgdG0pIHsKKyAgICBpZiAodG0udHZfc2Vj
ID49IDAgfHwgdG0udHZfbnNlYyA9PSAwKSB7CisgICAgICByZXR1cm4gRmlsZVRpbWVUKGZzX3Nl
Y29uZHModG0udHZfc2VjKSArCisgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8
ZnNfZHVyYXRpb24+KGZzX25hbm9zZWNvbmRzKHRtLnR2X25zZWMpKSk7CisgICAgfSBlbHNlIHsg
Ly8gdG0udHZfc2VjIDwgMAorICAgICAgYXV0byBhZGpfc3Vic2VjID0gZHVyYXRpb25fY2FzdDxm
c19kdXJhdGlvbj4oZnNfc2Vjb25kcygxKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmc19uYW5vc2Vjb25kcyh0bS50dl9uc2VjKSk7CisgICAg
ICBhdXRvIER1ciA9IGZzX3NlY29uZHModG0udHZfc2VjICsgMSkgLSBhZGpfc3Vic2VjOworICAg
ICAgcmV0dXJuIEZpbGVUaW1lVChEdXIpOworICAgIH0KKyAgfQorCisgIHRlbXBsYXRlIDxjbGFz
cyBTdWJTZWNUPgorICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbAor
ICBzZXRfdGltZXNfY2hlY2tlZChUaW1lVCogc2VjX291dCwgU3ViU2VjVCogc3Vic2VjX291dCwg
RmlsZVRpbWVUIHRwKSB7CisgICAgYXV0byBkdXIgPSB0cC50aW1lX3NpbmNlX2Vwb2NoKCk7Cisg
ICAgYXV0byBzZWNfZHVyID0gZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihkdXIpOworICAgIGF1
dG8gc3Vic2VjX2R1ciA9IGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KGR1ciAtIHNlY19k
dXIpOworICAgIC8vIFRoZSB0dl9uc2VjIGFuZCB0dl91c2VjIGZpZWxkcyBtdXN0IG5vdCBiZSBu
ZWdhdGl2ZSBzbyBhZGp1c3QgYWNjb3JkaW5nbHkKKyAgICBpZiAoc3Vic2VjX2R1ci5jb3VudCgp
IDwgMCkgeworICAgICAgaWYgKHNlY19kdXIuY291bnQoKSA+IG1pbl9zZWNvbmRzKSB7CisgICAg
ICAgIHNlY19kdXIgPSBzZWNfZHVyIC0gZnNfc2Vjb25kcygxKTsKKyAgICAgICAgc3Vic2VjX2R1
ciA9IHN1YnNlY19kdXIgKyBmc19zZWNvbmRzKDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
c3Vic2VjX2R1ciA9IGZzX25hbm9zZWNvbmRzOjp6ZXJvKCk7CisgICAgICB9CisgICAgfQorICAg
IHJldHVybiBjaGVja2VkX3NldChzZWNfb3V0LCBzZWNfZHVyLmNvdW50KCkpICYmCisgICAgICAg
ICAgIGNoZWNrZWRfc2V0KHN1YnNlY19vdXQsIHN1YnNlY19kdXIuY291bnQoKSk7CisgIH0KKyAg
c3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgY29udmVydF90b190aW1l
c3BlYyhUaW1lU3BlY1QmIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVRpbWVUIHRwKSB7CisgICAgaWYgKCFp
c19yZXByZXNlbnRhYmxlKHRwKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2V0
X3RpbWVzX2NoZWNrZWQoJmRlc3QudHZfc2VjLCAmZGVzdC50dl9uc2VjLCB0cCk7CisgIH0KK307
CisKK3VzaW5nIGZzX3RpbWUgPSB0aW1lX3V0aWw8ZmlsZV90aW1lX3R5cGUsIHRpbWVfdCwgVGlt
ZVNwZWM+OworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCitUaW1lU3BlYyBleHRyYWN0X210aW1l
KFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfbXRpbWVzcGVjOyB9CitUaW1lU3BlYyBl
eHRyYWN0X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfYXRpbWVzcGVjOyB9
CisjZWxzZQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJu
IHN0LnN0X210aW07IH0KK1RpbWVTcGVjIGV4dHJhY3RfYXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7
IHJldHVybiBzdC5zdF9hdGltOyB9CisjZW5kaWYKKworLy8gYWxsb3cgdGhlIHV0aW1lcyBpbXBs
ZW1lbnRhdGlvbiB0byBjb21waWxlIGV2ZW4gaXQgd2UncmUgbm90IGdvaW5nCisvLyB0byB1c2Ug
aXQuCisKK2Jvb2wgcG9zaXhfdXRpbWVzKGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNw
ZWMsIDI+IGNvbnN0JiBUUywKKyAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7Cisg
IHVzaW5nIG5hbWVzcGFjZSBjaHJvbm87CisgIGF1dG8gQ29udmVydCA9IFtdKGxvbmcgbnNlYykg
eworICAgIHVzaW5nIGludF90eXBlID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPCA6OnRpbWV2YWw+
KCkudHZfdXNlYyk7CisgICAgYXV0byBkdXIgPSBkdXJhdGlvbl9jYXN0PG1pY3Jvc2Vjb25kcz4o
bmFub3NlY29uZHMobnNlYykpLmNvdW50KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludF90
eXBlPihkdXIpOworICB9OworICBzdHJ1Y3QgOjp0aW1ldmFsIENvbnZlcnRlZFRTWzJdID0ge3tU
U1swXS50dl9zZWMsIENvbnZlcnQoVFNbMF0udHZfbnNlYyl9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHtUU1sxXS50dl9zZWMsIENvbnZlcnQoVFNbMV0udHZfbnNlYyl9
fTsKKyAgaWYgKDo6dXRpbWVzKHAuY19zdHIoKSwgQ29udmVydGVkVFMpID09IC0xKSB7CisgICAg
ZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZh
bHNlOworfQorCisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQpCitib29sIHBvc2l4
X3V0aW1lbnNhdChjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYg
VFMsCisgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjp1dGlt
ZW5zYXQoQVRfRkRDV0QsIHAuY19zdHIoKSwgVFMuZGF0YSgpLCAwKSA9PSAtMSkgeworICAgIGVj
ID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCitib29sIHNldF9maWxlX3RpbWVzKGNvbnN0IHBhdGgmIHAsIHN0ZDo6
YXJyYXk8VGltZVNwZWMsIDI+IGNvbnN0JiBUUywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgZWMpIHsKKyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQpCisgIHJldHVy
biBwb3NpeF91dGltZXMocCwgVFMsIGVjKTsKKyNlbHNlCisgIHJldHVybiBwb3NpeF91dGltZW5z
YXQocCwgVFMsIGVjKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBlbmQgbmFt
ZXNwYWNlIGRldGFpbAorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisvKiAt
LSBFTkQgZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5oIC0tICovCisKKy8qIC0tIEJFR0lO
IGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCAtLSAqLworCisjaWYgZGVmaW5lZChf
TElCQ1BQX1dJTjMyQVBJKQorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8
V2luZG93cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUg
PGVycm5vLmg+CisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtX2NvbW1vbi5oIiAqLworCitfTElC
Q1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFt
ZXNwYWNlIHsKKworI2lmICFkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCit0ZW1wbGF0ZSA8Y2xh
c3MgRGlyRW50VCwgY2xhc3MgPSBkZWNsdHlwZShEaXJFbnRUOjpkX3R5cGUpPgorc3RhdGljIGZp
bGVfdHlwZSBnZXRfZmlsZV90eXBlKERpckVudFQqIGVudCwgaW50KSB7CisgIHN3aXRjaCAoZW50
LT5kX3R5cGUpIHsKKyAgY2FzZSBEVF9CTEs6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6YmxvY2s7
CisgIGNhc2UgRFRfQ0hSOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKKyAgY2Fz
ZSBEVF9ESVI6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworICBjYXNlIERUX0ZJ
Rk86CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6ZmlmbzsKKyAgY2FzZSBEVF9MTks6CisgICAgcmV0
dXJuIGZpbGVfdHlwZTo6c3ltbGluazsKKyAgY2FzZSBEVF9SRUc6CisgICAgcmV0dXJuIGZpbGVf
dHlwZTo6cmVndWxhcjsKKyAgY2FzZSBEVF9TT0NLOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnNv
Y2tldDsKKyAgLy8gVW5saWtlIGluIGxzdGF0LCBoaXR0aW5nICJ1bmtub3duIiBoZXJlIHNpbXBs
eSBtZWFucyB0aGF0IHRoZSB1bmRlcmx5aW5nCisgIC8vIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBw
b3J0IGRfdHlwZS4gUmVwb3J0IGlzIGFzICdub25lJyBzbyB3ZSBjb3JyZWN0bHkKKyAgLy8gc2V0
IHRoZSBjYWNoZSB0byBlbXB0eS4KKyAgY2FzZSBEVF9VTktOT1dOOgorICAgIGJyZWFrOworICB9
CisgIHJldHVybiBmaWxlX3R5cGU6Om5vbmU7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBEaXJFbnRU
Pgorc3RhdGljIGZpbGVfdHlwZSBnZXRfZmlsZV90eXBlKERpckVudFQqIGVudCwgbG9uZykgewor
ICByZXR1cm4gZmlsZV90eXBlOjpub25lOworfQorCitzdGF0aWMgcGFpcjxzdHJpbmdfdmlldywg
ZmlsZV90eXBlPiBwb3NpeF9yZWFkZGlyKERJUiogZGlyX3N0cmVhbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAg
c3RydWN0IGRpcmVudCogZGlyX2VudHJ5X3B0ciA9IG51bGxwdHI7CisgIGVycm5vID0gMDsgLy8g
emVybyBlcnJubyBpbiBvcmRlciB0byBkZXRlY3QgZXJyb3JzCisgIGVjLmNsZWFyKCk7CisgIGlm
ICgoZGlyX2VudHJ5X3B0ciA9IDo6cmVhZGRpcihkaXJfc3RyZWFtKSkgPT0gbnVsbHB0cikgewor
ICAgIGlmIChlcnJubykKKyAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB7
fTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4ge2Rpcl9lbnRyeV9wdHItPmRfbmFtZSwgZ2V0X2Zp
bGVfdHlwZShkaXJfZW50cnlfcHRyLCAwKX07CisgIH0KK30KKyNlbHNlCisKK3N0YXRpYyBmaWxl
X3R5cGUgZ2V0X2ZpbGVfdHlwZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgLy9h
dXRvIGF0dHJzID0gZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzOworICAvLyBGSVhNRShFcmljV0YpCisg
IHJldHVybiBmaWxlX3R5cGU6OnVua25vd247Cit9CitzdGF0aWMgdWludG1heF90IGdldF9maWxl
X3NpemUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIHJldHVybiAoZGF0YS5uRmls
ZVNpemVIaWdodCAqIChNQVhEV09SRCArIDEpKSArIGRhdGEubkZpbGVTaXplTG93OworfQorc3Rh
dGljIGZpbGVfdGltZV90eXBlIGdldF93cml0ZV90aW1lKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYg
ZGF0YSkgeworICBVTEFSR0VfSU5URUdFUiB0bXA7CisgIEZJTEVUSU1FJiB0aW1lID0gZGF0YS5m
dExhc3RXcml0ZVRpbWU7CisgIHRtcC51Lkxvd1BhcnQgPSB0aW1lLmR3TG93RGF0ZVRpbWU7Cisg
IHRtcC51LkhpZ2hQYXJ0ID0gdGltZS5kd0hpZ2hEYXRlVGltZTsKKyAgcmV0dXJuIGZpbGVfdGlt
ZV90eXBlKGZpbGVfdGltZV90eXBlOjpkdXJhdGlvbih0aW1lLlF1YWRQYXJ0KSk7Cit9CisKKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisKK3VzaW5nIGRl
dGFpbDo6RXJyb3JIYW5kbGVyOworCisjaWYgZGVmaW5lZChfTElCQ1BQX1dJTjMyQVBJKQorY2xh
c3MgX19kaXJfc3RyZWFtIHsKK3B1YmxpYzoKKyAgX19kaXJfc3RyZWFtKCkgPSBkZWxldGU7Cisg
IF9fZGlyX3N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IF9fZGlyX3N0cmVhbSYpID0gZGVsZXRlOwor
CisgIF9fZGlyX3N0cmVhbShfX2Rpcl9zdHJlYW0mJiBfX2RzKSBub2V4Y2VwdCA6IF9fc3RyZWFt
XyhfX2RzLl9fc3RyZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcm9vdF8obW92ZShfX2RzLl9fcm9vdF8pKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShfX2RzLl9fZW50cnlf
KSkgeworICAgIF9fZHMuX19zdHJlYW1fID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgIH0KKwor
ICBfX2Rpcl9zdHJlYW0oY29uc3QgcGF0aCYgcm9vdCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0cywg
ZXJyb3JfY29kZSYgZWMpCisgICAgICA6IF9fc3RyZWFtXyhJTlZBTElEX0hBTkRMRV9WQUxVRSks
IF9fcm9vdF8ocm9vdCkgeworICAgIF9fc3RyZWFtXyA9IDo6RmluZEZpcnN0RmlsZUV4KHJvb3Qu
Y19zdHIoKSwgJl9fZGF0YV8pOworICAgIGlmIChfX3N0cmVhbV8gPT0gSU5WQUxJRF9IQU5ETEVf
VkFMVUUpIHsKKyAgICAgIGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmlj
X2NhdGVnb3J5KCkpOworICAgICAgY29uc3QgYm9vbCBpZ25vcmVfcGVybWlzc2lvbl9kZW5pZWQg
PQorICAgICAgICAgIGJvb2wob3B0cyAmIGRpcmVjdG9yeV9vcHRpb25zOjpza2lwX3Blcm1pc3Np
b25fZGVuaWVkKTsKKyAgICAgIGlmIChpZ25vcmVfcGVybWlzc2lvbl9kZW5pZWQgJiYgZWMudmFs
dWUoKSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKQorICAgICAgICBlYy5jbGVhcigpOworICAgICAg
cmV0dXJuOworICAgIH0KKyAgfQorCisgIH5fX2Rpcl9zdHJlYW0oKSBub2V4Y2VwdCB7CisgICAg
aWYgKF9fc3RyZWFtXyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgIHJldHVybjsKKyAg
ICBjbG9zZSgpOworICB9CisKKyAgYm9vbCBnb29kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4g
X19zdHJlYW1fICE9IElOVkFMSURfSEFORExFX1ZBTFVFOyB9CisKKyAgYm9vbCBhZHZhbmNlKGVy
cm9yX2NvZGUmIGVjKSB7CisgICAgd2hpbGUgKDo6RmluZE5leHRGaWxlKF9fc3RyZWFtXywgJl9f
ZGF0YV8pKSB7CisgICAgICBpZiAoIXN0cmNtcChfX2RhdGFfLmNGaWxlTmFtZSwgIi4iKSB8fCBz
dHJjbXAoX19kYXRhXy5jRmlsZU5hbWUsICIuLiIpKQorICAgICAgICBjb250aW51ZTsKKyAgICAg
IC8vIEZJWE1FOiBDYWNoZSBtb3JlIG9mIHRoaXMKKyAgICAgIC8vZGlyZWN0b3J5X2VudHJ5Ojpf
X2NhY2hlZF9kYXRhIGNkYXRhOworICAgICAgLy9jZGF0YS5fX3R5cGVfID0gZ2V0X2ZpbGVfdHlw
ZShfX2RhdGFfKTsKKyAgICAgIC8vY2RhdGEuX19zaXplXyA9IGdldF9maWxlX3NpemUoX19kYXRh
Xyk7CisgICAgICAvL2NkYXRhLl9fd3JpdGVfdGltZV8gPSBnZXRfd3JpdGVfdGltZShfX2RhdGFf
KTsKKyAgICAgIF9fZW50cnlfLl9fYXNzaWduX2l0ZXJfZW50cnkoCisgICAgICAgICAgX19yb290
XyAvIF9fZGF0YV8uY0ZpbGVOYW1lLAorICAgICAgICAgIGRpcmVjdG9yeV9lbnRyeTo6X19jcmVh
dGVfaXRlcl9yZXN1bHQoZ2V0X2ZpbGVfdHlwZShfX2RhdGEpKSk7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNf
Y2F0ZWdvcnkoKSk7CisgICAgY2xvc2UoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworcHJp
dmF0ZToKKyAgZXJyb3JfY29kZSBjbG9zZSgpIG5vZXhjZXB0IHsKKyAgICBlcnJvcl9jb2RlIGVj
OworICAgIGlmICghOjpGaW5kQ2xvc2UoX19zdHJlYW1fKSkKKyAgICAgIGVjID0gZXJyb3JfY29k
ZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkpOworICAgIF9fc3RyZWFtXyA9
IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIHJldHVybiBlYzsKKyAgfQorCisgIEhBTkRMRSBf
X3N0cmVhbV97SU5WQUxJRF9IQU5ETEVfVkFMVUV9OworICBXSU4zMl9GSU5EX0RBVEEgX19kYXRh
XzsKKworcHVibGljOgorICBwYXRoIF9fcm9vdF87CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VudHJ5
XzsKK307CisjZWxzZQorY2xhc3MgX19kaXJfc3RyZWFtIHsKK3B1YmxpYzoKKyAgX19kaXJfc3Ry
ZWFtKCkgPSBkZWxldGU7CisgIF9fZGlyX3N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IF9fZGlyX3N0
cmVhbSYpID0gZGVsZXRlOworCisgIF9fZGlyX3N0cmVhbShfX2Rpcl9zdHJlYW0mJiBvdGhlcikg
bm9leGNlcHQgOiBfX3N0cmVhbV8ob3RoZXIuX19zdHJlYW1fKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcm9vdF8obW92ZShvdGhlci5fX3Jvb3Rf
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vu
dHJ5Xyhtb3ZlKG90aGVyLl9fZW50cnlfKSkgeworICAgIG90aGVyLl9fc3RyZWFtXyA9IG51bGxw
dHI7CisgIH0KKworICBfX2Rpcl9zdHJlYW0oY29uc3QgcGF0aCYgcm9vdCwgZGlyZWN0b3J5X29w
dGlvbnMgb3B0cywgZXJyb3JfY29kZSYgZWMpCisgICAgICA6IF9fc3RyZWFtXyhudWxscHRyKSwg
X19yb290Xyhyb290KSB7CisgICAgaWYgKChfX3N0cmVhbV8gPSA6Om9wZW5kaXIocm9vdC5jX3N0
cigpKSkgPT0gbnVsbHB0cikgeworICAgICAgZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsK
KyAgICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFjZXNzID0KKyAgICAgICAgICBib29sKG9wdHMgJiBk
aXJlY3Rvcnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgICBpZiAoYWxs
b3dfZWFjZXNzICYmIGVjLnZhbHVlKCkgPT0gRUFDQ0VTKQorICAgICAgICBlYy5jbGVhcigpOwor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZHZhbmNlKGVjKTsKKyAgfQorCisgIH5fX2Rpcl9z
dHJlYW0oKSBub2V4Y2VwdCB7CisgICAgaWYgKF9fc3RyZWFtXykKKyAgICAgIGNsb3NlKCk7Cisg
IH0KKworICBib29sIGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0cmVhbV8gIT0g
bnVsbHB0cjsgfQorCisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBlYykgeworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICBhdXRvIHN0cl90eXBlX3BhaXIgPSBkZXRhaWw6OnBvc2l4X3JlYWRk
aXIoX19zdHJlYW1fLCBlYyk7CisgICAgICBhdXRvJiBzdHIgPSBzdHJfdHlwZV9wYWlyLmZpcnN0
OworICAgICAgaWYgKHN0ciA9PSAiLiIgfHwgc3RyID09ICIuLiIpIHsKKyAgICAgICAgY29udGlu
dWU7CisgICAgICB9IGVsc2UgaWYgKGVjIHx8IHN0ci5lbXB0eSgpKSB7CisgICAgICAgIGNsb3Nl
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF9fZW50
cnlfLl9fYXNzaWduX2l0ZXJfZW50cnkoCisgICAgICAgICAgICBfX3Jvb3RfIC8gc3RyLAorICAg
ICAgICAgICAgZGlyZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9pdGVyX3Jlc3VsdChzdHJfdHlwZV9w
YWlyLnNlY29uZCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworcHJpdmF0ZToKKyAgZXJyb3JfY29kZSBjbG9zZSgpIG5vZXhjZXB0IHsKKyAgICBlcnJvcl9j
b2RlIG1fZWM7CisgICAgaWYgKDo6Y2xvc2VkaXIoX19zdHJlYW1fKSA9PSAtMSkKKyAgICAgIG1f
ZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAgICBfX3N0cmVhbV8gPSBudWxscHRyOwor
ICAgIHJldHVybiBtX2VjOworICB9CisKKyAgRElSKiBfX3N0cmVhbV97bnVsbHB0cn07CisKK3B1
YmxpYzoKKyAgcGF0aCBfX3Jvb3RfOworICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9Owor
I2VuZGlmCisKKy8vIGRpcmVjdG9yeV9pdGVyYXRvcgorCitkaXJlY3RvcnlfaXRlcmF0b3I6OmRp
cmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMpIHsK
KyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3Rvcnlf
aXRlcmF0b3IoLi4uKSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBfX2ltcF8g
PSBtYWtlX3NoYXJlZDxfX2Rpcl9zdHJlYW0+KHAsIG9wdHMsIG1fZWMpOworICBpZiAoZWMpCisg
ICAgKmVjID0gbV9lYzsKKyAgaWYgKCFfX2ltcF8tPmdvb2QoKSkgeworICAgIF9faW1wXy5yZXNl
dCgpOworICAgIGlmIChtX2VjKQorICAgICAgZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorfQorCitk
aXJlY3RvcnlfaXRlcmF0b3ImIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19pbmNyZW1lbnQoZXJyb3Jf
Y29kZSogZWMpIHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0byBpbmNy
ZW1lbnQgYW4gaW52YWxpZCBpdGVyYXRvciIpOworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJk
aXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBlcnJvcl9jb2RlIG1f
ZWM7CisgIGlmICghX19pbXBfLT5hZHZhbmNlKG1fZWMpKSB7CisgICAgcGF0aCByb290ID0gbW92
ZShfX2ltcF8tPl9fcm9vdF8pOworICAgIF9faW1wXy5yZXNldCgpOworICAgIGlmIChtX2VjKQor
ICAgICAgZXJyLnJlcG9ydChtX2VjLCAiYXQgcm9vdCBcIiVzXCIiLCByb290KTsKKyAgfQorICBy
ZXR1cm4gKnRoaXM7Cit9CisKK2RpcmVjdG9yeV9lbnRyeSBjb25zdCYgZGlyZWN0b3J5X2l0ZXJh
dG9yOjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJB
dHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIGFuIGludmFsaWQgaXRlcmF0b3IiKTsKKyAgcmV0dXJu
IF9faW1wXy0+X19lbnRyeV87Cit9CisKKy8vIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IK
Kworc3RydWN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fc2hhcmVkX2ltcCB7Cisg
IHN0YWNrPF9fZGlyX3N0cmVhbT4gX19zdGFja187CisgIGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0
aW9uc187Cit9OworCityZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpyZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yKAorICAgIGNvbnN0IHBhdGgmIHAsIGRpcmVjdG9yeV9vcHRpb25zIG9w
dCwgZXJyb3JfY29kZSogZWMpCisgICAgOiBfX2ltcF8obnVsbHB0ciksIF9fcmVjXyh0cnVlKSB7
CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Ii
LCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgX19kaXJfc3RyZWFtIG5ld19zKHAs
IG9wdCwgbV9lYyk7CisgIGlmIChtX2VjKQorICAgIGVyci5yZXBvcnQobV9lYyk7CisgIGlmICht
X2VjIHx8ICFuZXdfcy5nb29kKCkpCisgICAgcmV0dXJuOworCisgIF9faW1wXyA9IG1ha2Vfc2hh
cmVkPF9fc2hhcmVkX2ltcD4oKTsKKyAgX19pbXBfLT5fX29wdGlvbnNfID0gb3B0OworICBfX2lt
cF8tPl9fc3RhY2tfLnB1c2gobW92ZShuZXdfcykpOworfQorCit2b2lkIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3I6Ol9fcG9wKGVycm9yX2NvZGUqIGVjKSB7CisgIF9MSUJDUFBfQVNTRVJU
KF9faW1wXywgIlBvcHBpbmcgdGhlIGVuZCBpdGVyYXRvciIpOworICBpZiAoZWMpCisgICAgZWMt
PmNsZWFyKCk7CisgIF9faW1wXy0+X19zdGFja18ucG9wKCk7CisgIGlmIChfX2ltcF8tPl9fc3Rh
Y2tfLnNpemUoKSA9PSAwKQorICAgIF9faW1wXy5yZXNldCgpOworICBlbHNlCisgICAgX19hZHZh
bmNlKGVjKTsKK30KKworZGlyZWN0b3J5X29wdGlvbnMgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcjo6b3B0aW9ucygpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1wXy0+X19vcHRpb25zXzsKK30K
KworaW50IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6OmRlcHRoKCkgY29uc3QgeworICBy
ZXR1cm4gX19pbXBfLT5fX3N0YWNrXy5zaXplKCkgLSAxOworfQorCitjb25zdCBkaXJlY3Rvcnlf
ZW50cnkmIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fZGVyZWZlcmVuY2UoKSBjb25z
dCB7CisgIHJldHVybiBfX2ltcF8tPl9fc3RhY2tfLnRvcCgpLl9fZW50cnlfOworfQorCityZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJgorcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6
X19pbmNyZW1lbnQoZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigp
OworICBpZiAocmVjdXJzaW9uX3BlbmRpbmcoKSkgeworICAgIGlmIChfX3RyeV9yZWN1cnNpb24o
ZWMpIHx8IChlYyAmJiAqZWMpKQorICAgICAgcmV0dXJuICp0aGlzOworICB9CisgIF9fcmVjXyA9
IHRydWU7CisgIF9fYWR2YW5jZShlYyk7CisgIHJldHVybiAqdGhpczsKK30KKwordm9pZCByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2FkdmFuY2UoZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6b3Bl
cmF0b3IrKygpIiwgZWMpOworCisgIGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciBlbmRfaXQ7Cisg
IGF1dG8mIHN0YWNrID0gX19pbXBfLT5fX3N0YWNrXzsKKyAgZXJyb3JfY29kZSBtX2VjOworICB3
aGlsZSAoc3RhY2suc2l6ZSgpID4gMCkgeworICAgIGlmIChzdGFjay50b3AoKS5hZHZhbmNlKG1f
ZWMpKQorICAgICAgcmV0dXJuOworICAgIGlmIChtX2VjKQorICAgICAgYnJlYWs7CisgICAgc3Rh
Y2sucG9wKCk7CisgIH0KKworICBpZiAobV9lYykgeworICAgIHBhdGggcm9vdCA9IG1vdmUoc3Rh
Y2sudG9wKCkuX19yb290Xyk7CisgICAgX19pbXBfLnJlc2V0KCk7CisgICAgZXJyLnJlcG9ydCht
X2VjLCAiYXQgcm9vdCBcIiVzXCIiLCByb290KTsKKyAgfSBlbHNlIHsKKyAgICBfX2ltcF8ucmVz
ZXQoKTsKKyAgfQorfQorCitib29sIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fdHJ5
X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisKKyAgYm9v
bCByZWNfc3ltID0gYm9vbChvcHRpb25zKCkgJiBkaXJlY3Rvcnlfb3B0aW9uczo6Zm9sbG93X2Rp
cmVjdG9yeV9zeW1saW5rKTsKKworICBhdXRvJiBjdXJyX2l0ID0gX19pbXBfLT5fX3N0YWNrXy50
b3AoKTsKKworICBib29sIHNraXBfcmVjID0gZmFsc2U7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAg
aWYgKCFyZWNfc3ltKSB7CisgICAgZmlsZV9zdGF0dXMgc3QoY3Vycl9pdC5fX2VudHJ5Xy5fX2dl
dF9zeW1fZnQoJm1fZWMpKTsKKyAgICBpZiAobV9lYyAmJiBzdGF0dXNfa25vd24oc3QpKQorICAg
ICAgbV9lYy5jbGVhcigpOworICAgIGlmIChtX2VjIHx8IGlzX3N5bWxpbmsoc3QpIHx8ICFpc19k
aXJlY3Rvcnkoc3QpKQorICAgICAgc2tpcF9yZWMgPSB0cnVlOworICB9IGVsc2UgeworICAgIGZp
bGVfc3RhdHVzIHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfZnQoJm1fZWMpKTsKKyAgICBpZiAo
bV9lYyAmJiBzdGF0dXNfa25vd24oc3QpKQorICAgICAgbV9lYy5jbGVhcigpOworICAgIGlmICht
X2VjIHx8ICFpc19kaXJlY3Rvcnkoc3QpKQorICAgICAgc2tpcF9yZWMgPSB0cnVlOworICB9CisK
KyAgaWYgKCFza2lwX3JlYykgeworICAgIF9fZGlyX3N0cmVhbSBuZXdfaXQoY3Vycl9pdC5fX2Vu
dHJ5Xy5wYXRoKCksIF9faW1wXy0+X19vcHRpb25zXywgbV9lYyk7CisgICAgaWYgKG5ld19pdC5n
b29kKCkpIHsKKyAgICAgIF9faW1wXy0+X19zdGFja18ucHVzaChtb3ZlKG5ld19pdCkpOworICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIGlmIChtX2VjKSB7CisgICAgY29uc3QgYm9v
bCBhbGxvd19lYWNlc3MgPQorICAgICAgICBib29sKF9faW1wXy0+X19vcHRpb25zXyAmIGRpcmVj
dG9yeV9vcHRpb25zOjpza2lwX3Blcm1pc3Npb25fZGVuaWVkKTsKKyAgICBpZiAobV9lYy52YWx1
ZSgpID09IEVBQ0NFUyAmJiBhbGxvd19lYWNlc3MpIHsKKyAgICAgIGlmIChlYykKKyAgICAgICAg
ZWMtPmNsZWFyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhdGggYXRfZW50ID0gbW92ZShjdXJy
X2l0Ll9fZW50cnlfLl9fcF8pOworICAgICAgX19pbXBfLnJlc2V0KCk7CisgICAgICBlcnIucmVw
b3J0KG1fZWMsICJhdHRlbXB0aW5nIHJlY3Vyc2lvbiBpbnRvIFwiJXNcIiIsIGF0X2VudCk7Cisg
ICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJ
TEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCAt
LSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2ludDEyOF9idWlsdGlucy5jcHAgLS0gKi8K
KworLyogPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIF9f
bXVsb3RpNCwgYW5kIGlzIHN0b2xlbiBmcm9tIHRoZSBjb21waWxlcl9ydCBsaWJyYXJ5LgorICoK
KyAqIEZJWE1FOiB3ZSBzdGVhbCBhbmQgcmUtY29tcGlsZSBpdCBpbnRvIGZpbGVzeXN0ZW0sIHdo
aWNoIHVzZXMgX19pbnQxMjhfdCwKKyAqIGFuZCByZXF1aXJlcyB0aGlzIGJ1aWx0aW4gd2hlbiBz
YW5pdGl6ZWQuIFNlZSBsbHZtLm9yZy9QUjMwNjQzCisgKgorICogPT09LS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09
PQorICovCisKKy8qICNpbmNsdWRlICJfX2NvbmZpZyIgKi8KKyNpbmNsdWRlIDxjbGltaXRzPgor
CisjaWZuZGVmIF9fU0laRU9GX0lOVDEyOF9fCisjZGVmaW5lIF9MSUJDUFBfSEFTX05PX0lOVDEy
OAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19JTlQxMjgpCisKKyNpZmRl
ZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLXByb3RvdHlwZXMiCisjZW5kaWYKK2V4dGVy
biAiQyIgX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInVuZGVmaW5lZCIpKSkKK19faW50MTI4
X3QgX19tdWxvdGk0KF9faW50MTI4X3QgYSwgX19pbnQxMjhfdCBiLCBpbnQqIG92ZXJmbG93KSB7
CisgIGNvbnN0IGludCBOID0gKGludCkoc2l6ZW9mKF9faW50MTI4X3QpICogQ0hBUl9CSVQpOwor
ICBjb25zdCBfX2ludDEyOF90IE1JTiA9IChfX2ludDEyOF90KTEgPDwgKE4gLSAxKTsKKyAgY29u
c3QgX19pbnQxMjhfdCBNQVggPSB+TUlOOworICAqb3ZlcmZsb3cgPSAwOworICBfX2ludDEyOF90
IHJlc3VsdCA9IGEgKiBiOworICBpZiAoYSA9PSBNSU4pIHsKKyAgICBpZiAoYiAhPSAwICYmIGIg
IT0gMSkKKyAgICAgICpvdmVyZmxvdyA9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBp
ZiAoYiA9PSBNSU4pIHsKKyAgICBpZiAoYSAhPSAwICYmIGEgIT0gMSkKKyAgICAgICpvdmVyZmxv
dyA9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBfX2ludDEyOF90IHNhID0gYSA+PiAo
TiAtIDEpOworICBfX2ludDEyOF90IGFic19hID0gKGEgXiBzYSkgLSBzYTsKKyAgX19pbnQxMjhf
dCBzYiA9IGIgPj4gKE4gLSAxKTsKKyAgX19pbnQxMjhfdCBhYnNfYiA9IChiIF4gc2IpIC0gc2I7
CisgIGlmIChhYnNfYSA8IDIgfHwgYWJzX2IgPCAyKQorICAgIHJldHVybiByZXN1bHQ7CisgIGlm
IChzYSA9PSBzYikgeworICAgIGlmIChhYnNfYSA+IE1BWCAvIGFic19iKQorICAgICAgKm92ZXJm
bG93ID0gMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoYWJzX2EgPiBNSU4gLyAtYWJzX2IpCisgICAg
ICAqb3ZlcmZsb3cgPSAxOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisjaWZkZWYgX19jbGFu
Z19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2VuZGlmCisKKy8q
IC0tIEVORCBmaWxlc3lzdGVtL2ludDEyOF9idWlsdGlucy5jcHAgLS0gKi8KKworLyogLS0gQkVH
SU4gZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCAtLSAqLworCisvKiAjaW5jbHVkZSAiZmlsZXN5
c3RlbSIgKi8KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRl
IDxmc3RyZWFtPgorI2luY2x1ZGUgPHJhbmRvbT4gLyogZm9yIHVuaXF1ZV9wYXRoICovCisjaW5j
bHVkZSA8c3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dmVj
dG9yPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKworLyogI2luY2x1
ZGUgImZpbGVzeXN0ZW1fY29tbW9uLmgiICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8dGlt
ZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+IC8qIHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKworI2lm
IGRlZmluZWQoX19saW51eF9fKQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpZiBMSU5V
WF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMzMpCisjaW5jbHVkZSA8c3lz
L3NlbmRmaWxlLmg+CisjZGVmaW5lIF9MSUJDUFBfVVNFX1NFTkRGSUxFCisjZW5kaWYKKyNlbGlm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBfX2hhc19pbmNsdWRlKDxjb3B5ZmlsZS5oPikKKyNpbmNs
dWRlIDxjb3B5ZmlsZS5oPgorI2RlZmluZSBfTElCQ1BQX1VTRV9DT1BZRklMRQorI2VuZGlmCisK
KyNpZiAhZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJ
TUUKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpIHx8ICFkZWZpbmVkKF9M
SUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4gLy8gZm9yIGdl
dHRpbWVvZmRheSBhbmQgdGltZXZhbAorI2VuZGlmICAgICAgICAgICAgICAgIC8vICFkZWZpbmVk
KENMT0NLX1JFQUxUSU1FKQorCisjaWYgZGVmaW5lZChfTElCQ1BQX0NPTVBJTEVSX0dDQykKKyNp
ZiBfR05VQ19WRVIgPCA1MDAKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNz
aW5nLWZpZWxkLWluaXRpYWxpemVycyIKKyNlbmRpZgorI2VuZGlmCisKK19MSUJDUFBfQkVHSU5f
TkFNRVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBwYXJzZXIgewor
Cit1c2luZyBzdHJpbmdfdmlld190ID0gcGF0aDo6X19zdHJpbmdfdmlldzsKK3VzaW5nIHN0cmlu
Z192aWV3X3BhaXIgPSBwYWlyPHN0cmluZ192aWV3X3QsIHN0cmluZ192aWV3X3Q+OwordXNpbmcg
UG9zUHRyID0gcGF0aDo6dmFsdWVfdHlwZSBjb25zdCo7CisKK3N0cnVjdCBQYXRoUGFyc2VyIHsK
KyAgZW51bSBQYXJzZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgeworICAgIC8vIFplcm8gaXMgYSBz
cGVjaWFsIHNlbnRpbmVsIHZhbHVlIHVzZWQgYnkgZGVmYXVsdCBjb25zdHJ1Y3RlZCBpdGVyYXRv
cnMuCisgICAgUFNfQmVmb3JlQmVnaW4gPSBwYXRoOjppdGVyYXRvcjo6X0JlZm9yZUJlZ2luLAor
ICAgIFBTX0luUm9vdE5hbWUgPSBwYXRoOjppdGVyYXRvcjo6X0luUm9vdE5hbWUsCisgICAgUFNf
SW5Sb290RGlyID0gcGF0aDo6aXRlcmF0b3I6Ol9JblJvb3REaXIsCisgICAgUFNfSW5GaWxlbmFt
ZXMgPSBwYXRoOjppdGVyYXRvcjo6X0luRmlsZW5hbWVzLAorICAgIFBTX0luVHJhaWxpbmdTZXAg
PSBwYXRoOjppdGVyYXRvcjo6X0luVHJhaWxpbmdTZXAsCisgICAgUFNfQXRFbmQgPSBwYXRoOjpp
dGVyYXRvcjo6X0F0RW5kCisgIH07CisKKyAgY29uc3Qgc3RyaW5nX3ZpZXdfdCBQYXRoOworICBz
dHJpbmdfdmlld190IFJhd0VudHJ5OworICBQYXJzZXJTdGF0ZSBTdGF0ZTsKKworcHJpdmF0ZToK
KyAgUGF0aFBhcnNlcihzdHJpbmdfdmlld190IFAsIFBhcnNlclN0YXRlIFN0YXRlKSBub2V4Y2Vw
dCA6IFBhdGgoUCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdGF0ZShTdGF0ZSkge30KKworcHVibGljOgorICBQYXRoUGFyc2Vy
KHN0cmluZ192aWV3X3QgUCwgc3RyaW5nX3ZpZXdfdCBFLCB1bnNpZ25lZCBjaGFyIFMpCisgICAg
ICA6IFBhdGgoUCksIFJhd0VudHJ5KEUpLCBTdGF0ZShzdGF0aWNfY2FzdDxQYXJzZXJTdGF0ZT4o
UykpIHsKKyAgICAvLyBTIGNhbm5vdCBiZSAnMCcgb3IgUFNfQmVmb3JlQmVnaW4uCisgIH0KKwor
ICBzdGF0aWMgUGF0aFBhcnNlciBDcmVhdGVCZWdpbihzdHJpbmdfdmlld190IFApIG5vZXhjZXB0
IHsKKyAgICBQYXRoUGFyc2VyIFBQKFAsIFBTX0JlZm9yZUJlZ2luKTsKKyAgICBQUC5pbmNyZW1l
bnQoKTsKKyAgICByZXR1cm4gUFA7CisgIH0KKworICBzdGF0aWMgUGF0aFBhcnNlciBDcmVhdGVF
bmQoc3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0aFBhcnNlciBQUChQLCBQU19B
dEVuZCk7CisgICAgcmV0dXJuIFBQOworICB9CisKKyAgUG9zUHRyIHBlZWsoKSBjb25zdCBub2V4
Y2VwdCB7CisgICAgYXV0byBUa0VuZCA9IGdldE5leHRUb2tlblN0YXJ0UG9zKCk7CisgICAgYXV0
byBFbmQgPSBnZXRBZnRlckJhY2soKTsKKyAgICByZXR1cm4gVGtFbmQgPT0gRW5kID8gbnVsbHB0
ciA6IFRrRW5kOworICB9CisKKyAgdm9pZCBpbmNyZW1lbnQoKSBub2V4Y2VwdCB7CisgICAgY29u
c3QgUG9zUHRyIEVuZCA9IGdldEFmdGVyQmFjaygpOworICAgIGNvbnN0IFBvc1B0ciBTdGFydCA9
IGdldE5leHRUb2tlblN0YXJ0UG9zKCk7CisgICAgaWYgKFN0YXJ0ID09IEVuZCkKKyAgICAgIHJl
dHVybiBtYWtlU3RhdGUoUFNfQXRFbmQpOworCisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNh
c2UgUFNfQmVmb3JlQmVnaW46IHsKKyAgICAgIFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVTZXBhcmF0
b3IoU3RhcnQsIEVuZCk7CisgICAgICBpZiAoVGtFbmQpCisgICAgICAgIHJldHVybiBtYWtlU3Rh
dGUoUFNfSW5Sb290RGlyLCBTdGFydCwgVGtFbmQpOworICAgICAgZWxzZQorICAgICAgICByZXR1
cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTdGFydCwgY29uc3VtZU5hbWUoU3RhcnQsIEVu
ZCkpOworICAgIH0KKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIHJldHVybiBtYWtlU3Rh
dGUoUFNfSW5GaWxlbmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShTdGFydCwgRW5kKSk7CisKKyAg
ICBjYXNlIFBTX0luRmlsZW5hbWVzOiB7CisgICAgICBQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNl
cGFyYXRvcihTdGFydCwgRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgIT0gRW5kKSB7CisgICAgICAg
IFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgRW5kKTsKKyAgICAgICAgaWYgKFRr
RW5kKQorICAgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFNlcEVuZCwg
VGtFbmQpOworICAgICAgfQorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblRyYWlsaW5nU2Vw
LCBTdGFydCwgU2VwRW5kKTsKKyAgICB9CisKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6Cisg
ICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0F0RW5kKTsKKworICAgIGNhc2UgUFNfSW5Sb290TmFt
ZToKKyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICAg
IH0KKyAgfQorCisgIHZvaWQgZGVjcmVtZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0
ciBSRW5kID0gZ2V0QmVmb3JlRnJvbnQoKTsKKyAgICBjb25zdCBQb3NQdHIgUlN0YXJ0ID0gZ2V0
Q3VycmVudFRva2VuU3RhcnRQb3MoKSAtIDE7CisgICAgaWYgKFJTdGFydCA9PSBSRW5kKSAvLyB3
ZSdyZSBkZWNyZW1lbnRpbmcgdGhlIGJlZ2luCisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0Jl
Zm9yZUJlZ2luKTsKKworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0F0RW5kOiB7
CisgICAgICAvLyBUcnkgdG8gY29uc3VtZSBhIHRyYWlsaW5nIHNlcGFyYXRvciBvciByb290IGRp
cmVjdG9yeSBmaXJzdC4KKyAgICAgIGlmIChQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNlcGFyYXRv
cihSU3RhcnQsIFJFbmQpKSB7CisgICAgICAgIGlmIChTZXBFbmQgPT0gUkVuZCkKKyAgICAgICAg
ICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEp
OworICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxpbmdTZXAsIFNlcEVuZCArIDEs
IFJTdGFydCArIDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgUG9zUHRyIFRrU3RhcnQgPSBj
b25zdW1lTmFtZShSU3RhcnQsIFJFbmQpOworICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0lu
RmlsZW5hbWVzLCBUa1N0YXJ0ICsgMSwgUlN0YXJ0ICsgMSk7CisgICAgICB9CisgICAgfQorICAg
IGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxl
bmFtZXMsIGNvbnN1bWVOYW1lKFJTdGFydCwgUkVuZCkgKyAxLAorICAgICAgICAgICAgICAgICAg
ICAgICBSU3RhcnQgKyAxKTsKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOiB7CisgICAgICBQb3NQ
dHIgU2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihSU3RhcnQsIFJFbmQpOworICAgICAgaWYgKFNl
cEVuZCA9PSBSRW5kKQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgUGF0
aC5kYXRhKCksIFJTdGFydCArIDEpOworICAgICAgUG9zUHRyIFRrRW5kID0gY29uc3VtZU5hbWUo
U2VwRW5kLCBSRW5kKTsKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFRr
RW5kICsgMSwgU2VwRW5kICsgMSk7CisgICAgfQorICAgIGNhc2UgUFNfSW5Sb290RGlyOgorICAg
ICAgLy8gcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3ROYW1lLCBQYXRoLmRhdGEoKSwgUlN0YXJ0
ICsgMSk7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46
CisgICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisKKyAgLy8vIFxicmll
ZiBSZXR1cm4gYSB2aWV3IHdpdGggdGhlICJwcmVmZXJyZWQgcmVwcmVzZW50YXRpb24iIG9mIHRo
ZSBjdXJyZW50CisgIC8vLyAgIGVsZW1lbnQuIEZvciBleGFtcGxlIHRyYWlsaW5nIHNlcGFyYXRv
cnMgYXJlIHJlcHJlc2VudGVkIGFzIGEgJy4nCisgIHN0cmluZ192aWV3X3Qgb3BlcmF0b3IqKCkg
Y29uc3Qgbm9leGNlcHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9y
ZUJlZ2luOgorICAgIGNhc2UgUFNfQXRFbmQ6CisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBQ
U19JblJvb3REaXI6CisgICAgICByZXR1cm4gIi8iOworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1Nl
cDoKKyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQ
U19JbkZpbGVuYW1lczoKKyAgICAgIHJldHVybiBSYXdFbnRyeTsKKyAgICB9CisgICAgX0xJQkNQ
UF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgIT0gUFNfQmVmb3JlQmVnaW4gJiYgU3RhdGUg
IT0gUFNfQXRFbmQ7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRvcisrKCkgbm9leGNlcHQg
eworICAgIGluY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIFBhdGhQYXJz
ZXImIG9wZXJhdG9yLS0oKSBub2V4Y2VwdCB7CisgICAgZGVjcmVtZW50KCk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgYm9vbCBpblJvb3RQYXRoKCkgY29uc3Qgbm9leGNlcHQgeworICAg
IHJldHVybiBTdGF0ZSA9PSBQU19JblJvb3REaXIgfHwgU3RhdGUgPT0gUFNfSW5Sb290TmFtZTsK
KyAgfQorCitwcml2YXRlOgorICB2b2lkIG1ha2VTdGF0ZShQYXJzZXJTdGF0ZSBOZXdTdGF0ZSwg
UG9zUHRyIFN0YXJ0LCBQb3NQdHIgRW5kKSBub2V4Y2VwdCB7CisgICAgU3RhdGUgPSBOZXdTdGF0
ZTsKKyAgICBSYXdFbnRyeSA9IHN0cmluZ192aWV3X3QoU3RhcnQsIEVuZCAtIFN0YXJ0KTsKKyAg
fQorICB2b2lkIG1ha2VTdGF0ZShQYXJzZXJTdGF0ZSBOZXdTdGF0ZSkgbm9leGNlcHQgeworICAg
IFN0YXRlID0gTmV3U3RhdGU7CisgICAgUmF3RW50cnkgPSB7fTsKKyAgfQorCisgIFBvc1B0ciBn
ZXRBZnRlckJhY2soKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBQYXRoLmRhdGEoKSArIFBhdGgu
c2l6ZSgpOyB9CisKKyAgUG9zUHRyIGdldEJlZm9yZUZyb250KCkgY29uc3Qgbm9leGNlcHQgeyBy
ZXR1cm4gUGF0aC5kYXRhKCkgLSAxOyB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSBwb2ludGVy
IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGN1cnJlbnRseQorICAvLy8gICBsZXhl
ZCBlbGVtZW50LgorICBQb3NQdHIgZ2V0TmV4dFRva2VuU3RhcnRQb3MoKSBjb25zdCBub2V4Y2Vw
dCB7CisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAg
ICByZXR1cm4gUGF0aC5kYXRhKCk7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2Ug
UFNfSW5Sb290RGlyOgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgICByZXR1cm4gJlJh
d0VudHJ5LmJhY2soKSArIDE7CisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgIGNhc2Ug
UFNfQXRFbmQ6CisgICAgICByZXR1cm4gZ2V0QWZ0ZXJCYWNrKCk7CisgICAgfQorICAgIF9MSUJD
UFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0
byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50bHkgbGV4ZWQKKyAgLy8vICAgZWxl
bWVudC4KKyAgUG9zUHRyIGdldEN1cnJlbnRUb2tlblN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQg
eworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgIGNh
c2UgUFNfSW5Sb290TmFtZToKKyAgICAgIHJldHVybiAmUGF0aC5mcm9udCgpOworICAgIGNhc2Ug
UFNfSW5Sb290RGlyOgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgY2FzZSBQU19JblRy
YWlsaW5nU2VwOgorICAgICAgcmV0dXJuICZSYXdFbnRyeS5mcm9udCgpOworICAgIGNhc2UgUFNf
QXRFbmQ6CisgICAgICByZXR1cm4gJlBhdGguYmFjaygpICsgMTsKKyAgICB9CisgICAgX0xJQkNQ
UF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgUG9zUHRyIGNvbnN1bWVTZXBhcmF0b3IoUG9zUHRy
IFAsIFBvc1B0ciBFbmQpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBpZiAoUCA9PSBFbmQgfHwgKlAg
IT0gJy8nKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgaW50IEluYyA9IFAgPCBF
bmQgPyAxIDogLTE7CisgICAgUCArPSBJbmM7CisgICAgd2hpbGUgKFAgIT0gRW5kICYmICpQID09
ICcvJykKKyAgICAgIFAgKz0gSW5jOworICAgIHJldHVybiBQOworICB9CisKKyAgUG9zUHRyIGNv
bnN1bWVOYW1lKFBvc1B0ciBQLCBQb3NQdHIgRW5kKSBjb25zdCBub2V4Y2VwdCB7CisgICAgaWYg
KFAgPT0gRW5kIHx8ICpQID09ICcvJykKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0
IGludCBJbmMgPSBQIDwgRW5kID8gMSA6IC0xOworICAgIFAgKz0gSW5jOworICAgIHdoaWxlIChQ
ICE9IEVuZCAmJiAqUCAhPSAnLycpCisgICAgICBQICs9IEluYzsKKyAgICByZXR1cm4gUDsKKyAg
fQorfTsKKworc3RhdGljIHN0cmluZ192aWV3X3BhaXIgc2VwYXJhdGVfZmlsZW5hbWUoc3RyaW5n
X3ZpZXdfdCBjb25zdCYgcykgeworICBpZiAocyA9PSAiLiIgfHwgcyA9PSAiLi4iIHx8IHMuZW1w
dHkoKSkKKyAgICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntzLCAiIn07CisgIGF1dG8gcG9zID0g
cy5maW5kX2xhc3Rfb2YoJy4nKTsKKyAgaWYgKHBvcyA9PSBzdHJpbmdfdmlld190OjpucG9zIHx8
IHBvcyA9PSAwKQorICAgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3MsIHN0cmluZ192aWV3X3R7
fX07CisgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3Muc3Vic3RyKDAsIHBvcyksIHMuc3Vic3Ry
KHBvcyl9OworfQorCitzdGF0aWMgc3RyaW5nX3ZpZXdfdCBjcmVhdGVWaWV3KFBvc1B0ciBTLCBQ
b3NQdHIgRSkgbm9leGNlcHQgeworICByZXR1cm4ge1MsIHN0YXRpY19jYXN0PHNpemVfdD4oRSAt
IFMpICsgMX07Cit9CisKK30gLy8gbmFtZXNwYWNlIHBhcnNlcgorfSAvLyBuYW1lc3BhY2UKKwor
Ly8gICAgICAgICAgICAgICAgICAgICAgIFBPU0lYIEhFTFBFUlMKKworbmFtZXNwYWNlIGRldGFp
bCB7CituYW1lc3BhY2UgeworCit1c2luZyB2YWx1ZV90eXBlID0gcGF0aDo6dmFsdWVfdHlwZTsK
K3VzaW5nIHN0cmluZ190eXBlID0gcGF0aDo6c3RyaW5nX3R5cGU7CisKK3N0cnVjdCBGaWxlRGVz
Y3JpcHRvciB7CisgIGNvbnN0IHBhdGgmIG5hbWU7CisgIGludCBmZCA9IC0xOworICBTdGF0VCBt
X3N0YXQ7CisgIGZpbGVfc3RhdHVzIG1fc3RhdHVzOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBB
cmdzPgorICBzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlKGNvbnN0IHBhdGgqIHAsIGVycm9y
X2NvZGUmIGVjLCBBcmdzLi4uIGFyZ3MpIHsKKyAgICBlYy5jbGVhcigpOworICAgIGludCBmZDsK
KyAgICBpZiAoKGZkID0gOjpvcGVuKHAtPmNfc3RyKCksIGFyZ3MuLi4pKSA9PSAtMSkgeworICAg
ICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgICByZXR1cm4gRmlsZURlc2NyaXB0b3J7cH07
CisgICAgfQorICAgIHJldHVybiBGaWxlRGVzY3JpcHRvcihwLCBmZCk7CisgIH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgc3RhdGljIEZpbGVEZXNjcmlwdG9yIGNyZWF0ZV93aXRo
X3N0YXR1cyhjb25zdCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uIGFyZ3MpIHsKKyAgICBGaWxlRGVzY3Jp
cHRvciBmZCA9IGNyZWF0ZShwLCBlYywgYXJncy4uLik7CisgICAgaWYgKCFlYykKKyAgICAgIGZk
LnJlZnJlc2hfc3RhdHVzKGVjKTsKKworICAgIHJldHVybiBmZDsKKyAgfQorCisgIGZpbGVfc3Rh
dHVzIGdldF9zdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICBTdGF0VCBjb25z
dCYgZ2V0X3N0YXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXQ7IH0KKworICBib29sIHN0YXR1c19r
bm93bigpIGNvbnN0IHsgcmV0dXJuIF9WU1REX0ZTOjpzdGF0dXNfa25vd24obV9zdGF0dXMpOyB9
CisKKyAgZmlsZV9zdGF0dXMgcmVmcmVzaF9zdGF0dXMoZXJyb3JfY29kZSYgZWMpOworCisgIHZv
aWQgY2xvc2UoKSBub2V4Y2VwdCB7CisgICAgaWYgKGZkICE9IC0xKQorICAgICAgOjpjbG9zZShm
ZCk7CisgICAgZmQgPSAtMTsKKyAgfQorCisgIEZpbGVEZXNjcmlwdG9yKEZpbGVEZXNjcmlwdG9y
JiYgb3RoZXIpCisgICAgICA6IG5hbWUob3RoZXIubmFtZSksIGZkKG90aGVyLmZkKSwgbV9zdGF0
KG90aGVyLm1fc3RhdCksCisgICAgICAgIG1fc3RhdHVzKG90aGVyLm1fc3RhdHVzKSB7CisgICAg
b3RoZXIuZmQgPSAtMTsKKyAgICBvdGhlci5tX3N0YXR1cyA9IGZpbGVfc3RhdHVze307CisgIH0K
KworICB+RmlsZURlc2NyaXB0b3IoKSB7IGNsb3NlKCk7IH0KKworICBGaWxlRGVzY3JpcHRvcihG
aWxlRGVzY3JpcHRvciBjb25zdCYpID0gZGVsZXRlOworICBGaWxlRGVzY3JpcHRvciYgb3BlcmF0
b3I9KEZpbGVEZXNjcmlwdG9yIGNvbnN0JikgPSBkZWxldGU7CisKK3ByaXZhdGU6CisgIGV4cGxp
Y2l0IEZpbGVEZXNjcmlwdG9yKGNvbnN0IHBhdGgqIHAsIGludCBmZCA9IC0xKSA6IG5hbWUoKnAp
LCBmZChmZCkge30KK307CisKK3Blcm1zIHBvc2l4X2dldF9wZXJtcyhjb25zdCBTdGF0VCYgc3Qp
IG5vZXhjZXB0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdC5zdF9tb2RlKSAmIHBl
cm1zOjptYXNrOworfQorCis6Om1vZGVfdCBwb3NpeF9jb252ZXJ0X3Blcm1zKHBlcm1zIHBybXMp
IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PCA6Om1vZGVfdD4ocHJtcyAmIHBlcm1zOjptYXNrKTsK
K30KKworZmlsZV9zdGF0dXMgY3JlYXRlX2ZpbGVfc3RhdHVzKGVycm9yX2NvZGUmIG1fZWMsIHBh
dGggY29uc3QmIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RhdFQm
IHBhdGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgICplYyA9IG1fZWM7
CisgIGlmIChtX2VjICYmIChtX2VjLnZhbHVlKCkgPT0gRU5PRU5UIHx8IG1fZWMudmFsdWUoKSA9
PSBFTk9URElSKSkgeworICAgIHJldHVybiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vdF9mb3Vu
ZCk7CisgIH0gZWxzZSBpZiAobV9lYykgeworICAgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInBv
c2l4X3N0YXQiLCBlYywgJnApOworICAgIGVyci5yZXBvcnQobV9lYywgImZhaWxlZCB0byBkZXRl
cm1pbmUgYXR0cmlidXRlcyBmb3IgdGhlIHNwZWNpZmllZCBwYXRoIik7CisgICAgcmV0dXJuIGZp
bGVfc3RhdHVzKGZpbGVfdHlwZTo6bm9uZSk7CisgIH0KKyAgLy8gZWxzZQorCisgIGZpbGVfc3Rh
dHVzIGZzX3RtcDsKKyAgYXV0byBjb25zdCBtb2RlID0gcGF0aF9zdGF0LnN0X21vZGU7CisgIGlm
IChTX0lTTE5LKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6c3ltbGluayk7Cisg
IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpyZWd1
bGFyKTsKKyAgZWxzZSBpZiAoU19JU0RJUihtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5
cGU6OmRpcmVjdG9yeSk7CisgIGVsc2UgaWYgKFNfSVNCTEsobW9kZSkpCisgICAgZnNfdG1wLnR5
cGUoZmlsZV90eXBlOjpibG9jayk7CisgIGVsc2UgaWYgKFNfSVNDSFIobW9kZSkpCisgICAgZnNf
dG1wLnR5cGUoZmlsZV90eXBlOjpjaGFyYWN0ZXIpOworICBlbHNlIGlmIChTX0lTRklGTyhtb2Rl
KSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OmZpZm8pOworICBlbHNlIGlmIChTX0lTU09D
Syhtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnNvY2tldCk7CisgIGVsc2UKKyAg
ICBmc190bXAudHlwZShmaWxlX3R5cGU6OnVua25vd24pOworCisgIGZzX3RtcC5wZXJtaXNzaW9u
cyhkZXRhaWw6OnBvc2l4X2dldF9wZXJtcyhwYXRoX3N0YXQpKTsKKyAgcmV0dXJuIGZzX3RtcDsK
K30KKworZmlsZV9zdGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBTdGF0VCYgcGF0aF9z
dGF0LCBlcnJvcl9jb2RlKiBlYykgeworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6OnN0YXQo
cC5jX3N0cigpLCAmcGF0aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJl
X2Vycm5vKCk7CisgIHJldHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0aF9zdGF0
LCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X3N0YXQocGF0aCBjb25zdCYgcCwgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgU3RhdFQgcGF0aF9zdGF0OworICByZXR1cm4gcG9zaXhfc3RhdChwLCBw
YXRoX3N0YXQsIGVjKTsKK30KKworZmlsZV9zdGF0dXMgcG9zaXhfbHN0YXQocGF0aCBjb25zdCYg
cCwgU3RhdFQmIHBhdGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgZXJyb3JfY29kZSBtX2Vj
OworICBpZiAoOjpsc3RhdChwLmNfc3RyKCksICZwYXRoX3N0YXQpID09IC0xKQorICAgIG1fZWMg
PSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAgcmV0dXJuIGNyZWF0ZV9maWxlX3N0YXR1cyht
X2VjLCBwLCBwYXRoX3N0YXQsIGVjKTsKK30KKworZmlsZV9zdGF0dXMgcG9zaXhfbHN0YXQocGF0
aCBjb25zdCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgU3RhdFQgcGF0aF9zdGF0OworICByZXR1
cm4gcG9zaXhfbHN0YXQocCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2Jvb2wgcG9zaXhfZnRydW5j
YXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9yJiBmZCwgc2l6ZV90IHRvX3NpemUsIGVycm9yX2NvZGUm
IGVjKSB7CisgIGlmICg6OmZ0cnVuY2F0ZShmZC5mZCwgdG9fc2l6ZSkgPT0gLTEpIHsKKyAgICBl
YyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBlYy5jbGVhcigp
OworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgcG9zaXhfZmNobW9kKGNvbnN0IEZpbGVEZXNj
cmlwdG9yJiBmZCwgY29uc3QgU3RhdFQmIHN0LCBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjpm
Y2htb2QoZmQuZmQsIHN0LnN0X21vZGUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5v
KCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIHN0YXRfZXF1aXZhbGVudChjb25zdCBTdGF0VCYgc3QxLCBjb25zdCBTdGF0
VCYgc3QyKSB7CisgIHJldHVybiAoc3QxLnN0X2RldiA9PSBzdDIuc3RfZGV2ICYmIHN0MS5zdF9p
bm8gPT0gc3QyLnN0X2lubyk7Cit9CisKK2ZpbGVfc3RhdHVzIEZpbGVEZXNjcmlwdG9yOjpyZWZy
ZXNoX3N0YXR1cyhlcnJvcl9jb2RlJiBlYykgeworICAvLyBGRCBtdXN0IGJlIG9wZW4gYW5kIGdv
b2QuCisgIG1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgbV9zdGF0ID0ge307CisgIGVycm9y
X2NvZGUgbV9lYzsKKyAgaWYgKDo6ZnN0YXQoZmQsICZtX3N0YXQpID09IC0xKQorICAgIG1fZWMg
PSBjYXB0dXJlX2Vycm5vKCk7CisgIG1fc3RhdHVzID0gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMs
IG5hbWUsIG1fc3RhdCwgJmVjKTsKKyAgcmV0dXJuIG1fc3RhdHVzOworfQorfSAvLyBuYW1lc3Bh
Y2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRhaWwKKwordXNpbmcgZGV0YWlsOjpjYXB0dXJlX2Vy
cm5vOwordXNpbmcgZGV0YWlsOjpFcnJvckhhbmRsZXI7Cit1c2luZyBkZXRhaWw6OlN0YXRUOwor
dXNpbmcgZGV0YWlsOjpUaW1lU3BlYzsKK3VzaW5nIHBhcnNlcjo6Y3JlYXRlVmlldzsKK3VzaW5n
IHBhcnNlcjo6UGF0aFBhcnNlcjsKK3VzaW5nIHBhcnNlcjo6c3RyaW5nX3ZpZXdfdDsKKworY29u
c3QgYm9vbCBfRmlsZXN5c3RlbUNsb2NrOjppc19zdGVhZHk7CisKK19GaWxlc3lzdGVtQ2xvY2s6
OnRpbWVfcG9pbnQgX0ZpbGVzeXN0ZW1DbG9jazo6bm93KCkgbm9leGNlcHQgeworICB0eXBlZGVm
IGNocm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9D
TE9DS19HRVRUSU1FKSAmJiBkZWZpbmVkKENMT0NLX1JFQUxUSU1FKQorICB0eXBlZGVmIGNocm9u
bzo6ZHVyYXRpb248cmVwLCBuYW5vPiBfX25zZWNzOworICBzdHJ1Y3QgdGltZXNwZWMgdHA7Cisg
IGlmICgwICE9IGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCkpCisgICAgX190aHJv
d19zeXN0ZW1fZXJyb3IoZXJybm8sICJjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FKSBmYWls
ZWQiKTsKKyAgcmV0dXJuIHRpbWVfcG9pbnQoX19zZWNzKHRwLnR2X3NlYykgKworICAgICAgICAg
ICAgICAgICAgICBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8ZHVyYXRpb24+KF9fbnNlY3ModHAudHZf
bnNlYykpKTsKKyNlbHNlCisgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXAsIG1pY3JvPiBf
X21pY3Jvc2VjczsKKyAgdGltZXZhbCB0djsKKyAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgIHJl
dHVybiB0aW1lX3BvaW50KF9fc2Vjcyh0di50dl9zZWMpICsgX19taWNyb3NlY3ModHYudHZfdXNl
YykpOworI2VuZGlmIC8vIF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUgJiYgQ0xPQ0tfUkVBTFRJ
TUUKK30KKworZmlsZXN5c3RlbV9lcnJvcjo6fmZpbGVzeXN0ZW1fZXJyb3IoKSB7fQorCit2b2lk
IGZpbGVzeXN0ZW1fZXJyb3I6Ol9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKSB7CisgIGNv
bnN0IGNoYXIqIGRlcml2ZWRfd2hhdCA9IHN5c3RlbV9lcnJvcjo6d2hhdCgpOworICBfX3N0b3Jh
Z2VfLT5fX3doYXRfID0gWyZdKCkgLT4gc3RyaW5nIHsKKyAgICBjb25zdCBjaGFyKiBwMSA9IHBh
dGgxKCkubmF0aXZlKCkuZW1wdHkoKSA/ICJcIlwiIiA6IHBhdGgxKCkuY19zdHIoKTsKKyAgICBj
b25zdCBjaGFyKiBwMiA9IHBhdGgyKCkubmF0aXZlKCkuZW1wdHkoKSA/ICJcIlwiIiA6IHBhdGgy
KCkuY19zdHIoKTsKKyAgICBzd2l0Y2ggKF9fbnVtX3BhdGhzKSB7CisgICAgZGVmYXVsdDoKKyAg
ICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJpbmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIiwg
ZGVyaXZlZF93aGF0KTsKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gZGV0YWlsOjpmb3JtYXRf
c3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyBbJXNdIiwgZGVyaXZlZF93aGF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSk7CisgICAgY2FzZSAyOgorICAgICAgcmV0
dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMgWyVzXSBbJXNd
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZF93aGF0LCBwMSwg
cDIpOworICAgIH0KKyAgfSgpOworfQorCitzdGF0aWMgcGF0aCBfX2RvX2Fic29sdXRlKGNvbnN0
IHBhdGgmIHAsIHBhdGgqIGN3ZCwgZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgIGVj
LT5jbGVhcigpOworICBpZiAocC5pc19hYnNvbHV0ZSgpKQorICAgIHJldHVybiBwOworICAqY3dk
ID0gX19jdXJyZW50X3BhdGgoZWMpOworICBpZiAoZWMgJiYgKmVjKQorICAgIHJldHVybiB7fTsK
KyAgcmV0dXJuICgqY3dkKSAvIHA7Cit9CisKK3BhdGggX19hYnNvbHV0ZShjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlKiBlYykgeworICBwYXRoIGN3ZDsKKyAgcmV0dXJuIF9fZG9fYWJzb2x1dGUo
cCwgJmN3ZCwgZWMpOworfQorCitwYXRoIF9fY2Fub25pY2FsKHBhdGggY29uc3QmIG9yaWdfcCwg
ZXJyb3JfY29kZSogZWMpIHsKKyAgcGF0aCBjd2Q7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIo
ImNhbm9uaWNhbCIsIGVjLCAmb3JpZ19wLCAmY3dkKTsKKworICBwYXRoIHAgPSBfX2RvX2Fic29s
dXRlKG9yaWdfcCwgJmN3ZCwgZWMpOworICBjaGFyIGJ1ZmZbUEFUSF9NQVggKyAxXTsKKyAgY2hh
ciogcmV0OworICBpZiAoKHJldCA9IDo6cmVhbHBhdGgocC5jX3N0cigpLCBidWZmKSkgPT0gbnVs
bHB0cikKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4g
e3JldH07Cit9CisKK3ZvaWQgX19jb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRv
LCBjb3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7Cisg
IEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNvcHkiLCBlYywgJmZyb20sICZ0byk7CisKKyAgY29u
c3QgYm9vbCBzeW1fc3RhdHVzID0gYm9vbCgKKyAgICAgIG9wdGlvbnMgJiAoY29weV9vcHRpb25z
OjpjcmVhdGVfc3ltbGlua3MgfCBjb3B5X29wdGlvbnM6OnNraXBfc3ltbGlua3MpKTsKKworICBj
b25zdCBib29sIHN5bV9zdGF0dXMyID0gYm9vbChvcHRpb25zICYgY29weV9vcHRpb25zOjpjb3B5
X3N5bWxpbmtzKTsKKworICBlcnJvcl9jb2RlIG1fZWMxOworICBTdGF0VCBmX3N0ID0ge307Cisg
IGNvbnN0IGZpbGVfc3RhdHVzIGYgPSBzeW1fc3RhdHVzIHx8IHN5bV9zdGF0dXMyCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBkZXRhaWw6OnBvc2l4X2xzdGF0KGZyb20sIGZfc3QsICZt
X2VjMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfc3RhdChm
cm9tLCBmX3N0LCAmbV9lYzEpOworICBpZiAobV9lYzEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQo
bV9lYzEpOworCisgIFN0YXRUIHRfc3QgPSB7fTsKKyAgY29uc3QgZmlsZV9zdGF0dXMgdCA9IHN5
bV9zdGF0dXMgPyBkZXRhaWw6OnBvc2l4X2xzdGF0KHRvLCB0X3N0LCAmbV9lYzEpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9zdGF0KHRvLCB0X3N0
LCAmbV9lYzEpOworCisgIGlmIChub3Qgc3RhdHVzX2tub3duKHQpKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMxKTsKKworICBpZiAoIWV4aXN0cyhmKSB8fCBpc19vdGhlcihmKSB8fCBpc19v
dGhlcih0KSB8fAorICAgICAgKGlzX2RpcmVjdG9yeShmKSAmJiBpc19yZWd1bGFyX2ZpbGUodCkp
IHx8CisgICAgICBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChmX3N0LCB0X3N0KSkgeworICAgIHJl
dHVybiBlcnIucmVwb3J0KGVycmM6OmZ1bmN0aW9uX25vdF9zdXBwb3J0ZWQpOworICB9CisKKyAg
aWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworCisgIGlmIChpc19zeW1saW5rKGYpKSB7CisgICAg
aWYgKGJvb2woY29weV9vcHRpb25zOjpza2lwX3N5bWxpbmtzICYgb3B0aW9ucykpIHsKKyAgICAg
IC8vIGRvIG5vdGhpbmcKKyAgICB9IGVsc2UgaWYgKG5vdCBleGlzdHModCkpIHsKKyAgICAgIF9f
Y29weV9zeW1saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBl
cnIucmVwb3J0KGVycmM6OmZpbGVfZXhpc3RzKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9IGVs
c2UgaWYgKGlzX3JlZ3VsYXJfZmlsZShmKSkgeworICAgIGlmIChib29sKGNvcHlfb3B0aW9uczo6
ZGlyZWN0b3JpZXNfb25seSAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3RoaW5nCisgICAg
fSBlbHNlIGlmIChib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzICYgb3B0aW9ucykp
IHsKKyAgICAgIF9fY3JlYXRlX3N5bWxpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgaWYg
KGJvb2woY29weV9vcHRpb25zOjpjcmVhdGVfaGFyZF9saW5rcyAmIG9wdGlvbnMpKSB7CisgICAg
ICBfX2NyZWF0ZV9oYXJkX2xpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgaWYgKGlzX2Rp
cmVjdG9yeSh0KSkgeworICAgICAgX19jb3B5X2ZpbGUoZnJvbSwgdG8gLyBmcm9tLmZpbGVuYW1l
KCksIG9wdGlvbnMsIGVjKTsKKyAgICB9IGVsc2UgeworICAgICAgX19jb3B5X2ZpbGUoZnJvbSwg
dG8sIG9wdGlvbnMsIGVjKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9IGVsc2UgaWYgKGlzX2Rp
cmVjdG9yeShmKSAmJiBib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzICYgb3B0aW9u
cykpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjppc19hX2RpcmVjdG9yeSk7CisgIH0g
ZWxzZSBpZiAoaXNfZGlyZWN0b3J5KGYpICYmIChib29sKGNvcHlfb3B0aW9uczo6cmVjdXJzaXZl
ICYgb3B0aW9ucykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0
aW9uczo6bm9uZSA9PSBvcHRpb25zKSkgeworCisgICAgaWYgKCFleGlzdHModCkpIHsKKyAgICAg
IC8vIGNyZWF0ZSBkaXJlY3RvcnkgdG8gd2l0aCBhdHRyaWJ1dGVzIGZyb20gJ2Zyb20nLgorICAg
ICAgX19jcmVhdGVfZGlyZWN0b3J5KHRvLCBmcm9tLCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVj
KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgICAgZGlyZWN0b3J5X2l0ZXJh
dG9yIGl0ID0KKyAgICAgICAgZWMgPyBkaXJlY3RvcnlfaXRlcmF0b3IoZnJvbSwgKmVjKSA6IGRp
cmVjdG9yeV9pdGVyYXRvcihmcm9tKTsKKyAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICByZXR1
cm47CisgICAgfQorICAgIGVycm9yX2NvZGUgbV9lYzI7CisgICAgZm9yICg7IGl0ICE9IGRpcmVj
dG9yeV9pdGVyYXRvcigpOyBpdC5pbmNyZW1lbnQobV9lYzIpKSB7CisgICAgICBpZiAobV9lYzIp
IHsKKyAgICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYzIpOworICAgICAgfQorICAgICAgX19j
b3B5KGl0LT5wYXRoKCksIHRvIC8gaXQtPnBhdGgoKS5maWxlbmFtZSgpLAorICAgICAgICAgICAg
IG9wdGlvbnMgfCBjb3B5X29wdGlvbnM6Ol9faW5fcmVjdXJzaXZlX2NvcHksIGVjKTsKKyAgICAg
IGlmIChlYyAmJiAqZWMpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQor
fQorCituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKKyNpZmRlZiBfTElCQ1BQX1VT
RV9TRU5ERklMRQorYm9vbCBjb3B5X2ZpbGVfaW1wbF9zZW5kZmlsZShGaWxlRGVzY3JpcHRvciYg
cmVhZF9mZCwgRmlsZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworCisgIHNpemVfdCBjb3VudCA9IHJlYWRfZmQuZ2V0
X3N0YXQoKS5zdF9zaXplOworICBkbyB7CisgICAgc3NpemVfdCByZXM7CisgICAgaWYgKChyZXMg
PSA6OnNlbmRmaWxlKHdyaXRlX2ZkLmZkLCByZWFkX2ZkLmZkLCBudWxscHRyLCBjb3VudCkpID09
IC0xKSB7CisgICAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgY291bnQgLT0gcmVzOworICB9IHdoaWxlIChjb3VudCA+IDApOworCisgIGVj
LmNsZWFyKCk7CisKKyAgcmV0dXJuIHRydWU7Cit9CisjZWxpZiBkZWZpbmVkKF9MSUJDUFBfVVNF
X0NPUFlGSUxFKQorYm9vbCBjb3B5X2ZpbGVfaW1wbF9jb3B5ZmlsZShGaWxlRGVzY3JpcHRvciYg
cmVhZF9mZCwgRmlsZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBzdHJ1Y3QgQ29weUZpbGVTdGF0ZSB7CisgICAg
Y29weWZpbGVfc3RhdGVfdCBzdGF0ZTsKKyAgICBDb3B5RmlsZVN0YXRlKCkgeyBzdGF0ZSA9IGNv
cHlmaWxlX3N0YXRlX2FsbG9jKCk7IH0KKyAgICB+Q29weUZpbGVTdGF0ZSgpIHsgY29weWZpbGVf
c3RhdGVfZnJlZShzdGF0ZSk7IH0KKworICBwcml2YXRlOgorICAgIENvcHlGaWxlU3RhdGUoQ29w
eUZpbGVTdGF0ZSBjb25zdCYpID0gZGVsZXRlOworICAgIENvcHlGaWxlU3RhdGUmIG9wZXJhdG9y
PShDb3B5RmlsZVN0YXRlIGNvbnN0JikgPSBkZWxldGU7CisgIH07CisKKyAgQ29weUZpbGVTdGF0
ZSBjZnM7CisgIGlmIChmY29weWZpbGUocmVhZF9mZC5mZCwgd3JpdGVfZmQuZmQsIGNmcy5zdGF0
ZSwgQ09QWUZJTEVfREFUQSkgPCAwKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAg
cmV0dXJuIGZhbHNlOworICB9CisKKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIHRydWU7Cit9Cisj
ZW5kaWYKKworLy8gVGhpcyBmdW5jdGlvbiBpcyBndWFyZGVkIGJ5IGlmZGVmJ3MgaW4gSnVuaXBl
ciBkdWUgdG8gdGhlIGN1cnJlbnQKKy8vIGNsYW5nIG5vdCBzdXBwb3J0aW5nIGFuIF9fb3BlbiBm
dW5jdGlvbiBvbiBpZnN0cmVhbSBhbmQgb2ZzdHJlYW0uCisjaWYgIWRlZmluZWQoX0xJQkNQUF9V
U0VfU0VOREZJTEUpICYmICFkZWZpbmVkKF9MSUJDUFBfVVNFX0NPUFlGSUxFKQorLy8gTm90ZTog
VGhpcyBmdW5jdGlvbiBpc24ndCBndWFyZGVkIGJ5IGlmZGVmJ3MgZXZlbiB0aG91Z2ggaXQgbWF5
IGJlIHVudXNlZAorLy8gaW4gb3JkZXIgdG8gYXNzdXJlIGl0IHN0aWxsIGNvbXBpbGVzLgorX19h
dHRyaWJ1dGVfXygodW51c2VkKSkgYm9vbCBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KEZpbGVEZXNj
cmlwdG9yJiByZWFkX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBp
ZnN0cmVhbSBpbjsKKyAgaW4uX19vcGVuKHJlYWRfZmQuZmQsIGlvczo6YmluYXJ5KTsKKyAgaWYg
KCFpbi5pc19vcGVuKCkpIHsKKyAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCBfX29wZW4gZGlkbid0
IHJlc2V0IHRoZSBlcnJvciBjb2RlLgorICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJl
dHVybiBmYWxzZTsKKyAgfQorICBvZnN0cmVhbSBvdXQ7CisgIG91dC5fX29wZW4od3JpdGVfZmQu
ZmQsIGlvczo6YmluYXJ5KTsKKyAgaWYgKCFvdXQuaXNfb3BlbigpKSB7CisgICAgZWMgPSBjYXB0
dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGluLmdvb2QoKSAm
JiBvdXQuZ29vZCgpKSB7CisgICAgdXNpbmcgSW5JdCA9IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hh
cj47CisgICAgdXNpbmcgT3V0SXQgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIElu
SXQgYmluKGluKTsKKyAgICBJbkl0IGVpbjsKKyAgICBPdXRJdCBib3V0KG91dCk7CisgICAgY29w
eShiaW4sIGVpbiwgYm91dCk7CisgIH0KKyAgaWYgKG91dC5mYWlsKCkgfHwgaW4uZmFpbCgpKSB7
CisgICAgZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6aW9fZXJyb3IpOworICAgIHJldHVybiBm
YWxzZTsKKyAgfQorCisgIGVjLmNsZWFyKCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K2Jvb2wgY29weV9maWxlX2ltcGwoRmlsZURlc2NyaXB0b3ImIGZyb20sIEZpbGVEZXNjcmlwdG9y
JiB0bywgZXJyb3JfY29kZSYgZWMpIHsKKyNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxF
KQorICByZXR1cm4gY29weV9maWxlX2ltcGxfc2VuZGZpbGUoZnJvbSwgdG8sIGVjKTsKKyNlbGlm
IGRlZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJTEUpCisgIHJldHVybiBjb3B5X2ZpbGVfaW1wbF9j
b3B5ZmlsZShmcm9tLCB0bywgZWMpOworI2Vsc2UKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX2Rl
ZmF1bHQoZnJvbSwgdG8sIGVjKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBu
YW1lc3BhY2UgZGV0YWlsCisKK2Jvb2wgX19jb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29u
c3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zLAorICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlKiBlYykgeworICB1c2luZyBkZXRhaWw6OkZpbGVEZXNjcmlwdG9yOworICBFcnJvckhh
bmRsZXI8Ym9vbD4gZXJyKCJjb3B5X2ZpbGUiLCBlYywgJnRvLCAmZnJvbSk7CisKKyAgZXJyb3Jf
Y29kZSBtX2VjOworICBGaWxlRGVzY3JpcHRvciBmcm9tX2ZkID0KKyAgICAgIEZpbGVEZXNjcmlw
dG9yOjpjcmVhdGVfd2l0aF9zdGF0dXMoJmZyb20sIG1fZWMsIE9fUkRPTkxZIHwgT19OT05CTE9D
Syk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworCisgIGF1dG8g
ZnJvbV9zdCA9IGZyb21fZmQuZ2V0X3N0YXR1cygpOworICBTdGF0VCBjb25zdCYgZnJvbV9zdGF0
ID0gZnJvbV9mZC5nZXRfc3RhdCgpOworICBpZiAoIWlzX3JlZ3VsYXJfZmlsZShmcm9tX3N0KSkg
eworICAgIGlmIChub3QgbV9lYykKKyAgICAgIG1fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6
bm90X3N1cHBvcnRlZCk7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICBj
b25zdCBib29sIHNraXBfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6c2tpcF9leGlzdGlu
ZyAmIG9wdGlvbnMpOworICBjb25zdCBib29sIHVwZGF0ZV9leGlzdGluZyA9IGJvb2woY29weV9v
cHRpb25zOjp1cGRhdGVfZXhpc3RpbmcgJiBvcHRpb25zKTsKKyAgY29uc3QgYm9vbCBvdmVyd3Jp
dGVfZXhpc3RpbmcgPQorICAgICAgYm9vbChjb3B5X29wdGlvbnM6Om92ZXJ3cml0ZV9leGlzdGlu
ZyAmIG9wdGlvbnMpOworCisgIFN0YXRUIHRvX3N0YXRfcGF0aDsKKyAgZmlsZV9zdGF0dXMgdG9f
c3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQodG8sIHRvX3N0YXRfcGF0aCwgJm1fZWMpOworICBpZiAo
IXN0YXR1c19rbm93bih0b19zdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisKKyAg
Y29uc3QgYm9vbCB0b19leGlzdHMgPSBleGlzdHModG9fc3QpOworICBpZiAodG9fZXhpc3RzICYm
ICFpc19yZWd1bGFyX2ZpbGUodG9fc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5v
dF9zdXBwb3J0ZWQpOworCisgIGlmICh0b19leGlzdHMgJiYgZGV0YWlsOjpzdGF0X2VxdWl2YWxl
bnQoZnJvbV9zdGF0LCB0b19zdGF0X3BhdGgpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6
OmZpbGVfZXhpc3RzKTsKKworICBpZiAodG9fZXhpc3RzICYmIHNraXBfZXhpc3RpbmcpCisgICAg
cmV0dXJuIGZhbHNlOworCisgIGJvb2wgU2hvdWxkQ29weSA9IFsmXSgpIHsKKyAgICBpZiAodG9f
ZXhpc3RzICYmIHVwZGF0ZV9leGlzdGluZykgeworICAgICAgYXV0byBmcm9tX3RpbWUgPSBkZXRh
aWw6OmV4dHJhY3RfbXRpbWUoZnJvbV9zdGF0KTsKKyAgICAgIGF1dG8gdG9fdGltZSA9IGRldGFp
bDo6ZXh0cmFjdF9tdGltZSh0b19zdGF0X3BhdGgpOworICAgICAgaWYgKGZyb21fdGltZS50dl9z
ZWMgPCB0b190aW1lLnR2X3NlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKGZy
b21fdGltZS50dl9zZWMgPT0gdG9fdGltZS50dl9zZWMgJiYKKyAgICAgICAgICBmcm9tX3RpbWUu
dHZfbnNlYyA8PSB0b190aW1lLnR2X25zZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoIXRvX2V4aXN0cyB8fCBvdmVyd3JpdGVfZXhp
c3RpbmcpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpm
aWxlX2V4aXN0cyk7CisgIH0oKTsKKyAgaWYgKCFTaG91bGRDb3B5KQorICAgIHJldHVybiBmYWxz
ZTsKKworICAvLyBEb24ndCB0cnVuY2F0ZSByaWdodCBhd2F5LiBXZSBtYXkgbm90IGJlIG9wZW5p
bmcgdGhlIGZpbGUgd2Ugb3JpZ2luYWxseQorICAvLyBsb29rZWQgYXQ7IHdlJ2xsIGNoZWNrIHRo
aXMgbGF0ZXIuCisgIGludCB0b19vcGVuX2ZsYWdzID0gT19XUk9OTFk7CisgIGlmICghdG9fZXhp
c3RzKQorICAgIHRvX29wZW5fZmxhZ3MgfD0gT19DUkVBVDsKKyAgRmlsZURlc2NyaXB0b3IgdG9f
ZmQgPSBGaWxlRGVzY3JpcHRvcjo6Y3JlYXRlX3dpdGhfc3RhdHVzKAorICAgICAgJnRvLCBtX2Vj
LCB0b19vcGVuX2ZsYWdzLCBmcm9tX3N0YXQuc3RfbW9kZSk7CisgIGlmIChtX2VjKQorICAgIHJl
dHVybiBlcnIucmVwb3J0KG1fZWMpOworCisgIGlmICh0b19leGlzdHMpIHsKKyAgICAvLyBDaGVj
ayB0aGF0IHRoZSBmaWxlIHdlIGluaXRpYWxseSBzdGF0J2VkIGlzIGVxdWl2YWxlbnQgdG8gdGhl
IG9uZQorICAgIC8vIHdlIG9wZW5lZC4KKyAgICAvLyBGSVhNRTogcmVwb3J0IHRoaXMgYmV0dGVy
LgorICAgIGlmICghZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQodG9fc3RhdF9wYXRoLCB0b19mZC5n
ZXRfc3RhdCgpKSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmJhZF9maWxlX2Rlc2Ny
aXB0b3IpOworCisgICAgLy8gU2V0IHRoZSBwZXJtaXNzaW9ucyBhbmQgdHJ1bmNhdGUgdGhlIGZp
bGUgd2Ugb3BlbmVkLgorICAgIGlmIChkZXRhaWw6OnBvc2l4X2ZjaG1vZCh0b19mZCwgZnJvbV9z
dGF0LCBtX2VjKSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIGlmIChkZXRh
aWw6OnBvc2l4X2Z0cnVuY2F0ZSh0b19mZCwgMCwgbV9lYykpCisgICAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKyAgfQorCisgIGlmICghY29weV9maWxlX2ltcGwoZnJvbV9mZCwgdG9fZmQs
IG1fZWMpKSB7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZGVzdCBmaWxlIGlmIHdlIGZhaWxl
ZCwgYW5kIGl0IGRpZG4ndCBleGlzdCBwcmV2aW91c2x5LgorICAgIHJldHVybiBlcnIucmVwb3J0
KG1fZWMpOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgX19jb3B5X3N5bWxpbmso
Y29uc3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIGNvbnN0IHBhdGggcmVhbF9w
YXRoKF9fcmVhZF9zeW1saW5rKGV4aXN0aW5nX3N5bWxpbmssIGVjKSk7CisgIGlmIChlYyAmJiAq
ZWMpIHsKKyAgICByZXR1cm47CisgIH0KKyAgLy8gTk9URTogcHJvcG9zYWwgc2F5cyB5b3Ugc2hv
dWxkIGRldGVjdCBpZiB5b3Ugc2hvdWxkIGNhbGwKKyAgLy8gY3JlYXRlX3N5bWxpbmsgb3IgY3Jl
YXRlX2RpcmVjdG9yeV9zeW1saW5rLiBJIGRvbid0IHRoaW5rIHRoaXMKKyAgLy8gaXMgbmVlZGVk
IHdpdGggUE9TSVgKKyAgX19jcmVhdGVfc3ltbGluayhyZWFsX3BhdGgsIG5ld19zeW1saW5rLCBl
Yyk7Cit9CisKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yaWVz
IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIGF1dG8gY29uc3Qgc3QgPSBkZXRh
aWw6OnBvc2l4X3N0YXQocCwgJm1fZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIGVsc2UgaWYgKGlzX2RpcmVjdG9yeShzdCkpCisg
ICAgcmV0dXJuIGZhbHNlOworICBlbHNlIGlmIChleGlzdHMoc3QpKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KGVycmM6OmZpbGVfZXhpc3RzKTsKKworICBjb25zdCBwYXRoIHBhcmVudCA9IHAucGFy
ZW50X3BhdGgoKTsKKyAgaWYgKCFwYXJlbnQuZW1wdHkoKSkgeworICAgIGNvbnN0IGZpbGVfc3Rh
dHVzIHBhcmVudF9zdCA9IHN0YXR1cyhwYXJlbnQsIG1fZWMpOworICAgIGlmIChub3Qgc3RhdHVz
X2tub3duKHBhcmVudF9zdCkpCisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBp
ZiAobm90IGV4aXN0cyhwYXJlbnRfc3QpKSB7CisgICAgICBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhw
YXJlbnQsIGVjKTsKKyAgICAgIGlmIChlYyAmJiAqZWMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KHAsIGVj
KTsKK30KKworYm9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIsIGVj
LCAmcCk7CisKKyAgaWYgKDo6bWtkaXIocC5jX3N0cigpLCBzdGF0aWNfY2FzdDxpbnQ+KHBlcm1z
OjphbGwpKSA9PSAwKQorICAgIHJldHVybiB0cnVlOworICBpZiAoZXJybm8gIT0gRUVYSVNUKQor
ICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIF9fY3JlYXRlX2RpcmVjdG9yeShwYXRoIGNvbnN0JiBwLCBwYXRoIGNvbnN0JiBhdHRyaWJ1
dGVzLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVf
ZGlyZWN0b3J5IiwgZWMsICZwLCAmYXR0cmlidXRlcyk7CisKKyAgU3RhdFQgYXR0cl9zdGF0Owor
ICBlcnJvcl9jb2RlIG1lYzsKKyAgYXV0byBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChhdHRyaWJ1
dGVzLCBhdHRyX3N0YXQsICZtZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0
dXJuIGVyci5yZXBvcnQobWVjKTsKKyAgaWYgKCFpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVy
biBlcnIucmVwb3J0KGVycmM6Om5vdF9hX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAidGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgcGF0aCBpcyBpbnZhbGlkIik7CisKKyAgaWYgKDo6
bWtkaXIocC5jX3N0cigpLCBhdHRyX3N0YXQuc3RfbW9kZSkgPT0gMCkKKyAgICByZXR1cm4gdHJ1
ZTsKKyAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8o
KSk7CisgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGlu
ayhwYXRoIGNvbnN0JiBmcm9tLCBwYXRoIGNvbnN0JiB0bywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigi
Y3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1s
aW5rKGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgIT0gMCkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChjYXB0dXJlX2Vycm5vKCkpOworfQorCit2b2lkIF9fY3JlYXRlX2hhcmRfbGluayhjb25zdCBw
YXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5k
bGVyPHZvaWQ+IGVycigiY3JlYXRlX2hhcmRfbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYg
KDo6bGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19jcmVhdGVfc3ltbGluayhwYXRo
IGNvbnN0JiBmcm9tLCBwYXRoIGNvbnN0JiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPHZvaWQ+IGVycigiY3JlYXRlX3N5bWxpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlm
ICg6OnN5bWxpbmsoZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCitwYXRoIF9fY3VycmVudF9wYXRoKGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoImN1cnJlbnRfcGF0aCIs
IGVjKTsKKworICBhdXRvIHNpemUgPSA6OnBhdGhjb25mKCIuIiwgX1BDX1BBVEhfTUFYKTsKKyAg
X0xJQkNQUF9BU1NFUlQoc2l6ZSA+PSAwLCAicGF0aGNvbmYgcmV0dXJuZWQgYSAwIGFzIG1heCBz
aXplIik7CisKKyAgYXV0byBidWZmID0gdW5pcXVlX3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemUg
KyAxXSk7CisgIGNoYXIqIHJldDsKKyAgaWYgKChyZXQgPSA6OmdldGN3ZChidWZmLmdldCgpLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKSkgPT0gbnVsbHB0cikKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChjYXB0dXJlX2Vycm5vKCksICJjYWxsIHRvIGdldGN3ZCBmYWlsZWQiKTsKKworICByZXR1
cm4ge2J1ZmYuZ2V0KCl9OworfQorCit2b2lkIF9fY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImN1cnJlbnRfcGF0
aCIsIGVjLCAmcCk7CisgIGlmICg6OmNoZGlyKHAuY19zdHIoKSkgPT0gLTEpCisgICAgZXJyLnJl
cG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCitib29sIF9fZXF1aXZhbGVudChjb25zdCBwYXRo
JiBwMSwgY29uc3QgcGF0aCYgcDIsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxi
b29sPiBlcnIoImVxdWl2YWxlbnQiLCBlYywgJnAxLCAmcDIpOworCisgIGVycm9yX2NvZGUgZWMx
LCBlYzI7CisgIFN0YXRUIHN0MSA9IHt9LCBzdDIgPSB7fTsKKyAgYXV0byBzMSA9IGRldGFpbDo6
cG9zaXhfc3RhdChwMS5uYXRpdmUoKSwgc3QxLCAmZWMxKTsKKyAgaWYgKCFleGlzdHMoczEpKQor
ICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICBhdXRvIHMyID0g
ZGV0YWlsOjpwb3NpeF9zdGF0KHAyLm5hdGl2ZSgpLCBzdDIsICZlYzIpOworICBpZiAoIWV4aXN0
cyhzMikpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisKKyAg
cmV0dXJuIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KHN0MSwgc3QyKTsKK30KKwordWludG1heF90
IF9fZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFu
ZGxlcjx1aW50bWF4X3Q+IGVycigiZmlsZV9zaXplIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2Rl
IG1fZWM7CisgIFN0YXRUIHN0OworICBmaWxlX3N0YXR1cyBmc3QgPSBkZXRhaWw6OnBvc2l4X3N0
YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKCFleGlzdHMoZnN0KSB8fCAhaXNfcmVndWxhcl9maWxl
KGZzdCkpIHsKKyAgICBlcnJjIGVycm9yX2tpbmQgPQorICAgICAgICBpc19kaXJlY3RvcnkoZnN0
KSA/IGVycmM6OmlzX2FfZGlyZWN0b3J5IDogZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICBpZiAo
IW1fZWMpCisgICAgICBtX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycm9yX2tpbmQpOworICAgIHJl
dHVybiBlcnIucmVwb3J0KG1fZWMpOworICB9CisgIC8vIGlzX3JlZ3VsYXJfZmlsZShwKSA9PSB0
cnVlCisgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KHN0LnN0X3NpemUpOworfQorCit1
aW50bWF4X3QgX19oYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMp
IHsKKyAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJoYXJkX2xpbmtfY291bnQiLCBlYywg
JnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7CisgIGRldGFpbDo6cG9zaXhf
c3RhdChwLCBzdCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydCht
X2VjKTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oc3Quc3RfbmxpbmspOworfQor
Citib29sIF9fZnNfaXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPGJvb2w+IGVycigiaXNfZW1wdHkiLCBlYywgJnApOworCisgIGVycm9yX2Nv
ZGUgbV9lYzsKKyAgU3RhdFQgcHN0OworICBhdXRvIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAs
IHBzdCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsK
KyAgZWxzZSBpZiAoIWlzX2RpcmVjdG9yeShzdCkgJiYgIWlzX3JlZ3VsYXJfZmlsZShzdCkpCisg
ICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisgIGVsc2UgaWYgKGlz
X2RpcmVjdG9yeShzdCkpIHsKKyAgICBhdXRvIGl0ID0gZWMgPyBkaXJlY3RvcnlfaXRlcmF0b3Io
cCwgKmVjKSA6IGRpcmVjdG9yeV9pdGVyYXRvcihwKTsKKyAgICBpZiAoZWMgJiYgKmVjKQorICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpdCA9PSBkaXJlY3RvcnlfaXRlcmF0b3J7fTsK
KyAgfSBlbHNlIGlmIChpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50bWF4X3Q+KHBzdC5zdF9zaXplKSA9PSAwOworCisgIF9MSUJDUFBfVU5SRUFDSEFCTEUo
KTsKK30KKworc3RhdGljIGZpbGVfdGltZV90eXBlIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUo
Y29uc3QgcGF0aCYgcCwgY29uc3QgU3RhdFQmIHN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWls
Ojpmc190aW1lOworICBFcnJvckhhbmRsZXI8ZmlsZV90aW1lX3R5cGU+IGVycigibGFzdF93cml0
ZV90aW1lIiwgZWMsICZwKTsKKworICBhdXRvIHRzID0gZGV0YWlsOjpleHRyYWN0X210aW1lKHN0
KTsKKyAgaWYgKCFmc190aW1lOjppc19yZXByZXNlbnRhYmxlKHRzKSkKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChlcnJjOjp2YWx1ZV90b29fbGFyZ2UpOworCisgIHJldHVybiBmc190aW1lOjpjb252
ZXJ0X2Zyb21fdGltZXNwZWModHMpOworfQorCitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rfd3JpdGVf
dGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBuYW1lc3BhY2Ug
Y2hyb25vOworICBFcnJvckhhbmRsZXI8ZmlsZV90aW1lX3R5cGU+IGVycigibGFzdF93cml0ZV90
aW1lIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHN0OworICBkZXRh
aWw6OnBvc2l4X3N0YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVy
ci5yZXBvcnQobV9lYyk7CisgIHJldHVybiBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKHAsIHN0
LCBlYyk7Cit9CisKK3ZvaWQgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90
aW1lX3R5cGUgbmV3X3RpbWUsIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNf
dGltZTsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigibGFzdF93cml0ZV90aW1lIiwgZWMsICZw
KTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIGFycmF5PFRpbWVTcGVjLCAyPiB0YnVmOworI2lm
ICFkZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKKyAgLy8gVGhpcyBpbXBsZW1lbnRhdGlv
biBoYXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGRldGVybWluaW5nIHRoZQorICAvLyBsYXN0
IGFjY2VzcyB0aW1lIGFuZCBhdHRlbXB0aW5nIHRvIHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSB1
c2luZworICAvLyA6OnV0aW1lcworICBTdGF0VCBzdDsKKyAgZmlsZV9zdGF0dXMgZnN0ID0gZGV0
YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBl
cnIucmVwb3J0KG1fZWMpOworICB0YnVmWzBdID0gZGV0YWlsOjpleHRyYWN0X2F0aW1lKHN0KTsK
KyNlbHNlCisgIHRidWZbMF0udHZfc2VjID0gMDsKKyAgdGJ1ZlswXS50dl9uc2VjID0gVVRJTUVf
T01JVDsKKyNlbmRpZgorICBpZiAoIWZzX3RpbWU6OmNvbnZlcnRfdG9fdGltZXNwZWModGJ1Zlsx
XSwgbmV3X3RpbWUpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OnZhbHVlX3Rvb19sYXJn
ZSk7CisKKyAgZGV0YWlsOjpzZXRfZmlsZV90aW1lcyhwLCB0YnVmLCBtX2VjKTsKKyAgaWYgKG1f
ZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7Cit9CisKK3ZvaWQgX19wZXJtaXNzaW9u
cyhjb25zdCBwYXRoJiBwLCBwZXJtcyBwcm1zLCBwZXJtX29wdGlvbnMgb3B0cywKKyAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJw
ZXJtaXNzaW9ucyIsIGVjLCAmcCk7CisKKyAgYXV0byBoYXNfb3B0ID0gWyZdKHBlcm1fb3B0aW9u
cyBvKSB7IHJldHVybiBib29sKG8gJiBvcHRzKTsgfTsKKyAgY29uc3QgYm9vbCByZXNvbHZlX3N5
bWxpbmtzID0gIWhhc19vcHQocGVybV9vcHRpb25zOjpub2ZvbGxvdyk7CisgIGNvbnN0IGJvb2wg
YWRkX3Blcm1zID0gaGFzX29wdChwZXJtX29wdGlvbnM6OmFkZCk7CisgIGNvbnN0IGJvb2wgcmVt
b3ZlX3Blcm1zID0gaGFzX29wdChwZXJtX29wdGlvbnM6OnJlbW92ZSk7CisgIF9MSUJDUFBfQVNT
RVJUKAorICAgICAgKGFkZF9wZXJtcyArIHJlbW92ZV9wZXJtcyArIGhhc19vcHQocGVybV9vcHRp
b25zOjpyZXBsYWNlKSkgPT0gMSwKKyAgICAgICJPbmUgYW5kIG9ubHkgb25lIG9mIHRoZSBwZXJt
X29wdGlvbnMgY29uc3RhbnRzIHJlcGxhY2UsIGFkZCwgb3IgcmVtb3ZlICIKKyAgICAgICJpcyBw
cmVzZW50IGluIG9wdHMiKTsKKworICBib29sIHNldF9zeW1fcGVybXMgPSBmYWxzZTsKKyAgcHJt
cyAmPSBwZXJtczo6bWFzazsKKyAgaWYgKCFyZXNvbHZlX3N5bWxpbmtzIHx8IChhZGRfcGVybXMg
fHwgcmVtb3ZlX3Blcm1zKSkgeworICAgIGVycm9yX2NvZGUgbV9lYzsKKyAgICBmaWxlX3N0YXR1
cyBzdCA9IHJlc29sdmVfc3ltbGlua3MgPyBkZXRhaWw6OnBvc2l4X3N0YXQocCwgJm1fZWMpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9sc3Rh
dChwLCAmbV9lYyk7CisgICAgc2V0X3N5bV9wZXJtcyA9IGlzX3N5bWxpbmsoc3QpOworICAgIGlm
IChtX2VjKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgX0xJQkNQUF9BU1NF
UlQoc3QucGVybWlzc2lvbnMoKSAhPSBwZXJtczo6dW5rbm93biwKKyAgICAgICAgICAgICAgICAg
ICAiUGVybWlzc2lvbnMgdW5leHBlY3RlZGx5IHVua25vd24iKTsKKyAgICBpZiAoYWRkX3Blcm1z
KQorICAgICAgcHJtcyB8PSBzdC5wZXJtaXNzaW9ucygpOworICAgIGVsc2UgaWYgKHJlbW92ZV9w
ZXJtcykKKyAgICAgIHBybXMgPSBzdC5wZXJtaXNzaW9ucygpICYgfnBybXM7CisgIH0KKyAgY29u
c3QgYXV0byByZWFsX3Blcm1zID0gZGV0YWlsOjpwb3NpeF9jb252ZXJ0X3Blcm1zKHBybXMpOwor
CisjaWYgZGVmaW5lZChBVF9TWU1MSU5LX05PRk9MTE9XKSAmJiBkZWZpbmVkKEFUX0ZEQ1dEKQor
ICBjb25zdCBpbnQgZmxhZ3MgPSBzZXRfc3ltX3Blcm1zID8gQVRfU1lNTElOS19OT0ZPTExPVyA6
IDA7CisgIGlmICg6OmZjaG1vZGF0KEFUX0ZEQ1dELCBwLmNfc3RyKCksIHJlYWxfcGVybXMsIGZs
YWdzKSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cisg
IH0KKyNlbHNlCisgIGlmIChzZXRfc3ltX3Blcm1zKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVy
cmM6Om9wZXJhdGlvbl9ub3Rfc3VwcG9ydGVkKTsKKyAgaWYgKDo6Y2htb2QocC5jX3N0cigpLCBy
ZWFsX3Blcm1zKSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8o
KSk7CisgIH0KKyNlbmRpZgorfQorCitwYXRoIF9fcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoInJlYWRfc3ltbGlu
ayIsIGVjLCAmcCk7CisKKyAgY2hhciBidWZmW1BBVEhfTUFYICsgMV07CisgIGVycm9yX2NvZGUg
bV9lYzsKKyAgOjpzc2l6ZV90IHJldDsKKyAgaWYgKChyZXQgPSA6OnJlYWRsaW5rKHAuY19zdHIo
KSwgYnVmZiwgUEFUSF9NQVgpKSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7CisgIH0KKyAgX0xJQkNQUF9BU1NFUlQocmV0IDw9IFBBVEhfTUFYLCAiVE9E
TyIpOworICBfTElCQ1BQX0FTU0VSVChyZXQgPiAwLCAiVE9ETyIpOworICBidWZmW3JldF0gPSAw
OworICByZXR1cm4ge2J1ZmZ9OworfQorCitib29sIF9fcmVtb3ZlKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoInJlbW92ZSIsIGVjLCAm
cCk7CisgIGlmICg6OnJlbW92ZShwLmNfc3RyKCkpID09IC0xKSB7CisgICAgaWYgKGVycm5vICE9
IEVOT0VOVCkKKyAgICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgICByZXR1cm4g
ZmFsc2U7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK25hbWVzcGFjZSB7CisKK3VpbnRtYXhf
dCByZW1vdmVfYWxsX2ltcGwocGF0aCBjb25zdCYgcCwgZXJyb3JfY29kZSYgZWMpIHsKKyAgY29u
c3QgYXV0byBucG9zID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgIGNvbnN0IGZpbGVf
c3RhdHVzIHN0ID0gX19zeW1saW5rX3N0YXR1cyhwLCAmZWMpOworICBpZiAoZWMpCisgICAgcmV0
dXJuIG5wb3M7CisgIHVpbnRtYXhfdCBjb3VudCA9IDE7CisgIGlmIChpc19kaXJlY3Rvcnkoc3Qp
KSB7CisgICAgZm9yIChkaXJlY3RvcnlfaXRlcmF0b3IgaXQocCwgZWMpOyAhZWMgJiYgaXQgIT0g
ZGlyZWN0b3J5X2l0ZXJhdG9yKCk7CisgICAgICAgICBpdC5pbmNyZW1lbnQoZWMpKSB7CisgICAg
ICBhdXRvIG90aGVyX2NvdW50ID0gcmVtb3ZlX2FsbF9pbXBsKGl0LT5wYXRoKCksIGVjKTsKKyAg
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIG5wb3M7CisgICAgICBjb3VudCArPSBvdGhlcl9j
b3VudDsKKyAgICB9CisgICAgaWYgKGVjKQorICAgICAgcmV0dXJuIG5wb3M7CisgIH0KKyAgaWYg
KCFfX3JlbW92ZShwLCAmZWMpKQorICAgIHJldHVybiBucG9zOworICByZXR1cm4gY291bnQ7Cit9
CisKK30gLy8gZW5kIG5hbWVzcGFjZQorCit1aW50bWF4X3QgX19yZW1vdmVfYWxsKGNvbnN0IHBh
dGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx1aW50bWF4X3Q+IGVycigi
cmVtb3ZlX2FsbCIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtZWM7CisgIGF1dG8gY291bnQg
PSByZW1vdmVfYWxsX2ltcGwocCwgbWVjKTsKKyAgaWYgKG1lYykgeworICAgIGlmIChtZWMgPT0g
ZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSkKKyAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBlcnIucmVwb3J0KG1lYyk7CisgIH0KKyAgcmV0dXJuIGNvdW50OworfQorCit2b2lkIF9f
cmVuYW1lKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYykg
eworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJyZW5hbWUiLCBlYywgJmZyb20sICZ0byk7Cisg
IGlmICg6OnJlbmFtZShmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIGVyci5y
ZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwordm9pZCBfX3Jlc2l6ZV9maWxlKGNvbnN0IHBh
dGgmIHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
dm9pZD4gZXJyKCJyZXNpemVfZmlsZSIsIGVjLCAmcCk7CisgIGlmICg6OnRydW5jYXRlKHAuY19z
dHIoKSwgc3RhdGljX2Nhc3Q8IDo6b2ZmX3Q+KHNpemUpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCitzcGFjZV9pbmZvIF9fc3BhY2UoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigic3Bh
Y2UiLCBlYywgJnApOworICBzcGFjZV9pbmZvIHNpOworICBzdHJ1Y3Qgc3RhdHZmcyBtX3N2ZnMg
PSB7fTsKKyAgaWYgKDo6c3RhdHZmcyhwLmNfc3RyKCksICZtX3N2ZnMpID09IC0xKSB7CisgICAg
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICAgIHNpLmNhcGFjaXR5ID0gc2kuZnJlZSA9
IHNpLmF2YWlsYWJsZSA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oLTEpOworICAgIHJldHVybiBz
aTsKKyAgfQorICAvLyBNdWx0aXBseSB3aXRoIG92ZXJmbG93IGNoZWNraW5nLgorICBhdXRvIGRv
X211bHQgPSBbJl0odWludG1heF90JiBvdXQsIHVpbnRtYXhfdCBvdGhlcikgeworICAgIG91dCA9
IG90aGVyICogbV9zdmZzLmZfZnJzaXplOworICAgIGlmIChvdGhlciA9PSAwIHx8IG91dCAvIG90
aGVyICE9IG1fc3Zmcy5mX2Zyc2l6ZSkKKyAgICAgIG91dCA9IHN0YXRpY19jYXN0PHVpbnRtYXhf
dD4oLTEpOworICB9OworICBkb19tdWx0KHNpLmNhcGFjaXR5LCBtX3N2ZnMuZl9ibG9ja3MpOwor
ICBkb19tdWx0KHNpLmZyZWUsIG1fc3Zmcy5mX2JmcmVlKTsKKyAgZG9fbXVsdChzaS5hdmFpbGFi
bGUsIG1fc3Zmcy5mX2JhdmFpbCk7CisgIHJldHVybiBzaTsKK30KKworZmlsZV9zdGF0dXMgX19z
dGF0dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcmV0dXJuIGRldGFpbDo6
cG9zaXhfc3RhdChwLCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3ltbGlua19zdGF0dXMoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcmV0dXJuIGRldGFpbDo6cG9zaXhfbHN0
YXQocCwgZWMpOworfQorCitwYXRoIF9fdGVtcF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlKiBl
YykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJ0ZW1wX2RpcmVjdG9yeV9wYXRoIiwgZWMp
OworCisgIGNvbnN0IGNoYXIqIGVudl9wYXRoc1tdID0geyJUTVBESVIiLCAiVE1QIiwgIlRFTVAi
LCAiVEVNUERJUiJ9OworICBjb25zdCBjaGFyKiByZXQgPSBudWxscHRyOworCisgIGZvciAoYXV0
byYgZXAgOiBlbnZfcGF0aHMpCisgICAgaWYgKChyZXQgPSBnZXRlbnYoZXApKSkKKyAgICAgIGJy
ZWFrOworICBpZiAocmV0ID09IG51bGxwdHIpCisgICAgcmV0ID0gIi90bXAiOworCisgIHBhdGgg
cChyZXQpOworICBlcnJvcl9jb2RlIG1fZWM7CisgIGZpbGVfc3RhdHVzIHN0ID0gZGV0YWlsOjpw
b3NpeF9zdGF0KHAsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVy
biBlcnIucmVwb3J0KG1fZWMsICJjYW5ub3QgYWNjZXNzIHBhdGggXCIlc1wiIiwgcCk7CisKKyAg
aWYgKCFleGlzdHMoc3QpIHx8ICFpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBlcnIucmVw
b3J0KGVycmM6Om5vdF9hX2RpcmVjdG9yeSwgInBhdGggXCIlc1wiIGlzIG5vdCBhIGRpcmVjdG9y
eSIsCisgICAgICAgICAgICAgICAgICAgICAgcCk7CisKKyAgcmV0dXJuIHA7Cit9CisKK3BhdGgg
X193ZWFrbHlfY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVy
cm9ySGFuZGxlcjxwYXRoPiBlcnIoIndlYWtseV9jYW5vbmljYWwiLCBlYywgJnApOworCisgIGlm
IChwLmVtcHR5KCkpCisgICAgcmV0dXJuIF9fY2Fub25pY2FsKCIiLCBlYyk7CisKKyAgcGF0aCBy
ZXN1bHQ7CisgIHBhdGggdG1wOworICB0bXAuX19yZXNlcnZlKHAubmF0aXZlKCkuc2l6ZSgpKTsK
KyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUVuZChwLm5hdGl2ZSgpKTsKKyAgLS1QUDsK
KyAgdmVjdG9yPHN0cmluZ192aWV3X3Q+IERORVBhcnRzOworCisgIHdoaWxlIChQUC5TdGF0ZSAh
PSBQYXRoUGFyc2VyOjpQU19CZWZvcmVCZWdpbikgeworICAgIHRtcC5hc3NpZ24oY3JlYXRlVmll
dyhwLm5hdGl2ZSgpLmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSkpOworICAgIGVycm9yX2Nv
ZGUgbV9lYzsKKyAgICBmaWxlX3N0YXR1cyBzdCA9IF9fc3RhdHVzKHRtcCwgJm1fZWMpOworICAg
IGlmICghc3RhdHVzX2tub3duKHN0KSkgeworICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7
CisgICAgfSBlbHNlIGlmIChleGlzdHMoc3QpKSB7CisgICAgICByZXN1bHQgPSBfX2Nhbm9uaWNh
bCh0bXAsIGVjKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBETkVQYXJ0cy5wdXNoX2JhY2so
KlBQKTsKKyAgICAtLVBQOworICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19C
ZWZvcmVCZWdpbikKKyAgICByZXN1bHQgPSBfX2Nhbm9uaWNhbCgiIiwgZWMpOworICBpZiAoZWMp
CisgICAgZWMtPmNsZWFyKCk7CisgIGlmIChETkVQYXJ0cy5lbXB0eSgpKQorICAgIHJldHVybiBy
ZXN1bHQ7CisgIGZvciAoYXV0byBJdCA9IERORVBhcnRzLnJiZWdpbigpOyBJdCAhPSBETkVQYXJ0
cy5yZW5kKCk7ICsrSXQpCisgICAgcmVzdWx0IC89ICpJdDsKKyAgcmV0dXJuIHJlc3VsdC5sZXhp
Y2FsbHlfbm9ybWFsKCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGggZGVmaW5pdGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworLyogY29uc3RleHByIHBhdGg6OnZhbHVlX3R5cGUgcGF0aDo6cHJlZmVycmVkX3NlcGFy
YXRvcjsgKi8KKworcGF0aCYgcGF0aDo6cmVwbGFjZV9leHRlbnNpb24ocGF0aCBjb25zdCYgcmVw
bGFjZW1lbnQpIHsKKyAgcGF0aCBwID0gZXh0ZW5zaW9uKCk7CisgIGlmIChub3QgcC5lbXB0eSgp
KSB7CisgICAgX19wbl8uZXJhc2UoX19wbl8uc2l6ZSgpIC0gcC5uYXRpdmUoKS5zaXplKCkpOwor
ICB9CisgIGlmICghcmVwbGFjZW1lbnQuZW1wdHkoKSkgeworICAgIGlmIChyZXBsYWNlbWVudC5u
YXRpdmUoKVswXSAhPSAnLicpIHsKKyAgICAgIF9fcG5fICs9ICIuIjsKKyAgICB9CisgICAgX19w
bl8uYXBwZW5kKHJlcGxhY2VtZW50Ll9fcG5fKTsKKyAgfQorICByZXR1cm4gKnRoaXM7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGguZGVjb21wb3NlCisKK3N0cmluZ192aWV3
X3QgcGF0aDo6X19yb290X25hbWUoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpD
cmVhdGVCZWdpbihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJv
b3ROYW1lKQorICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RyaW5nX3ZpZXdf
dCBwYXRoOjpfX3Jvb3RfZGlyZWN0b3J5KCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNl
cjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNf
SW5Sb290TmFtZSkKKyAgICArK1BQOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNf
SW5Sb290RGlyKQorICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RyaW5nX3Zp
ZXdfdCBwYXRoOjpfX3Jvb3RfcGF0aF9yYXcoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFy
c2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQ
U19JblJvb3ROYW1lKSB7CisgICAgYXV0byBOZXh0Q2ggPSBQUC5wZWVrKCk7CisgICAgaWYgKE5l
eHRDaCAmJiAqTmV4dENoID09ICcvJykgeworICAgICAgKytQUDsKKyAgICAgIHJldHVybiBjcmVh
dGVWaWV3KF9fcG5fLmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSk7CisgICAgfQorICAgIHJl
dHVybiBQUC5SYXdFbnRyeTsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNf
SW5Sb290RGlyKQorICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RhdGljIGJv
b2wgQ29uc3VtZVJvb3REaXIoUGF0aFBhcnNlciogUFApIHsKKyAgd2hpbGUgKFBQLT5TdGF0ZSA8
PSBQYXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisgICAgKysoKlBQKTsKKyAgcmV0dXJuIFBQLT5T
dGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19BdEVuZDsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpf
X3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVC
ZWdpbihfX3BuXyk7CisgIGlmIChDb25zdW1lUm9vdERpcigmUFApKQorICAgIHJldHVybiB7fTsK
KyAgcmV0dXJuIGNyZWF0ZVZpZXcoUFAuUmF3RW50cnkuZGF0YSgpLCAmX19wbl8uYmFjaygpKTsK
K30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3BhcmVudF9wYXRoKCkgY29uc3QgeworICBpZiAo
ZW1wdHkoKSkKKyAgICByZXR1cm4ge307CisgIC8vIERldGVybWluZSBpZiB3ZSBoYXZlIGEgcm9v
dCBwYXRoIGJ1dCBub3QgYSByZWxhdGl2ZSBwYXRoLiBJbiB0aGF0IGNhc2UKKyAgLy8gcmV0dXJu
ICp0aGlzLgorICB7CisgICAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5f
KTsKKyAgICBpZiAoQ29uc3VtZVJvb3REaXIoJlBQKSkKKyAgICAgIHJldHVybiBfX3BuXzsKKyAg
fQorICAvLyBPdGhlcndpc2UgcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgZW5kIG9m
IHRoZSBwYXRoLCBhbmQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGF0IHBh
dGgKKyAgeworICAgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVFbmQoX19wbl8pOworICAg
IC0tUFA7CisgICAgaWYgKFBQLlJhd0VudHJ5LmRhdGEoKSA9PSBfX3BuXy5kYXRhKCkpCisgICAg
ICByZXR1cm4ge307CisgICAgLS1QUDsKKyAgICByZXR1cm4gY3JlYXRlVmlldyhfX3BuXy5kYXRh
KCksICZQUC5SYXdFbnRyeS5iYWNrKCkpOworICB9Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6
X19maWxlbmFtZSgpIGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIHt9OworICB7
CisgICAgUGF0aFBhcnNlciBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAg
ICBpZiAoQ29uc3VtZVJvb3REaXIoJlBQKSkKKyAgICAgIHJldHVybiB7fTsKKyAgfQorICByZXR1
cm4gKigtLVBhdGhQYXJzZXI6OkNyZWF0ZUVuZChfX3BuXykpOworfQorCitzdHJpbmdfdmlld190
IHBhdGg6Ol9fc3RlbSgpIGNvbnN0IHsKKyAgcmV0dXJuIHBhcnNlcjo6c2VwYXJhdGVfZmlsZW5h
bWUoX19maWxlbmFtZSgpKS5maXJzdDsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2V4dGVu
c2lvbigpIGNvbnN0IHsKKyAgcmV0dXJuIHBhcnNlcjo6c2VwYXJhdGVfZmlsZW5hbWUoX19maWxl
bmFtZSgpKS5zZWNvbmQ7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGguZ2VuCisK
K2VudW0gUGF0aFBhcnRLaW5kIDogdW5zaWduZWQgY2hhciB7CisgIFBLX05vbmUsCisgIFBLX1Jv
b3RTZXAsCisgIFBLX0ZpbGVuYW1lLAorICBQS19Eb3QsCisgIFBLX0RvdERvdCwKKyAgUEtfVHJh
aWxpbmdTZXAKK307CisKK3N0YXRpYyBQYXRoUGFydEtpbmQgQ2xhc3NpZnlQYXRoUGFydChzdHJp
bmdfdmlld190IFBhcnQpIHsKKyAgaWYgKFBhcnQuZW1wdHkoKSkKKyAgICByZXR1cm4gUEtfVHJh
aWxpbmdTZXA7CisgIGlmIChQYXJ0ID09ICIuIikKKyAgICByZXR1cm4gUEtfRG90OworICBpZiAo
UGFydCA9PSAiLi4iKQorICAgIHJldHVybiBQS19Eb3REb3Q7CisgIGlmIChQYXJ0ID09ICIvIikK
KyAgICByZXR1cm4gUEtfUm9vdFNlcDsKKyAgcmV0dXJuIFBLX0ZpbGVuYW1lOworfQorCitwYXRo
IHBhdGg6OmxleGljYWxseV9ub3JtYWwoKSBjb25zdCB7CisgIGlmIChfX3BuXy5lbXB0eSgpKQor
ICAgIHJldHVybiAqdGhpczsKKworICB1c2luZyBQYXJ0S2luZFBhaXIgPSBwYWlyPHN0cmluZ192
aWV3X3QsIFBhdGhQYXJ0S2luZD47CisgIHZlY3RvcjxQYXJ0S2luZFBhaXI+IFBhcnRzOworICAv
LyBHdWVzcyBhcyB0byBob3cgbWFueSBlbGVtZW50cyB0aGUgcGF0aCBoYXMgdG8gYXZvaWQgcmVh
bGxvY2F0aW5nLgorICBQYXJ0cy5yZXNlcnZlKDMyKTsKKworICAvLyBUcmFjayB0aGUgdG90YWwg
c2l6ZSBvZiB0aGUgcGFydHMgYXMgd2UgY29sbGVjdCB0aGVtLiBUaGlzIGFsbG93cyB0aGUKKyAg
Ly8gcmVzdWx0aW5nIHBhdGggdG8gcmVzZXJ2ZSB0aGUgY29ycmVjdCBhbW91bnQgb2YgbWVtb3J5
LgorICBzaXplX3QgTmV3UGF0aFNpemUgPSAwOworICBhdXRvIEFkZFBhcnQgPSBbJl0oUGF0aFBh
cnRLaW5kIEssIHN0cmluZ192aWV3X3QgUCkgeworICAgIE5ld1BhdGhTaXplICs9IFAuc2l6ZSgp
OworICAgIFBhcnRzLmVtcGxhY2VfYmFjayhQLCBLKTsKKyAgfTsKKyAgYXV0byBMYXN0UGFydEtp
bmQgPSBbJl0oKSB7CisgICAgaWYgKFBhcnRzLmVtcHR5KCkpCisgICAgICByZXR1cm4gUEtfTm9u
ZTsKKyAgICByZXR1cm4gUGFydHMuYmFjaygpLnNlY29uZDsKKyAgfTsKKworICBib29sIE1heWJl
TmVlZFRyYWlsaW5nU2VwID0gZmFsc2U7CisgIC8vIEJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyB0
aGUgcmVtYWluaW5nIGVsZW1lbnRzIG9mIHRoZSBwYXRoLCBwb3BwaW5nIG9mZgorICAvLyBlbGVt
ZW50cyB3aGljaCBvY2N1ciBiZWZvcmUgYSAnLi4nIGVudHJ5LgorICBmb3IgKGF1dG8gUFAgPSBQ
YXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7IFBQOyArK1BQKSB7CisgICAgYXV0byBQYXJ0
ID0gKlBQOworICAgIFBhdGhQYXJ0S2luZCBLaW5kID0gQ2xhc3NpZnlQYXRoUGFydChQYXJ0KTsK
KyAgICBzd2l0Y2ggKEtpbmQpIHsKKyAgICBjYXNlIFBLX0ZpbGVuYW1lOgorICAgIGNhc2UgUEtf
Um9vdFNlcDogeworICAgICAgLy8gQWRkIGFsbCBub24tZG90IGFuZCBub24tZG90LWRvdCBlbGVt
ZW50cyB0byB0aGUgc3RhY2sgb2YgZWxlbWVudHMuCisgICAgICBBZGRQYXJ0KEtpbmQsIFBhcnQp
OworICAgICAgTWF5YmVOZWVkVHJhaWxpbmdTZXAgPSBmYWxzZTsKKyAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFBLX0RvdERvdDogeworICAgICAgLy8gT25seSBwdXNoIGEgIi4uIiBlbGVt
ZW50IGlmIHRoZXJlIGFyZSBubyBlbGVtZW50cyBwcmVjZWRpbmcgdGhlICIuLiIsCisgICAgICAv
LyBvciBpZiB0aGUgcHJlY2VkaW5nIGVsZW1lbnQgaXMgaXRzZWxmICIuLiIuCisgICAgICBhdXRv
IExhc3RLaW5kID0gTGFzdFBhcnRLaW5kKCk7CisgICAgICBpZiAoTGFzdEtpbmQgPT0gUEtfRmls
ZW5hbWUpIHsKKyAgICAgICAgTmV3UGF0aFNpemUgLT0gUGFydHMuYmFjaygpLmZpcnN0LnNpemUo
KTsKKyAgICAgICAgUGFydHMucG9wX2JhY2soKTsKKyAgICAgIH0gZWxzZSBpZiAoTGFzdEtpbmQg
IT0gUEtfUm9vdFNlcCkKKyAgICAgICAgQWRkUGFydChQS19Eb3REb3QsICIuLiIpOworICAgICAg
TWF5YmVOZWVkVHJhaWxpbmdTZXAgPSBMYXN0S2luZCA9PSBQS19GaWxlbmFtZTsKKyAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFBLX0RvdDoKKyAgICBjYXNlIFBLX1RyYWlsaW5nU2VwOiB7
CisgICAgICBNYXliZU5lZWRUcmFpbGluZ1NlcCA9IHRydWU7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQS19Ob25lOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0K
KyAgfQorICAvLyBbZnMucGF0aC5nZW5lcmljXXA2Ljg6IElmIHRoZSBwYXRoIGlzIGVtcHR5LCBh
ZGQgYSBkb3QuCisgIGlmIChQYXJ0cy5lbXB0eSgpKQorICAgIHJldHVybiAiLiI7CisKKyAgLy8g
W2ZzLnBhdGguZ2VuZXJpY11wNi43OiBJZiB0aGUgbGFzdCBmaWxlbmFtZSBpcyBkb3QtZG90LCBy
ZW1vdmUgYW55CisgIC8vIHRyYWlsaW5nIGRpcmVjdG9yeS1zZXBhcmF0b3IuCisgIGJvb2wgTmVl
ZFRyYWlsaW5nU2VwID0gTWF5YmVOZWVkVHJhaWxpbmdTZXAgJiYgTGFzdFBhcnRLaW5kKCkgPT0g
UEtfRmlsZW5hbWU7CisKKyAgcGF0aCBSZXN1bHQ7CisgIFJlc3VsdC5fX3BuXy5yZXNlcnZlKFBh
cnRzLnNpemUoKSArIE5ld1BhdGhTaXplICsgTmVlZFRyYWlsaW5nU2VwKTsKKyAgZm9yIChhdXRv
JiBQSyA6IFBhcnRzKQorICAgIFJlc3VsdCAvPSBQSy5maXJzdDsKKworICBpZiAoTmVlZFRyYWls
aW5nU2VwKQorICAgIFJlc3VsdCAvPSAiIjsKKworICByZXR1cm4gUmVzdWx0OworfQorCitzdGF0
aWMgaW50IERldGVybWluZUxleGljYWxFbGVtZW50Q291bnQoUGF0aFBhcnNlciBQUCkgeworICBp
bnQgQ291bnQgPSAwOworICBmb3IgKDsgUFA7ICsrUFApIHsKKyAgICBhdXRvIEVsZW0gPSAqUFA7
CisgICAgaWYgKEVsZW0gPT0gIi4uIikKKyAgICAgIC0tQ291bnQ7CisgICAgZWxzZSBpZiAoRWxl
bSAhPSAiLiIpCisgICAgICArK0NvdW50OworICB9CisgIHJldHVybiBDb3VudDsKK30KKworcGF0
aCBwYXRoOjpsZXhpY2FsbHlfcmVsYXRpdmUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QgeworICB7
IC8vIHBlcmZvcm0gcm9vdC1uYW1lL3Jvb3QtZGlyZWN0b3J5IG1pc21hdGNoIGNoZWNrcworICAg
IGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgYXV0byBQUEJh
c2UgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihiYXNlLl9fcG5fKTsKKyAgICBhdXRvIENoZWNr
SXRlck1pc21hdGNoQXRCYXNlID0gWyZdKCkgeworICAgICAgcmV0dXJuIFBQLlN0YXRlICE9IFBQ
QmFzZS5TdGF0ZSAmJgorICAgICAgICAgICAgIChQUC5pblJvb3RQYXRoKCkgfHwgUFBCYXNlLmlu
Um9vdFBhdGgoKSk7CisgICAgfTsKKyAgICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNf
SW5Sb290TmFtZSAmJgorICAgICAgICBQUEJhc2UuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5S
b290TmFtZSkgeworICAgICAgaWYgKCpQUCAhPSAqUFBCYXNlKQorICAgICAgICByZXR1cm4ge307
CisgICAgfSBlbHNlIGlmIChDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSgpKQorICAgICAgcmV0dXJu
IHt9OworCisgICAgaWYgKFBQLmluUm9vdFBhdGgoKSkKKyAgICAgICsrUFA7CisgICAgaWYgKFBQ
QmFzZS5pblJvb3RQYXRoKCkpCisgICAgICArK1BQQmFzZTsKKyAgICBpZiAoQ2hlY2tJdGVyTWlz
bWF0Y2hBdEJhc2UoKSkKKyAgICAgIHJldHVybiB7fTsKKyAgfQorCisgIC8vIEZpbmQgdGhlIGZp
cnN0IG1pc21hdGNoaW5nIGVsZW1lbnQKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJl
Z2luKF9fcG5fKTsKKyAgYXV0byBQUEJhc2UgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihiYXNl
Ll9fcG5fKTsKKyAgd2hpbGUgKFBQICYmIFBQQmFzZSAmJiBQUC5TdGF0ZSA9PSBQUEJhc2UuU3Rh
dGUgJiYgKlBQID09ICpQUEJhc2UpIHsKKyAgICArK1BQOworICAgICsrUFBCYXNlOworICB9CisK
KyAgLy8gSWYgdGhlcmUgaXMgbm8gbWlzbWF0Y2gsIHJldHVybiAiLiIuCisgIGlmICghUFAgJiYg
IVBQQmFzZSkKKyAgICByZXR1cm4gIi4iOworCisgIC8vIE90aGVyd2lzZSwgZGV0ZXJtaW5lIHRo
ZSBudW1iZXIgb2YgZWxlbWVudHMsICduJywgd2hpY2ggYXJlIG5vdCBkb3Qgb3IKKyAgLy8gZG90
LWRvdCBtaW51cyB0aGUgbnVtYmVyIG9mIGRvdC1kb3QgZWxlbWVudHMuCisgIGludCBFbGVtQ291
bnQgPSBEZXRlcm1pbmVMZXhpY2FsRWxlbWVudENvdW50KFBQQmFzZSk7CisgIGlmIChFbGVtQ291
bnQgPCAwKQorICAgIHJldHVybiB7fTsKKworICAvLyByZXR1cm4gYSBwYXRoIGNvbnN0cnVjdGVk
IHdpdGggJ24nIGRvdC1kb3QgZWxlbWVudHMsIGZvbGxvd2VkIGJ5IHRoZSB0aGUKKyAgLy8gZWxl
bWVudHMgb2YgJyp0aGlzJyBhZnRlciB0aGUgbWlzbWF0Y2guCisgIHBhdGggUmVzdWx0OworICAv
LyBGSVhNRTogUmVzZXJ2ZSBlbm91Z2ggcm9vbSBpbiBSZXN1bHQgdGhhdCBpdCB3b24ndCBoYXZl
IHRvIHJlLWFsbG9jYXRlLgorICB3aGlsZSAoRWxlbUNvdW50LS0pCisgICAgUmVzdWx0IC89ICIu
LiI7CisgIGZvciAoOyBQUDsgKytQUCkKKyAgICBSZXN1bHQgLz0gKlBQOworICByZXR1cm4gUmVz
dWx0OworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmNvbXBhcmlzb25zCitpbnQg
cGF0aDo6X19jb21wYXJlKHN0cmluZ192aWV3X3QgX19zKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQ
YXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGF1dG8gUFAyID0gUGF0aFBhcnNlcjo6
Q3JlYXRlQmVnaW4oX19zKTsKKyAgd2hpbGUgKFBQICYmIFBQMikgeworICAgIGludCByZXMgPSAo
KlBQKS5jb21wYXJlKCpQUDIpOworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgIHJldHVybiByZXM7
CisgICAgKytQUDsKKyAgICArK1BQMjsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUFAyLlN0YXRl
ICYmICFQUCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCFQUCkKKyAgICByZXR1cm4gLTE7CisgIHJl
dHVybiAxOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLm5vbm1lbWJlcnMKK3Np
emVfdCBoYXNoX3ZhbHVlKGNvbnN0IHBhdGgmIF9fcCkgbm9leGNlcHQgeworICBhdXRvIFBQID0g
UGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wLm5hdGl2ZSgpKTsKKyAgc2l6ZV90IGhhc2hfdmFs
dWUgPSAwOworICBoYXNoPHN0cmluZ192aWV3X3Q+IGhhc2hlcjsKKyAgd2hpbGUgKFBQKSB7Cisg
ICAgaGFzaF92YWx1ZSA9IF9faGFzaF9jb21iaW5lKGhhc2hfdmFsdWUsIGhhc2hlcigqUFApKTsK
KyAgICArK1BQOworICB9CisgIHJldHVybiBoYXNoX3ZhbHVlOworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLyBwYXRoLml0cgorcGF0aDo6aXRlcmF0b3IgcGF0aDo6YmVnaW4oKSBjb25zdCB7
CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGl0ZXJhdG9y
IGl0OworICBpdC5fX3BhdGhfcHRyXyA9IHRoaXM7CisgIGl0Ll9fc3RhdGVfID0gc3RhdGljX2Nh
c3Q8cGF0aDo6aXRlcmF0b3I6Ol9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBpdC5fX2VudHJ5
XyA9IFBQLlJhd0VudHJ5OworICBpdC5fX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFAp
OworICByZXR1cm4gaXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yIHBhdGg6OmVuZCgpIGNvbnN0IHsK
KyAgaXRlcmF0b3IgaXR7fTsKKyAgaXQuX19zdGF0ZV8gPSBwYXRoOjppdGVyYXRvcjo6X0F0RW5k
OworICBpdC5fX3BhdGhfcHRyXyA9IHRoaXM7CisgIHJldHVybiBpdDsKK30KKworcGF0aDo6aXRl
cmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpfX2luY3JlbWVudCgpIHsKKyAgUGF0aFBhcnNlciBQUChf
X3BhdGhfcHRyXy0+bmF0aXZlKCksIF9fZW50cnlfLCBfX3N0YXRlXyk7CisgICsrUFA7CisgIF9f
c3RhdGVfID0gc3RhdGljX2Nhc3Q8X1BhcnNlclN0YXRlPihQUC5TdGF0ZSk7CisgIF9fZW50cnlf
ID0gUFAuUmF3RW50cnk7CisgIF9fc3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7Cisg
IHJldHVybiAqdGhpczsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpfX2Rl
Y3JlbWVudCgpIHsKKyAgUGF0aFBhcnNlciBQUChfX3BhdGhfcHRyXy0+bmF0aXZlKCksIF9fZW50
cnlfLCBfX3N0YXRlXyk7CisgIC0tUFA7CisgIF9fc3RhdGVfID0gc3RhdGljX2Nhc3Q8X1BhcnNl
clN0YXRlPihQUC5TdGF0ZSk7CisgIF9fZW50cnlfID0gUFAuUmF3RW50cnk7CisgIF9fc3Rhc2hl
ZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVybiAqdGhpczsKK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkg
ZW50cnkgZGVmaW5pdGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmbmRlZiBfTElC
Q1BQX1dJTjMyQVBJCitlcnJvcl9jb2RlIGRpcmVjdG9yeV9lbnRyeTo6X19kb19yZWZyZXNoKCkg
bm9leGNlcHQgeworICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgZXJyb3JfY29kZSBmYWlsdXJlX2Vj
OworCisgIFN0YXRUIGZ1bGxfc3Q7CisgIGZpbGVfc3RhdHVzIHN0ID0gZGV0YWlsOjpwb3NpeF9s
c3RhdChfX3BfLCBmdWxsX3N0LCAmZmFpbHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0
KSkgeworICAgIF9fZGF0YV8uX19yZXNldCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOworICB9
CisKKyAgaWYgKCFfVlNURF9GUzo6ZXhpc3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxpbmso
c3QpKSB7CisgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVm
cmVzaE5vblN5bWxpbms7CisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9f
ZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7IC8v
IHdlIGhhdmUgYSBzeW1saW5rCisgICAgX19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNz
aW9ucygpOworICAgIC8vIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBlbnRp
dHkuCisgICAgLy8gSWdub3JlIGVycm9ycyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdhbnQg
ZXJyb3JzIHJlZ2FyZGluZyBzeW1saW5rCisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBvcnRl
ZCB0byB0aGUgdXNlci4KKyAgICBlcnJvcl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBkZXRh
aWw6OnBvc2l4X3N0YXQoX19wXywgZnVsbF9zdCwgJmlnbm9yZWRfZWMpOworCisgICAgX19kYXRh
Xy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0
LnBlcm1pc3Npb25zKCk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbGlu
aywgdGhlbiBvbmx5IHBhcnRpYWxseSBwb3B1bGF0ZSB0aGUKKyAgICAvLyBjYWNoZS4KKyAgICBp
ZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRp
cmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDsKKyAgICAgIHJldHVybiBl
cnJvcl9jb2Rle307CisgICAgfQorICAgIC8vIE90aGVyd2lzZSwgd2UgcmVzb2x2ZWQgdGhlIGxp
bmssIHBvdGVudGlhbGx5IGFzIG5vdCBleGlzdGluZy4KKyAgICAvLyBUaGF0J3MgT0suCisgICAg
X19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaFN5bWxpbms7
CisgIH0KKworICBpZiAoX1ZTVERfRlM6OmlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAgX19kYXRh
Xy5fX3NpemVfID0gc3RhdGljX2Nhc3Q8dWludG1heF90PihmdWxsX3N0LnN0X3NpemUpOworCisg
IGlmIChfVlNURF9GUzo6ZXhpc3RzKHN0KSkgeworICAgIF9fZGF0YV8uX19ubGlua18gPSBzdGF0
aWNfY2FzdDx1aW50bWF4X3Q+KGZ1bGxfc3Quc3RfbmxpbmspOworCisgICAgLy8gQXR0ZW1wdCB0
byBleHRyYWN0IHRoZSBtdGltZSwgYW5kIGZhaWwgaWYgaXQncyBub3QgcmVwcmVzZW50YWJsZSB1
c2luZworICAgIC8vIGZpbGVfdGltZV90eXBlLiBGb3Igbm93IHdlIGlnbm9yZSB0aGUgZXJyb3Is
IGFzIHdlJ2xsIHJlcG9ydCBpdCB3aGVuCisgICAgLy8gdGhlIHZhbHVlIGlzIGFjdHVhbGx5IHVz
ZWQuCisgICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIF9fZGF0YV8uX193cml0ZV90aW1l
XyA9CisgICAgICAgIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUoX19wXywgZnVsbF9zdCwgJmln
bm9yZWRfZWMpOworICB9CisKKyAgcmV0dXJuIGZhaWx1cmVfZWM7Cit9CisjZWxzZQorZXJyb3Jf
Y29kZSBkaXJlY3RvcnlfZW50cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsKKyAgX19kYXRh
Xy5fX3Jlc2V0KCk7CisgIGVycm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBmaWxlX3N0YXR1cyBz
dCA9IF9WU1REX0ZTOjpzeW1saW5rX3N0YXR1cyhfX3BfLCBmYWlsdXJlX2VjKTsKKyAgaWYgKCFz
dGF0dXNfa25vd24oc3QpKSB7CisgICAgX19kYXRhXy5fX3Jlc2V0KCk7CisgICAgcmV0dXJuIGZh
aWx1cmVfZWM7CisgIH0KKworICBpZiAoIV9WU1REX0ZTOjpleGlzdHMoc3QpIHx8ICFfVlNURF9G
Uzo6aXNfc3ltbGluayhzdCkpIHsKKyAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3Rv
cnlfZW50cnk6Ol9SZWZyZXNoTm9uU3ltbGluazsKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50
eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsK
KyAgfSBlbHNlIHsgLy8gd2UgaGF2ZSBhIHN5bWxpbmsKKyAgICBfX2RhdGFfLl9fc3ltX3Blcm1z
XyA9IHN0LnBlcm1pc3Npb25zKCk7CisgICAgLy8gR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgbGlua2VkIGVudGl0eS4KKyAgICAvLyBJZ25vcmUgZXJyb3JzIGZyb20gc3RhdCwgc2luY2Ug
d2UgZG9uJ3Qgd2FudCBlcnJvcnMgcmVnYXJkaW5nIHN5bWxpbmsKKyAgICAvLyByZXNvbHV0aW9u
IHRvIGJlIHJlcG9ydGVkIHRvIHRoZSB1c2VyLgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsK
KyAgICBzdCA9IF9WU1REX0ZTOjpzdGF0dXMoX19wXywgaWdub3JlZF9lYyk7CisKKyAgICBfX2Rh
dGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0g
c3QucGVybWlzc2lvbnMoKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBs
aW5rLCB0aGVuIG9ubHkgcGFydGlhbGx5IHBvcHVsYXRlIHRoZQorICAgIC8vIGNhY2hlLgorICAg
IGlmICghc3RhdHVzX2tub3duKHN0KSkgeworICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0g
ZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOworICAgICAgcmV0dXJu
IGVycm9yX2NvZGV7fTsKKyAgICB9CisgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0
b3J5X2VudHJ5OjpfUmVmcmVzaFN5bWxpbms7CisgIH0KKworICAvLyBGSVhNRTogVGhpcyBpcyBj
dXJyZW50bHkgYnJva2VuLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9ubHkgYSBwbGFjZWhvbGRl
ci4KKyAgLy8gV2UgbmVlZCB0byBjYWNoZSBsYXN0X3dyaXRlX3RpbWUsIGZpbGVfc2l6ZSwgYW5k
IGhhcmRfbGlua19jb3VudCBoZXJlIGJlZm9yZQorICAvLyB0aGUgaW1wbGVtZW50YXRpb24gYWN0
dWFsbHkgd29ya3MuCisKKyAgcmV0dXJuIGZhaWx1cmVfZWM7Cit9CisjZW5kaWYKKworX0xJQkNQ
UF9FTkRfTkFNRVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vb3BlcmF0
aW9ucy5jcHAgLS0gKi8KKworI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPCAxMDE1MDAKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9TdGRGaWxlc3lzdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkRmlsZXN5
c3RlbS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3MDMgQEAKKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIGZpbGVzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8v
CisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVj
dHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5k
IHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4KKy8vIFNvdXJjZSBMaWNlbnNlcy4gU2Vl
IExJQ0VOU0UtbGliYysrLnR4dCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09
PT0vLworCisjaWYgX19oYXNfaW5jbHVkZSg8ZmlsZXN5c3RlbT4pCisjaW5jbHVkZSA8ZmlsZXN5
c3RlbT4KKyNlbHNlCisKKy8qIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBmcm9tIHIz
NDM4Mzggb2YgdGhlIGxpYmMrKyBwcm9qZWN0LiBUaGlzCisgICBpcyBvbmx5IG5lZWRlZCB1bnRp
bCBtYWNPUyAxMC4xNCBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGF0IHdoaWNoIHBvaW50IGFsbAor
ICAgcG9ydHMgd2lsbCBzdXBwb3J0IDxmaWxlc3lzdGVtPiBkaXJlY3RseS4KKyovCisKKworI2lm
bmRlZiBfTElCQ1BQX0ZJTEVTWVNURU0KKyNkZWZpbmUgX0xJQkNQUF9GSUxFU1lTVEVNCisvKgor
ICAgIGZpbGVzeXN0ZW0gc3lub3BzaXMKKworICAgIG5hbWVzcGFjZSBzdGQgeyBuYW1lc3BhY2Ug
ZmlsZXN5c3RlbSB7CisKKyAgICBjbGFzcyBwYXRoOworCisgICAgdm9pZCBzd2FwKHBhdGgmIGxo
cywgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRo
JiBwKSBub2V4Y2VwdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNv
bnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgm
IGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPCAoY29u
c3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9v
bCBvcGVyYXRvcj4gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsK
KyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5v
ZXhjZXB0OworCisgICAgcGF0aCBvcGVyYXRvci8gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0
aCYgcmhzKTsKKworICAgIC8vIGZzLnBhdGguaW8gb3BlcmF0b3JzIGFyZSBmcmllbmRzIG9mIHBh
dGguCisgICAgdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHM+CisgICAgZnJpZW5k
IGJhc2ljX29zdHJlYW08Y2hhclQsIHRyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXJULCB0cmFpdHM+JiBvcywgY29uc3QgcGF0aCYgcCk7CisKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cz4KKyAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxjaGFy
VCwgdHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4m
IGlzLCBwYXRoJiBwKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTb3VyY2U+CisgICAgICBwYXRo
IHU4cGF0aChjb25zdCBTb3VyY2UmIHNvdXJjZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIElucHV0
SXRlcmF0b3I+CisgICAgICBwYXRoIHU4cGF0aChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0
ZXJhdG9yIGxhc3QpOworCisgICAgY2xhc3MgZmlsZXN5c3RlbV9lcnJvcjsKKyAgICBjbGFzcyBk
aXJlY3RvcnlfZW50cnk7CisKKyAgICBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAv
LyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisg
ICAgZGlyZWN0b3J5X2l0ZXJhdG9yIGJlZ2luKGRpcmVjdG9yeV9pdGVyYXRvciBpdGVyKSBub2V4
Y2VwdDsKKyAgICBkaXJlY3RvcnlfaXRlcmF0b3IgZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRv
ciYpIG5vZXhjZXB0OworCisgICAgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsK
KworICAgIC8vIGVuYWJsZSByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2Vk
IGZvciBzdGF0ZW1lbnRzCisgICAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBiZWdpbihy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IgZW5kKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0
b3ImKSBub2V4Y2VwdDsKKworICAgIGNsYXNzIGZpbGVfc3RhdHVzOworCisgICAgc3RydWN0IHNw
YWNlX2luZm8KKyAgICB7CisgICAgICB1aW50bWF4X3QgY2FwYWNpdHk7CisgICAgICB1aW50bWF4
X3QgZnJlZTsKKyAgICAgIHVpbnRtYXhfdCBhdmFpbGFibGU7CisgICAgfTsKKworICAgIGVudW0g
Y2xhc3MgZmlsZV90eXBlOworICAgIGVudW0gY2xhc3MgcGVybXM7CisgICAgZW51bSBjbGFzcyBw
ZXJtX29wdGlvbnM7CisgICAgZW51bSBjbGFzcyBjb3B5X29wdGlvbnM7CisgICAgZW51bSBjbGFz
cyBkaXJlY3Rvcnlfb3B0aW9uczsKKworICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHRy
aXZpYWwtY2xvY2s+ICBmaWxlX3RpbWVfdHlwZTsKKworICAgIC8vIG9wZXJhdGlvbmFsIGZ1bmN0
aW9ucworCisgICAgcGF0aCBhYnNvbHV0ZShjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIGFic29s
dXRlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUgJmVjKTsKKworICAgIHBhdGggY2Fub25pY2Fs
KGNvbnN0IHBhdGgmIHApOworICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKTsKKworICAgIHZvaWQgY29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRo
JiB0byk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBl
cnJvcl9jb2RlJiBlYyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBh
dGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9ucyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgm
IGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRo
JiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYg
ZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUmIGVjKTsKKyAgICBib29sIGNvcHlfZmls
ZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbik7
CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNv
cHlfb3B0aW9ucyBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBlYyk7CisKKyAgICB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1s
aW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluayk7CisgICAgdm9pZCBjb3B5X3N5bWxpbmsoY29u
c3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAg
ICBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0
ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29s
IGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0
b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wg
Y3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzKTsK
KyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0
cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7CisKKyAgICB2b2lkIGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBw
YXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX2RpcmVj
dG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBu
b2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29u
c3QgcGF0aCYgbmV3X2hhcmRfbGluayk7CisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0
IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3Jl
YXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAg
ICB2b2lkIGNyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3lt
bGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgcGF0aCBjdXJyZW50X3BhdGgoKTsKKyAgICBwYXRoIGN1cnJlbnRfcGF0
aChlcnJvcl9jb2RlJiBlYyk7CisgICAgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCk7
CisgICAgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5v
ZXhjZXB0OworCisgICAgYm9vbCBleGlzdHMoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAg
Ym9vbCBleGlzdHMoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0
IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBwMik7CisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBh
dGgmIHAxLCBjb25zdCBwYXRoJiBwMiwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAg
dWludG1heF90ICAgIGZpbGVfc2l6ZShjb25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAg
ZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAg
IHVpbnRtYXhfdCAgICBoYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1h
eF90ICAgIGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICBib29sIGlzX2Jsb2NrX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7
CisgICAgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfYmxv
Y2tfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBi
b29sIGlzX2NoYXJhY3Rlcl9maWxlKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wg
aXNfY2hhcmFjdGVyX2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJf
ZmlsZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29s
IGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2RpcmVj
dG9yeShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2VtcHR5KGNvbnN0IHBh
dGgmIHApOworICAgIGJvb2wgaXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgYm9vbCBpc19maWZvKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0Owor
ICAgIGJvb2wgaXNfZmlmbyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2ZpZm8oY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19vdGhlcihm
aWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIHAp
OworICAgIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworCisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7
CisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19y
ZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisg
ICAgYm9vbCBpc19zb2NrZXQoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19z
b2NrZXQoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19zeW1saW5rKGZpbGVfc3Rh
dHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAg
ICBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgZmlsZV90aW1lX3R5cGUgIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwKTsK
KyAgICBmaWxlX3RpbWVfdHlwZSAgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKSBub2V4Y2VwdDsKKyAgICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRo
JiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSk7CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUo
Y29uc3QgcGF0aCYgcCwgZmlsZV90aW1lX3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHBl
cm1pc3Npb25zKGNvbnN0IHBhdGgmIHAsIHBlcm1zIHBybXMsCisgICAgICAgICAgICAgICAgICAg
ICBwZXJtX29wdGlvbnMgb3B0cz1wZXJtX29wdGlvbnM6OnJlcGxhY2UpOworICAgIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVy
bV9vcHRpb25zIG9wdHMsCisgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisK
KyAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAg
cGF0aCBwcm94aW1hdGUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSA9IGN1cnJlbnRf
cGF0aCgpKTsKKyAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBi
YXNlLCBlcnJvcl9jb2RlICZlYyk7CisKKyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRo
JiBwKTsKKyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBl
Yyk7CisKKyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsK
KyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2U9Y3VycmVu
dF9wYXRoKCkpOworICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYg
YmFzZSwgZXJyb3JfY29kZSYgZWMpOworCisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCk7
CisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgdWludG1heF90ICAgIHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCk7CisgICAgdWlu
dG1heF90ICAgIHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisg
ICAgdm9pZCByZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZv
aWQgcmVuYW1lKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRt
YXhfdCBzaXplKTsKKyAgICB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhf
dCBzaXplLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBzcGFjZV9pbmZvICAgc3Bh
Y2UoY29uc3QgcGF0aCYgcCk7CisgICAgc3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGZpbGVfc3RhdHVzICBzdGF0dXMoY29u
c3QgcGF0aCYgcCk7CisgICAgZmlsZV9zdGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIHN0YXR1c19rbm93bihmaWxlX3N0YXR1
cyBzKSBub2V4Y2VwdDsKKworICAgIGZpbGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBw
YXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRo
KCk7CisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKworICAg
IHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBwKTsKKyAgICBwYXRoIHdlYWtseV9j
YW5vbmljYWwocGF0aCBjb25zdCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisKK30gfSAgLy8gbmFt
ZXNwYWNlcyBzdGQ6OmZpbGVzeXN0ZW0KKworKi8KKworI2luY2x1ZGUgPF9fY29uZmlnPgorI2lu
Y2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjaHJvbm8+Cisj
aW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxvY2FsZT4K
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGlv
bWFuaXA+IC8vIGZvciBxdW90ZWQKKyNpbmNsdWRlIDxzdHJpbmdfdmlldz4KKy8qICNpbmNsdWRl
IDx2ZXJzaW9uPiAqLworCisjaW5jbHVkZSA8X19kZWJ1Zz4KKworI2lmIF9MSUJDUFBfU1REX1ZF
UiA+PSAxNworI2RlZmluZSBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAg
X0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfU1REIGlubGluZSBuYW1lc3BhY2UgX19mcyB7IG5hbWVz
cGFjZSBmaWxlc3lzdGVtIHsKKyNlbHNlCisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNF
X0ZJTEVTWVNURU0gXAorICBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQgbmFtZXNwYWNlIF9f
ZnMgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7CisjZW5kaWYKKworI2RlZmluZSBfTElCQ1BQX0VO
RF9OQU1FU1BBQ0VfRklMRVNZU1RFTSBcCisgIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9TVEQgfSB9
CisKKyNkZWZpbmUgX1ZTVERfRlMgX1ZTVEQ6Ol9fZnM6OmZpbGVzeXN0ZW0KKworI2lmICFkZWZp
bmVkKF9MSUJDUFBfSEFTX05PX1BSQUdNQV9TWVNURU1fSEVBREVSKQorI3ByYWdtYSBHQ0Mgc3lz
dGVtX2hlYWRlcgorI2VuZGlmCisKK19MSUJDUFBfUFVTSF9NQUNST1MKKyNpbmNsdWRlIDxfX3Vu
ZGVmX21hY3Jvcz4KKworI2lmbmRlZiBfTElCQ1BQX0NYWDAzX0xBTkcKKworX0xJQkNQUF9CRUdJ
Tl9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCitzdHJ1Y3QgX0ZpbGVzeXN0ZW1DbG9jayB7CisjaWYg
IWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fSU5UMTI4KQorICB0eXBlZGVmIF9faW50MTI4X3QgcmVw
OworICB0eXBlZGVmIG5hbm8gcGVyaW9kOworI2Vsc2UKKyAgdHlwZWRlZiBsb25nIGxvbmcgcmVw
OworICB0eXBlZGVmIG5hbm8gcGVyaW9kOworI2VuZGlmCisKKyAgdHlwZWRlZiBjaHJvbm86OmR1
cmF0aW9uPHJlcCwgcGVyaW9kPiBkdXJhdGlvbjsKKyAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9p
bnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gdGltZV9wb2ludDsKKworICBzdGF0aWMgX0xJQkNQUF9DT05T
VEVYUFJfQUZURVJfQ1hYMTEgY29uc3QgYm9vbCBpc19zdGVhZHkgPSBmYWxzZTsKKworICBfTElC
Q1BQX0ZVTkNfVklTIHN0YXRpYyB0aW1lX3BvaW50IG5vdygpIG5vZXhjZXB0OworCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgc3RhdGljIHRpbWVfdCB0b190aW1lX3QoY29uc3QgdGlt
ZV9wb2ludCYgX190KSBub2V4Y2VwdCB7CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJl
cD4gX19zZWNzOworICAgIHJldHVybiB0aW1lX3QoCisgICAgICAgIGNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxfX3NlY3M+KF9fdC50aW1lX3NpbmNlX2Vwb2NoKCkpLmNvdW50KCkpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBzdGF0aWMgdGltZV9wb2ludCBmcm9tX3RpbWVf
dCh0aW1lX3QgX190KSBub2V4Y2VwdCB7CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJl
cD4gX19zZWNzOworICAgIHJldHVybiB0aW1lX3BvaW50KF9fc2VjcyhfX3QpKTsKKyAgfQorfTsK
KwordHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gZmlsZV90aW1l
X3R5cGU7CisKK3N0cnVjdCBfTElCQ1BQX1RZUEVfVklTIHNwYWNlX2luZm8geworICB1aW50bWF4
X3QgY2FwYWNpdHk7CisgIHVpbnRtYXhfdCBmcmVlOworICB1aW50bWF4X3QgYXZhaWxhYmxlOwor
fTsKKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGZpbGVfdHlwZSA6IHNpZ25lZCBjaGFy
IHsKKyAgbm9uZSA9IDAsCisgIG5vdF9mb3VuZCA9IC0xLAorICByZWd1bGFyID0gMSwKKyAgZGly
ZWN0b3J5ID0gMiwKKyAgc3ltbGluayA9IDMsCisgIGJsb2NrID0gNCwKKyAgY2hhcmFjdGVyID0g
NSwKKyAgZmlmbyA9IDYsCisgIHNvY2tldCA9IDcsCisgIHVua25vd24gPSA4Cit9OworCitlbnVt
IGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgcGVybXMgOiB1bnNpZ25lZCB7CisgIG5vbmUgPSAwLAor
CisgIG93bmVyX3JlYWQgPSAwNDAwLAorICBvd25lcl93cml0ZSA9IDAyMDAsCisgIG93bmVyX2V4
ZWMgPSAwMTAwLAorICBvd25lcl9hbGwgPSAwNzAwLAorCisgIGdyb3VwX3JlYWQgPSAwNDAsCisg
IGdyb3VwX3dyaXRlID0gMDIwLAorICBncm91cF9leGVjID0gMDEwLAorICBncm91cF9hbGwgPSAw
NzAsCisKKyAgb3RoZXJzX3JlYWQgPSAwNCwKKyAgb3RoZXJzX3dyaXRlID0gMDIsCisgIG90aGVy
c19leGVjID0gMDEsCisgIG90aGVyc19hbGwgPSAwNywKKworICBhbGwgPSAwNzc3LAorCisgIHNl
dF91aWQgPSAwNDAwMCwKKyAgc2V0X2dpZCA9IDAyMDAwLAorICBzdGlja3lfYml0ID0gMDEwMDAs
CisgIG1hc2sgPSAwNzc3NywKKyAgdW5rbm93biA9IDB4RkZGRiwKK307CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3ImKHBlcm1zIF9M
SFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oX0xIUykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3J8KHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVy
bXMgb3BlcmF0b3JeKHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3J+KHBlcm1z
IF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPih+c3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1z
JiBvcGVyYXRvciY9KHBlcm1zJiBfTEhTLCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xI
UyAmIF9SSFM7IH0KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBv
cGVyYXRvcnw9KHBlcm1zJiBfTEhTLCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyB8
IF9SSFM7IH0KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVy
YXRvcl49KHBlcm1zJiBfTEhTLCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyBeIF9S
SFM7IH0KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIHBlcm1fb3B0aW9ucyA6IHVuc2ln
bmVkIGNoYXIgeworICByZXBsYWNlID0gMSwKKyAgYWRkID0gMiwKKyAgcmVtb3ZlID0gNCwKKyAg
bm9mb2xsb3cgPSA4Cit9OworCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29u
c3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvciYocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0
aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19j
YXN0PHVuc2lnbmVkPihfTEhTKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yfChwZXJtX29wdGlv
bnMgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1f
b3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3Bl
cmF0b3JeKHBlcm1fb3B0aW9ucyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4g
c3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgXgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
X1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHBy
IHBlcm1fb3B0aW9ucyBvcGVyYXRvcn4ocGVybV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0
YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJh
dG9yJj0ocGVybV9vcHRpb25zJiBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4g
X0xIUyA9IF9MSFMgJiBfUkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgcGVybV9vcHRpb25zJiBvcGVyYXRvcnw9KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRp
b25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1fb3B0aW9ucyYgb3BlcmF0b3JePShwZXJtX29w
dGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBe
IF9SSFM7Cit9CisKK2VudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBjb3B5X29wdGlvbnMgOiB1
bnNpZ25lZCBzaG9ydCB7CisgIG5vbmUgPSAwLAorICBza2lwX2V4aXN0aW5nID0gMSwKKyAgb3Zl
cndyaXRlX2V4aXN0aW5nID0gMiwKKyAgdXBkYXRlX2V4aXN0aW5nID0gNCwKKyAgcmVjdXJzaXZl
ID0gOCwKKyAgY29weV9zeW1saW5rcyA9IDE2LAorICBza2lwX3N5bWxpbmtzID0gMzIsCisgIGRp
cmVjdG9yaWVzX29ubHkgPSA2NCwKKyAgY3JlYXRlX3N5bWxpbmtzID0gMTI4LAorICBjcmVhdGVf
aGFyZF9saW5rcyA9IDI1NiwKKyAgX19pbl9yZWN1cnNpdmVfY29weSA9IDUxMiwKK307CisKK19M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9w
ZXJhdG9yJihjb3B5X29wdGlvbnMgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvcHlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9M
SFMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5s
aW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3J8KGNvcHlfb3B0aW9ucyBfTEhTLCBj
b3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBv
cGVyYXRvcl4oY29weV9vcHRpb25zIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVy
biBzdGF0aWNfY2FzdDxjb3B5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf
TEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yfihjb3B5X29wdGlvbnMgX0xIUykg
eworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KF9MSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5l
IGNvcHlfb3B0aW9ucyYgb3BlcmF0b3ImPShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb3B5X29wdGlvbnMmIG9wZXJhdG9yfD0oY29weV9vcHRp
b25zJiBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBf
UkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25z
JiBvcGVyYXRvcl49KGNvcHlfb3B0aW9ucyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAg
cmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1f
VklTIGRpcmVjdG9yeV9vcHRpb25zIDogdW5zaWduZWQgY2hhciB7CisgIG5vbmUgPSAwLAorICBm
b2xsb3dfZGlyZWN0b3J5X3N5bWxpbmsgPSAxLAorICBza2lwX3Blcm1pc3Npb25fZGVuaWVkID0g
MgorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJl
Y3Rvcnlfb3B0aW9ucyBvcGVyYXRvciYoZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9S
SFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihfTEhTKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9w
ZXJhdG9yfChkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKK2lubGluZSBjb25zdGV4cHIgZGlyZWN0b3J5X29wdGlvbnMgb3BlcmF0b3JeKGRpcmVjdG9y
eV9vcHRpb25zIF9MSFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJl
Y3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgXgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0
ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvcn4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUykg
eworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihfTEhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lu
bGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3ImPShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xI
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3J8PShkaXJl
Y3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7
Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9u
cyYgb3BlcmF0b3JePShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBf
TEhTID0gX0xIUyBeIF9SSFM7Cit9CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgZmlsZV9zdGF0
dXMgeworcHVibGljOgorICAvLyBjb25zdHJ1Y3RvcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlX3N0YXR1cygpIG5vZXhjZXB0IDogZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpu
b25lKSB7fQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IGZpbGVfc3Rh
dHVzKGZpbGVfdHlwZSBfX2Z0LCBwZXJtcyBfX3BybXMgPSBwZXJtczo6dW5rbm93bikgbm9leGNl
cHQKKyAgICAgIDogX19mdF8oX19mdCksCisgICAgICAgIF9fcHJtc18oX19wcm1zKSB7fQorCisg
IGZpbGVfc3RhdHVzKGNvbnN0IGZpbGVfc3RhdHVzJikgbm9leGNlcHQgPSBkZWZhdWx0OworICBm
aWxlX3N0YXR1cyhmaWxlX3N0YXR1cyYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICB+ZmlsZV9zdGF0dXMoKSB7fQorCisgIGZpbGVfc3RhdHVz
JiBvcGVyYXRvcj0oY29uc3QgZmlsZV9zdGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZp
bGVfc3RhdHVzJiBvcGVyYXRvcj0oZmlsZV9zdGF0dXMmJikgbm9leGNlcHQgPSBkZWZhdWx0Owor
CisgIC8vIG9ic2VydmVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlw
ZSB0eXBlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19mdF87IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHBlcm1zIHBlcm1pc3Npb25zKCkgY29uc3Qgbm9leGNlcHQgeyBy
ZXR1cm4gX19wcm1zXzsgfQorCisgIC8vIG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHZvaWQgdHlwZShmaWxlX3R5cGUgX19mdCkgbm9leGNlcHQgeyBfX2Z0XyA9IF9f
ZnQ7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcGVybWlzc2lvbnMo
cGVybXMgX19wKSBub2V4Y2VwdCB7IF9fcHJtc18gPSBfX3A7IH0KKworcHJpdmF0ZToKKyAgZmls
ZV90eXBlIF9fZnRfOworICBwZXJtcyBfX3BybXNfOworfTsKKworY2xhc3MgX0xJQkNQUF9UWVBF
X1ZJUyBkaXJlY3RvcnlfZW50cnk7CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19j
YW5fY29udmVydF9jaGFyIHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKK307
Cit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjb25zdCBf
VHA+IDogcHVibGljIF9fY2FuX2NvbnZlcnRfY2hhcjxfVHA+IHt9OwordGVtcGxhdGUgPD4KK3N0
cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8Y2hhcj4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0gY2hhcjsKK307Cit0ZW1wbGF0ZSA8Pgor
c3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjx3Y2hhcl90PiB7CisgIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSB3Y2hhcl90OworfTsKK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNoYXIxNl90PiB7CisgIHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMTZfdDsK
K307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyMzJfdD4gewor
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0g
Y2hhcjMyX3Q7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KK3R5cGVuYW1lIGVuYWJs
ZV9pZjxfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46OnZhbHVlLCBib29sPjo6dHlwZQorX19p
c19zZXBhcmF0b3IoX0VDaGFyVCBfX2UpIHsKKyAgcmV0dXJuIF9fZSA9PSBfRUNoYXJUKCcvJyk7
Cit9CisKK3N0cnVjdCBfTnVsbFNlbnRpbmFsIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgor
dXNpbmcgX1ZvaWQgPSB2b2lkOworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyA9IHZvaWQ+
CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9zdHJpbmcgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKKwor
dGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KK3N0
cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZzwKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VD
aGFyVD46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9F
Q2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OworICB1c2luZyBfQmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKyAg
c3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oX1N0ciBjb25zdCYgX19zKSB7IHJl
dHVybiBfX3MuZGF0YSgpOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChf
U3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmRhdGEoKSArIF9fcy5sZW5ndGgoKTsK
KyAgfQorICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX1N0ciBjb25zdCYgX19zKSB7
CisgICAgcmV0dXJuIF9fcy5lbXB0eSgpID8gX0VDaGFyVHt9IDogX19zWzBdOworICB9Cit9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3MgX1RyYWl0cz4KK3N0cnVjdCBfX2lzX3Bh
dGhhYmxlX3N0cmluZzwKKyAgICBiYXNpY19zdHJpbmdfdmlldzxfRUNoYXJULCBfVHJhaXRzPiwK
KyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90
eXBlPiA+CisgICAgOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNp
bmcgX1N0ciA9IGJhc2ljX3N0cmluZ192aWV3PF9FQ2hhclQsIF9UcmFpdHM+OworICB1c2luZyBf
QmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29u
c3QqIF9fcmFuZ2VfYmVnaW4oX1N0ciBjb25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9
CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsK
KyAgICByZXR1cm4gX19zLmRhdGEoKSArIF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VD
aGFyVCBfX2ZpcnN0X29yX251bGwoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5l
bXB0eSgpID8gX0VDaGFyVHt9IDogX19zWzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
X1NvdXJjZSwgY2xhc3MgX0RTID0gdHlwZW5hbWUgZGVjYXk8X1NvdXJjZT46OnR5cGUsCisgICAg
ICAgICAgY2xhc3MgX1VucXVhbFB0clR5cGUgPQorICAgICAgICAgICAgICB0eXBlbmFtZSByZW1v
dmVfY29uc3Q8dHlwZW5hbWUgcmVtb3ZlX3BvaW50ZXI8X0RTPjo6dHlwZT46OnR5cGUsCisgICAg
ICAgICAgYm9vbCBfSXNDaGFyUHRyID0gaXNfcG9pbnRlcjxfRFM+Ojp2YWx1ZSYmCisgICAgICAg
ICAgICAgIF9fY2FuX2NvbnZlcnRfY2hhcjxfVW5xdWFsUHRyVHlwZT46OnZhbHVlPgorc3RydWN0
IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheSA6IGZhbHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxj
bGFzcyBfU291cmNlLCBjbGFzcyBfRUNoYXJULCBjbGFzcyBfVVB0cj4KK3N0cnVjdCBfX2lzX3Bh
dGhhYmxlX2NoYXJfYXJyYXk8X1NvdXJjZSwgX0VDaGFyVCosIF9VUHRyLCB0cnVlPgorICAgIDog
X19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT4g
eworICB1c2luZyBfQmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hhcjx0eXBlbmFtZSByZW1vdmVfY29u
c3Q8X0VDaGFyVD46OnR5cGU+OworCisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2Jl
Z2luKGNvbnN0IF9FQ2hhclQqIF9fYikgeyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfRUNoYXJU
IGNvbnN0KiBfX3JhbmdlX2VuZChjb25zdCBfRUNoYXJUKiBfX2IpIHsKKyAgICB1c2luZyBfSXRl
ciA9IGNvbnN0IF9FQ2hhclQqOworICAgIGNvbnN0IF9FQ2hhclQgX19zZW50aW5hbCA9IF9FQ2hh
clR7fTsKKyAgICBfSXRlciBfX2UgPSBfX2I7CisgICAgZm9yICg7ICpfX2UgIT0gX19zZW50aW5h
bDsgKytfX2UpCisgICAgICA7CisgICAgcmV0dXJuIF9fZTsKKyAgfQorCisgIHN0YXRpYyBfRUNo
YXJUIF9fZmlyc3Rfb3JfbnVsbChjb25zdCBfRUNoYXJUKiBfX2IpIHsgcmV0dXJuICpfX2I7IH0K
K307CisKK3RlbXBsYXRlIDxjbGFzcyBfSXRlciwgYm9vbCBfSXNJdCA9IF9faXNfaW5wdXRfaXRl
cmF0b3I8X0l0ZXI+Ojp2YWx1ZSwKKyAgICAgICAgICBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19p
c19wYXRoYWJsZV9pdGVyIDogZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVy
Pgorc3RydWN0IF9faXNfcGF0aGFibGVfaXRlcjwKKyAgICBfSXRlciwgdHJ1ZSwKKyAgICBfVm9p
ZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8CisgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU+OjpfX2NoYXJfdHlwZT4gPgorICAgIDogX19jYW5f
Y29udmVydF9jaGFyPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU+
IHsKKyAgdXNpbmcgX0VDaGFyVCA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZh
bHVlX3R5cGU7CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+Owor
CisgIHN0YXRpYyBfSXRlciBfX3JhbmdlX2JlZ2luKF9JdGVyIF9fYikgeyByZXR1cm4gX19iOyB9
CisgIHN0YXRpYyBfTnVsbFNlbnRpbmFsIF9fcmFuZ2VfZW5kKF9JdGVyKSB7IHJldHVybiBfTnVs
bFNlbnRpbmFse307IH0KKworICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX0l0ZXIg
X19iKSB7IHJldHVybiAqX19iOyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9J
c1N0cmluZ1QgPSBfX2lzX3BhdGhhYmxlX3N0cmluZzxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBi
b29sIF9Jc0NoYXJJdGVyVCA9IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheTxfVHA+Ojp2YWx1ZSwK
KyAgICAgICAgICBib29sIF9Jc0l0ZXJUID0gIV9Jc0NoYXJJdGVyVCAmJiBfX2lzX3BhdGhhYmxl
X2l0ZXI8X1RwPjo6dmFsdWU+CitzdHJ1Y3QgX19pc19wYXRoYWJsZSA6IGZhbHNlX3R5cGUgewor
ICBzdGF0aWNfYXNzZXJ0KCFfSXNTdHJpbmdUICYmICFfSXNDaGFySXRlclQgJiYgIV9Jc0l0ZXJU
LCAiTXVzdCBhbGwgYmUgZmFsc2UiKTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1
Y3QgX19pc19wYXRoYWJsZTxfVHAsIHRydWUsIGZhbHNlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxl
X3N0cmluZzxfVHA+IHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0
aGFibGU8X1RwLCBmYWxzZSwgdHJ1ZSwgZmFsc2U+IDogX19pc19wYXRoYWJsZV9jaGFyX2FycmF5
PF9UcD4geworfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxl
PF9UcCwgZmFsc2UsIGZhbHNlLCB0cnVlPiA6IF9faXNfcGF0aGFibGVfaXRlcjxfVHA+IHt9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KK3N0cnVjdCBfUGF0aENWVCB7CisgIHN0YXRpY19h
c3NlcnQoX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAiQ2hhciB0eXBlIG5vdCBjb252ZXJ0aWJsZSIpOworCisgIHR5cGVkZWYgX19uYXJyb3dfdG9f
dXRmODxzaXplb2YoX0VDaGFyVCkgKiBfX0NIQVJfQklUX18+IF9OYXJyb3dlcjsKKworICBzdGF0
aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0VDaGFyVCBjb25zdCogX19i
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRUNoYXJUIGNvbnN0KiBfX2UpIHsKKyAg
ICBfTmFycm93ZXIoKShiYWNrX2luc2VydGVyKF9fZGVzdCksIF9fYiwgX19lKTsKKyAgfQorCisg
IHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3Ry
aW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgc3RhdGljX2Fzc2VydCgh
aXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsK
KyAgICBpZiAoX19iID09IF9fZSkKKyAgICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VD
aGFyVD4gX190bXAoX19iLCBfX2UpOworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19k
ZXN0KSwgX190bXAuZGF0YSgpLAorICAgICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1w
Lmxlbmd0aCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZv
aWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5h
bCkgeworICAgIHN0YXRpY19hc3NlcnQoIWlzX3NhbWU8X0l0ZXIsIF9FQ2hhclQqPjo6dmFsdWUs
ICJDYWxsIGNvbnN0IG92ZXJsb2FkIik7CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0g
X0VDaGFyVHt9OworICAgIGlmICgqX19iID09IF9fc2VudGluYWwpCisgICAgICByZXR1cm47Cisg
ICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQ+IF9fdG1wOworICAgIGZvciAoOyAqX19iICE9IF9fc2Vu
dGluYWw7ICsrX19iKQorICAgICAgX190bXAucHVzaF9iYWNrKCpfX2IpOworICAgIF9OYXJyb3dl
cigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX190bXAuZGF0YSgpLAorICAgICAgICAgICAgICAg
IF9fdG1wLmRhdGEoKSArIF9fdG1wLmxlbmd0aCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFz
cyBfU291cmNlPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9zb3VyY2Uoc3RyaW5nJiBfX2Rlc3Qs
IF9Tb3VyY2UgY29uc3QmIF9fcykgeworICAgIHVzaW5nIF9UcmFpdHMgPSBfX2lzX3BhdGhhYmxl
PF9Tb3VyY2U+OworICAgIF9fYXBwZW5kX3JhbmdlKF9fZGVzdCwgX1RyYWl0czo6X19yYW5nZV9i
ZWdpbihfX3MpLAorICAgICAgICAgICAgICAgICAgIF9UcmFpdHM6Ol9fcmFuZ2VfZW5kKF9fcykp
OworICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9QYXRoQ1ZUPGNoYXI+IHsKKworICB0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19l
eGFjdGx5X2lucHV0X2l0ZXJhdG9yPF9JdGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3Jh
bmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9JdGVyIF9fZSkgeworICAgIGZvciAoOyBf
X2IgIT0gX19lOyArK19fYikKKyAgICAgIF9fZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19p
c19mb3J3YXJkX2l0ZXJhdG9yPF9JdGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3Jhbmdl
KHN0cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9JdGVyIF9fZSkgeworICAgIF9fZGVzdC5fX2Fw
cGVuZF9mb3J3YXJkX3Vuc2FmZShfX2IsIF9fZSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRl
ciBfX2IsIF9OdWxsU2VudGluYWwpIHsKKyAgICBjb25zdCBjaGFyIF9fc2VudGluYWwgPSBjaGFy
e307CisgICAgZm9yICg7ICpfX2IgIT0gX19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX2Rlc3Qu
cHVzaF9iYWNrKCpfX2IpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0
YXRpYyB2b2lkIF9fYXBwZW5kX3NvdXJjZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYg
X19zKSB7CisgICAgdXNpbmcgX1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAg
X19hcHBlbmRfcmFuZ2UoX19kZXN0LCBfVHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAg
ICAgICAgICAgICAgICAgX1RyYWl0czo6X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK2Ns
YXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0aCB7CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlT3JJ
dGVyLCBjbGFzcyBfVHAgPSBwYXRoJj4KKyAgdXNpbmcgX0VuYWJsZUlmUGF0aGFibGUgPQorICAg
ICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0aGFibGU8X1NvdXJjZU9ySXRlcj46OnZhbHVl
LCBfVHA+Ojp0eXBlOworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3VyY2VD
aGFyID0gdHlwZW5hbWUgX19pc19wYXRoYWJsZTxfVHA+OjpfX2NoYXJfdHlwZTsKKworICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgorICB1c2luZyBfU291cmNlQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNo
YXI8X1RwPiA+OworCitwdWJsaWM6CisgIHR5cGVkZWYgY2hhciB2YWx1ZV90eXBlOworICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPiBzdHJpbmdfdHlwZTsKKyAgdHlwZWRlZiBfVlNU
RDo6c3RyaW5nX3ZpZXcgX19zdHJpbmdfdmlldzsKKyAgc3RhdGljIGNvbnN0ZXhwciB2YWx1ZV90
eXBlIHByZWZlcnJlZF9zZXBhcmF0b3IgPSAnLyc7CisKKyAgZW51bSBjbGFzcyBfTElCQ1BQX0VO
VU1fVklTIGZvcm1hdCA6IHVuc2lnbmVkIGNoYXIgeworICAgIGF1dG9fZm9ybWF0LAorICAgIG5h
dGl2ZV9mb3JtYXQsCisgICAgZ2VuZXJpY19mb3JtYXQKKyAgfTsKKworICAvLyBjb25zdHJ1Y3Rv
cnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKCkgbm9l
eGNlcHQge30KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKGNvbnN0IHBhdGgmIF9f
cCkgOiBfX3BuXyhfX3AuX19wbl8pIHt9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0
aChwYXRoJiYgX19wKSBub2V4Y2VwdAorICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3AuX19w
bl8pKSB7fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aChzdHJpbmdfdHlw
ZSYmIF9fcywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgbm9leGNlcHQKKyAgICAgIDog
X19wbl8oX1ZTVEQ6Om1vdmUoX19zKSkge30KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwg
Y2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3Qg
X1NvdXJjZSYgX19zcmMsIGZvcm1hdCA9IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICBfU291
cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgfQorCisg
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5w
dXRJdCBfX2xhc3QsIGZvcm1hdCA9IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOwor
ICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xh
c3QpOworICB9CisKKyAgLy8gVE9ETyBJbXBsZW1lbnQgbG9jYWxlIGNvbnZlcnNpb25zLgorICB0
ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNl
LCB2b2lkPiA+CisgIHBhdGgoY29uc3QgX1NvdXJjZSYgX19zcmMsIGNvbnN0IGxvY2FsZSYgX19s
b2MsIGZvcm1hdCA9IGZvcm1hdDo6YXV0b19mb3JtYXQpOworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXQ+CisgIHBhdGgoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX2xhc3QsIGNvbnN0IGxv
Y2FsZSYgX19sb2MsCisgICAgICAgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB+cGF0aCgpID0gZGVmYXVsdDsKKworICAvLyBh
c3NpZ25tZW50cworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9y
PShjb25zdCBwYXRoJiBfX3ApIHsKKyAgICBfX3BuXyA9IF9fcC5fX3BuXzsKKyAgICByZXR1cm4g
KnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJh
dG9yPShwYXRoJiYgX19wKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3Au
X19wbl8pOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyA9IHZv
aWQ+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCYgb3BlcmF0b3I9KHN0cmluZ190
eXBlJiYgX19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0
aCYgYXNzaWduKHN0cmluZ190eXBlJiYgX19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNU
RDo6bW92ZShfX3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFz
cyBfU291cmNlPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxl
PF9Tb3VyY2U+CisgIG9wZXJhdG9yPShjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHJldHVy
biB0aGlzLT5hc3NpZ24oX19zcmMpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+
CisgIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+IGFzc2lnbihjb25zdCBfU291cmNlJiBfX3Ny
YykgeworICAgIF9fcG5fLmNsZWFyKCk7CisgICAgX1NvdXJjZUNWVDxfU291cmNlPjo6X19hcHBl
bmRfc291cmNlKF9fcG5fLCBfX3NyYyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBhc3NpZ24oX0lucHV0SXQgX19maXJzdCwg
X0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBfX3BuXy5jbGVhcigpOworICAgIF9Q
YXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOwor
ICAgIHJldHVybiAqdGhpczsKKyAgfQorCitwcml2YXRlOgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0VD
aGFyVD4KKyAgc3RhdGljIGJvb2wgX19zb3VyY2VfaXNfYWJzb2x1dGUoX0VDaGFyVCBfX2ZpcnN0
X29yX251bGwpIHsKKyAgICByZXR1cm4gX19pc19zZXBhcmF0b3IoX19maXJzdF9vcl9udWxsKTsK
KyAgfQorCitwdWJsaWM6CisgIC8vIGFwcGVuZHMKKyAgcGF0aCYgb3BlcmF0b3IvPShjb25zdCBw
YXRoJiBfX3ApIHsKKyAgICBpZiAoX19wLmlzX2Fic29sdXRlKCkpIHsKKyAgICAgIF9fcG5fID0g
X19wLl9fcG5fOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBpZiAoaGFzX2ZpbGVu
YW1lKCkpCisgICAgICBfX3BuXyArPSBwcmVmZXJyZWRfc2VwYXJhdG9yOworICAgIF9fcG5fICs9
IF9fcC5uYXRpdmUoKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBGSVhNRTogVXNl
IF9MSUJDUFBfRElBR05PU0VfV0FSTklORyB0byBwcm9kdWNlIGEgZGlhZ25vc3RpYyB3aGVuIF9f
c3JjCisgIC8vIGlzIGtub3duIGF0IGNvbXBpbGUgdGltZSB0byBiZSAiLycgc2luY2UgdGhlIHVz
ZXIgYWxtb3N0IGNlcnRhaW5seSBpbnRlbmRlZAorICAvLyB0byBhcHBlbmQgYSBzZXBhcmF0b3Ig
aW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGUgcGF0aCB3aXRoICIvIgorICB0ZW1wbGF0ZSA8Y2xh
c3MgX1NvdXJjZT4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBfRW5hYmxlSWZQYXRoYWJs
ZTxfU291cmNlPgorICBvcGVyYXRvci89KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0
dXJuIHRoaXMtPmFwcGVuZChfX3NyYyk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJj
ZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gYXBwZW5kKGNvbnN0IF9Tb3VyY2UmIF9f
c3JjKSB7CisgICAgdXNpbmcgX1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAg
dXNpbmcgX0NWVCA9IF9QYXRoQ1ZUPF9Tb3VyY2VDaGFyPF9Tb3VyY2U+ID47CisgICAgaWYgKF9f
c291cmNlX2lzX2Fic29sdXRlKF9UcmFpdHM6Ol9fZmlyc3Rfb3JfbnVsbChfX3NyYykpKQorICAg
ICAgX19wbl8uY2xlYXIoKTsKKyAgICBlbHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9f
cG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX0NWVDo6X19hcHBlbmRfc291cmNlKF9f
cG5fLCBfX3NyYyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0PgorICBwYXRoJiBhcHBlbmQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19s
YXN0KSB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2
YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBzdGF0aWNfYXNzZXJ0KF9fY2FuX2NvbnZlcnRfY2hhcjxf
SXRWYWw+Ojp2YWx1ZSwgIk11c3QgY29udmVydGlibGUiKTsKKyAgICB1c2luZyBfQ1ZUID0gX1Bh
dGhDVlQ8X0l0VmFsPjsKKyAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QgJiYgX19zb3VyY2VfaXNf
YWJzb2x1dGUoKl9fZmlyc3QpKQorICAgICAgX19wbl8uY2xlYXIoKTsKKyAgICBlbHNlIGlmICho
YXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAg
X0NWVDo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgLy8gY29uY2F0ZW5hdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgcGF0aCYgX194KSB7CisgICAgX19wbl8g
Kz0gX194Ll9fcG5fOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCBzdHJpbmdfdHlwZSYgX194KSB7
CisgICAgX19wbl8gKz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPShfX3N0cmluZ192aWV3IF9feCkg
eworICAgIF9fcG5fICs9IF9feDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgdmFsdWVfdHlwZSog
X194KSB7CisgICAgX19wbl8gKz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPSh2YWx1ZV90eXBlIF9f
eCkgeworICAgIF9fcG5fICs9IF9feDsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAgdHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRf
Y2hhcjxfRUNoYXJUPjo6dmFsdWUsIHBhdGgmPjo6dHlwZQorICBvcGVyYXRvcis9KF9FQ2hhclQg
X194KSB7CisgICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQ+IF9fdG1wOworICAgIF9fdG1wICs9IF9f
eDsKKyAgICBfUGF0aENWVDxfRUNoYXJUPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3RtcCk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+Cisg
IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+IG9wZXJhdG9yKz0oY29uc3QgX1NvdXJjZSYgX194
KSB7CisgICAgcmV0dXJuIHRoaXMtPmNvbmNhdChfX3gpOworICB9CisKKyAgdGVtcGxhdGUgPGNs
YXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+IGNvbmNhdChjb25zdCBf
U291cmNlJiBfX3gpIHsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2Uo
X19wbl8sIF9feCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0PgorICBwYXRoJiBjb25jYXQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19s
YXN0KSB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2
YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBfUGF0aENWVDxfSXRWYWw+OjpfX2FwcGVuZF9yYW5nZShf
X3BuXywgX19maXJzdCwgX19sYXN0KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBt
b2RpZmllcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIGNsZWFyKCkgbm9l
eGNlcHQgeyBfX3BuXy5jbGVhcigpOyB9CisKKyAgcGF0aCYgbWFrZV9wcmVmZXJyZWQoKSB7IHJl
dHVybiAqdGhpczsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgcmVt
b3ZlX2ZpbGVuYW1lKCkgeworICAgIGF1dG8gX19mbmFtZSA9IF9fZmlsZW5hbWUoKTsKKyAgICBp
ZiAoIV9fZm5hbWUuZW1wdHkoKSkKKyAgICAgIF9fcG5fLmVyYXNlKF9fZm5hbWUuZGF0YSgpIC0g
X19wbl8uZGF0YSgpKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZXBsYWNl
X2ZpbGVuYW1lKGNvbnN0IHBhdGgmIF9fcmVwbGFjZW1lbnQpIHsKKyAgICByZW1vdmVfZmlsZW5h
bWUoKTsKKyAgICByZXR1cm4gKCp0aGlzIC89IF9fcmVwbGFjZW1lbnQpOworICB9CisKKyAgcGF0
aCYgcmVwbGFjZV9leHRlbnNpb24oY29uc3QgcGF0aCYgX19yZXBsYWNlbWVudCA9IHBhdGgoKSk7
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHN3YXAocGF0aCYgX19yaHMp
IG5vZXhjZXB0IHsgX19wbl8uc3dhcChfX3Jocy5fX3BuXyk7IH0KKworICAvLyBwcml2YXRlIGhl
bHBlciB0byBhbGxvdyByZXNlcnZpbmcgbWVtb3J5IGluIHRoZSBwYXRoCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX3Jlc2VydmUoc2l6ZV90IF9fcykgeyBfX3BuXy5yZXNl
cnZlKF9fcyk7IH0KKworICAvLyBuYXRpdmUgZm9ybWF0IG9ic2VydmVycworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGNvbnN0IHN0cmluZ190eXBlJiBuYXRpdmUoKSBjb25zdCBub2V4
Y2VwdCB7IHJldHVybiBfX3BuXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Y29uc3QgdmFsdWVfdHlwZSogY19zdHIoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXy5j
X3N0cigpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBvcGVyYXRvciBzdHJpbmdf
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hh
clQsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNs
YXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VD
aGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4KKyAgc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9f
YSA9IF9BbGxvY2F0b3IoKSkgY29uc3QgeworICAgIHVzaW5nIF9DVlQgPSBfX3dpZGVuX2Zyb21f
dXRmODxzaXplb2YoX0VDaGFyVCkgKiBfX0NIQVJfQklUX18+OworICAgIHVzaW5nIF9TdHIgPSBi
YXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj47CisgICAgX1N0ciBfX3Mo
X19hKTsKKyAgICBfX3MucmVzZXJ2ZShfX3BuXy5zaXplKCkpOworICAgIF9DVlQoKShiYWNrX2lu
c2VydGVyKF9fcyksIF9fcG5fLmRhdGEoKSwgX19wbl8uZGF0YSgpICsgX19wbl8uc2l6ZSgpKTsK
KyAgICByZXR1cm4gX19zOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6
OnN0cmluZyBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHN0ZDo6d3N0cmluZyB3c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBz
dHJpbmc8d2NoYXJfdD4oKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6
c3RyaW5nIHU4c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBzdGQ6OnUxNnN0cmluZyB1MTZzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZzxjaGFyMTZfdD4oKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHN0ZDo6dTMyc3RyaW5nIHUzMnN0cmluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNo
YXIzMl90PigpOworICB9CisKKyAgLy8gZ2VuZXJpYyBmb3JtYXQgb2JzZXJ2ZXJzCisgIHRlbXBs
YXRlIDxjbGFzcyBfRUNoYXJULCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0VDaGFyVD4s
CisgICAgICAgICAgICBjbGFzcyBfQWxsb2NhdG9yID0gYWxsb2NhdG9yPF9FQ2hhclQ+ID4KKyAg
YmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9UcmFpdHMsIF9BbGxvY2F0b3I+CisgIGdlbmVyaWNfc3Ry
aW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkgY29uc3QgeworICAgIHJl
dHVybiBzdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4oX19hKTsKKyAgfQorCisg
IHN0ZDo6c3RyaW5nIGdlbmVyaWNfc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAg
c3RkOjp3c3RyaW5nIGdlbmVyaWNfd3N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzx3Y2hh
cl90PigpOyB9CisgIHN0ZDo6c3RyaW5nIGdlbmVyaWNfdThzdHJpbmcoKSBjb25zdCB7IHJldHVy
biBfX3BuXzsgfQorICBzdGQ6OnUxNnN0cmluZyBnZW5lcmljX3UxNnN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIHN0cmluZzxjaGFyMTZfdD4oKTsgfQorICBzdGQ6OnUzMnN0cmluZyBnZW5lcmljX3Uz
MnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzxjaGFyMzJfdD4oKTsgfQorCitwcml2YXRl
OgorICBpbnQgX19jb21wYXJlKF9fc3RyaW5nX3ZpZXcpIGNvbnN0OworICBfX3N0cmluZ192aWV3
IF9fcm9vdF9uYW1lKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290X2RpcmVjdG9yeSgp
IGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcm9vdF9wYXRoX3JhdygpIGNvbnN0OworICBfX3N0
cmluZ192aWV3IF9fcmVsYXRpdmVfcGF0aCgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcGFy
ZW50X3BhdGgoKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX2ZpbGVuYW1lKCkgY29uc3Q7Cisg
IF9fc3RyaW5nX3ZpZXcgX19zdGVtKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19leHRlbnNp
b24oKSBjb25zdDsKKworcHVibGljOgorICAvLyBjb21wYXJlCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgaW50IGNvbXBhcmUoY29uc3QgcGF0aCYgX19wKSBjb25zdCBub2V4Y2VwdCB7Cisg
ICAgcmV0dXJuIF9fY29tcGFyZShfX3AuX19wbl8pOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgaW50IGNvbXBhcmUoY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QgeworICAg
IHJldHVybiBfX2NvbXBhcmUoX19zKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGludCBjb21wYXJlKF9fc3RyaW5nX3ZpZXcgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29t
cGFyZShfX3MpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUo
Y29uc3QgdmFsdWVfdHlwZSogX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3Mp
OworICB9CisKKyAgLy8gZGVjb21wb3NpdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggcm9vdF9uYW1lKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3Jvb3Rf
bmFtZSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9kaXJl
Y3RvcnkoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3Rvcnko
KSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJvb3RfcGF0aCgpIGNv
bnN0IHsKKyAgICByZXR1cm4gcm9vdF9uYW1lKCkuYXBwZW5kKHN0cmluZ190eXBlKF9fcm9vdF9k
aXJlY3RvcnkoKSkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxh
dGl2ZV9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3JlbGF0aXZlX3Bh
dGgoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHBhcmVudF9wYXRo
KCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3BhcmVudF9wYXRoKCkpOworICB9
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsKKyAg
ICByZXR1cm4gc3RyaW5nX3R5cGUoX19maWxlbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGggc3RlbSgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ190eXBlKF9fc3Rl
bSgpKTsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggZXh0ZW5zaW9uKCkgY29u
c3QgeworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX2V4dGVuc2lvbigpKTsKKyAgfQorCisgIC8v
IHF1ZXJ5CisgIF9MSUJDUFBfTk9ESVNDQVJEX0FGVEVSX0NYWDE3IF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbAorICBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19w
bl8uZW1wdHkoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNf
cm9vdF9uYW1lKCkgY29uc3QgeworICAgIHJldHVybiAhX19yb290X25hbWUoKS5lbXB0eSgpOwor
ICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9kaXJlY3Rvcnko
KSBjb25zdCB7CisgICAgcmV0dXJuICFfX3Jvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKTsKKyAgfQor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3Jvb3RfcGF0aCgpIGNvbnN0IHsK
KyAgICByZXR1cm4gIV9fcm9vdF9wYXRoX3JhdygpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAgIHJl
dHVybiAhX19yZWxhdGl2ZV9wYXRoKCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIGJvb2wgaGFzX3BhcmVudF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19w
YXJlbnRfcGF0aCgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGhhc19maWxlbmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fZmlsZW5hbWUoKS5lbXB0
eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfc3RlbSgpIGNv
bnN0IHsgcmV0dXJuICFfX3N0ZW0oKS5lbXB0eSgpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbCBoYXNfZXh0ZW5zaW9uKCkgY29uc3QgeworICAgIHJldHVybiAhX19leHRlbnNp
b24oKS5lbXB0eSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlz
X2Fic29sdXRlKCkgY29uc3QgeworICAgIHJldHVybiBoYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAg
fQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7
IHJldHVybiAhaXNfYWJzb2x1dGUoKTsgfQorCisgIC8vIHJlbGF0aXZlIHBhdGhzCisgIHBhdGgg
bGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0OworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25z
dCBwYXRoJiBfX2Jhc2UpIGNvbnN0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0
aCBsZXhpY2FsbHlfcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fYmFzZSkgY29uc3QgeworICAgIHBh
dGggX19yZXN1bHQgPSB0aGlzLT5sZXhpY2FsbHlfcmVsYXRpdmUoX19iYXNlKTsKKyAgICBpZiAo
X19yZXN1bHQubmF0aXZlKCkuZW1wdHkoKSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICByZXR1
cm4gX19yZXN1bHQ7CisgIH0KKworICAvLyBpdGVyYXRvcnMKKyAgY2xhc3MgX0xJQkNQUF9UWVBF
X1ZJUyBpdGVyYXRvcjsKKyAgdHlwZWRlZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0OworICBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICB0ZW1w
bGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGZyaWVuZAorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPGlzX3NhbWU8X0NoYXJULCBj
aGFyPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2FtZTxfVHJh
aXRzLCBjaGFyX3RyYWl0czxjaGFyPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkg
eworICAgIF9fb3MgPDwgc3RkOjpfX3F1b3RlZChfX3AubmF0aXZlKCkpOworICAgIHJldHVybiBf
X29zOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmllbmQKKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9p
ZjwhaXNfc2FtZTxfQ2hhclQsIGNoYXI+Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAhaXNfc2FtZTxfVHJhaXRzLCBjaGFyX3RyYWl0czxjaGFyPiA+Ojp2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mPjo6
dHlwZQorICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
b3MsIGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fb3MgPDwgc3RkOjpfX3F1b3RlZChfX3Auc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cz4oKSk7CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGZyaWVuZCBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgIG9wZXJhdG9y
Pj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBwYXRoJiBfX3ApIHsKKyAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzPiBfX3RtcDsKKyAgICBfX2lzID4+IF9fcXVv
dGVkKF9fdG1wKTsKKyAgICBfX3AgPSBfX3RtcDsKKyAgICByZXR1cm4gX19pczsKKyAgfQorCitw
cml2YXRlOgorICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJgorICBfX2Fz
c2lnbl92aWV3KF9fc3RyaW5nX3ZpZXcgY29uc3QmIF9fcykgbm9leGNlcHQgeworICAgIF9fcG5f
ID0gc3RyaW5nX3R5cGUoX19zKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgc3RyaW5nX3R5
cGUgX19wbl87Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHN3
YXAocGF0aCYgX19saHMsIHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIF9fbGhzLnN3YXAoX19y
aHMpOworfQorCitfTElCQ1BQX0ZVTkNfVklTCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRo
JiBfX3ApIG5vZXhjZXB0OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IG9wZXJhdG9yPT0oY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYXRoJiBfX2xocywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBf
X3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
cGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPCAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IG9wZXJhdG9yPD0oY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19y
aHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBh
dGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA+PSAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IG9wZXJhdG9yLyhjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSB7CisgIHBhdGggX19yZXN1
bHQoX19saHMpOworICBfX3Jlc3VsdCAvPSBfX3JoczsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
ICB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19wYXRoYWJsZTxfU291cmNlPjo6dmFsdWUsIHBhdGg+
Ojp0eXBlCisgICAgdThwYXRoKGNvbnN0IF9Tb3VyY2UmIF9fcykgeworICBzdGF0aWNfYXNzZXJ0
KAorICAgICAgaXNfc2FtZTx0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OjpfX2NoYXJf
dHlwZSwgY2hhcj46OnZhbHVlLAorICAgICAgInU4cGF0aChTb3VyY2UgY29uc3QmKSByZXF1aXJl
cyBTb3VyY2UgaGF2ZSBhIGNoYXJhY3RlciB0eXBlIG9mIHR5cGUgIgorICAgICAgIidjaGFyJyIp
OworICByZXR1cm4gcGF0aChfX3MpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+Citf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0
aGFibGU8X0lucHV0SXQ+Ojp2YWx1ZSwgcGF0aD46OnR5cGUKKyAgICB1OHBhdGgoX0lucHV0SXQg
X19mLCBfSW5wdXRJdCBfX2wpIHsKKyAgc3RhdGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlw
ZW5hbWUgX19pc19wYXRoYWJsZTxfSW5wdXRJdD46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUs
CisgICAgICAidThwYXRoKEl0ZXIsIEl0ZXIpIHJlcXVpcmVzIEl0ZXIgaGF2ZSBhIHZhbHVlX3R5
cGUgb2YgdHlwZSAnY2hhciciKTsKKyAgcmV0dXJuIHBhdGgoX19mLCBfX2wpOworfQorCitjbGFz
cyBfTElCQ1BQX1RZUEVfVklTIHBhdGg6Oml0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgZW51bSBfUGFy
c2VyU3RhdGUgOiB1bnNpZ25lZCBjaGFyIHsKKyAgICBfU2luZ3VsYXIsCisgICAgX0JlZm9yZUJl
Z2luLAorICAgIF9JblJvb3ROYW1lLAorICAgIF9JblJvb3REaXIsCisgICAgX0luRmlsZW5hbWVz
LAorICAgIF9JblRyYWlsaW5nU2VwLAorICAgIF9BdEVuZAorICB9OworCitwdWJsaWM6CisgIHR5
cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAg
dHlwZWRlZiBwYXRoIHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOworICB0eXBlZGVmIGNvbnN0IHBhdGgqIHBvaW50ZXI7CisgIHR5cGVkZWYgY29u
c3QgcGF0aCYgcmVmZXJlbmNlOworCisgIHR5cGVkZWYgdm9pZAorICAgICAgX19zdGFzaGluZ19p
dGVyYXRvcl90YWc7IC8vIFNlZSByZXZlcnNlX2l0ZXJhdG9yIGFuZCBfX2lzX3N0YXNoaW5nX2l0
ZXJhdG9yCisKK3B1YmxpYzoKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRv
cigpCisgICAgICA6IF9fc3Rhc2hlZF9lbGVtXygpLCBfX3BhdGhfcHRyXyhudWxscHRyKSwgX19l
bnRyeV8oKSwKKyAgICAgICAgX19zdGF0ZV8oX1Npbmd1bGFyKSB7fQorCisgIGl0ZXJhdG9yKGNv
bnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0OworICB+aXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAg
aXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBpdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBfX3N0YXNoZWRfZWxlbV87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZfX3N0YXNoZWRfZWxlbV87IH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
eworICAgIF9MSUJDUFBfQVNTRVJUKF9fc3RhdGVfICE9IF9TaW5ndWxhciwKKyAgICAgICAgICAg
ICAgICAgICAiYXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgYSBzaW5ndWxhciBpdGVyYXRvciIpOwor
ICAgIF9MSUJDUFBfQVNTRVJUKF9fc3RhdGVfICE9IF9BdEVuZCwKKyAgICAgICAgICAgICAgICAg
ICAiYXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgdGhlIGVuZCBpdGVyYXRvciIpOworICAgIHJldHVy
biBfX2luY3JlbWVudCgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBp
dGVyYXRvciBvcGVyYXRvcisrKGludCkgeworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAg
IHRoaXMtPm9wZXJhdG9yKysoKTsKKyAgICByZXR1cm4gX19pdDsKKyAgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CisgICAgX0xJQkNQ
UF9BU1NFUlQoX19zdGF0ZV8gIT0gX1Npbmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRl
bXB0aW5nIHRvIGRlY3JlbWVudCBhIHNpbmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9B
U1NFUlQoX19lbnRyeV8uZGF0YSgpICE9IF9fcGF0aF9wdHJfLT5uYXRpdmUoKS5kYXRhKCksCisg
ICAgICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gZGVjcmVtZW50IHRoZSBiZWdpbiBpdGVy
YXRvciIpOworICAgIHJldHVybiBfX2RlY3JlbWVudCgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgeworICAgIGl0ZXJhdG9y
IF9faXQoKnRoaXMpOworICAgIHRoaXMtPm9wZXJhdG9yLS0oKTsKKyAgICByZXR1cm4gX19pdDsK
KyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgcGF0aDsKKworICBpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpdGVyYXRvciYpOworCisgIGl0ZXJhdG9yJiBfX2luY3JlbWVudCgpOworICBp
dGVyYXRvciYgX19kZWNyZW1lbnQoKTsKKworICBwYXRoIF9fc3Rhc2hlZF9lbGVtXzsKKyAgY29u
c3QgcGF0aCogX19wYXRoX3B0cl87CisgIHBhdGg6Ol9fc3RyaW5nX3ZpZXcgX19lbnRyeV87Cisg
IF9QYXJzZXJTdGF0ZSBfX3N0YXRlXzsKK307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoOjppdGVyYXRvciYgX19saHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6
aXRlcmF0b3ImIF9fcmhzKSB7CisgIHJldHVybiBfX2xocy5fX3BhdGhfcHRyXyA9PSBfX3Jocy5f
X3BhdGhfcHRyXyAmJgorICAgICAgICAgX19saHMuX19lbnRyeV8uZGF0YSgpID09IF9fcmhzLl9f
ZW50cnlfLmRhdGEoKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYg
X19yaHMpIHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOworfQorCitjbGFzcyBfTElCQ1BQ
X0VYQ0VQVElPTl9BQkkgZmlsZXN5c3RlbV9lcnJvciA6IHB1YmxpYyBzeXN0ZW1fZXJyb3Igewor
cHVibGljOgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3Io
Y29uc3Qgc3RyaW5nJiBfX3doYXQsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vy
cm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3Jh
Z2U+KHBhdGgoKSwgcGF0aCgpKSkgeworICAgIF9fY3JlYXRlX3doYXQoMCk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5n
JiBfX3doYXQsIGNvbnN0IHBhdGgmIF9fcDEsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lz
dGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8
X1N0b3JhZ2U+KF9fcDEsIHBhdGgoKSkpIHsKKyAgICBfX2NyZWF0ZV93aGF0KDEpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0
cmluZyYgX193aGF0LCBjb25zdCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLAorICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMs
IF9fd2hhdCksCisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEs
IF9fcDIpKSB7CisgICAgX19jcmVhdGVfd2hhdCgyKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0aCYgcGF0aDEoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVy
biBfX3N0b3JhZ2VfLT5fX3AxXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Y29uc3QgcGF0aCYgcGF0aDIoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5f
X3AyXzsgfQorCisgIH5maWxlc3lzdGVtX2Vycm9yKCkgb3ZlcnJpZGU7IC8vIGtleSBmdW5jdGlv
bgorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgY2hhciogd2hhdCgpIGNv
bnN0IG5vZXhjZXB0IG92ZXJyaWRlIHsKKyAgICByZXR1cm4gX19zdG9yYWdlXy0+X193aGF0Xy5j
X3N0cigpOworICB9CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICB2b2lkIF9fY3JlYXRlX3doYXQo
aW50IF9fbnVtX3BhdGhzKTsKKworcHJpdmF0ZToKKyAgc3RydWN0IF9TdG9yYWdlIHsKKyAgICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgX1N0b3JhZ2UoY29uc3QgcGF0aCYgX19wMSwg
Y29uc3QgcGF0aCYgX19wMikgOiBfX3AxXyhfX3AxKSwgX19wMl8oX19wMikge30KKworICAgIHBh
dGggX19wMV87CisgICAgcGF0aCBfX3AyXzsKKyAgICBzdHJpbmcgX193aGF0XzsKKyAgfTsKKyAg
c2hhcmVkX3B0cjxfU3RvcmFnZT4gX19zdG9yYWdlXzsKK307CisKK3RlbXBsYXRlIDxjbGFzcy4u
LiBfQXJncz4KK19MSUJDUFBfTk9SRVRVUk4gaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyNpZm5kZWYgX0xJQkNQUF9OT19FWENFUFRJT05TCisgICAgdm9pZAorICAgIF9fdGhyb3df
ZmlsZXN5c3RlbV9lcnJvcihfQXJncyYmLi4uIF9fYXJncykgeworICB0aHJvdyBmaWxlc3lzdGVt
X2Vycm9yKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Cit9CisjZWxzZQorICAgIHZv
aWQKKyAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3IoX0FyZ3MmJi4uLikgeworICBfVlNURDo6
YWJvcnQoKTsKK30KKyNlbmRpZgorCisvLyBvcGVyYXRpb25hbCBmdW5jdGlvbnMKKworX0xJQkNQ
UF9GVU5DX1ZJUworcGF0aCBfX2Fic29sdXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2Vj
ID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fY2Fub25pY2FsKGNvbnN0IHBh
dGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lk
IF9fY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9u
cyBfX29wdCwKKyAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK2Jvb2wgX19jb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBw
YXRoJiBfX3RvLCBjb3B5X29wdGlvbnMgX19vcHQsCisgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5X3N5bWxp
bmsoY29uc3QgcGF0aCYgX19leGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBfX25ld19zeW1s
aW5rLAorICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7Citf
TElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3Jl
YXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOwor
X0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwg
Y29uc3QgcGF0aCYgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX2RpcmVj
dG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxs
cHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBh
dGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X2hhcmRfbGluaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3Zv
aWQgX19jcmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19z
eW1saW5rLAorICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRy
KTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29kZSogX19l
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25z
dCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwor
Ym9vbCBfX2VxdWl2YWxlbnQoY29uc3QgcGF0aCYsIGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBf
X2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit1aW50bWF4X3QgX19maWxlX3NpemUo
Y29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19W
SVMKK3VpbnRtYXhfdCBfX2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSog
X19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2ZzX2lzX2VtcHR5KGNv
bnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
CitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9j
b2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2xhc3Rfd3JpdGVf
dGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3ZvaWQgX19wZXJtaXNzaW9ucyhjb25zdCBwYXRoJiwgcGVybXMsIHBlcm1fb3B0aW9ucywgZXJy
b3JfY29kZSogPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19yZWFkX3N5bWxp
bmsoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK2Jvb2wgX19yZW1vdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxs
cHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQg
X19yZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVj
ID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3Qg
cGF0aCYgcCwgdWludG1heF90IHNpemUsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCitzcGFjZV9pbmZvIF9fc3BhY2UoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3RhdHVz
KGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNf
VklTCitmaWxlX3N0YXR1cyBfX3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fc3lzdGVtX2NvbXBs
ZXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCitwYXRoIF9fdGVtcF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVs
bHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNv
bnN0JiBfX3AsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBjdXJyZW50X3BhdGgoKSB7CisgIHJldHVybiBfX2N1cnJl
bnRfcGF0aCgpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1
cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgm
X19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVu
dF9wYXRoKGNvbnN0IHBhdGgmIF9fcCkgeworICBfX2N1cnJlbnRfcGF0aChfX3ApOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBw
YXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fY3VycmVudF9wYXRoKF9fcCwg
Jl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGFic29s
dXRlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19hYnNvbHV0ZShfX3ApOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgm
IF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19hYnNvbHV0ZShfX3AsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0
aCYgX19wKSB7CisgIHJldHVybiBfX2Nhbm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIHJldHVybiBfX2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Rv
KSB7CisgIF9fY29weShfX2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zy
b20sIGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBjb3B5
X29wdGlvbnM6Om5vbmUsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19v
cHQpIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBw
YXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
cHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIF9fY29weShfX2Zyb20sIF9fdG8sIF9fb3B0LCAm
X19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY29weV9m
aWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fY29weV9maWxl
KF9fZnJvbSwgX190bywgY29weV9vcHRpb25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29u
c3QgcGF0aCYgX190bywgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19jb3B5X2ZpbGUo
X19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUsICZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJv
bSwgY29uc3QgcGF0aCYgX190bywgY29weV9vcHRpb25zIF9fb3B0KSB7CisgIHJldHVybiBfX2Nv
cHlfZmlsZShfX2Zyb20sIF9fdG8sIF9fb3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0
aW9ucyBfX29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190
bywgX19vcHQsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZCBjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgX19leGlzdGluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7
CisgIF9fY29weV9zeW1saW5rKF9fZXhpc3RpbmcsIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXh0
LCBjb25zdCBwYXRoJiBfX25ldywgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2Nv
cHlfc3ltbGluayhfX2V4dCwgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19wKSB7
CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcmllcyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBf
X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhf
X3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBj
cmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19jcmVhdGVfZGly
ZWN0b3J5KF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wK
K2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4
Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25z
dCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcGF0aCYgX19hdHRycykgeworICByZXR1cm4gX19jcmVhdGVfZGly
ZWN0b3J5KF9fcCwgX19hdHRycyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBf
X2F0dHJzLAorICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkoX19wLCBfX2F0dHJzLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9kaXJlY3Rvcnlfc3lt
bGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9k
aXJlY3Rvcnlfc3ltbGluayhfX3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBf
X3RvLCBjb25zdCBwYXRoJiBfX25ldywKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8s
IF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQgY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7
CisgIF9fY3JlYXRlX2hhcmRfbGluayhfX3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190
bywgY29uc3QgcGF0aCYgX19uZXcsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKKyAgX19jcmVhdGVfaGFyZF9saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX3N5bWxpbmso
Y29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfc3ltbGluayhf
X3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQK
K2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJv
cl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9zeW1saW5rKF9fdG8s
IF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgc3RhdHVzX2tub3duKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19z
LnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5vbmU7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIGJvb2wgZXhpc3RzKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1
cm4gc3RhdHVzX2tub3duKF9fcykgJiYgX19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5vdF9mb3Vu
ZDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29u
c3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBleGlzdHMoX19zdGF0dXMoX19wKSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIF9f
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgYXV0byBfX3MgPSBfX3N0YXR1cyhfX3AsICZfX2VjKTsK
KyAgaWYgKHN0YXR1c19rbm93bihfX3MpKQorICAgIF9fZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGV4
aXN0cyhfX3MpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGVx
dWl2YWxlbnQoY29uc3QgcGF0aCYgX19wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3AyKSB7CisgIHJldHVybiBfX2VxdWl2
YWxlbnQoX19wMSwgX19wMik7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wKK2VxdWl2YWxlbnQoY29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMiwgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19lcXVpdmFsZW50KF9fcDEsIF9f
cDIsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1h
eF90IGZpbGVfc2l6ZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZmlsZV9zaXplKF9f
cCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAorZmls
ZV9zaXplKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gX19maWxlX3NpemUoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHVpbnRtYXhfdCBoYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19wKSB7
CisgIHJldHVybiBfX2hhcmRfbGlua19jb3VudChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QKK2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBf
X3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2Nv
dW50KF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGlzX2Jsb2NrX2ZpbGUoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBf
X3MudHlwZSgpID09IGZpbGVfdHlwZTo6YmxvY2s7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0
dXJuIGlzX2Jsb2NrX2ZpbGUoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29k
ZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3As
ICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lz
X2NoYXJhY3Rlcl9maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19z
LnR5cGUoKSA9PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsK
KyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBw
YXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2NoYXJh
Y3Rlcl9maWxlKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBw
YXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2RpcmVjdG9yeShfX3N0YXR1cyhfX3ApKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfZGlyZWN0b3J5
KF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZnNfaXNf
ZW1wdHkoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBp
c19lbXB0eShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1w
dHkoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaXNfZmlmbyhmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpmaWZvOworfQoraW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfZmlmbyhfX3N0
YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBp
c19maWZvKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19m
aWZvKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbAoraXNfcmVndWxhcl9maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQg
eworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfcmVndWxhcl9maWxlKGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gaXNfcmVndWxhcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUo
Y29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBp
c19yZWd1bGFyX2ZpbGUoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3NvY2tldChmaWxlX3N0YXR1cyBfX3MpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpzb2NrZXQ7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgm
IF9fcCkgeworICByZXR1cm4gaXNfc29ja2V0KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBfX3As
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wLCAm
X19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5
bWxpbmsoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09
IGZpbGVfdHlwZTo6c3ltbGluazsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbCBpc19zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc3ltbGlu
ayhfX3N5bWxpbmtfc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIGlzX3N5bWxpbmsoX19zeW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKSk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoZmls
ZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBleGlzdHMoX19zKSAmJiAhaXNfcmVn
dWxhcl9maWxlKF9fcykgJiYgIWlzX2RpcmVjdG9yeShfX3MpICYmCisgICAgICAgICAhaXNfc3lt
bGluayhfX3MpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlz
X290aGVyKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfb3RoZXIoX19zdGF0dXMoX19w
KSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIo
Y29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19vdGhlcihf
X3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGZpbGVfdGltZV90eXBlCitsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBfX2xhc3Rfd3JpdGVfdGltZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBmaWxlX3RpbWVfdHlwZQorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgm
IF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19sYXN0X3dyaXRl
X3RpbWUoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHZvaWQgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdGltZV90eXBlIF9fdCkg
eworICBfX2xhc3Rfd3JpdGVfdGltZShfX3AsIF9fdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHZvaWQKK2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsIGZp
bGVfdGltZV90eXBlIF9fdCwKKyAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4
Y2VwdCB7CisgIF9fbGFzdF93cml0ZV90aW1lKF9fcCwgX190LCAmX19lYyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3Blcm1pc3Npb25zKGNvbnN0IHBhdGgm
IF9fcCwgcGVybXMgX19wcm1zLAorICAgICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cyA9IHBl
cm1fb3B0aW9uczo6cmVwbGFjZSkgeworICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBfX29w
dHMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Np
b25zKGNvbnN0IHBhdGgmIF9fcCwgcGVybXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIF9fcGVybWlzc2lvbnMoX19wLCBfX3BybXMsIHBlcm1fb3B0aW9uczo6cmVwbGFjZSwgJl9f
ZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Np
b25zKGNvbnN0IHBhdGgmIF9fcCwgcGVybXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtX29wdGlvbnMgX19vcHRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIF9fcGVybWlzc2lvbnMoX19wLCBfX3BybXMsIF9fb3B0cywgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBw
YXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBwYXRoJiBfX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWts
eV9jYW5vbmljYWwoX19wLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAg
cGF0aCBfX3RtcF9iYXNlID0gX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBp
ZiAoX19lYykKKyAgICByZXR1cm4ge307CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcHJveGlt
YXRlKF9fdG1wX2Jhc2UpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBw
YXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBwcm94
aW1hdGUoX19wLCBjdXJyZW50X3BhdGgoKSwgX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGgKK3Byb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBh
dGgmIF9fYmFzZSA9IGN1cnJlbnRfcGF0aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmlj
YWwoX19wKS5sZXhpY2FsbHlfcHJveGltYXRlKAorICAgICAgX193ZWFrbHlfY2Fub25pY2FsKF9f
YmFzZSkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRf
c3ltbGluayhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5r
KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5r
KF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IHJlbGF0aXZlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19iYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHBhdGgg
X190bXAgPSBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAg
IHJldHVybiBwYXRoKCk7CisgIHBhdGggX190bXBiYXNlID0gX193ZWFrbHlfY2Fub25pY2FsKF9f
YmFzZSwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4gcGF0aCgpOworICByZXR1cm4g
X190bXAubGV4aWNhbGx5X3JlbGF0aXZlKF9fdG1wYmFzZSk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiByZWxhdGl2ZShfX3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aAorcmVsYXRpdmUoY29uc3QgcGF0
aCYgX19wLCBjb25zdCBwYXRoJiBfX2Jhc2UgPSBjdXJyZW50X3BhdGgoKSkgeworICByZXR1cm4g
X193ZWFrbHlfY2Fub25pY2FsKF9fcCkubGV4aWNhbGx5X3JlbGF0aXZlKF9fd2Vha2x5X2Nhbm9u
aWNhbChfX2Jhc2UpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCByZW1vdmUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX3JlbW92ZShfX3ApOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3JlbW92ZShfX3AsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9h
bGwoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX3JlbW92ZV9hbGwoX19wKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29u
c3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19yZW1vdmVfYWxsKF9f
cCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJl
bmFtZShjb25zdCBwYXRoJiBfX2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvKSB7CisgIHJldHVybiBfX3JlbmFtZShfX2Zy
b20sIF9fdG8pOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCity
ZW5hbWUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBf
X2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3JlbmFtZShfX2Zyb20sIF9fdG8sICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCByZXNpemVfZmlsZShj
b25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnRtYXhfdCBfX25zKSB7CisgIHJldHVybiBfX3Jlc2l6ZV9maWxlKF9fcCwg
X19ucyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3Jlc2l6
ZV9maWxlKGNvbnN0IHBhdGgmIF9fcCwgdWludG1heF90IF9fbnMsIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcmVzaXplX2ZpbGUoX19wLCBfX25zLCAmX19lYyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHNwYWNlX2luZm8gc3BhY2UoY29u
c3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX3NwYWNlKF9fcCk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHNwYWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3NwYWNlKF9fcCwgJl9fZWMpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29u
c3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fc3RhdHVzKF9fcCwgJl9fZWMp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzeW1s
aW5rX3N0YXR1cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMo
X19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMK
K3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNl
cHQgeworICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCkgewor
ICByZXR1cm4gX190ZW1wX2RpcmVjdG9yeV9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggdGVtcF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiBfX3RlbXBfZGlyZWN0b3J5X3BhdGgoJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25z
dCYgX19wKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29u
c3QmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwo
X19wLCAmX19lYyk7Cit9CisKK2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNzIHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7CitjbGFzcyBfX2Rpcl9zdHJlYW07CisKK2NsYXNzIGRp
cmVjdG9yeV9lbnRyeSB7CisgIHR5cGVkZWYgX1ZTVERfRlM6OnBhdGggX1BhdGg7CisKK3B1Ymxp
YzoKKyAgLy8gY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycworICBkaXJlY3RvcnlfZW50cnko
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkg
Y29uc3QmKSA9IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkmJikg
bm9leGNlcHQgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhw
bGljaXQgZGlyZWN0b3J5X2VudHJ5KF9QYXRoIGNvbnN0JiBfX3ApIDogX19wXyhfX3ApIHsKKyAg
ICBlcnJvcl9jb2RlIF9fZWM7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZGlyZWN0b3J5X2VudHJ5KF9QYXRoIGNvbnN0JiBfX3As
IGVycm9yX2NvZGUmIF9fZWMpIDogX19wXyhfX3ApIHsKKyAgICBfX3JlZnJlc2goJl9fZWMpOwor
ICB9CisKKyAgfmRpcmVjdG9yeV9lbnRyeSgpIHt9CisKKyAgZGlyZWN0b3J5X2VudHJ5JiBvcGVy
YXRvcj0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50
cnkmIG9wZXJhdG9yPShkaXJlY3RvcnlfZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9f
cCkgeworICAgIF9fcF8gPSBfX3A7CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVz
aCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgYXNz
aWduKF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19w
OworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIHZvaWQgcmVwbGFjZV9maWxlbmFtZShfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19w
Xy5yZXBsYWNlX2ZpbGVuYW1lKF9fcCk7CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVm
cmVzaCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQg
cmVwbGFjZV9maWxlbmFtZShfUGF0aCBjb25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSB7Cisg
ICAgX19wXyA9IF9fcF8ucGFyZW50X3BhdGgoKSAvIF9fcDsKKyAgICBfX3JlZnJlc2goJl9fZWMp
OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goKSB7
IF9fcmVmcmVzaCgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJl
ZnJlc2goZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeyBfX3JlZnJlc2goJl9fZWMpOyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBfUGF0aCBjb25zdCYgcGF0aCgpIGNvbnN0
IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIG9wZXJhdG9yIGNvbnN0IF9QYXRoJigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKCkgY29uc3Qg
eyByZXR1cm4gX1ZTVERfRlM6OmV4aXN0cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgpfSk7IH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKGVycm9yX2NvZGUmIF9f
ZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX1ZTVERfRlM6OmV4aXN0cyhmaWxlX3N0
YXR1c3tfX2dldF9mdCgmX19lYyl9KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBpc19ibG9ja19maWxlKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBm
aWxlX3R5cGU6OmJsb2NrOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29s
IGlzX2Jsb2NrX2ZpbGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpibG9jazsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZSgpIGNvbnN0IHsg
cmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmls
ZV90eXBlOjpjaGFyYWN0ZXI7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfZGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5
cGU6OmRpcmVjdG9yeTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBp
c19kaXJlY3RvcnkoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVy
biBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZmlmbygpIGNvbnN0IHsgcmV0dXJuIF9f
Z2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpmaWZvOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBib29sIGlzX2ZpZm8oZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpmaWZvOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX290aGVyKCkgY29uc3QgeyByZXR1
cm4gX1ZTVERfRlM6OmlzX290aGVyKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19vdGhlcihlcnJvcl9jb2RlJiBfX2Vj
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9WU1REX0ZTOjppc19vdGhlcihmaWxlX3N0
YXR1c3tfX2dldF9mdCgmX19lYyl9KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09
IGZpbGVfdHlwZTo6cmVndWxhcjsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBpc19yZWd1bGFyX2ZpbGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3NvY2tldCgpIGNvbnN0IHsg
cmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpzb2NrZXQ7IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfc29ja2V0KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6c29j
a2V0OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3N5bWxp
bmsoKSBjb25zdCB7IHJldHVybiBfX2dldF9zeW1fZnQoKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluayhlcnJv
cl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bV9mdCgm
X19lYykgPT0gZmlsZV90eXBlOjpzeW1saW5rOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgdWludG1heF90IGZpbGVfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3NpemUo
KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVfc2l6
ZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3Np
emUoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4
X3QgaGFyZF9saW5rX2NvdW50KCkgY29uc3QgeyByZXR1cm4gX19nZXRfbmxpbmsoKTsgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudChl
cnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X25saW5r
KCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1l
X3R5cGUgbGFzdF93cml0ZV90aW1lKCkgY29uc3QgeyByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgp
OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0
X3dyaXRlX3RpbWUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVy
biBfX2dldF93cml0ZV90aW1lKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgZmlsZV9zdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3RhdHVz
KCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN0YXR1
cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N0
YXR1cygmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVf
c3RhdHVzIHN5bWxpbmtfc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0
dXMoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3lt
bGlua19zdGF0dXMoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVy
biBfX2dldF9zeW1saW5rX3N0YXR1cygmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I8KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA8IF9fcmhzLl9fcF87CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I9PShkaXJlY3Rvcnlf
ZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPT0g
X19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBv
cGVyYXRvciE9KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gX19wXyAhPSBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBib29sIG9wZXJhdG9yPD0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3Jo
cykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfIDw9IF9fcmhzLl9fcF87CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I+KGRpcmVjdG9y
eV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+
IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wg
b3BlcmF0b3I+PShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIF9fcF8gPj0gX19yaHMuX19wXzsKKyAgfQorCitwcml2YXRlOgorICBmcmll
bmQgY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJpZW5kIGNsYXNzIF9fZGlyX3N0cmVhbTsKKworICBlbnVt
IF9DYWNoZVR5cGUgOiB1bnNpZ25lZCBjaGFyIHsKKyAgICBfRW1wdHksCisgICAgX0l0ZXJTeW1s
aW5rLAorICAgIF9JdGVyTm9uU3ltbGluaywKKyAgICBfUmVmcmVzaFN5bWxpbmssCisgICAgX1Jl
ZnJlc2hTeW1saW5rVW5yZXNvbHZlZCwKKyAgICBfUmVmcmVzaE5vblN5bWxpbmsKKyAgfTsKKwor
ICBzdHJ1Y3QgX19jYWNoZWRfZGF0YSB7CisgICAgdWludG1heF90IF9fc2l6ZV87CisgICAgdWlu
dG1heF90IF9fbmxpbmtfOworICAgIGZpbGVfdGltZV90eXBlIF9fd3JpdGVfdGltZV87CisgICAg
cGVybXMgX19zeW1fcGVybXNfOworICAgIHBlcm1zIF9fbm9uX3N5bV9wZXJtc187CisgICAgZmls
ZV90eXBlIF9fdHlwZV87CisgICAgX0NhY2hlVHlwZSBfX2NhY2hlX3R5cGVfOworCisgICAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICAgIF9fY2FjaGVkX2RhdGEoKSBub2V4Y2VwdCB7IF9f
cmVzZXQoKTsgfQorCisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICAgIHZvaWQgX19y
ZXNldCgpIHsKKyAgICAgIF9fY2FjaGVfdHlwZV8gPSBfRW1wdHk7CisgICAgICBfX3R5cGVfID0g
ZmlsZV90eXBlOjpub25lOworICAgICAgX19zeW1fcGVybXNfID0gX19ub25fc3ltX3Blcm1zXyA9
IHBlcm1zOjp1bmtub3duOworICAgICAgX19zaXplXyA9IF9fbmxpbmtfID0gdWludG1heF90KC0x
KTsKKyAgICAgIF9fd3JpdGVfdGltZV8gPSBmaWxlX3RpbWVfdHlwZTo6bWluKCk7CisgICAgfQor
ICB9OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgc3RhdGljIF9fY2FjaGVkX2Rh
dGEgX19jcmVhdGVfaXRlcl9yZXN1bHQoZmlsZV90eXBlIF9fZnQpIHsKKyAgICBfX2NhY2hlZF9k
YXRhIF9fZGF0YTsKKyAgICBfX2RhdGEuX190eXBlXyA9IF9fZnQ7CisgICAgX19kYXRhLl9fY2Fj
aGVfdHlwZV8gPSBbJl0oKSB7CisgICAgICBzd2l0Y2ggKF9fZnQpIHsKKyAgICAgIGNhc2UgZmls
ZV90eXBlOjpub25lOgorICAgICAgICByZXR1cm4gX0VtcHR5OworICAgICAgY2FzZSBmaWxlX3R5
cGU6OnN5bWxpbms6CisgICAgICAgIHJldHVybiBfSXRlclN5bWxpbms7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gX0l0ZXJOb25TeW1saW5rOworICAgICAgfQorICAgIH0oKTsKKyAg
ICByZXR1cm4gX19kYXRhOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2
b2lkIF9fYXNzaWduX2l0ZXJfZW50cnkoX1BhdGgmJiBfX3AsIF9fY2FjaGVkX2RhdGEgX19kdCkg
eworICAgIF9fcF8gPSBzdGQ6Om1vdmUoX19wKTsKKyAgICBfX2RhdGFfID0gX19kdDsKKyAgfQor
CisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgZXJyb3JfY29kZSBfX2RvX3JlZnJlc2goKSBub2V4Y2Vw
dDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHN0YXRpYyBib29sIF9faXNfZG5l
X2Vycm9yKGVycm9yX2NvZGUgY29uc3QmIF9fZWMpIHsKKyAgICBpZiAoIV9fZWMpCisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGVycmM+KF9fZWMudmFsdWUoKSkp
IHsKKyAgICBjYXNlIGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3Rvcnk6CisgICAgY2FzZSBl
cnJjOjpub3RfYV9kaXJlY3Rvcnk6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgdm9pZCBfX2hhbmRsZV9lcnJvcihjb25zdCBjaGFyKiBfX21zZywgZXJyb3JfY29k
ZSogX19kZXN0X2VjLAorICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUgY29uc3QmIF9f
ZWMsIGJvb2wgX19hbGxvd19kbmUgPSBmYWxzZSkgY29uc3QgeworICAgIGlmIChfX2Rlc3RfZWMp
IHsKKyAgICAgICpfX2Rlc3RfZWMgPSBfX2VjOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoX19lYyAmJiAoIV9fYWxsb3dfZG5lIHx8ICFfX2lzX2RuZV9lcnJvcihfX2VjKSkpCisgICAg
ICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3IoX19tc2csIF9fcF8sIF9fZWMpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fcmVmcmVzaChlcnJvcl9jb2RlKiBf
X2VjID0gbnVsbHB0cikgeworICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6
OnJlZnJlc2giLCBfX2VjLCBfX2RvX3JlZnJlc2goKSwKKyAgICAgICAgICAgICAgICAgICAvKmFs
bG93X2RuZSovIHRydWUpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBm
aWxlX3R5cGUgX19nZXRfc3ltX2Z0KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7
CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToK
KyAgICAgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAgICBj
YXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9S
ZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICBpZiAoX19lYykKKyAgICAgICAgX19lYy0+
Y2xlYXIoKTsKKyAgICAgIHJldHVybiBmaWxlX3R5cGU6OnN5bWxpbms7CisgICAgY2FzZSBfSXRl
ck5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgICBmaWxlX3N0
YXR1cyBfX3N0KF9fZGF0YV8uX190eXBlXyk7CisgICAgICBpZiAoX19lYyAmJiAhX1ZTVERfRlM6
OmV4aXN0cyhfX3N0KSkKKyAgICAgICAgKl9fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm9f
c3VjaF9maWxlX29yX2RpcmVjdG9yeSk7CisgICAgICBlbHNlIGlmIChfX2VjKQorICAgICAgICBf
X2VjLT5jbGVhcigpOworICAgICAgcmV0dXJuIF9fZGF0YV8uX190eXBlXzsKKyAgICB9CisgICAg
X0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBmaWxlX3R5cGUgX19nZXRfZnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0
IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5
OgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNv
bHZlZDoKKyAgICAgIHJldHVybiBfX3N0YXR1cyhfX3BfLCBfX2VjKS50eXBlKCk7CisgICAgY2Fz
ZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgY2Fz
ZSBfUmVmcmVzaFN5bWxpbms6IHsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5
cGVfKTsKKyAgICAgIGlmIChfX2VjICYmICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAg
ICAqX19lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5
KTsKKyAgICAgIGVsc2UgaWYgKF9fZWMpCisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICBy
ZXR1cm4gX19kYXRhXy5fX3R5cGVfOworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNI
QUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1
cyBfX2dldF9zdGF0dXMoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBz
d2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNh
c2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1Jl
ZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBfX3N0YXR1cyhfX3BfLCBfX2Vj
KTsKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlu
azoKKyAgICAgIHJldHVybiBmaWxlX3N0YXR1cyhfX2dldF9mdChfX2VjKSwgX19kYXRhXy5fX25v
bl9zeW1fcGVybXNfKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zeW1saW5r
X3N0YXR1cyhlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAo
X19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRl
ck5vblN5bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgICByZXR1cm4gX19zeW1s
aW5rX3N0YXR1cyhfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAg
ICAgIHJldHVybiBmaWxlX3N0YXR1cyhfX2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19ub25f
c3ltX3Blcm1zXyk7CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVz
aFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9m
dChfX2VjKSwgX19kYXRhXy5fX3N5bV9wZXJtc18pOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVB
Q0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhf
dCBfX2dldF9zaXplKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dp
dGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNl
IF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZy
ZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fZmlsZV9zaXpl
KF9fcF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJl
c2hOb25TeW1saW5rOiB7CisgICAgICBlcnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3Rh
dHVzIF9fc3QoX19nZXRfZnQoJl9fbV9lYykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRp
cmVjdG9yeV9lbnRyeTo6ZmlsZV9zaXplIiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNU
RF9GUzo6ZXhpc3RzKF9fc3QpICYmICFfVlNURF9GUzo6aXNfcmVndWxhcl9maWxlKF9fc3QpKSB7
CisgICAgICAgIGVycmMgX19lcnJfa2luZCA9IF9WU1REX0ZTOjppc19kaXJlY3RvcnkoX19zdCkg
PyBlcnJjOjppc19hX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICAgICAgX19o
YW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6ZmlsZV9zaXplIiwgX19lYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgbWFrZV9lcnJvcl9jb2RlKF9fZXJyX2tpbmQpKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiBfX2RhdGFfLl9fc2l6ZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQ
X1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVp
bnRtYXhfdCBfX2dldF9ubGluayhlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3Qgewor
ICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6Cisg
ICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2Fz
ZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2hh
cmRfbGlua19jb3VudChfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAg
ICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7Cisg
ICAgICAodm9pZClfX2dldF9mdCgmX19tX2VjKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBk
aXJlY3RvcnlfZW50cnk6OmhhcmRfbGlua19jb3VudCIsIF9fZWMsIF9fbV9lYyk7CisgICAgICBy
ZXR1cm4gX19kYXRhXy5fX25saW5rXzsKKyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFD
SEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1l
X3R5cGUgX19nZXRfd3JpdGVfdGltZShlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3Qg
eworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6
CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAg
Y2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpf
X2xhc3Rfd3JpdGVfdGltZShfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoK
KyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7
CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZ2V0X2Z0KCZfX21fZWMpKTsKKyAgICAgIF9faGFu
ZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsIF9f
bV9lYyk7CisgICAgICBpZiAoX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSAmJgorICAgICAgICAgIF9f
ZGF0YV8uX193cml0ZV90aW1lXyA9PSBmaWxlX3RpbWVfdHlwZTo6bWluKCkpCisgICAgICAgIF9f
aGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMs
CisgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZXJyb3JfY29kZShlcnJjOjp2YWx1ZV90b29f
bGFyZ2UpKTsKKyAgICAgIHJldHVybiBfX2RhdGFfLl9fd3JpdGVfdGltZV87CisgICAgfQorICAg
IH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworcHJpdmF0ZToKKyAgX1BhdGgg
X19wXzsKKyAgX19jYWNoZWRfZGF0YSBfX2RhdGFfOworfTsKKworY2xhc3MgX19kaXJfZWxlbWVu
dF9wcm94eSB7CitwdWJsaWM6CisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRp
cmVjdG9yeV9lbnRyeSBvcGVyYXRvciooKSB7CisgICAgcmV0dXJuIF9WU1REOjptb3ZlKF9fZWxl
bV8pOworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7
CisgIGZyaWVuZCBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBleHBsaWNp
dCBfX2Rpcl9lbGVtZW50X3Byb3h5KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19lKSA6IF9fZWxl
bV8oX19lKSB7fQorICBfX2Rpcl9lbGVtZW50X3Byb3h5KF9fZGlyX2VsZW1lbnRfcHJveHkmJiBf
X28pCisgICAgICA6IF9fZWxlbV8oX1ZTVEQ6Om1vdmUoX19vLl9fZWxlbV8pKSB7fQorICBkaXJl
Y3RvcnlfZW50cnkgX19lbGVtXzsKK307CisKK2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvciB7Citw
dWJsaWM6CisgIHR5cGVkZWYgZGlyZWN0b3J5X2VudHJ5IHZhbHVlX3R5cGU7CisgIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0KiBw
b2ludGVyOworICB0eXBlZGVmIHZhbHVlX3R5cGUgY29uc3QmIHJlZmVyZW5jZTsKKyAgdHlwZWRl
ZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKK3B1YmxpYzoKKyAgLy9j
dG9yICYgZHRvcgorICBkaXJlY3RvcnlfaXRlcmF0b3IoKSBub2V4Y2VwdCB7fQorCisgIGV4cGxp
Y2l0IGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3ApCisgICAgICA6IGRpcmVjdG9y
eV9pdGVyYXRvcihfX3AsIG51bGxwdHIpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0
IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX19vcHRzKQorICAgICAgOiBkaXJlY3Rvcnlf
aXRlcmF0b3IoX19wLCBudWxscHRyLCBfX29wdHMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9y
KGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogZGlyZWN0b3J5X2l0
ZXJhdG9yKF9fcCwgJl9fZWMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgm
IF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgX19lYykKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMsIF9f
b3B0cykge30KKworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9y
JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfaXRlcmF0b3IoZGlyZWN0b3J5X2l0ZXJhdG9yJiYp
ID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgZGlyZWN0
b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0
b3I9KGRpcmVjdG9yeV9pdGVyYXRvciYmIF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZh
dWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4K
KyAgICBpZiAodGhpcyAhPSAmX19vKSB7CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28u
X19pbXBfKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgfmRpcmVjdG9yeV9p
dGVyYXRvcigpID0gZGVmYXVsdDsKKworICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9y
KigpIGNvbnN0IHsKKyAgICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJUaGUgZW5kIGl0ZXJhdG9y
IGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQiKTsKKyAgICByZXR1cm4gX19kZXJlZmVyZW5jZSgpOwor
ICB9CisKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJioqdGhpczsgfQorCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0
dXJuIF9faW5jcmVtZW50KCk7IH0KKworICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKyso
aW50KSB7CisgICAgX19kaXJfZWxlbWVudF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3Jl
bWVudCgpOworICAgIHJldHVybiBfX3A7CisgIH0KKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIGlu
Y3JlbWVudChlcnJvcl9jb2RlJiBfX2VjKSB7IHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7IH0K
KworcHJpdmF0ZToKKyAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJv
b2wKKyAgb3BlcmF0b3I9PShjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAg
ICAgICAgIGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0OworCisgIC8v
IGNvbnN0cnVjdCB0aGUgZGlyX3N0cmVhbQorICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9y
eV9pdGVyYXRvcihjb25zdCBwYXRoJiwgZXJyb3JfY29kZSosCisgICAgICAgICAgICAgICAgICAg
ICBkaXJlY3Rvcnlfb3B0aW9ucyA9IGRpcmVjdG9yeV9vcHRpb25zOjpub25lKTsKKworICBfTElC
Q1BQX0ZVTkNfVklTCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0
b3J5X2VudHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHNoYXJlZF9w
dHI8X19kaXJfc3RyZWFtPiBfX2ltcF87Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sCitvcGVyYXRvcj09KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMs
CisgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsK
KyAgcmV0dXJuIF9fbGhzLl9faW1wXyA9PSBfX3Jocy5fX2ltcF87Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK29wZXJhdG9yIT0oY29uc3QgZGlyZWN0b3J5X2l0
ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jo
cykgbm9leGNlcHQgeworICByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7Cit9CisKKy8vIGVuYWJs
ZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9pdGVyYXRvcgorYmVnaW4oZGlyZWN0
b3J5X2l0ZXJhdG9yIF9faXRlcikgbm9leGNlcHQgeworICByZXR1cm4gX19pdGVyOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBkaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChj
b25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdCB7CisgIHJldHVybiBkaXJlY3Rvcnlf
aXRlcmF0b3IoKTsKK30KKworY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciB7Citw
dWJsaWM6CisgIHVzaW5nIHZhbHVlX3R5cGUgPSBkaXJlY3RvcnlfZW50cnk7CisgIHVzaW5nIGRp
ZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90OworICB1c2luZyBwb2ludGVyID0gZGlyZWN0
b3J5X2VudHJ5IGNvbnN0KjsKKyAgdXNpbmcgcmVmZXJlbmNlID0gZGlyZWN0b3J5X2VudHJ5IGNv
bnN0JjsKKyAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmlucHV0X2l0ZXJhdG9yX3Rh
ZzsKKworcHVibGljOgorICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgbm9l
eGNlcHQgOiBfX3JlY18oZmFsc2UpIHt9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBleHBsaWNpdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKAorICAgICAgY29uc3QgcGF0
aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX3hvcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6
Om5vbmUpCisgICAgICA6IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBfX3hvcHRp
b25zLCBudWxscHRyKSB7fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25z
IF9feG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykKKyAgICAgIDogcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlv
bnMsICZfX2VjKSB7fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpCisg
ICAgICA6IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBkaXJlY3Rvcnlfb3B0aW9u
czo6bm9uZSwgJl9fZWMpIHt9CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25z
dCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworICByZWN1cnNpdmVf
ZGlyZWN0b3J5X2l0ZXJhdG9yKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZh
dWx0OworCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImCisgIG9wZXJhdG9yPShjb25z
dCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3Bl
cmF0b3I9KHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAg
ICAvLyBub24tZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCB0byBzdXBwb3J0IHNlbGYt
bW92ZSBhc3NpZ24uCisgICAgaWYgKHRoaXMgIT0gJl9fbykgeworICAgICAgX19pbXBfID0gX1ZT
VEQ6Om1vdmUoX19vLl9faW1wXyk7CisgICAgICBfX3JlY18gPSBfX28uX19yZWNfOworICAgIH0K
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB+cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cigpID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRp
cmVjdG9yeV9lbnRyeSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX19kZXJlZmVyZW5jZSgp
OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCBkaXJlY3RvcnlfZW50
cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmX19kZXJlZmVyZW5jZSgpOyB9CisKKyAg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5j
cmVtZW50KCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIF9fZGlyX2VsZW1l
bnRfcHJveHkgb3BlcmF0b3IrKyhpbnQpIHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgq
KnRoaXMpOworICAgIF9faW5jcmVtZW50KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYg
aW5jcmVtZW50KGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgICByZXR1cm4gX19pbmNyZW1lbnQoJl9f
ZWMpOworICB9CisKKyAgX0xJQkNQUF9GVU5DX1ZJUyBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRpb25z
KCkgY29uc3Q7CisgIF9MSUJDUFBfRlVOQ19WSVMgaW50IGRlcHRoKCkgY29uc3Q7CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHBvcCgpIHsgX19wb3AoKTsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBwb3AoZXJyb3JfY29kZSYgX19lYykgeyBf
X3BvcCgmX19lYyk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgcmVj
dXJzaW9uX3BlbmRpbmcoKSBjb25zdCB7IHJldHVybiBfX3JlY187IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHZvaWQgZGlzYWJsZV9yZWN1cnNpb25fcGVuZGluZygpIHsgX19y
ZWNfID0gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cihjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19W
SVMKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKKyAg
X0xJQkNQUF9GVU5DX1ZJUworICBib29sIF9fdHJ5X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBfX2Vj
KTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHZvaWQgX19hZHZhbmNlKGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImIF9faW5jcmVtZW50KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKwor
ICBfTElCQ1BQX0ZVTkNfVklTCisgIHZvaWQgX19wb3AoZXJyb3JfY29kZSogX19lYyA9IG51bGxw
dHIpOworCisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisg
IG9wZXJhdG9yPT0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYsCisgICAgICAg
ICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisg
IHN0cnVjdCBfX3NoYXJlZF9pbXA7CisgIHNoYXJlZF9wdHI8X19zaGFyZWRfaW1wPiBfX2ltcF87
CisgIGJvb2wgX19yZWNfOworfTsgLy8gY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cgorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09KGNv
bnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25z
dCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1
cm4gX19saHMuX19pbXBfID09IF9fcmhzLl9faW1wXzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5
X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMg
PT0gX19yaHMpOworfQorLy8gZW5hYmxlIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFu
Z2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2JlZ2luKHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3IgX19pdGVyKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IK
K2VuZChjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICBy
ZXR1cm4gcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpOworfQorCitfTElCQ1BQX0VORF9O
QU1FU1BBQ0VfRklMRVNZU1RFTQorCisjZW5kaWYgLy8gIV9MSUJDUFBfQ1hYMDNfTEFORworCitf
TElCQ1BQX1BPUF9NQUNST1MKKworI2VuZGlmIC8vIF9MSUJDUFBfRklMRVNZU1RFTQorI2VuZGlm
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>