<?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>60082</bug_id>
          
          <creation_ts>2011-05-03 16:32:30 -0700</creation_ts>
          <short_desc>findNextLineBreak splits InlineIterator into 3 pieces</short_desc>
          <delta_ts>2011-05-03 17:38: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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>57779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>397520</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 16:32:30 -0700</bug_when>
    <thetext>There&apos;s a FIXME in findNextLineBreak that says:

     // FIXME: It is error-prone to split the position object out like this.
     // Teach this code to work with objects instead of this split tuple.

We should fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397534</commentid>
    <comment_count>1</comment_count>
      <attachid>92167</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 16:51:04 -0700</bug_when>
    <thetext>Created attachment 92167
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397544</commentid>
    <comment_count>2</comment_count>
      <attachid>92167</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 16:58:38 -0700</bug_when>
    <thetext>Comment on attachment 92167
cleanup

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

I think this makes the code uglier, but more obviously shows what was wrong with the old code.  Do you plan to have a follow-up to clean up more of this?

&gt; Source/WebCore/rendering/InlineIterator.h:241
&gt; +inline void InlineIterator::fastIncrementInTextNode()

Seems the normal increment() call wants to call this?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1818
&gt; +    while (current.m_obj) {

Do we not have an object() function to call instead?  Seems new code shouldn&apos;t be grabbing m_ members.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1819
&gt; +        RenderObject* next = bidiNext(this, current.m_obj);

I think it&apos;s OK to store o as a local to reduce the code churn here.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1998
&gt; +                lBreak.moveToStartOf(current.m_obj);

Wow. I now have some clue what this line does!  Maybe geting rid of &quot;o&quot; in this change is the right thing to do!

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:2138
&gt; -                        lBreak.moveTo(o, pos, nextBreakable);
&gt; +                        lBreak.moveTo(current.m_obj, current.m_pos, current.m_nextBreakablePosition);

Sigh.  This is nearly the same as lBreak = current, but not quite (due to root).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397549</commentid>
    <comment_count>3</comment_count>
      <attachid>92167</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 17:06:21 -0700</bug_when>
    <thetext>Comment on attachment 92167
cleanup

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

&gt;&gt; Source/WebCore/rendering/InlineIterator.h:241
&gt;&gt; +inline void InlineIterator::fastIncrementInTextNode()
&gt; 
&gt; Seems the normal increment() call wants to call this?

Sure.

&gt;&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1818

&gt; 
&gt; Do we not have an object() function to call instead?  Seems new code shouldn&apos;t be grabbing m_ members.

No :(

&gt;&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1998

&gt; 
&gt; Wow. I now have some clue what this line does!  Maybe geting rid of &quot;o&quot; in this change is the right thing to do!

I believe so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397582</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 17:38:10 -0700</bug_when>
    <thetext>Committed r85695: &lt;http://trac.webkit.org/changeset/85695&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92167</attachid>
            <date>2011-05-03 16:51:04 -0700</date>
            <delta_ts>2011-05-03 17:06:21 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-60082-20110503165103.patch</filename>
            <type>text/plain</type>
            <size>33663</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1Njg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDUtMDMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgZmluZE5leHRMaW5lQnJlYWsgc3BsaXRzIElubGluZUl0ZXJhdG9y
IGludG8gMyBwaWVjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwMDgyCisKKyAgICAgICAgQXZvaWQgc3BsaXR0aW5nIElubGluZUl0ZXJhdG9yIGlu
dG8gMyB2YXJpYWJsZXMgd2l0aCBpbnRlci1kZXBlbmRlbmNpZXMuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpmYXN0SW5jcmVtZW50SW5UZXh0Tm9kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OnByZXZpb3VzSW5TYW1lTm9kZSk6IEFkZGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKToKKwogMjAxMS0wNS0wMyAgTGV2aSBXZWludHJhdWIg
IDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAkocmV2aXNp
b24gODU2NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJPYmpl
Y3QqIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KIAorICAgIHZvaWQgZmFzdEluY3Jl
bWVudEluVGV4dE5vZGUoKTsKICAgICB2b2lkIGluY3JlbWVudChJbmxpbmVCaWRpUmVzb2x2ZXIq
ID0gMCk7CiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0OwogCkBAIC04MCw2ICs4MSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBVQ2hhciBjdXJyZW50KCkgY29uc3Q7CisgICAgVUNoYXIgcHJldmlv
dXNJblNhbWVOb2RlKCkgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBXVEY6OlVuaWNvZGU6OkRp
cmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTIzNiw2ICsyMzgsMTQg
QEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlGaXJzdE5vdAogICAgIHJldHVybiBi
aWRpTmV4dChyb290LCBvLCAwLCBmYWxzZSk7CiB9CiAKK2lubGluZSB2b2lkIElubGluZUl0ZXJh
dG9yOjpmYXN0SW5jcmVtZW50SW5UZXh0Tm9kZSgpCit7CisgICAgQVNTRVJUKG1fb2JqKTsKKyAg
ICBBU1NFUlQobV9vYmotPmlzVGV4dCgpKTsKKyAgICBBU1NFUlQobV9wb3MgPD0gdG9SZW5kZXJU
ZXh0KG1fb2JqKS0+dGV4dExlbmd0aCgpKTsKKyAgICBtX3BvcysrOworfQorCiBpbmxpbmUgdm9p
ZCBJbmxpbmVJdGVyYXRvcjo6aW5jcmVtZW50KElubGluZUJpZGlSZXNvbHZlciogcmVzb2x2ZXIp
CiB7CiAgICAgaWYgKCFtX29iaikKQEAgLTI2Niw2ICsyNzYsMTUgQEAgaW5saW5lIFVDaGFyIElu
bGluZUl0ZXJhdG9yOjpjdXJyZW50KCkgYwogICAgIHJldHVybiB0ZXh0LT5jaGFyYWN0ZXJzKClb
bV9wb3NdOwogfQogCitpbmxpbmUgVUNoYXIgSW5saW5lSXRlcmF0b3I6OnByZXZpb3VzSW5TYW1l
Tm9kZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX29iaiB8fCAhbV9vYmotPmlzVGV4dCgpIHx8ICFt
X3BvcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5k
ZXJUZXh0KG1fb2JqKTsKKyAgICByZXR1cm4gdGV4dC0+Y2hhcmFjdGVycygpW21fcG9zIC0gMV07
Cit9CisKIEFMV0FZU19JTkxJTkUgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gSW5saW5lSXRlcmF0
b3I6OmRpcmVjdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKFVDaGFyIGMgPSBjdXJyZW50KCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAkocmV2aXNpb24gODU2NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5NiwxMCArMTc5Niw4
IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKIAogICAgIC8vIEZJ
WE1FOiBJdCBpcyBlcnJvci1wcm9uZSB0byBzcGxpdCB0aGUgcG9zaXRpb24gb2JqZWN0IG91dCBs
aWtlIHRoaXMuCiAgICAgLy8gVGVhY2ggdGhpcyBjb2RlIHRvIHdvcmsgd2l0aCBvYmplY3RzIGlu
c3RlYWQgb2YgdGhpcyBzcGxpdCB0dXBsZS4KLSAgICBSZW5kZXJPYmplY3QqIG8gPSByZXNvbHZl
ci5wb3NpdGlvbigpLm1fb2JqOwotICAgIFJlbmRlck9iamVjdCogbGFzdCA9IG87Ci0gICAgdW5z
aWduZWQgcG9zID0gcmVzb2x2ZXIucG9zaXRpb24oKS5tX3BvczsKLSAgICBpbnQgbmV4dEJyZWFr
YWJsZSA9IHJlc29sdmVyLnBvc2l0aW9uKCkubV9uZXh0QnJlYWthYmxlUG9zaXRpb247CisgICAg
SW5saW5lSXRlcmF0b3IgY3VycmVudCA9IHJlc29sdmVyLnBvc2l0aW9uKCk7CisgICAgUmVuZGVy
T2JqZWN0KiBsYXN0ID0gY3VycmVudC5tX29iajsKICAgICBib29sIGF0U3RhcnQgPSB0cnVlOwog
CiAgICAgYm9vbCBzdGFydGluZ05ld1BhcmFncmFwaCA9IGxpbmVJbmZvLnByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSgpOwpAQCAtMTgxNywyNiArMTgxNSwyNiBAQCBJbmxpbmVJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lCiAKICAgICBFV2hpdGVTcGFjZSBjdXJyV1MgPSBzdHlsZSgp
LT53aGl0ZVNwYWNlKCk7CiAgICAgRVdoaXRlU3BhY2UgbGFzdFdTID0gY3VycldTOwotICAgIHdo
aWxlIChvKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbmV4dCA9IGJpZGlOZXh0KHRoaXMsIG8p
OworICAgIHdoaWxlIChjdXJyZW50Lm1fb2JqKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogbmV4
dCA9IGJpZGlOZXh0KHRoaXMsIGN1cnJlbnQubV9vYmopOwogCi0gICAgICAgIGN1cnJXUyA9IG8t
PmlzUmVwbGFjZWQoKSA/IG8tPnBhcmVudCgpLT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgOiBvLT5z
dHlsZSgpLT53aGl0ZVNwYWNlKCk7CisgICAgICAgIGN1cnJXUyA9IGN1cnJlbnQubV9vYmotPmlz
UmVwbGFjZWQoKSA/IGN1cnJlbnQubV9vYmotPnBhcmVudCgpLT5zdHlsZSgpLT53aGl0ZVNwYWNl
KCkgOiBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT53aGl0ZVNwYWNlKCk7CiAgICAgICAgIGxhc3RX
UyA9IGxhc3QtPmlzUmVwbGFjZWQoKSA/IGxhc3QtPnBhcmVudCgpLT5zdHlsZSgpLT53aGl0ZVNw
YWNlKCkgOiBsYXN0LT5zdHlsZSgpLT53aGl0ZVNwYWNlKCk7CiAgICAgICAgIAogICAgICAgICBi
b29sIGF1dG9XcmFwID0gUmVuZGVyU3R5bGU6OmF1dG9XcmFwKGN1cnJXUyk7CiAgICAgICAgIGF1
dG9XcmFwV2FzRXZlclRydWVPbkxpbmUgPSBhdXRvV3JhcFdhc0V2ZXJUcnVlT25MaW5lIHx8IGF1
dG9XcmFwOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUg
PSBvLT5pc1NWR0lubGluZVRleHQoKSA/IGZhbHNlIDogUmVuZGVyU3R5bGU6OnByZXNlcnZlTmV3
bGluZShjdXJyV1MpOworICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZSA9IGN1cnJlbnQubV9v
YmotPmlzU1ZHSW5saW5lVGV4dCgpID8gZmFsc2UgOiBSZW5kZXJTdHlsZTo6cHJlc2VydmVOZXds
aW5lKGN1cnJXUyk7CiAjZWxzZQogICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZSA9IFJlbmRl
clN0eWxlOjpwcmVzZXJ2ZU5ld2xpbmUoY3VycldTKTsKICNlbmRpZgogCiAgICAgICAgIGJvb2wg
Y29sbGFwc2VXaGl0ZVNwYWNlID0gUmVuZGVyU3R5bGU6OmNvbGxhcHNlV2hpdGVTcGFjZShjdXJy
V1MpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChvLT5pc0JSKCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQubV9vYmotPmlzQlIoKSkgewogICAgICAgICAgICAgaWYgKHdpZHRoLmZpdHNPbkxp
bmUoKSkgewotICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG9TdGFydE9mKG8pOworICAgICAg
ICAgICAgICAgIGxCcmVhay5tb3ZlVG9TdGFydE9mKGN1cnJlbnQubV9vYmopOwogICAgICAgICAg
ICAgICAgIGxCcmVhay5pbmNyZW1lbnQoKTsKIAogICAgICAgICAgICAgICAgIC8vIEEgPGJyPiBh
bHdheXMgYnJlYWtzIGEgbGluZSwgc28gZG9uJ3QgbGV0IHRoZSBsaW5lIGJlIGNvbGxhcHNlZApA
QCAtMTg1MCwzMSArMTg0OCwzMSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5l
eHRMaW5lCiAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KHRydWUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lSW5mby5pc0VtcHR5KCkgJiYg
Y2xlYXIpCi0gICAgICAgICAgICAgICAgICAgICpjbGVhciA9IG8tPnN0eWxlKCktPmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgICAgICpjbGVhciA9IGN1cnJlbnQubV9vYmotPnN0eWxlKCktPmNs
ZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChvLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQubV9vYmotPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAg
Ly8gYWRkIHRvIHNwZWNpYWwgb2JqZWN0cy4uLgotICAgICAgICAgICAgaWYgKG8tPmlzRmxvYXRp
bmcoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRCb3ggPSB0b1JlbmRlckJv
eChvKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fb2JqLT5pc0Zsb2F0aW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3goY3VycmVudC5t
X29iaik7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpbnNlcnRGbG9hdGlu
Z09iamVjdChmbG9hdEJveCk7CiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQgZml0cyBp
biB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAgICAgICAgIC8vIElmIGl0IGRvZXMsIHBvc2l0
aW9uIGl0IG5vdywgb3RoZXJ3aXNlLCBwb3NpdGlvbgogICAgICAgICAgICAgICAgIC8vIGl0IGFm
dGVyIG1vdmluZyB0byBuZXh0IGxpbmUgKGluIG5ld0xpbmUoKSBmdW5jKQogICAgICAgICAgICAg
ICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgd2lkdGguZml0c09uTGluZShsb2dpY2FsV2lkdGhG
b3JGbG9hdChmKSkpIHsKICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdE9uTGlu
ZShmLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCB3aWR0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChsQnJlYWsubV9vYmogPT0gbykgeworICAgICAgICAgICAgICAgICAgICBpZiAobEJy
ZWFrLm1fb2JqID09IGN1cnJlbnQubV9vYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghbEJyZWFrLm1fcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5pbmNy
ZW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICBmbG9hdHNGaXRPbkxpbmUgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoby0+aXNQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y3VycmVudC5tX29iai0+aXNQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBv
dXIgb3JpZ2luYWwgZGlzcGxheSB3YXNuJ3QgYW4gaW5saW5lIHR5cGUsIHRoZW4gd2UgY2FuCiAg
ICAgICAgICAgICAgICAgLy8gZ28gYWhlYWQgYW5kIGRldGVybWluZSBvdXIgc3RhdGljIGlubGlu
ZSBwb3NpdGlvbiBub3cuCi0gICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRl
ckJveChvKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KGN1
cnJlbnQubV9vYmopOwogICAgICAgICAgICAgICAgIGJvb2wgaXNJbmxpbmVUeXBlID0gYm94LT5z
dHlsZSgpLT5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWlzSW5saW5lVHlwZSkKICAgICAgICAgICAgICAgICAgICAgYm94LT5sYXllcigpLT5zZXRT
dGF0aWNJbmxpbmVQb3NpdGlvbihib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSk7CkBAIC0xODg2LDkg
KzE4ODQsOSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaWdub3Jpbmcgc3BhY2Vz
LCB3ZSBoYXZlIHRvIHN0b3AgYW5kIGluY2x1ZGUgdGhpcyBvYmplY3QgYW5kCiAgICAgICAgICAg
ICAgICAgLy8gdGhlbiBzdGFydCBpZ25vcmluZyBzcGFjZXMgYWdhaW4uCi0gICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lVHlwZSB8fCBvLT5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkg
eworICAgICAgICAgICAgICAgIGlmIChpc0lubGluZVR5cGUgfHwgY3VycmVudC5tX29iai0+Y29u
dGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGln
bm9yaW5nU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVTdGFydC5tX29i
aiA9IG87CisgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVTdGFydC5tX29iaiA9IGN1cnJl
bnQubV9vYmo7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVTdGFydC5tX3BvcyA9IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwg
aWdub3JlU3RhcnQpOyAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBpZ25vcmVTdGFydCk7IC8vIFN0
YXJ0IGlnbm9yaW5nIGFnYWluLgpAQCAtMTg5NywxMSArMTg5NSwxMSBAQCBJbmxpbmVJdGVyYXRv
ciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHBvc2l0aW9uZWRCb3hlcy5hcHBlbmQoYm94KTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChvLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAoY3VycmVudC5tX29iai0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAg
Ly8gUmlnaHQgbm93LCB3ZSBzaG91bGQgb25seSBlbmNvdW50ZXIgZW1wdHkgaW5saW5lcyBoZXJl
LgotICAgICAgICAgICAgQVNTRVJUKCFvLT5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFjdXJyZW50Lm1fb2JqLT5maXJzdENoaWxkKCkpOwogICAgIAotICAgICAgICAgICAgUmVu
ZGVySW5saW5lKiBmbG93Qm94ID0gdG9SZW5kZXJJbmxpbmUobyk7CisgICAgICAgICAgICBSZW5k
ZXJJbmxpbmUqIGZsb3dCb3ggPSB0b1JlbmRlcklubGluZShjdXJyZW50Lm1fb2JqKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gTm93IHRoYXQgc29tZSBpbmxpbmUgZmxvd3MgaGF2ZSBs
aW5lIGJveGVzLCBpZiB3ZSBhcmUgYWxyZWFkeSBpZ25vcmluZyBzcGFjZXMsIHdlIG5lZWQgCiAg
ICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBzdG9wIHRvIGluY2x1ZGUgdGhpcyBv
YmplY3QgYW5kIHRoZW4gc3RhcnQgaWdub3Jpbmcgc3BhY2VzIGFnYWluLiAKQEAgLTE5MTEsMTAg
KzE5MDksMTAgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAg
ICAgICAgICAgICAgIGxpbmVJbmZvLnNldEVtcHR5KGZhbHNlKTsKICAgICAgICAgICAgICAgICBp
ZiAoaWdub3JpbmdTcGFjZXMpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3Rz
LmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0
YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7IC8vIFN0b3AgaWdub3Jpbmcgc3BhY2VzLgot
ICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5l
SXRlcmF0b3IoMCwgbywgMCkpOyAvLyBTdGFydCBpZ25vcmluZyBhZ2Fpbi4KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHJlc29sdmVy
LnBvc2l0aW9uKCkubV9vYmogPT0gbwotICAgICAgICAgICAgICAgICAgICAmJiBzaG91bGRTa2lw
V2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QodGhpcywgbywgbGluZU1pZHBvaW50U3RhdGUpKSB7
CisgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxp
bmVJdGVyYXRvcigwLCBjdXJyZW50Lm1fb2JqLCAwKSk7IC8vIFN0b3AgaWdub3Jpbmcgc3BhY2Vz
LgorICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5s
aW5lSXRlcmF0b3IoMCwgY3VycmVudC5tX29iaiwgMCkpOyAvLyBTdGFydCBpZ25vcmluZyBhZ2Fp
bi4KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFj
ZSgpICYmIHJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmogPT0gY3VycmVudC5tX29iagorICAgICAg
ICAgICAgICAgICAgICAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QodGhp
cywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIExpa2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0
byBtYWtlIHN1cmUgdGhhdCBhbnkgCiAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwg
c3BhY2VzIHdlIHNlZSB3aWxsIGJlIGRpc2NhcmRlZC4KICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudENoYXJhY3RlcklzU3BhY2UgPSB0cnVlOwpAQCAtMTkyNCwxNyArMTkyMiwxNyBAQCBJbmxp
bmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIHdpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoYm9yZGVyUGFkZGluZ01hcmdpblN0
YXJ0KGZsb3dCb3gpICsgYm9yZGVyUGFkZGluZ01hcmdpbkVuZChmbG93Qm94KSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoby0+aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIHJl
cGxhY2VkQm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5t
X29iai0+aXNSZXBsYWNlZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHJlcGxhY2VkQm94
ID0gdG9SZW5kZXJCb3goY3VycmVudC5tX29iaik7CiAKICAgICAgICAgICAgIC8vIEJyZWFrIG9u
IHJlcGxhY2VkIGVsZW1lbnRzIGlmIGVpdGhlciBoYXMgbm9ybWFsIHdoaXRlLXNwYWNlLgotICAg
ICAgICAgICAgaWYgKChhdXRvV3JhcCB8fCBSZW5kZXJTdHlsZTo6YXV0b1dyYXAobGFzdFdTKSkg
JiYgKCFvLT5pc0ltYWdlKCkgfHwgYWxsb3dJbWFnZXNUb0JyZWFrKSkgeworICAgICAgICAgICAg
aWYgKChhdXRvV3JhcCB8fCBSZW5kZXJTdHlsZTo6YXV0b1dyYXAobGFzdFdTKSkgJiYgKCFjdXJy
ZW50Lm1fb2JqLT5pc0ltYWdlKCkgfHwgYWxsb3dJbWFnZXNUb0JyZWFrKSkgewogICAgICAgICAg
ICAgICAgIHdpZHRoLmNvbW1pdCgpOwotICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG9TdGFy
dE9mKG8pOworICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG9TdGFydE9mKGN1cnJlbnQubV9v
YmopOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpCi0g
ICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJh
dG9yKDAsIG8sIDApKTsKKyAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRT
dGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgY3VycmVudC5tX29iaiwgMCkpOwogCiAgICAgICAgICAg
ICBsaW5lSW5mby5zZXRFbXB0eShmYWxzZSk7CiAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9
IGZhbHNlOwpAQCAtMTk0NCw3MSArMTk0Miw2NyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9j
azo6ZmluZE5leHRMaW5lCiAKICAgICAgICAgICAgIC8vIE9wdGltaXplIGZvciBhIGNvbW1vbiBj
YXNlLiBJZiB3ZSBjYW4ndCBmaW5kIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIGxpc3QKICAgICAgICAg
ICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBhbGwgbW9vdC4KLSAgICAgICAgICAgIGludCByZXBs
YWNlZExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1h
cmdpblN0YXJ0Rm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgbWFyZ2luRW5kRm9yQ2hpbGQocmVwbGFj
ZWRCb3gpICsgaW5saW5lTG9naWNhbFdpZHRoKG8pOwotICAgICAgICAgICAgaWYgKG8tPmlzTGlz
dE1hcmtlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVT
cGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdCh0aGlzLCBvLCBs
aW5lTWlkcG9pbnRTdGF0ZSkpIHsKKyAgICAgICAgICAgIGludCByZXBsYWNlZExvZ2ljYWxXaWR0
aCA9IGxvZ2ljYWxXaWR0aEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1hcmdpblN0YXJ0Rm9yQ2hp
bGQocmVwbGFjZWRCb3gpICsgbWFyZ2luRW5kRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgaW5saW5l
TG9naWNhbFdpZHRoKGN1cnJlbnQubV9vYmopOworICAgICAgICAgICAgaWYgKGN1cnJlbnQubV9v
YmotPmlzTGlzdE1hcmtlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmNvbGxh
cHNlV2hpdGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdCh0
aGlzLCBjdXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gTGlrZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2Vz
IHRvIG1ha2Ugc3VyZSB0aGF0IGFueSAKICAgICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb25h
bCBzcGFjZXMgd2Ugc2VlIHdpbGwgYmUgZGlzY2FyZGVkLgogICAgICAgICAgICAgICAgICAgICBj
dXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDaGFyYWN0ZXJJc1dTID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWdub3JpbmdTcGFj
ZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodG9SZW5k
ZXJMaXN0TWFya2VyKG8pLT5pc0luc2lkZSgpKQorICAgICAgICAgICAgICAgIGlmICh0b1JlbmRl
ckxpc3RNYXJrZXIoY3VycmVudC5tX29iaiktPmlzSW5zaWRlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgocmVwbGFjZWRMb2dpY2FsV2lkdGgpOwogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgd2lkdGguYWRkVW5jb21taXR0ZWRXaWR0
aChyZXBsYWNlZExvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICBpZiAoby0+aXNSdWJ5UnVuKCkp
Ci0gICAgICAgICAgICAgICAgd2lkdGguYXBwbHlPdmVyaGFuZyh0b1JlbmRlclJ1YnlSdW4obyks
IGxhc3QsIG5leHQpOwotICAgICAgICB9IGVsc2UgaWYgKG8tPmlzVGV4dCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIXBvcykKKyAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fb2JqLT5pc1J1YnlSdW4o
KSkKKyAgICAgICAgICAgICAgICB3aWR0aC5hcHBseU92ZXJoYW5nKHRvUmVuZGVyUnVieVJ1bihj
dXJyZW50Lm1fb2JqKSwgbGFzdCwgbmV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5t
X29iai0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudC5tX3BvcykKICAgICAg
ICAgICAgICAgICBhcHBsaWVkU3RhcnRXaWR0aCA9IGZhbHNlOwogCi0gICAgICAgICAgICBSZW5k
ZXJUZXh0KiB0ID0gdG9SZW5kZXJUZXh0KG8pOworICAgICAgICAgICAgUmVuZGVyVGV4dCogdCA9
IHRvUmVuZGVyVGV4dChjdXJyZW50Lm1fb2JqKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgICAg
ICAgICBib29sIGlzU1ZHVGV4dCA9IHQtPmlzU1ZHSW5saW5lVGV4dCgpOwogI2VuZGlmCiAKICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHQtPnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RM
aW5lKCkpOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5oYXNUZXh0Q29tYmluZSgpICYmIG8tPmlz
Q29tYmluZVRleHQoKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckNvbWJpbmVUZXh0KG8pLT5j
b21iaW5lVGV4dCgpOwotCi0gICAgICAgICAgICBpbnQgc3RybGVuID0gdC0+dGV4dExlbmd0aCgp
OwotICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbiAtIHBvczsKLSAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBzdHIgPSB0LT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmhh
c1RleHRDb21iaW5lKCkgJiYgY3VycmVudC5tX29iai0+aXNDb21iaW5lVGV4dCgpKQorICAgICAg
ICAgICAgICAgIHRvUmVuZGVyQ29tYmluZVRleHQoY3VycmVudC5tX29iaiktPmNvbWJpbmVUZXh0
KCk7CiAKICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZS0+Zm9udCgpOwogICAgICAg
ICAgICAgYm9vbCBpc0ZpeGVkUGl0Y2ggPSBmLmlzRml4ZWRQaXRjaCgpOwogICAgICAgICAgICAg
Ym9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS0+aHlwaGVucygpID09IEh5cGhlbnNBdXRvICYmIFdl
YkNvcmU6OmNhbkh5cGhlbmF0ZShzdHlsZS0+bG9jYWxlKCkpOwogCi0gICAgICAgICAgICBpbnQg
bGFzdFNwYWNlID0gcG9zOwotICAgICAgICAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBvLT5zdHls
ZSgpLT53b3JkU3BhY2luZygpOworICAgICAgICAgICAgaW50IGxhc3RTcGFjZSA9IGN1cnJlbnQu
bV9wb3M7CisgICAgICAgICAgICBmbG9hdCB3b3JkU3BhY2luZyA9IGN1cnJlbnQubV9vYmotPnN0
eWxlKCktPndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICBmbG9hdCBsYXN0U3BhY2VXb3JkU3Bh
Y2luZyA9IDA7CiAKICAgICAgICAgICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlz
IGVuYWJsZWQsIGluIHdoaWNoIGNhc2Ugd2UgbWVhc3VyZSB3b3JkcyB3aXRoIHRoZWlyIHRyYWls
aW5nCiAgICAgICAgICAgICAvLyBzcGFjZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lkdGguCiAgICAg
ICAgICAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiBLZXJuaW5nID8gZi53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpICsgd29yZFNwYWNp
bmcgOiAwOwogCi0gICAgICAgICAgICBmbG9hdCB3cmFwVyA9IHdpZHRoLnVuY29tbWl0dGVkV2lk
dGgoKSArIGlubGluZUxvZ2ljYWxXaWR0aChvLCAhYXBwbGllZFN0YXJ0V2lkdGgsIHRydWUpOwor
ICAgICAgICAgICAgZmxvYXQgd3JhcFcgPSB3aWR0aC51bmNvbW1pdHRlZFdpZHRoKCkgKyBpbmxp
bmVMb2dpY2FsV2lkdGgoY3VycmVudC5tX29iaiwgIWFwcGxpZWRTdGFydFdpZHRoLCB0cnVlKTsK
ICAgICAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IDA7Ci0gICAgICAgICAgICBib29sIGJyZWFr
TkJTUCA9IGF1dG9XcmFwICYmIG8tPnN0eWxlKCktPm5ic3BNb2RlKCkgPT0gU1BBQ0U7CisgICAg
ICAgICAgICBib29sIGJyZWFrTkJTUCA9IGF1dG9XcmFwICYmIGN1cnJlbnQubV9vYmotPnN0eWxl
KCktPm5ic3BNb2RlKCkgPT0gU1BBQ0U7CiAgICAgICAgICAgICAvLyBBdXRvLXdyYXBwaW5nIHRl
eHQgc2hvdWxkIHdyYXAgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgb25seSBpZiBpdCBjb3VsZCBu
b3Qgd3JhcCBiZWZvcmUgdGhlIHdvcmQsCiAgICAgICAgICAgICAvLyB3aGljaCBpcyBvbmx5IHBv
c3NpYmxlIGlmIHRoZSB3b3JkIGlzIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZSwgdGhhdCBp
cywgaWYgfHd8IGlzIHplcm8uCi0gICAgICAgICAgICBib29sIGJyZWFrV29yZHMgPSBvLT5zdHls
ZSgpLT5icmVha1dvcmRzKCkgJiYgKChhdXRvV3JhcCAmJiAhd2lkdGguY29tbWl0dGVkV2lkdGgo
KSkgfHwgY3VycldTID09IFBSRSk7CisgICAgICAgICAgICBib29sIGJyZWFrV29yZHMgPSBjdXJy
ZW50Lm1fb2JqLT5zdHlsZSgpLT5icmVha1dvcmRzKCkgJiYgKChhdXRvV3JhcCAmJiAhd2lkdGgu
Y29tbWl0dGVkV2lkdGgoKSkgfHwgY3VycldTID09IFBSRSk7CiAgICAgICAgICAgICBib29sIG1p
ZFdvcmRCcmVhayA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBicmVha0FsbCA9IG8tPnN0eWxl
KCktPndvcmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrICYmIGF1dG9XcmFwOworICAgICAg
ICAgICAgYm9vbCBicmVha0FsbCA9IGN1cnJlbnQubV9vYmotPnN0eWxlKCktPndvcmRCcmVhaygp
ID09IEJyZWFrQWxsV29yZEJyZWFrICYmIGF1dG9XcmFwOwogICAgICAgICAgICAgZmxvYXQgaHlw
aGVuV2lkdGggPSAwOwogCiAgICAgICAgICAgICBpZiAodC0+aXNXb3JkQnJlYWsoKSkgewogICAg
ICAgICAgICAgICAgIHdpZHRoLmNvbW1pdCgpOwotICAgICAgICAgICAgICAgIGxCcmVhay5tb3Zl
VG9TdGFydE9mKG8pOwotICAgICAgICAgICAgICAgIEFTU0VSVCghbGVuKTsKKyAgICAgICAgICAg
ICAgICBsQnJlYWsubW92ZVRvU3RhcnRPZihjdXJyZW50Lm1fb2JqKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoY3VycmVudC5tX3BvcyA9PSB0LT50ZXh0TGVuZ3RoKCkpOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICB3aGlsZSAobGVuKSB7CisgICAgICAgICAgICBmb3IgKDsgY3VycmVu
dC5tX3BvcyA8IHQtPnRleHRMZW5ndGgoKTsgY3VycmVudC5mYXN0SW5jcmVtZW50SW5UZXh0Tm9k
ZSgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UgPSBj
dXJyZW50Q2hhcmFjdGVySXNTcGFjZTsKICAgICAgICAgICAgICAgICBib29sIHByZXZpb3VzQ2hh
cmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1dTOwotICAgICAgICAgICAgICAgIFVDaGFy
IGMgPSBzdHJbcG9zXTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0gY3VycmVudC5jdXJyZW50
KCk7CiAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcklzU3BhY2UgPSBjID09ICcgJyB8
fCBjID09ICdcdCcgfHwgKCFwcmVzZXJ2ZU5ld2xpbmUgJiYgKGMgPT0gJ1xuJykpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFjb2xsYXBzZVdoaXRlU3BhY2UgfHwgIWN1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlKQpAQCAtMjAyNiwxNiArMjAyMCwxNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9j
azo6ZmluZE5leHRMaW5lCiAKICAgICAgICAgICAgICAgICBpZiAoKGJyZWFrQWxsIHx8IGJyZWFr
V29yZHMpICYmICFtaWRXb3JkQnJlYWspIHsKICAgICAgICAgICAgICAgICAgICAgd3JhcFcgKz0g
Y2hhcldpZHRoOwotICAgICAgICAgICAgICAgICAgICBjaGFyV2lkdGggPSB0ZXh0V2lkdGgodCwg
cG9zLCAxLCBmLCB3aWR0aC5jb21taXR0ZWRXaWR0aCgpICsgd3JhcFcsIGlzRml4ZWRQaXRjaCwg
Y29sbGFwc2VXaGl0ZVNwYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhcldpZHRoID0gdGV4
dFdpZHRoKHQsIGN1cnJlbnQubV9wb3MsIDEsIGYsIHdpZHRoLmNvbW1pdHRlZFdpZHRoKCkgKyB3
cmFwVywgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UpOwogICAgICAgICAgICAgICAg
ICAgICBtaWRXb3JkQnJlYWsgPSB3aWR0aC5jb21taXR0ZWRXaWR0aCgpICsgd3JhcFcgKyBjaGFy
V2lkdGggPiB3aWR0aC5hdmFpbGFibGVXaWR0aCgpOwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGlmIChsaW5lQnJlYWtJdGVyYXRvckluZm8uZmlyc3QgIT0gdCkgewogICAg
ICAgICAgICAgICAgICAgICBsaW5lQnJlYWtJdGVyYXRvckluZm8uZmlyc3QgPSB0OwotICAgICAg
ICAgICAgICAgICAgICBsaW5lQnJlYWtJdGVyYXRvckluZm8uc2Vjb25kLnJlc2V0KHN0ciwgc3Ry
bGVuKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZUJyZWFrSXRlcmF0b3JJbmZvLnNlY29uZC5y
ZXNldCh0LT5jaGFyYWN0ZXJzKCksIHQtPnRleHRMZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYm9vbCBiZXR3ZWVuV29yZHMgPSBjID09ICdcbicgfHwgKGN1
cnJXUyAhPSBQUkUgJiYgIWF0U3RhcnQgJiYgaXNCcmVha2FibGUobGluZUJyZWFrSXRlcmF0b3JJ
bmZvLnNlY29uZCwgcG9zLCBuZXh0QnJlYWthYmxlLCBicmVha05CU1ApICYmIChzdHlsZS0+aHlw
aGVucygpICE9IEh5cGhlbnNOb25lIHx8IChwb3MgJiYgc3RyW3BvcyAtIDFdICE9IHNvZnRIeXBo
ZW4pKSk7CisgICAgICAgICAgICAgICAgYm9vbCBiZXR3ZWVuV29yZHMgPSBjID09ICdcbicgfHwg
KGN1cnJXUyAhPSBQUkUgJiYgIWF0U3RhcnQgJiYgaXNCcmVha2FibGUobGluZUJyZWFrSXRlcmF0
b3JJbmZvLnNlY29uZCwgY3VycmVudC5tX3BvcywgY3VycmVudC5tX25leHRCcmVha2FibGVQb3Np
dGlvbiwgYnJlYWtOQlNQKQorICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmh5cGhlbnMo
KSAhPSBIeXBoZW5zTm9uZSB8fCAoY3VycmVudC5wcmV2aW91c0luU2FtZU5vZGUoKSAhPSBzb2Z0
SHlwaGVuKSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGJldHdlZW5Xb3JkcyB8fCBtaWRXb3Jk
QnJlYWspIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdG9wcGVkSWdub3JpbmdTcGFjZXMg
PSBmYWxzZTsKQEAgLTIwNDUsMjUgKzIwNDAsMjMgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxv
Y2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBwb2lu
dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4sICJGb28g
ICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGlu
ZUl0ZXJhdG9yKDAsIG8sIHBvcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RT
cGFjZSA9IGN1cnJlbnQubV9wb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGlu
IGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIGN1cnJlbnQu
bV9vYmosIGN1cnJlbnQubV9wb3MpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9w
cGVkSWdub3JpbmdTcGFjZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IGtlZXAgaWdub3JpbmcgdGhl
c2Ugc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbi0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWRkaXRpb25hbFRtcFc7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh3b3JkVHJhaWxpbmdTcGFjZVdpZHRoICYmIGN1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFRtcFcgPSB0ZXh0V2lk
dGgodCwgbGFzdFNwYWNlLCBwb3MgKyAxIC0gbGFzdFNwYWNlLCBmLCB3aWR0aC5jdXJyZW50V2lk
dGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UpIC0gd29yZFRyYWlsaW5nU3Bh
Y2VXaWR0aCArIGxhc3RTcGFjZVdvcmRTcGFjaW5nOworICAgICAgICAgICAgICAgICAgICAgICAg
YWRkaXRpb25hbFRtcFcgPSB0ZXh0V2lkdGgodCwgbGFzdFNwYWNlLCBjdXJyZW50Lm1fcG9zICsg
MSAtIGxhc3RTcGFjZSwgZiwgd2lkdGguY3VycmVudFdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29s
bGFwc2VXaGl0ZVNwYWNlKSAtIHdvcmRUcmFpbGluZ1NwYWNlV2lkdGggKyBsYXN0U3BhY2VXb3Jk
U3BhY2luZzsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkaXRpb25hbFRtcFcgPSB0ZXh0V2lkdGgodCwgbGFzdFNwYWNlLCBwb3MgLSBsYXN0U3Bh
Y2UsIGYsIHdpZHRoLmN1cnJlbnRXaWR0aCgpLCBpc0ZpeGVkUGl0Y2gsIGNvbGxhcHNlV2hpdGVT
cGFjZSkgKyBsYXN0U3BhY2VXb3JkU3BhY2luZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZGl0aW9uYWxUbXBXID0gdGV4dFdpZHRoKHQsIGxhc3RTcGFjZSwgY3VycmVudC5tX3BvcyAtIGxh
c3RTcGFjZSwgZiwgd2lkdGguY3VycmVudFdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VX
aGl0ZVNwYWNlKSArIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwogICAgICAgICAgICAgICAgICAgICB3
aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGFkZGl0aW9uYWxUbXBXKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhcHBsaWVkU3RhcnRXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGguYWRkVW5jb21taXR0ZWRXaWR0aChpbmxpbmVMb2dpY2FsV2lkdGgobywgdHJ1ZSwgZmFs
c2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgo
aW5saW5lTG9naWNhbFdpZHRoKGN1cnJlbnQubV9vYmosIHRydWUsIGZhbHNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBsaWVkU3RhcnRXaWR0aCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMDc2LDggKzIwNjksOCBAQCBJbmxp
bmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBicmVhayBvbmx5IGFmdGVyIHdoaXRlLXNwYWNlLCBjb25zaWRlciB0aGUg
Y3VycmVudCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIGNhbmRpZGF0
ZSB3aWR0aCBmb3IgdGhpcyBsaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsaW5l
V2FzVG9vV2lkZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmZp
dHNPbkxpbmUoKSAmJiBjdXJyZW50Q2hhcmFjdGVySXNXUyAmJiBvLT5zdHlsZSgpLT5icmVha09u
bHlBZnRlcldoaXRlU3BhY2UoKSAmJiAhbWlkV29yZEJyZWFrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gdGV4dFdpZHRoKHQsIHBvcywgMSwgZiwgd2lk
dGguY3VycmVudFdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlKSArIChh
cHBseVdvcmRTcGFjaW5nID8gd29yZFNwYWNpbmcgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh3aWR0aC5maXRzT25MaW5lKCkgJiYgY3VycmVudENoYXJhY3RlcklzV1MgJiYgY3Vy
cmVudC5tX29iai0+c3R5bGUoKS0+YnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkgJiYgIW1pZFdv
cmRCcmVhaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9
IHRleHRXaWR0aCh0LCBjdXJyZW50Lm1fcG9zLCAxLCBmLCB3aWR0aC5jdXJyZW50V2lkdGgoKSwg
aXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UpICsgKGFwcGx5V29yZFNwYWNpbmcgPyB3
b3JkU3BhY2luZyA6IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IGxpbmUgaXMgdG9vIGJpZyBldmVuIHdpdGhvdXQgdGhlIGV4dHJhIHNwYWNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gSWYgaXQgaXMgbm90
LCBkbyBub3RoaW5nLiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbGlu
ZSBuZWVkcyB0aGUgZXh0cmEgd2hpdGVzcGFjZSB0byBiZSB0b28gbG9uZywgCkBAIC0yMDg1LDIx
ICsyMDc4LDIxIEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHdoaXRlc3BhY2UuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3aWR0aC5maXRzT25MaW5lKGNoYXJXaWR0aCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdhc1Rvb1dpZGUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsubW92ZVRvKG8sIHBvcywg
bmV4dEJyZWFrYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5t
b3ZlVG8oY3VycmVudC5tX29iaiwgY3VycmVudC5tX3BvcywgY3VycmVudC5tX25leHRCcmVha2Fi
bGVQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUcmFpbGlu
Z1doaXRlc3BhY2UobEJyZWFrLCBsaW5lSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxpbmVXYXNUb29XaWRlIHx8ICF3aWR0aC5maXRzT25MaW5lKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuSHlwaGVuYXRlICYmICF3aWR0aC5maXRzT25MaW5lKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwg
c3R5bGUtPmxvY2FsZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpLCBzdHlsZS0+
aHlwaGVuYXRpb25MaW1pdEFmdGVyKCksIGxhc3RTcGFjZSwgcG9zLCB3aWR0aC5jdXJyZW50V2lk
dGgoKSAtIGFkZGl0aW9uYWxUbXBXLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVkUGl0
Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywgbmV4
dEJyZWFrYWJsZSwgaHlwaGVuYXRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUtPmh5cGhlbmF0aW9u
TGltaXRCZWZvcmUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3BhY2Us
IGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRtcFcsIHdp
ZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCBs
YXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0
aW9uLCBoeXBoZW5hdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5
cGhlbmF0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxCcmVhay5hdFRleHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN0b3BwZWRJZ25vcmluZ1NwYWNlcyAmJiBwb3MgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RvcHBlZElnbm9yaW5n
U3BhY2VzICYmIGN1cnJlbnQubV9wb3MgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0b3AgcmlnaHQgYmVmb3JlIHRoZSBuZXdsaW5lIGFu
ZCB0aGVuIHN0YXJ0IHVwIGFnYWluLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG8sIHBv
cyAtIDEpKTsgLy8gU3RvcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRk
TWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG8sIHBvcykpOyAv
LyBTdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQo
bGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIGN1cnJlbnQubV9vYmosIGN1cnJl
bnQubV9wb3MgLSAxKSk7IC8vIFN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBjdXJy
ZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zKSk7IC8vIFN0YXJ0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLmlu
Y3JlbWVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSW5mby5zZXRQ
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkodHJ1ZSk7CkBAIC0yMTE5LDEyICsyMTEyLDEyIEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdcbicgJiYgcHJlc2VydmVOZXds
aW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0b3BwZWRJZ25vcmluZ1NwYWNl
cyAmJiBwb3MgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0b3BwZWRJZ25v
cmluZ1NwYWNlcyAmJiBjdXJyZW50Lm1fcG9zID4gMCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gc3RvcCByaWdodCBiZWZvcmUgdGhlIG5ld2xpbmUgYW5kIHRo
ZW4gc3RhcnQgdXAgYWdhaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9p
bnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG8sIHBvcyAtIDEpKTsgLy8g
U3RvcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2lu
dFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MpKTsgLy8gU3RhcnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRl
cmF0b3IoMCwgY3VycmVudC5tX29iaiwgY3VycmVudC5tX3BvcyAtIDEpKTsgLy8gU3RvcAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJ
bmxpbmVJdGVyYXRvcigwLCBjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zKSk7IC8vIFN0YXJ0
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBsQnJl
YWsubW92ZVRvKG8sIHBvcywgbmV4dEJyZWFrYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsQnJlYWsubW92ZVRvKGN1cnJlbnQubV9vYmosIGN1cnJlbnQubV9wb3MsIGN1cnJlbnQubV9u
ZXh0QnJlYWthYmxlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLmlu
Y3JlbWVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5KHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxC
cmVhazsKQEAgLTIxMzMsNyArMjEyNiw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpm
aW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmIGJldHdlZW5X
b3JkcykgewogICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGguY29tbWl0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwVyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsQnJl
YWsubW92ZVRvKG8sIHBvcywgbmV4dEJyZWFrYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsQnJlYWsubW92ZVRvKGN1cnJlbnQubV9vYmosIGN1cnJlbnQubV9wb3MsIGN1cnJlbnQubV9u
ZXh0QnJlYWthYmxlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXV0by13
cmFwcGluZyB0ZXh0IHNob3VsZCBub3Qgd3JhcCBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZCBvbmNl
IGl0IGhhcyBoYWQgYW4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IHRv
IGJyZWFrIGFmdGVyIGEgd29yZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrV29yZHMg
PSBmYWxzZTsKQEAgLTIxNDIsMTYgKzIxMzUsMTYgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxv
Y2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgICAgICBpZiAobWlkV29yZEJyZWFrKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGFzIGEgYnJlYWthYmxl
IHBvc2l0aW9uIGluIGNhc2UKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGluZyB0aGUg
ZW5kIHdpZHRoIGZvcmNlcyBhIGJyZWFrLgotICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFr
Lm1vdmVUbyhvLCBwb3MsIG5leHRCcmVha2FibGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
bEJyZWFrLm1vdmVUbyhjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zLCBjdXJyZW50Lm1fbmV4
dEJyZWFrYWJsZVBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1pZFdvcmRCcmVh
ayAmPSAoYnJlYWtXb3JkcyB8fCBicmVha0FsbCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgICAgICBpZiAoYmV0d2VlbldvcmRzKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0U3BhY2VXb3JkU3BhY2luZyA9IGFwcGx5V29yZFNwYWNpbmcgPyB3b3JkU3Bh
Y2luZyA6IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBwb3M7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBjdXJyZW50Lm1fcG9zOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlnbm9yaW5nU3BhY2VzICYmIG8tPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMgJiYgY3VycmVudC5tX29i
ai0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGVuY291bnRlciBhIG5ld2xpbmUsIG9yIGlmIHdlIGVuY291bnRlciBhCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgc3BhY2UsIHdlIG5lZWQgdG8gZ28gYWhl
YWQgYW5kIGJyZWFrIHVwIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBhbmQg
ZW50ZXIgYSBtb2RlIHdoZXJlIHdlIHN0YXJ0IGNvbGxhcHNpbmcgc3BhY2VzLgpAQCAtMjE2OSw0
NyArMjE2Miw0NSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgICAgICAgICAgICAgICAgIC8vIG5ldyBwb2ludC4KICAgICAgICAgICAgICAgICAgICAgaWdu
b3JpbmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlV29yZFNw
YWNpbmcgPSBhcHBseVdvcmRTcGFjaW5nID8gd29yZFNwYWNpbmcgOiAwOwotICAgICAgICAgICAg
ICAgICAgICBsYXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRk
IGluIGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGFkZE1p
ZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0gY3VycmVudC5tX3BvczsgLy8gZS5nLiwgIkZv
byAgICBnb28iLCBkb24ndCBhZGQgaW4gYW55IG9mIHRoZSBpZ25vcmVkIHNwYWNlcy4KKyAgICAg
ICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJh
dG9yKDAsIGN1cnJlbnQubV9vYmosIGN1cnJlbnQubV9wb3MpKTsKICAgICAgICAgICAgICAgICB9
CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAgICAgICAgIGlmIChpc1NWR1RleHQgJiYgcG9z
ID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChpc1NWR1RleHQgJiYgY3VycmVudC5tX3BvcyA+
IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgY3JlYXRpb24gb2YgbmV3IElubGlu
ZUJveGVzIGZvciBlYWNoIGFic29sdXRlIHBvc2l0aW9uZWQgY2hhcmFjdGVyICh0aG9zZSB0aGF0
IHN0YXJ0IG5ldyB0ZXh0IGNodW5rcykuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxSZW5kZXJTVkdJbmxpbmVUZXh0Kj4odCktPmNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVu
ayhwb3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9p
bnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zIC0gMSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAs
IG8sIHBvcykpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZH
SW5saW5lVGV4dCo+KHQpLT5jaGFyYWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmsoY3VycmVudC5tX3Bv
cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0
YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zIC0gMSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUs
IElubGluZUl0ZXJhdG9yKDAsIGN1cnJlbnQubV9vYmosIGN1cnJlbnQubV9wb3MpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFwcmV2aW91c0NoYXJhY3Rlcklz
U3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWdub3JlU3RhcnQubV9vYmogPSBvOwotICAg
ICAgICAgICAgICAgICAgICBpZ25vcmVTdGFydC5tX3BvcyA9IHBvczsKKyAgICAgICAgICAgICAg
ICAgICAgaWdub3JlU3RhcnQubV9vYmogPSBjdXJyZW50Lm1fb2JqOworICAgICAgICAgICAgICAg
ICAgICBpZ25vcmVTdGFydC5tX3BvcyA9IGN1cnJlbnQubV9wb3M7CiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhcmFjdGVySXNXUyAmJiBwcmV2aW91
c0NoYXJhY3RlcklzV1MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmIG8t
PnN0eWxlKCktPmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbEJyZWFrLm1vdmVUbyhvLCBwb3MsIG5leHRCcmVha2FibGUpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoYXV0b1dyYXAgJiYgY3VycmVudC5tX29iai0+c3R5bGUoKS0+YnJlYWtPbmx5
QWZ0ZXJXaGl0ZVNwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsubW92ZVRv
KGN1cnJlbnQubV9vYmosIGN1cnJlbnQubV9wb3MsIGN1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9z
aXRpb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoY29sbGFwc2VXaGl0ZVNwYWNlICYmIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYm
ICFpZ25vcmluZ1NwYWNlcykKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3RzLnNl
dFRyYWlsaW5nV2hpdGVzcGFjZShzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obykpOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCFvLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAh
Y3VycmVudENoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nT2Jq
ZWN0cy5zZXRUcmFpbGluZ1doaXRlc3BhY2Uoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KGN1cnJl
bnQubV9vYmopKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghY3VycmVudC5tX29iai0+c3R5
bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgfHwgIWN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlKQog
ICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ09iamVjdHMuY2xlYXIoKTsKIAotICAgICAgICAg
ICAgICAgIHBvcysrOwotICAgICAgICAgICAgICAgIGxlbi0tOwogICAgICAgICAgICAgICAgIGF0
U3RhcnQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gSU1QT1JUQU5U
OiBwb3MgaXMgPiBsZW5ndGggaGVyZSEKLSAgICAgICAgICAgIGZsb2F0IGFkZGl0aW9uYWxUbXBX
ID0gaWdub3JpbmdTcGFjZXMgPyAwIDogdGV4dFdpZHRoKHQsIGxhc3RTcGFjZSwgcG9zIC0gbGFz
dFNwYWNlLCBmLCB3aWR0aC5jdXJyZW50V2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdo
aXRlU3BhY2UpICsgbGFzdFNwYWNlV29yZFNwYWNpbmc7Ci0gICAgICAgICAgICB3aWR0aC5hZGRV
bmNvbW1pdHRlZFdpZHRoKGFkZGl0aW9uYWxUbXBXICsgaW5saW5lTG9naWNhbFdpZHRoKG8sICFh
cHBsaWVkU3RhcnRXaWR0aCwgdHJ1ZSkpOworICAgICAgICAgICAgLy8gSU1QT1JUQU5UOiBjdXJy
ZW50Lm1fcG9zIGlzID4gbGVuZ3RoIGhlcmUhCisgICAgICAgICAgICBmbG9hdCBhZGRpdGlvbmFs
VG1wVyA9IGlnbm9yaW5nU3BhY2VzID8gMCA6IHRleHRXaWR0aCh0LCBsYXN0U3BhY2UsIGN1cnJl
bnQubV9wb3MgLSBsYXN0U3BhY2UsIGYsIHdpZHRoLmN1cnJlbnRXaWR0aCgpLCBpc0ZpeGVkUGl0
Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSkgKyBsYXN0U3BhY2VXb3JkU3BhY2luZzsKKyAgICAgICAg
ICAgIHdpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoYWRkaXRpb25hbFRtcFcgKyBpbmxpbmVMb2dp
Y2FsV2lkdGgoY3VycmVudC5tX29iaiwgIWFwcGxpZWRTdGFydFdpZHRoLCB0cnVlKSk7CiAKICAg
ICAgICAgICAgIGlmICghd2lkdGguZml0c09uTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGNhbkh5cGhlbmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwg
c3R5bGUtPmxvY2FsZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpLCBzdHlsZS0+
aHlwaGVuYXRpb25MaW1pdEFmdGVyKCksIGxhc3RTcGFjZSwgcG9zLCB3aWR0aC5jdXJyZW50V2lk
dGgoKSAtIGFkZGl0aW9uYWxUbXBXLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVkUGl0
Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywgbmV4
dEJyZWFrYWJsZSwgaHlwaGVuYXRlZCk7CisgICAgICAgICAgICAgICAgICAgIHRyeUh5cGhlbmF0
aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRCZWZvcmUo
KSwgc3R5bGUtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3BhY2UsIGN1cnJlbnQubV9w
b3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRtcFcsIHdpZHRoLmF2YWlsYWJs
ZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCBsYXN0U3BhY2VXb3Jk
U3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uLCBoeXBoZW5h
dGVkKTsKIAogICAgICAgICAgICAgICAgIGlmICghaHlwaGVuYXRlZCAmJiBsQnJlYWsubV9vYmog
JiYgbEJyZWFrLm1fcG9zICYmIGxCcmVhay5tX29iai0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0
KGxCcmVhay5tX29iaiktPnRleHRMZW5ndGgoKSAmJiB0b1JlbmRlclRleHQobEJyZWFrLm1fb2Jq
KS0+Y2hhcmFjdGVycygpW2xCcmVhay5tX3BvcyAtIDFdID09IHNvZnRIeXBoZW4gJiYgc3R5bGUt
Pmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkKICAgICAgICAgICAgICAgICAgICAgaHlwaGVuYXRl
ZCA9IHRydWU7CkBAIC0yMjIzLDcgKzIyMTQsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9j
azo6ZmluZE5leHRMaW5lCiAgICAgICAgIGJvb2wgY2hlY2tGb3JCcmVhayA9IGF1dG9XcmFwOwog
ICAgICAgICBpZiAod2lkdGguY29tbWl0dGVkV2lkdGgoKSAmJiAhd2lkdGguZml0c09uTGluZSgp
ICYmIGxCcmVhay5tX29iaiAmJiBjdXJyV1MgPT0gTk9XUkFQKQogICAgICAgICAgICAgY2hlY2tG
b3JCcmVhayA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKG5leHQgJiYgby0+aXNUZXh0KCkgJiYg
bmV4dC0+aXNUZXh0KCkgJiYgIW5leHQtPmlzQlIoKSkgeworICAgICAgICBlbHNlIGlmIChuZXh0
ICYmIGN1cnJlbnQubV9vYmotPmlzVGV4dCgpICYmIG5leHQtPmlzVGV4dCgpICYmICFuZXh0LT5p
c0JSKCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvV3JhcCB8fCAobmV4dC0+c3R5bGUoKS0+YXV0
b1dyYXAoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcklzU3BhY2Up
CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yQnJlYWsgPSB0cnVlOwpAQCAtMjI1NCw3ICsy
MjQ1LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogCiAgICAg
ICAgIGlmIChjaGVja0ZvckJyZWFrICYmICF3aWR0aC5maXRzT25MaW5lKCkpIHsKICAgICAgICAg
ICAgIC8vIGlmIHdlIGhhdmUgZmxvYXRzLCB0cnkgdG8gZ2V0IGJlbG93IHRoZW0uCi0gICAgICAg
ICAgICBpZiAoY3VycmVudENoYXJhY3RlcklzU3BhY2UgJiYgIWlnbm9yaW5nU3BhY2VzICYmIG8t
PnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKQorICAgICAgICAgICAgaWYgKGN1cnJlbnRD
aGFyYWN0ZXJJc1NwYWNlICYmICFpZ25vcmluZ1NwYWNlcyAmJiBjdXJyZW50Lm1fb2JqLT5zdHls
ZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKICAgICAgICAgICAgICAgICB0cmFpbGluZ09iamVj
dHMuY2xlYXIoKTsKIAogICAgICAgICAgICAgaWYgKHdpZHRoLmNvbW1pdHRlZFdpZHRoKCkpCkBA
IC0yMjY5LDI2ICsyMjYwLDIzIEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4
dExpbmUKICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghby0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICBsYXN0ID0gbzsK
KyAgICAgICAgaWYgKCFjdXJyZW50Lm1fb2JqLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsK
KyAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50Lm1fb2JqOwogICAgICAgICAgICAgaWYgKGxhc3Qt
PmlzUmVwbGFjZWQoKSAmJiBhdXRvV3JhcCAmJiAoIWxhc3QtPmlzSW1hZ2UoKSB8fCBhbGxvd0lt
YWdlc1RvQnJlYWspICYmICghbGFzdC0+aXNMaXN0TWFya2VyKCkgfHwgdG9SZW5kZXJMaXN0TWFy
a2VyKGxhc3QpLT5pc0luc2lkZSgpKSkgewogICAgICAgICAgICAgICAgIHdpZHRoLmNvbW1pdCgp
OwogICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG9TdGFydE9mKG5leHQpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbyA9IG5leHQ7Ci0gICAgICAgIG5leHRCcmVha2Fi
bGUgPSAtMTsKLQogICAgICAgICAvLyBDbGVhciBvdXQgb3VyIGNoYXJhY3RlciBzcGFjZSBib29s
LCBzaW5jZSBpbmxpbmUgPHByZT5zIGRvbid0IGNvbGxhcHNlIHdoaXRlc3BhY2UKICAgICAgICAg
Ly8gd2l0aCBhZGphY2VudCBpbmxpbmUgbm9ybWFsL25vd3JhcCBzcGFucy4KICAgICAgICAgaWYg
KCFjb2xsYXBzZVdoaXRlU3BhY2UpCiAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVySXNTcGFj
ZSA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcG9zID0gMDsKKworICAgICAgICBjdXJyZW50
Lm1vdmVUb1N0YXJ0T2YobmV4dCk7CiAgICAgICAgIGF0U3RhcnQgPSBmYWxzZTsKICAgICB9Ci0g
ICAgCisKICAgICBpZiAod2lkdGguZml0c09uTGluZSgpIHx8IGxhc3RXUyA9PSBOT1dSQVApCiAg
ICAgICAgIGxCcmVhay5jbGVhcigpOwogCkBAIC0yMjk3LDE4ICsyMjg1LDE4IEBAIElubGluZUl0
ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgLy8gd2UganVzdCBhZGQg
YXMgbXVjaCBhcyBwb3NzaWJsZQogICAgICAgICBpZiAoc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09
IFBSRSkgewogICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IHJlYWxseSB1bmRlcnN0YW5kIHRo
aXMgY2FzZS4KLSAgICAgICAgICAgIGlmIChwb3MgIT0gMCkgeworICAgICAgICAgICAgaWYgKGN1
cnJlbnQubV9wb3MpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY2Fs
bCBtb3ZlVG8gd2hpY2ggd291bGQgY2xlYXIgbV9uZXh0QnJlYWthYmxlUG9zaXRpb24KICAgICAg
ICAgICAgICAgICAvLyB0aGlzIGNvZGUgYXMtaXMgaXMgbGlrZWx5IHdyb25nLgotICAgICAgICAg
ICAgICAgIGxCcmVhay5tX29iaiA9IG87Ci0gICAgICAgICAgICAgICAgbEJyZWFrLm1fcG9zID0g
cG9zIC0gMTsKKyAgICAgICAgICAgICAgICBsQnJlYWsubV9vYmogPSBjdXJyZW50Lm1fb2JqOwor
ICAgICAgICAgICAgICAgIGxCcmVhay5tX3BvcyA9IGN1cnJlbnQubV9wb3MgLSAxOwogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbEJyZWFrLm1vdmVUbyhsYXN0LCBsYXN0LT5p
c1RleHQoKSA/IGxhc3QtPmxlbmd0aCgpIDogMCk7CiAgICAgICAgIH0gZWxzZSBpZiAobEJyZWFr
Lm1fb2JqKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBldmVyIGJyZWFrIGluIHRoZSBtaWRkbGUg
b2YgYSB3b3JkIGlmIHdlIGNhbiBoZWxwIGl0LgogICAgICAgICAgICAgLy8gVGhlcmUncyBubyBy
b29tIGF0IGFsbC4gV2UganVzdCBoYXZlIHRvIGJlIG9uIHRoaXMgbGluZSwKICAgICAgICAgICAg
IC8vIGV2ZW4gdGhvdWdoIHdlJ2xsIHNwaWxsIG91dC4KLSAgICAgICAgICAgIGxCcmVhay5tb3Zl
VG8obywgcG9zKTsKKyAgICAgICAgICAgIGxCcmVhay5tb3ZlVG8oY3VycmVudC5tX29iaiwgY3Vy
cmVudC5tX3Bvcyk7CiAgICAgICAgIH0KICAgICB9CiAK
</data>
<flag name="review"
          id="85107"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>