<?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>177843</bug_id>
          
          <creation_ts>2017-10-03 15:10:27 -0700</creation_ts>
          <short_desc>Modernize WebKit&apos;s back forward list code</short_desc>
          <delta_ts>2018-02-01 15:55:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>182409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>berto</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1356074</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-03 15:10:27 -0700</bug_when>
    <thetext>Moderize WebKit&apos;s back forward list code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356076</commentid>
    <comment_count>1</comment_count>
      <attachid>322590</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-03 15:13:05 -0700</bug_when>
    <thetext>Created attachment 322590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356079</commentid>
    <comment_count>2</comment_count>
      <attachid>322592</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-03 15:19:43 -0700</bug_when>
    <thetext>Created attachment 322592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356081</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-03 15:20:48 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356083</commentid>
    <comment_count>4</comment_count>
      <attachid>322592</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-10-03 15:24:41 -0700</bug_when>
    <thetext>Comment on attachment 322592
Patch

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

&gt; Source/WebKit/UIProcess/WebBackForwardList.cpp:-76
&gt; -            ASSERT(m_entries[i]);

Did you dig into the reasoning behind this? Seems likely it&apos;s not just here for fun, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356089</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-03 15:31:29 -0700</bug_when>
    <thetext>It&apos;s now not needed.  m_entries[i] used to be a RefPtr and now it&apos;s a Ref</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356090</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-03 15:32:01 -0700</bug_when>
    <thetext>In fact, it doesn&apos;t compile any more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356118</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-10-03 16:15:42 -0700</bug_when>
    <thetext>Ah!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356180</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-03 17:51:38 -0700</bug_when>
    <thetext>http://trac.webkit.org/r222824</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356181</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-03 17:52:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/34803896&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322590</attachid>
            <date>2017-10-03 15:13:05 -0700</date>
            <delta_ts>2017-10-03 15:19:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177843-20171003151305.patch</filename>
            <type>text/plain</type>
            <size>25499</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjI4MTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE3LTEwLTAzICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJpemUgV2Vi
S2l0J3MgYmFjayBmb3J3YXJkIGxpc3QgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3ODQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIFJlZiBpbnN0ZWFkIG9mIFJlZlB0ciB3aGVuIHBvc3Np
YmxlLgorICAgICAgICBVc2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdoZW4gcG9z
c2libGUuCisgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBudWxsIGNoZWNrcy4KKyAgICAgICAg
UmVkdWNlIHVubmVjZXNzYXJ5IFZlY3RvciBjb3B5aW5nLgorCisgICAgICAgICogU2hhcmVkL1Nl
c3Npb25TdGF0ZS5oOgorICAgICAgICAqIFNoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJdGVtLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKEFQ
STo6TG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoQVBJ
OjpMb2FkZXJDbGllbnQ6OnNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlz
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1Bh
Z2VTZXRQYWdlTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpwYWdlQ2xv
c2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3VycmVudEl0ZW0gY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0SW5kZXggY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNBUElBcnJheVdpdGhMaW1pdCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RB
c0FQSUFycmF5V2l0aExpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0Zvcndh
cmRMaXN0OjpyZW1vdmVBbGxJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJk
TGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tG
b3J3YXJkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRM
aXN0OjpyZXN0b3JlRnJvbVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3NXaXRoSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExp
c3RJdGVtSW5MaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQcm94eTo6cmVnaXN0ZXJOZXdXZWJCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1BdEluZGV4KToKKwogMjAxNy0xMC0wMyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBBUEkgdGVz
dHMgYWZ0ZXIgcjIyMjc5NC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Nlc3Npb25TdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Nlc3Npb25TdGF0ZS5oCShy
ZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TZXNzaW9uU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU2Vzc2lvblN0YXRlX2gKLSNkZWZpbmUgU2Vzc2lv
blN0YXRlX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAi
Vmlld1NuYXBzaG90U3RvcmUuaCIKQEAgLTE1MCw1ICsxNDksMyBAQCBzdHJ1Y3QgU2Vzc2lvblN0
YXRlIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gU2Vzc2lvblN0
YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJ
dGVtLmgJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDExIEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtX2gKLSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0SXRlbV9oCisjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5o
IgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNzQsOCArNzMs
NiBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fcGFnZUlEOwogfTsKIAotdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBCYWNrRm9yd2FyZExpc3RJdGVtVmVj
dG9yOwordHlwZWRlZiBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBCYWNrRm9y
d2FyZExpc3RJdGVtVmVjdG9yOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1faApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQmFja0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MiwxMyArNzIsOCBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cGFnZUNsb3NlZCgpCiAK
ICAgICBpZiAobV9wYWdlKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gbV9lbnRyaWVzLnNpemUo
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2VudHJpZXNbaV0pOwotICAgICAgICAgICAgaWYgKCFtX2VudHJpZXNbaV0p
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0o
Km1fZW50cmllc1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7CiAg
ICAgfQogCiAgICAgbV9wYWdlID0gMDsKQEAgLTkzLDcgKzg4LDcgQEAgdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3Q6OmFkZEl0ZW0oV2ViQmFjawogICAgIGlmICghbV9jYXBhY2l0eSB8fCAhbmV3SXRl
bSB8fCAhbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CisgICAgVmVjdG9yPFJlZjxXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIAogICAgIGlmIChtX2hhc0N1cnJl
bnRJbmRleCkgewogICAgICAgICBtX3BhZ2UtPnJlY29yZEF1dG9tYXRpY05hdmlnYXRpb25TbmFw
c2hvdCgpOwpAQCAtMTAyLDcgKzk3LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0
ZW0oV2ViQmFjawogICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gbV9jdXJyZW50SW5kZXgg
KyAxOwogICAgICAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllcy5zaXpl
KCkgLSB0YXJnZXRTaXplKTsKICAgICAgICAgd2hpbGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJn
ZXRTaXplKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKCptX2VudHJpZXMubGFzdCgpKTsK
KyAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzLmxhc3QoKSk7CiAgICAgICAgICAg
ICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzLmxhc3QoKSkpOwogICAgICAg
ICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQpAQCAtMTEwLDcgKzEwNSw3
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2sKICAgICAgICAgLy8g
VG9zcyB0aGUgZmlyc3QgaXRlbSBpZiB0aGUgbGlzdCBpcyBnZXR0aW5nIHRvbyBiaWcsIGFzIGxv
bmcgYXMgd2UncmUgbm90IHVzaW5nIGl0CiAgICAgICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwg
aWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgogICAgICAgICBpZiAobV9lbnRyaWVzLnNpemUoKSA9
PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnRJbmRleCB8fCBtX2NhcGFjaXR5ID09IDEpKSB7Ci0g
ICAgICAgICAgICBkaWRSZW1vdmVJdGVtKCptX2VudHJpZXNbMF0pOworICAgICAgICAgICAgZGlk
UmVtb3ZlSXRlbShtX2VudHJpZXNbMF0pOwogICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVu
ZChXVEZNb3ZlKG1fZW50cmllc1swXSkpOwogICAgICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZSgw
KTsKIApAQCAtMTI2LDEwICsxMjEsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6YWRkSXRl
bShXZWJCYWNrCiAgICAgICAgIC8vIEJ1dCBqdXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4gaW4g
cHJhY3RpY2Ugd2UnbGwgZ2V0IGJhY2sgaW4gdG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdyBiZWZv
cmUgYWRkaW5nIHRoZSBuZXcgaXRlbS4KICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2VudHJpZXMu
c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIW1fZW50cmll
c1tpXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0
ZW0oKm1fZW50cmllc1tpXSk7CisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tp
XSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzW2ld
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CkBAIC0xNDIsNyArMTM0
LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oV2ViQmFjawogICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gdHJ1ZTsKICAg
ICB9IGVsc2UgewotICAgICAgICBzaG91bGRLZWVwQ3VycmVudEl0ZW0gPSBtX3BhZ2UtPnNob3Vs
ZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdChtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXhdLmdldCgpKTsKKyAgICAgICAgc2hvdWxkS2VlcEN1cnJlbnRJdGVtID0gbV9wYWdlLT5z
aG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QobV9lbnRyaWVzW21fY3Vy
cmVudEluZGV4XSk7CiAgICAgICAgIGlmIChzaG91bGRLZWVwQ3VycmVudEl0ZW0pCiAgICAgICAg
ICAgICBtX2N1cnJlbnRJbmRleCsrOwogICAgIH0KQEAgLTE1MiwyOCArMTQ0LDM0IEBAIHZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2sKICAgICAgICAgLy8gSWYgaXQgaXMs
IHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBhbmQgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc3dhcCBp
biB0aGUgbmV3IGl0ZW0uCiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8IG1fZW50cmll
cy5zaXplKCkpOwogCi0gICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW21fY3Vy
cmVudEluZGV4XSk7Ci0gICAgICAgIG1fZW50cmllc1ttX2N1cnJlbnRJbmRleF0gPSBuZXdJdGVt
OworICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1ttX2N1cnJlbnRJbmRleF0u
Y29weVJlZigpKTsKKyAgICAgICAgbV9lbnRyaWVzW21fY3VycmVudEluZGV4XSA9ICpuZXdJdGVt
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIG1fY3VycmVudCBzaG91bGQgbmV2ZXIgYmUgcG9p
bnRpbmcgbW9yZSB0aGFuIDEgcGFzdCB0aGUgZW5kIG9mIHRoZSBlbnRyaWVzIFZlY3Rvci4KICAg
ICAgICAgLy8gSWYgaXQgaXMsIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBhbmQgd2Ugc2hvdWxk
IG5vdCB0cnkgdG8gaW5zZXJ0IHRoZSBuZXcgaXRlbS4KICAgICAgICAgQVNTRVJUKG1fY3VycmVu
dEluZGV4IDw9IG1fZW50cmllcy5zaXplKCkpOwogCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRl
eCA8PSBtX2VudHJpZXMuc2l6ZSgpKQotICAgICAgICAgICAgbV9lbnRyaWVzLmluc2VydChtX2N1
cnJlbnRJbmRleCwgbmV3SXRlbSk7CisgICAgICAgICAgICBtX2VudHJpZXMuaW5zZXJ0KG1fY3Vy
cmVudEluZGV4LCAqbmV3SXRlbSk7CiAgICAgfQogCiAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNr
Rm9yd2FyZExpc3QobmV3SXRlbSwgV1RGTW92ZShyZW1vdmVkSXRlbXMpKTsKIH0KIAotdm9pZCBX
ZWJCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0p
Cit2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSYgaXRlbSkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudElu
ZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBpZiAoIW1fZW50cmllcy5zaXplKCkgfHwg
IWl0ZW0gfHwgIW1fcGFnZSB8fCAhbV9oYXNDdXJyZW50SW5kZXgpCisgICAgaWYgKCFtX2VudHJp
ZXMuc2l6ZSgpIHx8ICFtX3BhZ2UgfHwgIW1faGFzQ3VycmVudEluZGV4KQogICAgICAgICByZXR1
cm47CiAKLSAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSBtX2VudHJpZXMuZmluZChpdGVtKTsKKyAg
ICBzaXplX3QgdGFyZ2V0SW5kZXggPSBub3RGb3VuZDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9lbnRyaWVzW2ldLnB0
cigpID09ICZpdGVtKSB7CisgICAgICAgICAgICB0YXJnZXRJbmRleCA9IGk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIElmIHRoZSB0YXJnZXQgaXRlbSB3
YXNuJ3QgZXZlbiBpbiB0aGUgbGlzdCwgdGhlcmUncyBub3RoaW5nIGVsc2UgdG8gZG8uCiAgICAg
aWYgKHRhcmdldEluZGV4ID09IG5vdEZvdW5kKQpAQCAtMTg3LDQ2ICsxODUsNTEgQEAgdm9pZCBX
ZWJCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKFdlYkJhYwogCiAgICAgLy8gSWYgd2UncmUgZ29p
bmcgdG8gYW4gaXRlbSBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBpdGVtLCBhc2sgdGhlIGNs
aWVudCBpZiB0aGUgY3VycmVudAogICAgIC8vIGl0ZW0gc2hvdWxkIHJlbWFpbiBpbiB0aGUgbGlz
dC4KLSAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBjdXJyZW50SXRlbSA9IG1fZW50cmllc1tt
X2N1cnJlbnRJbmRleF0uZ2V0KCk7CisgICAgYXV0byYgY3VycmVudEl0ZW0gPSBtX2VudHJpZXNb
bV9jdXJyZW50SW5kZXhdOwogICAgIGJvb2wgc2hvdWxkS2VlcEN1cnJlbnRJdGVtID0gdHJ1ZTsK
LSAgICBpZiAoY3VycmVudEl0ZW0gIT0gaXRlbSkgeworICAgIGlmIChjdXJyZW50SXRlbS5wdHIo
KSAhPSAmaXRlbSkgewogICAgICAgICBtX3BhZ2UtPnJlY29yZEF1dG9tYXRpY05hdmlnYXRpb25T
bmFwc2hvdCgpOwotICAgICAgICBzaG91bGRLZWVwQ3VycmVudEl0ZW0gPSBtX3BhZ2UtPnNob3Vs
ZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdChtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXhdLmdldCgpKTsKKyAgICAgICAgc2hvdWxkS2VlcEN1cnJlbnRJdGVtID0gbV9wYWdlLT5z
aG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QobV9lbnRyaWVzW21fY3Vy
cmVudEluZGV4XSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGNsaWVudCBzYWlkIHRvIHJlbW92
ZSB0aGUgY3VycmVudCBpdGVtLCByZW1vdmUgaXQgYW5kIHRoZW4gdXBkYXRlIHRoZSB0YXJnZXQg
aW5kZXguCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3Zl
ZEl0ZW1zOworICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJ
dGVtczsKICAgICBpZiAoIXNob3VsZEtlZXBDdXJyZW50SXRlbSkgewotICAgICAgICByZW1vdmVk
SXRlbXMuYXBwZW5kKGN1cnJlbnRJdGVtKTsKKyAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChj
dXJyZW50SXRlbS5jb3B5UmVmKCkpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlKG1fY3VycmVu
dEluZGV4KTsKLSAgICAgICAgdGFyZ2V0SW5kZXggPSBtX2VudHJpZXMuZmluZChpdGVtKTsKLQor
ICAgICAgICB0YXJnZXRJbmRleCA9IG5vdEZvdW5kOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZW50cmll
c1swXS5wdHIoKSA9PSAmaXRlbSkgeworICAgICAgICAgICAgICAgIHRhcmdldEluZGV4ID0gaTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBBU1NFUlQodGFyZ2V0SW5kZXggIT0gbm90Rm91bmQpOwogICAgIH0KIAogICAgIG1fY3VycmVu
dEluZGV4ID0gdGFyZ2V0SW5kZXg7Ci0gICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExp
c3QobnVsbHB0ciwgcmVtb3ZlZEl0ZW1zKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3
YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVtcykpOwogfQogCiBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJdGVtKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRy
aWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gbV9wYWdlICYmIG1faGFzQ3VycmVudEluZGV4ID8g
bV9lbnRyaWVzW21fY3VycmVudEluZGV4XS5nZXQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
cGFnZSAmJiBtX2hhc0N1cnJlbnRJbmRleCA/IG1fZW50cmllc1ttX2N1cnJlbnRJbmRleF0ucHRy
KCkgOiBudWxscHRyOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmJhY2tJdGVtKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4
IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gbV9w
YWdlICYmIG1faGFzQ3VycmVudEluZGV4ICYmIG1fY3VycmVudEluZGV4ID8gbV9lbnRyaWVzW21f
Y3VycmVudEluZGV4IC0gMV0uZ2V0KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX3BhZ2UgJiYg
bV9oYXNDdXJyZW50SW5kZXggJiYgbV9jdXJyZW50SW5kZXggPyBtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXggLSAxXS5wdHIoKSA6IG51bGxwdHI7CiB9CiAKIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0q
IFdlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZEl0ZW0oKSBjb25zdAogewogICAgIEFTU0VSVCgh
bV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsK
IAotICAgIHJldHVybiBtX3BhZ2UgJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgbV9lbnRyaWVzLnNp
emUoKSAmJiBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkgLSAxID8gbV9lbnRyaWVz
W21fY3VycmVudEluZGV4ICsgMV0uZ2V0KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX3BhZ2Ug
JiYgbV9oYXNDdXJyZW50SW5kZXggJiYgbV9lbnRyaWVzLnNpemUoKSAmJiBtX2N1cnJlbnRJbmRl
eCA8IG1fZW50cmllcy5zaXplKCkgLSAxID8gbV9lbnRyaWVzW21fY3VycmVudEluZGV4ICsgMV0u
cHRyKCkgOiBudWxscHRyOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9y
d2FyZExpc3Q6Oml0ZW1BdEluZGV4KGludCBpbmRleCkgY29uc3QKQEAgLTI0Myw3ICsyNDYsNyBA
QCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpCiAgICAgaWYgKGluZGV4
ID4gZm9yd2FyZExpc3RDb3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
Ci0gICAgcmV0dXJuIG1fZW50cmllc1tpbmRleCArIG1fY3VycmVudEluZGV4XS5nZXQoKTsKKyAg
ICByZXR1cm4gbV9lbnRyaWVzW2luZGV4ICsgbV9jdXJyZW50SW5kZXhdLnB0cigpOwogfQogCiBp
bnQgV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KCkgY29uc3QKQEAgLTI4NiwxMCAr
Mjg5LDggQEAgUmVmPEFQSTo6QXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6YmFjawogICAgIHZl
Y3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogCiAgICAgQVNTRVJUKGJhY2tMaXN0
U2l6ZSA+PSBzaXplKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBiYWNrTGlzdFNpemUgLSBzaXpl
OyBpIDwgYmFja0xpc3RTaXplOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7
Ci0gICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQobV9lbnRyaWVzW2ldLmdldCgpKTsKLSAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gYmFja0xpc3RTaXplIC0gc2l6ZTsgaSA8IGJhY2tM
aXN0U2l6ZTsgKytpKQorICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG1fZW50cmllc1tp
XS5wdHIoKSk7CiAKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUodmVjdG9y
KSk7CiB9CkBAIC0zMTAsMTAgKzMxMSw4IEBAIFJlZjxBUEk6OkFycmF5PiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmZvcncKIAogICAgIHVuc2lnbmVkIGxhc3QgPSBtX2N1cnJlbnRJbmRleCArIHNpemU7
CiAgICAgQVNTRVJUKGxhc3QgPCBtX2VudHJpZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2N1cnJlbnRJbmRleCArIDE7IGkgPD0gbGFzdDsgKytpKSB7Ci0gICAgICAgIEFTU0VS
VChtX2VudHJpZXNbaV0pOwotICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG1fZW50cmll
c1tpXS5nZXQoKSk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fY3VycmVudEluZGV4
ICsgMTsgaSA8PSBsYXN0OyArK2kpCisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQobV9l
bnRyaWVzW2ldLnB0cigpKTsKIAogICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92
ZSh2ZWN0b3IpKTsKIH0KQEAgLTMyMiwxNCArMzIxLDEwIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRM
aXN0OjpyZW1vdmVBbGxJdGVtcygKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8
IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBWZWN0b3I8UmVmUHRy
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CisgICAgVmVjdG9yPFJlZjxX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogCiAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBBU1NFUlQoZW50cnkpOwotICAgICAgICBpZiAo
IWVudHJ5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZGlkUmVtb3ZlSXRlbSgq
ZW50cnkpOworICAgICAgICBkaWRSZW1vdmVJdGVtKGVudHJ5KTsKICAgICAgICAgcmVtb3ZlZEl0
ZW1zLmFwcGVuZChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgfQogCkBAIC0zNDcsNyArMzQyLDcgQEAg
dm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVu
dEl0ZW0oKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1v
dmVkSXRlbXM7CisgICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3Zl
ZEl0ZW1zOwogCiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBldmVyIGhhdmUgbm8gY3VycmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJyZW50
IGl0ZW0gaW5kZXguCkBAIC0zNTUsMTEgKzM1MCw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
OjpjbGVhcigpCiAKICAgICAgICAgLy8gQnV0IGp1c3QgaW4gY2FzZSBpdCBkb2VzIGhhcHBlbiBp
biBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50byBhIGNvbnNpc3RlbnQgc3RhdGUgbm93
LgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAg
ICAgQVNTRVJUKG1fZW50cmllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIW1fZW50cmllc1tpXSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbSgq
bV9lbnRyaWVzW2ldKTsKKyAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsK
ICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsK
ICAgICAgICAgfQogCkBAIC0zNzEsMTQgKzM2MiwxMyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dDo6Y2xlYXIoKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEFTU0VSVChtX2VudHJpZXNbaV0pOwotICAgICAgICBpZiAobV9lbnRyaWVz
W2ldICYmIG1fZW50cmllc1tpXSAhPSBjdXJyZW50SXRlbSkKLSAgICAgICAgICAgIGRpZFJlbW92
ZUl0ZW0oKm1fZW50cmllc1tpXSk7CisgICAgICAgIGlmIChtX2VudHJpZXNbaV0ucHRyKCkgIT0g
Y3VycmVudEl0ZW0pCisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7CiAg
ICAgfQogCiAgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0eShzaXplIC0gMSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGkgIT0gbV9j
dXJyZW50SW5kZXggJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgbV9lbnRyaWVzW2ldKQorICAgICAg
ICBpZiAoaSAhPSBtX2N1cnJlbnRJbmRleCAmJiBtX2hhc0N1cnJlbnRJbmRleCkKICAgICAgICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsKICAgICB9CiAK
QEAgLTM4Niw3ICszNzYsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogCiAg
ICAgaWYgKGN1cnJlbnRJdGVtKSB7CiAgICAgICAgIG1fZW50cmllcy5zaHJpbmsoMSk7Ci0gICAg
ICAgIG1fZW50cmllc1swXSA9IFdURk1vdmUoY3VycmVudEl0ZW0pOworICAgICAgICBtX2VudHJp
ZXNbMF0gPSBjdXJyZW50SXRlbS5yZWxlYXNlTm9uTnVsbCgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgICAgICBtX2hhc0N1cnJlbnRJbmRleCA9IGZhbHNl
OwpAQCAtNDA0LDcgKzM5NCw3IEBAIEJhY2tGb3J3YXJkTGlzdFN0YXRlIFdlYkJhY2tGb3J3YXJk
TGlzdDoKICAgICAgICAgYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4ID0gbV9jdXJy
ZW50SW5kZXg7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7
ICsraSkgewotICAgICAgICBhdXRvJiBlbnRyeSA9ICptX2VudHJpZXNbaV07CisgICAgICAgIGF1
dG8mIGVudHJ5ID0gbV9lbnRyaWVzW2ldOwogCiAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRl
cihlbnRyeSkpIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRJbmRleCA9IGJhY2tGb3J3YXJk
TGlzdFN0YXRlLmN1cnJlbnRJbmRleDsKQEAgLTQxNCw3ICs0MDQsNyBAQCBCYWNrRm9yd2FyZExp
c3RTdGF0ZSBXZWJCYWNrRm9yd2FyZExpc3Q6CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLmFwcGVuZChlbnRyeS5p
dGVtU3RhdGUoKSk7CisgICAgICAgIGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLmFwcGVuZChl
bnRyeS0+aXRlbVN0YXRlKCkpOwogICAgIH0KIAogICAgIGlmIChiYWNrRm9yd2FyZExpc3RTdGF0
ZS5pdGVtcy5pc0VtcHR5KCkpCkBAIC00MjcsNyArNDE3LDcgQEAgQmFja0ZvcndhcmRMaXN0U3Rh
dGUgV2ViQmFja0ZvcndhcmRMaXN0OgogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9y
ZUZyb21TdGF0ZShCYWNrRm9yd2FyZExpc3RTdGF0ZSBiYWNrRm9yd2FyZExpc3RTdGF0ZSkKIHsK
LSAgICBWZWN0b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBpdGVtczsKKyAgICBW
ZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBpdGVtczsKICAgICBpdGVtcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLnNpemUoKSk7CiAK
ICAgICBmb3IgKGF1dG8mIGJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSA6IGJhY2tGb3J3YXJkTGlz
dFN0YXRlLml0ZW1zKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9y
d2FyZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNr
Rm9yd2FyZExpc3QuaAkocmV2aXNpb24gMjIyNzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQmFja0ZvcndhcmRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE4ICsyMywxMyBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2Vi
QmFja0ZvcndhcmRMaXN0X2gKLSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0X2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRM
aXN0SXRlbS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lm
IFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkRpY3Rpb25hcnkuaD4KLSNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTEsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+V2ViQmFja0ZvcndhcmRMaXN0KCk7CiAKICAgICB2b2lkIGFkZEl0ZW0oV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSopOwotICAgIHZvaWQgZ29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSopOworICAgIHZvaWQgZ29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpOwogICAg
IHZvaWQgcmVtb3ZlQWxsSXRlbXMoKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTg1LDExICs4
MCwxMCBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwogICAgIEJhY2tGb3J3
YXJkTGlzdEl0ZW1WZWN0b3IgbV9lbnRyaWVzOwogICAgIAorICAgIC8vIEZJWE1FOiBtX2N1cnJl
bnRJbmRleCBzaG91bGQgYmUgYSBzdGQ6Om9wdGlvbmFsPHNpemVfdD4KICAgICBib29sIG1faGFz
Q3VycmVudEluZGV4OwotICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwotICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CisgICAgc2l6ZV90IG1fY3VycmVudEluZGV4OworICAgIHNpemVfdCBtX2Nh
cGFjaXR5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJCYWNr
Rm9yd2FyZExpc3RfaApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCShyZXZpc2lvbiAyMjI4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODQsNyArNjg0LDcgQEAgUmVmUHRyPEFQSTo6
TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5OjpyZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGlmIChpdGVtICE9IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpKQotICAgICAg
ICBtX2JhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0ZW0oaXRlbSk7CisgICAgICAgIG1fYmFja0Zvcndh
cmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7CiAKICAgICBhdXRvIG5hdmlnYXRpb24gPSBtX25hdmln
YXRpb25TdGF0ZS0+Y3JlYXRlQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7CiAKQEAgLTY5OCw3ICs2
OTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UoKQogewogICAgIEFT
U0VSVChpc1ZhbGlkKCkpOwogCi0gICAgQmFja0ZvcndhcmRMaXN0SXRlbVZlY3RvciBpdGVtcyA9
IG1fYmFja0ZvcndhcmRMaXN0LT5lbnRyaWVzKCk7CisgICAgY29uc3QgQmFja0ZvcndhcmRMaXN0
SXRlbVZlY3RvciYgaXRlbXMgPSBtX2JhY2tGb3J3YXJkTGlzdC0+ZW50cmllcygpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcHJvY2Vz
cy0+cmVnaXN0ZXJOZXdXZWJCYWNrRm9yd2FyZExpc3RJdGVtKGl0ZW1zW2ldLmdldCgpKTsKIApA
QCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQ
b3NpdAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VHJ5UmVzdG9yZVNj
cm9sbFBvc2l0aW9uKCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZENo
YW5nZUJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZCwgVmVjdG9y
PFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZCkKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRk
ZWQsIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiYgcmVtb3ZlZCkKIHsKICAg
ICBQYWdlQ2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihtX3BhZ2VDbGllbnQpOwogCkBAIC0xMjE1
LDcgKzEyMTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbEdvVG9CYWNrRm9yd2FyZExpCiAg
ICAgfQogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2Fy
ZExpc3RJdGVtSW5MaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCitib29sIFdlYlBh
Z2VQcm94eTo6c2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVtSW5MaXN0KFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAgICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90
ZWN0b3IobV9wYWdlQ2xpZW50KTsKIApAQCAtNDQ5NCw3ICs0NDk0LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0odQogICAgIGJvb2wgY3JlYXRlZEV4dGVuc2lvbiA9
IG1heWJlSW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUoVVJMKFVSTCgpLCBpdGVtLT51
cmwoKSksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGlmIChjcmVhdGVkRXh0ZW5zaW9u
KQogICAgICAgICBtX3Byb2Nlc3MtPndpbGxBY3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94
RXh0ZW5zaW9uKCk7Ci0gICAgbV9iYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVtKGl0ZW0pOworICAg
IG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpiYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIHVpbnQ2NF90JiBpdGVt
SUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MjIyNzk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwOSwxMCArNDA5LDEwIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxBUEk6
Ok5hdmlnYXRpb24+IGdvVG9CYWNrRm9yd2FyZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSop
OwogICAgIHZvaWQgdHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgdm9pZCBkaWRDaGFu
Z2VCYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBWZWN0
b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkKTsKKyAgICB2b2lkIGRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0s
IFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiYgcmVtb3ZlZCk7CiAgICAgdm9p
ZCB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0odWludDY0X3QgaXRlbUlELCBib29sIGluUGFn
ZUNhY2hlLCBjb25zdCBVc2VyRGF0YSYpOwogCi0gICAgYm9vbCBzaG91bGRLZWVwQ3VycmVudEJh
Y2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworICAgIGJv
b2wgc2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVtSW5MaXN0KFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0mKTsKIAogICAgIGJvb2wgd2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmVu
dHMoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsMTMgKzQyNCwxMyBAQCBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJQcm9jZXNzUHJveHk6CiAgICAgcmV0dXJuIG1fYmFj
a0ZvcndhcmRMaXN0SXRlbU1hcC5nZXQoaXRlbUlEKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUHJv
eHk6OnJlZ2lzdGVyTmV3V2ViQmFja0ZvcndhcmRMaXN0SXRlbShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiBpdGVtKQordm9pZCBXZWJQcm9jZXNzUHJveHk6OnJlZ2lzdGVyTmV3V2ViQmFja0Zvcndh
cmRMaXN0SXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogICAgIC8vIFRoaXMg
aXRlbSB3YXMganVzdCBjcmVhdGVkIGJ5IHRoZSBVSVByb2Nlc3MgYW5kIGlzIGJlaW5nIGFkZGVk
IHRvIHRoZSBtYXAgZm9yIHRoZSBmaXJzdCB0aW1lCiAgICAgLy8gc28gd2Ugc2hvdWxkIG5vdCBh
bHJlYWR5IGhhdmUgYW4gaXRlbSBmb3IgdGhpcyBJRC4KLSAgICBBU1NFUlQoIW1fYmFja0Zvcndh
cmRMaXN0SXRlbU1hcC5jb250YWlucyhpdGVtLT5pdGVtSUQoKSkpOworICAgIEFTU0VSVCghbV9i
YWNrRm9yd2FyZExpc3RJdGVtTWFwLmNvbnRhaW5zKGl0ZW0uaXRlbUlEKCkpKTsKIAotICAgIG1f
YmFja0ZvcndhcmRMaXN0SXRlbU1hcC5zZXQoaXRlbS0+aXRlbUlEKCksIGl0ZW0pOworICAgIG1f
YmFja0ZvcndhcmRMaXN0SXRlbU1hcC5zZXQoaXRlbS5pdGVtSUQoKSwgJml0ZW0pOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVtb3ZlQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1J
RCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZp
c2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
dXBkYXRlVGV4dENoZWNrZXJTdGF0ZSgpOwogCi0gICAgdm9pZCByZWdpc3Rlck5ld1dlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworICAgIHZvaWQgcmVnaXN0
ZXJOZXdXZWJCYWNrRm9yd2FyZExpc3RJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKICAg
ICB2b2lkIHJlbW92ZUJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCk7CiAKICAgICB2b2lkIHdpbGxB
Y3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94RXh0ZW5zaW9uKCkgeyBtX21heUhhdmVVbml2
ZXJzYWxGaWxlUmVhZFNhbmRib3hFeHRlbnNpb24gPSB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAyMjI4MDIp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDggKzg5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzRGlkQmVjb21lUmVzcG9uc2l2ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goV2ViS2l0OjpXZWJQYWdlUHJveHkmKSB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViS2l0OjpXZWJQYWdl
UHJveHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qLCBWZWN0b3I8UmVmUHRyPFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVtSW5MaXN0KFdlYktpdDo6V2ViUGFnZVBy
b3h5JiwgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtKikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViS2l0OjpXZWJQYWdl
UHJveHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qLCBWZWN0b3I8UmVmPFdlYktp
dDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXQ6OldlYlBh
Z2VQcm94eSYsIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbSYsIEFQSTo6T2JqZWN0Kikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhU3RvcmUm
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjIyODAyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwNCw3ICsxMjA0
LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KFdLUGFnZVJlZgogICAgICAgICAg
ICAgbV9jbGllbnQucHJvY2Vzc0RpZENyYXNoKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZGlkQ2hhbmdlQmFja0Zvcndh
cmRMaXN0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJ
dGVtLCBWZWN0b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXMp
IG92ZXJyaWRlCisgICAgICAgIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBWZWN0b3I8UmVm
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYmIHJlbW92ZWRJdGVtcykgb3ZlcnJpZGUKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIyMiwxMiArMTIyMiwxMiBAQCB2b2lkIFdL
UGFnZVNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdlUmVmCiAgICAgICAgICAgICBtX2NsaWVudC5k
aWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QodG9BUEkoJnBhZ2UpLCB0b0FQSShhZGRlZEl0ZW0pLCB0
b0FQSShyZW1vdmVkSXRlbXNBcnJheS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRM
aXN0SXRlbUluTGlzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFnZSwgV2ViS2l0OjpXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtKSBvdmVycmlkZQorICAgICAgICBib29sIHNob3VsZEtlZXBD
dXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFn
ZSwgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKSBvdmVycmlkZQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNob3VsZEtlZXBDdXJyZW50QmFja0Zvcndh
cmRMaXN0SXRlbUluTGlzdCkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRl
bUluTGlzdCh0b0FQSSgmcGFnZSksIHRvQVBJKGl0ZW0pLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEtlZXBDdXJyZW50QmFja0Zv
cndhcmRMaXN0SXRlbUluTGlzdCh0b0FQSSgmcGFnZSksIHRvQVBJKCZpdGVtKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgd2lsbEdvVG9CYWNr
Rm9yd2FyZExpc3RJdGVtKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSYgaXRlbSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJk
TGlzdFByb3h5LmNwcAkocmV2aXNpb24gMjIyNzA4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzIsMTQgKzE3MiwxNCBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpnb1RvSXRl
bShICiBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1BdEluZGV4KGlu
dCBpdGVtSW5kZXgpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHVpbnQ2NF90IGl0ZW1JRCA9IDA7CiAgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGl0ZW1J
bmRleCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXg6OlJl
cGx5KGl0ZW1JRCksIG1fcGFnZS0+cGFnZUlEKCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWl0ZW1JRCkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGlkVG9IaXN0b3J5SXRlbU1h
cCgpLmdldChpdGVtSUQpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322592</attachid>
            <date>2017-10-03 15:19:43 -0700</date>
            <delta_ts>2017-10-03 16:16:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177843-20171003151942.patch</filename>
            <type>text/plain</type>
            <size>29811</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjI4MTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE3LTEwLTAzICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJpemUgV2Vi
S2l0J3MgYmFjayBmb3J3YXJkIGxpc3QgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3ODQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIFJlZiBpbnN0ZWFkIG9mIFJlZlB0ciB3aGVuIHBvc3Np
YmxlLgorICAgICAgICBVc2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdoZW4gcG9z
c2libGUuCisgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBudWxsIGNoZWNrcy4KKyAgICAgICAg
UmVkdWNlIHVubmVjZXNzYXJ5IFZlY3RvciBjb3B5aW5nLgorCisgICAgICAgICogU2hhcmVkL1Nl
c3Npb25TdGF0ZS5oOgorICAgICAgICAqIFNoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJdGVtLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKEFQ
STo6TG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoQVBJ
OjpMb2FkZXJDbGllbnQ6OnNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlz
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1Bh
Z2VTZXRQYWdlTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpwYWdlQ2xv
c2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3VycmVudEl0ZW0gY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tJdGVtIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0SW5kZXggY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNBUElBcnJheVdpdGhMaW1pdCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RB
c0FQSUFycmF5V2l0aExpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0Zvcndh
cmRMaXN0OjpyZW1vdmVBbGxJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJk
TGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tG
b3J3YXJkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRM
aXN0OjpyZXN0b3JlRnJvbVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3NXaXRoSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExp
c3RJdGVtSW5MaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQcm94eTo6cmVnaXN0ZXJOZXdXZWJCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1BdEluZGV4KToKKwogMjAxNy0xMC0wMyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBBUEkgdGVz
dHMgYWZ0ZXIgcjIyMjc5NC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Nlc3Npb25TdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Nlc3Npb25TdGF0ZS5oCShy
ZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TZXNzaW9uU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU2Vzc2lvblN0YXRlX2gKLSNkZWZpbmUgU2Vzc2lv
blN0YXRlX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAi
Vmlld1NuYXBzaG90U3RvcmUuaCIKQEAgLTE1MCw1ICsxNDksMyBAQCBzdHJ1Y3QgU2Vzc2lvblN0
YXRlIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gU2Vzc2lvblN0
YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJ
dGVtLmgJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDExIEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtX2gKLSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0SXRlbV9oCisjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5o
IgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNzQsOCArNzMs
NiBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fcGFnZUlEOwogfTsKIAotdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBCYWNrRm9yd2FyZExpc3RJdGVtVmVj
dG9yOwordHlwZWRlZiBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBCYWNrRm9y
d2FyZExpc3RJdGVtVmVjdG9yOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1faApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQmFja0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MiwxMyArNzIsOCBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cGFnZUNsb3NlZCgpCiAK
ICAgICBpZiAobV9wYWdlKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gbV9lbnRyaWVzLnNpemUo
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2VudHJpZXNbaV0pOwotICAgICAgICAgICAgaWYgKCFtX2VudHJpZXNbaV0p
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0o
Km1fZW50cmllc1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7CiAg
ICAgfQogCiAgICAgbV9wYWdlID0gMDsKQEAgLTkzLDcgKzg4LDcgQEAgdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3Q6OmFkZEl0ZW0oV2ViQmFjawogICAgIGlmICghbV9jYXBhY2l0eSB8fCAhbmV3SXRl
bSB8fCAhbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CisgICAgVmVjdG9yPFJlZjxXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIAogICAgIGlmIChtX2hhc0N1cnJl
bnRJbmRleCkgewogICAgICAgICBtX3BhZ2UtPnJlY29yZEF1dG9tYXRpY05hdmlnYXRpb25TbmFw
c2hvdCgpOwpAQCAtMTAyLDcgKzk3LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0
ZW0oV2ViQmFjawogICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gbV9jdXJyZW50SW5kZXgg
KyAxOwogICAgICAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllcy5zaXpl
KCkgLSB0YXJnZXRTaXplKTsKICAgICAgICAgd2hpbGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJn
ZXRTaXplKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKCptX2VudHJpZXMubGFzdCgpKTsK
KyAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzLmxhc3QoKSk7CiAgICAgICAgICAg
ICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzLmxhc3QoKSkpOwogICAgICAg
ICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQpAQCAtMTEwLDcgKzEwNSw3
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2sKICAgICAgICAgLy8g
VG9zcyB0aGUgZmlyc3QgaXRlbSBpZiB0aGUgbGlzdCBpcyBnZXR0aW5nIHRvbyBiaWcsIGFzIGxv
bmcgYXMgd2UncmUgbm90IHVzaW5nIGl0CiAgICAgICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwg
aWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgogICAgICAgICBpZiAobV9lbnRyaWVzLnNpemUoKSA9
PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnRJbmRleCB8fCBtX2NhcGFjaXR5ID09IDEpKSB7Ci0g
ICAgICAgICAgICBkaWRSZW1vdmVJdGVtKCptX2VudHJpZXNbMF0pOworICAgICAgICAgICAgZGlk
UmVtb3ZlSXRlbShtX2VudHJpZXNbMF0pOwogICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVu
ZChXVEZNb3ZlKG1fZW50cmllc1swXSkpOwogICAgICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZSgw
KTsKIApAQCAtMTI2LDEwICsxMjEsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6YWRkSXRl
bShXZWJCYWNrCiAgICAgICAgIC8vIEJ1dCBqdXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4gaW4g
cHJhY3RpY2Ugd2UnbGwgZ2V0IGJhY2sgaW4gdG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdyBiZWZv
cmUgYWRkaW5nIHRoZSBuZXcgaXRlbS4KICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2VudHJpZXMu
c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIW1fZW50cmll
c1tpXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0
ZW0oKm1fZW50cmllc1tpXSk7CisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tp
XSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzW2ld
KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CkBAIC0xNDIsNyArMTM0
LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oV2ViQmFjawogICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gdHJ1ZTsKICAg
ICB9IGVsc2UgewotICAgICAgICBzaG91bGRLZWVwQ3VycmVudEl0ZW0gPSBtX3BhZ2UtPnNob3Vs
ZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdChtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXhdLmdldCgpKTsKKyAgICAgICAgc2hvdWxkS2VlcEN1cnJlbnRJdGVtID0gbV9wYWdlLT5z
aG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QobV9lbnRyaWVzW21fY3Vy
cmVudEluZGV4XSk7CiAgICAgICAgIGlmIChzaG91bGRLZWVwQ3VycmVudEl0ZW0pCiAgICAgICAg
ICAgICBtX2N1cnJlbnRJbmRleCsrOwogICAgIH0KQEAgLTE1MiwyOCArMTQ0LDM0IEBAIHZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2sKICAgICAgICAgLy8gSWYgaXQgaXMs
IHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBhbmQgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc3dhcCBp
biB0aGUgbmV3IGl0ZW0uCiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8IG1fZW50cmll
cy5zaXplKCkpOwogCi0gICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW21fY3Vy
cmVudEluZGV4XSk7Ci0gICAgICAgIG1fZW50cmllc1ttX2N1cnJlbnRJbmRleF0gPSBuZXdJdGVt
OworICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1ttX2N1cnJlbnRJbmRleF0u
Y29weVJlZigpKTsKKyAgICAgICAgbV9lbnRyaWVzW21fY3VycmVudEluZGV4XSA9ICpuZXdJdGVt
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIG1fY3VycmVudCBzaG91bGQgbmV2ZXIgYmUgcG9p
bnRpbmcgbW9yZSB0aGFuIDEgcGFzdCB0aGUgZW5kIG9mIHRoZSBlbnRyaWVzIFZlY3Rvci4KICAg
ICAgICAgLy8gSWYgaXQgaXMsIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBhbmQgd2Ugc2hvdWxk
IG5vdCB0cnkgdG8gaW5zZXJ0IHRoZSBuZXcgaXRlbS4KICAgICAgICAgQVNTRVJUKG1fY3VycmVu
dEluZGV4IDw9IG1fZW50cmllcy5zaXplKCkpOwogCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRl
eCA8PSBtX2VudHJpZXMuc2l6ZSgpKQotICAgICAgICAgICAgbV9lbnRyaWVzLmluc2VydChtX2N1
cnJlbnRJbmRleCwgbmV3SXRlbSk7CisgICAgICAgICAgICBtX2VudHJpZXMuaW5zZXJ0KG1fY3Vy
cmVudEluZGV4LCAqbmV3SXRlbSk7CiAgICAgfQogCiAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNr
Rm9yd2FyZExpc3QobmV3SXRlbSwgV1RGTW92ZShyZW1vdmVkSXRlbXMpKTsKIH0KIAotdm9pZCBX
ZWJCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0p
Cit2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSYgaXRlbSkKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudElu
ZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBpZiAoIW1fZW50cmllcy5zaXplKCkgfHwg
IWl0ZW0gfHwgIW1fcGFnZSB8fCAhbV9oYXNDdXJyZW50SW5kZXgpCisgICAgaWYgKCFtX2VudHJp
ZXMuc2l6ZSgpIHx8ICFtX3BhZ2UgfHwgIW1faGFzQ3VycmVudEluZGV4KQogICAgICAgICByZXR1
cm47CiAKLSAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSBtX2VudHJpZXMuZmluZChpdGVtKTsKKyAg
ICBzaXplX3QgdGFyZ2V0SW5kZXggPSBub3RGb3VuZDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9lbnRyaWVzW2ldLnB0
cigpID09ICZpdGVtKSB7CisgICAgICAgICAgICB0YXJnZXRJbmRleCA9IGk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIElmIHRoZSB0YXJnZXQgaXRlbSB3
YXNuJ3QgZXZlbiBpbiB0aGUgbGlzdCwgdGhlcmUncyBub3RoaW5nIGVsc2UgdG8gZG8uCiAgICAg
aWYgKHRhcmdldEluZGV4ID09IG5vdEZvdW5kKQpAQCAtMTg3LDQ2ICsxODUsNTEgQEAgdm9pZCBX
ZWJCYWNrRm9yd2FyZExpc3Q6OmdvVG9JdGVtKFdlYkJhYwogCiAgICAgLy8gSWYgd2UncmUgZ29p
bmcgdG8gYW4gaXRlbSBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBpdGVtLCBhc2sgdGhlIGNs
aWVudCBpZiB0aGUgY3VycmVudAogICAgIC8vIGl0ZW0gc2hvdWxkIHJlbWFpbiBpbiB0aGUgbGlz
dC4KLSAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBjdXJyZW50SXRlbSA9IG1fZW50cmllc1tt
X2N1cnJlbnRJbmRleF0uZ2V0KCk7CisgICAgYXV0byYgY3VycmVudEl0ZW0gPSBtX2VudHJpZXNb
bV9jdXJyZW50SW5kZXhdOwogICAgIGJvb2wgc2hvdWxkS2VlcEN1cnJlbnRJdGVtID0gdHJ1ZTsK
LSAgICBpZiAoY3VycmVudEl0ZW0gIT0gaXRlbSkgeworICAgIGlmIChjdXJyZW50SXRlbS5wdHIo
KSAhPSAmaXRlbSkgewogICAgICAgICBtX3BhZ2UtPnJlY29yZEF1dG9tYXRpY05hdmlnYXRpb25T
bmFwc2hvdCgpOwotICAgICAgICBzaG91bGRLZWVwQ3VycmVudEl0ZW0gPSBtX3BhZ2UtPnNob3Vs
ZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdChtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXhdLmdldCgpKTsKKyAgICAgICAgc2hvdWxkS2VlcEN1cnJlbnRJdGVtID0gbV9wYWdlLT5z
aG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QobV9lbnRyaWVzW21fY3Vy
cmVudEluZGV4XSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGNsaWVudCBzYWlkIHRvIHJlbW92
ZSB0aGUgY3VycmVudCBpdGVtLCByZW1vdmUgaXQgYW5kIHRoZW4gdXBkYXRlIHRoZSB0YXJnZXQg
aW5kZXguCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3Zl
ZEl0ZW1zOworICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJ
dGVtczsKICAgICBpZiAoIXNob3VsZEtlZXBDdXJyZW50SXRlbSkgewotICAgICAgICByZW1vdmVk
SXRlbXMuYXBwZW5kKGN1cnJlbnRJdGVtKTsKKyAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChj
dXJyZW50SXRlbS5jb3B5UmVmKCkpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlKG1fY3VycmVu
dEluZGV4KTsKLSAgICAgICAgdGFyZ2V0SW5kZXggPSBtX2VudHJpZXMuZmluZChpdGVtKTsKLQor
ICAgICAgICB0YXJnZXRJbmRleCA9IG5vdEZvdW5kOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZW50cmll
c1swXS5wdHIoKSA9PSAmaXRlbSkgeworICAgICAgICAgICAgICAgIHRhcmdldEluZGV4ID0gaTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBBU1NFUlQodGFyZ2V0SW5kZXggIT0gbm90Rm91bmQpOwogICAgIH0KIAogICAgIG1fY3VycmVu
dEluZGV4ID0gdGFyZ2V0SW5kZXg7Ci0gICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExp
c3QobnVsbHB0ciwgcmVtb3ZlZEl0ZW1zKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3
YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVtcykpOwogfQogCiBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJdGVtKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRy
aWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gbV9wYWdlICYmIG1faGFzQ3VycmVudEluZGV4ID8g
bV9lbnRyaWVzW21fY3VycmVudEluZGV4XS5nZXQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
cGFnZSAmJiBtX2hhc0N1cnJlbnRJbmRleCA/IG1fZW50cmllc1ttX2N1cnJlbnRJbmRleF0ucHRy
KCkgOiBudWxscHRyOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmJhY2tJdGVtKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4
IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gbV9w
YWdlICYmIG1faGFzQ3VycmVudEluZGV4ICYmIG1fY3VycmVudEluZGV4ID8gbV9lbnRyaWVzW21f
Y3VycmVudEluZGV4IC0gMV0uZ2V0KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX3BhZ2UgJiYg
bV9oYXNDdXJyZW50SW5kZXggJiYgbV9jdXJyZW50SW5kZXggPyBtX2VudHJpZXNbbV9jdXJyZW50
SW5kZXggLSAxXS5wdHIoKSA6IG51bGxwdHI7CiB9CiAKIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0q
IFdlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZEl0ZW0oKSBjb25zdAogewogICAgIEFTU0VSVCgh
bV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsK
IAotICAgIHJldHVybiBtX3BhZ2UgJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgbV9lbnRyaWVzLnNp
emUoKSAmJiBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkgLSAxID8gbV9lbnRyaWVz
W21fY3VycmVudEluZGV4ICsgMV0uZ2V0KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX3BhZ2Ug
JiYgbV9oYXNDdXJyZW50SW5kZXggJiYgbV9lbnRyaWVzLnNpemUoKSAmJiBtX2N1cnJlbnRJbmRl
eCA8IG1fZW50cmllcy5zaXplKCkgLSAxID8gbV9lbnRyaWVzW21fY3VycmVudEluZGV4ICsgMV0u
cHRyKCkgOiBudWxscHRyOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9y
d2FyZExpc3Q6Oml0ZW1BdEluZGV4KGludCBpbmRleCkgY29uc3QKQEAgLTI0Myw3ICsyNDYsNyBA
QCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpCiAgICAgaWYgKGluZGV4
ID4gZm9yd2FyZExpc3RDb3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
Ci0gICAgcmV0dXJuIG1fZW50cmllc1tpbmRleCArIG1fY3VycmVudEluZGV4XS5nZXQoKTsKKyAg
ICByZXR1cm4gbV9lbnRyaWVzW2luZGV4ICsgbV9jdXJyZW50SW5kZXhdLnB0cigpOwogfQogCiBp
bnQgV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KCkgY29uc3QKQEAgLTI4NiwxMCAr
Mjg5LDggQEAgUmVmPEFQSTo6QXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6YmFjawogICAgIHZl
Y3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogCiAgICAgQVNTRVJUKGJhY2tMaXN0
U2l6ZSA+PSBzaXplKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBiYWNrTGlzdFNpemUgLSBzaXpl
OyBpIDwgYmFja0xpc3RTaXplOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7
Ci0gICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQobV9lbnRyaWVzW2ldLmdldCgpKTsKLSAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gYmFja0xpc3RTaXplIC0gc2l6ZTsgaSA8IGJhY2tM
aXN0U2l6ZTsgKytpKQorICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG1fZW50cmllc1tp
XS5wdHIoKSk7CiAKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUodmVjdG9y
KSk7CiB9CkBAIC0zMTAsMTAgKzMxMSw4IEBAIFJlZjxBUEk6OkFycmF5PiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmZvcncKIAogICAgIHVuc2lnbmVkIGxhc3QgPSBtX2N1cnJlbnRJbmRleCArIHNpemU7
CiAgICAgQVNTRVJUKGxhc3QgPCBtX2VudHJpZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2N1cnJlbnRJbmRleCArIDE7IGkgPD0gbGFzdDsgKytpKSB7Ci0gICAgICAgIEFTU0VS
VChtX2VudHJpZXNbaV0pOwotICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG1fZW50cmll
c1tpXS5nZXQoKSk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fY3VycmVudEluZGV4
ICsgMTsgaSA8PSBsYXN0OyArK2kpCisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQobV9l
bnRyaWVzW2ldLnB0cigpKTsKIAogICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92
ZSh2ZWN0b3IpKTsKIH0KQEAgLTMyMiwxNCArMzIxLDEwIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRM
aXN0OjpyZW1vdmVBbGxJdGVtcygKIHsKICAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8
IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBWZWN0b3I8UmVmUHRy
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CisgICAgVmVjdG9yPFJlZjxX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogCiAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBBU1NFUlQoZW50cnkpOwotICAgICAgICBpZiAo
IWVudHJ5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZGlkUmVtb3ZlSXRlbSgq
ZW50cnkpOworICAgICAgICBkaWRSZW1vdmVJdGVtKGVudHJ5KTsKICAgICAgICAgcmVtb3ZlZEl0
ZW1zLmFwcGVuZChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgfQogCkBAIC0zNDcsNyArMzQyLDcgQEAg
dm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVu
dEl0ZW0oKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1v
dmVkSXRlbXM7CisgICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3Zl
ZEl0ZW1zOwogCiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBldmVyIGhhdmUgbm8gY3VycmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJyZW50
IGl0ZW0gaW5kZXguCkBAIC0zNTUsMTEgKzM1MCw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
OjpjbGVhcigpCiAKICAgICAgICAgLy8gQnV0IGp1c3QgaW4gY2FzZSBpdCBkb2VzIGhhcHBlbiBp
biBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50byBhIGNvbnNpc3RlbnQgc3RhdGUgbm93
LgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAg
ICAgQVNTRVJUKG1fZW50cmllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIW1fZW50cmllc1tpXSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbSgq
bV9lbnRyaWVzW2ldKTsKKyAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsK
ICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsK
ICAgICAgICAgfQogCkBAIC0zNzEsMTQgKzM2MiwxMyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dDo6Y2xlYXIoKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEFTU0VSVChtX2VudHJpZXNbaV0pOwotICAgICAgICBpZiAobV9lbnRyaWVz
W2ldICYmIG1fZW50cmllc1tpXSAhPSBjdXJyZW50SXRlbSkKLSAgICAgICAgICAgIGRpZFJlbW92
ZUl0ZW0oKm1fZW50cmllc1tpXSk7CisgICAgICAgIGlmIChtX2VudHJpZXNbaV0ucHRyKCkgIT0g
Y3VycmVudEl0ZW0pCisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7CiAg
ICAgfQogCiAgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0eShzaXplIC0gMSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGkgIT0gbV9j
dXJyZW50SW5kZXggJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgbV9lbnRyaWVzW2ldKQorICAgICAg
ICBpZiAoaSAhPSBtX2N1cnJlbnRJbmRleCAmJiBtX2hhc0N1cnJlbnRJbmRleCkKICAgICAgICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsKICAgICB9CiAK
QEAgLTM4Niw3ICszNzYsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogCiAg
ICAgaWYgKGN1cnJlbnRJdGVtKSB7CiAgICAgICAgIG1fZW50cmllcy5zaHJpbmsoMSk7Ci0gICAg
ICAgIG1fZW50cmllc1swXSA9IFdURk1vdmUoY3VycmVudEl0ZW0pOworICAgICAgICBtX2VudHJp
ZXNbMF0gPSBjdXJyZW50SXRlbS5yZWxlYXNlTm9uTnVsbCgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgICAgICBtX2hhc0N1cnJlbnRJbmRleCA9IGZhbHNl
OwpAQCAtNDA0LDcgKzM5NCw3IEBAIEJhY2tGb3J3YXJkTGlzdFN0YXRlIFdlYkJhY2tGb3J3YXJk
TGlzdDoKICAgICAgICAgYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4ID0gbV9jdXJy
ZW50SW5kZXg7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7
ICsraSkgewotICAgICAgICBhdXRvJiBlbnRyeSA9ICptX2VudHJpZXNbaV07CisgICAgICAgIGF1
dG8mIGVudHJ5ID0gbV9lbnRyaWVzW2ldOwogCiAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRl
cihlbnRyeSkpIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRJbmRleCA9IGJhY2tGb3J3YXJk
TGlzdFN0YXRlLmN1cnJlbnRJbmRleDsKQEAgLTQxNCw3ICs0MDQsNyBAQCBCYWNrRm9yd2FyZExp
c3RTdGF0ZSBXZWJCYWNrRm9yd2FyZExpc3Q6CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLmFwcGVuZChlbnRyeS5p
dGVtU3RhdGUoKSk7CisgICAgICAgIGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLmFwcGVuZChl
bnRyeS0+aXRlbVN0YXRlKCkpOwogICAgIH0KIAogICAgIGlmIChiYWNrRm9yd2FyZExpc3RTdGF0
ZS5pdGVtcy5pc0VtcHR5KCkpCkBAIC00MjcsNyArNDE3LDcgQEAgQmFja0ZvcndhcmRMaXN0U3Rh
dGUgV2ViQmFja0ZvcndhcmRMaXN0OgogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9y
ZUZyb21TdGF0ZShCYWNrRm9yd2FyZExpc3RTdGF0ZSBiYWNrRm9yd2FyZExpc3RTdGF0ZSkKIHsK
LSAgICBWZWN0b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBpdGVtczsKKyAgICBW
ZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBpdGVtczsKICAgICBpdGVtcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLnNpemUoKSk7CiAK
ICAgICBmb3IgKGF1dG8mIGJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSA6IGJhY2tGb3J3YXJkTGlz
dFN0YXRlLml0ZW1zKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9y
d2FyZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNr
Rm9yd2FyZExpc3QuaAkocmV2aXNpb24gMjIyNzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQmFja0ZvcndhcmRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE4ICsyMywxMyBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2Vi
QmFja0ZvcndhcmRMaXN0X2gKLSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0X2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRM
aXN0SXRlbS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lm
IFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkRpY3Rpb25hcnkuaD4KLSNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTEsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+V2ViQmFja0ZvcndhcmRMaXN0KCk7CiAKICAgICB2b2lkIGFkZEl0ZW0oV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSopOwotICAgIHZvaWQgZ29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSopOworICAgIHZvaWQgZ29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpOwogICAg
IHZvaWQgcmVtb3ZlQWxsSXRlbXMoKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTg1LDExICs4
MCwxMCBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwogICAgIEJhY2tGb3J3
YXJkTGlzdEl0ZW1WZWN0b3IgbV9lbnRyaWVzOwogICAgIAorICAgIC8vIEZJWE1FOiBtX2N1cnJl
bnRJbmRleCBzaG91bGQgYmUgYSBzdGQ6Om9wdGlvbmFsPHNpemVfdD4KICAgICBib29sIG1faGFz
Q3VycmVudEluZGV4OwotICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwotICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CisgICAgc2l6ZV90IG1fY3VycmVudEluZGV4OworICAgIHNpemVfdCBtX2Nh
cGFjaXR5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJCYWNr
Rm9yd2FyZExpc3RfaApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCShyZXZpc2lvbiAyMjI4MDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODQsNyArNjg0LDcgQEAgUmVmUHRyPEFQSTo6
TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5OjpyZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGlmIChpdGVtICE9IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpKQotICAgICAg
ICBtX2JhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0ZW0oaXRlbSk7CisgICAgICAgIG1fYmFja0Zvcndh
cmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7CiAKICAgICBhdXRvIG5hdmlnYXRpb24gPSBtX25hdmln
YXRpb25TdGF0ZS0+Y3JlYXRlQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7CiAKQEAgLTY5OCw3ICs2
OTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UoKQogewogICAgIEFT
U0VSVChpc1ZhbGlkKCkpOwogCi0gICAgQmFja0ZvcndhcmRMaXN0SXRlbVZlY3RvciBpdGVtcyA9
IG1fYmFja0ZvcndhcmRMaXN0LT5lbnRyaWVzKCk7CisgICAgY29uc3QgQmFja0ZvcndhcmRMaXN0
SXRlbVZlY3RvciYgaXRlbXMgPSBtX2JhY2tGb3J3YXJkTGlzdC0+ZW50cmllcygpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcHJvY2Vz
cy0+cmVnaXN0ZXJOZXdXZWJCYWNrRm9yd2FyZExpc3RJdGVtKGl0ZW1zW2ldLmdldCgpKTsKIApA
QCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQ
b3NpdAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VHJ5UmVzdG9yZVNj
cm9sbFBvc2l0aW9uKCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZENo
YW5nZUJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZCwgVmVjdG9y
PFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZCkKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRk
ZWQsIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiYgcmVtb3ZlZCkKIHsKICAg
ICBQYWdlQ2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihtX3BhZ2VDbGllbnQpOwogCkBAIC0xMjE1
LDcgKzEyMTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbEdvVG9CYWNrRm9yd2FyZExpCiAg
ICAgfQogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2Fy
ZExpc3RJdGVtSW5MaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCitib29sIFdlYlBh
Z2VQcm94eTo6c2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVtSW5MaXN0KFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAgICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90
ZWN0b3IobV9wYWdlQ2xpZW50KTsKIApAQCAtNDQ5NCw3ICs0NDk0LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0odQogICAgIGJvb2wgY3JlYXRlZEV4dGVuc2lvbiA9
IG1heWJlSW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUoVVJMKFVSTCgpLCBpdGVtLT51
cmwoKSksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGlmIChjcmVhdGVkRXh0ZW5zaW9u
KQogICAgICAgICBtX3Byb2Nlc3MtPndpbGxBY3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94
RXh0ZW5zaW9uKCk7Ci0gICAgbV9iYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVtKGl0ZW0pOworICAg
IG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpiYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIHVpbnQ2NF90JiBpdGVt
SUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MjIyNzk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwOSwxMCArNDA5LDEwIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxBUEk6
Ok5hdmlnYXRpb24+IGdvVG9CYWNrRm9yd2FyZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSop
OwogICAgIHZvaWQgdHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgdm9pZCBkaWRDaGFu
Z2VCYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBWZWN0
b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkKTsKKyAgICB2b2lkIGRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0s
IFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiYgcmVtb3ZlZCk7CiAgICAgdm9p
ZCB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0odWludDY0X3QgaXRlbUlELCBib29sIGluUGFn
ZUNhY2hlLCBjb25zdCBVc2VyRGF0YSYpOwogCi0gICAgYm9vbCBzaG91bGRLZWVwQ3VycmVudEJh
Y2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworICAgIGJv
b2wgc2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVtSW5MaXN0KFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0mKTsKIAogICAgIGJvb2wgd2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmVu
dHMoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsMTMgKzQyNCwxMyBAQCBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJQcm9jZXNzUHJveHk6CiAgICAgcmV0dXJuIG1fYmFj
a0ZvcndhcmRMaXN0SXRlbU1hcC5nZXQoaXRlbUlEKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUHJv
eHk6OnJlZ2lzdGVyTmV3V2ViQmFja0ZvcndhcmRMaXN0SXRlbShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiBpdGVtKQordm9pZCBXZWJQcm9jZXNzUHJveHk6OnJlZ2lzdGVyTmV3V2ViQmFja0Zvcndh
cmRMaXN0SXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogICAgIC8vIFRoaXMg
aXRlbSB3YXMganVzdCBjcmVhdGVkIGJ5IHRoZSBVSVByb2Nlc3MgYW5kIGlzIGJlaW5nIGFkZGVk
IHRvIHRoZSBtYXAgZm9yIHRoZSBmaXJzdCB0aW1lCiAgICAgLy8gc28gd2Ugc2hvdWxkIG5vdCBh
bHJlYWR5IGhhdmUgYW4gaXRlbSBmb3IgdGhpcyBJRC4KLSAgICBBU1NFUlQoIW1fYmFja0Zvcndh
cmRMaXN0SXRlbU1hcC5jb250YWlucyhpdGVtLT5pdGVtSUQoKSkpOworICAgIEFTU0VSVCghbV9i
YWNrRm9yd2FyZExpc3RJdGVtTWFwLmNvbnRhaW5zKGl0ZW0uaXRlbUlEKCkpKTsKIAotICAgIG1f
YmFja0ZvcndhcmRMaXN0SXRlbU1hcC5zZXQoaXRlbS0+aXRlbUlEKCksIGl0ZW0pOworICAgIG1f
YmFja0ZvcndhcmRMaXN0SXRlbU1hcC5zZXQoaXRlbS5pdGVtSUQoKSwgJml0ZW0pOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVtb3ZlQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1J
RCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZp
c2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
dXBkYXRlVGV4dENoZWNrZXJTdGF0ZSgpOwogCi0gICAgdm9pZCByZWdpc3Rlck5ld1dlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworICAgIHZvaWQgcmVnaXN0
ZXJOZXdXZWJCYWNrRm9yd2FyZExpc3RJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKICAg
ICB2b2lkIHJlbW92ZUJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCk7CiAKICAgICB2b2lkIHdpbGxB
Y3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94RXh0ZW5zaW9uKCkgeyBtX21heUhhdmVVbml2
ZXJzYWxGaWxlUmVhZFNhbmRib3hFeHRlbnNpb24gPSB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAyMjI4MDIp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDggKzg5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzRGlkQmVjb21lUmVzcG9uc2l2ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goV2ViS2l0OjpXZWJQYWdlUHJveHkmKSB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViS2l0OjpXZWJQYWdl
UHJveHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qLCBWZWN0b3I8UmVmUHRyPFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVtSW5MaXN0KFdlYktpdDo6V2ViUGFnZVBy
b3h5JiwgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtKikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViS2l0OjpXZWJQYWdl
UHJveHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qLCBWZWN0b3I8UmVmPFdlYktp
dDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXQ6OldlYlBh
Z2VQcm94eSYsIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbSYsIEFQSTo6T2JqZWN0Kikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhU3RvcmUm
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjIyODAyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwNCw3ICsxMjA0
LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KFdLUGFnZVJlZgogICAgICAgICAg
ICAgbV9jbGllbnQucHJvY2Vzc0RpZENyYXNoKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZGlkQ2hhbmdlQmFja0Zvcndh
cmRMaXN0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJ
dGVtLCBWZWN0b3I8UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXMp
IG92ZXJyaWRlCisgICAgICAgIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBWZWN0b3I8UmVm
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYmIHJlbW92ZWRJdGVtcykgb3ZlcnJpZGUKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIyMiwxMiArMTIyMiwxMiBAQCB2b2lkIFdL
UGFnZVNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdlUmVmCiAgICAgICAgICAgICBtX2NsaWVudC5k
aWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QodG9BUEkoJnBhZ2UpLCB0b0FQSShhZGRlZEl0ZW0pLCB0
b0FQSShyZW1vdmVkSXRlbXNBcnJheS5nZXQoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRM
aXN0SXRlbUluTGlzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFnZSwgV2ViS2l0OjpXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtKSBvdmVycmlkZQorICAgICAgICBib29sIHNob3VsZEtlZXBD
dXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFn
ZSwgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKSBvdmVycmlkZQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNob3VsZEtlZXBDdXJyZW50QmFja0Zvcndh
cmRMaXN0SXRlbUluTGlzdCkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRl
bUluTGlzdCh0b0FQSSgmcGFnZSksIHRvQVBJKGl0ZW0pLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEtlZXBDdXJyZW50QmFja0Zv
cndhcmRMaXN0SXRlbUluTGlzdCh0b0FQSSgmcGFnZSksIHRvQVBJKCZpdGVtKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgd2lsbEdvVG9CYWNr
Rm9yd2FyZExpc3RJdGVtKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSYgaXRlbSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3QuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgs
NyArMTI4LDcgQEAgV2ViS2l0QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZAogICAg
IHJldHVybiBsaXN0OwogfQogCi12b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2Vi
S2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QsIFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0qIHdlYkFkZGVkSXRlbSwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtPj4mIHdlYlJlbW92ZWRJdGVtcykKK3ZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdl
ZChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSogd2ViQWRkZWRJdGVtLCBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+
PiYmIHdlYlJlbW92ZWRJdGVtcykKIHsKICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBh
ZGRlZEl0ZW0gPSB3ZWJraXRCYWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0oYmFja0Zvcndh
cmRMaXN0LCB3ZWJBZGRlZEl0ZW0pOwogICAgIEdMaXN0KiByZW1vdmVkSXRlbXMgPSBudWxscHRy
OwpAQCAtMTM4LDEyICsxMzgsMTIgQEAgdm9pZCB3ZWJraXRCYWNrRm9yd2FyZExpc3RDaGFuZ2Vk
KFdlYktpdAogICAgICAgICAvLyBBZnRlciBhIHNlc3Npb24gcmVzdG9yZSwgd2Ugc3RpbGwgZG9u
J3QgaGF2ZSB3cmFwcGVycyBmb3IgdGhlIG5ld2x5IGFkZGVkIGl0ZW1zLCBzbyBpdCB3b3VsZCBi
ZSBwb3NzaWJsZSB0aGF0CiAgICAgICAgIC8vIHRoZSByZW1vdmVkIGl0ZW1zIGFyZSBub3QgaW4g
dGhlIG1hcC4gSW4gdGhhdCBjYXNlIHdlIGNyZWF0ZSBhIHdyYXBwZXIgbm93IHRvIHBhc3MgaXQg
dGhlIGNoYW5nZWQgc2lnbmFsLCBidXQKICAgICAgICAgLy8gd2l0aG91dCBhZGRpbmcgaXQgdG8g
dGhlIGl0ZW0gbWFwLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MzIzMy4KLSAgICAgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtPiByZW1v
dmVkSXRlbSA9IHByaXYtPml0ZW1zTWFwLmdldCh3ZWJJdGVtLmdldCgpKTsKKyAgICAgICAgR1Jl
ZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtPiByZW1vdmVkSXRlbSA9IHByaXYtPml0ZW1z
TWFwLmdldCh3ZWJJdGVtLnB0cigpKTsKICAgICAgICAgaWYgKHJlbW92ZWRJdGVtKSB7CiAgICAg
ICAgICAgICByZW1vdmVkSXRlbXMgPSBnX2xpc3RfcHJlcGVuZChyZW1vdmVkSXRlbXMsIGdfb2Jq
ZWN0X3JlZihyZW1vdmVkSXRlbS5nZXQoKSkpOwotICAgICAgICAgICAgcHJpdi0+aXRlbXNNYXAu
cmVtb3ZlKHdlYkl0ZW0uZ2V0KCkpOworICAgICAgICAgICAgcHJpdi0+aXRlbXNNYXAucmVtb3Zl
KHdlYkl0ZW0ucHRyKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlbW92ZWRJdGVt
cyA9IGdfbGlzdF9wcmVwZW5kKHJlbW92ZWRJdGVtcywgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRl
bUdldE9yQ3JlYXRlKHdlYkl0ZW0uZ2V0KCkpKTsKKyAgICAgICAgICAgIHJlbW92ZWRJdGVtcyA9
IGdfbGlzdF9wcmVwZW5kKHJlbW92ZWRJdGVtcywgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdl
dE9yQ3JlYXRlKHdlYkl0ZW0ucHRyKCkpKTsKICAgICB9CiAKICAgICBnX3NpZ25hbF9lbWl0KGJh
Y2tGb3J3YXJkTGlzdCwgc2lnbmFsc1tDSEFOR0VEXSwgMCwgYWRkZWRJdGVtLCByZW1vdmVkSXRl
bXMsIG51bGxwdHIpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaAkocmV2aXNp
b24gMjIyNzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRC
YWNrRm9yd2FyZExpc3RQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJp
dmF0ZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgog
I2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdC5oIgpAQCAtMzIsNiArMzEsNCBAQAogV2Vi
S2l0QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGUoV2ViS2l0OjpX
ZWJCYWNrRm9yd2FyZExpc3QqKTsKIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0qKTsKIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0QmFja0ZvcndhcmRM
aXN0SXRlbUdldEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSopOwotdm9pZCB3ZWJraXRC
YWNrRm9yd2FyZExpc3RDaGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCosIFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSogd2ViQWRkZWRJdGVtLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+Jik7Ci0KLSNlbmRpZiAvLyBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlX2gKK3ZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZChX
ZWJLaXRCYWNrRm9yd2FyZExpc3QqLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdl
YkFkZGVkSXRlbSwgVmVjdG9yPFJlZjxXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYm
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdExvYWRlckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0TG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjIyNzA4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDkgKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHdlYmtpdFdlYlZpZXdJbnNl
Y3VyZUNvbnRlbnREZXRlY3RlZChtX3dlYlZpZXcsIFdFQktJVF9JTlNFQ1VSRV9DT05URU5UX1JV
Tik7CiAgICAgfQogCi0gICAgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViUGFnZVBy
b3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBWZWN0b3I8UmVmUHRyPFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXMpIG92ZXJyaWRlCisgICAgdm9pZCBk
aWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSogYWRkZWRJdGVtLCBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYmIHJl
bW92ZWRJdGVtcykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHdlYmtpdEJhY2tGb3J3YXJkTGlz
dENoYW5nZWQod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcp
LCBhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7CisgICAgICAgIHdlYmtpdEJhY2tGb3J3YXJkTGlz
dENoYW5nZWQod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcp
LCBhZGRlZEl0ZW0sIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7CiAgICAgfQogCiAgICAgdm9pZCBk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJbkZyYW1lKFdlYlBhZ2VQcm94eSYsIFdl
YkZyYW1lUHJveHkmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSkgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAJKHJldmlz
aW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDE0ICsxNzIsMTQgQEAg
dm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Z29Ub0l0ZW0oSAogSGlzdG9yeUl0ZW0qIFdl
YkJhY2tGb3J3YXJkTGlzdFByb3h5OjppdGVtQXRJbmRleChpbnQgaXRlbUluZGV4KQogewogICAg
IGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICB1aW50NjRfdCBpdGVtSUQgPSAwOwogICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleChpdGVtSW5kZXgpLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4OjpSZXBseShpdGVtSUQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgaWYgKCFpdGVtSUQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHJldHVybiBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5nZXQoaXRlbUlEKTsKIH0K
</data>
<flag name="review"
          id="342460"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>