<?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>33958</bug_id>
          
          <creation_ts>2010-01-21 09:08:14 -0800</creation_ts>
          <short_desc>[Android] JavaField and JavaArray use JSC-specific types</short_desc>
          <delta_ts>2010-02-02 08:21:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</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>
          <dependson>33899</dependson>
          <blocked>32154</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>commit-queue</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183213</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-21 09:08:14 -0800</bug_when>
    <thetext>WebCore/bridge/jni/JNIBridge.[cpp|h] provides a number of classes.
Of these, JavaField and JavaArray use JSC-specific types.
This causes problems on Android, where we can build with JSC or V8.

These JSC-specific classes should be moved out of JNIBridge.[cpp|h] to allow the file to be used with both JSC and V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183623</commentid>
    <comment_count>1</comment_count>
      <attachid>47197</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-22 06:22:27 -0800</bug_when>
    <thetext>Created attachment 47197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183624</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-22 06:25:58 -0800</bug_when>
    <thetext>Attachment 47197 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Traceback (most recent call last):
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 94, in &lt;module&gt;
    main()
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 87, in main
    style_checker.check_patch(patch)
  File &quot;/mnt/git/webkit-style-queue/WebKitTools/Scripts/webkitpy/style/checker.py&quot;, line 915, in check_patch
    self.check_file(file_path, handle_style_error=error_for_patch)
  File &quot;/mnt/git/webkit-style-queue/WebKitTools/Scripts/webkitpy/style/checker.py&quot;, line 883, in check_file
    process_file(processor, file_path, handle_style_error)
  File &quot;/mnt/git/webkit-style-queue/WebKitTools/Scripts/webkitpy/style/checker.py&quot;, line 838, in _process_file
    processor.process(lines)
AttributeError: &apos;NoneType&apos; object has no attribute &apos;process&apos;


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184529</commentid>
    <comment_count>3</comment_count>
      <attachid>47197</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-26 01:46:14 -0800</bug_when>
    <thetext>Comment on attachment 47197
Patch

Ok.  I didn&apos;t prove to myself that this was just moving code, but I believe you when you say it is.

You even get out of fixing the style nits because the style bot was down when you uploaded your patch.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184530</commentid>
    <comment_count>4</comment_count>
      <attachid>47197</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-26 01:53:53 -0800</bug_when>
    <thetext>Comment on attachment 47197
Patch

I&apos;ve checked that the style is good. This patch only moves code from JNIBridge.[cpp|h] and the style in those files was fixed in Bug 33914</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184549</commentid>
    <comment_count>5</comment_count>
      <attachid>47197</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-26 04:05:58 -0800</bug_when>
    <thetext>Comment on attachment 47197
Patch

Clearing flags on attachment: 47197

Committed r53849: &lt;http://trac.webkit.org/changeset/53849&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184550</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-26 04:06:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47197</attachid>
            <date>2010-01-22 06:22:27 -0800</date>
            <delta_ts>2010-01-26 04:05:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33958-20100122142223.patch</filename>
            <type>text/plain</type>
            <size>57393</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzcwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDEtMjIgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVzIEpTQy1zcGVjaWZpYyBjbGFzc2VzIGZyb20gYnJpZGdlL2puaS9KTklCcmlkZ2UgdG8g
YnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMzk1OAorCisgICAgICAgIFRoaXMgYWxsb3dzIGJyaWRnZS9q
bmkvSk5JQnJpZGdlIHRvIGJlIHVzZWQgd2l0aCBib3RoIEpTQyBhbmQgVjguCisgICAgICAgIEEg
bGF0ZXIgY2hhbmdlIHdpbGwgYWRkIHRoZSBWOCBlcXVpdmFsZW50IG9mIHRoZXNlIEpTQy1zcGVj
aWZpYyBjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3Jpbmcgb25seS4K
KworICAgICAgICAqIEFuZHJvaWQuanNjYmluZGluZ3MubWs6IE1vZGlmaWVkLiBBZGRlZCBKTklC
cmlkZ2VKU0MuY3BwCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IE1vZGlmaWVkLiBBZGRlZCBK
TklCcmlkZ2VKU0MuaAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogTW9kaWZpZWQuIEFkZGVkIEpOSUJyaWRnZUpTQy5bY3BwfGhdCisgICAgICAgICogYnJpZGdl
L2puaS9KTklCcmlkZ2UuY3BwOiBNb2RpZmllZC4gTW92ZWQgSmF2YUZpZWxkIGFuZCBKYXZhQXJy
YXkgdG8gSk5JQnJpZGdlSlNDLmNwcAorICAgICAgICAoYXBwZW5kQ2xhc3NOYW1lKTogTW9kZmll
ZC4gR3VhcmQgY2FsbHMgdG8gSlNMb2NrCisgICAgICAgIChKYXZhTWV0aG9kOjpzaWduYXR1cmUp
OiBNb2RmaWVkLiBHdWFyZCBjYWxscyB0byBKU0xvY2sKKyAgICAgICAgKiBicmlkZ2Uvam5pL0pO
SUJyaWRnZS5oOiBNb2RpZmllZC4gTW92ZWQgSmF2YUZpZWxkIGFuZCBKYXZhQXJyYXkgdG8gSk5J
QnJpZGdlSlNDLmgKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuY3BwOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcC4KKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaDogQ29waWVkIGZyb20gV2ViQ29yZS9icmlkZ2Uv
am5pL0pOSUJyaWRnZS5oLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2
YXRlLmNwcDogTW9kaWZpZWQuIEluY2x1ZGUgSk5JQnJpZGdlSlNDLmgKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaDogTW9kaWZpZWQuIEluY2x1ZGUgSk5JQnJpZGdlSlND
LmgKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOiBNb2RpZmll
ZC4gSW5jbHVkZSBKTklCcmlkZ2VKU0MuaAorCiAyMDEwLTAxLTIyICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFF0ICJidWls
ZCIgZml4LgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawkocmV2aXNpb24gNTM3MDApCisrKyBX
ZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsx
ODYsNyBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAogCWJyaWRnZS9jL2NfdXRpbGl0eS5jcHAgXAog
CWJyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcCBcCiAJYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcCBc
CisJYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcCBcCiAJYnJpZGdlL2puaS9qc2MvSk5J
VXRpbGl0eVByaXZhdGUuY3BwIFwKIAlicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwIFwK
IAlicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwIFwKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNTM3MDApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01
MTgsNiArNTE4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JyaWRnZS9qbmkv
Sk5JQnJpZGdlLmggXAogCVdlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmggXAogCVdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QuaCBcCisJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
TklCcmlkZ2VKU0MuaCBcCiAJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaCBc
CiAJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaCBcCiAJV2ViQ29yZS9i
cmlkZ2UvanNjL0JyaWRnZUpTQy5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MzcwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMwLDYgKzExMzAsOCBA
QAogCQk1OUM3N0YyQjEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlDNzdGMjkx
MDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OUU1NjBBNzExMDUzMzY2MDBB
QTEyNTggLyogSmF2YUNsYXNzSlNDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OUU1NjBBNjExMDUzMzY2MDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmgg
Ki87IH07CiAJCTU5RTU2MEE5MTEwNTMzNkYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFNTYwQTgxMTA1
MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAgKi87IH07CisJCTU5RTg0MjY2MTEwOUU1
QTIwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5RTg0MjY1MTEwOUU1QTIwMDAzMDVBRCAvKiBKTklCcmlkZ2VK
U0MuaCAqLzsgfTsKKwkJNTlFODQyNjgxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUU4NDI2
NzExMDlFNUFFMDAwMzA1QUQgLyogSk5JQnJpZGdlSlNDLmNwcCAqLzsgfTsKIAkJNTlFRTEyMkMx
MTA2MDgwNTAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAv
KiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi87IH07CiAJCTU5RUUxMjJFMTEwNjA4MEYwMDg4NTEx
NiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTlFRTEyMkQxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2
YXRlLmggKi87IH07CiAJCTU5RUUxMjMwMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjJG
MTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNwcCAqLzsgfTsKQEAgLTY1MDksNiArNjUx
MSw4IEBACiAJCTU5Qzc3RjI5MTA1NDVCM0IwMDUwNjEwNCAvKiBHZW9sb2NhdGlvblNlcnZpY2VN
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdlb2xvY2F0aW9uU2Vydmlj
ZU1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1OUU1NjBBNjExMDUzMzY2MDBBQTEyNTggLyogSmF2YUNsYXNz
SlNDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEphdmFDbGFzc0pTQy5oOyBw
YXRoID0ganNjL0phdmFDbGFzc0pTQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
OUU1NjBBODExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEphdmFDbGFzc0pTQy5jcHA7IHBhdGggPSBqc2MvSmF2
YUNsYXNzSlNDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTlFODQyNjUxMTA5
RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKTklCcmlkZ2VKU0MuaDsgcGF0aCA9IGpzYy9KTklCcmlkZ2VKU0MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTlFODQyNjcxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJy
aWRnZUpTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKTklCcmlk
Z2VKU0MuY3BwOyBwYXRoID0ganNjL0pOSUJyaWRnZUpTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKTklVdGlsaXR5UHJp
dmF0ZS5jcHA7IHBhdGggPSBqc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0eVBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSk5JVXRpbGl0eVByaXZh
dGUuaDsgcGF0aCA9IGpzYy9KTklVdGlsaXR5UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1OUVFMTIyRjExMDYwODFGMDA4ODUxMTYgLyogSk5JVXRpbGl0eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKTklVdGlsaXR5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMTE3LDYgKzExMTIxLDggQEAKIAkJNTk5RDFFMkYx
MEM5N0Q0QzAwRTBFRjEyIC8qIGpzYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNTlFODQyNjcxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5j
cHAgKi8sCisJCQkJNTlFODQyNjUxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oICov
LAogCQkJCTU5RUUxMjJEMTEwNjA4MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oICov
LAogCQkJCTU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAg
Ki8sCiAJCQkJNTlCQzM5M0UxMTA1NEExMzAwRkQ4NURCIC8qIEphdmFTdHJpbmdKU0MuaCAqLywK
QEAgLTE4NDU1LDYgKzE4NDYxLDcgQEAKIAkJCQk1OUI1OTc3NTExMDg2NTc5MDA3MTU5RTggLyog
QnJpZGdlSlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0M0RjZFQjExMDhGOUE1MDA5OUQwREIg
LyogQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgyRkNBQzQx
MTA5MjdDRTAwQ0M0ODIxIC8qIEpTU1ZHQ29udGV4dENhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1OUU4NDI2NjExMDlFNUEyMDAwMzA1QUQgLyogSk5JQnJpZGdlSlNDLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIwNjI5LDYgKzIwNjM2LDcgQEAKIAkJCQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcg
LyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5QjU5NzczMTEwODY1NkIwMDcxNTlF
OCAvKiBCcmlkZ2VKU0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDNEY2RUExMTA4RjlBNTAw
OTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTlFODQyNjgxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCShyZXZpc2lvbiA1MzcwMCkKKysrIFdl
YkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCAr
MzAsOCBAQAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKICNpbmNsdWRlICJDU3RyaW5n
LmgiCi0jaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRl
LmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgotI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXku
aCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5o
IgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgorCiAKICNpZmRlZiBOREVCVUcKICNkZWZpbmUgSlNfTE9HKGZvcm1hdEFuZEFyZ3MuLi4pICgo
dm9pZCkwKQpAQCAtNTksMjA2ICs1Myw2IEBAIEphdmFQYXJhbWV0ZXI6OkphdmFQYXJhbWV0ZXIo
Sk5JRW52KiBlbnYKICAgICBtX0pOSVR5cGUgPSBKTklUeXBlRnJvbUNsYXNzTmFtZShtX3R5cGUu
VVRGOFN0cmluZygpKTsKIH0KIAotSmF2YUZpZWxkOjpKYXZhRmllbGQoSk5JRW52KiBlbnYsIGpv
YmplY3QgYUZpZWxkKQotewotICAgIC8vIEdldCBmaWVsZCB0eXBlCi0gICAgam9iamVjdCBmaWVs
ZFR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldFR5cGUiLCAiKClMamF2
YS9sYW5nL0NsYXNzOyIpOwotICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0
PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIo
KUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKLSAgICBtX3R5cGUgPSBKYXZhU3RyaW5nKGVudiwgZmll
bGRUeXBlTmFtZSk7Ci0gICAgbV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV90eXBl
LlVURjhTdHJpbmcoKSk7Ci0KLSAgICAvLyBHZXQgZmllbGQgbmFtZQotICAgIGpzdHJpbmcgZmll
bGROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmll
bGQsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOwotICAgIG1fbmFtZSA9IEph
dmFTdHJpbmcoZW52LCBmaWVsZE5hbWUpOwotCi0gICAgbV9maWVsZCA9IG5ldyBKT2JqZWN0V3Jh
cHBlcihhRmllbGQpOwotfQotCi1KU1ZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0Fy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwg
UGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0KQotewotICAgIGlmICh0eXBlWzBdICE9
ICdbJykKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gbmV3IChl
eGVjKSBSdW50aW1lQXJyYXkoZXhlYywgbmV3IEphdmFBcnJheShhbk9iamVjdCwgdHlwZSwgcm9v
dE9iamVjdCkpOwotfQotCi1qdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3Rh
bmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0Ci17
Ci0gICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAg
am9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPm1faW5zdGFuY2U7Ci0gICAgSk5JRW52
KiBlbnYgPSBnZXRKTklFbnYoKTsKLSAgICBqdmFsdWUgcmVzdWx0OwotCi0gICAgYnplcm8oJnJl
c3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOwotICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENs
YXNzKGZpZWxkSkluc3RhbmNlKTsKLSAgICBpZiAoY2xzKSB7Ci0gICAgICAgIGptZXRob2RJRCBt
aWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFtZSwgc2lnKTsKLSAgICAgICAgaWYgKG1pZCkg
ewotICAgICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2Jq
ZWN0KCk7Ci0gICAgICAgICAgICBpZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVI
YW5kbGUoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247
Ci0gICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMV07Ci0KLSAgICAgICAgICAgICAgICBhcmdz
WzBdLmwgPSBqaW5zdGFuY2U7Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMs
IHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVy
blR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAg
ICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9T
dHJpbmcoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLUpTVmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpKSBjb25zdAotewotICAgIGNvbnN0IEphdmFJ
bnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UqPihpKTsK
LQotICAgIEpTVmFsdWUganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotCi0gICAgc3dpdGNoICht
X0pOSVR5cGUpIHsKLSAgICBjYXNlIGFycmF5X3R5cGU6Ci0gICAgY2FzZSBvYmplY3RfdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAganZhbHVlIHJlc3VsdCA9IGRpc3BhdGNoVmFsdWVGcm9t
SW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylMamF2
YS9sYW5nL09iamVjdDsiLCBvYmplY3RfdHlwZSk7Ci0gICAgICAgICAgICBqb2JqZWN0IGFuT2Jq
ZWN0ID0gcmVzdWx0Lmw7Ci0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5
cGUoKTsKLSAgICAgICAgICAgIGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQotICAgICAgICAgICAg
ICAgIGpzcmVzdWx0ID0gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5P
YmplY3QsIGFycmF5VHlwZSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChhbk9iamVjdCkKLSAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5j
ZTo6Y3JlYXRlKGFuT2JqZWN0LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGlt
ZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYm9v
bGVhbl90eXBlOgotICAgICAgICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJv
bUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7KVoiLCBib29sZWFuX3R5cGUpLnopOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYnl0
ZV90eXBlOgotICAgIGNhc2UgY2hhcl90eXBlOgotICAgIGNhc2Ugc2hvcnRfdHlwZToKLQotICAg
IGNhc2UgaW50X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGppbnQgdmFsdWU7Ci0gICAg
ICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBp
bnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7Ci0g
ICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQgPSBqc051
bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGxvbmdfdHlwZToKLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAg
Y2FzZSBkb3VibGVfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsK
LSAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4
ZWMsIGluc3RhbmNlLCAiZ2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJs
ZV90eXBlKTsKLSAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0Lmk7Ci0gICAgICAgICAgICBqc3Jl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBKU19MT0coImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1lKCkpLlVURjhT
dHJpbmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKLQotICAg
IHJldHVybiBqc3Jlc3VsdDsKLX0KLQotdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwg
anZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25z
dAotewotICAgIGpvYmplY3Qgamluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwot
ICAgIGpvYmplY3QgZmllbGRKSW5zdGFuY2UgPSBtX2ZpZWxkLT5tX2luc3RhbmNlOwotICAgIEpO
SUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0KLSAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmpl
Y3RDbGFzcyhmaWVsZEpJbnN0YW5jZSk7Ci0gICAgaWYgKGNscykgewotICAgICAgICBqbWV0aG9k
SUQgbWlkID0gZW52LT5HZXRNZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7Ci0gICAgICAgIGlmICht
aWQpIHsKLSAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9v
dE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uOwotICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzJdOwotICAgICAgICAgICAgICAgIGp2
YWx1ZSByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7Ci0g
ICAgICAgICAgICAgICAgYXJnc1sxXSA9IGphdmFWYWx1ZTsKLSAgICAgICAgICAgICAgICBkaXNw
YXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3Rh
bmNlLCBmYWxzZSwgdm9pZF90eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVz
Y3JpcHRpb24pOwotICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICBj
b25zdCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3Rh
bmNlKj4oaSk7Ci0gICAganZhbHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4
ZWMsIGFWYWx1ZSwgbV9KTklUeXBlLCB0eXBlKCkpOwotCi0gICAgSlNfTE9HKCJzZXR0aW5nIHZh
bHVlICVzIHRvICVzXG4iLCBVU3RyaW5nKG5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIGFW
YWx1ZS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKLQotICAgIHN3aXRjaCAobV9KTklUeXBlKSB7
Ci0gICAgY2FzZSBhcnJheV90eXBlOgotICAgIGNhc2Ugb2JqZWN0X3R5cGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBq
YXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylW
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGJvb2xlYW5fdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywg
aW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1op
ViIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBieXRlX3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCeXRlIiwgIihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5j
ZSwgamF2YVZhbHVlLCAic2V0Q2hhciIsICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHNob3J0X3R5cGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBq
YXZhVmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZh
bHVlLCAic2V0SW50IiwgIihMamF2YS9sYW5nL09iamVjdDtJKVYiKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgbG9uZ190eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAi
c2V0TG9uZyIsICIoTGphdmEvbGFuZy9PYmplY3Q7SilWIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRp
c3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRG
bG9hdCIsICIoTGphdmEvbGFuZy9PYmplY3Q7RilWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIGRvdWJsZV90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNw
YXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91
YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDtEKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIEphdmFNZXRob2Q6
OkphdmFNZXRob2QoSk5JRW52KiBlbnYsIGpvYmplY3QgYU1ldGhvZCkKIHsKICAgICAvLyBHZXQg
cmV0dXJuIHR5cGUKQEAgLTMwOSw3ICsxMDMsOSBAQCBKYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgp
CiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0aW9uIEFQ
SS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBj
b25zdCBjaGFyKiBjbGFzc05hbWUpCiB7CisjaWYgVVNFKEpTQykKICAgICBBU1NFUlQoSlNMb2Nr
Ojpsb2NrQ291bnQoKSA+IDApOworI2VuZGlmCiAKICAgICBjaGFyKiBjID0gc3RyZHVwKGNsYXNz
TmFtZSk7CiAKQEAgLTMyOCw3ICsxMjQsOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUo
U3RyaW5nQnVpbGRlCiBjb25zdCBjaGFyKiBKYXZhTWV0aG9kOjpzaWduYXR1cmUoKSBjb25zdAog
ewogICAgIGlmICghbV9zaWduYXR1cmUpIHsKKyNpZiBVU0UoSlNDKQogICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworI2VuZGlmCiAKICAgICAgICAgU3RyaW5nQnVp
bGRlciBzaWduYXR1cmVCdWlsZGVyOwogICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgi
KCIpOwpAQCAtMzc3LDIwMCArMTc1LDQgQEAgam1ldGhvZElEIEphdmFNZXRob2Q6Om1ldGhvZElE
KGpvYmplY3QgbwogICAgIHJldHVybiBtX21ldGhvZElEOwogfQogCi0KLUphdmFBcnJheTo6SmF2
YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9i
amVjdD4gcm9vdE9iamVjdCkKLSAgICA6IEFycmF5KHJvb3RPYmplY3QpCi17Ci0gICAgbV9hcnJh
eSA9IG5ldyBKT2JqZWN0V3JhcHBlcihhcnJheSk7Ci0gICAgLy8gSmF2YSBhcnJheSBhcmUgZml4
ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUgbGVuZ3RoLgotICAgIEpOSUVudiogZW52ID0gZ2V0
Sk5JRW52KCk7Ci0gICAgbV9sZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKHN0YXRpY19jYXN0
PGphcnJheT4obV9hcnJheS0+bV9pbnN0YW5jZSkpOwotICAgIG1fdHlwZSA9IHN0cmR1cCh0eXBl
KTsKLSAgICBtX3Jvb3RPYmplY3QgPSByb290T2JqZWN0OwotfQotCi1KYXZhQXJyYXk6On5KYXZh
QXJyYXkoKQotewotICAgIGZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV90eXBlKSk7Ci19Ci0KLVJv
b3RPYmplY3QqIEphdmFBcnJheTo6cm9vdE9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cm9vdE9iamVjdCAmJiBtX3Jvb3RPYmplY3QtPmlzVmFsaWQoKSA/IG1fcm9vdE9iamVjdC5nZXQo
KSA6IDA7Ci19Ci0KLXZvaWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgYVZhbHVlKSBjb25zdAotewotICAgIEpOSUVudiogZW52
ID0gZ2V0Sk5JRW52KCk7Ci0gICAgY2hhciogamF2YUNsYXNzTmFtZSA9IDA7Ci0KLSAgICBKTklU
eXBlIGFycmF5VHlwZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShtX3R5cGVbMV0pOwotICAg
IGlmIChtX3R5cGVbMV0gPT0gJ0wnKSB7Ci0gICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBhcnJh
eSB3aWxsIGJlIHNvbWV0aGluZyBsaWtlOgotICAgICAgICAvLyAiW0xqYXZhLmxhbmcuc3RyaW5n
OyIuICBUaGlzIGlzIGd1YXJhbnRlZWQsIHNvIG5vIG5lZWQKLSAgICAgICAgLy8gZm9yIGV4dHJh
IHNhbml0eSBjaGVja3MuCi0gICAgICAgIGphdmFDbGFzc05hbWUgPSBzdHJkdXAoJm1fdHlwZVsy
XSk7Ci0gICAgICAgIGphdmFDbGFzc05hbWVbc3RyY2hyKGphdmFDbGFzc05hbWUsICc7JyktamF2
YUNsYXNzTmFtZV0gPSAwOwotICAgIH0KLSAgICBqdmFsdWUgYUpWYWx1ZSA9IGNvbnZlcnRWYWx1
ZVRvSlZhbHVlKGV4ZWMsIGFWYWx1ZSwgYXJyYXlUeXBlLCBqYXZhQ2xhc3NOYW1lKTsKLQotICAg
IHN3aXRjaCAoYXJyYXlUeXBlKSB7Ci0gICAgY2FzZSBvYmplY3RfdHlwZToKLSAgICAgICAgewot
ICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVj
dEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCBhSlZhbHVlLmwpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYm9vbGVhbl90eXBlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqYm9vbGVhbkFy
cmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS56KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGJ5dGVfdHlwZToKLSAgICAgICAgewotICAgICAg
ICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amJ5dGVBcnJheT4oamF2
YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgY2FzZSBjaGFyX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVu
di0+U2V0Q2hhckFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgp
KSwgaW5kZXgsIDEsICZhSlZhbHVlLmMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgIGNhc2Ugc2hvcnRfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXRT
aG9ydEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSksIGlu
ZGV4LCAxLCAmYUpWYWx1ZS5zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBlbnYtPlNldEludEFycmF5
UmVnaW9uKHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFK
VmFsdWUuaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBsb25n
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0TG9uZ0FycmF5UmVnaW9uKHN0
YXRpY19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmop
OwotICAgICAgICB9Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqZmxvYXRBcnJheT4oamF2
YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgY2FzZSBkb3VibGVfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAg
ZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqZG91YmxlQXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoamF2
YUNsYXNzTmFtZSkKLSAgICAgICAgZnJlZShjb25zdF9jYXN0PGNoYXIqPihqYXZhQ2xhc3NOYW1l
KSk7Ci19Ci0KLQotSlNWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwot
ICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKG1fdHlwZVsx
XSk7Ci0gICAgc3dpdGNoIChhcnJheVR5cGUpIHsKLSAgICBjYXNlIG9iamVjdF90eXBlOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBqb2JqZWN0QXJyYXkgb2JqZWN0QXJyYXkgPSBzdGF0aWNfY2Fz
dDxqb2JqZWN0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpvYmplY3QgYW5PYmpl
Y3Q7Ci0gICAgICAgICAgICBhbk9iamVjdCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KG9i
amVjdEFycmF5LCBpbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIE5vIG9iamVjdD8KLSAgICAgICAg
ICAgIGlmICghYW5PYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0g
ICAgICAgICAgICAvLyBOZXN0ZWQgYXJyYXk/Ci0gICAgICAgICAgICBpZiAobV90eXBlWzFdID09
ICdbJykKLSAgICAgICAgICAgICAgICByZXR1cm4gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRv
QXJyYXkoZXhlYywgYW5PYmplY3QsIG1fdHlwZSArIDEsIHJvb3RPYmplY3QoKSk7Ci0gICAgICAg
ICAgICAvLyBvciBhcnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8KLSAgICAgICAgICAgIHJldHVy
biBKYXZhSW5zdGFuY2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBib29sZWFuX3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9vbGVhbkFycmF5ID0gc3RhdGlj
X2Nhc3Q8amJvb2xlYW5BcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamJvb2xlYW4g
YUJvb2xlYW47Ci0gICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5BcnJheVJlZ2lvbihib29sZWFu
QXJyYXksIGluZGV4LCAxLCAmYUJvb2xlYW4pOwotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihhQm9vbGVhbik7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYnl0ZV90eXBlOgotICAgICAgICB7
Ci0gICAgICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IHN0YXRpY19jYXN0PGpieXRlQXJy
YXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpieXRlIGFCeXRlOwotICAgICAgICAgICAg
ZW52LT5HZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFycmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKLSAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhQnl0ZSk7Ci0gICAgICAgIH0KLQotICAg
IGNhc2UgY2hhcl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqY2hhckFycmF5IGNoYXJB
cnJheSA9IHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAg
IGpjaGFyIGFDaGFyOwotICAgICAgICAgICAgZW52LT5HZXRDaGFyQXJyYXlSZWdpb24oY2hhckFy
cmF5LCBpbmRleCwgMSwgJmFDaGFyKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVj
LCBhQ2hhcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBzaG9y
dF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqc2hvcnRBcnJheSBzaG9ydEFycmF5ID0g
c3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpzaG9y
dCBhU2hvcnQ7Ci0gICAgICAgICAgICBlbnYtPkdldFNob3J0QXJyYXlSZWdpb24oc2hvcnRBcnJh
eSwgaW5kZXgsIDEsICZhU2hvcnQpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGFTaG9ydCk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgaW50X3R5cGU6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9IHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2
YUFycmF5KCkpOwotICAgICAgICAgICAgamludCBhbkludDsKLSAgICAgICAgICAgIGVudi0+R2V0
SW50QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4LCAxLCAmYW5JbnQpOwotICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFuSW50KTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBsb25n
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gc3Rh
dGljX2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamxvbmcgYUxv
bmc7Ci0gICAgICAgICAgICBlbnYtPkdldExvbmdBcnJheVJlZ2lvbihsb25nQXJyYXksIGluZGV4
LCAxLCAmYUxvbmcpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFMb25nKTsK
LSAgICAgICAgfQotCi0gICAgY2FzZSBmbG9hdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBqZmxvYXRBcnJheSBmbG9hdEFycmF5ID0gc3RhdGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFB
cnJheSgpKTsKLSAgICAgICAgICAgIGpmbG9hdCBhRmxvYXQ7Ci0gICAgICAgICAgICBlbnYtPkdl
dEZsb2F0QXJyYXlSZWdpb24oZmxvYXRBcnJheSwgaW5kZXgsIDEsICZhRmxvYXQpOwotICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFGbG9hdCk7Ci0gICAgICAgIH0KLQotICAgIGNh
c2UgZG91YmxlX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3Vi
bGVBcnJheSA9IHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAg
ICAgICAgamRvdWJsZSBhRG91YmxlOwotICAgICAgICAgICAgZW52LT5HZXREb3VibGVBcnJheVJl
Z2lvbihkb3VibGVBcnJheSwgaW5kZXgsIDEsICZhRG91YmxlKTsKLSAgICAgICAgICAgIHJldHVy
biBqc051bWJlcihleGVjLCBhRG91YmxlKTsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotdW5zaWdu
ZWQgaW50IEphdmFBcnJheTo6Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sZW5n
dGg7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQpJbmRleDogV2ViQ29y
ZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pu
aS9KTklCcmlkZ2UuaAkocmV2aXNpb24gNTM3MDApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvSk5J
QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQogCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkphdmFJ
bnN0YW5jZUpTQy5oIgogCiAjaWYgVVNFKEpTQykKICNpbmNsdWRlICJKYXZhU3RyaW5nSlNDLmgi
CkBAIC04NCwzMCArODMsNiBAQCBwcml2YXRlOgogICAgIEpOSVR5cGUgbV9KTklUeXBlOwogfTsK
IAotCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQgewotcHVibGljOgotICAgIEphdmFG
aWVsZChKTklFbnYqLCBqb2JqZWN0IGFGaWVsZCk7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFs
dWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNl
KiwgSlNWYWx1ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlLlVURjhTdHJpbmcoKTsgfQotCi0gICAgSk5JVHlwZSBnZXRKTklUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9KTklUeXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkaXNw
YXRjaFNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBq
dmFsdWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZykgY29uc3Q7Ci0gICAganZh
bHVlIGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSmF2YUluc3Rh
bmNlKiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnLCBKTklUeXBlIHJldHVyblR5
cGUpIGNvbnN0OwotCi0gICAgSmF2YVN0cmluZyBtX25hbWU7Ci0gICAgSmF2YVN0cmluZyBtX3R5
cGU7Ci0gICAgSk5JVHlwZSBtX0pOSVR5cGU7Ci0gICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBt
X2ZpZWxkOwotfTsKLQotCiBjbGFzcyBKYXZhTWV0aG9kIDogcHVibGljIE1ldGhvZCB7CiBwdWJs
aWM6CiAgICAgSmF2YU1ldGhvZChKTklFbnYqLCBqb2JqZWN0IGFNZXRob2QpOwpAQCAtMTM2LDI3
ICsxMTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1N0YXRpYzsKIH07CiAKLWNsYXNzIEph
dmFBcnJheSA6IHB1YmxpYyBBcnJheSB7Ci1wdWJsaWM6Ci0gICAgSmF2YUFycmF5KGpvYmplY3Qg
YXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwotICAgIHZp
cnR1YWwgfkphdmFBcnJheSgpOwotCi0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW50
IGluZGV4LCBKU1ZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldExlbmd0aCgpIGNvbnN0OwotCi0gICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7
IHJldHVybiBtX2FycmF5LT5tX2luc3RhbmNlOyB9Ci0KLSAgICBzdGF0aWMgSlNWYWx1ZSBjb252
ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiwgam9iamVjdCwgY29uc3QgY2hhciogdHlwZSwg
UGFzc1JlZlB0cjxSb290T2JqZWN0Pik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEpPYmplY3RX
cmFwcGVyPiBtX2FycmF5OwotICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aDsKLSAgICBjb25zdCBj
aGFyKiBtX3R5cGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5jcHAJKHJl
dmlzaW9uIDUzNjk3KQkoZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcDo1MzY5
NykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKTklCcmlkZ2UuaCIKKworI2lmIEVOQUJMRShNQUNf
SkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0
eS5oIgorI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVp
bGRlci5oIgorI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJydW50aW1lX29i
amVjdC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCisjaWZkZWYgTkRFQlVHCisjZGVm
aW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIEpT
X0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIC0t
ICVzOiAgIiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCisgICAgZnByaW50
ZihzdGRlcnIsIGZvcm1hdEFuZEFyZ3MpOyBcCit9CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKKworSmF2YVBhcmFtZXRlcjo6SmF2YVBhcmFtZXRlcihKTklFbnYqIGVudiwganN0
cmluZyB0eXBlKQoreworICAgIG1fdHlwZSA9IEphdmFTdHJpbmcoZW52LCB0eXBlKTsKKyAgICBt
X0pOSVR5cGUgPSBKTklUeXBlRnJvbUNsYXNzTmFtZShtX3R5cGUuVVRGOFN0cmluZygpKTsKK30K
KworSmF2YUZpZWxkOjpKYXZhRmllbGQoSk5JRW52KiBlbnYsIGpvYmplY3QgYUZpZWxkKQorewor
ICAgIC8vIEdldCBmaWVsZCB0eXBlCisgICAgam9iamVjdCBmaWVsZFR5cGUgPSBjYWxsSk5JTWV0
aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldFR5cGUiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwor
ICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklN
ZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5n
OyIpKTsKKyAgICBtX3R5cGUgPSBKYXZhU3RyaW5nKGVudiwgZmllbGRUeXBlTmFtZSk7CisgICAg
bV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV90eXBlLlVURjhTdHJpbmcoKSk7CisK
KyAgICAvLyBHZXQgZmllbGQgbmFtZQorICAgIGpzdHJpbmcgZmllbGROYW1lID0gc3RhdGljX2Nh
c3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXROYW1lIiwgIigp
TGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIG1fbmFtZSA9IEphdmFTdHJpbmcoZW52LCBmaWVs
ZE5hbWUpOworCisgICAgbV9maWVsZCA9IG5ldyBKT2JqZWN0V3JhcHBlcihhRmllbGQpOworfQor
CitKU1ZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSogZXhl
Yywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2Jq
ZWN0PiByb290T2JqZWN0KQoreworICAgIGlmICh0eXBlWzBdICE9ICdbJykKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXko
ZXhlYywgbmV3IEphdmFBcnJheShhbk9iamVjdCwgdHlwZSwgcm9vdE9iamVjdCkpOworfQorCitq
dmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3Qg
Y2hhciogc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0Cit7CisgICAgam9iamVjdCBqaW5z
dGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7CisgICAgam9iamVjdCBmaWVsZEpJbnN0
YW5jZSA9IG1fZmllbGQtPm1faW5zdGFuY2U7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYo
KTsKKyAgICBqdmFsdWUgcmVzdWx0OworCisgICAgYnplcm8oJnJlc3VsdCwgc2l6ZW9mKGp2YWx1
ZSkpOworICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNl
KTsKKyAgICBpZiAoY2xzKSB7CisgICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhv
ZElEKGNscywgbmFtZSwgc2lnKTsKKyAgICAgICAgaWYgKG1pZCkgeworICAgICAgICAgICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAg
ICBpZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAg
anZhbHVlIGFyZ3NbMV07CisKKyAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7
CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2
ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywg
cmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbkRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pT
VmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEluc3RhbmNlKiBpKSBjb25zdAoreworICAgIGNvbnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UqPihpKTsKKworICAgIEpTVmFsdWUganNy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworCisgICAgc3dpdGNoIChtX0pOSVR5cGUpIHsKKyAgICBj
YXNlIGFycmF5X3R5cGU6CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAganZhbHVlIHJlc3VsdCA9IGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoZXhlYywgaW5z
dGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLCBv
YmplY3RfdHlwZSk7CisgICAgICAgICAgICBqb2JqZWN0IGFuT2JqZWN0ID0gcmVzdWx0Lmw7CisK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKKyAgICAgICAgICAg
IGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQorICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0gSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlwZSwg
aW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChhbk9iamVjdCkK
KyAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0
LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAg
ICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBib29sZWFuX3R5
cGUpLnopOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgIGNhc2Ug
Y2hhcl90eXBlOgorICAgIGNhc2Ugc2hvcnRfdHlwZToKKworICAgIGNhc2UgaW50X3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGppbnQgdmFsdWU7CisgICAgICAgICAgICBqdmFsdWUgcmVz
dWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEludCIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7CisgICAgICAgICAgICB2YWx1ZSA9
IHJlc3VsdC5pOworICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihleGVjLCBzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IGxvbmdfdHlwZToKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgY2FzZSBkb3VibGVfdHlwZToK
KyAgICAgICAgeworICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKKyAgICAgICAgICAgIGp2YWx1
ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0
RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKKyAgICAgICAg
ICAgIHZhbHVlID0gcmVzdWx0Lmk7CisgICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKGV4
ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBKU19MT0coImdl
dHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1lKCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBq
c3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKworICAgIHJldHVybiBqc3Jlc3VsdDsK
K30KKwordm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwganZhbHVlIGphdmFWYWx1ZSwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25zdAoreworICAgIGpvYmplY3Qg
amluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOworICAgIGpvYmplY3QgZmllbGRK
SW5zdGFuY2UgPSBtX2ZpZWxkLT5tX2luc3RhbmNlOworICAgIEpOSUVudiogZW52ID0gZ2V0Sk5J
RW52KCk7CisKKyAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmplY3RDbGFzcyhmaWVsZEpJbnN0
YW5jZSk7CisgICAgaWYgKGNscykgeworICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRN
ZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7CisgICAgICAgIGlmIChtaWQpIHsKKyAgICAgICAgICAg
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9vdE9iamVjdCgpOworICAgICAg
ICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCkpIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOworICAgICAgICAgICAg
ICAgIGp2YWx1ZSBhcmdzWzJdOworICAgICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7CisKKyAg
ICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CisgICAgICAgICAgICAgICAgYXJn
c1sxXSA9IGphdmFWYWx1ZTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywg
cm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgdm9pZF90
eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBK
YXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3Rh
bmNlKiBpLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKK3sKKyAgICBjb25zdCBKYXZhSW5zdGFuY2Uq
IGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlKj4oaSk7CisgICAganZh
bHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIGFWYWx1ZSwgbV9KTklU
eXBlLCB0eXBlKCkpOworCisgICAgSlNfTE9HKCJzZXR0aW5nIHZhbHVlICVzIHRvICVzXG4iLCBV
U3RyaW5nKG5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIGFWYWx1ZS50b1N0cmluZyhleGVj
KS5hc2NpaSgpKTsKKworICAgIHN3aXRjaCAobV9KTklUeXBlKSB7CisgICAgY2FzZSBhcnJheV90
eXBlOgorICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAi
KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1
ZSwgInNldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUs
ICJzZXRCeXRlIiwgIihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBk
aXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0
Q2hhciIsICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRTaG9y
dCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNl
dFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0SW50IiwgIihM
amF2YS9sYW5nL09iamVjdDtJKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgbG9uZ190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEv
bGFuZy9PYmplY3Q7SilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IGZsb2F0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0lu
c3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEvbGFu
Zy9PYmplY3Q7RilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRv
dWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwgIihMamF2YS9sYW5n
L09iamVjdDtEKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0phdmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52
KiBlbnYsIGpvYmplY3QgYU1ldGhvZCkKK3sKKyAgICAvLyBHZXQgcmV0dXJuIHR5cGUKKyAgICBq
b2JqZWN0IHJldHVyblR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRS
ZXR1cm5UeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKKyAgICBqc3RyaW5nIHJldHVyblR5
cGVOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1
cm5UeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICBtX3JldHVy
blR5cGUgPSBKYXZhU3RyaW5nKGVudiwgcmV0dXJuVHlwZU5hbWUpOworICAgIG1fSk5JUmV0dXJu
VHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1lKG1fcmV0dXJuVHlwZS5VVEY4U3RyaW5nKCkpOwor
ICAgIGVudi0+RGVsZXRlTG9jYWxSZWYocmV0dXJuVHlwZSk7CisgICAgZW52LT5EZWxldGVMb2Nh
bFJlZihyZXR1cm5UeXBlTmFtZSk7CisKKyAgICAvLyBHZXQgbWV0aG9kIG5hbWUKKyAgICBqc3Ry
aW5nIG1ldGhvZE5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmpl
Y3Q+KGFNZXRob2QsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIG1f
bmFtZSA9IEphdmFTdHJpbmcoZW52LCBtZXRob2ROYW1lKTsKKyAgICBlbnYtPkRlbGV0ZUxvY2Fs
UmVmKG1ldGhvZE5hbWUpOworCisgICAgLy8gR2V0IHBhcmFtZXRlcnMKKyAgICBqYXJyYXkganBh
cmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxqYXJyYXk+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1l
dGhvZCwgImdldFBhcmFtZXRlclR5cGVzIiwgIigpW0xqYXZhL2xhbmcvQ2xhc3M7IikpOworICAg
IG1fbnVtUGFyYW1ldGVycyA9IGVudi0+R2V0QXJyYXlMZW5ndGgoanBhcmFtZXRlcnMpOworICAg
IG1fcGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1ldGVyW21fbnVtUGFyYW1ldGVyc107CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtUGFyYW1ldGVyczsgaSsrKSB7CisgICAgICAgIGpv
YmplY3QgYVBhcmFtZXRlciA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0
PGpvYmplY3RBcnJheT4oanBhcmFtZXRlcnMpLCBpKTsKKyAgICAgICAganN0cmluZyBwYXJhbWV0
ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFy
YW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICAgICAgbV9w
YXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFtZXRlcihlbnYsIHBhcmFtZXRlck5hbWUpOworICAgICAg
ICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFQYXJhbWV0ZXIpOworICAgICAgICBlbnYtPkRlbGV0ZUxv
Y2FsUmVmKHBhcmFtZXRlck5hbWUpOworICAgIH0KKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGpw
YXJhbWV0ZXJzKTsKKworICAgIC8vIENyZWF0ZWQgbGF6aWx5LgorICAgIG1fc2lnbmF0dXJlID0g
MDsKKyAgICBtX21ldGhvZElEID0gMDsKKworICAgIGpjbGFzcyBtb2RpZmllckNsYXNzID0gZW52
LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyIik7CisgICAgaW50IG1vZGlm
aWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1ldGhvZCwgImdldE1vZGlmaWVycyIsICIoKUki
KTsKKyAgICBtX2lzU3RhdGljID0gc3RhdGljX2Nhc3Q8Ym9vbD4oY2FsbEpOSVN0YXRpY01ldGhv
ZDxqYm9vbGVhbj4obW9kaWZpZXJDbGFzcywgImlzU3RhdGljIiwgIihJKVoiLCBtb2RpZmllcnMp
KTsKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1vZGlmaWVyQ2xhc3MpOworfQorCitKYXZhTWV0
aG9kOjp+SmF2YU1ldGhvZCgpCit7CisgICAgaWYgKG1fc2lnbmF0dXJlKQorICAgICAgICBmcmVl
KG1fc2lnbmF0dXJlKTsKKyAgICBkZWxldGVbXSBtX3BhcmFtZXRlcnM7Cit9OworCisvLyBKTkkg
bWV0aG9kIHNpZ25hdHVyZXMgdXNlICcvJyBiZXR3ZWVuIGNvbXBvbmVudHMgb2YgYSBjbGFzcyBu
YW1lLCBidXQKKy8vIHdlIGdldCAnLicgYmV0d2VlbiBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxl
Y3Rpb24gQVBJLgorc3RhdGljIHZvaWQgYXBwZW5kQ2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkKK3sKKyAgICBBU1NFUlQoSlNMb2NrOjpsb2Nr
Q291bnQoKSA+IDApOworCisgICAgY2hhciogYyA9IHN0cmR1cChjbGFzc05hbWUpOworCisgICAg
Y2hhciogcmVzdWx0ID0gYzsKKyAgICB3aGlsZSAoKmMpIHsKKyAgICAgICAgaWYgKCpjID09ICcu
JykKKyAgICAgICAgICAgICpjID0gJy8nOworICAgICAgICBjKys7CisgICAgfQorCisgICAgYnVp
bGRlci5hcHBlbmQocmVzdWx0KTsKKworICAgIGZyZWUocmVzdWx0KTsKK30KKworY29uc3QgY2hh
ciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2lnbmF0dXJl
KSB7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWlsZGVyOworICAgICAgICBzaWduYXR1cmVCdWls
ZGVyLmFwcGVuZCgiKCIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtUGFyYW1l
dGVyczsgaSsrKSB7CisgICAgICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gcGFy
YW1ldGVyQXQoaSk7CisgICAgICAgICAgICBKTklUeXBlIHR5cGUgPSBhUGFyYW1ldGVyLT5nZXRK
TklUeXBlKCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBhcnJheV90eXBlKQorICAgICAgICAg
ICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBl
KCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRl
ci5hcHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUodHlwZSkpOworICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IG9iamVjdF90eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiOyIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzaWduYXR1cmVCdWlsZGVy
LmFwcGVuZCgiKSIpOworCisgICAgICAgIGNvbnN0IGNoYXIqIHJldHVyblR5cGUgPSBtX3JldHVy
blR5cGUuVVRGOFN0cmluZygpOworICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBlID09IGFycmF5
X3R5cGUpCisgICAgICAgICAgICBhcHBlbmRDbGFzc05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0
dXJuVHlwZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5h
cHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUobV9KTklSZXR1cm5UeXBlKSk7CisgICAg
ICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIHJldHVyblR5cGUpOworICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgc2lnbmF0dXJlU3RyaW5nID0gc2lnbmF0dXJl
QnVpbGRlci50b1N0cmluZygpOworICAgICAgICBtX3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1
cmVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2lnbmF0dXJl
OworfQorCitKTklUeXBlIEphdmFNZXRob2Q6OkpOSVJldHVyblR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX0pOSVJldHVyblR5cGU7Cit9CisKK2ptZXRob2RJRCBKYXZhTWV0aG9kOjptZXRo
b2RJRChqb2JqZWN0IG9iaikgY29uc3QKK3sKKyAgICBpZiAoIW1fbWV0aG9kSUQpCisgICAgICAg
IG1fbWV0aG9kSUQgPSBnZXRNZXRob2RJRChvYmosIG1fbmFtZS5VVEY4U3RyaW5nKCksIHNpZ25h
dHVyZSgpKTsKKyAgICByZXR1cm4gbV9tZXRob2RJRDsKK30KKworCitKYXZhQXJyYXk6OkphdmFB
cnJheShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3RPYmplY3QpCisgICAgOiBBcnJheShyb290T2JqZWN0KQoreworICAgIG1fYXJyYXkg
PSBuZXcgSk9iamVjdFdyYXBwZXIoYXJyYXkpOworICAgIC8vIEphdmEgYXJyYXkgYXJlIGZpeGVk
IGxlbmd0aCwgc28gd2UgY2FuIGNhY2hlIGxlbmd0aC4KKyAgICBKTklFbnYqIGVudiA9IGdldEpO
SUVudigpOworICAgIG1fbGVuZ3RoID0gZW52LT5HZXRBcnJheUxlbmd0aChzdGF0aWNfY2FzdDxq
YXJyYXk+KG1fYXJyYXktPm1faW5zdGFuY2UpKTsKKyAgICBtX3R5cGUgPSBzdHJkdXAodHlwZSk7
CisgICAgbV9yb290T2JqZWN0ID0gcm9vdE9iamVjdDsKK30KKworSmF2YUFycmF5Ojp+SmF2YUFy
cmF5KCkKK3sKKyAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fdHlwZSkpOworfQorCitSb290
T2JqZWN0KiBKYXZhQXJyYXk6OnJvb3RPYmplY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jv
b3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkg
OiAwOworfQorCit2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKK3sKKyAgICBKTklFbnYqIGVudiA9
IGdldEpOSUVudigpOworICAgIGNoYXIqIGphdmFDbGFzc05hbWUgPSAwOworCisgICAgSk5JVHlw
ZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsKKyAgICBp
ZiAobV90eXBlWzFdID09ICdMJykgeworICAgICAgICAvLyBUaGUgdHlwZSBvZiB0aGUgYXJyYXkg
d2lsbCBiZSBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gIltMamF2YS5sYW5nLnN0cmluZzsi
LiAgVGhpcyBpcyBndWFyYW50ZWVkLCBzbyBubyBuZWVkCisgICAgICAgIC8vIGZvciBleHRyYSBz
YW5pdHkgY2hlY2tzLgorICAgICAgICBqYXZhQ2xhc3NOYW1lID0gc3RyZHVwKCZtX3R5cGVbMl0p
OworICAgICAgICBqYXZhQ2xhc3NOYW1lW3N0cmNocihqYXZhQ2xhc3NOYW1lLCAnOycpLWphdmFD
bGFzc05hbWVdID0gMDsKKyAgICB9CisgICAganZhbHVlIGFKVmFsdWUgPSBjb252ZXJ0VmFsdWVU
b0pWYWx1ZShleGVjLCBhVmFsdWUsIGFycmF5VHlwZSwgamF2YUNsYXNzTmFtZSk7CisKKyAgICBz
d2l0Y2ggKGFycmF5VHlwZSkgeworICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0PGpvYmplY3RB
cnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgYUpWYWx1ZS5sKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amJvb2xlYW5BcnJh
eT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUueik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVudi0+U2V0Qnl0ZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYt
PlNldENoYXJBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqY2hhckFycmF5PihqYXZhQXJyYXkoKSks
IGluZGV4LCAxLCAmYUpWYWx1ZS5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVudi0+U2V0U2hv
cnRBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqc2hvcnRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRl
eCwgMSwgJmFKVmFsdWUucyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
Y2FzZSBpbnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJl
Z2lvbihzdGF0aWNfY2FzdDxqaW50QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZh
bHVlLmkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgbG9uZ190
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJlZ2lvbihzdGF0
aWNfY2FzdDxqbG9uZ0FycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5qKTsK
KyAgICAgICAgfQorCisgICAgY2FzZSBmbG9hdF90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmYpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVu
di0+U2V0RG91YmxlQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amRvdWJsZUFycmF5PihqYXZhQXJy
YXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGphdmFD
bGFzc05hbWUpCisgICAgICAgIGZyZWUoY29uc3RfY2FzdDxjaGFyKj4oamF2YUNsYXNzTmFtZSkp
OworfQorCisKK0pTVmFsdWUgSmF2YUFycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAg
ICBKTklUeXBlIGFycmF5VHlwZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShtX3R5cGVbMV0p
OworICAgIHN3aXRjaCAoYXJyYXlUeXBlKSB7CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAg
ICAgeworICAgICAgICAgICAgam9iamVjdEFycmF5IG9iamVjdEFycmF5ID0gc3RhdGljX2Nhc3Q8
am9iamVjdEFycmF5PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBqb2JqZWN0IGFuT2JqZWN0
OworICAgICAgICAgICAgYW5PYmplY3QgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChvYmpl
Y3RBcnJheSwgaW5kZXgpOworCisgICAgICAgICAgICAvLyBObyBvYmplY3Q/CisgICAgICAgICAg
ICBpZiAoIWFuT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKworICAg
ICAgICAgICAgLy8gTmVzdGVkIGFycmF5PworICAgICAgICAgICAgaWYgKG1fdHlwZVsxXSA9PSAn
WycpCisgICAgICAgICAgICAgICAgcmV0dXJuIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0Fy
cmF5KGV4ZWMsIGFuT2JqZWN0LCBtX3R5cGUgKyAxLCByb290T2JqZWN0KCkpOworICAgICAgICAg
ICAgLy8gb3IgYXJyYXkgb2Ygb3RoZXIgb2JqZWN0IHR5cGU/CisgICAgICAgICAgICByZXR1cm4g
SmF2YUluc3RhbmNlOjpjcmVhdGUoYW5PYmplY3QsIHJvb3RPYmplY3QoKSktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7CisgICAgICAgIH0KKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAg
ICAgICB7CisgICAgICAgICAgICBqYm9vbGVhbkFycmF5IGJvb2xlYW5BcnJheSA9IHN0YXRpY19j
YXN0PGpib29sZWFuQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpib29sZWFuIGFC
b29sZWFuOworICAgICAgICAgICAgZW52LT5HZXRCb29sZWFuQXJyYXlSZWdpb24oYm9vbGVhbkFy
cmF5LCBpbmRleCwgMSwgJmFCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
YUJvb2xlYW4pOworICAgICAgICB9CisKKyAgICBjYXNlIGJ5dGVfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgamJ5dGVBcnJheSBieXRlQXJyYXkgPSBzdGF0aWNfY2FzdDxqYnl0ZUFycmF5
PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBqYnl0ZSBhQnl0ZTsKKyAgICAgICAgICAgIGVu
di0+R2V0Qnl0ZUFycmF5UmVnaW9uKGJ5dGVBcnJheSwgaW5kZXgsIDEsICZhQnl0ZSk7CisgICAg
ICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUJ5dGUpOworICAgICAgICB9CisKKyAgICBj
YXNlIGNoYXJfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamNoYXJBcnJheSBjaGFyQXJy
YXkgPSBzdGF0aWNfY2FzdDxqY2hhckFycmF5PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBq
Y2hhciBhQ2hhcjsKKyAgICAgICAgICAgIGVudi0+R2V0Q2hhckFycmF5UmVnaW9uKGNoYXJBcnJh
eSwgaW5kZXgsIDEsICZhQ2hhcik7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
YUNoYXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2Ugc2hvcnRf
dHlwZToKKyAgICAgICAgeworICAgICAgICAgICAganNob3J0QXJyYXkgc2hvcnRBcnJheSA9IHN0
YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBqc2hvcnQg
YVNob3J0OworICAgICAgICAgICAgZW52LT5HZXRTaG9ydEFycmF5UmVnaW9uKHNob3J0QXJyYXks
IGluZGV4LCAxLCAmYVNob3J0KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBh
U2hvcnQpOworICAgICAgICB9CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAg
ICAgICAgICBqaW50QXJyYXkgaW50QXJyYXkgPSBzdGF0aWNfY2FzdDxqaW50QXJyYXk+KGphdmFB
cnJheSgpKTsKKyAgICAgICAgICAgIGppbnQgYW5JbnQ7CisgICAgICAgICAgICBlbnYtPkdldElu
dEFycmF5UmVnaW9uKGludEFycmF5LCBpbmRleCwgMSwgJmFuSW50KTsKKyAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBhbkludCk7CisgICAgICAgIH0KKworICAgIGNhc2UgbG9uZ190
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqbG9uZ0FycmF5IGxvbmdBcnJheSA9IHN0YXRp
Y19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpsb25nIGFMb25n
OworICAgICAgICAgICAgZW52LT5HZXRMb25nQXJyYXlSZWdpb24obG9uZ0FycmF5LCBpbmRleCwg
MSwgJmFMb25nKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhTG9uZyk7Cisg
ICAgICAgIH0KKworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAg
amZsb2F0QXJyYXkgZmxvYXRBcnJheSA9IHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJy
YXkoKSk7CisgICAgICAgICAgICBqZmxvYXQgYUZsb2F0OworICAgICAgICAgICAgZW52LT5HZXRG
bG9hdEFycmF5UmVnaW9uKGZsb2F0QXJyYXksIGluZGV4LCAxLCAmYUZsb2F0KTsKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBhRmxvYXQpOworICAgICAgICB9CisKKyAgICBjYXNl
IGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqZG91YmxlQXJyYXkgZG91Ymxl
QXJyYXkgPSBzdGF0aWNfY2FzdDxqZG91YmxlQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAg
ICAgIGpkb3VibGUgYURvdWJsZTsKKyAgICAgICAgICAgIGVudi0+R2V0RG91YmxlQXJyYXlSZWdp
b24oZG91YmxlQXJyYXksIGluZGV4LCAxLCAmYURvdWJsZSk7CisgICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgYURvdWJsZSk7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK3Vuc2lnbmVk
IGludCBKYXZhQXJyYXk6OmdldExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGVuZ3Ro
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5jcHAJKHJldmlzaW9uIDUzNjk3KQorKysgV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
OSArMjUsMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSk5JQnJp
ZGdlLmgiCisjaW5jbHVkZSAiSk5JQnJpZGdlSlNDLmgiCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFf
QlJJREdFKQogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIK
ICNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0ZS5oIgotI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIu
aCIKICNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3Qu
aCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAogI2lmZGVmIE5ERUJVRwogI2RlZmluZSBK
U19MT0coZm9ybWF0QW5kQXJncy4uLikgKCh2b2lkKTApCkBAIC01MCwxNSArNDUsOCBAQAogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogCi1KYXZhUGFyYW1ldGVyOjpKYXZhUGFyYW1ldGVyKEpO
SUVudiogZW52LCBqc3RyaW5nIHR5cGUpCi17Ci0gICAgbV90eXBlID0gSmF2YVN0cmluZyhlbnYs
IHR5cGUpOwotICAgIG1fSk5JVHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1lKG1fdHlwZS5VVEY4
U3RyaW5nKCkpOwotfQotCiBKYXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYqIGVudiwgam9iamVj
dCBhRmllbGQpCiB7CiAgICAgLy8gR2V0IGZpZWxkIHR5cGUKQEAgLTI1OSwxMjUgKzI0Nyw2IEBA
IHZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1MKICAgICB9CiB9CiAKLUph
dmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52KiBlbnYsIGpvYmplY3QgYU1ldGhvZCkKLXsKLSAg
ICAvLyBHZXQgcmV0dXJuIHR5cGUKLSAgICBqb2JqZWN0IHJldHVyblR5cGUgPSBjYWxsSk5JTWV0
aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRSZXR1cm5UeXBlIiwgIigpTGphdmEvbGFuZy9DbGFz
czsiKTsKLSAgICBqc3RyaW5nIHJldHVyblR5cGVOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4o
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKLSAgICBtX3JldHVyblR5cGUgPSBKYXZhU3RyaW5nKGVudiwgcmV0dXJu
VHlwZU5hbWUpOwotICAgIG1fSk5JUmV0dXJuVHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1lKG1f
cmV0dXJuVHlwZS5VVEY4U3RyaW5nKCkpOwotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYocmV0dXJu
VHlwZSk7Ci0gICAgZW52LT5EZWxldGVMb2NhbFJlZihyZXR1cm5UeXBlTmFtZSk7Ci0KLSAgICAv
LyBHZXQgbWV0aG9kIG5hbWUKLSAgICBqc3RyaW5nIG1ldGhvZE5hbWUgPSBzdGF0aWNfY2FzdDxq
c3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXROYW1lIiwgIigpTGph
dmEvbGFuZy9TdHJpbmc7IikpOwotICAgIG1fbmFtZSA9IEphdmFTdHJpbmcoZW52LCBtZXRob2RO
YW1lKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1ldGhvZE5hbWUpOwotCi0gICAgLy8gR2V0
IHBhcmFtZXRlcnMKLSAgICBqYXJyYXkganBhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxqYXJyYXk+
KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldFBhcmFtZXRlclR5cGVzIiwgIigp
W0xqYXZhL2xhbmcvQ2xhc3M7IikpOwotICAgIG1fbnVtUGFyYW1ldGVycyA9IGVudi0+R2V0QXJy
YXlMZW5ndGgoanBhcmFtZXRlcnMpOwotICAgIG1fcGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1l
dGVyW21fbnVtUGFyYW1ldGVyc107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtUGFy
YW1ldGVyczsgaSsrKSB7Ci0gICAgICAgIGpvYmplY3QgYVBhcmFtZXRlciA9IGVudi0+R2V0T2Jq
ZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4oanBhcmFtZXRlcnMpLCBp
KTsKLSAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4o
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKLSAgICAgICAgbV9wYXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFtZXRlcihl
bnYsIHBhcmFtZXRlck5hbWUpOwotICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFQYXJhbWV0
ZXIpOwotICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHBhcmFtZXRlck5hbWUpOwotICAgIH0K
LSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGpwYXJhbWV0ZXJzKTsKLQotICAgIC8vIENyZWF0ZWQg
bGF6aWx5LgotICAgIG1fc2lnbmF0dXJlID0gMDsKLSAgICBtX21ldGhvZElEID0gMDsKLQotICAg
IGpjbGFzcyBtb2RpZmllckNsYXNzID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0
L01vZGlmaWVyIik7Ci0gICAgaW50IG1vZGlmaWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1l
dGhvZCwgImdldE1vZGlmaWVycyIsICIoKUkiKTsKLSAgICBtX2lzU3RhdGljID0gc3RhdGljX2Nh
c3Q8Ym9vbD4oY2FsbEpOSVN0YXRpY01ldGhvZDxqYm9vbGVhbj4obW9kaWZpZXJDbGFzcywgImlz
U3RhdGljIiwgIihJKVoiLCBtb2RpZmllcnMpKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1v
ZGlmaWVyQ2xhc3MpOwotfQotCi1KYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgpCi17Ci0gICAgaWYg
KG1fc2lnbmF0dXJlKQotICAgICAgICBmcmVlKG1fc2lnbmF0dXJlKTsKLSAgICBkZWxldGVbXSBt
X3BhcmFtZXRlcnM7Ci19OwotCi0vLyBKTkkgbWV0aG9kIHNpZ25hdHVyZXMgdXNlICcvJyBiZXR3
ZWVuIGNvbXBvbmVudHMgb2YgYSBjbGFzcyBuYW1lLCBidXQKLS8vIHdlIGdldCAnLicgYmV0d2Vl
biBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxlY3Rpb24gQVBJLgotc3RhdGljIHZvaWQgYXBwZW5k
Q2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkK
LXsKLSAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291bnQoKSA+IDApOwotCi0gICAgY2hhciogYyA9
IHN0cmR1cChjbGFzc05hbWUpOwotCi0gICAgY2hhciogcmVzdWx0ID0gYzsKLSAgICB3aGlsZSAo
KmMpIHsKLSAgICAgICAgaWYgKCpjID09ICcuJykKLSAgICAgICAgICAgICpjID0gJy8nOwotICAg
ICAgICBjKys7Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQocmVzdWx0KTsKLQotICAgIGZy
ZWUocmVzdWx0KTsKLX0KLQotY29uc3QgY2hhciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fc2lnbmF0dXJlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWls
ZGVyOwotICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiKCIpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fbnVtUGFyYW1ldGVyczsgaSsrKSB7Ci0gICAgICAgICAgICBKYXZh
UGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gcGFyYW1ldGVyQXQoaSk7Ci0gICAgICAgICAgICBKTklU
eXBlIHR5cGUgPSBhUGFyYW1ldGVyLT5nZXRKTklUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlw
ZSA9PSBhcnJheV90eXBlKQotICAgICAgICAgICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1
cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2
ZVR5cGUodHlwZSkpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IG9iamVjdF90eXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBh
UGFyYW1ldGVyLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVCdWlsZGVy
LmFwcGVuZCgiOyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiKSIpOwotCi0gICAgICAgIGNvbnN0
IGNoYXIqIHJldHVyblR5cGUgPSBtX3JldHVyblR5cGUuVVRGOFN0cmluZygpOwotICAgICAgICBp
ZiAobV9KTklSZXR1cm5UeXBlID09IGFycmF5X3R5cGUpCi0gICAgICAgICAgICBhcHBlbmRDbGFz
c05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0dXJuVHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5
cGUobV9KTklSZXR1cm5UeXBlKSk7Ci0gICAgICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBlID09
IG9iamVjdF90eXBlKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVy
ZUJ1aWxkZXIsIHJldHVyblR5cGUpOwotICAgICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIu
YXBwZW5kKCI7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcg
c2lnbmF0dXJlU3RyaW5nID0gc2lnbmF0dXJlQnVpbGRlci50b1N0cmluZygpOwotICAgICAgICBt
X3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1cmVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fc2lnbmF0dXJlOwotfQotCi1KTklUeXBlIEphdmFNZXRob2Q6OkpO
SVJldHVyblR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX0pOSVJldHVyblR5cGU7Ci19Ci0K
LWptZXRob2RJRCBKYXZhTWV0aG9kOjptZXRob2RJRChqb2JqZWN0IG9iaikgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbWV0aG9kSUQpCi0gICAgICAgIG1fbWV0aG9kSUQgPSBnZXRNZXRob2RJRChvYmos
IG1fbmFtZS5VVEY4U3RyaW5nKCksIHNpZ25hdHVyZSgpKTsKLSAgICByZXR1cm4gbV9tZXRob2RJ
RDsKLX0KLQotCiBKYXZhQXJyYXk6OkphdmFBcnJheShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFy
KiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCiAgICAgOiBBcnJheShy
b290T2JqZWN0KQogewpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5oCShy
ZXZpc2lvbiA1MzY5NykJKGZyb20gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5oOjUzNjk3
KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSk5JQnJpZGdlX2gKKyNkZWZpbmUgSk5JQnJpZGdlX2gKKworI2lmIEVOQUJMRShNQUNf
SkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSmF2YUlu
c3RhbmNlSlNDLmgiCisKKyNpZiBVU0UoSlNDKQorI2luY2x1ZGUgIkphdmFTdHJpbmdKU0MuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKwordHlw
ZWRlZiBjb25zdCBjaGFyKiBSdW50aW1lVHlwZTsKKworY2xhc3MgSmF2YVN0cmluZyB7CitwdWJs
aWM6CisgICAgSmF2YVN0cmluZygpCisgICAgeworICAgICAgICBtX2ltcGwuaW5pdCgpOworICAg
IH0KKworICAgIEphdmFTdHJpbmcoSk5JRW52KiBlLCBqc3RyaW5nIHMpCisgICAgeworICAgICAg
ICBtX2ltcGwuaW5pdChlLCBzKTsKKyAgICB9CisKKyAgICBKYXZhU3RyaW5nKGpzdHJpbmcgcykK
KyAgICB7CisgICAgICAgIG1faW1wbC5pbml0KGdldEpOSUVudigpLCBzKTsKKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiBVVEY4U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLlVURjhTdHJp
bmcoKTsgfQorICAgIGNvbnN0IGpjaGFyKiB1Y2hhcnMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwu
dWNoYXJzKCk7IH0KKyAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmxlbmd0
aCgpOyB9CisjaWYgVVNFKEpTQykKKyAgICBvcGVyYXRvciBVU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLnVTdHJpbmcoKTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSmF2YVN0cmlu
Z0ltcGwgbV9pbXBsOworfTsKKworY2xhc3MgSmF2YVBhcmFtZXRlciB7CitwdWJsaWM6CisgICAg
SmF2YVBhcmFtZXRlcigpIDogbV9KTklUeXBlKGludmFsaWRfdHlwZSkgeyB9CisgICAgSmF2YVBh
cmFtZXRlcihKTklFbnYqLCBqc3RyaW5nIHR5cGUpOworICAgIHZpcnR1YWwgfkphdmFQYXJhbWV0
ZXIoKSB7IH0KKworICAgIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUu
VVRGOFN0cmluZygpOyB9CisgICAgSk5JVHlwZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9KTklUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgSmF2YVN0cmluZyBtX3R5cGU7CisgICAgSk5J
VHlwZSBtX0pOSVR5cGU7Cit9OworCisKK2NsYXNzIEphdmFGaWVsZCA6IHB1YmxpYyBGaWVsZCB7
CitwdWJsaWM6CisgICAgSmF2YUZpZWxkKEpOSUVudiosIGpvYmplY3QgYUZpZWxkKTsKKworICAg
IHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0
YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0
YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdDsKKworICAgIGNvbnN0IEphdmFT
dHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIFJ1bnRp
bWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUuVVRGOFN0cmluZygpOyB9CisKKyAg
ICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBtX0pOSVR5cGU7IH0KKworcHJp
dmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNv
bnN0IEphdmFJbnN0YW5jZSosIGp2YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciog
c2lnKSBjb25zdDsKKyAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShFeGVjU3Rh
dGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBz
aWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3Q7CisKKyAgICBKYXZhU3RyaW5nIG1fbmFtZTsK
KyAgICBKYXZhU3RyaW5nIG1fdHlwZTsKKyAgICBKTklUeXBlIG1fSk5JVHlwZTsKKyAgICBSZWZQ
dHI8Sk9iamVjdFdyYXBwZXI+IG1fZmllbGQ7Cit9OworCisKK2NsYXNzIEphdmFNZXRob2QgOiBw
dWJsaWMgTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBKYXZhTWV0aG9kKEpOSUVudiosIGpvYmplY3Qg
YU1ldGhvZCk7CisgICAgfkphdmFNZXRob2QoKTsKKworICAgIGNvbnN0IEphdmFTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBSdW50aW1lVHlwZSByZXR1cm5UeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXR1cm5UeXBlLlVURjhTdHJpbmcoKTsgfQorICAgIEphdmFQ
YXJhbWV0ZXIqIHBhcmFtZXRlckF0KGludCBpKSBjb25zdCB7IHJldHVybiAmbV9wYXJhbWV0ZXJz
W2ldOyB9CisgICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFt
ZXRlcnM7IH0KKworICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSgpIGNvbnN0OworICAgIEpOSVR5
cGUgSk5JUmV0dXJuVHlwZSgpIGNvbnN0OworCisgICAgam1ldGhvZElEIG1ldGhvZElEKGpvYmpl
Y3Qgb2JqKSBjb25zdDsKKworICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX2lz
U3RhdGljOyB9CisKK3ByaXZhdGU6CisgICAgSmF2YVBhcmFtZXRlciogbV9wYXJhbWV0ZXJzOwor
ICAgIGludCBtX251bVBhcmFtZXRlcnM7CisgICAgSmF2YVN0cmluZyBtX25hbWU7CisgICAgbXV0
YWJsZSBjaGFyKiBtX3NpZ25hdHVyZTsKKyAgICBKYXZhU3RyaW5nIG1fcmV0dXJuVHlwZTsKKyAg
ICBKTklUeXBlIG1fSk5JUmV0dXJuVHlwZTsKKyAgICBtdXRhYmxlIGptZXRob2RJRCBtX21ldGhv
ZElEOworICAgIGJvb2wgbV9pc1N0YXRpYzsKK307CisKK2NsYXNzIEphdmFBcnJheSA6IHB1Ymxp
YyBBcnJheSB7CitwdWJsaWM6CisgICAgSmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNo
YXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworICAgIHZpcnR1YWwgfkphdmFBcnJh
eSgpOworCisgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgp
IGNvbnN0OworCisgICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
LT5tX2luc3RhbmNlOyB9CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBjb252ZXJ0Sk9iamVjdFRvQXJy
YXkoRXhlY1N0YXRlKiwgam9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290
T2JqZWN0Pik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBtX2FycmF5
OworICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBtX3R5cGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBKTklCcmlkZ2VfaApJ
bmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5oCShyZXZpc2lvbiA1MzY5NykK
KysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDY3ICsyNCwxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEpOSUJy
aWRnZV9oCi0jZGVmaW5lIEpOSUJyaWRnZV9oCisjaWZuZGVmIEpOSUJyaWRnZUpTQ19oCisjZGVm
aW5lIEpOSUJyaWRnZUpTQ19oCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5j
bHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgotCi0jaWYg
VVNFKEpTQykKLSNpbmNsdWRlICJKYXZhU3RyaW5nSlNDLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJC
cmlkZ2UuaCIKKyNpbmNsdWRlICJKTklCcmlkZ2UuaCIKKyNpbmNsdWRlIDxKYXZhVk0vam5pLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgQmluZGluZ3MgewogCi10eXBlZGVmIGNv
bnN0IGNoYXIqIFJ1bnRpbWVUeXBlOwotCi1jbGFzcyBKYXZhU3RyaW5nIHsKLXB1YmxpYzoKLSAg
ICBKYXZhU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIG1faW1wbC5pbml0KCk7Ci0gICAgfQotCi0g
ICAgSmF2YVN0cmluZyhKTklFbnYqIGUsIGpzdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIG1faW1w
bC5pbml0KGUsIHMpOwotICAgIH0KLQotICAgIEphdmFTdHJpbmcoanN0cmluZyBzKQotICAgIHsK
LSAgICAgICAgbV9pbXBsLmluaXQoZ2V0Sk5JRW52KCksIHMpOwotICAgIH0KLQotICAgIGNvbnN0
IGNoYXIqIFVURjhTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuVVRGOFN0cmluZygpOyB9
Ci0gICAgY29uc3QgamNoYXIqIHVjaGFycygpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC51Y2hhcnMo
KTsgfQotICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwubGVuZ3RoKCk7IH0K
LSNpZiBVU0UoSlNDKQotICAgIG9wZXJhdG9yIFVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwudVN0cmluZygpOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBKYXZhU3RyaW5nSW1wbCBt
X2ltcGw7Ci19OwotCi1jbGFzcyBKYXZhUGFyYW1ldGVyIHsKLXB1YmxpYzoKLSAgICBKYXZhUGFy
YW1ldGVyKCkgOiBtX0pOSVR5cGUoaW52YWxpZF90eXBlKSB7IH0KLSAgICBKYXZhUGFyYW1ldGVy
KEpOSUVudiosIGpzdHJpbmcgdHlwZSk7Ci0gICAgdmlydHVhbCB+SmF2YVBhcmFtZXRlcigpIHsg
fQotCi0gICAgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZS5VVEY4U3Ry
aW5nKCk7IH0KLSAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBtX0pOSVR5
cGU7IH0KLQotcHJpdmF0ZToKLSAgICBKYXZhU3RyaW5nIG1fdHlwZTsKLSAgICBKTklUeXBlIG1f
Sk5JVHlwZTsKLX07Ci0KLQogY2xhc3MgSmF2YUZpZWxkIDogcHVibGljIEZpZWxkIHsKIHB1Ymxp
YzoKICAgICBKYXZhRmllbGQoSk5JRW52Kiwgam9iamVjdCBhRmllbGQpOwpAQCAtMTA3LDM1ICs1
OSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBtX2ZpZWxkOwogfTsK
IAotCi1jbGFzcyBKYXZhTWV0aG9kIDogcHVibGljIE1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgSmF2
YU1ldGhvZChKTklFbnYqLCBqb2JqZWN0IGFNZXRob2QpOwotICAgIH5KYXZhTWV0aG9kKCk7Ci0K
LSAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0g
ICAgUnVudGltZVR5cGUgcmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuVHlwZS5V
VEY4U3RyaW5nKCk7IH0KLSAgICBKYXZhUGFyYW1ldGVyKiBwYXJhbWV0ZXJBdChpbnQgaSkgY29u
c3QgeyByZXR1cm4gJm1fcGFyYW1ldGVyc1tpXTsgfQotICAgIGludCBudW1QYXJhbWV0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Ci0KLSAgICBjb25zdCBjaGFyKiBzaWdu
YXR1cmUoKSBjb25zdDsKLSAgICBKTklUeXBlIEpOSVJldHVyblR5cGUoKSBjb25zdDsKLQotICAg
IGptZXRob2RJRCBtZXRob2RJRChqb2JqZWN0IG9iaikgY29uc3Q7Ci0KLSAgICBib29sIGlzU3Rh
dGljKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0YXRpYzsgfQotCi1wcml2YXRlOgotICAgIEphdmFQ
YXJhbWV0ZXIqIG1fcGFyYW1ldGVyczsKLSAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwotICAgIEph
dmFTdHJpbmcgbV9uYW1lOwotICAgIG11dGFibGUgY2hhciogbV9zaWduYXR1cmU7Ci0gICAgSmF2
YVN0cmluZyBtX3JldHVyblR5cGU7Ci0gICAgSk5JVHlwZSBtX0pOSVJldHVyblR5cGU7Ci0gICAg
bXV0YWJsZSBqbWV0aG9kSUQgbV9tZXRob2RJRDsKLSAgICBib29sIG1faXNTdGF0aWM7Ci19Owot
CiBjbGFzcyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkgewogcHVibGljOgogICAgIEphdmFBcnJh
eShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3Bw
CShyZXZpc2lvbiA1MzcwMCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVBy
aXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSAiSk5JQnJpZGdlLmgiCisjaW5jbHVkZSAiSk5J
QnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRp
bWVfb2JqZWN0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmgJKHJldmlzaW9uIDUzNzAwKQorKysgV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIAotI2luY2x1ZGUgIkpOSUJyaWRn
ZS5oIgorI2luY2x1ZGUgIkpOSUJyaWRnZUpTQy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5z
dGFuY2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUlu
c3RhbmNlSlNDLmNwcAkocmV2aXNpb24gNTM3MDApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNpbmNsdWRlICJKTklCcmlkZ2UuaCIKKyNp
bmNsdWRlICJKTklCcmlkZ2VKU0MuaCIKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCiAjaW5jbHVk
ZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhQ2xhc3NKU0MuaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>