<?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>39351</bug_id>
          
          <creation_ts>2010-05-19 04:23:26 -0700</creation_ts>
          <short_desc>Fix whitespace for the bug 38906</short_desc>
          <delta_ts>2010-05-19 06:30:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>38906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jorlow</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>227767</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-19 04:23:26 -0700</bug_when>
    <thetext>Fix whitespace for the bug 38906</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227768</commentid>
    <comment_count>1</comment_count>
      <attachid>56479</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-19 04:27:03 -0700</bug_when>
    <thetext>Created attachment 56479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227772</commentid>
    <comment_count>2</comment_count>
      <attachid>56481</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-19 04:32:26 -0700</bug_when>
    <thetext>Created attachment 56481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227778</commentid>
    <comment_count>3</comment_count>
      <attachid>56481</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-05-19 04:52:58 -0700</bug_when>
    <thetext>Comment on attachment 56481
Patch

It does indeed seem to only be fixing existing style violations.  I see smfr asked you to split this into a separate patch and it doesn&apos;t seem to change behavior, so r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227791</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-19 06:26:17 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       WebCore/ChangeLog
        M       WebCore/css/CSSParser.cpp
        M       WebCore/css/CSSParser.h
        M       WebCore/inspector/InspectorController.cpp
        M       WebCore/inspector/InspectorDOMAgent.cpp
Committed r59762</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56479</attachid>
            <date>2010-05-19 04:27:03 -0700</date>
            <delta_ts>2010-05-19 04:32:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39351-20100519152700.patch</filename>
            <type>text/plain</type>
            <size>56946</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCmluZGV4IDgyNWZiNWU0YzMzOTdkN2VjYzIzODhiY2QzYjMyOTdmMDQxMjVlNTcu
LjE4MjZkNDJjODZlYzZhOGI3ZjI4MzVhZWY0YmNhOTViYjNlODM2NGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApA
QCAtMTY4LDcgKzE2OCw3IEBAIENTU1BhcnNlcjo6fkNTU1BhcnNlcigpCiAgICAgZmFzdEZyZWUo
bV9wYXJzZWRQcm9wZXJ0aWVzKTsKIAogICAgIGNsZWFyVmFyaWFibGVzKCk7Ci0gICAgCisKICAg
ICBkZWxldGUgbV92YWx1ZUxpc3Q7CiAKICAgICBmYXN0RnJlZShtX2RhdGEpOwpAQCAtMjEwLDcg
KzIxMCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgbV9kYXRhID0gc3RhdGljX2Nh
c3Q8VUNoYXIqPihmYXN0TWFsbG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKICAgICAgICAgbV9kYXRh
W2ldID0gcHJlZml4W2ldOwotICAgIAorCiAgICAgbWVtY3B5KG1fZGF0YSArIHN0cmxlbihwcmVm
aXgpLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
KTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RybGVuKHByZWZpeCkgKyBzdHJpbmcubGVuZ3Ro
KCk7CkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5
bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIG1fc3R5bGVTaGVl
dCA9IHNoZWV0OwogICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuCi0gICAgCisKICAgICBzZXR1cFBhcnNlcigiIiwgc3RyaW5n
LCAiIik7CiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKICAgICBtX3J1bGUgPSAwOwpAQCAtMjYzLDkg
KzI2Myw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsYXJhdGlvbiwgaW50IGlkLCBjb25zCiAKICAgICBtX2lkID0gaWQ7CiAgICAg
bV9pbXBvcnRhbnQgPSBpbXBvcnRhbnQ7Ci0gICAgCisKICAgICBjc3N5eXBhcnNlKHRoaXMpOwot
ICAgIAorCiAgICAgbV9ydWxlID0gMDsKIAogICAgIGJvb2wgb2sgPSBmYWxzZTsKQEAgLTMxNyw3
ICszMTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZwogfQogCiB2b2lkIENTU1BhcnNlcjo6
cGFyc2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1lbnQqIGRvYywgQ1NTU2Vs
ZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCi17ICAgIAorewogICAgIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBkdW1teVN0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jKTsKIAogICAg
IG1fc3R5bGVTaGVldCA9IGR1bW15U3R5bGVTaGVldC5nZXQoKTsKQEAgLTUwNCw3ICs1MDQsNyBA
QCBzdGF0aWMgaW50IHVuaXRGcm9tU3RyaW5nKENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo7CiAgICAgaWYgKGVxdWFsKHZhbHVl
LT5zdHJpbmcsICJrSHoiKSkKICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
S0haOwotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lk
IENTU1BhcnNlcjo6Y2hlY2tGb3JPcnBoYW5lZFVuaXRzKCkKIHsKICAgICBpZiAobV9zdHJpY3Qg
fHwgaW5TaG9ydGhhbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIC8vIFRo
ZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBpcyB0byBpbXBsZW1lbnQgdGhlIFdpbklFIHF1aXJrIHRo
YXQgYWxsb3dzIHVuaXQgdHlwZXMgdG8gYmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbnVtZXJpYyB2
YWx1ZXMKICAgICAvLyBieSB3aGl0ZXNwYWNlLCBzbyBlLmcuLCB3aWR0aDogMjAgcHggaW5zdGVh
ZCBvZiB3aWR0aDoyMHB4LiAgVGhpcyBpcyBpbnZhbGlkIENTUywgc28gd2UgZG9uJ3QgZG8gdGhp
cyBpbiBzdHJpY3QgbW9kZS4KICAgICBDU1NQYXJzZXJWYWx1ZSogbnVtZXJpY1ZhbCA9IDA7CkBA
IC01MzQsNyArNTM0LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmNoZWNrRm9yT3JwaGFuZWRVbml0cygp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgbnVtZXJpY1ZhbCA9ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikgPyB2YWx1ZSA6IDA7CiAgICAgfQogfQpAQCAtNTU0LDcgKzU1
NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSB3aWxsIGxvb2sgZm9yIHVuaXRzIHRoYXQg
aGF2ZSBiZWVuIGluY29ycmVjdGx5IHNlcGFyYXRlZCBmcm9tIHRoZSBudW1iZXIgdGhleSBiZWxv
bmcgdG8KICAgICAvLyBieSBhIHNwYWNlLiAgV2UgZ28gYWhlYWQgYW5kIGFzc29jaWF0ZSB0aGUg
dW5pdCB3aXRoIHRoZSBudW1iZXIgZXZlbiB0aG91Z2ggaXQgaXMgaW52YWxpZCBDU1MuCiAgICAg
Y2hlY2tGb3JPcnBoYW5lZFVuaXRzKCk7Ci0gICAgCisKICAgICBpbnQgbnVtID0gaW5TaG9ydGhh
bmQoKSA/IDEgOiBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwogCiAgICAgaWYgKGlkID09IENTU1ZhbHVl
SW5oZXJpdCkgewpAQCAtNzQ3LDggKzc0Nyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
U3R5bGU6ICAgICAgICAvLyAoPGJvcmRlci1zdHlsZT4gZXhjZXB0IGhpZGRlbikgfCBhdXRvIHwg
aW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVl
Tm9uZSB8fCAoaWQgPj0gQ1NTVmFsdWVJbnNldCAmJiBpZCA8PSBDU1NWYWx1ZURvdWJsZSkpCiAg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOyAKLSAgICAg
ICAgCisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxl
OiAgICAgLy8vLyA8Ym9yZGVyLXN0eWxlPiB8IGluaGVyaXQKICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHRTdHlsZTogICAvLyAgIERlZmluZWQgYXM6ICAgIG5vbmUgfCBoaWRkZW4gfCBk
b3R0ZWQgfCBkYXNoZWQgfAogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZTog
IC8vICAgc29saWQgfCBkb3VibGUgfCBncm9vdmUgfCByaWRnZSB8IGluc2V0IHwgb3V0c2V0CkBA
IC04MjEsMTQgKzgyMSwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKICAgICAg
ICAgLy8gWzx1cmk+LF0qICBbIGF1dG8gfCBjcm9zc2hhaXIgfCBkZWZhdWx0IHwgcG9pbnRlciB8
IHByb2dyZXNzIHwgbW92ZSB8IGUtcmVzaXplIHwgbmUtcmVzaXplIHwKLSAgICAgICAgLy8gbnct
cmVzaXplIHwgbi1yZXNpemUgfCBzZS1yZXNpemUgfCBzdy1yZXNpemUgfCBzLXJlc2l6ZSB8IHct
cmVzaXplIHwgZXctcmVzaXplIHwgCisgICAgICAgIC8vIG53LXJlc2l6ZSB8IG4tcmVzaXplIHwg
c2UtcmVzaXplIHwgc3ctcmVzaXplIHwgcy1yZXNpemUgfCB3LXJlc2l6ZSB8IGV3LXJlc2l6ZSB8
CiAgICAgICAgIC8vIG5zLXJlc2l6ZSB8IG5lc3ctcmVzaXplIHwgbndzZS1yZXNpemUgfCBjb2wt
cmVzaXplIHwgcm93LXJlc2l6ZSB8IHRleHQgfCB3YWl0IHwgaGVscCB8CiAgICAgICAgIC8vIHZl
cnRpY2FsLXRleHQgfCBjZWxsIHwgY29udGV4dC1tZW51IHwgYWxpYXMgfCBjb3B5IHwgbm8tZHJv
cCB8IG5vdC1hbGxvd2VkIHwgLXdlYmtpdC16b29tLWluCiAgICAgICAgIC8vIC13ZWJraXQtem9v
bS1pbiB8IC13ZWJraXQtem9vbS1vdXQgfCBhbGwtc2Nyb2xsIHwgLXdlYmtpdC1ncmFiIHwgLXdl
YmtpdC1ncmFiYmluZyBdIF0gfCBpbmhlcml0CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3Q7CiAgICAgICAgIHdoaWxlICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAgaWYgKCFsaXN0KQotICAgICAgICAgICAg
ICAgIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7IAorICAgICAg
ICAgICAgICAgIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAg
ICAgICAgICAgICBTdHJpbmcgdXJpID0gdmFsdWUtPnN0cmluZzsKICAgICAgICAgICAgIFZlY3Rv
cjxpbnQ+IGNvb3JkczsKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
QEAgLTg0Miw3ICs4NDIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBpZiAobnJjb29yZHMgPT0gMikKICAgICAgICAgICAgICAgICBob3RzcG90ID0gSW50UG9p
bnQoY29vcmRzWzBdLCBjb29yZHNbMV0pOwotICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAo
IXVyaS5pc051bGwoKSAmJiBtX3N0eWxlU2hlZXQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhlIGNvbXBsZXRlVVJMIGNhbGwgc2hvdWxkIGJlIGRvbmUgd2hlbiB1c2luZyB0aGUgQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSwKICAgICAgICAgICAgICAgICAvLyBub3Qgd2hlbiBjcmVhdGluZyBp
dC4KQEAgLTExMTMsNyArMTExMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBG
Tm9uTmVnLCB0cnVlKSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgIGNhc2UgQ1NT
UHJvcGVydHlUYWJsZUxheW91dDogICAgICAgICAvLyBhdXRvIHwgZml4ZWQgfCBpbmhlcml0CiAg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVGaXhlZCkKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKQEAgLTExNDcsNyArMTE0Nyw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjYW4ndCB1c2UgcmVsZWFzZSgpIGhlcmUgc2luY2Ugd2UgbWlnaHQgaGl0
IHRoaXMgcGF0aCB0d2ljZQogICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGF0IGxvZ2ljIHNlZW1z
IHdyb25nIHRvIG1lIHRvIGJlZ2luIHdpdGgsIHdlIGNvbnZlcnQgYWxsIG5vbi11cmkgdmFsdWVz
CiAgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgbGFzdCBzZWVuIFVSSSB2YWx1ZSE/CkBAIC0x
MTU4LDcgKzExNTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghdmFsdWVzLT5s
ZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZXMucmVsZWFzZSgpLCBpbXBvcnRh
bnQpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAoaWQgPj0gQ1NTVmFsdWVW
aXNpYmxlcGFpbnRlZCAmJiBpZCA8PSBDU1NWYWx1ZVN0cm9rZSkpCiAgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKICAgICAv
LyBFbmQgb2YgQ1NTMyBwcm9wZXJ0aWVzCiAKICAgICAvLyBBcHBsZSBzcGVjaWZpYyBwcm9wZXJ0
aWVzLiAgVGhlc2Ugd2lsbCBuZXZlciBiZSBzdGFuZGFyZGl6ZWQgYW5kIGFyZSBwdXJlbHkgdG8K
QEAgLTE1MTcsNyArMTUxNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVMb2dpY2FsIHx8
IGlkID09IENTU1ZhbHVlVmlzdWFsKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBicmVhazsKLSAgICAKKwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250
U2l6ZURlbHRhOiAgICAgICAgICAgLy8gPGxlbmd0aD4KICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGgsIG1fc3RyaWN0KTsKICAgICAgICAgYnJlYWs7CkBA
IC0xNTQxLDEyICsxNTQxLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQogICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICAKKwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQ6CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUJv
cmRlciB8fCBpZCA9PSBDU1NWYWx1ZUxpbmVzKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFNlY3VyaXR5OgogICAgICAgICAvLyBkaXNjIHwgY2lyY2xlIHwgc3F1YXJlIHwg
bm9uZSB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlRGlzYyB8fCBpZCA9PSBD
U1NWYWx1ZUNpcmNsZSB8fCBpZCA9PSBDU1NWYWx1ZVNxdWFyZXx8IGlkID09IENTU1ZhbHVlTm9u
ZSkKQEAgLTE1NTQsMTMgKzE1NTQsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb25lIAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IGlkID09IENTU1ZhbHVlTm9uZQogICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVBbnRp
YWxpYXNlZCB8fCBpZCA9PSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFsaWFzZWQpCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXREYXNoYm9hcmRSZWdp
b246ICAgICAgICAgICAgICAgICAvLyA8ZGFzaGJvYXJkLXJlZ2lvbj4gfCA8ZGFzaGJvYXJkLXJl
Z2lvbj4gCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjogLy8gPGRh
c2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+CiAgICAgICAgIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGFzaGJvYXJkUmVnaW9ucyhwcm9wSWQsIGltcG9ydGFu
dCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU3MiwxMyArMTU3MiwxMyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgLy8gUG9z
aXRpb24gbXVzdCBjb21lIGJlZm9yZSBjb2xvciBpbiB0aGlzIGFycmF5IGJlY2F1c2UgYSBwbGFp
biBvbGQgIjAiIGlzIGEgbGVnYWwgY29sb3IKICAgICAgICAgLy8gaW4gcXVpcmtzIG1vZGUgYnV0
IGl0J3MgdXN1YWxseSB0aGUgWCBjb29yZGluYXRlIG9mIGEgcG9zaXRpb24uCiAgICAgICAgIC8v
IEZJWE1FOiBBZGQgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSB0byB0aGUgc2hvcnRoYW5kLgot
ICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRJ
bWFnZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb24sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiwgCisgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdl
LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yIH07CiAg
ICAgICAgIHJldHVybiBwYXJzZUZpbGxTaG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVzLCA2LCBp
bXBvcnRhbnQpOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazogewotICAg
ICAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFn
ZSwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0LCAKKyAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrQXR0YWNobWVudCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza09y
aWdpbiB9OwogICAgICAgICByZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVy
dGllcywgNSwgaW1wb3J0YW50KTsKQEAgLTE3NTEsOCArMTc1MSw4IEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpCiAgICAgICAgcGFyc2Vk
VmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGlucHV0UHJvcGVydHksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKIAogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+bmV4dCgp
KSB7Ci0gICAgLy8gcGFzcyBhbGwgb3RoZXIgdmFsdWVzLCBpZiBhbnkuIElmIHdlIGRvbid0IGRv
IHRoaXMsIAotICAgIC8vIHRoZSBwYXJzZXIgd2lsbCB0aGluayB0aGF0IGl0J3Mgbm90IGRvbmUg
YW5kIHdvbid0IHByb2Nlc3MgdGhpcyBwcm9wZXJ0eSAgCisgICAgLy8gcGFzcyBhbGwgb3RoZXIg
dmFsdWVzLCBpZiBhbnkuIElmIHdlIGRvbid0IGRvIHRoaXMsCisgICAgLy8gdGhlIHBhcnNlciB3
aWxsIHRoaW5rIHRoYXQgaXQncyBub3QgZG9uZSBhbmQgd29uJ3QgcHJvY2VzcyB0aGlzIHByb3Bl
cnR5CiAgICAgfQogCiAgICAgcmV0dXJuIHBhcnNlZFZhbHVlOwpAQCAtMTgyOSw3ICsxODI5LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBp
bnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgIGZvciAoaSA9IDA7ICFmb3Vu
ZCAmJiBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFBy
b3BlcnR5W2ldKSB7CkBAIC0xODYwLDcgKzE4NjAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VG
aWxsU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bVBy
bwogICAgICAgICBpZiAoIWZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICAKKwogICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhl
IGluaXRpYWwgdmFsdWUuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewogICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CkBAIC0xODc1LDcgKzE4NzUsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0IGlu
dCogcHJvcGVydGllcywgaW50IG51bVBybwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQotICAgIAorCiAgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQu
CiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykgewogICAgICAgICBpZiAo
cHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbikgewpAQCAtMTg5
Niw3ICsxODk2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJv
cElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIHJlcGVhdFlWYWx1ZS5yZWxlYXNl
KCksIGltcG9ydGFudCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYWRkUHJvcGVydHko
cHJvcGVydGllc1tpXSwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKLSAgICAgICAg
ICAgIAorCiAgICAgICAgIC8vIEFkZCBpbiBjbGlwIHZhbHVlcyB3aGVuIHdlIGhpdCB0aGUgY29y
cmVzcG9uZGluZyBvcmlnaW4gcHJvcGVydHkuCiAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09
IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbikKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5QmFja2dyb3VuZENsaXAsIGNsaXBWYWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7
CkBAIC0xOTM0LDEyICsxOTM0LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNo
b3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGUgfTsKICAgICBj
b25zdCBpbnQgbnVtUHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9w
ZXJ0aWVzWzBdKTsKLSAgICAKKwogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uKTsKIAogICAgIGJvb2wgcGFyc2VkUHJvcGVydHlbbnVtUHJv
cGVydGllc10gPSB7IGZhbHNlIH07IC8vIGNvbXBpbGVyIHdpbGwgcmVwZWF0IGZhbHNlIGFzIG5l
Y2Vzc2FyeQogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW251bVByb3BlcnRpZXNdOwotICAg
IAorCiAgICAgaW50IGk7CiAgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKICAg
ICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CkBAIC0x
OTU0LDcgKzE5NTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQo
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51
bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkg
ewpAQCAtMTk3MSwxNyArMTk3MSwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25T
aG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmICghZm91bmQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWlu
aW5nIHByb3BlcnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICBmb3IgKGkgPSAwOyBp
IDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0p
CiAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxWYWx1
ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm93IGFkZCBhbGwg
b2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7IGkrKykKICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsdWVzW2ld
LnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xOTkyLDEyICsxOTkyLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9y
dGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXkgfTsKICAgICBj
b25zdCBpbnQgbnVtUHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9w
ZXJ0aWVzWzBdKTsKLSAgICAKKwogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1By
b3BlcnR5V2Via2l0VHJhbnNpdGlvbik7CiAKICAgICBib29sIHBhcnNlZFByb3BlcnR5W251bVBy
b3BlcnRpZXNdID0geyBmYWxzZSB9OyAvLyBjb21waWxlciB3aWxsIHJlcGVhdCBmYWxzZSBhcyBu
ZWNlc3NhcnkKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlc1tudW1Qcm9wZXJ0aWVzXTsKLSAg
ICAKKwogICAgIGludCBpOwogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CiAg
ICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwpAQCAt
MjAxMiw3ICsyMDEyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFu
ZChib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAg
ICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwg
bnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ld
KSB7CkBAIC0yMDI5LDE3ICsyMDI5LDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRp
b25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmICghZm91bmQpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVt
YWluaW5nIHByb3BlcnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICBmb3IgKGkgPSAw
OyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlb
aV0pCiAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxW
YWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm93IGFkZCBh
bGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7IGkrKykKICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsdWVz
W2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yMDY5LDcgKzIwNjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaG9ydGhhbmQoaW50
IHByb3BJZCwgY29uc3QgaW50ICpwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydAogICAgICAgICBp
ZiAoIWZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAg
IC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFs
dWUuCiAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRydWU7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKQEAgLTIwOTAsOSArMjA5MCw5IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZTRWYWx1ZXMoaW50IHByb3BJZCwgY29uc3QgaW50ICpwcm9wZXJ0aWVzLCAg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgICogc2Vjb25kLCBhbmQgdGhlIGJvdHRvbSBpcyBzZXQgdG8g
dGhlIHRoaXJkLiBJZiB0aGVyZSBhcmUgZm91ciB2YWx1ZXMsIHRoZXkgYXBwbHkgdG8gdGhlIHRv
cCwKICAgICAgKiByaWdodCwgYm90dG9tLCBhbmQgbGVmdCwgcmVzcGVjdGl2ZWx5LgogICAgICAq
LwotICAgIAorCiAgICAgaW50IG51bSA9IGluU2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxpc3Qt
PnNpemUoKTsKLSAgICAKKwogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7
CiAKICAgICAvLyB0aGUgb3JkZXIgaXMgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0CkBAIC0yMTM4
LDcgKzIxMzgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKGludCBwcm9wSWQsIGNv
bnN0IGludCAqcHJvcGVydGllcywgIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTIzMTksNyArMjMxOSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VBdHRyKENTU1BhcnNlclZhbHVlTGlzdCogYXJncykKIAogICAgIGlmIChkb2N1bWVudCgpICYm
IGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIGF0dHJOYW1lID0gYXR0ck5h
bWUubG93ZXIoKTsKLSAgICAKKwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KGF0dHJOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FUVFIpOwogfQogCkBAIC0yMzgzLDI5
ICsyMzgzLDI5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9z
aXRpb25YWShib29sJiB4Rm91bmQsIGJvb2wmIHlGb3VuZCkKICAgICBpZiAodmFsaWRVbml0KG1f
dmFsdWVMaXN0LT5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLT5mVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQp
OwotICAgICAgICAgICAgICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZUZpbGxQb3NpdGlvbihSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NW
YWx1ZT4mIHZhbHVlMikKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOwotICAgIAorCiAgICAgLy8gUGFyc2UgdGhlIGZpcnN0IHZhbHVlLiAgV2Un
cmUganVzdCBtYWtpbmcgc3VyZSB0aGF0IGl0IGlzIG9uZSBvZiB0aGUgdmFsaWQga2V5d29yZHMg
b3IgYSBwZXJjZW50YWdlL2xlbmd0aC4KICAgICBib29sIHZhbHVlMUlzWCA9IGZhbHNlLCB2YWx1
ZTFJc1kgPSBmYWxzZTsKICAgICB2YWx1ZTEgPSBwYXJzZUZpbGxQb3NpdGlvblhZKHZhbHVlMUlz
WCwgdmFsdWUxSXNZKTsKICAgICBpZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuOwotICAgIAor
CiAgICAgLy8gSXQgb25seSB0YWtlcyBvbmUgdmFsdWUgZm9yIGJhY2tncm91bmQtcG9zaXRpb24g
dG8gYmUgY29ycmVjdGx5IHBhcnNlZCBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGEgc2hvcnRoYW5k
IChzaW5jZSB3ZQogICAgIC8vIGNhbiBhc3N1bWUgdGhhdCBhbnkgb3RoZXIgdmFsdWVzIGJlbG9u
ZyB0byB0aGUgcmVzdCBvZiB0aGUgc2hvcnRoYW5kKS4gIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEg
c2hvcnRoYW5kLCB0aG91Z2gsIHRoZQogICAgIC8vIHZhbHVlIHdhcyBleHBsaWNpdGx5IHNwZWNp
ZmllZCBmb3Igb3VyIHByb3BlcnR5LgogICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAKKwogICAgIC8vIEZpcnN0IGNoZWNrIGZvciB0aGUgY29tbWEuICBJZiBzbywgd2UgYXJl
IGZpbmlzaGVkIHBhcnNpbmcgdGhpcyB2YWx1ZSBvciB2YWx1ZSBwYWlyLgogICAgIGlmICh2YWx1
ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlW
YWx1ZSA9PSAnLCcpCiAgICAgICAgIHZhbHVlID0gMDsKLSAgICAKKwogICAgIGJvb2wgdmFsdWUy
SXNYID0gZmFsc2UsIHZhbHVlMklzWSA9IGZhbHNlOwogICAgIGlmICh2YWx1ZSkgewogICAgICAg
ICB2YWx1ZTIgPSBwYXJzZUZpbGxQb3NpdGlvblhZKHZhbHVlMklzWCwgdmFsdWUySXNZKTsKQEAg
LTI0MTgsNyArMjQxOCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbihSZWZQ
dHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoIXZhbHVlMikKICAgICAgICAgLy8g
T25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZC4gIElmIHRoYXQgdmFsdWUgd2FzIG5vdCBhIGtl
eXdvcmQsIHRoZW4gaXQgc2V0cyB0aGUgeCBwb3NpdGlvbiwgYW5kIHRoZSB5IHBvc2l0aW9uCiAg
ICAgICAgIC8vIGlzIHNpbXBseSA1MCUuICBUaGlzIGlzIG91ciBkZWZhdWx0LgpAQCAtMjQ0MSwx
MyArMjQ0MSwxMyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NW
YWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdQogICAgICAgICB2YWx1ZTIgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vUmVwZWF0KTsKICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0gCisgICAg
fQogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdFkpIHsKICAgICAgICAgbV9pbXBsaWNpdFNo
b3J0aGFuZCA9IHRydWU7CiAgICAgICAgIHZhbHVlMSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKENTU1ZhbHVlTm9SZXBlYXQpOwogICAgICAgICB2YWx1ZTIgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVJlcGVhdCk7CiAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybjsgICAgCisgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9S
ZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKQogICAg
ICAgICB2YWx1ZTEgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CkBA
IC0yNDY0LDExICsyNDY0LDExIEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxSZXBlYXQoUmVm
UHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1CiAKICAgICBpZiAo
dmFsdWUpCiAgICAgICAgIGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgCisK
ICAgICBpZiAodmFsdWUgJiYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVl
Tm9SZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKSkg
ewogICAgICAgICB2YWx1ZTIgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihp
ZCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfSBlbHNlIHsgCisgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gSWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZCwgdmFsdWUy
IGlzIHRoZSBzYW1lIGFzIHZhbHVlMS4KICAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRy
dWU7CiAgICAgICAgIHZhbHVlMiA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUxLmdldCgpKS0+Z2V0SWRlbnQo
KSk7CkBAIC0yNTE2LDcgKzI1MTYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlRmlsbFNpemUoaW50IHByb3BJZCwgYm9vbCYgYWxsb3dDb21tYSkKICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShQYWlyOjpjcmVhdGUocGFyc2VkVmFsdWUxLnJlbGVh
c2UoKSwgcGFyc2VkVmFsdWUyLnJlbGVhc2UoKSkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VGaWxsUHJvcGVydHkoaW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIAor
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElk
MSwgaW50JiBwcm9wSWQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4mIHJldFZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgcmV0VmFsdWUyKQogewog
ICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsKQEAgLTI1MjQsOSArMjUyNCw5IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEs
IGludCYgcHJvcElkMiwKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsOwogICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWU7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTI7Ci0gICAgCisKICAgICBi
b29sIGFsbG93Q29tbWEgPSBmYWxzZTsKLSAgICAKKwogICAgIHJldFZhbHVlMSA9IHJldFZhbHVl
MiA9IDA7CiAgICAgcHJvcElkMSA9IHByb3BJZDsKICAgICBwcm9wSWQyID0gcHJvcElkOwpAQCAt
MjU0Nyw3ICsyNTQ3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBw
cm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLAogICAgIHdoaWxlICgodmFsID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFs
dWU7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlMjsKLSAgICAgICAgCisKICAg
ICAgICAgaWYgKGFsbG93Q29tbWEpIHsKICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IHZhbC0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjQxLDE3ICsyNjQxLDE3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElk
MiwKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAodmFs
dWUgJiYgIXZhbHVlcykgewogICAgICAgICAgICAgICAgIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZCh2
YWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIGlmICh2YWx1ZTIgJiYgIXZhbHVlczIpIHsKICAgICAgICAgICAgICAgICB2YWx1ZXMyID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgICAgIHZh
bHVlczItPmFwcGVuZCh2YWx1ZTIucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAodmFsdWVzKQogICAgICAgICAgICAgICAgIHZhbHVlcy0+
YXBwZW5kKGN1cnJWYWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjY2Myw3
ICsyNjYzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQs
IGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZTIg
PSBjdXJyVmFsdWUyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICAvLyBXaGVuIHBhcnNpbmcgYW55IGZpbGwgc2hvcnRoYW5kIHByb3BlcnR5
LCB3ZSBsZXQgaXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCiAgICAgICAg
IC8vIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIChpblNob3J0aGFuZCgpKQpAQCAtMjc5NywxMSAr
Mjc5NywxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
VGltaW5nRnVuY3Rpb24oKQogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2UgfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlTGluZWFyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlT3V0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJ
bk91dCkKICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KHZhbHVlLT5pZCk7Ci0gICAgCisKICAgICAvLyBXZSBtdXN0IGJlIGEgZnVuY3Rpb24uCiAgICAg
aWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCisKICAgICAvLyBUaGUgb25seSB0aW1pbmcgZnVuY3Rpb24gd2UgYWNjZXB0
IGZvciBub3cgaXMgYSBjdWJpYyBiZXppZXIgZnVuY3Rpb24uICA0IHBvaW50cyBtdXN0IGJlIHNw
ZWNpZmllZC4KICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24t
PmFyZ3M7CiAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJjdWJpYy1iZXppZXIoIikgfHwgIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDcpCkBAIC0yODI4
LDcgKzI4MjgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShpbnQg
cHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bDsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwogICAgIGJvb2wgYWxsb3dDb21tYSA9IGZh
bHNlOwotICAgIAorCiAgICAgcmVzdWx0ID0gMDsKIAogICAgIHdoaWxlICgodmFsID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkpIHsKQEAgLTI4OTAsMjkgKzI4OTAsMjkgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQW5pbWF0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYg
cmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWVzKSB7CiAg
ICAgICAgICAgICAgICAgdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRl
ZCgpOwogICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2UoKSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHZhbHVlcykKICAg
ICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZSgpKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGN1cnJWYWx1ZS5yZWxlYXNlKCk7
Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYWxsb3dDb21tYSA9IHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgLy8gV2hlbiBwYXJzaW5nIHRoZSAndHJhbnNpdGlvbicg
c2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQgaXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRoZSBsaXN0
cyBmb3IgYWxsCiAgICAgICAgIC8vIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIChpblNob3J0aGFu
ZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHZhbHVlcyAm
JiB2YWx1ZXMtPmxlbmd0aCgpKSB7CiAgICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWxlYXNlKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjk0NSw3ICsyOTQ1LDcgQEAgc3RhdGljIENTU1Bh
cnNlclZhbHVlKiBza2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihDU1NQYXJzZXJWYWx1ZUxpc3Qg
KmFyZ3MpCiBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogewogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKIAogICAgIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7CkBAIC0yOTU0LDcgKzI5NTQsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB2YWxp
ZDsKICAgICB9Ci0gICAgICAgIAorCiAgICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gZmlyc3RS
ZWdpb24gPSBEYXNoYm9hcmRSZWdpb246OmNyZWF0ZSgpOwogICAgIERhc2hib2FyZFJlZ2lvbiog
cmVnaW9uID0gMDsKIApAQCAtMjk2NiwxMiArMjk2NiwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VEYXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAg
ICAgcmVnaW9uLT5tX25leHQgPSBuZXh0UmVnaW9uOwogICAgICAgICAgICAgcmVnaW9uID0gbmV4
dFJlZ2lvbi5nZXQoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodmFsdWUt
PnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAg
ICAgICAgIC8vIENvbW1hcyBjb3VudCBhcyB2YWx1ZXMsIHNvIGFsbG93OgogICAgICAgICAvLyBk
YXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlLCB0LCByLCBiLCBsKSBvciBkYXNoYm9hcmQtcmVn
aW9uKGxhYmVsIHR5cGUgdCByIGIgbCkKICAgICAgICAgLy8gZGFzaGJvYXJkLXJlZ2lvbihsYWJl
bCwgdHlwZSwgdCwgciwgYiwgbCkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBlIHQgciBi
IGwpCkBAIC0yOTgzLDIxICsyOTgzLDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2Fy
ZFJlZ2lvbnMoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaW50IG51bUFyZ3MgPSBhcmdzLT5zaXplKCk7CiAgICAgICAgIGlmICgobnVtQXJncyAhPSBE
QVNIQk9BUkRfUkVHSU9OX05VTV9QQVJBTUVURVJTICYmIG51bUFyZ3MgIT0gKERBU0hCT0FSRF9S
RUdJT05fTlVNX1BBUkFNRVRFUlMqMi0xKSkgJiYKICAgICAgICAgICAgIChudW1BcmdzICE9IERB
U0hCT0FSRF9SRUdJT05fU0hPUlRfTlVNX1BBUkFNRVRFUlMgJiYgbnVtQXJncyAhPSAoREFTSEJP
QVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVSUyoyLTEpKSkgewogICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
KwogICAgICAgICAvLyBGaXJzdCBhcmcgaXMgYSBsYWJlbC4KICAgICAgICAgQ1NTUGFyc2VyVmFs
dWUqIGFyZyA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICAgICAgaWYgKGFyZy0+dW5pdCAhPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIHJl
Z2lvbi0+bV9sYWJlbCA9IGFyZy0+c3RyaW5nOwogCiAgICAgICAgIC8vIFNlY29uZCBhcmcgaXMg
YSB0eXBlLgpAQCAtMzAxNiwxMyArMzAxNiwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNo
Ym9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
KwogICAgICAgICByZWdpb24tPm1fZ2VvbWV0cnlUeXBlID0gYXJnLT5zdHJpbmc7CiAKICAgICAg
ICAgaWYgKG51bUFyZ3MgPT0gREFTSEJPQVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVSUyB8
fCBudW1BcmdzID09IChEQVNIQk9BUkRfUkVHSU9OX1NIT1JUX05VTV9QQVJBTUVURVJTKjItMSkp
IHsKICAgICAgICAgICAgIC8vIFRoaXMgb3JpZ2luYWxseSB1c2VkIENTU1ZhbHVlSW52YWxpZCBi
eSBhY2NpZGVudC4gSXQgbWlnaHQgYmUgbW9yZSBsb2dpY2FsIHRvIHVzZSBzb21ldGhpbmcgZWxz
ZS4KICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICAgICAg
ICAgICAgICAKKwogICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKICAgICAgICAg
ICAgIHJlZ2lvbi0+c2V0UmlnaHQoYW1vdW50KTsKICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Qm90
dG9tKGFtb3VudCk7CkBAIC0zMDM3LDExICszMDM3LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZURhc2hib2FyZFJlZ2lvbnMoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICAgICAgdmFsaWQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQoYXJnLCBG
TGVuZ3RoLCBtX3N0cmljdCk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVl
QXV0byA/CiAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlQXV0bykgOgogICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGFyZy0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykg
YXJnLT51bml0KTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAo
aSA9PSAwKQogICAgICAgICAgICAgICAgICAgICByZWdpb24tPnNldFRvcChhbW91bnQpOwogICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gMSkKQEAgLTMwNjEsNyArMzA2MSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAKICAgICBpZiAodmFsaWQpCiAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShmaXJzdFJlZ2lvbi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwot
ICAgICAgICAKKwogICAgIHJldHVybiB2YWxpZDsKIH0KIApAQCAtMzA3NCw3ICszMDc0LDcgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50KENTU1Bh
cnNlclZhbHVlTGlzdCogYXJncywgYm8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFjb3Vu
dGVycyAmJiBudW1BcmdzICE9IDEgJiYgbnVtQXJncyAhPSAzKQogICAgICAgICByZXR1cm4gMDsK
LSAgICAKKwogICAgIENTU1BhcnNlclZhbHVlKiBpID0gYXJncy0+Y3VycmVudCgpOwogICAgIGlm
IChpLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMzA4NywxMSArMzA4NywxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogICAg
ICAgICBpID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgfHwgaS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAKKwogICAgICAgICBpID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoaS0+
dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAKKwogICAgICAgICBzZXBhcmF0b3IgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKGktPnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGktPnVuaXQp
OwogICAgIH0KIApAQCAtMzEwMiwxMSArMzEwMiwxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBi
bwogICAgIGVsc2UgewogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3Bl
cmF0b3IgfHwgaS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAKKwogICAgICAgICBpID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoaS0+dW5pdCAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIAorCiAgICAgICAgIHNob3J0IGxzID0gMDsKICAgICAgICAgaWYgKGktPmlkID09IENTU1Zh
bHVlTm9uZSkKICAgICAgICAgICAgIGxzID0gQ1NTVmFsdWVLYXRha2FuYUlyb2hhIC0gQ1NTVmFs
dWVEaXNjICsgMTsKQEAgLTMxMjUsNyArMzEyNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNo
YXBlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzOwotICAgIAorCiAgICAgaWYgKCFlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZWN0KCIpIHx8ICFhcmdzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTMyNjYsNyArMzI2Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFmb250LT5saW5lSGVpZ2h0
KQogICAgICAgICBmb250LT5saW5lSGVpZ2h0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoQ1NTVmFsdWVOb3JtYWwpOwogCkBAIC0zMzIxLDcgKzMzMjEsNyBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaWYgKCFuZXh0VmFsdWUpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzUxMCw3ICszNTEw
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAgICAgICAgYWxs
b3dGb3JtYXQgPSB0cnVlOwogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAg
ICB9IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKLSAg
ICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gYWxsb3dlZCBmdW5jdGlvbnM6IGxvY2FsKCkgYW5k
IGZvcm1hdCgpLiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gYWxs
b3dlZCBmdW5jdGlvbnM6IGxvY2FsKCkgYW5kIGZvcm1hdCgpLgogICAgICAgICAgICAgQ1NTUGFy
c2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsLT5mdW5jdGlvbi0+YXJnczsKICAgICAgICAgICAgIGlm
IChhcmdzICYmIGFyZ3MtPnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJsb2NhbCgiKSAmJiAhZXhwZWN0Q29t
bWEpIHsKQEAgLTM1MzUsNyArMzUzNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
U3JjKCkKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgIAorCiAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKICAgICAg
ICAgICAgIHZhbHVlcy0+YXBwZW5kKHBhcnNlZFZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgIGVs
c2UgewpAQCAtMzU0NCw3ICszNTQ0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VT
cmMoKQogICAgICAgICB9CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAg
IAorCiAgICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkgJiYgIWZhaWxlZCkgewogICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVNyYywgdmFsdWVzLnJlbGVhc2UoKSwgbV9pbXBvcnRhbnQpOwog
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwpAQCAtMzY1MSw3ICszNjUxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIHBhcnNlSW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciog
ZW5kLCBVQ2hhciB0ZXJtaW4KICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKICAg
ICBpbnQgbG9jYWxWYWx1ZSA9IDA7CiAgICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwotICAgIHdo
aWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0NTU1doaXRlc3BhY2UoKmN1cnJlbnQpKSAKKyAgICB3
aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNDU1NXaGl0ZXNwYWNlKCpjdXJyZW50KSkKICAgICAg
ICAgY3VycmVudCsrOwogICAgIGlmIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA9PSAnLScp
IHsKICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwpAQCAtMzY5Myw3ICszNjkzLDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9v
bCBzdHJpY3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJnYiA9IG1ha2VS
R0IocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gICAgICAg
IAorICAgIH0KICAgICAvLyBUcnkgbmFtZWQgY29sb3JzLgogICAgIENvbG9yIHRjOwogICAgIHRj
LnNldE5hbWVkQ29sb3IobmFtZSk7CkBAIC0zOTcwLDcgKzM5NzAsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VTaGFkb3coaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAv
LyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSB2YWx1ZXMuCiAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcElkKSA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYgICAgICAgICAgICAKKyNlbmRpZgogICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGdv
b2QuICBDb21taXQgaXQuCiAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KHZhbCwgRkxlbmd0aCwgdHJ1ZSkpIHsKQEAgLTQwMDMs
NyArNDAwMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgICAgIGlmICghcGFyc2VkQ29sb3IgfHwgIWNvbnRleHQuYWxs
b3dDb2xvcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgdmFsdWUgaXMg
bm90IGEgY29sb3Igb3IgbGVuZ3RoIGFuZCBpcyBpbnZhbGlkIG9yCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQgYSBjb2xvciBpc24ndCBhbGxvd2Vk
IGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY29udGV4dC5jb21t
aXRDb2xvcihwYXJzZWRDb2xvci5yZWxlYXNlKCkpOwogICAgICAgICB9CiAKQEAgLTQwMjUsNyAr
NDAyNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoaW50IHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiB7CiAgICAgLy8gYm94LXJlZmxlY3Q6IDxkaXJlY3Rpb24+IDxvZmZzZXQ+IDxt
YXNrPgotICAgIAorCiAgICAgLy8gRGlyZWN0aW9uIGNvbWVzIGZpcnN0LgogICAgIENTU1BhcnNl
clZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIENTU1JlZmxlY3Rpb25E
aXJlY3Rpb24gZGlyZWN0aW9uOwpAQCAtNDA4NSw3ICs0MDg1LDcgQEAgc3RydWN0IEJvcmRlcklt
YWdlUGFyc2VDb250ZXh0IHsKICAgICAsIG1faG9yaXpvbnRhbFJ1bGUoMCkKICAgICAsIG1fdmVy
dGljYWxSdWxlKDApCiAgICAge30KLSAgICAKKwogICAgIGJvb2wgYWxsb3dCcmVhaygpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dCcmVhazsgfQogICAgIGJvb2wgYWxsb3dOdW1iZXIoKSBjb25zdCB7
IHJldHVybiBtX2FsbG93TnVtYmVyOyB9CiAgICAgYm9vbCBhbGxvd1NsYXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvd1NsYXNoOyB9CkBAIC00MTA2LDcgKzQxMDYsNyBAQCBzdHJ1Y3QgQm9yZGVy
SW1hZ2VQYXJzZUNvbnRleHQgewogICAgICAgICAgICAgQVNTRVJUKCFtX2xlZnQpOwogICAgICAg
ICAgICAgbV9sZWZ0ID0gdmFsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fYWxs
b3dCcmVhayA9IG1fYWxsb3dTbGFzaCA9IG1fYWxsb3dSdWxlID0gdHJ1ZTsKICAgICAgICAgbV9h
bGxvd051bWJlciA9ICFtX2xlZnQ7CiAgICAgfQpAQCAtNDE0OSw3ICs0MTQ5LDcgQEAgc3RydWN0
IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fbGVm
dCkKICAgICAgICAgICAgICBtX2xlZnQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG1fcmln
aHQtPmdldERvdWJsZVZhbHVlKCksIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fcmln
aHQtPnByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgICAgICAgICAgCisKICAgICAgICAgLy8gTm93IGJ1
aWxkIGEgcmVjdCB2YWx1ZSB0byBob2xkIGFsbCBmb3VyIG9mIG91ciBwcmltaXRpdmUgdmFsdWVz
LgogICAgICAgICBSZWZQdHI8UmVjdD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgICAgICBy
ZWN0LT5zZXRUb3AobV90b3ApOwpAQCAtNDE2MCw3ICs0MTYwLDcgQEAgc3RydWN0IEJvcmRlcklt
YWdlUGFyc2VDb250ZXh0IHsKICAgICAgICAgLy8gRmlsbCBpbiBTVFJFVENIIGFzIHRoZSBkZWZh
dWx0IGlmIGl0IHdhc24ndCBzcGVjaWZpZWQuCiAgICAgICAgIGlmICghbV9ob3Jpem9udGFsUnVs
ZSkKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFJ1bGUgPSBDU1NWYWx1ZVN0cmV0Y2g7Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAvLyBUaGUgdmVydGljYWwgcnVsZSBzaG91bGQgbWF0Y2ggdGhl
IGhvcml6b250YWwgcnVsZSBpZiB1bnNwZWNpZmllZC4KICAgICAgICAgaWYgKCFtX3ZlcnRpY2Fs
UnVsZSkKICAgICAgICAgICAgIG1fdmVydGljYWxSdWxlID0gbV9ob3Jpem9udGFsUnVsZTsKQEAg
LTQxODUsMjUgKzQxODUsMjUgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKICAg
ICAgICAgLy8gTWFrZSBvdXIgbmV3IGJvcmRlciBpbWFnZSB2YWx1ZSBub3cuCiAgICAgICAgIHJl
dHVybiBDU1NCb3JkZXJJbWFnZVZhbHVlOjpjcmVhdGUobV9pbWFnZSwgcmVjdC5yZWxlYXNlKCks
IG1faG9yaXpvbnRhbFJ1bGUsIG1fdmVydGljYWxSdWxlKTsKICAgICB9Ci0gICAgCisKICAgICBi
b29sIG1fYWxsb3dCcmVhazsKICAgICBib29sIG1fYWxsb3dOdW1iZXI7CiAgICAgYm9vbCBtX2Fs
bG93U2xhc2g7CiAgICAgYm9vbCBtX2FsbG93V2lkdGg7CiAgICAgYm9vbCBtX2FsbG93UnVsZTsK
LSAgICAKKwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9pbWFnZTsKIAogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbV90b3A7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Jp
Z2h0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207CiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci0gICAgCisKICAgICBDU1NQYXJzZXJWYWx1ZSog
bV9ib3JkZXJUb3A7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIG1fYm9yZGVyUmlnaHQ7CiAgICAgQ1NT
UGFyc2VyVmFsdWUqIG1fYm9yZGVyQm90dG9tOwogICAgIENTU1BhcnNlclZhbHVlKiBtX2JvcmRl
ckxlZnQ7Ci0gICAgCisKICAgICBpbnQgbV9ob3Jpem9udGFsUnVsZTsKICAgICBpbnQgbV92ZXJ0
aWNhbFJ1bGU7CiB9OwpAQCAtNDI0Myw3ICs0MjQzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Qm9yZGVySW1hZ2UoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQsIFJlZlB0cjxDU1NWYWx1ZT4m
IHIKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwog
ICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgcHJvcElkICE9IENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySW1hZ2UpIHsKICAgICAgICAgLy8gQWxsb3cgdGhlIHNsaWNlcyB0byBiZSBvbWl0
dGVkIGZvciBpbWFnZXMgdGhhdCBkb24ndCBmaXQgdG8gYSBib3JkZXIuICBXZSBqdXN0IHNldCB0
aGUgc2xpY2VzIHRvIGJlIDAuCiAgICAgICAgIGNvbnRleHQubV90b3AgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKQEAgLTQyNTUs
NyArNDI1NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+JiByCiAgICAgICAgIHJlc3VsdCA9IGNv
bnRleHQuY29tbWl0Qm9yZGVySW1hZ2UodGhpcywgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC00MzM0LDcg
KzQzMzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVyKGludCBwcm9wSWQsIGludCBk
ZWZhdWx0VmFsdWUsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
bGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvdW50ZXJOYW1lOwotICAgIAorCiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
CiAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKQEAgLTQzNjEsNyArNDM2MSw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUNvdW50ZXIoaW50IHByb3BJZCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAg
aWYgKGxpc3QtPmxlbmd0aCgpID4gMCkgewogICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGxp
c3QucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzNzQs
MTEgKzQzNzQsMTEgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
R3JhZGllbnRQb2ludChDU1NQYXJzZXJWYWx1ZSogYSwgYm9vbAogewogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmVzdWx0OwogICAgIGlmIChhLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJp
bmcsICJsZWZ0IikgJiYgaG9yaXpvbnRhbCkgfHwgCi0gICAgICAgICAgICAoZXF1YWxJZ25vcmlu
Z0Nhc2UoYS0+c3RyaW5nLCAidG9wIikgJiYgIWhvcml6b250YWwpKQorICAgICAgICBpZiAoKGVx
dWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgImxlZnQiKSAmJiBob3Jpem9udGFsKQorICAgICAg
ICAgICAgfHwgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgInRvcCIpICYmICFob3Jpem9u
dGFsKSkKICAgICAgICAgICAgIHJlc3VsdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC4s
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIGVsc2UgaWYgKChl
cXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJyaWdodCIpICYmIGhvcml6b250YWwpIHx8Ci0g
ICAgICAgICAgICAgICAgIChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJib3R0b20iKSAm
JiAhaG9yaXpvbnRhbCkpCisgICAgICAgIGVsc2UgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShhLT5z
dHJpbmcsICJyaWdodCIpICYmIGhvcml6b250YWwpCisgICAgICAgICAgICAgICAgIHx8IChlcXVh
bElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJib3R0b20iKSAmJiAhaG9yaXpvbnRhbCkpCiAgICAg
ICAgICAgICByZXN1bHQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEwMC4sIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGEtPnN0cmluZywgImNlbnRlciIpKQogICAgICAgICAgICAgcmVzdWx0ID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSg1MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSk7CkBAIC00MzkxLDI3ICs0MzkxLDI3IEBAIHN0YXRpYyBib29sIHBhcnNlR3JhZGllbnRDb2xv
clN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSogYSwgQ1NTR3JhZGllbnRDCiB7CiAg
ICAgaWYgKGEtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9u
LT5uYW1lLCAiZnJvbSgiKSAmJgogICAgICAgICAhZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rp
b24tPm5hbWUsICJ0bygiKSAmJgogICAgICAgICAhZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rp
b24tPm5hbWUsICJjb2xvci1zdG9wKCIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
ICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBhLT5mdW5jdGlvbi0+YXJnczsKICAgICBp
ZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIpIHx8IAotICAgICAgICBlcXVhbEln
bm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+bmFtZSwgInRvKCIpKSB7CisKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIpCisgICAgICAgIHx8IGVxdWFs
SWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAidG8oIikpIHsKICAgICAgICAgLy8gVGhl
ICJmcm9tIiBhbmQgInRvIiBzdG9wcyBleHBlY3QgMSBhcmd1bWVudC4KICAgICAgICAgaWYgKGFy
Z3MtPnNpemUoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwog
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIp
KQogICAgICAgICAgICAgc3RvcC5tX3N0b3AgPSAwLmY7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHN0b3AubV9zdG9wID0gMS5mOwotICAgICAgICAKKwogICAgICAgICBpbnQgaWQgPSBhcmdz
LT5jdXJyZW50KCktPmlkOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0IHx8
IChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9
PSBDU1NWYWx1ZU1lbnUpCiAgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CkBAIC00NDIwLDEyICs0NDIwLDEyIEBAIHN0YXRp
YyBib29sIHBhcnNlR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1
ZSogYSwgQ1NTR3JhZGllbnRDCiAgICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoZSAiY29sb3Itc3RvcCIg
ZnVuY3Rpb24gZXhwZWN0cyAzIGFyZ3VtZW50cy4KICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
YS0+ZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKSB7CiAgICAgICAgIGlmIChhcmdzLT5z
aXplKCkgIT0gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAg
ICAgQ1NTUGFyc2VyVmFsdWUqIHN0b3BBcmcgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgICAgIGlm
IChzdG9wQXJnLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAg
ICAgICAgICAgIHN0b3AubV9zdG9wID0gKGZsb2F0KXN0b3BBcmctPmZWYWx1ZSAvIDEwMC5mOwpA
QCAtNDQzNyw3ICs0NDM3LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VHcmFkaWVudENvbG9yU3RvcChD
U1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDU1NHcmFkaWVudEMKICAgICAgICAgc3Rv
cEFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKHN0b3BBcmctPnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yIHx8IHN0b3BBcmctPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICBzdG9wQXJnID0gYXJncy0+
bmV4dCgpOwogICAgICAgICBpbnQgaWQgPSBzdG9wQXJnLT5pZDsKICAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlV2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1Zh
bHVlV2luZG93dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQpAQCAtNDQ1NCwxMiArNDQ1NCwx
MiBAQCBzdGF0aWMgYm9vbCBwYXJzZUdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciogcCwgQ1NT
UGFyc2VyVmFsdWUqIGEsIENTU0dyYWRpZW50QwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGll
bnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQpCiB7CiAgICAgUmVmUHRyPENTU0dyYWRpZW50
VmFsdWU+IHJlc3VsdCA9IENTU0dyYWRpZW50VmFsdWU6OmNyZWF0ZSgpOwotICAgIAorCiAgICAg
Ly8gV2FsayB0aGUgYXJndW1lbnRzLgogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzOwogICAgIGlmICghYXJncyB8fCBh
cmdzLT5zaXplKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgLy8g
VGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBncmFkaWVudCB0eXBlLiAgSXQgaXMgYW4gaWRlbnRp
Zmllci4KICAgICBDU1NQYXJzZXJWYWx1ZSogYSA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICBpZiAo
IWEgfHwgYS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQpAQCAtNDQ3MCwx
MiArNDQ3MCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8Q1NTVmFs
dWU+JiBncmFkaWVudCkKICAgICAgICAgcmVzdWx0LT5zZXRUeXBlKENTU1JhZGlhbEdyYWRpZW50
KTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIC8vIENvbW1h
LgogICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGEtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKKwogICAgIC8vIE5leHQgY29tZXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0
aGUgZ3JhZGllbnQgYXMgYW4geCB5IHBhaXIuICBUaGVyZSBpcyBubwogICAgIC8vIGNvbW1hIGJl
dHdlZW4gdGhlIHggYW5kIHRoZSB5IHZhbHVlcy4KICAgICAvLyBGaXJzdCBYLiAgSXQgY2FuIGJl
IGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KQEAgLTQ0ODYsNyArNDQ4Niw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQog
ICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQtPnNldEZp
cnN0WChwb2ludC5yZWxlYXNlKCkpOwotICAgIAorCiAgICAgLy8gRmlyc3QgWS4gIEl0IGNhbiBi
ZSB0b3AsIGJvdHRvbSwgbnVtYmVyIG9yIHBlcmNlbnQuCiAgICAgYSA9IGFyZ3MtPm5leHQoKTsK
ICAgICBpZiAoIWEpCkBAIC00NDk1LDI1ICs0NDk1LDI1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQogICAgIGlmICghcG9pbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQtPnNldEZpcnN0WShwb2ludC5yZWxlYXNl
KCkpOwotICAgIAorCiAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHBvaW50LgogICAgIGEg
PSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yIHx8IGEtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIAorCiAgICAgLy8gRm9yIHJhZGlhbCBncmFkaWVudHMgb25seSwgd2Ugbm93IGV4
cGVjdCBhIG51bWVyaWMgcmFkaXVzLgogICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBDU1NSYWRp
YWxHcmFkaWVudCkgewogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWEg
fHwgYS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFJhZGl1cyhDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGEtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1cy4K
ICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGEtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLy8gTmV4dCBpcyB0aGUgZW5kaW5n
IHBvaW50IGZvciB0aGUgZ3JhZGllbnQgYXMgYW4geCwgeSBwYWlyLgogICAgIC8vIFNlY29uZCBY
LiAgSXQgY2FuIGJlIGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KICAgICBhID0gYXJn
cy0+bmV4dCgpOwpAQCAtNDUyMyw3ICs0NTIzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3Jh
ZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQpCiAgICAgaWYgKCFwb2ludCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC0+c2V0U2Vjb25kWChwb2ludC5yZWxlYXNlKCkp
OwotICAgIAorCiAgICAgLy8gU2Vjb25kIFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJl
ciBvciBwZXJjZW50LgogICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFhKQpAQCAtNDUz
OSw3ICs0NTM5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnQoUmVmUHRyPENTU1Zh
bHVlPiYgZ3JhZGllbnQpCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmICgh
YSB8fCBhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0g
JywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBhID0g
YXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWEgfHwgYS0+dW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1NTIsMjIg
KzQ1NTIsMjIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVl
PiYgZ3JhZGllbnQpCiAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5l
eHQgc3RvcC4KICAgICAgICAgaWYgKGEtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9y
IHx8IGEtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAorCiAgICAgICAgIC8vIE5vdyBleGFtaW5lIHRoZSBzdG9wIGl0c2VsZi4KICAgICAgICAgYSA9
IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKKwogICAgICAgICAvLyBUaGUgZnVuY3Rpb24gbmFtZSBuZWVkcyB0byBiZSBv
bmUgb2YgImZyb20iLCAidG8iLCBvciAiY29sb3Itc3RvcC4iCiAgICAgICAgIENTU0dyYWRpZW50
Q29sb3JTdG9wIHN0b3A7CiAgICAgICAgIGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcCh0aGlz
LCBhLCBzdG9wKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmVzdWx0LT5h
ZGRTdG9wKHN0b3ApOwotICAgICAgICAKKwogICAgICAgICAvLyBBZHZhbmNlCiAgICAgICAgIGEg
PSBhcmdzLT5uZXh0KCk7CiAgICAgfQotICAgIAorCiAgICAgZ3JhZGllbnQgPSByZXN1bHQucmVs
ZWFzZSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDU3NSwxMiArNDU3NSwxMiBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCkKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNhbnZhcyhSZWZQdHI8Q1NTVmFsdWU+JiBjYW52YXMpCiB7CiAg
ICAgUmVmUHRyPENTU0NhbnZhc1ZhbHVlPiByZXN1bHQgPSBDU1NDYW52YXNWYWx1ZTo6Y3JlYXRl
KCk7Ci0gICAgCisKICAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCiAgICAgQ1NTUGFyc2VyVmFs
dWVMaXN0KiBhcmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3M7CiAg
ICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCisKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhbnZhcyBuYW1lLiAg
SXQgaXMgYW4gaWRlbnRpZmllci4KICAgICBDU1NQYXJzZXJWYWx1ZSogYSA9IGFyZ3MtPmN1cnJl
bnQoKTsKICAgICBpZiAoIWEgfHwgYS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKQpAQCAtNDY2OSw3ICs0NjY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9hcmdDb3Vu
dCA9IDM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAgICAgdW5zaWduZWQgYXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ0NvdW50OyB9
CiAgICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0KCkgY29uc3QgeyByZXR1cm4gbV91bml0OyB9CkBA
IC00Njk1LDE3ICs0Njk1LDE3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6
OnBhcnNlVHJhbnNmb3JtKCkKICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsK
ICAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCAh
dmFsdWUtPmZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIEV2ZXJ5IHByaW1pdGl2ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCiAg
ICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsK
ICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAg
ICAgICAgIC8vIFNlZSBpZiB0aGUgc3BlY2lmaWVkIHByaW1pdGl2ZSBpcyBvbmUgd2UgdW5kZXJz
dGFuZC4KICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uSW5mbyBpbmZvKHZhbHVlLT5mdW5jdGlv
bi0+bmFtZSk7CiAgICAgICAgIGlmIChpbmZvLnVua25vd24oKSkKICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgIAorCiAgICAgICAgIGlmICghaW5mby5oYXNDb3JyZWN0QXJnQ291bnQoYXJn
cy0+c2l6ZSgpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC00NzI1LDcgKzQ3MjUsNyBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSgpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfSBlbHNlIGlmICghdmFs
aWRVbml0KGEsIHVuaXQsIHRydWUpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgCisKICAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdHJh
bnNmb3JtIG9wZXJhdGlvbi4KICAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShhLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzKSBhLT51bml0KSk7CiAKQEAgLTQ3MzUsMTEgKzQ3MzUsMTEgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQogICAgICAgICAgICAgaWYg
KGEtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGEtPmlWYWx1ZSAhPSAnLCcp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBhID0gYXJncy0+bmV4dCgp
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFyZ051bWJlcisrOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCkBAIC00NzgxLDcg
KzQ3ODEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW4oaW50IHByb3BJ
ZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIGludAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTQ4MTMs
NyArNDgxMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVBlcnNwZWN0aXZlT3JpZ2luKGludCBw
cm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLCBSCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtNTA0
MSw5ICs1MDQxLDkgQEAgVUNoYXIqIENTU1BhcnNlcjo6dGV4dChpbnQgKmxlbmd0aCkKICAgICAg
ICAgICAgIHVjID0gMHhmZmZkOwogICAgICAgICAqb3V0KysgPSB1YzsKICAgICB9Ci0gICAgCisK
ICAgICAqbGVuZ3RoID0gb3V0IC0gc3RhcnQ7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBoYXZlIGFu
IHVucmVjb2duaXplZCBALWtleXdvcmQsIGFuZCBpZiB3ZSBoYW5kbGVkIGFueSBlc2NhcGVzIGF0
IGFsbCwgdGhlbgogICAgIC8vIHdlIHNob3VsZCBhdHRlbXB0IHRvIGFkanVzdCB5eVRvayB0byB0
aGUgY29ycmVjdCB0eXBlLgogICAgIGlmICh5eVRvayA9PSBBVEtFWVdPUkQgJiYgc2F3RXNjYXBl
KQpAQCAtNTIxMCw3ICs1MjEwLDcgQEAgQ1NTUnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVs
ZUxpc3QoKQogewogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbGlzdCA9IENTU1J1bGVMaXN0Ojpj
cmVhdGUoKTsKICAgICBDU1NSdWxlTGlzdCogbGlzdFB0ciA9IGxpc3QuZ2V0KCk7Ci0gICAgCisK
ICAgICBtX3BhcnNlZFJ1bGVMaXN0cy5hcHBlbmQobGlzdC5yZWxlYXNlKCkpOwogICAgIHJldHVy
biBsaXN0UHRyOwogfQpAQCAtNTI5Niw3ICs1Mjk2LDcgQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpj
cmVhdGVWYXJpYWJsZXNSdWxlKE1lZGlhTGlzdCogbWVkaWFMaXN0LCBib29sIHZhcmlhYmxlc0tl
eXcKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBmYWxzZTsKICAgICBSZWZQdHI8Q1NTVmFyaWFi
bGVzUnVsZT4gcnVsZSA9IENTU1ZhcmlhYmxlc1J1bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1l
ZGlhTGlzdCwgdmFyaWFibGVzS2V5d29yZCk7CiAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oQ1NT
VmFyaWFibGVzRGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdldCgpLCBtX3ZhcmlhYmxlTmFtZXMs
IG1fdmFyaWFibGVWYWx1ZXMpKTsKLSAgICBjbGVhclZhcmlhYmxlcygpOyAgICAKKyAgICBjbGVh
clZhcmlhYmxlcygpOwogICAgIENTU1J1bGUqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAgbV9w
YXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtNTM4NSw4ICs1Mzg1LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFyaWFibGUo
Q1NTVmFyaWFibGVzRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcKICAgICBp
ZiAobV92YXJpYWJsZU5hbWVzLnNpemUoKSkgewogICAgICAgICBvayA9IHRydWU7CiAgICAgICAg
IGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRWYXJpYWJsZSh2YXJpYWJsZU5hbWUsIG1fdmFyaWFibGVW
YWx1ZXNbMF0pOwotICAgIH0gCi0gICAgCisgICAgfQorCiAgICAgY2xlYXJWYXJpYWJsZXMoKTsK
IAogICAgIHJldHVybiBvazsKQEAgLTUzOTksNyArNTM5OSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpw
YXJzZVByb3BlcnR5V2l0aFJlc29sdmVkVmFyaWFibGVzKGludCBwcm9wSWQsIGJvb2wgaXNJbXBv
cnRhbnQsCiAKICAgICBpZiAocGFyc2VWYWx1ZShwcm9wSWQsIGlzSW1wb3J0YW50KSkKICAgICAg
ICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzLCBt
X251bVBhcnNlZFByb3BlcnRpZXMpOwotICAgICAgICAKKwogICAgIGNsZWFyUHJvcGVydGllcygp
OwogICAgIG1fdmFsdWVMaXN0ID0gMDsKIH0KQEAgLTU0MTQsOCArNTQxNCw4IEBAIGJvb2wgQ1NT
UGFyc2VyOjpjaGVja0ZvclZhcmlhYmxlcyhDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCkK
ICAgICAgICAgaWYgKHZhbHVlTGlzdC0+dmFsdWVBdChpKS0+aXNWYXJpYWJsZSgpKSB7CiAgICAg
ICAgICAgICBoYXNWYXJpYWJsZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgaWYgKHZhbHVlTGlzdC0+dmFsdWVB
dChpKS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgY2hlY2tGb3JWYXJpYWJs
ZXModmFsdWVMaXN0LT52YWx1ZUF0KGkpLT5mdW5jdGlvbi0+YXJncykpIHsKICAgICAgICAgICAg
IGhhc1ZhcmlhYmxlcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU0NjAsMTEgKzU0
NjAsMTEgQEAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1l
UnVsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGtleXMpCiAgICAgICAgIGtleVN0cmluZyArPSBTdHJp
bmc6Om51bWJlcihrZXkpOwogICAgICAgICBrZXlTdHJpbmcgKz0gIiUiOwogICAgIH0KLSAgICAK
KwogICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtleWZyYW1lID0gV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKICAgICBrZXlmcmFtZS0+c2V0S2V5
VGV4dChrZXlTdHJpbmcpOwogICAgIGtleWZyYW1lLT5zZXREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKDAsIG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzKSk7Ci0gICAgCisKICAgICBjbGVhclByb3BlcnRpZXMoKTsKIAogICAgIFdl
YktpdENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVQdHIgPSBrZXlmcmFtZS5nZXQoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
aW5kZXggZWI5ZTAxYTEwNTNiMGQyYWIwMmRjOTUyYzliZTUxNmI1MGFhYjFhNC4uZDFhNWE0M2Y4
OWJiZjI1MzQwMzI5MmVmMDRkNDI5MDY3ZmQ3YWY5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTg1LDcgKzg1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHBhcnNlRmlsbFBvc2l0aW9uKFJl
ZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIHZvaWQgcGFyc2VG
aWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAg
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRmlsbFNpemUoaW50IHByb3BJZCwgYm9vbCAmYWxs
b3dDb21tYSk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgcGFyc2VGaWxsUHJvcGVydHkoaW50
IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIFJlZlB0cjxDU1NWYWx1ZT4mLCBS
ZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJvb2wgcGFyc2VGaWxsU2hvcnRoYW5kKGludCBw
cm9wSWQsIGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wgaW1w
b3J0YW50KTsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgYm9vbCBwYXJzZUFuaW1hdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1
ZT4mKTsKICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRh
bnQpOwogICAgICAgICBib29sIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50
KTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbCBwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW50IHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpOwogCiAgICAgICAgIGJvb2wgcGFyc2VTaGFwZShpbnQgcHJv
cElkLCBib29sIGltcG9ydGFudCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBib29sIHBhcnNlU2hhZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJvb2wgcGFyc2VCb3JkZXJSYWRpdXMo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgICAgICAKKwogICAgICAgICBib29sIHBh
cnNlUmVmbGVjdChpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAKICAgICAgICAgLy8gSW1h
Z2UgZ2VuZXJhdG9ycwpAQCAtMjQzLDE2ICsyNDMsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBVQ2hhciogdGV4dChpbnQqIGxlbmd0aCk7CiAgICAgICAgIHZvaWQgY291bnRMaW5l
cygpOwogICAgICAgICBpbnQgbGV4KCk7Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCByZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4pOwotICAg
IAorCiAgICAgICAgIHZvaWQgc2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBT
dHJpbmcmLCBjb25zdCBjaGFyKiBzdWZmaXgpOwogCiAgICAgICAgIGJvb2wgaW5TaG9ydGhhbmQo
KSBjb25zdCB7IHJldHVybiBtX2luUGFyc2VTaG9ydGhhbmQ7IH0KIAogICAgICAgICB2b2lkIGNo
ZWNrRm9yT3JwaGFuZWRVbml0cygpOwotICAgICAgICAKKwogICAgICAgICB2b2lkIGNsZWFyVmFy
aWFibGVzKCk7CiAKICAgICAgICAgdm9pZCBkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKTsKQEAg
LTI5NCw3ICsyOTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE1lZGlhUXVlcnkq
IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5OwogICAgICAgICBNZWRpYVF1ZXJ5RXhwKiBtX2Zsb2F0aW5n
TWVkaWFRdWVyeUV4cDsKICAgICAgICAgVmVjdG9yPE1lZGlhUXVlcnlFeHAqPiogbV9mbG9hdGlu
Z01lZGlhUXVlcnlFeHBMaXN0OwotICAgICAgICAKKwogICAgICAgICBWZWN0b3I8Q1NTU2VsZWN0
b3IqPiBtX3JldXNhYmxlU2VsZWN0b3JWZWN0b3I7CiAKICAgICAgICAgLy8gZGVmaW5lcyB1bml0
cyBhbGxvd2VkIGZvciBhIGNlcnRhaW4gcHJvcGVydHksIHVzZWQgaW4gcGFyc2VVbml0CkBAIC0z
MTcsNyArMzE3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlKiwgVW5pdHMsIGJvb2wgc3RyaWN0
KTsKLSAgICAgICAgCisKICAgICAgICAgZnJpZW5kIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbklu
Zm87CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApp
bmRleCAyM2E5OTFlOWRlY2E1NWQzNDY0OWQ4NGFhMmM3YzdmM2UzYjliYzE3Li4zYjM2YTRhZDg3
MDU2N2RmZWU5NTE0Y2QyYzg1Y2JkNTQ5ZmE3YWNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjQsNyArMjQsNyBAQAogICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECiAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNDQ1LDEyICs0
NDUsMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRGcm9udGVuZChQYXNzT3duUHRy
PEluc3BlY3RvckZyb250ZW5kPiBmcm9udGVuZCkKICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRV
UkxDaGFuZ2VkKG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT51cmwoKS5z
dHJpbmcoKSk7CiAKICAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLSAgICAKKwogICAgIGlm
IChtX3Nob3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsKSB7CiAgICAgICAgIFN0cmluZyBs
YXN0QWN0aXZlUGFuZWxTZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFt
ZSk7CiAgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNpYWxQYW5lbEZvckpTTmFtZShs
YXN0QWN0aXZlUGFuZWxTZXR0aW5nKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobV9ub2RlVG9G
b2N1cykKICAgICAgICAgZm9jdXNOb2RlKCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCkBAIC00NjcsNyArNDY3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkK
IAogICAgIGlmIChtX29wZW5pbmdGcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAg
ICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOwog
ICAgIGVsc2UgewpAQCAtNjA0LDEwICs2MDQsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnVu
YmluZEFsbFJlc291cmNlcygpCiB7Ci0gICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJj
ZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsgCi0gICAgZm9yIChSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KSAK
LSAgICAgICAgaXQtPnNlY29uZC0+cmVsZWFzZVNjcmlwdE9iamVjdCgwKTsgCi0gICAgCisgICAg
UmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsK
KyAgICBmb3IgKFJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnJlbGVhc2VT
Y3JpcHRPYmplY3QoMCk7CisKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKQEAgLTY2OCw3
ICs2NjgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3VyY2VzIHNob3VsZCBi
ZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQogICAgICAgICAvLyByZXNv
dXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5kIHRoZW0u
CiAgICAgICAgIHVuYmluZEFsbFJlc291cmNlcygpOwotICAgICAgICAKKwogICAgICAgICBtX2Nz
c1N0b3JlLT5yZXNldCgpOwogICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAgICAgICAgICAg
bV9mcm9udGVuZC0+cmVzZXQoKTsKQEAgLTk4MSwxMSArOTgxLDExIEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmCiB7CiAgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIEluc3BlY3RvclJlc291cmNlKiBy
ZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKICAgICBpZiAoIXJl
c291cmNlKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICByZXNvdXJjZS0+c2V0T3ZlcnJp
ZGVDb250ZW50KFNjcmlwdFN0cmluZyhzb3VyY2VTdHJpbmcpLCBJbnNwZWN0b3JSZXNvdXJjZTo6
U2NyaXB0KTsKIAogICAgIGlmIChtX2Zyb250ZW5kKQpAQCAtMTIwOCw3ICsxMjA4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDb29raWVzKGxvbmcgY2FsbElkKQogICAgIGVsc2UK
ICAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0Q29va2llcyhjYWxsSWQsIGJ1aWxkQXJyYXlGb3JD
b29raWVzKHJhd0Nvb2tpZXNMaXN0KSwgU3RyaW5nKCkpOwogfQotICAgIAorCiBTY3JpcHRBcnJh
eSBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxD
b29raWU+JiBjb29raWVzTGlzdCkKIHsKICAgICBTY3JpcHRBcnJheSBjb29raWVzID0gbV9mcm9u
dGVuZC0+bmV3U2NyaXB0QXJyYXkoKTsKQEAgLTEyMzUsNyArMTIzNSw3IEBAIFNjcmlwdE9iamVj
dCBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUm
IGNvb2tpZSkKICAgICB2YWx1ZS5zZXQoInNlc3Npb24iLCBjb29raWUuc2Vzc2lvbik7CiAgICAg
cmV0dXJuIHZhbHVlOwogfQotICAgIAorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdl
QXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewpAQCAtMTQxOSw3ICsx
NDE5LDcgQEAgU2NyaXB0T2JqZWN0IEluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZVByb2ZpbGVI
ZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmkKIFN0cmluZyBJbnNwZWN0b3JDb250cm9s
bGVyOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJv
ZmlsZU51bWJlciA9IGZhbHNlKQogewogICAgIGlmIChpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQot
ICAgICAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IG1fbmV4dFVzZXJJ
bml0aWF0ZWRQcm9maWxlTnVtYmVyKys7ICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50VXNlcklu
aXRpYXRlZFByb2ZpbGVOdW1iZXIgPSBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcisr
OwogCiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcy4lZCIsIFVzZXJJbml0aWF0ZWRQcm9m
aWxlTmFtZSwgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIpOwogfQpAQCAtMTU5
MSw3ICsxNTkxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW0KIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25l
ZCBsaW5lTnVtYmVyKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVC
cmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLSAKKwogICAgIFN0cmluZyB1cmwgPSBt
X3NvdXJjZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTY5NSw3ICsxNjk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd091dGxp
bmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwg
Y28KIAogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBO
b3cgZG8gdGhlIGZpbGwKICAgICBjb250ZXh0LmFkZFBhdGgocXVhZFBhdGgpOwogICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CkBAIC0xODM2LDcg
KzE4MzYsNyBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgZG91YmxlJiBlbGFwc2VkKQogCiAgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0
LT5zZWNvbmQ7CiAgICAgbV90aW1lcy5yZW1vdmUoaXQpOwotICAgIAorCiAgICAgZWxhcHNlZCA9
IGN1cnJlbnRUaW1lKCkgKiAxMDAwIC0gc3RhcnRUaW1lOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTkwNCw1ICsxOTA0LDUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVBbGxT
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSAg
ICAKKwogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKaW5kZXggMTE2NDczNjU5OWZkNTI5Mjk3YzNjYTQ5ODY5YTYyMjIzNmYy
MDBhNi4uMDgzM2UxNTgyYmFkNjQyYjhiYTI4ZGFhYjYzZmUzYTBmOGFkNzM1MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIG1fZnJvbnRlbmQtPmNoaWxkTm9kZUNvdW50VXBkYXRlZChwYXJlbnRJZCwgMCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fZnJvbnRlbmQtPmNoaWxkTm9kZVJlbW92ZWQocGFyZW50SWQsIG1f
ZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZSkpOwotICAgIHVuYmluZChub2RlLCAmbV9kb2N1
bWVudE5vZGVUb0lkTWFwKTsgICAgCisgICAgdW5iaW5kKG5vZGUsICZtX2RvY3VtZW50Tm9kZVRv
SWRNYXApOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQqIGVsZW1lbnQpCkBAIC03NjEsMTQgKzc2MSwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgbV9mcm9udGVuZC0+
YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVt
ZW50KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlcyhsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkgICAgCit2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkp
CiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8
fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBtX2Zy
b250ZW5kLT5kaWRHZXRTdHlsZXMoY2FsbElkLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgRE9NV2luZG93KiBkZWZhdWx0Vmll
dyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKICAgICBpZiAoIWRlZmF1
bHRWaWV3KSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxsSWQsIFNjcmlw
dFZhbHVlOjp1bmRlZmluZWQoKSk7CkBAIC03ODksNyArNzg5LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JP
bmx5KQogCiAgICAgcmVzdWx0LnNldCgic3R5bGVBdHRyaWJ1dGVzIiwgYnVpbGRPYmplY3RGb3JB
dHRyaWJ1dGVTdHlsZXMoZWxlbWVudCkpOwogICAgIHJlc3VsdC5zZXQoInBzZXVkb0VsZW1lbnRz
IiwgYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGVsZW1lbnQsIGF1dGhvck9ubHkpKTsKLSAg
ICAKKwogICAgIFNjcmlwdE9iamVjdCBjdXJyZW50U3R5bGUgPSByZXN1bHQ7CiAgICAgRWxlbWVu
dCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAo
cGFyZW50RWxlbWVudCkgewpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFJlbW92ZSBkaXNhYmxlZCBwcm9w
ZXJ0eSBlbnRyeSBmb3IgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1lLiAKKyAgICAvLyBSZW1vdmUg
ZGlzYWJsZWQgcHJvcGVydHkgZW50cnkgZm9yIHByb3BlcnR5IHdpdGggZ2l2ZW4gbmFtZS4KICAg
ICBJZFRvRGlzYWJsZWRTdHlsZU1hcDo6aXRlcmF0b3IgZGlzYWJsZWRJdCA9IGNzc1N0b3JlKCkt
PmlkVG9EaXNhYmxlZFN0eWxlLmZpbmQoc3R5bGVJZCk7CiAgICAgaWYgKGRpc2FibGVkSXQgIT0g
Y3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCiAgICAgICAgIGRpc2FibGVkSXQt
PnNlY29uZC5yZW1vdmUocHJvcGVydHlOYW1lKTsKQEAgLTk3OCw3ICs5NzgsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlk
LCBjb25zdCBTdHJpbmcmCiAgICAgICAgIC8vIFNldCB0aGUgcHJvcGVydHkgb24gdGhlIHJlYWwg
c3R5bGUgZGVjbGFyYXRpb24uCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5LCBlYyk7Ci0gICAgICAg
IC8vIFJlbW92ZSBkaXNhYmxlZCBwcm9wZXJ0eSBlbnRyeSBmb3IgcHJvcGVydHkgd2l0aCB0aGlz
IG5hbWUuIAorICAgICAgICAvLyBSZW1vdmUgZGlzYWJsZWQgcHJvcGVydHkgZW50cnkgZm9yIHBy
b3BlcnR5IHdpdGggdGhpcyBuYW1lLgogICAgICAgICBpZiAoZGlzYWJsZWRJdCAhPSBjc3NTdG9y
ZSgpLT5pZFRvRGlzYWJsZWRTdHlsZS5lbmQoKSkKICAgICAgICAgICAgIGRpc2FibGVkSXQtPnNl
Y29uZC5yZW1vdmUobmFtZSk7CiAgICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmFwcGVuZChuYW1l
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56481</attachid>
            <date>2010-05-19 04:32:26 -0700</date>
            <delta_ts>2010-05-19 06:30:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39351-20100519153223.patch</filename>
            <type>text/plain</type>
            <size>60631</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTliN2Q1ZGE5NTY1NGU1ODc5Nzg4NDVmZGIxOGY4ZmYwMWRhMTk5My4uZGU5MTI0MDgxODQzMGRl
ODM1NGQyMTQ5MTNlZDc5Y2EwNmIyODc4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMC0wNS0xOSAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB3aGl0ZXNwYWNlIGZvciB0aGUgYnVn
IDM4OTA2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
OTM1MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJlZCAobm8gY29kZSBjaGFuZ2UpLgor
CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6On5DU1NQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXR1cFBhcnNl
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hlZXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp1bml0RnJvbVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNoZWNrRm9yT3JwaGFuZWRVbml0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2U0VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFy
c2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25Y
WSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFtaWx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYyk6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZUludCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCb3Jk
ZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJv
cmRlckltYWdlUGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUNvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VHcmFkaWVudFBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNm
b3JtT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VQZXJzcGVjdGl2
ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZVZhcmlhYmxlc1J1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VQ
cm9wZXJ0eVdpdGhSZXNvbHZlZFZhcmlhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNoZWNrRm9yVmFyaWFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3Jl
YXRlS2V5ZnJhbWVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjp1bmJpbmRBbGxSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd091dGxpbmVkUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzdG9wVGltaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQp
OgorCiAyMDEwLTA1LTE5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNv
bT4KIAogICAgICAgICBbUXRdIEZpeCBidWlsZCB3YXJuaW5nCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA4MjVm
YjVlNGMzMzk3ZDdlY2MyMzg4YmNkM2IzMjk3ZjA0MTI1ZTU3Li4xODI2ZDQyYzg2ZWM2YThiN2Yy
ODM1YWVmNGJjYTk1YmIzZTgzNjRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBD
U1NQYXJzZXI6On5DU1NQYXJzZXIoKQogICAgIGZhc3RGcmVlKG1fcGFyc2VkUHJvcGVydGllcyk7
CiAKICAgICBjbGVhclZhcmlhYmxlcygpOwotICAgIAorCiAgICAgZGVsZXRlIG1fdmFsdWVMaXN0
OwogCiAgICAgZmFzdEZyZWUobV9kYXRhKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIENTU1Bh
cnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmlu
ZywgY29uc3QgY2hhcgogICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxv
YyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0cmxlbihwcmVmaXgpOyBpKyspCiAgICAgICAgIG1fZGF0YVtpXSA9IHByZWZpeFtpXTsKLSAg
ICAKKwogICAgIG1lbWNweShtX2RhdGEgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAKICAgICB1bnNpZ25lZCBz
dGFydCA9IHN0cmxlbihwcmVmaXgpICsgc3RyaW5nLmxlbmd0aCgpOwpAQCAtMjMxLDcgKzIzMSw3
IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25z
dCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBtX3N0eWxlU2hlZXQgPSBzaGVldDsKICAgICBtX2Rl
ZmF1bHROYW1lc3BhY2UgPSBzdGFyQXRvbTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNl
LgotICAgIAorCiAgICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywgIiIpOwogICAgIGNzc3l5cGFy
c2UodGhpcyk7CiAgICAgbV9ydWxlID0gMDsKQEAgLTI2Myw5ICsyNjMsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24s
IGludCBpZCwgY29ucwogCiAgICAgbV9pZCA9IGlkOwogICAgIG1faW1wb3J0YW50ID0gaW1wb3J0
YW50OwotICAgIAorCiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICAKKwogICAgIG1fcnVsZSA9
IDA7CiAKICAgICBib29sIG9rID0gZmFsc2U7CkBAIC0zMTcsNyArMzE3LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQ29sb3IoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9u
LCBjb25zdCBTdHJpbmcKIH0KIAogdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBkb2MsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JM
aXN0KQoteyAgICAKK3sKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gZHVtbXlTdHlsZVNoZWV0
ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKGRvYyk7CiAKICAgICBtX3N0eWxlU2hlZXQgPSBkdW1t
eVN0eWxlU2hlZXQuZ2V0KCk7CkBAIC01MDQsNyArNTA0LDcgQEAgc3RhdGljIGludCB1bml0RnJv
bVN0cmluZyhDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0haOwogICAgIGlmIChlcXVhbCh2YWx1ZS0+c3RyaW5nLCAia0h6IikpCiAg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjsKLSAgICAKKwogICAgIHJl
dHVybiAwOwogfQogCkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBDU1NQYXJzZXI6OmNoZWNrRm9y
T3JwaGFuZWRVbml0cygpCiB7CiAgICAgaWYgKG1fc3RyaWN0IHx8IGluU2hvcnRoYW5kKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGNv
ZGUgaXMgdG8gaW1wbGVtZW50IHRoZSBXaW5JRSBxdWlyayB0aGF0IGFsbG93cyB1bml0IHR5cGVz
IHRvIGJlIHNlcGFyYXRlZCBmcm9tIHRoZWlyIG51bWVyaWMgdmFsdWVzCiAgICAgLy8gYnkgd2hp
dGVzcGFjZSwgc28gZS5nLiwgd2lkdGg6IDIwIHB4IGluc3RlYWQgb2Ygd2lkdGg6MjBweC4gIFRo
aXMgaXMgaW52YWxpZCBDU1MsIHNvIHdlIGRvbid0IGRvIHRoaXMgaW4gc3RyaWN0IG1vZGUuCiAg
ICAgQ1NTUGFyc2VyVmFsdWUqIG51bWVyaWNWYWwgPSAwOwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZv
aWQgQ1NTUGFyc2VyOjpjaGVja0Zvck9ycGhhbmVkVW5pdHMoKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG51
bWVyaWNWYWwgPSAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
ID8gdmFsdWUgOiAwOwogICAgIH0KIH0KQEAgLTU1NCw3ICs1NTQsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAvLyBJbiBxdWly
a3MgbW9kZSwgd2Ugd2lsbCBsb29rIGZvciB1bml0cyB0aGF0IGhhdmUgYmVlbiBpbmNvcnJlY3Rs
eSBzZXBhcmF0ZWQgZnJvbSB0aGUgbnVtYmVyIHRoZXkgYmVsb25nIHRvCiAgICAgLy8gYnkgYSBz
cGFjZS4gIFdlIGdvIGFoZWFkIGFuZCBhc3NvY2lhdGUgdGhlIHVuaXQgd2l0aCB0aGUgbnVtYmVy
IGV2ZW4gdGhvdWdoIGl0IGlzIGludmFsaWQgQ1NTLgogICAgIGNoZWNrRm9yT3JwaGFuZWRVbml0
cygpOwotICAgIAorCiAgICAgaW50IG51bSA9IGluU2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxp
c3QtPnNpemUoKTsKIAogICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQpIHsKQEAgLTc0Nyw4
ICs3NDcsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOiAgICAgICAgLy8gKDxi
b3JkZXItc3R5bGU+IGV4Y2VwdCBoaWRkZW4pIHwgYXV0byB8IGluaGVyaXQKICAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKGlkID49IENTU1Zh
bHVlSW5zZXQgJiYgaWQgPD0gQ1NTVmFsdWVEb3VibGUpKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsgCi0gICAgICAgIAorICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZTogICAgIC8vLy8gPGJvcmRlci1z
dHlsZT4gfCBpbmhlcml0CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6ICAg
Ly8gICBEZWZpbmVkIGFzOiAgICBub25lIHwgaGlkZGVuIHwgZG90dGVkIHwgZGFzaGVkIHwKICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6ICAvLyAgIHNvbGlkIHwgZG91Ymxl
IHwgZ3Jvb3ZlIHwgcmlkZ2UgfCBpbnNldCB8IG91dHNldApAQCAtODIxLDE0ICs4MjEsMTQgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAK
ICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7CiAgICAgICAgIC8vIFs8dXJpPixdKiAgWyBh
dXRvIHwgY3Jvc3NoYWlyIHwgZGVmYXVsdCB8IHBvaW50ZXIgfCBwcm9ncmVzcyB8IG1vdmUgfCBl
LXJlc2l6ZSB8IG5lLXJlc2l6ZSB8Ci0gICAgICAgIC8vIG53LXJlc2l6ZSB8IG4tcmVzaXplIHwg
c2UtcmVzaXplIHwgc3ctcmVzaXplIHwgcy1yZXNpemUgfCB3LXJlc2l6ZSB8IGV3LXJlc2l6ZSB8
IAorICAgICAgICAvLyBudy1yZXNpemUgfCBuLXJlc2l6ZSB8IHNlLXJlc2l6ZSB8IHN3LXJlc2l6
ZSB8IHMtcmVzaXplIHwgdy1yZXNpemUgfCBldy1yZXNpemUgfAogICAgICAgICAvLyBucy1yZXNp
emUgfCBuZXN3LXJlc2l6ZSB8IG53c2UtcmVzaXplIHwgY29sLXJlc2l6ZSB8IHJvdy1yZXNpemUg
fCB0ZXh0IHwgd2FpdCB8IGhlbHAgfAogICAgICAgICAvLyB2ZXJ0aWNhbC10ZXh0IHwgY2VsbCB8
IGNvbnRleHQtbWVudSB8IGFsaWFzIHwgY29weSB8IG5vLWRyb3AgfCBub3QtYWxsb3dlZCB8IC13
ZWJraXQtem9vbS1pbgogICAgICAgICAvLyAtd2Via2l0LXpvb20taW4gfCAtd2Via2l0LXpvb20t
b3V0IHwgYWxsLXNjcm9sbCB8IC13ZWJraXQtZ3JhYiB8IC13ZWJraXQtZ3JhYmJpbmcgXSBdIHwg
aW5oZXJpdAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0OwogICAgICAgICB3aGls
ZSAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsK
ICAgICAgICAgICAgIGlmICghbGlzdCkKLSAgICAgICAgICAgICAgICBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOyAKKyAgICAgICAgICAgICAgICBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgU3RyaW5nIHVy
aSA9IHZhbHVlLT5zdHJpbmc7CiAgICAgICAgICAgICBWZWN0b3I8aW50PiBjb29yZHM7CiAgICAg
ICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC04NDIsNyArODQyLDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKG5yY29vcmRzID09
IDIpCiAgICAgICAgICAgICAgICAgaG90c3BvdCA9IEludFBvaW50KGNvb3Jkc1swXSwgY29vcmRz
WzFdKTsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCF1cmkuaXNOdWxsKCkgJiYgbV9z
dHlsZVNoZWV0KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBjb21wbGV0ZVVSTCBj
YWxsIHNob3VsZCBiZSBkb25lIHdoZW4gdXNpbmcgdGhlIENTU0N1cnNvckltYWdlVmFsdWUsCiAg
ICAgICAgICAgICAgICAgLy8gbm90IHdoZW4gY3JlYXRpbmcgaXQuCkBAIC0xMTEzLDcgKzExMTMs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZh
bGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgdHJ1ZSkpOwogICAg
ICAgICBicmVhazsKLSAgICAgICAgCisKICAgICBjYXNlIENTU1Byb3BlcnR5VGFibGVMYXlvdXQ6
ICAgICAgICAgLy8gYXV0byB8IGZpeGVkIHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlRml4ZWQpCiAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qg
dXNlIHJlbGVhc2UoKSBoZXJlIHNpbmNlIHdlIG1pZ2h0IGhpdCB0aGlzIHBhdGggdHdpY2UKICAg
ICAgICAgICAgICAgICAvLyBidXQgdGhhdCBsb2dpYyBzZWVtcyB3cm9uZyB0byBtZSB0byBiZWdp
biB3aXRoLCB3ZSBjb252ZXJ0IGFsbCBub24tdXJpIHZhbHVlcwogICAgICAgICAgICAgICAgIC8v
IGludG8gdGhlIGxhc3Qgc2VlbiBVUkkgdmFsdWUhPwpAQCAtMTE1OCw3ICsxMTU4LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgdmFsdWVzLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0OTksNyAr
MTQ5OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgKGlkID49IENTU1ZhbHVlVmlzaWJsZXBhaW50ZWQgJiYgaWQg
PD0gQ1NTVmFsdWVTdHJva2UpKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwog
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgLy8gRW5kIG9mIENTUzMgcHJvcGVy
dGllcwogCiAgICAgLy8gQXBwbGUgc3BlY2lmaWMgcHJvcGVydGllcy4gIFRoZXNlIHdpbGwgbmV2
ZXIgYmUgc3RhbmRhcmRpemVkIGFuZCBhcmUgcHVyZWx5IHRvCkBAIC0xNTE3LDcgKzE1MTcsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTG9naWNhbCB8fCBpZCA9PSBDU1NWYWx1ZVZpc3Vh
bCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgCisKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YTogICAgICAgICAg
IC8vIDxsZW5ndGg+CiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBG
TGVuZ3RoLCBtX3N0cmljdCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU0MSwxMiArMTU0MSwxMiBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgCisKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyRml0OgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVCb3JkZXIgfHwgaWQgPT0gQ1NTVmFs
dWVMaW5lcykKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIAorCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToK
ICAgICAgICAgLy8gZGlzYyB8IGNpcmNsZSB8IHNxdWFyZSB8IG5vbmUgfCBpbmhlcml0CiAgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZURpc2MgfHwgaWQgPT0gQ1NTVmFsdWVDaXJjbGUgfHwgaWQg
PT0gQ1NTVmFsdWVTcXVhcmV8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCkBAIC0xNTU0LDEzICsxNTU0
LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21v
b3RoaW5nOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVl
Tm9uZSAKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZU5v
bmUKICAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlQW50aWFsaWFzZWQgfHwgaWQgPT0gQ1NT
VmFsdWVTdWJwaXhlbEFudGlhbGlhc2VkKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBicmVhazsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9uOiAgICAgICAgICAgICAgICAg
Ly8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+IAorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXREYXNoYm9hcmRSZWdpb246IC8vIDxkYXNoYm9hcmQtcmVnaW9uPiB8IDxk
YXNoYm9hcmQtcmVnaW9uPgogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6OkZ1bmN0aW9uIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHJldHVybiBw
YXJzZURhc2hib2FyZFJlZ2lvbnMocHJvcElkLCBpbXBvcnRhbnQpOwogICAgICAgICBicmVhazsK
QEAgLTE1NzIsMTMgKzE1NzIsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8vIFBvc2l0aW9uIG11c3QgY29tZSBiZWZv
cmUgY29sb3IgaW4gdGhpcyBhcnJheSBiZWNhdXNlIGEgcGxhaW4gb2xkICIwIiBpcyBhIGxlZ2Fs
IGNvbG9yCiAgICAgICAgIC8vIGluIHF1aXJrcyBtb2RlIGJ1dCBpdCdzIHVzdWFsbHkgdGhlIFgg
Y29vcmRpbmF0ZSBvZiBhIHBvc2l0aW9uLgogICAgICAgICAvLyBGSVhNRTogQWRkIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemUgdG8gdGhlIHNob3J0aGFuZC4KLSAgICAgICAgY29uc3QgaW50IHBy
b3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFJlcGVhdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
b3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9u
LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4sIAorICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1tdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eUJhY2tncm91bmRBdHRhY2htZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciB9OwogICAgICAgICByZXR1cm4gcGFyc2VG
aWxsU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgNiwgaW1wb3J0YW50KTsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6IHsKLSAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdCwgCisgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3Bl
cnR5V2Via2l0TWFza0ltYWdlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1l
bnQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gfTsKICAgICAgICAgcmV0
dXJuIHBhcnNlRmlsbFNob3J0aGFuZChwcm9wSWQsIHByb3BlcnRpZXMsIDUsIGltcG9ydGFudCk7
CkBAIC0xNzUxLDggKzE3NTEsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlV0NTU0lucHV0UHJvcGVydHkoKQogICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
Ryk7CiAKICAgICB3aGlsZSAobV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgIC8vIHBhc3MgYWxs
IG90aGVyIHZhbHVlcywgaWYgYW55LiBJZiB3ZSBkb24ndCBkbyB0aGlzLCAKLSAgICAvLyB0aGUg
cGFyc2VyIHdpbGwgdGhpbmsgdGhhdCBpdCdzIG5vdCBkb25lIGFuZCB3b24ndCBwcm9jZXNzIHRo
aXMgcHJvcGVydHkgIAorICAgIC8vIHBhc3MgYWxsIG90aGVyIHZhbHVlcywgaWYgYW55LiBJZiB3
ZSBkb24ndCBkbyB0aGlzLAorICAgIC8vIHRoZSBwYXJzZXIgd2lsbCB0aGluayB0aGF0IGl0J3Mg
bm90IGRvbmUgYW5kIHdvbid0IHByb2Nlc3MgdGhpcyBwcm9wZXJ0eQogICAgIH0KIAogICAgIHJl
dHVybiBwYXJzZWRWYWx1ZTsKQEAgLTE4MjksNyArMTgyOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZpbGxTaG9ydGhhbmQoaW50IHByb3BJZCwgY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQg
bnVtUHJvCiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRp
ZXM7ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewpAQCAtMTg2
MCw3ICsxODYwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJv
cElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAgICAgaWYgKCFmb3Vu
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBGaWxs
IGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAg
IGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkgewpAQCAtMTg3NSw3ICsxODc1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBu
dW1Qcm8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIE5v
dyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgogICAgIGZvciAoaSA9IDA7IGkg
PCBudW1Qcm9wZXJ0aWVzOyBpKyspIHsKICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24pIHsKQEAgLTE4OTYsNyArMTg5Niw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoaW50IHByb3BJZCwgY29uc3QgaW50KiBwcm9w
ZXJ0aWVzLCBpbnQgbnVtUHJvCiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXRZLCByZXBlYXRZVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbHVl
c1tpXS5yZWxlYXNlKCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBB
ZGQgaW4gY2xpcCB2YWx1ZXMgd2hlbiB3ZSBoaXQgdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luIHBy
b3BlcnR5LgogICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRPcmlnaW4pCiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRD
bGlwLCBjbGlwVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwpAQCAtMTkzNCwxMiArMTkzNCwx
MiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlIH07CiAgICAgY29uc3QgaW50IG51bVByb3BlcnRp
ZXMgPSBzaXplb2YocHJvcGVydGllcykgLyBzaXplb2YocHJvcGVydGllc1swXSk7Ci0gICAgCisK
ICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlv
bik7CiAKICAgICBib29sIHBhcnNlZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxzZSB9
OyAvLyBjb21waWxlciB3aWxsIHJlcGVhdCBmYWxzZSBhcyBuZWNlc3NhcnkKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlc1tudW1Qcm9wZXJ0aWVzXTsKLSAgICAKKwogICAgIGludCBpOwogICAg
IHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CiAgICAgICAgIENTU1BhcnNlclZhbHVl
KiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwpAQCAtMTk1NCw3ICsxOTU0LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAg
ICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
ICAgICAgICAgZm9yIChpID0gMDsgIWZvdW5kICYmIGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsK
ICAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pIHsKQEAgLTE5NzEsMTcgKzE5NzEs
MTcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoIWZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKKwogICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGgg
dGhlIGluaXRpYWwgdmFsdWUuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsr
aSkgewogICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQogICAgICAgICAgICAgYWRkQW5p
bWF0aW9uVmFsdWUodmFsdWVzW2ldLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkp
OwogICAgIH0KLSAgICAKKwogICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdl
IGZvdW5kLgogICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspCiAgICAgICAg
IGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbHVlc1tpXS5yZWxlYXNlKCksIGltcG9ydGFu
dCk7Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTk5MiwxMiArMTk5MiwxMiBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvblRpbWluZ0Z1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
b3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5IH07CiAgICAgY29uc3QgaW50IG51bVByb3BlcnRp
ZXMgPSBzaXplb2YocHJvcGVydGllcykgLyBzaXplb2YocHJvcGVydGllc1swXSk7Ci0gICAgCisK
ICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b24pOwogCiAgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2Ug
fTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgZmFsc2UgYXMgbmVjZXNzYXJ5CiAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGllc107Ci0gICAgCisKICAgICBpbnQgaTsKICAg
ICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewogICAgICAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKQEAgLTIwMTIsNyArMjAxMiw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewpAQCAtMjAyOSwxNyArMjAy
OSwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1w
b3J0YW50KQogICAgICAgICBpZiAoIWZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICAKKwogICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdp
dGggdGhlIGluaXRpYWwgdmFsdWUuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7
ICsraSkgewogICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQogICAgICAgICAgICAgYWRk
QW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0
KCkpOwogICAgIH0KLSAgICAKKwogICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVz
IHdlIGZvdW5kLgogICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspCiAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbHVlc1tpXS5yZWxlYXNlKCksIGltcG9y
dGFudCk7Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjA2OSw3ICsyMDY5LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0IGludCAq
cHJvcGVydGllcywgaW50IG51bVByb3BlcnQKICAgICAgICAgaWYgKCFmb3VuZCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBGaWxsIGluIGFueSByZW1h
aW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAgIG1faW1wbGljaXRT
aG9ydGhhbmQgPSB0cnVlOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsg
KytpKSB7CkBAIC0yMDkwLDkgKzIwOTAsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVz
KGludCBwcm9wSWQsIGNvbnN0IGludCAqcHJvcGVydGllcywgIGJvb2wgaW1wb3J0YW50KQogICAg
ICAqIHNlY29uZCwgYW5kIHRoZSBib3R0b20gaXMgc2V0IHRvIHRoZSB0aGlyZC4gSWYgdGhlcmUg
YXJlIGZvdXIgdmFsdWVzLCB0aGV5IGFwcGx5IHRvIHRoZSB0b3AsCiAgICAgICogcmlnaHQsIGJv
dHRvbSwgYW5kIGxlZnQsIHJlc3BlY3RpdmVseS4KICAgICAgKi8KLSAgICAKKwogICAgIGludCBu
dW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0gICAgCisKICAg
ICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwogCiAgICAgLy8gdGhlIG9yZGVy
IGlzIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdApAQCAtMjEzOCw3ICsyMTM4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlNFZhbHVlcyhpbnQgcHJvcElkLCBjb25zdCBpbnQgKnByb3BlcnRpZXMs
ICBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzE5LDcgKzIzMTksNyBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQXR0cihDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MpCiAKICAgICBpZiAoZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKQogICAgICAgICBhdHRyTmFtZSA9IGF0dHJOYW1lLmxvd2VyKCk7Ci0gICAgCisK
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShhdHRyTmFtZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19BVFRSKTsKIH0KIApAQCAtMjM4MywyOSArMjM4MywyOSBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uWFkoYm9vbCYgeEZvdW5k
LCBib29sJiB5Rm91bmQpCiAgICAgaWYgKHZhbGlkVW5pdChtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LCBGUGVyY2VudCB8IEZMZW5ndGgsIG1fc3RyaWN0KSkKICAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZlZhbHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyltX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0KTsKLSAgICAgICAgICAgICAgICAK
KwogICAgIHJldHVybiAwOwogfQogCiB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24o
UmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTIpCiB7CiAg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAK
KwogICAgIC8vIFBhcnNlIHRoZSBmaXJzdCB2YWx1ZS4gIFdlJ3JlIGp1c3QgbWFraW5nIHN1cmUg
dGhhdCBpdCBpcyBvbmUgb2YgdGhlIHZhbGlkIGtleXdvcmRzIG9yIGEgcGVyY2VudGFnZS9sZW5n
dGguCiAgICAgYm9vbCB2YWx1ZTFJc1ggPSBmYWxzZSwgdmFsdWUxSXNZID0gZmFsc2U7CiAgICAg
dmFsdWUxID0gcGFyc2VGaWxsUG9zaXRpb25YWSh2YWx1ZTFJc1gsIHZhbHVlMUlzWSk7CiAgICAg
aWYgKCF2YWx1ZTEpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIEl0IG9ubHkgdGFr
ZXMgb25lIHZhbHVlIGZvciBiYWNrZ3JvdW5kLXBvc2l0aW9uIHRvIGJlIGNvcnJlY3RseSBwYXJz
ZWQgaWYgaXQgd2FzIHNwZWNpZmllZCBpbiBhIHNob3J0aGFuZCAoc2luY2Ugd2UKICAgICAvLyBj
YW4gYXNzdW1lIHRoYXQgYW55IG90aGVyIHZhbHVlcyBiZWxvbmcgdG8gdGhlIHJlc3Qgb2YgdGhl
IHNob3J0aGFuZCkuICBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCwgdGhvdWdoLCB0
aGUKICAgICAvLyB2YWx1ZSB3YXMgZXhwbGljaXRseSBzcGVjaWZpZWQgZm9yIG91ciBwcm9wZXJ0
eS4KICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgCisKICAgICAvLyBGaXJz
dCBjaGVjayBmb3IgdGhlIGNvbW1hLiAgSWYgc28sIHdlIGFyZSBmaW5pc2hlZCBwYXJzaW5nIHRo
aXMgdmFsdWUgb3IgdmFsdWUgcGFpci4KICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQogICAgICAg
ICB2YWx1ZSA9IDA7Ci0gICAgCisKICAgICBib29sIHZhbHVlMklzWCA9IGZhbHNlLCB2YWx1ZTJJ
c1kgPSBmYWxzZTsKICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgdmFsdWUyID0gcGFyc2VGaWxs
UG9zaXRpb25YWSh2YWx1ZTJJc1gsIHZhbHVlMklzWSk7CkBAIC0yNDE4LDcgKzI0MTgsNyBAQCB2
b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24oUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUx
LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKCF2YWx1ZTIpCiAgICAgICAgIC8vIE9ubHkgb25lIHZhbHVlIHdhcyBz
cGVjaWZpZWQuICBJZiB0aGF0IHZhbHVlIHdhcyBub3QgYSBrZXl3b3JkLCB0aGVuIGl0IHNldHMg
dGhlIHggcG9zaXRpb24sIGFuZCB0aGUgeSBwb3NpdGlvbgogICAgICAgICAvLyBpcyBzaW1wbHkg
NTAlLiAgVGhpcyBpcyBvdXIgZGVmYXVsdC4KQEAgLTI0NDEsMTMgKzI0NDEsMTMgQEAgdm9pZCBD
U1NQYXJzZXI6OnBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0
cjxDU1NWYWx1ZT4mIHZhbHUKICAgICAgICAgdmFsdWUyID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb1JlcGVhdCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CiAgICAgICAgIHJldHVybjsKLSAgICB9IAorICAgIH0KICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVSZXBlYXRZKSB7CiAgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwogICAg
ICAgICB2YWx1ZTEgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1
ZU5vUmVwZWF0KTsKICAgICAgICAgdmFsdWUyID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoQ1NTVmFsdWVSZXBlYXQpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICByZXR1cm47ICAgIAorICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpZCA9
PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1Zh
bHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSkKICAgICAgICAgdmFsdWUxID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwpAQCAtMjQ2NCwxMSArMjQ2NCwxMSBA
QCB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVl
MSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdQogCiAgICAgaWYgKHZhbHVlKQogICAgICAgICBpZCA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkOwotICAgIAorCiAgICAgaWYgKHZhbHVlICYmIChp
ZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENT
U1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSkpIHsKICAgICAgICAgdmFsdWUyID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwogICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIH0gZWxzZSB7IAorICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElm
IG9ubHkgb25lIHZhbHVlIHdhcyBzcGVjaWZpZWQsIHZhbHVlMiBpcyB0aGUgc2FtZSBhcyB2YWx1
ZTEuCiAgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwogICAgICAgICB2YWx1ZTIg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlMS5nZXQoKSktPmdldElkZW50KCkpOwpAQCAtMjUxNiw3ICsyNTE2
LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKGludCBw
cm9wSWQsIGJvb2wmIGFsbG93Q29tbWEpCiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoUGFpcjo6Y3JlYXRlKHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5y
ZWxlYXNlKCkpKTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBw
cm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLCAKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+JiByZXRWYWx1
ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZhbHVlMikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiB2YWx1ZXM7CkBAIC0yNTI0LDkgKzI1MjQsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VG
aWxsUHJvcGVydHkoaW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbDsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUyOwotICAgIAorCiAgICAgYm9vbCBhbGxvd0NvbW1hID0gZmFs
c2U7Ci0gICAgCisKICAgICByZXRWYWx1ZTEgPSByZXRWYWx1ZTIgPSAwOwogICAgIHByb3BJZDEg
PSBwcm9wSWQ7CiAgICAgcHJvcElkMiA9IHByb3BJZDsKQEAgLTI1NDcsNyArMjU0Nyw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEs
IGludCYgcHJvcElkMiwKICAgICB3aGlsZSAoKHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
KSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlOwogICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IGN1cnJWYWx1ZTI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhbGxvd0NvbW1h
KSB7CiAgICAgICAgICAgICBpZiAodmFsLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRv
ciB8fCB2YWwtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjY0MSwxNyArMjY0MSwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHko
aW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoIWN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZXMpIHsKICAg
ICAgICAgICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7CiAgICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZSgpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAodmFsdWUyICYmICF2
YWx1ZXMyKSB7CiAgICAgICAgICAgICAgICAgdmFsdWVzMiA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
Q29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgICAgICB2YWx1ZXMyLT5hcHBlbmQodmFsdWUy
LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAg
aWYgKHZhbHVlcykKICAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChjdXJyVmFsdWUucmVs
ZWFzZSgpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTI2NjMsNyArMjY2Myw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYg
cHJvcElkMiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWUyID0gY3VyclZhbHVlMi5yZWxlYXNl
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gV2hl
biBwYXJzaW5nIGFueSBmaWxsIHNob3J0aGFuZCBwcm9wZXJ0eSwgd2UgbGV0IGl0IGhhbmRsZSBi
dWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAogICAgICAgICAvLyBwcm9wZXJ0aWVzLgogICAg
ICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKQEAgLTI3OTcsMTEgKzI3OTcsMTEgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVh
ciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
RWFzZU91dCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQpCiAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOwotICAgIAor
CiAgICAgLy8gV2UgbXVzdCBiZSBhIGZ1bmN0aW9uLgogICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAg
Ly8gVGhlIG9ubHkgdGltaW5nIGZ1bmN0aW9uIHdlIGFjY2VwdCBmb3Igbm93IGlzIGEgY3ViaWMg
YmV6aWVyIGZ1bmN0aW9uLiAgNCBwb2ludHMgbXVzdCBiZSBzcGVjaWZpZWQuCiAgICAgQ1NTUGFy
c2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzOwogICAgIGlmICghZXF1
YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAiY3ViaWMtYmV6aWVyKCIpIHx8
ICFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSA3KQpAQCAtMjgyOCw3ICsyODI4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1Zh
bHVlPiYgcmVzdWx0KQogICAgIENTU1BhcnNlclZhbHVlKiB2YWw7CiAgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZTsKICAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKLSAgICAKKwogICAgIHJl
c3VsdCA9IDA7CiAKICAgICB3aGlsZSAoKHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7
CkBAIC0yODkwLDI5ICsyODkwLDI5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblBy
b3BlcnR5KGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICghY3Vy
clZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewogICAgICAgICAgICAgICAgIHZhbHVl
cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgICAg
ICB2YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCisKICAgICAgICAgICAgIGlmICh2YWx1ZXMpCiAgICAgICAgICAgICAgICAgdmFsdWVz
LT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBjdXJyVmFsdWUucmVsZWFzZSgpOwotICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIGFsbG93Q29tbWEgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIFdoZW4gcGFyc2luZyB0aGUgJ3RyYW5zaXRpb24nIHNob3J0aGFuZCBwcm9wZXJ0eSwg
d2UgbGV0IGl0IGhhbmRsZSBidWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAogICAgICAgICAv
LyBwcm9wZXJ0aWVzLgogICAgICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkg
ewogICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTI5NDUsNyArMjk0NSw3IEBAIHN0YXRpYyBDU1NQYXJzZXJWYWx1ZSogc2tpcENvbW1h
SW5EYXNoYm9hcmRSZWdpb24oQ1NTUGFyc2VyVmFsdWVMaXN0ICphcmdzKQogYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsK
ICAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAKICAgICBpZiAodmFsdWUtPmlkID09IENTU1Zh
bHVlTm9uZSkgewpAQCAtMjk1NCw3ICsyOTU0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFz
aGJvYXJkUmVnaW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+
aWQpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdmFsaWQ7CiAgICAgfQotICAgICAgICAK
KwogICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IGZpcnN0UmVnaW9uID0gRGFzaGJvYXJkUmVn
aW9uOjpjcmVhdGUoKTsKICAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9IDA7CiAKQEAgLTI5
NjYsMTIgKzI5NjYsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhp
bnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHJlZ2lvbi0+bV9uZXh0ID0g
bmV4dFJlZ2lvbjsKICAgICAgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdpb24uZ2V0KCk7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZh
bHVlOjpGdW5jdGlvbikgewogICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBDb21tYXMgY291
bnQgYXMgdmFsdWVzLCBzbyBhbGxvdzoKICAgICAgICAgLy8gZGFzaGJvYXJkLXJlZ2lvbihsYWJl
bCwgdHlwZSwgdCwgciwgYiwgbCkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBlIHQgciBi
IGwpCiAgICAgICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUsIHQsIHIsIGIsIGwp
IG9yIGRhc2hib2FyZC1yZWdpb24obGFiZWwgdHlwZSB0IHIgYiBsKQpAQCAtMjk4MywyMSArMjk4
MywyMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGludCBudW1BcmdzID0gYXJn
cy0+c2l6ZSgpOwogICAgICAgICBpZiAoKG51bUFyZ3MgIT0gREFTSEJPQVJEX1JFR0lPTl9OVU1f
UEFSQU1FVEVSUyAmJiBudW1BcmdzICE9IChEQVNIQk9BUkRfUkVHSU9OX05VTV9QQVJBTUVURVJT
KjItMSkpICYmCiAgICAgICAgICAgICAobnVtQXJncyAhPSBEQVNIQk9BUkRfUkVHSU9OX1NIT1JU
X05VTV9QQVJBTUVURVJTICYmIG51bUFyZ3MgIT0gKERBU0hCT0FSRF9SRUdJT05fU0hPUlRfTlVN
X1BBUkFNRVRFUlMqMi0xKSkpIHsKICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgLy8gRmlyc3Qg
YXJnIGlzIGEgbGFiZWwuCiAgICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmcgPSBhcmdzLT5jdXJy
ZW50KCk7CiAgICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
REVOVCkgewogICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICByZWdpb24tPm1fbGFiZWwgPSBhcmct
PnN0cmluZzsKIAogICAgICAgICAvLyBTZWNvbmQgYXJnIGlzIGEgdHlwZS4KQEAgLTMwMTYsMTMg
KzMwMTYsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbnQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgcmVnaW9uLT5t
X2dlb21ldHJ5VHlwZSA9IGFyZy0+c3RyaW5nOwogCiAgICAgICAgIGlmIChudW1BcmdzID09IERB
U0hCT0FSRF9SRUdJT05fU0hPUlRfTlVNX1BBUkFNRVRFUlMgfHwgbnVtQXJncyA9PSAoREFTSEJP
QVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVSUyoyLTEpKSB7CiAgICAgICAgICAgICAvLyBU
aGlzIG9yaWdpbmFsbHkgdXNlZCBDU1NWYWx1ZUludmFsaWQgYnkgYWNjaWRlbnQuIEl0IG1pZ2h0
IGJlIG1vcmUgbG9naWNhbCB0byB1c2Ugc29tZXRoaW5nIGVsc2UuCiAgICAgICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJ
ZGVudGlmaWVyKENTU1ZhbHVlSW52YWxpZCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIHJlZ2lvbi0+c2V0VG9wKGFtb3VudCk7CiAgICAgICAgICAgICByZWdpb24tPnNldFJpZ2h0
KGFtb3VudCk7CiAgICAgICAgICAgICByZWdpb24tPnNldEJvdHRvbShhbW91bnQpOwpAQCAtMzAz
NywxMSArMzAzNywxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGlu
dCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAgIHZhbGlkID0gYXJnLT5p
ZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRVbml0KGFyZywgRkxlbmd0aCwgbV9zdHJpY3QpOwog
ICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gPwogICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUF1dG8p
IDoKICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShhcmctPmZW
YWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZy0+dW5pdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAg
ICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKICAgICAgICAgICAgICAgICBlbHNlIGlm
IChpID09IDEpCkBAIC0zMDYxLDcgKzMwNjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNo
Ym9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgaWYgKHZhbGlk
KQogICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
Zmlyc3RSZWdpb24ucmVsZWFzZSgpKSwgaW1wb3J0YW50KTsKLSAgICAgICAgCisKICAgICByZXR1
cm4gdmFsaWQ7CiB9CiAKQEAgLTMwNzQsNyArMzA3NCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VDb3VudGVyQ29udGVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3Ms
IGJvCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghY291bnRlcnMgJiYgbnVtQXJncyAhPSAx
ICYmIG51bUFyZ3MgIT0gMykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBDU1NQYXJz
ZXJWYWx1ZSogaSA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMwODcsMTEgKzMw
ODcsMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250
ZW50KENTU1BhcnNlclZhbHVlTGlzdCogYXJncywgYm8KICAgICAgICAgaSA9IGFyZ3MtPm5leHQo
KTsKICAgICAgICAgaWYgKGktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGkt
PmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisKICAgICAg
ICAgaSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKGktPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisKICAg
ICAgICAgc2VwYXJhdG9yID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShpLT5zdHJpbmcsIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSBpLT51bml0KTsKICAgICB9CiAKQEAgLTMxMDIs
MTEgKzMxMDIsMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50
ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCogYXJncywgYm8KICAgICBlbHNlIHsKICAgICAg
ICAgaWYgKGktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGktPmlWYWx1ZSAh
PSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisKICAgICAgICAgaSA9IGFy
Z3MtPm5leHQoKTsKICAgICAgICAgaWYgKGktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwogICAgICAgICBzaG9y
dCBscyA9IDA7CiAgICAgICAgIGlmIChpLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAg
ICBscyA9IENTU1ZhbHVlS2F0YWthbmFJcm9oYSAtIENTU1ZhbHVlRGlzYyArIDE7CkBAIC0zMTI1
LDcgKzMxMjUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlv
bi0+YXJnczsKLSAgICAKKwogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0
aW9uLT5uYW1lLCAicmVjdCgiKSB8fCAhYXJncykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMjY2LDcgKzMyNjYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKKwogICAgIGlmICghZm9udC0+bGluZUhlaWdodCkKICAgICAgICAgZm9udC0+bGlu
ZUhlaWdodCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9y
bWFsKTsKIApAQCAtMzMyMSw3ICszMzIxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENT
U1BhcnNlcjo6cGFyc2VGb250RmFtaWx5KCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghbmV4dFZhbHVlKQog
ICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTM1MTAsNyArMzUxMCw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICAgICAgICAgIGFsbG93Rm9ybWF0ID0gdHJ1ZTsKICAg
ICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICh2YWwtPnVu
aXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBh
cmUgdHdvIGFsbG93ZWQgZnVuY3Rpb25zOiBsb2NhbCgpIGFuZCBmb3JtYXQoKS4gICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIGFsbG93ZWQgZnVuY3Rpb25zOiBsb2Nh
bCgpIGFuZCBmb3JtYXQoKS4KICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9
IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7CiAgICAgICAgICAgICBpZiAoYXJncyAmJiBhcmdzLT5zaXpl
KCkgPT0gMSkgewogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1
bmN0aW9uLT5uYW1lLCAibG9jYWwoIikgJiYgIWV4cGVjdENvbW1hKSB7CkBAIC0zNTM1LDcgKzM1
MzUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYygpCiAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAKKwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpCiAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVu
ZChwYXJzZWRWYWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICBlbHNlIHsKQEAgLTM1NDQsNyArMzU0
NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICAgICAgfQogICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2YWx1ZXMt
Pmxlbmd0aCgpICYmICFmYWlsZWQpIHsKICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlT
cmMsIHZhbHVlcy5yZWxlYXNlKCksIG1faW1wb3J0YW50KTsKICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKQEAgLTM2NTEsNyArMzY1MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUlu
dChjb25zdCBVQ2hhciomIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluCiAg
ICAgY29uc3QgVUNoYXIqIGN1cnJlbnQgPSBzdHJpbmc7CiAgICAgaW50IGxvY2FsVmFsdWUgPSAw
OwogICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQg
JiYgaXNDU1NXaGl0ZXNwYWNlKCpjdXJyZW50KSkgCisgICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5k
ICYmIGlzQ1NTV2hpdGVzcGFjZSgqY3VycmVudCkpCiAgICAgICAgIGN1cnJlbnQrKzsKICAgICBp
ZiAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPT0gJy0nKSB7CiAgICAgICAgIG5lZ2F0aXZl
ID0gdHJ1ZTsKQEAgLTM2OTMsNyArMzY5Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9y
KGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZ2IgPSBtYWtlUkdCKHJlZCwgZ3JlZW4sIGJsdWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9ICAgICAgICAKKyAgICB9CiAgICAgLy8gVHJ5
IG5hbWVkIGNvbG9ycy4KICAgICBDb2xvciB0YzsKICAgICB0Yy5zZXROYW1lZENvbG9yKG5hbWUp
OwpAQCAtMzk3MCw3ICszOTcwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KGludCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93
IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgdmFsdWVzLgogICAgICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BJZCkgPT0gQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFk
b3cpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmICAgICAgICAgICAgCisj
ZW5kaWYKICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBnb29kLiAgQ29tbWl0IGl0LgogICAg
ICAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKHZhbGlk
VW5pdCh2YWwsIEZMZW5ndGgsIHRydWUpKSB7CkBAIC00MDAzLDcgKzQwMDMsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VTaGFkb3coaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
ICAgICBpZiAoIXBhcnNlZENvbG9yIHx8ICFjb250ZXh0LmFsbG93Q29sb3IpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0
aCBhbmQgaXMgaW52YWxpZCBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQg
aXMgYSBjb2xvciwgYnV0IGEgY29sb3IgaXNuJ3QgYWxsb3dlZCBhdCB0aGlzIHBvaW50LgotICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3Iu
cmVsZWFzZSgpKTsKICAgICAgICAgfQogCkBAIC00MDI1LDcgKzQwMjUsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VTaGFkb3coaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiBib29sIENTU1Bh
cnNlcjo6cGFyc2VSZWZsZWN0KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIC8v
IGJveC1yZWZsZWN0OiA8ZGlyZWN0aW9uPiA8b2Zmc2V0PiA8bWFzaz4KLSAgICAKKwogICAgIC8v
IERpcmVjdGlvbiBjb21lcyBmaXJzdC4KICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBDU1NSZWZsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbjsK
QEAgLTQwODUsNyArNDA4NSw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCB7CiAg
ICAgLCBtX2hvcml6b250YWxSdWxlKDApCiAgICAgLCBtX3ZlcnRpY2FsUnVsZSgwKQogICAgIHt9
Ci0gICAgCisKICAgICBib29sIGFsbG93QnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2FsbG93QnJl
YWs7IH0KICAgICBib29sIGFsbG93TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd051bWJl
cjsgfQogICAgIGJvb2wgYWxsb3dTbGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTbGFzaDsg
fQpAQCAtNDEwNiw3ICs0MTA2LDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsK
ICAgICAgICAgICAgIEFTU0VSVCghbV9sZWZ0KTsKICAgICAgICAgICAgIG1fbGVmdCA9IHZhbDsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtX2FsbG93QnJlYWsgPSBtX2FsbG93U2xh
c2ggPSBtX2FsbG93UnVsZSA9IHRydWU7CiAgICAgICAgIG1fYWxsb3dOdW1iZXIgPSAhbV9sZWZ0
OwogICAgIH0KQEAgLTQxNDksNyArNDE0OSw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29u
dGV4dCB7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtX2xlZnQpCiAgICAgICAgICAgICAgbV9s
ZWZ0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3JpZ2h0LT5nZXREb3VibGVWYWx1ZSgp
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3JpZ2h0LT5wcmltaXRpdmVUeXBlKCkp
OwotICAgICAgICAgICAgIAorCiAgICAgICAgIC8vIE5vdyBidWlsZCBhIHJlY3QgdmFsdWUgdG8g
aG9sZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZlIHZhbHVlcy4KICAgICAgICAgUmVmUHRyPFJl
Y3Q+IHJlY3QgPSBSZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcmVjdC0+c2V0VG9wKG1fdG9wKTsK
QEAgLTQxNjAsNyArNDE2MCw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCB7CiAg
ICAgICAgIC8vIEZpbGwgaW4gU1RSRVRDSCBhcyB0aGUgZGVmYXVsdCBpZiBpdCB3YXNuJ3Qgc3Bl
Y2lmaWVkLgogICAgICAgICBpZiAoIW1faG9yaXpvbnRhbFJ1bGUpCiAgICAgICAgICAgICBtX2hv
cml6b250YWxSdWxlID0gQ1NTVmFsdWVTdHJldGNoOwotICAgICAgICAgICAgCisKICAgICAgICAg
Ly8gVGhlIHZlcnRpY2FsIHJ1bGUgc2hvdWxkIG1hdGNoIHRoZSBob3Jpem9udGFsIHJ1bGUgaWYg
dW5zcGVjaWZpZWQuCiAgICAgICAgIGlmICghbV92ZXJ0aWNhbFJ1bGUpCiAgICAgICAgICAgICBt
X3ZlcnRpY2FsUnVsZSA9IG1faG9yaXpvbnRhbFJ1bGU7CkBAIC00MTg1LDI1ICs0MTg1LDI1IEBA
IHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCB7CiAgICAgICAgIC8vIE1ha2Ugb3VyIG5l
dyBib3JkZXIgaW1hZ2UgdmFsdWUgbm93LgogICAgICAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VW
YWx1ZTo6Y3JlYXRlKG1faW1hZ2UsIHJlY3QucmVsZWFzZSgpLCBtX2hvcml6b250YWxSdWxlLCBt
X3ZlcnRpY2FsUnVsZSk7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBtX2FsbG93QnJlYWs7CiAg
ICAgYm9vbCBtX2FsbG93TnVtYmVyOwogICAgIGJvb2wgbV9hbGxvd1NsYXNoOwogICAgIGJvb2wg
bV9hbGxvd1dpZHRoOwogICAgIGJvb2wgbV9hbGxvd1J1bGU7Ci0gICAgCisKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IG1faW1hZ2U7CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9w
OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV9sZWZ0OwotICAgIAorCiAgICAgQ1NTUGFyc2VyVmFsdWUqIG1fYm9yZGVyVG9wOwogICAgIENT
U1BhcnNlclZhbHVlKiBtX2JvcmRlclJpZ2h0OwogICAgIENTU1BhcnNlclZhbHVlKiBtX2JvcmRl
ckJvdHRvbTsKICAgICBDU1NQYXJzZXJWYWx1ZSogbV9ib3JkZXJMZWZ0OwotICAgIAorCiAgICAg
aW50IG1faG9yaXpvbnRhbFJ1bGU7CiAgICAgaW50IG1fdmVydGljYWxSdWxlOwogfTsKQEAgLTQy
NDMsNyArNDI0Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+JiByCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoY29udGV4dC5hbGxv
d051bWJlcigpICYmIHByb3BJZCAhPSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlKSB7CiAg
ICAgICAgIC8vIEFsbG93IHRoZSBzbGljZXMgdG8gYmUgb21pdHRlZCBmb3IgaW1hZ2VzIHRoYXQg
ZG9uJ3QgZml0IHRvIGEgYm9yZGVyLiAgV2UganVzdCBzZXQgdGhlIHNsaWNlcyB0byBiZSAwLgog
ICAgICAgICBjb250ZXh0Lm1fdG9wID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CkBAIC00MjU1LDcgKzQyNTUsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCwgUmVm
UHRyPENTU1ZhbHVlPiYgcgogICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNvbW1pdEJvcmRlcklt
YWdlKHRoaXMsIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAK
KwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDMzNCw3ICs0MzM0LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQ291bnRlcihpbnQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVlLCBib29sIGlt
cG9ydGFudCkKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b3VudGVyTmFtZTsKLSAgICAKKwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIENTU1BhcnNl
clZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgICAgICBzd2l0Y2ggKHN0
YXRlKSB7CkBAIC00MzYxLDcgKzQzNjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVy
KGludCBwcm9wSWQsIGludCBkZWZhdWx0VmFsdWUsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIGlmIChsaXN0LT5sZW5ndGgoKSA+
IDApIHsKICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBsaXN0LnJlbGVhc2UoKSwgaW1wb3J0
YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00Mzc0LDExICs0Mzc0LDExIEBAIHN0YXRp
YyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUdyYWRpZW50UG9pbnQoQ1NTUGFy
c2VyVmFsdWUqIGEsIGJvb2wKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3Vs
dDsKICAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0g
ICAgICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAibGVmdCIpICYmIGhvcml6
b250YWwpIHx8IAotICAgICAgICAgICAgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgInRv
cCIpICYmICFob3Jpem9udGFsKSkKKyAgICAgICAgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShhLT5z
dHJpbmcsICJsZWZ0IikgJiYgaG9yaXpvbnRhbCkKKyAgICAgICAgICAgIHx8IChlcXVhbElnbm9y
aW5nQ2FzZShhLT5zdHJpbmcsICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UpOwotICAgICAgICBlbHNlIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+
c3RyaW5nLCAicmlnaHQiKSAmJiBob3Jpem9udGFsKSB8fAotICAgICAgICAgICAgICAgICAoZXF1
YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAiYm90dG9tIikgJiYgIWhvcml6b250YWwpKQorICAg
ICAgICBlbHNlIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAicmlnaHQiKSAmJiBo
b3Jpem9udGFsKQorICAgICAgICAgICAgICAgICB8fCAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3Ry
aW5nLCAiYm90dG9tIikgJiYgIWhvcml6b250YWwpKQogICAgICAgICAgICAgcmVzdWx0ID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxMDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpOwogICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJj
ZW50ZXIiKSkKICAgICAgICAgICAgIHJlc3VsdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
NTAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwpAQCAtNDM5MSwyNyArNDM5
MSwyNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciogcCwg
Q1NTUGFyc2VyVmFsdWUqIGEsIENTU0dyYWRpZW50QwogewogICAgIGlmIChhLT51bml0ICE9IENT
U1BhcnNlclZhbHVlOjpGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikgJiYK
ICAgICAgICAgIWVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAidG8oIikgJiYK
ICAgICAgICAgIWVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3Rv
cCgiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgQ1NTUGFyc2VyVmFsdWVM
aXN0KiBhcmdzID0gYS0+ZnVuY3Rpb24tPmFyZ3M7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9u
LT5uYW1lLCAiZnJvbSgiKSB8fCAKLSAgICAgICAgZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rp
b24tPm5hbWUsICJ0bygiKSkgeworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0
aW9uLT5uYW1lLCAiZnJvbSgiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5j
dGlvbi0+bmFtZSwgInRvKCIpKSB7CiAgICAgICAgIC8vIFRoZSAiZnJvbSIgYW5kICJ0byIgc3Rv
cHMgZXhwZWN0IDEgYXJndW1lbnQuCiAgICAgICAgIGlmIChhcmdzLT5zaXplKCkgIT0gMSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKSkKICAgICAgICAgICAgIHN0b3Au
bV9zdG9wID0gMC5mOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdG9wLm1fc3RvcCA9IDEu
ZjsKLSAgICAgICAgCisKICAgICAgICAgaW50IGlkID0gYXJncy0+Y3VycmVudCgpLT5pZDsKICAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVh
ICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQogICAg
ICAgICAgICAgc3RvcC5tX2NvbG9yID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZp
ZXIoaWQpOwpAQCAtNDQyMCwxMiArNDQyMCwxMiBAQCBzdGF0aWMgYm9vbCBwYXJzZUdyYWRpZW50
Q29sb3JTdG9wKENTU1BhcnNlciogcCwgQ1NTUGFyc2VyVmFsdWUqIGEsIENTU0dyYWRpZW50Qwog
ICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgCisKICAgICAvLyBUaGUgImNvbG9yLXN0b3AiIGZ1bmN0aW9uIGV4cGVjdHMgMyBh
cmd1bWVudHMuCiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAi
Y29sb3Itc3RvcCgiKSkgewogICAgICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDMpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIENTU1BhcnNlclZhbHVlKiBz
dG9wQXJnID0gYXJncy0+Y3VycmVudCgpOwogICAgICAgICBpZiAoc3RvcEFyZy0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICBzdG9wLm1fc3Rv
cCA9IChmbG9hdClzdG9wQXJnLT5mVmFsdWUgLyAxMDAuZjsKQEAgLTQ0MzcsNyArNDQzNyw3IEBA
IHN0YXRpYyBib29sIHBhcnNlR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJz
ZXJWYWx1ZSogYSwgQ1NTR3JhZGllbnRDCiAgICAgICAgIHN0b3BBcmcgPSBhcmdzLT5uZXh0KCk7
CiAgICAgICAgIGlmIChzdG9wQXJnLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8
fCBzdG9wQXJnLT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCisKICAgICAgICAgc3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaW50
IGlkID0gc3RvcEFyZy0+aWQ7CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQg
fHwgKGlkID49IENTU1ZhbHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlk
ID09IENTU1ZhbHVlTWVudSkKQEAgLTQ0NTQsMTIgKzQ0NTQsMTIgQEAgc3RhdGljIGJvb2wgcGFy
c2VHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDU1NH
cmFkaWVudEMKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4m
IGdyYWRpZW50KQogewogICAgIFJlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NH
cmFkaWVudFZhbHVlOjpjcmVhdGUoKTsKLSAgICAKKwogICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50
cy4KICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LT5mdW5jdGlvbi0+YXJnczsKICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpID09IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBp
cyB0aGUgZ3JhZGllbnQgdHlwZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIuCiAgICAgQ1NTUGFyc2Vy
VmFsdWUqIGEgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKQEAgLTQ0NzAsMTIgKzQ0NzAsMTIgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQpCiAgICAg
ICAgIHJlc3VsdC0+c2V0VHlwZShDU1NSYWRpYWxHcmFkaWVudCk7CiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICAvLyBDb21tYS4KICAgICBhID0gYXJncy0+bmV4
dCgpOwogICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8
fCBhLT5pVmFsdWUgIT0gJywnKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICAv
LyBOZXh0IGNvbWVzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGdyYWRpZW50IGFzIGFuIHgg
eSBwYWlyLiAgVGhlcmUgaXMgbm8KICAgICAvLyBjb21tYSBiZXR3ZWVuIHRoZSB4IGFuZCB0aGUg
eSB2YWx1ZXMuCiAgICAgLy8gRmlyc3QgWC4gIEl0IGNhbiBiZSBsZWZ0LCByaWdodCwgbnVtYmVy
IG9yIHBlcmNlbnQuCkBAIC00NDg2LDcgKzQ0ODYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VH
cmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCkKICAgICBpZiAoIXBvaW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZSgp
KTsKLSAgICAKKwogICAgIC8vIEZpcnN0IFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJl
ciBvciBwZXJjZW50LgogICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFhKQpAQCAtNDQ5
NSwyNSArNDQ5NSwyNSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8Q1NT
VmFsdWU+JiBncmFkaWVudCkKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmVzdWx0LT5zZXRGaXJzdFkocG9pbnQucmVsZWFzZSgpKTsKLSAgICAKKwogICAgIC8v
IENvbW1hIGFmdGVyIHRoZSBmaXJzdCBwb2ludC4KICAgICBhID0gYXJncy0+bmV4dCgpOwogICAg
IGlmICghYSB8fCBhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFs
dWUgIT0gJywnKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgIC8v
IEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgYSBudW1lcmljIHJhZGl1
cy4KICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gQ1NTUmFkaWFsR3JhZGllbnQpIHsKICAgICAg
ICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHJlc3VsdC0+c2V0Rmlyc3RSYWRpdXMoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShhLT5m
VmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCiAgICAgICAgIGEgPSBhcmdzLT5u
ZXh0KCk7CiAgICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciB8fCBhLT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKKwogICAgIC8vIE5leHQgaXMgdGhlIGVuZGluZyBwb2ludCBmb3IgdGhlIGdyYWRp
ZW50IGFzIGFuIHgsIHkgcGFpci4KICAgICAvLyBTZWNvbmQgWC4gIEl0IGNhbiBiZSBsZWZ0LCBy
aWdodCwgbnVtYmVyIG9yIHBlcmNlbnQuCiAgICAgYSA9IGFyZ3MtPm5leHQoKTsKQEAgLTQ1MjMs
NyArNDUyMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1
ZT4mIGdyYWRpZW50KQogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXN1bHQtPnNldFNlY29uZFgocG9pbnQucmVsZWFzZSgpKTsKLSAgICAKKwogICAgIC8vIFNl
Y29uZCBZLiAgSXQgY2FuIGJlIHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVyY2VudC4KICAgICBh
ID0gYXJncy0+bmV4dCgpOwogICAgIGlmICghYSkKQEAgLTQ1MzksNyArNDUzOSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQogICAg
ICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWEgfHwgYS0+dW5pdCAhPSBDU1NQ
YXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAg
ICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTUyLDIyICs0NTUyLDIyIEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQogICAgICAg
ICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0b3AuCiAgICAgICAgIGlm
IChhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0gJywn
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICAvLyBOb3cg
ZXhhbWluZSB0aGUgc3RvcCBpdHNlbGYuCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAg
ICAgIGlmICghYSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAg
ICAgLy8gVGhlIGZ1bmN0aW9uIG5hbWUgbmVlZHMgdG8gYmUgb25lIG9mICJmcm9tIiwgInRvIiwg
b3IgImNvbG9yLXN0b3AuIgogICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwogICAg
ICAgICBpZiAoIXBhcnNlR3JhZGllbnRDb2xvclN0b3AodGhpcywgYSwgc3RvcCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJlc3VsdC0+YWRkU3RvcChzdG9wKTsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gQWR2YW5jZQogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAg
IH0KLSAgICAKKwogICAgIGdyYWRpZW50ID0gcmVzdWx0LnJlbGVhc2UoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTQ1NzUsMTIgKzQ1NzUsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3Jh
ZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQpCiBib29sIENTU1BhcnNlcjo6cGFyc2VD
YW52YXMoUmVmUHRyPENTU1ZhbHVlPiYgY2FudmFzKQogewogICAgIFJlZlB0cjxDU1NDYW52YXNW
YWx1ZT4gcmVzdWx0ID0gQ1NTQ2FudmFzVmFsdWU6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgLy8g
V2FsayB0aGUgYXJndW1lbnRzLgogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzOwogICAgIGlmICghYXJncyB8fCBhcmdz
LT5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgLy8gVGhl
IGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYW52YXMgbmFtZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIu
CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGEgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgaWYgKCFhIHx8
IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKQEAgLTQ2NjksNyArNDY2
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJh
dGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHVuc2lnbmVkIGFy
Z0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hcmdDb3VudDsgfQogICAgIENTU1BhcnNlcjo6VW5p
dHMgdW5pdCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdDsgfQpAQCAtNDY5NSwxNyArNDY5NSwxNyBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSgpCiAg
ICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2
YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+
dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5jdGlvbikKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwogICAgICAgICAvLyBFdmVyeSBwcmltaXRp
dmUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgogICAgICAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7CiAgICAgICAgIGlmICghYXJncykK
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwogICAgICAgICAvLyBTZWUgaWYgdGhl
IHNwZWNpZmllZCBwcmltaXRpdmUgaXMgb25lIHdlIHVuZGVyc3RhbmQuCiAgICAgICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbkluZm8gaW5mbyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpOwogICAgICAgICBp
ZiAoaW5mby51bmtub3duKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAKKwogICAg
ICAgICBpZiAoIWluZm8uaGFzQ29ycmVjdEFyZ0NvdW50KGFyZ3MtPnNpemUoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKIApAQCAtNDcyNSw3ICs0NzI1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkVW5pdChhLCB1bml0LCB0cnVl
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICAvLyBBZGQgdGhlIHZhbHVlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCiAg
ICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCkpOwog
CkBAIC00NzM1LDExICs0NzM1LDExIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJz
ZXI6OnBhcnNlVHJhbnNmb3JtKCkKICAgICAgICAgICAgIGlmIChhLT51bml0ICE9IENTU1BhcnNl
clZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBhcmdOdW1iZXIrKzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtNDc4MSw3ICs0NzgxLDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luKGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50
JiBwcm9wSWQyLCBpbnQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAg
IAorCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC00ODEzLDcgKzQ4MTMsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VQZXJzcGVjdGl2ZU9yaWdpbihpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEs
IGludCYgcHJvcElkMiwgUgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTUwNDEsOSArNTA0MSw5IEBAIFVDaGFy
KiBDU1NQYXJzZXI6OnRleHQoaW50ICpsZW5ndGgpCiAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsK
ICAgICAgICAgKm91dCsrID0gdWM7CiAgICAgfQotICAgIAorCiAgICAgKmxlbmd0aCA9IG91dCAt
IHN0YXJ0OwotICAgIAorCiAgICAgLy8gSWYgd2UgaGF2ZSBhbiB1bnJlY29nbml6ZWQgQC1rZXl3
b3JkLCBhbmQgaWYgd2UgaGFuZGxlZCBhbnkgZXNjYXBlcyBhdCBhbGwsIHRoZW4KICAgICAvLyB3
ZSBzaG91bGQgYXR0ZW1wdCB0byBhZGp1c3QgeXlUb2sgdG8gdGhlIGNvcnJlY3QgdHlwZS4KICAg
ICBpZiAoeXlUb2sgPT0gQVRLRVlXT1JEICYmIHNhd0VzY2FwZSkKQEAgLTUyMTAsNyArNTIxMCw3
IEBAIENTU1J1bGVMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IGxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgQ1NTUnVs
ZUxpc3QqIGxpc3RQdHIgPSBsaXN0LmdldCgpOwotICAgIAorCiAgICAgbV9wYXJzZWRSdWxlTGlz
dHMuYXBwZW5kKGxpc3QucmVsZWFzZSgpKTsKICAgICByZXR1cm4gbGlzdFB0cjsKIH0KQEAgLTUy
OTYsNyArNTI5Niw3IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlVmFyaWFibGVzUnVsZShN
ZWRpYUxpc3QqIG1lZGlhTGlzdCwgYm9vbCB2YXJpYWJsZXNLZXl3CiAgICAgbV9hbGxvd0ltcG9y
dFJ1bGVzID0gZmFsc2U7CiAgICAgUmVmUHRyPENTU1ZhcmlhYmxlc1J1bGU+IHJ1bGUgPSBDU1NW
YXJpYWJsZXNSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0LCBtZWRpYUxpc3QsIHZhcmlhYmxlc0tl
eXdvcmQpOwogICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9u
OjpjcmVhdGUocnVsZS5nZXQoKSwgbV92YXJpYWJsZU5hbWVzLCBtX3ZhcmlhYmxlVmFsdWVzKSk7
Ci0gICAgY2xlYXJWYXJpYWJsZXMoKTsgICAgCisgICAgY2xlYXJWYXJpYWJsZXMoKTsKICAgICBD
U1NSdWxlKiByZXN1bHQgPSBydWxlLmdldCgpOwogICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFw
cGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTUzODUsOCArNTM4
NSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhcmlhYmxlKENTU1ZhcmlhYmxlc0RlY2xhcmF0
aW9uKiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgaWYgKG1fdmFyaWFibGVOYW1lcy5z
aXplKCkpIHsKICAgICAgICAgb2sgPSB0cnVlOwogICAgICAgICBkZWNsYXJhdGlvbi0+YWRkUGFy
c2VkVmFyaWFibGUodmFyaWFibGVOYW1lLCBtX3ZhcmlhYmxlVmFsdWVzWzBdKTsKLSAgICB9IAot
ICAgIAorICAgIH0KKwogICAgIGNsZWFyVmFyaWFibGVzKCk7CiAKICAgICByZXR1cm4gb2s7CkBA
IC01Mzk5LDcgKzUzOTksNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VQcm9wZXJ0eVdpdGhSZXNv
bHZlZFZhcmlhYmxlcyhpbnQgcHJvcElkLCBib29sIGlzSW1wb3J0YW50LAogCiAgICAgaWYgKHBh
cnNlVmFsdWUocHJvcElkLCBpc0ltcG9ydGFudCkpCiAgICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQ
YXJzZWRQcm9wZXJ0aWVzKG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVz
KTsKLSAgICAgICAgCisKICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICBtX3ZhbHVlTGlzdCA9
IDA7CiB9CkBAIC01NDE0LDggKzU0MTQsOCBAQCBib29sIENTU1BhcnNlcjo6Y2hlY2tGb3JWYXJp
YWJsZXMoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCiAgICAgICAgIGlmICh2YWx1ZUxp
c3QtPnZhbHVlQXQoaSktPmlzVmFyaWFibGUoKSkgewogICAgICAgICAgICAgaGFzVmFyaWFibGVz
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IAotICAgICAgICAKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmICh2YWx1ZUxpc3QtPnZhbHVlQXQoaSktPnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uICYmIGNoZWNrRm9yVmFyaWFibGVzKHZhbHVlTGlzdC0+dmFsdWVB
dChpKS0+ZnVuY3Rpb24tPmFyZ3MpKSB7CiAgICAgICAgICAgICBoYXNWYXJpYWJsZXMgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC01NDYwLDExICs1NDYwLDExIEBAIFdlYktpdENTU0tl
eWZyYW1lUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZVJ1bGUoQ1NTUGFyc2VyVmFsdWVM
aXN0KiBrZXlzKQogICAgICAgICBrZXlTdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIoa2V5KTsKICAg
ICAgICAga2V5U3RyaW5nICs9ICIlIjsKICAgICB9Ci0gICAgCisKICAgICBSZWZQdHI8V2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlPiBrZXlmcmFtZSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6Y3JlYXRl
KG1fc3R5bGVTaGVldCk7CiAgICAga2V5ZnJhbWUtPnNldEtleVRleHQoa2V5U3RyaW5nKTsKICAg
ICBrZXlmcmFtZS0+c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNy
ZWF0ZSgwLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGllcykpOwotICAg
IAorCiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAKICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUq
IGtleWZyYW1lUHRyID0ga2V5ZnJhbWUuZ2V0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGViOWUwMWExMDUzYjBk
MmFiMDJkYzk1MmM5YmU1MTZiNTBhYWIxYTQuLmQxYTVhNDNmODliYmYyNTM0MDMyOTJlZjA0ZDQy
OTA2N2ZkN2FmOWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC04NSw3ICs4NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBwYXJzZUZpbGxQb3NpdGlvbihSZWZQdHI8Q1NTVmFsdWU+JiwgUmVm
UHRyPENTU1ZhbHVlPiYpOwogICAgICAgICB2b2lkIHBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NT
VmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwogICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBwYXJzZUZpbGxTaXplKGludCBwcm9wSWQsIGJvb2wgJmFsbG93Q29tbWEpOwotICAgICAgICAK
KwogICAgICAgICBib29sIHBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElk
MSwgaW50JiBwcm9wSWQyLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwog
ICAgICAgICBib29sIHBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHBy
b3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzLCBib29sIGltcG9ydGFudCk7CiAKQEAgLTEwOCw3
ICsxMDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGFyc2VBbmltYXRp
b25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJvb2wg
cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgYm9vbCBw
YXJzZUFuaW1hdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGJvb2wgcGFyc2VEYXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKIAogICAgICAgICBib29sIHBhcnNlU2hhcGUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
OwpAQCAtMTQ4LDcgKzE0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBw
YXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIGJvb2wgcGFy
c2VCb3JkZXJJbWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCwgUmVmUHRyPENTU1ZhbHVl
PiYpOwogICAgICAgICBib29sIHBhcnNlQm9yZGVyUmFkaXVzKGludCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbCBwYXJzZVJlZmxlY3QoaW50IHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpOwogCiAgICAgICAgIC8vIEltYWdlIGdlbmVyYXRvcnMKQEAgLTI0
MywxNiArMjQzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVUNoYXIqIHRleHQo
aW50KiBsZW5ndGgpOwogICAgICAgICB2b2lkIGNvdW50TGluZXMoKTsKICAgICAgICAgaW50IGxl
eCgpOwotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcmVjaGVja0F0S2V5
d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuKTsKLSAgICAKKwogICAgICAgICB2b2lkIHNl
dHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciog
c3VmZml4KTsKIAogICAgICAgICBib29sIGluU2hvcnRoYW5kKCkgY29uc3QgeyByZXR1cm4gbV9p
blBhcnNlU2hvcnRoYW5kOyB9CiAKICAgICAgICAgdm9pZCBjaGVja0Zvck9ycGhhbmVkVW5pdHMo
KTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBjbGVhclZhcmlhYmxlcygpOwogCiAgICAgICAg
IHZvaWQgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7CkBAIC0yOTQsNyArMjk0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBNZWRpYVF1ZXJ5KiBtX2Zsb2F0aW5nTWVkaWFRdWVy
eTsKICAgICAgICAgTWVkaWFRdWVyeUV4cCogbV9mbG9hdGluZ01lZGlhUXVlcnlFeHA7CiAgICAg
ICAgIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdDsK
LSAgICAgICAgCisKICAgICAgICAgVmVjdG9yPENTU1NlbGVjdG9yKj4gbV9yZXVzYWJsZVNlbGVj
dG9yVmVjdG9yOwogCiAgICAgICAgIC8vIGRlZmluZXMgdW5pdHMgYWxsb3dlZCBmb3IgYSBjZXJ0
YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdApAQCAtMzE3LDcgKzMxNyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIHZhbGlkVW5p
dChDU1NQYXJzZXJWYWx1ZSosIFVuaXRzLCBib29sIHN0cmljdCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25JbmZvOwogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMjNhOTkxZTlkZWNhNTVk
MzQ2NDlkODRhYTJjN2M3ZjNlM2I5YmMxNy4uM2IzNmE0YWQ4NzA1NjdkZmVlOTUxNGNkMmM4NWNi
ZDU0OWZhN2FjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
QEAgLTI0LDcgKzI0LDcgQEAKICAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTQ0NSwxMiArNDQ1LDEyIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZD4g
ZnJvbnRlbmQpCiAgICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkpOwogCiAgICAgcG9w
dWxhdGVTY3JpcHRPYmplY3RzKCk7Ci0gICAgCisKICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxl
ID09IEN1cnJlbnRQYW5lbCkgewogICAgICAgICBTdHJpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGlu
ZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUpOwogICAgICAgICBtX3Nob3dB
ZnRlclZpc2libGUgPSBzcGVjaWFsUGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGlu
Zyk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKG1fbm9kZVRvRm9jdXMpCiAgICAgICAgIGZvY3Vz
Tm9kZSgpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtNDY3LDcgKzQ2Nyw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdygpCiAKICAgICBpZiAobV9vcGVuaW5n
RnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlmIChtX2Zyb250ZW5kKQog
ICAgICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKICAgICBlbHNlIHsKQEAgLTYwNCwx
MCArNjA0LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmpl
Y3RzKCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1bmJpbmRBbGxSZXNvdXJjZXMoKQog
ewotICAgIFJlc291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5kID0gbV9yZXNvdXJjZXMu
ZW5kKCk7IAotICAgIGZvciAoUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkgCi0gICAgICAgIGl0LT5zZWNvbmQt
PnJlbGVhc2VTY3JpcHRPYmplY3QoMCk7IAotICAgIAorICAgIFJlc291cmNlc01hcDo6aXRlcmF0
b3IgcmVzb3VyY2VzRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChSZXNvdXJjZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5k
OyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5yZWxlYXNlU2NyaXB0T2JqZWN0KDApOworCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBk
YXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJh
c2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgICAgIC8vIHVuYmluZEFsbFJlc291cmNlcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBkYXRh
YmFzZSBhbmQgRE9NIHN0b3JhZ2UKICAgICAgICAgLy8gcmVzb3VyY2VzIGFyZSBjbGVhcmVkIHNv
IHRoYXQgaXQgaGFzIGEgY2hhbmNlIHRvIHVuYmluZCB0aGVtLgogICAgICAgICB1bmJpbmRBbGxS
ZXNvdXJjZXMoKTsKLSAgICAgICAgCisKICAgICAgICAgbV9jc3NTdG9yZS0+cmVzZXQoKTsKICAg
ICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc2V0KCk7
CkBAIC05ODEsMTEgKzk4MSwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdElt
cG9ydGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJgogewogICAgIGlm
ICghZW5hYmxlZCgpIHx8ICFtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQogICAgICAgICByZXR1
cm47Ci0gICAgCisKICAgICBJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNl
cy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0
dXJuOwotICAgIAorCiAgICAgcmVzb3VyY2UtPnNldE92ZXJyaWRlQ29udGVudChTY3JpcHRTdHJp
bmcoc291cmNlU3RyaW5nKSwgSW5zcGVjdG9yUmVzb3VyY2U6OlNjcmlwdCk7CiAKICAgICBpZiAo
bV9mcm9udGVuZCkKQEAgLTEyMDgsNyArMTIwOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6Z2V0Q29va2llcyhsb25nIGNhbGxJZCkKICAgICBlbHNlCiAgICAgICAgIG1fZnJvbnRlbmQt
PmRpZEdldENvb2tpZXMoY2FsbElkLCBidWlsZEFycmF5Rm9yQ29va2llcyhyYXdDb29raWVzTGlz
dCksIFN0cmluZygpKTsKIH0KLSAgICAKKwogU2NyaXB0QXJyYXkgSW5zcGVjdG9yQ29udHJvbGxl
cjo6YnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3Qp
CiB7CiAgICAgU2NyaXB0QXJyYXkgY29va2llcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5
KCk7CkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yQ29udHJvbGxl
cjo6YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiAgICAgdmFsdWUu
c2V0KCJzZXNzaW9uIiwgY29va2llLnNlc3Npb24pOwogICAgIHJldHVybiB2YWx1ZTsKIH0KLSAg
ICAKKwogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0
b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKQEAgLTE0MTksNyArMTQxOSw3IEBAIFNjcmlwdE9iamVj
dCBJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFBy
b2ZpbGUmIHByb2ZpCiBTdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0Q3VycmVudFVzZXJJ
bml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIgPSBmYWxzZSkK
IHsKICAgICBpZiAoaW5jcmVtZW50UHJvZmlsZU51bWJlcikKLSAgICAgICAgbV9jdXJyZW50VXNl
ckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJl
cisrOyAgICAgICAgCisgICAgICAgIG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVy
ID0gbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIrKzsKIAogICAgIHJldHVybiBTdHJp
bmc6OmZvcm1hdCgiJXMuJWQiLCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUsIG1fY3VycmVudFVz
ZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKTsKIH0KQEAgLTE1OTEsNyArMTU5MSw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCB1bnNpZ25lZCBsaW5lTnVtCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKIHsKICAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChzb3VyY2VJRCwg
bGluZU51bWJlcik7Ci0gCisKICAgICBTdHJpbmcgdXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChz
b3VyY2VJRCk7CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2
OTUsNyArMTY5NSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvCiAKICAgICAgICAgY29udGV4
dC5yZXN0b3JlKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm93IGRvIHRoZSBmaWxsCiAgICAg
Y29udGV4dC5hZGRQYXRoKHF1YWRQYXRoKTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxs
Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwpAQCAtMTgzNiw3ICsxODM2LDcgQEAgYm9vbCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSYg
ZWxhcHNlZCkKIAogICAgIGRvdWJsZSBzdGFydFRpbWUgPSBpdC0+c2Vjb25kOwogICAgIG1fdGlt
ZXMucmVtb3ZlKGl0KTsKLSAgICAKKwogICAgIGVsYXBzZWQgPSBjdXJyZW50VGltZSgpICogMTAw
MCAtIHN0YXJ0VGltZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5MDQsNSArMTkwNCw1IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0gICAgCisKICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4
IDExNjQ3MzY1OTlmZDUyOTI5N2MzY2E0OTg2OWE2MjIyMzZmMjAwYTYuLjA4MzNlMTU4MmJhZDY0
MmI4YmEyOGRhYWI2M2ZlM2EwZjhhZDczNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTc0OCw3ICs3NDgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpk
aWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2Zyb250ZW5kLT5jaGls
ZE5vZGVDb3VudFVwZGF0ZWQocGFyZW50SWQsIDApOwogICAgIH0gZWxzZQogICAgICAgICBtX2Zy
b250ZW5kLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KG5vZGUpKTsKLSAgICB1bmJpbmQobm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7ICAg
IAorICAgIHVuYmluZChub2RlLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQpAQCAt
NzYxLDE0ICs3NjEsMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0
cihFbGVtZW50KiBlbGVtZW50KQogICAgIG1fZnJvbnRlbmQtPmF0dHJpYnV0ZXNVcGRhdGVkKGlk
LCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCkpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29s
IGF1dGhvck9ubHkpICAgIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KQogewogICAgIE5vZGUqIG5vZGUg
PSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVz
KGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKKwogICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBub2RlLT5vd25lckRvY3Vt
ZW50KCktPmRlZmF1bHRWaWV3KCk7CiAgICAgaWYgKCFkZWZhdWx0VmlldykgewogICAgICAgICBt
X2Zyb250ZW5kLT5kaWRHZXRTdHlsZXMoY2FsbElkLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKCkp
OwpAQCAtNzg5LDcgKzc4OSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlcyhs
b25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKIAogICAgIHJlc3VsdC5z
ZXQoInN0eWxlQXR0cmlidXRlcyIsIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1l
bnQpKTsKICAgICByZXN1bHQuc2V0KCJwc2V1ZG9FbGVtZW50cyIsIGJ1aWxkQXJyYXlGb3JQc2V1
ZG9FbGVtZW50cyhlbGVtZW50LCBhdXRob3JPbmx5KSk7Ci0gICAgCisKICAgICBTY3JpcHRPYmpl
Y3QgY3VycmVudFN0eWxlID0gcmVzdWx0OwogICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKQEAg
LTkwNiw3ICs5MDYsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChs
b25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAvLyBSZW1vdmUgZGlzYWJsZWQgcHJvcGVydHkgZW50cnkgZm9yIHByb3Bl
cnR5IHdpdGggZ2l2ZW4gbmFtZS4gCisgICAgLy8gUmVtb3ZlIGRpc2FibGVkIHByb3BlcnR5IGVu
dHJ5IGZvciBwcm9wZXJ0eSB3aXRoIGdpdmVuIG5hbWUuCiAgICAgSWRUb0Rpc2FibGVkU3R5bGVN
YXA6Oml0ZXJhdG9yIGRpc2FibGVkSXQgPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRTdHlsZS5m
aW5kKHN0eWxlSWQpOwogICAgIGlmIChkaXNhYmxlZEl0ICE9IGNzc1N0b3JlKCktPmlkVG9EaXNh
YmxlZFN0eWxlLmVuZCgpKQogICAgICAgICBkaXNhYmxlZEl0LT5zZWNvbmQucmVtb3ZlKHByb3Bl
cnR5TmFtZSk7CkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBw
bHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJgogICAg
ICAgICAvLyBTZXQgdGhlIHByb3BlcnR5IG9uIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLgog
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5
KG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgZWMpOwotICAgICAgICAvLyBSZW1vdmUgZGlzYWJsZWQg
cHJvcGVydHkgZW50cnkgZm9yIHByb3BlcnR5IHdpdGggdGhpcyBuYW1lLiAKKyAgICAgICAgLy8g
UmVtb3ZlIGRpc2FibGVkIHByb3BlcnR5IGVudHJ5IGZvciBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFt
ZS4KICAgICAgICAgaWYgKGRpc2FibGVkSXQgIT0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5
bGUuZW5kKCkpCiAgICAgICAgICAgICBkaXNhYmxlZEl0LT5zZWNvbmQucmVtb3ZlKG5hbWUpOwog
ICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5hcHBlbmQobmFtZSk7Cg==
</data>
<flag name="review"
          id="40902"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>