<?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>123708</bug_id>
          
          <creation_ts>2013-11-03 10:48:18 -0800</creation_ts>
          <short_desc>ChildNodeList should not be LiveNodeList</short_desc>
          <delta_ts>2013-11-11 22:41:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>946455</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-03 10:48:18 -0800</bug_when>
    <thetext>ChildNodeList is a poor fit to be LiveNodeList. It is heavily special-cased. It is also the only subtype that returns non-Elements thus preventing tightening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946456</commentid>
    <comment_count>1</comment_count>
      <attachid>215871</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-03 11:09:02 -0800</bug_when>
    <thetext>Created attachment 215871
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946457</commentid>
    <comment_count>2</comment_count>
      <attachid>215871</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-03 11:18:35 -0800</bug_when>
    <thetext>Comment on attachment 215871
patch

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

&gt; Source/WebCore/dom/ChildNodeList.cpp:132
&gt; +Node* ChildNodeList::item(unsigned index) const
&gt; +{
&gt; +    if (m_cachedLengthValid &amp;&amp; index &gt;= m_cachedLength)
&gt; +        return nullptr;
&gt; +    if (m_cachedCurrentNode) {
&gt; +        if (index &gt; m_cachedCurrentPosition)
&gt; +            return nodeAfterCached(index);
&gt; +        if (index &lt; m_cachedCurrentPosition)
&gt; +            return nodeBeforeCached(index);
&gt; +        return m_cachedCurrentNode;
&gt; +    }
&gt; +    if (m_cachedLengthValid &amp;&amp; m_cachedLength - index &lt; index)
&gt; +        m_cachedCurrentNode = childFromLast(m_parent.get(), m_cachedLength - index - 1);
&gt; +    else
&gt; +        m_cachedCurrentNode = childFromFirst(m_parent.get(), index);
&gt; +    m_cachedCurrentPosition = index;
&gt; +    return m_cachedCurrentNode;
&gt; +}

It&apos;s not great to duplicate the logic here.  We&apos;ve had many use-after-free / correctness bugs in this area.
I&apos;d imagine we should be able to templatize the logic in LiveNodeList and use it here.

&gt; Source/WebCore/dom/ChildNodeList.cpp:136
&gt; +    // FIXME: Why doesn&apos;t this look into the name attribute like HTMLCollection::namedItem does?

childNodes shouldn&apos;t have namedItem per spec so we should eventually remove this.

&gt; Source/WebCore/dom/ChildNodeList.h:86
&gt; +    Ref&lt;ContainerNode&gt; m_parent;
&gt; +    mutable unsigned m_cachedLength : 31;
&gt; +    mutable unsigned m_cachedLengthValid : 1;
&gt; +    mutable unsigned m_cachedCurrentPosition;
&gt; +    mutable Node* m_cachedCurrentNode;

I don&apos;t think we should duplicate all these caching mechanism here.
It would be better to extract a superclass of LiveNodeListBase and ChildNodeList if any.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946458</commentid>
    <comment_count>3</comment_count>
      <attachid>215871</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-03 11:20:27 -0800</bug_when>
    <thetext>Comment on attachment 215871
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        hildNodeList is a poor fit to be LiveNodeList. It is heavily special-cased. It is also

Typo. You mean ChildNodeList, not hildNodeList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946459</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-03 11:32:00 -0800</bug_when>
    <thetext>I&apos;ll note that we don&apos;t have enough test cases for all the newly added code so we probably want to add some tests for childNodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946460</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-03 11:34:26 -0800</bug_when>
    <thetext>&gt; It&apos;s not great to duplicate the logic here.  We&apos;ve had many use-after-free / correctness bugs in this area.
&gt; I&apos;d imagine we should be able to templatize the logic in LiveNodeList and use it here.

The existing code is a mess and would not be a good starting point for any templates. 

I suspect caching everything to a vector would work better for child node list anyway (after access to index &gt; 0). I&apos;m just doing this now to avoid behaviour changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946461</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-03 11:40:50 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I suspect caching everything to a vector would work better for child node list anyway (after access to index &gt; 0). I&apos;m just doing this now to avoid behaviour changes.

If we&apos;re taking that route, we should probably merge it with ChildNodesLazySnapshot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946462</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-03 11:41:19 -0800</bug_when>
    <thetext>It&apos;s in ContainerNode.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946463</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-03 11:51:05 -0800</bug_when>
    <thetext>https://trac.webkit.org/r158536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946557</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-04 00:25:33 -0800</bug_when>
    <thetext>Looks like this was ~13% progression in Dromaeo/dom-traverse

https://perf.webkit.org/#mode=charts&amp;days=7&amp;chartList=%5B%5B%22mac-mountainlion%22%2C%22Dromaeo%2Fdom-traverse%3ARuns%22%5D%5D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949560</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-11-11 22:38:26 -0800</bug_when>
    <thetext>I wonder if this fixed bug 98823.  Sounds related at least to my uninformed ears.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949564</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-11-11 22:41:56 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I wonder if this fixed bug 98823.  Sounds related at least to my uninformed ears.

Nevermind.  That&apos;s HTMLCollection which is a related, but different beast.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215871</attachid>
            <date>2013-11-03 11:09:02 -0800</date>
            <delta_ts>2013-11-03 11:20:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>child-node-list-refactor.patch</filename>
            <type>text/plain</type>
            <size>25010</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDEzLTExLTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDaGlsZE5vZGVMaXN0IHNob3Vs
ZCBub3QgYmUgTGl2ZU5vZGVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjM3MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBoaWxkTm9kZUxpc3QgaXMgYSBwb29yIGZpdCB0byBiZSBMaXZlTm9kZUxp
c3QuIEl0IGlzIGhlYXZpbHkgc3BlY2lhbC1jYXNlZC4gSXQgaXMgYWxzbworICAgICAgICB0aGUg
b25seSBzdWJ0eXBlIHRoYXQgcmV0dXJucyBub24tRWxlbWVudHMgdGh1cyBwcmV2ZW50aW5nIHRp
Z2h0ZW5pbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMpOgorICAgICAgICAKKyAgICAgICAgICAgIFN1cHBvcnQgbmV3IHR5cGVzLgorCisgICAg
ICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlOb2Rl
TGlzdDo6fkVtcHR5Tm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6
Q2hpbGROb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojp+Q2hpbGRO
b2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpsZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hpbGRGcm9tRmlyc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2hpbGRG
cm9tTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpub2RlQmVmb3JlQ2Fj
aGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Om5vZGVBZnRlckNhY2hlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjppdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNoaWxkTm9kZUxpc3Q6Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5v
ZGVMaXN0OjppbnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAKKyAgICAgICAgICAgIEltcGxlbWVu
dCB0aGUgc2FtZSBjYWNoaW5nIG9wdGltaXphdGlvbnMgYXMgTGl2ZU5vZGVMaXN0IHdpdGggdGln
aHRlciwgbGVzcyBnZW5lcmljIGNvZGUuCisKKyAgICAgICAgKiBkb20vQ2hpbGROb2RlTGlzdC5o
OgorICAgICAgICAKKyAgICAgICAgICAgIEluaGVyaXQgQ2hpbGROb2RlTGlzdCBkaXJlY3RseSBm
cm9tIE5vZGVMaXN0LgorCisgICAgICAgICAgICBBZGQgbmV3IEVtcHR5Tm9kZUxpc3QgdHlwZS4g
VGhpcyBpcyBvbmx5IGV2ZXIgdXNlZCBpZiBOb2RlTGlzdCBpcyByZXF1ZXN0ZWQgZm9yIGEgbm9u
LWNvbnRhaW5lciBub2RlLgorICAgICAgICAgICAgSXQgYWxsb3dzIHRpZ2h0ZXIgdHlwaW5nIGlu
IENoaWxkTm9kZUxpc3QuCisKKyAgICAgICAgKiBkb20vTGl2ZU5vZGVMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vTGl2
ZU5vZGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNlOjpMaXZlTm9k
ZUxpc3RCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdEJhc2U6On5MaXZlTm9k
ZUxpc3RCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6TGl2ZU5vZGVMaXN0
KToKKyAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUgQ2hpbGROb2RlTGlzdCBzcGVjaWZpYyBj
b2RlIGFuZCBicmFuY2hlcy4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNoaWxkTm9kZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFJldHVybiBF
bXB0eU5vZGVMaXN0IGZvciBub24tY29udGFpbmVycy4KKworICAgICAgICAqIGRvbS9Ob2RlTGlz
dC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6On5Ob2RlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdDo6aXNMaXZlTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZUxpc3Q6OmlzQ2hpbGROb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6aXNF
bXB0eU5vZGVMaXN0KToKKyAgICAgICAgCisgICAgICAgICAgICBGb3IgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMuCisKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6ZW5zdXJlQ2hpbGROb2RlTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6cmVtb3ZlQ2hpbGROb2RlTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6ZW5zdXJlRW1wdHlOb2RlTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6cmVtb3ZlRW1wdHlOb2RlTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RzTm9kZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmRlbGV0ZVRoaXNBbmRVcGRh
dGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0TGlzdCk6CisgICAgICAgIAorICAgICAg
ICAgICAgRW1wdHlOb2RlTGlzdCBzdXBwb3J0LgorCisgICAgICAgICogaHRtbC9Db2xsZWN0aW9u
VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
Ojpyb290VHlwZUZyb21Db2xsZWN0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjppbnZhbGlk
YXRpb25UeXBlRXhjbHVkaW5nSWRBbmROYW1lQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc01hdGNoaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3RCYXNl
OjppdGVtQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdEJhc2U6OnRyYXZl
cnNlTGl2ZU5vZGVMaXN0Rmlyc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2Rl
TGlzdEJhc2U6OnRyYXZlcnNlTGl2ZU5vZGVMaXN0Rm9yd2FyZFRvT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxpdmVOb2RlTGlzdEJhc2U6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGl2
ZU5vZGVMaXN0QmFzZTo6aXRlbUJlZm9yZU9yQWZ0ZXJDYWNoZWRJdGVtKToKKyAgICAgICAgCisg
ICAgICAgICAgICAgIFJlbW92ZSBDaGlsZE5vZGVMaXN0IHNwZWNpZmljIGNvZGUgYW5kIGJyYW5j
aGVzLgorCiAyMDEzLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtXSU5DRV0gUmVwbGFjZSBPd25QdHIgd2l0aCBHRElPYmplY3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTg0OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKIAorI2luY2x1ZGUgIkNoaWxkTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJOb2RlLmgiCkBAIC00MSw5ICs0MiwxMyBAQCBib29sIEpTTm9kZUxpc3RPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhCiAgICAgSlNOb2RlTGlzdCoganNOb2RlTGlzdCA9IGpzQ2FzdDxK
U05vZGVMaXN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBpZiAoIWpzTm9kZUxpc3Qt
Pmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
anNOb2RlTGlzdC0+aW1wbCgpLmlzTGl2ZU5vZGVMaXN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChzdGF0aWNfY2Fz
dDxMaXZlTm9kZUxpc3QmPihqc05vZGVMaXN0LT5pbXBsKCkpLm93bmVyTm9kZSgpKSk7CisgICAg
aWYgKGpzTm9kZUxpc3QtPmltcGwoKS5pc0xpdmVOb2RlTGlzdCgpKQorICAgICAgICByZXR1cm4g
dmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdChzdGF0aWNfY2FzdDxMaXZlTm9kZUxpc3Qm
Pihqc05vZGVMaXN0LT5pbXBsKCkpLm93bmVyTm9kZSgpKSk7CisgICAgaWYgKGpzTm9kZUxpc3Qt
PmltcGwoKS5pc0NoaWxkTm9kZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFp
bnNPcGFxdWVSb290KHJvb3Qoc3RhdGljX2Nhc3Q8Q2hpbGROb2RlTGlzdCY+KGpzTm9kZUxpc3Qt
PmltcGwoKSkub3duZXJOb2RlKCkpKTsKKyAgICBpZiAoanNOb2RlTGlzdC0+aW1wbCgpLmlzRW1w
dHlOb2RlTGlzdCgpKQorICAgICAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qo
cm9vdChzdGF0aWNfY2FzdDxFbXB0eU5vZGVMaXN0Jj4oanNOb2RlTGlzdC0+aW1wbCgpKS5vd25l
ck5vZGUoKSkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBKU05vZGVMaXN0OjpjYW5H
ZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgTm9kZUxpc3QqIGltcGwsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAxNTg0OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDI1ICsyNCwxMzcgQEAKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0
LmgiCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2hp
bGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2RlJiBub2RlKQotICAgIDogTGl2ZU5vZGVMaXN0
KG5vZGUsIENoaWxkTm9kZUxpc3RUeXBlLCBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5n
ZXMpCitFbXB0eU5vZGVMaXN0Ojp+RW1wdHlOb2RlTGlzdCgpCit7CisgICAgbV9vd25lci5nZXQo
KS5ub2RlTGlzdHMoKS0+cmVtb3ZlRW1wdHlOb2RlTGlzdCh0aGlzKTsKK30KKworQ2hpbGROb2Rl
TGlzdDo6Q2hpbGROb2RlTGlzdChDb250YWluZXJOb2RlJiBwYXJlbnQpCisgICAgOiBtX3BhcmVu
dChwYXJlbnQpCisgICAgLCBtX2NhY2hlZExlbmd0aCgwKQorICAgICwgbV9jYWNoZWRMZW5ndGhW
YWxpZChmYWxzZSkKKyAgICAsIG1fY2FjaGVkQ3VycmVudFBvc2l0aW9uKDApCisgICAgLCBtX2Nh
Y2hlZEN1cnJlbnROb2RlKG51bGxwdHIpCiB7CiB9CiAKIENoaWxkTm9kZUxpc3Q6On5DaGlsZE5v
ZGVMaXN0KCkKIHsKLSAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2hpbGROb2Rl
TGlzdCh0aGlzKTsKKyAgICBtX3BhcmVudC5nZXQoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2hpbGRO
b2RlTGlzdCh0aGlzKTsKK30KKwordW5zaWduZWQgQ2hpbGROb2RlTGlzdDo6bGVuZ3RoKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fY2FjaGVkTGVuZ3RoVmFsaWQpIHsKKyAgICAgICAgbV9jYWNoZWRM
ZW5ndGggPSBtX3BhcmVudC0+Y2hpbGROb2RlQ291bnQoKTsKKyAgICAgICAgbV9jYWNoZWRMZW5n
dGhWYWxpZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBtX2NhY2hlZExlbmd0aDsKK30KKwor
c3RhdGljIE5vZGUqIGNoaWxkRnJvbUZpcnN0KGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCwg
aW50IGRlbHRhKQoreworICAgIE5vZGUqIGNoaWxkID0gcGFyZW50LmZpcnN0Q2hpbGQoKTsKKyAg
ICBmb3IgKDsgZGVsdGE7IC0tZGVsdGEpCisgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7CisgICAgQVNTRVJUKGNoaWxkKTsKKyAgICByZXR1cm4gY2hpbGQ7Cit9CisKK3N0YXRp
YyBOb2RlKiBjaGlsZEZyb21MYXN0KGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCwgaW50IGRl
bHRhKQoreworICAgIE5vZGUqIGNoaWxkID0gcGFyZW50Lmxhc3RDaGlsZCgpOworICAgIGZvciAo
OyBkZWx0YTsgLS1kZWx0YSkKKyAgICAgICAgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgQVNTRVJUKGNoaWxkKTsKKyAgICByZXR1cm4gY2hpbGQ7Cit9CisKK05vZGUqIENo
aWxkTm9kZUxpc3Q6Om5vZGVCZWZvcmVDYWNoZWQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fY2FjaGVkQ3VycmVudE5vZGUpOworICAgIEFTU0VSVChpbmRleCA8IG1fY2Fj
aGVkQ3VycmVudFBvc2l0aW9uKTsKKyAgICBpZiAoaW5kZXggPCBtX2NhY2hlZEN1cnJlbnRQb3Np
dGlvbiAtIGluZGV4KSB7CisgICAgICAgIG1fY2FjaGVkQ3VycmVudE5vZGUgPSBjaGlsZEZyb21G
aXJzdChtX3BhcmVudC5nZXQoKSwgaW5kZXgpOworICAgICAgICBtX2NhY2hlZEN1cnJlbnRQb3Np
dGlvbiA9IGluZGV4OworICAgICAgICByZXR1cm4gbV9jYWNoZWRDdXJyZW50Tm9kZTsKKyAgICB9
CisgICAgd2hpbGUgKG1fY2FjaGVkQ3VycmVudE5vZGUgJiYgbV9jYWNoZWRDdXJyZW50UG9zaXRp
b24gPiBpbmRleCkgeworICAgICAgICBtX2NhY2hlZEN1cnJlbnROb2RlID0gbV9jYWNoZWRDdXJy
ZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIC0tbV9jYWNoZWRDdXJyZW50UG9z
aXRpb247CisgICAgfQorICAgIHJldHVybiBtX2NhY2hlZEN1cnJlbnROb2RlOworfQorCitOb2Rl
KiBDaGlsZE5vZGVMaXN0Ojpub2RlQWZ0ZXJDYWNoZWQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fY2FjaGVkQ3VycmVudE5vZGUpOworICAgIEFTU0VSVChpbmRleCA+IG1f
Y2FjaGVkQ3VycmVudFBvc2l0aW9uKTsKKyAgICBBU1NFUlQoIW1fY2FjaGVkTGVuZ3RoVmFsaWQg
fHwgaW5kZXggPCBtX2NhY2hlZExlbmd0aCk7CisgICAgaWYgKG1fY2FjaGVkTGVuZ3RoVmFsaWQg
JiYgbV9jYWNoZWRMZW5ndGggLSBpbmRleCA8IGluZGV4IC0gbV9jYWNoZWRDdXJyZW50UG9zaXRp
b24pIHsKKyAgICAgICAgbV9jYWNoZWRDdXJyZW50Tm9kZSA9IGNoaWxkRnJvbUxhc3QobV9wYXJl
bnQuZ2V0KCksIG1fY2FjaGVkTGVuZ3RoIC0gaW5kZXggLSAxKTsKKyAgICAgICAgbV9jYWNoZWRD
dXJyZW50UG9zaXRpb24gPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkQ3VycmVudE5v
ZGU7CisgICAgfQorICAgIHdoaWxlIChtX2NhY2hlZEN1cnJlbnROb2RlICYmIG1fY2FjaGVkQ3Vy
cmVudFBvc2l0aW9uIDwgaW5kZXgpIHsKKyAgICAgICAgbV9jYWNoZWRDdXJyZW50Tm9kZSA9IG1f
Y2FjaGVkQ3VycmVudE5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICsrbV9jYWNoZWRDdXJy
ZW50UG9zaXRpb247CisgICAgfQorICAgIGlmICghbV9jYWNoZWRDdXJyZW50Tm9kZSAmJiAhbV9j
YWNoZWRMZW5ndGhWYWxpZCkgeworICAgICAgICBtX2NhY2hlZExlbmd0aCA9IG1fY2FjaGVkQ3Vy
cmVudFBvc2l0aW9uOworICAgICAgICBtX2NhY2hlZExlbmd0aFZhbGlkID0gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIG1fY2FjaGVkQ3VycmVudE5vZGU7Cit9CisKK05vZGUqIENoaWxkTm9kZUxp
c3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVkTGVuZ3Ro
VmFsaWQgJiYgaW5kZXggPj0gbV9jYWNoZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChtX2NhY2hlZEN1cnJlbnROb2RlKSB7CisgICAgICAgIGlmIChpbmRleCA+IG1f
Y2FjaGVkQ3VycmVudFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVBZnRlckNhY2hl
ZChpbmRleCk7CisgICAgICAgIGlmIChpbmRleCA8IG1fY2FjaGVkQ3VycmVudFBvc2l0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIG5vZGVCZWZvcmVDYWNoZWQoaW5kZXgpOworICAgICAgICByZXR1
cm4gbV9jYWNoZWRDdXJyZW50Tm9kZTsKKyAgICB9CisgICAgaWYgKG1fY2FjaGVkTGVuZ3RoVmFs
aWQgJiYgbV9jYWNoZWRMZW5ndGggLSBpbmRleCA8IGluZGV4KQorICAgICAgICBtX2NhY2hlZEN1
cnJlbnROb2RlID0gY2hpbGRGcm9tTGFzdChtX3BhcmVudC5nZXQoKSwgbV9jYWNoZWRMZW5ndGgg
LSBpbmRleCAtIDEpOworICAgIGVsc2UKKyAgICAgICAgbV9jYWNoZWRDdXJyZW50Tm9kZSA9IGNo
aWxkRnJvbUZpcnN0KG1fcGFyZW50LmdldCgpLCBpbmRleCk7CisgICAgbV9jYWNoZWRDdXJyZW50
UG9zaXRpb24gPSBpbmRleDsKKyAgICByZXR1cm4gbV9jYWNoZWRDdXJyZW50Tm9kZTsKK30KKwor
Tm9kZSogQ2hpbGROb2RlTGlzdDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgdGhpcyBsb29rIGludG8gdGhlIG5h
bWUgYXR0cmlidXRlIGxpa2UgSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbSBkb2VzPworICAgIGlm
IChtX3BhcmVudC5nZXQoKS5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IG1fcGFyZW50LmdldCgpLnRyZWVTY29wZSgpLmdldEVsZW1lbnRCeUlkKG5hbWUpOworICAg
ICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5wYXJlbnROb2RlKCkgPT0gJm1fcGFyZW50Lmdl
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIGlmICghZWxlbWVudCB8
fCAhbV9wYXJlbnQuZ2V0KCkudHJlZVNjb3BlKCkuY29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0
aElkKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8g
Y2hpbGRyZW4gPSBlbGVtZW50Q2hpbGRyZW4obV9wYXJlbnQuZ2V0KCkpOworICAgIGZvciAoYXV0
byBpdCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgYXV0byYgZWxlbWVudCA9ICppdDsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElkQXR0cmlidXRlIGluc3RlYWQgb2Yg
aWRGb3JTdHlsZVJlc29sdXRpb24uCisgICAgICAgIGlmIChlbGVtZW50Lmhhc0lEKCkgJiYgZWxl
bWVudC5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotYm9vbCBDaGlsZE5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9k
ZSkgY29uc3QKK3ZvaWQgQ2hpbGROb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKCkKIHsKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgYnkgTGl2ZU5vZGVMaXN0OjpuYW1l
ZEl0ZW0sCi0gICAgLy8gZm9yIGFuIGVsZW1lbnQgdGhhdCB3YXMgbG9jYXRlZCB3aXRoIGdldEVs
ZW1lbnRCeUlkLgotICAgIHJldHVybiB0ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09ICZyb290Tm9k
ZSgpOworICAgIG1fY2FjaGVkQ3VycmVudE5vZGUgPSBudWxscHRyOworICAgIG1fY2FjaGVkTGVu
Z3RoVmFsaWQgPSBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCShyZXZpc2lvbiAxNTg0OTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNSArMjQsNjcg
QEAKICNpZm5kZWYgQ2hpbGROb2RlTGlzdF9oCiAjZGVmaW5lIENoaWxkTm9kZUxpc3RfaAogCi0j
aW5jbHVkZSAiTGl2ZU5vZGVMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENoaWxkTm9kZUxp
c3QgOiBwdWJsaWMgTGl2ZU5vZGVMaXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENoaWxkTm9kZUxpc3Q+IGNyZWF0ZShOb2RlJiByb290Tm9kZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZE5vZGVMaXN0KHJvb3ROb2Rl
KSk7Ci0gICAgICAgIH0KK2NsYXNzIENvbnRhaW5lck5vZGU7CiAKLSAgICAgICAgdmlydHVhbCB+
Q2hpbGROb2RlTGlzdCgpOworY2xhc3MgRW1wdHlOb2RlTGlzdCBGSU5BTCA6IHB1YmxpYyBOb2Rl
TGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RW1wdHlOb2RlTGlzdD4gY3Jl
YXRlKE5vZGUmIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbXB0
eU5vZGVMaXN0KG93bmVyKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkVtcHR5Tm9kZUxpc3QoKTsK
IAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgQ2hpbGROb2RlTGlzdChOb2RlJiBy
b290Tm9kZSk7CisgICAgTm9kZSYgb3duZXJOb2RlKCkgeyByZXR1cm4gbV9vd25lci5nZXQoKTsg
fQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3QgT1ZF
UlJJREU7Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRW1wdHlOb2RlTGlzdChOb2Rl
JiBvd25lcikgOiBtX293bmVyKG93bmVyKSB7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgTm9kZSogaXRl
bSh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1
YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG51bGxwdHI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5Tm9kZUxpc3QoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBSZWY8Tm9kZT4gbV9vd25lcjsK
K307CisKK2NsYXNzIENoaWxkTm9kZUxpc3QgRklOQUwgOiBwdWJsaWMgTm9kZUxpc3QgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxkTm9kZUxpc3Q+IGNyZWF0ZShDb250YWlu
ZXJOb2RlJiBwYXJlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENoaWxk
Tm9kZUxpc3QocGFyZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q2hpbGROb2RlTGlzdCgp
OworCisgICAgQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlKCkgeyByZXR1cm4gbV9wYXJlbnQuZ2V0
KCk7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCk7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgQ2hpbGROb2RlTGlzdChDb250YWluZXJOb2RlJiBwYXJlbnQpOworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE5vZGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTm9kZSogbmFt
ZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVh
bCBib29sIGlzQ2hpbGROb2RlTGlzdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
KworICAgIE5vZGUqIG5vZGVCZWZvcmVDYWNoZWQodW5zaWduZWQpIGNvbnN0OworICAgIE5vZGUq
IG5vZGVBZnRlckNhY2hlZCh1bnNpZ25lZCkgY29uc3Q7CisKKyAgICBSZWY8Q29udGFpbmVyTm9k
ZT4gbV9wYXJlbnQ7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NhY2hlZExlbmd0aCA6IDMxOwor
ICAgIG11dGFibGUgdW5zaWduZWQgbV9jYWNoZWRMZW5ndGhWYWxpZCA6IDE7CisgICAgbXV0YWJs
ZSB1bnNpZ25lZCBtX2NhY2hlZEN1cnJlbnRQb3NpdGlvbjsKKyAgICBtdXRhYmxlIE5vZGUqIG1f
Y2FjaGVkQ3VycmVudE5vZGU7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxNTg0OTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsNyBAQCB2b2lkIExpdmVOb2RlTGlzdEJhc2U6OmludmFsaWRhdGVJZE5hbWVDCiAKIE5vZGUq
IExpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBj
b25zdAogeworICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIGxvb2sgaW50byB0aGUgbmFt
ZSBhdHRyaWJ1dGUgbGlrZSBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtIGRvZXM/CiAgICAgTm9k
ZSYgcm9vdE5vZGUgPSB0aGlzLT5yb290Tm9kZSgpOwogCiAgICAgaWYgKHJvb3ROb2RlLmluRG9j
dW1lbnQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuaAkocmV2aXNpb24gMTU4
NDk1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NywxNCArNjcsMTIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9jb2xsZWN0aW9u
VHlwZSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29sbGVjdGlvblR5cGUpKTsKICAgICAgICAg
QVNTRVJUKCFtX292ZXJyaWRlc0l0ZW1BZnRlciB8fCAhaXNOb2RlTGlzdChjb2xsZWN0aW9uVHlw
ZSkpOwogCi0gICAgICAgIGlmIChjb2xsZWN0aW9uVHlwZSAhPSBDaGlsZE5vZGVMaXN0VHlwZSkK
LSAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwogICAgIH0KIAogICAgIHZpcnR1YWwg
fkxpdmVOb2RlTGlzdEJhc2UoKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGUoKSAhPSBDaGlsZE5v
ZGVMaXN0VHlwZSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3Rlck5vZGVMaXN0KHRo
aXMpOworICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKICAgICB9
CiAKICAgICAvLyBET00gQVBJCkBAIC0xMzYsNyArMTM0LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2
YXRlOgogICAgIE5vZGUqIGl0ZW1CZWZvcmVPckFmdGVyQ2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZz
ZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwotICAgIE5vZGUqIHRyYXZlcnNlQ2hpbGRO
b2RlTGlzdEZvcndhcmRUb09mZnNldCh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGN1cnJlbnROb2Rl
LCB1bnNpZ25lZCYgY3VycmVudE9mZnNldCkgY29uc3Q7CiAgICAgRWxlbWVudCogdHJhdmVyc2VM
aXZlTm9kZUxpc3RGaXJzdEVsZW1lbnQoQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CiAgICAg
RWxlbWVudCogdHJhdmVyc2VMaXZlTm9kZUxpc3RGb3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zm
c2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENv
bnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0SXRlbUNsb3NlclRoYW5M
YXN0T3JDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CkBAIC0xODgsOCArMTg1LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIExpdmVOb2RlTGlzdEJhc2U6OnNobwogY2xhc3MgTGl2ZU5v
ZGVMaXN0IDogcHVibGljIExpdmVOb2RlTGlzdEJhc2UgewogcHVibGljOgogICAgIExpdmVOb2Rl
TGlzdChOb2RlJiBvd25lck5vZGUsIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlLCBOb2Rl
TGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSwgTm9kZUxpc3RSb290VHlwZSBy
b290VHlwZSA9IE5vZGVMaXN0SXNSb290ZWRBdE5vZGUpCi0gICAgICAgIDogTGl2ZU5vZGVMaXN0
QmFzZShvd25lck5vZGUsIHJvb3RUeXBlLCBpbnZhbGlkYXRpb25UeXBlLCBjb2xsZWN0aW9uVHlw
ZSA9PSBDaGlsZE5vZGVMaXN0VHlwZSwKLSAgICAgICAgY29sbGVjdGlvblR5cGUsIERvZXNOb3RP
dmVycmlkZUl0ZW1BZnRlcikKKyAgICAgICAgOiBMaXZlTm9kZUxpc3RCYXNlKG93bmVyTm9kZSwg
cm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUsIC8qc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGls
ZHJlbiovIGZhbHNlLCBjb2xsZWN0aW9uVHlwZSwgRG9lc05vdE92ZXJyaWRlSXRlbUFmdGVyKQog
ICAgIHsgfQogCiAgICAgdmlydHVhbCBOb2RlKiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNTg0OTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3
ICs0MjYsOSBAQCB2b2lkIE5vZGU6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxkTm9kZXMoKQogewotICAgIHJldHVybiBlbnN1
cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmVuc3VyZUNoaWxkTm9kZUxpc3QoKnRoaXMp
OworICAgIGlmIChpc0NvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVE
YXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuZW5zdXJlQ2hpbGROb2RlTGlzdCh0b0NvbnRhaW5lck5v
ZGUoKnRoaXMpKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMo
KS5lbnN1cmVFbXB0eUNoaWxkTm9kZUxpc3QoKnRoaXMpOwogfQogCiBOb2RlICpOb2RlOjpsYXN0
RGVzY2VuZGFudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUxpc3QuaAkocmV2aXNpb24gMTU4
NDk1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDIwICszMCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBOb2Rl
OworY2xhc3MgTm9kZTsKIAotICAgIGNsYXNzIE5vZGVMaXN0IDogcHVibGljIFNjcmlwdFdyYXBw
YWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgfk5vZGVMaXN0KCkgeyB9Ci0KLSAgICAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRy
aWJ1dGVzIGZvciBOb2RlTGlzdAotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGNvbnN0ID0gMDsKLQotICAgICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBE
T00pCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVOb2RlTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgfTsKK2NsYXNzIE5vZGVMaXN0IDogcHVibGljIFNjcmlwdFdyYXBwYWJs
ZSwgcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5O
b2RlTGlzdCgpIHsgfQorCisgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2Rl
TGlzdAorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTm9k
ZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0ID0gMDsKKworICAgIC8vIE90
aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKKyAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlTm9k
ZUxpc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxk
Tm9kZUxpc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Vt
cHR5Tm9kZUxpc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAx
NTg0OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDggKzU1LDkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9jaGlsZE5vZGVMaXN0
LT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPENoaWxkTm9kZUxp
c3Q+IGVuc3VyZUNoaWxkTm9kZUxpc3QoTm9kZSYgbm9kZSkKKyAgICBQYXNzUmVmUHRyPENoaWxk
Tm9kZUxpc3Q+IGVuc3VyZUNoaWxkTm9kZUxpc3QoQ29udGFpbmVyTm9kZSYgbm9kZSkKICAgICB7
CisgICAgICAgIEFTU0VSVCghbV9lbXB0eUNoaWxkTm9kZUxpc3QpOwogICAgICAgICBpZiAobV9j
aGlsZE5vZGVMaXN0KQogICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGROb2RlTGlzdDsKICAgICAg
ICAgUmVmUHRyPENoaWxkTm9kZUxpc3Q+IGxpc3QgPSBDaGlsZE5vZGVMaXN0OjpjcmVhdGUobm9k
ZSk7CkBAIC02NiwxMCArNjcsMjggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmVDaGlsZE5v
ZGVMaXN0KENoaWxkTm9kZUxpc3QqIGxpc3QpCiAgICAgewotICAgICAgICBBU1NFUlQobV9jaGls
ZE5vZGVMaXN0ID0gbGlzdCk7CisgICAgICAgIEFTU0VSVChtX2NoaWxkTm9kZUxpc3QgPT0gbGlz
dCk7CiAgICAgICAgIGlmIChkZWxldGVUaGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91dFRv
UmVtb3ZlTGFzdExpc3QobGlzdC0+b3duZXJOb2RlKCkpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2NoaWxkTm9kZUxpc3QgPSAwOworICAgICAgICBtX2NoaWxkTm9kZUxpc3QgPSBu
dWxscHRyOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8RW1wdHlOb2RlTGlzdD4gZW5zdXJlRW1w
dHlDaGlsZE5vZGVMaXN0KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY2hp
bGROb2RlTGlzdCk7CisgICAgICAgIGlmIChtX2VtcHR5Q2hpbGROb2RlTGlzdCkKKyAgICAgICAg
ICAgIHJldHVybiBtX2VtcHR5Q2hpbGROb2RlTGlzdDsKKyAgICAgICAgUmVmUHRyPEVtcHR5Tm9k
ZUxpc3Q+IGxpc3QgPSBFbXB0eU5vZGVMaXN0OjpjcmVhdGUobm9kZSk7CisgICAgICAgIG1fZW1w
dHlDaGlsZE5vZGVMaXN0ID0gbGlzdC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlRW1wdHlOb2RlTGlzdChFbXB0eU5vZGVMaXN0
KiBsaXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID09IGxp
c3QpOworICAgICAgICBpZiAoZGVsZXRlVGhpc0FuZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJvdXRU
b1JlbW92ZUxhc3RMaXN0KGxpc3QtPm93bmVyTm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9lbXB0eUNoaWxkTm9kZUxpc3QgPSBudWxscHRyOwogICAgIH0KIAogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdUeXBlPgpAQCAtMjEzLDcgKzIzMiw4IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBOb2RlTGlzdHNOb2RlRGF0YSgpCi0gICAgICAgIDogbV9jaGlsZE5v
ZGVMaXN0KDApCisgICAgICAgIDogbV9jaGlsZE5vZGVMaXN0KG51bGxwdHIpCisgICAgICAgICwg
bV9lbXB0eUNoaWxkTm9kZUxpc3QobnVsbHB0cikKICAgICB7IH0KIAogICAgIHN0ZDo6cGFpcjx1
bnNpZ25lZCBjaGFyLCBBdG9taWNTdHJpbmc+IG5hbWVkTm9kZUxpc3RLZXkoQ29sbGVjdGlvblR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpAQCAtMjI4LDkgKzI0OCwxMCBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBkZWxldGVUaGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91
dFRvUmVtb3ZlTGFzdExpc3QoTm9kZSYpOwogCi0gICAgLy8gRklYTUU6IG1fY2hpbGROb2RlTGlz
dCBzaG91bGQgYmUgbWVyZ2VkIGludG8gbV9hdG9taWNOYW1lQ2FjaGVzIG9yIGF0IGxlYXN0IGJl
IHNoYXJlZCB3aXRoIEhUTUxDb2xsZWN0aW9uIHJldHVybmVkIGJ5IEVsZW1lbnQ6OmNoaWxkcmVu
Ci0gICAgLy8gYnV0IGl0J3MgdHJpY2t5IGJlY2F1c2UgaW52YWxpZGF0ZUNhY2hlcyBzaG91bGRu
J3QgaW52YWxpZGF0ZSB0aGlzIGNhY2hlIGFuZCBhZG9wdFRyZWVTY29wZSBzaG91bGRuJ3QgY2Fs
bCByZWdpc3Rlck5vZGVMaXN0IG9yIHVucmVnaXN0ZXJOb2RlTGlzdC4KKyAgICAvLyBUaGVzZSB0
d28gYXJlIGN1cnJlbnRseSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIGNvdWxkIGJlIHVuaW9uZWQu
IE5vdCB2ZXJ5IGltcG9ydGFudCBhcyB0aGlzIGNsYXNzIGlzIGxhcmdlIGFueXdheS4KICAgICBD
aGlsZE5vZGVMaXN0KiBtX2NoaWxkTm9kZUxpc3Q7CisgICAgRW1wdHlOb2RlTGlzdCogbV9lbXB0
eUNoaWxkTm9kZUxpc3Q7CisKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcCBtX2F0b21p
Y05hbWVDYWNoZXM7CiAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXAgbV9uYW1lQ2FjaGVzOwogICAg
IFRhZ05vZGVMaXN0Q2FjaGVOUyBtX3RhZ05vZGVMaXN0Q2FjaGVOUzsKQEAgLTI5OCw3ICszMTks
NyBAQCBwcml2YXRlOgogaW5saW5lIGJvb2wgTm9kZUxpc3RzTm9kZURhdGE6OmRlbGV0ZVRoaXNB
bmRVcGRhdGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0TGlzdChOb2RlJiBvd25lck5v
ZGUpCiB7CiAgICAgQVNTRVJUKG93bmVyTm9kZS5ub2RlTGlzdHMoKSA9PSB0aGlzKTsKLSAgICBp
ZiAoKG1fY2hpbGROb2RlTGlzdCA/IDEgOiAwKSArIG1fYXRvbWljTmFtZUNhY2hlcy5zaXplKCkg
KyBtX25hbWVDYWNoZXMuc2l6ZSgpICsgbV90YWdOb2RlTGlzdENhY2hlTlMuc2l6ZSgpICE9IDEp
CisgICAgaWYgKChtX2NoaWxkTm9kZUxpc3QgPyAxIDogMCkgKyAobV9lbXB0eUNoaWxkTm9kZUxp
c3QgPyAxIDogMCkgKyBtX2F0b21pY05hbWVDYWNoZXMuc2l6ZSgpICsgbV9uYW1lQ2FjaGVzLnNp
emUoKSArIG1fdGFnTm9kZUxpc3RDYWNoZU5TLnNpemUoKSAhPSAxKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgb3duZXJOb2RlLmNsZWFyTm9kZUxpc3RzKCk7CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25UeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5oCShyZXZpc2lvbiAxNTg0OTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25UeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDYgQEAgZW51bSBDb2xsZWN0aW9uVHlwZSB7CiAgICAgRm9ybUNvbnRyb2xz
LAogCiAgICAgLy8gTGl2ZSBOb2RlTGlzdC4KLSAgICBDaGlsZE5vZGVMaXN0VHlwZSwKICAgICBD
bGFzc05vZGVMaXN0VHlwZSwKICAgICBOYW1lTm9kZUxpc3RUeXBlLAogICAgIFRhZ05vZGVMaXN0
VHlwZSwKQEAgLTYyLDcgKzYxLDcgQEAgZW51bSBDb2xsZWN0aW9uVHlwZSB7CiAgICAgTGFiZWxz
Tm9kZUxpc3RUeXBlLAogfTsKIAotc3RhdGljIGNvbnN0IENvbGxlY3Rpb25UeXBlIEZpcnN0Tm9k
ZUxpc3RUeXBlID0gQ2hpbGROb2RlTGlzdFR5cGU7CitzdGF0aWMgY29uc3QgQ29sbGVjdGlvblR5
cGUgRmlyc3ROb2RlTGlzdFR5cGUgPSBDbGFzc05vZGVMaXN0VHlwZTsKIAogaW5saW5lIGJvb2wg
aXNOb2RlTGlzdChDb2xsZWN0aW9uVHlwZSB0eXBlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE1ODQ5NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw2IEBA
IHN0YXRpYyBib29sIHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGQKICAgICBjYXNlIFRTZWN0
aW9uUm93czoKICAgICBjYXNlIFRhYmxlVEJvZGllczoKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgY2FzZSBDaGlsZE5vZGVMaXN0VHlwZToKICAgICBjYXNlIENsYXNzTm9kZUxpc3RUeXBlOgog
ICAgIGNhc2UgTmFtZU5vZGVMaXN0VHlwZToKICAgICBjYXNlIFRhZ05vZGVMaXN0VHlwZToKQEAg
LTEwMSw3ICsxMDAsNiBAQCBzdGF0aWMgTm9kZUxpc3RSb290VHlwZSByb290VHlwZUZyb21Db2xs
CiAgICAgY2FzZSBEYXRhTGlzdE9wdGlvbnM6CiAgICAgY2FzZSBNYXBBcmVhczoKICAgICAgICAg
cmV0dXJuIE5vZGVMaXN0SXNSb290ZWRBdE5vZGU7Ci0gICAgY2FzZSBDaGlsZE5vZGVMaXN0VHlw
ZToKICAgICBjYXNlIENsYXNzTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgTmFtZU5vZGVMaXN0VHlw
ZToKICAgICBjYXNlIFRhZ05vZGVMaXN0VHlwZToKQEAgLTE0NSw3ICsxNDMsNiBAQCBzdGF0aWMg
Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhCiAgICAgICAgIHJldHVybiBJbnZhbGlk
YXRlT25JZE5hbWVBdHRyQ2hhbmdlOwogICAgIGNhc2UgRm9ybUNvbnRyb2xzOgogICAgICAgICBy
ZXR1cm4gSW52YWxpZGF0ZUZvckZvcm1Db250cm9sczsKLSAgICBjYXNlIENoaWxkTm9kZUxpc3RU
eXBlOgogICAgIGNhc2UgQ2xhc3NOb2RlTGlzdFR5cGU6CiAgICAgY2FzZSBOYW1lTm9kZUxpc3RU
eXBlOgogICAgIGNhc2UgVGFnTm9kZUxpc3RUeXBlOgpAQCAtMjI4LDcgKzIyNSw2IEBAIHRlbXBs
YXRlIDw+IGlubGluZSBib29sIGlzTWF0Y2hpbmdFbGVtZW4KICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFdpbmRvd05hbWVDb2xsZWN0aW9uKj4oaHRtbENvbGxlY3Rpb24pLT5ub2Rl
TWF0Y2hlcyhlbGVtZW50KTsKICAgICBjYXNlIEZvcm1Db250cm9sczoKICAgICBjYXNlIFRhYmxl
Um93czoKLSAgICBjYXNlIENoaWxkTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgQ2xhc3NOb2RlTGlz
dFR5cGU6CiAgICAgY2FzZSBOYW1lTm9kZUxpc3RUeXBlOgogICAgIGNhc2UgVGFnTm9kZUxpc3RU
eXBlOgpAQCAtMjkwLDggKzI4Niw2IEBAIEFMV0FZU19JTkxJTkUgTm9kZSogTGl2ZU5vZGVMaXN0
QmFzZTo6aXQKICAgICBlbHNlCiAgICAgICAgIGN1cnJlbnQgPSBsYXN0Tm9kZShyb290Tm9kZSgp
LCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpOwogCi0gICAgaWYgKHR5cGUoKSA9
PSBDaGlsZE5vZGVMaXN0VHlwZSkKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgcmV0dXJu
IGl0ZXJhdGVGb3JQcmV2aW91c05vZGUoY3VycmVudCk7CiB9CiAKQEAgLTMyNCwyMyArMzE4LDEw
IEBAIGlubGluZSBFbGVtZW50KiB0cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHMKICAgICByZXR1cm4g
MDsKIH0KIAotLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIENoaWxkTm9kZUxpc3QKLWlubGlu
ZSBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUNoaWxkTm9kZUxpc3RGb3J3YXJkVG9P
ZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQmIGN1cnJl
bnRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHR5cGUoKSA9PSBDaGlsZE5vZGVMaXN0VHlw
ZSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY3VycmVudE9mZnNldCA8
IG9mZnNldCk7Ci0gICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5uZXh0U2li
bGluZygpKSkgewotICAgICAgICBpZiAoKytjdXJyZW50T2Zmc2V0ID09IG9mZnNldCkKLSAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBMaXZlTm9kZUxpc3QKIGlubGluZSBFbGVtZW50KiBM
aXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUxpdmVOb2RlTGlzdEZpcnN0RWxlbWVudChDb250YWlu
ZXJOb2RlKiByb290KSBjb25zdAogewogICAgIEFTU0VSVChpc05vZGVMaXN0KHR5cGUoKSkpOwot
ICAgIEFTU0VSVCh0eXBlKCkgIT0gQ2hpbGROb2RlTGlzdFR5cGUpOwogICAgIGlmICh0eXBlKCkg
PT0gSFRNTFRhZ05vZGVMaXN0VHlwZSkKICAgICAgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVt
ZW50KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxUYWdOb2RlTGlzdCo+KHRoaXMpLCByb290KTsKICAg
ICBpZiAodHlwZSgpID09IENsYXNzTm9kZUxpc3RUeXBlKQpAQCAtMzUyLDcgKzMzMyw2IEBAIGlu
bGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXIKIGlubGluZSBFbGVtZW50KiBM
aXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUxpdmVOb2RlTGlzdEZvcndhcmRUb09mZnNldCh1bnNp
Z25lZCBvZmZzZXQsIEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50LCB1bnNpZ25lZCYgY3VycmVudE9m
ZnNldCwgQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNOb2RlTGlz
dCh0eXBlKCkpKTsKLSAgICBBU1NFUlQodHlwZSgpICE9IENoaWxkTm9kZUxpc3RUeXBlKTsKICAg
ICBpZiAodHlwZSgpID09IEhUTUxUYWdOb2RlTGlzdFR5cGUpCiAgICAgICAgIHJldHVybiB0cmF2
ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQoc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TFRhZ05vZGVMaXN0Kj4odGhpcyksIG9mZnNldCwgY3VycmVudEVsZW1lbnQsIGN1cnJlbnRPZmZz
ZXQsIHJvb3QpOwogICAgIGlmICh0eXBlKCkgPT0gQ2xhc3NOb2RlTGlzdFR5cGUpCkBAIC00MjQs
OSArNDA0LDcgQEAgTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlbSh1bnNpZ25lZCBvZgogICAg
IH0gZWxzZSBpZiAoIWlzSXRlbUNhY2hlVmFsaWQoKSB8fCBpc0ZpcnN0SXRlbUNsb3NlclRoYW5D
YWNoZWRJdGVtKG9mZnNldCkgfHwgKG92ZXJyaWRlc0l0ZW1BZnRlcigpICYmIG9mZnNldCA8IGNh
Y2hlZEl0ZW1PZmZzZXQoKSkpIHsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0SW5BcnJheSA9IDA7
CiAgICAgICAgIE5vZGUqIGZpcnN0SXRlbTsKLSAgICAgICAgaWYgKHR5cGUoKSA9PSBDaGlsZE5v
ZGVMaXN0VHlwZSkKLSAgICAgICAgICAgIGZpcnN0SXRlbSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsK
LSAgICAgICAgZWxzZSBpZiAoaXNOb2RlTGlzdCh0eXBlKCkpKQorICAgICAgICBpZiAoaXNOb2Rl
TGlzdCh0eXBlKCkpKQogICAgICAgICAgICAgZmlyc3RJdGVtID0gdHJhdmVyc2VMaXZlTm9kZUxp
c3RGaXJzdEVsZW1lbnQocm9vdCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZpcnN0SXRl
bSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9uKj4odGhpcyktPnRyYXZlcnNlRmly
c3RFbGVtZW50KG9mZnNldEluQXJyYXksIHJvb3QpOwpAQCAtNDY3LDkgKzQ0NSw3IEBAIGlubGlu
ZSBOb2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVtQmVmb3IKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBvZmZzZXRJbkFycmF5ID0gMDsKLSAgICBpZiAodHlwZSgpID09IENoaWxkTm9kZUxpc3RUeXBl
KQotICAgICAgICBjdXJyZW50SXRlbSA9IHRyYXZlcnNlQ2hpbGROb2RlTGlzdEZvcndhcmRUb09m
ZnNldChvZmZzZXQsIGN1cnJlbnRJdGVtLCBjdXJyZW50T2Zmc2V0KTsKLSAgICBlbHNlIGlmIChp
c05vZGVMaXN0KHR5cGUoKSkpCisgICAgaWYgKGlzTm9kZUxpc3QodHlwZSgpKSkKICAgICAgICAg
Y3VycmVudEl0ZW0gPSB0cmF2ZXJzZUxpdmVOb2RlTGlzdEZvcndhcmRUb09mZnNldChvZmZzZXQs
IHRvRWxlbWVudChjdXJyZW50SXRlbSksIGN1cnJlbnRPZmZzZXQsIHJvb3QpOwogICAgIGVsc2UK
ICAgICAgICAgY3VycmVudEl0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlvbio+
KHRoaXMpLT50cmF2ZXJzZUZvcndhcmRUb09mZnNldChvZmZzZXQsIHRvRWxlbWVudChjdXJyZW50
SXRlbSksIGN1cnJlbnRPZmZzZXQsIG9mZnNldEluQXJyYXksIHJvb3QpOwo=
</data>
<flag name="review"
          id="238718"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>