<?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>7564</bug_id>
          
          <creation_ts>2006-03-02 17:56:43 -0800</creation_ts>
          <short_desc>remove QObject, QGuardedPtr, slots, and signals</short_desc>
          <delta_ts>2006-03-06 15:07:02 -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>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>34903</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-02 17:56:43 -0800</bug_when>
    <thetext>More de-KWQery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34904</commentid>
    <comment_count>1</comment_count>
      <attachid>6816</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-02 17:57:20 -0800</bug_when>
    <thetext>Created attachment 6816
removed QObject, QGuardedPtr, KWQSignal, and KWQSlot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34930</commentid>
    <comment_count>2</comment_count>
      <attachid>6816</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-02 23:10:57 -0800</bug_when>
    <thetext>Comment on attachment 6816
removed QObject, QGuardedPtr, KWQSignal, and KWQSlot

This looks good to me- assuming it passes all tests, of course.  And it needs a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35182</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-05 15:49:53 -0800</bug_when>
    <thetext>Even though this is reviewed, it&apos;s not *quite* ready to commit yet. I&apos;m getting some test failures and I have to figure out why.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6816</attachid>
            <date>2006-03-02 17:57:20 -0800</date>
            <delta_ts>2006-03-02 23:10:57 -0800</delta_ts>
            <desc>removed QObject, QGuardedPtr, KWQSignal, and KWQSlot</desc>
            <filename>LessKWQPatch.txt</filename>
            <type>text/plain</type>
            <size>142746</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvaHRtbHBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwv
aHRtbHBhcnNlci5oCShyZXZpc2lvbiAxMzA5MykKKysrIGtodG1sL2h0bWwvaHRtbHBhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIGNsYXNzIFRva2VuOwogY2xhc3MgSFRN
TFBhcnNlcgogewogcHVibGljOgotICAgIEhUTUxQYXJzZXIoRnJhbWVWaWV3ICp3LCBEb2N1bWVu
dEltcGwgKmksIGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7Ci0gICAgSFRNTFBhcnNlcihE
b2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRG9jdW1lbnRJbXBsICpkb2MsIGJvb2wgaW5jbHVk
ZXNDb21tZW50cz1mYWxzZSk7CisgICAgSFRNTFBhcnNlcihEb2N1bWVudEltcGwqKTsKKyAgICBI
VE1MUGFyc2VyKERvY3VtZW50RnJhZ21lbnRJbXBsKik7CiAgICAgdmlydHVhbCB+SFRNTFBhcnNl
cigpOwogCiAgICAgLyoqCkBAIC03NCwxMiArNzQsMTEgQEAgcHVibGljOgogCiAgICAgSFRNTERv
Y3VtZW50SW1wbCAqZG9jKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
SW1wbCAqPihkb2N1bWVudCk7IH0KIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKICAgICB2b2lkIHNl
dEN1cnJlbnQoTm9kZUltcGwqIG5ld0N1cnJlbnQpOwogICAgIHZvaWQgc2V0U2tpcE1vZGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2FsTmFt
ZSgpOyB9CiAKLSAgICBGcmFtZVZpZXcgKkhUTUxXaWRnZXQ7Ci0gICAgRG9jdW1lbnRJbXBsICpk
b2N1bWVudDsKKyAgICBEb2N1bWVudEltcGwqIGRvY3VtZW50OwogCiAgICAgLyoKICAgICAgKiBn
ZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4KQEAgLTE3OSw5ICsxNzgsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgQXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBib29sIGhlYWRMb2Fk
ZWQ7CisgICAgYm9vbCBtX2ZyYWdtZW50OwogICAgIGludCBpblN0cmF5VGFibGVDb250ZW50Owot
Ci0gICAgYm9vbCBpbmNsdWRlc0NvbW1lbnRzSW5ET007CiB9OwogCiB9CkluZGV4OiBraHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6
ZXIuaAkocmV2aXNpb24gMTMwOTMpCisrKyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBIVE1MVE9LRU5JWkVSX0gKIAog
I2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgotI2luY2x1ZGUgIktXUUd1YXJkZWRQdHIu
aCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKQEAgLTg2LDggKzg1LDggQEAgcHVibGljOgogY2xhc3Mg
SFRNTFRva2VuaXplciA6IHB1YmxpYyBUb2tlbml6ZXIsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGll
bnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MVG9rZW5pemVyKERvY3VtZW50SW1wbCosIEZyYW1lVmll
dyogPSAwLCBib29sIGluY2x1ZGVzQ29tbWVudHMgPSBmYWxzZSk7Ci0gICAgSFRNTFRva2VuaXpl
cihEb2N1bWVudEltcGwqLCBEb2N1bWVudEZyYWdtZW50SW1wbCosIGJvb2wgaW5jbHVkZXNDb21t
ZW50cyA9IGZhbHNlKTsKKyAgICBIVE1MVG9rZW5pemVyKERvY3VtZW50SW1wbCopOworICAgIEhU
TUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbWVudEltcGwqKTsKICAgICB2aXJ0dWFsIH5IVE1MVG9r
ZW5pemVyKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5n
ICZzdHIsIGJvb2wgYXBwZW5kRGF0YSk7CkBAIC0zMzAsOCArMzI5LDYgQEAgcHJpdmF0ZToKICAg
ICAvLyBUaGUgdGltZXIgZm9yIGNvbnRpbnVlZCBwcm9jZXNzaW5nLgogICAgIFRpbWVyPEhUTUxU
b2tlbml6ZXI+IG1fdGltZXI7CiAKLSAgICBib29sIGluY2x1ZGVzQ29tbWVudHNJbkRPTTsKLQog
Ly8gVGhpcyBidWZmZXIgY2FuIGhvbGQgYXJiaXRyYXJpbHkgbG9uZyB1c2VyLWRlZmluZWQgYXR0
cmlidXRlIG5hbWVzLCBzdWNoIGFzIGluIEVNQkVEIHRhZ3MuCiAvLyBTbyBhbnkgZml4ZWQgbnVt
YmVyIG1pZ2h0IGJlIHRvbyBzbWFsbCwgYnV0IHJhdGhlciB0aGFuIHJld3JpdGluZyBhbGwgdXNh
Z2Ugb2YgdGhpcyBidWZmZXIKIC8vIHdlJ2xsIGp1c3QgbWFrZSBpdCBsYXJnZSBlbm91Z2ggdG8g
aGFuZGxlIGFsbCBpbWFnaW5hYmxlIGNhc2VzLgpAQCAtMzQwLDkgKzMzNywxMCBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIGludCBtX2NCdWZmZXJQb3M7CiAgICAgCiAgICAgU2VnbWVudGVkU3Ry
aW5nIHNyYzsKKyAgICBEb2N1bWVudEltcGwqIG1fZG9jOwogICAgIEhUTUxQYXJzZXIqIHBhcnNl
cjsKLSAgICBRR3VhcmRlZFB0cjxGcmFtZVZpZXc+IHZpZXc7ICAgIAogICAgIGJvb2wgaW5Xcml0
ZTsKKyAgICBib29sIG1fZnJhZ21lbnQ7CiB9OwogCiB2b2lkIHBhcnNlSFRNTERvY3VtZW50RnJh
Z21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudEltcGwqKTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbHBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1scGFyc2Vy
LmNwcAkocmV2aXNpb24gMTMwOTMpCisrKyBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksMjcgKzEwOSwyNSBAQCBwdWJsaWM6CiAgKiAgICBlbGVtZW50IG9y
IGlnbm9yZSB0aGUgdGFnLgogICoKICAqLwotSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihGcmFtZVZp
ZXcgKl9wYXJlbnQsIERvY3VtZW50SW1wbCAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpIAot
ICAgIDogY3VycmVudCgwKSwgY3VycmVudElzUmVmZXJlbmNlZChmYWxzZSksIGluY2x1ZGVzQ29t
bWVudHNJbkRPTShpbmNsdWRlc0NvbW1lbnRzKQorSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihEb2N1
bWVudEltcGwqIGRvYykgCisgICAgOiBkb2N1bWVudChkb2MpCisgICAgLCBjdXJyZW50KDApCisg
ICAgLCBjdXJyZW50SXNSZWZlcmVuY2VkKGZhbHNlKQorICAgICwgYmxvY2tTdGFjaygwKQorICAg
ICwgbV9mcmFnbWVudChmYWxzZSkKIHsKLSAgICBIVE1MV2lkZ2V0ICAgID0gX3BhcmVudDsKLSAg
ICBkb2N1bWVudCAgICAgID0gZG9jOwotCi0gICAgYmxvY2tTdGFjayA9IDA7Ci0KICAgICByZXNl
dCgpOwogfQogCi1IVE1MUGFyc2VyOjpIVE1MUGFyc2VyKERvY3VtZW50RnJhZ21lbnRJbXBsICpp
LCBEb2N1bWVudEltcGwgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKQotICAgIDogY3VycmVu
dCgwKSwgY3VycmVudElzUmVmZXJlbmNlZChmYWxzZSksIGluY2x1ZGVzQ29tbWVudHNJbkRPTShp
bmNsdWRlc0NvbW1lbnRzKQorSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihEb2N1bWVudEZyYWdtZW50
SW1wbCogZnJhZykKKyAgICA6IGRvY3VtZW50KGZyYWctPmdldERvY3VtZW50KCkpCisgICAgLCBj
dXJyZW50KDApCisgICAgLCBjdXJyZW50SXNSZWZlcmVuY2VkKGZhbHNlKQorICAgICwgYmxvY2tT
dGFjaygwKQorICAgICwgbV9mcmFnbWVudCh0cnVlKQogewotICAgIEhUTUxXaWRnZXQgPSAwOwot
ICAgIGRvY3VtZW50ID0gZG9jOwotCi0gICAgYmxvY2tTdGFjayA9IDA7Ci0KICAgICByZXNldCgp
OwotICAgIHNldEN1cnJlbnQoaSk7CisgICAgc2V0Q3VycmVudChmcmFnKTsKICAgICBpbkJvZHkg
PSB0cnVlOwogfQogCkBAIC0yNzUsMTAgKzI3MywxMCBAQCBib29sIEhUTUxQYXJzZXI6Omluc2Vy
dE5vZGUoTm9kZUltcGwgKm4sCiAgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwot
ICAgICAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRhY2hlZCgpICYmIEhUTUxX
aWRnZXQpCisgICAgICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkg
JiYgIW1fZnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkg
JiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0
YWNoZWQoKSAmJiAhbV9mcmFnbWVudCkKICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAg
ICAgICAgICAgIGlmIChuLT5tYWludGFpbnNTdGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgZG9j
KCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUobik7CkBAIC0zMjEsNyArMzE5LDcgQEAgYm9vbCBI
VE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCogbgogICAgICAgICAgICAgICAgIGNyZWF0
ZUhlYWQoKTsKICAgICAgICAgICAgIGlmIChoZWFkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhl
YWQtPmFkZENoaWxkKG4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkg
JiYgIW1fZnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBA
IC0zNTEsNyArMzQ5LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCog
bgogICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1
c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKICAgICAgICAgICAgICAgICAgICAgc2V0
Q3VycmVudChuZXdOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgp
ICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAm
JiAhbV9mcmFnbWVudCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKHN0
eWxlVGFnKTsKQEAgLTM4Miw3ICszODAsNyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9y
KE5vZGVJbXBsKiBuCiAgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGlucHV0VGFn
KSkgewogICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGgtPmdldEF0dHJpYnV0ZSh0
eXBlQXR0ciksICJoaWRkZW4iKSAmJiBmb3JtKSB7CiAgICAgICAgICAgICAgICAgZm9ybS0+YWRk
Q2hpbGQobik7Ci0gICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2ZyYWdtZW50KQog
ICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTM5NSw3ICszOTMsNyBAQCBib29sIEhUTUxQYXJzZXI6
OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuCiAgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKGFyZWFUYWcpKSB7CiAgICAgICAgICAgICBpZiAobWFwKSB7CiAgICAgICAgICAgICAgICAg
bWFwLT5hZGRDaGlsZChuKTsKLSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYg
SFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1fZnJh
Z21lbnQpCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjAzLDgg
KzYwMSw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2soVG8KIAogYm9v
bCBIVE1MUGFyc2VyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5v
ZGVJbXBsPiYgcmVzdWx0KQogewotICAgIGlmIChpbmNsdWRlc0NvbW1lbnRzSW5ET00pCi0gICAg
ICAgIHJlc3VsdCA9IG5ldyBDb21tZW50SW1wbChkb2N1bWVudCwgdC0+dGV4dC5nZXQoKSk7Cisg
ICAgcmVzdWx0ID0gbmV3IENvbW1lbnRJbXBsKGRvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTczNyw3ICs3MzQsNyBAQCBib29sIEhUTUxQYXJzZXI6
Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjCiAKIGJvb2wgSFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZUltcGw+JiByZXN1bHQpCiB7Ci0gICAg
aWYgKEhUTUxXaWRnZXQgJiYgSFRNTFdpZGdldC0+ZnJhbWUoKS0+alNjcmlwdEVuYWJsZWQoKSkK
KyAgICBpZiAoIW1fZnJhZ21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmpTY3JpcHRFbmFibGVk
KCkpCiAgICAgICAgIHNldFNraXBNb2RlKG5vc2NyaXB0VGFnKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTg4Niw3ICs4ODMsNyBAQCBib29sIEhUTUxQYXJzZXI6OmlzSW5saW5lKE5vZGVJbXBs
KiBub2RlCiAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoYWJiclRhZykgfHwgZS0+aGFzTG9j
YWxOYW1lKGFjcm9ueW1UYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzdWJUYWcpIHx8CiAgICAgICAg
ICAgICBlLT5oYXNMb2NhbE5hbWUoc3VwVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3BhblRhZykg
fHwgZS0+aGFzTG9jYWxOYW1lKG5vYnJUYWcpIHx8CiAgICAgICAgICAgICBlLT5oYXNMb2NhbE5h
bWUod2JyVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUobm9mcmFtZXNUYWcpIHx8IGUtPmhhc0xvY2Fs
TmFtZShub2xheWVyVGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKG5vZW1iZWRU
YWcpIHx8IChlLT5oYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcpICYmIEhUTUxXaWRnZXQgJiYgSFRN
TFdpZGdldC0+ZnJhbWUoKS0+alNjcmlwdEVuYWJsZWQoKSkpCisgICAgICAgICAgICBlLT5oYXNM
b2NhbE5hbWUobm9lbWJlZFRhZykgfHwgKGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYg
IW1fZnJhZ21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCktPmpTY3JpcHRFbmFibGVkKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMTM0OCw3ICsxMzQ1LDcgQEAg
dm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiAgICAgc2V0Q3VycmVudCgwKTsKIAogICAgIC8v
IFdhcm5pbmcsIHRoaXMgbWF5IGRlbGV0ZSB0aGUgdG9rZW5pemVyIGFuZCBwYXJzZXIsIHNvIGRv
bid0IHRyeSB0byBkbyBhbnl0aGluZyBlbHNlIGFmdGVyIHRoaXMuCi0gICAgaWYgKEhUTUxXaWRn
ZXQpCisgICAgaWYgKCFtX2ZyYWdtZW50KQogICAgICAgICBkb2N1bWVudC0+ZmluaXNoZWRQYXJz
aW5nKCk7CiB9CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkocmV2aXNpb24gMTMwOTMpCisrKyBr
aHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMzEgKzEy
OSwzNSBAQCB2b2lkIFRva2VuOjphZGRBdHRyaWJ1dGUoRG9jdW1lbnRJbXBsKiBkCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihEb2N1bWVu
dEltcGwqIF9kb2MsIEZyYW1lVmlldyogX3ZpZXcsIGJvb2wgaW5jbHVkZXNDb21tZW50cykKLSAg
ICA6IG1fdGltZXIodGhpcywgJkhUTUxUb2tlbml6ZXI6OnRpbWVyRmlyZWQpLCBpbldyaXRlKGZh
bHNlKQorSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihEb2N1bWVudEltcGwqIGRvYykKKyAg
ICA6IGJ1ZmZlcigwKQorICAgICwgc2NyaXB0Q29kZSgwKQorICAgICwgc2NyaXB0Q29kZVNpemUo
MCkKKyAgICAsIHNjcmlwdENvZGVNYXhTaXplKDApCisgICAgLCBzY3JpcHRDb2RlUmVzeW5jKDAp
CisgICAgLCBtX2V4ZWN1dGluZ1NjcmlwdCgwKQorICAgICwgbV90aW1lcih0aGlzLCAmSFRNTFRv
a2VuaXplcjo6dGltZXJGaXJlZCkKKyAgICAsIG1fZG9jKGRvYykKKyAgICAsIGluV3JpdGUoZmFs
c2UpCisgICAgLCBtX2ZyYWdtZW50KGZhbHNlKQogewotICAgIHZpZXcgPSBfdmlldzsKLSAgICBi
dWZmZXIgPSAwOwotICAgIHNjcmlwdENvZGUgPSAwOwotICAgIHNjcmlwdENvZGVTaXplID0gc2Ny
aXB0Q29kZU1heFNpemUgPSBzY3JpcHRDb2RlUmVzeW5jID0gMDsKLSAgICBwYXJzZXIgPSBuZXcg
SFRNTFBhcnNlcihfdmlldywgX2RvYywgaW5jbHVkZXNDb21tZW50cyk7Ci0gICAgbV9leGVjdXRp
bmdTY3JpcHQgPSAwOwotICAgIGluY2x1ZGVzQ29tbWVudHNJbkRPTSA9IGluY2x1ZGVzQ29tbWVu
dHM7Ci0gICAgCisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoZG9jKTsKICAgICBiZWdpbigp
OwogfQogCi1IVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5pemVyKERvY3VtZW50SW1wbCAqX2RvYywg
RG9jdW1lbnRGcmFnbWVudEltcGwgKmksIGJvb2wgaW5jbHVkZXNDb21tZW50cykKLSAgICA6IG1f
dGltZXIodGhpcywgJkhUTUxUb2tlbml6ZXI6OnRpbWVyRmlyZWQpLCBpbldyaXRlKGZhbHNlKQor
SFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihEb2N1bWVudEZyYWdtZW50SW1wbCogZnJhZykK
KyAgICA6IGJ1ZmZlcigwKQorICAgICwgc2NyaXB0Q29kZSgwKQorICAgICwgc2NyaXB0Q29kZVNp
emUoMCkKKyAgICAsIHNjcmlwdENvZGVNYXhTaXplKDApCisgICAgLCBzY3JpcHRDb2RlUmVzeW5j
KDApCisgICAgLCBtX2V4ZWN1dGluZ1NjcmlwdCgwKQorICAgICwgbV90aW1lcih0aGlzLCAmSFRN
TFRva2VuaXplcjo6dGltZXJGaXJlZCkKKyAgICAsIG1fZG9jKGZyYWctPmdldERvY3VtZW50KCkp
CisgICAgLCBpbldyaXRlKGZhbHNlKQorICAgICwgbV9mcmFnbWVudCh0cnVlKQogewotICAgIHZp
ZXcgPSAwOwotICAgIGJ1ZmZlciA9IDA7Ci0gICAgc2NyaXB0Q29kZSA9IDA7Ci0gICAgc2NyaXB0
Q29kZVNpemUgPSBzY3JpcHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwotICAg
IHBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOwotICAg
IG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKLSAgICBpbmNsdWRlc0NvbW1lbnRzSW5ET00gPSBpbmNs
dWRlc0NvbW1lbnRzOwotCisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoZnJhZyk7CiAgICAg
YmVnaW4oKTsKIH0KIApAQCAtMzk5LDE1ICs0MDMsMTMgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUg
SFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICAgICAgaWYgKCFwZW5kaW5nU2NyaXB0cy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgc3RhdGUuc2V0TG9hZGluZ0V4dFNjcmlwdCh0cnVlKTsK
ICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aWV3ICYmIGRvU2NyaXB0RXhlYyAmJiBqYXZh
c2NyaXB0ICkgeworICAgICAgICBlbHNlIGlmICghbV9mcmFnbWVudCAmJiBkb1NjcmlwdEV4ZWMg
JiYgamF2YXNjcmlwdCApIHsKICAgICAgICAgICAgIGlmICghbV9leGVjdXRpbmdTY3JpcHQpCiAg
ICAgICAgICAgICAgICAgcGVuZGluZ1NyYy5wcmVwZW5kKHNyYyk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcHJlcGVuZGluZ1NyYyA9IHNyYzsKICAgICAgICAgICAgIHNldFNy
YyhTZWdtZW50ZWRTdHJpbmcoKSk7CiAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlw
dENvZGVSZXN5bmMgPSAwOwotICAgICAgICAgICAgLy9RVGltZSBkdDsKLSAgICAgICAgICAgIC8v
ZHQuc3RhcnQoKTsKICAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKGV4U2NyaXB0
LCBzdGF0ZSwgUVN0cmluZzo6bnVsbCwgc2NyaXB0U3RhcnRMaW5lbm8pOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNDQ0LDE5ICs0NDYsMTQgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2Vu
aXplcjo6c2NyaQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotSFRNTFRva2VuaXplcjo6U3RhdGUg
SFRNTFRva2VuaXplcjo6c2NyaXB0RXhlY3V0aW9uKGNvbnN0IFFTdHJpbmcmIHN0ciwgU3RhdGUg
c3RhdGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFFTdHJpbmcgc2NyaXB0VVJMLCBpbnQgYmFzZUxpbmUpCitIVE1MVG9rZW5pemVyOjpTdGF0
ZSBIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24oY29uc3QgUVN0cmluZyYgc3RyLCBTdGF0
ZSBzdGF0ZSwgUVN0cmluZyBzY3JpcHRVUkwsIGludCBiYXNlTGluZSkKIHsKLSAgICBpZiAoIXZp
ZXcgfHwgIXZpZXctPmZyYW1lKCkpCisgICAgaWYgKG1fZnJhZ21lbnQgfHwgIW1fZG9jLT5mcmFt
ZSgpKQogICAgICAgICByZXR1cm4gc3RhdGU7CiAgICAgYm9vbCBvbGRzY3JpcHQgPSBzdGF0ZS5p
blNjcmlwdCgpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0Kys7CiAgICAgc3RhdGUuc2V0SW5TY3Jp
cHQoZmFsc2UpOwotICAgIFFTdHJpbmcgdXJsOyAgICAKLSAgICBpZiAoc2NyaXB0VVJMLmlzTnVs
bCgpKQotICAgICAgdXJsID0gdmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+VVJMKCk7Ci0gICAg
ZWxzZQotICAgICAgdXJsID0gc2NyaXB0VVJMOworICAgIFFTdHJpbmcgdXJsID0gc2NyaXB0VVJM
LmlzTnVsbCgpID8gbV9kb2MtPmZyYW1lKCktPmRvY3VtZW50KCktPlVSTCgpIDogc2NyaXB0VVJM
OwogCiAgICAgU2VnbWVudGVkU3RyaW5nICpzYXZlZFByZXBlbmRpbmdTcmMgPSBjdXJyZW50UHJl
cGVuZGluZ1NyYzsKICAgICBTZWdtZW50ZWRTdHJpbmcgcHJlcGVuZGluZ1NyYzsKQEAgLTQ2OCw3
ICs0NjUsNyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAjZW5k
aWYKIAogICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAgICB2aWV3LT5mcmFtZSgpLT5leGVjdXRlU2Ny
aXB0KHVybCxiYXNlTGluZSwwLHN0cik7CisgICAgbV9kb2MtPmZyYW1lKCktPmV4ZWN1dGVTY3Jp
cHQodXJsLGJhc2VMaW5lLDAsc3RyKTsKICAgICBzdGF0ZSA9IG1fc3RhdGU7CiAKICAgICBzdGF0
ZS5zZXRBbGxvd1lpZWxkKHRydWUpOwpAQCAtNTU0LDE4ICs1NTEsMTYgQEAgSFRNTFRva2VuaXpl
cjo6U3RhdGUgSFRNTFRva2VuaXplcjo6cGFycwogICAgICAgICAgICAgaWYgKGNhbkNsb3NlIHx8
IGhhbmRsZUJyb2tlbkNvbW1lbnRzIHx8IGVuZENoYXJzQ291bnQgPiAxKSB7CiAgICAgICAgICAg
ICAgICAgKytzcmM7CiAgICAgICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5TY3JpcHQoKSB8fCBz
dGF0ZS5pblhtcCgpIHx8IHN0YXRlLmluVGV4dEFyZWEoKSB8fCBzdGF0ZS5pblN0eWxlKCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlc0NvbW1lbnRzSW5ET00pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSBdID0gMDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmlwdENvZGVbIHNjcmlwdENvZGVTaXplICsgMSBdID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUgPSBwcm9jZXNzTGlzdGluZyhTZWdtZW50ZWRTdHJpbmcoc2NyaXB0
Q29kZSwgc2NyaXB0Q29kZVNpemUgLSBlbmRDaGFyc0NvdW50KSwgc3RhdGUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBj
aGVja1NjcmlwdEJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlWyBzY3Jp
cHRDb2RlU2l6ZSBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0
Q29kZVNpemUgKyAxIF0gPSAwOworICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFt
ZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHByb2Nlc3NMaXN0aW5nKFNlZ21l
bnRlZFN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSAtIGVuZENoYXJzQ291bnQpLCBz
dGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOworICAgICAgICAgICAg
ICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAg
ICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc1Rva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGVTaXplID0gMDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KGZhbHNl
KTsKQEAgLTExNzAsNyArMTE2NSw3IEBAIEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6
ZXI6OnBhcnMKICAgICAgICAgICAgICAgICBpZiAoIGN1cnJUb2tlbi5hdHRycyAmJiAvKiBwb3Rl
bnRpYWxseSBoYXZlIGEgQVRUUl9TUkMgPyAqLwogICAgICAgICAgICAgICAgICAgICAgcGFyc2Vy
LT5kb2MoKS0+ZnJhbWUoKSAmJgogICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5kb2MoKS0+
ZnJhbWUoKS0+alNjcmlwdEVuYWJsZWQoKSAmJiAvKiBqc2NyaXB0IGFsbG93ZWQgYXQgYWxsPyAq
LwotICAgICAgICAgICAgICAgICAgICAgdmlldyAvKiBhcmUgd2UgYSByZWd1bGFyIHRva2VuaXpl
ciBvciBqdXN0IGZvciBpbm5lckhUTUwgPyAqLworICAgICAgICAgICAgICAgICAgICAgIW1fZnJh
Z21lbnQgLyogYXJlIHdlIGEgcmVndWxhciB0b2tlbml6ZXIgb3IganVzdCBmb3IgaW5uZXJIVE1M
ID8gKi8KICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgo
YSA9IGN1cnJUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRlSXRlbShzcmNBdHRyKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JpcHRTcmMgPSBwYXJzZXItPmRvYygpLT5jb21wbGV0ZVVSTChw
YXJzZVVSTChhLT52YWx1ZSgpKS5xc3RyaW5nKCkpOwpAQCAtMTQ5OSw4ICsxNDk0LDggQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpzdG9wUGFyc2luZygpCiAKICAgICAvLyBUaGUgcGFydCBuZWVkcyB0
byBrbm93IHRoYXQgdGhlIHRva2VuaXplciBoYXMgZmluaXNoZWQgd2l0aCBpdHMgZGF0YSwKICAg
ICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFwcGVuZWQgbmF0dXJhbGx5IG9yIGR1ZSB0
byBtYW51YWwgaW50ZXJ2ZW50aW9uLgotICAgIGlmICh2aWV3ICYmIHZpZXctPmZyYW1lKCkpCi0g
ICAgICAgIHZpZXctPmZyYW1lKCktPnRva2VuaXplclByb2Nlc3NlZERhdGEoKTsKKyAgICBpZiAo
bV9kb2MtPmZyYW1lKCkpCisgICAgICAgIG1fZG9jLT5mcmFtZSgpLT50b2tlbml6ZXJQcm9jZXNz
ZWREYXRhKCk7CiB9CiAKIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc2luZ0RhdGEoKSBjb25z
dApAQCAtMTUyMiw3ICsxNTE3LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjp0aW1lckZpcmVkKFRp
bWVyPEhUTQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxGcmFtZT4g
ZnJhbWUgPSB2aWV3ID8gdmlldy0+ZnJhbWUoKSA6IDA7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFt
ZSA9IG1fZG9jLT5mcmFtZSgpOwogCiAgICAgLy8gSW52b2tlIHdyaXRlKCkgYXMgdGhvdWdoIG1v
cmUgZGF0YSBjYW1lIGluLgogICAgIGJvb2wgZGlkQ2FsbEVuZCA9IHdyaXRlKFNlZ21lbnRlZFN0
cmluZygpLCB0cnVlKTsKQEAgLTE1OTQsMTEgKzE1ODksMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVy
OjpmaW5pc2goKQogCiBQYXNzUmVmUHRyPE5vZGVJbXBsPiBIVE1MVG9rZW5pemVyOjpwcm9jZXNz
VG9rZW4oKQogewotICAgIEtKU1Byb3h5SW1wbCAqanNQcm94eSA9ICh2aWV3ICYmIHZpZXctPmZy
YW1lKCkpID8gdmlldy0+ZnJhbWUoKS0+alNjcmlwdCgpIDogMEw7ICAgIAorICAgIEtKU1Byb3h5
SW1wbCoganNQcm94eSA9ICghbV9mcmFnbWVudCAmJiBtX2RvYy0+ZnJhbWUoKSkgPyBtX2RvYy0+
ZnJhbWUoKS0+alNjcmlwdCgpIDogMDsKICAgICBpZiAoanNQcm94eSkKICAgICAgICAganNQcm94
eS0+c2V0RXZlbnRIYW5kbGVyTGluZW5vKHRhZ1N0YXJ0TGluZW5vKTsKLSAgICBpZiAoIGRlc3Qg
PiBidWZmZXIgKQotICAgIHsKKyAgICBpZiAoZGVzdCA+IGJ1ZmZlcikgewogI2lmZGVmIFRPS0VO
X0RFQlVHCiAgICAgICAgIGlmKGN1cnJUb2tlbi50YWdOYW1lLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgICBxRGVidWcoICJ1bmV4cGVjdGVkIHRva2VuOiAlcywgc3RyOiAqJXMqIiwgY3VyclRva2Vu
LnRhZ05hbWUucXN0cmluZygpLmxhdGluMSgpLFFDb25zdFN0cmluZyggYnVmZmVyLGRlc3QtYnVm
ZmVyICkucXN0cmluZygpLmxhdGluMSgpICk7CkBAIC0xNjA5LDggKzE2MDMsNyBAQCBQYXNzUmVm
UHRyPE5vZGVJbXBsPiBIVE1MVG9rZW5pemVyOjpwcm9jCiAgICAgICAgIGN1cnJUb2tlbi50ZXh0
ID0gbmV3IERPTVN0cmluZ0ltcGwoIGJ1ZmZlciwgZGVzdCAtIGJ1ZmZlciApOwogICAgICAgICBp
ZiAoY3VyclRva2VuLnRhZ05hbWUgIT0gY29tbWVudEF0b20pCiAgICAgICAgICAgICBjdXJyVG9r
ZW4udGFnTmFtZSA9IHRleHRBdG9tOwotICAgIH0KLSAgICBlbHNlIGlmIChjdXJyVG9rZW4udGFn
TmFtZSA9PSBudWxsQXRvbSkgeworICAgIH0gZWxzZSBpZiAoY3VyclRva2VuLnRhZ05hbWUgPT0g
bnVsbEF0b20pIHsKICAgICAgICAgY3VyclRva2VuLnJlc2V0KCk7CiAgICAgICAgIGlmIChqc1By
b3h5KQogICAgICAgICAgICAganNQcm94eS0+c2V0RXZlbnRIYW5kbGVyTGluZW5vKGxpbmVubytz
cmMubGluZUNvdW50KCkpOwpAQCAtMTc2MCw3ICsxNzUzLDcgQEAgdm9pZCBIVE1MVG9rZW5pemVy
OjpzZXRTcmMoY29uc3QgU2VnbWVudAogCiB2b2lkIHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQo
Y29uc3QgRE9NU3RyaW5nICZzb3VyY2UsIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCkK
IHsKLSAgICBIVE1MVG9rZW5pemVyIHRvayhmcmFnbWVudC0+Z2V0RG9jdW1lbnQoKSwgZnJhZ21l
bnQpOworICAgIEhUTUxUb2tlbml6ZXIgdG9rKGZyYWdtZW50LT5nZXREb2N1bWVudCgpKTsKICAg
ICB0b2suc2V0Rm9yY2VTeW5jaHJvbm91cyh0cnVlKTsKICAgICB0b2sud3JpdGUoc291cmNlLnFz
dHJpbmcoKSwgdHJ1ZSk7CiAgICAgdG9rLmZpbmlzaCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2RvY3VtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5jcHAJKHJldmlzaW9uIDEzMDkzKQorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIEhUTUxEb2N1bWVu
dEltcGw6OnNldEJvZHkoSFRNTEVsZW1lCiAKIFRva2VuaXplciAqSFRNTERvY3VtZW50SW1wbDo6
Y3JlYXRlVG9rZW5pemVyKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxUb2tlbml6ZXIodGhpcywg
bV92aWV3KTsKKyAgICByZXR1cm4gbmV3IEhUTUxUb2tlbml6ZXIodGhpcyk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkluZGV4OiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJKHJldmlzaW9uIDEzMDkzKQorKysga2h0
bWwvZWNtYS9ranNfd2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0Niw3ICsyMDQ2LDcg
QEAgSlNWYWx1ZSAqRnJhbWVBcnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YQogICBGcmFtZUFycmF5
ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnJhbWVBcnJheSAqPihzbG90LnNsb3RCYXNlKCkpOwog
ICBGcmFtZSogZnJhbWUgPSB0aGlzT2JqLT5tX2ZyYW1lLT5mcmFtZXMoKS5hdChzbG90LmluZGV4
KCkpOwogCi0gIGlmIChmcmFtZSAmJiBmcmFtZS0+aXNGcmFtZSgpKQorICBpZiAoZnJhbWUpCiAg
ICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUoc3RhdGljX2Nhc3Q8RnJhbWUqPihmcmFtZSkpOwog
CiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMjA1Nyw3ICsyMDU3LDcgQEAgSlNWYWx1ZSAq
RnJhbWVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdAogICBGcmFtZUFycmF5ICp0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8RnJhbWVBcnJheSAqPihzbG90LnNsb3RCYXNlKCkpOwogICBGcmFtZSogZnJh
bWUgPSB0aGlzT2JqLT5tX2ZyYW1lLT5maW5kRnJhbWUocHJvcGVydHlOYW1lLnFzdHJpbmcoKSk7
CiAKLSAgaWYgKGZyYW1lICYmIGZyYW1lLT5pc0ZyYW1lKCkpCisgIGlmIChmcmFtZSkKICAgICBy
ZXR1cm4gV2luZG93OjpyZXRyaWV2ZShzdGF0aWNfY2FzdDxGcmFtZSo+KGZyYW1lKSk7CiAKICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHJldmlzaW9uIDEzMDkzKQor
KysgcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcs
NyBAQCBjbGFzcyBXaWRnZXRQcml2YXRlCiBwdWJsaWM6CiAgICAgRm9udCBmb250OwogICAgIE5T
VmlldyogdmlldzsKKyAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKICAgICBib29sIHZpc2libGU7
CiAgICAgYm9vbCBtdXN0U3RheUluV2luZG93OwogICAgIGJvb2wgcmVtb3ZlRnJvbVN1cGVydmll
d1Nvb247CkBAIC0xOTgsMTkgKzE5OSwxOCBAQCBXaWRnZXQ6OkZvY3VzUG9saWN5IFdpZGdldDo6
Zm9jdXNQb2xpY3koCiAgICAgLy8gMi4gYmUgZW5hYmxlZAogICAgIC8vIDMuIGFjY2VwdCBmaXJz
dCByZXNwb25kZXIKIAotICAgIFJlbmRlcldpZGdldCAqd2lkZ2V0ID0gY29uc3RfY2FzdDxSZW5k
ZXJXaWRnZXQgKj4KLSAgICAgICAgKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldpZGdldCAqPihl
dmVudEZpbHRlck9iamVjdCgpKSk7CisgICAgUmVuZGVyV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJXaWRnZXQgKj4oY2xpZW50KCkpOwogICAgIGlmICh3aWRnZXQtPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gTm9Gb2N1czsKIAogICAg
IGlmICghaXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBOb0ZvY3VzOwotICAgIAorCiAgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgaWYgKCFbZ2V0VmlldygpIGFjY2VwdHNGaXJzdFJl
c3BvbmRlcl0pCiAgICAgICAgIHJldHVybiBOb0ZvY3VzOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQ
VElPTlM7Ci0gICAgCisKICAgICByZXR1cm4gVGFiRm9jdXM7CiB9CiAKQEAgLTM2OSw4ICszNjks
NyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjCiAKIHZvaWQgV2lk
Z2V0OjpzZW5kQ29uc3VtZWRNb3VzZVVwKCkKIHsKLSAgICBSZW5kZXJXaWRnZXQqIHdpZGdldCA9
IGNvbnN0X2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+Ci0gICAgICAgIChzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJXaWRnZXQgKj4oZXZlbnRGaWx0ZXJPYmplY3QoKSkpOworICAgIFJlbmRlcldpZGdldCog
d2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4oY2xpZW50KCkpOwogCiAgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgd2lkZ2V0LT5zZW5kQ29uc3VtZWRNb3VzZVVwKCk7CkBA
IC00NDcsNCArNDQ2LDE0IEBAIHZvaWQgV2lkZ2V0OjpzZXREZWZlckZpcnN0UmVzcG9uZGVyQ2hh
bmcKICAgICB9CiB9CiAKK3ZvaWQgV2lkZ2V0OjpzZXRDbGllbnQoV2lkZ2V0Q2xpZW50KiBjKQor
eworICAgIGRhdGEtPmNsaWVudCA9IGM7Cit9CisKK1dpZGdldENsaWVudCogV2lkZ2V0OjpjbGll
bnQoKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jbGllbnQ7Cit9CisKIH0KSW5kZXg6IHBs
YXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0v
bWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gMTMwOTMpCisrKyBwbGF0Zm9ybS9t
YWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNyArNTM4LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGludCB4LCBpbgogICAgIHN0eWxlLnRh
YldpZHRoID0gdGFiV2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CiAgICAgCi0gICAgaWYg
KGFsaWdubWVudEZsYWdzICYgUXQ6OkFsaWduUmlnaHQpCisgICAgaWYgKGFsaWdubWVudEZsYWdz
ID09IEFsaWduUmlnaHQpCiAgICAgICAgIHggLT0gbHJvdW5kZihbbV9kYXRhLT50ZXh0UmVuZGVy
ZXIgZmxvYXRXaWR0aEZvclJ1bjomcnVuIHN0eWxlOiZzdHlsZV0pOwogCiAgICAgV2ViQ29yZVRl
eHRHZW9tZXRyeSBnZW9tZXRyeTsKSW5kZXg6IHBsYXRmb3JtL1dpZGdldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vV2lkZ2V0LmNwcAkocmV2aXNpb24gMTMwOTMpCisrKyBwbGF0Zm9ybS9X
aWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw0ICs5NSw5IEBAIGJvb2wgV2lkZ2V0Ojpj
aGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
V2lkZ2V0Ojppc0ZyYW1lVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9
CkluZGV4OiBwbGF0Zm9ybS9CcnVzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0JydXNoLmgJ
KHJldmlzaW9uIDEzMDkzKQorKysgcGxhdGZvcm0vQnJ1c2guaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogI2RlZmluZSBCUlVTSF9IXwogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJLV1FOYW1lc3BhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBw
bGF0Zm9ybS9QZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9QZW4uaAkocmV2aXNpb24gMTMw
OTMpCisrKyBwbGF0Zm9ybS9QZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAog
I2lmbmRlZiBQRU5fSF8KICNkZWZpbmUgUEVOX0hfCiAKLSNpbmNsdWRlICJLV1FOYW1lc3BhY2Uu
aCIKICNpbmNsdWRlICJDb2xvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBwbGF0
Zm9ybS9XaWRnZXRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9XaWRnZXRDbGllbnQu
aAkocmV2aXNpb24gMCkKKysrIHBsYXRmb3JtL1dpZGdldENsaWVudC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdpZGdldENsaWVu
dF9oCisjZGVmaW5lIFdpZGdldENsaWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGNsYXNzIFdpZGdldDsKKworICAgIGNsYXNzIFdpZGdldENsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5XaWRnZXRDbGllbnQoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG9WaXNpYmxlKFdpZGdldCopIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBm
b2N1c0luKFdpZGdldCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXQoV2lkZ2V0
KikgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsaWNrZWQoV2lkZ2V0KikgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2lkZ2V0KikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFdpZGdldCopIHsgfQorCisgICAgICAgIHZpcnR1YWwg
dm9pZCByZXR1cm5QcmVzc2VkKFdpZGdldCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVNlYXJjaChXaWRnZXQqKSB7IH0KKyAgICB9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogcGxhdGZvcm0vV2lkZ2V0Q2xpZW50LmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDEzMDkzKQorKysgcGxhdGZvcm0vV2lk
Z2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNpZm5kZWYgV0VCQ09SRV9Q
TEFURk9STV9XSURHRVRfSF8KICNkZWZpbmUgV0VCQ09SRV9QTEFURk9STV9XSURHRVRfSF8KIAot
I2luY2x1ZGUgIktXUU9iamVjdC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
Rm9udDsKIH0KQEAgLTQ3LDkgKzQ1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBJbnRQb2ludDsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIEludFNpemU7CisgICAg
Y2xhc3MgV2lkZ2V0Q2xpZW50OwogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAKLSAgICBjbGFz
cyBXaWRnZXQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgZW51bSBBbGlnbm1lbnRGbGFncyB7IEFs
aWduTGVmdCwgQWxpZ25SaWdodCwgQWxpZ25IQ2VudGVyIH07CisKKyAgICBjbGFzcyBXaWRnZXQg
ewogICAgIHB1YmxpYzoKIAogICAgICAgICBlbnVtIEZvY3VzUG9saWN5IHsKQEAgLTExNCw3ICsx
MTUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpc2FibGVGbHVzaERy
YXdpbmcoKTsKICAgICAgICAgdm9pZCBzZXREcmF3aW5nQWxwaGEoZmxvYXQgYWxwaGEpOwogCi0g
ICAgICAgIHZvaWQgc2V0SXNTZWxlY3RlZChib29sIGlzU2VsZWN0ZWQpOworICAgICAgICB2b2lk
IHNldElzU2VsZWN0ZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBzZXRDbGllbnQoV2lkZ2V0Q2xp
ZW50Kik7CisgICAgICAgIFdpZGdldENsaWVudCogY2xpZW50KCkgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzRnJhbWVWaWV3KCkgY29uc3Q7CiAKICNpZiBfX0FQUExFX18KICAgICAg
ICAgV2lkZ2V0KE5TVmlldyogdmlldyk7CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAkocmV2aXNpb24gMTMwOTMpCisr
KyByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjEg
KzIyLDE4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KKwogI2lm
bmRlZiBSRU5ERVJfRk9STV9ICiAjZGVmaW5lIFJFTkRFUl9GT1JNX0gKIAotI2luY2x1ZGUgInJl
bmRlcl9yZXBsYWNlZC5oIgotI2luY2x1ZGUgInJlbmRlcl9pbWFnZS5oIgotI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCi0KLSNpbmNsdWRlIDxxdGV4dGVkaXQuaD4KLSNpbmNsdWRlIDxxbGluZWVk
aXQuaD4KLQogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiSFRN
TFNlbGVjdEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudEltcGwu
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgInJlbmRlcl9pbWFnZS5oIgor
I2luY2x1ZGUgInJlbmRlcl9yZXBsYWNlZC5oIgorI2luY2x1ZGUgPHFsaW5lZWRpdC5oPgogCi1j
bGFzcyBRQ29tYm9Cb3g7CiBjbGFzcyBRTGlzdEJveDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTAsNyArNDcsNyBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDsKIGNsYXNz
IFJlbmRlckZvcm1FbGVtZW50IDogcHVibGljIGtodG1sOjpSZW5kZXJXaWRnZXQKIHsKIHB1Ymxp
YzoKLSAgICBSZW5kZXJGb3JtRWxlbWVudChET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
KiBub2RlKTsKKyAgICBSZW5kZXJGb3JtRWxlbWVudChIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCogbm9kZSk7CiAgICAgdmlydHVhbCB+UmVuZGVyRm9ybUVsZW1lbnQoKTsKIAogICAgIHZpcnR1
YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGb3JtIjsg
fQpAQCAtODMsMjAgKzgwLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKCBib29sLCBib29sICkgY29uc3Q7
CiAKLSAgICBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICplbGVtZW50KCkgY29uc3QK
LSAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
Kj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwgKmVsZW1lbnQoKSBjb25zdAorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CiAKLXB1Ymxp
YyBzbG90czoKLSAgICB2aXJ0dWFsIHZvaWQgc2xvdENsaWNrZWQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2xvdFNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICAKLSAgICAvLyBIYWNrIHRvIG1ha2UgS1dR
U2xvdCBjb2RlIHdvcmsuCi0gICAgdmlydHVhbCB2b2lkIHNsb3RUZXh0Q2hhbmdlZChjb25zdCBE
T006OkRPTVN0cmluZyAmc3RyaW5nKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGNsaWNr
ZWQoV2lkZ2V0Kik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBBbGlnbm1lbnRGbGFncyB0ZXh0QWxpZ25t
ZW50KCkgY29uc3Q7CisgICAgV2ViQ29yZTo6QWxpZ25tZW50RmxhZ3MgdGV4dEFsaWdubWVudCgp
IGNvbnN0OwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA0LDcgKzk3LDcgQEAgcHJv
dGVjdGVkOgogY2xhc3MgUmVuZGVySW1hZ2VCdXR0b24gOiBwdWJsaWMgUmVuZGVySW1hZ2UKIHsK
IHB1YmxpYzoKLSAgICBSZW5kZXJJbWFnZUJ1dHRvbihET006OkhUTUxJbnB1dEVsZW1lbnRJbXBs
ICplbGVtZW50KTsKKyAgICBSZW5kZXJJbWFnZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50SW1wbCAq
ZWxlbWVudCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7
IHJldHVybiAiUmVuZGVySW1hZ2VCdXR0b24iOyB9CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2VC
dXR0b24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMTUsNyArMTA4LDcgQEAgcHVibGlj
OgogY2xhc3MgUmVuZGVyTGluZUVkaXQgOiBwdWJsaWMgUmVuZGVyRm9ybUVsZW1lbnQKIHsKIHB1
YmxpYzoKLSAgICBSZW5kZXJMaW5lRWRpdChET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVt
ZW50KTsKKyAgICBSZW5kZXJMaW5lRWRpdChIVE1MSW5wdXRFbGVtZW50SW1wbCAqZWxlbWVudCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAgICAgaW50IGNhbGNSZXBs
YWNlZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGludHJpbnNpY0hlaWdodCgpOyB9CkBAIC0xMzcs
MTggKzEzMCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQsIGlu
dCk7CiAKICAgICBRTGluZUVkaXQgKndpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFFMaW5lRWRpdCo+KG1fd2lkZ2V0KTsgfQotICAgIERPTTo6SFRNTElucHV0RWxlbWVudEltcGwq
IGVsZW1lbnQoKSBjb25zdAotICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PERPTTo6SFRNTElucHV0
RWxlbWVudEltcGwqPihSZW5kZXJPYmplY3Q6OmVsZW1lbnQoKSk7IH0KKyAgICBIVE1MSW5wdXRF
bGVtZW50SW1wbCogZWxlbWVudCgpIGNvbnN0CisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudEltcGwqPihSZW5kZXJPYmplY3Q6OmVsZW1lbnQoKSk7IH0KIAotcHVibGlj
IHNsb3RzOgotICAgIHZvaWQgc2xvdFJldHVyblByZXNzZWQoKTsKLSAgICB2b2lkIHNsb3RUZXh0
Q2hhbmdlZChjb25zdCBET006OkRPTVN0cmluZyAmc3RyaW5nKTsKLSAgICB2b2lkIHNsb3RTZWxl
Y3Rpb25DaGFuZ2VkKCk7Ci0gICAgdm9pZCBzbG90UGVyZm9ybVNlYXJjaCgpOwogcHVibGljOgog
ICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IHJldHVyblByZXNzZWQoV2lkZ2V0Kik7CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChX
aWRnZXQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChXaWRnZXQqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChXaWRnZXQqKTsKKwogICAgIHZpcnR1YWwgYm9v
bCBpc0VkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBtX3VwZGF0
aW5nOwpAQCAtMTc4LDcgKzE3MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBSZW5kZXJGaWxlQnV0dG9u
IDogcHVibGljIFJlbmRlckZvcm1FbGVtZW50CiB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyRmlsZUJ1
dHRvbihET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50KTsKKyAgICBSZW5kZXJGaWxl
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50KTsKIAogICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGaWxlQnV0dG9uIjsg
fQogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKQEAgLTE4NywyNyArMTgwLDI1
IEBAIHB1YmxpYzoKIAogICAgIGludCBjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBpbnRyaW5zaWNIZWlnaHQoKTsgfQogCi0gICAgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbCAq
ZWxlbWVudCgpIGNvbnN0Ci0gICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MSW5wdXRF
bGVtZW50SW1wbCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsgfQorICAgIEhUTUxJbnB1dEVs
ZW1lbnRJbXBsICplbGVtZW50KCkgY29uc3QKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50SW1wbCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsgfQogCiAgICAgdm9p
ZCBjbGljayhib29sIHNlbmRNb3VzZUV2ZW50cyk7CiAKLXB1YmxpYyBzbG90czoKLSAgICB2aXJ0
dWFsIHZvaWQgc2xvdENsaWNrZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2xvdFJldHVyblByZXNz
ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2xvdFRleHRDaGFuZ2VkKGNvbnN0IERPTTo6RE9NU3Ry
aW5nICZzdHJpbmcpOwotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGlzRWRpdGFibGUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci19OwogCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCByZXR1cm5QcmVzc2VkKFdpZGdldCopOworICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
V2lkZ2V0Kik7Cit9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIFJlbmRlckxhYmVs
IDogcHVibGljIFJlbmRlckZvcm1FbGVtZW50CiB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyTGFiZWwo
RE9NOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqZWxlbWVudCk7CisgICAgUmVuZGVyTGFi
ZWwoSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKmVsZW1lbnQpOwogCiAgICAgdmlydHVhbCBj
b25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxhYmVsIjsgfQog
fTsKQEAgLTIxOCw3ICsyMDksNyBAQCBwdWJsaWM6CiBjbGFzcyBSZW5kZXJMZWdlbmQgOiBwdWJs
aWMgUmVuZGVyQmxvY2sKIHsKIHB1YmxpYzoKLSAgICBSZW5kZXJMZWdlbmQoRE9NOjpIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCAqZWxlbWVudCk7CisgICAgUmVuZGVyTGVnZW5kKEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsICplbGVtZW50KTsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciAq
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJMZWdlbmQiOyB9CiB9OwpAQCAtMjI4
LDcgKzIxOSw3IEBAIHB1YmxpYzoKIGNsYXNzIFJlbmRlclNlbGVjdCA6IHB1YmxpYyBSZW5kZXJG
b3JtRWxlbWVudAogewogcHVibGljOgotICAgIFJlbmRlclNlbGVjdChET006OkhUTUxTZWxlY3RF
bGVtZW50SW1wbCAqZWxlbWVudCk7CisgICAgUmVuZGVyU2VsZWN0KEhUTUxTZWxlY3RFbGVtZW50
SW1wbCAqZWxlbWVudCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyU2VsZWN0IjsgfQogCkBAIC0yNDgsMTIgKzIzOSwxMSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbigpOwogCi0gICAgRE9NOjpIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgKmVsZW1lbnQoKSBjb25zdAotICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PERPTTo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9
CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICplbGVtZW50KCkgY29uc3QKKyAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihSZW5kZXJPYmplY3Q6OmVsZW1l
bnQoKSk7IH0KIAogcHJvdGVjdGVkOgogICAgIFFMaXN0Qm94ICpjcmVhdGVMaXN0Qm94KCk7Ci0g
ICAgUUNvbWJvQm94ICpjcmVhdGVDb21ib0JveCgpOwogICAgIHZvaWQgc2V0V2lkZ2V0V3JpdGlu
Z0RpcmVjdGlvbigpOwogCiAgICAgdW5zaWduZWQgIG1fc2l6ZTsKQEAgLTI2Myw5ICsyNTMsOSBA
QCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2lnbm9yZVNlbGVjdEV2ZW50czsKICAgICBib29sIG1f
b3B0aW9uc0NoYW5nZWQ7CiAKLXByb3RlY3RlZCBzbG90czoKLSAgICB2b2lkIHNsb3RTZWxlY3Rl
ZChpbnQgaW5kZXgpOwotICAgIHZvaWQgc2xvdFNlbGVjdGlvbkNoYW5nZWQoKTsKK3ByaXZhdGU6
CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXaWRnZXQqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0aW9uQ2hhbmdlZChXaWRnZXQqKTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTI3Myw3ICsyNjMsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiBjbGFzcyBSZW5kZXJUZXh0QXJl
YSA6IHB1YmxpYyBSZW5kZXJGb3JtRWxlbWVudAogewogcHVibGljOgotICAgIFJlbmRlclRleHRB
cmVhKERPTTo6SFRNTFRleHRBcmVhRWxlbWVudEltcGwgKmVsZW1lbnQpOworICAgIFJlbmRlclRl
eHRBcmVhKEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICplbGVtZW50KTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7CiAKQEAgLTI4Nyw4ICsyNzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRFZGl0ZWQgKGJvb2wpOwogICAgIAogICAgIC8vIGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQgbWFr
aW5nIHRoaXMgbWV0aG9kIHZpcnR1YWwhCi0gICAgRE9NOjpIVE1MVGV4dEFyZWFFbGVtZW50SW1w
bCogZWxlbWVudCgpIGNvbnN0Ci0gICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsgfQorICAgIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsKiBlbGVtZW50KCkgY29uc3QKKyAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsg
fQogCiAgICAgU3RyaW5nIHRleHQoKTsKICAgICBTdHJpbmcgdGV4dFdpdGhIYXJkTGluZUJyZWFr
cygpOwpAQCAtMzAzLDkgKzI5Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wg
Y2FuSGF2ZUludHJpbnNpY01hcmdpbnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLXByb3Rl
Y3RlZCBzbG90czoKLSAgICB2b2lkIHNsb3RUZXh0Q2hhbmdlZCgpOwotICAgIHZvaWQgc2xvdFNl
bGVjdGlvbkNoYW5nZWQoKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdl
ZChXaWRnZXQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChXaWRnZXQqKTsK
ICAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KQEAgLTMxOSwyMSArMzA5LDIwIEBAIHByb3RlY3RlZDoKIGNsYXNzIFJl
bmRlclNsaWRlciA6IHB1YmxpYyBSZW5kZXJGb3JtRWxlbWVudAogewogcHVibGljOgotICAgIFJl
bmRlclNsaWRlcihET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50KTsKKyAgICBSZW5k
ZXJTbGlkZXIoSFRNTElucHV0RWxlbWVudEltcGwgKmVsZW1lbnQpOwogICAgIAotICAgIERPTTo6
SFRNTElucHV0RWxlbWVudEltcGwqIGVsZW1lbnQoKSBjb25zdAotICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PERPTTo6SFRNTElucHV0RWxlbWVudEltcGwqPihSZW5kZXJPYmplY3Q6OmVsZW1lbnQo
KSk7IH0KKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCogZWxlbWVudCgpIGNvbnN0CisgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihSZW5kZXJPYmplY3Q6OmVs
ZW1lbnQoKSk7IH0KIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTbGlkZXIiOyB9CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVJbnRy
aW5zaWNNYXJnaW5zKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBj
YWxjTWluTWF4V2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsK
IAotcHJvdGVjdGVkIHNsb3RzOgotICAgIHZvaWQgc2xvdFNsaWRlclZhbHVlQ2hhbmdlZCgpOwot
ICAgIHZvaWQgc2xvdENsaWNrZWQoKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChXaWRnZXQqKTsKIH07CiAKLX07IC8vbmFtZXNwYWNlCit9IC8vbmFtZXNwYWNlCiAK
ICNlbmRpZgpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9sYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9yZW5kZXJfbGF5ZXIuaAkocmV2aXNpb24gMTMwOTMpCisrKyByZW5kZXJpbmcvcmVu
ZGVyX2xheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJD
b2xvci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgIldpZGdldENsaWVudC5oIgogI2luY2x1ZGUgInJlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRl
IDxhc3NlcnQuaD4KICNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KQEAgLTYzLDE3ICs2NCw2
IEBAIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyVGFibGU7CiBjbGFzcyBSZW5kZXJU
ZXh0OwogCi1jbGFzcyBSZW5kZXJTY3JvbGxNZWRpYXRvciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci1w
dWJsaWM6Ci0gICAgUmVuZGVyU2Nyb2xsTWVkaWF0b3IoUmVuZGVyTGF5ZXIqIGxheWVyKSA6IG1f
bGF5ZXIobGF5ZXIpIHt9Ci0KLSAgICB2b2lkIHNsb3RWYWx1ZUNoYW5nZWQoaW50KTsKLSAgICAK
LXByaXZhdGU6Ci0gICAgUmVuZGVyTGF5ZXIqIG1fbGF5ZXI7Ci19OwotCiBjbGFzcyBDbGlwUmVj
dHMKIHsKIHB1YmxpYzoKQEAgLTE1Myw4ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIEVNYXJxdWVl
RGlyZWN0aW9uIG1fZGlyZWN0aW9uIDogNDsKIH07CiAKLWNsYXNzIFJlbmRlckxheWVyCi17Citj
bGFzcyBSZW5kZXJMYXllciA6IFdpZGdldENsaWVudCB7CiBwdWJsaWM6CiAgICAgZW51bSBTY3Jv
bGxCZWhhdmlvciB7CiAgICAgICAgIG5vU2Nyb2xsLApAQCAtMTg0LDE5ICsxNzMsMTkgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIFFTY3JvbGxCYXIqIGdTY3JvbGxCYXI7CiAgICAgCi0gICAgUmVu
ZGVyTGF5ZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpOworICAgIFJlbmRlckxheWVyKFJlbmRlck9i
amVjdCopOwogICAgIH5SZW5kZXJMYXllcigpOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQotICAgIFJlbmRlckxheWVyICpwYXJl
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQotICAgIFJlbmRlckxheWVyICpwcmV2aW91
c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzOyB9Ci0gICAgUmVuZGVyTGF5ZXIg
Km5leHRTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CisgICAgUmVuZGVyTGF5ZXIq
IHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgUmVuZGVyTGF5ZXIqIHBy
ZXZpb3VzU2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXM7IH0KKyAgICBSZW5kZXJM
YXllciogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KIAotICAgIFJlbmRl
ckxheWVyICpmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQotICAgIFJlbmRl
ckxheWVyICpsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KKyAgICBSZW5kZXJM
YXllciogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3Q7IH0KKyAgICBSZW5kZXJM
YXllciogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0OyB9CiAKLSAgICB2b2lkIGFk
ZENoaWxkKFJlbmRlckxheWVyICpuZXdDaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkID0g
MCk7Ci0gICAgUmVuZGVyTGF5ZXIqIHJlbW92ZUNoaWxkKFJlbmRlckxheWVyICpvbGRDaGlsZCk7
CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJMYXllciogbmV3Q2hpbGQsIFJlbmRlckxheWVyKiBi
ZWZvcmVDaGlsZCA9IDApOworICAgIFJlbmRlckxheWVyKiByZW1vdmVDaGlsZChSZW5kZXJMYXll
ciopOwogCiAgICAgdm9pZCByZW1vdmVPbmx5VGhpc0xheWVyKCk7CiAgICAgdm9pZCBpbnNlcnRP
bmx5VGhpc0xheWVyKCk7CkBAIC0yNTUsNyArMjQ0LDYgQEAgcHVibGljOgogICAgIHZvaWQgcGFp
bnRTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qp
OwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAgICAgdm9pZCBzbG90
VmFsdWVDaGFuZ2VkKGludCk7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxQb3NpdGlvbkZyb21TY3Jv
bGxiYXJzKCk7CiAgICAgYm9vbCBzY3JvbGwoS1dRU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
S1dRU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXI9MS4wKTsK
ICAgICAKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKQEAgLTMzNyw2ICszMjUsOCBA
QCBwcml2YXRlOgogICAgICAgICBpbnQgeCwgaW50IHksIGNvbnN0IEludFJlY3QmIGhpdFRlc3RS
ZWN0KTsKICAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyID0g
MCwgYm9vbCogbmVlZFZCYXIgPSAwKTsKIAorICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
V2lkZ2V0Kik7CisKIHByb3RlY3RlZDogICAKICAgICBSZW5kZXJPYmplY3QqIG1fb2JqZWN0Owog
ICAgIApAQCAtMzc3LDcgKzM2Nyw2IEBAIHByb3RlY3RlZDogICAKICAgICAvLyBGb3IgbGF5ZXJz
IHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCiAgICAgUVNjcm9s
bEJhciogbV9oQmFyOwogICAgIFFTY3JvbGxCYXIqIG1fdkJhcjsKLSAgICBSZW5kZXJTY3JvbGxN
ZWRpYXRvciogbV9zY3JvbGxNZWRpYXRvcjsKIAogICAgIC8vIEZvciBsYXllcnMgdGhhdCBlc3Rh
Ymxpc2ggc3RhY2tpbmcgY29udGV4dHMsIG1fcG9zWk9yZGVyTGlzdCBob2xkcyBhIHNvcnRlZCBs
aXN0IG9mIGFsbCB0aGUKICAgICAvLyBkZXNjZW5kYW50IGxheWVycyB3aXRoaW4gdGhlIHN0YWNr
aW5nIGNvbnRleHQgdGhhdCBoYXZlIHotaW5kaWNlcyBvZiAwIG9yIGdyZWF0ZXIKSW5kZXg6IHJl
bmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVy
X3JlcGxhY2VkLmgJKHJldmlzaW9uIDEzMDkzKQorKysgcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAjaWZuZGVmIHJlbmRlcl9yZXBs
YWNlZF9oCiAjZGVmaW5lIHJlbmRlcl9yZXBsYWNlZF9oCiAKKyNpbmNsdWRlICJXaWRnZXRDbGll
bnQuaCIKICNpbmNsdWRlICJyZW5kZXJfYm94LmgiCi0jaW5jbHVkZSA8cW9iamVjdC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc0LDcgKzc0LDcgQEAgcHJvdGVjdGVkOgogfTsKIAog
Ci1jbGFzcyBSZW5kZXJXaWRnZXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFJlbmRlclJlcGxh
Y2VkCitjbGFzcyBSZW5kZXJXaWRnZXQgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQsIHB1YmxpYyBX
aWRnZXRDbGllbnQKIHsKIHB1YmxpYzoKICAgICBSZW5kZXJXaWRnZXQoTm9kZUltcGwqKTsKQEAg
LTEwMiwxNSArMTAyLDE4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UVdpZGdldChXaWRnZXQq
LCBib29sIGRlbGV0ZVdpZGdldCA9IHRydWUpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIGV2ZW50RmlsdGVyRm9jdXNJbigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBldmVudEZp
bHRlckZvY3VzT3V0KCkgY29uc3Q7Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmb2N1c0lu
KFdpZGdldCopOworICAgIHZpcnR1YWwgdm9pZCBmb2N1c091dChXaWRnZXQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVG9WaXNpYmxlKFdpZGdldCopOwogCiAgICAgdm9pZCByZXNpemVXaWRn
ZXQoV2lkZ2V0KiwgaW50IHcsIGludCBoKTsKIAogICAgIGJvb2wgbV9kZWxldGVXaWRnZXQ7Citw
cm90ZWN0ZWQ6CiAgICAgV2lkZ2V0KiBtX3dpZGdldDsKICAgICBGcmFtZVZpZXcqIG1fdmlldzsK
K3ByaXZhdGU6CiAgICAgaW50IG1fcmVmQ291bnQ7CiB9OwogCkluZGV4OiByZW5kZXJpbmcvcmVu
ZGVyX2xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAko
cmV2aXNpb24gMTMwOTMpCisrKyByZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDExICsxMDQsNiBAQCB2b2lkIENsaXBSZWN0czo6ZGVzdHJveShSZW5kZXJB
cmVuYSogcmVuCiAgICAgcmVuZGVyQXJlbmEtPmZyZWUoKihzaXplX3QgKil0aGlzLCB0aGlzKTsK
IH0KIAotdm9pZCBSZW5kZXJTY3JvbGxNZWRpYXRvcjo6c2xvdFZhbHVlQ2hhbmdlZChpbnQgdmFs
KQotewotICAgIG1fbGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uRnJvbVNjcm9sbGJhcnMoKTsK
LX0KLQogUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlck9iamVjdCogb2JqZWN0KQogOiBt
X29iamVjdCggb2JqZWN0ICksCiBtX3BhcmVudCggMCApLApAQCAtMTMwLDcgKzEyNSw2IEBAIG1f
c2Nyb2xsV2lkdGgoIDAgKSwKIG1fc2Nyb2xsSGVpZ2h0KCAwICksCiBtX2hCYXIoIDAgKSwKIG1f
dkJhciggMCApLAotbV9zY3JvbGxNZWRpYXRvciggMCApLAogbV9wb3NaT3JkZXJMaXN0KCAwICks
CiBtX25lZ1pPcmRlckxpc3QoIDAgKSwKIG1fY2xpcFJlY3RzKCAwICkgLApAQCAtMTQ3LDcgKzE0
MSw2IEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgIC8vIG91ciBkZXN0cnVjdG9y
IGRvZXNuJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICBkZWxldGUgbV9oQmFyOwogICAgIGRl
bGV0ZSBtX3ZCYXI7Ci0gICAgZGVsZXRlIG1fc2Nyb2xsTWVkaWF0b3I7CiAgICAgZGVsZXRlIG1f
cG9zWk9yZGVyTGlzdDsKICAgICBkZWxldGUgbV9uZWdaT3JkZXJMaXN0OwogICAgIGRlbGV0ZSBt
X21hcnF1ZWU7CkBAIC03MDksOCArNzAyLDEwIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJl
Y3RUb0V4cG9zZShjb24KICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCh4LCB5KSwgdmlzaWJs
ZVJlY3Quc2l6ZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsUG9zaXRp
b25Gcm9tU2Nyb2xsYmFycygpCit2b2lkIFJlbmRlckxheWVyOjp2YWx1ZUNoYW5nZWQoV2lkZ2V0
KikKIHsKKyAgICAvLyBVcGRhdGUgc2Nyb2xsIHBvc2l0aW9uIGZyb20gc2Nyb2xsIGJhcnMuCisK
ICAgICBib29sIG5lZWRVcGRhdGUgPSBmYWxzZTsKICAgICBpbnQgbmV3WCA9IHNjcm9sbFhPZmZz
ZXQoKTsKICAgICBpbnQgbmV3WSA9IG1fc2Nyb2xsWTsKQEAgLTczNiwxOCArNzMxLDEyIEBAIFJl
bmRlckxheWVyOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGIKIHsKICAgICBpZiAoaGFzU2Ny
b2xsYmFyICYmICFtX2hCYXIpIHsKICAgICAgICAgRnJhbWVWaWV3KiBzY3JvbGxWaWV3ID0gbV9v
YmplY3QtPmVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+dmlldygpOwotICAgICAgICBtX2hCYXIg
PSBuZXcgUVNjcm9sbEJhcihRdDo6SG9yaXpvbnRhbCwgMCk7CisgICAgICAgIG1faEJhciA9IG5l
dyBRU2Nyb2xsQmFyKEhvcml6b250YWxTY3JvbGxCYXIsIDApOworICAgICAgICBtX2hCYXItPnNl
dENsaWVudCh0aGlzKTsKICAgICAgICAgc2Nyb2xsVmlldy0+YWRkQ2hpbGQobV9oQmFyLCAwLCAt
NTAwMDApOwotICAgICAgICBpZiAoIW1fc2Nyb2xsTWVkaWF0b3IpCi0gICAgICAgICAgICBtX3Nj
cm9sbE1lZGlhdG9yID0gbmV3IFJlbmRlclNjcm9sbE1lZGlhdG9yKHRoaXMpOwotICAgICAgICBt
X3Njcm9sbE1lZGlhdG9yLT5jb25uZWN0KG1faEJhciwgU0lHTkFMKHZhbHVlQ2hhbmdlZChpbnQp
KSwgU0xPVChzbG90VmFsdWVDaGFuZ2VkKGludCkpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIWhh
c1Njcm9sbGJhciAmJiBtX2hCYXIpIHsKKyAgICB9IGVsc2UgaWYgKCFoYXNTY3JvbGxiYXIgJiYg
bV9oQmFyKSB7CiAgICAgICAgIEZyYW1lVmlldyogc2Nyb2xsVmlldyA9IG1fb2JqZWN0LT5lbGVt
ZW50KCktPmdldERvY3VtZW50KCktPnZpZXcoKTsKLSAgICAgICAgc2Nyb2xsVmlldy0+cmVtb3Zl
Q2hpbGQgKG1faEJhcik7Ci0KLSAgICAgICAgbV9zY3JvbGxNZWRpYXRvci0+ZGlzY29ubmVjdCht
X2hCYXIsIFNJR05BTCh2YWx1ZUNoYW5nZWQoaW50KSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zY3JvbGxNZWRpYXRvciwgU0xPVChzbG90VmFsdWVDaGFuZ2VkKGlu
dCkpKTsKKyAgICAgICAgc2Nyb2xsVmlldy0+cmVtb3ZlQ2hpbGQobV9oQmFyKTsKICAgICAgICAg
ZGVsZXRlIG1faEJhcjsKICAgICAgICAgbV9oQmFyID0gMDsKICAgICB9CkBAIC03NTgsMTggKzc0
NywxMiBAQCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vCiB7CiAgICAg
aWYgKGhhc1Njcm9sbGJhciAmJiAhbV92QmFyKSB7CiAgICAgICAgIEZyYW1lVmlldyogc2Nyb2xs
VmlldyA9IG1fb2JqZWN0LT5lbGVtZW50KCktPmdldERvY3VtZW50KCktPnZpZXcoKTsKLSAgICAg
ICAgbV92QmFyID0gbmV3IFFTY3JvbGxCYXIoUXQ6OlZlcnRpY2FsLCAwKTsKKyAgICAgICAgbV92
QmFyID0gbmV3IFFTY3JvbGxCYXIoVmVydGljYWxTY3JvbGxCYXIsIDApOworICAgICAgICBtX3ZC
YXItPnNldENsaWVudCh0aGlzKTsKICAgICAgICAgc2Nyb2xsVmlldy0+YWRkQ2hpbGQobV92QmFy
LCAwLCAtNTAwMDApOwotICAgICAgICBpZiAoIW1fc2Nyb2xsTWVkaWF0b3IpCi0gICAgICAgICAg
ICBtX3Njcm9sbE1lZGlhdG9yID0gbmV3IFJlbmRlclNjcm9sbE1lZGlhdG9yKHRoaXMpOwotICAg
ICAgICBtX3Njcm9sbE1lZGlhdG9yLT5jb25uZWN0KG1fdkJhciwgU0lHTkFMKHZhbHVlQ2hhbmdl
ZChpbnQpKSwgU0xPVChzbG90VmFsdWVDaGFuZ2VkKGludCkpKTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAoIWhhc1Njcm9sbGJhciAmJiBtX3ZCYXIpIHsKKyAgICB9IGVsc2UgaWYgKCFoYXNTY3JvbGxi
YXIgJiYgbV92QmFyKSB7CiAgICAgICAgIEZyYW1lVmlldyogc2Nyb2xsVmlldyA9IG1fb2JqZWN0
LT5lbGVtZW50KCktPmdldERvY3VtZW50KCktPnZpZXcoKTsKLSAgICAgICAgc2Nyb2xsVmlldy0+
cmVtb3ZlQ2hpbGQgKG1fdkJhcik7Ci0KLSAgICAgICAgbV9zY3JvbGxNZWRpYXRvci0+ZGlzY29u
bmVjdChtX3ZCYXIsIFNJR05BTCh2YWx1ZUNoYW5nZWQoaW50KSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxNZWRpYXRvciwgU0xPVChzbG90VmFsdWVDaGFu
Z2VkKGludCkpKTsKKyAgICAgICAgc2Nyb2xsVmlldy0+cmVtb3ZlQ2hpbGQobV92QmFyKTsKICAg
ICAgICAgZGVsZXRlIG1fdkJhcjsKICAgICAgICAgbV92QmFyID0gMDsKICAgICB9CkBAIC0xMTA3
LDkgKzEwOTAsOCBAQCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vCiBi
b29sCiBSZW5kZXJMYXllcjo6aGl0VGVzdChSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvLCBp
bnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gQ2xlYXIgb3VyIG91ciBzY3JvbGxiYXIgdmFyaWFibGUK
LSAgICBSZW5kZXJMYXllcjo6Z1Njcm9sbEJhciA9IDA7Ci0gICAgCisgICAgZ1Njcm9sbEJhciA9
IDA7CisKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAK
ICAgICBJbnRSZWN0IGRhbWFnZVJlY3QobV94LCBtX3ksIHdpZHRoKCksIGhlaWdodCgpKTsKSW5k
ZXg6IHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
cmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDEzMDkzKQorKysgcmVuZGVyaW5nL3JlbmRlcl9m
cmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTMsOCArNTkzLDE4IEBAIFJlbmRlclBhcnQ6
OlJlbmRlclBhcnQoRE9NOjpIVE1MRWxlbWVudEkKIAogUmVuZGVyUGFydDo6flJlbmRlclBhcnQo
KQogewotICAgIGlmIChtX3dpZGdldCAmJiBtX3dpZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV93aWRnZXQpLT5kZXJlZigpOworICAgIGRpc2Nv
bm5lY3RGcmFtZSgpOworfQorCit2b2lkIFJlbmRlclBhcnQ6OmRpc2Nvbm5lY3RGcmFtZSgpCit7
CisgICAgaWYgKG1fd2lkZ2V0ICYmIG1fd2lkZ2V0LT5pc0ZyYW1lVmlldygpKSB7CisgICAgICAg
IEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fd2lkZ2V0KTsKKyAg
ICAgICAgRnJhbWUqIGZyYW1lID0gdmlldy0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKQor
ICAgICAgICAgICAgZnJhbWUtPmRpc2Nvbm5lY3RPd25lclJlbmRlcmVyKCk7CisgICAgICAgIHZp
ZXctPmRlcmVmKCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlclBhcnQ6OnNldFdpZGdldChXaWRn
ZXQqIHdpZGdldCkKQEAgLTYwMiwxNyArNjEyLDE3IEBAIHZvaWQgUmVuZGVyUGFydDo6c2V0V2lk
Z2V0KFdpZGdldCogd2lkZ2UKICAgICBpZiAod2lkZ2V0ID09IG1fd2lkZ2V0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV93aWRnZXQgJiYgbV93aWRnZXQtPmlzRnJhbWVWaWV3KCkpCi0g
ICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fd2lkZ2V0KS0+ZGVyZWYoKTsKLSAgICAK
KyAgICBkaXNjb25uZWN0RnJhbWUoKTsKKwogICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5pc0Zy
YW1lVmlldygpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPnJl
ZigpOwogICAgICAgICBzZXRRV2lkZ2V0KHdpZGdldCwgZmFsc2UpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHNldFFXaWRnZXQod2lkZ2V0KTsKICAgICB9CisKICAgICBzZXROZWVkc0xheW91dEFu
ZE1pbk1heFJlY2FsYygpOwotICAgIAorCiAgICAgLy8gbWFrZSBzdXJlIHRoZSBzY3JvbGxiYXJz
IGFyZSBzZXQgY29ycmVjdGx5IGZvciByZXN0b3JlCiAgICAgLy8gIyMjIGZpbmQgYmV0dGVyIGZp
eAogICAgIHZpZXdDbGVhcmVkKCk7CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDEzMDkzKQor
KysgcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDcgKzQx
OCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICB9CiAK
ICNpZmRlZiBCT1hfREVCVUcKLSAgICBwLT5zZXRQZW4oIFF0OjpyZWQgKTsKKyAgICBwLT5zZXRQ
ZW4oIHJlZCApOwogICAgIHAtPmRyYXdSZWN0KGJveC54KCksIGJveC55KCksIGJveC53aWR0aCgp
LCBib3guaGVpZ2h0KCkpOwogI2VuZGlmCiAKQEAgLTQ0NCwxOSArNDQ0LDE5IEBAIHZvaWQgUmVu
ZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgaWYgKCFtX2l0ZW0uaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnNpZGUoKSkgewogICAgICAgICAgICAgCWlm
KCBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICAgICAgcC0+
ZHJhd1RleHQobWFya2VyLngoKSwgbWFya2VyLnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVm
dCwgbV9pdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQobWFya2VyLngoKSAr
IGZtLndpZHRoKG1faXRlbSwgMCwgMCksIG1hcmtlci55KCksIDAsIDAsIDAsIDAsIFF0OjpBbGln
bkxlZnQsICIuICIpOworICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChtYXJrZXIueCgp
LCBtYXJrZXIueSgpLCAwLCAwLCAwLCAwLCBBbGlnbkxlZnQsIG1faXRlbSk7CisgICAgICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci54KCkgKyBmbS53aWR0aChtX2l0ZW0sIDAsIDAp
LCBtYXJrZXIueSgpLCAwLCAwLCAwLCAwLCBBbGlnbkxlZnQsICIuICIpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci54KCks
IG1hcmtlci55KCksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsICIgLiIpOwotICAgICAgICAg
ICAgCSAgICBwLT5kcmF3VGV4dChtYXJrZXIueCgpICsgZm0ud2lkdGgoIiAuIiwgMCwgMCksIG1h
cmtlci55KCksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsIG1faXRlbSk7CisgICAgICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci54KCksIG1hcmtlci55KCksIDAsIDAsIDAsIDAs
IEFsaWduTGVmdCwgIiAuIik7CisgICAgICAgICAgICAJICAgIHAtPmRyYXdUZXh0KG1hcmtlci54
KCkgKyBmbS53aWR0aCgiIC4iLCAwLCAwKSwgbWFya2VyLnkoKSwgMCwgMCwgMCwgMCwgQWxpZ25M
ZWZ0LCBtX2l0ZW0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAg
ICAgICAgICAgICAgICBwLT5kcmF3VGV4dChtYXJrZXIueCgpLCBtYXJrZXIueSgpLCAwLCAwLCAw
LCAwLCBRdDo6QWxpZ25SaWdodCwgIi4gIik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdU
ZXh0KG1hcmtlci54KCkgLSBmbS53aWR0aCgiLiAiLCAwLCAwKSwgbWFya2VyLnkoKSwgMCwgMCwg
MCwgMCwgUXQ6OkFsaWduUmlnaHQsIG1faXRlbSk7CisgICAgICAgICAgICAgICAgICAgIHAtPmRy
YXdUZXh0KG1hcmtlci54KCksIG1hcmtlci55KCksIDAsIDAsIDAsIDAsIEFsaWduUmlnaHQsICIu
ICIpOworICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChtYXJrZXIueCgpIC0gZm0ud2lk
dGgoIi4gIiwgMCwgMCksIG1hcmtlci55KCksIDAsIDAsIDAsIDAsIEFsaWduUmlnaHQsIG1faXRl
bSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIAkgICAgcC0+ZHJhd1Rl
eHQobWFya2VyLngoKSwgbWFya2VyLnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgIiAu
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci54KCkgKyBmbS53aWR0
aCgiIC4iLCAwLCAwKSwgbWFya2VyLnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgbV9p
dGVtKTsKKyAgICAgICAgICAgIAkgICAgcC0+ZHJhd1RleHQobWFya2VyLngoKSwgbWFya2VyLnko
KSwgMCwgMCwgMCwgMCwgQWxpZ25MZWZ0LCAiIC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+
ZHJhd1RleHQobWFya2VyLngoKSArIGZtLndpZHRoKCIgLiIsIDAsIDApLCBtYXJrZXIueSgpLCAw
LCAwLCAwLCAwLCBBbGlnbkxlZnQsIG1faXRlbSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkocmV2aXNpb24gMTMwOTMpCisr
KyByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEw
NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWEKICAgICAgICAg
Ly8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3
ZSBpbnZlbnRlZCkKICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gc3R5bGUoKS0+Zm9udE1ldHJpY3MoKTsKLSAg
ICAgICAgICAgIEludFJlY3QgYnIgPSBmbS5ib3VuZGluZ1JlY3QoMCwgMCwgMTAyNCwgMjU2LCBR
dDo6QWxpZ25BdXRvLCBtX2FsdFRleHQucXN0cmluZygpLCAwLCAwKTsgIC8vIEZJWDogY29ycmVj
dCB0YWJ3aWR0aD8KKyAgICAgICAgICAgIEludFJlY3QgYnIgPSBmbS5ib3VuZGluZ1JlY3QoMCwg
MCwgMTAyNCwgMjU2LCBBbGlnbkxlZnQsIG1fYWx0VGV4dC5xc3RyaW5nKCksIDAsIDApOyAgLy8g
RklYOiBjb3JyZWN0IHRhYndpZHRoPwogICAgICAgICAgICAgaWYgKGJyLndpZHRoKCkgPiBpdykK
ICAgICAgICAgICAgICAgICBpdyA9IGJyLndpZHRoKCk7CiAgICAgICAgICAgICBpZiAoYnIuaGVp
Z2h0KCkgPiBpaCkKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuaAkocmV2aXNpb24gMTMwOTMpCisrKyByZW5kZXJp
bmcvcmVuZGVyX2ZyYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxNSArODUsMTQgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fY2xpZW50UmVzaXppbmc7CiB9OwogCi1jbGFzcyBSZW5kZXJQYXJ0
IDogcHVibGljIFJlbmRlcldpZGdldAoteworY2xhc3MgUmVuZGVyUGFydCA6IHB1YmxpYyBSZW5k
ZXJXaWRnZXQgewogcHVibGljOgogICAgIFJlbmRlclBhcnQoSFRNTEVsZW1lbnRJbXBsKik7CiAg
ICAgdmlydHVhbCB+UmVuZGVyUGFydCgpOwogICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJQYXJ0IjsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHNldFdpZGdldChXaWRnZXQqKTsKKyAgICB2b2lkIHNldFdpZGdldChXaWRnZXQqKTsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgogICAgIC8vIFJl
bW92ZSB0aGlzIG9uY2UgV2ViS2l0IGtub3dzIHRvIHByb3Blcmx5IHNjaGVkdWxlIGxheW91dHMg
dXNpbmcgV2ViQ29yZSB3aGVuIG9iamVjdHMgcmVzaXplLgpAQCAtMTA1LDYgKzEwNCw5IEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgbV9oYXNGYWxsYmFja0NvbnRlbnQ7CisKK3By
aXZhdGU6CisgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKIH07CiAKIGNsYXNzIFJlbmRlckZy
YW1lIDogcHVibGljIFJlbmRlclBhcnQKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkocmV2aXNpb24gMTMwOTMp
CisrKyByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
Miw3IEBACiAjaW5jbHVkZSAiaGVscGVyLmgiCiAjaW5jbHVkZSA8a2xvY2FsZS5oPgogI2luY2x1
ZGUgPHFjb21ib2JveC5oPgorI2luY2x1ZGUgPHF0ZXh0ZWRpdC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTk1LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJGb3JtRWxlbWVudDo6bGF5b3V0
KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyRm9ybUVsZW1l
bnQ6OnNsb3RDbGlja2VkKCkKK3ZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmNsaWNrZWQoV2lkZ2V0
KikKIHsKICAgICBSZW5kZXJBcmVuYSAqYXJlbmEgPSByZWYoKTsKICAgICBNb3VzZUV2ZW50IGV2
ZW50OyAvLyBnZXRzICJjdXJyZW50IGV2ZW50IgpAQCAtMTA0LDcgKzEwNSw3IEBAIHZvaWQgUmVu
ZGVyRm9ybUVsZW1lbnQ6OnNsb3RDbGlja2VkKCkKICAgICBkZXJlZihhcmVuYSk7CiB9CiAKLVF0
OjpBbGlnbm1lbnRGbGFncyBSZW5kZXJGb3JtRWxlbWVudDo6dGV4dEFsaWdubWVudCgpIGNvbnN0
CitBbGlnbm1lbnRGbGFncyBSZW5kZXJGb3JtRWxlbWVudDo6dGV4dEFsaWdubWVudCgpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChzdHlsZSgpLT50ZXh0QWxpZ24oKSkgewogICAgICAgICBjYXNlIExF
RlQ6CkBAIC0xNDksMTcgKzE1MCw2IEBAIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmFkZEludHJp
bnNpY01hcmcKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OnNsb3RUZXh0Q2hh
bmdlZChjb25zdCBET006OkRPTVN0cmluZyYpCi17Ci0gICAgLy8gZG8gbm90aGluZwotfQotCi12
b2lkIFJlbmRlckZvcm1FbGVtZW50OjpzbG90U2VsZWN0aW9uQ2hhbmdlZCgpCi17Ci0gICAgLy8g
ZG8gbm90aGluZwotfQotCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVuZGVySW1h
Z2VCdXR0b246OlJlbmRlckltYWdlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50
KQpAQCAtMTg3LDM0ICsxNzcsMjIgQEAgUmVuZGVyTGluZUVkaXQ6OlJlbmRlckxpbmVFZGl0KEhU
TUxJbnB1dAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgdHlwZSA9IFFMaW5lRWRpdDo6
Tm9ybWFsOwogICAgIH0KLSAgICBRTGluZUVkaXQgKmVkaXQgPSBuZXcgUUxpbmVFZGl0KHR5cGUp
OworICAgIFFMaW5lRWRpdCogZWRpdCA9IG5ldyBRTGluZUVkaXQodHlwZSk7CiAgICAgaWYgKHR5
cGUgPT0gUUxpbmVFZGl0OjpTZWFyY2gpCiAgICAgICAgIGVkaXQtPnNldExpdmVTZWFyY2goZmFs
c2UpOwotICAgIGNvbm5lY3QoZWRpdCxTSUdOQUwocmV0dXJuUHJlc3NlZCgpKSwgdGhpcywgU0xP
VChzbG90UmV0dXJuUHJlc3NlZCgpKSk7Ci0gICAgY29ubmVjdChlZGl0LCBTSUdOQUwoc2VsZWN0
aW9uQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChzbG90U2VsZWN0aW9uQ2hhbmdlZCgpKSk7Ci0gICAg
Y29ubmVjdChlZGl0LFNJR05BTCh0ZXh0Q2hhbmdlZChjb25zdCBRU3RyaW5nICYpKSx0aGlzLFNM
T1Qoc2xvdFRleHRDaGFuZ2VkKGNvbnN0IERPTVN0cmluZyAmKSkpOwotICAgIGNvbm5lY3QoZWRp
dCxTSUdOQUwoY2xpY2tlZCgpKSx0aGlzLFNMT1Qoc2xvdENsaWNrZWQoKSkpOwotCi0gICAgY29u
bmVjdChlZGl0LFNJR05BTChwZXJmb3JtU2VhcmNoKCkpLCB0aGlzLCBTTE9UKHNsb3RQZXJmb3Jt
U2VhcmNoKCkpKTsKLQotCiAgICAgc2V0UVdpZGdldChlZGl0KTsKIH0KIAotdm9pZCBSZW5kZXJM
aW5lRWRpdDo6c2xvdFNlbGVjdGlvbkNoYW5nZWQoKQordm9pZCBSZW5kZXJMaW5lRWRpdDo6c2Vs
ZWN0aW9uQ2hhbmdlZChXaWRnZXQqKQogewotICAgIFFMaW5lRWRpdCogdyA9IHN0YXRpY19jYXN0
PFFMaW5lRWRpdCo+KG1fd2lkZ2V0KTsKLSAgICAKICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gY2Fs
bCBvbnNlbGVjdCBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHNlbGVjdGlvbgotICAgIGlmICghdy0+
aGFzU2VsZWN0ZWRUZXh0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBlbGVtZW50KCkt
Pm9uU2VsZWN0KCk7CisgICAgUUxpbmVFZGl0KiB3ID0gc3RhdGljX2Nhc3Q8UUxpbmVFZGl0Kj4o
bV93aWRnZXQpOworICAgIGlmICh3LT5oYXNTZWxlY3RlZFRleHQoKSkKKyAgICAgICAgZWxlbWVu
dCgpLT5vblNlbGVjdCgpOwogfQogCi12b2lkIFJlbmRlckxpbmVFZGl0OjpzbG90UmV0dXJuUHJl
c3NlZCgpCit2b2lkIFJlbmRlckxpbmVFZGl0OjpyZXR1cm5QcmVzc2VkKFdpZGdldCopCiB7Ci0K
ICAgICAvLyBFbWl0IG9uQ2hhbmdlIGlmIG5lY2Vzc2FyeQogICAgIC8vIFdvcmtzIGJ1dCBtaWdo
dCBub3QgYmUgZW5vdWdoLCBkaXJrIHNhaWQgaGUgaGFkIGFub3RoZXIgc29sdXRpb24gYXQKICAg
ICAvLyBoYW5kIChjYW4ndCByZW1lbWJlciB3aGljaCkgLSBEYXZpZApAQCAtMjIzLDEyICsyMDEs
MTEgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2xvdFJldHVyblByZXNzZWQoKQogICAgICAgICBz
ZXRFZGl0ZWQoZmFsc2UpOwogICAgIH0KIAotICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGZlID0g
ZWxlbWVudCgpLT5mb3JtKCk7Ci0gICAgaWYgKCBmZSApCisgICAgaWYgKEhUTUxGb3JtRWxlbWVu
dEltcGwqIGZlID0gZWxlbWVudCgpLT5mb3JtKCkpCiAgICAgICAgIGZlLT5zdWJtaXRDbGljaygp
OwogfQogCi12b2lkIFJlbmRlckxpbmVFZGl0OjpzbG90UGVyZm9ybVNlYXJjaCgpCit2b2lkIFJl
bmRlckxpbmVFZGl0OjpwZXJmb3JtU2VhcmNoKFdpZGdldCopCiB7CiAgICAgLy8gRmlyZSB0aGUg
InNlYXJjaCIgRE9NIGV2ZW50LgogICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoc2Vh
cmNoRXZlbnQsIHRydWUsIGZhbHNlKTsKQEAgLTMwOSw3ICsyODYsNyBAQCB2b2lkIFJlbmRlckxp
bmVFZGl0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OnVwZGF0
ZUZyb21FbGVtZW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGluZUVkaXQ6OnNsb3RUZXh0Q2hhbmdl
ZChjb25zdCBET01TdHJpbmcgJnN0cmluZykKK3ZvaWQgUmVuZGVyTGluZUVkaXQ6OnZhbHVlQ2hh
bmdlZChXaWRnZXQqKQogewogICAgIGlmIChtX3VwZGF0aW5nKSAvLyBEb24ndCBhbHRlciB0aGUg
dmFsdWUgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgaW5pdGluZyB0aGUgY29udHJvbCwgc2lu
Y2UKICAgICAgICAgcmV0dXJuOyAgICAgLy8gd2UgYXJlIGdldHRpbmcgdGhlIHZhbHVlIGZyb20g
dGhlIERPTSBhbmQgaXQncyBub3QgdXNlciBpbnB1dC4KQEAgLTMxNyw3ICsyOTQsOSBAQCB2b2lk
IFJlbmRlckxpbmVFZGl0OjpzbG90VGV4dENoYW5nZWQoY29uCiAgICAgLy8gQSBudWxsIHN0cmlu
ZyB2YWx1ZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIGZvcm0gY29udHJvbCBoYXMgbm90
IGFsdGVyZWQgdGhlIG9yaWdpbmFsCiAgICAgLy8gZGVmYXVsdCB2YWx1ZS4gIFRoYXQgbWVhbnMg
dGhhdCB3ZSBzaG91bGQgbmV2ZXIgdXNlIHRoZSBudWxsIHN0cmluZyB2YWx1ZSB3aGVuIHRoZSB1
c2VyCiAgICAgLy8gZW1wdGllcyBhIHRleHRmaWVsZCwgYnV0IHNob3VsZCBhbHdheXMgZm9yY2Ug
YW4gZW1wdHkgdGV4dGZpZWxkIHRvIHVzZSB0aGUgZW1wdHkgc3RyaW5nLgotICAgIERPTVN0cmlu
ZyBuZXdUZXh0ID0gc3RyaW5nLmlzTnVsbCgpID8gIiIgOiBzdHJpbmc7CisgICAgU3RyaW5nIG5l
d1RleHQgPSB3aWRnZXQoKS0+dGV4dCgpOworICAgIGlmIChuZXdUZXh0LmlzTnVsbCgpKQorICAg
ICAgICBuZXdUZXh0ID0gIiI7CiAgICAgbmV3VGV4dC5yZXBsYWNlKGJhY2tzbGFzaEFzQ3VycmVu
Y3lTeW1ib2woKSwgUUNoYXIoJ1xcJykpOwogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVGcm9tUmVu
ZGVyZXIobmV3VGV4dCk7CiB9CkBAIC01MjUsMTAgKzUwNCw3IEBAIHZvaWQgUmVuZGVyRmllbGRz
ZXQ6OnNldFN0eWxlKFJlbmRlclN0eWwKIFJlbmRlckZpbGVCdXR0b246OlJlbmRlckZpbGVCdXR0
b24oSFRNTElucHV0RWxlbWVudEltcGwgKmVsZW1lbnQpCiAgICAgOiBSZW5kZXJGb3JtRWxlbWVu
dChlbGVtZW50KQogewotICAgIEtXUUZpbGVCdXR0b24gKncgPSBuZXcgS1dRRmlsZUJ1dHRvbih2
aWV3KCktPmZyYW1lKCkpOwotICAgIGNvbm5lY3QodywgU0lHTkFMKHRleHRDaGFuZ2VkKGNvbnN0
IFFTdHJpbmcgJikpLHRoaXMsU0xPVChzbG90VGV4dENoYW5nZWQoY29uc3QgRE9NU3RyaW5nICYp
KSk7Ci0gICAgY29ubmVjdCh3LCBTSUdOQUwoY2xpY2tlZCgpKSwgdGhpcywgU0xPVChzbG90Q2xp
Y2tlZCgpKSk7Ci0gICAgc2V0UVdpZGdldCh3KTsKKyAgICBzZXRRV2lkZ2V0KG5ldyBLV1FGaWxl
QnV0dG9uKHZpZXcoKS0+ZnJhbWUoKSkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVCdXR0b246OmNh
bGNNaW5NYXhXaWR0aCgpCkBAIC01NDUsMTIgKzUyMSw2IEBAIHZvaWQgUmVuZGVyRmlsZUJ1dHRv
bjo6Y2FsY01pbk1heFdpZHRoKCkKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6Y2FsY01pbk1heFdp
ZHRoKCk7CiB9CiAKLQotdm9pZCBSZW5kZXJGaWxlQnV0dG9uOjpzbG90Q2xpY2tlZCgpCi17Ci0g
ICAgUmVuZGVyRm9ybUVsZW1lbnQ6OnNsb3RDbGlja2VkKCk7Ci19Ci0KIHZvaWQgUmVuZGVyRmls
ZUJ1dHRvbjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIHN0YXRpY19jYXN0PEtXUUZpbGVC
dXR0b24gKj4od2lkZ2V0KCkpLT5zZXRGaWxlbmFtZShlbGVtZW50KCktPnZhbHVlKCkucXN0cmlu
ZygpKTsKQEAgLTU1OCwxNSArNTI4LDE1IEBAIHZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6dXBkYXRl
RnJvbUVsZW1lbnQKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsK
IH0KIAotdm9pZCBSZW5kZXJGaWxlQnV0dG9uOjpzbG90UmV0dXJuUHJlc3NlZCgpCit2b2lkIFJl
bmRlckZpbGVCdXR0b246OnJldHVyblByZXNzZWQoV2lkZ2V0KikKIHsKICAgICBpZiAoZWxlbWVu
dCgpLT5mb3JtKCkpCiAgICAgICAgIGVsZW1lbnQoKS0+Zm9ybSgpLT5wcmVwYXJlU3VibWl0KCk7
CiB9CiAKLXZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6c2xvdFRleHRDaGFuZ2VkKGNvbnN0IERPTVN0
cmluZyAmc3RyaW5nKQordm9pZCBSZW5kZXJGaWxlQnV0dG9uOjp2YWx1ZUNoYW5nZWQoV2lkZ2V0
KikKIHsKLSAgICBlbGVtZW50KCktPm1fdmFsdWUgPSBzdHJpbmc7CisgICAgZWxlbWVudCgpLT5t
X3ZhbHVlID0gc3RhdGljX2Nhc3Q8S1dRRmlsZUJ1dHRvbio+KHdpZGdldCgpKS0+ZmlsZW5hbWUo
KTsKICAgICBlbGVtZW50KCktPm9uQ2hhbmdlKCk7CiB9CiAKQEAgLTU5Miw3ICs1NjIsNyBAQCBS
ZW5kZXJMYWJlbDo6UmVuZGVyTGFiZWwoSFRNTEdlbmVyaWNGb3JtCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIFJlbmRlckxlZ2VuZDo6UmVuZGVyTGVnZW5kKEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsICplbGVtZW50KQotOiBSZW5kZXJCbG9jayhlbGVtZW50KQorICAgIDogUmVuZGVyQmxvY2so
ZWxlbWVudCkKIHsKIH0KIApAQCAtNjExLDcgKzU4MSw3IEBAIFJlbmRlclNlbGVjdDo6UmVuZGVy
U2VsZWN0KEhUTUxTZWxlY3RFbGUKICAgICBpZihtX3VzZUxpc3RCb3gpCiAgICAgICAgIHNldFFX
aWRnZXQoY3JlYXRlTGlzdEJveCgpKTsKICAgICBlbHNlCi0gICAgICAgIHNldFFXaWRnZXQoY3Jl
YXRlQ29tYm9Cb3goKSk7CisgICAgICAgIHNldFFXaWRnZXQobmV3IFFDb21ib0JveCgpKTsKIH0K
IAogCkBAIC02NTIsNyArNjIyLDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKICAgICAgICAgICAgIGlmKG1fdXNlTGlzdEJveCkKICAgICAgICAgICAgICAgICBzZXRR
V2lkZ2V0KGNyZWF0ZUxpc3RCb3goKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc2V0UVdpZGdldChjcmVhdGVDb21ib0JveCgpKTsKKyAgICAgICAgICAgICAgICBzZXRRV2lk
Z2V0KG5ldyBRQ29tYm9Cb3gpOwogICAgICAgICAgICAgc2V0V2lkZ2V0V3JpdGluZ0RpcmVjdGlv
bigpOwogICAgICAgICB9CiAKQEAgLTgxNywyMCArNzg3LDIxIEBAIHZvaWQgUmVuZGVyU2VsZWN0
OjpsYXlvdXQoICkKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAmJiAhIGVs
ZW1lbnQoKS0+ZGlzYWJsZWQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0
ZWQoaW50IGluZGV4KQordm9pZCBSZW5kZXJTZWxlY3Q6OnZhbHVlQ2hhbmdlZChXaWRnZXQqKQog
ewotICAgIGlmICggbV9pZ25vcmVTZWxlY3RFdmVudHMgKSByZXR1cm47CisgICAgaWYgKG1faWdu
b3JlU2VsZWN0RXZlbnRzKQorICAgICAgICByZXR1cm47CiAKLSAgICBLSFRNTEFzc2VydCggIW1f
dXNlTGlzdEJveCApOworICAgIEtIVE1MQXNzZXJ0KCFtX3VzZUxpc3RCb3gpOwogCi0gICAgQXJy
YXk8SFRNTEVsZW1lbnRJbXBsKj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMoKTsK
LSAgICBpZihpbmRleCA+PSAwICYmIGluZGV4IDwgaW50KGxpc3RJdGVtcy5zaXplKCkpKQotICAg
IHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKG9w
dGlvblRhZykpOworICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PFFDb21ib0JveCo+KG1fd2lk
Z2V0KS0+Y3VycmVudEl0ZW0oKTsKIAotICAgICAgICBpZiAoICFmb3VuZCApIHsKKyAgICBBcnJh
eTxIVE1MRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwor
ICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgKGludClsaXN0SXRlbXMuc2l6ZSgpKSB7Cisg
ICAgICAgIGJvb2wgZm91bmQgPSBsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKG9wdGlvblRh
Zyk7CisgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIC8vIHRoaXMgb25lIGlzIG5v
dCBzZWxlY3RhYmxlLCAgd2UgbmVlZCB0byBmaW5kIGFuIG9wdGlvbiBlbGVtZW50Ci0gICAgICAg
ICAgICB3aGlsZSAoICggdW5zaWduZWQgKSBpbmRleCA8IGxpc3RJdGVtcy5zaXplKCkgKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoKHVuc2lnbmVkKSBpbmRleCA8IGxpc3RJdGVtcy5zaXplKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShvcHRpb25U
YWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC04MzgsOCArODA5LDggQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RT
ZWxlY3RlZChpbnQgaW5kZQogICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICggIWZvdW5kICkgewotICAgICAgICAgICAgICAgIHdoaWxlICgg
aW5kZXggPj0gMCApIHsKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoaW5kZXggPj0gMCkgewogICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1z
W2luZGV4XS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg0OSwx
MSArODIwLDExIEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICggZm91bmQgKSB7Ci0gICAgICAg
ICAgICBpZiAoIGluZGV4ICE9IHN0YXRpY19jYXN0PFFDb21ib0JveCo+KCBtX3dpZGdldCApLT5j
dXJyZW50SXRlbSgpICkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxRQ29tYm9Cb3gqPigg
bV93aWRnZXQgKS0+c2V0Q3VycmVudEl0ZW0oIGluZGV4ICk7CisgICAgICAgIGlmIChmb3VuZCkg
eworICAgICAgICAgICAgaWYgKCBpbmRleCAhPSBzdGF0aWNfY2FzdDxRQ29tYm9Cb3gqPihtX3dp
ZGdldCktPmN1cnJlbnRJdGVtKCkgKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFFDb21i
b0JveCo+KG1fd2lkZ2V0KS0+c2V0Q3VycmVudEl0ZW0oIGluZGV4ICk7CiAKLSAgICAgICAgICAg
IGZvciAoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCk7ICsraSApCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKTsgKytp
KQogICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0aW9uVGFn
KSAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4KQogICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPiggbGlzdEl0ZW1zW2ldICktPm1fc2VsZWN0
ZWQgPSBmYWxzZTsKIApAQCAtODY1LDE1ICs4MzYsMTYgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNs
b3RTZWxlY3RlZChpbnQgaW5kZQogfQogCiAKLXZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0
aW9uQ2hhbmdlZCgpCit2b2lkIFJlbmRlclNlbGVjdDo6c2VsZWN0aW9uQ2hhbmdlZChXaWRnZXQq
KQogewotICAgIGlmICggbV9pZ25vcmVTZWxlY3RFdmVudHMgKSByZXR1cm47CisgICAgaWYgKG1f
aWdub3JlU2VsZWN0RXZlbnRzKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBkb24ndCB1c2Ug
bGlzdEl0ZW1zKCkgaGVyZSBhcyB3ZSBoYXZlIHRvIGF2b2lkIHJlY2FsY3VsYXRpb25zIC0gY2hh
bmdpbmcgdGhlCiAgICAgLy8gb3B0aW9uIGxpc3Qgd2lsbCBtYWtlIHVzZSB1cGRhdGUgb3B0aW9u
cyBub3QgaW4gdGhlIHdheSB0aGUgdXNlciBleHBlY3RzIHRoZW0KICAgICBBcnJheTxIVE1MRWxl
bWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPm1fbGlzdEl0ZW1zOwogICAgIGludCBq
ID0gMDsKLSAgICBmb3IgKCB1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5jb3VudCgpOyBp
KysgKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5jb3VudCgpOyBp
KyspIHsKICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNlIGl0
IHdpbGwgY2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBkYXRl
U2VsZWN0aW9uLgogICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRh
ZykpCkBAIC04OTUsMjAgKzg2NywxMCBAQCBRTGlzdEJveCogUmVuZGVyU2VsZWN0OjpjcmVhdGVM
aXN0Qm94KCkKIHsKICAgICBRTGlzdEJveCAqbGIgPSBuZXcgUUxpc3RCb3goKTsKICAgICBsYi0+
c2V0U2VsZWN0aW9uTW9kZShtX211bHRpcGxlID8gUUxpc3RCb3g6OkV4dGVuZGVkIDogUUxpc3RC
b3g6OlNpbmdsZSk7Ci0gICAgY29ubmVjdCggbGIsIFNJR05BTCggc2VsZWN0aW9uQ2hhbmdlZCgp
ICksIHRoaXMsIFNMT1QoIHNsb3RTZWxlY3Rpb25DaGFuZ2VkKCkgKSApOwotICAgIGNvbm5lY3Qo
IGxiLCBTSUdOQUwoIGNsaWNrZWQoIFFMaXN0Qm94SXRlbSAqICkgKSwgdGhpcywgU0xPVCggc2xv
dENsaWNrZWQoKSApICk7CiAgICAgbV9pZ25vcmVTZWxlY3RFdmVudHMgPSBmYWxzZTsKLQogICAg
IHJldHVybiBsYjsKIH0KIAotUUNvbWJvQm94KiBSZW5kZXJTZWxlY3Q6OmNyZWF0ZUNvbWJvQm94
KCkKLXsKLSAgICBRQ29tYm9Cb3gqIGNiID0gbmV3IFFDb21ib0JveDsKLSAgICBjb25uZWN0KGNi
LCBTSUdOQUwoYWN0aXZhdGVkKGludCkpLCB0aGlzLCBTTE9UKHNsb3RTZWxlY3RlZChpbnQpKSk7
Ci0gICAgcmV0dXJuIGNiOwotfQotCiB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9u
KCkKIHsKICAgICBBcnJheTxIVE1MRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCkt
Pmxpc3RJdGVtcygpOwpAQCAtOTY0LDEwICs5MjYsNiBAQCBSZW5kZXJUZXh0QXJlYTo6UmVuZGVy
VGV4dEFyZWEoSFRNTFRleHRBCiAKIAogICAgIHNldFFXaWRnZXQoZWRpdCk7Ci0KLSAgICBjb25u
ZWN0KGVkaXQsU0lHTkFMKHRleHRDaGFuZ2VkKCkpLHRoaXMsU0xPVChzbG90VGV4dENoYW5nZWQo
KSkpOwotICAgIGNvbm5lY3QoZWRpdCxTSUdOQUwoY2xpY2tlZCgpKSx0aGlzLFNMT1Qoc2xvdENs
aWNrZWQoKSkpOwotICAgIGNvbm5lY3QoZWRpdCxTSUdOQUwoc2VsZWN0aW9uQ2hhbmdlZCgpKSx0
aGlzLFNMT1Qoc2xvdFNlbGVjdGlvbkNoYW5nZWQoKSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRB
cmVhOjpkZXN0cm95KCkKQEAgLTEwNjMsNyArMTAyMSw3IEBAIFN0cmluZyBSZW5kZXJUZXh0QXJl
YTo6dGV4dFdpdGhIYXJkTGluZUIKICAgICByZXR1cm4gdHh0LnJlcGxhY2UoYmFja3NsYXNoQXND
dXJyZW5jeVN5bWJvbCgpLCBRQ2hhcignXFwnKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dEFyZWE6
OnNsb3RUZXh0Q2hhbmdlZCgpCit2b2lkIFJlbmRlclRleHRBcmVhOjp2YWx1ZUNoYW5nZWQoV2lk
Z2V0KikKIHsKICAgICBpZiAobV91cGRhdGluZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTEwNiw3
ICsxMDY0LDcgQEAgdm9pZCBSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uUmFuZ2UoaQogICAg
IHRleHRFZGl0LT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLXN0YXJ0KTsKIH0KIAotdm9p
ZCBSZW5kZXJUZXh0QXJlYTo6c2xvdFNlbGVjdGlvbkNoYW5nZWQoKQordm9pZCBSZW5kZXJUZXh0
QXJlYTo6c2VsZWN0aW9uQ2hhbmdlZChXaWRnZXQqKQogewogICAgIFFUZXh0RWRpdCogdyA9IHN0
YXRpY19jYXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KTsKIApAQCAtMTEyMCwxMiArMTA3OCw5IEBA
IHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNsb3RTZWxlY3Rpb25DaGFuZ2UKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBSZW5kZXJTbGlkZXI6OlJlbmRlclNsaWRlcihIVE1MSW5wdXRFbGVtZW50SW1w
bCogZWxlbWVudCkKLTpSZW5kZXJGb3JtRWxlbWVudChlbGVtZW50KQorICAgIDogUmVuZGVyRm9y
bUVsZW1lbnQoZWxlbWVudCkKIHsKLSAgICBRU2xpZGVyKiBzbGlkZXIgPSBuZXcgUVNsaWRlcigp
OwotICAgIHNldFFXaWRnZXQoc2xpZGVyKTsKLSAgICBjb25uZWN0KHNsaWRlciwgU0lHTkFMKHNs
aWRlclZhbHVlQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChzbG90U2xpZGVyVmFsdWVDaGFuZ2VkKCkp
KTsKLSAgICBjb25uZWN0KHNsaWRlciwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNMT1Qoc2xv
dENsaWNrZWQoKSkpOworICAgIHNldFFXaWRnZXQobmV3IFFTbGlkZXIpOwogfQogCiB2b2lkIFJl
bmRlclNsaWRlcjo6Y2FsY01pbk1heFdpZHRoKCkKQEAgLTExNzYsOSArMTEzMSw5IEBAIHZvaWQg
UmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6
OnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyU2xpZGVyOjpzbG90U2xpZGVy
VmFsdWVDaGFuZ2VkKCkKK3ZvaWQgUmVuZGVyU2xpZGVyOjp2YWx1ZUNoYW5nZWQoV2lkZ2V0KikK
IHsKLSAgICBRU2xpZGVyKiBzbGlkZXIgPSAoUVNsaWRlciopd2lkZ2V0KCk7CisgICAgUVNsaWRl
ciogc2xpZGVyID0gc3RhdGljX2Nhc3Q8UVNsaWRlcio+KHdpZGdldCgpKTsKIAogICAgIGRvdWJs
ZSB2YWwgPSBzbGlkZXItPnZhbHVlKCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVjaXNp
b24gPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyKTsKQEAgLTExOTMsMTAg
KzExNDgsNCBAQCB2b2lkIFJlbmRlclNsaWRlcjo6c2xvdFNsaWRlclZhbHVlQ2hhbmdlCiAgICAg
ZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChpbnB1dEV2ZW50LCB0cnVlLCBmYWxzZSk7CiB9
CiAKLXZvaWQgUmVuZGVyU2xpZGVyOjpzbG90Q2xpY2tlZCgpCi17Ci0gICAgLy8gZW1pdCBtb3Vz
ZUNsaWNrIGV2ZW50IGV0YwotICAgIFJlbmRlckZvcm1FbGVtZW50OjpzbG90Q2xpY2tlZCgpOwot
fQotCiB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcAkocmV2aXNpb24gMTMwOTMpCisrKyByZW5k
ZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDggKzI3MCw3
IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkKICAgICBpZiAobV93aWRnZXQpIHsKICAg
ICAgICAgaWYgKG1fdmlldykKICAgICAgICAgICAgIG1fdmlldy0+cmVtb3ZlQ2hpbGQobV93aWRn
ZXQpOwotCi0gICAgICAgIG1fd2lkZ2V0LT5yZW1vdmVFdmVudEZpbHRlcigpOworICAgICAgICBt
X3dpZGdldC0+c2V0Q2xpZW50KDApOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBsYXllciA9
IG1fbGF5ZXI7CkBAIC0zMTAsMTMgKzMwOSwxMyBAQCB2b2lkIFJlbmRlcldpZGdldDo6c2V0UVdp
ZGdldChXaWRnZXQqIHdpCiB7CiAgICAgaWYgKHdpZGdldCAhPSBtX3dpZGdldCkgewogICAgICAg
ICBpZiAobV93aWRnZXQpIHsKLSAgICAgICAgICAgIG1fd2lkZ2V0LT5yZW1vdmVFdmVudEZpbHRl
cigpOworICAgICAgICAgICAgbV93aWRnZXQtPnNldENsaWVudCgwKTsKICAgICAgICAgICAgIGlm
IChtX2RlbGV0ZVdpZGdldCkKICAgICAgICAgICAgICAgICBkZWxldGUgbV93aWRnZXQ7CiAgICAg
ICAgIH0KICAgICAgICAgbV93aWRnZXQgPSB3aWRnZXQ7CiAgICAgICAgIGlmIChtX3dpZGdldCkg
ewotICAgICAgICAgICAgbV93aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKKyAgICAg
ICAgICAgIG1fd2lkZ2V0LT5zZXRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICAvLyBpZiB3ZSd2
ZSBhbHJlYWR5IHJlY2VpdmVkIGEgbGF5b3V0LCBhcHBseSB0aGUgY2FsY3VsYXRlZCBzcGFjZSB0
byB0aGUKICAgICAgICAgICAgIC8vIHdpZGdldCBpbW1lZGlhdGVseSwgYnV0IHdlIGhhdmUgdG8g
aGF2ZSByZWFsbHkgYmVlbiBmdWxsIGNvbnN0cnVjdGVkICh3aXRoIGEgbm9uLW51bGwKICAgICAg
ICAgICAgIC8vIHN0eWxlIHBvaW50ZXIpLgpAQCAtMzkzLDIyICszOTIsMjggQEAgdm9pZCBSZW5k
ZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgaSwgaQogICAgICAgICBpLnAtPmZpbGxSZWN0KHNl
bGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQ29sb3IoaS5wKSk7CiB9CiAKLXZvaWQgUmVuZGVyV2lk
Z2V0OjpldmVudEZpbHRlckZvY3VzSW4oKSBjb25zdAordm9pZCBSZW5kZXJXaWRnZXQ6OmZvY3Vz
SW4oV2lkZ2V0KikKIHsKLSAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSBjb25zdF9jYXN0PFJlbmRl
cldpZGdldCo+KHRoaXMpLT5yZWYoKTsKKyAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSByZWYoKTsK
ICAgICBSZWZQdHI8Tm9kZUltcGw+IGVsZW0gPSBlbGVtZW50KCk7CiAgICAgaWYgKGVsZW0pCiAg
ICAgICAgIGVsZW0tPmdldERvY3VtZW50KCktPnNldEZvY3VzTm9kZShlbGVtKTsKLSAgICBjb25z
dF9jYXN0PFJlbmRlcldpZGdldCo+KHRoaXMpLT5kZXJlZihhcmVuYSk7CisgICAgZGVyZWYoYXJl
bmEpOwogfQogCi12b2lkIFJlbmRlcldpZGdldDo6ZXZlbnRGaWx0ZXJGb2N1c091dCgpIGNvbnN0
Cit2b2lkIFJlbmRlcldpZGdldDo6Zm9jdXNPdXQoV2lkZ2V0KikKIHsKLSAgICBSZW5kZXJBcmVu
YSogYXJlbmEgPSBjb25zdF9jYXN0PFJlbmRlcldpZGdldCo+KHRoaXMpLT5yZWYoKTsKKyAgICBS
ZW5kZXJBcmVuYSogYXJlbmEgPSByZWYoKTsKICAgICBSZWZQdHI8Tm9kZUltcGw+IGVsZW0gPSBl
bGVtZW50KCk7CiAgICAgaWYgKGVsZW0gJiYgZWxlbSA9PSBlbGVtLT5nZXREb2N1bWVudCgpLT5m
b2N1c05vZGUoKSkKICAgICAgICAgZWxlbS0+Z2V0RG9jdW1lbnQoKS0+c2V0Rm9jdXNOb2RlKDAp
OwotICAgIGNvbnN0X2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGhpcyktPmRlcmVmKGFyZW5hKTsKKyAg
ICBkZXJlZihhcmVuYSk7Cit9CisKK3ZvaWQgUmVuZGVyV2lkZ2V0OjpzY3JvbGxUb1Zpc2libGUo
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IGVuY2xvc2lu
Z0xheWVyKCkpCisgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGFic29sdXRlQm91
bmRpbmdCb3hSZWN0KCkpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6ZGVyZWYoUmVuZGVyQXJl
bmEgKmFyZW5hKQpJbmRleDogZG9tL0RvY3VtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9E
b2N1bWVudEltcGwuaAkocmV2aXNpb24gMTMwOTMpCisrKyBkb20vRG9jdW1lbnRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKLSNpbmNsdWRlICJLV1FTaWduYWwuaCIKICNpbmNsdWRl
ICJTaGFyZWQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgImRlY29kZXIuaCIKQEAg
LTM3LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxLVVJMLmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
cW9iamVjdC5oPgogI2luY2x1ZGUgPHFwdHJsaXN0Lmg+CiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Qu
aD4KIApAQCAtMTAwLDcgKzk4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczsKICNlbmRpZgogCi1jbGFzcyBEb2N1bWVudEltcGwgOiBwdWJs
aWMgUU9iamVjdCwgcHVibGljIENvbnRhaW5lck5vZGVJbXBsCitjbGFzcyBEb2N1bWVudEltcGwg
OiBwdWJsaWMgQ29udGFpbmVyTm9kZUltcGwKIHsKIHB1YmxpYzoKICAgICBEb2N1bWVudEltcGwo
RE9NSW1wbGVtZW50YXRpb25JbXBsKiwgRnJhbWVWaWV3Kik7CkluZGV4OiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzA5MykKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBACiAJCTkzODVGNzYy
MDk4RDlDMzEwMEQ5MEQyNCAvKiBTY3JlZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzODVGNzYxMDk4RDlDMzEwMEQ5MEQyNCAvKiBTY3JlZW4uaCAq
LzsgfTsKIAkJOTM5ODg1QzMwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5ODg1QzEwOEI3RTNE
MTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuY3BwICovOyB9OwogCQk5Mzk4ODVDNDA4QjdFM0QxMDBF
NzA3QzQgLyogRXZlbnROYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM5ODg1QzIwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAqLzsg
fTsKKwkJOTNCNzgwQ0EwOUIzQjdGRTAwNjkwMTYyIC8qIFdpZGdldENsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzgwQzkwOUIzQjdGRTAw
NjkwMTYyIC8qIFdpZGdldENsaWVudC5oICovOyB9OwogCQk5M0NENEZERTA5OTVGOUVBMDA3RUND
OTcgLyogQXRvbWljU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQ0Q0RkQ3MDk5NUY5RUEwMDdFQ0M5NyAvKiBBdG9taWNTdHJpbmcuY3Bw
ICovOyB9OwogCQk5M0NENEZERjA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NENEZEODA5OTVG
OUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmggKi87IH07CiAJCTkzQ0Q0RkUwMDk5NUY5RUEw
MDdFQ0M5NyAvKiBBdG9taWNTdHJpbmdJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NENEZEOTA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3Ry
aW5nSW1wbC5oICovOyB9OwpAQCAtMjQ0LDcgKzI0NSw2IEBACiAJCTkzRjE5OTJGMDgyNDVFNTkw
MDFFOUFCQyAvKiBDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4Njg0MDJERTNCODYwMUVBNDEyMiAvKiBDdXJzb3IuaCAqLzsgfTsKIAkJ
OTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUURlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0REEwMkRFMzc1OTAxRUE0MTIyIC8qIEtX
UURlZi5oICovOyB9OwogCQk5M0YxOTkzOTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRRmlsZUJ1dHRv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDQ0Y3
RDQwMzNCRDQzQzAwODYzNUNFIC8qIEtXUUZpbGVCdXR0b24uaCAqLzsgfTsKLQkJOTNGMTk5M0Uw
ODI0NUU1OTAwMUU5QUJDIC8qIEtXUUd1YXJkZWRQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjkwMDJERTNCODYwMUVBNDEyMiAvKiBLV1FH
dWFyZGVkUHRyLmggKi87IH07CiAJCTkzRjE5OTQ1MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLQ29v
a2llSmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODRFRTAyREUzNzU5MDFFQTQxMjIgLyogS1dRS0Nvb2tpZUphci5oICovOyB9OwogCQk5M0Yx
OTk0RjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0hUTUxTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIy
IC8qIEtXUUtIVE1MU2V0dGluZ3MuaCAqLzsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJD
IC8qIEtXUUtJT0dsb2JhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjU4Nzg2NDkwMkRFM0E5QTAxRUE0MTIyIC8qIEtXUUtJT0dsb2JhbC5oICovOyB9
OwpAQCAtMjU2LDggKzI1Niw2IEBACiAJCTkzRjE5OTZDMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FM
aXN0Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODUxMzAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGlzdEJveC5oICovOyB9OwogCQk5M0YxOTk2
RDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTGlzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTE1MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FM
aXN0SW1wbC5oICovOyB9OwogCQk5M0YxOTk2RTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTG9hZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUx
NzAyREUzNzU5MDFFQTQxMjIgLyogS1dRTG9hZGVyLmggKi87IH07Ci0JCTkzRjE5OTc1MDgyNDVF
NTkwMDFFOUFCQyAvKiBLV1FOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjlFMDJERTNCODYwMUVBNDEyMiAvKiBLV1FOYW1lc3Bh
Y2UuaCAqLzsgfTsKLQkJOTNGMTk5NzYwODI0NUU1OTAwMUU5QUJDIC8qIEtXUU9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2OUYwMkRF
M0I4NjAxRUE0MTIyIC8qIEtXUU9iamVjdC5oICovOyB9OwogCQk5M0YxOTk3NzA4MjQ1RTU5MDAx
RTlBQkMgLyogS1dRUGFnZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Mzk0RTBBNDAzQUE1QkJFMDA4NjM1Q0UgLyogS1dRUGFnZVN0YXRlLmgg
Ki87IH07CiAJCTkzRjE5OTgyMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FQdHJMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY5OTAyREUzQjg2
MDFFQTQxMjIgLyogS1dRUHRyTGlzdC5oICovOyB9OwogCQk5M0YxOTk4MzA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRUHRyUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4NkFEMDJERTNCODYwMUVBNDEyMiAvKiBLV1FQdHJRdWV1ZS5oICovOyB9
OwpAQCAtMzMwLDcgKzMyOCw2IEBACiAJCTkzRjE5QTBCMDgyNDVFNTkwMDFFOUFCQyAvKiB3ZXN0
UmVzaXplQ3Vyc29yLnRpZmYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0QzBGQTJFMDUyQjk2NkQwMDA0NDBBMSAvKiB3ZXN0UmVzaXplQ3Vyc29yLnRp
ZmYgKi87IH07CiAJCTkzRjE5QTE3MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FDb21ib0JveC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEQyMDJE
RTM3NTkwMUVBNDEyMiAvKiBLV1FDb21ib0JveC5tbSAqLzsgfTsKIAkJOTNGMTlBMTgwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUUNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RDUwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUNTdHJpbmcu
Y3BwICovOyB9OwotCQk5M0YxOUEyMjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRR3VhcmRlZFB0ci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRF
NjAyREUzNzU5MDFFQTQxMjIgLyogS1dRR3VhcmRlZFB0ci5jcHAgKi87IH07CiAJCTkzRjE5QTI1
MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLQ29va2llSmFyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RUYwMkRFMzc1OTAxRUE0MTIyIC8qIEtX
UUtDb29raWVKYXIubW0gKi87IH07CiAJCTkzRjE5QTI2MDgyNDVFNTkwMDFFOUFCQyAvKiBDdXJz
b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICovOyB9OwogCQk5M0YxOUEy
RTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0phdmFBcHBsZXRXaWRnZXQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRGRjAyREUzNzU5MDFFQTQx
MjIgLyogS1dRS0phdmFBcHBsZXRXaWRnZXQubW0gKi87IH07CkBAIC0zNDEsNyArMzM4LDYgQEAK
IAkJOTNGMTlBM0IwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUxpc3RCb3gubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUxNDAyREUzNzU5MDFFQTQx
MjIgLyogS1dRTGlzdEJveC5tbSAqLzsgfTsKIAkJOTNGMTlBM0MwODI0NUU1OTAwMUU5QUJDIC8q
IEtXUUxpc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1ODc4NTE2MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FMaXN0SW1wbC5jcHAgKi87IH07
CiAJCTkzRjE5QTNGMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FUZXh0RmllbGQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUxQzAyREUzNzU5MDFF
QTQxMjIgLyogS1dRVGV4dEZpZWxkLm1tICovOyB9OwotCQk5M0YxOUE0MDA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4NTFEMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FPYmplY3QuY3BwICovOyB9
OwogCQk5M0YxOUE0QTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUmVnRXhwLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTJCMDJERTM3NTkwMUVB
NDEyMiAvKiBLV1FSZWdFeHAuY3BwICovOyB9OwogCQk5M0YxOUE1MTA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRVGV4dEFyZWEubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTg3ODUzNjAyREUzNzU5MDFFQTQxMjIgLyogS1dRVGV4dEFyZWEubW0gKi87IH07
CiAJCTkzRjE5QTUzMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FUZXh0RWRpdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTM4MDJERTM3NTkwMUVB
NDEyMiAvKiBLV1FUZXh0RWRpdC5tbSAqLzsgfTsKQEAgLTEzMzIsNiArMTMyOCw3IEBACiAJCTkz
QUJDRTVFMDZFMUE0MkUwMDg1OTI1QiAvKiBmb3JtZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmb3JtZGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNCNjQxRjEwNkUy
OEM1QzAwNTVGNjEwIC8qIEtXUUZvcm1EYXRhLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRRm9ybURhdGEubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5M0I2NDFG
MjA2RTI4QzVDMDA1NUY2MTAgLyogS1dRRm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRRm9ybURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTkzQjc4MEM5MDlC
M0I3RkUwMDY5MDE2MiAvKiBXaWRnZXRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdpZGdldENsaWVudC5oOyBwYXRoID0gcGxhdGZvcm0vV2lkZ2V0Q2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0NGN0Q0MDMzQkQ0M0MwMDg2MzVDRSAv
KiBLV1FGaWxlQnV0dG9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEtXUUZpbGVCdXR0b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzQ0NGN0Q1MDMzQkQ0M0MwMDg2MzVDRSAv
KiBLV1FGaWxlQnV0dG9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRRmlsZUJ1dHRvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzQ0Q0RkQ3MDk5NUY5RUEw
MDdFQ0M5NyAvKiBBdG9taWNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQXRvbWljU3RyaW5nLmNwcDsgcGF0aCA9IHBsYXRmb3JtL0F0b21pY1N0cmluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjExLDcgKzIyMDgsNiBAQAogCQlG
NTg3ODREMjAyREUzNzU5MDFFQTQxMjIgLyogS1dRQ29tYm9Cb3gubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FDb21ib0JveC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUY1ODc4NEQ1MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FDU3RyaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtXUUNTdHJpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJRjU4Nzg0REEwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUURlZi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FEZWYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NEU2
MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FHdWFyZGVkUHRyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtXUUd1YXJkZWRQdHIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
RjU4Nzg0RUUwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtDb29raWVKYXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRS0Nvb2tpZUphci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
RjU4Nzg0RUYwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtDb29raWVKYXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FLQ29va2ll
SmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJRjU4Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8qIEN1cnNvck1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEN1cnNv
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CkBAIC0yMjI3LDcgKzIyMjMsNiBAQAogCQlGNTg3ODUxNzAyREUzNzU5MDFFQTQxMjIg
LyogS1dRTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtXUUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1MUIwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUVRl
eHRGaWVsZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBLV1FUZXh0RmllbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTFDMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FUZXh0
RmllbGQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBLV1FUZXh0RmllbGQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODUxRDAyREUzNzU5MDFFQTQxMjIgLyog
S1dRT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEtXUU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODUyQjAyREUzNzU5MDFFQTQxMjIgLyog
S1dRUmVnRXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEtXUVJlZ0V4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODUzNTAyREUzNzU5MDFFQTQxMjIgLyog
S1dRVGV4dEFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS1dRVGV4dEFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTM2MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FU
ZXh0QXJlYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEtXUVRleHRBcmVhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTIyNjAsMTEgKzIyNTUsOCBAQAogCQlGNTg3
ODY4MjAyREUzQjg2MDFFQTQxMjIgLyogS1dRQ29tYm9Cb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRQ29tYm9Cb3guaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4Njgz
MDJERTNCODYwMUVBNDEyMiAvKiBLV1FDU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUNTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4Njg0MDJERTNC
ODYwMUVBNDEyMiAvKiBDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ3Vyc29yLmg7IHBhdGggPSBwbGF0Zm9ybS9DdXJzb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1
ODc4NjkwMDJERTNCODYwMUVBNDEyMiAvKiBLV1FHdWFyZGVkUHRyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUd1YXJkZWRQdHIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1
ODc4Njk4MDJERTNCODYwMUVBNDEyMiAvKiBLV1FMaW5lRWRpdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FMaW5lRWRpdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg2
OTkwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUVB0ckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRUHRyTGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjU4Nzg2OUUwMkRF
M0I4NjAxRUE0MTIyIC8qIEtXUU5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NjlGMDJERTNC
ODYwMUVBNDEyMiAvKiBLV1FPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODZBQzAyREUzQjg2MDFFQTQx
MjIgLyogS1dRUHRyTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBLV1FQdHJMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODZBRDAyREUzQjg2MDFFQTQxMjIgLyog
S1dRUHRyUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS1dRUHRyUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NkIzMDJERTNCODYwMUVBNDEyMiAvKiBLV1FS
ZWdFeHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS1dRUmVnRXhwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwpAQCAtMzQxNyw2ICszNDA5LDcgQEAKIAkJCQk5MzVDNDc2QTA5QUM0RDRG
MDBBNkFBQjQgLyogV2hlZWxFdmVudC5oICovLAogCQkJCTkzODBGNDcxMDlBMTFBQjQwMDFGREIz
NCAvKiBXaWRnZXQuY3BwICovLAogCQkJCTkzODBGNDcyMDlBMTFBQjQwMDFGREIzNCAvKiBXaWRn
ZXQuaCAqLywKKwkJCQk5M0I3ODBDOTA5QjNCN0ZFMDA2OTAxNjIgLyogV2lkZ2V0Q2xpZW50Lmgg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IHBsYXRmb3JtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTM4NDQsMTcgKzM4MzcsMTIgQEAKIAkJCQlGNTg3ODY4MzAyREUzQjg2MDFFQTQxMjIg
LyogS1dRQ1N0cmluZy5oICovLAogCQkJCUJDOUI2MkUyMDlCM0RDODUwMDYxMzFFQiAvKiBLV1FG
b250TWV0cmljcy5oICovLAogCQkJCUJDOUI2MkUzMDlCM0RDODUwMDYxMzFFQiAvKiBLV1FGb250
TWV0cmljcy5tbSAqLywKLQkJCQlGNTg3ODRFNjAyREUzNzU5MDFFQTQxMjIgLyogS1dRR3VhcmRl
ZFB0ci5jcHAgKi8sCi0JCQkJRjU4Nzg2OTAwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUd1YXJkZWRQ
dHIuaCAqLywKIAkJCQlGNTg3ODY5ODAyREUzQjg2MDFFQTQxMjIgLyogS1dRTGluZUVkaXQuaCAq
LywKIAkJCQlGNTg3ODUxMjAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGluZUVkaXQubW0gKi8sCiAJ
CQkJRjU4Nzg1MTMwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUxpc3RCb3guaCAqLywKIAkJCQlGNTg3
ODUxNDAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGlzdEJveC5tbSAqLywKIAkJCQlGNTg3ODUxNjAy
REUzNzU5MDFFQTQxMjIgLyogS1dRTGlzdEltcGwuY3BwICovLAogCQkJCUY1ODc4NTE1MDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FMaXN0SW1wbC5oICovLAotCQkJCUY1ODc4NjlFMDJERTNCODYwMUVB
NDEyMiAvKiBLV1FOYW1lc3BhY2UuaCAqLywKLQkJCQlGNTg3ODUxRDAyREUzNzU5MDFFQTQxMjIg
LyogS1dRT2JqZWN0LmNwcCAqLywKLQkJCQlGNTg3ODY5RjAyREUzQjg2MDFFQTQxMjIgLyogS1dR
T2JqZWN0LmggKi8sCiAJCQkJRjU4Nzg2OTkwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUVB0ckxpc3Qu
aCAqLywKIAkJCQlGNTg3ODZBRDAyREUzQjg2MDFFQTQxMjIgLyogS1dRUHRyUXVldWUuaCAqLywK
IAkJCQlGNTg3ODUyQjAyREUzNzU5MDFFQTQxMjIgLyogS1dRUmVnRXhwLmNwcCAqLywKQEAgLTM5
MjksNyArMzkxNyw2IEBACiAJCQkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUURlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MzkwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUZpbGVC
dXR0b24uaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjE5OTNFMDgyNDVFNTkwMDFFOUFCQyAvKiBL
V1FHdWFyZGVkUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk0NTA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRS0Nvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NEYwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUUtIVE1MU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5
OTUwMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLSU9HbG9iYWwuaCBpbiBIZWFkZXJzICovLApAQCAt
Mzk0MSw4ICszOTI4LDYgQEAKIAkJCQk5M0YxOTk2QzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTGlz
dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NkQwODI0NUU1OTAwMUU5QUJDIC8qIEtX
UUxpc3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk2RTA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRTG9hZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTk3NTA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTk3NjA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk3NzA4MjQ1
RTU5MDAxRTlBQkMgLyogS1dRUGFnZVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk4
MjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUHRyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk5ODMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVB0clF1ZXVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDgsNiArNDM5Myw3IEBACiAJCQkJNjVGNTM3RDkwOUIyQjIwRjAwRjNEQzRBIC8qIENoYXJz
ZXROYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVGNTM4NjkwOUIyQkZEQTAwRjNEQzRBIC8q
IEV4dHJhQ0ZFbmNvZGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUVCMzYyMDlCMkQ3REIw
MEYzQUY1QiAvKiBUcmFuc2ZlckpvYkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNCNzgw
Q0EwOUIzQjdGRTAwNjkwMTYyIC8qIFdpZGdldENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTgyMzk4QTYwOUIzQUNEQjAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgyMzlFMDEwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTUwNDksNyArNTAzNSw2IEBACiAJCQlm
aWxlcyA9ICgKIAkJCQk5M0YxOUExNzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRQ29tYm9Cb3gubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUExODA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRQ1N0cmlu
Zy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0YxOUEyMjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dR
R3VhcmRlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUEyNTA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRS0Nvb2tpZUphci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QTI2MDgyNDVF
NTkwMDFFOUFCQyAvKiBDdXJzb3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUEyRTA4
MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0phdmFBcHBsZXRXaWRnZXQubW0gaW4gU291cmNlcyAqLywK
QEAgLTUwNjAsNyArNTA0NSw2IEBACiAJCQkJOTNGMTlBM0IwODI0NUU1OTAwMUU5QUJDIC8qIEtX
UUxpc3RCb3gubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUEzQzA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRTGlzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBM0YwODI0NUU1OTAw
MUU5QUJDIC8qIEtXUVRleHRGaWVsZC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTQwMDgy
NDVFNTkwMDFFOUFCQyAvKiBLV1FPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
NEEwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
M0YxOUE1MTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRVGV4dEFyZWEubW0gaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOUE1MzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRVGV4dEVkaXQubW0gaW4gU291cmNl
cyAqLywKSW5kZXg6IGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHJldmlzaW9uIDEzMDkzKQor
Kysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw3ICsyNSw2IEBACiAjaWYgU1ZHX1NVUFBPUlQKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSA8cW9iamVjdC5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiAjaW5jbHVk
ZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgpAQCAtNTEsMTIgKzUwLDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0aChjb25zdCBLQ2FudmFzUGF0aCopID0gMDsKIH07CiAK
LS8vIE11c3QgYmUgYSBRT2JqZWN0IHRvIGJlIGFibGUgdG8gYmUgbG9hZGVkIGJ5IEtMaWJMb2Fk
ZXIuLi4KIGNsYXNzIEtDYW52YXNJbWFnZTsKIGNsYXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7Ci1j
bGFzcyBLUmVuZGVyaW5nRGV2aWNlIDogcHVibGljIFFPYmplY3QKK2NsYXNzIEtSZW5kZXJpbmdE
ZXZpY2UKIHsKLVFfT0JKRUNUCiBwdWJsaWM6CiAgICAgS1JlbmRlcmluZ0RldmljZSgpOwogICAg
IHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2UoKTsKSW5kZXg6IGJyaWRnZS9tYWMvV2ViQ29yZUZy
YW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
Lm1tCShyZXZpc2lvbiAxMzA5MykKKysrIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTU0LDkgKzExNTQsOSBAQCBzdGF0aWMgQk9PTCBub3dQcmlu
dGluZyhXZWJDb3JlRnJhbWVCcmlkCiAgICAgLy8gRklYTUU6IGltcGxlbWVudGVkIGN1cnJlbnRs
eSBmb3Igb25seSBhIHN1YnNldCBvZiB0aGUgS1dRIHdpZGdldHMKICAgICBpZiAoW3ZpZXcgY29u
Zm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChLV1FXaWRnZXRIb2xkZXIpXSkgewogICAgICAgICBO
U1ZpZXcgPEtXUVdpZGdldEhvbGRlcj4gKndpZGdldEhvbGRlciA9IHZpZXc7Ci0gICAgICAgIFdp
ZGdldCAqd2lkZ2V0ID0gW3dpZGdldEhvbGRlciB3aWRnZXRdOwotICAgICAgICBpZiAod2lkZ2V0
ICE9IG5pbCAmJiB3aWRnZXQtPmV2ZW50RmlsdGVyT2JqZWN0KCkgIT0gbmlsKSB7Ci0gICAgICAg
ICAgICBOb2RlSW1wbCAqbm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldpZGdldCAqPih3
aWRnZXQtPmV2ZW50RmlsdGVyT2JqZWN0KCkpLT5lbGVtZW50KCk7CisgICAgICAgIFdpZGdldCog
d2lkZ2V0ID0gW3dpZGdldEhvbGRlciB3aWRnZXRdOworICAgICAgICBpZiAod2lkZ2V0ICYmIHdp
ZGdldC0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIE5vZGVJbXBsKiBub2RlID0gc3RhdGljX2Nh
c3Q8UmVuZGVyV2lkZ2V0Kj4od2lkZ2V0LT5jbGllbnQoKSktPmVsZW1lbnQoKTsKICAgICAgICAg
ICAgIHJldHVybiBbRE9NRWxlbWVudCBfZWxlbWVudFdpdGhJbXBsOnN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsICo+KG5vZGUpXTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IGJyaWRnZS9Ccm93c2Vy
RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL0Jyb3dzZXJFeHRlbnNpb24uaAkocmV2
aXNpb24gMTMwOTMpCisrKyBicmlkZ2UvQnJvd3NlckV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJmb3JtZGF0YS5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDxx
b2JqZWN0Lmg+CiAKIGNsYXNzIEtVUkw7CiAKQEAgLTg4LDggKzg3LDEwIEBAIHN0cnVjdCBXaW5k
b3dBcmdzIHsKICAgICBib29sIGRpYWxvZzsKIH07CiAKLWNsYXNzIEJyb3dzZXJFeHRlbnNpb24g
OiBwdWJsaWMgUU9iamVjdCB7CitjbGFzcyBCcm93c2VyRXh0ZW5zaW9uIHsKIHB1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5Ccm93c2VyRXh0ZW5zaW9uKCkgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgb3Bl
blVSTFJlcXVlc3QoY29uc3QgS1VSTCAmLCBjb25zdCBVUkxBcmdzICZhcmdzID0gVVJMQXJncygp
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9wZW5VUkxOb3RpZnkoKSA9IDA7CiAgICAgCkluZGV4
OiBGb3J3YXJkaW5nSGVhZGVycy9xZ3VhcmRlZHB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEZvcndhcmRp
bmdIZWFkZXJzL3FndWFyZGVkcHRyLmgJKHJldmlzaW9uIDEzMDkzKQorKysgRm9yd2FyZGluZ0hl
YWRlcnMvcWd1YXJkZWRwdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi0jaW5jbHVk
ZSAiS1dRR3VhcmRlZFB0ci5oIgpJbmRleDogRm9yd2FyZGluZ0hlYWRlcnMvcW9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEZvcndhcmRpbmdIZWFkZXJzL3FvYmplY3QuaAkocmV2aXNpb24gMTMwOTMp
CisrKyBGb3J3YXJkaW5nSGVhZGVycy9xb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEgKzAs
MCBAQAotI2luY2x1ZGUgIktXUU9iamVjdC5oIgpJbmRleDogeG1sL3htbGh0dHByZXF1ZXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0geG1sL3htbGh0dHByZXF1ZXN0LmgJKHJldmlzaW9uIDEzMDkzKQorKysg
eG1sL3htbGh0dHByZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNp
bmNsdWRlICJUcmFuc2ZlckpvYkNsaWVudC5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8cWd1YXJkZWRwdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MSw3ICs5MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICB2b2lkIGFkZFRvUmVxdWVzdHNCeURvY3VtZW50KCk7CiAgICAgdm9pZCBy
ZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCk7CiAKLSAgICBRR3VhcmRlZFB0cjxEb2N1bWVu
dEltcGw+IGRvYzsKKyAgICBSZWZQdHI8RG9jdW1lbnRJbXBsPiBkb2M7CiAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXI7CiAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25Mb2FkTGlzdGVuZXI7CiAKSW5kZXg6IHhtbC94bWxodHRwcmVxdWVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0geG1sL3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTMw
OTMpCisrKyB4bWwveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzksMTAg
KzUzOSwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphZGRUb1JlcXVlc3RzQnlEb2N1CiB7CiAg
IGFzc2VydChkb2MpOwogCi0gIFJlcXVlc3RzU2V0KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1
bWVudCgpLmdldChkb2MpOworICBSZXF1ZXN0c1NldCogcmVxdWVzdHMgPSByZXF1ZXN0c0J5RG9j
dW1lbnQoKS5nZXQoZG9jLmdldCgpKTsKICAgaWYgKCFyZXF1ZXN0cykgewogICAgIHJlcXVlc3Rz
ID0gbmV3IFJlcXVlc3RzU2V0OwotICAgIHJlcXVlc3RzQnlEb2N1bWVudCgpLnNldChkb2MsIHJl
cXVlc3RzKTsKKyAgICByZXF1ZXN0c0J5RG9jdW1lbnQoKS5zZXQoZG9jLmdldCgpLCByZXF1ZXN0
cyk7CiAgIH0KIAogICBhc3NlcnQoIXJlcXVlc3RzLT5jb250YWlucyh0aGlzKSk7CkBAIC01NTMs
NyArNTUzLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRnJvbVJlcXVlc3RzQgogewog
ICBhc3NlcnQoZG9jKTsKIAotICBSZXF1ZXN0c1NldCogcmVxdWVzdHMgPSByZXF1ZXN0c0J5RG9j
dW1lbnQoKS5nZXQoZG9jKTsKKyAgUmVxdWVzdHNTZXQqIHJlcXVlc3RzID0gcmVxdWVzdHNCeURv
Y3VtZW50KCkuZ2V0KGRvYy5nZXQoKSk7CiAKICAgLy8gU2luY2Ugc3luY2hyb25vdXMgbG9hZHMg
YXJlIG5vdCBhZGRlZCB0byByZXF1ZXN0c0J5RG9jdW1lbnQoKSwgd2UgbmVlZCB0byBtYWtlIHN1
cmUgd2UgZm91bmQgdGhlIHJlcXVlc3QuCiAgIGlmICghcmVxdWVzdHMgfHwgIXJlcXVlc3RzLT5j
b250YWlucyh0aGlzKSkKQEAgLTU2Miw3ICs1NjIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpy
ZW1vdmVGcm9tUmVxdWVzdHNCCiAgIHJlcXVlc3RzLT5yZW1vdmUodGhpcyk7CiAKICAgaWYgKHJl
cXVlc3RzLT5pc0VtcHR5KCkpIHsKLSAgICByZXF1ZXN0c0J5RG9jdW1lbnQoKS5yZW1vdmUoZG9j
KTsKKyAgICByZXF1ZXN0c0J5RG9jdW1lbnQoKS5yZW1vdmUoZG9jLmdldCgpKTsKICAgICBkZWxl
dGUgcmVxdWVzdHM7CiAgIH0KIH0KSW5kZXg6IGt3cS9LV1FDb21ib0JveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGt3cS9LV1FDb21ib0JveC5oCShyZXZpc2lvbiAxMzA5MykKKysrIGt3cS9LV1FDb21ib0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw4ICs4MCw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBib29sIF9tZW51UG9wdWxhdGVkOwogCiAgICAgbXV0YWJsZSBOU0ZvbnQgKl9sYWJlbEZvbnQ7
Ci0KLSAgICBLV1FTaWduYWwgX2FjdGl2YXRlZDsKIH07CiAKICNlbmRpZgpJbmRleDoga3dxL0tX
UUZpbGVCdXR0b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRRmlsZUJ1dHRvbi5oCShyZXZpc2lv
biAxMzA5MykKKysrIGt3cS9LV1FGaWxlQnV0dG9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgS1dRRklMRUJVVFRPTl9ICiAjZGVmaW5lIEtXUUZJTEVCVVRUT05f
SAogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKIAog
I2lmZGVmIF9fT0JKQ19fCkBAIC01NCwxMyArNTUsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Rm9jdXNQb2xpY3kgZm9jdXNQb2xpY3koKSBjb25zdDsKICAgICAKICAgICB2b2lkIGZpbGVuYW1l
Q2hhbmdlZChjb25zdCBRU3RyaW5nICYpOwotICAgIHZvaWQgZm9jdXNDaGFuZ2VkKGJvb2wpOwot
ICAgIHZvaWQgY2xpY2tlZCgpOworCisgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBmaWxlbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCiBwcml2YXRlOgotICAgIEtXUVNpZ25hbCBf
Y2xpY2tlZDsKLSAgICBLV1FTaWduYWwgX3RleHRDaGFuZ2VkOwotICAgIEtXUUZpbGVCdXR0b25B
ZGFwdGVyICpfYWRhcHRlcjsKKyAgICBLV1FGaWxlQnV0dG9uQWRhcHRlciogX2FkYXB0ZXI7Cisg
ICAgV2ViQ29yZTo6U3RyaW5nIG1fbmFtZTsKIH07CiAKICNlbmRpZgpJbmRleDoga3dxL0tXUUd1
YXJkZWRQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRR3VhcmRlZFB0ci5oCShyZXZpc2lvbiAx
MzA5MykKKysrIGt3cS9LV1FHdWFyZGVkUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBRR1VBUkRFRFBUUl9IXwotI2RlZmlu
ZSBRR1VBUkRFRFBUUl9IXwotCi0jaW5jbHVkZSAiS1dRUHRyTGlzdC5oIgotCi1jbGFzcyBRT2Jq
ZWN0OwotCi1jbGFzcyBLV1FHdWFyZGVkUHRyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgS1dRR3VhcmRl
ZFB0ckJhc2UoUU9iamVjdCogPSAwKTsKLSAgICAKLSAgICBRT2JqZWN0KiBwb2ludGVyKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IuY3VycmVudCgpOyB9Ci0gICAgYm9vbCBpc051bGwoKSBjb25z
dCB7IHJldHVybiBwb2ludGVyKCkgPT0gMDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBRUHRyTGlz
dEl0ZXJhdG9yPFFPYmplY3Q+IGl0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNs
YXNzIFFHdWFyZGVkUHRyIDogcHVibGljIEtXUUd1YXJkZWRQdHJCYXNlIHsKLXB1YmxpYzoKLSAg
ICBRR3VhcmRlZFB0cigpIHsgfQotICAgIFFHdWFyZGVkUHRyKFQqIHApIDogS1dRR3VhcmRlZFB0
ckJhc2UocCkgeyB9Ci0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqKFQqKXBv
aW50ZXIoKTsgfQotICAgIG9wZXJhdG9yIFQqKCkgY29uc3QgeyByZXR1cm4gKFQqKXBvaW50ZXIo
KTsgfQotICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAoVCopcG9pbnRlcigpOyB9
Ci19OwotCi0jZW5kaWYKSW5kZXg6IGt3cS9LV1FMaXN0Qm94Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3
cS9LV1FMaXN0Qm94Lm1tCShyZXZpc2lvbiAxMzA5MykKKysrIGt3cS9LV1FMaXN0Qm94Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjUsOCArMTI1LDYgQEAgUUxpc3RCb3g6OlFMaXN0Qm94KCkKICAg
ICA6IF9jaGFuZ2luZ1NlbGVjdGlvbihmYWxzZSkKICAgICAsIF9lbmFibGVkKHRydWUpCiAgICAg
LCBfd2lkdGhHb29kKGZhbHNlKQotICAgICwgX2NsaWNrZWQodGhpcywgU0lHTkFMKGNsaWNrZWQo
UUxpc3RCb3hJdGVtICopKSkKLSAgICAsIF9zZWxlY3Rpb25DaGFuZ2VkKHRoaXMsIFNJR05BTChz
ZWxlY3Rpb25DaGFuZ2VkKCkpKQogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogCkBAIC01
NjksMTYgKzU2NywxMSBAQCBzdGF0aWMgQm9vbGVhbiBLV1FUYWJsZVZpZXdUeXBlU2VsZWN0Q2Fs
CiAgICAgQk9PTCBiZWNvbWUgPSBbc3VwZXIgYmVjb21lRmlyc3RSZXNwb25kZXJdOwogICAgIAog
ICAgIGlmIChiZWNvbWUpIHsKLSAgICAgICAgaWYgKF9ib3ggJiYgIU1hY0ZyYW1lOjpjdXJyZW50
RXZlbnRJc01vdXNlRG93bkluV2lkZ2V0KF9ib3gpKSB7Ci0gICAgICAgICAgICBSZW5kZXJXaWRn
ZXQgKndpZGdldCA9IGNvbnN0X2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+IChzdGF0aWNfY2FzdDxjb25z
dCBSZW5kZXJXaWRnZXQgKj4oX2JveC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkpOwotICAgICAgICAg
ICAgUmVuZGVyTGF5ZXIgKmxheWVyID0gd2lkZ2V0LT5lbmNsb3NpbmdMYXllcigpOwotICAgICAg
ICAgICAgaWYgKGxheWVyKQotICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNp
YmxlKHdpZGdldC0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Ci0gICAgICAgIH0gICAgICAg
IAorICAgICAgICBpZiAoX2JveCAmJiBfYm94LT5jbGllbnQoKSAmJiAhTWFjRnJhbWU6OmN1cnJl
bnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQoX2JveCkpCisgICAgICAgICAgICBfYm94LT5jbGll
bnQoKS0+c2Nyb2xsVG9WaXNpYmxlKF9ib3gpOwogICAgICAgICBbc2VsZiBfS1dRX3NldEtleWJv
YXJkRm9jdXNSaW5nTmVlZHNEaXNwbGF5XTsKLQotICAgICAgICBpZiAoX2JveCAmJiBfYm94LT5l
dmVudEZpbHRlck9iamVjdCgpKQotICAgICAgICAgICAgX2JveC0+ZXZlbnRGaWx0ZXJPYmplY3Qo
KS0+ZXZlbnRGaWx0ZXJGb2N1c0luKCk7CisgICAgICAgIGlmIChfYm94ICYmIF9ib3gtPmNsaWVu
dCgpKQorICAgICAgICAgICAgX2JveC0+Y2xpZW50KCktPmZvY3VzSW4oX2JveCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGJlY29tZTsKQEAgLTU4Nyw4ICs1ODAsOCBAQCBzdGF0aWMgQm9vbGVhbiBL
V1FUYWJsZVZpZXdUeXBlU2VsZWN0Q2FsCiAtIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCiB7
CiAgICAgQk9PTCByZXNpZ24gPSBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJdOwotICAgIGlm
IChyZXNpZ24gJiYgX2JveCAmJiBfYm94LT5ldmVudEZpbHRlck9iamVjdCgpKSB7Ci0gICAgICAg
IF9ib3gtPmV2ZW50RmlsdGVyT2JqZWN0KCktPmV2ZW50RmlsdGVyRm9jdXNPdXQoKTsKKyAgICBp
ZiAocmVzaWduICYmIF9ib3ggJiYgX2JveC0+Y2xpZW50KCkpIHsKKyAgICAgICAgX2JveC0+Y2xp
ZW50KCktPmZvY3VzT3V0KF9ib3gpOwogICAgICAgICBpZiAoX2JveCkKICAgICAgICAgICAgIFtN
YWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KF9ib3gpIGZvcm1Db250cm9sSXNSZXNpZ25pbmdGaXJz
dFJlc3BvbmRlcjpzZWxmXTsKICAgICB9CkBAIC02NDQsMTcgKzYzNywxNSBAQCBzdGF0aWMgQm9v
bGVhbiBLV1FUYWJsZVZpZXdUeXBlU2VsZWN0Q2FsCiAKIC0gKHZvaWQpdGFibGVWaWV3U2VsZWN0
aW9uRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIGlmIChf
Ym94KSB7Ci0gICAgICAgIF9ib3gtPnNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICB9CisgICAgaWYg
KF9ib3ggJiYgX2JveC0+Y2xpZW50KCkpCisgICAgICAgIF9ib3gtPmNsaWVudCgpLT5zZWxlY3Rp
b25DaGFuZ2VkKF9ib3gpOwogICAgIGlmIChfYm94ICYmICFfYm94LT5jaGFuZ2luZ1NlbGVjdGlv
bigpKSB7Ci0gICAgaWYgKHByb2Nlc3NpbmdNb3VzZUV2ZW50KSB7Ci0gICAgICAgIGNsaWNrZWRE
dXJpbmdNb3VzZUV2ZW50ID0gdHJ1ZTsKLSAgICAgICAgX2JveC0+c2VuZENvbnN1bWVkTW91c2VV
cCgpOwotICAgIH0KLSAgICAgICAgaWYgKF9ib3gpIHsKLSAgICAgICAgICAgIF9ib3gtPmNsaWNr
ZWQoKTsKKyAgICAgICAgaWYgKHByb2Nlc3NpbmdNb3VzZUV2ZW50KSB7CisgICAgICAgICAgICBj
bGlja2VkRHVyaW5nTW91c2VFdmVudCA9IHRydWU7CisgICAgICAgICAgICBfYm94LT5zZW5kQ29u
c3VtZWRNb3VzZVVwKCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKF9ib3ggJiYgX2JveC0+Y2xp
ZW50KCkpCisgICAgICAgICAgICBfYm94LT5jbGllbnQoKS0+Y2xpY2tlZChfYm94KTsKICAgICB9
CiB9CiAKSW5kZXg6IGt3cS9LV1FUZXh0RmllbGQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVRl
eHRGaWVsZC5tbQkocmV2aXNpb24gMTMwOTMpCisrKyBrd3EvS1dRVGV4dEZpZWxkLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsMTIgKzExNywxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogLSAodm9pZClhY3Rpb246KGlkKXNlbmRlcgogewotICAgIGlmICghd2lkZ2V0KQotICAgICAg
ICByZXR1cm47Ci0gICAgd2lkZ2V0LT50ZXh0Q2hhbmdlZCgpOwotICAgIGlmICghd2lkZ2V0KQot
ICAgICAgICByZXR1cm47Ci0gICAgd2lkZ2V0LT5wZXJmb3JtU2VhcmNoKCk7CisgICAgaWYgKHdp
ZGdldCAmJiB3aWRnZXQtPmNsaWVudCgpKQorICAgICAgICB3aWRnZXQtPmNsaWVudCgpLT52YWx1
ZUNoYW5nZWQod2lkZ2V0KTsKKyAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+Y2xpZW50KCkpCisg
ICAgICAgIHdpZGdldC0+Y2xpZW50KCktPnBlcmZvcm1TZWFyY2god2lkZ2V0KTsKIH0KIAogLSAo
dm9pZClkZWFsbG9jCkBAIC0xNzksOCArMTc3LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UgPSBNYWNGcmFtZTo6YnJpZGdlRm9yV2lk
Z2V0KHdpZGdldCk7CiAgICAgW2JyaWRnZSB0ZXh0RmllbGREaWRFbmRFZGl0aW5nOihET01IVE1M
SW5wdXRFbGVtZW50ICopW2JyaWRnZSBlbGVtZW50Rm9yVmlldzpmaWVsZF1dOwogICAgIAotICAg
IGlmICh3aWRnZXQgJiYgW1tbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJO
U1RleHRNb3ZlbWVudCJdIGludFZhbHVlXSA9PSBOU1JldHVyblRleHRNb3ZlbWVudCkKLSAgICAg
ICAgd2lkZ2V0LT5yZXR1cm5QcmVzc2VkKCk7CisgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQtPmNs
aWVudCgpICYmIFtbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAiTlNUZXh0
TW92ZW1lbnQiXSBpbnRWYWx1ZV0gPT0gTlNSZXR1cm5UZXh0TW92ZW1lbnQpCisgICAgICAgIHdp
ZGdldC0+Y2xpZW50KCktPnJldHVyblByZXNzZWQod2lkZ2V0KTsKIH0KIAogLSAodm9pZCljb250
cm9sVGV4dERpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KQEAgLTE5Nyw4
ICsxOTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICB9CiAgICAgCiAgICAgZWRp
dGVkID0gWUVTOwotICAgIGlmICh3aWRnZXQpCi0gICAgICAgIHdpZGdldC0+dGV4dENoYW5nZWQo
KTsKKyAgICBbc2VsZiB0ZXh0Q2hhbmdlZF07CiB9CiAKIC0gKEJPT0wpY29udHJvbDooTlNDb250
cm9sICopY29udHJvbCB0ZXh0U2hvdWxkQmVnaW5FZGl0aW5nOihOU1RleHQgKilmaWVsZEVkaXRv
cgpAQCAtMjQwLDggKzIzNyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtICh2b2lk
KXRleHRDaGFuZ2VkCiB7Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAgd2lkZ2V0LT50ZXh0Q2hh
bmdlZCgpOworICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5jbGllbnQoKSkKKyAgICAgICAgd2lk
Z2V0LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKHdpZGdldCk7CiB9CiAKIC0gKHZvaWQpc2V0SW5E
cmF3aW5nTWFjaGluZXJ5OihCT09MKWluRHJhd2luZwpAQCAtMzE1LDkgKzMxMiw4IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiAgICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3Vz
ZVVwKSB7CiAgICAgICAgIHdpZGdldC0+c2VuZENvbnN1bWVkTW91c2VVcCgpOwotICAgICAgICBp
ZiAod2lkZ2V0KSB7Ci0gICAgICAgICAgICB3aWRnZXQtPmNsaWNrZWQoKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+Y2xpZW50KCkpCisgICAgICAgICAgICB3aWRn
ZXQtPmNsaWVudCgpLT5jbGlja2VkKHdpZGdldCk7CiAgICAgfQogfQogCkBAIC0zOTYsMTUgKzM5
MiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICAgICAgCiAgICAgICAgIGhhc0Zv
Y3VzQW5kU2VsZWN0aW9uU2V0ID0gWUVTOwogCi0gICAgICAgIGlmICghTWFjRnJhbWU6OmN1cnJl
bnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQod2lkZ2V0KSAmJiB3aWRnZXQpIHsKLSAgICAgICAg
ICAgIFJlbmRlcldpZGdldCAqdyA9IGNvbnN0X2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+IChzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJXaWRnZXQgKj4od2lkZ2V0LT5ldmVudEZpbHRlck9iamVjdCgpKSk7
Ci0gICAgICAgICAgICBSZW5kZXJMYXllciAqbGF5ZXIgPSB3LT5lbmNsb3NpbmdMYXllcigpOwot
ICAgICAgICAgICAgaWYgKGxheWVyKQotICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKHctPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkK
LSAgICAgICAgICAgIHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKS0+ZXZlbnRGaWx0ZXJGb2N1
c0luKCk7CisgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5jbGllbnQoKSAmJiAhTWFjRnJh
bWU6OmN1cnJlbnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQod2lkZ2V0KSkKKyAgICAgICAgICAg
IHdpZGdldC0+Y2xpZW50KCktPnNjcm9sbFRvVmlzaWJsZSh3aWRnZXQpOworICAgICAgICBpZiAo
d2lkZ2V0ICYmIHdpZGdldC0+Y2xpZW50KCkpCisgICAgICAgICAgICB3aWRnZXQtPmNsaWVudCgp
LT5mb2N1c0luKHdpZGdldCk7CiAgICAgICAgIAogICAgICAgICAvLyBTZW5kaW5nIHRoZSBvbkZv
Y3VzIGV2ZW50IGFib3ZlLCBtYXkgaGF2ZSByZXN1bHRlZCBpbiBhIGJsdXIoKSAtIGlmIHRoaXMK
ICAgICAgICAgLy8gaGFwcGVucyB3aGVuIHRhYmJpbmcgZnJvbSBhbm90aGVyIHRleHQgZmllbGQs
IHRoZW4gZW5kRWRpdGluZzogYW5kCkBAIC00MjAsOCArNDExLDggQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGFzdFNlbGVjdGVkUmFuZ2UgPSBbc2Vs
ZiBzZWxlY3RlZFJhbmdlXTsKICAgICAgICAgCi0gICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0
LT5ldmVudEZpbHRlck9iamVjdCgpKSB7Ci0gICAgICAgICAgICB3aWRnZXQtPmV2ZW50RmlsdGVy
T2JqZWN0KCktPmV2ZW50RmlsdGVyRm9jdXNPdXQoKTsKKyAgICAgICAgaWYgKHdpZGdldCAmJiB3
aWRnZXQtPmNsaWVudCgpKSB7CisgICAgICAgICAgICB3aWRnZXQtPmNsaWVudCgpLT5mb2N1c091
dCh3aWRnZXQpOwogICAgICAgICAgICAgaWYgKHdpZGdldCkKICAgICAgICAgICAgICAgICBbTWFj
RnJhbWU6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpIGZvcm1Db250cm9sSXNSZXNpZ25pbmdGaXJz
dFJlc3BvbmRlcjpmaWVsZF07CiAgICAgICAgIH0KQEAgLTQ3OCw4ICs0NjksOCBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogLSAodm9pZCl0ZXh0Vmlld0RpZENoYW5nZVNlbGVjdGlvbjoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBpZiAod2lkZ2V0ICYmIGhhc0Zv
Y3VzQW5kU2VsZWN0aW9uU2V0KQotICAgICAgICB3aWRnZXQtPnNlbGVjdGlvbkNoYW5nZWQoKTsK
KyAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+Y2xpZW50KCkgJiYgaGFzRm9jdXNBbmRTZWxlY3Rp
b25TZXQpCisgICAgICAgIHdpZGdldC0+Y2xpZW50KCktPnNlbGVjdGlvbkNoYW5nZWQod2lkZ2V0
KTsKIH0KIAogQGVuZApJbmRleDoga3dxL0tXUVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9L
V1FTbG90LmNwcAkocmV2aXNpb24gMTMwOTMpCisrKyBrd3EvS1dRU2xvdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLV1FTbG90LmgiCi0KLSNpbmNsdWRlICJE
b2N1bWVudEltcGwuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgInJlbmRlcl9mb3Jt
LmgiCi0jaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotZW51bSBGdW5jdGlvbk51bWJlciB7Ci0gICAgc2xvdENsaWNrZWQsCi0gICAg
c2xvdFBlcmZvcm1TZWFyY2gsCi0gICAgc2xvdFJldHVyblByZXNzZWQsCi0gICAgc2xvdFNlbGVj
dGVkLAotICAgIHNsb3RTZWxlY3Rpb25DaGFuZ2VkLAotICAgIHNsb3RTbGlkZXJWYWx1ZUNoYW5n
ZWQsCi0gICAgc2xvdFN0YXRlQ2hhbmdlZCwKLSAgICBzbG90VGV4dENoYW5nZWQsCi0gICAgc2xv
dFRleHRDaGFuZ2VkV2l0aFN0cmluZywKLSAgICBzbG90VmFsdWVDaGFuZ2VkLAotfTsKLQotS1dR
U2xvdDo6S1dRU2xvdChRT2JqZWN0ICpvYmplY3QsIGNvbnN0IGNoYXIgKm1lbWJlcikKLXsKLSAg
ICAjZGVmaW5lIENBU0UoZnVuY3Rpb24sIHBhcmFtZXRlcnMsIHR5cGUpIFwKLSAgICAgICAgaWYg
KEtXUU5hbWVzTWF0Y2gobWVtYmVyLCAiU0xPVDoiICNmdW5jdGlvbiAjcGFyYW1ldGVycykpIHsg
XAotICAgICAgICAgICAgbV9mdW5jdGlvbiA9IGZ1bmN0aW9uOyBcCi0gICAgICAgIH0gZWxzZQot
ICAgIAotICAgIENBU0Uoc2xvdENsaWNrZWQsICgpLCBSZW5kZXJGb3JtRWxlbWVudCkKLSAgICBD
QVNFKHNsb3RQZXJmb3JtU2VhcmNoLCAoKSwgUmVuZGVyTGluZUVkaXQpCi0gICAgQ0FTRShzbG90
UmV0dXJuUHJlc3NlZCwgKCksIFJlbmRlckxpbmVFZGl0KQotICAgIENBU0Uoc2xvdFNlbGVjdGVk
LCAoaW50KSwgUmVuZGVyU2VsZWN0KQotICAgIENBU0Uoc2xvdFNlbGVjdGlvbkNoYW5nZWQsICgp
LCBSZW5kZXJGb3JtRWxlbWVudCkKLSAgICBDQVNFKHNsb3RTbGlkZXJWYWx1ZUNoYW5nZWQsICgp
LCBSZW5kZXJTbGlkZXIpCi0gICAgQ0FTRShzbG90VGV4dENoYW5nZWQsICgpLCBSZW5kZXJUZXh0
QXJlYSkKLSAgICBDQVNFKHNsb3RWYWx1ZUNoYW5nZWQsIChpbnQpLCBSZW5kZXJTY3JvbGxNZWRp
YXRvcikKLSAgICAgICAKLSAgICAjdW5kZWYgQ0FTRQotCi0gICAgaWYgKEtXUU5hbWVzTWF0Y2go
bWVtYmVyLCBTTE9UKHNsb3RUZXh0Q2hhbmdlZChjb25zdCBET01TdHJpbmcgJikpKSkgewotICAg
ICAgICBtX2Z1bmN0aW9uID0gc2xvdFRleHRDaGFuZ2VkV2l0aFN0cmluZzsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBMT0dfRVJST1IoInRyeWluZyB0byBjcmVhdGUgYSBzbG90IGZvciB1bmtub3du
IG1lbWJlciAlcyIsIG1lbWJlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
bV9vYmplY3QgPSBvYmplY3Q7Ci19Ci0gICAgCi12b2lkIEtXUVNsb3Q6OmNhbGwoKSBjb25zdAot
ewotICAgIGlmIChtX29iamVjdC5pc051bGwoKSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgICNkZWZpbmUgQ0FTRShtZW1iZXIsIHR5cGUsIGZ1bmN0aW9uKSBcCi0gICAgICAg
IGNhc2UgbWVtYmVyOiBcCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx0eXBlICo+KG1fb2JqZWN0
LnBvaW50ZXIoKSktPmZ1bmN0aW9uKCk7IFwKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBzd2l0Y2ggKG1fZnVuY3Rpb24pIHsKLSAgICAgICAgQ0FTRShzbG90Q2xpY2tlZCwgUmVuZGVy
Rm9ybUVsZW1lbnQsIHNsb3RDbGlja2VkKQotICAgICAgICBDQVNFKHNsb3RQZXJmb3JtU2VhcmNo
LCBSZW5kZXJMaW5lRWRpdCwgc2xvdFBlcmZvcm1TZWFyY2gpCi0gICAgICAgIENBU0Uoc2xvdFJl
dHVyblByZXNzZWQsIFJlbmRlckxpbmVFZGl0LCBzbG90UmV0dXJuUHJlc3NlZCkKLSAgICAgICAg
Q0FTRShzbG90U2VsZWN0aW9uQ2hhbmdlZCwgUmVuZGVyRm9ybUVsZW1lbnQsIHNsb3RTZWxlY3Rp
b25DaGFuZ2VkKQotICAgICAgICBDQVNFKHNsb3RTbGlkZXJWYWx1ZUNoYW5nZWQsIFJlbmRlclNs
aWRlciwgc2xvdFNsaWRlclZhbHVlQ2hhbmdlZCkKLSAgICAgICAgQ0FTRShzbG90VGV4dENoYW5n
ZWQsIFJlbmRlclRleHRBcmVhLCBzbG90VGV4dENoYW5nZWQpCi0gICAgfQotICAgIAotICAgICN1
bmRlZiBDQVNFCi19Ci0KLXZvaWQgS1dRU2xvdDo6Y2FsbChpbnQgaSkgY29uc3QKLXsKLSAgICBp
ZiAobV9vYmplY3QuaXNOdWxsKCkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBzd2l0Y2ggKG1fZnVuY3Rpb24pIHsKLSAgICAgICAgY2FzZSBzbG90U2VsZWN0ZWQ6Ci0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTZWxlY3QgKj4obV9vYmplY3QucG9pbnRlcigpKS0+
c2xvdFNlbGVjdGVkKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIHNsb3RW
YWx1ZUNoYW5nZWQ6Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTY3JvbGxNZWRpYXRv
ciAqPihtX29iamVjdC5wb2ludGVyKCkpLT5zbG90VmFsdWVDaGFuZ2VkKGkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBjYWxsKCk7Ci19Ci0KLXZvaWQgS1dRU2xvdDo6
Y2FsbChjb25zdCBET006OkRPTVN0cmluZyAmc3RyaW5nKSBjb25zdAotewotICAgIGlmIChtX29i
amVjdC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN3aXRjaCAobV9mdW5j
dGlvbikgewotICAgICAgICBjYXNlIHNsb3RUZXh0Q2hhbmdlZFdpdGhTdHJpbmc6Ci0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJGb3JtRWxlbWVudCAqPihtX29iamVjdC5wb2ludGVyKCkp
LT5zbG90VGV4dENoYW5nZWQoc3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgY2FsbCgpOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgS1dRU2xvdCAmYSwg
Y29uc3QgS1dRU2xvdCAmYikKLXsKLSAgICByZXR1cm4gYS5tX29iamVjdCA9PSBiLm1fb2JqZWN0
ICYmIChhLm1fb2JqZWN0ID09IDAgfHwgYS5tX2Z1bmN0aW9uID09IGIubV9mdW5jdGlvbik7Ci19
Ci0KLWJvb2wgS1dRTmFtZXNNYXRjaChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQotewot
ICAgIGNoYXIgY2EgPSAqYTsKLSAgICBjaGFyIGNiID0gKmI7Ci0gICAgCi0gICAgZm9yICg7Oykg
ewotICAgICAgICB3aGlsZSAoY2EgPT0gJyAnKSB7Ci0gICAgICAgICAgICBjYSA9ICorK2E7Ci0g
ICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGNiID09ICcgJykgewotICAgICAgICAgICAgY2IgPSAq
KytiOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2EgIT0gY2IpIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2EgPT0gMCkgewot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNh
ID0gKisrYTsKLSAgICAgICAgY2IgPSAqKytiOwotICAgIH0KLX0KSW5kZXg6IGt3cS9LV1FMaW5l
RWRpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTGluZUVkaXQubW0JKHJldmlzaW9uIDEzMDkz
KQorKysga3dxL0tXUUxpbmVFZGl0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBA
CiAjaW1wb3J0ICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlVGV4dFJl
bmRlcmVyRmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCisjaW1wb3J0
ICJXaWRnZXRDbGllbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBXZWJD
b3JlOjpGb250OwogCiBAaW50ZXJmYWNlIE5TU2VhcmNoRmllbGQgKFNlYXJjaEZpZWxkU2VjcmV0
cykKIC0gKHZvaWQpX2FkZFN0cmluZ1RvUmVjZW50U2VhcmNoZXM6KE5TU3RyaW5nICopc3RyaW5n
OwpAQCAtNTUsMTIgKzU1LDcgQEAgTlNDb250cm9sU2l6ZSBLV1FOU0NvbnRyb2xTaXplRm9yRm9u
dChjbwogfQogCiBRTGluZUVkaXQ6OlFMaW5lRWRpdChUeXBlIHR5cGUpCi0gICAgOiBtX3JldHVy
blByZXNzZWQodGhpcywgU0lHTkFMKHJldHVyblByZXNzZWQoKSkpCi0gICAgLCBtX3RleHRDaGFu
Z2VkKHRoaXMsIFNJR05BTCh0ZXh0Q2hhbmdlZChjb25zdCBRU3RyaW5nICYpKSkKLSAgICAsIG1f
Y2xpY2tlZCh0aGlzLCBTSUdOQUwoY2xpY2tlZCgpKSkKLSAgICAsIG1fcGVyZm9ybVNlYXJjaCh0
aGlzLCBTSUdOQUwocGVyZm9ybVNlYXJjaCgpKSkKLSAgICAsIG1fc2VsZWN0aW9uQ2hhbmdlZCh0
aGlzLCBTSUdOQUwoc2VsZWN0aW9uQ2hhbmdlZCgpKSkKLSAgICAsIG1fdHlwZSh0eXBlKQorICAg
IDogbV90eXBlKHR5cGUpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgaWQgdmll
dyA9IG5pbDsKQEAgLTMwOSwxMSArMzA0LDYgQEAgaW50IFFMaW5lRWRpdDo6YmFzZWxpbmVQb3Np
dGlvbihpbnQgaGVpZwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFFMaW5lRWRpdDo6Y2xpY2tl
ZCgpCi17Ci0gICAgbV9jbGlja2VkLmNhbGwoKTsKLX0KLQogdm9pZCBRTGluZUVkaXQ6OnNldEFs
aWdubWVudChBbGlnbm1lbnRGbGFncyBhbGlnbm1lbnQpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQ
VElPTlM7CkBAIC0zNDIsMTggKzMzMiwxOCBAQCBib29sIFFMaW5lRWRpdDo6Y2hlY2tzRGVzY2Vu
ZGFudHNGb3JGb2N1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5TVGV4dEFsaWdubWVudCBLV1FO
U1RleHRBbGlnbm1lbnRGb3JBbGlnbm1lbnRGbGFncyhRdDo6QWxpZ25tZW50RmxhZ3MgYSkKK05T
VGV4dEFsaWdubWVudCBLV1FOU1RleHRBbGlnbm1lbnRGb3JBbGlnbm1lbnRGbGFncyhBbGlnbm1l
bnRGbGFncyBhKQogewogICAgIHN3aXRjaCAoYSkgewotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJ1bnN1cHBvcnRlZCBhbGlnbm1lbnQiKTsKLSAgICAgICAgY2FzZSBR
dDo6QWxpZ25MZWZ0OgorICAgICAgICBjYXNlIEFsaWduTGVmdDoKICAgICAgICAgICAgIHJldHVy
biBOU0xlZnRUZXh0QWxpZ25tZW50OwotICAgICAgICBjYXNlIFF0OjpBbGlnblJpZ2h0OgorICAg
ICAgICBjYXNlIEFsaWduUmlnaHQ6CiAgICAgICAgICAgICByZXR1cm4gTlNSaWdodFRleHRBbGln
bm1lbnQ7Ci0gICAgICAgIGNhc2UgUXQ6OkFsaWduSENlbnRlcjoKKyAgICAgICAgY2FzZSBBbGln
bkhDZW50ZXI6CiAgICAgICAgICAgICByZXR1cm4gTlNDZW50ZXJUZXh0QWxpZ25tZW50OwogICAg
IH0KKyAgICBMT0dfRVJST1IoInVuc3VwcG9ydGVkIGFsaWdubWVudCIpOworICAgIHJldHVybiBO
U0xlZnRUZXh0QWxpZ25tZW50OwogfQogCiB2b2lkIFFMaW5lRWRpdDo6c2V0TGl2ZVNlYXJjaChi
b29sIGxpdmVTZWFyY2gpCkluZGV4OiBrd3EvS1dRU2Nyb2xsQmFyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3dxL0tXUVNjcm9sbEJhci5oCShyZXZpc2lvbiAxMzA5MykKKysrIGt3cS9LV1FTY3JvbGxCYXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNk
ZWZpbmUgS1dRU0NST0xMQkFSX0hfCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRlICJL
V1FOYW1lc3BhY2UuaCIKIAogI2lmZGVmIF9fT0JKQ19fCiBAY2xhc3MgTlNTY3JvbGxlcjsKQEAg
LTUwLDEyICs0OSwxNiBAQCB0eXBlZGVmIGVudW0gewogICAgIEtXUVNjcm9sbFdoZWVsCiB9IEtX
UVNjcm9sbEdyYW51bGFyaXR5OwogCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgZW51bSBTY3Jv
bGxCYXJPcmllbnRhdGlvbiB7IEhvcml6b250YWxTY3JvbGxCYXIsIFZlcnRpY2FsU2Nyb2xsQmFy
IH07Cit9CisKIGNsYXNzIFFTY3JvbGxCYXIgOiBwdWJsaWMgV2lkZ2V0IHsKIHB1YmxpYzoKLSAg
ICBRU2Nyb2xsQmFyKE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBXaWRnZXQqIHBhcmVudCk7Cisg
ICAgUVNjcm9sbEJhcihXZWJDb3JlOjpTY3JvbGxCYXJPcmllbnRhdGlvbiwgV2lkZ2V0KiBwYXJl
bnQpOwogICAgIH5RU2Nyb2xsQmFyKCk7CiAKLSAgICBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigp
IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKyAgICBXZWJDb3JlOjpTY3JvbGxCYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KIAogICAgIGludCB2
YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFBvczsgfQogICAgIGJvb2wgc2V0VmFsdWUoaW50IHYp
OwpAQCAtNjksMTMgKzcyLDEyIEBAIHB1YmxpYzoKICAgICBib29sIHNjcm9sbChLV1FTY3JvbGxE
aXJlY3Rpb24sIEtXUVNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wKTsK
ICAgICAKIHByaXZhdGU6Ci0gICAgT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKyAgICBXZWJD
b3JlOjpTY3JvbGxCYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIGludCBtX3Zpc2li
bGVTaXplOwogICAgIGludCBtX3RvdGFsU2l6ZTsKICAgICBpbnQgbV9jdXJyZW50UG9zOwogICAg
IGludCBtX2xpbmVTdGVwOwogICAgIGludCBtX3BhZ2VTdGVwOwotICAgIEtXUVNpZ25hbCBtX3Zh
bHVlQ2hhbmdlZDsKIH07CiAKICNlbmRpZgpJbmRleDoga3dxL0tXUU5hbWVzcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGt3cS9LV1FOYW1lc3BhY2UuaAkocmV2aXNpb24gMTMwOTMpCisrKyBrd3EvS1dR
TmFtZXNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBRTkFNRVNQQUNFX0hfCi0jZGVmaW5l
IFFOQU1FU1BBQ0VfSF8KLQotI2luY2x1ZGUgIktXUURlZi5oIgotCi1jbGFzcyBRdCB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBBbGlnbm1lbnRGbGFncyB7Ci0gICAgICAgIEFsaWduQXV0byAgICAgICA9
IDB4MDAwMCwgICAgICAgICAgIC8vIHRleHQgYWxpZ25tZW50Ci0gICAgICAgIEFsaWduTGVmdCAg
ICAgICA9IDB4MDAwMSwKLSAgICAgICAgQWxpZ25SaWdodCAgICAgID0gMHgwMDAyLAotICAgICAg
ICBBbGlnbkhDZW50ZXIgICAgPSAweDAwMDQsCi0gICAgICAgIEFsaWduVkNlbnRlciAgICA9IDB4
MDAyMCwKLSAgICAgICAgQWxpZ25DZW50ZXIgICAgID0gQWxpZ25WQ2VudGVyIHwgQWxpZ25IQ2Vu
dGVyLAotICAgIH07Ci0KLSAgICBlbnVtIE9yaWVudGF0aW9uIHsKLSAgICAgICAgSG9yaXpvbnRh
bCwKLSAgICAgICAgVmVydGljYWwKLSAgICB9OwotfTsKLQotI2VuZGlmCkluZGV4OiBrd3EvS1dR
RmlsZUJ1dHRvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRRmlsZUJ1dHRvbi5tbQkocmV2aXNp
b24gMTMwOTMpCisrKyBrd3EvS1dRRmlsZUJ1dHRvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAs
OSArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIEBlbmQKIAogS1dRRmlsZUJ1dHRv
bjo6S1dRRmlsZUJ1dHRvbihGcmFtZSAqZnJhbWUpCi0gICAgOiBfY2xpY2tlZCh0aGlzLCBTSUdO
QUwoY2xpY2tlZCgpKSkKLSAgICAsIF90ZXh0Q2hhbmdlZCh0aGlzLCBTSUdOQUwodGV4dENoYW5n
ZWQoY29uc3QgUVN0cmluZyAmKSkpCi0gICAgLCBfYWRhcHRlcigwKQorICAgIDogX2FkYXB0ZXIo
MCkKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKIApAQCAtMTQ1LDMyICsxNDMsMTMgQEAg
V2lkZ2V0OjpGb2N1c1BvbGljeSBLV1FGaWxlQnV0dG9uOjpmb2N1cwogICAgIHJldHVybiBXaWRn
ZXQ6OmZvY3VzUG9saWN5KCk7CiB9CiAKLXZvaWQgS1dRRmlsZUJ1dHRvbjo6ZmlsZW5hbWVDaGFu
Z2VkKGNvbnN0IFFTdHJpbmcgJmZpbGVuYW1lKQordm9pZCBLV1FGaWxlQnV0dG9uOjpmaWxlbmFt
ZUNoYW5nZWQoY29uc3QgUVN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgX3RleHRDaGFuZ2VkLmNh
bGwoZmlsZW5hbWUpOworICAgIG1fbmFtZSA9IGZpbGVuYW1lOworICAgIGlmIChjbGllbnQoKSkK
KyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCh0aGlzKTsKIH0KIAotdm9pZCBLV1FGaWxl
QnV0dG9uOjpmb2N1c0NoYW5nZWQoYm9vbCBub3dIYXNGb2N1cykKLXsKLSAgICBpZiAobm93SGFz
Rm9jdXMpIHsKLSAgICAgICAgaWYgKCFNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25J
bldpZGdldCh0aGlzKSkgewotICAgICAgICAgICAgUmVuZGVyV2lkZ2V0ICp3aWRnZXQgPSBjb25z
dF9jYXN0PFJlbmRlcldpZGdldCAqPiAoc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+
KGV2ZW50RmlsdGVyT2JqZWN0KCkpKTsKLSAgICAgICAgICAgIFJlbmRlckxheWVyICpsYXllciA9
IHdpZGdldC0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgICAgIGxheWVyID0gbGF5ZXItPnJl
bmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXIpCi0gICAg
ICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUod2lkZ2V0LT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIGV2ZW50RmlsdGVy
T2JqZWN0KCktPmV2ZW50RmlsdGVyRm9jdXNJbigpOwotICAgIH0gZWxzZQotICAgICAgICBldmVu
dEZpbHRlck9iamVjdCgpLT5ldmVudEZpbHRlckZvY3VzT3V0KCk7Ci19Ci0KLXZvaWQgS1dRRmls
ZUJ1dHRvbjo6Y2xpY2tlZCgpCi17Ci0gICAgX2NsaWNrZWQuY2FsbCgpOwotfQotCi0KIEBpbXBs
ZW1lbnRhdGlvbiBLV1FGaWxlQnV0dG9uQWRhcHRlcgogCiAtIGluaXRXaXRoS1dRRmlsZUJ1dHRv
bjooS1dRRmlsZUJ1dHRvbiAqKWIKQEAgLTE4MiwyNCArMTYxLDI5IEBAIHZvaWQgS1dRRmlsZUJ1
dHRvbjo6Y2xpY2tlZCgpCiAKIC0gKHZvaWQpZmlsZW5hbWVDaGFuZ2VkOihOU1N0cmluZyAqKWZp
bGVuYW1lCiB7Ci0gICAgaWYgKGJ1dHRvbikgeworICAgIGlmIChidXR0b24pCiAgICAgICAgIGJ1
dHRvbi0+ZmlsZW5hbWVDaGFuZ2VkKFFTdHJpbmc6OmZyb21OU1N0cmluZyhmaWxlbmFtZSkpOwot
ICAgIH0KIH0KIAogLSAodm9pZClmb2N1c0NoYW5nZWQ6KEJPT0wpbm93SGFzRm9jdXMKIHsKLSAg
ICBpZiAoYnV0dG9uKSB7Ci0gICAgICAgIGJ1dHRvbi0+Zm9jdXNDaGFuZ2VkKG5vd0hhc0ZvY3Vz
KTsKKyAgICBpZiAobm93SGFzRm9jdXMpIHsKKyAgICAgICAgaWYgKGJ1dHRvbiAmJiBidXR0b24t
PmNsaWVudCgpICYmICFNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldChi
dXR0b24pKQorICAgICAgICAgICAgYnV0dG9uLT5jbGllbnQoKS0+c2Nyb2xsVG9WaXNpYmxlKGJ1
dHRvbik7CisgICAgICAgIGlmIChidXR0b24gJiYgYnV0dG9uLT5jbGllbnQoKSkKKyAgICAgICAg
ICAgIGJ1dHRvbi0+Y2xpZW50KCktPmZvY3VzSW4oYnV0dG9uKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi0+Y2xpZW50KCkpCisgICAgICAgICAgICBidXR0b24t
PmNsaWVudCgpLT5mb2N1c091dChidXR0b24pOwogICAgIH0KIH0KIAogLSh2b2lkKWNsaWNrZWQK
IHsKLSAgICBpZiAoYnV0dG9uKSB7CisgICAgaWYgKGJ1dHRvbikKICAgICAgICAgYnV0dG9uLT5z
ZW5kQ29uc3VtZWRNb3VzZVVwKCk7Ci0gICAgICAgIGJ1dHRvbi0+Y2xpY2tlZCgpOwotICAgIH0K
KyAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi0+Y2xpZW50KCkpCisgICAgICAgIGJ1dHRvbi0+Y2xp
ZW50KCktPmNsaWNrZWQoYnV0dG9uKTsKIH0KIAogQGVuZApJbmRleDoga3dxL0tXUUxpbmVFZGl0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3dxL0tXUUxpbmVFZGl0LmgJKHJldmlzaW9uIDEzMDkzKQorKysg
a3dxL0tXUUxpbmVFZGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRDb2xvcnMoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGJhY2tncm91bmQs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBmb3JlZ3JvdW5kKTsKIAotICAgIHZvaWQgc2V0QWxpZ25t
ZW50KEFsaWdubWVudEZsYWdzKTsKKyAgICB2b2lkIHNldEFsaWdubWVudChXZWJDb3JlOjpBbGln
bm1lbnRGbGFncyk7CiAKICAgICB2b2lkIHNldEN1cnNvclBvc2l0aW9uKGludCk7CiAgICAgaW50
IGN1cnNvclBvc2l0aW9uKCkgY29uc3Q7CkBAIC04MiwxMyArODIsNiBAQCBwdWJsaWM6CiAgICAg
SW50U2l6ZSBzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50IG51bUNoYXJhY3RlcnMpIGNvbnN0Owog
ICAgIGludCBiYXNlbGluZVBvc2l0aW9uKGludCBoZWlnaHQpIGNvbnN0OwogICAgIAotICAgIHZv
aWQgcmV0dXJuUHJlc3NlZCgpIHsgbV9yZXR1cm5QcmVzc2VkLmNhbGwoKTsgfQotICAgIHZvaWQg
dGV4dENoYW5nZWQoKSB7IG1fdGV4dENoYW5nZWQuY2FsbCh0ZXh0KCkpOyB9Ci0gICAgdm9pZCBw
ZXJmb3JtU2VhcmNoKCkgeyBtX3BlcmZvcm1TZWFyY2guY2FsbCgpOyB9Ci0gICAgdm9pZCBzZWxl
Y3Rpb25DaGFuZ2VkKCkgeyBtX3NlbGVjdGlvbkNoYW5nZWQuY2FsbCgpOyB9Ci0gICAgICAgIAot
ICAgIHZvaWQgY2xpY2tlZCgpOwotICAgIAogICAgIHZpcnR1YWwgRm9jdXNQb2xpY3kgZm9jdXNQ
b2xpY3koKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1
cygpIGNvbnN0OwogCkBAIC0xMDEsMTggKzk0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFNl
YXJjaFJlc3VsdCgpOwogCiBwcml2YXRlOgotICAgIEtXUVNpZ25hbCBtX3JldHVyblByZXNzZWQ7
Ci0gICAgS1dRU2lnbmFsIG1fdGV4dENoYW5nZWQ7Ci0gICAgS1dRU2lnbmFsIG1fY2xpY2tlZDsK
LSAgICBLV1FTaWduYWwgbV9wZXJmb3JtU2VhcmNoOwotICAgIEtXUVNpZ25hbCBtX3NlbGVjdGlv
bkNoYW5nZWQ7Ci0gICAgCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgS1dRVGV4dEZpZWxkQ29udHJv
bGxlciAqbV9jb250cm9sbGVyOwogfTsKIAogI2lmZGVmIF9fT0JKQ19fCi1OU1RleHRBbGlnbm1l
bnQgS1dRTlNUZXh0QWxpZ25tZW50Rm9yQWxpZ25tZW50RmxhZ3MoUXQ6OkFsaWdubWVudEZsYWdz
KTsKK05TVGV4dEFsaWdubWVudCBLV1FOU1RleHRBbGlnbm1lbnRGb3JBbGlnbm1lbnRGbGFncyhX
ZWJDb3JlOjpBbGlnbm1lbnRGbGFncyk7CiAjZW5kaWYKIAogI2VuZGlmCkluZGV4OiBrd3EvS1dR
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUU9iamVjdC5oCShyZXZpc2lvbiAxMzA5MykK
KysrIGt3cS9LV1FPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFFPQkpFQ1RfSF8KLSNkZWZpbmUg
UU9CSkVDVF9IXwotCi0jaW5jbHVkZSAiS1dRTmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiS1dRUHRy
TGlzdC5oIgotI2luY2x1ZGUgIktXUVNpZ25hbC5oIgotCi0jZGVmaW5lIHNsb3RzIDogcHVibGlj
Ci0jZGVmaW5lIFNMT1QoeCkgIlNMT1Q6IiAjeAotI2RlZmluZSBzaWduYWxzIHByb3RlY3RlZAot
I2RlZmluZSBTSUdOQUwoeCkgIlNJR05BTDoiICN4Ci0jZGVmaW5lIGVtaXQKLSNkZWZpbmUgUV9P
QkpFQ1QKLQotY2xhc3MgS1dRR3VhcmRlZFB0ckJhc2U7Ci0KLWNsYXNzIFFPYmplY3QgOiBwdWJs
aWMgUXQgewotcHVibGljOgotICAgIFFPYmplY3QoKTsKLSAgICB2aXJ0dWFsIH5RT2JqZWN0KCk7
Ci0KLSAgICBzdGF0aWMgdm9pZCBjb25uZWN0KGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3Qg
Y2hhciAqc2lnbmFsLCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVy
KTsKLSAgICBzdGF0aWMgdm9pZCBkaXNjb25uZWN0KGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29u
c3QgY2hhciAqc2lnbmFsLCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVt
YmVyKTsKLSAgICB2b2lkIGNvbm5lY3QoY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFy
ICpzaWduYWwsIGNvbnN0IGNoYXIgKm1lbWJlcikgY29uc3QKLSAgICAgICAgeyBjb25uZWN0KHNl
bmRlciwgc2lnbmFsLCB0aGlzLCBtZW1iZXIpOyB9Ci0KLSAgICB2b2lkIGluc3RhbGxFdmVudEZp
bHRlcihjb25zdCBRT2JqZWN0KiBvKSB7IF9ldmVudEZpbHRlck9iamVjdCA9IG87IH0KLSAgICB2
b2lkIHJlbW92ZUV2ZW50RmlsdGVyKCkgeyBfZXZlbnRGaWx0ZXJPYmplY3QgPSAwOyB9Ci0gICAg
Y29uc3QgUU9iamVjdCogZXZlbnRGaWx0ZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiBfZXZlbnRG
aWx0ZXJPYmplY3Q7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBldmVudEZpbHRlckZvY3VzSW4oKSBj
b25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXZlbnRGaWx0ZXJGb2N1c091dCgpIGNvbnN0IHsg
fQotCi0gICAgdmlydHVhbCBib29sIGlzRnJhbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNGcmFtZVZpZXcoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICAvLyBubyBjb3B5aW5nIG9yIGFz
c2lnbm1lbnQKLSAgICBRT2JqZWN0KGNvbnN0IFFPYmplY3QgJik7Ci0gICAgUU9iamVjdCAmb3Bl
cmF0b3I9KGNvbnN0IFFPYmplY3QgJik7Ci0gICAgCi0gICAgS1dRU2lnbmFsICpmaW5kU2lnbmFs
KGNvbnN0IGNoYXIgKnNpZ25hbE5hbWUpIGNvbnN0OwotICAgIAotICAgIFFQdHJMaXN0PFFPYmpl
Y3Q+IF9ndWFyZGVkUHRyRHVtbXlMaXN0OwotICAgIAotICAgIG11dGFibGUgS1dRU2lnbmFsICpf
c2lnbmFsTGlzdEhlYWQ7Ci0KLSAgICBLV1FTaWduYWwgX2Rlc3Ryb3llZDsKLSAgICAKLSAgICBj
b25zdCBRT2JqZWN0ICpfZXZlbnRGaWx0ZXJPYmplY3Q7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNz
IEtXUUd1YXJkZWRQdHJCYXNlOwotICAgIGZyaWVuZCBjbGFzcyBLV1FTaWduYWw7Ci19OwotCi0j
ZW5kaWYKSW5kZXg6IGt3cS9LV1FTaWduYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FTaWdu
YWwuY3BwCShyZXZpc2lvbiAxMzA5MykKKysrIGt3cS9LV1FTaWduYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJLV1FTaWduYWwuaCIKLQotI2luY2x1ZGUgIktXUU9iamVj
dC5oIgotI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLQotS1dRU2lnbmFsOjpLV1FT
aWduYWwoUU9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKQotICAgIDogX29iamVjdChv
YmplY3QpLCBfbmV4dChvYmplY3QtPl9zaWduYWxMaXN0SGVhZCksIF9uYW1lKG5hbWUpCi17Ci0g
ICAgb2JqZWN0LT5fc2lnbmFsTGlzdEhlYWQgPSB0aGlzOwotfQotCi1LV1FTaWduYWw6On5LV1FT
aWduYWwoKQotewotICAgIEtXUVNpZ25hbCAqKnByZXYgPSAmX29iamVjdC0+X3NpZ25hbExpc3RI
ZWFkOwotICAgIEtXUVNpZ25hbCAqc2lnbmFsOwotICAgIHdoaWxlICgoc2lnbmFsID0gKnByZXYp
KSB7Ci0gICAgICAgIGlmIChzaWduYWwgPT0gdGhpcykgewotICAgICAgICAgICAgKnByZXYgPSBf
bmV4dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHByZXYgPSAmc2ln
bmFsLT5fbmV4dDsKLSAgICB9Ci19Ci0KLXZvaWQgS1dRU2lnbmFsOjpjb25uZWN0KGNvbnN0IEtX
UVNsb3QgJnNsb3QpCi17Ci0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgaWYgKF9zbG90cy5jb250
YWlucyhzbG90KSkKLSAgICAgICAgTE9HX0VSUk9SKCJjb25uZWN0aW5nIHRoZSBzYW1lIHNsb3Qg
dG8gYSBzaWduYWwgdHdpY2UsICVzIiwgX25hbWUpOwotI2VuZGlmCi0gICAgX3Nsb3RzLmFwcGVu
ZChzbG90KTsKLX0KLQotdm9pZCBLV1FTaWduYWw6OmRpc2Nvbm5lY3QoY29uc3QgS1dRU2xvdCAm
c2xvdCkKLXsKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICBpZiAoIV9zbG90cy5jb250YWlucyhz
bG90KSkKLSAgICAgICAgTE9HX0VSUk9SKCJkaXNjb25uZWN0aW5nIGEgc2lnbmFsIHRoYXQgd2Fz
bid0IGNvbm5lY3RlZCwgJXMiLCBfbmFtZSk7Ci0jZW5kaWYKLSAgICBfc2xvdHMucmVtb3ZlKHNs
b3QpOwotfQotCi12b2lkIEtXUVNpZ25hbDo6Y2FsbCgpIGNvbnN0Ci17Ci0gICAgUVZhbHVlTGlz
dDxLV1FTbG90PiBjb3BpZWRTbG90cyhfc2xvdHMpOwotICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPEtXUVNsb3Q+IGVuZCA9IGNvcGllZFNsb3RzLmVuZCgpOwotICAgIGZvciAoUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8S1dRU2xvdD4gaXQgPSBjb3BpZWRTbG90cy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICgqaXQpLmNhbGwoKTsKLX0KLQotdm9pZCBLV1FTaWduYWw6OmNh
bGwoaW50IGkpIGNvbnN0Ci17Ci0gICAgUVZhbHVlTGlzdDxLV1FTbG90PiBjb3BpZWRTbG90cyhf
c2xvdHMpOwotICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEtXUVNsb3Q+IGVuZCA9IGNvcGll
ZFNsb3RzLmVuZCgpOwotICAgIGZvciAoUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8S1dRU2xvdD4g
aXQgPSBjb3BpZWRTbG90cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQp
LmNhbGwoaSk7Ci19Ci0KLXZvaWQgS1dRU2lnbmFsOjpjYWxsKGNvbnN0IERPTTo6RE9NU3RyaW5n
ICZzKSBjb25zdAotewotICAgIFFWYWx1ZUxpc3Q8S1dRU2xvdD4gY29waWVkU2xvdHMoX3Nsb3Rz
KTsKLSAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxLV1FTbG90PiBlbmQgPSBjb3BpZWRTbG90
cy5lbmQoKTsKLSAgICBmb3IgKFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEtXUVNsb3Q+IGl0ID0g
Y29waWVkU2xvdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS5jYWxs
KHMpOwotfQpJbmRleDoga3dxL0tXUVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRU2xvdC5o
CShyZXZpc2lvbiAxMzA5MykKKysrIGt3cS9LV1FTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzAgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgS1dRU0xPVF9ICi0jZGVmaW5l
IEtXUVNMT1RfSAotCi0jaW5jbHVkZSAiS1dRR3VhcmRlZFB0ci5oIgotCi0jaWYgX19PQkpDX18K
LUBjbGFzcyBOU0RhdGE7Ci1AY2xhc3MgTlNVUkxSZXNwb25zZTsKLSNlbHNlCi1jbGFzcyBOU0Rh
dGE7Ci1jbGFzcyBOU1VSTFJlc3BvbnNlOwotI2VuZGlmCi0KLWNsYXNzIFFTdHJpbmc7Ci1jbGFz
cyBLVVJMOwotCi1uYW1lc3BhY2UgRE9NIHsKLSAgICBjbGFzcyBET01TdHJpbmc7Ci19Ci0KLS8v
IExpa2Ugc3RyY21wLCBidXQgaWdub3JlcyBzcGFjZXMuCi1ib29sIEtXUU5hbWVzTWF0Y2goY29u
c3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7Ci0KLWNsYXNzIEtXUVNsb3QgewotcHVibGljOgot
ICAgIEtXUVNsb3QoKSA6IG1fb2JqZWN0KDApIHsgfQotICAgIEtXUVNsb3QoUU9iamVjdCAqLCBj
b25zdCBjaGFyICptZW1iZXIpOwotICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX29iamVjdDsgfQotICAgIHZvaWQgY2xlYXIoKSB7IG1fb2JqZWN0ID0gMDsgfQotICAg
IAotICAgIHZvaWQgY2FsbCgpIGNvbnN0OwotICAgIHZvaWQgY2FsbChpbnQpIGNvbnN0OwotICAg
IHZvaWQgY2FsbChjb25zdCBET006OkRPTVN0cmluZyYpIGNvbnN0OwotCi0gICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBLV1FTbG90ICYsIGNvbnN0IEtXUVNsb3QgJik7Ci0KLXByaXZh
dGU6Ci0gICAgUUd1YXJkZWRQdHI8UU9iamVjdD4gbV9vYmplY3Q7Ci0gICAgaW50IG1fZnVuY3Rp
b247Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtXUVNsb3QgJmEsIGNvbnN0
IEtXUVNsb3QgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi0jZW5kaWYKKyNlcnJvcgpJbmRl
eDoga3dxL0tXUUxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTGlzdEJveC5oCShyZXZp
c2lvbiAxMzA5MykKKysrIGt3cS9LV1FMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEtXUUxJU1RCT1hfSF8KICNkZWZp
bmUgS1dRTElTVEJPWF9IXwogCisjaW5jbHVkZSAiS1dRVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAi
UVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0
aW9uLmgiCkBAIC03NCw4ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdyaXRpbmdEaXJl
Y3Rpb24oV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7CiAgICAgCiAgICAgYm9vbCBjaGFuZ2luZ1Nl
bGVjdGlvbigpIHsgcmV0dXJuIF9jaGFuZ2luZ1NlbGVjdGlvbjsgfQotICAgIHZvaWQgY2xpY2tl
ZCgpIHsgX2NsaWNrZWQuY2FsbCgpOyB9Ci0gICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCkgeyBf
c2VsZWN0aW9uQ2hhbmdlZC5jYWxsKCk7IH0KIAogICAgIHZpcnR1YWwgRm9jdXNQb2xpY3kgZm9j
dXNQb2xpY3koKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tzRGVzY2VuZGFudHNGb3JG
b2N1cygpIGNvbnN0OwpAQCAtOTMsMTAgKzkyLDYgQEAgcHJpdmF0ZToKICAgICBib29sIF9lbmFi
bGVkOwogCiAgICAgbXV0YWJsZSBmbG9hdCBfd2lkdGg7Ci0gICAgbXV0YWJsZSBib29sIF93aWR0
aEdvb2Q7Ci0gICAgCi0gICAgS1dRU2lnbmFsIF9jbGlja2VkOwotICAgIEtXUVNpZ25hbCBfc2Vs
ZWN0aW9uQ2hhbmdlZDsKLX07CisgICAgbXV0YWJsZSBib29sIF93aWR0aEdvb2Q7fTsKIAogI2Vu
ZGlmCkluZGV4OiBrd3EvS1dRVGV4dEVkaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRVGV4dEVk
aXQuaAkocmV2aXNpb24gMTMwOTMpCisrKyBrd3EvS1dRVGV4dEVkaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEyICsyNiwxMiBAQAogI2lmbmRlZiBRVEVYVEVE
SVRfSF8KICNkZWZpbmUgUVRFWFRFRElUX0hfCiAKLSNpbmNsdWRlICJLV1FTaWduYWwuaCIKICNp
bmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3MgU3RyaW5nOwogfQog
CiBjbGFzcyBRVGV4dEVkaXQgOiBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsVmlldyB7CkBAIC01MCw3
ICs1MCw3IEBAIGNsYXNzIFFUZXh0RWRpdCA6IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGwKIAogICAg
IHZvaWQgc2V0Q29sb3JzKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYgZm9yZWdyb3VuZCk7CiAKLSAgICB2b2lkIHNldEFsaWdubWVudChBbGln
bm1lbnRGbGFncyk7CisgICAgdm9pZCBzZXRBbGlnbm1lbnQoV2ViQ29yZTo6QWxpZ25tZW50Rmxh
Z3MpOwogICAgIHZvaWQgc2V0TGluZUhlaWdodChpbnQgbGluZUhlaWdodCk7CiAKICAgICB2b2lk
IHNldEN1cnNvclBvc2l0aW9uKGludCwgaW50KTsKQEAgLTg5LDE4ICs4OSw4IEBAIGNsYXNzIFFU
ZXh0RWRpdCA6IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGwKIAogICAgIEludFNpemUgc2l6ZVdpdGhD
b2x1bW5zQW5kUm93cyhpbnQgbnVtQ29sdW1ucywgaW50IG51bVJvd3MpIGNvbnN0OwogCi0gICAg
dm9pZCB0ZXh0Q2hhbmdlZCgpIHsgX3RleHRDaGFuZ2VkLmNhbGwoKTsgfQotCi0gICAgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkKCkgeyBfc2VsZWN0aW9uQ2hhbmdlZC5jYWxsKCk7IH0KLSAgICB2b2lk
IGNsaWNrZWQoKTsKLQogICAgIHZpcnR1YWwgRm9jdXNQb2xpY3kgZm9jdXNQb2xpY3koKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0Owot
Ci0gIHByaXZhdGU6Ci0gICAgS1dRU2lnbmFsIF9jbGlja2VkOwotICAgIEtXUVNpZ25hbCBfdGV4
dENoYW5nZWQ7Ci0gICAgS1dRU2lnbmFsIF9zZWxlY3Rpb25DaGFuZ2VkOwogfTsKIAogI2VuZGlm
IC8qIFFURVhURURJVF9IXyAqLwpJbmRleDoga3dxL0tXUUNvbWJvQm94Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGt3cS9LV1FDb21ib0JveC5tbQkocmV2aXNpb24gMTMwOTMpCisrKyBrd3EvS1dRQ29tYm9C
b3gubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgUUNvbWJvQm94OjpRQ29tYm9C
b3goKQogICAgICwgX2N1cnJlbnRJdGVtKDApCiAgICAgLCBfbWVudVBvcHVsYXRlZCh0cnVlKQog
ICAgICwgX2xhYmVsRm9udChuaWwpCi0gICAgLCBfYWN0aXZhdGVkKHRoaXMsIFNJR05BTChhY3Rp
dmF0ZWQoaW50KSkpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAKQEAgLTI4Myw3ICsy
ODIsOCBAQCB2b2lkIFFDb21ib0JveDo6aXRlbVNlbGVjdGVkKCkKIAogICAgIEtXUV9VTkJMT0NL
X0VYQ0VQVElPTlM7CiAKLSAgICBfYWN0aXZhdGVkLmNhbGwoX2N1cnJlbnRJdGVtKTsKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT52YWx1ZUNoYW5nZWQodGhpcyk7CiB9CiAK
IHZvaWQgUUNvbWJvQm94OjpzZXRGb250KGNvbnN0IEZvbnQmIGYpCkBAIC00ODcsMTcgKzQ4Nywx
MSBAQCB2b2lkIFFDb21ib0JveDo6cG9wdWxhdGUoKQogewogICAgIEJPT0wgYmVjb21lID0gW3N1
cGVyIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKICAgICBpZiAoYmVjb21lKSB7Ci0gICAgICAgIFdp
ZGdldCAqd2lkZ2V0ID0gW3NlbGYgd2lkZ2V0XTsKLSAgICAgICAgaWYgKHdpZGdldCkgewotICAg
ICAgICAgICAgaWYgKCFNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldCh3
aWRnZXQpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyV2lkZ2V0ICp3ID0gY29uc3RfY2FzdDxS
ZW5kZXJXaWRnZXQgKj4gKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldpZGdldCAqPih3aWRnZXQt
PmV2ZW50RmlsdGVyT2JqZWN0KCkpKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJMYXllciAqbGF5
ZXIgPSB3LT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICAgICAgICAgIGlmIChsYXllcikKLSAg
ICAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUody0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2lkZ2V0
LT5ldmVudEZpbHRlck9iamVjdCgpKQotICAgICAgICAgICAgICAgIHdpZGdldC0+ZXZlbnRGaWx0
ZXJPYmplY3QoKS0+ZXZlbnRGaWx0ZXJGb2N1c0luKCk7Ci0gICAgICAgIH0KKyAgICAgICAgV2lk
Z2V0KiB3aWRnZXQgPSBbc2VsZiB3aWRnZXRdOworICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdl
dC0+Y2xpZW50KCkgJiYgIU1hY0ZyYW1lOjpjdXJyZW50RXZlbnRJc01vdXNlRG93bkluV2lkZ2V0
KHdpZGdldCkpCisgICAgICAgICAgICB3aWRnZXQtPmNsaWVudCgpLT5zY3JvbGxUb1Zpc2libGUo
d2lkZ2V0KTsKKyAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQtPmNsaWVudCgpKQorICAgICAg
ICAgICAgd2lkZ2V0LT5jbGllbnQoKS0+Zm9jdXNJbih3aWRnZXQpOwogICAgIH0KICAgICByZXR1
cm4gYmVjb21lOwogfQpAQCAtNTA2LDkgKzUwMCw5IEBAIHZvaWQgUUNvbWJvQm94Ojpwb3B1bGF0
ZSgpCiB7CiAgICAgQk9PTCByZXNpZ24gPSBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJdOwog
ICAgIGlmIChyZXNpZ24pIHsKLSAgICAgICAgV2lkZ2V0ICp3aWRnZXQgPSBbc2VsZiB3aWRnZXRd
OwotICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkgewot
ICAgICAgICAgICAgd2lkZ2V0LT5ldmVudEZpbHRlck9iamVjdCgpLT5ldmVudEZpbHRlckZvY3Vz
T3V0KCk7CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gW3NlbGYgd2lkZ2V0XTsKKyAgICAgICAg
aWYgKHdpZGdldCAmJiB3aWRnZXQtPmNsaWVudCgpKSB7CisgICAgICAgICAgICB3aWRnZXQtPmNs
aWVudCgpLT5mb2N1c091dCh3aWRnZXQpOwogICAgICAgICAgICAgaWYgKHdpZGdldCkKICAgICAg
ICAgICAgICAgICBbTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpIGZvcm1Db250cm9s
SXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjpzZWxmXTsKICAgICAgICAgfQpJbmRleDoga3dxL0tX
UU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUU9iamVjdC5jcHAJKHJldmlzaW9uIDEz
MDkzKQorKysga3dxL0tXUU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIktXUU9iamVjdC5oIgotCi0jaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5o
PgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KLQotUU9iamVjdDo6UU9iamVjdCgpCi0g
ICAgOiBfc2lnbmFsTGlzdEhlYWQoMCkKLSAgICAsIF9kZXN0cm95ZWQodGhpcywgU0lHTkFMKGRl
c3Ryb3llZCgpKSkKLSAgICAsIF9ldmVudEZpbHRlck9iamVjdCgwKQotewotICAgIF9ndWFyZGVk
UHRyRHVtbXlMaXN0LmFwcGVuZCh0aGlzKTsKLX0KLQotUU9iamVjdDo6flFPYmplY3QoKQotewot
ICAgIF9kZXN0cm95ZWQuY2FsbCgpOwotICAgIEFTU0VSVChfc2lnbmFsTGlzdEhlYWQgPT0gJl9k
ZXN0cm95ZWQpOwotfQotCi1LV1FTaWduYWwgKlFPYmplY3Q6OmZpbmRTaWduYWwoY29uc3QgY2hh
ciAqc2lnbmFsTmFtZSkgY29uc3QKLXsKLSAgICBmb3IgKEtXUVNpZ25hbCAqc2lnbmFsID0gX3Np
Z25hbExpc3RIZWFkOyBzaWduYWw7IHNpZ25hbCA9IHNpZ25hbC0+X25leHQpCi0gICAgICAgIGlm
IChLV1FOYW1lc01hdGNoKHNpZ25hbE5hbWUsIHNpZ25hbC0+X25hbWUpKQotICAgICAgICAgICAg
cmV0dXJuIHNpZ25hbDsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBRT2JqZWN0Ojpjb25uZWN0
KGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsTmFtZSwgY29uc3QgUU9i
amVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlcikKLXsKLSAgICAvLyBGSVhNRTogQXNz
ZXJ0IHRoYXQgc2VuZGVyIGlzIG5vdCAwIHJhdGhlciB0aGFuIGRvaW5nIHRoZSBpZiBzdGF0ZW1l
bnQsIHRoZW4gZml4IGNhbGxlcnMgd2hvIGNhbGwgd2l0aCAwLgotICAgIGlmICghc2VuZGVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgS1dRU2lnbmFsICpzaWduYWwgPSBzZW5kZXItPmZp
bmRTaWduYWwoc2lnbmFsTmFtZSk7Ci0gICAgaWYgKCFzaWduYWwpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJjb25uZWN0aW5nIG1lbWJlciAlcyB0byBzaWduYWwgJXMsIGJ1dCB0aGF0IHNpZ25hbCB3
YXMgbm90IGZvdW5kIiwgbWVtYmVyLCBzaWduYWxOYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBzaWduYWwtPmNvbm5lY3QoS1dRU2xvdChjb25zdF9jYXN0PFFPYmplY3QgKj4ocmVj
ZWl2ZXIpLCBtZW1iZXIpKTsKLX0KLQotdm9pZCBRT2JqZWN0OjpkaXNjb25uZWN0KGNvbnN0IFFP
YmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsTmFtZSwgY29uc3QgUU9iamVjdCAqcmVj
ZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlcikKLXsKLSAgICAvLyBGSVhNRTogQXNzZXJ0IHRoYXQg
c2VuZGVyIGlzIG5vdCAwIHJhdGhlciB0aGFuIGRvaW5nIHRoZSBpZiBzdGF0ZW1lbnQsIHRoZW4g
Zml4IGNhbGxlcnMgd2hvIGNhbGwgd2l0aCAwLgotICAgIGlmICghc2VuZGVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgS1dRU2lnbmFsICpzaWduYWwgPSBzZW5kZXItPmZpbmRTaWduYWwo
c2lnbmFsTmFtZSk7Ci0gICAgaWYgKCFzaWduYWwpIHsKLSAgICAgICAgLy8gRklYTUU6IFB1dCBh
IGNhbGwgdG8gRVJST1IgaGVyZSBhbmQgY2xlYW4gdXAgY2FsbGVycyB3aG8gZG8gdGhpcy4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzaWduYWwtPmRpc2Nvbm5lY3QoS1dRU2xvdChjb25z
dF9jYXN0PFFPYmplY3QgKj4ocmVjZWl2ZXIpLCBtZW1iZXIpKTsKLX0KLQotYm9vbCBRT2JqZWN0
Ojppc0ZyYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUU9iamVj
dDo6aXNGcmFtZVZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KSW5kZXg6IGt3
cS9LV1FTY3JvbGxCYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVNjcm9sbEJhci5tbQkocmV2
aXNpb24gMTMwOTMpCisrKyBrd3EvS1dRU2Nyb2xsQmFyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjMsMTEgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiS1dRU2Ny
b2xsQmFyLmgiCiAKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktXUVZpZXcu
aCIKKyNpbXBvcnQgIldpZGdldENsaWVudC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogQGludGVyZmFjZSBLV1FTY3JvbGxCYXIgOiBOU1Njcm9sbGVyIDxLV1FXaWRnZXRIb2xkZXI+
CiB7CkBAIC00NywxMSArNTAsMTAgQEAKICAgICAvLyBkaW1lbnNpb25zLCBzbyB3ZSBoYXZlIHRv
IGRvIHRoaXMgdW5zYXZvcnkgaGFjay4KICAgICBOU1JlY3Qgb3JpZW50YXRpb247CiAgICAgb3Jp
ZW50YXRpb24ub3JpZ2luLnggPSBvcmllbnRhdGlvbi5vcmlnaW4ueSA9IDA7Ci0gICAgaWYgKCBz
LT5vcmllbnRhdGlvbigpID09IFF0OjpWZXJ0aWNhbCApIHsKKyAgICBpZiAocy0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbEJhcikgewogICAgICAgICBvcmllbnRhdGlvbi5zaXplLndp
ZHRoID0gW05TU2Nyb2xsZXIgc2Nyb2xsZXJXaWR0aF07CiAgICAgICAgIG9yaWVudGF0aW9uLnNp
emUuaGVpZ2h0ID0gMTAwOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAg
ICBvcmllbnRhdGlvbi5zaXplLndpZHRoID0gMTAwOwogICAgICAgICBvcmllbnRhdGlvbi5zaXpl
LmhlaWdodCA9IFtOU1Njcm9sbGVyIHNjcm9sbGVyV2lkdGhdOwogICAgIH0KQEAgLTkzLDE0ICs5
NSwxMyBAQAogCiBAZW5kCiAKLVFTY3JvbGxCYXI6OlFTY3JvbGxCYXIoT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFdpZGdldCogcGFyZW50KQorUVNjcm9sbEJhcjo6UVNjcm9sbEJhcihTY3JvbGxC
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgV2lkZ2V0KiBwYXJlbnQpCiAgICAgOiBtX29yaWVu
dGF0aW9uKG9yaWVudGF0aW9uKQogICAgICwgbV92aXNpYmxlU2l6ZSgwKQogICAgICwgbV90b3Rh
bFNpemUoMCkKICAgICAsIG1fY3VycmVudFBvcygwKQogICAgICwgbV9saW5lU3RlcCgwKQogICAg
ICwgbV9wYWdlU3RlcCgwKQotICAgICwgbV92YWx1ZUNoYW5nZWQodGhpcywgU0lHTkFMKHZhbHVl
Q2hhbmdlZChpbnQpKSkKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKIApAQCAtMjAwLDEz
ICsyMDEsMTQgQEAgYm9vbCBRU2Nyb2xsQmFyOjpzY3JvbGxiYXJIaXQoTlNTY3JvbGxlcgogCiB2
b2lkIFFTY3JvbGxCYXI6OnZhbHVlQ2hhbmdlZCgpCiB7Ci0gICAgbV92YWx1ZUNoYW5nZWQuY2Fs
bChtX2N1cnJlbnRQb3MpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnZh
bHVlQ2hhbmdlZCh0aGlzKTsKIH0KIAogYm9vbCBRU2Nyb2xsQmFyOjpzY3JvbGwoS1dRU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgS1dRU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIpCiB7CiAgICAgZmxvYXQgZGVsdGEgPSAwLjA7Ci0gICAgaWYgKChkaXJl
Y3Rpb24gPT0gS1dRU2Nyb2xsVXAgJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbCkgfHwgKGRp
cmVjdGlvbiA9PSBLV1FTY3JvbGxMZWZ0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbCkp
IHsKKyAgICBpZiAoKGRpcmVjdGlvbiA9PSBLV1FTY3JvbGxVcCAmJiBtX29yaWVudGF0aW9uID09
IFZlcnRpY2FsU2Nyb2xsQmFyKSB8fCAoZGlyZWN0aW9uID09IEtXUVNjcm9sbExlZnQgJiYgbV9v
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsQmFyKSkgewogICAgICAgICBpZiAoZ3JhbnVs
YXJpdHkgPT0gS1dRU2Nyb2xsTGluZSkgewogICAgICAgICAgICAgZGVsdGEgPSAtbV9saW5lU3Rl
cDsKICAgICAgICAgfSBlbHNlIGlmIChncmFudWxhcml0eSA9PSBLV1FTY3JvbGxQYWdlKSB7CkBA
IC0yMTYsNyArMjE4LDcgQEAgYm9vbCBRU2Nyb2xsQmFyOjpzY3JvbGwoS1dRU2Nyb2xsRGlyZWN0
aQogICAgICAgICB9IGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IEtXUVNjcm9sbFdoZWVsKSB7CiAg
ICAgICAgICAgICBkZWx0YSA9IC1tX2xpbmVTdGVwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
ICgoZGlyZWN0aW9uID09IEtXUVNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bCkgfHwgKGRpcmVjdGlvbiA9PSBLV1FTY3JvbGxSaWdodCAmJiBtX29yaWVudGF0aW9uID09IEhv
cml6b250YWwpKSB7CisgICAgfSBlbHNlIGlmICgoZGlyZWN0aW9uID09IEtXUVNjcm9sbERvd24g
JiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbEJhcikgfHwgKGRpcmVjdGlvbiA9PSBL
V1FTY3JvbGxSaWdodCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxCYXIpKSB7
CiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBLV1FTY3JvbGxMaW5lKSB7CiAgICAgICAgICAg
ICBkZWx0YSA9IG1fbGluZVN0ZXA7CiAgICAgICAgIH0gZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0g
S1dRU2Nyb2xsUGFnZSkgewpJbmRleDoga3dxL0tXUVRleHRFZGl0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGt3cS9LV1FUZXh0RWRpdC5tbQkocmV2aXNpb24gMTMwOTMpCisrKyBrd3EvS1dRVGV4dEVkaXQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDE5ICsyNywxNyBAQAogI2ltcG9ydCAiS1dRVGV4dEVk
aXQuaCIKIAogI2ltcG9ydCAiQ29sb3IuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIklu
dFNpemUuaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNp
bXBvcnQgIktXUUxpbmVFZGl0LmgiCiAjaW1wb3J0ICJLV1FUZXh0QXJlYS5oIgorI2ltcG9ydCAi
V2lkZ2V0Q2xpZW50LmgiCiAjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBRVGV4dEVkaXQ6OlFUZXh0RWRpdChXaWRnZXQgKnBhcmVu
dCkKLSAgICA6IF9jbGlja2VkKHRoaXMsIFNJR05BTChjbGlja2VkKCkpKQotICAgICwgX3RleHRD
aGFuZ2VkKHRoaXMsIFNJR05BTCh0ZXh0Q2hhbmdlZCgpKSkKLSAgICAsIF9zZWxlY3Rpb25DaGFu
Z2VkKHRoaXMsIFNJR05BTChzZWxlY3Rpb25DaGFuZ2VkKCkpKQogewogICAgIEtXUV9CTE9DS19F
WENFUFRJT05TOwogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IFtbS1dRVGV4dEFyZWEgYWxs
b2NdIGluaXRXaXRoUVRleHRFZGl0OnRoaXNdOwpAQCAtMzM0LDExICszMzIsNiBAQCB2b2lkIFFU
ZXh0RWRpdDo6c2V0Rm9udChjb25zdCBGb250JiBmb250CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBU
SU9OUzsKIH0KIAotdm9pZCBRVGV4dEVkaXQ6OmNsaWNrZWQoKQotewotICAgIF9jbGlja2VkLmNh
bGwoKTsKLX0KLQogdm9pZCBRVGV4dEVkaXQ6OnNldEFsaWdubWVudChBbGlnbm1lbnRGbGFncyBh
bGlnbm1lbnQpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CkluZGV4OiBrd3EvS1dRU2ln
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVNpZ25hbC5oCShyZXZpc2lvbiAxMzA5MykKKysr
IGt3cS9LV1FTaWduYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MCArMSBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBLV1FTSUdOQUxfSAotI2RlZmluZSBLV1FTSUdOQUxfSAotCi0j
aW5jbHVkZSAiS1dRU2xvdC5oIgotI2luY2x1ZGUgIktXUVZhbHVlTGlzdC5oIgotCi1jbGFzcyBL
V1FTaWduYWwgewotcHVibGljOgotICAgIEtXUVNpZ25hbChRT2JqZWN0ICosIGNvbnN0IGNoYXIg
Km5hbWUpOwotI2lmZGVmIFdJTjMyX0NPTVBJTEVfSEFDSwotICAgIEtXUVNpZ25hbCgpIHt9Ci0j
ZW5kaWYKLSAgICB+S1dRU2lnbmFsKCk7Ci0gICAgCi0gICAgdm9pZCBjb25uZWN0KGNvbnN0IEtX
UVNsb3QgJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KGNvbnN0IEtXUVNsb3QgJik7Ci0gICAgCi0g
ICAgdm9pZCBjYWxsKCkgY29uc3Q7IC8vIHNob3VsZCBiZSAiZW1pdCI7IGNhbid0IGJlIGR1ZSB0
byBkZWZpbmUgaW4gcW9iamVjdC5oCi0gICAgdm9pZCBjYWxsKGludCkgY29uc3Q7Ci0gICAgdm9p
ZCBjYWxsKGNvbnN0IERPTTo6RE9NU3RyaW5nJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAg
IC8vIGZvcmJpZCBjb3B5aW5nIGFuZCBhc3NpZ25tZW50Ci0gICAgS1dRU2lnbmFsKGNvbnN0IEtX
UVNpZ25hbCAmKTsKLSAgICBLV1FTaWduYWwgJm9wZXJhdG9yPShjb25zdCBLV1FTaWduYWwgJik7
Ci0gICAgCi0gICAgUU9iamVjdCAqX29iamVjdDsKLSAgICBLV1FTaWduYWwgKl9uZXh0OwotICAg
IGNvbnN0IGNoYXIgKl9uYW1lOwotICAgIFFWYWx1ZUxpc3Q8S1dRU2xvdD4gX3Nsb3RzOwotICAg
IAotICAgIGZyaWVuZCBjbGFzcyBRT2JqZWN0OwotfTsKLQotI2VuZGlmCisjZXJyb3IKSW5kZXg6
IGt3cS9LV1FTbGlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRU2xpZGVyLmgJKHJldmlzaW9u
IDEzMDkzKQorKysga3dxL0tXUVNsaWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2
IEBACiAjZGVmaW5lIEtXUVNMSURFUl9IXwogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVk
ZSAiS1dRTmFtZXNwYWNlLmgiCiAKIGNsYXNzIFFTbGlkZXIgOiBwdWJsaWMgV2lkZ2V0IHsKIHB1
YmxpYzoKQEAgLTQ0LDE5ICs0MywxNCBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHZhbHVlKCkgY29u
c3Q7CiAgICAgZG91YmxlIG1pblZhbHVlKCkgY29uc3Q7CiAgICAgZG91YmxlIG1heFZhbHVlKCkg
Y29uc3Q7Ci0gICAgCisKICAgICB2b2lkIHNsaWRlclZhbHVlQ2hhbmdlZCgpOwogCiAgICAgY29u
c3QgaW50KiBkaW1lbnNpb25zKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNsaWNrZWQoKTsKLSAgICAK
ICAgICB2aXJ0dWFsIEZvY3VzUG9saWN5IGZvY3VzUG9saWN5KCkgY29uc3Q7CiAKLQogcHJpdmF0
ZToKLSAgICBLV1FTaWduYWwgbV9zbGlkZXJWYWx1ZUNoYW5nZWQ7Ci0gICAgS1dRU2lnbmFsIG1f
Y2xpY2tlZDsKICAgICBkb3VibGUgbV9taW5WYWw7CiAgICAgZG91YmxlIG1fbWF4VmFsOwogICAg
IGRvdWJsZSBtX3ZhbDsKSW5kZXg6IGt3cS9LV1FHdWFyZGVkUHRyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrd3EvS1dRR3VhcmRlZFB0ci5jcHAJKHJldmlzaW9uIDEzMDkzKQorKysga3dxL0tXUUd1YXJk
ZWRQdHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLV1FHdWFyZGVkUHRyLmgiCi0K
LSNpbmNsdWRlICJLV1FPYmplY3QuaCIKLQotS1dRR3VhcmRlZFB0ckJhc2U6OktXUUd1YXJkZWRQ
dHJCYXNlKFFPYmplY3QgKm8pCi17Ci0gICAgaWYgKG8pIHsKLSAgICAgICAgaXRlcmF0b3IgPSBR
UHRyTGlzdEl0ZXJhdG9yPFFPYmplY3Q+KG8tPl9ndWFyZGVkUHRyRHVtbXlMaXN0KTsKLSAgICB9
Ci19CkluZGV4OiBrd3EvS1dRVGV4dEFyZWEubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVRleHRB
cmVhLm1tCShyZXZpc2lvbiAxMzA5MykKKysrIGt3cS9LV1FUZXh0QXJlYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjA5LDggKzIwOSw4IEBAIGNvbnN0IGZsb2F0IExhcmdlTnVtYmVyRm9yVGV4dCA9
IDEuMGU3OwogCiAtICh2b2lkKXRleHRWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIGlmICh3aWRnZXQgJiYgIVt0ZXh0VmlldyBpblJl
c3BvbmRlckNoYW5nZV0pCi0gICAgICAgIHdpZGdldC0+c2VsZWN0aW9uQ2hhbmdlZCgpOworICAg
IGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5jbGllbnQoKSAmJiAhW3RleHRWaWV3IGluUmVzcG9uZGVy
Q2hhbmdlXSkKKyAgICAgICAgd2lkZ2V0LT5jbGllbnQoKS0+c2VsZWN0aW9uQ2hhbmdlZCh3aWRn
ZXQpOwogfQogCiAtICh2b2lkKXRleHREaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCkBAIC0yMjcsOCArMjI3LDggQEAgY29uc3QgZmxvYXQgTGFyZ2VOdW1iZXJGb3JUZXh0
ID0gMS4wZTc7CiAgICAgICAgIG5vcm1hbGl6ZUxpbmVFbmRpbmdzID0gTk87CiAgICAgfQogCi0g
ICAgaWYgKHdpZGdldCkKLSAgICAgICAgd2lkZ2V0LT50ZXh0Q2hhbmdlZCgpOworICAgIGlmICh3
aWRnZXQgJiYgd2lkZ2V0LT5jbGllbnQoKSkKKyAgICAgICAgd2lkZ2V0LT5jbGllbnQoKS0+dmFs
dWVDaGFuZ2VkKHdpZGdldCk7CiAgICAgCiAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2Ug
PSBNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgW2JyaWRnZSB0ZXh0RGlk
Q2hhbmdlSW5UZXh0QXJlYTooRE9NSFRNTFRleHRBcmVhRWxlbWVudCAqKVticmlkZ2UgZWxlbWVu
dEZvclZpZXc6c2VsZl1dOwpAQCAtOTEzLDE1ICs5MTMsMTEgQEAgc3RhdGljIE5TU3RyaW5nICpX
ZWJDb250aW51b3VzU3BlbGxDaGVjawogICAgIC0taW5SZXNwb25kZXJDaGFuZ2U7CiAKICAgICBp
ZiAoYmVjb21lKSB7Ci0gICAgICAgIGlmICghTWFjRnJhbWU6OmN1cnJlbnRFdmVudElzTW91c2VE
b3duSW5XaWRnZXQod2lkZ2V0KSkgewotICAgICAgICAgICAgUmVuZGVyV2lkZ2V0ICp3ID0gY29u
c3RfY2FzdDxSZW5kZXJXaWRnZXQgKj4gKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldpZGdldCAq
Pih3aWRnZXQtPmV2ZW50RmlsdGVyT2JqZWN0KCkpKTsKLSAgICAgICAgICAgIFJlbmRlckxheWVy
ICpsYXllciA9IHctPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXIpCi0g
ICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUody0+YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQt
PmNsaWVudCgpICYmICFNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldCh3
aWRnZXQpKQorICAgICAgICAgICAgd2lkZ2V0LT5jbGllbnQoKS0+c2Nyb2xsVG9WaXNpYmxlKHdp
ZGdldCk7CiAgICAgICAgIFtzZWxmIF9LV1Ffc2V0S2V5Ym9hcmRGb2N1c1JpbmdOZWVkc0Rpc3Bs
YXldOwotICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkK
LSAgICAgICAgICAgIHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKS0+ZXZlbnRGaWx0ZXJGb2N1
c0luKCk7CisgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5jbGllbnQoKSkKKyAgICAgICAg
ICAgIHdpZGdldC0+Y2xpZW50KCktPmZvY3VzSW4od2lkZ2V0KTsKICAgICB9CiAKICAgICByZXR1
cm4gYmVjb21lOwpAQCAtOTM4LDExICs5MzQsMTEgQEAgc3RhdGljIE5TU3RyaW5nICpXZWJDb250
aW51b3VzU3BlbGxDaGVjawogICAgIGlmIChyZXNpZ24pIHsKICAgICAgICAgW3NlbGYgX0tXUV9z
ZXRLZXlib2FyZEZvY3VzUmluZ05lZWRzRGlzcGxheV07CiAKLSAgICAgICAgaWYgKHdpZGdldCAm
JiB3aWRnZXQtPmV2ZW50RmlsdGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHdpZGdldC0+ZXZl
bnRGaWx0ZXJPYmplY3QoKS0+ZXZlbnRGaWx0ZXJGb2N1c091dCgpOworICAgICAgICBpZiAod2lk
Z2V0ICYmIHdpZGdldC0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIHdpZGdldC0+Y2xpZW50KCkt
PmZvY3VzT3V0KHdpZGdldCk7CiAgICAgICAgICAgICBpZiAod2lkZ2V0KQogICAgICAgICAgICAg
ICAgIFtNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgZm9ybUNvbnRyb2xJc1Jlc2ln
bmluZ0ZpcnN0UmVzcG9uZGVyOnNlbGZdOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHJldHVybiByZXNpZ247CkBAIC0xMDQ3LDEyICsxMDQzLDEwIEBAIHN0YXRp
YyBOU1N0cmluZyAqV2ViQ29udGludW91c1NwZWxsQ2hlY2sKICAgICB9CiAgICAgCiAgICAgW3N1
cGVyIG1vdXNlRG93bjpldmVudF07Ci0gICAgaWYgKHdpZGdldCkgeworICAgIGlmICh3aWRnZXQp
CiAgICAgICAgIHdpZGdldC0+c2VuZENvbnN1bWVkTW91c2VVcCgpOwotICAgIH0KLSAgICBpZiAo
d2lkZ2V0KSB7Ci0gICAgICAgIHdpZGdldC0+Y2xpY2tlZCgpOwotICAgIH0KKyAgICBpZiAod2lk
Z2V0ICYmIHdpZGdldC0+Y2xpZW50KCkpCisgICAgICAgIHdpZGdldC0+Y2xpZW50KCktPmNsaWNr
ZWQod2lkZ2V0KTsKIH0KIAogLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQKQEAgLTEx
NDEsOCArMTEzNSw4IEBAIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29udGludW91c1NwZWxsQ2hlY2sK
IC0gKHZvaWQpZGlzcGF0Y2hIVE1MRXZlbnQ6KGNvbnN0IEF0b21pY1N0cmluZyAmKWV2ZW50VHlw
ZQogewogICAgIGlmICh3aWRnZXQpCi0gICAgICAgIGlmIChjb25zdCBSZW5kZXJXaWRnZXQgKnJ3
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KHdpZGdldC0+ZXZlbnRGaWx0ZXJP
YmplY3QoKSkpCi0gICAgICAgICAgICBpZiAoTm9kZUltcGwgKm5vZGUgPSBydy0+ZWxlbWVudCgp
KQorICAgICAgICBpZiAoUmVuZGVyV2lkZ2V0KiBydyA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdl
dCAqPih3aWRnZXQtPmNsaWVudCgpKSkKKyAgICAgICAgICAgIGlmIChOb2RlSW1wbCogbm9kZSA9
IHJ3LT5lbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+ZGlzcGF0Y2hIVE1MRXZlbnQo
ZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOwogfQogCkluZGV4OiBrd3EvS1dRU2xpZGVyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGt3cS9LV1FTbGlkZXIubW0JKHJldmlzaW9uIDEzMDkzKQorKysga3dxL0tX
UVNsaWRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUsMTkgKzc1LDE2IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIFdpZGdldDo6YmVmb3JlTW91c2VEb3duKHNlbGYpOwogICAgIFtz
dXBlciBtb3VzZURvd246ZXZlbnRdOwogICAgIFdpZGdldDo6YWZ0ZXJNb3VzZURvd24oc2VsZik7
Ci0gICAgaWYgKHNsaWRlcikgeworICAgIGlmIChzbGlkZXIpCiAgICAgICAgIHNsaWRlci0+c2Vu
ZENvbnN1bWVkTW91c2VVcCgpOwotICAgIH0KLSAgICBpZiAoc2xpZGVyKSB7Ci0gICAgICAgIHNs
aWRlci0+Y2xpY2tlZCgpOwotICAgIH0KKyAgICBpZiAoc2xpZGVyICYmIHNsaWRlci0+Y2xpZW50
KCkpCisgICAgICAgIHNsaWRlci0+Y2xpZW50KCktPmNsaWNrZWQoc2xpZGVyKTsKIH0KIAogLSAo
SUJBY3Rpb24pc2xpZGU6KE5TU2xpZGVyKilzZW5kZXIKIHsKLSAgICBpZiAoc2xpZGVyKSB7Cisg
ICAgaWYgKHNsaWRlcikKICAgICAgICAgc2xpZGVyLT5zbGlkZXJWYWx1ZUNoYW5nZWQoKTsKLSAg
ICB9CiB9CiAKIC0gKFdpZGdldCAqKXdpZGdldApAQCAtMTAxLDE1ICs5OCwxMCBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIHsKICAgICBCT09MIGJlY29tZSA9IFtzdXBlciBiZWNvbWVGaXJz
dFJlc3BvbmRlcl07CiAgICAgaWYgKGJlY29tZSAmJiBzbGlkZXIpIHsKLSAgICAgICAgaWYgKCFN
YWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldChzbGlkZXIpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJXaWRnZXQgKndpZGdldCA9IGNvbnN0X2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+
IChzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJXaWRnZXQgKj4oc2xpZGVyLT5ldmVudEZpbHRlck9i
amVjdCgpKSk7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciAqbGF5ZXIgPSB3aWRnZXQtPmVuY2xv
c2luZ0xheWVyKCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXIpCi0gICAgICAgICAgICAgICAgbGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUod2lkZ2V0LT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzbGlkZXIgJiYgc2xpZGVyLT5ldmVudEZpbHRl
ck9iamVjdCgpKQotICAgICAgICAgICAgc2xpZGVyLT5ldmVudEZpbHRlck9iamVjdCgpLT5ldmVu
dEZpbHRlckZvY3VzSW4oKTsKKyAgICAgICAgaWYgKHNsaWRlciAmJiBzbGlkZXItPmNsaWVudCgp
ICYmICFNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldChzbGlkZXIpKQor
ICAgICAgICAgICAgc2xpZGVyLT5jbGllbnQoKS0+c2Nyb2xsVG9WaXNpYmxlKHNsaWRlcik7Cisg
ICAgICAgIGlmIChzbGlkZXIgJiYgc2xpZGVyLT5jbGllbnQoKSkKKyAgICAgICAgICAgIHNsaWRl
ci0+Y2xpZW50KCktPmZvY3VzSW4oc2xpZGVyKTsKICAgICB9CiAgICAgcmV0dXJuIGJlY29tZTsK
IH0KQEAgLTExNyw4ICsxMDksOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC0gKEJPT0wp
cmVzaWduRmlyc3RSZXNwb25kZXIKIHsKICAgICBCT09MIHJlc2lnbiA9IFtzdXBlciByZXNpZ25G
aXJzdFJlc3BvbmRlcl07Ci0gICAgaWYgKHJlc2lnbiAmJiBzbGlkZXIgJiYgc2xpZGVyLT5ldmVu
dEZpbHRlck9iamVjdCgpKSB7Ci0gICAgICAgIHNsaWRlci0+ZXZlbnRGaWx0ZXJPYmplY3QoKS0+
ZXZlbnRGaWx0ZXJGb2N1c091dCgpOworICAgIGlmIChyZXNpZ24gJiYgc2xpZGVyICYmIHNsaWRl
ci0+Y2xpZW50KCkpIHsKKyAgICAgICAgc2xpZGVyLT5jbGllbnQoKS0+Zm9jdXNPdXQoc2xpZGVy
KTsKICAgICAgICAgaWYgKHNsaWRlcikKICAgICAgICAgICAgIFtNYWNGcmFtZTo6YnJpZGdlRm9y
V2lkZ2V0KHNsaWRlcikgZm9ybUNvbnRyb2xJc1Jlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyOnNlbGZd
OwogICAgIH0KQEAgLTE5OSw5ICsxOTEsNyBAQCBlbnVtIHsKIH07CiAKIFFTbGlkZXI6OlFTbGlk
ZXIoKQotOiBtX3NsaWRlclZhbHVlQ2hhbmdlZCh0aGlzLCBTSUdOQUwoc2xpZGVyVmFsdWVDaGFu
Z2VkKCkpKSwgCi0gIG1fY2xpY2tlZCh0aGlzLCBTSUdOQUwoY2xpY2tlZCgpKSksCi0gIG1fbWlu
VmFsKDAuMCksIG1fbWF4VmFsKDEwMC4wKSwgbV92YWwoNTAuMCkKKyAgICA6IG1fbWluVmFsKDAu
MCksIG1fbWF4VmFsKDEwMC4wKSwgbV92YWwoNTAuMCkKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBU
SU9OUzsKICAgICBLV1FTbGlkZXIqIHNsaWRlciA9IFtbS1dRU2xpZGVyIGFsbG9jXSBpbml0V2l0
aFFTbGlkZXI6dGhpc107CkBAIC0yOTgsNyArMjg4LDggQEAgdm9pZCBRU2xpZGVyOjpzbGlkZXJW
YWx1ZUNoYW5nZWQoKQogICAgIGRvdWJsZSB2ID0gW3NsaWRlciBkb3VibGVWYWx1ZV07CiAgICAg
aWYgKG1fdmFsICE9IHYpIHsKICAgICAgICAgbV92YWwgPSB2OwotICAgICAgICBtX3NsaWRlclZh
bHVlQ2hhbmdlZC5jYWxsKCk7CisgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgIGNs
aWVudCgpLT52YWx1ZUNoYW5nZWQodGhpcyk7CiAgICAgfQogfQogCkBAIC0zMTksOCArMzEwLDMg
QEAgY29uc3QgaW50KiBRU2xpZGVyOjpkaW1lbnNpb25zKCkgY29uc3QKICAgICAKICAgICByZXR1
cm4gd1tOU1NtYWxsQ29udHJvbFNpemVdOwogfQotCi12b2lkIFFTbGlkZXI6OmNsaWNrZWQoKQot
ewotICAgIG1fY2xpY2tlZC5jYWxsKCk7Ci19CkluZGV4OiBsb2FkZXIvQ2FjaGVkT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbG9hZGVyL0NhY2hlZE9iamVjdC5oCShyZXZpc2lvbiAxMzA5MykKKysr
IGxvYWRlci9DYWNoZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8a2lvL2dsb2JhbC5oPgogI2lu
Y2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDxxb2JqZWN0Lmg+CiAjaW5jbHVk
ZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCkluZGV4OiBwYWdlL0ZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAxMzA5MykKKysrIHBhZ2UvRnJhbWUu
aAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBlbnVtIE9iamVjdENvbnRlbnRUeXBl
IHsKICAgICBPYmplY3RDb250ZW50UGx1Z2luLAogfTsKIAotY2xhc3MgRnJhbWUgOiBwdWJsaWMg
U2hhcmVkPEZyYW1lPiwgcHVibGljIFFPYmplY3QsIE5vbmNvcHlhYmxlLCBUcmFuc2ZlckpvYkNs
aWVudCB7CitjbGFzcyBGcmFtZSA6IHB1YmxpYyBTaGFyZWQ8RnJhbWU+LCBOb25jb3B5YWJsZSwg
VHJhbnNmZXJKb2JDbGllbnQgewogCiBwdWJsaWM6CiAgIGVudW0geyBOb1hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbiA9IElOVF9NSU4gfTsKQEAgLTYwMSw3ICs2MDEsNyBAQCBwdWJsaWM6
CiAKICAgc3RhdGljIHZvaWQgZW5kQWxsTGlmZVN1cHBvcnQoKTsKIAotc2lnbmFsczoKK3Byb3Rl
Y3RlZDoKICAgLyoqCiAgICAqIEVtaXR0ZWQgaWYgdGhlIGN1cnNvciBpcyBtb3ZlZCBvdmVyIGFu
IFVSTC4KICAgICovCkBAIC04NjMsMTMgKzg2MywxNCBAQCBwcml2YXRlOgogICAvLyBDYWxsIHRo
aXMgbWV0aG9kIGJlZm9yZSBoYW5kbGluZyBhIG5ldyB1c2VyIGFjdGlvbiwgbGlrZSBvbiBhIG1v
dXNlIGRvd24gb3Iga2V5IGRvd24uCiAgIC8vIEN1cnJlbnRseSwgYWxsIHRoaXMgZG9lcyBpcyBj
bGVhciB0aGUgImRvbid0IHN1Ym1pdCBmb3JtIHR3aWNlIiBkYXRhIG1lbWJlci4KICAgdm9pZCBw
cmVwYXJlRm9yVXNlckFjdGlvbigpOwotICB2aXJ0dWFsIGJvb2wgaXNGcmFtZSgpIGNvbnN0Owog
ICBOb2RlSW1wbCAqbW91c2VQcmVzc05vZGUoKTsKIAogICBib29sIGlzQ29tcGxldGUoKTsKICAg
CiAgIHZvaWQgcmVwbGFjZUNvbnRlbnRzV2l0aFNjcmlwdFJlc3VsdChjb25zdCBLVVJMICZ1cmwp
OwogCisgICAgdm9pZCBkaXNjb25uZWN0T3duZXJSZW5kZXJlcigpOworCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0UmVkaXJlY3Rpb25UaW1lcigpOwogICAgIHZpcnR1YWwgdm9p
ZCBzdG9wUmVkaXJlY3Rpb25UaW1lcigpOwpJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzMDkzKQorKysgcGFnZS9GcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYsMTIgQEAgRnJhbWU6On5GcmFtZSgpCiAgICAg
ICAgIGlmIChXaW5kb3cqIHcgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHRoaXMpKQogICAgICAg
ICAgICAgdy0+ZGlzY29ubmVjdEZyYW1lKCk7CiAKKyAgICBzZXRPcGVuZXIoMCk7CisgICAgSGFz
aFNldDxGcmFtZSo+IG9wZW5lZEJ5ID0gZC0+bV9vcGVuZWRCeTsKKyAgICBIYXNoU2V0PEZyYW1l
Kj46Oml0ZXJhdG9yIGVuZCA9IG9wZW5lZEJ5LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxGcmFt
ZSo+OjppdGVyYXRvciBpdCA9IG9wZW5lZEJ5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgKCppdCktPnNldE9wZW5lcigwKTsKKwogICAgIGlmIChkLT5tX3ZpZXcpIHsKICAgICAg
ICAgZC0+bV92aWV3LT5oaWRlKCk7CiAgICAgICAgIGQtPm1fdmlldy0+bV9mcmFtZSA9IDA7CkBA
IC0yMDg4LDkgKzIwOTQsMTMgQEAgRnJhbWUgKkZyYW1lOjpvcGVuZXIoKQogICAgIHJldHVybiBk
LT5tX29wZW5lcjsKIH0KIAotdm9pZCBGcmFtZTo6c2V0T3BlbmVyKEZyYW1lICpfb3BlbmVyKQor
dm9pZCBGcmFtZTo6c2V0T3BlbmVyKEZyYW1lKiBvcGVuZXIpCiB7Ci0gICAgZC0+bV9vcGVuZXIg
PSBfb3BlbmVyOworICAgIGlmIChkLT5tX29wZW5lcikKKyAgICAgICAgZC0+bV9vcGVuZXItPmQt
Pm1fb3BlbmVkQnkucmVtb3ZlKHRoaXMpOworICAgIGlmIChvcGVuZXIpCisgICAgICAgIG9wZW5l
ci0+ZC0+bV9vcGVuZWRCeS5hZGQodGhpcyk7CisgICAgZC0+bV9vcGVuZXIgPSBvcGVuZXI7CiB9
CiAKIGJvb2wgRnJhbWU6Om9wZW5lZEJ5SlMoKQpAQCAtMjkwMywxMSArMjkxMywxMSBAQCBGcmFt
ZSAqRnJhbWU6OmZyYW1lRm9yTm9kZShOb2RlSW1wbCAqbm9kCiAgICAgcmV0dXJuIG5vZGUtPmdl
dERvY3VtZW50KCktPmZyYW1lKCk7CiB9CiAKLU5vZGVJbXBsICpGcmFtZTo6bm9kZUZvcldpZGdl
dChjb25zdCBXaWRnZXQgKndpZGdldCkKK05vZGVJbXBsKiBGcmFtZTo6bm9kZUZvcldpZGdldChj
b25zdCBXaWRnZXQqIHdpZGdldCkKIHsKICAgICBBU1NFUlRfQVJHKHdpZGdldCwgd2lkZ2V0KTsK
LSAgICBjb25zdCBRT2JqZWN0ICpvID0gd2lkZ2V0LT5ldmVudEZpbHRlck9iamVjdCgpOwotICAg
IHJldHVybiBvID8gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KG8pLT5lbGVtZW50
KCkgOiAwOworICAgIFdpZGdldENsaWVudCogYyA9IHdpZGdldC0+Y2xpZW50KCk7CisgICAgcmV0
dXJuIGMgPyBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihjKS0+ZWxlbWVudCgpIDogMDsKIH0K
IAogdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnRGb2N1cyhXaWRnZXQgKndpZGdldCkKQEAgLTMyNzAs
MTEgKzMyODAsNiBAQCB2b2lkIEZyYW1lOjpwcmVwYXJlRm9yVXNlckFjdGlvbigpCiAgICAgX3N1
Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CiB9CiAKLWJvb2wgRnJhbWU6OmlzRnJhbWUoKSBjb25z
dAotewotICAgIHJldHVybiB0cnVlOwotfQotCiBOb2RlSW1wbCAqRnJhbWU6Om1vdXNlUHJlc3NO
b2RlKCkKIHsKICAgICByZXR1cm4gZC0+bV9tb3VzZVByZXNzTm9kZS5nZXQoKTsKQEAgLTMzNDcs
NCArMzM1Miw5IEBAIHZvaWQgRnJhbWU6OnN0YXJ0ZWQoKQogICAgICAgICBmcmFtZS0+ZC0+bV9i
Q29tcGxldGUgPSBmYWxzZTsKIH0KIAordm9pZCBGcmFtZTo6ZGlzY29ubmVjdE93bmVyUmVuZGVy
ZXIoKQoreworICAgIGQtPm1fb3duZXJSZW5kZXJlciA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IHBhZ2UvRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9G
cmFtZVByaXZhdGUuaAkocmV2aXNpb24gMTMwOTMpCisrKyBwYWdlL0ZyYW1lUHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgICwgbV9yZWRpcmVjdGlvblRpbWVyKHRoaXNGcmFtZSwgJkZyYW1lOjpyZWRpcmVjdGlv
blRpbWVyRmlyZWQpCiAgICAgICAgICAgICAsIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24obm9SZWRp
cmVjdGlvblNjaGVkdWxlZCkKICAgICAgICAgICAgICwgbV9kZWxheVJlZGlyZWN0KDApCi0gICAg
ICAgICAgICAsIG1fem9vbUZhY3RvcigxMDApCisgICAgICAgICAgICAsIG1fem9vbUZhY3Rvcihw
YXJlbnQgPyBwYXJlbnQtPmQtPm1fem9vbUZhY3RvciA6IDEwMCkKICAgICAgICAgICAgICwgbV9z
dWJtaXRGb3JtKDApCiAgICAgICAgICAgICAsIG1fYk1vdXNlUHJlc3NlZChmYWxzZSkKICAgICAg
ICAgICAgICwgbV9jYXJldEJsaW5rVGltZXIodGhpc0ZyYW1lLCAmRnJhbWU6OmNhcmV0QmxpbmtU
aW1lckZpcmVkKQpAQCAtMTAzLDEyICsxMDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzRnJhbWUsICZGcmFtZTo6bGlmZVN1cHBv
cnRUaW1lckZpcmVkKQogICAgICAgICAgICAgLCBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyKDApCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGluaGVyaXQgc2V0dGluZ3MgZnJvbSBwYXJlbnQKLSAg
ICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICBGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZSo+KHBhcmVudCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZyYW1lLT5kKQotICAgICAgICAgICAgICAgICAgICBtX3pvb21GYWN0b3Ig
PSBmcmFtZS0+ZC0+bV96b29tRmFjdG9yOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAg
ICAgICAgfkZyYW1lUHJpdmF0ZSgpCkBAIC0xMjIsNyArMTE2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIFZlY3RvcjxSZWZQdHI8UGx1Z2luPiA+IG1fcGx1Z2luczsKIAotICAg
ICAgICBRR3VhcmRlZFB0cjxSZW5kZXJQYXJ0PiBtX293bmVyUmVuZGVyZXI7CisgICAgICAgIFJl
bmRlclBhcnQqIG1fb3duZXJSZW5kZXJlcjsKICAgICAgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92
aWV3OwogICAgICAgICBCcm93c2VyRXh0ZW5zaW9uKiBtX2V4dGVuc2lvbjsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50SW1wbD4gbV9kb2M7CkBAIC0yMTUsNyArMjA5LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIEludFBvaW50IG1fZHJhZ1N0YXJ0UG9zOwogCi0gICAgICAgIFFH
dWFyZGVkUHRyPEZyYW1lPiBtX29wZW5lcjsKKyAgICAgICAgRnJhbWUqIG1fb3BlbmVyOworICAg
ICAgICBIYXNoU2V0PEZyYW1lKj4gbV9vcGVuZWRCeTsKICAgICAgICAgYm9vbCBtX29wZW5lZEJ5
SlM7CiAgICAgICAgIGJvb2wgbV9uZXdKU0ludGVycHJldGVyRXhpc3RzOyAvLyBzZXQgdG8gMSBi
eSBzZXRPcGVuZWRCeUpTLCBmb3Igd2luZG93Lm9wZW4KICAgICAgICAgYm9vbCBtX2JQZW5kaW5n
Q2hpbGRSZWRpcmVjdGlvbjsK
</data>
<flag name="review"
          id="1749"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>