<?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>57905</bug_id>
          
          <creation_ts>2011-04-05 16:53:14 -0700</creation_ts>
          <short_desc>Move attributedStringFromRange down to WebCore</short_desc>
          <delta_ts>2011-04-05 17:22:37 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379965</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 16:53:14 -0700</bug_when>
    <thetext>WebCore already has a very similar function, and keeping these in separate projects is extremely confusing. Also, we need this functionality in WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379968</commentid>
    <comment_count>1</comment_count>
      <attachid>88335</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 16:58:59 -0700</bug_when>
    <thetext>Created attachment 88335
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379981</commentid>
    <comment_count>2</comment_count>
      <attachid>88335</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-05 17:12:27 -0700</bug_when>
    <thetext>Comment on attachment 88335
proposed patch

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

&gt; Source/WebCore/platform/mac/WebNSAttributedStringExtras.h:2
&gt; + * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.

Should change company name to Apple Inc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379986</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 17:22:37 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/83000&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88335</attachid>
            <date>2011-04-05 16:58:59 -0700</date>
            <delta_ts>2011-04-05 17:12:27 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>AttributedStringWebCore.txt</filename>
            <type>text/plain</type>
            <size>59725</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyOTk5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDQtMDUgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIGRvd24g
dG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTc5MDUKKworICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICBBbHNvIHR3ZWFrZWQgSFRNTENvbnZlcnRlciB0byBub3QgdXNlIG1ldGhv
ZHMgZGVmaW5lZCBpbiBXZWJLaXQuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL0hUTUxDb252ZXJ0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSFRNTENvbnZl
cnRlci5tbToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBfbmV3VGFiRm9yRWxlbWVudDpd
KToKKyAgICAgICAgKC1bV2ViSFRNTENvbnZlcnRlciBfYWRkQXR0YWNobWVudEZvckVsZW1lbnQ6
VVJMOm5lZWRzUGFyYWdyYXBoOnVzZVBsYWNlaG9sZGVyOl0pOgorICAgICAgICAoK1tXZWJIVE1M
Q29udmVydGVyIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0pOgorICAgICAgICAo
ZmlsZVdyYXBwZXJGb3JVUkwpOgorICAgICAgICAoZmlsZVdyYXBwZXJGb3JFbGVtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2Vi
TlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogcGxhdGZvcm0v
bWFjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbTogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0uCisgICAgICAgIChX
ZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVycyk6
CisKIDIwMTEtMDQtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkocmV2aXNpb24gODI5NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBACiAub2JqY19jbGFzc19uYW1lX0RPTVdoZWVs
RXZlbnQKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVZpZXdGYWN0b3J5CiAub2JqY19jbGFzc19u
YW1lX1dlYkZvbnRDYWNoZQorLm9iamNfY2xhc3NfbmFtZV9XZWJIVE1MQ29udmVydGVyCiAub2Jq
Y19jbGFzc19uYW1lX1dlYlNjcmlwdE9iamVjdAogLm9iamNfY2xhc3NfbmFtZV9XZWJTY3JpcHRP
YmplY3RQcml2YXRlCiAub2JqY19jbGFzc19uYW1lX1dlYlVuZGVmaW5lZApAQCAtNjUwLDYgKzY1
MSw3IEBAIF9fWk43V2ViQ29yZTNtYWNFUktOU18yM0F1dGhlbnRpY2F0aW9uQ2gKIF9fWk43V2Vi
Q29yZTQyY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nRXYKIF9fWk43
V2ViQ29yZTQyY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nRXYKIF9f
Wk43V2ViQ29yZTQ2Y29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxs
eUV2CitfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRD
aGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwogX19aTjdXZWJDb3JlNEZvbnQxMXNldENv
ZGVQYXRoRU5TMF84Q29kZVBhdGhFCiBfX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxkVXNlU21vb3Ro
aW5nRXYKIF9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gODI5NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1MjMsNiArNTUyMyw5IEBACiAJCUUxODI1
OEFDMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckNvbnRleHRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MjU4QUIwRUYzQ0Q3MDAw
OTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCUUxODc3MkYxMTI2
RTI2MjkwMDNERDU4NiAvKiBMYW5ndWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg3NzJGMDEyNkUyNjI5MDAzREQ1ODYgLyogTGFuZ3VhZ2Uu
Y3BwICovOyB9OwogCQlFMUExNDcwODExMTAyQjE1MDBFRUMwRjMgLyogQ29udGFpbmVyTm9kZUFs
Z29yaXRobXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTE0NzA3MTExMDJCMTUwMEVFQzBGMyAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5oICov
OyB9OworCQlFMUEzMTYyRDEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5n
RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUEzMTYyQjEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTFBMzE2
MkUxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMxNjJDMTM0QkMz
MkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gKi87IH07CisJCUUx
QTMxNjYzMTM0QkNBRTgwMDdDOUE0RiAvKiBIVE1MQ29udmVydGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTM5MkQzMzEzMjZBRDAxMDAwNDNEMzUg
LyogSFRNTENvbnZlcnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUUxQTVGOTlCMEU3RUFBMjUwMEFGODVFQSAvKiBKU01lc3NhZ2VDaGFubmVs
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTVGOTlBMEU3RUFBMjUwMEFGODVFQSAvKiBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcCAq
LzsgfTsKIAkJRTFBNjQzRjIwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTY0
M0YxMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi87IH07CiAJ
CUUxQTY0M0ZEMEVDMDk3QTAwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTY0M0ZDMEVD
MDk3QTAwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTEy
MDA2LDYgKzEyMDA5LDggQEAKIAkJRTE4MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dvcmtlckNvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTg3NzJGMDEyNkUyNjI5MDAzREQ1ODYgLyogTGFuZ3VhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGFuZ3VhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMUExNDcwNzExMTAyQjE1MDBFRUMwRjMgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGFpbmVyTm9kZUFsZ29y
aXRobXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBMzE2MkIxMzRCQzMyRDAw
N0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBMzE2MkMxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0
cmlidXRlZFN0cmluZ0V4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdl
Q2hhbm5lbEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTY0M0Yx
MEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNDE2Niw2ICsxNDE3MSw4IEBACiAJCQkJQkU4NTYwNTEwNzAxRjkxMTAwMjM5NzY5IC8qIFdl
YkNvcmVWaWV3Lm0gKi8sCiAJCQkJQkM2REFERUUwQTE5NUZERjAwRTVDRDE0IC8qIFdlYkZvbnRD
YWNoZS5oICovLAogCQkJCUJDNkRBREY5MEExOTYwMkIwMEU1Q0QxNCAvKiBXZWJGb250Q2FjaGUu
bW0gKi8sCisJCQkJRTFBMzE2MkIxMzRCQzMyRDAwN0M5QTRGIC8qIFdlYk5TQXR0cmlidXRlZFN0
cmluZ0V4dHJhcy5oICovLAorCQkJCUUxQTMxNjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0
dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gKi8sCiAJCQkJOTM1QzQ3NzIwOUFDNEQ3NzAwQTZBQUI0
IC8qIFdoZWVsRXZlbnRNYWMubW0gKi8sCiAJCQkJOTM4MEY0NzcwOUExMUFDQzAwMUZEQjM0IC8q
IFdpZGdldE1hYy5tbSAqLywKIAkJCSk7CkBAIC0yMjgxOCw2ICsyMjgyNSw4IEBACiAJCQkJRkRB
M0U5NUMxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkRGNkJBRjkxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDA2REZBNjEzNEE0REVG
MDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMUEzMTYyRDEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUEzMTY2MzEzNEJDQUU4MDA3QzlBNEYgLyogSFRN
TENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTUwMiw2ICsyNTUxMSw3IEBACiAJCQkJ
RkRBM0U5NUIxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGREY2QkFGODEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQwNkRGQTUx
MzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmgJKHJldmlzaW9uIDgyOTc2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
OSArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
bXBvcnQgIkRPTS5oIgotI2ltcG9ydCAiRE9NRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkRPTVJhbmdl
LmgiCitAY2xhc3MgRE9NRG9jdW1lbnQ7CitAY2xhc3MgRE9NUmFuZ2U7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwpAQCAtNzksMTAgKzc4LDEzIEBAIEBpbnRl
cmZhY2UgV2ViSFRNTENvbnZlcnRlciA6IE5TT2JqZWN0IHsKICAgICB9IF9mbGFnczsKIH0KIAor
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQogLSAoaWQpaW5pdDsKIC0gKGlkKWluaXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdlICop
ZG9tUmFuZ2U7CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmc7Cisj
ZW5kaWYKIAorKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiA4Mjk3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywyMSArMjcsMjkgQEAKICNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKIAogI2ltcG9y
dCAiQXJjaGl2ZVJlc291cmNlLmgiCisjaW1wb3J0ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiRG9j
dW1lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJET01Eb2N1bWVu
dEludGVybmFsLmgiCiAjaW1wb3J0ICJET01FbGVtZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRP
TUhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW1wb3J0ICJET01Qcml2YXRlLmgiCisjaW1wb3J0
ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJFbGVtZW50LmgiCiAjaW1wb3J0ICJGcmFt
ZS5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJIVE1MUGFyc2VySWRpb21zLmgi
CisjaW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgorI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIK
KyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgogI2ltcG9ydCA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitz
dGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JVUkwoRG9jdW1lbnRMb2FkZXIgKiwg
TlNVUkwgKik7CitzdGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVs
ZW1lbnQqKTsKKwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQogLy8gQWRkaXRpb25hbCBjb250cm9sIFVuaWNvZGUgY2hhcmFj
dGVycwogY29uc3QgdW5pY2hhciBXZWJOZXh0TGluZUNoYXJhY3RlciA9IDB4MDA4NTsKQEAgLTU2
LDEwICs2NCw4IEBAIC0gKEJPT0wpaWdub3Jlc09yaWVudGF0aW9uOwogQGVuZAogCiBAaW50ZXJm
YWNlIE5TVVJMIChXZWJEYXRhVVJMKQotKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkw7
Ci0rIChOU1VSTCAqKV93ZWJfdW5pcXVlV2ViRGF0YVVSTFdpdGhSZWxhdGl2ZVN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmc7CisvLyBGSVhNRTogV2hhdCBpcyB0aGUgcmVhc29uIHRvIHVzZSB0aGlz
IEZvdW5kYXRpb24gbWV0aG9kLCBhbmQgbm90ICtbTlNVUkwgVVJMV2l0aFN0cmluZzpyZWxhdGl2
ZVRvVVJMOl0/CiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMOwotLSAoTlNTdHJpbmcgKilfd2ViX3N1
Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlOwogQGVuZAog
CiBAaW50ZXJmYWNlIFdlYkhUTUxDb252ZXJ0ZXIoV2ViSFRNTENvbnZlcnRlclByaXZhdGUpCkBA
IC03NjksMzkgKzc3NSw2IEBAIC0gKHZvaWQpX25ld1RhYkZvckVsZW1lbnQ6KERPTUVsZW1lbnQg
KikKICAgICBbc3RyaW5nIHJlbGVhc2VdOwogICAgIF9mbGFncy5pc1NvZnQgPSBZRVM7CiB9Ci0K
LXN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvclVSTChEb2N1bWVudExvYWRlciAq
ZGF0YVNvdXJjZSwgTlNVUkwgKlVSTCkKLXsKLSAgICBpZiAoW1VSTCBpc0ZpbGVVUkxdKSB7Ci0g
ICAgICAgIE5TU3RyaW5nICpwYXRoID0gW1tVUkwgcGF0aF0gc3RyaW5nQnlSZXNvbHZpbmdTeW1s
aW5rc0luUGF0aF07Ci0gICAgICAgIHJldHVybiBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0
V2l0aFBhdGg6cGF0aF0gYXV0b3JlbGVhc2VdOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IGRhdGFTb3VyY2UtPnN1YnJlc291cmNlKFVSTCk7Ci0g
ICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBbW1tO
U0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6W3Jlc291cmNl
LT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgpIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOwotICAg
ICAgICBOU1N0cmluZyAqZmlsZW5hbWUgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRG
aWxlbmFtZSgpOwotICAgICAgICBpZiAoIWZpbGVuYW1lIHx8ICFbZmlsZW5hbWUgbGVuZ3RoXSkg
ewotICAgICAgICAgICAgTlNVUkwgKlVSTCA9IHJlc291cmNlLT51cmwoKTsKLSAgICAgICAgICAg
IGZpbGVuYW1lID0gW1VSTCBfd2ViX3N1Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBlOnJlc291
cmNlLT5taW1lVHlwZSgpXTsKLSAgICAgICAgfQotICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJy
ZWRGaWxlbmFtZTpmaWxlbmFtZV07Ci0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIH0KLSAg
ICAKLSAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1
ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpVUkxdOwotCi0gICAgTlNDYWNoZWRVUkxSZXNwb25zZSAq
Y2FjaGVkUmVzcG9uc2UgPSBbW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hlZFJlc3Bv
bnNlRm9yUmVxdWVzdDpyZXF1ZXN0XTsKLSAgICBbcmVxdWVzdCByZWxlYXNlXTsKLSAgICAKLSAg
ICBpZiAoY2FjaGVkUmVzcG9uc2UpIHsKLSAgICAgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9
IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpbY2Fj
aGVkUmVzcG9uc2UgZGF0YV1dIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgW3dyYXBwZXIgc2V0UHJl
ZmVycmVkRmlsZW5hbWU6W1tjYWNoZWRSZXNwb25zZSByZXNwb25zZV0gc3VnZ2VzdGVkRmlsZW5h
bWVdXTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBu
aWw7Ci19CiAgICAgCiAtIChCT09MKV9hZGRBdHRhY2htZW50Rm9yRWxlbWVudDooRE9NRWxlbWVu
dCAqKWVsZW1lbnQgVVJMOihOU1VSTCAqKXVybCBuZWVkc1BhcmFncmFwaDooQk9PTCluZWVkc1Bh
cmFncmFwaCB1c2VQbGFjZWhvbGRlcjooQk9PTClmbGFnCiB7CkBAIC04MjMsNyArNzk2LDcgQEAg
LSAoQk9PTClfYWRkQXR0YWNobWVudEZvckVsZW1lbnQ6KERPTUVsZQogICAgICAgICBpZiAoZmxh
ZyAmJiByZXNvdXJjZSAmJiBbQCJ0ZXh0L2h0bWwiIGlzRXF1YWw6cmVzb3VyY2UtPm1pbWVUeXBl
KCldKSBub3RGb3VuZCA9IFlFUzsKICAgICAgICAgaWYgKHJlc291cmNlICYmICFub3RGb3VuZCkg
ewogICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0
UmVndWxhckZpbGVXaXRoQ29udGVudHM6W3Jlc291cmNlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgp
IGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOwotICAgICAgICAgICAgW2ZpbGVXcmFwcGVyIHNl
dFByZWZlcnJlZEZpbGVuYW1lOlt1cmwgX3dlYl9zdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlw
ZTpyZXNvdXJjZS0+bWltZVR5cGUoKV1dOworICAgICAgICAgICAgW2ZpbGVXcmFwcGVyIHNldFBy
ZWZlcnJlZEZpbGVuYW1lOnN1Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBlKHVybCwgcmVzb3Vy
Y2UtPm1pbWVUeXBlKCkpXTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIWZpbGVXcmFwcGVy
ICYmICFub3RGb3VuZCkgewpAQCAtMTY3MiwxMSArMTY0NSwxMjAgQEAgLSAoaWQpaW5pdFdpdGhE
T01SYW5nZTooRE9NUmFuZ2UgKilkb21SYQogICAgIHJldHVybiBzZWxmOwogfQogCisvLyBUaGlz
IGZ1bmN0aW9uIHN1cHBvcnRzIG1vcmUgSFRNTCBmZWF0dXJlcyB0aGFuIHRoZSBlZGl0aW5nIHZh
cmlhbnQgYmVsb3csIHN1Y2ggYXMgdGFibGVzLgogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0
cmlidXRlZFN0cmluZwogewogICAgIFtzZWxmIF9sb2FkRnJvbURPTVJhbmdlXTsKICAgICByZXR1
cm4gKDAgPT0gX2Vycm9yQ29kZSkgPyBbW19hdHRyU3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdIDog
bmlsOwogfQogCisjZW5kaWYgLy8gIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisKKy8vIFRoaXMgZnVuY3Rpb24gdXNlcyBUZXh0SXRl
cmF0b3IsIHdoaWNoIG1ha2VzIG9mZnNldHMgaW4gaXRzIHJlc3VsdCBjb21wYXRpYmxlIHdpdGgg
SFRNTCBlZGl0aW5nLgorKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2U6KERPTVJhbmdlICopZG9tUmFuZ2UKK3sKKyAgICBSYW5nZSAqcmFuZ2Ug
PSBjb3JlKGRvbVJhbmdlKTsKKyAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcg
PSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOworICAgIE5TVUludGVn
ZXIgc3RyaW5nTGVuZ3RoID0gMDsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
YXR0cnMoQWRvcHROUywgW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisKKyAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkp
IHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50VGV4dFJhbmdlID0gaXQucmFuZ2UoKTsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIE5vZGUqIHN0YXJ0Q29udGFp
bmVyID0gY3VycmVudFRleHRSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpOworICAgICAgICBOb2Rl
KiBlbmRDb250YWluZXIgPSBjdXJyZW50VGV4dFJhbmdlLT5lbmRDb250YWluZXIoZWMpOworICAg
ICAgICBpbnQgc3RhcnRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLT5zdGFydE9mZnNldChlYyk7
CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLT5lbmRPZmZzZXQoZWMp
OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyID09IGVuZENvbnRhaW5lciAm
JiAoc3RhcnRPZmZzZXQgPT0gZW5kT2Zmc2V0IC0gMSkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBzdGFydENvbnRhaW5lci0+Y2hpbGROb2RlKHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAg
IGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSkgeworICAgICAgICAgICAgICAg
IE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKSk7CisgICAgICAgICAgICAgICAgTlNUZXh0QXR0YWNobWVu
dCAqYXR0YWNobWVudCA9IFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhGaWxlV3Jh
cHBlcjpmaWxlV3JhcHBlcl07CisgICAgICAgICAgICAgICAgW3N0cmluZyBhcHBlbmRBdHRyaWJ1
dGVkU3RyaW5nOltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2ht
ZW50OmF0dGFjaG1lbnRdXTsKKyAgICAgICAgICAgICAgICBbYXR0YWNobWVudCByZWxlYXNlXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludCBjdXJyZW50VGV4dExlbmd0
aCA9IGl0Lmxlbmd0aCgpOworICAgICAgICBpZiAoIWN1cnJlbnRUZXh0TGVuZ3RoKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0YXJ0
Q29udGFpbmVyLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVyZXIpOworICAgICAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBOU0ZvbnQgKmZvbnQgPSBz
dHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOworICAgICAgICBbYXR0cnMu
Z2V0KCkgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAg
ICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBo
YSgpKQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbYXR0cnMu
Z2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07
CisgICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKS5hbHBoYSgpKQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVj
dDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpOU0Jh
Y2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworCisgICAgICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gc3Vic3RyaW5nKEFkb3B0TlMsIFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVy
c05vQ29weTpjb25zdF9jYXN0PFVDaGFyKj4oaXQuY2hhcmFjdGVycygpKSBsZW5ndGg6Y3VycmVu
dFRleHRMZW5ndGggZnJlZVdoZW5Eb25lOk5PXSk7CisgICAgICAgIFtzdHJpbmcgcmVwbGFjZUNo
YXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKHN0cmluZ0xlbmd0aCwgMCkgd2l0aFN0cmluZzpz
dWJzdHJpbmcuZ2V0KCldOworICAgICAgICBbc3RyaW5nIHNldEF0dHJpYnV0ZXM6YXR0cnMuZ2V0
KCkgcmFuZ2U6TlNNYWtlUmFuZ2Uoc3RyaW5nTGVuZ3RoLCBjdXJyZW50VGV4dExlbmd0aCldOwor
ICAgICAgICBzdHJpbmdMZW5ndGggKz0gY3VycmVudFRleHRMZW5ndGg7CisgICAgfQorCisgICAg
cmV0dXJuIFtzdHJpbmcgYXV0b3JlbGVhc2VdOworfQorCiBAZW5kCi0jZW5kaWYKKworc3RhdGlj
IE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yVVJMKERvY3VtZW50TG9hZGVyICpkYXRhU291
cmNlLCBOU1VSTCAqVVJMKQoreworICAgIGlmIChbVVJMIGlzRmlsZVVSTF0pIHsKKyAgICAgICAg
TlNTdHJpbmcgKnBhdGggPSBbW1VSTCBwYXRoXSBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5Q
YXRoXTsKKyAgICAgICAgcmV0dXJuIFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoUGF0
aDpwYXRoXSBhdXRvcmVsZWFzZV07CisgICAgfQorICAgIAorICAgIFJlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+IHJlc291cmNlID0gZGF0YVNvdXJjZS0+c3VicmVzb3VyY2UoVVJMKTsKKyAgICBpZiAo
cmVzb3VyY2UpIHsKKyAgICAgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IFtbW05TRmlsZVdy
YXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpbcmVzb3VyY2UtPmRhdGEo
KS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdXSBhdXRvcmVsZWFzZV07CisgICAgICAgIE5T
U3RyaW5nICpmaWxlbmFtZSA9IHJlc291cmNlLT5yZXNwb25zZSgpLnN1Z2dlc3RlZEZpbGVuYW1l
KCk7CisgICAgICAgIGlmICghZmlsZW5hbWUgfHwgIVtmaWxlbmFtZSBsZW5ndGhdKQorICAgICAg
ICAgICAgZmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZShyZXNvdXJjZS0+
dXJsKCksIHJlc291cmNlLT5taW1lVHlwZSgpKTsKKyAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVy
cmVkRmlsZW5hbWU6ZmlsZW5hbWVdOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9Cisg
ICAgCisgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVx
dWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6VVJMXTsKKworICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2Ug
KmNhY2hlZFJlc3BvbnNlID0gW1tOU1VSTENhY2hlIHNoYXJlZFVSTENhY2hlXSBjYWNoZWRSZXNw
b25zZUZvclJlcXVlc3Q6cmVxdWVzdF07CisgICAgW3JlcXVlc3QgcmVsZWFzZV07CisgICAgCisg
ICAgaWYgKGNhY2hlZFJlc3BvbnNlKSB7CisgICAgICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIg
PSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6W2Nh
Y2hlZFJlc3BvbnNlIGRhdGFdXSBhdXRvcmVsZWFzZV07CisgICAgICAgIFt3cmFwcGVyIHNldFBy
ZWZlcnJlZEZpbGVuYW1lOltbY2FjaGVkUmVzcG9uc2UgcmVzcG9uc2VdIHN1Z2dlc3RlZEZpbGVu
YW1lXV07CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
bmlsOworfQorCitzdGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKKyAg
ICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHIgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
c3JjQXR0cik7CisgICAgaWYgKCFhdHRyLmlzRW1wdHkoKSkgeworICAgICAgICBOU1VSTCAqVVJM
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoYXR0cik7CisgICAgICAgIHdyYXBw
ZXIgPSBmaWxlV3JhcHBlckZvclVSTChlbGVtZW50LT5kb2N1bWVudCgpLT5sb2FkZXIoKSwgVVJM
KTsKKyAgICB9CisgICAgaWYgKCF3cmFwcGVyKSB7CisgICAgICAgIFJlbmRlckltYWdlKiByZW5k
ZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChy
ZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSAmJiAhcmVuZGVyZXItPmNhY2hlZEltYWdlKCktPmVycm9y
T2NjdXJyZWQoKSkgeworICAgICAgICAgICAgd3JhcHBlciA9IFtbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOihOU0RhdGEgKikocmVuZGVyZXItPmNhY2hl
ZEltYWdlKCktPmltYWdlKCktPmdldFRJRkZSZXByZXNlbnRhdGlvbigpKV07CisgICAgICAgICAg
ICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpAImltYWdlLnRpZmYiXTsKKyAgICAgICAg
ICAgIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB3cmFwcGVyOworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9h
cmRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3Rl
Ym9hcmRNYWMubW0JKHJldmlzaW9uIDgyOTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Bhc3RlYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDcgQEAKICNp
bXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW1wb3J0ICJIVE1MQW5jaG9yRWxlbWVudC5oIgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogI2ltcG9ydCAiSFRNTENvbnZl
cnRlci5oIgotI2VuZGlmCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAiSFRNTE5h
bWVzLmgiCiAjaW1wb3J0ICJJbWFnZS5oIgpAQCAtNTIsNiArNTAsNyBAQAogI2ltcG9ydCAiUmVu
ZGVySW1hZ2UuaCIKICNpbXBvcnQgIlRleHQuaCIKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4
dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0
ICJtYXJrdXAuaCIKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KQEAgLTEyOSwxOSArMTI4LDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigp
CiAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBkZWNsYXJlVHlwZXM6W05TQXJyYXkgYXJyYXldIG93
bmVyOm5pbF07CiB9CiAKLXN0YXRpYyBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmlwQXR0YWNobWVu
dENoYXJhY3RlcnMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCi17Ci0gICAgY29uc3QgdW5p
Y2hhciBhdHRhY2htZW50Q2hhcmFjdGVyID0gTlNBdHRhY2htZW50Q2hhcmFjdGVyOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TU3RyaW5nPiwgYXR0YWNobWVudENoYXJhY3Rl
clN0cmluZywgKFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczomYXR0YWNobWVudENoYXJh
Y3RlciBsZW5ndGg6MV0pKTsKLSAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQg
PSBbW3N0cmluZyBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAgIE5TUmFuZ2UgYXR0YWNo
bWVudFJhbmdlID0gW1tyZXN1bHQgc3RyaW5nXSByYW5nZU9mU3RyaW5nOmF0dGFjaG1lbnRDaGFy
YWN0ZXJTdHJpbmcuZ2V0KCldOwotICAgIHdoaWxlIChhdHRhY2htZW50UmFuZ2UubG9jYXRpb24g
IT0gTlNOb3RGb3VuZCkgewotICAgICAgICBbcmVzdWx0IHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5n
ZTphdHRhY2htZW50UmFuZ2Ugd2l0aFN0cmluZzpAIiJdOwotICAgICAgICBhdHRhY2htZW50UmFu
Z2UgPSBbW3Jlc3VsdCBzdHJpbmddIHJhbmdlT2ZTdHJpbmc6YXR0YWNobWVudENoYXJhY3RlclN0
cmluZy5nZXQoKV07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVTZWxlY3Rpb24oTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU0FycmF5KiBw
YXN0ZWJvYXJkVHlwZXMsIFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9y
RGVsZXRlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFXZWJBcmNoaXZlUGJvYXJkVHlwZSkK
QEAgLTIwNyw3ICsxOTMsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKE5TUGFz
dGViCiAgICAgfQogICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBl
XSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10p
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gc3RyaXBBdHRhY2htZW50Q2hhcmFjdGVy
cyhhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRy
aWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVycyhhdHRyaWJ1dGVkU3Ry
aW5nKTsKICAgICAgICAgTlNEYXRhICpSVEZEYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJv
bVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50
QXR0cmlidXRlczpuaWxdOwogICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9y
VHlwZTpOU1JURlBib2FyZFR5cGVdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgJKHJl
dmlzaW9uIDgyOTc2KQkoZnJvbSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRl
ZFN0cmluZ0V4dHJhcy5oOjgyOTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
Yk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICAgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFJhbmdl
OworfQorCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViS2l0RXh0cmFzKQorCisr
IChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6KFdl
YkNvcmU6OlJhbmdlKilyYW5nZTsKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV93ZWJfYXR0cmli
dXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnM7CisKK0BlbmQKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViTlNBdHRyaWJ1
dGVkU3RyaW5nRXh0cmFzLmgJKHJldmlzaW9uIDgyOTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxMiArMjcsNyBAQAogICovCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBS
YW5nZTsKLX0KLQotQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKFdlYktpdEV4dHJhcykK
IAotKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
OihXZWJDb3JlOjpSYW5nZSopcmFuZ2U7Ci0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0
dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzOworTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVy
cyhOU0F0dHJpYnV0ZWRTdHJpbmcgKik7CiAKLUBlbmQKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbQkocmV2aXNpb24gODI5NzYpCShmcm9tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tOjgyOTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgICAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLmgiCisKKyNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldlYkRhdGFTb3VyY2VQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJGcmFtZS5oIgorI2ltcG9ydCAi
V2ViRnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgorI2ltcG9y
dCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQ1NTSGVscGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
SFRNTE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0lubGluZVRleHRCb3guaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVySW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGlzdEl0ZW0uaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clN0eWxlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRleHQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvU2ltcGxlRm9udERhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdHJ1Y3QgTGlzdEl0ZW1JbmZvIHsKKyAgICB1bnNp
Z25lZCBzdGFydDsKKyAgICB1bnNpZ25lZCBlbmQ7Cit9OworCitzdGF0aWMgTlNGaWxlV3JhcHBl
ciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVsZW1lbnQqIGUpCit7CisgICAgTlNGaWxlV3JhcHBl
ciAqd3JhcHBlciA9IG5pbDsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyID0gZS0+Z2V0QXR0cmlidXRlKHNyY0F0dHIp
OworICAgIGlmICghYXR0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgTlNVUkwgKlVSTCA9IGUtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHIpOworICAgICAgICB3cmFwcGVyID0gW1traXQoZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgX2RhdGFTb3VyY2VdIF9maWxlV3JhcHBlckZvclVSTDpVUkxd
OworICAgIH0KKyAgICBpZiAoIXdyYXBwZXIpIHsKKyAgICAgICAgUmVuZGVySW1hZ2UqIHJlbmRl
cmVyID0gdG9SZW5kZXJJbWFnZShlLT5yZW5kZXJlcigpKTsKKyAgICAgICAgaWYgKHJlbmRlcmVy
LT5jYWNoZWRJbWFnZSgpICYmICFyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JPY2N1cnJl
ZCgpKSB7CisgICAgICAgICAgICB3cmFwcGVyID0gW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0
UmVndWxhckZpbGVXaXRoQ29udGVudHM6KE5TRGF0YSAqKShyZW5kZXJlci0+Y2FjaGVkSW1hZ2Uo
KS0+aW1hZ2UoKS0+Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkpXTsKKyAgICAgICAgICAgIFt3cmFw
cGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOkAiaW1hZ2UudGlmZiJdOworICAgICAgICAgICAgW3dy
YXBwZXIgYXV0b3JlbGVhc2VdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHdyYXBw
ZXI7CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIG5pbDsK
K30KKworQGltcGxlbWVudGF0aW9uIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViS2l0RXh0cmFzKQor
CistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGlu
Z0F0dGFjaG1lbnRDaGFyYWN0ZXJzCit7CisgICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5
IGNvcGllZCBmcm9tIE5TVGV4dFZpZXcKKyAgICBOU1JhbmdlIGF0dGFjaG1lbnRSYW5nZTsKKyAg
ICBOU1N0cmluZyAqb3JpZ2luYWxTdHJpbmcgPSBbc2VsZiBzdHJpbmddOworICAgIHN0YXRpYyBO
U1N0cmluZyAqYXR0YWNobWVudENoYXJTdHJpbmcgPSBuaWw7CisgICAgCisgICAgaWYgKCFhdHRh
Y2htZW50Q2hhclN0cmluZykgeworICAgICAgICB1bmljaGFyIGNoYXJzWzJdOworICAgICAgICBp
ZiAoIWF0dGFjaG1lbnRDaGFyU3RyaW5nKSB7CisgICAgICAgICAgICBjaGFyc1swXSA9IE5TQXR0
YWNobWVudENoYXJhY3RlcjsKKyAgICAgICAgICAgIGNoYXJzWzFdID0gMDsKKyAgICAgICAgICAg
IGF0dGFjaG1lbnRDaGFyU3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0
ZXJzOmNoYXJzIGxlbmd0aDoxXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBhdHRhY2ht
ZW50UmFuZ2UgPSBbb3JpZ2luYWxTdHJpbmcgcmFuZ2VPZlN0cmluZzphdHRhY2htZW50Q2hhclN0
cmluZ107CisgICAgaWYgKGF0dGFjaG1lbnRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kICYm
IGF0dGFjaG1lbnRSYW5nZS5sZW5ndGggPiAwKSB7CisgICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKm5ld0F0dHJpYnV0ZWRTdHJpbmcgPSBbW3NlbGYgbXV0YWJsZUNvcHlXaXRoWm9u
ZTpOVUxMXSBhdXRvcmVsZWFzZV07CisgICAgICAgIAorICAgICAgICB3aGlsZSAoYXR0YWNobWVu
dFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQgJiYgYXR0YWNobWVudFJhbmdlLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIFtuZXdBdHRyaWJ1dGVkU3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJz
SW5SYW5nZTphdHRhY2htZW50UmFuZ2Ugd2l0aFN0cmluZzpAIiJdOworICAgICAgICAgICAgYXR0
YWNobWVudFJhbmdlID0gW1tuZXdBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gcmFuZ2VPZlN0cmlu
ZzphdHRhY2htZW50Q2hhclN0cmluZ107CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld0F0
dHJpYnV0ZWRTdHJpbmc7CisgICAgfQorICAgIAorICAgIHJldHVybiBzZWxmOworfQorCisrIChO
U0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6KFJhbmdl
KilyYW5nZQoreworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNVSW50ZWdlciBzdHJp
bmdMZW5ndGggPSAwOworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRycyhB
ZG9wdE5TLCBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAo
VGV4dEl0ZXJhdG9yIGl0KHJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAg
ICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRUZXh0UmFuZ2UgPSBpdC5yYW5nZSgpOworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgTm9kZSogc3RhcnRDb250YWluZXIgPSBj
dXJyZW50VGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyk7CisgICAgICAgIE5vZGUqIGVuZENv
bnRhaW5lciA9IGN1cnJlbnRUZXh0UmFuZ2UtPmVuZENvbnRhaW5lcihlYyk7CisgICAgICAgIGlu
dCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKTsKKyAgICAg
ICAgaW50IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2UtPmVuZE9mZnNldChlYyk7CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RhcnRDb250YWluZXIgPT0gZW5kQ29udGFpbmVyICYmIChzdGFy
dE9mZnNldCA9PSBlbmRPZmZzZXQgLSAxKSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IHN0
YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOworICAgICAgICAgICAgaWYgKG5v
ZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7CisgICAgICAgICAgICAgICAgTlNGaWxl
V3JhcHBlciAqZmlsZVdyYXBwZXIgPSBmaWxlV3JhcHBlckZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBOU1RleHRBdHRhY2htZW50ICphdHRh
Y2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOmZp
bGVXcmFwcGVyXTsKKyAgICAgICAgICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJp
bmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0
YWNobWVudF1dOworICAgICAgICAgICAgICAgIFthdHRhY2htZW50IHJlbGVhc2VdOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50IGN1cnJlbnRUZXh0TGVuZ3RoID0gaXQu
bGVuZ3RoKCk7CisgICAgICAgIGlmICghY3VycmVudFRleHRMZW5ndGgpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3RhcnRDb250YWlu
ZXItPnJlbmRlcmVyKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLT5m
b250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CisgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCisg
ICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBy
ZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpLmFscGhhKCkpCisgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29s
b3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdWJz
dHJpbmcoQWRvcHROUywgW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5
OmNvbnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpIGxlbmd0aDpjdXJyZW50VGV4dExl
bmd0aCBmcmVlV2hlbkRvbmU6Tk9dKTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVy
c0luUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RyaW5nTGVuZ3RoLCAwKSB3aXRoU3RyaW5nOnN1YnN0cmlu
Zy5nZXQoKV07CisgICAgICAgIFtzdHJpbmcgc2V0QXR0cmlidXRlczphdHRycy5nZXQoKSByYW5n
ZTpOU01ha2VSYW5nZShzdHJpbmdMZW5ndGgsIGN1cnJlbnRUZXh0TGVuZ3RoKV07CisgICAgICAg
IHN0cmluZ0xlbmd0aCArPSBjdXJyZW50VGV4dExlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4g
W3N0cmluZyBhdXRvcmVsZWFzZV07Cit9CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5t
bQkocmV2aXNpb24gODI5NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3MiArMjgsMTIg
QEAKIAogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCiAKLSNpbXBvcnQg
IkRPTVJhbmdlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkRhdGFTb3VyY2VQcml2YXRlLmgiCi0j
aW1wb3J0ICJXZWJGcmFtZS5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9y
dCAiV2ViVHlwZXNJbnRlcm5hbC5oIgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTSGVs
cGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Vs
ZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0ltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0lubGluZVRleHRCb3guaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVySW1hZ2UuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyTGlzdEl0ZW0uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2Jq
ZWN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclN0eWxlLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlclRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvVGV4dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwotCi1zdHJ1Y3QgTGlzdEl0ZW1JbmZvIHsKLSAgICB1bnNpZ25lZCBz
dGFydDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci19OwotCi1zdGF0aWMgTlNGaWxlV3JhcHBlciAqZmls
ZVdyYXBwZXJGb3JFbGVtZW50KEVsZW1lbnQqIGUpCitOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzKE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZykKIHsKLSAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0g
bmlsOwotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGF0dHIgPSBlLT5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci0gICAgaWYgKCFh
dHRyLmlzRW1wdHkoKSkgewotICAgICAgICBOU1VSTCAqVVJMID0gZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoYXR0cik7Ci0gICAgICAgIHdyYXBwZXIgPSBbW2tpdChlLT5kb2N1bWVudCgpLT5m
cmFtZSgpKSBfZGF0YVNvdXJjZV0gX2ZpbGVXcmFwcGVyRm9yVVJMOlVSTF07Ci0gICAgfQotICAg
IGlmICghd3JhcHBlcikgewotICAgICAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRl
ckltYWdlKGUtPnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAocmVuZGVyZXItPmNhY2hlZEltYWdl
KCkgJiYgIXJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpIHsKLSAgICAg
ICAgICAgIHdyYXBwZXIgPSBbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdp
dGhDb250ZW50czooTlNEYXRhICopKHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5n
ZXRUSUZGUmVwcmVzZW50YXRpb24oKSldOwotICAgICAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVy
cmVkRmlsZW5hbWU6QCJpbWFnZS50aWZmIl07Ci0gICAgICAgICAgICBbd3JhcHBlciBhdXRvcmVs
ZWFzZV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gd3JhcHBlcjsKLQotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gbmlsOwotfQotCi1AaW1wbGVt
ZW50YXRpb24gTlNBdHRyaWJ1dGVkU3RyaW5nIChXZWJLaXRFeHRyYXMpCi0KLS0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKV93ZWJfYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENo
YXJhY3RlcnMKLXsKLSAgICAvLyBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgY29waWVkIGZyb20g
TlNUZXh0VmlldwogICAgIE5TUmFuZ2UgYXR0YWNobWVudFJhbmdlOwotICAgIE5TU3RyaW5nICpv
cmlnaW5hbFN0cmluZyA9IFtzZWxmIHN0cmluZ107CisgICAgTlNTdHJpbmcgKm9yaWdpbmFsU3Ry
aW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXTsKICAgICBzdGF0aWMgTlNTdHJpbmcgKmF0
dGFjaG1lbnRDaGFyU3RyaW5nID0gbmlsOwogICAgIAogICAgIGlmICghYXR0YWNobWVudENoYXJT
dHJpbmcpIHsKQEAgLTEwNyw3ICs0Nyw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV93ZWJf
YXR0cmlidXRlZFMKICAgICAKICAgICBhdHRhY2htZW50UmFuZ2UgPSBbb3JpZ2luYWxTdHJpbmcg
cmFuZ2VPZlN0cmluZzphdHRhY2htZW50Q2hhclN0cmluZ107CiAgICAgaWYgKGF0dGFjaG1lbnRS
YW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kICYmIGF0dGFjaG1lbnRSYW5nZS5sZW5ndGggPiAw
KSB7Ci0gICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKm5ld0F0dHJpYnV0ZWRTdHJp
bmcgPSBbW3NlbGYgbXV0YWJsZUNvcHlXaXRoWm9uZTpOVUxMXSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKm5ld0F0dHJpYnV0ZWRTdHJpbmcgPSBbW2F0
dHJpYnV0ZWRTdHJpbmcgbXV0YWJsZUNvcHlXaXRoWm9uZTpOVUxMXSBhdXRvcmVsZWFzZV07CiAg
ICAgICAgIAogICAgICAgICB3aGlsZSAoYXR0YWNobWVudFJhbmdlLmxvY2F0aW9uICE9IE5TTm90
Rm91bmQgJiYgYXR0YWNobWVudFJhbmdlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIFtuZXdB
dHRyaWJ1dGVkU3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTphdHRhY2htZW50UmFuZ2Ug
d2l0aFN0cmluZzpAIiJdOwpAQCAtMTE2LDYwICs1Niw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmlu
ZyAqKV93ZWJfYXR0cmlidXRlZFMKICAgICAgICAgcmV0dXJuIG5ld0F0dHJpYnV0ZWRTdHJpbmc7
CiAgICAgfQogICAgIAotICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBhdHRyaWJ1dGVkU3Ry
aW5nOwogfQogCi0rIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2U6KFJhbmdlKilyYW5nZQotewotICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
KnN0cmluZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07Ci0gICAg
TlNVSW50ZWdlciBzdHJpbmdMZW5ndGggPSAwOwotICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0
aW9uYXJ5PiBhdHRycyhBZG9wdE5TLCBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
KTsKLQotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRUZXh0UmFuZ2UgPSBpdC5y
YW5nZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgTm9kZSogc3Rh
cnRDb250YWluZXIgPSBjdXJyZW50VGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyk7Ci0gICAg
ICAgIE5vZGUqIGVuZENvbnRhaW5lciA9IGN1cnJlbnRUZXh0UmFuZ2UtPmVuZENvbnRhaW5lcihl
Yyk7Ci0gICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2UtPnN0YXJ0T2Zm
c2V0KGVjKTsKLSAgICAgICAgaW50IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2UtPmVuZE9m
ZnNldChlYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhcnRDb250YWluZXIgPT0gZW5kQ29u
dGFpbmVyICYmIChzdGFydE9mZnNldCA9PSBlbmRPZmZzZXQgLSAxKSkgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IHN0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7Ci0gICAgICAg
ICAgICAgICAgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXIgPSBmaWxlV3JhcHBlckZvckVsZW1l
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBOU1RleHRB
dHRhY2htZW50ICphdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0
aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXTsKLSAgICAgICAgICAgICAgICBbc3RyaW5nIGFwcGVu
ZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0
aEF0dGFjaG1lbnQ6YXR0YWNobWVudF1dOwotICAgICAgICAgICAgICAgIFthdHRhY2htZW50IHJl
bGVhc2VdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGN1cnJlbnRU
ZXh0TGVuZ3RoID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghY3VycmVudFRleHRMZW5ndGgp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gc3RhcnRDb250YWluZXItPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJlcik7
Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIE5TRm9udCAq
Zm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7Ci0gICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
Ci0gICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLmFscGhhKCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29sb3Io
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5T
Rm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IFthdHRycy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkg
c2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9y
S2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBzdWJzdHJpbmcoQWRvcHROUywgW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhD
aGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpIGxlbmd0
aDpjdXJyZW50VGV4dExlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dKTsKLSAgICAgICAgW3N0cmluZyBy
ZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RyaW5nTGVuZ3RoLCAwKSB3aXRo
U3RyaW5nOnN1YnN0cmluZy5nZXQoKV07Ci0gICAgICAgIFtzdHJpbmcgc2V0QXR0cmlidXRlczph
dHRycy5nZXQoKSByYW5nZTpOU01ha2VSYW5nZShzdHJpbmdMZW5ndGgsIGN1cnJlbnRUZXh0TGVu
Z3RoKV07Ci0gICAgICAgIHN0cmluZ0xlbmd0aCArPSBjdXJyZW50VGV4dExlbmd0aDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07CiB9Ci0KLUBlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiA4Mjk5OSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDQtMDUgIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTW92ZSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIGRvd24gdG8gV2ViQ29yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MDUKKwor
ICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIFdlYk5T
QXR0cmlidXRlZFN0cmluZ0V4dHJhcywgd2hpY2ggaXMgbm93IGluIFdlYkNvcmUuCisKIDIwMTEt
MDMtMjkgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBXZWJLaXQgTG9jYWxpemFibGUuc3RyaW5ncyB0byBvbmx5IGNvbnRhaW4gV2ViS2l0L3dp
biBzdHJpbmdzLgpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA4Mjk3NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw4ICszNzgsNiBA
QAogCQlFMTY5ODM2MjExMzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODM2MTExMzQ2
RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggKi87IH07CiAJCUUxNjk4MzZDMTEz
NDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODM2QjExMzQ2RDU2MDA4OTQxMTUgLyog
UHJveHlSdW50aW1lT2JqZWN0Lm1tICovOyB9OwogCQlFRDVCOTUyNDExMUI3MjVBMDA0NzIyOTgg
LyogV2ViTG9jYWxpemFibGVTdHJpbmdzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRUQ1Qjk1MjMxMTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2FsaXph
YmxlU3RyaW5ncy5tbSAqLzsgfTsKLQkJRUQ2QkUyRTcwODhDMzJCNTAwNDRERURDIC8qIFdlYk5T
QXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRUQ2QkUyRTUwODhDMzJCNTAwNDRERURDIC8qIFdlYk5TQXR0cmlidXRl
ZFN0cmluZ0V4dHJhcy5oICovOyB9OwotCQlFRDZCRTJFODA4OEMzMkI1MDA0NERFREMgLyogV2Vi
TlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRUQ2QkUyRTYwODhDMzJCNTAwNDRERURDIC8qIFdlYk5TQXR0cmli
dXRlZFN0cmluZ0V4dHJhcy5tbSAqLzsgfTsKIAkJRUQ3RjZEOEIwOTgwNjgzNTAwQzIzNUVEIC8q
IFdlYk5TRGF0YUV4dHJhc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEVEN0Y2RDhBMDk4MDY4MzUwMEMyMzVFRCAvKiBXZWJOU0RhdGFFeHRy
YXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRURFOTgzODAwQkNERjVGRTAwRkRBRTI4IC8qIFdlYk5TQXJyYXlFeHRyYXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERTk4MzdFMEJDREY1
RkUwMEZEQUUyOCAvKiBXZWJOU0FycmF5RXh0cmFzLmggKi87IH07CiAJCUVERTk4MzgxMEJDREY1
RkUwMEZEQUUyOCAvKiBXZWJOU0FycmF5RXh0cmFzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFREU5ODM3RjBCQ0RGNUZFMDBGREFFMjggLyogV2ViTlNB
cnJheUV4dHJhcy5tICovOyB9OwpAQCAtNzExLDggKzcwOSw2IEBACiAJCUVEMkIyNDc0MDMzQTJE
QTgwMEMxQTUyNiAvKiBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJ
CUVEMkIyNDc1MDMzQTJEQTgwMEMxQTUyNiAvKiBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
Yk5TUGFzdGVib2FyZEV4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUVENUI5NTIzMTExQjcyNUEwMDQ3MjI5OCAvKiBXZWJM
b2NhbGl6YWJsZVN0cmluZ3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJMb2NhbGl6YWJsZVN0cmluZ3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUVENkJFMkU1MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRy
YXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlFRDZCRTJFNjA4OEMzMkI1MDA0NERFREMg
LyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTlNBdHRyaWJ1dGVkU3RyaW5n
RXh0cmFzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJRUQ3RjZEOEEwOTgwNjgzNTAwQzIzNUVEIC8qIFdlYk5TRGF0YUV4dHJhc1By
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTlNEYXRhRXh0cmFz
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREQxQTVDNjA1QzgzOTg3
MDA4RTMxNTAgLyogV2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5TUHJpbnRPcGVyYXRpb25FeHRy
YXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUVERDFBNUM3MDVDODM5ODcwMDhFMzE1MCAvKiBXZWJOU1ByaW50T3BlcmF0aW9uRXh0
cmFzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRo
ID0gV2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTk4MSw4ICs5NzcsNiBAQAogCQkJCUJD
NDJEMzRDMTMxRUQzODgwMDc1RkE0QiAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5t
bSAqLywKIAkJCQlFREU5ODM3RTBCQ0RGNUZFMDBGREFFMjggLyogV2ViTlNBcnJheUV4dHJhcy5o
ICovLAogCQkJCUVERTk4MzdGMEJDREY1RkUwMEZEQUUyOCAvKiBXZWJOU0FycmF5RXh0cmFzLm0g
Ki8sCi0JCQkJRUQ2QkUyRTUwODhDMzJCNTAwNDRERURDIC8qIFdlYk5TQXR0cmlidXRlZFN0cmlu
Z0V4dHJhcy5oICovLAotCQkJCUVENkJFMkU2MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJp
YnV0ZWRTdHJpbmdFeHRyYXMubW0gKi8sCiAJCQkJOTM0NUREQjIwMzY1RkZEMDAwODYzNUNFIC8q
IFdlYk5TQ29udHJvbEV4dHJhcy5oICovLAogCQkJCTkzNDVEREIzMDM2NUZGRDAwMDg2MzVDRSAv
KiBXZWJOU0NvbnRyb2xFeHRyYXMubSAqLywKIAkJCQlCRUNEMTQyOTA1NjU4MzBBMDA1QkIwOUMg
LyogV2ViTlNEYXRhRXh0cmFzLmggKi8sCkBAIC0xNTYwLDcgKzE1NTQsNiBAQAogCQkJCTFDNjhG
NjZGMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxpZ2h0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQzY4RjY3MTA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCUVERTk4MzgwMEJDREY1RkUwMEZEQUUyOCAvKiBXZWJOU0FycmF5
RXh0cmFzLmggaW4gSGVhZGVycyAqLywKLQkJCQlFRDZCRTJFNzA4OEMzMkI1MDA0NERFREMgLyog
V2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAy
MTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNDb250cm9sRXh0cmFzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTA4MjA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNEYXRhRXh0cmFzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFRDdGNkQ4QjA5ODA2ODM1MDBDMjM1RUQgLyogV2ViTlNEYXRhRXh0cmFz
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xOTU3LDcgKzE5NTAsNiBAQAogCQkJCTFDNjhG
NjcwMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxpZ2h0Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUM2OEY2NzIwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHRWaWV3Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRURFOTgzODEwQkNERjVGRTAwRkRBRTI4IC8qIFdlYk5TQXJy
YXlFeHRyYXMubSBpbiBTb3VyY2VzICovLAotCQkJCUVENkJFMkU4MDg4QzMyQjUwMDQ0REVEQyAv
KiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4
MTBDNjA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNDb250cm9sRXh0cmFzLm0gaW4gU291cmNlcyAq
LywKIAkJCQk5Mzk4MTExNTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNEYXRhRXh0cmFzLm0gaW4g
U291cmNlcyAqLywKIAkJCQk2NTQ4OERBMjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9u
YXJ5RXh0cmFzLm0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDgyOTk5KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTEtMDQtMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIGRvd24gdG8gV2ViQ29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MDUKKworICAgICAgICAq
IE1pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmg6IFJlbW92ZWQuCisgICAgICAgICog
TWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW06IFJlbW92ZWQuCisgICAgICAgICog
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgICgtW1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbiBhdHRyaWJ1dGVkU3RyaW5nRnJvbTpzdGFydE9mZnNldDp0bzplbmRPZmZzZXQ6
XSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0b1Bhc3RlYm9hcmQ6Y2Fj
aGVkQXR0cmlidXRlZFN0cmluZzpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRl
ZFN1YnN0cmluZ0Zyb21SYW5nZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRl
ZFN0cmluZ10pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJp
bmddKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXcubW06CisgICAgICAgICgtW1dlYlBE
RlZpZXcgd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnRvUGFzdGVib2FyZDpdKToK
KwogMjAxMS0wNC0wNCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgJKHJldmlzaW9uIDgy
OTc2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRy
YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBSYW5nZTsKLX0KLQotQGludGVyZmFjZSBOU0F0
dHJpYnV0ZWRTdHJpbmcgKFdlYktpdEV4dHJhcykKLQotKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
X3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOihXZWJDb3JlOjpSYW5nZSopcmFuZ2U7Ci0t
IChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzOwotCi1AZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gODI5
NzYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCi0KLSNpbXBvcnQgIkRPTVJh
bmdlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkRhdGFTb3VyY2VQcml2YXRlLmgiCi0jaW1wb3J0
ICJXZWJGcmFtZS5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2Vi
VHlwZXNJbnRlcm5hbC5oIgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTSGVscGVyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2Fk
ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0lt
YWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0lubGluZVRleHRCb3guaD4KLSNpbXBvcnQgPFdlYkNv
cmUvUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVySW1hZ2UuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyTGlzdEl0ZW0uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclN0eWxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvVGV4dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1zdHJ1Y3Qg
TGlzdEl0ZW1JbmZvIHsKLSAgICB1bnNpZ25lZCBzdGFydDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci19
OwotCi1zdGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVsZW1lbnQq
IGUpCi17Ci0gICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKLSAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyID0g
ZS0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwotICAgIGlmICghYXR0ci5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgTlNVUkwgKlVSTCA9IGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHIpOwotICAg
ICAgICB3cmFwcGVyID0gW1traXQoZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgX2RhdGFTb3VyY2Vd
IF9maWxlV3JhcHBlckZvclVSTDpVUkxdOwotICAgIH0KLSAgICBpZiAoIXdyYXBwZXIpIHsKLSAg
ICAgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlLT5yZW5kZXJlcigp
KTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpICYmICFyZW5kZXJlci0+Y2Fj
aGVkSW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICB3cmFwcGVyID0gW1tO
U0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6KE5TRGF0YSAq
KShyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKS0+Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCkpXTsKLSAgICAgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOkAiaW1hZ2Uu
dGlmZiJdOwotICAgICAgICAgICAgW3dyYXBwZXIgYXV0b3JlbGVhc2VdOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotQGltcGxlbWVudGF0aW9uIE5TQXR0cmlidXRl
ZFN0cmluZyAoV2ViS2l0RXh0cmFzKQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0
dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzCi17Ci0gICAgLy8g
VGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGNvcGllZCBmcm9tIE5TVGV4dFZpZXcKLSAgICBOU1Jh
bmdlIGF0dGFjaG1lbnRSYW5nZTsKLSAgICBOU1N0cmluZyAqb3JpZ2luYWxTdHJpbmcgPSBbc2Vs
ZiBzdHJpbmddOwotICAgIHN0YXRpYyBOU1N0cmluZyAqYXR0YWNobWVudENoYXJTdHJpbmcgPSBu
aWw7Ci0gICAgCi0gICAgaWYgKCFhdHRhY2htZW50Q2hhclN0cmluZykgewotICAgICAgICB1bmlj
aGFyIGNoYXJzWzJdOwotICAgICAgICBpZiAoIWF0dGFjaG1lbnRDaGFyU3RyaW5nKSB7Ci0gICAg
ICAgICAgICBjaGFyc1swXSA9IE5TQXR0YWNobWVudENoYXJhY3RlcjsKLSAgICAgICAgICAgIGNo
YXJzWzFdID0gMDsKLSAgICAgICAgICAgIGF0dGFjaG1lbnRDaGFyU3RyaW5nID0gW1tOU1N0cmlu
ZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOmNoYXJzIGxlbmd0aDoxXTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICBhdHRhY2htZW50UmFuZ2UgPSBbb3JpZ2luYWxTdHJpbmcgcmFuZ2VP
ZlN0cmluZzphdHRhY2htZW50Q2hhclN0cmluZ107Ci0gICAgaWYgKGF0dGFjaG1lbnRSYW5nZS5s
b2NhdGlvbiAhPSBOU05vdEZvdW5kICYmIGF0dGFjaG1lbnRSYW5nZS5sZW5ndGggPiAwKSB7Ci0g
ICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKm5ld0F0dHJpYnV0ZWRTdHJpbmcgPSBb
W3NlbGYgbXV0YWJsZUNvcHlXaXRoWm9uZTpOVUxMXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIAot
ICAgICAgICB3aGlsZSAoYXR0YWNobWVudFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQgJiYg
YXR0YWNobWVudFJhbmdlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIFtuZXdBdHRyaWJ1dGVk
U3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTphdHRhY2htZW50UmFuZ2Ugd2l0aFN0cmlu
ZzpAIiJdOwotICAgICAgICAgICAgYXR0YWNobWVudFJhbmdlID0gW1tuZXdBdHRyaWJ1dGVkU3Ry
aW5nIHN0cmluZ10gcmFuZ2VPZlN0cmluZzphdHRhY2htZW50Q2hhclN0cmluZ107Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG5ld0F0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBzZWxmOwotfQotCi0rIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfd2ViX2F0dHJpYnV0
ZWRTdHJpbmdGcm9tUmFuZ2U6KFJhbmdlKilyYW5nZQotewotICAgIE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dF07Ci0gICAgTlNVSW50ZWdlciBzdHJpbmdMZW5ndGggPSAwOwotICAgIFJldGFpblB0cjxOU011
dGFibGVEaWN0aW9uYXJ5PiBhdHRycyhBZG9wdE5TLCBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxs
b2NdIGluaXRdKTsKLQotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJhbmdlKTsgIWl0LmF0RW5k
KCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRUZXh0UmFu
Z2UgPSBpdC5yYW5nZSgpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAg
Tm9kZSogc3RhcnRDb250YWluZXIgPSBjdXJyZW50VGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihl
Yyk7Ci0gICAgICAgIE5vZGUqIGVuZENvbnRhaW5lciA9IGN1cnJlbnRUZXh0UmFuZ2UtPmVuZENv
bnRhaW5lcihlYyk7Ci0gICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2Ut
PnN0YXJ0T2Zmc2V0KGVjKTsKLSAgICAgICAgaW50IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0UmFu
Z2UtPmVuZE9mZnNldChlYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhcnRDb250YWluZXIg
PT0gZW5kQ29udGFpbmVyICYmIChzdGFydE9mZnNldCA9PSBlbmRPZmZzZXQgLSAxKSkgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUoc3RhcnRPZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7
Ci0gICAgICAgICAgICAgICAgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXIgPSBmaWxlV3JhcHBl
ckZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpKTsKLSAgICAgICAgICAgICAg
ICBOU1RleHRBdHRhY2htZW50ICphdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFsbG9j
XSBpbml0V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXTsKLSAgICAgICAgICAgICAgICBbc3Ry
aW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVk
U3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVudF1dOwotICAgICAgICAgICAgICAgIFthdHRh
Y2htZW50IHJlbGVhc2VdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50
IGN1cnJlbnRUZXh0TGVuZ3RoID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghY3VycmVudFRl
eHRMZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gc3RhcnRDb250YWluZXItPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChy
ZW5kZXJlcik7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAg
IE5TRm9udCAqZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7
Ci0gICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpLmFscGhhKCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0
Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkg
Zm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIFthdHRycy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkpCi0gICAgICAgICAgICBbYXR0
cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgcmVtb3Zl
T2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBzdWJzdHJpbmcoQWRvcHROUywgW1tOU1N0cmluZyBhbGxvY10g
aW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8VUNoYXIqPihpdC5jaGFyYWN0ZXJz
KCkpIGxlbmd0aDpjdXJyZW50VGV4dExlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dKTsKLSAgICAgICAg
W3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RyaW5nTGVuZ3Ro
LCAwKSB3aXRoU3RyaW5nOnN1YnN0cmluZy5nZXQoKV07Ci0gICAgICAgIFtzdHJpbmcgc2V0QXR0
cmlidXRlczphdHRycy5nZXQoKSByYW5nZTpOU01ha2VSYW5nZShzdHJpbmdMZW5ndGgsIGN1cnJl
bnRUZXh0TGVuZ3RoKV07Ci0gICAgICAgIHN0cmluZ0xlbmd0aCArPSBjdXJyZW50VGV4dExlbmd0
aDsKLSAgICB9Ci0KLSAgICByZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07Ci19Ci0KLUBlbmQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCShyZXZpc2lvbiA4Mjk3NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBA
CiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4
dHJhcy5oIgogI2ltcG9ydCAiV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldl
Yk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRyYXMu
aCIKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXcuaCIKQEAg
LTQ4LDYgKzQ3LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50Lmg+CkBAIC0yNzcsNyArMjc3LDcg
QEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFRleHQKIAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3Rh
cnRPZmZzZXQ6KGludClzdGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0
OihpbnQpZW5kT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9h
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29yZShzdGFydE5vZGUpLT5k
b2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5vZGUpLCBl
bmRPZmZzZXQpLmdldCgpXTsKKyAgICByZXR1cm4gW1dlYkhUTUxDb252ZXJ0ZXIgZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6a2l0KFJhbmdlOjpjcmVhdGUoY29yZShzdGFydE5vZGUp
LT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5vZGUp
LCBlbmRPZmZzZXQpLmdldCgpKV07CiB9CiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gODI5NzYpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw2IEBACiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgogI2ltcG9ydCAi
V2ViS2l0VmVyc2lvbkNoZWNrcy5oIgogI2ltcG9ydCAiV2ViTG9jYWxpemFibGVTdHJpbmdzSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgogI2ltcG9y
dCAiV2ViTlNFdmVudEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5o
IgogI2ltcG9ydCAiV2ViTlNJbWFnZUV4dHJhcy5oIgpAQCAtOTQsNiArOTMsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRl
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0
VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgpAQCAtMTEyLDYgKzExMiw3
IEBACiAjaW1wb3J0IDxXZWJDb3JlL1RleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9i
akNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViRm9udENhY2hlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9t
YXJrdXAuaD4KICNpbXBvcnQgPFdlYktpdC9ET00uaD4KICNpbXBvcnQgPFdlYktpdC9ET01FeHRl
bnNpb25zLmg+CkBAIC0xMDQxLDEyICsxMDQyLDEwIEBAIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9u
V2l0aFBhc3RlYm9hcmRUeXAKICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZERGF0YSBm
b3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdOwogICAgIH0gICAgICAgIAogICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkgewotICAgICAgICBpZiAoYXR0cmlidXRl
ZFN0cmluZyA9PSBuaWwpIHsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKQogICAgICAg
ICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNo
bWVudHNdKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJp
bmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc107
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNo
bWVudHNdKQorICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdC
eVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRTdHJpbmcpOwogICAgICAg
ICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5p
bF07CiAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOk5TUlRGUGJv
YXJkVHlwZV07CiAgICAgfQpAQCAtNTg0NCw5ICs1ODQzLDkgQEAgLSAoTlNBdHRyaWJ1dGVkU3Ry
aW5nICopYXR0cmlidXRlZFN1YnN0cgogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6Y29yZShkb21SYW5nZSldOworICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqcmVzdWx0ID0gW1dlYkhUTUxDb252ZXJ0ZXIgZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6ZG9tUmFuZ2VdOwogICAgIAotICAgIC8vIFtOU0F0dHJpYnV0ZWRTdHJpbmco
V2ViS2l0RXh0cmFzKSBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6XSAgaW5zaXN0cyBv
biBpbnNlcnRpbmcgYSB0cmFpbGluZyAKKyAgICAvLyBbV2ViSFRNTENvbnZlcnRlciBlZGl0aW5n
QXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpdICBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWls
aW5nIAogICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJy
ZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KICAg
ICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQgc3RyaW5n
IHRvIHRoZSBjb3JyZWN0IGxlbmd0aC4KICAgICBpZiAoW3Jlc3VsdCBsZW5ndGhdID4gbnNSYW5n
ZS5sZW5ndGgpIHsKQEAgLTYyMjgsNyArNjIyNyw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KWF0dHJpYnV0ZWRTdHJpbmcKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1l
bnRSYW5nZV1dOwogICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewogICAgICAgICBEb2N1bWVu
dCogY29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7Ci0gICAgICAgIGF0dHJpYnV0ZWRTdHJp
bmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpS
YW5nZTo6Y3JlYXRlKGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQs
IGNvcmVEb2N1bWVudC0+Y2hpbGROb2RlQ291bnQoKSkuZ2V0KCldOworICAgICAgICBhdHRyaWJ1
dGVkU3RyaW5nID0gW1dlYkhUTUxDb252ZXJ0ZXIgZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2U6a2l0KFJhbmdlOjpjcmVhdGUoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAsIGNv
cmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jaGlsZE5vZGVDb3VudCgpKS5nZXQoKSldOwogICAg
IH0KICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKIH0KQEAgLTYyNDUsNyArNjI0NCw3IEBA
IC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXQKICAgICAgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChjb3JlRnJhbWUp
IHsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICAgICAgYXR0cmli
dXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJv
bVJhbmdlOnJhbmdlLmdldCgpXTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbV2Vi
SFRNTENvbnZlcnRlciBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpraXQocmFuZ2Uu
Z2V0KCkpXTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0JKHJldmlzaW9uIDgy
OTc2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW1wb3J0ICJXZWJGcmFtZVZpZXcuaCIKICNpbXBv
cnQgIldlYkxvY2FsaXphYmxlU3RyaW5nc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJOU0FycmF5
RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKICNpbXBv
cnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNWaWV3RXh0cmFzLmgi
CiAjaW1wb3J0ICJXZWJQREZSZXByZXNlbnRhdGlvbi5oIgpAQCAtNjEsNiArNjAsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmg+CiAjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTky
NCw3ICs5MjQsNyBAQCAtICh2b2lkKXdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlCiAg
ICAgCiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdKSB7CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkKLSAgICAg
ICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0
ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzXTsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hh
cmFjdGVycyhhdHRyaWJ1dGVkU3RyaW5nKTsKIAogICAgICAgICBOU0RhdGEgKlJURkRhdGEgPSBb
YXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRT
dHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CiAgICAgICAgIFtwYXN0ZWJv
YXJkIHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV07Cg==
</data>
<flag name="review"
          id="80826"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>