<?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>126250</bug_id>
          
          <creation_ts>2013-12-26 17:55:57 -0800</creation_ts>
          <short_desc>Convert some of WebCore/dom over to range-for loops</short_desc>
          <delta_ts>2015-06-26 07:45:10 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>126256</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Csaba Osztrogonác">ossy</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963051</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-26 17:55:57 -0800</bug_when>
    <thetext>Convert some of WebCore/dom over to range-for loops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963053</commentid>
    <comment_count>1</comment_count>
      <attachid>220042</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-26 18:06:17 -0800</bug_when>
    <thetext>Created attachment 220042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963054</commentid>
    <comment_count>2</comment_count>
      <attachid>220042</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-12-26 18:15:13 -0800</bug_when>
    <thetext>Comment on attachment 220042
Patch

r=me

I love auto* instead of just auto for pointers. We should make that a style rule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963056</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-26 18:52:33 -0800</bug_when>
    <thetext>Committed r161096: &lt;http://trac.webkit.org/changeset/161096&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963078</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-12-26 23:57:35 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Committed r161096: &lt;http://trac.webkit.org/changeset/161096&gt;
FYI: It made all tests crash. Please fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963083</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-27 00:20:48 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 126256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963087</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-27 00:24:01 -0800</bug_when>
    <thetext>&gt; FYI: It made all tests crash. Please fix it.

I don&apos;t think that it&apos;s OK to leave tests crashing for any period of time, rolled out in &lt;https://trac.webkit.org/r161097&gt;.

This crashes in both debug and release. Example debug crash (assertion failure): http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r161096%20(1233)/canvas/philip/tests/2d.composite.uncovered.fill.copy-crash-log.txt

Full results:

http://build.webkit.org/results/Apple%20Mavericks%20Release%20WK2%20(Tests)/r161096%20(1785)/results.html

http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r161096%20(1233)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072364</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-26 06:39:49 -0800</bug_when>
    <thetext>Are you going to update and relande this patch in the near future?
I checked some random part of the patch, they are still valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102902</commentid>
    <comment_count>8</comment_count>
      <attachid>255112</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-06-18 07:03:15 -0700</bug_when>
    <thetext>Created attachment 255112
Patch

rebased to top of trunk, patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103306</commentid>
    <comment_count>9</comment_count>
      <attachid>255112</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-19 11:12:40 -0700</bug_when>
    <thetext>Comment on attachment 255112
Patch

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

&gt; Source/WebCore/dom/ContainerNode.cpp:458
&gt; +        treeScope().adoptIfNeeded(&amp;child.get());

We have been using child.ptr() instead of &amp;child.get(). Not sure it’s better, but it is one less &amp; character.

&gt; Source/WebCore/dom/ContainerNode.cpp:466
&gt; +                appendChildToContainer(&amp;child.get(), *this);

Ditto.

&gt; Source/WebCore/dom/ContainerNode.cpp:711
&gt; +        treeScope().adoptIfNeeded(&amp;child.get());

Ditto.

&gt; Source/WebCore/dom/ContainerNode.cpp:716
&gt; +            appendChildToContainer(&amp;child.get(), *this);

Ditto.

&gt; Source/WebCore/dom/MutationObserverInterestGroup.cpp:71
&gt; +    for (auto&amp; observerOptionsPair : m_observers) {

Could use an even shorter name here, but I guess this is OK.

&gt; Source/WebCore/dom/Node.cpp:234
&gt; +    for (auto stringSizePair : perTagCount)

This should be auto&amp;; we don’t want to copy all these strings and churn their reference counts for no good reason, even in this logging code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104904</commentid>
    <comment_count>10</comment_count>
      <attachid>255629</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-06-26 04:23:30 -0700</bug_when>
    <thetext>Created attachment 255629
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104919</commentid>
    <comment_count>11</comment_count>
      <attachid>255629</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-26 06:02:25 -0700</bug_when>
    <thetext>Comment on attachment 255629
patch for landing

Clearing flags on attachment: 255629

Committed r185994: &lt;http://trac.webkit.org/changeset/185994&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220042</attachid>
            <date>2013-12-26 18:06:17 -0800</date>
            <delta_ts>2015-06-18 07:03:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126250-20131226180617.patch</filename>
            <type>text/plain</type>
            <size>38146</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTEyLTI2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCBzb21lIG9mIFdlYkNvcmUv
ZG9tIG92ZXIgdG8gcmFuZ2UtZm9yIGxvb3BzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYyNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAg
ICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwOgorICAgICAgICAq
IGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcDoKKyAgICAgICAgKiBkb20vTm9k
ZS5jcHA6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAqIGRvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKiBkb20vV2ViS2l0TmFtZWRGbG93LmNw
cDoKKwogMjAxMy0xMi0yNiAgVGhpYWdvIGRlIEJhcnJvcyBMYWNlcmRhICA8dGhpYWdvLmxhY2Vy
ZGFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBbTml4XSBDbGVhbnVwIFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTml4LmNtYWtlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
CShyZXZpc2lvbiAxNjEwOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwyMyArMzAxLDIxIEBAIGJvb2wgQ29udGFpbmVyTm9k
ZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWYKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxJbnNlcnRET01Ob2RlKCZkb2N1bWVudCgpLCB0aGlzKTsKIAogICAgIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUgbXV0YXRpb24oKnRoaXMpOwotICAgIGZvciAoYXV0byBpdCA9IHRhcmdldHMuYmVn
aW4oKSwgZW5kID0gdGFyZ2V0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5v
ZGUmIGNoaWxkID0gaXQtPmdldCgpOwotCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IHRhcmdldHMp
IHsKICAgICAgICAgLy8gRHVlIHRvIGFyYml0cmFyeSBjb2RlIHJ1bm5pbmcgaW4gcmVzcG9uc2Ug
dG8gYSBET00gbXV0YXRpb24gZXZlbnQgaXQncwogICAgICAgICAvLyBwb3NzaWJsZSB0aGF0ICJu
ZXh0IiBpcyBubyBsb25nZXIgYSBjaGlsZCBvZiAidGhpcyIuCiAgICAgICAgIC8vIEl0J3MgYWxz
byBwb3NzaWJsZSB0aGF0ICJjaGlsZCIgaGFzIGJlZW4gaW5zZXJ0ZWQgZWxzZXdoZXJlLgogICAg
ICAgICAvLyBJbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMsIHdlJ2xsIGp1c3Qgc3RvcC4KICAgICAg
ICAgaWYgKG5leHQtPnBhcmVudE5vZGUoKSAhPSB0aGlzKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGlmIChjaGlsZC5wYXJlbnROb2RlKCkpCisgICAgICAgIGlmIChjaGlsZC0+cGFyZW50
Tm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJ
Zk5lZWRlZCgmY2hpbGQpOworICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZjaGls
ZC5nZXQoKSk7CiAKLSAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxk
KTsKKyAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkLmdldCgpKTsK
IAotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQpOworICAgICAgICB1cGRh
dGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQuZ2V0KCkpOwogICAgIH0KIAogICAgIGRpc3BhdGNo
U3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKQEAgLTQ1NywzMCArNDU1LDI4IEBAIGJvb2wgQ29udGFp
bmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWYKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxJbnNlcnRET01Ob2RlKCZkb2N1bWVudCgpLCB0aGlzKTsKIAogICAgIC8vIEFkZCB0
aGUgbmV3IGNoaWxkKHJlbikKLSAgICBmb3IgKGF1dG8gaXQgPSB0YXJnZXRzLmJlZ2luKCksIGVu
ZCA9IHRhcmdldHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOb2RlJiBjaGls
ZCA9IGl0LT5nZXQoKTsKLQorICAgIGZvciAoYXV0byYgY2hpbGQgOiB0YXJnZXRzKSB7CiAgICAg
ICAgIC8vIER1ZSB0byBhcmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9N
IG11dGF0aW9uIGV2ZW50IGl0J3MKICAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMg
bm8gbG9uZ2VyIGEgY2hpbGQgb2YgInRoaXMiLgogICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2li
bGUgdGhhdCAiY2hpbGQiIGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KICAgICAgICAgLy8g
SW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCB3ZSdsbCBqdXN0IHN0b3AuCiAgICAgICAgIGlmIChu
ZXh0ICYmIG5leHQtPnBhcmVudE5vZGUoKSAhPSB0aGlzKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGlmIChjaGlsZC5wYXJlbnROb2RlKCkpCisgICAgICAgIGlmIChjaGlsZC0+cGFyZW50
Tm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJ
Zk5lZWRlZCgmY2hpbGQpOworICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZjaGls
ZC5nZXQoKSk7CiAKICAgICAgICAgLy8gQWRkIGNoaWxkIGJlZm9yZSAibmV4dCIuCiAgICAgICAg
IHsKICAgICAgICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlz
cGF0Y2g7CiAgICAgICAgICAgICBpZiAobmV4dCkKLSAgICAgICAgICAgICAgICBpbnNlcnRCZWZv
cmVDb21tb24oKm5leHQsIGNoaWxkKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21t
b24oKm5leHQsIGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKCZjaGlsZCwgKnRoaXMpOworICAgICAgICAgICAgICAg
IGFwcGVuZENoaWxkVG9Db250YWluZXIoJmNoaWxkLmdldCgpLCAqdGhpcyk7CiAgICAgICAgIH0K
IAotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQpOworICAgICAgICB1cGRh
dGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQuZ2V0KCkpOwogICAgIH0KIAogICAgIGRpc3BhdGNo
U3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKQEAgLTUwNSwxMyArNTAxLDEyIEBAIHN0YXRpYyB2b2lk
IHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXIKICAgICBnZXRDaGlsZE5vZGVzKGNvbnRhaW5l
ciwgY2hpbGRyZW4pOwogCiAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjb250
YWluZXIpOwotICAgIGZvciAoYXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gaXQtPmdldCgpOwotICAg
ICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICBjaGlsZC5ub3Rp
ZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxsRGV0YWNoKCk7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuKSB7CisgICAgICAgIG11dGF0aW9uLndpbGxSZW1vdmVDaGlsZChjaGlsZC5n
ZXQoKSk7CisgICAgICAgIGNoaWxkLT5ub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxsRGV0
YWNoKCk7CiAKICAgICAgICAgLy8gZmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0YXRpb24g
ZXZlbnRzLgotICAgICAgICBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhjaGlsZCk7CisgICAg
ICAgIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKGNoaWxkLmdldCgpKTsKICAgICB9CiAKICAg
ICBjb250YWluZXIuZG9jdW1lbnQoKS5ub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKGNvbnRhaW5l
cik7CkBAIC03MDksMjQgKzcwNCwyMiBAQCBib29sIENvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxk
KFBhc3NSZWZQCiAKICAgICAvLyBOb3cgYWN0dWFsbHkgYWRkIHRoZSBjaGlsZChyZW4pCiAgICAg
Q2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbigqdGhpcyk7Ci0gICAgZm9yIChhdXRvIGl0
ID0gdGFyZ2V0cy5iZWdpbigpLCBlbmQgPSB0YXJnZXRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBpdC0+Z2V0KCk7Ci0KKyAgICBmb3IgKGF1dG8mIGNo
aWxkIDogdGFyZ2V0cykgewogICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IGFn
YWluLCBqdXN0IHN0b3Agd2hhdCB3ZSdyZSBkb2luZywgYmVjYXVzZQogICAgICAgICAvLyB0aGF0
IG1lYW5zIHNvbWVvbmUgaXMgZG9pbmcgc29tZXRoaW5nIHdpdGggRE9NIG11dGF0aW9uIC0tIGNh
bid0IHJlLXBhcmVudAogICAgICAgICAvLyBhIGNoaWxkIHRoYXQgYWxyZWFkeSBoYXMgYSBwYXJl
bnQuCi0gICAgICAgIGlmIChjaGlsZC5wYXJlbnROb2RlKCkpCisgICAgICAgIGlmIChjaGlsZC0+
cGFyZW50Tm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgdHJlZVNjb3BlKCku
YWRvcHRJZk5lZWRlZCgmY2hpbGQpOworICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVk
KCZjaGlsZC5nZXQoKSk7CiAKICAgICAgICAgLy8gQXBwZW5kIGNoaWxkIHRvIHRoZSBlbmQgb2Yg
dGhlIGxpc3QKICAgICAgICAgewogICAgICAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
IGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICAgICAgICAgIGFwcGVuZENoaWxkVG9Db250YWlu
ZXIoJmNoaWxkLCAqdGhpcyk7CisgICAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKCZj
aGlsZC5nZXQoKSwgKnRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgdXBkYXRlVHJlZUFmdGVy
SW5zZXJ0aW9uKGNoaWxkKTsKKyAgICAgICAgdXBkYXRlVHJlZUFmdGVySW5zZXJ0aW9uKGNoaWxk
LmdldCgpKTsKICAgICB9CiAKICAgICBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE2MTA5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTMsOCArMTU1Myw4
IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3QKIHZvaWQgRG9jdW1l
bnQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkudmlzaWJpbGl0eWNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrRWxlbWVudHMu
YmVnaW4oKTsgaXQgIT0gbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOyAr
K2l0KQotICAgICAgICAoKml0KS0+dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpOworICAgIGZvciAo
YXV0byogZWxlbWVudCA6IG1fdmlzaWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50cykKKyAgICAg
ICAgZWxlbWVudC0+dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpOwogfQogCiBQYWdlVmlzaWJpbGl0
eVN0YXRlIERvY3VtZW50OjpwYWdlVmlzaWJpbGl0eVN0YXRlKCkgY29uc3QKQEAgLTM1MzAsMTIg
KzM1MzAsMTEgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdAogCiB2
b2lkIERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQoTm9kZSogbm9kZSwg
RG9jdW1lbnQqIG5ld0RvY3VtZW50KQogewotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4gbm9k
ZUl0ZXJhdG9yc0xpc3QgPSBtX25vZGVJdGVyYXRvcnM7Ci0gICAgSGFzaFNldDxOb2RlSXRlcmF0
b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0VuZCA9IG5vZGVJdGVyYXRvcnNMaXN0
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBub2RlSXRlcmF0b3JzTGlzdC5iZWdpbigpOyBpdCAhPSBub2RlSXRlcmF0b3JzRW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+cm9vdCgpID09IG5vZGUpIHsKLSAgICAgICAgICAg
IGRldGFjaE5vZGVJdGVyYXRvcigqaXQpOwotICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0dGFj
aE5vZGVJdGVyYXRvcigqaXQpOworICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJh
dG9yc0NvcHkgPSBtX25vZGVJdGVyYXRvcnM7CisgICAgZm9yIChhdXRvKiBub2RlSXRlcmF0b3Ig
OiBub2RlSXRlcmF0b3JzQ29weSkgeworICAgICAgICBpZiAobm9kZUl0ZXJhdG9yLT5yb290KCkg
PT0gbm9kZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKG5vZGVJdGVyYXRvcik7
CisgICAgICAgICAgICBuZXdEb2N1bWVudC0+YXR0YWNoTm9kZUl0ZXJhdG9yKG5vZGVJdGVyYXRv
cik7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNTQzLDIxICszNTQyLDIxIEBAIHZvaWQgRG9j
dW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2MKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVJh
bmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKICAg
ICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3Jh
bmdlcy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgKCppdCktPm5vZGVDaGlsZHJlbkNoYW5nZWQoY29udGFpbmVyKTsKKyAgICAgICAg
Zm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICAgICAgcmFuZ2UtPm5vZGVDaGls
ZHJlbkNoYW5nZWQoY29udGFpbmVyKTsKICAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnQ6Om5vZGVD
aGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogewogICAgIGlm
ICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IG1fcmFuZ2Vz
LmJlZ2luKCksIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICAoKml0KS0+bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChjb250YWluZXIpOworICAgICAg
ICBmb3IgKGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCisgICAgICAgICAgICByYW5nZS0+bm9kZUNo
aWxkcmVuV2lsbEJlUmVtb3ZlZChjb250YWluZXIpOwogICAgIH0KIAotICAgIGZvciAoYXV0byBp
dCA9IG1fbm9kZUl0ZXJhdG9ycy5iZWdpbigpLCBlbmQgPSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGZvciAoYXV0byogbm9kZUl0ZXJhdG9yIDogbV9ub2Rl
SXRlcmF0b3JzKSB7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRhaW5lci5maXJzdENoaWxk
KCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgKCppdCktPm5vZGVXaWxs
QmVSZW1vdmVkKG4pOworICAgICAgICAgICAgbm9kZUl0ZXJhdG9yLT5ub2RlV2lsbEJlUmVtb3Zl
ZChuKTsKICAgICB9CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewpA
QCAtMzU3MSwxNCArMzU3MCwxMiBAQCB2b2lkIERvY3VtZW50Ojpub2RlQ2hpbGRyZW5XaWxsQmVS
ZW1vdmVkCiAKIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqIG4pCiB7Ci0g
ICAgSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0Vu
ZCA9IG1fbm9kZUl0ZXJhdG9ycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Tm9kZUl0ZXJhdG9y
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJlZ2luKCk7IGl0ICE9IG5v
ZGVJdGVyYXRvcnNFbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKKyAgICBmb3IgKGF1dG8qIG5vZGVJdGVyYXRvciA6IG1fbm9kZUl0ZXJhdG9ycykKKyAgICAg
ICAgbm9kZUl0ZXJhdG9yLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKIAogICAgIGlmICghbV9yYW5n
ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3Ig
cmFuZ2VzRW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxSYW5nZSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IHJhbmdlc0VuZDsg
KytpdCkKLSAgICAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKKyAgICAgICAg
Zm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICAgICAgcmFuZ2UtPm5vZGVXaWxs
QmVSZW1vdmVkKG4pOwogICAgIH0KIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFt
ZSgpKSB7CkBAIC0zNTkxLDkgKzM1ODgsOCBAQCB2b2lkIERvY3VtZW50Ojpub2RlV2lsbEJlUmVt
b3ZlZChOb2RlKiBuCiB2b2lkIERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3Jhbmdlcy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
KCppdCktPnRleHRJbnNlcnRlZCh0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGZvciAo
YXV0byogcmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT50ZXh0SW5zZXJ0ZWQo
dGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSB0aGUgbWFya2Vy
cyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcuCkBAIC0zNjAzLDkgKzM1OTksOCBA
QCB2b2lkIERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgCiB2b2lkIERvY3VtZW50
Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBIYXNoU2V0PFJh
bmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgICAgICBmb3Ig
KEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+dGV4dFJlbW92ZWQodGV4dCwgb2Zm
c2V0LCBsZW5ndGgpOworICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCisgICAg
ICAgICAgICByYW5nZS0+dGV4dFJlbW92ZWQodGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIH0K
IAogICAgIC8vIFVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hl
Y2tpbmcuCkBAIC0zNjE3LDkgKzM2MTIsOCBAQCB2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJn
ZWQoVGV4dCogb2xkCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Tm9kZVdpdGhJbmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOwotICAgICAgICBIYXNoU2V0
PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAgICAgICBm
b3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+dGV4dE5vZGVzTWVyZ2VkKG9s
ZE5vZGVXaXRoSW5kZXgsIG9mZnNldCk7CisgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3Jh
bmdlcykKKyAgICAgICAgICAgIHJhbmdlLT50ZXh0Tm9kZXNNZXJnZWQob2xkTm9kZVdpdGhJbmRl
eCwgb2Zmc2V0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1h
cmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nLgpAQCAtMzYyOCw5ICszNjIy
LDggQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZAogdm9pZCBEb2N1
bWVudDo6dGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQogewogICAgIGlmICghbV9yYW5nZXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
ICAgICgqaXQpLT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOworICAgICAgICBmb3IgKGF1dG8qIHJh
bmdlIDogbV9yYW5nZXMpCisgICAgICAgICAgICByYW5nZS0+dGV4dE5vZGVTcGxpdChvbGROb2Rl
KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9y
IHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nLgpAQCAtNDA5NSw5ICs0MDg4LDggQEAgdm9p
ZCBEb2N1bWVudDo6ZG9jdW1lbnRXaWxsU3VzcGVuZEZvclBhZwogewogICAgIGRvY3VtZW50V2ls
bEJlY29tZUluYWN0aXZlKCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5k
ID0gbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrRWxlbWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1l
bnRXaWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1f
ZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+ZG9j
dW1lbnRXaWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8v
IENsZWFyIHRoZSB1cGRhdGUgZmxhZyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIHRoZSB2aWV3cG9y
dCBhcmd1bWVudHMgdXBkYXRlCkBAIC00MTEwLDkgKzQxMDIsOCBAQCB2b2lkIERvY3VtZW50Ojpk
b2N1bWVudERpZFJlc3VtZUZyb21QYWdlCiB7CiAgICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtZW50
czsKICAgICBjb3B5VG9WZWN0b3IobV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRz
LCBlbGVtZW50cyk7Ci0gICAgVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gZWxlbWVu
dHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8RWxlbWVudCo+OjppdGVyYXRvciBpID0gZWxlbWVu
dHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnREaWRSZXN1
bWVGcm9tUGFnZUNhY2hlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogZWxlbWVudHMpCisg
ICAgICAgIGVsZW1lbnQtPmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpOwogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChyZW5kZXJWaWV3KCkpCkBAIC00
MTM4LDkgKzQxMjksOCBAQCB2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3Vz
CiAKIHZvaWQgRG9jdW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNl
dDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRz
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX21lZGlh
Vm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAo
KmkpLT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1f
bWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVt
ZURpZENoYW5nZSgpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1l
Q2FsbGJhY2tzKEVsZW1lbnQqIGUpCkBAIC00MTYxLDkgKzQxNTEsOCBAQCB2b2lkIERvY3VtZW50
OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENoCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93
c2luZ1N0YXRlRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9y
IGVuZCA9IG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0
YXRlQ2hhbmdlZEVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCpp
dCktPnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvKiBlbGVt
ZW50IDogbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxl
bWVudC0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBEb2N1bWVu
dDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVu
dCogZSkKQEAgLTQxOTIsOSArNDE4MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JD
YXB0aW9uUHJlZmUKIAogdm9pZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgp
CiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fY2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxFbGVtZW50Kj46
Oml0ZXJhdG9yIGl0ID0gbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZCgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZEVsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2Vk
KCk7CiB9CiAjZW5kaWYKIApAQCAtNDg0Miw4ICs0ODMwLDggQEAgdm9pZCBEb2N1bWVudDo6YWRk
QXV0b1NpemluZ05vZGUoTm9kZSogbgogdm9pZCBEb2N1bWVudDo6dmFsaWRhdGVBdXRvU2l6aW5n
Tm9kZXMoKQogewogICAgIFZlY3RvcjxUZXh0QXV0b1NpemluZ0tleT4gbm9kZXNGb3JSZW1vdmFs
OwotICAgIGZvciAoYXV0byBpdCA9IG1fdGV4dEF1dG9TaXplZE5vZGVzLmJlZ2luKCksIGVuZCA9
IG1fdGV4dEF1dG9TaXplZE5vZGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVmUHRyPFRleHRBdXRvU2l6aW5nVmFsdWU+IHZhbHVlID0gaXQtPnZhbHVlOworICAgIGZvciAo
YXV0byYgYXV0b1NpemluZ0tleVZhbHVlUGFpciA6IG1fdGV4dEF1dG9TaXplZE5vZGVzKSB7Cisg
ICAgICAgIFJlZlB0cjxUZXh0QXV0b1NpemluZ1ZhbHVlPiB2YWx1ZSA9IGF1dG9TaXppbmdLZXlW
YWx1ZVBhaXIudmFsdWU7CiAgICAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIG5vZGVzIGluIHRoZSBj
b2xsZWN0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldwogICAgICAgICAvLyBjYW5kaWRhdGUgc2l6ZS4K
ICAgICAgICAgaWYgKCF2YWx1ZSkKQEAgLTQ4NTEsNyArNDgzOSw3IEBAIHZvaWQgRG9jdW1lbnQ6
OnZhbGlkYXRlQXV0b1NpemluZ05vZGVzKCkKIAogICAgICAgICB2YWx1ZS0+YWRqdXN0Tm9kZVNp
emVzKCk7CiAgICAgICAgIGlmICghdmFsdWUtPm51bU5vZGVzKCkpCi0gICAgICAgICAgICBub2Rl
c0ZvclJlbW92YWwuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgbm9kZXNGb3JSZW1vdmFs
LmFwcGVuZChhdXRvU2l6aW5nS2V5VmFsdWVQYWlyLmtleSk7CiAgICAgfQogICAgIHVuc2lnbmVk
IGNvdW50ID0gbm9kZXNGb3JSZW1vdmFsLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKQEAgLTQ4NjAsMTAgKzQ4NDgsOSBAQCB2b2lkIERvY3VtZW50Ojp2
YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpCiAgICAgCiB2b2lkIERvY3VtZW50OjpyZXNldEF1dG9T
aXppbmdOb2RlcygpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMu
YmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBSZWZQdHI8VGV4dEF1dG9TaXppbmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFs
dWU7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlLT5yZXNldCgpOworICAg
IGZvciAoYXV0byYgYXV0b1NpemluZ1ZhbHVlIDogbV90ZXh0QXV0b1NpemVkTm9kZXMudmFsdWVz
KCkpIHsKKyAgICAgICAgaWYgKGF1dG9TaXppbmdWYWx1ZSkKKyAgICAgICAgICAgIGF1dG9TaXpp
bmdWYWx1ZS0+cmVzZXQoKTsKICAgICB9CiAgICAgbV90ZXh0QXV0b1NpemVkTm9kZXMuY2xlYXIo
KTsKIH0KQEAgLTUzMDAsOSArNTI4Nyw5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxs
c2NyZWVuKCkKICAgICAgICAgCiAgICAgLy8gNC4gRm9yIGVhY2ggZGVzY2VuZGFudCBpbiBkZXNj
ZW5kYW50cywgZW1wdHkgZGVzY2VuZGFudCdzIGZ1bGxzY3JlZW4gZWxlbWVudCBzdGFjaywgYW5k
IHF1ZXVlIGEKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNo
YW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50
LgotICAgIGZvciAoRGVxdWU8UmVmUHRyPERvY3VtZW50Pj46Oml0ZXJhdG9yIGkgPSBkZXNjZW5k
YW50cy5iZWdpbigpOyBpICE9IGRlc2NlbmRhbnRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgKCpp
KS0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9G
dWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShpLT5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBkZXNj
ZW5kYW50IDogZGVzY2VuZGFudHMpIHsKKyAgICAgICAgZGVzY2VuZGFudC0+Y2xlYXJGdWxsc2Ny
ZWVuRWxlbWVudFN0YWNrKCk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdl
RXZlbnRRdWV1ZShkZXNjZW5kYW50LmdldCgpKTsKICAgICB9CiAKICAgICAvLyA1LiBXaGlsZSBk
b2MgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDE2MTA5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzEx
OCw4IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCiB7CiAgICAgbV9yZWNv
cmRzLmNsZWFyKCk7CiAgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4g
cmVnaXN0cmF0aW9ucyhtX3JlZ2lzdHJhdGlvbnMpOwotICAgIGZvciAoSGFzaFNldDxNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyYXRpb25zLmJl
Z2luKCk7IGl0ZXIgIT0gcmVnaXN0cmF0aW9ucy5lbmQoKTsgKytpdGVyKQotICAgICAgICBNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjp1bnJlZ2lzdGVyQW5kRGVsZXRlKCppdGVyKTsKKyAg
ICBmb3IgKGF1dG8qIHJlZ2lzdHJhdGlvbiA6IHJlZ2lzdHJhdGlvbnMpCisgICAgICAgIE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnVucmVnaXN0ZXJBbmREZWxldGUocmVnaXN0cmF0aW9u
KTsKIH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZhdGlvblN0YXJ0ZWQoTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uKQpAQCAtMTY0LDggKzE2NCw4IEBA
IHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6c2V0SGFzVHJhbnNpZW50UmUKIEhhc2hTZXQ8Tm9kZSo+
IE11dGF0aW9uT2JzZXJ2ZXI6OmdldE9ic2VydmVkTm9kZXMoKSBjb25zdAogewogICAgIEhhc2hT
ZXQ8Tm9kZSo+IG9ic2VydmVkTm9kZXM7Ci0gICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaXN0cmF0aW9ucy5i
ZWdpbigpOyBpdGVyICE9IG1fcmVnaXN0cmF0aW9ucy5lbmQoKTsgKytpdGVyKQotICAgICAgICAo
Kml0ZXIpLT5hZGRSZWdpc3RyYXRpb25Ob2Rlc1RvU2V0KG9ic2VydmVkTm9kZXMpOworICAgIGZv
ciAoYXV0byogcmVnaXN0cmF0aW9uIDogbV9yZWdpc3RyYXRpb25zKQorICAgICAgICByZWdpc3Ry
YXRpb24tPmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9TZXQob2JzZXJ2ZWROb2Rlcyk7CiAgICAgcmV0
dXJuIG9ic2VydmVkTm9kZXM7CiB9CiAKQEAgLTE4MSw5ICsxODEsOSBAQCB2b2lkIE11dGF0aW9u
T2JzZXJ2ZXI6OmRlbGl2ZXIoKQogICAgIC8vIENhbGxpbmcgY2xlYXJUcmFuc2llbnRSZWdpc3Ry
YXRpb25zKCkgY2FuIG1vZGlmeSBtX3JlZ2lzdHJhdGlvbnMsIHNvIGl0J3MgbmVjZXNzYXJ5CiAg
ICAgLy8gdG8gbWFrZSBhIGNvcHkgb2YgdGhlIHRyYW5zaWVudCByZWdpc3RyYXRpb25zIGJlZm9y
ZSBvcGVyYXRpbmcgb24gdGhlbS4KICAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbiosIDE+IHRyYW5zaWVudFJlZ2lzdHJhdGlvbnM7Ci0gICAgZm9yIChIYXNoU2V0PE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPjo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaXN0cmF0aW9u
cy5iZWdpbigpOyBpdGVyICE9IG1fcmVnaXN0cmF0aW9ucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmICgoKml0ZXIpLT5oYXNUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkpCi0gICAgICAgICAg
ICB0cmFuc2llbnRSZWdpc3RyYXRpb25zLmFwcGVuZCgqaXRlcik7CisgICAgZm9yIChhdXRvKiBy
ZWdpc3RyYXRpb24gOiBtX3JlZ2lzdHJhdGlvbnMpIHsKKyAgICAgICAgaWYgKHJlZ2lzdHJhdGlv
bi0+aGFzVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpKQorICAgICAgICAgICAgdHJhbnNpZW50UmVn
aXN0cmF0aW9ucy5hcHBlbmQocmVnaXN0cmF0aW9uKTsKICAgICB9CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0cmFuc2llbnRSZWdpc3RyYXRpb25zLnNpemUoKTsgKytpKQogICAgICAgICB0
cmFuc2llbnRSZWdpc3RyYXRpb25zW2ldLT5jbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwLmNwcAkocmV2aXNpb24gMTYxMDk1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCAr
NTcsOCBAQCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6TXV0YXRpb25PCiAKIGJvb2wg
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewot
ICAgIGZvciAoSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBt
X29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVy
LT52YWx1ZSkpCisgICAgZm9yIChhdXRvIG9wdGlvbnMgOiBtX29ic2VydmVycy52YWx1ZXMoKSkg
eworICAgICAgICBpZiAoaGFzT2xkVmFsdWUob3B0aW9ucykpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjgsOSArNjgsOSBAQCB2b2lkIE11
dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjplbnF1CiB7CiAgICAgUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBtdXRhdGlvbiA9IHBycE11dGF0aW9uOwogICAgIFJlZlB0cjxNdXRhdGlvblJlY29y
ZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlOwotICAgIGZvciAoSGFzaE1hcDxNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0g
bV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+a2V5OwotICAgICAg
ICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKSB7CisgICAgZm9yIChhdXRvJiBvYnNlcnZl
ck9wdGlvbnNQYWlyIDogbV9vYnNlcnZlcnMpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciog
b2JzZXJ2ZXIgPSBvYnNlcnZlck9wdGlvbnNQYWlyLmtleTsKKyAgICAgICAgaWYgKGhhc09sZFZh
bHVlKG9ic2VydmVyT3B0aW9uc1BhaXIudmFsdWUpKSB7CiAgICAgICAgICAgICBvYnNlcnZlci0+
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCShyZXZpc2lvbiAxNjEwOTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDggKzg3LDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjbGVhcgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChOb2RlSGFzaFNldDo6aXRlcmF0b3Ig
aXRlciA9IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbV90
cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+ZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVy
KS0+dW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgZm9yIChh
dXRvJiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCisgICAgICAgIG5vZGUt
PnVucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFu
c2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5jbGVhcigpOwogCkBAIC0xMjYsOCArMTI2LDggQEAgdm9p
ZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjphZGRSZQogICAgIG5vZGVzLmFkZChtX3Jl
Z2lzdHJhdGlvbk5vZGUpOwogICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykK
ICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZUhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLT5iZWdpbigpOyBpdGVyICE9IG1fdHJh
bnNpZW50UmVnaXN0cmF0aW9uTm9kZXMtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIG5vZGVzLmFk
ZChpdGVyLT5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0
cmF0aW9uTm9kZXMpCisgICAgICAgIG5vZGVzLmFkZChub2RlLmdldCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTYxMDk1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsOSAr
MTMxLDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgc2l6ZV90IGVsZW1lbnRz
V2l0aFJhcmVEYXRhID0gMDsKICAgICBzaXplX3QgZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwID0g
MDsKIAotICAgIGZvciAoSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbGl2ZU5vZGVTZXQu
YmVnaW4oKTsgaXQgIT0gbGl2ZU5vZGVTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgTm9kZSog
bm9kZSA9ICppdDsKLQorICAgIGZvciAoYXV0byogbm9kZSA6IGxpdmVOb2RlU2V0KSB7CiAgICAg
ICAgIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgICAgICArK25vZGVzV2l0aFJh
cmVEYXRhOwogICAgICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewpAQCAtMjM5
LDggKzIzNyw4IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50ZigiICBO
dW1iZXIgb2YgU2hhZG93Um9vdCBub2RlczogJXp1XG4iLCBzaGFkb3dSb290Tm9kZXMpOwogCiAg
ICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxuIik7Ci0gICAgZm9yIChI
YXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJUYWdDb3VudC5iZWdpbigp
OyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAgcHJpbnRmKCIgIE51bWJl
ciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmtleS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUp
OworICAgIGZvciAoYXV0byBzdHJpbmdTaXplUGFpciA6IHBlclRhZ0NvdW50KQorICAgICAgICBw
cmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4iLCBzdHJpbmdTaXplUGFpci5rZXku
dXRmOCgpLmRhdGEoKSwgc3RyaW5nU2l6ZVBhaXIudmFsdWUpOwogCiAgICAgcHJpbnRmKCJBdHRy
aWJ1dGVzOlxuIik7CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBBdHRyaWJ1dGVzIChub24tTm9k
ZSBhbmQgTm9kZSk6ICV6dSBbJXp1XVxuIiwgYXR0cmlidXRlcywgc2l6ZW9mKEF0dHJpYnV0ZSkp
OwpAQCAtNzI3LDEwICs3MjUsMTAgQEAgYm9vbCBEb2N1bWVudDo6c2hvdWxkSW52YWxpZGF0ZU5v
ZGVMaXN0QQogCiB2b2lkIERvY3VtZW50OjppbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKQogewotICAgIGZvciAoSGFzaFNl
dDxMaXZlTm9kZUxpc3QqPjo6aXRlcmF0b3IgaXQgPSBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3Vt
ZW50LmJlZ2luKCksIGVuZCA9IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7
Ci0gICAgZm9yIChIYXNoU2V0PEhUTUxDb2xsZWN0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9jb2xs
ZWN0aW9uc0ludmFsaWRhdGVkQXREb2N1bWVudC5iZWdpbigpLCBlbmQgPSBtX2NvbGxlY3Rpb25z
SW52YWxpZGF0ZWRBdERvY3VtZW50LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgq
aXQpLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOworICAgIGZvciAoYXV0byogbm9kZUxpc3Qg
OiBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50KQorICAgICAgICBub2RlTGlzdC0+aW52YWxp
ZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICBmb3IgKGF1dG8qIGNvbGxlY3Rpb24gOiBtX2NvbGxl
Y3Rpb25zSW52YWxpZGF0ZWRBdERvY3VtZW50KQorICAgICAgICBjb2xsZWN0aW9uLT5pbnZhbGlk
YXRlQ2FjaGUoYXR0ck5hbWUpOwogfQogCiB2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdEFu
ZENvbGxlY3Rpb25DYWNoZXNJbkFuY2VzdG9ycyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFt
ZSwgRWxlbWVudCogYXR0cmlidXRlT3duZXJFbGVtZW50KQpAQCAtMTcwMSwyMCArMTY5OSwyMCBA
QCB2b2lkIE5vZGU6OnNob3dUcmVlRm9yVGhpc0Fjcm9zc0ZyYW1lKCkgCiAKIHZvaWQgTm9kZUxp
c3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5h
bWUpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCksIGVu
ZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgZm9yIChhdXRvKiBub2Rl
TGlzdCA6IG1fYXRvbWljTmFtZUNhY2hlcy52YWx1ZXMoKSkKKyAgICAgICAgbm9kZUxpc3QtPmlu
dmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtX25hbWVDYWNo
ZXMuYmVnaW4oKSwgZW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICBmb3IgKGF1
dG8qIG5vZGVMaXN0IDogbV9uYW1lQ2FjaGVzLnZhbHVlcygpKQorICAgICAgICBub2RlTGlzdC0+
aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAotICAgIGZvciAoYXV0byBpdCA9IG1fY2FjaGVk
Q29sbGVjdGlvbnMuYmVnaW4oKSwgZW5kID0gbV9jYWNoZWRDb2xsZWN0aW9ucy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZShhdHRyTmFt
ZSk7CisgICAgZm9yIChhdXRvKiBjb2xsZWN0aW9uIDogbV9jYWNoZWRDb2xsZWN0aW9ucy52YWx1
ZXMoKSkKKyAgICAgICAgY29sbGVjdGlvbi0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAog
ICAgIGlmIChhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvIGl0ID0g
bV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKSwgZW5kID0gbV90YWdOb2RlTGlzdENhY2hlTlMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2Fj
aGUoKTsKKyAgICBmb3IgKGF1dG8qIG5vZGVMaXN0IDogbV90YWdOb2RlTGlzdENhY2hlTlMudmFs
dWVzKCkpCisgICAgICAgIG5vZGVMaXN0LT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogdm9pZCBO
b2RlOjpnZXRTdWJyZXNvdXJjZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKQEAg
LTE3NzgsMTYgKzE3NzYsMTUgQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1
bWVudAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFZlY3RvcjxPd25QdHI8TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbj4+KiByZWdpc3RyeSA9IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpKSB7CisgICAgaWYgKGF1dG8qIHJlZ2lzdHJ5ID0gbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5
KCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RyeS0+c2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkTXV0YXRpb25PYnNlcnZlclR5cGVzKHJl
Z2lzdHJ5LT5hdChpKS0+bXV0YXRpb25UeXBlcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50UmVn
aXN0cnkgPSB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgewotICAgICAgICBm
b3IgKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+OjppdGVyYXRvciBpdGVy
ID0gdHJhbnNpZW50UmVnaXN0cnktPmJlZ2luKCk7IGl0ZXIgIT0gdHJhbnNpZW50UmVnaXN0cnkt
PmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkTXV0YXRpb25PYnNl
cnZlclR5cGVzKCgqaXRlciktPm11dGF0aW9uVHlwZXMoKSk7Ci0gICAgICAgIH0KKyAgICBpZiAo
YXV0byogdHJhbnNpZW50UmVnaXN0cnkgPSB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cnkoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHJlZ2lzdHJhdGlvbiA6ICp0cmFuc2llbnRSZWdp
c3RyeSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkTXV0YXRpb25PYnNlcnZlclR5cGVzKHJl
Z2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKICAgICB9CiB9CiAKQEAgLTE5MjgsMTEgKzE5
MjUsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RNYXRjaGluZ09ic2VydgogewogICAg
IGlmICghcmVnaXN0cnkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHR5cGVuYW1lIFJlZ2lz
dHJ5OjppdGVyYXRvciBpdGVyID0gcmVnaXN0cnktPmJlZ2luKCk7IGl0ZXIgIT0gcmVnaXN0cnkt
PmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29uc3QgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbiYgcmVnaXN0cmF0aW9uID0gKippdGVyOwotICAgICAgICBpZiAocmVnaXN0cmF0aW9uLnNo
b3VsZFJlY2VpdmVNdXRhdGlvbkZyb20odGFyZ2V0LCB0eXBlLCBhdHRyaWJ1dGVOYW1lKSkgewot
ICAgICAgICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25z
ID0gcmVnaXN0cmF0aW9uLmRlbGl2ZXJ5T3B0aW9ucygpOwotICAgICAgICAgICAgSGFzaE1hcDxN
dXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1
bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24ub2JzZXJ2ZXIoKSwgZGVsaXZl
cnlPcHRpb25zKTsKKworICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogKnJlZ2lzdHJ5KSB7
CisgICAgICAgIGlmIChyZWdpc3RyYXRpb24tPnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20odGFy
Z2V0LCB0eXBlLCBhdHRyaWJ1dGVOYW1lKSkgeworICAgICAgICAgICAgTXV0YXRpb25SZWNvcmRE
ZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9w
dGlvbnMoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3Ry
YXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
fD0gZGVsaXZlcnlPcHRpb25zOwogICAgICAgICB9CkBAIC0yMDA2LDE1ICsyMDAzLDE1IEBAIHZv
aWQgTm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2kKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24+PiogcmVnaXN0cnkgPSBub2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0
cnkoKSkgeworICAgICAgICBpZiAoYXV0byogcmVnaXN0cnkgPSBub2RlLT5tdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKSkgewogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSByZWdpc3Ry
eS0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
CiAgICAgICAgICAgICAgICAgcmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlZFN1YnRyZWVOb2RlV2ls
bERldGFjaCh0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChIYXNoU2V0PE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50UmVnaXN0cnkgPSBub2RlLT50cmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgewotICAgICAgICAgICAgZm9yIChIYXNoU2V0
PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPjo6aXRlcmF0b3IgaXRlciA9IHRyYW5zaWVu
dFJlZ2lzdHJ5LT5iZWdpbigpOyBpdGVyICE9IHRyYW5zaWVudFJlZ2lzdHJ5LT5lbmQoKTsgKytp
dGVyKQotICAgICAgICAgICAgICAgICgqaXRlciktPm9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0
YWNoKHRoaXMpOworICAgICAgICBpZiAoYXV0byogdHJhbnNpZW50UmVnaXN0cnkgPSBub2RlLT50
cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvKiByZWdpc3RyYXRpb24gOiAqdHJhbnNpZW50UmVnaXN0cnkpCisgICAgICAgICAgICAgICAg
cmVnaXN0cmF0aW9uLT5vYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCh0aGlzKTsKICAgICAg
ICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9u
IDE2MTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjI4LDI5ICsyMjgsMjUgQEAgcHVibGljOgogICAgICAgICBpbnZhbGlkYXRlQ2Fj
aGVzKCk7CiAKICAgICAgICAgaWYgKG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4oKSwgZW5kID0g
bV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
ICAgICBMaXZlTm9kZUxpc3QmIGxpc3QgPSAqaXQtPnZhbHVlOwotICAgICAgICAgICAgICAgIG9s
ZERvY3VtZW50LT51bnJlZ2lzdGVyTm9kZUxpc3QobGlzdCk7Ci0gICAgICAgICAgICAgICAgbmV3
RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3QobGlzdCk7CisgICAgICAgICAgICBmb3IgKGF1dG8q
IGxpc3QgOiBtX2F0b21pY05hbWVDYWNoZXMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAgICBv
bGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0KCpsaXN0KTsKKyAgICAgICAgICAgICAgICBu
ZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlzdCgqbGlzdCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGZvciAoYXV0byBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpLCBlbmQgPSBtX25h
bWVDYWNoZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIExpdmVO
b2RlTGlzdCYgbGlzdCA9ICppdC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQt
PnVucmVnaXN0ZXJOb2RlTGlzdChsaXN0KTsKLSAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+
cmVnaXN0ZXJOb2RlTGlzdChsaXN0KTsKKyAgICAgICAgICAgIGZvciAoYXV0byogbGlzdCA6IG1f
bmFtZUNhY2hlcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJl
Z2lzdGVyTm9kZUxpc3QoKmxpc3QpOworICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdp
c3Rlck5vZGVMaXN0KCpsaXN0KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChh
dXRvIGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKSwgZW5kID0gbV90YWdOb2RlTGlz
dENhY2hlTlMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIExpdmVO
b2RlTGlzdCYgbGlzdCA9ICppdC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0
LmlzUm9vdGVkQXREb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5y
ZWdpc3Rlck5vZGVMaXN0KGxpc3QpOwotICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdp
c3Rlck5vZGVMaXN0KGxpc3QpOworICAgICAgICAgICAgZm9yIChhdXRvKiBsaXN0IDogbV90YWdO
b2RlTGlzdENhY2hlTlMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWxpc3Qt
PmlzUm9vdGVkQXREb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5y
ZWdpc3Rlck5vZGVMaXN0KCpsaXN0KTsKKyAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVn
aXN0ZXJOb2RlTGlzdCgqbGlzdCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAo
YXV0byBpdCA9IG1fY2FjaGVkQ29sbGVjdGlvbnMuYmVnaW4oKSwgZW5kID0gbV9jYWNoZWRDb2xs
ZWN0aW9ucy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgSFRNTENv
bGxlY3Rpb24mIGNvbGxlY3Rpb24gPSAqaXQtPnZhbHVlOwotICAgICAgICAgICAgICAgIG9sZERv
Y3VtZW50LT51bnJlZ2lzdGVyQ29sbGVjdGlvbihjb2xsZWN0aW9uKTsKLSAgICAgICAgICAgICAg
ICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24pOworICAgICAgICAg
ICAgZm9yIChhdXRvIGNvbGxlY3Rpb24gOiBtX2NhY2hlZENvbGxlY3Rpb25zLnZhbHVlcygpKSB7
CisgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJDb2xsZWN0aW9uKCpjb2xs
ZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJDb2xsZWN0aW9u
KCpjb2xsZWN0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlzaW9u
IDE2MTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE3ICsxMDMsMTUgQEAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6U2NyaXB0RXhlY3V0aW9uQwogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKQogewogICAgIG1faW5EZXN0cnVjdG9yID0gdHJ1ZTsKLSAgICBmb3Ig
KEhhc2hTZXQ8Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG1f
ZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX2Rlc3RydWN0aW9uT2JzZXJ2
ZXJzLmVuZCgpOyBpdGVyID0gbV9kZXN0cnVjdGlvbk9ic2VydmVycy5iZWdpbigpKSB7Ci0gICAg
ICAgIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKiBvYnNlcnZlciA9ICppdGVyOworICAgIGZv
ciAoYXV0byogb2JzZXJ2ZXIgOiBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzKSB7CiAgICAgICAgIG1f
ZGVzdHJ1Y3Rpb25PYnNlcnZlcnMucmVtb3ZlKG9ic2VydmVyKTsKICAgICAgICAgQVNTRVJUKG9i
c2VydmVyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CiAgICAgICAgIG9ic2Vy
dmVyLT5jb250ZXh0RGVzdHJveWVkKCk7CiAgICAgfQogCi0gICAgSGFzaFNldDxNZXNzYWdlUG9y
dCo+OjppdGVyYXRvciBtZXNzYWdlUG9ydHNFbmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKLSAg
ICBmb3IgKEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6aXRlcmF0b3IgaXRlciA9IG1fbWVzc2FnZVBv
cnRzLmJlZ2luKCk7IGl0ZXIgIT0gbWVzc2FnZVBvcnRzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
QVNTRVJUKCgqaXRlciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAg
ICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3llZCgpOworICAgIGZvciAoYXV0byogcG9ydCA6IG1f
bWVzc2FnZVBvcnRzKSB7CisgICAgICAgIEFTU0VSVChwb3J0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIHBvcnQtPmNvbnRleHREZXN0cm95ZWQoKTsKICAgICB9
CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgaWYgKG1fcHVibGljVVJMTWFuYWdlcikKQEAgLTE2Niwx
MSArMTY0LDEwIEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEEKIHsK
ICAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5naW5n
IGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRuJ3QgZXhlY3V0ZSBhcmJpdHJh
cnkgSlMuCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKLSAgICBBY3Rp
dmVET01PYmplY3RzU2V0OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01P
YmplY3RzLmVuZCgpOwotICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c1NldDo6aXRlcmF0b3IgaXRl
ciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7
ICsraXRlcikgewotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c3VzcGVuZElmTmVlZGVkQ2Fs
bGVkKCkpOwotICAgICAgICBpZiAoISgqaXRlciktPmNhblN1c3BlbmQoKSkgeworICAgIGZvciAo
YXV0byogYWN0aXZlRE9NT2JqZWN0IDogbV9hY3RpdmVET01PYmplY3RzKSB7CisgICAgICAgIEFT
U0VSVChhY3RpdmVET01PYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsK
KyAgICAgICAgQVNTRVJUKGFjdGl2ZURPTU9iamVjdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkp
OworICAgICAgICBpZiAoIWFjdGl2ZURPTU9iamVjdC0+Y2FuU3VzcGVuZCgpKSB7CiAgICAgICAg
ICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDExICsxODcsMTAgQEAgdm9pZCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aQogCiAgICAgLy8gTm8gcHJvdGVjdGlvbiBhZ2Fp
bnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRlcmF0aW9uOiBzdXNwZW5k
KCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgogICAgIG1faXRlcmF0aW5nQWN0aXZl
RE9NT2JqZWN0cyA9IHRydWU7Ci0gICAgQWN0aXZlRE9NT2JqZWN0c1NldDo6aXRlcmF0b3IgYWN0
aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEFjdGl2
ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4o
KTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKCgq
aXRlciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJU
KCgqaXRlciktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgKCppdGVyKS0+c3Vz
cGVuZCh3aHkpOworICAgIGZvciAoYXV0byogYWN0aXZlRE9NT2JqZWN0IDogbV9hY3RpdmVET01P
YmplY3RzKSB7CisgICAgICAgIEFTU0VSVChhY3RpdmVET01PYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGFjdGl2ZURPTU9iamVjdC0+c3Vz
cGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBhY3RpdmVET01PYmplY3QtPnN1c3BlbmQo
d2h5KTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAg
ICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkID0gdHJ1ZTsKQEAgLTIwOSwxMSArMjA1
LDEwIEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXYKICAgICBtX2Fj
dGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSBmYWxzZTsKICAgICAvLyBObyBwcm90ZWN0aW9u
IGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IHJl
c3VtZSgpIHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KICAgICBtX2l0ZXJhdGluZ0Fj
dGl2ZURPTU9iamVjdHMgPSB0cnVlOwotICAgIEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9y
IGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChB
Y3RpdmVET01PYmplY3RzU2V0OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJl
Z2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VS
VCgoKml0ZXIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFT
U0VSVCgoKml0ZXIpLT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgICgqaXRlcikt
PnJlc3VtZSgpOworICAgIGZvciAoYXV0byogYWN0aXZlRE9NT2JqZWN0IDogbV9hY3RpdmVET01P
YmplY3RzKSB7CisgICAgICAgIEFTU0VSVChhY3RpdmVET01PYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGFjdGl2ZURPTU9iamVjdC0+c3Vz
cGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBhY3RpdmVET01PYmplY3QtPnJlc3VtZSgp
OwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KQEAg
LTIyNSwxMSArMjIwLDEwIEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2
ZUQKICAgICBtX2FjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkID0gdHJ1ZTsKICAgICAvLyBObyBw
cm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVy
YXRpb246IHN0b3AoKSBzaG91bGRuJ3QgZXhlY3V0ZSBhcmJpdHJhcnkgSlMuCiAgICAgbV9pdGVy
YXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKLSAgICBBY3RpdmVET01PYmplY3RzU2V0Ojpp
dGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwotICAg
IGZvciAoQWN0aXZlRE9NT2JqZWN0c1NldDo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2Jq
ZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAg
ICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAg
ICAgICBBU1NFUlQoKCppdGVyKS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICAo
Kml0ZXIpLT5zdG9wKCk7CisgICAgZm9yIChhdXRvKiBhY3RpdmVET01PYmplY3QgOiBtX2FjdGl2
ZURPTU9iamVjdHMpIHsKKyAgICAgICAgQVNTRVJUKGFjdGl2ZURPTU9iamVjdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoYWN0aXZlRE9NT2JqZWN0
LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGFjdGl2ZURPTU9iamVjdC0+c3Rv
cCgpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIApA
QCAtMjc3LDExICsyNzEsMTEgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp3aWxsRGVz
dHJveQogICAgIG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMucmVtb3ZlKG9ic2VydmVyKTsKIH0KIAot
dm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjbG9zZU1lc3NhZ2VQb3J0cygpIHsKLSAgICBI
YXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1fbWVzc2Fn
ZVBvcnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBp
dGVyID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBtZXNzYWdlUG9ydHNFbmQ7ICsr
aXRlcikgewotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
ID09IHRoaXMpOwotICAgICAgICAoKml0ZXIpLT5jbG9zZSgpOwordm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpjbG9zZU1lc3NhZ2VQb3J0cygpCit7CisgICAgZm9yIChhdXRvKiBwb3J0IDog
bV9tZXNzYWdlUG9ydHMpIHsKKyAgICAgICAgQVNTRVJUKHBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgcG9ydC0+Y2xvc2UoKTsKICAgICB9CiB9CiAKQEAg
LTM3MywxMCArMzY3LDggQEAgUHVibGljVVJMTWFuYWdlciYgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZh
bChkb3VibGUgb2xkTWluaW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgaWYgKG1pbmltdW1UaW1l
ckludGVydmFsKCkgIT0gb2xkTWluaW11bVRpbWVySW50ZXJ2YWwpIHsKLSAgICAgICAgZm9yIChU
aW1lb3V0TWFwOjppdGVyYXRvciBpdGVyID0gbV90aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1f
dGltZW91dHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0g
aXRlci0+dmFsdWU7CisgICAgICAgIGZvciAoYXV0byogdGltZXIgOiBtX3RpbWVvdXRzLnZhbHVl
cygpKQogICAgICAgICAgICAgdGltZXItPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZE1p
bmltdW1UaW1lckludGVydmFsKTsKLSAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMzkyLDEwICsz
ODQsOCBAQCBkb3VibGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6bWluaW11bVRpCiAKIHZvaWQg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGlkQ2hhbmdlVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgp
CiB7Ci0gICAgZm9yIChUaW1lb3V0TWFwOjppdGVyYXRvciBpdGVyID0gbV90aW1lb3V0cy5iZWdp
bigpOyBpdGVyICE9IG1fdGltZW91dHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBET01UaW1l
ciogdGltZXIgPSBpdGVyLT52YWx1ZTsKKyAgICBmb3IgKGF1dG8qIHRpbWVyIDogbV90aW1lb3V0
cy52YWx1ZXMoKSkKICAgICAgICAgdGltZXItPmRpZENoYW5nZUFsaWdubWVudEludGVydmFsKCk7
Ci0gICAgfQogfQogCiBkb3VibGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dGltZXJBbGlnbm1l
bnRJbnRlcnZhbCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRG
bG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93
LmNwcAkocmV2aXNpb24gMTYxMDk1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVk
Rmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMiArMTMwLDExIEBAIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IFdlYktpdE5hbWVkRmxvdzo6Z2UKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBy
ZWdpb25FbGVtZW50czsKIAogICAgIGlmIChpbkZsb3dUaHJlYWQoY29udGVudE5vZGUtPnJlbmRl
cmVyKCksIG1fcGFyZW50Rmxvd1RocmVhZCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9u
TGlzdCYgcmVnaW9uTGlzdCA9IG1fcGFyZW50Rmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgp
OwotICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHJlZ2lvbkxpc3QuYmVnaW4oKSwgZW5kID0gcmVn
aW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBmb3IgKGF1dG8q
IHJlZ2lvbiA6IG1fcGFyZW50Rmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgpKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1lbnRzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhl
IGxpc3QuCiAgICAgICAgICAgICAvLyBUaGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiB3ZSB3aWxs
IHByb3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBpbnRlcmZhY2UKICAgICAgICAgICAgIC8vIGh0
dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyN0aGUtcmVnaW9uLWludGVyZmFjZQot
ICAgICAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlbmRlclJlZ2lvbiA9
IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKml0ZXIpOworICAgICAgICAgICAgY29uc3QgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlbmRlclJlZ2lvbiA9IHRvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQocmVnaW9uKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJSZWdpb24tPmlzUHNldWRvRWxl
bWVudFJlZ2lvbigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KG1fcGFyZW50Rmxvd1RocmVhZC0+b2JqZWN0SW5GbG93UmVnaW9uKGNvbnRlbnROb2RlLT5yZW5k
ZXJlcigpLCByZW5kZXJSZWdpb24pKSB7CkBAIC0xNTksMTMgKzE1OCwxMSBAQCBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBXZWJLaXROYW1lZEZsb3c6OmdlCiAgICAgICAgIHJldHVybiBTdGF0aWNFbGVt
ZW50TGlzdDo6Y3JlYXRlRW1wdHkoKTsKIAogICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IHJlZ2lv
bkVsZW1lbnRzOwotCi0gICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9IG1f
cGFyZW50Rmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgpOwotICAgIGZvciAoYXV0byBpdGVy
ID0gcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSByZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIHJlZ2lvbiA6IG1fcGFyZW50Rmxvd1RocmVhZC0+
cmVuZGVyUmVnaW9uTGlzdCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBQc2V1ZG8tZWxlbWVudHMg
YXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KICAgICAgICAgLy8gVGhleSB3aWxsIGJlIGlu
Y2x1ZGVkIHdoZW4gd2Ugd2lsbCBwcm9wZXJseSBzdXBwb3J0IHRoZSBSZWdpb24gaW50ZXJmYWNl
CiAgICAgICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyN0aGUtcmVn
aW9uLWludGVyZmFjZQotICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVu
ZGVyUmVnaW9uID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXRlcik7CisgICAgICAgIGNv
bnN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJSZWdpb24gPSB0b1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KHJlZ2lvbik7CiAgICAgICAgIGlmIChyZW5kZXJSZWdpb24tPmlzUHNldWRv
RWxlbWVudFJlZ2lvbigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEFTU0VSVChy
ZW5kZXJSZWdpb24tPmdlbmVyYXRpbmdFbGVtZW50KCkpOwpAQCAtMTg2LDEwICsxODMsNyBAQCBQ
YXNzUmVmUHRyPE5vZGVMaXN0PiBXZWJLaXROYW1lZEZsb3c6OmdlCiAgICAgICAgIHJldHVybiBT
dGF0aWNFbGVtZW50TGlzdDo6Y3JlYXRlRW1wdHkoKTsKIAogICAgIFZlY3RvcjxSZWY8RWxlbWVu
dD4+IGNvbnRlbnRFbGVtZW50czsKLQotICAgIGNvbnN0IE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50
cyYgY29udGVudEVsZW1lbnRzTGlzdCA9IG1fcGFyZW50Rmxvd1RocmVhZC0+Y29udGVudEVsZW1l
bnRzKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gY29udGVudEVsZW1lbnRzTGlzdC5iZWdpbigpLCBl
bmQgPSBjb250ZW50RWxlbWVudHNMaXN0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9ICppdDsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX3Bh
cmVudEZsb3dUaHJlYWQtPmNvbnRlbnRFbGVtZW50cygpKSB7CiAgICAgICAgIEFTU0VSVChlbGVt
ZW50LT5jb21wdXRlZFN0eWxlKCktPmZsb3dUaHJlYWQoKSA9PSBtX3BhcmVudEZsb3dUaHJlYWQt
PmZsb3dUaHJlYWROYW1lKCkpOwogICAgICAgICBjb250ZW50RWxlbWVudHMuYXBwZW5kKCplbGVt
ZW50KTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255112</attachid>
            <date>2015-06-18 07:03:15 -0700</date>
            <delta_ts>2015-06-26 07:45:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126250-20150618160237.patch</filename>
            <type>text/plain</type>
            <size>13227</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNiNjAzNGMzMmI4YzE2
ODViMzU1MmU1MjQ3NTUzZmVlMTQ2MDc4Zi4uMTUwNjY2Yjg4MGZmZWQ4OGU4MjRjN2M5OTJiNTA1
YzBmZjA4Y2UzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTA2LTE4ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCBzb21l
IG9mIFdlYkNvcmUvZG9tIG92ZXIgdG8gcmFuZ2UtZm9yIGxvb3BzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYyNTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgcGF0
Y2ggb2YgU2FtIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+LgorCisgICAgICAgICogZG9tL0NvbnRh
aW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUNo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OndpbGxSZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAgICogZG9tL011dGF0
aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZGlz
Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpnZXRPYnNlcnZl
ZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIpOgor
ICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVl
c3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uOjpjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6YWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldCk6
CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZHVtcFN0
YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9y
TXV0YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZl
cnNOb2RlV2lsbERldGFjaCk6CisKIDIwMTUtMDYtMTggIFlvdWVubiBGYWJsZXQgPHlvdWVubi5m
YWJsZXRAY3JmLmNhbm9uLmZyPiBhbmQgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gSW1wbGVtZW50IFJlYWRhYmxl
U3RyZWFtUmVhZGVyLnJlbGVhc2VMb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAK
aW5kZXggMWQ2Y2JhNzJkNTBiZGQwYjI2MDA5NGQ2NDUwODEwNGM1ZTkwMGYxMS4uNDdkZTExMDBi
OTMzNWRmYWFiNWJhNThiMjAzZjcxMWYxYWU1NjIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcApAQCAtNDQ1LDMwICs0NDUsMjggQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBs
YWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlKGRvY3VtZW50
KCksICp0aGlzKTsKIAogICAgIC8vIEFkZCB0aGUgbmV3IGNoaWxkKHJlbikKLSAgICBmb3IgKGF1
dG8gaXQgPSB0YXJnZXRzLmJlZ2luKCksIGVuZCA9IHRhcmdldHMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBOb2RlJiBjaGlsZCA9IGl0LT5nZXQoKTsKLQorICAgIGZvciAoYXV0
byYgY2hpbGQgOiB0YXJnZXRzKSB7CiAgICAgICAgIC8vIER1ZSB0byBhcmJpdHJhcnkgY29kZSBy
dW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9uIGV2ZW50IGl0J3MKICAgICAgICAg
Ly8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8gbG9uZ2VyIGEgY2hpbGQgb2YgInRoaXMiLgog
ICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2libGUgdGhhdCAiY2hpbGQiIGhhcyBiZWVuIGluc2Vy
dGVkIGVsc2V3aGVyZS4KICAgICAgICAgLy8gSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCB3ZSds
bCBqdXN0IHN0b3AuCiAgICAgICAgIGlmIChuZXh0ICYmIG5leHQtPnBhcmVudE5vZGUoKSAhPSB0
aGlzKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChjaGlsZC5wYXJlbnROb2RlKCkp
CisgICAgICAgIGlmIChjaGlsZC0+cGFyZW50Tm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZCgmY2hpbGQpOworICAgICAgICB0cmVl
U2NvcGUoKS5hZG9wdElmTmVlZGVkKCZjaGlsZC5nZXQoKSk7CiAKICAgICAgICAgLy8gQWRkIGNo
aWxkIGJlZm9yZSAibmV4dCIuCiAgICAgICAgIHsKICAgICAgICAgICAgIE5vRXZlbnREaXNwYXRj
aEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAgICAgICAgICAgICBpZiAobmV4dCkK
LSAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKm5leHQsIGNoaWxkKTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKm5leHQsIGNoaWxkLmdldCgpKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKCZjaGls
ZCwgKnRoaXMpOworICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIoJmNoaWxk
LmdldCgpLCAqdGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNl
cnRpb24oY2hpbGQpOworICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQuZ2V0
KCkpOwogICAgIH0KIAogICAgIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKQEAgLTQ5
NywxMyArNDk1LDEyIEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJO
b2RlJiBjb250YWluZXIpCiAgICAgZ2V0Q2hpbGROb2Rlcyhjb250YWluZXIsIGNoaWxkcmVuKTsK
IAogICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKLSAgICBm
b3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytp
dCkgewotICAgICAgICBOb2RlJiBjaGlsZCA9IGl0LT5nZXQoKTsKLSAgICAgICAgbXV0YXRpb24u
d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKLSAgICAgICAgY2hpbGQubm90aWZ5TXV0YXRpb25PYnNl
cnZlcnNOb2RlV2lsbERldGFjaCgpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikg
eworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0KCkpOworICAgICAg
ICBjaGlsZC0+bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgpOwogCiAgICAg
ICAgIC8vIGZpcmUgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IG11dGF0aW9uIGV2ZW50cy4KLSAgICAg
ICAgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoY2hpbGQpOworICAgICAgICBkaXNwYXRjaENo
aWxkUmVtb3ZhbEV2ZW50cyhjaGlsZC5nZXQoKSk7CiAgICAgfQogCiAgICAgY29udGFpbmVyLmRv
Y3VtZW50KCkubm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChjb250YWluZXIpOwpAQCAtNzA0LDI0
ICs3MDEsMjIgQEAgYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5v
ZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIC8vIE5vdyBhY3R1YWxseSBh
ZGQgdGhlIGNoaWxkKHJlbikKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKCp0
aGlzKTsKLSAgICBmb3IgKGF1dG8gaXQgPSB0YXJnZXRzLmJlZ2luKCksIGVuZCA9IHRhcmdldHMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOb2RlJiBjaGlsZCA9IGl0LT5nZXQo
KTsKLQorICAgIGZvciAoYXV0byYgY2hpbGQgOiB0YXJnZXRzKSB7CiAgICAgICAgIC8vIElmIHRo
ZSBjaGlsZCBoYXMgYSBwYXJlbnQgYWdhaW4sIGp1c3Qgc3RvcCB3aGF0IHdlJ3JlIGRvaW5nLCBi
ZWNhdXNlCiAgICAgICAgIC8vIHRoYXQgbWVhbnMgc29tZW9uZSBpcyBkb2luZyBzb21ldGhpbmcg
d2l0aCBET00gbXV0YXRpb24gLS0gY2FuJ3QgcmUtcGFyZW50CiAgICAgICAgIC8vIGEgY2hpbGQg
dGhhdCBhbHJlYWR5IGhhcyBhIHBhcmVudC4KLSAgICAgICAgaWYgKGNoaWxkLnBhcmVudE5vZGUo
KSkKKyAgICAgICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCZjaGlsZCk7CisgICAgICAgIHRy
ZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoJmNoaWxkLmdldCgpKTsKIAogICAgICAgICAvLyBBcHBl
bmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgICB7CiAgICAgICAgICAgICBO
b0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgICAgICAg
ICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcigmY2hpbGQsICp0aGlzKTsKKyAgICAgICAgICAgIGFw
cGVuZENoaWxkVG9Db250YWluZXIoJmNoaWxkLmdldCgpLCAqdGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQpOworICAgICAgICB1cGRhdGVU
cmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQuZ2V0KCkpOwogICAgIH0KIAogICAgIGRpc3BhdGNoU3Vi
dHJlZU1vZGlmaWVkRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNw
cAppbmRleCA4MjIwZmU4NjMzM2UzM2Q5ZTA0NTdhM2Y4YmNkM2Q2ZjEyZmU0MmE2Li44NWFhNjA5
OTNiNTcwNmY2YjE2YjRlNjJiMGE0ZjUwYjcxNTQyNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC0xMTgsOCArMTE4LDggQEAgdm9pZCBNdXRhdGlvbk9ic2Vy
dmVyOjpkaXNjb25uZWN0KCkKIHsKICAgICBtX3JlY29yZHMuY2xlYXIoKTsKICAgICBIYXNoU2V0
PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiByZWdpc3RyYXRpb25zKG1fcmVnaXN0cmF0
aW9ucyk7Ci0gICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPjo6
aXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJhdGlvbnMuYmVnaW4oKTsgaXRlciAhPSByZWdpc3RyYXRp
b25zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246
OnVucmVnaXN0ZXJBbmREZWxldGUoKml0ZXIpOworICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9u
IDogcmVnaXN0cmF0aW9ucykKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6
dW5yZWdpc3RlckFuZERlbGV0ZShyZWdpc3RyYXRpb24pOwogfQogCiB2b2lkIE11dGF0aW9uT2Jz
ZXJ2ZXI6Om9ic2VydmF0aW9uU3RhcnRlZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiBy
ZWdpc3RyYXRpb24pCkBAIC0xNjQsOCArMTY0LDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpz
ZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24oKQogSGFzaFNldDxOb2RlKj4gTXV0YXRpb25PYnNl
cnZlcjo6Z2V0T2JzZXJ2ZWROb2RlcygpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxOb2RlKj4gb2Jz
ZXJ2ZWROb2RlczsKLSAgICBmb3IgKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bio+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIg
IT0gbV9yZWdpc3RyYXRpb25zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmFkZFJl
Z2lzdHJhdGlvbk5vZGVzVG9TZXQob2JzZXJ2ZWROb2Rlcyk7CisgICAgZm9yIChhdXRvKiByZWdp
c3RyYXRpb24gOiBtX3JlZ2lzdHJhdGlvbnMpCisgICAgICAgIHJlZ2lzdHJhdGlvbi0+YWRkUmVn
aXN0cmF0aW9uTm9kZXNUb1NldChvYnNlcnZlZE5vZGVzKTsKICAgICByZXR1cm4gb2JzZXJ2ZWRO
b2RlczsKIH0KIApAQCAtMTgxLDkgKzE4MSw5IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZGVs
aXZlcigpCiAgICAgLy8gQ2FsbGluZyBjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSBjYW4g
bW9kaWZ5IG1fcmVnaXN0cmF0aW9ucywgc28gaXQncyBuZWNlc3NhcnkKICAgICAvLyB0byBtYWtl
IGEgY29weSBvZiB0aGUgdHJhbnNpZW50IHJlZ2lzdHJhdGlvbnMgYmVmb3JlIG9wZXJhdGluZyBv
biB0aGVtLgogICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiwgMT4gdHJh
bnNpZW50UmVnaXN0cmF0aW9uczsKLSAgICBmb3IgKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbio+OjppdGVyYXRvciBpdGVyID0gbV9yZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0
ZXIgIT0gbV9yZWdpc3RyYXRpb25zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRl
ciktPmhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkKLSAgICAgICAgICAgIHRyYW5zaWVudFJl
Z2lzdHJhdGlvbnMuYXBwZW5kKCppdGVyKTsKKyAgICBmb3IgKGF1dG8qIHJlZ2lzdHJhdGlvbiA6
IG1fcmVnaXN0cmF0aW9ucykgeworICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5oYXNUcmFuc2ll
bnRSZWdpc3RyYXRpb25zKCkpCisgICAgICAgICAgICB0cmFuc2llbnRSZWdpc3RyYXRpb25zLmFw
cGVuZChyZWdpc3RyYXRpb24pOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRy
YW5zaWVudFJlZ2lzdHJhdGlvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zaWVudFJlZ2lz
dHJhdGlvbnNbaV0tPmNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKaW5kZXgg
ODYxMWVmM2RiZTRiYWU1Njg3M2ExMDc4OTUzMDM5NmVlNmU5OTU3Ny4uMDc5OWIyNDEwODJhYzY1
NzVhYjcxMGMxZmNmZmJjZDlmZDgwMTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCkBAIC01Nyw4ICs1Nyw4IEBAIE11
dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cChIYXNoTWFwPE11dGF0aW9uT2JzCiAKIGJvb2wgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewotICAgIGZvciAoSGFzaE1hcDxNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0g
bV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpCisgICAgZm9yIChhdXRvIG9w
dGlvbnMgOiBtX29ic2VydmVycy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaGFzT2xkVmFsdWUo
b3B0aW9ucykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjgsOSArNjgsOSBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3Vw
OjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRhdGlvblJlYwogewogICAgIFJl
ZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBwcnBNdXRhdGlvbjsKICAgICBSZWZQdHI8
TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsKLSAgICBmb3IgKEhhc2hN
YXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6aXRl
cmF0b3IgaXRlciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNlcnZlcnMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlciA9IGl0ZXIt
PmtleTsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnZhbHVlKSkgeworICAgIGZvciAo
YXV0byYgb2JzZXJ2ZXJPcHRpb25zUGFpciA6IG1fb2JzZXJ2ZXJzKSB7CisgICAgICAgIE11dGF0
aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gb2JzZXJ2ZXJPcHRpb25zUGFpci5rZXk7CisgICAgICAg
IGlmIChoYXNPbGRWYWx1ZShvYnNlcnZlck9wdGlvbnNQYWlyLnZhbHVlKSkgewogICAgICAgICAg
ICAgb2JzZXJ2ZXItPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCmluZGV4IDI1MmU0OTE2OTBmNjQ3NzJiY2FhMGRh
YmM3NTBkZGViNzVkMjU0YzEuLjQ0ZThmNzBmY2I2YzQ4NGNiYjAyYTc5ODM3YTMzMjVjMjE3M2Zm
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbi5jcHAKQEAgLTgzLDggKzgzLDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uOjpjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgZm9yIChOb2RlSGFzaFNldDo6aXRlcmF0b3IgaXRlciA9IG1fdHJhbnNpZW50
UmVnaXN0cmF0aW9uTm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2Rlcy0+ZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dW5yZWdpc3RlclRyYW5z
aWVudE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgZm9yIChhdXRvJiBub2RlIDogKm1fdHJh
bnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCisgICAgICAgIG5vZGUtPnVucmVnaXN0ZXJUcmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25O
b2RlcyA9IG51bGxwdHI7CiAKQEAgLTEyMiw4ICsxMjIsOCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb246OmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9TZXQoSGFzaFNldDxOb2RlKj4m
IG5vZAogICAgIG5vZGVzLmFkZChtX3JlZ2lzdHJhdGlvbk5vZGUpOwogICAgIGlmICghbV90cmFu
c2llbnRSZWdpc3RyYXRpb25Ob2RlcykKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZUhh
c2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVz
LT5iZWdpbigpOyBpdGVyICE9IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMtPmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgIG5vZGVzLmFkZChpdGVyLT5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBu
b2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCisgICAgICAgIG5vZGVzLmFkZChu
b2RlLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmlu
ZGV4IGU0NDc1N2M3NjI4ODc1MDdhNTliZjk5ZmRiNDRkZTQ0NjljMWNkNTMuLmMxM2FlZTUzNmE4
NTdlYjlkOTIwYjEzOTg4NmY2ODQ3NzlmMDYwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTEzMCw5
ICsxMzAsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICBzaXplX3QgZWxlbWVu
dHNXaXRoUmFyZURhdGEgPSAwOwogICAgIHNpemVfdCBlbGVtZW50c1dpdGhOYW1lZE5vZGVNYXAg
PSAwOwogCi0gICAgZm9yIChIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBsaXZlTm9kZVNl
dC5iZWdpbigpOyBpdCAhPSBsaXZlTm9kZVNldC5lbmQoKTsgKytpdCkgewotICAgICAgICBOb2Rl
KiBub2RlID0gKml0OwotCisgICAgZm9yIChhdXRvKiBub2RlIDogbGl2ZU5vZGVTZXQpIHsKICAg
ICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgICAgICsrbm9kZXNXaXRo
UmFyZURhdGE7CiAgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CkBAIC0yMzMs
OCArMjMxLDggQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgcHJpbnRmKCIgIE51
bWJlciBvZiBTaGFkb3dSb290IG5vZGVzOiAlenVcbiIsIHNoYWRvd1Jvb3ROb2Rlcyk7CiAKICAg
ICBwcmludGYoIkVsZW1lbnQgdGFnIG5hbWUgZGlzdGlidXRpb246XG4iKTsKLSAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBzaXplX3Q+OjppdGVyYXRvciBpdCA9IHBlclRhZ0NvdW50LmJlZ2luKCk7
IGl0ICE9IHBlclRhZ0NvdW50LmVuZCgpOyArK2l0KQotICAgICAgICBwcmludGYoIiAgTnVtYmVy
IG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7
CisgICAgZm9yIChhdXRvIHN0cmluZ1NpemVQYWlyIDogcGVyVGFnQ291bnQpCisgICAgICAgIHBy
aW50ZigiICBOdW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIsIHN0cmluZ1NpemVQYWlyLmtleS51
dGY4KCkuZGF0YSgpLCBzdHJpbmdTaXplUGFpci52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0dHJp
YnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1Ob2Rl
IGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRlKSk7
CkBAIC0xODk3LDExICsxODk1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0TWF0Y2hp
bmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqCiB7CiAgICAg
aWYgKCFyZWdpc3RyeSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAodHlwZW5hbWUgUmVnaXN0
cnk6Oml0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS0+YmVnaW4oKTsgaXRlciAhPSByZWdpc3RyeS0+
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBjb25zdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uJiByZWdpc3RyYXRpb24gPSAqKml0ZXI7Ci0gICAgICAgIGlmIChyZWdpc3RyYXRpb24uc2hv
dWxkUmVjZWl2ZU11dGF0aW9uRnJvbSh0YXJnZXQsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpKSB7Ci0g
ICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMg
PSByZWdpc3RyYXRpb24uZGVsaXZlcnlPcHRpb25zKCk7Ci0gICAgICAgICAgICBIYXNoTWFwPE11
dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46OkFkZFJlc3Vs
dCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi5vYnNlcnZlcigpLCBkZWxpdmVy
eU9wdGlvbnMpOworCisgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiAqcmVnaXN0cnkpIHsK
KyAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbi0+c2hvdWxkUmVjZWl2ZU11dGF0aW9uRnJvbSh0YXJn
ZXQsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpKSB7CisgICAgICAgICAgICBNdXRhdGlvblJlY29yZERl
bGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0
aW9ucygpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJh
dGlvbi0+b2JzZXJ2ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8
PSBkZWxpdmVyeU9wdGlvbnM7CiAgICAgICAgIH0KQEAgLTE5NzksOSArMTk3Nyw5IEBAIHZvaWQg
Tm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgpCiAgICAgICAgICAg
ICAgICAgcmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCh0aGlz
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24qPiogdHJhbnNpZW50UmVnaXN0cnkgPSBub2RlLT50cmFuc2llbnRNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cnkoKSkgewotICAgICAgICAgICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24qPjo6aXRlcmF0b3IgaXRlciA9IHRyYW5zaWVudFJlZ2lzdHJ5LT5i
ZWdpbigpOyBpdGVyICE9IHRyYW5zaWVudFJlZ2lzdHJ5LT5lbmQoKTsgKytpdGVyKQotICAgICAg
ICAgICAgICAgICgqaXRlciktPm9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKHRoaXMpOwor
ICAgICAgICBpZiAoYXV0byogdHJhbnNpZW50UmVnaXN0cnkgPSBub2RlLT50cmFuc2llbnRNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvKiByZWdpc3Ry
YXRpb24gOiAqdHJhbnNpZW50UmVnaXN0cnkpCisgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9u
LT5vYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCh0aGlzKTsKICAgICAgICAgfQogICAgIH0K
IH0K
</data>
<flag name="review"
          id="280150"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255629</attachid>
            <date>2015-06-26 04:23:30 -0700</date>
            <delta_ts>2015-06-26 06:02:25 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-126250-20150626042243.patch</filename>
            <type>text/plain</type>
            <size>13132</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1OTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc0YzQ3YWEwZjNkY2E1
ZmI2NjFjZTNhODMxYjAzYjUwYzUwZjMyMC4uOTczMDJkYjIwZWQ5ZDcxNjk5Y2FkNjU2ODVlNjky
MjM0OGFmYzZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTA2LTI2ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCBzb21l
IG9mIFdlYkNvcmUvZG9tIG92ZXIgdG8gcmFuZ2UtZm9yIGxvb3BzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYyNTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgcGF0Y2gg
b2YgU2FtIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+LgorCisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OndpbGxSZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAgICogZG9tL011dGF0aW9u
T2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpnZXRPYnNlcnZlZE5v
ZGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIpOgorICAg
ICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3Rl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOjpjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6YWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldCk6Cisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZHVtcFN0YXRp
c3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNO
b2RlV2lsbERldGFjaCk6CisKIDIwMTUtMDYtMjUgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hs
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IGU3NTg1OGU2MTJmYzQwYTMyY2I3ODllZGQ4MGM4
NzQzYmU5Yjk4MDIuLmNjYzkzY2FkZGY0NTI3ZGFiODlkM2RkZjQxNDVkNzg0ZDM1MWU3NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTQ0NSwzMCArNDQ1LDI4IEBAIGJv
b2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQs
IE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
SW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCAqdGhpcyk7CiAKICAgICAvLyBBZGQgdGhlIG5ldyBj
aGlsZChyZW4pCi0gICAgZm9yIChhdXRvIGl0ID0gdGFyZ2V0cy5iZWdpbigpLCBlbmQgPSB0YXJn
ZXRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBpdC0+
Z2V0KCk7Ci0KKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogdGFyZ2V0cykgewogICAgICAgICAvLyBE
dWUgdG8gYXJiaXRyYXJ5IGNvZGUgcnVubmluZyBpbiByZXNwb25zZSB0byBhIERPTSBtdXRhdGlv
biBldmVudCBpdCdzCiAgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgIm5leHQiIGlzIG5vIGxvbmdl
ciBhIGNoaWxkIG9mICJ0aGlzIi4KICAgICAgICAgLy8gSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQg
ImNoaWxkIiBoYXMgYmVlbiBpbnNlcnRlZCBlbHNld2hlcmUuCiAgICAgICAgIC8vIEluIGVpdGhl
ciBvZiB0aG9zZSBjYXNlcywgd2UnbGwganVzdCBzdG9wLgogICAgICAgICBpZiAobmV4dCAmJiBu
ZXh0LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBp
ZiAoY2hpbGQucGFyZW50Tm9kZSgpKQorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQo
JmNoaWxkKTsKKyAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZC5wdHIoKSk7
CiAKICAgICAgICAgLy8gQWRkIGNoaWxkIGJlZm9yZSAibmV4dCIuCiAgICAgICAgIHsKICAgICAg
ICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAg
ICAgICAgICAgICBpZiAobmV4dCkKLSAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24o
Km5leHQsIGNoaWxkKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKm5leHQs
IGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcHBlbmRD
aGlsZFRvQ29udGFpbmVyKCZjaGlsZCwgKnRoaXMpOworICAgICAgICAgICAgICAgIGFwcGVuZENo
aWxkVG9Db250YWluZXIoY2hpbGQucHRyKCksICp0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAg
IHVwZGF0ZVRyZWVBZnRlckluc2VydGlvbihjaGlsZCk7CisgICAgICAgIHVwZGF0ZVRyZWVBZnRl
ckluc2VydGlvbihjaGlsZC5nZXQoKSk7CiAgICAgfQogCiAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9k
aWZpZWRFdmVudCgpOwpAQCAtNDk3LDEzICs0OTUsMTIgQEAgc3RhdGljIHZvaWQgd2lsbFJlbW92
ZUNoaWxkcmVuKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKICAgICBnZXRDaGlsZE5vZGVzKGNv
bnRhaW5lciwgY2hpbGRyZW4pOwogCiAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlv
bihjb250YWluZXIpOwotICAgIGZvciAoYXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGNoaWxkcmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gaXQtPmdldCgp
OwotICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICBjaGls
ZC5ub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxsRGV0YWNoKCk7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgIG11dGF0aW9uLndpbGxSZW1vdmVDaGlsZChj
aGlsZC5nZXQoKSk7CisgICAgICAgIGNoaWxkLT5ub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVX
aWxsRGV0YWNoKCk7CiAKICAgICAgICAgLy8gZmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0
YXRpb24gZXZlbnRzLgotICAgICAgICBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhjaGlsZCk7
CisgICAgICAgIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKGNoaWxkLmdldCgpKTsKICAgICB9
CiAKICAgICBjb250YWluZXIuZG9jdW1lbnQoKS5ub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKGNv
bnRhaW5lcik7CkBAIC03MDQsMjQgKzcwMSwyMiBAQCBib29sIENvbnRhaW5lck5vZGU6OmFwcGVu
ZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAg
ICAgLy8gTm93IGFjdHVhbGx5IGFkZCB0aGUgY2hpbGQocmVuKQogICAgIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUgbXV0YXRpb24oKnRoaXMpOwotICAgIGZvciAoYXV0byBpdCA9IHRhcmdldHMuYmVn
aW4oKSwgZW5kID0gdGFyZ2V0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5v
ZGUmIGNoaWxkID0gaXQtPmdldCgpOwotCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IHRhcmdldHMp
IHsKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCBhZ2FpbiwganVzdCBzdG9w
IHdoYXQgd2UncmUgZG9pbmcsIGJlY2F1c2UKICAgICAgICAgLy8gdGhhdCBtZWFucyBzb21lb25l
IGlzIGRvaW5nIHNvbWV0aGluZyB3aXRoIERPTSBtdXRhdGlvbiAtLSBjYW4ndCByZS1wYXJlbnQK
ICAgICAgICAgLy8gYSBjaGlsZCB0aGF0IGFscmVhZHkgaGFzIGEgcGFyZW50LgotICAgICAgICBp
ZiAoY2hpbGQucGFyZW50Tm9kZSgpKQorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQo
JmNoaWxkKTsKKyAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZC5wdHIoKSk7
CiAKICAgICAgICAgLy8gQXBwZW5kIGNoaWxkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKICAgICAg
ICAgewogICAgICAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnRE
aXNwYXRjaDsKLSAgICAgICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIoJmNoaWxkLCAqdGhp
cyk7CisgICAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNoaWxkLnB0cigpLCAqdGhp
cyk7CiAgICAgICAgIH0KIAotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQp
OworICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQuZ2V0KCkpOwogICAgIH0K
IAogICAgIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA4MjIwZmU4NjMzM2UzM2Q5ZTA0NTdhM2Y4YmNkM2Q2
ZjEyZmU0MmE2Li44NWFhNjA5OTNiNTcwNmY2YjE2YjRlNjJiMGE0ZjUwYjcxNTQyNmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC0xMTgsOCArMTE4LDggQEAg
dm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKICAgICBtX3JlY29yZHMuY2xl
YXIoKTsKICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiByZWdpc3Ry
YXRpb25zKG1fcmVnaXN0cmF0aW9ucyk7Ci0gICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24qPjo6aXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJhdGlvbnMuYmVnaW4oKTsg
aXRlciAhPSByZWdpc3RyYXRpb25zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb246OnVucmVnaXN0ZXJBbmREZWxldGUoKml0ZXIpOworICAgIGZvciAo
YXV0byogcmVnaXN0cmF0aW9uIDogcmVnaXN0cmF0aW9ucykKKyAgICAgICAgTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbjo6dW5yZWdpc3RlckFuZERlbGV0ZShyZWdpc3RyYXRpb24pOwogfQog
CiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmF0aW9uU3RhcnRlZChNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24pCkBAIC0xNjQsOCArMTY0LDggQEAgdm9pZCBN
dXRhdGlvbk9ic2VydmVyOjpzZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24oKQogSGFzaFNldDxO
b2RlKj4gTXV0YXRpb25PYnNlcnZlcjo6Z2V0T2JzZXJ2ZWROb2RlcygpIGNvbnN0CiB7CiAgICAg
SGFzaFNldDxOb2RlKj4gb2JzZXJ2ZWROb2RlczsKLSAgICBmb3IgKEhhc2hTZXQ8TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZWdpc3RyYXRp
b25zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpc3RyYXRpb25zLmVuZCgpOyArK2l0ZXIpCi0gICAg
ICAgICgqaXRlciktPmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9TZXQob2JzZXJ2ZWROb2Rlcyk7Cisg
ICAgZm9yIChhdXRvKiByZWdpc3RyYXRpb24gOiBtX3JlZ2lzdHJhdGlvbnMpCisgICAgICAgIHJl
Z2lzdHJhdGlvbi0+YWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldChvYnNlcnZlZE5vZGVzKTsKICAg
ICByZXR1cm4gb2JzZXJ2ZWROb2RlczsKIH0KIApAQCAtMTgxLDkgKzE4MSw5IEBAIHZvaWQgTXV0
YXRpb25PYnNlcnZlcjo6ZGVsaXZlcigpCiAgICAgLy8gQ2FsbGluZyBjbGVhclRyYW5zaWVudFJl
Z2lzdHJhdGlvbnMoKSBjYW4gbW9kaWZ5IG1fcmVnaXN0cmF0aW9ucywgc28gaXQncyBuZWNlc3Nh
cnkKICAgICAvLyB0byBtYWtlIGEgY29weSBvZiB0aGUgdHJhbnNpZW50IHJlZ2lzdHJhdGlvbnMg
YmVmb3JlIG9wZXJhdGluZyBvbiB0aGVtLgogICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uKiwgMT4gdHJhbnNpZW50UmVnaXN0cmF0aW9uczsKLSAgICBmb3IgKEhhc2hTZXQ8
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+OjppdGVyYXRvciBpdGVyID0gbV9yZWdpc3Ry
YXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpc3RyYXRpb25zLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgaWYgKCgqaXRlciktPmhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkKLSAgICAg
ICAgICAgIHRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuYXBwZW5kKCppdGVyKTsKKyAgICBmb3IgKGF1
dG8qIHJlZ2lzdHJhdGlvbiA6IG1fcmVnaXN0cmF0aW9ucykgeworICAgICAgICBpZiAocmVnaXN0
cmF0aW9uLT5oYXNUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkpCisgICAgICAgICAgICB0cmFuc2ll
bnRSZWdpc3RyYXRpb25zLmFwcGVuZChyZWdpc3RyYXRpb24pOwogICAgIH0KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIHRyYW5zaWVudFJlZ2lzdHJhdGlvbnNbaV0tPmNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9u
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cC5jcHAKaW5kZXggODYxMWVmM2RiZTRiYWU1Njg3M2ExMDc4OTUzMDM5NmVlNmU5OTU3
Ny4uMDc5OWIyNDEwODJhYzY1NzVhYjcxMGMxZmNmZmJjZDlmZDgwMTZlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCkBA
IC01Nyw4ICs1Nyw4IEBAIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpNdXRhdGlvbk9i
c2VydmVySW50ZXJlc3RHcm91cChIYXNoTWFwPE11dGF0aW9uT2JzCiAKIGJvb2wgTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewotICAgIGZvciAo
SGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+
OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVy
cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkp
CisgICAgZm9yIChhdXRvIG9wdGlvbnMgOiBtX29ic2VydmVycy52YWx1ZXMoKSkgeworICAgICAg
ICBpZiAoaGFzT2xkVmFsdWUob3B0aW9ucykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjgsOSArNjgsOSBAQCB2b2lkIE11dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRh
dGlvblJlYwogewogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBwcnBNdXRh
dGlvbjsKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1
ZTsKLSAgICBmb3IgKEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVs
aXZlcnlPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVy
KiBvYnNlcnZlciA9IGl0ZXItPmtleTsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnZh
bHVlKSkgeworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJPcHRpb25zUGFpciA6IG1fb2JzZXJ2ZXJz
KSB7CisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gb2JzZXJ2ZXJPcHRpb25z
UGFpci5rZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShvYnNlcnZlck9wdGlvbnNQYWlyLnZh
bHVlKSkgewogICAgICAgICAgICAgb2JzZXJ2ZXItPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRh
dGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCmluZGV4IDI1MmU0
OTE2OTBmNjQ3NzJiY2FhMGRhYmM3NTBkZGViNzVkMjU0YzEuLjQ0ZThmNzBmY2I2YzQ4NGNiYjAy
YTc5ODM3YTMzMjVjMjE3M2ZmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKQEAgLTgzLDggKzgzLDggQEAgdm9pZCBNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChOb2RlSGFzaFNldDo6aXRlcmF0b3Ig
aXRlciA9IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbV90
cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+ZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVy
KS0+dW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgZm9yIChh
dXRvJiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCisgICAgICAgIG5vZGUt
PnVucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFu
c2llbnRSZWdpc3RyYXRpb25Ob2RlcyA9IG51bGxwdHI7CiAKQEAgLTEyMiw4ICsxMjIsOCBAQCB2
b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9T
ZXQoSGFzaFNldDxOb2RlKj4mIG5vZAogICAgIG5vZGVzLmFkZChtX3JlZ2lzdHJhdGlvbk5vZGUp
OwogICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykKICAgICAgICAgcmV0dXJu
OwotICAgIGZvciAoTm9kZUhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVu
dFJlZ2lzdHJhdGlvbk5vZGVzLT5iZWdpbigpOyBpdGVyICE9IG1fdHJhbnNpZW50UmVnaXN0cmF0
aW9uTm9kZXMtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIG5vZGVzLmFkZChpdGVyLT5nZXQoKSk7
CisgICAgZm9yIChhdXRvJiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCisg
ICAgICAgIG5vZGVzLmFkZChub2RlLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IGU0NDc1N2M3NjI4ODc1MDdhNTliZjk5ZmRiNDRkZTQ0Njlj
MWNkNTMuLjNmMDdiNTYwNWRjNTQ2YzE2ZjllZjNlODg5Y2VjY2Q3ZDJhNTQ3MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTEzMCw5ICsxMzAsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkK
ICAgICBzaXplX3QgZWxlbWVudHNXaXRoUmFyZURhdGEgPSAwOwogICAgIHNpemVfdCBlbGVtZW50
c1dpdGhOYW1lZE5vZGVNYXAgPSAwOwogCi0gICAgZm9yIChIYXNoU2V0PE5vZGUqPjo6aXRlcmF0
b3IgaXQgPSBsaXZlTm9kZVNldC5iZWdpbigpOyBpdCAhPSBsaXZlTm9kZVNldC5lbmQoKTsgKytp
dCkgewotICAgICAgICBOb2RlKiBub2RlID0gKml0OwotCisgICAgZm9yIChhdXRvKiBub2RlIDog
bGl2ZU5vZGVTZXQpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKICAgICAg
ICAgICAgICsrbm9kZXNXaXRoUmFyZURhdGE7CiAgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4o
Km5vZGUpKSB7CkBAIC0yMzMsOCArMjMxLDggQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygp
CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBTaGFkb3dSb290IG5vZGVzOiAlenVcbiIsIHNoYWRv
d1Jvb3ROb2Rlcyk7CiAKICAgICBwcmludGYoIkVsZW1lbnQgdGFnIG5hbWUgZGlzdGlidXRpb246
XG4iKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+OjppdGVyYXRvciBpdCA9IHBl
clRhZ0NvdW50LmJlZ2luKCk7IGl0ICE9IHBlclRhZ0NvdW50LmVuZCgpOyArK2l0KQotICAgICAg
ICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5k
YXRhKCksIGl0LT52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBzdHJpbmdTaXplUGFpciA6IHBlclRh
Z0NvdW50KQorICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4iLCBz
dHJpbmdTaXplUGFpci5rZXkudXRmOCgpLmRhdGEoKSwgc3RyaW5nU2l6ZVBhaXIudmFsdWUpOwog
CiAgICAgcHJpbnRmKCJBdHRyaWJ1dGVzOlxuIik7CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBB
dHRyaWJ1dGVzIChub24tTm9kZSBhbmQgTm9kZSk6ICV6dSBbJXp1XVxuIiwgYXR0cmlidXRlcywg
c2l6ZW9mKEF0dHJpYnV0ZSkpOwpAQCAtMTg5NywxMSArMTg5NSwxMSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgY29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxNdXRhdGlv
bk9ic2VydmVyKgogewogICAgIGlmICghcmVnaXN0cnkpCiAgICAgICAgIHJldHVybjsKLSAgICBm
b3IgKHR5cGVuYW1lIFJlZ2lzdHJ5OjppdGVyYXRvciBpdGVyID0gcmVnaXN0cnktPmJlZ2luKCk7
IGl0ZXIgIT0gcmVnaXN0cnktPmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29uc3QgTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbiYgcmVnaXN0cmF0aW9uID0gKippdGVyOwotICAgICAgICBp
ZiAocmVnaXN0cmF0aW9uLnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20odGFyZ2V0LCB0eXBlLCBh
dHRyaWJ1dGVOYW1lKSkgewotICAgICAgICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlv
bnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLmRlbGl2ZXJ5T3B0aW9ucygpOwotICAg
ICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24u
b2JzZXJ2ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKKworICAgIGZvciAoYXV0byYgcmVnaXN0cmF0
aW9uIDogKnJlZ2lzdHJ5KSB7CisgICAgICAgIGlmIChyZWdpc3RyYXRpb24tPnNob3VsZFJlY2Vp
dmVNdXRhdGlvbkZyb20odGFyZ2V0LCB0eXBlLCBhdHRyaWJ1dGVOYW1lKSkgeworICAgICAgICAg
ICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0
cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gb2Jz
ZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgfD0gZGVsaXZlcnlPcHRpb25zOwogICAgICAgICB9CkBAIC0xOTc5
LDkgKzE5NzcsOSBAQCB2b2lkIE5vZGU6Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzTm9kZVdpbGxE
ZXRhY2goKQogICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LT5hdChpKS0+b2JzZXJ2ZWRTdWJ0cmVl
Tm9kZVdpbGxEZXRhY2godGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSGFzaFNldDxN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudFJlZ2lzdHJ5ID0gbm9kZS0+
dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsKLSAgICAgICAgICAgIGZvciAo
SGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0ZXJhdG9yIGl0ZXIgPSB0
cmFuc2llbnRSZWdpc3RyeS0+YmVnaW4oKTsgaXRlciAhPSB0cmFuc2llbnRSZWdpc3RyeS0+ZW5k
KCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICAoKml0ZXIpLT5vYnNlcnZlZFN1YnRyZWVOb2Rl
V2lsbERldGFjaCh0aGlzKTsKKyAgICAgICAgaWYgKGF1dG8qIHRyYW5zaWVudFJlZ2lzdHJ5ID0g
bm9kZS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogKnRyYW5zaWVudFJlZ2lzdHJ5KQorICAgICAgICAg
ICAgICAgIHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2godGhpcyk7
CiAgICAgICAgIH0KICAgICB9CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>