<?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>160618</bug_id>
          
          <creation_ts>2016-08-05 16:18:41 -0700</creation_ts>
          <short_desc>WTF needs a variant implementation</short_desc>
          <delta_ts>2016-08-07 09:58:24 -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></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>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218095</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-05 16:18:41 -0700</bug_when>
    <thetext>WTF needs a variant implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218135</commentid>
    <comment_count>1</comment_count>
      <attachid>285468</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-05 17:30:37 -0700</bug_when>
    <thetext>Created attachment 285468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218156</commentid>
    <comment_count>2</comment_count>
      <attachid>285473</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-05 19:10:40 -0700</bug_when>
    <thetext>Created attachment 285473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218166</commentid>
    <comment_count>3</comment_count>
      <attachid>285473</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-05 19:54:19 -0700</bug_when>
    <thetext>Comment on attachment 285473
Patch

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

Sweeeeet!

&gt; Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:47
&gt; +    typedef std::experimental::variant&lt;int, float, String&gt; Variant;

Do we want to type std::experimental::variant every time we use this in WebKit, or do we want to put this line in the header?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218169</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-05 20:18:05 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 285473 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=285473&amp;action=review
&gt; 
&gt; Sweeeeet!
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:47
&gt; &gt; +    typedef std::experimental::variant&lt;int, float, String&gt; Variant;
&gt; 
&gt; Do we want to type std::experimental::variant every time we use this in
&gt; WebKit, or do we want to put this line in the header?

I think for now we want to type it. As I start using it, if it becomes annoying, I will consider adding something like:

namespace WTF {

template&lt;typename ... Types&gt;
using Variant = std::experimental::variant&lt;Types&gt;;

}

But I want to see first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218246</commentid>
    <comment_count>5</comment_count>
      <attachid>285473</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-06 09:02:45 -0700</bug_when>
    <thetext>Comment on attachment 285473
Patch

Clearing flags on attachment: 285473

Committed r204227: &lt;http://trac.webkit.org/changeset/204227&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218247</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-06 09:02:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218368</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-07 09:58:24 -0700</bug_when>
    <thetext>The failures in bug 160638 make it seem likely this is not quite working yet in the compilers used on the GTK and Windows bots.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285468</attachid>
            <date>2016-08-05 17:30:37 -0700</date>
            <delta_ts>2016-08-05 19:10:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160618-20160805172910.patch</filename>
            <type>text/plain</type>
            <size>84218</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQxNDYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA1ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgV1RGIG5lZWRzIGEgdmFyaWFudCBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjE4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIGlt
cGxlbWVudGF0aW9uIG9mIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IG1hdGNoaW5nIHRoZSBD
KysxNyBkcmFmdCBodHRwOi8vd2cyMS5saW5rL240NjA2IAorICAgICAgICB0YWtlbiBmcm9tIGh0
dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhm
NzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkgYW5kCisgICAgICAgIG1vZGlmaWVkIHRvIHN1cHBv
cnQgY29tcGlsaW5nIHdpdGhvdXQgZXhjZXB0aW9ucyAod2hlcmUgaXQgdXNlZCB0byB0aHJvdywg
d2UgbG92aW5nbHkgQ1JBU0goKSkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlLgorCisgICAgICAgICogd3RmL0NvbXBpbGVy
Lmg6CisgICAgICAgIEFkZCBDT01QSUxFUl9TVVBQT1JUUyBkZWZpbmUgZm9yIEMrKyBleGNlcHRp
b25zLgorCisgICAgICAgICogd3RmL1ZhcmlhbnQuaDogQWRkZWQuCisKIDIwMTYtMDgtMDMgIENz
YWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBMYWNraW5nIHN1
cHBvcnQgb24gYSBhcm0tdHJhZGl0aW9uYWwgZGlzYXNzZW1ibGVyLgpJbmRleDogU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQxNDYpCisrKyBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjMsNiArMTIzLDcgQEAKIAkJNzBFQ0E2MEYxQjAyNDI2ODAwNDQ5NzM5IC8qIFVuaXF1ZWRTdHJp
bmdJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MEVDQTYwQzFCMDI0MjY4MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLzsgfTsKIAkJ
NzlFQzcwNjExQzk5RjlCQzAwM0EzQUUyIC8qIFNtYWxsUHRyU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQg
LyogU21hbGxQdHJTZXQuaCAqLzsgfTsKIAkJN0NCQkEwNzQxOUJCN0ZEQzAwQkJGMDI1IC8qIE9T
T2JqZWN0UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0JCQTA3MzE5QkI3RkRDMDBCQkYwMjUgLyogT1NPYmplY3RQdHIuaCAqLzsgfTsKKwkJN0NE
MEQ1QTkxRDU1MzRBNzAwMENDOUUxIC8qIFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBENUE3MUQ1NTMyMkEwMDBDQzlFMSAvKiBWYXJp
YW50LmggKi87IH07CiAJCTdDREQ3RkY4MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0
b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0RE
N0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovOyB9OwogCQk3Q0RE
N0ZGQTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NERDdGRjkxODZEMkE1NDAwNzQzM0NEIC8q
IEl0ZXJhdG9yUmFuZ2UuaCAqLzsgfTsKIAkJN0UyOUMzM0UxNUZGRDc5QjAwNTE2RDYxIC8qIE9i
amNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3RTI5QzMzRDE1RkZENzlCMDA1MTZENjEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAq
LzsgfTsKQEAgLTQ2NCw2ICs0NjUsNyBAQAogCQk3MEVDQTYwQzFCMDI0MjY4MDA0NDk3MzkgLyog
VW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5p
cXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkzNkQ2QTkx
Qzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
QkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDREQ3RkY3MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3JzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdG9yQWRhcHRvcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NERDdGRjkxODZEMkE1NDAwNzQzM0NEIC8qIEl0ZXJhdG9y
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JSYW5nZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTI5QzMzRDE1RkZENzlCMDA1MTZENjEg
LyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T2JqY1J1bnRpbWVFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjEs
NiArMTAyMyw3IEBACiAJCQkJODNGQkE5MzExOURGNDU5NzAwRjMwQURCIC8qIFR5cGVDYXN0cy5o
ICovLAogCQkJCUE4QTQ3MzVDMTUxQTgyNUIwMDQxMjNGRiAvKiBVbmlvbkZpbmQuaCAqLywKIAkJ
CQlBOEE0NzM2RjE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oICovLAorCQkJCTdDRDBE
NUE3MUQ1NTMyMkEwMDBDQzlFMSAvKiBWYXJpYW50LmggKi8sCiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCkBAIC0xMzc2LDYgKzEzNzksNyBAQAogCQkJCUE4QTQ3NDI4MTUxQTgyNUIwMDQx
MjNGRiAvKiBTdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMxODFDOTIxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
REFDRDNFMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3Q0QwRDVBOTFENTUzNEE3MDAwQ0M5RTEgLyogVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0MjkxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YXRpY0NvbnN0cnVjdG9ycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0MkExNTFBODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGOEE5MzcxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3YXRj
aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA0
MTQ2KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw2ICsxMTQsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBVbmlxdWVSZWYuaAogICAgIFZN
VGFncy5oCiAgICAgVmFsdWVDaGVjay5oCisgICAgVmFyaWFudC5oCiAgICAgVmVjdG9yLmgKICAg
ICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaApJbmRleDogU291cmNlL1dURi93
dGYvQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCShy
ZXZpc2lvbiAyMDQxNDYpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lIFdURl9DT01QSUxFUl9TVVBQT1JUU19DWFhf
UkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMgX19oYXNfZmVhdHVyZShjeHhfcmVmZXJlbmNl
X3F1YWxpZmllZF9mdW5jdGlvbnMpCiAjZGVmaW5lIFdURl9DT01QSUxFUl9TVVBQT1JUU19DWFhf
VVNFUl9MSVRFUkFMUyBfX2hhc19mZWF0dXJlKGN4eF91c2VyX2xpdGVyYWxzKQogI2RlZmluZSBX
VEZfQ09NUElMRVJfU1VQUE9SVFNfRkFMTFRIUk9VR0hfV0FSTklOR1MgX19oYXNfZmVhdHVyZShj
eHhfYXR0cmlidXRlcykgJiYgX19oYXNfd2FybmluZygiLVdpbXBsaWNpdC1mYWxsdGhyb3VnaCIp
CisjZGVmaW5lIFdURl9DT01QSUxFUl9TVVBQT1JUU19DWFhfRVhDRVBUSU9OUyBfX2hhc19mZWF0
dXJlKGN4eF9leGNlcHRpb25zKQogI2VuZGlmCiAKIC8qIENPTVBJTEVSKEdDQ19PUl9DTEFORykg
LSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiBvciBDbGFuZyAqLwpJbmRleDogU291cmNlL1dURi93
dGYvVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMDU2IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIEp1c3QgU29mdHdhcmUgU29s
dXRpb25zIEx0ZAorLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisvLyB3aXRob3V0
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQorLy8gZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy8vCisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gZGlzY2xhaW1lci4KKy8v
CisvLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworLy8gZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisvLyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLwor
Ly8gMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5h
bWVzIG9mCisvLyBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cworLy8gZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuCisvLyBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorLy8gQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKy8vIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisvLyBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
Ly8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IK
Ky8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisvLyBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisvLyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKy8vIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorLy8gT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKy8vIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIENv
cGllZCBmcm9tIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJj
ZTQ3ZmE3ODg2NDhmNzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKworLy8gTW9kaWZpZWQgdG8g
bWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZC4KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8c3RkZGVm
Lmg+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0
eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5o
PgorCituYW1lc3BhY2Ugc3RkIHsKK25hbWVzcGFjZSBleHBlcmltZW50YWwgeworCisjaWYgQ09N
UElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKKyNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19l
eGNlcHRpb24pIHRocm93IF9fZXhjZXB0aW9uOworI2Vsc2UKKyNkZWZpbmUgX19USFJPV19FWENF
UFRJT04oLi4uKSBDUkFTSCgpOworI2VuZGlmCisKK3N0cnVjdCBfX2luX3BsYWNlX3ByaXZhdGV7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9fdHlwZV9ob2xkZXI7CisKKyAg
ICB0ZW1wbGF0ZTxzaXplX3Q+CisgICAgc3RydWN0IF9fdmFsdWVfaG9sZGVyOworfTsKKworCitz
dHJ1Y3QgaW5fcGxhY2VfdGFnIHsKKyAgICBpbl9wbGFjZV90YWcoKSA9IGRlbGV0ZTsKK307CisK
K3VzaW5nIGluX3BsYWNlX3QgPSBpbl9wbGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlJik7
CisKK3RlbXBsYXRlIDxjbGFzcyBfVHlwZT4KK3VzaW5nIGluX3BsYWNlX3R5cGVfdCA9IGluX3Bs
YWNlX3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdHlwZV9ob2xkZXI8X1R5cGU+Jik7CisK
K3RlbXBsYXRlIDxzaXplX3QgX0luZGV4PgordXNpbmcgaW5fcGxhY2VfaW5kZXhfdCA9IGluX3Bs
YWNlX3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4mKTsK
KworaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZSYpOworCit0ZW1wbGF0
ZSA8Y2xhc3MgX1R5cGU+Citpbl9wbGFjZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRl
OjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7CisgICAgX19USFJPV19FWENFUFRJT04oX19pbl9w
bGFjZV9wcml2YXRlKCkpOworfQorCit0ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4KK2luX3BsYWNl
X3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4g
JikgeworICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5fcGxhY2VfcHJpdmF0ZSgpKTsKK30KKwor
Y2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzOiBwdWJsaWMgc3RkOjpsb2dpY19lcnJvcnsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHdo
YXRfYXJnKToKKyAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0X2FyZykKKyAgICB7fQorICAg
IGV4cGxpY2l0IGJhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyk6CisgICAg
ICAgIHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCisgICAge30KK307CisKK3RlbXBsYXRlPHB0
cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1
Y3QgX190eXBlX2luZGV4X2hlbHBlcjsKKwordGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9f
dHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfSGVhZCxfUmVzdC4uLj57CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KKyAgICAgICAgX190eXBlX2luZGV4X2hl
bHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3QuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxhdGU8
cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3Ry
dWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fT2Zmc2V0OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3R5cGVf
aW5kZXh7CisgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KKyAgICAgICAg
X190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Cit9OworCit0
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19p
bmRleGVkX3R5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KK3N0cnVjdCBfX2luZGV4ZWRfdHlwZTwwLF9IZWFkLF9SZXN0Li4uPnsKKyAgICB0eXBlZGVm
IF9IZWFkIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KK3N0cnVjdCBfX2luZGV4ZWRfdHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57CisgICAg
dHlwZWRlZiB2b2lkIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9faW5kZXhlZF90eXBlPF9J
bmRleCxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLl9UeXBlcz4KK3N0cnVjdCBfX25leHRfaW5kZXh7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KKyAgICAgICAgKF9JbmRleD49
cHRyZGlmZl90KHNpemVvZi4uLihfVHlwZXMpLTEpKT8tMTpfSW5kZXgrMTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitjbGFzcyB2YXJpYW50OworCit0ZW1wbGF0ZTx0eXBl
bmFtZT4KK3N0cnVjdCB2YXJpYW50X3NpemU7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4K
K3N0cnVjdCB2YXJpYW50X3NpemU8Y29uc3QgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgorc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xh
dGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgX1R5cGU+CitzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZh
cmlhbnRfc2l6ZTxfVHlwZT4ge307CisKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Citz
dHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8X1R5cGVzLi4uPj4KKyAgICA6IHN0ZDo6aW50ZWdy
YWxfY29uc3RhbnQ8c2l6ZV90LCBzaXplb2YuLi4oX1R5cGVzKT4ge307CisKK3RlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsK
KwordGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KK3VzaW5nIHZhcmlhbnRf
YWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46
OnR5cGU7CisKK3RlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KK3N0cnVj
dCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgY29uc3QgX1R5cGU+eworICAgIHVzaW5nIHR5
cGU9c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47
Cit9OworCit0ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3Qg
dmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIF9UeXBlPnsKKyAgICB1c2luZyB0
eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlw
ZT4+OworfTsKKwordGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgorc3Ry
dWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Cisg
ICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xhdGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFu
dF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+PjsKK307CisKK3RlbXBsYXRlPHNpemVfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9J
bmRleCx2YXJpYW50PF9UeXBlcy4uLj4+eworICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZTsKK307CisKK2NvbnN0ZXhwciBzaXpl
X3QgdmFyaWFudF9ucG9zPS0xOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAu
Li4gX1R5cGVzPgorY29uc3RleHByIF9UeXBlJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+Jik7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIg
X1R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBfVHlwZSYmIGdl
dCh2YXJpYW50PF9UeXBlcy4uLj4mJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiYpOworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4u
LiBfVHlwZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYpOworCit0ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19p
bmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBl
cy4uLj4mJik7CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KK2NvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlIGNvbnN0JiBnZXQoCisgICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisKK3Rl
bXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+Citjb25zdGV4cHIg
Y29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUg
JiYKK2dldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJf
dDxfVHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJf
dDxfVHlwZSBjb25zdD4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOworCit0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgc3Rk
OjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+
OjpfX3R5cGU+IGdldF9pZih2YXJpYW50PF9UeXBlcy4uLj4mKTsKKwordGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50
ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNv
bnN0PiBnZXRfaWYoCisgICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisKK3RlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3ZhcmlhbnRf
YWNjZXNzb3I7CisKK3RlbXBsYXRlPHNpemVfdCBfX2NvdW50LAorICAgICAgICAgYm9vbCBfX2xh
cmdlcl90aGFuX2NoYXI9KF9fY291bnQ+U0NIQVJfTUFYKSwKKyAgICBib29sIF9fbGFyZ2VyX3Ro
YW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgpLAorICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9
KF9fY291bnQ+SU5UX01BWCk+CitzdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGV7CisgICAgdHlw
ZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4K
K3N0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewor
ICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHNpemVfdCBf
X2NvdW50Pgorc3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZh
bHNlPnsKKyAgICB0eXBlZGVmIGludCBfX3R5cGU7Cit9OwordGVtcGxhdGU8c2l6ZV90IF9fY291
bnQ+CitzdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57
CisgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KK3N0cnVjdCBfX3N0b3JlZF90eXBleworICAgIHR5cGVkZWYgX1R5cGUgX190eXBl
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgX19zdG9yZWRfdHlwZTxf
VHlwZSY+eworICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlPgorc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KKyAgICAgICAgc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+
Ojp2YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KK3N0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9CisgICAgICAgIF9fYWxsX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCisgICAgICAgIF9fYWxsX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAuLi4gX0FyZ3M+CitzdHJ1Y3QgX19zdG9yYWdlX25vdGhy
b3dfY29uc3RydWN0aWJsZXsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQorICAgICAg
ICBub2V4Y2VwdChfVGFyZ2V0KHN0ZDo6ZGVjbHZhbDxfQXJncz4oKS4uLikpOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9
dHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgorc3RydWN0IF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBfX3ZhbHVlPQorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PAorICAgICAgICB0eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+CitzdHJ1
Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9CisgICAgICAgIF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKKyAgICAgICAgX19z
dG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKK307
CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVj
dCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgX192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTwtMSxfSGVhZCxfUmVzdC4uLj57CisgICAgc3RhdGljIGNvbnN0IGJvb2wgX192
YWx1ZT0KKyAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFk
LF9SZXN0Li4uPjo6X192YWx1ZTsKK307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+eworICAgIHN0
YXRpYyBjb25zdCBib29sIF9fdmFsdWU9CisgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKKyAgICAgICAgX19vdGhlcl9zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsK
K307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0
cnVjdCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkeworICAgIHN0YXRpYyBjb25zdCBib29sIF9f
dmFsdWU9CisgICAgICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Cisg
ICAgICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+
OjpfX3ZhbHVlICYmCisgICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVj
dCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBseworICAgIHN0YXRpYyBjb25zdCBi
b29sIF9fdmFsdWU9CisgICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdmFsdWUgfHwKKyAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWRfaW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOworfTsKKwordGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fYW55
X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPWZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQ+CitzdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVx
dWlyZWQ8dmFyaWFudDxfVHlwZXMuLi4+ID57CisgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1
ZT0KKyAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4u
LihfVHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSAu
Li4gX1R5cGVzPgordW5pb24gX192YXJpYW50X2RhdGE7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KK3N0cnVjdCBfX3Zh
cmlhbnRfc3RvcmFnZXsKKyAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpeworICAgICAgICByZXR1cm4gX192
YWw7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlw
ZSYgX192YWwpeworICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7
CisgICAgICAgIHJldHVybiBfX3ZhbDsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7CisgICAgICAgIHJldHVy
biBzdGQ6Om1vdmUoX192YWwpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190
eXBlJil7fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgX19zdG9yYWdl
X3dyYXBwZXJ7CisgICAgdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKF9UeXBl
KSxhbGlnbm9mKF9UeXBlKT46OnR5cGUgX19zdG9yYWdlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9BcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgdm9pZCBfX2NvbnN0cnVjdCh2b2lk
KiBfX3AsX0FyZ3MmJiAuLi4gX19hcmdzKXsKKyAgICAgICAgbmV3IChfX3ApIF9UeXBlKHN0ZDo6
Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9EdW1teSA9IF9UeXBlPgorICAgIF9fc3RvcmFnZV93cmFwcGVyKAorICAgICAgICB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfRHVtbXk+
Ojp2YWx1ZSwKKyAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6OiopKCk+Ojp0eXBlID0g
bnVsbHB0cikgeworICAgICAgX19jb25zdHJ1Y3QoJl9fc3RvcmFnZSk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgorICAgIF9fc3RvcmFnZV93cmFwcGVy
KAorICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0
cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCisgICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVy
OjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBfX3N0b3JhZ2Vfd3JhcHBlcihf
Rmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7CisgICAgICAgIF9fY29uc3RydWN0
KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9B
cmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgICBfVHlwZSYgX19nZXQoKXsKKyAgICAgICAg
cmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdl
KSk7CisgICAgfQorICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKKyAg
ICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQg
Y29uc3QqPigmX19zdG9yYWdlKSk7CisgICAgfQorICAgIHZvaWQgX19kZXN0cm95KCl7CisgICAg
ICAgIF9fZ2V0KCkufl9UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGU+CitzdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKKyAgICBfVHlwZSogX19zdG9y
YWdlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICBjb25zdGV4cHIgX19zdG9y
YWdlX3dyYXBwZXIoX0FyZyYgX19hcmcpOgorICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9CisK
KyAgICBfVHlwZSYgX19nZXQoKXsKKyAgICAgICAgcmV0dXJuICpfX3N0b3JhZ2U7CisgICAgfQor
ICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKKyAgICAgICAgcmV0dXJu
ICpfX3N0b3JhZ2U7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1
Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUsZmFsc2U+eworICAgIHR5cGVkZWYgX19zdG9yYWdl
X3dyYXBwZXI8X1R5cGU+IF9fdHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9f
Z2V0KF9fdHlwZSYgX192YWwpeworICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKKyAgICB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7
CisgICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7CisgICAgfQorICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewor
ICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7CisgICAgICAg
IHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lk
IF9fZGVzdHJveShfX3R5cGUmIF9fdmFsKXsKKyAgICAgICAgX192YWwuX19kZXN0cm95KCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+CitzdHJ1Y3QgX192
YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57CisgICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7CisgICAg
ICAgIHJldHVybiAqX192YWw7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9f
Z2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7CisgICAgICAgIHJldHVybiAqX192YWw7CisgICAgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewor
ICAgICAgICByZXR1cm4gKl9fdmFsOworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpeworICAgICAgICByZXR1cm4gKl9fdmFs
OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+CitzdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8
X1R5cGUmJixfX2I+eworICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBfVHlw
ZSYmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8X1R5cGUmJj4oKl9fdmFsKTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYm
IF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxfVHlwZSYmPigqX192YWwpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3ko
X190eXBlJil7fQorfTsKKwordGVtcGxhdGU8PgordW5pb24gX192YXJpYW50X2RhdGE8PnsKKyAg
ICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKXt9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KK3VuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsKKyAgICB0eXBlbmFtZSBfX3Zhcmlh
bnRfc3RvcmFnZTxfVHlwZT46Ol9fdHlwZSBfX3ZhbDsKKyAgICBzdHJ1Y3QgX19kdW1teV90eXBl
e30gX19kdW1teTsKKworICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgY29uc3RleHByIF9fdmFy
aWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKKyAgICAg
ICAgX192YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9CisKKyAgICBfVHlwZSYg
X19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKKyAgICB9CisgICAgY29uc3RleHByIF9UeXBlJiYg
X19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CisgICAgfQorICAgIGNvbnN0ZXhw
ciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7CisgICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKKyAgICB9Cisg
ICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRf
cnJlZihfX3ZhbCk7CisgICAgfQorICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8
MD4peworICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Cit1bmlvbiBfX3ZhcmlhbnRf
ZGF0YTxfVHlwZSY+eworICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9f
dHlwZSBfX3ZhbDsKKyAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKKworICAgIGNv
bnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX0FyZ3M+CisgICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2lu
ZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKKyAgICAgICAgX192YWwoJnN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLil7fQorCisgICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4
X3Q8MD4peworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQo
X192YWwpOworICAgIH0KKyAgICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4
X3Q8MD4pIGNvbnN0eworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6
X19nZXQoX192YWwpOworICAgIH0KKworICAgIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2lu
ZGV4X3Q8MD4peworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19n
ZXRfcnJlZihfX3ZhbCk7CisgICAgfQorICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihp
bl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIF9f
ZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8
X1R5cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KK3VuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJiY+eworICAgIHR5cGVuYW1lIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX3R5cGUgX192YWw7CisgICAgc3RydWN0IF9fZHVt
bXlfdHlwZXt9IF9fZHVtbXk7CisKKyAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1
bW15KCl7fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICBfX3ZhcmlhbnRfZGF0
YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmcmJiBfX2FyZyk6CisgICAgICAgIF9fdmFsKCZfX2Fy
Zyl7fQorCisgICAgX1R5cGUmJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7CisgICAgfQor
ICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewor
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsK
KyAgICB9CisgICAgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAg
ICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0X3JyZWYoX192YWwp
OworICAgIH0KKyAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4
X3Q8MD4pIGNvbnN0eworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46
Ol9fZ2V0X3JyZWYoX192YWwpOworICAgIH0KKyAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9p
bmRleF90PDA+KXsKKyAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZGVzdHJv
eShfX3ZhbCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUg
Li4uIF9SZXN0PgordW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+eworICAgIF9f
dmFyaWFudF9kYXRhPF9IZWFkPiBfX2hlYWQ7CisgICAgX192YXJpYW50X2RhdGE8X1Jlc3QuLi4+
IF9fcmVzdDsKKworICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOgorICAgICAgICBfX2hl
YWQoKXt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgY29uc3RleHBy
IF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToK
KyAgICAgICAgX19oZWFkKGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
Lil7fQorICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAg
IGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3Mm
JiAuLi4gX19hcmdzKToKKyAgICAgICAgX19yZXN0KGluX3BsYWNlPF9JbmRleC0xPixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KKworICAgIF9IZWFkJiBfX2dldChpbl9wbGFjZV9p
bmRleF90PDA+KXsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7Cisg
ICAgfQorCisgICAgY29uc3RleHByIF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90
PDA+KXsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKKyAg
ICB9CisgICAgCisgICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiBfX2dldChpbl9wbGFjZV9pbmRl
eF90PDA+KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7
CisgICAgfQorCisgICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFj
ZV9pbmRleF90PDA+KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGlu
X3BsYWNlPDA+KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KKyAg
ICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19n
ZXQoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7CisgICAgICAgIHJldHVybiBf
X3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxz
aXplX3QgX0luZGV4PgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCisgICAgICAgIGluX3BsYWNlX2lu
ZGV4X3Q8X0luZGV4Pil7CisgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFj
ZTxfSW5kZXgtMT4pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4Pgor
ICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVz
dC4uLj46Ol9fdHlwZSYgX19nZXQoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pikg
Y29uc3R7CisgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgorICAgIGNvbnN0ZXhwciBjb25z
dCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9f
Z2V0X3JyZWYoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7CisgICAg
ICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOworICAgIH0K
KyAgICAKKyAgICAKKyAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAg
ICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7CisgICAgfQorICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXg+CisgICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDxfSW5k
ZXg+KXsKKyAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4pOworICAg
IH0KK307CisKKwordGVtcGxhdGU8cHRyZGlmZl90Li4uIF9JbmRpY2VzPgorc3RydWN0IF9faW5k
ZXhfc2VxdWVuY2V7CisgICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLHNp
emVvZi4uLihfSW5kaWNlcyk+IF9fbmV4dDsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBf
X2xlbmd0aD1zaXplb2YuLi4oX0luZGljZXMpOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KK3N0cnVjdCBfX3R5cGVfaW5kaWNlczsKKwordGVtcGxhdGU8Pgorc3RydWN0IF9f
dHlwZV9pbmRpY2VzPD57CisgICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5
cGU+eworICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTwwPiBfX3R5cGU7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+CitzdHJ1Y3QgX190eXBlX2lu
ZGljZXM8X1R5cGUsX1Jlc3QuLi4+eworICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGlj
ZXM8X1Jlc3QuLi4+OjpfX3R5cGU6Ol9fbmV4dCBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudD4KK3N0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczx2YXJpYW50PF9UeXBl
cy4uLj4+eworICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6
X190eXBlIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAorICAgICAg
ICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+
OjpfX3R5cGU+CitzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK3N0cnVjdCBfX21vdmVf
Y29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+
PnsKKyAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJp
YW50Jik7CisgICAgCisgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KKyAgICBzdGF0aWMg
dm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoCisgICAgICAgIF9WYXJpYW50ICogX19saHMsX1Zh
cmlhbnQmIF9fcmhzKXsKKyAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1
Y3Q8X0luZGV4PigKKyAgICAgICAgICAgIHN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4o
X0luZGljZXMpXTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAu
Li4gX0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6CitfX2Z1bmNfdHlwZQorX19t
b3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj46Ol9fYXBwbHlbCisgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09eworICAgICAgICAmX19t
b3ZlX2NvbnN0cnVjdF9mdW5jPF9JbmRpY2VzPi4uLgorICAgIH07CisKK3RlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LAorICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJp
YW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CitzdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90
YWJsZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KK3N0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+PnsKKyAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSko
X1ZhcmlhbnQqLF9WYXJpYW50Jik7CisgICAgCisgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KKyAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCisgICAgICAgIF9WYXJpYW50
ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKKyAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1z
dGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Qg
X19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citjb25zdCB0eXBlbmFt
ZSBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+Pjo6CitfX2Z1bmNfdHlwZQorX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCisgICAgc2l6ZW9mLi4uKF9J
bmRpY2VzKV09eworICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgorICAg
IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAorICAgICAgICAgdHlwZW5hbWUgX0lu
ZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CitzdHJ1
Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK3N0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3Rh
YmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKKyAgICB0eXBlZGVm
IHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Cisg
ICAgCisgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KKyAgICBzdGF0aWMgdm9pZCBfX2Nv
cHlfY29uc3RydWN0X2Z1bmMoCisgICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29u
c3QmIF9fcmhzKXsKKyAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8
X0luZGV4PigKKyAgICAgICAgICAgIGdldDxfSW5kZXg+KF9fcmhzKSk7CisgICAgfQorCisgICAg
c3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgor
Y29uc3QgdHlwZW5hbWUgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgorX19mdW5jX3R5cGUKK19fY29weV9jb25zdHJ1Y3Rf
b3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5
WworICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9fY29weV9jb25zdHJ1Y3Rf
ZnVuYzxfSW5kaWNlcz4uLi4KKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwK
KyAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9W
YXJpYW50Pjo6X190eXBlPgorc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+CitzdHJ1Y3QgX19j
b3B5X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
Pj57CisgICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFy
aWFudCBjb25zdCYpOworICAgIAorICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+CisgICAg
c3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9mdW5jKAorICAgICAgICBfVmFyaWFudCAqIF9fbGhz
LF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7CisgICAgICAgIGdldDxfSW5kZXg+KCpfX2xocyk9Z2V0
PF9JbmRleD4oX19yaHMpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK2NvbnN0IHR5cGVuYW1lIF9fY29weV9hc3Np
Z25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKK19f
ZnVuY190eXBlCitfX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKKyAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Cisg
ICAgICAgICZfX2NvcHlfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCisgICAgfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCisgICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KK3N0cnVjdCBfX2Rlc3Ryb3lf
b3BfdGFibGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+CitzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+PnsKKyAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSko
X1ZhcmlhbnQqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgorICAgIHN0
YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKAorICAgICAgICBfVmFyaWFudCAqIF9fc2VsZil7Cisg
ICAgICAgIGlmKF9fc2VsZi0+X19pbmRleD49MCl7CisgICAgICAgICAgICBfX3NlbGYtPl9fc3Rv
cmFnZS5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Citjb25zdCB0eXBlbmFtZSBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjoKK19fZnVuY190eXBlCitfX2Rlc3Ryb3lfb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WworICAgIHNpemVv
Zi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9fZGVzdHJveV9mdW5jPF9JbmRpY2VzPi4uLgor
ICAgIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAorICAgICAgICAgdHlwZW5hbWUg
X0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Citz
dHJ1Y3QgX19zd2FwX29wX3RhYmxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzPgorc3RydWN0IF9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57CisgICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19m
dW5jX3R5cGUpKF9WYXJpYW50JixfVmFyaWFudCYpOworICAgIAorICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+CisgICAgc3RhdGljIHZvaWQgX19zd2FwX2Z1bmMoCisgICAgICAgIF9WYXJp
YW50ICYgX19saHMsX1ZhcmlhbnQgJiBfX3Jocyl7CisgICAgICAgIHN3YXAoZ2V0PF9JbmRleD4o
X19saHMpLGdldDxfSW5kZXg+KF9fcmhzKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IF9f
ZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgorY29uc3QgdHlwZW5hbWUg
X19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6
CitfX2Z1bmNfdHlwZQorX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+Pjo6X19hcHBseVsKKyAgICBzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAg
ICAgICZfX3N3YXBfZnVuYzxfSW5kaWNlcz4uLi4KKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCwKKyAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFu
dF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgorc3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citz
dHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57CisgICAgdHlwZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSko
X1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7CisgICAgCisgICAgdGVtcGxhdGU8cHRy
ZGlmZl90IF9JbmRleD4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19lcXVhbGl0eV9jb21w
YXJlX2Z1bmMoCisgICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYg
X19yaHMpeworICAgICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPT1nZXQ8X0luZGV4Pihf
X3Jocyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBl
IF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAgICAgICZfX2Vx
dWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KKyAgICB9OworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK2NvbnN0ZXhwciB0eXBl
bmFtZSBfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+Pjo6CitfX2NvbXBhcmVfZnVuY190eXBlCitfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJlWwor
ICAgIHNpemVvZi4uLihfSW5kaWNlcyldOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwK
KyAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9W
YXJpYW50Pjo6X190eXBlPgorc3RydWN0IF9fbGVzc190aGFuX29wX3RhYmxlOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgorc3RydWN0IF9fbGVz
c190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
KyAgICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBj
b25zdCYsX1ZhcmlhbnQgY29uc3QmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4PgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2xlc3NfdGhhbl9jb21wYXJlX2Z1bmMo
CisgICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewor
ICAgICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPGdldDxfSW5kZXg+KF9fcmhzKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIF9fY29tcGFyZV9mdW5jX3R5cGUgX19sZXNzX3Ro
YW5fY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAgICAgICZfX2xlc3NfdGhhbl9j
b21wYXJlX2Z1bmM8X0luZGljZXM+Li4uCisgICAgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19s
ZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+
OjoKK19fY29tcGFyZV9mdW5jX3R5cGUKK19fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19sZXNzX3RoYW5fY29tcGFyZVsKKyAgICBz
aXplb2YuLi4oX0luZGljZXMpXTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+CitzdHJ1
Y3QgX192YXJpYW50X3N0b3JhZ2VfdHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX0Rlcml2ZWQs
Ym9vbCBfX3RyaXZpYWxfZGVzdHJ1Y3Rvcj4KK3N0cnVjdCBfX3ZhcmlhbnRfYmFzZQoreworICAg
IH5fX3ZhcmlhbnRfYmFzZSgpeworICAgICAgICBzdGF0aWNfY2FzdDxfRGVyaXZlZCo+KHRoaXMp
LT5fX2Rlc3Ryb3lfc2VsZigpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9EZXJp
dmVkPgorc3RydWN0IF9fdmFyaWFudF9iYXNlPF9EZXJpdmVkLHRydWU+eworfTsKKworCit0ZW1w
bGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAorICAgICAg
ICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX2FsbF9pbmRp
Y2VzX2hlbHBlcjsKKwordGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcywKKyAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0
cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKKyAgICBfT2Zmc2V0LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+LAorICAgIF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAorICAgICAgICBfT2Zmc2V0KzEsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLixfT2Zmc2V0PixfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZQorICAg
ICAgICBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
Q3VycmVudFNlcXVlbmNlLAorICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQs
X0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKKyAgICAgICAgX09mZnNldCsxLF9DdXJyZW50U2Vx
dWVuY2UsX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOworfTsKKwordGVtcGxhdGU8cHRy
ZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4K
K3N0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5
cGU+eworICAgIHR5cGVkZWYgX0N1cnJlbnRTZXF1ZW5jZSBfX3R5cGU7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fYWxsX2luZGlj
ZXN7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKKyAgICAgICAg
MCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfU2VxdWVuY2VzPgorc3RydWN0IF9fY29tYmluZV9z
ZXF1ZW5jZXM7CisKK3RlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXMxLHB0cmRpZmZfdCAu
Li4gX0luZGljZXMyPgorc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8CisgICAgX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlczEuLi4+LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMyLi4uPj57Cisg
ICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLixfSW5kaWNlczIuLi4+IF9f
dHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSAuLi4gX1Jl
c3Q+CitzdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczxfU2VxdWVuY2UsX1Jlc3QuLi4+eworICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKKyAgICAgICAgX1NlcXVlbmNl
LAorICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPF9SZXN0Li4uPjo6X190eXBl
Pjo6X190eXBlIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JbmRpY2VzPgorc3Ry
dWN0IF9fZmlyc3RfaW5kZXg7CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfRmlyc3RJbmRleCxwdHJk
aWZmX3QgLi4uIF9SZXN0Pgorc3RydWN0IF9fZmlyc3RfaW5kZXg8X19pbmRleF9zZXF1ZW5jZTxf
Rmlyc3RJbmRleCxfUmVzdC4uLj4+eworICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9f
dmFsdWU9X0ZpcnN0SW5kZXg7Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBl
bmFtZSBfQ3VycmVudFNlcXVlbmNlLAorICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KK3N0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI7CisKK3Rl
bXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSBfVHlw
ZT4KK3N0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8CisgICAgX09mZnNldCxf
U2VxdWVuY2UsX1R5cGU+eworICAgIHR5cGVkZWYgX1NlcXVlbmNlIF9fdHlwZTsKK307CisKK3Rl
bXBsYXRlPGJvb2wgX0FjY2VwdCxwdHJkaWZmX3QgX0VudHJ5Pgorc3RydWN0IF9fc2VxdWVuY2Vf
b3JfZW1wdHl7CisgICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOworfTsKKwor
dGVtcGxhdGU8cHRyZGlmZl90IF9FbnRyeT4KK3N0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5PHRy
dWUsX0VudHJ5PnsKKyAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0VudHJ5PiBfX3R5cGU7
Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVl
bmNlLAorICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgorc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKKyAgICBfT2Zm
c2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+eworICAgIHR5cGVkZWYK
KyAgICB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8CisgICAgICAgIF9P
ZmZzZXQrMSwKKyAgICAgICAgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKKyAgICAgICAg
ICAgIF9DdXJyZW50U2VxdWVuY2UsCisgICAgICAgICAgICB0eXBlbmFtZSBfX3NlcXVlbmNlX29y
X2VtcHR5PAorICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfSGVhZCxfVHlw
ZT46OnZhbHVlLAorICAgICAgICAgICAgICAgIF9PZmZzZXQ+OjpfX3R5cGU+OjpfX3R5cGUsCisg
ICAgICAgIF9UeXBlLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXN7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19o
ZWxwZXI8CisgICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9f
dHlwZSBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgorc3RydWN0IF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3R7CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX2RpcmVjdF9t
YXRjaGVzOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKKyAgICAgICAgdHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8CisgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9yZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCisgICAgICAgICAgICA+Ojp0eXBlLF9UeXBlcy4uLj46
Ol9fdHlwZSBfX3ZhbHVlX21hdGNoZXM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRp
Y2VzPAorICAgICAgICBfVHlwZSwKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8
CisgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGVzPjo6dHlw
ZQorICAgICAgICAgICAgPjo6dHlwZS4uLj46Ol9fdHlwZSBfX3JyZWZfbWF0Y2hlczsKKworICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8X1R5cGUsX1R5cGVzLi4u
Pjo6X190eXBlCisgICAgX19jb25zdHJ1Y3RpYmxlczsKKworICAgIHN0YXRpY19hc3NlcnQoCisg
ICAgICAgIChfX2RpcmVjdF9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAorICAgICAgICAoX192YWx1
ZV9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAorICAgICAgICAoX19ycmVmX21hdGNoZXM6Ol9fbGVu
Z3RoPjApIHx8CisgICAgICAgIChfX2NvbnN0cnVjdGlibGVzOjpfX2xlbmd0aD09MSksCisgICAg
ICAgICJGb3IgY29udmVyc2lvbiBjb25zdHJ1Y3Rpb24gb2YgdmFyaWFudHMsIGV4YWN0bHkgb25l
IHR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIik7CisgICAgCisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAorICAgICAgICBfX2RpcmVjdF9tYXRjaGVzLF9fdmFsdWVf
bWF0Y2hlcyxfX3JyZWZfbWF0Y2hlcywKKyAgICAgICAgX19jb25zdHJ1Y3RpYmxlcz46Ol9fdHlw
ZSBfX2FsbF9tYXRjaGVzOworICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9f
dmFsdWU9X19maXJzdF9pbmRleDxfX2FsbF9tYXRjaGVzPjo6X192YWx1ZTsKK307CisKK3N0cnVj
dCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcnsKKyAgICB0ZW1wbGF0ZTwKKyAgICAgICAgcHRy
ZGlmZl90IF9JbmRleCwKKyAgICAgICAgYm9vbCBfX2NvbnN0cnVjdF9kaXJlY3RseSwKKyAgICAg
ICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAorICAgICAgICBib29sIF9f
b3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+CisgICAgc3RydWN0IF9faGVscGVyOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCisgICAgICAgICAgICAgdHlwZW5hbWUgX0lu
ZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CisgICAg
c3RydWN0IF9fb3BfdGFibGU7Cit9OworCit0ZW1wbGF0ZTwKKyAgICBwdHJkaWZmX3QgX0luZGV4
LAorICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KK3N0cnVjdCBfX3Jl
cGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8CisgICAgX0luZGV4LGZhbHNlLHRydWUs
X19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgc3RhdGljIHZvaWQgX190cmFtcG9s
aW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKKyAgICAgICAgX192LnRlbXBs
YXRlIF9fdHdvX3N0YWdlX3JlcGxhY2U8X0luZGV4PihfX2FyZ3MuLi4pOworICAgIH0KK307CisK
K3RlbXBsYXRlPAorICAgIHB0cmRpZmZfdCBfSW5kZXgsCisgICAgYm9vbCBfX2luZGV4ZWRfdHlw
ZV9oYXNfbm90aHJvd19tb3ZlLAorICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3df
bW92ZT4KK3N0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8CisgICAg
X0luZGV4LHRydWUsX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKKyAgICBfX290aGVy
X3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1Zh
cmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBfX3YudGVtcGxhdGUgX19k
aXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Cisg
ICAgfQorfTsKKworCit0ZW1wbGF0ZTwKKyAgICBwdHJkaWZmX3QgX0luZGV4Pgorc3RydWN0IF9f
cmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKKyAgICBfSW5kZXgsZmFsc2UsZmFs
c2UsdHJ1ZT57CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4g
X0FyZ3M+CisgICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKKyAgICAgICAgX192LnRlbXBsYXRlIF9fbG9jYWxfYmFja3VwX3JlcGxh
Y2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KK307CisK
K3RlbXBsYXRlPAorICAgIHB0cmRpZmZfdCBfSW5kZXg+CitzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9faGVscGVyPAorICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAg
c3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdz
KXsKKyAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+CitzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+eworICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUpKF9WYXJp
YW50KixfVmFyaWFudCYpOworICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fY29weV9mdW5jX3R5
cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOworICAgIAorICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2Fzc2lnbl9mdW5jKAorICAgICAg
ICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7CisgICAgICAgIF9fbGhzLT50ZW1w
bGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9f
cmhzKSkpOworICAgICAgICBfX3Jocy5fX2Rlc3Ryb3lfc2VsZigpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+CisgICAgc3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9m
dW5jKAorICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Cisg
ICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oZ2V0PF9J
bmRleD4oX19yaHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IF9fbW92ZV9mdW5j
X3R5cGUgX19tb3ZlX2Fzc2lnbltzaXplb2YuLi4oX0luZGljZXMpXTsKKyAgICBzdGF0aWMgY29u
c3QgX19jb3B5X2Z1bmNfdHlwZSBfX2NvcHlfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
K2NvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAor
ICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19tb3ZlX2Z1bmNf
dHlwZQorX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8CisgICAgX1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfYXNzaWduWworICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNl
cz4uLi4KKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgorY29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
b3BfdGFibGU8CisgICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+Ojpf
X2NvcHlfZnVuY190eXBlCitfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwK
KyAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fY29weV9hc3Np
Z25bCisgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09eworICAgICAgICAmX19jb3B5X2Fzc2lnbl9m
dW5jPF9JbmRpY2VzPi4uLgorICAgIH07CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRy
ZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CitzdHJ1Y3QgX19iYWNrdXBfc3Rv
cmFnZV9vcHN7CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAorICAgICAg
ICBfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpeworICAgICAgICBuZXcoX19k
ZXN0KSBfU3RvcmFnZSgKKyAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sCisgICAgICAgICAg
ICBzdGQ6Om1vdmUoX19zb3VyY2UuX19nZXQoaW5fcGxhY2U8X0luZGV4PikpKTsKKyAgICB9Cisg
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7CisgICAgICAg
IF9fb2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7CisgICAgfTsKK307CisKK3RlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CitzdHJ1Y3QgX19iYWNrdXBf
c3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57CisgICAgc3RhdGljIHZvaWQgX19t
b3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSl7
CisgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOworICAgIH07Cisg
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7CisgICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOworICAgIH07Cit9OworCit0ZW1w
bGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSx0eXBlbmFtZSBfSW5k
aWNlcz4KK3N0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlOworCit0ZW1wbGF0ZTxwdHJk
aWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
Pgorc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8CisgICAgX01hc2tJbmRleCxfU3Rv
cmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Cit7CisgICAgdHlwZWRlZiB2b2lk
ICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNl
KTsKKyAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFnZSAqIF9f
b2JqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgorICAgIHN0cnVjdCBfX2hl
bHBlcnsKKyAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX01hc2tJ
bmRleCxfU3RvcmFnZT4gX19vcHM7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBfX21vdmVf
ZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07CisgICAgc3RhdGljIGNv
bnN0IF9fZGVzdHJveV9mdW5jX3R5cGUgX19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMp
XTsKK307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdl
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdl
X29wX3RhYmxlPAorICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNfdHlwZQorX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwK
KyAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46
Ol9fbW92ZV9vcHNbCisgICAgICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9f
aGVscGVyPF9JbmRpY2VzPjo6X19vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgorICAgIH07
CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRp
ZmZfdCAuLi4gX0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3Rh
YmxlPAorICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4gPjo6X19kZXN0cm95X2Z1bmNfdHlwZQorX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKKyAg
ICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9f
ZGVzdHJveV9vcHNbCisgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09eworICAgICAgICAmX19oZWxw
ZXI8X0luZGljZXM+OjpfX29wczo6X19kZXN0cm95X2Z1bmMuLi4KKyAgICB9OworCit0ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19iYWNrdXBf
c3RvcmFnZXsKKyAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdl
X3R5cGU7CisKKyAgICB0eXBlZGVmIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8CisgICAgICAg
IF9JbmRleCxfX3N0b3JhZ2VfdHlwZSx0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+
OjpfX3R5cGU+CisgICAgX19vcF90YWJsZV90eXBlOworCisgICAgcHRyZGlmZl90IF9fYmFja3Vw
X2luZGV4OworICAgIF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZTsKKyAgICBfX3N0b3Jh
Z2VfdHlwZSBfX2JhY2t1cDsKKworICAgIF9fYmFja3VwX3N0b3JhZ2UocHRyZGlmZl90IF9fbGl2
ZV9pbmRleF8sX19zdG9yYWdlX3R5cGUmIF9fbGl2ZV9zdG9yYWdlXyk6CisgICAgICAgIF9fYmFj
a3VwX2luZGV4KF9fbGl2ZV9pbmRleF8pLF9fbGl2ZV9zdG9yYWdlKF9fbGl2ZV9zdG9yYWdlXyl7
CisgICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKKyAgICAgICAgICAgIF9fb3BfdGFibGVf
dHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fYmFj
a3VwLF9fbGl2ZV9zdG9yYWdlKTsKKyAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0
cm95X29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIF9fZGVzdHJveSgpeworICAgICAgICBpZihf
X2JhY2t1cF9pbmRleD49MCkKKyAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95
X29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fYmFja3VwKTsKKyAgICAg
ICAgX19iYWNrdXBfaW5kZXg9LTE7CisgICAgfQorICAgIAorICAgIH5fX2JhY2t1cF9zdG9yYWdl
KCl7CisgICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKKyAgICAgICAgICAgIF9fb3BfdGFi
bGVfdHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9f
bGl2ZV9zdG9yYWdlLF9fYmFja3VwKTsKKyAgICAgICAgICAgIF9fZGVzdHJveSgpOworICAgICAg
ICB9CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jl
c3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9S
ZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19hbGxfbW92ZV9jb25z
dHJ1Y3RpYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KK3N0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9tb3ZlX2Fzc2ln
bmFibGU8X0hlYWQsX1Jlc3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
PXN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9hc3Np
Z25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19hbGxf
bW92ZV9hc3NpZ25hYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9jb3B5
X2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlPXN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29w
eV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
X19hbGxfY29weV9hc3NpZ25hYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKworbmFtZXNw
YWNlIF9fc3dhcF90ZXN0X2RldGFpbHsKK3VzaW5nIHN0ZDo6c3dhcDsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX090aGVyPgorc3RydWN0IF9fc3dhcF9yZXN1bHR7fTsKKwordGVtcGxhdGU8dHlwZW5h
bWU+CitzdGF0aWMgY2hhciBfX3Rlc3QoLi4uKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+
CitzdGF0aWMgc3RkOjpwYWlyPGNoYXIsIHN0ZDo6cGFpcjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRl
Y2x0eXBlKAorICAgIHN3YXAoc3RkOjpkZWNsdmFsPF9PdGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxf
T3RoZXIgJj4oKSkpPj4+CitfX3Rlc3QoX090aGVyICopOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZhbHVlID0KKyAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2RldGFpbDo6X190ZXN0PF9U
eXBlPigwKSkgIT0gMTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1
Y3QgX19hbGxfc3dhcHBhYmxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+CitzdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgoreworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46OnZhbHVl
ICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOworfTsKKwordGVtcGxhdGU8Pgor
c3RydWN0IF9fYWxsX3N3YXBwYWJsZTw+OgorICAgIHN0ZDo6dHJ1ZV90eXBle307CisKK3RlbXBs
YXRlPGJvb2wgX01vdmVDb25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGx7fTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+eworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQmJj4o
KSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3Qu
Li4+Ojp2YWx1ZTsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFs
dWU9dHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0OgorX19ub2V4Y2VwdF92YXJpYW50X21vdmVf
Y29uc3RydWN0X2ltcGw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LF9UeXBlcy4uLj4KK3t9OworCit0ZW1wbGF0ZTxib29sIF9Nb3ZlQXNzaWduYWJsZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBs
e307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+CitzdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0
Li4uPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKyAgICAgICAgc3RkOjpp
c19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmCisgICAgICAgIHN0ZDo6
aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJgorICAgICAgICBf
X25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVl
OworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2ln
bl9pbXBsPHRydWU+eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOworfTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KK3N0cnVjdCBfX25vZXhjZXB0X3Zhcmlh
bnRfbW92ZV9hc3NpZ24KKyAgICA6IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBs
PAorICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgor
ICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
CisgICAgICAgICAgX1R5cGVzLi4uPiB7fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBl
cz4KK3N0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU8X0hlYWQsX1Jlc3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0
ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9jb25z
dHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19h
bGxfY29weV9jb25zdHJ1Y3RpYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxh
dGU8Ym9vbCBfQ29weUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbHt9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+CitzdHJ1Y3QgX19ub2V4Y2VwdF92
YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZh
bDxfSGVhZCBjb25zdCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZT57Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2Nv
bnN0cnVjdDoKK19fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9f
YWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Cit7fTsK
KwordGVtcGxhdGU8Ym9vbCBfQ29weU5vbl9Db25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+CitzdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9p
bXBse307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1
ZSxfSGVhZCxfUmVzdC4uLj57CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhj
ZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRf
bm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOworfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9j
b25zdHJ1Y3RfaW1wbDx0cnVlPnsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19ub2V4Y2Vw
dF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDoKK19fbm9leGNlcHRfdmFyaWFudF9u
b25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgore307CisKK3RlbXBsYXRlPGJvb2wgX1N3YXBwYWJs
ZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2lt
cGx7fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KK3N0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9IZWFkLCBfUmVzdC4uLj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9CisgICAgICAgIG5vZXhjZXB0KHN3
YXAoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSxzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgJiYKKyAg
ICAgICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVl
OworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8
dHJ1ZT57CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2Fw
OgorX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsX1R5cGVzLi4uPgore307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
CitjbGFzcyB2YXJpYW50OgorICAgICAgICBwcml2YXRlIF9fdmFyaWFudF9iYXNlPAorICAgIHZh
cmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
Ol9fdmFsdWU+Cit7CisgICAgdHlwZWRlZiBfX3ZhcmlhbnRfYmFzZTx2YXJpYW50PF9UeXBlcy4u
Lj4sX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPiBfX2Jh
c2VfdHlwZTsKKyAgICBmcmllbmQgX19iYXNlX3R5cGU7CisgICAgZnJpZW5kIHN0cnVjdCBfX2Nv
cHlfY29uc3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OworICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5
X2Fzc2lnbl9vcF90YWJsZTx2YXJpYW50PjsKKyAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9jb25z
dHJ1Y3Rfb3BfdGFibGU8dmFyaWFudD47CisgICAgZnJpZW5kIHN0cnVjdCBfX21vdmVfYXNzaWdu
X29wX3RhYmxlPHZhcmlhbnQ+OworICAgIGZyaWVuZCBzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxl
PHZhcmlhbnQ+OworICAgIAorICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlczI+CisgICAgZnJpZW5kIHN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7CisKKyAg
ICBmcmllbmQgc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOworCisgICAgdHlwZWRl
ZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOworICAgIF9fc3RvcmFn
ZV90eXBlIF9fc3RvcmFnZTsKKyAgICB0eXBlbmFtZSBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxzaXpl
b2YgLi4uIChfVHlwZXMpPjo6X190eXBlIF9faW5kZXg7CisKKyAgICB0ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBzaXplX3QgX19lbXBsYWNlX2NvbnN0cnVj
dChfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBuZXcoJl9fc3RvcmFnZSkgX19zdG9yYWdl
X3R5cGUoCisgICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4o
X19hcmdzKS4uLik7CisgICAgICAgIHJldHVybiAgX0luZGV4OworICAgIH0KKyAgICAKKyAgICB2
b2lkIF9fZGVzdHJveV9zZWxmKCl7CisgICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPHZhcmlh
bnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMpOworICAgICAgICBfX2luZGV4PS0xOworICAgIH0K
KyAgICAKKyAgICBwdHJkaWZmX3QgX19tb3ZlX2NvbnN0cnVjdCh2YXJpYW50JiBfX290aGVyKXsK
KyAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwor
ICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtfX290aGVy
X2luZGV4XSh0aGlzLF9fb3RoZXIpOworICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7
CisgICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OworICAgIH0KKworICAgIHB0cmRpZmZfdCBf
X2NvcHlfY29uc3RydWN0KHZhcmlhbnQgY29uc3QmIF9fb3RoZXIpeworICAgICAgICBwdHJkaWZm
X3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7CisgICAgICAgIGlmKF9fb3Ro
ZXJfaW5kZXg9PS0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBfX2NvcHlfY29u
c3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19v
dGhlcik7CisgICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OworICAgIH0KKworICAgIHRlbXBs
YXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAgIHZvaWQgX19yZXBsYWNl
X2NvbnN0cnVjdChfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190aGlzX3R5cGU7Cisg
ICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKKyAgICAgICAgICAg
IF9JbmRleCwKKyAgICAgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGU8X190
aGlzX3R5cGUsX0FyZ3MuLi4+OjpfX3ZhbHVlIHx8CisgICAgICAgICAgICAoc2l6ZW9mLi4uKF9U
eXBlcyk9PTEpLAorICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9fdGhpc190eXBlPjo6X192YWx1ZSwKKyAgICAgICAgICAgIF9fb3RoZXJfc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwKKyAgICAgICAgICAgICAgICBfSW5kZXgsX1R5cGVz
Li4uPjo6X192YWx1ZQorICAgICAgICAgICAgPjo6X190cmFtcG9saW5lKCp0aGlzLHN0ZDo6Zm9y
d2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8c2l6ZV90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgdm9pZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9B
cmdzJiYgLi4uIF9fYXJncyl7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7CisgICAgICAgIF9fdmFyaWFudF9k
YXRhPF9fdHlwZT4gX19sb2NhbCgKKyAgICAgICAgICAgIGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7CisgICAgICAg
IF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKKyAgICAgICAgICAgIHN0ZDo6bW92ZShfX2xv
Y2FsLl9fZ2V0KGluX3BsYWNlPDA+KSkpOworICAgICAgICBfX2luZGV4PV9JbmRleDsKKyAgICAg
ICAgX19sb2NhbC5fX2Rlc3Ryb3koaW5fcGxhY2U8MD4pOworICAgIH0KKworICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAgIHZvaWQgX19sb2NhbF9iYWNr
dXBfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBfX2JhY2t1cF9zdG9yYWdl
PF9JbmRleCxfVHlwZXMuLi4+IF9fYmFja3VwKF9faW5kZXgsX19zdG9yYWdlKTsKKyAgICAgICAg
X19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
Lik7CisgICAgICAgIF9faW5kZXg9X0luZGV4OworICAgICAgICBfX2JhY2t1cC5fX2Rlc3Ryb3ko
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X0FyZ3M+CisgICAgdm9pZCBfX2RpcmVjdF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncykgewor
ICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOworICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9J
bmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICAgICAgX19pbmRleD1f
SW5kZXg7CisgICAgfQorCisgICAgc3RydWN0IF9fcHJpdmF0ZV90eXBle307CisKK3B1YmxpYzoK
KyAgICBjb25zdGV4cHIgdmFyaWFudCgpCisgICAgICAgIG5vZXhjZXB0KG5vZXhjZXB0KHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKKyAgICAgICAgX19z
dG9yYWdlKGluX3BsYWNlPDA+KSwKKyAgICAgICAgX19pbmRleCgwKQorICAgIHt9CisKKyAgICBj
b25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSYmIF9fb3RoZXIpCisgICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3Ry
dWN0PF9UeXBlcy4uLj46OnZhbHVlKToKKyAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0
KF9fb3RoZXIpKQorICAgIHt9CisKKyAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6
OmNvbmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
dmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CisgICAgCisg
ICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46
OnR5cGUmIF9fb3RoZXIpCisgICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25z
dF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CisgICAgICAgIF9faW5kZXgoX19j
b3B5X2NvbnN0cnVjdChfX290aGVyKSkKKyAgICB7fQorCisgICAgY29uc3RleHByIHZhcmlhbnQo
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlLHZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxl
dGU7CisKKyAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9f
YWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9fcHJpdmF0
ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKKyAgICBub2V4Y2VwdChfX25vZXhjZXB0X3Zh
cmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgorICAgICAgICBf
X2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCisgICAge30KKworICAgIGNvbnN0ZXhw
ciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25z
dCYgX19vdGhlcik9ZGVsZXRlOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfQXJncz4KKyAgICBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudChpbl9wbGFj
ZV90eXBlX3Q8X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6CisgICAgICAgIF9fc3RvcmFnZSgK
KyAgICAgICAgICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlPiwKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisgICAg
ICAgIF9faW5kZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCisgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJn
cy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAg
ICBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0Fy
Z3MmJiAuLi4gX19hcmdzKToKKyAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9JbmRleD4sc3Rk
Ojpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKKyAgICAgICAgX19pbmRleChfSW5kZXgpCisg
ICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlLF9BcmdzLi4uPjo6dmFs
dWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KKyAgICBjb25zdGV4cHIgdmFyaWFudChfVHlw
ZSYmIF9feCk6CisgICAgICAgIF9fc3RvcmFnZSgKKyAgICAgICAgICAgIGluX3BsYWNlPAorICAg
ICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlPiwKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCisgICAgICAgIF9f
aW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVl
KQorICAgIHt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSwKKyAgICAgICAgICAgICB0
eXBlbmFtZSBfRW5hYmxlPQorICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAor
ICAgICAgICAgICAgICAgICAoX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjppbml0aWFsaXpl
cl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCisgICAgICAgICAg
ICAgPjo6dHlwZT4KKyAgICBjb25zdGV4cHIgdmFyaWFudChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
X1R5cGU+IF9feCk6CisgICAgICAgIF9fc3RvcmFnZSgKKyAgICAgICAgICAgIGluX3BsYWNlPAor
ICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWU+LAorICAgICAgICAgICAgX194KSwKKyAgICAg
ICAgX19pbmRleChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxfVHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZSkKKyAgICB7fQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgorICAgIHZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYmIF9feCl7Cisg
ICAgICAgIGNvbnN0ZXhwciBzaXplX3QgX0luZGV4PQorICAgICAgICAgICAgX190eXBlX2luZGV4
X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOworICAgICAgICBpZihfSW5k
ZXg9PV9faW5kZXgpeworICAgICAgICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0ZDo6Zm9yd2Fy
ZDxfVHlwZT4oX194KTsKKyAgICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgX19y
ZXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZhcmlhbnQgJm9wZXJh
dG9yPSgKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKyAgICAgICAgICAgICEo
X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCisgICAgICAgICAg
ICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgorICAgICAg
ICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAorICAgICAg
ICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSA9IGRl
bGV0ZTsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpj
b25kaXRpb25hbDwKKyAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBl
Pjo6dHlwZSBjb25zdCAmX19vdGhlcikgeworICAgICAgICBpZiAoX19vdGhlci52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpeworICAgICAgICAg
ICAgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlz
LF9fb3RoZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAgICAgICAgICBfX3JlcGxh
Y2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTx2YXJpYW50Pjo6X19jb3B5X2Fzc2lnblsK
KyAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICB2YXJpYW50ICZvcGVyYXRvcj0o
CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8CisgICAgICAgICAgICAhKF9fYWxs
X2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKKyAgICAgICAgICAg
ICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKKyAgICAgICAgICAg
IHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7CisKKyAg
ICB2YXJpYW50ICZvcGVyYXRvcj0oCisgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
CisgICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKKyAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKKyAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsCisgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9f
b3RoZXIpIHsKKyAgICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewor
ICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
KF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7CisgICAgICAgICAgICBfX2NvcHlfYXNzaWduX29w
X3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVy
OjpfX29wX3RhYmxlPHZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWworICAgICAgICAgICAgICAgIF9f
b3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAgICAgICAgdHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDwKKyAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlICYmCisgICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCisgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlw
ZT46OnR5cGUgJiZfX290aGVyKSA9IGRlbGV0ZTsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgK
KyAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAm
JgorICAgICAgICAgICAgX19vdGhlcikgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X21vdmVf
YXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7CisgICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVz
c19ieV9leGNlcHRpb24oKSkgeworICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7CisgICAgICAg
ICAgICBfX21vdmVfYXNzaWduX29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRo
aXMsX19vdGhlcik7CisgICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVs
cGVyOjpfX29wX3RhYmxlPHZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWworICAgICAgICAgICAgICAg
IF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9BcmdzPgorICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAg
ICBfX2RpcmVjdF9yZXBsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVl
PigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAg
IHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBfX2RpcmVjdF9yZXBs
YWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisgICAg
CisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhj
ZXB0eworICAgICAgICByZXR1cm4gX19pbmRleD09LTE7CisgICAgfQorICAgIGNvbnN0ZXhwciBw
dHJkaWZmX3QgaW5kZXgoKSBjb25zdCBub2V4Y2VwdHsKKyAgICAgICAgcmV0dXJuIF9faW5kZXg7
CisgICAgfQorCisgICAgdm9pZCBzd2FwKAorICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsPAorICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCisg
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LAorICAgICAgICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlCisgICAgICAgICAg
ICAmX19vdGhlcikgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6
dmFsdWUpIHsKKyAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7CisgICAg
ICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIF9f
c3dhcF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSgqdGhpcyxfX290aGVyKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgdmFyaWFudCBfX3RlbXAoc3Rk
Ojptb3ZlKF9fb3RoZXIpKTsKKyAgICAgICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9f
bW92ZV9jb25zdHJ1Y3QoKnRoaXMpOworICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3Ry
dWN0KF9fdGVtcCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitjbGFzcyB2
YXJpYW50PD57CitwdWJsaWM6CisgICAgdmFyaWFudCgpPWRlbGV0ZTsKKyAgICAKKyAgICBjb25z
dGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHR7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkg
Y29uc3Qgbm9leGNlcHR7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkIHN3
YXAodmFyaWFudCYpe30KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Cit0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkPjo6dHlwZQorc3dh
cCh2YXJpYW50PF9UeXBlcy4uLj4gJl9fbGhzLCB2YXJpYW50PF9UeXBlcy4uLj4gJl9fcmhzKSBu
b2V4Y2VwdCgKKyAgICBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDxfVHlwZXMuLi4+Ojp2YWx1ZSkg
eworICAgIF9fbGhzLnN3YXAoX19yaHMpOworfQorCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yeworICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3R5cGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIGdldCh2YXJpYW50PF9UeXBlcy4u
Lj4mIF9fdil7CisgICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9J
bmRleD4pOworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSBjb25zdCYgZ2V0KHZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKKyAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3Jh
Z2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
X190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CisgICAgICAgIHJldHVybiBf
X3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7CisgICAgfQorICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYmIF9fdil7CisgICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxh
Y2U8X0luZGV4Pik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBfVHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYg
X192KXsKKyAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlPihfX3YpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgorY29uc3RleHByIF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Cisg
ICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3Rk
Ojptb3ZlKF9fdikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgorY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiBfX3YpeworICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46
Ol9fdmFsdWU+KF9fdik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiYgX192KXsKKyAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMu
Li4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Cit9CisKKwordGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fdikKK3sKKyAgICBpZiAoX0luZGV4IT1fX3YuaW5kZXgoKSkgeworICAg
ICAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGlu
ZGV4IGluIGdldCIpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICooJl9fdmFyaWFudF9hY2Nl
c3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOworfQorCit0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4u
PiYgX192KQoreworICAgIGlmIChfSW5kZXghPV9fdi5pbmRleCgpKSB7CisgICAgICAgIF9fVEhS
T1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0
IikpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRl
eCxfVHlwZXMuLi4+OjpnZXQoX192KSk7Cit9CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdikK
K3sKKyAgICBpZiAoX0luZGV4IT1fX3YuaW5kZXgoKSkgeworICAgICAgICBfX1RIUk9XX0VYQ0VQ
VElPTihiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+Ojpn
ZXQoc3RkOjptb3ZlKF9fdikpOworfQorCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3Qm
JiBfX3YpCit7CisgICAgaWYgKF9JbmRleCE9X192LmluZGV4KCkpIHsKKyAgICAgICAgX19USFJP
V19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQi
KSk7CisgICAgfQorCisgICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVz
Li4uPjo6Z2V0KHN0ZDo6bW92ZShfX3YpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+
IGdldF9pZih2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7CisgICAgcmV0dXJuIChfX3R5cGVfaW5k
ZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxwdHI6JmdldDxf
VHlwZT4oX192KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KK2NvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZih2
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7CisgICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8
X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxwdHI6JmdldDxfVHlw
ZT4oX192KTsKK30KKwordGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYodmFyaWFudDxfVHlwZXMuLi4+JiBf
X3YpeworICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6CisgICAgICAg
ICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsKK30KKwor
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHBy
IHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCisgICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpeworICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6CisgICAg
ICAgICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhw
ciBib29sIGhvbGRzX2FsdGVybmF0aXZlKHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KSBu
b2V4Y2VwdHsKKyAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFt
ZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgX1Zpc2l0b3I+CitzdHJ1Y3QgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9y
PnsKKyAgICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoKSkgX190
eXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixf
SGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0
b3ImPigpKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fdmlzaXRvcl90
YWJsZXsKKyAgICB0eXBlZGVmIHZhcmlhbnQ8X1R5cGVzLi4uPiBfX3ZhcmlhbnRfdHlwZTsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMu
Li4+OjpfX3R5cGUgX19yZXR1cm5fdHlwZTsKKyAgICB0eXBlZGVmIF9fcmV0dXJuX3R5cGUgKCpf
X2Z1bmNfdHlwZSkoX1Zpc2l0b3ImLF9fdmFyaWFudF90eXBlJik7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZT4KKyAgICBzdGF0aWMgX19yZXR1cm5fdHlwZSBfX3RyYW1wb2xpbmVfZnVu
YyhfVmlzaXRvciYgX192aXNpdG9yLF9fdmFyaWFudF90eXBlJiBfX3YpeworICAgICAgICByZXR1
cm4gX192aXNpdG9yKGdldDxfVHlwZT4oX192KSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0
IF9fZnVuY190eXBlIF9fdHJhbXBvbGluZVtzaXplb2YuLi4oX1R5cGVzKV07Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3QgdHlwZW5h
bWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fZnVuY190eXBlIF9fdmlz
aXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9U
eXBlcyldPXsKKyAgICAgICAgJl9fdHJhbXBvbGluZV9mdW5jPF9UeXBlcz4uLi4KKyAgICB9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3Rl
eHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3R5cGUKK3Zpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKKyAgICBpZihfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICBfX1RIUk9X
X0VYQ0VQVElPTihiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQi
KSk7CisgICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3Ry
YW1wb2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgorc3RydWN0IF9fbXVsdGlfdmlz
aXRvcl9yZXR1cm5fdHlwZXsKKyAgICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlz
aXRvciY+KCkoZ2V0PDA+KHN0ZDo6ZGVjbHZhbDxfVmFyaWFudHM+KCkpLi4uKSkKKyAgICBfX3R5
cGU7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCx0eXBlbmFtZSBfSW5kaWNl
cz4KK3N0cnVjdCBfX3Zpc2l0X2hlbHBlcjsKKwordGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5k
aWNlcz4KK3N0cnVjdCBfX3Zpc2l0X2hlbHBlcjwwLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+PnsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1Zhcmlh
bnRzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVy
bl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQorICAgIF9fdmlzaXQoX1Zpc2l0
b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmIC4uLiBfX3YpeworICAgICAgICByZXR1cm4gX192aXNp
dG9yKGdldDxfSW5kaWNlcz4oX192KS4uLik7CisgICAgfQorfTsKKwordGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+CitzdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fYXJn
X3NlbGVjdG9yX3Q8MCxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiBfSGVhZCBfX3R5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxf
UmVzdCYgLi4uKXsKKyAgICAgICAgcmV0dXJuIF9faGVhZDsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVj
dCBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlIF9fdHlw
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmLF9SZXN0JiAu
Li4gX19yZXN0KXsKKyAgICAgICAgcmV0dXJuIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LTEsX1Jl
c3QuLi4+OjpfX3NlbGVjdChfX3Jlc3QuLi4pOworICAgIH0KK307CisKK3RlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorY29uc3RleHByIHR5cGVuYW1lIF9fYXJnX3Nl
bGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190eXBlJiYgX19hcmdfc2VsZWN0b3IoX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKKyAgICByZXR1cm4gc3RkOjpmb3J3YXJkPHR5cGVuYW1lIF9fYXJnX3Nl
bGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190eXBlPigKKyAgICAgICAgX19hcmdfc2VsZWN0
b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3NlbGVjdChfX2FyZ3MuLi4pKTsKK30KKwordGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgorc3RydWN0IF9fdmlzaXRfaGVscGVyMnsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgdHlw
ZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46
Ol9fdHlwZQorICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4g
X192KXsKKyAgICAgICAgaWYoX19hcmdfc2VsZWN0b3I8X1ZhcmlhbnRJbmRleC0xPihfX3YuLi4p
LmluZGV4KCk9PV9JbmRleCl7CisgICAgICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8Cisg
ICAgICAgICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9faW5kZXhfc2VxdWVuY2U8X0luZGV4LF9J
bmRpY2VzLi4uPj46OgorICAgICAgICAgICAgICAgIF9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9y
d2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOworICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAg
ICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXIyPF9JbmRleC0xLF9WYXJpYW50SW5kZXgsX0lu
ZGljZXMuLi4+OjpfX3Zpc2l0KAorICAgICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndh
cmQ8X1ZhcmlhbnRzPihfX3YpLi4uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgor
c3RydWN0IF9fdmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgorICAg
IHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9W
aXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQorICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlz
aXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKKyAgICAgICAgX19USFJPV19FWENFUFRJT04oYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgorc3RydWN0IF9fdmFyaWFudF90eXBlX2Nv
dW50OworCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fdmFyaWFudF90
eXBlX2NvdW50PHZhcmlhbnQ8X1R5cGVzLi4uPj57CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgX192YWx1ZT1zaXplb2YuLi4oX1R5cGVzKTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50Pgorc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFu
dD46Ol9fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KK3N0cnVjdCBf
X3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCBjb25zdCY+eworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVl
OworfTsKKwordGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5k
aWNlcz4KK3N0cnVjdCBfX3Zpc2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+PnsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVu
YW1lIC4uLiBfVmFyaWFudHM+CisgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRp
X3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCisgICAg
X192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpeworICAgICAg
ICByZXR1cm4gX192aXNpdF9oZWxwZXIyPAorICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291
bnQ8CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKKyAgICAgICAg
ICAgICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFs
dWUtMSwKKyAgICAgICAgICAgIF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAor
ICAgICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdiku
Li4pOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4u
LiBfVmFyaWFudHM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90
eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQordmlzaXQoX1Zpc2l0b3ImJiBfX3Zp
c2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7CisgICAgcmV0dXJuIF9fdmlzaXRfaGVscGVyPHNp
emVvZi4uLihfVmFyaWFudHMpLF9faW5kZXhfc2VxdWVuY2U8Pj46Ol9fdmlzaXQoCisgICAgICAg
IF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0odmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhz
KXsKKyAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYmCisgICAgICAg
ICgoX19saHMuaW5kZXgoKT09LTEpIHx8CisgICAgICAgICBfX2VxdWFsaXR5X29wX3RhYmxlPHZh
cmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFyZVtfX2xocy5pbmRleCgpXSgKKyAg
ICAgICAgICAgICBfX2xocyxfX3JocykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3Qm
IF9fbGhzLHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpeworICAgIHJldHVybiAhKF9f
bGhzPT1fX3Jocyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKKyAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk8X19y
aHMuaW5kZXgoKSkgfHwKKyAgICAgICAgKChfX2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAm
JgorICAgICAgICAgKChfX2xocy5pbmRleCgpIT0tMSkgJiYKKyAgICAgICAgICBfX2xlc3NfdGhh
bl9vcF90YWJsZTx2YXJpYW50PF9UeXBlcy4uLj4+OjoKKyAgICAgICAgICBfX2xlc3NfdGhhbl9j
b21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9fcmhzKSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KHZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7CisgICAg
cmV0dXJuIF9fcmhzPF9fbGhzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgor
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhz
LHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpeworICAgIHJldHVybiAhKF9fbGhzPF9f
cmhzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0odmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fcmhzKXsKKyAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Cit9CisKK3N0
cnVjdCBtb25vc3RhdGV7fTsKKworY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPT0obW9u
b3N0YXRlIGNvbnN0Jixtb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQorY29uc3RleHBy
IGlubGluZSBib29sIG9wZXJhdG9yIT0obW9ub3N0YXRlIGNvbnN0Jixtb25vc3RhdGUgY29uc3Qm
KXsgcmV0dXJuIGZhbHNlO30KK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KG1vbm9z
dGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KK2NvbnN0ZXhwciBp
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNvbnN0Jil7
IHJldHVybiB0cnVlO30KK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRl
IGNvbnN0Jixtb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KK2NvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlIGNvbnN0Jixtb25vc3RhdGUgY29uc3QmKXsgcmV0
dXJuIGZhbHNlO30KKworc3RydWN0IF9faGFzaF92aXNpdG9yeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlPgorICAgIHNpemVfdCBvcGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpeworICAg
ICAgICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9feCk7CisgICAgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgZXhwZXJpbWVudGFsCisKK3RlbXBsYXRlPD4KK3N0cnVjdCBoYXNoPGV4cGVyaW1l
bnRhbDo6bW9ub3N0YXRlPnsKKyAgICBzaXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6Om1v
bm9zdGF0ZSkgbm9leGNlcHR7CisgICAgICAgIHJldHVybiA0MjsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJp
YW50PF9UeXBlcy4uLj4+eworICAgIHNpemVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6dmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBzdGQ6
Omhhc2g8cHRyZGlmZl90PigpKHYuaW5kZXgoKSkgXgorICAgICAgICAgICAgICAgZXhwZXJpbWVu
dGFsOjp2aXNpdChleHBlcmltZW50YWw6Ol9faGFzaF92aXNpdG9yKCksIHYpOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIHN0ZApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0MTk3KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgtMDUgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVu
dGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA2MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgQWRkIHRlc3RzIGZvciB0aGUgdmFyaWFudCBpbXBsZW1lbnRhdGlvbi4KKwogMjAxNi0w
OC0wNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBy
dW4tYXBpLXRlc3RzIHNob3VsZCB1c2UgYSBoZWFkZWQgc2ltdWxhdG9yCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0MTQ2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIxMiw2ICsyMTIsNyBAQAogCQk3QzgzRTBDNDFEMEE2NTQyMDBGRUJDRjMgLyogUmVxdWlyZXNV
c2VyQWN0aW9uRm9yUGxheWJhY2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDlFMjkyQjFDOTBBNzFGMDAwQkI4MDAgLyogUmVxdWlyZXNVc2VyQWN0
aW9uRm9yUGxheWJhY2subW0gKi87IH07CiAJCTdDODNFMEM1MUQwQTY1NDYwMEZFQkNGMyAvKiBT
aHJpbmtUb0ZpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUE1M0FFMUIzMUZBOEQwMDc0RDVBQSAvKiBTaHJpbmtUb0ZpdC5tbSAqLzsgfTsKIAkJ
N0M4M0UwQzYxRDBBNjU0RTAwRkVCQ0YzIC8qIFZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFOTQzRjExQ0QzRTg3
RTAwQUMwOEMyIC8qIFZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tICovOyB9OworCQk3QzgzRkM3MTFE
NTUzNUE4MDAxREZCQ0QgLyogVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0QwRDVBQTFENTUzNERFMDAwQ0M5RTEgLyogVmFyaWFudC5j
cHAgKi87IH07CiAJCTdDODgyRTA5MUM4MEM2MzAwMDZCRjczMSAvKiBVc2VyQ29udGVudFdvcmxk
UGx1Z0luLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M4ODJFMDQxQzgwQzYyNDAwNkJGNzMxIC8qIFVzZXJDb250ZW50V29ybGRQbHVnSW4ubW0gKi87
IH07CiAJCTdDODgyRTBBMUM4MEM3NjQwMDZCRjczMSAvKiBVc2VyQ29udGVudFdvcmxkLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4ODJFMDMxQzgw
QzYyNDAwNkJGNzMxIC8qIFVzZXJDb250ZW50V29ybGQubW0gKi87IH07CiAJCTdDODlEMkFDMUE2
OUI4MEQwMDNBNUZERSAvKiBXS1BhZ2VDb25maWd1cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkFBMUE2OUI4MEQwMDNBNUZERSAv
KiBXS1BhZ2VDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKQEAgLTg4MCw2ICs4ODEsNyBAQAogCQk3
Q0NCOTkyMjFEM0I0NEU3MDAzOTIyRjYgLyogb3Blbi1tdWx0aXBsZS1leHRlcm5hbC11cmwuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJvcGVuLW11bHRpcGxlLWV4dGVybmFsLXVy
bC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NDRTdFOEMxQTQxMTQ0RTAw
NDQ3QzRDIC8qIGxpYlRlc3RXZWJLaXRBUEkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gbGliVGVzdFdlYktpdEFQSS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk3Q0NFN0VBMzFBNDExNUNCMDA0NDdDNEMgLyogVGVzdFdlYktpdEFQSUxpYnJhcnkueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gVGVzdFdlYktpdEFQSUxpYnJhcnkueGNjb25maWc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDBENUFBMUQ1NTM0REUwMDBDQzlFMSAvKiBWYXJp
YW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQg
LyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUREMTc0MzIzNEYwMEIyQkZDRiAvKiBXaWxs
TG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9hZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUUzMTc0MzIzOEUwMEIyQkZD
RiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2lsbExvYWRfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjgsNiArMTYzMCw3IEBACiAJCQkJN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3IC8qIFN0cmlu
Z1ZpZXcuY3BwICovLAogCQkJCTBCQ0Q4NTY5MTQ4NUM5OEIwMEVBMjAwMyAvKiBUZW1wb3JhcnlD
aGFuZ2UuY3BwICovLAogCQkJCUJDNTVGNUY4MTRBRDc4RUUwMDQ4NEJFMSAvKiBWZWN0b3IuY3Bw
ICovLAorCQkJCTdDRDBENUFBMUQ1NTM0REUwMDBDQzlFMSAvKiBWYXJpYW50LmNwcCAqLywKIAkJ
CQkyNjVBRjU0RjE1RDFFNDhBMDBCMENCNEEgLyogV1RGU3RyaW5nLmNwcCAqLywKIAkJCQkxQ0I5
QkMzNzFBNjc0ODIzMDBGRTU2NzggLyogV2Vha1B0ci5jcHAgKi8sCiAJCQkJN0FBNkExNTExQUFD
MEIzMTAwMkIyRUQzIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCkBAIC0yMTA1LDYgKzIxMDgsNyBAQAog
CQkJCTdDODNERjJBMUQwQTU5MEMwMEZFQkNGMyAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjMyMUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdIYXNoZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJN0M4M0ZDNzExRDU1MzVBODAwMURGQkNEIC8qIFZhcmlhbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmlu
Z0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVCQ0YzIC8q
IFN0cmluZ09wZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1OTBD
MDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQ291bnRlcnMuaCIKKyNpbmNsdWRlICJNb3ZlT25seS5oIgorI2luY2x1ZGUgIlJlZkxvZ2dl
ci5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFdURl9WYXJpYW50LCBCYXNpYykKK3sK
KyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7
CisgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKK30KKworVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQoreworICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50
YWw6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiBWYXJpYW50OworCisgICAgZW51bSBjbGFz
cyBUeXBlIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwKKyAg
ICAgICAgU3RyaW5nLAorICAgIH07CisKKworICAgIHN0cnVjdCBWaXNpdG9yIHsKKyAgICAgICAg
VmlzaXRvcihUeXBlJiB0KQorICAgICAgICAgICAgOiB0eXBlKHQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgVHlwZSYgdHlwZTsKKworICAgICAgICB2b2lkIG9wZXJh
dG9yKCkoaW50KSBjb25zdCB7IHR5cGUgPSBUeXBlOjpJbnQ7IH0KKyAgICAgICAgdm9pZCBvcGVy
YXRvcigpKGZsb2F0KSBjb25zdCB7IHR5cGUgPSBUeXBlOjpGbG9hdDsgIH0KKyAgICAgICAgdm9p
ZCBvcGVyYXRvcigpKFN0cmluZykgY29uc3QgeyB0eXBlID0gVHlwZTo6U3RyaW5nOyAgfQorICAg
IH07CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOworCisgICAgVmFyaWFudCB2YXJpYW50
ID0gODsKKyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFu
dCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50
ID0gMS4wZjsKKyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFy
aWFudCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CisKKworICAgIHZh
cmlhbnQgPSAiaGVsbG8iOworICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5
cGUpLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7Cit9
CisKK1RFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKK3sKKyAgICB0eXBl
ZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiBWYXJpYW50OworIAorICAgIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIHsKKyAgICAgICAgYXV0
byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+KCk7CisgICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKKworICAgICAg
ICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlv
bkNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKyAgICB9CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKK30KKworVEVTVChXVEZfVmFyaWFudCwgUmVmQ291bnRpbmcpCit7CisgICAgdHlwZWRlZiBz
dGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50
OworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWZQdHI8UmVm
TG9nZ2VyPiByZWYoJmEpOworICAgICAgICBWYXJpYW50IHYgPSByZWY7CisgICAgfQorCisgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAg
ICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKKyAgICAgICAgVmFyaWFudCB2ID0gV1RGTW92
ZShyZWYpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285473</attachid>
            <date>2016-08-05 19:10:40 -0700</date>
            <delta_ts>2016-08-06 09:02:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160618-20160805190915.patch</filename>
            <type>text/plain</type>
            <size>84637</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA1ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgV1RGIG5lZWRzIGEgdmFyaWFudCBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjE4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIGlt
cGxlbWVudGF0aW9uIG9mIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IG1hdGNoaW5nIHRoZSBD
KysxNyBkcmFmdCBodHRwOi8vd2cyMS5saW5rL240NjA2IAorICAgICAgICB0YWtlbiBmcm9tIGh0
dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhm
NzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkgYW5kCisgICAgICAgIG1vZGlmaWVkIHRvIHN1cHBv
cnQgY29tcGlsaW5nIHdpdGhvdXQgZXhjZXB0aW9ucyAod2hlcmUgaXQgdXNlZCB0byB0aHJvdywg
d2UgbG92aW5nbHkgQ1JBU0goKSkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlLgorCisgICAgICAgICogd3RmL0NvbXBpbGVy
Lmg6CisgICAgICAgIEFkZCBDT01QSUxFUl9TVVBQT1JUUyBkZWZpbmUgZm9yIEMrKyBleGNlcHRp
b25zLgorCisgICAgICAgICogd3RmL1ZhcmlhbnQuaDogQWRkZWQuCisKIDIwMTYtMDgtMDUgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIG91
dCBvZiBkYXRlIFdBU00gY29kZS4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA0MjE0KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw3IEBACiAJCTcw
RUNBNjBGMUIwMjQyNjgwMDQ0OTczOSAvKiBVbmlxdWVkU3RyaW5nSW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MEMxQjAyNDI2ODAwNDQ5
NzM5IC8qIFVuaXF1ZWRTdHJpbmdJbXBsLmggKi87IH07CiAJCTc5RUM3MDYxMUM5OUY5QkMwMDNB
M0FFMiAvKiBTbWFsbFB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi87
IH07CiAJCTdDQkJBMDc0MTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQkEwNzMxOUJCN0ZEQzAw
QkJGMDI1IC8qIE9TT2JqZWN0UHRyLmggKi87IH07CisJCTdDRDBENUE5MUQ1NTM0QTcwMDBDQzlF
MSAvKiBWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovOyB9OwogCQk3Q0RE
N0ZGODE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NERDdGRjcxODZEMjkxRTAwNzQzM0NE
IC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLzsgfTsKIAkJN0NERDdGRkExODZEMkE1NDAwNzQzM0NE
IC8qIEl0ZXJhdG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDREQ3RkY5MTg2RDJBNTQwMDc0MzNDRCAvKiBJdGVyYXRvclJhbmdlLmggKi87
IH07CiAJCTdFMjlDMzNFMTVGRkQ3OUIwMDUxNkQ2MSAvKiBPYmpjUnVudGltZUV4dHJhcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UyOUMzM0QxNUZG
RDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi87IH07CkBAIC00NjQsNiArNDY1
LDcgQEAKIAkJNzBFQ0E2MEMxQjAyNDI2ODAwNDQ5NzM5IC8qIFVuaXF1ZWRTdHJpbmdJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZWRTdHJpbmdJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBT
bWFsbFB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFB0clNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JCQTA3MzE5QkI3RkRDMDBCQkYw
MjUgLyogT1NPYmplY3RQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NP
YmplY3RQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NEMEQ1QTcxRDU1MzIy
QTAwMENDOUUxIC8qIFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0REN0ZGNzE4NkQyOTFF
MDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJdGVyYXRvckFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDREQ3RkY5MTg2RDJBNTQwMDc0MzNDRCAvKiBJdGVyYXRvclJhbmdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdG9yUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0UyOUMzM0QxNUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamNSdW50aW1lRXh0cmFzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIxLDYgKzEwMjMsNyBAQAogCQkJCTgz
RkJBOTMxMTlERjQ1OTcwMEYzMEFEQiAvKiBUeXBlQ2FzdHMuaCAqLywKIAkJCQlBOEE0NzM1QzE1
MUE4MjVCMDA0MTIzRkYgLyogVW5pb25GaW5kLmggKi8sCiAJCQkJQThBNDczNkYxNTFBODI1QjAw
NDEyM0ZGIC8qIFZhbHVlQ2hlY2suaCAqLywKKwkJCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEg
LyogVmFyaWFudC5oICovLAogCQkJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3Iu
aCAqLywKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8s
CiAJCQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLApAQCAtMTM3Niw2
ICsxMzc5LDcgQEAKIAkJCQlBOEE0NzQyODE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFDMTgxQzkyMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFBy
b3ZpZGVyTGF0aW4xLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRURBQ0QzRTE2MzBGODNGMDBDNjk2
MzQgLyogU3RhY2tTdGF0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NEMEQ1QTkxRDU1MzRBNzAw
MENDOUUxIC8qIFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI5MTUxQTgyNUIw
MDQxMjNGRiAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDJBMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUM0RjhBOTM3MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0Y2guaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDIxNCkKKysrIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgc2V0
KFdURl9IRUFERVJTCiAgICAgVW5pcXVlUmVmLmgKICAgICBWTVRhZ3MuaAogICAgIFZhbHVlQ2hl
Y2suaAorICAgIFZhcmlhbnQuaAogICAgIFZlY3Rvci5oCiAgICAgVmVjdG9yVHJhaXRzLmgKICAg
ICBXVEZUaHJlYWREYXRhLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ29tcGlsZXIuaAkocmV2aXNpb24gMjA0MjE0KQorKysg
U291cmNlL1dURi93dGYvQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBA
QAogI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQUE9SVFNfQ1hYX1JFRkVSRU5DRV9RVUFMSUZJRURf
RlVOQ1RJT05TIF9faGFzX2ZlYXR1cmUoY3h4X3JlZmVyZW5jZV9xdWFsaWZpZWRfZnVuY3Rpb25z
KQogI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQUE9SVFNfQ1hYX1VTRVJfTElURVJBTFMgX19oYXNf
ZmVhdHVyZShjeHhfdXNlcl9saXRlcmFscykKICNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRT
X0ZBTExUSFJPVUdIX1dBUk5JTkdTIF9faGFzX2ZlYXR1cmUoY3h4X2F0dHJpYnV0ZXMpICYmIF9f
aGFzX3dhcm5pbmcoIi1XaW1wbGljaXQtZmFsbHRocm91Z2giKQorI2RlZmluZSBXVEZfQ09NUElM
RVJfU1VQUE9SVFNfQ1hYX0VYQ0VQVElPTlMgX19oYXNfZmVhdHVyZShjeHhfZXhjZXB0aW9ucykK
ICNlbmRpZgogCiAvKiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpIC0gR05VIENvbXBpbGVyIENvbGxl
Y3Rpb24gb3IgQ2xhbmcgKi8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA1NiBAQAorLy8g
Q29weXJpZ2h0IChjKSAyMDE1LCBKdXN0IFNvZnR3YXJlIFNvbHV0aW9ucyBMdGQKKy8vIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorLy8gd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUKKy8vIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisvLworLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKy8vIGRpc2NsYWltZXIuCisvLworLy8gMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworLy8g
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8KKy8vIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZgorLy8gaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgor
Ly8gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQKKy8vIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisvLyBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKy8vIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisvLyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorLy8g
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisvLyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorLy8gSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisvLyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IKKy8vIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisvLyBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBDb3BpZWQgZnJvbSBodHRwczovL2Jp
dGJ1Y2tldC5vcmcvYW50aG9ueXcvdmFyaWFudC9zcmMgKDViY2U0N2ZhNzg4NjQ4Zjc5ZTVlYTFk
NzdiMGVlZjJlOGYwYjI5OTkpCisKKy8vIE1vZGlmaWVkIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRo
IGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bGltaXRz
Lmg+CisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGV4
Y2VwdD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVk
ZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKworbmFtZXNwYWNlIHN0ZCB7
CituYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKKworI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQ
VElPTlMpCisKKyNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIHRocm93IF9f
ZXhjZXB0aW9uOworI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9fcHJl
ZGljYXRlLCBfX2V4Y2VwdGlvbikgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoKF9fcHJlZGlj
YXRlKSkgeyBcCisgICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAorICAgICAgICB9IFwK
KyAgICB3aGlsZSAoMCk7IFwKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9fY3Jhc2hf
aGVscGVyKGJvb2wpeworICAgIENSQVNIKCk7Cit9CitzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBi
b29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7CisgICAgcmV0dXJuICF0ZXN0ID8g
dHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOworfQorCisjZGVmaW5lIF9fVEhS
T1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKKyNkZWZpbmUgX19DT05TVF9FWFBSX1RIUk9XX0VY
Q1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29uc3RleHByX2NyYXNoX2lm
KChfX3ByZWRpY2F0ZSkpOworI2VuZGlmCisKK3N0cnVjdCBfX2luX3BsYWNlX3ByaXZhdGV7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9fdHlwZV9ob2xkZXI7CisKKyAgICB0
ZW1wbGF0ZTxzaXplX3Q+CisgICAgc3RydWN0IF9fdmFsdWVfaG9sZGVyOworfTsKKworCitzdHJ1
Y3QgaW5fcGxhY2VfdGFnIHsKKyAgICBpbl9wbGFjZV90YWcoKSA9IGRlbGV0ZTsKK307CisKK3Vz
aW5nIGluX3BsYWNlX3QgPSBpbl9wbGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlJik7CisK
K3RlbXBsYXRlIDxjbGFzcyBfVHlwZT4KK3VzaW5nIGluX3BsYWNlX3R5cGVfdCA9IGluX3BsYWNl
X3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdHlwZV9ob2xkZXI8X1R5cGU+Jik7CisKK3Rl
bXBsYXRlIDxzaXplX3QgX0luZGV4PgordXNpbmcgaW5fcGxhY2VfaW5kZXhfdCA9IGluX3BsYWNl
X3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4mKTsKKwor
aW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZSYpOworCit0ZW1wbGF0ZSA8
Y2xhc3MgX1R5cGU+Citpbl9wbGFjZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpf
X3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7CisgICAgX19USFJPV19FWENFUFRJT04oX19pbl9wbGFj
ZV9wcml2YXRlKCkpOworfQorCit0ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4KK2luX3BsYWNlX3Rh
ZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4gJikg
eworICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5fcGxhY2VfcHJpdmF0ZSgpKTsKK30KKworY2xh
c3MgYmFkX3ZhcmlhbnRfYWNjZXNzOiBwdWJsaWMgc3RkOjpsb2dpY19lcnJvcnsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHdoYXRf
YXJnKToKKyAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0X2FyZykKKyAgICB7fQorICAgIGV4
cGxpY2l0IGJhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyk6CisgICAgICAg
IHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCisgICAge30KK307CisKK3RlbXBsYXRlPHB0cmRp
ZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3Qg
X190eXBlX2luZGV4X2hlbHBlcjsKKwordGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5h
bWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fdHlw
ZV9pbmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfSGVhZCxfUmVzdC4uLj57CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KKyAgICAgICAgX190eXBlX2luZGV4X2hlbHBl
cjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3QuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxhdGU8cHRy
ZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0
IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57CisgICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fT2Zmc2V0OworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3R5cGVfaW5k
ZXh7CisgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KKyAgICAgICAgX190
eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Cit9OworCit0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19pbmRl
eGVkX3R5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
K3N0cnVjdCBfX2luZGV4ZWRfdHlwZTwwLF9IZWFkLF9SZXN0Li4uPnsKKyAgICB0eXBlZGVmIF9I
ZWFkIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBf
UmVzdD4KK3N0cnVjdCBfX2luZGV4ZWRfdHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlw
ZWRlZiB2b2lkIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLl9UeXBlcz4KK3N0cnVjdCBfX25leHRfaW5kZXh7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KKyAgICAgICAgKF9JbmRleD49cHRy
ZGlmZl90KHNpemVvZi4uLihfVHlwZXMpLTEpKT8tMTpfSW5kZXgrMTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+CitjbGFzcyB2YXJpYW50OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZT4KK3N0cnVjdCB2YXJpYW50X3NpemU7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KK3N0
cnVjdCB2YXJpYW50X3NpemU8Y29uc3QgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgorc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGls
ZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
X1R5cGU+CitzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlh
bnRfc2l6ZTxfVHlwZT4ge307CisKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+CitzdHJ1
Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8X1R5cGVzLi4uPj4KKyAgICA6IHN0ZDo6aW50ZWdyYWxf
Y29uc3RhbnQ8c2l6ZV90LCBzaXplb2YuLi4oX1R5cGVzKT4ge307CisKK3RlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKKwor
dGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KK3VzaW5nIHZhcmlhbnRfYWx0
ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5
cGU7CisKK3RlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KK3N0cnVjdCB2
YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgY29uc3QgX1R5cGU+eworICAgIHVzaW5nIHR5cGU9
c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Cit9
OworCit0ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIF9UeXBlPnsKKyAgICB1c2luZyB0eXBl
PXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+
OworfTsKKwordGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgorc3RydWN0
IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57CisgICAg
dXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xhdGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9h
bHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+PjsKK307CisKK3RlbXBsYXRlPHNpemVfdCBfSW5k
ZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCx2YXJpYW50PF9UeXBlcy4uLj4+eworICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZTsKK307CisKK2NvbnN0ZXhwciBzaXplX3Qg
dmFyaWFudF9ucG9zPS0xOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgorY29uc3RleHByIF9UeXBlJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+Jik7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgX1R5
cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBfVHlwZSYmIGdldCh2
YXJpYW50PF9UeXBlcy4uLj4mJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMu
Li4+IGNvbnN0JiYpOworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYpOworCit0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4u
Lj4mJik7CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
K2NvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190
eXBlIGNvbnN0JiBnZXQoCisgICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisKK3RlbXBs
YXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+Citjb25zdGV4cHIgY29u
c3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYK
K2dldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxf
VHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxf
VHlwZSBjb25zdD4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOworCit0ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgc3RkOjph
ZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGU+IGdldF9pZih2YXJpYW50PF9UeXBlcy4uLj4mKTsKKwordGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJf
dDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
PiBnZXRfaWYoCisgICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisKK3RlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3ZhcmlhbnRfYWNj
ZXNzb3I7CisKK3RlbXBsYXRlPHNpemVfdCBfX2NvdW50LAorICAgICAgICAgYm9vbCBfX2xhcmdl
cl90aGFuX2NoYXI9KF9fY291bnQ+U0NIQVJfTUFYKSwKKyAgICBib29sIF9fbGFyZ2VyX3RoYW5f
c2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgpLAorICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9f
Y291bnQ+SU5UX01BWCk+CitzdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGV7CisgICAgdHlwZWRl
ZiBzaWduZWQgY2hhciBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KK3N0
cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+eworICAg
IHR5cGVkZWYgc2lnbmVkIHNob3J0IF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHNpemVfdCBfX2Nv
dW50Pgorc3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNl
PnsKKyAgICB0eXBlZGVmIGludCBfX3R5cGU7Cit9OwordGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+
CitzdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Cisg
ICAgdHlwZWRlZiBzaWduZWQgbG9uZyBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KK3N0cnVjdCBfX3N0b3JlZF90eXBleworICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlw
ZSY+eworICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKKwordGVt
cGxhdGU8Pgorc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlPgorc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KKyAgICAgICAgc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2
YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
K3N0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9CisgICAgICAgIF9fYWxsX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCisgICAgICAgIF9fYWxsX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgX1RhcmdldCx0eXBlbmFtZSAuLi4gX0FyZ3M+CitzdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3df
Y29uc3RydWN0aWJsZXsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQorICAgICAgICBu
b2V4Y2VwdChfVGFyZ2V0KHN0ZDo6ZGVjbHZhbDxfQXJncz4oKS4uLikpOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgorc3RydWN0IF9fc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBfX3ZhbHVlPQorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAor
ICAgICAgICB0eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+CitzdHJ1Y3Qg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9CisgICAgICAgIF9fc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKKyAgICAgICAgX19zdG9y
YWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKK307CisK
K3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBf
X290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX290aGVyX3N0b3JhZ2Vf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgX192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8
X1Jlc3QuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5h
bWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTwtMSxfSGVhZCxfUmVzdC4uLj57CisgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1
ZT0KKyAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9S
ZXN0Li4uPjo6X192YWx1ZTsKK307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+eworICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9CisgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKKyAgICAgICAgX19vdGhlcl9zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKK307
CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVj
dCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkeworICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFs
dWU9CisgICAgICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8CisgICAg
ICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+Ojpf
X3ZhbHVlICYmCisgICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBf
X2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBseworICAgIHN0YXRpYyBjb25zdCBib29s
IF9fdmFsdWU9CisgICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdmFsdWUgfHwKKyAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRf
aW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOworfTsKKwordGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fYW55X2Jh
Y2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBfX3ZhbHVlPWZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQ+CitzdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWQ8dmFyaWFudDxfVHlwZXMuLi4+ID57CisgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0K
KyAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihf
VHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgordW5pb24gX192YXJpYW50X2RhdGE7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KK3N0cnVjdCBfX3Zhcmlh
bnRfc3RvcmFnZXsKKyAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpeworICAgICAgICByZXR1cm4gX192YWw7
CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYg
X192YWwpeworICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKKyAgICB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Cisg
ICAgICAgIHJldHVybiBfX3ZhbDsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBf
VHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7CisgICAgICAgIHJldHVybiBz
dGQ6Om1vdmUoX192YWwpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBl
Jil7fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgX19zdG9yYWdlX3dy
YXBwZXJ7CisgICAgdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKF9UeXBlKSxh
bGlnbm9mKF9UeXBlKT46OnR5cGUgX19zdG9yYWdlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9BcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgdm9pZCBfX2NvbnN0cnVjdCh2b2lkKiBf
X3AsX0FyZ3MmJiAuLi4gX19hcmdzKXsKKyAgICAgICAgbmV3IChfX3ApIF9UeXBlKHN0ZDo6Zm9y
d2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9EdW1teSA9IF9UeXBlPgorICAgIF9fc3RvcmFnZV93cmFwcGVyKAorICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfRHVtbXk+Ojp2
YWx1ZSwKKyAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6OiopKCk+Ojp0eXBlID0gbnVs
bHB0cikgeworICAgICAgX19jb25zdHJ1Y3QoJl9fc3RvcmFnZSk7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgorICAgIF9fc3RvcmFnZV93cmFwcGVyKAor
ICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0cnVj
dGlibGU8X0R1bW15Pjo6dmFsdWUsCisgICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoq
KSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmly
c3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7CisgICAgICAgIF9fY29uc3RydWN0KCZf
X3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgICBfVHlwZSYgX19nZXQoKXsKKyAgICAgICAgcmV0
dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdlKSk7
CisgICAgfQorICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKKyAgICAg
ICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQgY29u
c3QqPigmX19zdG9yYWdlKSk7CisgICAgfQorICAgIHZvaWQgX19kZXN0cm95KCl7CisgICAgICAg
IF9fZ2V0KCkufl9UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
CitzdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKKyAgICBfVHlwZSogX19zdG9yYWdl
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICBjb25zdGV4cHIgX19zdG9yYWdl
X3dyYXBwZXIoX0FyZyYgX19hcmcpOgorICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9CisKKyAg
ICBfVHlwZSYgX19nZXQoKXsKKyAgICAgICAgcmV0dXJuICpfX3N0b3JhZ2U7CisgICAgfQorICAg
IGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKKyAgICAgICAgcmV0dXJuICpf
X3N0b3JhZ2U7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3Qg
X192YXJpYW50X3N0b3JhZ2U8X1R5cGUsZmFsc2U+eworICAgIHR5cGVkZWYgX19zdG9yYWdlX3dy
YXBwZXI8X1R5cGU+IF9fdHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0
KF9fdHlwZSYgX192YWwpeworICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKKyAgICB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7CisgICAgfQorICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpeworICAg
ICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIF9f
ZGVzdHJveShfX3R5cGUmIF9fdmFsKXsKKyAgICAgICAgX192YWwuX19kZXN0cm95KCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+CitzdHJ1Y3QgX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57CisgICAgdHlwZWRlZiBfVHlwZSogX190eXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7CisgICAgICAg
IHJldHVybiAqX192YWw7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0
X3JyZWYoX190eXBlJiBfX3ZhbCl7CisgICAgICAgIHJldHVybiAqX192YWw7CisgICAgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpeworICAg
ICAgICByZXR1cm4gKl9fdmFsOworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBf
X2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpeworICAgICAgICByZXR1cm4gKl9fdmFsOwor
ICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+CitzdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmJixfX2I+eworICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5
cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8X1R5cGUmJj4oKl9fdmFsKTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYm
IF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
X1R5cGUmJj4oKl9fdmFsKTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9f
Z2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxfVHlwZSYmPigqX192YWwpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190
eXBlJil7fQorfTsKKwordGVtcGxhdGU8PgordW5pb24gX192YXJpYW50X2RhdGE8PnsKKyAgICBj
b25zdGV4cHIgX192YXJpYW50X2RhdGEoKXt9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZT4KK3VuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsKKyAgICB0eXBlbmFtZSBfX3ZhcmlhbnRf
c3RvcmFnZTxfVHlwZT46Ol9fdHlwZSBfX3ZhbDsKKyAgICBzdHJ1Y3QgX19kdW1teV90eXBle30g
X19kdW1teTsKKworICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgY29uc3RleHByIF9fdmFyaWFu
dF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKKyAgICAgICAg
X192YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9CisKKyAgICBfVHlwZSYgX19n
ZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFn
ZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKKyAgICB9CisgICAgY29uc3RleHByIF9UeXBlJiYgX19n
ZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9z
dG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CisgICAgfQorICAgIGNvbnN0ZXhwciBj
b25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7CisgICAgICAgIHJl
dHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKKyAgICB9CisgICAg
Y29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBj
b25zdHsKKyAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJl
ZihfX3ZhbCk7CisgICAgfQorICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4p
eworICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Cit1bmlvbiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZSY+eworICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fdHlw
ZSBfX3ZhbDsKKyAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKKworICAgIGNvbnN0
ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX0FyZ3M+CisgICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4
X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKKyAgICAgICAgX192YWwoJnN0ZDo6Zm9yd2FyZDxf
QXJncz4oX19hcmdzKS4uLil7fQorCisgICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8
MD4peworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192
YWwpOworICAgIH0KKyAgICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8
MD4pIGNvbnN0eworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19n
ZXQoX192YWwpOworICAgIH0KKworICAgIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4
X3Q8MD4peworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRf
cnJlZihfX3ZhbCk7CisgICAgfQorICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIF9fZGVz
dHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KK3VuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJiY+eworICAgIHR5cGVuYW1lIF9fdmFy
aWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX3R5cGUgX192YWw7CisgICAgc3RydWN0IF9fZHVtbXlf
dHlwZXt9IF9fZHVtbXk7CisKKyAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15
KCl7fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICBfX3ZhcmlhbnRfZGF0YShp
bl9wbGFjZV9pbmRleF90PDA+LF9BcmcmJiBfX2FyZyk6CisgICAgICAgIF9fdmFsKCZfX2FyZyl7
fQorCisgICAgX1R5cGUmJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAgICAgcmV0
dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7CisgICAgfQorICAg
IGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0eworICAg
ICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsKKyAg
ICB9CisgICAgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0X3JyZWYoX192YWwpOwor
ICAgIH0KKyAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pIGNvbnN0eworICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9f
Z2V0X3JyZWYoX192YWwpOworICAgIH0KKyAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRl
eF90PDA+KXsKKyAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZGVzdHJveShf
X3ZhbCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0PgordW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+eworICAgIF9fdmFy
aWFudF9kYXRhPF9IZWFkPiBfX2hlYWQ7CisgICAgX192YXJpYW50X2RhdGE8X1Jlc3QuLi4+IF9f
cmVzdDsKKworICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOgorICAgICAgICBfX2hlYWQo
KXt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgY29uc3RleHByIF9f
dmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKKyAg
ICAgICAgX19oZWFkKGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQorICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAgIGNv
bnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3MmJiAu
Li4gX19hcmdzKToKKyAgICAgICAgX19yZXN0KGluX3BsYWNlPF9JbmRleC0xPixzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KKworICAgIF9IZWFkJiBfX2dldChpbl9wbGFjZV9pbmRl
eF90PDA+KXsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7CisgICAg
fQorCisgICAgY29uc3RleHByIF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KXsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKKyAgICB9
CisgICAgCisgICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiBfX2dldChpbl9wbGFjZV9pbmRleF90
PDA+KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7Cisg
ICAgfQorCisgICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9p
bmRleF90PDA+KSBjb25zdHsKKyAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGluX3Bs
YWNlPDA+KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KKyAgICB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQo
CisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7CisgICAgICAgIHJldHVybiBfX3Jl
c3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxzaXpl
X3QgX0luZGV4PgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgt
MSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCisgICAgICAgIGluX3BsYWNlX2luZGV4
X3Q8X0luZGV4Pil7CisgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxf
SW5kZXgtMT4pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgorICAg
IGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4u
Lj46Ol9fdHlwZSYgX19nZXQoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29u
c3R7CisgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgorICAgIGNvbnN0ZXhwciBjb25zdCB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7CisgICAgICAg
IHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAg
ICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7CisgICAgfQorICAgIHRlbXBsYXRlPHNp
emVfdCBfSW5kZXg+CisgICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+
KXsKKyAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4pOworICAgIH0K
K307CisKKwordGVtcGxhdGU8cHRyZGlmZl90Li4uIF9JbmRpY2VzPgorc3RydWN0IF9faW5kZXhf
c2VxdWVuY2V7CisgICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLHNpemVv
Zi4uLihfSW5kaWNlcyk+IF9fbmV4dDsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX2xl
bmd0aD1zaXplb2YuLi4oX0luZGljZXMpOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KK3N0cnVjdCBfX3R5cGVfaW5kaWNlczsKKwordGVtcGxhdGU8Pgorc3RydWN0IF9fdHlw
ZV9pbmRpY2VzPD57CisgICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CitzdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGU+
eworICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTwwPiBfX3R5cGU7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+CitzdHJ1Y3QgX190eXBlX2luZGlj
ZXM8X1R5cGUsX1Jlc3QuLi4+eworICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8
X1Jlc3QuLi4+OjpfX3R5cGU6Ol9fbmV4dCBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudD4KK3N0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczsKKwordGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczx2YXJpYW50PF9UeXBlcy4u
Lj4+eworICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190
eXBlIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAorICAgICAgICAg
dHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+Ojpf
X3R5cGU+CitzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK3N0cnVjdCBfX21vdmVfY29u
c3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
KyAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50
Jik7CisgICAgCisgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KKyAgICBzdGF0aWMgdm9p
ZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoCisgICAgICAgIF9WYXJpYW50ICogX19saHMsX1Zhcmlh
bnQmIF9fcmhzKXsKKyAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8
X0luZGV4PigKKyAgICAgICAgICAgIHN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0lu
ZGljZXMpXTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6CitfX2Z1bmNfdHlwZQorX19tb3Zl
X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
Pj46Ol9fYXBwbHlbCisgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09eworICAgICAgICAmX19tb3Zl
X2NvbnN0cnVjdF9mdW5jPF9JbmRpY2VzPi4uLgorICAgIH07CisKK3RlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LAorICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50
X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CitzdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJs
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
K3N0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKKyAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zh
cmlhbnQqLF9WYXJpYW50Jik7CisgICAgCisgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4K
KyAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCisgICAgICAgIF9WYXJpYW50ICog
X19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKKyAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6
Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBf
X21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+Pjo6CitfX2Z1bmNfdHlwZQorX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCisgICAgc2l6ZW9mLi4uKF9JbmRp
Y2VzKV09eworICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgorICAgIH07
CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAorICAgICAgICAgdHlwZW5hbWUgX0luZGlj
ZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CitzdHJ1Y3Qg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK3N0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxl
PF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKKyAgICB0eXBlZGVmIHZv
aWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7CisgICAg
CisgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KKyAgICBzdGF0aWMgdm9pZCBfX2NvcHlf
Y29uc3RydWN0X2Z1bmMoCisgICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3Qm
IF9fcmhzKXsKKyAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0lu
ZGV4PigKKyAgICAgICAgICAgIGdldDxfSW5kZXg+KF9fcmhzKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgorY29u
c3QgdHlwZW5hbWUgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3Nl
cXVlbmNlPF9JbmRpY2VzLi4uPj46OgorX19mdW5jX3R5cGUKK19fY29weV9jb25zdHJ1Y3Rfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5Wwor
ICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVu
YzxfSW5kaWNlcz4uLi4KKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKKyAg
ICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJp
YW50Pjo6X190eXBlPgorc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+CitzdHJ1Y3QgX19jb3B5
X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57
CisgICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFu
dCBjb25zdCYpOworICAgIAorICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+CisgICAgc3Rh
dGljIHZvaWQgX19jb3B5X2Fzc2lnbl9mdW5jKAorICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9W
YXJpYW50IGNvbnN0JiBfX3Jocyl7CisgICAgICAgIGdldDxfSW5kZXg+KCpfX2xocyk9Z2V0PF9J
bmRleD4oX19yaHMpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2Fw
cGx5W3NpemVvZi4uLihfSW5kaWNlcyldOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK2NvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25f
b3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKK19fZnVu
Y190eXBlCitfX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+Pjo6X19hcHBseVsKKyAgICBzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAg
ICAgICZfX2NvcHlfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCisgICAgfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQsCisgICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBf
X3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KK3N0cnVjdCBfX2Rlc3Ryb3lfb3Bf
dGFibGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+CitzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKKyAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zh
cmlhbnQqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgorICAgIHN0YXRp
YyB2b2lkIF9fZGVzdHJveV9mdW5jKAorICAgICAgICBfVmFyaWFudCAqIF9fc2VsZil7CisgICAg
ICAgIGlmKF9fc2VsZi0+X19pbmRleD49MCl7CisgICAgICAgICAgICBfX3NlbGYtPl9fc3RvcmFn
ZS5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citj
b25zdCB0eXBlbmFtZSBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjoKK19fZnVuY190eXBlCitfX2Rlc3Ryb3lfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WworICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9fZGVzdHJveV9mdW5jPF9JbmRpY2VzPi4uLgorICAg
IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAorICAgICAgICAgdHlwZW5hbWUgX0lu
ZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CitzdHJ1
Y3QgX19zd2FwX29wX3RhYmxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgorc3RydWN0IF9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57CisgICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5j
X3R5cGUpKF9WYXJpYW50JixfVmFyaWFudCYpOworICAgIAorICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+CisgICAgc3RhdGljIHZvaWQgX19zd2FwX2Z1bmMoCisgICAgICAgIF9WYXJpYW50
ICYgX19saHMsX1ZhcmlhbnQgJiBfX3Jocyl7CisgICAgICAgIHN3YXAoZ2V0PF9JbmRleD4oX19s
aHMpLGdldDxfSW5kZXg+KF9fcmhzKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IF9fZnVu
Y190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgorY29uc3QgdHlwZW5hbWUgX19z
d2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Citf
X2Z1bmNfdHlwZQorX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKKyAgICBzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAgICAg
ICZfX3N3YXBfZnVuYzxfSW5kaWNlcz4uLi4KKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCwKKyAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgorc3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+CitzdHJ1
Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj57CisgICAgdHlwZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1Zh
cmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7CisgICAgCisgICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJl
X2Z1bmMoCisgICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19y
aHMpeworICAgICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jo
cyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9f
ZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAgICAgICZfX2VxdWFs
aXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KKyAgICB9OworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK2NvbnN0ZXhwciB0eXBlbmFt
ZSBfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+Pjo6CitfX2NvbXBhcmVfZnVuY190eXBlCitfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJlWworICAg
IHNpemVvZi4uLihfSW5kaWNlcyldOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKKyAg
ICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJp
YW50Pjo6X190eXBlPgorc3RydWN0IF9fbGVzc190aGFuX29wX3RhYmxlOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgorc3RydWN0IF9fbGVzc190
aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKKyAg
ICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBjb25z
dCYsX1ZhcmlhbnQgY29uc3QmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2xlc3NfdGhhbl9jb21wYXJlX2Z1bmMoCisg
ICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpeworICAg
ICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPGdldDxfSW5kZXg+KF9fcmhzKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3RleHByIF9fY29tcGFyZV9mdW5jX3R5cGUgX19sZXNzX3RoYW5f
Y29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMpXT17CisgICAgICAgICZfX2xlc3NfdGhhbl9jb21w
YXJlX2Z1bmM8X0luZGljZXM+Li4uCisgICAgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgX19sZXNz
X3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoK
K19fY29tcGFyZV9mdW5jX3R5cGUKK19fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19sZXNzX3RoYW5fY29tcGFyZVsKKyAgICBzaXpl
b2YuLi4oX0luZGljZXMpXTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+CitzdHJ1Y3Qg
X192YXJpYW50X3N0b3JhZ2VfdHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX0Rlcml2ZWQsYm9v
bCBfX3RyaXZpYWxfZGVzdHJ1Y3Rvcj4KK3N0cnVjdCBfX3ZhcmlhbnRfYmFzZQoreworICAgIH5f
X3ZhcmlhbnRfYmFzZSgpeworICAgICAgICBzdGF0aWNfY2FzdDxfRGVyaXZlZCo+KHRoaXMpLT5f
X2Rlc3Ryb3lfc2VsZigpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9EZXJpdmVk
Pgorc3RydWN0IF9fdmFyaWFudF9iYXNlPF9EZXJpdmVkLHRydWU+eworfTsKKworCit0ZW1wbGF0
ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAorICAgICAgICAg
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX2FsbF9pbmRpY2Vz
X2hlbHBlcjsKKwordGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQscHRyZGlmZl90IC4uLiBfSW5k
aWNlcywKKyAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVj
dCBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKKyAgICBfT2Zmc2V0LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+LAorICAgIF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAorICAgICAgICBfT2Zmc2V0KzEsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLixfT2Zmc2V0PixfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZQorICAgICAg
ICBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3Vy
cmVudFNlcXVlbmNlLAorICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQsX0N1
cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKKyAgICAgICAgX09mZnNldCsxLF9DdXJyZW50U2VxdWVu
Y2UsX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOworfTsKKwordGVtcGxhdGU8cHRyZGlm
Zl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4KK3N0
cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGU+
eworICAgIHR5cGVkZWYgX0N1cnJlbnRTZXF1ZW5jZSBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fYWxsX2luZGljZXN7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKKyAgICAgICAgMCxf
X2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfU2VxdWVuY2VzPgorc3RydWN0IF9fY29tYmluZV9zZXF1
ZW5jZXM7CisKK3RlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXMxLHB0cmRpZmZfdCAuLi4g
X0luZGljZXMyPgorc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8CisgICAgX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlczEuLi4+LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMyLi4uPj57CisgICAg
dHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLixfSW5kaWNlczIuLi4+IF9fdHlw
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+
CitzdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczxfU2VxdWVuY2UsX1Jlc3QuLi4+eworICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKKyAgICAgICAgX1NlcXVlbmNlLAor
ICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPF9SZXN0Li4uPjo6X190eXBlPjo6
X190eXBlIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9JbmRpY2VzPgorc3RydWN0
IF9fZmlyc3RfaW5kZXg7CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfRmlyc3RJbmRleCxwdHJkaWZm
X3QgLi4uIF9SZXN0Pgorc3RydWN0IF9fZmlyc3RfaW5kZXg8X19pbmRleF9zZXF1ZW5jZTxfRmly
c3RJbmRleCxfUmVzdC4uLj4+eworICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFs
dWU9X0ZpcnN0SW5kZXg7Cit9OworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFt
ZSBfQ3VycmVudFNlcXVlbmNlLAorICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KK3N0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI7CisKK3RlbXBs
YXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4K
K3N0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8CisgICAgX09mZnNldCxfU2Vx
dWVuY2UsX1R5cGU+eworICAgIHR5cGVkZWYgX1NlcXVlbmNlIF9fdHlwZTsKK307CisKK3RlbXBs
YXRlPGJvb2wgX0FjY2VwdCxwdHJkaWZmX3QgX0VudHJ5Pgorc3RydWN0IF9fc2VxdWVuY2Vfb3Jf
ZW1wdHl7CisgICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOworfTsKKwordGVt
cGxhdGU8cHRyZGlmZl90IF9FbnRyeT4KK3N0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5PHRydWUs
X0VudHJ5PnsKKyAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0VudHJ5PiBfX3R5cGU7Cit9
OworCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNl
LAorICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgorc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKKyAgICBfT2Zmc2V0
LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+eworICAgIHR5cGVkZWYKKyAg
ICB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8CisgICAgICAgIF9PZmZz
ZXQrMSwKKyAgICAgICAgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKKyAgICAgICAgICAg
IF9DdXJyZW50U2VxdWVuY2UsCisgICAgICAgICAgICB0eXBlbmFtZSBfX3NlcXVlbmNlX29yX2Vt
cHR5PAorICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfSGVhZCxfVHlwZT46
OnZhbHVlLAorICAgICAgICAgICAgICAgIF9PZmZzZXQ+OjpfX3R5cGU+OjpfX3R5cGUsCisgICAg
ICAgIF9UeXBlLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21h
dGNoZXN7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxw
ZXI8CisgICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlw
ZSBfX3R5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgorc3RydWN0IF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3R7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX2RpcmVjdF9tYXRj
aGVzOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKKyAgICAgICAgdHlwZW5h
bWUgc3RkOjpyZW1vdmVfY29uc3Q8CisgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9y
ZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCisgICAgICAgICAgICA+Ojp0eXBlLF9UeXBlcy4uLj46Ol9f
dHlwZSBfX3ZhbHVlX21hdGNoZXM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2Vz
PAorICAgICAgICBfVHlwZSwKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Cisg
ICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGVzPjo6dHlwZQor
ICAgICAgICAgICAgPjo6dHlwZS4uLj46Ol9fdHlwZSBfX3JyZWZfbWF0Y2hlczsKKworICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8X1R5cGUsX1R5cGVzLi4uPjo6
X190eXBlCisgICAgX19jb25zdHJ1Y3RpYmxlczsKKworICAgIHN0YXRpY19hc3NlcnQoCisgICAg
ICAgIChfX2RpcmVjdF9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAorICAgICAgICAoX192YWx1ZV9t
YXRjaGVzOjpfX2xlbmd0aD4wKSB8fAorICAgICAgICAoX19ycmVmX21hdGNoZXM6Ol9fbGVuZ3Ro
PjApIHx8CisgICAgICAgIChfX2NvbnN0cnVjdGlibGVzOjpfX2xlbmd0aD09MSksCisgICAgICAg
ICJGb3IgY29udmVyc2lvbiBjb25zdHJ1Y3Rpb24gb2YgdmFyaWFudHMsIGV4YWN0bHkgb25lIHR5
cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIik7CisgICAgCisgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2NvbWJpbmVfc2VxdWVuY2VzPAorICAgICAgICBfX2RpcmVjdF9tYXRjaGVzLF9fdmFsdWVfbWF0
Y2hlcyxfX3JyZWZfbWF0Y2hlcywKKyAgICAgICAgX19jb25zdHJ1Y3RpYmxlcz46Ol9fdHlwZSBf
X2FsbF9tYXRjaGVzOworICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFs
dWU9X19maXJzdF9pbmRleDxfX2FsbF9tYXRjaGVzPjo6X192YWx1ZTsKK307CisKK3N0cnVjdCBf
X3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcnsKKyAgICB0ZW1wbGF0ZTwKKyAgICAgICAgcHRyZGlm
Zl90IF9JbmRleCwKKyAgICAgICAgYm9vbCBfX2NvbnN0cnVjdF9kaXJlY3RseSwKKyAgICAgICAg
Ym9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAorICAgICAgICBib29sIF9fb3Ro
ZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+CisgICAgc3RydWN0IF9faGVscGVyOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCisgICAgICAgICAgICAgdHlwZW5hbWUgX0luZGlj
ZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+CisgICAgc3Ry
dWN0IF9fb3BfdGFibGU7Cit9OworCit0ZW1wbGF0ZTwKKyAgICBwdHJkaWZmX3QgX0luZGV4LAor
ICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KK3N0cnVjdCBfX3JlcGxh
Y2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8CisgICAgX0luZGV4LGZhbHNlLHRydWUsX19v
dGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5l
KF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKKyAgICAgICAgX192LnRlbXBsYXRl
IF9fdHdvX3N0YWdlX3JlcGxhY2U8X0luZGV4PihfX2FyZ3MuLi4pOworICAgIH0KK307CisKK3Rl
bXBsYXRlPAorICAgIHB0cmRpZmZfdCBfSW5kZXgsCisgICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9o
YXNfbm90aHJvd19tb3ZlLAorICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92
ZT4KK3N0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8CisgICAgX0lu
ZGV4LHRydWUsX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKKyAgICBfX290aGVyX3R5
cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1Zhcmlh
bnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBfX3YudGVtcGxhdGUgX19kaXJl
Y3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAg
fQorfTsKKworCit0ZW1wbGF0ZTwKKyAgICBwdHJkaWZmX3QgX0luZGV4Pgorc3RydWN0IF9fcmVw
bGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKKyAgICBfSW5kZXgsZmFsc2UsZmFsc2Us
dHJ1ZT57CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0Fy
Z3M+CisgICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAu
Li4gX19hcmdzKXsKKyAgICAgICAgX192LnRlbXBsYXRlIF9fbG9jYWxfYmFja3VwX3JlcGxhY2U8
X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KK307CisKK3Rl
bXBsYXRlPAorICAgIHB0cmRpZmZfdCBfSW5kZXg+CitzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVj
dF9oZWxwZXI6Ol9faGVscGVyPAorICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgc3Rh
dGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsK
KyAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+CitzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVj
dF9oZWxwZXI6Ol9fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+eworICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUpKF9WYXJpYW50
KixfVmFyaWFudCYpOworICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fY29weV9mdW5jX3R5cGUp
KF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOworICAgIAorICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2Fzc2lnbl9mdW5jKAorICAgICAgICBf
VmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7CisgICAgICAgIF9fbGhzLT50ZW1wbGF0
ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9fcmhz
KSkpOworICAgICAgICBfX3Jocy5fX2Rlc3Ryb3lfc2VsZigpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXg+CisgICAgc3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9mdW5j
KAorICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7CisgICAg
ICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oZ2V0PF9JbmRl
eD4oX19yaHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IF9fbW92ZV9mdW5jX3R5
cGUgX19tb3ZlX2Fzc2lnbltzaXplb2YuLi4oX0luZGljZXMpXTsKKyAgICBzdGF0aWMgY29uc3Qg
X19jb3B5X2Z1bmNfdHlwZSBfX2NvcHlfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KK2Nv
bnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAorICAg
IF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19tb3ZlX2Z1bmNfdHlw
ZQorX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8CisgICAgX1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfYXNzaWduWworICAgIHNpemVv
Zi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4u
Li4KKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgorY29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3Bf
dGFibGU8CisgICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2Nv
cHlfZnVuY190eXBlCitfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKKyAg
ICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fY29weV9hc3NpZ25b
CisgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09eworICAgICAgICAmX19jb3B5X2Fzc2lnbl9mdW5j
PF9JbmRpY2VzPi4uLgorICAgIH07CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRyZGlm
Zl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CitzdHJ1Y3QgX19iYWNrdXBfc3RvcmFn
ZV9vcHN7CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAorICAgICAgICBf
U3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpeworICAgICAgICBuZXcoX19kZXN0
KSBfU3RvcmFnZSgKKyAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sCisgICAgICAgICAgICBz
dGQ6Om1vdmUoX19zb3VyY2UuX19nZXQoaW5fcGxhY2U8X0luZGV4PikpKTsKKyAgICB9CisgICAg
c3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7CisgICAgICAgIF9f
b2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7CisgICAgfTsKK307CisKK3RlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CitzdHJ1Y3QgX19iYWNrdXBfc3Rv
cmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57CisgICAgc3RhdGljIHZvaWQgX19tb3Zl
X2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSl7Cisg
ICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOworICAgIH07CisgICAg
c3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7CisgICAgICAgIF9f
VEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOworICAgIH07Cit9OworCit0ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSx0eXBlbmFtZSBfSW5kaWNl
cz4KK3N0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlOworCit0ZW1wbGF0ZTxwdHJkaWZm
X3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgor
c3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8CisgICAgX01hc2tJbmRleCxfU3RvcmFn
ZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Cit7CisgICAgdHlwZWRlZiB2b2lkICgq
X19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKTsK
KyAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFnZSAqIF9fb2Jq
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgorICAgIHN0cnVjdCBfX2hlbHBl
cnsKKyAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX01hc2tJbmRl
eCxfU3RvcmFnZT4gX19vcHM7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVu
Y190eXBlIF9fbW92ZV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07CisgICAgc3RhdGljIGNvbnN0
IF9fZGVzdHJveV9mdW5jX3R5cGUgX19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsK
K307CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29w
X3RhYmxlPAorICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4gPjo6X19tb3ZlX2Z1bmNfdHlwZQorX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKKyAg
ICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9f
bW92ZV9vcHNbCisgICAgICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKKyAgICAgICAgJl9faGVs
cGVyPF9JbmRpY2VzPjo6X19vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgorICAgIH07CisK
K3RlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Citjb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxl
PAorICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4g
Pjo6X19kZXN0cm95X2Z1bmNfdHlwZQorX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKKyAgICBf
TWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fZGVz
dHJveV9vcHNbCisgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09eworICAgICAgICAmX19oZWxwZXI8
X0luZGljZXM+OjpfX29wczo6X19kZXN0cm95X2Z1bmMuLi4KKyAgICB9OworCit0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19iYWNrdXBfc3Rv
cmFnZXsKKyAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5
cGU7CisKKyAgICB0eXBlZGVmIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8CisgICAgICAgIF9J
bmRleCxfX3N0b3JhZ2VfdHlwZSx0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+Ojpf
X3R5cGU+CisgICAgX19vcF90YWJsZV90eXBlOworCisgICAgcHRyZGlmZl90IF9fYmFja3VwX2lu
ZGV4OworICAgIF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZTsKKyAgICBfX3N0b3JhZ2Vf
dHlwZSBfX2JhY2t1cDsKKworICAgIF9fYmFja3VwX3N0b3JhZ2UocHRyZGlmZl90IF9fbGl2ZV9p
bmRleF8sX19zdG9yYWdlX3R5cGUmIF9fbGl2ZV9zdG9yYWdlXyk6CisgICAgICAgIF9fYmFja3Vw
X2luZGV4KF9fbGl2ZV9pbmRleF8pLF9fbGl2ZV9zdG9yYWdlKF9fbGl2ZV9zdG9yYWdlXyl7Cisg
ICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKKyAgICAgICAgICAgIF9fb3BfdGFibGVfdHlw
ZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fYmFja3Vw
LF9fbGl2ZV9zdG9yYWdlKTsKKyAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95
X29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIF9fZGVzdHJveSgpeworICAgICAgICBpZihfX2Jh
Y2t1cF9pbmRleD49MCkKKyAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29w
c1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fYmFja3VwKTsKKyAgICAgICAg
X19iYWNrdXBfaW5kZXg9LTE7CisgICAgfQorICAgIAorICAgIH5fX2JhY2t1cF9zdG9yYWdlKCl7
CisgICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKKyAgICAgICAgICAgIF9fb3BfdGFibGVf
dHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCisgICAgICAgICAgICAgICAgJl9fbGl2
ZV9zdG9yYWdlLF9fYmFja3VwKTsKKyAgICAgICAgICAgIF9fZGVzdHJveSgpOworICAgICAgICB9
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX2Fs
bF9tb3ZlX2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1l
IC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3Qu
Li4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0
Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KK3N0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFi
bGU8X0hlYWQsX1Jlc3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0
ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9hc3NpZ25h
YmxlPF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9jb3B5X2Fz
c2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZh
bHVlPXN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19h
bGxfY29weV9hc3NpZ25hYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKworbmFtZXNwYWNl
IF9fc3dhcF90ZXN0X2RldGFpbHsKK3VzaW5nIHN0ZDo6c3dhcDsKKwordGVtcGxhdGU8dHlwZW5h
bWUgX090aGVyPgorc3RydWN0IF9fc3dhcF9yZXN1bHR7fTsKKwordGVtcGxhdGU8dHlwZW5hbWU+
CitzdGF0aWMgY2hhciBfX3Rlc3QoLi4uKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+Citz
dGF0aWMgc3RkOjpwYWlyPGNoYXIsIHN0ZDo6cGFpcjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRlY2x0
eXBlKAorICAgIHN3YXAoc3RkOjpkZWNsdmFsPF9PdGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxfT3Ro
ZXIgJj4oKSkpPj4+CitfX3Rlc3QoX090aGVyICopOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
X1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlID0KKyAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2RldGFpbDo6X190ZXN0PF9UeXBl
PigwKSkgIT0gMTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3Qg
X19hbGxfc3dhcHBhYmxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4g
X1Jlc3Q+CitzdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgoreworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46OnZhbHVlICYm
IF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOworfTsKKwordGVtcGxhdGU8Pgorc3Ry
dWN0IF9fYWxsX3N3YXBwYWJsZTw+OgorICAgIHN0ZDo6dHJ1ZV90eXBle307CisKK3RlbXBsYXRl
PGJvb2wgX01vdmVDb25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGx7fTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9t
b3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+eworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQmJj4oKSkp
ICYmIF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+
Ojp2YWx1ZTsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9
dHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19ub2V4
Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0OgorX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29u
c3RydWN0X2ltcGw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9U
eXBlcy4uLj4KK3t9OworCit0ZW1wbGF0ZTxib29sIF9Nb3ZlQXNzaWduYWJsZSx0eXBlbmFtZSAu
Li4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBse307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+CitzdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4u
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKyAgICAgICAgc3RkOjppc19u
b3Rocm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmCisgICAgICAgIHN0ZDo6aXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJgorICAgICAgICBfX25v
ZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwor
fTsKKwordGVtcGxhdGU8Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9p
bXBsPHRydWU+eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KK3N0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9hc3NpZ24KKyAgICA6IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPAor
ICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgorICAg
ICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCisg
ICAgICAgICAgX1R5cGVzLi4uPiB7fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
K3N0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X0hlYWQsX1Jlc3QuLi4+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6
aXNfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9jb25zdHJ1
Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgX19hbGxf
Y29weV9jb25zdHJ1Y3RpYmxlPD46CisgICAgc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGU8
Ym9vbCBfQ29weUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbHt9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+CitzdHJ1Y3QgX19ub2V4Y2VwdF92YXJp
YW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxf
SGVhZCBjb25zdCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZT57CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0
cnVjdDoKK19fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxs
X2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Cit7fTsKKwor
dGVtcGxhdGU8Ym9vbCBfQ29weU5vbl9Db25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
CitzdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBs
e307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxf
SGVhZCxfUmVzdC4uLj57CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0
KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfbm9u
X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOworfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlPnsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX19ub2V4Y2VwdF92
YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDoKK19fbm9leGNlcHRfdmFyaWFudF9ub25f
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUsX1R5cGVzLi4uPgore307CisKK3RlbXBsYXRlPGJvb2wgX1N3YXBwYWJsZSx0
eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGx7
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KK3N0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9IZWFkLCBfUmVzdC4uLj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9CisgICAgICAgIG5vZXhjZXB0KHN3YXAo
c3RkOjpkZWNsdmFsPF9IZWFkJj4oKSxzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgJiYKKyAgICAg
ICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwor
fTsKKwordGVtcGxhdGU8Pgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1
ZT57CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgorc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwOgor
X19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6
dmFsdWUsX1R5cGVzLi4uPgore307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Citj
bGFzcyB2YXJpYW50OgorICAgICAgICBwcml2YXRlIF9fdmFyaWFudF9iYXNlPAorICAgIHZhcmlh
bnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9f
dmFsdWU+Cit7CisgICAgdHlwZWRlZiBfX3ZhcmlhbnRfYmFzZTx2YXJpYW50PF9UeXBlcy4uLj4s
X19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPiBfX2Jhc2Vf
dHlwZTsKKyAgICBmcmllbmQgX19iYXNlX3R5cGU7CisgICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlf
Y29uc3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OworICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2Fz
c2lnbl9vcF90YWJsZTx2YXJpYW50PjsKKyAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9jb25zdHJ1
Y3Rfb3BfdGFibGU8dmFyaWFudD47CisgICAgZnJpZW5kIHN0cnVjdCBfX21vdmVfYXNzaWduX29w
X3RhYmxlPHZhcmlhbnQ+OworICAgIGZyaWVuZCBzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPHZh
cmlhbnQ+OworICAgIAorICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlczI+CisgICAgZnJpZW5kIHN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7CisKKyAgICBm
cmllbmQgc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOworCisgICAgdHlwZWRlZiBf
X3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOworICAgIF9fc3RvcmFnZV90
eXBlIF9fc3RvcmFnZTsKKyAgICB0eXBlbmFtZSBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxzaXplb2Yg
Li4uIChfVHlwZXMpPjo6X190eXBlIF9faW5kZXg7CisKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBzaXplX3QgX19lbXBsYWNlX2NvbnN0cnVjdChf
QXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBuZXcoJl9fc3RvcmFnZSkgX19zdG9yYWdlX3R5
cGUoCisgICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19h
cmdzKS4uLik7CisgICAgICAgIHJldHVybiAgX0luZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lk
IF9fZGVzdHJveV9zZWxmKCl7CisgICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPHZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMpOworICAgICAgICBfX2luZGV4PS0xOworICAgIH0KKyAg
ICAKKyAgICBwdHJkaWZmX3QgX19tb3ZlX2NvbnN0cnVjdCh2YXJpYW50JiBfX290aGVyKXsKKyAg
ICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOworICAg
ICAgICBpZihfX290aGVyX2luZGV4PT0tMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtfX290aGVyX2lu
ZGV4XSh0aGlzLF9fb3RoZXIpOworICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Cisg
ICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OworICAgIH0KKworICAgIHB0cmRpZmZfdCBfX2Nv
cHlfY29uc3RydWN0KHZhcmlhbnQgY29uc3QmIF9fb3RoZXIpeworICAgICAgICBwdHJkaWZmX3Qg
Y29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7CisgICAgICAgIGlmKF9fb3RoZXJf
aW5kZXg9PS0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBfX2NvcHlfY29uc3Ry
dWN0X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhl
cik7CisgICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OworICAgIH0KKworICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAgIHZvaWQgX19yZXBsYWNlX2Nv
bnN0cnVjdChfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190aGlzX3R5cGU7CisgICAg
ICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKKyAgICAgICAgICAgIF9J
bmRleCwKKyAgICAgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGU8X190aGlz
X3R5cGUsX0FyZ3MuLi4+OjpfX3ZhbHVlIHx8CisgICAgICAgICAgICAoc2l6ZW9mLi4uKF9UeXBl
cyk9PTEpLAorICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9fdGhpc190eXBlPjo6X192YWx1ZSwKKyAgICAgICAgICAgIF9fb3RoZXJfc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTwKKyAgICAgICAgICAgICAgICBfSW5kZXgsX1R5cGVzLi4u
Pjo6X192YWx1ZQorICAgICAgICAgICAgPjo6X190cmFtcG9saW5lKCp0aGlzLHN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX0FyZ3M+CisgICAgdm9pZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9Bcmdz
JiYgLi4uIF9fYXJncyl7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7CisgICAgICAgIF9fdmFyaWFudF9kYXRh
PF9fdHlwZT4gX19sb2NhbCgKKyAgICAgICAgICAgIGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxf
QXJncz4oX19hcmdzKS4uLik7CisgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7CisgICAgICAgIF9f
ZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKKyAgICAgICAgICAgIHN0ZDo6bW92ZShfX2xvY2Fs
Ll9fZ2V0KGluX3BsYWNlPDA+KSkpOworICAgICAgICBfX2luZGV4PV9JbmRleDsKKyAgICAgICAg
X19sb2NhbC5fX2Rlc3Ryb3koaW5fcGxhY2U8MD4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAgIHZvaWQgX19sb2NhbF9iYWNrdXBf
cmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBfX2JhY2t1cF9zdG9yYWdlPF9J
bmRleCxfVHlwZXMuLi4+IF9fYmFja3VwKF9faW5kZXgsX19zdG9yYWdlKTsKKyAgICAgICAgX19l
bXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7
CisgICAgICAgIF9faW5kZXg9X0luZGV4OworICAgICAgICBfX2JhY2t1cC5fX2Rlc3Ryb3koKTsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0Fy
Z3M+CisgICAgdm9pZCBfX2RpcmVjdF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncykgeworICAg
ICAgICBfX2Rlc3Ryb3lfc2VsZigpOworICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRl
eD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICAgICAgX19pbmRleD1fSW5k
ZXg7CisgICAgfQorCisgICAgc3RydWN0IF9fcHJpdmF0ZV90eXBle307CisKK3B1YmxpYzoKKyAg
ICBjb25zdGV4cHIgdmFyaWFudCgpCisgICAgICAgIG5vZXhjZXB0KG5vZXhjZXB0KHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKKyAgICAgICAgX19zdG9y
YWdlKGluX3BsYWNlPDA+KSwKKyAgICAgICAgX19pbmRleCgwKQorICAgIHt9CisKKyAgICBjb25z
dGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYm
IF9fb3RoZXIpCisgICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0
PF9UeXBlcy4uLj46OnZhbHVlKToKKyAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9f
b3RoZXIpKQorICAgIHt9CisKKyAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFy
aWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CisgICAgCisgICAg
Y29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5
cGUmIF9fb3RoZXIpCisgICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9j
b3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CisgICAgICAgIF9faW5kZXgoX19jb3B5
X2NvbnN0cnVjdChfX290aGVyKSkKKyAgICB7fQorCisgICAgY29uc3RleHByIHZhcmlhbnQodHlw
ZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4u
Lj46OnZhbHVlLHZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7
CisKKyAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxs
X2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9fcHJpdmF0ZV90
eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKKyAgICBub2V4Y2VwdChfX25vZXhjZXB0X3Zhcmlh
bnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgorICAgICAgICBfX2lu
ZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCisgICAge30KKworICAgIGNvbnN0ZXhwciB2
YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYg
X19vdGhlcik9ZGVsZXRlOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfQXJncz4KKyAgICBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudChpbl9wbGFjZV90
eXBlX3Q8X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6CisgICAgICAgIF9fc3RvcmFnZSgKKyAg
ICAgICAgICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVl
PiwKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisgICAgICAg
IF9faW5kZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCisgICAgewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4u
Lj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KKyAgICBl
eHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3Mm
JiAuLi4gX19hcmdzKToKKyAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9JbmRleD4sc3RkOjpm
b3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKKyAgICAgICAgX19pbmRleChfSW5kZXgpCisgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlLF9BcmdzLi4uPjo6dmFsdWUs
IlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KKyAgICBjb25zdGV4cHIgdmFyaWFudChfVHlwZSYm
IF9feCk6CisgICAgICAgIF9fc3RvcmFnZSgKKyAgICAgICAgICAgIGluX3BsYWNlPAorICAgICAg
ICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVl
PiwKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCisgICAgICAgIF9faW5k
ZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlKQor
ICAgIHt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSwKKyAgICAgICAgICAgICB0eXBl
bmFtZSBfRW5hYmxlPQorICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAg
ICAgICAgICAgICAgICAoX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjppbml0aWFsaXplcl9s
aXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCisgICAgICAgICAgICAg
Pjo6dHlwZT4KKyAgICBjb25zdGV4cHIgdmFyaWFudChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5
cGU+IF9feCk6CisgICAgICAgIF9fc3RvcmFnZSgKKyAgICAgICAgICAgIGluX3BsYWNlPAorICAg
ICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWU+LAorICAgICAgICAgICAgX194KSwKKyAgICAgICAg
X19pbmRleChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxf
VHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZSkKKyAgICB7fQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlPgorICAgIHZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYmIF9feCl7CisgICAg
ICAgIGNvbnN0ZXhwciBzaXplX3QgX0luZGV4PQorICAgICAgICAgICAgX190eXBlX2luZGV4X3Rv
X2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOworICAgICAgICBpZihfSW5kZXg9
PV9faW5kZXgpeworICAgICAgICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0ZDo6Zm9yd2FyZDxf
VHlwZT4oX194KTsKKyAgICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgX19yZXBs
YWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZhcmlhbnQgJm9wZXJhdG9y
PSgKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKyAgICAgICAgICAgICEoX19h
bGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCisgICAgICAgICAgICAg
IF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgorICAgICAgICAg
ICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAorICAgICAgICAg
ICAgdmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSA9IGRlbGV0
ZTsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbDwKKyAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6
dHlwZSBjb25zdCAmX19vdGhlcikgeworICAgICAgICBpZiAoX19vdGhlci52YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpeworICAgICAgICAgICAg
X19jb3B5X2Fzc2lnbl9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzLF9f
b3RoZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAgICAgICAgICBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTx2YXJpYW50Pjo6X19jb3B5X2Fzc2lnblsKKyAg
ICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICB2YXJpYW50ICZvcGVyYXRvcj0oCisg
ICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8CisgICAgICAgICAgICAhKF9fYWxsX2Nv
cHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICBfX2Fs
bF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAg
X19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKKyAgICAgICAgICAgIHZh
cmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7CisKKyAgICB2
YXJpYW50ICZvcGVyYXRvcj0oCisgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Cisg
ICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYK
KyAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUgJiYKKyAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6
dmFsdWUsCisgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3Ro
ZXIpIHsKKyAgICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpeworICAg
ICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKF9f
b3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7CisgICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3Rh
YmxlPHZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZXsKKyAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpf
X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWworICAgICAgICAgICAgICAgIF9fb3Ro
ZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAgICAgICAgdHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwKKyAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCisgICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSksCisgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46
OnR5cGUgJiZfX290aGVyKSA9IGRlbGV0ZTsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAg
ICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgor
ICAgICAgICAgICAgX19vdGhlcikgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNz
aWduPF9UeXBlcy4uLj46OnZhbHVlKSB7CisgICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19i
eV9leGNlcHRpb24oKSkgeworICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7CisgICAgICAgICAg
ICBfX21vdmVfYXNzaWduX29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMs
X19vdGhlcik7CisgICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVy
OjpfX29wX3RhYmxlPHZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWworICAgICAgICAgICAgICAgIF9f
b3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9BcmdzPgorICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBf
X2RpcmVjdF9yZXBsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPigK
KyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorICAgIHZv
aWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpeworICAgICAgICBfX2RpcmVjdF9yZXBsYWNl
PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisgICAgCisg
ICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0
eworICAgICAgICByZXR1cm4gX19pbmRleD09LTE7CisgICAgfQorICAgIGNvbnN0ZXhwciBwdHJk
aWZmX3QgaW5kZXgoKSBjb25zdCBub2V4Y2VwdHsKKyAgICAgICAgcmV0dXJuIF9faW5kZXg7Cisg
ICAgfQorCisgICAgdm9pZCBzd2FwKAorICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PAorICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCisgICAg
ICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAor
ICAgICAgICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlCisgICAgICAgICAgICAm
X19vdGhlcikgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFs
dWUpIHsKKyAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7CisgICAgICAg
ICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIF9fc3dh
cF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSgqdGhpcyxfX290aGVyKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgdmFyaWFudCBfX3RlbXAoc3RkOjpt
b3ZlKF9fb3RoZXIpKTsKKyAgICAgICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9fbW92
ZV9jb25zdHJ1Y3QoKnRoaXMpOworICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3RydWN0
KF9fdGVtcCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitjbGFzcyB2YXJp
YW50PD57CitwdWJsaWM6CisgICAgdmFyaWFudCgpPWRlbGV0ZTsKKyAgICAKKyAgICBjb25zdGV4
cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHR7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkgY29u
c3Qgbm9leGNlcHR7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXAo
dmFyaWFudCYpe30KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Cit0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkPjo6dHlwZQorc3dhcCh2
YXJpYW50PF9UeXBlcy4uLj4gJl9fbGhzLCB2YXJpYW50PF9UeXBlcy4uLj4gJl9fcmhzKSBub2V4
Y2VwdCgKKyAgICBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDxfVHlwZXMuLi4+Ojp2YWx1ZSkgewor
ICAgIF9fbGhzLnN3YXAoX19yaHMpOworfQorCit0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yeworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5
cGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4m
IF9fdil7CisgICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9JbmRl
eD4pOworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSBjb25zdCYgZ2V0KHZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKKyAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2Uu
X19nZXQoaW5fcGxhY2U8X0luZGV4Pik7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgX190
eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CisgICAgICAgIHJldHVybiBfX3Yu
X19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7CisgICAgfQorICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYm
IF9fdil7CisgICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8
X0luZGV4Pik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KK2NvbnN0ZXhwciBfVHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKKyAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVl
PihfX3YpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgorY29uc3RleHByIF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CisgICAg
cmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjpt
b3ZlKF9fdikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgorY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpeworICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9f
dmFsdWU+KF9fdik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiYgX192KXsKKyAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Cit9CisKKwordGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdil7CisgICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfSW5k
ZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGluZGV4IGlu
IGdldCIpKTsKKyAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMu
Li4+OjpnZXQoX192KSk7Cit9CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KK2NvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpeworICAgIF9fQ09O
U1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3Zhcmlh
bnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7CisgICAgcmV0dXJuICooJl9f
dmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOworfQorCit0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJp
YW50PF9UeXBlcy4uLj4mJiBfX3YpeworICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05f
SUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBp
bmRleCBpbiBnZXQiKSk7CisgICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5
cGVzLi4uPjo6Z2V0KHN0ZDo6bW92ZShfX3YpKTsKK30KKwordGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMu
Li4+IGNvbnN0JiYgX192KXsKKyAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9J
bmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXgg
aW4gZ2V0IikpOworICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4u
Lj46OmdldChzdGQ6Om1vdmUoX192KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBn
ZXRfaWYodmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpeworICAgIHJldHVybiAoX190eXBlX2luZGV4
PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOiZnZXQ8X1R5
cGU+KF9fdik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Citjb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYodmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpeworICAgIHJldHVybiAoX190eXBlX2luZGV4PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOiZnZXQ8X1R5cGU+
KF9fdik7Cit9CisKK3RlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KK2NvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKKyAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgorICAgICAgICAm
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSk7Cit9CisKK3Rl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhwciBz
dGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAorICAgIHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYg
X192KXsKKyAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgorICAgICAg
ICAmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIg
Ym9vbCBob2xkc19hbHRlcm5hdGl2ZSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgbm9l
eGNlcHR7CisgICAgcmV0dXJuIF9fdi5pbmRleCgpPT1fX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KK3N0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIF9WaXNpdG9yPgorc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57
CisgICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlw
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KK3N0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hl
YWQsX1Jlc3QuLi4+eworICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9y
Jj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgX190eXBlOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK3N0cnVjdCBfX3Zpc2l0b3JfdGFi
bGV7CisgICAgdHlwZWRlZiB2YXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50X3R5cGU7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4u
Pjo6X190eXBlIF9fcmV0dXJuX3R5cGU7CisgICAgdHlwZWRlZiBfX3JldHVybl90eXBlICgqX19m
dW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRfdHlwZSYpOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGU+CisgICAgc3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMo
X1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRfdHlwZSYgX192KXsKKyAgICAgICAgcmV0dXJu
IF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBf
X2Z1bmNfdHlwZSBfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0IHR5cGVuYW1l
IF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX2Z1bmNfdHlwZSBfX3Zpc2l0
b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW3NpemVvZi4uLihfVHlw
ZXMpXT17CisgICAgICAgICZfX3RyYW1wb2xpbmVfZnVuYzxfVHlwZXM+Li4uCisgICAgfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KK2NvbnN0ZXhw
ciB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190
eXBlCit2aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcix2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7
CisgICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3YudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQi
KSk7CisgICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3Ry
YW1wb2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgorc3RydWN0IF9fbXVsdGlfdmlz
aXRvcl9yZXR1cm5fdHlwZXsKKyAgICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlz
aXRvciY+KCkoZ2V0PDA+KHN0ZDo6ZGVjbHZhbDxfVmFyaWFudHM+KCkpLi4uKSkKKyAgICBfX3R5
cGU7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCx0eXBlbmFtZSBfSW5kaWNl
cz4KK3N0cnVjdCBfX3Zpc2l0X2hlbHBlcjsKKwordGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5k
aWNlcz4KK3N0cnVjdCBfX3Zpc2l0X2hlbHBlcjwwLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+PnsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1Zhcmlh
bnRzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVy
bl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQorICAgIF9fdmlzaXQoX1Zpc2l0
b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmIC4uLiBfX3YpeworICAgICAgICByZXR1cm4gX192aXNp
dG9yKGdldDxfSW5kaWNlcz4oX192KS4uLik7CisgICAgfQorfTsKKwordGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+CitzdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgorc3RydWN0IF9fYXJn
X3NlbGVjdG9yX3Q8MCxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiBfSGVhZCBfX3R5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxf
UmVzdCYgLi4uKXsKKyAgICAgICAgcmV0dXJuIF9faGVhZDsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KK3N0cnVj
dCBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfSGVhZCxfUmVzdC4uLj57CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlIF9fdHlw
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmLF9SZXN0JiAu
Li4gX19yZXN0KXsKKyAgICAgICAgcmV0dXJuIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LTEsX1Jl
c3QuLi4+OjpfX3NlbGVjdChfX3Jlc3QuLi4pOworICAgIH0KK307CisKK3RlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgorY29uc3RleHByIHR5cGVuYW1lIF9fYXJnX3Nl
bGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190eXBlJiYgX19hcmdfc2VsZWN0b3IoX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKKyAgICByZXR1cm4gc3RkOjpmb3J3YXJkPHR5cGVuYW1lIF9fYXJnX3Nl
bGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190eXBlPigKKyAgICAgICAgX19hcmdfc2VsZWN0
b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3NlbGVjdChfX2FyZ3MuLi4pKTsKK30KKwordGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgorc3RydWN0IF9fdmlzaXRfaGVscGVyMnsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgdHlw
ZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46
Ol9fdHlwZQorICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4g
X192KXsKKyAgICAgICAgaWYoX19hcmdfc2VsZWN0b3I8X1ZhcmlhbnRJbmRleC0xPihfX3YuLi4p
LmluZGV4KCk9PV9JbmRleCl7CisgICAgICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8Cisg
ICAgICAgICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9faW5kZXhfc2VxdWVuY2U8X0luZGV4LF9J
bmRpY2VzLi4uPj46OgorICAgICAgICAgICAgICAgIF9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9y
d2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOworICAgICAgICB9CisgICAgICAgIGVsc2V7CisgICAg
ICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXIyPF9JbmRleC0xLF9WYXJpYW50SW5kZXgsX0lu
ZGljZXMuLi4+OjpfX3Zpc2l0KAorICAgICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndh
cmQ8X1ZhcmlhbnRzPihfX3YpLi4uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgor
c3RydWN0IF9fdmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgorICAg
IHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9W
aXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQorICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlz
aXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKKyAgICAgICAgX19DT05TVF9FWFBSX1RIUk9XX0VY
Q1BFVElPTl9JRih0cnVlLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZh
cmlhbnQiKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+CitzdHJ1
Y3QgX192YXJpYW50X3R5cGVfY291bnQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
CitzdHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8dmFyaWFudDxfVHlwZXMuLi4+PnsKKyAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPXNpemVvZi4uLihfVHlwZXMpOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+CitzdHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8
X1ZhcmlhbnQmPnsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFyaWFu
dF90eXBlX2NvdW50PF9WYXJpYW50Pjo6X192YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50Pgorc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50IGNvbnN0Jj57
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3Vu
dDxfVmFyaWFudD46Ol9fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRl
eCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgorc3RydWN0IF9fdmlzaXRfaGVscGVyPF9WYXJpYW50
SW5kZXgsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+eworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFu
dHMuLi4+OjpfX3R5cGUKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRz
JiYgLi4uIF9fdil7CisgICAgICAgIHJldHVybiBfX3Zpc2l0X2hlbHBlcjI8CisgICAgICAgICAg
ICBfX3ZhcmlhbnRfdHlwZV9jb3VudDwKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2FyZ19z
ZWxlY3Rvcl90PAorICAgICAgICAgICAgICAgICAgICBfVmFyaWFudEluZGV4LTEsX1ZhcmlhbnRz
Li4uPjo6X190eXBlPjo6X192YWx1ZS0xLAorICAgICAgICAgICAgX1ZhcmlhbnRJbmRleCxfSW5k
aWNlcy4uLj46Ol9fdmlzaXQoCisgICAgICAgICAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2Fy
ZDxfVmFyaWFudHMmJj4oX192KS4uLik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KK2NvbnN0ZXhwciB0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCit2
aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKKyAgICByZXR1
cm4gX192aXNpdF9oZWxwZXI8c2l6ZW9mLi4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+
Pjo6X192aXNpdCgKKyAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9f
dikuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgorY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLHZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX19yaHMpeworICAgIHJldHVybiAoX19saHMuaW5kZXgoKT09X19yaHMu
aW5kZXgoKSkgJiYKKyAgICAgICAgKChfX2xocy5pbmRleCgpPT0tMSkgfHwKKyAgICAgICAgIF9f
ZXF1YWxpdHlfb3BfdGFibGU8dmFyaWFudDxfVHlwZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJl
W19fbGhzLmluZGV4KCldKAorICAgICAgICAgICAgIF9fbGhzLF9fcmhzKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KHZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jo
cyl7CisgICAgcmV0dXJuICEoX19saHM9PV9fcmhzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPCh2YXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fbGhzLHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpeworICAgIHJldHVy
biAoX19saHMuaW5kZXgoKTxfX3Jocy5pbmRleCgpKSB8fAorICAgICAgICAoKF9fbGhzLmluZGV4
KCk9PV9fcmhzLmluZGV4KCkpICYmCisgICAgICAgICAoKF9fbGhzLmluZGV4KCkhPS0xKSAmJgor
ICAgICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPHZhcmlhbnQ8X1R5cGVzLi4uPj46OgorICAg
ICAgICAgIF9fbGVzc190aGFuX2NvbXBhcmVbX19saHMuaW5kZXgoKV0oX19saHMsX19yaHMpKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj4odmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKKyAgICByZXR1cm4gX19yaHM8X19saHM7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KHZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Cisg
ICAgcmV0dXJuICEoX19saHM8X19yaHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3Qm
IF9fbGhzLHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpeworICAgIHJldHVybiAhKF9f
bGhzPl9fcmhzKTsKK30KKworc3RydWN0IG1vbm9zdGF0ZXt9OworCitjb25zdGV4cHIgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShtb25vc3RhdGUgY29uc3QmLG1vbm9zdGF0ZSBjb25zdCYpeyByZXR1
cm4gdHJ1ZTt9Citjb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShtb25vc3RhdGUgY29u
c3QmLG1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQorY29uc3RleHByIGlubGluZSBi
b29sIG9wZXJhdG9yPj0obW9ub3N0YXRlIGNvbnN0Jixtb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IHRydWU7fQorY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlIGNvbnN0
Jixtb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQorY29uc3RleHByIGlubGluZSBib29s
IG9wZXJhdG9yPihtb25vc3RhdGUgY29uc3QmLG1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFs
c2U7fQorY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPChtb25vc3RhdGUgY29uc3QmLG1v
bm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQorCitzdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgc2l6ZV90IG9wZXJhdG9yKCkoX1R5
cGUgY29uc3QmIF9feCl7CisgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8X1R5cGU+KCkoX194KTsK
KyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBleHBlcmltZW50YWwKKwordGVtcGxhdGU8Pgor
c3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjptb25vc3RhdGU+eworICAgIHNpemVfdCBvcGVyYXRv
cigpKGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlKSBub2V4Y2VwdHsKKyAgICAgICAgcmV0dXJuIDQy
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+CitzdHJ1Y3QgaGFz
aDxleHBlcmltZW50YWw6OnZhcmlhbnQ8X1R5cGVzLi4uPj57CisgICAgc2l6ZV90IG9wZXJhdG9y
KCkoZXhwZXJpbWVudGFsOjp2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIG5vZXhjZXB0IHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeCisgICAg
ICAgICAgICAgICBleHBlcmltZW50YWw6OnZpc2l0KGV4cGVyaW1lbnRhbDo6X19oYXNoX3Zpc2l0
b3IoKSwgdik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQyMTQp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
Ni0wOC0wNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFdURiBuZWVk
cyBhIHZhcmlhbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MDYxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFy
aWFudC5jcHA6IEFkZGVkLgorICAgICAgICBBZGQgdGVzdHMgZm9yIHRoZSB2YXJpYW50IGltcGxl
bWVudGF0aW9uLgorCiAyMDE2LTA4LTA1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIHJ1bi1hcGktdGVzdHMgc2hvdWxkIHVzZSBhIGhlYWRlZCBzaW11
bGF0b3IKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQyMTQpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjEyLDYgKzIxMiw3IEBACiAJCTdDODNFMEM0MUQwQTY1NDIw
MEZFQkNGMyAvKiBSZXF1aXJlc1VzZXJBY3Rpb25Gb3JQbGF5YmFjay5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOUUyOTJCMUM5MEE3MUYwMDBCQjgw
MCAvKiBSZXF1aXJlc1VzZXJBY3Rpb25Gb3JQbGF5YmFjay5tbSAqLzsgfTsKIAkJN0M4M0UwQzUx
RDBBNjU0NjAwRkVCQ0YzIC8qIFNocmlua1RvRml0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QTUzQUUxQjMxRkE4RDAwNzRENUFBIC8qIFNocmlu
a1RvRml0Lm1tICovOyB9OwogCQk3QzgzRTBDNjFEMEE2NTRFMDBGRUJDRjMgLyogVmlkZW9Db250
cm9sc01hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0U5NDNGMTFDRDNFODdFMDBBQzA4QzIgLyogVmlkZW9Db250cm9sc01hbmFnZXIubW0g
Ki87IH07CisJCTdDODNGQzcxMUQ1NTM1QTgwMDFERkJDRCAvKiBWYXJpYW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBENUFBMUQ1NTM0REUw
MDBDQzlFMSAvKiBWYXJpYW50LmNwcCAqLzsgfTsKIAkJN0M4ODJFMDkxQzgwQzYzMDAwNkJGNzMx
IC8qIFVzZXJDb250ZW50V29ybGRQbHVnSW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg4MkUwNDFDODBDNjI0MDA2QkY3MzEgLyogVXNlckNvbnRl
bnRXb3JsZFBsdWdJbi5tbSAqLzsgfTsKIAkJN0M4ODJFMEExQzgwQzc2NDAwNkJGNzMxIC8qIFVz
ZXJDb250ZW50V29ybGQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Qzg4MkUwMzFDODBDNjI0MDA2QkY3MzEgLyogVXNlckNvbnRlbnRXb3JsZC5tbSAq
LzsgfTsKIAkJN0M4OUQyQUMxQTY5QjgwRDAwM0E1RkRFIC8qIFdLUGFnZUNvbmZpZ3VyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQy
QUExQTY5QjgwRDAwM0E1RkRFIC8qIFdLUGFnZUNvbmZpZ3VyYXRpb24uY3BwICovOyB9OwpAQCAt
ODgwLDYgKzg4MSw3IEBACiAJCTdDQ0I5OTIyMUQzQjQ0RTcwMDM5MjJGNiAvKiBvcGVuLW11bHRp
cGxlLWV4dGVybmFsLXVybC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm9wZW4t
bXVsdGlwbGUtZXh0ZXJuYWwtdXJsLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0NFN0U4QzFBNDExNDRFMDA0NDdDNEMgLyogbGliVGVzdFdlYktpdEFQSS5hICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJUZXN0V2ViS2l0QVBJLmE7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdDQ0U3RUEzMUE0MTE1Q0IwMDQ0N0M0QyAvKiBUZXN0
V2ViS2l0QVBJTGlicmFyeS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBUZXN0V2ViS2l0QVBJTGli
cmFyeS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NEMEQ1QUExRDU1
MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRUZB
OTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGQkNBREQxNzQz
MjM0RjAwQjJCRkNGIC8qIFdpbGxMb2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdpbGxMb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NG
QkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9hZF9CdW5kbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTYyOCw2ICsxNjMwLDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIy
OEYzMDBFNUVENTcgLyogU3RyaW5nVmlldy5jcHAgKi8sCiAJCQkJMEJDRDg1NjkxNDg1Qzk4QjAw
RUEyMDAzIC8qIFRlbXBvcmFyeUNoYW5nZS5jcHAgKi8sCiAJCQkJQkM1NUY1RjgxNEFENzhFRTAw
NDg0QkUxIC8qIFZlY3Rvci5jcHAgKi8sCisJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8q
IFZhcmlhbnQuY3BwICovLAogCQkJCTI2NUFGNTRGMTVEMUU0OEEwMEIwQ0I0QSAvKiBXVEZTdHJp
bmcuY3BwICovLAogCQkJCTFDQjlCQzM3MUE2NzQ4MjMwMEZFNTY3OCAvKiBXZWFrUHRyLmNwcCAq
LywKIAkJCQk3QUE2QTE1MTFBQUMwQjMxMDAyQjJFRDMgLyogV29ya1F1ZXVlLmNwcCAqLywKQEAg
LTIxMDUsNiArMjEwOCw3IEBACiAJCQkJN0M4M0RGMkExRDBBNTkwQzAwRkVCQ0YzIC8qIFNIQTEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzIxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmlu
Z0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzYxRDBBNTkwQzAwRkVCQ0Yz
IC8qIFN0cmluZ0hhc2hlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzgzRkM3MTFENTUzNUE4
MDAxREZCQ0QgLyogVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzNzFEMEE1
OTBDMDBGRUJDRjMgLyogU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYz
ODFEMEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nT3BlcmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjNBMUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJDb3VudGVycy5oIgorI2luY2x1ZGUgIk1vdmVPbmx5Lmgi
CisjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV1RG
X1ZhcmlhbnQsIEJhc2ljKQoreworICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwg
ZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0g
MCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHZhcmlhbnQp
ID09IDEpOworfQorCitURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCit7CisgICAgdHlw
ZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IFZhcmlh
bnQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOb25lLAorICAgICAgICBJbnQs
CisgICAgICAgIEZsb2F0LAorICAgICAgICBTdHJpbmcsCisgICAgfTsKKworCisgICAgc3RydWN0
IFZpc2l0b3IgeworICAgICAgICBWaXNpdG9yKFR5cGUmIHQpCisgICAgICAgICAgICA6IHR5cGUo
dCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUeXBlJiB0eXBlOwor
CisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShpbnQpIGNvbnN0IHsgdHlwZSA9IFR5cGU6OkludDsg
fQorICAgICAgICB2b2lkIG9wZXJhdG9yKCkoZmxvYXQpIGNvbnN0IHsgdHlwZSA9IFR5cGU6OkZs
b2F0OyAgfQorICAgICAgICB2b2lkIG9wZXJhdG9yKCkoU3RyaW5nKSBjb25zdCB7IHR5cGUgPSBU
eXBlOjpTdHJpbmc7ICB9CisgICAgfTsKKworICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CisK
KyAgICBWYXJpYW50IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChW
aXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlw
ZSk7CisKKworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNp
dChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpGbG9hdCA9
PSB0eXBlKTsKKworCisgICAgdmFyaWFudCA9ICJoZWxsbyI7CisgICAgc3RkOjpleHBlcmltZW50
YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6
OlN0cmluZyA9PSB0eXBlKTsKK30KKworVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yKQoreworICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IFZhcmlhbnQ7Cisg
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
CisgICAgeworICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICAgICAgVmFyaWFudCB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworCisgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworICAgIH0KKyAgICAK
KyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVj
dGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9WYXJpYW50LCBSZWZDb3VudGlu
ZykKK3sKKyAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxSZWZM
b2dnZXI+LCBpbnQ+IFZhcmlhbnQ7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7CisgICAgICAgIFZhcmlhbnQgdiA9
IHJlZjsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOworICAgICAg
ICBWYXJpYW50IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJy
ZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>