<?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>87418</bug_id>
          
          <creation_ts>2012-05-24 13:02:08 -0700</creation_ts>
          <short_desc>WebBackForwardList should separate &quot;has no current index&quot; from the integer value of the current index</short_desc>
          <delta_ts>2022-10-09 13:41:19 -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>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>633087</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 13:02:08 -0700</bug_when>
    <thetext>WebBackForwardList should separate &quot;has no current index&quot; from the integer value of the current index

While exploring https://bugs.webkit.org/show_bug.cgi?id=87417 we noticed much of the code is implicit and subtle, and much of that confusion is centered around using UINT_MAX to mark &quot;No current item index&quot;

Moving that out in to a separate bool will help clean things up a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633407</commentid>
    <comment_count>1</comment_count>
      <attachid>143934</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 17:36:38 -0700</bug_when>
    <thetext>Created attachment 143934
Current WIP

Not ready for review.  Just attached for posterity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634071</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 11:01:35 -0700</bug_when>
    <thetext>That WIP went above and beyond what I suggested we should do with this bug.

I&apos;ll attach a more limited patch that just transitions to using the bool flag and will do a more comprehensive cleanup of the mechanism in https://bugs.webkit.org/show_bug.cgi?id=87513</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634084</commentid>
    <comment_count>3</comment_count>
      <attachid>144103</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 11:10:22 -0700</bug_when>
    <thetext>Created attachment 144103
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634233</commentid>
    <comment_count>4</comment_count>
      <attachid>144103</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-25 13:16:26 -0700</bug_when>
    <thetext>Comment on attachment 144103
Patch v1

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

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:139
&gt; +    if (m_hasCurrentIndex)
&gt; +        return m_entries[m_currentIndex].get();
&gt;      return 0;

I think this would read better with a ? : than with an if statement. Or the early return should be the &quot;return 0&quot; if you want to stick with an if.

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:148
&gt; +    if (m_currentIndex &amp;&amp; m_hasCurrentIndex)
&gt; +        return m_entries[m_currentIndex - 1].get();
&gt;      return 0;

Same comment as above. I think the early return should be the error case or we could use a ? : expression.

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:157
&gt; +    if (m_entries.size() &amp;&amp; m_hasCurrentIndex &amp;&amp; m_currentIndex &lt; m_entries.size() - 1)
&gt; +        return m_entries[m_currentIndex + 1].get();
&gt;      return 0;

And again.

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:260
&gt; +        m_currentIndex = 0;

No need for this line of code:

1) The code above already sets m_currentIndex to 0.
2) If we set m_hasCurrentIndex to false, it doesn’t matter what m_currentIndex is set to.

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:141
&gt; +    uint32_t currentIndex = currentCFIndex == -1 ? 0 : static_cast&lt;unsigned&gt;(currentCFIndex);

Mix of unsigned and uint32_t on this line.

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:142
&gt; +    bool hasCurrentIndex = currentCFIndex &gt; -1;

We should do this first, and then we could use it when initializing currentIndex.

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:190
&gt;      // Perform a sanity check: in case we&apos;re out of range, we reset.
&gt; -    if (m_current != NoCurrentItemIndex &amp;&amp; m_current &gt;= newEntries.size())
&gt; -        m_current = NoCurrentItemIndex;
&gt; +    if (m_hasCurrentIndex &amp;&amp; m_currentIndex &gt;= newEntries.size())
&gt; +        m_hasCurrentIndex = false;

We don’t need this sanity check because it’s redundant with checks done above. I thought you were going to remove it and replace it with an assertion in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634254</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 13:38:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:190
&gt; &gt;      // Perform a sanity check: in case we&apos;re out of range, we reset.
&gt; &gt; -    if (m_current != NoCurrentItemIndex &amp;&amp; m_current &gt;= newEntries.size())
&gt; &gt; -        m_current = NoCurrentItemIndex;
&gt; &gt; +    if (m_hasCurrentIndex &amp;&amp; m_currentIndex &gt;= newEntries.size())
&gt; &gt; +        m_hasCurrentIndex = false;
&gt; 
&gt; We don’t need this sanity check because it’s redundant with checks done above. I thought you were going to remove it and replace it with an assertion in this patch.

I have a *much* more thorough patch than this one I plan to do in https://bugs.webkit.org/show_bug.cgi?id=87513

Adding the bool and doing the m_current rename seemed like a separate enough task to split it off separately.

That said, I&apos;ll make many of the tweaks you suggested here before landing, and make sure everything is addressed in bug 87513</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634278</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-25 14:10:15 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/118560

The real fireworks are on their way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800049</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-04 00:53:52 -0800</bug_when>
    <thetext>Attachment 144103 was posted by a committer and has review+, assigning to Brady Eidson for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904377</commentid>
    <comment_count>8</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-10-09 13:40:06 -0700</bug_when>
    <thetext>https://github.com/WebKit/WebKit/commit/78f980d4eb70fdca0a2d1800d40806c0226a53e5 &lt;- Landed and didn&apos;t backed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904378</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-10-09 13:41:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/100952117&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143934</attachid>
            <date>2012-05-24 17:36:38 -0700</date>
            <delta_ts>2012-05-25 11:10:22 -0700</delta_ts>
            <desc>Current WIP</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20823</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5k
ZXggOWZmYzlhMi4uNmRiYzI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTM0LDcgKzM0LDggQEAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIERlZmF1bHRDYXBhY2l0eSA9IDEwMDsKIAogV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNr
Rm9yd2FyZExpc3QoV2ViUGFnZVByb3h5KiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCi0gICAg
LCBtX2N1cnJlbnQoTm9DdXJyZW50SXRlbUluZGV4KQorICAgICwgbV9oYXNDdXJyZW50SW5kZXgo
ZmFsc2UpCisgICAgLCBtX2N1cnJlbnRJbmRleCgwKQogICAgICwgbV9jYXBhY2l0eShEZWZhdWx0
Q2FwYWNpdHkpCiAgICAgLCBtX2Nsb3NlZCh0cnVlKQogICAgICwgbV9lbmFibGVkKHRydWUpCkBA
IC00NCwxMCArNDUsMTQgQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9yd2FyZExpc3Qo
V2ViUGFnZVByb3h5KiBwYWdlKQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2Fy
ZExpc3QoKQogeworICAgIC8vIEEgV2ViQmFja0ZvcndhcmRMaXN0IHNob3VsZCBuZXZlciBiZSBk
ZXN0cm95ZWQgdW5sZXNzIGl0J3MgYXNzb2NpYXRlZCBwYWdlIGhhcyBiZWVuIGNsb3NlZC4KKyAg
ICBBU1NFUlQoIW1fcGFnZSAmJiAhbV9oYXNDdXJyZW50SW5kZXgpOwogfQogCiB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdDo6cGFnZUNsb3NlZCgpCiB7CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWx3
YXlzIHN0YXJ0ZWQgb3V0IHdpdGggYW4gbV9wYWdlIGFuZCB3ZSBzaG91bGQgbmV2ZXIgY2xvc2Ug
dGhlIHBhZ2UgdHdpY2UuCisgICAgQVNTRVJUKG1fcGFnZSk7CiAgICAgaWYgKG1fcGFnZSkgewog
ICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpAQCAtNTUsMjAgKzYwLDIxIEBAIHZvaWQgV2ViQmFj
a0ZvcndhcmRMaXN0OjpwYWdlQ2xvc2VkKCkKICAgICB9CiAKICAgICBtX3BhZ2UgPSAwOworICAg
IG1faGFzQ3VycmVudEluZGV4ID0gZmFsc2U7CiB9CiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
OjphZGRJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiB7Ci0gICAgQVNTRVJU
KG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVz
LnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRl
eCA8IG1fZW50cmllcy5zaXplKCkpOwogCiAgICAgaWYgKCFtX2NhcGFjaXR5IHx8ICFtX2VuYWJs
ZWQgfHwgIW5ld0l0ZW0gfHwgIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9y
PFJlZlB0cjxBUElPYmplY3Q+ID4gcmVtb3ZlZEl0ZW1zOwotICAgIAotICAgIGlmIChtX2N1cnJl
bnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KSB7CisKKyAgICBpZiAobV9oYXNDdXJyZW50SW5kZXgp
IHsKICAgICAgICAgLy8gVG9zcyBldmVyeXRoaW5nIGluIHRoZSBmb3J3YXJkIGxpc3QuCi0gICAg
ICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1cnJlbnQgKyAxOworICAgICAgICB1bnNpZ25l
ZCB0YXJnZXRTaXplID0gbV9jdXJyZW50SW5kZXggKyAxOwogICAgICAgICByZW1vdmVkSXRlbXMu
cmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllcy5zaXplKCkgLSB0YXJnZXRTaXplKTsKICAgICAgICAg
d2hpbGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJnZXRTaXplKSB7CiAgICAgICAgICAgICBtX3Bh
Z2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzLmxhc3QoKS0+aXRlbUlEKCkpOwpA
QCAtNzgsMTEgKzg0LDExIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAKICAgICAgICAgLy8gVG9zcyB0aGUgZmlyc3Qg
aXRlbSBpZiB0aGUgbGlzdCBpcyBnZXR0aW5nIHRvbyBiaWcsIGFzIGxvbmcgYXMgd2UncmUgbm90
IHVzaW5nIGl0CiAgICAgICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50
IDEgZW50cnkpLgotICAgICAgICBpZiAobV9lbnRyaWVzLnNpemUoKSA9PSBtX2NhcGFjaXR5ICYm
IChtX2N1cnJlbnQgfHwgbV9jYXBhY2l0eSA9PSAxKSkgeworICAgICAgICBpZiAobV9lbnRyaWVz
LnNpemUoKSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnRJbmRleCB8fCBtX2NhcGFjaXR5ID09
IDEpKSB7CiAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRy
aWVzWzBdLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50
cmllc1swXS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZSgwKTsKLSAg
ICAgICAgICAgIG1fY3VycmVudC0tOworICAgICAgICAgICAgbV9jdXJyZW50SW5kZXgtLTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gY3VycmVudCBp
dGVtIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBubyBvdGhlciBlbnRyaWVzIGJlZm9yZSBhZGRpbmcg
dGhpcyBuZXcgaXRlbS4KQEAgLTk0LDIzICsxMDAsMjQgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExp
c3Q6OmFkZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogbmV3SXRlbSkKICAgICAgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CiAgICAgfQogICAgIAotICAgIGlmIChtX2N1cnJlbnQgPT0gTm9DdXJy
ZW50SXRlbUluZGV4KQotICAgICAgICBtX2N1cnJlbnQgPSAwOwotICAgIGVsc2UKLSAgICAgICAg
bV9jdXJyZW50Kys7CisgICAgaWYgKCFtX2hhc0N1cnJlbnRJbmRleCkgeworICAgICAgICBtX2N1
cnJlbnRJbmRleCA9IDA7CisgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gdHJ1ZTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jdXJyZW50SW5kZXgrKzsKIAogICAgIC8vIG1fY3VycmVudCBuZXZl
ciBiZSBwb2ludGluZyBtb3JlIHRoYW4gMSBwYXN0IHRoZSBlbmQgb2YgdGhlIGVudHJpZXMgVmVj
dG9yLgogICAgIC8vIElmIGl0IGlzLCBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcgYW5kIHdlIHNo
b3VsZCBub3QgdHJ5IHRvIGluc2VydCB0aGUgbmV3IGl0ZW0uCi0gICAgQVNTRVJUKG1fY3VycmVu
dCA8PSBtX2VudHJpZXMuc2l6ZSgpKTsKLSAgICBpZiAobV9jdXJyZW50IDw9IG1fZW50cmllcy5z
aXplKCkpCi0gICAgICAgIG1fZW50cmllcy5pbnNlcnQobV9jdXJyZW50LCBuZXdJdGVtKTsKKyAg
ICBBU1NFUlQobV9jdXJyZW50SW5kZXggPD0gbV9lbnRyaWVzLnNpemUoKSk7CisgICAgaWYgKG1f
Y3VycmVudEluZGV4IDw9IG1fZW50cmllcy5zaXplKCkpCisgICAgICAgIG1fZW50cmllcy5pbnNl
cnQobV9jdXJyZW50SW5kZXgsIG5ld0l0ZW0pOwogCiAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNr
Rm9yd2FyZExpc3QobmV3SXRlbSwgJnJlbW92ZWRJdGVtcyk7CiB9CiAKIHZvaWQgV2ViQmFja0Zv
cndhcmRMaXN0Ojpnb1RvSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQogewotICAg
IEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1f
ZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJy
ZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAogICAgIGlmICghbV9lbnRyaWVzLnNpemUo
KSB8fCAhaXRlbSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTIxLDcgKzEyOCw4IEBAIHZvaWQgV2Vi
QmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChpbmRleCA8IG1fZW50cmllcy5zaXpl
KCkpIHsKLSAgICAgICAgbV9jdXJyZW50ID0gaW5kZXg7CisgICAgICAgIG1fY3VycmVudEluZGV4
ID0gaW5kZXg7CisgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gdHJ1ZTsKICAgICAgICAgaWYg
KG1fcGFnZSkKICAgICAgICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KDAs
IDApOwogICAgIH0KQEAgLTEyOSwzNiArMTM3LDM2IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
Ojpnb1RvSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQogCiBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6OmN1cnJlbnRJdGVtKCkKIHsKLSAgICBBU1NF
UlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBtX2VudHJp
ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudElu
ZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBpZiAobV9jdXJyZW50ICE9IE5vQ3VycmVu
dEl0ZW1JbmRleCkKLSAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRdLmdldCgpOwor
ICAgIGlmIChtX2hhc0N1cnJlbnRJbmRleCkKKyAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1
cnJlbnRJbmRleF0uZ2V0KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdDo6YmFja0l0ZW0oKQogewotICAgIEFTU0VSVChtX2N1
cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmllcy5zaXpl
KCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5kZXggPCBt
X2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIGlmIChtX2N1cnJlbnQgJiYgbV9jdXJyZW50ICE9IE5v
Q3VycmVudEl0ZW1JbmRleCkKLSAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnQgLSAx
XS5nZXQoKTsKKyAgICBpZiAobV9oYXNDdXJyZW50SW5kZXgpCisgICAgICAgIHJldHVybiBtX2Vu
dHJpZXNbbV9jdXJyZW50SW5kZXggLSAxXS5nZXQoKTsKICAgICByZXR1cm4gMDsKIH0KIAogV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSgpCiB7
Ci0gICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50
IDwgbV9lbnRyaWVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBt
X2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgaWYgKG1fZW50cmllcy5z
aXplKCkgJiYgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSAtIDEpCi0gICAgICAgIHJldHVy
biBtX2VudHJpZXNbbV9jdXJyZW50ICsgMV0uZ2V0KCk7CisgICAgaWYgKG1fZW50cmllcy5zaXpl
KCkgJiYgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpIC0gMSkKKyAgICAgICAgcmV0
dXJuIG1fZW50cmllc1ttX2N1cnJlbnRJbmRleCArIDFdLmdldCgpOwogICAgIHJldHVybiAwOwog
fQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6Oml0ZW1BdElu
ZGV4KGludCBpbmRleCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1J
bmRleCB8fCBtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1faGFz
Q3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAg
ICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICBpZiAoIW1faGFzQ3Vy
cmVudEluZGV4KQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICAvLyBEbyByYW5nZSBjaGVj
a3Mgd2l0aG91dCBkb2luZyBtYXRoIG9uIGluZGV4IHRvIGF2b2lkIG92ZXJmbG93LgpAQCAtMTY4
LDI2ICsxNzYsMjkgQEAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0
OjppdGVtQXRJbmRleChpbnQgaW5kZXgpCiAgICAgaWYgKGluZGV4ID4gZm9yd2FyZExpc3RDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgcmV0dXJuIG1fZW50cmllc1tp
bmRleCArIG1fY3VycmVudF0uZ2V0KCk7CisgICAgcmV0dXJuIG1fZW50cmllc1tpbmRleCArIG1f
Y3VycmVudEluZGV4XS5nZXQoKTsKIH0KIAogaW50IFdlYkJhY2tGb3J3YXJkTGlzdDo6YmFja0xp
c3RDb3VudCgpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXgg
fHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2hhc0N1cnJl
bnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgcmV0
dXJuIG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggPyAwIDogbV9jdXJyZW50OworICAg
IHJldHVybiBtX2hhc0N1cnJlbnRJbmRleCA/IG1fY3VycmVudEluZGV4IDogMDsKIH0KIAogaW50
IFdlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCiB7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNp
emUoKSk7CisgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8
IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJlbnRJ
dGVtSW5kZXggPyAwIDogc3RhdGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKSAtIChtX2N1
cnJlbnQgKyAxKTsKKyAgICByZXR1cm4gbV9oYXNDdXJyZW50SW5kZXggPyBtX2VudHJpZXMuc2l6
ZSgpIC0gKG1fY3VycmVudEluZGV4ICsgMSkgOiAwOwogfQogCiBQYXNzUmVmUHRyPEltbXV0YWJs
ZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNJbW11dGFibGVBcnJheVdpdGhM
aW1pdCh1bnNpZ25lZCBsaW1pdCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVu
dEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
IW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7
CisKKyAgICBpZiAoIW1faGFzQ3VycmVudEluZGV4KQorICAgICAgICByZXR1cm4gSW1tdXRhYmxl
QXJyYXk6OmNyZWF0ZSgpOwogCiAgICAgdW5zaWduZWQgYmFja0xpc3RTaXplID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJhY2tMaXN0Q291bnQoKSk7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6
bWluKGJhY2tMaXN0U2l6ZSwgbGltaXQpOwpAQCAtMjA2LDcgKzIxNywxMCBAQCBQYXNzUmVmUHRy
PEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNJbW11dGFibGVB
cnJheVdpdGhMaW1pdAogCiBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmZvcndhcmRMaXN0QXNJbW11dGFibGVBcnJheVdpdGhMaW1pdCh1bnNpZ25lZCBsaW1p
dCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1
cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4
IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CisKKyAgICBpZiAoIW1faGFz
Q3VycmVudEluZGV4KQorICAgICAgICByZXR1cm4gSW1tdXRhYmxlQXJyYXk6OmNyZWF0ZSgpOwog
CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHVuc2lnbmVkPihmb3J3
YXJkTGlzdENvdW50KCkpLCBsaW1pdCk7CiAgICAgaWYgKCFzaXplKQpAQCAtMjE1LDkgKzIyOSw5
IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2Fy
ZExpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpCiAgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+
ID4gdmVjdG9yOwogICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogCi0g
ICAgdW5zaWduZWQgbGFzdCA9IG1fY3VycmVudCArIHNpemU7CisgICAgdW5zaWduZWQgbGFzdCA9
IG1fY3VycmVudEluZGV4ICsgc2l6ZTsKICAgICBBU1NFUlQobGFzdCA8IG1fZW50cmllcy5zaXpl
KCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fY3VycmVudCArIDE7IGkgPD0gbGFzdDsgKytp
KQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fY3VycmVudEluZGV4ICsgMTsgaSA8PSBsYXN0OyAr
K2kpCiAgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQobV9lbnRyaWVzW2ldLmdldCgpKTsK
IAogICAgIHJldHVybiBJbW11dGFibGVBcnJheTo6YWRvcHQodmVjdG9yKTsKQEAgLTIyNSwzNiAr
MjM5LDU0IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6
Zm9yd2FyZExpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRM
aXN0OjpjbGVhcigpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5k
ZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2hhc0N1
cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCiAgICAg
c2l6ZV90IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGlmIChzaXplIDw9IDEpCisgICAg
aWYgKHNpemUgPD0gMSB8fCAhbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8
V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgp
OworICAgIFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHJlbW92ZWRJdGVtczsKIAotICAgIGlm
IChtX3BhZ2UpIHsKKyAgICBpZiAoIWN1cnJlbnRJdGVtKSB7CisgICAgICAgIC8vIFdlIHNob3Vs
ZCBvbmx5IGV2ZW4gaGF2ZSBubyBjdXJyZW50IGl0ZW0gaWYgd2UgaGF2ZSBubyBjdXJyZW50IGl0
ZW0gaW5kZXguCisgICAgICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXgpOworICAgICAgICAK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChtX2VudHJpZXNbaV0gIT0gY3VycmVudEl0ZW0pCi0gICAgICAgICAgICAgICAgbV9wYWdl
LT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRlbUlEKCkpOworICAgICAg
ICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAgICAgICAgICBpZiAoIW1fZW50cmllc1tp
XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbV9wYWdlLT5iYWNr
Rm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRlbUlEKCkpOworICAgICAgICAgICAg
cmVtb3ZlZEl0ZW1zLmFwcGVuZChtX2VudHJpZXNbaV0ucmVsZWFzZSgpKTsKICAgICAgICAgfQor
CisgICAgICAgIG1fZW50cmllcy5jbGVhcigpOworICAgICAgICBtX2hhc0N1cnJlbnRJbmRleCA9
IGZhbHNlOworICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgwLCAmcmVt
b3ZlZEl0ZW1zKTsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFJlZlB0
cjxBUElPYmplY3Q+ID4gcmVtb3ZlZEl0ZW1zOwotICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2Fw
YWNpdHkobV9lbnRyaWVzLnNpemUoKSAtIDEpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9lbnRyaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpICE9IG1fY3VycmVudCkKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobV9lbnRy
aWVzW2ldICE9IGN1cnJlbnRJdGVtKQorICAgICAgICAgICAgbV9wYWdlLT5iYWNrRm9yd2FyZFJl
bW92ZWRJdGVtKG1fZW50cmllc1tpXS0+aXRlbUlEKCkpOworICAgIH0KKworICAgIHJlbW92ZWRJ
dGVtcy5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSAtIDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChpICE9IG1fY3VycmVudEluZGV4ICYmIG1faGFz
Q3VycmVudEluZGV4KQogICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChtX2VudHJpZXNb
aV0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBtX2N1cnJlbnQgPSAwOworICAgIG1fY3VycmVu
dEluZGV4ID0gMDsKIAogICAgIGlmIChjdXJyZW50SXRlbSkgewogICAgICAgICBtX2VudHJpZXMu
c2hyaW5rKDEpOwogICAgICAgICBtX2VudHJpZXNbMF0gPSBjdXJyZW50SXRlbS5yZWxlYXNlKCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fY3Vy
cmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsKKyAgICAgICAgbV9oYXNDdXJyZW50SW5kZXggPSBm
YWxzZTsKICAgICB9CiAKICAgICBpZiAobV9wYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCmluZGV4IGVhZDBmY2EuLmY0Y2I3OWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmgKQEAgLTcwLDcgKzcw
LDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3Im
IGVudHJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VudHJpZXM7IH0KIAotICAgIHVpbnQzMl90IGN1
cnJlbnRJbmRleCgpIHsgcmV0dXJuIG1fY3VycmVudDsgfQorICAgIHVpbnQzMl90IGN1cnJlbnRJ
bmRleCgpIHsgcmV0dXJuIG1fY3VycmVudEluZGV4OyB9CiAgICAgaW50IGJhY2tMaXN0Q291bnQo
KTsKICAgICBpbnQgZm9yd2FyZExpc3RDb3VudCgpOwogCkBAIC04MywxNiArODMsMTYgQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5vQ3Vy
cmVudEl0ZW1JbmRleCA9IFVJTlRfTUFYOwotCiAgICAgV2ViQmFja0ZvcndhcmRMaXN0KFdlYlBh
Z2VQcm94eSopOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElU
eXBlOyB9CiAKICAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKICAgICBCYWNrRm9yd2FyZExpc3RJ
dGVtVmVjdG9yIG1fZW50cmllczsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnQ7Ci0gICAgdWludDMy
X3QgbV9jYXBhY2l0eTsKKworICAgIGJvb2wgbV9oYXNDdXJyZW50SW5kZXg7CisgICAgdW5zaWdu
ZWQgbV9jdXJyZW50SW5kZXg7CisgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKICAgICBib29sIG1f
Y2xvc2VkOwogICAgIGJvb2wgbV9lbmFibGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCmluZGV4IGY1ZWM2YTMuLmE1
ZThkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYkJhY2tG
b3J3YXJkTGlzdENGLmNwcApAQCAtNTMsMTIgKzUzLDE4IEBAIERFRklORV9TVEFUSUNfR0VUVEVS
KENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9yeUVudHJ5RGF0YUtleSwgKENGU1RSKCJTZXNzaW9u
SGlzCiAKIENGRGljdGlvbmFyeVJlZiBXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlv
bmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5U2Vzc2lvblN0YXRl
RmlsdGVyQ2FsbGJhY2sgZmlsdGVyLCB2b2lkKiBjb250ZXh0KSBjb25zdAogewotICAgIEFTU0VS
VChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmll
cy5zaXplKCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKKworICAgIGlmICghbV9oYXNDdXJyZW50SW5kZXgpIHsK
KyAgICAgICAgLy8gV2UgcmVwcmVzZW50IG5vdCBoYXZpbmcgYSBjdXJyZW50IGluZGV4IGJ5IHdy
aXRpbmcgb3V0IGFuIGVtcHR5IGRpY3Rpb25hcnkuCisgICAgICAgIHJldHVybiBDRkRpY3Rpb25h
cnlDcmVhdGUoMCwgMCwgMCwgMCwgMCwgMCk7CisgICAgfQogCiAgICAgUmV0YWluUHRyPENGTXV0
YWJsZUFycmF5UmVmPiBlbnRyaWVzKEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1f
ZW50cmllcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKIAogICAgIC8vIFdlIG1h
eSBuZWVkIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBpbmRleCB0byBhY2NvdW50IGZvciBlbnRyaWVz
IHRoYXQgYXJlIGZpbHRlcmVkIGJ5IHRoZSBjYWxsYmFjay4KLSAgICBDRkluZGV4IGN1cnJlbnRJ
bmRleCA9IG1fY3VycmVudDsKKyAgICBDRkluZGV4IGN1cnJlbnRJbmRleCA9IG1fY3VycmVudElu
ZGV4OworICAgIGJvb2wgaGFzQ3VycmVudEluZGV4ID0gdHJ1ZTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIElmIHdlIHNv
bWVob3cgZW5kZWQgdXAgd2l0aCBhIG51bGwgZW50cnkgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIg
dGhlIGRhdGEgaW52YWxpZCBhbmQgbm90IHNhdmUgc2Vzc2lvbiBoaXN0b3J5IGF0IGFsbC4KQEAg
LTY3LDcgKzczLDcgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRl
Q0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3gKICAgICAgICAgICAgIHJldHVy
biAwOwogCiAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcih0b0FQSShtX3BhZ2UpLCBXS1Bh
Z2VHZXRTZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlwZSgpLCB0b1VSTFJlZihtX2VudHJpZXNbaV0t
Pm9yaWdpbmFsVVJMKCkuaW1wbCgpKSwgY29udGV4dCkpIHsKLSAgICAgICAgICAgIGlmIChpIDw9
IHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJyZW50KSkKKyAgICAgICAgICAgIGlmIChpIDw9IG1f
Y3VycmVudEluZGV4KQogICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleC0tOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTg2LDMwICs5Miw0NiBAQCBDRkRpY3Rpb25hcnlS
ZWYgV2ViQmFja0ZvcndhcmRMaXN0OjpjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihX
ZWJQYWdlUHJveAogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbnRyeURpY3Rp
b25hcnkoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNCwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlE
aWN0aW9uYXJ5LmdldCgpKTsKICAgICB9Ci0gICAgICAgIAotICAgIC8vIElmIGFsbCBpdGVtcyBi
ZWZvcmUgYW5kIGluY2x1ZGluZyB0aGUgY3VycmVudCBpdGVtIHdlcmUgZmlsdGVyZWQgdGhlbiBj
dXJyZW50SW5kZXggd2lsbCBiZSAtMS4KLSAgICAvLyBBc3N1bWluZyB3ZSBkaWRuJ3Qgc3RhcnQg
b3V0IHdpdGggTm9DdXJyZW50SXRlbUluZGV4LCB3ZSBzaG91bGQgc3RvcmUgImN1cnJlbnQiIHRv
IHBvaW50IGF0IHRoZSBmaXJzdCBpdGVtLgotICAgIGlmIChjdXJyZW50SW5kZXggPT0gLTEgJiYg
bV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBDRkFycmF5R2V0Q291bnQoZW50cmll
cy5nZXQoKSkpCi0gICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CiAKLSAgICAvLyBGSVhNRTogV2Un
cmUgcmVseWluZyBvbiBjdXJyZW50SW5kZXggPT0gLTEgdG8gbWVhbiB0aGUgZXhhY3Qgc2FtZSB0
aGluZyBhcyBOb0N1cnJlbnRJdGVtSW5kZXggKFVJTlRfTUFYKSBpbiB1bnNpZ25lZCBmb3JtLgot
ICAgIC8vIFRoYXQgc2VlbXMgaW1wbGljaXQgYW5kIGZyYWdpbGUgYW5kIHdlIHNob3VsZCBmaW5k
IGEgYmV0dGVyIHdheSBvZiByZXByZXNlbnRpbmcgdGhlIE5vQ3VycmVudEl0ZW1JbmRleCBjYXNl
LgotICAgIGlmIChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8ICFDRkFycmF5R2V0
Q291bnQoZW50cmllcy5nZXQoKSkpCi0gICAgICAgIGN1cnJlbnRJbmRleCA9IC0xOworICAgIEFT
U0VSVChjdXJyZW50SW5kZXggPT0gLTEgfHwgKGN1cnJlbnRJbmRleCA+IC0xICYmIGN1cnJlbnRJ
bmRleCA8IENGQXJyYXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSkpOwogCi0gICAgUmV0YWluUHRy
PENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXhOdW1iZXIoQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUo
MCwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjdXJyZW50SW5kZXgpKTsKKyAgICAvLyBJZiB3ZSBo
YXZlIGFuIGluZGV4IGFuZCBhbGwgaXRlbXMgYmVmb3JlIGFuZCBpbmNsdWRpbmcgdGhlIGN1cnJl
bnQgaXRlbSB3ZXJlIGZpbHRlcmVkIHRoZW4gY3VycmVudEluZGV4IHdpbGwgYmUgLTEuCisgICAg
Ly8gSW4gdGhpcyBjYXNlIHRoZSBuZXcgY3VycmVudCBpbmRleCBzaG91bGQgcG9pbnQgYXQgdGhl
IGZpcnN0IGl0ZW0uCisgICAgLy8gSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgYWxsIGl0ZW1zIHdl
cmUgZmlsdGVyZWQgc28gd2Ugc2hvdWxkIHJlcHJlc2VudCBub3QgaGF2aW5nIGEgY3VycmVudCBp
bmRleC4KKyAgICBpZiAoY3VycmVudEluZGV4ID09IC0xKSB7CisgICAgICAgIGlmIChDRkFycmF5
R2V0Q291bnQoZW50cmllcy5nZXQoKSkpCisgICAgICAgICAgICBjdXJyZW50SW5kZXggPSAwOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBoYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoaGFzQ3VycmVudEluZGV4KSB7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gY3VycmVudEluZGV4TnVtYmVyKEFkb3B0Q0YsIENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51
bWJlckNGSW5kZXhUeXBlLCAmY3VycmVudEluZGV4KSk7CiAKLSAgICBjb25zdCB2b2lkKiBrZXlz
WzJdID0geyBTZXNzaW9uSGlzdG9yeUN1cnJlbnRJbmRleEtleSgpLCBTZXNzaW9uSGlzdG9yeUVu
dHJpZXNLZXkoKSB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgY3VycmVudEluZGV4
TnVtYmVyLmdldCgpLCBlbnRyaWVzLmdldCgpIH07CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNb
Ml0gPSB7IFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5KCksIFNlc3Npb25IaXN0b3J5RW50
cmllc0tleSgpIH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgY3VycmVudElu
ZGV4TnVtYmVyLmdldCgpLCBlbnRyaWVzLmdldCgpIH07CiAKLSAgICByZXR1cm4gQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgICAgIHJldHVybiBD
RkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBXZSByZXByZXNlbnQgbm90IGhhdmluZyBhIGN1cnJlbnQgaW5kZXgg
Ynkgd3JpdGluZyBvdXQgYW4gZW1wdHkgZGljdGlvbmFyeS4KKyAgICAgICAgcmV0dXJuIENGRGlj
dGlvbmFyeUNyZWF0ZSgwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICB9CiB9CiAKIGJvb2wgV2ViQmFj
a0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKENGRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5KQogewogICAgIENGTnVtYmVyUmVmIGNmSW5kZXggPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlD
dXJyZW50SW5kZXhLZXkoKSk7Ci0gICAgaWYgKCFjZkluZGV4IHx8IENGR2V0VHlwZUlEKGNmSW5k
ZXgpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhh
dmUgYSB2YWxpZCBjdXJyZW50IGluZGV4Iik7CisgICAgaWYgKCFjZkluZGV4KSB7CisgICAgICAg
IC8vIE5vIGN1cnJlbnQgaW5kZXggbWVhbnMgdGhlIGRpY3Rpb25hcnkgcmVwcmVzZW50cyBhbiBl
bXB0eSBzZXNzaW9uLgorICAgICAgICBtX2hhc0N1cnJlbnRJbmRleCA9IGZhbHNlOworICAgICAg
ICBtX2VudHJpZXMuY2xlYXIoKTsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSAwOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChDRkdldFR5cGVJRChjZkluZGV4KSAh
PSBDRk51bWJlckdldFR5cGVJRCgpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJC
YWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlucyBhIGN1cnJl
bnQgaW5kZXggdGhhdCBpcyBub3QgYSBDRk51bWJlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xMTgsMTIgKzE0MCwyMCBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6
cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAog
ICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkg
cmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGludGVnZXIgY3VycmVudCBpbmRl
eCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCisgICAgLy8gQSBjdXJy
ZW50IGluZGV4IGxvd2VyIHRoYW4gLTEgaXMgbmV2ZXIgdmFsaWQsIG5vdCBldmVuIGluIHRoZSBs
ZWdhY3kgY2FzZS4KICAgICBpZiAoY3VycmVudENGSW5kZXggPCAtMSkgewotICAgICAgICBMT0co
U2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRp
b24gY29udGFpbnMgYSBuZWdhdGl2ZSBjdXJyZW50IGluZGV4IHRoYXQgaXMgYm9ndXMgKCVsZCki
LCBjdXJyZW50Q0ZJbmRleCk7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9y
d2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlucyBhIGJvZ3VzIG5lZ2F0
aXZlIGN1cnJlbnQgaW5kZXggKCVsZCkiLCBjdXJyZW50Q0ZJbmRleCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKKyAgICAvLyBUaGVyZSBpcyBhbiBpbmRleCBzdG9yZWQgaW4gdGhl
IGRpY3Rpb25hcnksIHNvIHdlIGhhdmUgYSBjdXJyZW50IGluZGV4LgorICAgIGJvb2wgaGFzQ3Vy
cmVudEluZGV4ID0gdHJ1ZTsKKworICAgIC8vIEV4Y2VwdCBmb3IgdGhlIGxlZ2FjeSBjYXNlIHdo
ZXJlIHdlIHVzZWQgdG8gc3RvcmUgLTEgYXMgdGhlICJOb0N1cnJlbnRJbmRleCIgaW5kZXgsIHdo
aWNoIHdlIHNob3VsZCBhbHNvIGhhbmRsZSBoZXJlLgorICAgIGlmIChjdXJyZW50Q0ZJbmRleCA9
PSAtMSkKKyAgICAgICAgaGFzQ3VycmVudEluZGV4ID0gZmFsc2U7CisKICAgICBDRkFycmF5UmVm
IGNmRW50cmllcyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnks
IFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpKTsKICAgICBpZiAoIWNmRW50cmllcyB8fCBDRkdl
dFR5cGVJRChjZkVudHJpZXMpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkgewogICAgICAgICBMT0co
U2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRp
b24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgZW50cmllcyIpOwpAQCAtMTMxLDIwICsx
NjEsMTcgQEAgYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAgICB9CiAKICAgICBDRkluZGV4IHNp
emUgPSBDRkFycmF5R2V0Q291bnQoY2ZFbnRyaWVzKTsKLSAgICBpZiAoY3VycmVudENGSW5kZXgg
PCAtMSB8fCBjdXJyZW50Q0ZJbmRleCA+PSBzaXplICkgeworCisgICAgaWYgKGhhc0N1cnJlbnRJ
bmRleCAmJiBjdXJyZW50Q0ZJbmRleCA+PSBzaXplKSB7CiAgICAgICAgIExPRyhTZXNzaW9uU3Rh
dGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlu
cyBhbiBpbnZhbGlkIGN1cnJlbnQgaW5kZXggKCVsZCkgZm9yIHRoZSBudW1iZXIgb2YgZW50cmll
cyAoJWxkKSIsIGN1cnJlbnRDRkluZGV4LCBzaXplKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIC8vIEZJWE1FOiBXZSdyZSByZWx5aW5nIG9uIGN1cnJlbnRJbmRleCA9PSAt
MSB0byBtZWFuIHRoZSBleGFjdCBzYW1lIHRoaW5nIGFzIE5vQ3VycmVudEl0ZW1JbmRleCAoVUlO
VF9NQVgpIGluIHVuc2lnbmVkIGZvcm0uCi0gICAgLy8gVGhhdCBzZWVtcyBpbXBsaWNpdCBhbmQg
ZnJhZ2lsZSBhbmQgd2Ugc2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5IG9mIHJlcHJlc2VudGluZyB0
aGUgTm9DdXJyZW50SXRlbUluZGV4IGNhc2UuCi0gICAgdWludDMyX3QgY3VycmVudEluZGV4ID0g
Y3VycmVudENGSW5kZXggPT0gLTEgPyBOb0N1cnJlbnRJdGVtSW5kZXggOiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oY3VycmVudENGSW5kZXgpOwotCi0gICAgaWYgKGN1cnJlbnRJbmRleCA9PSBOb0N1
cnJlbnRJdGVtSW5kZXggJiYgc2l6ZSkgeworICAgIGlmICghaGFzQ3VycmVudEluZGV4ICYmIHNp
emUpIHsKICAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0
aW9uYXJ5IHJlcHJlc2VudGF0aW9uIHNheXMgdGhlcmUgaXMgbm8gY3VycmVudCBpdGVtIGluZGV4
LCBidXQgdGhlcmUgaXMgYSBsaXN0IG9mICVsZCBlbnRyaWVzIC0gdGhpcyBpcyBib2d1cyIsIHNp
emUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgQmFja0Zvcndh
cmRMaXN0SXRlbVZlY3RvciBuZXdFbnRyaWVzOwogICAgIG5ld0VudHJpZXMucmVzZXJ2ZUNhcGFj
aXR5KHNpemUpOwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAt
MTUzLDcgKzE4MCw3IEBAIGJvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGlj
dGlvbmFyeVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZiBkCiAgICAgICAgICAgICBMT0co
U2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGVudHJ5IGFycmF5IGRvZXMgbm90IGhh
dmUgYSB2YWxpZCBlbnRyeSBhdCBpbmRleCAlaSIsIChpbnQpaSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQ0ZTdHJpbmdSZWYgZW50
cnlVUkwgPSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50cnlEaWN0aW9uYXJ5
LCBTZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5KCkpOwogICAgICAgICBpZiAoIWVudHJ5VVJMIHx8
IENGR2V0VHlwZUlEKGVudHJ5VVJMKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7CiAgICAgICAg
ICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGVudHJ5IGF0IGluZGV4
ICVpIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBVUkwiLCAoaW50KWkpOwpAQCAtMTc3LDE1ICsyMDQs
MTUgQEAgYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVw
cmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAgICAgICAgICAgIExPRyhTZXNzaW9uU3Rh
dGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9lcyBub3QgaGF2ZSBi
YWNrL2ZvcndhcmQgZGF0YSIsIChpbnQpaSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbmV3RW50cmllcy5hcHBlbmQoV2ViQmFja0Zv
cndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJMLCBlbnRyeVVSTCwgZW50cnlUaXRsZSwg
Q0ZEYXRhR2V0Qnl0ZVB0cihiYWNrRm9yd2FyZERhdGEpLCBDRkRhdGFHZXRMZW5ndGgoYmFja0Zv
cndhcmREYXRhKSwgZ2VuZXJhdGVXZWJCYWNrRm9yd2FyZEl0ZW1JRCgpKSk7CiAgICAgfQotICAg
IAorCisgICAgbV9oYXNDdXJyZW50SW5kZXggPSBoYXNDdXJyZW50SW5kZXg7CiAgICAgbV9lbnRy
aWVzID0gbmV3RW50cmllczsKLSAgICBtX2N1cnJlbnQgPSBjdXJyZW50SW5kZXg7Ci0gICAgLy8g
UGVyZm9ybSBhIHNhbml0eSBjaGVjazogaW4gY2FzZSB3ZSdyZSBvdXQgb2YgcmFuZ2UsIHdlIHJl
c2V0LgotICAgIGlmIChtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4ICYmIG1fY3VycmVu
dCA+PSBuZXdFbnRyaWVzLnNpemUoKSkKLSAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRl
bUluZGV4OworICAgIG1fY3VycmVudEluZGV4ID0gbV9oYXNDdXJyZW50SW5kZXggPyBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oY3VycmVudENGSW5kZXgpIDogMDsKKworICAgIEFTU0VSVCghbV9oYXND
dXJyZW50SW5kZXggfHwgbV9jdXJyZW50SW5kZXggIDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144103</attachid>
            <date>2012-05-25 11:10:22 -0700</date>
            <delta_ts>2012-05-25 13:16:26 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15883</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1ZTA5ZmEyLi5jOGQ4MmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTItMDUtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzQxOAorICAgICAg
ICBXZWJCYWNrRm9yd2FyZExpc3Qgc2hvdWxkIHNlcGFyYXRlICJoYXMgbm8gY3VycmVudCBpbmRl
eCIgZnJvbSB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgY3VycmVudCBpbmRleAorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxzbyByZW5hbWVzICJtX2N1cnJlbnQiIHRvICJtX2N1cnJlbnRJbmRleCIg
Zm9yIGNsYXJpdHkgYW5kIHN5bW1ldHJ5IHdpdGgKKyAgICAgICAgb3RoZXIgdmFyaWFibGUgbmFt
ZXMgdGhhdCByZWZlcmVuY2UgImluZGV4IiwKKworICAgICAgICBJdCBhbHNvIHJlbW92ZXMgdGhl
IG1fY2xvc2VkIGFuZCBtX2VuYWJsZWQgZmxhZ3Mgd2hpY2ggd2VyZSBuZXZlciBhY3R1YWxseSB1
c2VkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJh
Y2tGb3J3YXJkTGlzdDo6V2ViQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0Zvcndh
cmRMaXN0Ojpnb1RvSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6
Y3VycmVudEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0SW5kZXgpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0Q291bnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0Q291bnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tMaXN0QXNJbW11dGFibGVBcnJheVdp
dGhMaW1pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Zm9yd2FyZExp
c3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0Zv
cndhcmRMaXN0OjpjbGVhcik6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRM
aXN0Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3VycmVudEluZGV4
KToKKyAgICAgICAgKFdlYkJhY2tGb3J3YXJkTGlzdCk6CisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Y2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9y
d2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uKToKKwogMjAxMi0wNS0yNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IHRoZSBidWlsZCBhZnRlciBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8xMTg0NDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJC
YWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKaW5kZXggOWZmYzlhMi4uZjY3Yjk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTM0LDEwICszNCw5IEBAIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0Q2FwYWNpdHkgPSAxMDA7CiAKIFdlYkJhY2tGb3J3
YXJkTGlzdDo6V2ViQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICA6IG1f
cGFnZShwYWdlKQotICAgICwgbV9jdXJyZW50KE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICAsIG1f
aGFzQ3VycmVudEluZGV4KGZhbHNlKQorICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAsIG1f
Y2FwYWNpdHkoRGVmYXVsdENhcGFjaXR5KQotICAgICwgbV9jbG9zZWQodHJ1ZSkKLSAgICAsIG1f
ZW5hYmxlZCh0cnVlKQogewogICAgIEFTU0VSVChtX3BhZ2UpOwogfQpAQCAtNTksMTYgKzU4LDE2
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpwYWdlQ2xvc2VkKCkKIAogdm9pZCBXZWJCYWNr
Rm9yd2FyZExpc3Q6OmFkZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogbmV3SXRlbSkKIHsK
LSAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQg
PCBtX2VudHJpZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1f
Y3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBpZiAoIW1fY2FwYWNpdHkg
fHwgIW1fZW5hYmxlZCB8fCAhbmV3SXRlbSB8fCAhbV9wYWdlKQorICAgIGlmICghbV9jYXBhY2l0
eSB8fCAhbmV3SXRlbSB8fCAhbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8
UmVmUHRyPEFQSU9iamVjdD4gPiByZW1vdmVkSXRlbXM7CiAgICAgCi0gICAgaWYgKG1fY3VycmVu
dCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpIHsKKyAgICBpZiAobV9oYXNDdXJyZW50SW5kZXgpIHsK
ICAgICAgICAgLy8gVG9zcyBldmVyeXRoaW5nIGluIHRoZSBmb3J3YXJkIGxpc3QuCi0gICAgICAg
IHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1cnJlbnQgKyAxOworICAgICAgICB1bnNpZ25lZCB0
YXJnZXRTaXplID0gbV9jdXJyZW50SW5kZXggKyAxOwogICAgICAgICByZW1vdmVkSXRlbXMucmVz
ZXJ2ZUNhcGFjaXR5KG1fZW50cmllcy5zaXplKCkgLSB0YXJnZXRTaXplKTsKICAgICAgICAgd2hp
bGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJnZXRTaXplKSB7CiAgICAgICAgICAgICBtX3BhZ2Ut
PmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzLmxhc3QoKS0+aXRlbUlEKCkpOwpAQCAt
NzgsMTEgKzc3LDE0IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAKICAgICAgICAgLy8gVG9zcyB0aGUgZmlyc3QgaXRl
bSBpZiB0aGUgbGlzdCBpcyBnZXR0aW5nIHRvbyBiaWcsIGFzIGxvbmcgYXMgd2UncmUgbm90IHVz
aW5nIGl0CiAgICAgICAgIC8vIChvciBldmVuIGlmIHdlIGFyZSwgaWYgd2Ugb25seSB3YW50IDEg
ZW50cnkpLgotICAgICAgICBpZiAobV9lbnRyaWVzLnNpemUoKSA9PSBtX2NhcGFjaXR5ICYmICht
X2N1cnJlbnQgfHwgbV9jYXBhY2l0eSA9PSAxKSkgeworICAgICAgICBpZiAobV9lbnRyaWVzLnNp
emUoKSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnRJbmRleCB8fCBtX2NhcGFjaXR5ID09IDEp
KSB7CiAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVz
WzBdLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmll
c1swXS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZSgwKTsKLSAgICAg
ICAgICAgIG1fY3VycmVudC0tOworICAgICAgICAgICAgaWYgKG1fZW50cmllcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgbV9oYXNDdXJyZW50SW5kZXggPSBmYWxzZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleC0tOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5kZXgsIHdl
IHNob3VsZCBoYXZlIG5vIG90aGVyIGVudHJpZXMgYmVmb3JlIGFkZGluZyB0aGlzIG5ldyBpdGVt
LgpAQCAtOTQsMjMgKzk2LDI0IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiAgICAgICAgIG1fZW50cmllcy5jbGVhcigp
OwogICAgIH0KICAgICAKLSAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCkK
LSAgICAgICAgbV9jdXJyZW50ID0gMDsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudCsrOwor
ICAgIGlmICghbV9oYXNDdXJyZW50SW5kZXgpIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSAw
OworICAgICAgICBtX2hhc0N1cnJlbnRJbmRleCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY3VycmVudEluZGV4Kys7CiAKICAgICAvLyBtX2N1cnJlbnQgbmV2ZXIgYmUgcG9pbnRpbmcg
bW9yZSB0aGFuIDEgcGFzdCB0aGUgZW5kIG9mIHRoZSBlbnRyaWVzIFZlY3Rvci4KICAgICAvLyBJ
ZiBpdCBpcywgc29tZXRoaW5nIGhhcyBnb25lIHdyb25nIGFuZCB3ZSBzaG91bGQgbm90IHRyeSB0
byBpbnNlcnQgdGhlIG5ldyBpdGVtLgotICAgIEFTU0VSVChtX2N1cnJlbnQgPD0gbV9lbnRyaWVz
LnNpemUoKSk7Ci0gICAgaWYgKG1fY3VycmVudCA8PSBtX2VudHJpZXMuc2l6ZSgpKQotICAgICAg
ICBtX2VudHJpZXMuaW5zZXJ0KG1fY3VycmVudCwgbmV3SXRlbSk7CisgICAgQVNTRVJUKG1fY3Vy
cmVudEluZGV4IDw9IG1fZW50cmllcy5zaXplKCkpOworICAgIGlmIChtX2N1cnJlbnRJbmRleCA8
PSBtX2VudHJpZXMuc2l6ZSgpKQorICAgICAgICBtX2VudHJpZXMuaW5zZXJ0KG1fY3VycmVudElu
ZGV4LCBuZXdJdGVtKTsKIAogICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG5l
d0l0ZW0sICZyZW1vdmVkSXRlbXMpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Z29U
b0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBBU1NFUlQobV9jdXJy
ZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9l
bnRyaWVzLnNpemUoKSk7CiAKICAgICBpZiAoIW1fZW50cmllcy5zaXplKCkgfHwgIWl0ZW0pCiAg
ICAgICAgIHJldHVybjsKQEAgLTEyMSw3ICsxMjQsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dDo6Z29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBpZiAoaW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKSB7Ci0gICAgICAg
IG1fY3VycmVudCA9IGluZGV4OworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGluZGV4OwogICAg
ICAgICBpZiAobV9wYWdlKQogICAgICAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2Fy
ZExpc3QoMCwgMCk7CiAgICAgfQpAQCAtMTI5LDM2ICsxMzIsMzYgQEAgdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3Q6OmdvVG9JdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCiAKIFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3VycmVudEl0ZW0oKQogewot
ICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8
IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9j
dXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIGlmIChtX2N1cnJlbnQgIT0g
Tm9DdXJyZW50SXRlbUluZGV4KQotICAgICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3VycmVudF0u
Z2V0KCk7CisgICAgaWYgKG1faGFzQ3VycmVudEluZGV4KQorICAgICAgICByZXR1cm4gbV9lbnRy
aWVzW21fY3VycmVudEluZGV4XS5nZXQoKTsKICAgICByZXR1cm4gMDsKIH0KIAogV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrSXRlbSgpCiB7Ci0gICAgQVNT
RVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRy
aWVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJ
bmRleCA8IG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgaWYgKG1fY3VycmVudCAmJiBtX2N1cnJl
bnQgIT0gTm9DdXJyZW50SXRlbUluZGV4KQotICAgICAgICByZXR1cm4gbV9lbnRyaWVzW21fY3Vy
cmVudCAtIDFdLmdldCgpOworICAgIGlmIChtX2N1cnJlbnRJbmRleCAmJiBtX2hhc0N1cnJlbnRJ
bmRleCkKKyAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnRJbmRleCAtIDFdLmdldCgp
OwogICAgIHJldHVybiAwOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9y
d2FyZExpc3Q6OmZvcndhcmRJdGVtKCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3Vy
cmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBtX2VudHJpZXMuc2l6ZSgpKTsKKyAgICBBU1NF
UlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUo
KSk7CiAKLSAgICBpZiAobV9lbnRyaWVzLnNpemUoKSAmJiBtX2N1cnJlbnQgPCBtX2VudHJpZXMu
c2l6ZSgpIC0gMSkKLSAgICAgICAgcmV0dXJuIG1fZW50cmllc1ttX2N1cnJlbnQgKyAxXS5nZXQo
KTsKKyAgICBpZiAobV9lbnRyaWVzLnNpemUoKSAmJiBtX2hhc0N1cnJlbnRJbmRleCAmJiBtX2N1
cnJlbnRJbmRleCA8IG1fZW50cmllcy5zaXplKCkgLSAxKQorICAgICAgICByZXR1cm4gbV9lbnRy
aWVzW21fY3VycmVudEluZGV4ICsgMV0uZ2V0KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdDo6aXRlbUF0SW5kZXgoaW50IGlu
ZGV4KQogewotICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1f
Y3VycmVudCA8IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5k
ZXggfHwgbV9jdXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIGlmIChtX2N1
cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4KQorICAgIGlmICghbV9oYXNDdXJyZW50SW5kZXgp
CiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0
IGRvaW5nIG1hdGggb24gaW5kZXggdG8gYXZvaWQgb3ZlcmZsb3cuCkBAIC0xNjgsMjYgKzE3MSwy
NiBAQCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6Oml0ZW1BdElu
ZGV4KGludCBpbmRleCkKICAgICBpZiAoaW5kZXggPiBmb3J3YXJkTGlzdENvdW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICByZXR1cm4gbV9lbnRyaWVzW2luZGV4ICsgbV9j
dXJyZW50XS5nZXQoKTsKKyAgICByZXR1cm4gbV9lbnRyaWVzW2luZGV4ICsgbV9jdXJyZW50SW5k
ZXhdLmdldCgpOwogfQogCiBpbnQgV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdENvdW50KCkK
IHsKLSAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJl
bnQgPCBtX2VudHJpZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8
IG1fY3VycmVudEluZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJy
ZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCA/IDAgOiBtX2N1cnJlbnQ7CisgICAgcmV0dXJuICFt
X2hhc0N1cnJlbnRJbmRleCA/IDAgOiBtX2N1cnJlbnRJbmRleDsKIH0KIAogaW50IFdlYkJhY2tG
b3J3YXJkTGlzdDo6Zm9yd2FyZExpc3RDb3VudCgpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudCA9
PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7Cisg
ICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmll
cy5zaXplKCkpOwogCi0gICAgcmV0dXJuIG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXgg
PyAwIDogc3RhdGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKSAtIChtX2N1cnJlbnQgKyAx
KTsKKyAgICByZXR1cm4gIW1faGFzQ3VycmVudEluZGV4ID8gMCA6IHN0YXRpY19jYXN0PGludD4o
bV9lbnRyaWVzLnNpemUoKSkgLSAobV9jdXJyZW50SW5kZXggKyAxKTsKIH0KIAogUGFzc1JlZlB0
cjxJbW11dGFibGVBcnJheT4gV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrTGlzdEFzSW1tdXRhYmxl
QXJyYXlXaXRoTGltaXQodW5zaWduZWQgbGltaXQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudCA9
PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7Cisg
ICAgQVNTRVJUKCFtX2hhc0N1cnJlbnRJbmRleCB8fCBtX2N1cnJlbnRJbmRleCA8IG1fZW50cmll
cy5zaXplKCkpOwogCiAgICAgdW5zaWduZWQgYmFja0xpc3RTaXplID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGJhY2tMaXN0Q291bnQoKSk7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWluKGJh
Y2tMaXN0U2l6ZSwgbGltaXQpOwpAQCAtMjA2LDcgKzIwOSw3IEBAIFBhc3NSZWZQdHI8SW1tdXRh
YmxlQXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6YmFja0xpc3RBc0ltbXV0YWJsZUFycmF5V2l0
aExpbWl0CiAKIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYkJhY2tGb3J3YXJkTGlzdDo6
Zm9yd2FyZExpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVkIGxpbWl0KQogewot
ICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8
IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9j
dXJyZW50SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1pbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZm9yd2FyZExpc3RDb3VudCgpKSwgbGltaXQp
OwogICAgIGlmICghc2l6ZSkKQEAgLTIxNSw5ICsyMTgsOSBAQCBQYXNzUmVmUHRyPEltbXV0YWJs
ZUFycmF5PiBXZWJCYWNrRm9yd2FyZExpc3Q6OmZvcndhcmRMaXN0QXNJbW11dGFibGVBcnJheVdp
dGhMaQogICAgIFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHZlY3RvcjsKICAgICB2ZWN0b3Iu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKIAotICAgIHVuc2lnbmVkIGxhc3QgPSBtX2N1
cnJlbnQgKyBzaXplOworICAgIHVuc2lnbmVkIGxhc3QgPSBtX2N1cnJlbnRJbmRleCArIHNpemU7
CiAgICAgQVNTRVJUKGxhc3QgPCBtX2VudHJpZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2N1cnJlbnQgKyAxOyBpIDw9IGxhc3Q7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2N1cnJlbnRJbmRleCArIDE7IGkgPD0gbGFzdDsgKytpKQogICAgICAgICB2ZWN0b3IudW5j
aGVja2VkQXBwZW5kKG1fZW50cmllc1tpXS5nZXQoKSk7CiAKICAgICByZXR1cm4gSW1tdXRhYmxl
QXJyYXk6OmFkb3B0KHZlY3Rvcik7CkBAIC0yMjUsNyArMjI4LDcgQEAgUGFzc1JlZlB0cjxJbW11
dGFibGVBcnJheT4gV2ViQmFja0ZvcndhcmRMaXN0Ojpmb3J3YXJkTGlzdEFzSW1tdXRhYmxlQXJy
YXlXaXRoTGkKIAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKIHsKLSAgICBBU1NF
UlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBtX2VudHJp
ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1faGFzQ3VycmVudEluZGV4IHx8IG1fY3VycmVudElu
ZGV4IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fZW50cmllcy5z
aXplKCk7CiAgICAgaWYgKHNpemUgPD0gMSkKQEAgLTI0MywxOCArMjQ2LDE5IEBAIHZvaWQgV2Vi
QmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4g
cmVtb3ZlZEl0ZW1zOwogICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVz
LnNpemUoKSAtIDEpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChpICE9IG1fY3VycmVudCkKKyAgICAgICAgaWYgKGkgIT0g
bV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmll
c1tpXS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIG1fY3VycmVudCA9IDA7CisgICAgbV9jdXJy
ZW50SW5kZXggPSAwOwogCiAgICAgaWYgKGN1cnJlbnRJdGVtKSB7CiAgICAgICAgIG1fZW50cmll
cy5zaHJpbmsoMSk7CiAgICAgICAgIG1fZW50cmllc1swXSA9IGN1cnJlbnRJdGVtLnJlbGVhc2Uo
KTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsKLSAgICAgICAgbV9j
dXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IDA7
CisgICAgICAgIG1faGFzQ3VycmVudEluZGV4ID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKG1f
cGFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2Fy
ZExpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuaApp
bmRleCBlYWQwZmNhLi45N2JkMmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQmFja0ZvcndhcmRMaXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkJhY2tGb3J3YXJkTGlzdC5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBj
b25zdCBCYWNrRm9yd2FyZExpc3RJdGVtVmVjdG9yJiBlbnRyaWVzKCkgY29uc3QgeyByZXR1cm4g
bV9lbnRyaWVzOyB9CiAKLSAgICB1aW50MzJfdCBjdXJyZW50SW5kZXgoKSB7IHJldHVybiBtX2N1
cnJlbnQ7IH0KKyAgICB1aW50MzJfdCBjdXJyZW50SW5kZXgoKSB7IHJldHVybiBtX2N1cnJlbnRJ
bmRleDsgfQogICAgIGludCBiYWNrTGlzdENvdW50KCk7CiAgICAgaW50IGZvcndhcmRMaXN0Q291
bnQoKTsKIApAQCAtODMsMTggKzgzLDE2IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBOb0N1cnJlbnRJdGVtSW5kZXggPSBVSU5UX01BWDsK
LQogICAgIFdlYkJhY2tGb3J3YXJkTGlzdChXZWJQYWdlUHJveHkqKTsKIAogICAgIHZpcnR1YWwg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQogCiAgICAgV2ViUGFnZVByb3h5
KiBtX3BhZ2U7CiAgICAgQmFja0ZvcndhcmRMaXN0SXRlbVZlY3RvciBtX2VudHJpZXM7Ci0gICAg
dWludDMyX3QgbV9jdXJyZW50OwotICAgIHVpbnQzMl90IG1fY2FwYWNpdHk7Ci0gICAgYm9vbCBt
X2Nsb3NlZDsKLSAgICBib29sIG1fZW5hYmxlZDsKKyAgICAKKyAgICBib29sIG1faGFzQ3VycmVu
dEluZGV4OworICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OworICAgIHVuc2lnbmVkIG1fY2Fw
YWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCmluZGV4IGY1ZWM2YTMu
LjU4OWU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNr
Rm9yd2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYkJh
Y2tGb3J3YXJkTGlzdENGLmNwcApAQCAtNTMsMTIgKzUzLDEyIEBAIERFRklORV9TVEFUSUNfR0VU
VEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9yeUVudHJ5RGF0YUtleSwgKENGU1RSKCJTZXNz
aW9uSGlzCiAKIENGRGljdGlvbmFyeVJlZiBXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGlj
dGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5U2Vzc2lvblN0
YXRlRmlsdGVyQ2FsbGJhY2sgZmlsdGVyLCB2b2lkKiBjb250ZXh0KSBjb25zdAogewotICAgIEFT
U0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50
cmllcy5zaXplKCkpOworICAgIEFTU0VSVCghbV9oYXNDdXJyZW50SW5kZXggfHwgbV9jdXJyZW50
SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKTsKIAogICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJh
eVJlZj4gZW50cmllcyhBZG9wdENGLCBDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBtX2VudHJpZXMu
c2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAKICAgICAvLyBXZSBtYXkgbmVlZCB0
byB1cGRhdGUgdGhlIGN1cnJlbnQgaW5kZXggdG8gYWNjb3VudCBmb3IgZW50cmllcyB0aGF0IGFy
ZSBmaWx0ZXJlZCBieSB0aGUgY2FsbGJhY2suCi0gICAgQ0ZJbmRleCBjdXJyZW50SW5kZXggPSBt
X2N1cnJlbnQ7CisgICAgQ0ZJbmRleCBjdXJyZW50SW5kZXggPSBtX2N1cnJlbnRJbmRleDsKIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIC8vIElmIHdlIHNvbWVob3cgZW5kZWQgdXAgd2l0aCBhIG51bGwgZW50cnkgdGhlbiB3ZSBz
aG91bGQgY29uc2lkZXIgdGhlIGRhdGEgaW52YWxpZCBhbmQgbm90IHNhdmUgc2Vzc2lvbiBoaXN0
b3J5IGF0IGFsbC4KQEAgLTY3LDcgKzY3LDcgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3
YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3gKICAg
ICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcih0b0FQ
SShtX3BhZ2UpLCBXS1BhZ2VHZXRTZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlwZSgpLCB0b1VSTFJl
ZihtX2VudHJpZXNbaV0tPm9yaWdpbmFsVVJMKCkuaW1wbCgpKSwgY29udGV4dCkpIHsKLSAgICAg
ICAgICAgIGlmIChpIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJyZW50KSkKKyAgICAgICAg
ICAgIGlmIChpIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJyZW50SW5kZXgpKQogICAgICAg
ICAgICAgICAgIGN1cnJlbnRJbmRleC0tOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KQEAgLTg5LDEyICs4OSwxMiBAQCBDRkRpY3Rpb25hcnlSZWYgV2ViQmFja0ZvcndhcmRMaXN0
OjpjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJveAogICAgICAgICAK
ICAgICAvLyBJZiBhbGwgaXRlbXMgYmVmb3JlIGFuZCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgaXRl
bSB3ZXJlIGZpbHRlcmVkIHRoZW4gY3VycmVudEluZGV4IHdpbGwgYmUgLTEuCiAgICAgLy8gQXNz
dW1pbmcgd2UgZGlkbid0IHN0YXJ0IG91dCB3aXRoIE5vQ3VycmVudEl0ZW1JbmRleCwgd2Ugc2hv
dWxkIHN0b3JlICJjdXJyZW50IiB0byBwb2ludCBhdCB0aGUgZmlyc3QgaXRlbS4KLSAgICBpZiAo
Y3VycmVudEluZGV4ID09IC0xICYmIG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXggJiYg
Q0ZBcnJheUdldENvdW50KGVudHJpZXMuZ2V0KCkpKQorICAgIGlmIChjdXJyZW50SW5kZXggPT0g
LTEgJiYgbV9oYXNDdXJyZW50SW5kZXggJiYgQ0ZBcnJheUdldENvdW50KGVudHJpZXMuZ2V0KCkp
KQogICAgICAgICBjdXJyZW50SW5kZXggPSAwOwogCiAgICAgLy8gRklYTUU6IFdlJ3JlIHJlbHlp
bmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhlIGV4YWN0IHNhbWUgdGhpbmcgYXMg
Tm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5zaWduZWQgZm9ybS4KICAgICAvLyBU
aGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3ZSBzaG91bGQgZmluZCBhIGJldHRl
ciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJdGVtSW5kZXggY2FzZS4KLSAgICBp
ZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCAhQ0ZBcnJheUdldENvdW50KGVu
dHJpZXMuZ2V0KCkpKQorICAgIGlmICghbV9oYXNDdXJyZW50SW5kZXggfHwgIUNGQXJyYXlHZXRD
b3VudChlbnRyaWVzLmdldCgpKSkKICAgICAgICAgY3VycmVudEluZGV4ID0gLTE7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGN1cnJlbnRJbmRleE51bWJlcihBZG9wdENGLCBDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJmN1cnJlbnRJbmRleCkpOwpAQCAtMTM4
LDkgKzEzOCwxMCBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rp
b25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAogCiAgICAgLy8gRklYTUU6IFdl
J3JlIHJlbHlpbmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhlIGV4YWN0IHNhbWUg
dGhpbmcgYXMgTm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5zaWduZWQgZm9ybS4K
ICAgICAvLyBUaGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3ZSBzaG91bGQgZmlu
ZCBhIGJldHRlciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJdGVtSW5kZXggY2Fz
ZS4KLSAgICB1aW50MzJfdCBjdXJyZW50SW5kZXggPSBjdXJyZW50Q0ZJbmRleCA9PSAtMSA/IE5v
Q3VycmVudEl0ZW1JbmRleCA6IHN0YXRpY19jYXN0PHVpbnQzMl90PihjdXJyZW50Q0ZJbmRleCk7
CisgICAgdWludDMyX3QgY3VycmVudEluZGV4ID0gY3VycmVudENGSW5kZXggPT0gLTEgPyAwIDog
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGN1cnJlbnRDRkluZGV4KTsKKyAgICBib29sIGhhc0N1cnJl
bnRJbmRleCA9IGN1cnJlbnRDRkluZGV4ID4gLTE7CiAKLSAgICBpZiAoY3VycmVudEluZGV4ID09
IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBzaXplKSB7CisgICAgaWYgKCFoYXNDdXJyZW50SW5kZXgg
JiYgc2l6ZSkgewogICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0
IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gc2F5cyB0aGVyZSBpcyBubyBjdXJyZW50IGl0ZW0g
aW5kZXgsIGJ1dCB0aGVyZSBpcyBhIGxpc3Qgb2YgJWxkIGVudHJpZXMgLSB0aGlzIGlzIGJvZ3Vz
Iiwgc2l6ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xODIsMTAgKzE4Mywx
MSBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXBy
ZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAogICAgIH0KICAgICAKICAgICBtX2VudHJpZXMg
PSBuZXdFbnRyaWVzOwotICAgIG1fY3VycmVudCA9IGN1cnJlbnRJbmRleDsKKyAgICBtX2hhc0N1
cnJlbnRJbmRleCA9IGhhc0N1cnJlbnRJbmRleDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IGN1cnJl
bnRJbmRleDsKICAgICAvLyBQZXJmb3JtIGEgc2FuaXR5IGNoZWNrOiBpbiBjYXNlIHdlJ3JlIG91
dCBvZiByYW5nZSwgd2UgcmVzZXQuCi0gICAgaWYgKG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVt
SW5kZXggJiYgbV9jdXJyZW50ID49IG5ld0VudHJpZXMuc2l6ZSgpKQotICAgICAgICBtX2N1cnJl
bnQgPSBOb0N1cnJlbnRJdGVtSW5kZXg7CisgICAgaWYgKG1faGFzQ3VycmVudEluZGV4ICYmIG1f
Y3VycmVudEluZGV4ID49IG5ld0VudHJpZXMuc2l6ZSgpKQorICAgICAgICBtX2hhc0N1cnJlbnRJ
bmRleCA9IGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9Cg==
</data>
<flag name="review"
          id="150838"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>