<?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>87417</bug_id>
          
          <creation_ts>2012-05-24 13:00:05 -0700</creation_ts>
          <short_desc>(Unrepro) Crashes saving session state in WebBackForwardList</short_desc>
          <delta_ts>2012-05-24 16:48:00 -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>Mac</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>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>633084</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 13:00:05 -0700</bug_when>
    <thetext>(Unrepro) Crashes saving session state in WebBackForwardList

We&apos;ve seen crashes here:
 1 com.apple.WebKit2  WebKit::WebURL::create(WTF::String const&amp;) 
 2 com.apple.WebKit2  WebKit::WebBackForwardList::createCFDictionaryRepresentation(bool (*)(OpaqueWKPage const*, OpaqueWKString const*, void const*, void*), void*) const
 3 com.apple.WebKit2  WebKit::WebPageProxy::sessionStateData(bool (*)(OpaqueWKPage const*, OpaqueWKString const*, void const*, void*), void*) const
 4 com.apple.WebKit2  WKPageCopySessionState

Unfortunately we don&apos;t know how to reproduce it.

Digging in to crash logs and disassembly it is clear that one of the entries in WebBackForwardList::m_entries is null.

When looking at the current code it&apos;s clear there&apos;s a few safeguards we can take to avoiding writing bogus sessions out to disk and to avoid adding a bogus new item to the back/forward list.

In radar as &lt;rdar://problem/10090764&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633088</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 13:02:47 -0700</bug_when>
    <thetext>Also filed https://bugs.webkit.org/show_bug.cgi?id=87418 to track the greater job of revamping the whole class as a separate task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633107</commentid>
    <comment_count>2</comment_count>
      <attachid>143876</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 13:20:27 -0700</bug_when>
    <thetext>Created attachment 143876
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633113</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-24 13:23:11 -0700</bug_when>
    <thetext>Attachment 143876 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/WebBackForwardList.cpp:64:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633122</commentid>
    <comment_count>4</comment_count>
      <attachid>143880</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 13:29:25 -0700</bug_when>
    <thetext>Created attachment 143880
Patch v2 - Now with more style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633229</commentid>
    <comment_count>5</comment_count>
      <attachid>143894</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 14:31:26 -0700</bug_when>
    <thetext>Created attachment 143894
Patch v3 - Remove an unneeded ASSERT and add one addition currentIndex safeguard when writing to disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633236</commentid>
    <comment_count>6</comment_count>
      <attachid>143897</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 14:33:50 -0700</bug_when>
    <thetext>Created attachment 143897
Patch v4 - Hopefully last iteration - remove some unnecessary if (m_page) checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633259</commentid>
    <comment_count>7</comment_count>
      <attachid>143897</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-24 14:52:57 -0700</bug_when>
    <thetext>Comment on attachment 143897
Patch v4 - Hopefully last iteration - remove some unnecessary if (m_page) checks.

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

I’m OK with this as is, but it might be worth putting together a patch that is even more conservative and doesn’t change things that don’t need to change. We were going to follow up with a patch that makes a bigger impact.

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:102
&gt; +    m_entries.insert(m_current, newItem);

Where’s the guarantee that m_current is &lt;= m_entries.size()? Wasn’t that one of the things we were worried about? I thought we were going to put a check for that close to here to make us safer against logic mistakes.

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:-150
&gt; -    // Do range checks without doing math on index to avoid overflow.

I like that comment. Why remove it?

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:129
&gt; +    uint32_t currentIndex = currentCFIndex == -1 ? NoCurrentItemIndex : currentCFIndex;

This can chop off currentCFIndex, which might be a large number that won’t fit in a uint32_t. Maybe better to do this after checking currentCFIndex against the size?

&gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:187
&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; +
&gt; +    ASSERT(m_current == NoCurrentItemIndex || m_current &lt; m_entries.size());

I agree with this change, but perhaps it can be left to later. Not sure it helps prevent the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633335</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 16:13:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 143897 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143897&amp;action=review
&gt; 
&gt; I’m OK with this as is, but it might be worth putting together a patch that is even more conservative and doesn’t change things that don’t need to change. We were going to follow up with a patch that makes a bigger impact.

With the mysterious nature of the bug and the intense sleuthing we&apos;ve done in to it, I feel like I can see potential value in almost everything included here from the original proposed patch.  Except for the sanity check that your last comment is about.

&gt; &gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:102
&gt; &gt; +    m_entries.insert(m_current, newItem);
&gt; 
&gt; Where’s the guarantee that m_current is &lt;= m_entries.size()? Wasn’t that one of the things we were worried about? I thought we were going to put a check for that close to here to make us safer against logic mistakes.

ACK - Accidentally got rid of it while pruning down the original patch you&apos;d seen.  I&apos;ve made it:

    // m_current never be pointing more than 1 past the end of the entries Vector.
    // If it is, something has gone wrong and we should not try to insert the new item.
    ASSERT(m_current &lt;= m_entries.size());
    if (m_current &lt;= m_entries.size())
        m_entries.insert(m_current, newItem);

&gt; &gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:-150
&gt; &gt; -    // Do range checks without doing math on index to avoid overflow.
&gt; 
&gt; I like that comment. Why remove it?

Restored.

&gt; &gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:129
&gt; &gt; +    uint32_t currentIndex = currentCFIndex == -1 ? NoCurrentItemIndex : currentCFIndex;
&gt; 
&gt; This can chop off currentCFIndex, which might be a large number that won’t fit in a uint32_t. Maybe better to do this after checking currentCFIndex against the size?

Done.

&gt; &gt; Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:187
&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; +
&gt; &gt; +    ASSERT(m_current == NoCurrentItemIndex || m_current &lt; m_entries.size());
&gt; 
&gt; I agree with this change, but perhaps it can be left to later. Not sure it helps prevent the bug.

The sanity check really was worthless, but yes it can wait until later.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633338</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 16:19:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/118441</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633371</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-05-24 16:48:00 -0700</bug_when>
    <thetext>Required a followup http://trac.webkit.org/changeset/118443 to fix the build with super strict warnings.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143876</attachid>
            <date>2012-05-24 13:20:27 -0700</date>
            <delta_ts>2012-05-24 13:29:25 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11096</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzOGIyMWQzLi44MjBmMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDUtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMDA5MDc2ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzQxNworICAgICAgICAoVW5yZXBybykgQ3Jhc2hlcyBzYXZpbmcg
c2Vzc2lvbiBzdGF0ZSBpbiBXZWJCYWNrRm9yd2FyZExpc3QKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOiBO
dWxsIGNoZWNrIHRoZSBwcm9wb3NlZCBpdGVtIGFuZCBhbHNvIG1fcGFnZSwgdG8gbWFrZQorICAg
ICAgICAgIHN1cmUgdGhlIHBhZ2UgaGFzbid0IGJlZW4gY2xvc2VkIG1ha2luZyB0aGlzIGxpc3Qg
aW5hY3RpdmUuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIGNsZWFyaW5nIHRo
ZSBjdXJyZW50IGVudHJpZXMgb3V0IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4K
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleCk6IEVhcmx5
IG51bGwgcmV0dXJuIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW5kZXguCisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOiBEb24ndCBwdXQgdGhlIGN1cnJlbnQgaXRl
bSBiYWNrIGluIHRoZSBhcnJheSBpZiB0aGVyZSB3YXMKKyAgICAgICAgICBubyBjdXJyZW50IGl0
ZW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKTogRG9uJ3QgY3JlYXRlIGEgbWVhbmluZ2xlc3MgV2ViVVJMLgorICAgICAg
ICAgIERvbid0IHN1Y2Nlc3NmdWxseSByZXR1cm4gYSBkaWN0aW9uYXJ5IGlmIGFueSBvZiB0aGUg
ZW50cmllcyB3ZXJlIG51bGwuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIHZh
bGlkYXRpbmcgdGhlIGN1cnJlbnQgaW5kZXggd2UgcGxhbiB0byByZXR1cm4gaW4gdGhlIGRpY3Rp
b25hcnkuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21D
RkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IE1vcmUgYWdncmVzc2l2ZWx5IHZhbGlkYXRlIHRo
ZQorICAgICAgICAgIGN1cnJlbnQgaW5kZXggcmVhZCBmcm9tIGRpc2suIFJlcGxhY2UgYSBtZWFu
aW5nbGVzcyBzYW5pdHkgY2hlY2sgd2l0aCBvdXIgdHlwaWNhbCBBU1NFUlQuCisKIDIwMTItMDUt
MjQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGb250IEJv
b3N0aW5nOiBBZGQgY29tcGlsZSBmbGFnIGFuZCBydW50aW1lIHNldHRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggNWM1NjdiNS4u
MmEwNjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9y
d2FyZExpc3QoV2ViUGFnZVByb3h5KiBwYWdlKQogICAgICwgbV9jbG9zZWQodHJ1ZSkKICAgICAs
IG1fZW5hYmxlZCh0cnVlKQogewotICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRl
bUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVChtX3Bh
Z2UpOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2FyZExpc3QoKQpAQCAt
NjEsNDAgKzYxLDQ5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1
cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBp
ZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCisgICAgaWYgKG1fY2FwYWNpdHkgPT0g
MCB8fCAhbV9lbmFibGVkIHx8ICFuZXdJdGVtIHx8ICFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHJlbW92ZWRJdGVtczsKICAgICAKLSAg
ICAvLyBUb3NzIGFueXRoaW5nIGluIHRoZSBmb3J3YXJkIGxpc3QgICAgCiAgICAgaWYgKG1fY3Vy
cmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXgpIHsKKyAgICAgICAgLy8gVG9zcyBldmVyeXRoaW5n
IGluIHRoZSBmb3J3YXJkIGxpc3QuCiAgICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBtX2N1
cnJlbnQgKyAxOwogICAgICAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmll
cy5zaXplKCkgLSB0YXJnZXRTaXplKTsKICAgICAgICAgd2hpbGUgKG1fZW50cmllcy5zaXplKCkg
PiB0YXJnZXRTaXplKSB7Ci0gICAgICAgICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAgICAg
IG1fcGFnZS0+YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXMubGFzdCgpLT5pdGVtSUQo
KSk7CisgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVz
Lmxhc3QoKS0+aXRlbUlEKCkpOwogICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChtX2Vu
dHJpZXMubGFzdCgpLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFz
dCgpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gVG9zcyB0aGUgZmlyc3QgaXRlbSBpZiB0
aGUgbGlzdCBpcyBnZXR0aW5nIHRvbyBiaWcsIGFzIGxvbmcgYXMgd2UncmUgbm90IHVzaW5nIGl0
Ci0gICAgLy8gKG9yIGV2ZW4gaWYgd2UgYXJlLCBpZiB3ZSBvbmx5IHdhbnQgMSBlbnRyeSkuCi0g
ICAgaWYgKG1fZW50cmllcy5zaXplKCkgPT0gbV9jYXBhY2l0eSAmJiAobV9jdXJyZW50ICE9IDAg
fHwgbV9jYXBhY2l0eSA9PSAxKSkgewotICAgICAgICBpZiAobV9wYWdlKQotICAgICAgICAgICAg
bV9wYWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllc1swXS0+aXRlbUlEKCkpOwot
ICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1swXS5yZWxlYXNlKCkpOwotICAg
ICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwotICAgICAgICBtX2N1cnJlbnQtLTsKKyAgICAgICAg
Ly8gVG9zcyB0aGUgZmlyc3QgaXRlbSBpZiB0aGUgbGlzdCBpcyBnZXR0aW5nIHRvbyBiaWcsIGFz
IGxvbmcgYXMgd2UncmUgbm90IHVzaW5nIGl0CisgICAgICAgIC8vIChvciBldmVuIGlmIHdlIGFy
ZSwgaWYgd2Ugb25seSB3YW50IDEgZW50cnkpLgorICAgICAgICBpZiAobV9lbnRyaWVzLnNpemUo
KSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnQgfHwgbV9jYXBhY2l0eSA9PSAxKSkgeworICAg
ICAgICAgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgICAgICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJk
UmVtb3ZlZEl0ZW0obV9lbnRyaWVzWzBdLT5pdGVtSUQoKSk7CisgICAgICAgICAgICByZW1vdmVk
SXRlbXMuYXBwZW5kKG1fZW50cmllc1swXS5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9lbnRy
aWVzLnJlbW92ZSgwKTsKKyAgICAgICAgICAgIG1fY3VycmVudC0tOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5kZXgsIHdl
IHNob3VsZCBoYXZlIG5vIG90aGVyIGVudHJpZXMgYmVmb3JlIGFkZGluZyB0aGlzIG5ldyBpdGVt
LgorICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBtX3BhZ2UtPmJhY2tG
b3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzW2ldLT5pdGVtSUQoKSk7CisgICAgICAgICAgICBy
ZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1tpXS5yZWxlYXNlKCkpOworICAgICAgICB9Cisg
ICAgICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgIH0KKyAgICAKKyAgICBpZiAobV9jdXJyZW50
ID09IE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICAgICAgbV9jdXJyZW50ID0gMDsKKyAgICBlbHNl
CisgICAgICAgIG1fY3VycmVudCsrOwogCi0gICAgbV9lbnRyaWVzLmluc2VydChtX2N1cnJlbnQg
KyAxLCBuZXdJdGVtKTsKLSAgICBtX2N1cnJlbnQrKzsKKyAgICBtX2VudHJpZXMuaW5zZXJ0KG1f
Y3VycmVudCwgbmV3SXRlbSk7CiAKICAgICBpZiAobV9wYWdlKQogICAgICAgICBtX3BhZ2UtPmRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdChuZXdJdGVtLCAmcmVtb3ZlZEl0ZW1zKTsKLQotICAgIEFT
U0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50
cmllcy5zaXplKCkpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Z29Ub0l0ZW0oV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKQEAgLTE0Nyw4ICsxNTYsMTAgQEAgV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgp
CiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJy
ZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2l0aG91
dCBkb2luZyBtYXRoIG9uIGluZGV4IHRvIGF2b2lkIG92ZXJmbG93LgotICAgIGlmIChpbmRleCA8
IC1zdGF0aWNfY2FzdDxpbnQ+KG1fY3VycmVudCkpCisgICAgaWYgKG1fY3VycmVudCA9PSBOb0N1
cnJlbnRJdGVtSW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChpbmRleCA8
IC1iYWNrTGlzdENvdW50KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGlmIChpbmRl
eCA+IGZvcndhcmRMaXN0Q291bnQoKSkKQEAgLTIzMiwxMiArMjQzLDE3IEBAIHZvaWQgV2ViQmFj
a0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgIGlmIChpICE9IG1fY3VycmVudCkKICAgICAg
ICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2UoKSk7CiAgICAg
fQotICAgIAotICAgIG1fZW50cmllcy5zaHJpbmsoMSk7Ci0gICAgbV9lbnRyaWVzWzBdID0gY3Vy
cmVudEl0ZW0ucmVsZWFzZSgpOwogCiAgICAgbV9jdXJyZW50ID0gMDsKIAorICAgIGlmIChjdXJy
ZW50SXRlbSkgeworICAgICAgICBtX2VudHJpZXMuc2hyaW5rKDEpOworICAgICAgICBtX2VudHJp
ZXNbMF0gPSBjdXJyZW50SXRlbS5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CisgICAgICAgIG1fY3VycmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsK
KyAgICB9CisKICAgICBpZiAobV9wYWdlKQogICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tG
b3J3YXJkTGlzdCgwLCAmcmVtb3ZlZEl0ZW1zKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCmluZGV4IDcyYzM2MTcuLjM4
Y2EzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYkJhY2tG
b3J3YXJkTGlzdENGLmNwcApAQCAtNTgsMTAgKzU4LDE0IEBAIENGRGljdGlvbmFyeVJlZiBXZWJC
YWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQ
cm94CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBlbnRyaWVzKEFkb3B0Q0YsIENG
QXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fZW50cmllcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxs
QmFja3MpKTsKIAogICAgIC8vIFdlIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBpbmRl
eCB0byBhY2NvdW50IGZvciBlbnRyaWVzIHRoYXQgYXJlIGZpbHRlcmVkIGJ5IHRoZSBjYWxsYmFj
ay4KLSAgICBpbnQgY3VycmVudEluZGV4ID0gbV9jdXJyZW50OworICAgIENGSW5kZXggY3VycmVu
dEluZGV4ID0gbV9jdXJyZW50OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJp
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFdlYlVSTD4gd2ViVVJMID0gV2ViVVJM
OjpjcmVhdGUobV9lbnRyaWVzW2ldLT51cmwoKSk7CisgICAgICAgIC8vIElmIHdlIHNvbWVob3cg
ZW5kZWQgdXAgd2l0aCBhIG51bGwgZW50cnkgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIGRh
dGEgaW52YWxpZCBhbmQgbm90IHNhdmUgc2Vzc2lvbiBoaXN0b3J5IGF0IGFsbC4KKyAgICAgICAg
QVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAgICAgIGlmICghbV9lbnRyaWVzW2ldKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisKICAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKHRvQVBJKG1f
cGFnZSksIFdLUGFnZUdldFNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlKCksIHRvVVJMUmVmKG1f
ZW50cmllc1tpXS0+b3JpZ2luYWxVUkwoKS5pbXBsKCkpLCBjb250ZXh0KSkgewogICAgICAgICAg
ICAgaWYgKGkgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnJlbnQpKQogICAgICAgICAgICAg
ICAgIGN1cnJlbnRJbmRleC0tOwpAQCAtODMsOCArODcsMTUgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFdl
YkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFn
ZVByb3gKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGVudHJpZXMuZ2V0KCksIGVudHJ5RGlj
dGlvbmFyeS5nZXQoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGN1cnJlbnRJbmRleCA8IENGQXJy
YXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSAmJiBjdXJyZW50SW5kZXggPj0gc3RhdGljX2Nhc3Q8
aW50PihOb0N1cnJlbnRJdGVtSW5kZXgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGN1
cnJlbnRJbmRleE51bWJlcihBZG9wdENGLCBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmY3VycmVudEluZGV4KSk7CisgICAgQVNTRVJUKGN1cnJlbnRJbmRleCA8IENGQXJyYXlH
ZXRDb3VudChlbnRyaWVzLmdldCgpKSAmJiBjdXJyZW50SW5kZXggPj0gLTEpOworICAgIC8vIElm
IGFsbCBpdGVtcyBiZWZvcmUgYW5kIGluY2x1ZGluZyB0aGUgY3VycmVudCBpdGVtIHdlcmUgZmls
dGVyZWQgdGhlbiBjdXJyZW50SW5kZXggd2lsbCBiZSAtMS4KKyAgICAvLyBBc3N1bWluZyB3ZSBk
aWRuJ3Qgc3RhcnQgb3V0IHdpdGggTm9DdXJyZW50SXRlbUluZGV4LCB3ZSBzaG91bGQgc3RvcmUg
ImN1cnJlbnQiIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpdGVtLgorICAgIGlmIChjdXJyZW50SW5k
ZXggPT0gLTEgJiYgbV9jdXJyZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBDRkFycmF5R2V0
Q291bnQoZW50cmllcy5nZXQoKSkpCisgICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CisgICAgCisg
ICAgLy8gRklYTUU6IFdlJ3JlIHJlbHlpbmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4g
dGhlIGV4YWN0IHNhbWUgdGhpbmcgYXMgTm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4g
dW5zaWduZWQgZm9ybS4KKyAgICAvLyBUaGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFu
ZCB3ZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJl
bnRJdGVtSW5kZXggY2FzZS4KKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGN1cnJlbnRJbmRl
eE51bWJlcihBZG9wdENGLCBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwg
JmN1cnJlbnRJbmRleCkpOwogCiAgICAgY29uc3Qgdm9pZCoga2V5c1syXSA9IHsgU2Vzc2lvbkhp
c3RvcnlDdXJyZW50SW5kZXhLZXkoKSwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkgfTsKICAg
ICBjb25zdCB2b2lkKiB2YWx1ZXNbMl0gPSB7IGN1cnJlbnRJbmRleE51bWJlci5nZXQoKSwgZW50
cmllcy5nZXQoKSB9OwpAQCAtMTAwLDExICsxMTEsMjAgQEAgYm9vbCBXZWJCYWNrRm9yd2FyZExp
c3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVm
IGQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIENGSW5kZXggY3VycmVudElu
ZGV4OwotICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShjZkluZGV4LCBrQ0ZOdW1iZXJDRkluZGV4
VHlwZSwgJmN1cnJlbnRJbmRleCkpIHsKKyAgICBDRkluZGV4IGN1cnJlbnRDRkluZGV4OworICAg
IGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShjZkluZGV4LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJmN1
cnJlbnRDRkluZGV4KSkgewogICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0Zvcndh
cmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGlu
dGVnZXIgY3VycmVudCBpbmRleCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAg
IAorICAgIGlmIChjdXJyZW50Q0ZJbmRleCA8IC0xKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3Rh
dGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlu
cyBhIG5lZ2F0aXZlIGN1cnJlbnQgaW5kZXggdGhhdCBpcyBib2d1cyAoJWxkKSIsIGN1cnJlbnRD
RkluZGV4KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBX
ZSdyZSByZWx5aW5nIG9uIGN1cnJlbnRJbmRleCA9PSAtMSB0byBtZWFuIHRoZSBleGFjdCBzYW1l
IHRoaW5nIGFzIE5vQ3VycmVudEl0ZW1JbmRleCAoVUlOVF9NQVgpIGluIHVuc2lnbmVkIGZvcm0u
CisgICAgLy8gVGhhdCBzZWVtcyBpbXBsaWNpdCBhbmQgZnJhZ2lsZSBhbmQgd2Ugc2hvdWxkIGZp
bmQgYSBiZXR0ZXIgd2F5IG9mIHJlcHJlc2VudGluZyB0aGUgTm9DdXJyZW50SXRlbUluZGV4IGNh
c2UuCisgICAgdWludDMyX3QgY3VycmVudEluZGV4ID0gY3VycmVudENGSW5kZXggPT0gLTEgPyBO
b0N1cnJlbnRJdGVtSW5kZXggOiBjdXJyZW50Q0ZJbmRleDsKIAogICAgIENGQXJyYXlSZWYgY2ZF
bnRyaWVzID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vz
c2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkpOwogICAgIGlmICghY2ZFbnRyaWVzIHx8IENGR2V0VHlw
ZUlEKGNmRW50cmllcykgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKSB7CkBAIC0xMTMsMTIgKzEzMywx
MiBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXBy
ZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAogICAgIH0KIAogICAgIENGSW5kZXggc2l6ZSA9
IENGQXJyYXlHZXRDb3VudChjZkVudHJpZXMpOwotICAgIGlmIChjdXJyZW50SW5kZXggIT0gc3Rh
dGljX2Nhc3Q8Q0ZJbmRleD4oTm9DdXJyZW50SXRlbUluZGV4KSAmJiBjdXJyZW50SW5kZXggPj0g
c2l6ZSkgewotICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRp
Y3Rpb25hcnkgcmVwcmVzZW50YXRpb24gY29udGFpbnMgYW4gaW52YWxpZCBjdXJyZW50IGluZGV4
ICglbGQpIGZvciB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKCVsZCkiLCBjdXJyZW50SW5kZXgsIHNp
emUpOworICAgIGlmIChjdXJyZW50SW5kZXggIT0gTm9DdXJyZW50SXRlbUluZGV4ICYmIGN1cnJl
bnRJbmRleCA+PSBzaXplKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9y
d2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIGN1
cnJlbnQgaW5kZXggKCV1KSBmb3IgdGhlIG51bWJlciBvZiBlbnRyaWVzICglbGQpIiwgY3VycmVu
dEluZGV4LCBzaXplKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChj
dXJyZW50SW5kZXggPT0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oTm9DdXJyZW50SXRlbUluZGV4KSAm
JiBzaXplKSB7CisgICAgaWYgKGN1cnJlbnRJbmRleCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggJiYg
c2l6ZSkgewogICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRp
Y3Rpb25hcnkgcmVwcmVzZW50YXRpb24gc2F5cyB0aGVyZSBpcyBubyBjdXJyZW50IGl0ZW0gaW5k
ZXgsIGJ1dCB0aGVyZSBpcyBhIGxpc3Qgb2YgJWxkIGVudHJpZXMgLSB0aGlzIGlzIGJvZ3VzIiwg
c2l6ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNjEsOSArMTgxLDggQEAg
Ym9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50
YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAgICAKICAgICBtX2VudHJpZXMgPSBuZXdFbnRyaWVz
OwogICAgIG1fY3VycmVudCA9IGN1cnJlbnRJbmRleDsKLSAgICAvLyBQZXJmb3JtIGEgc2FuaXR5
IGNoZWNrOiBpbiBjYXNlIHdlJ3JlIG91dCBvZiByYW5nZSwgd2UgcmVzZXQuCi0gICAgaWYgKG1f
Y3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXggJiYgbV9jdXJyZW50ID49IG5ld0VudHJpZXMu
c2l6ZSgpKQotICAgICAgICBtX2N1cnJlbnQgPSBOb0N1cnJlbnRJdGVtSW5kZXg7CisKKyAgICBB
U1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQgPCBtX2Vu
dHJpZXMuc2l6ZSgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143880</attachid>
            <date>2012-05-24 13:29:25 -0700</date>
            <delta_ts>2012-05-24 14:31:26 -0700</delta_ts>
            <desc>Patch v2 - Now with more style.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11092</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzOGIyMWQzLi44MjBmMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDUtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMDA5MDc2ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzQxNworICAgICAgICAoVW5yZXBybykgQ3Jhc2hlcyBzYXZpbmcg
c2Vzc2lvbiBzdGF0ZSBpbiBXZWJCYWNrRm9yd2FyZExpc3QKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOiBO
dWxsIGNoZWNrIHRoZSBwcm9wb3NlZCBpdGVtIGFuZCBhbHNvIG1fcGFnZSwgdG8gbWFrZQorICAg
ICAgICAgIHN1cmUgdGhlIHBhZ2UgaGFzbid0IGJlZW4gY2xvc2VkIG1ha2luZyB0aGlzIGxpc3Qg
aW5hY3RpdmUuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIGNsZWFyaW5nIHRo
ZSBjdXJyZW50IGVudHJpZXMgb3V0IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4K
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleCk6IEVhcmx5
IG51bGwgcmV0dXJuIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW5kZXguCisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOiBEb24ndCBwdXQgdGhlIGN1cnJlbnQgaXRl
bSBiYWNrIGluIHRoZSBhcnJheSBpZiB0aGVyZSB3YXMKKyAgICAgICAgICBubyBjdXJyZW50IGl0
ZW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKTogRG9uJ3QgY3JlYXRlIGEgbWVhbmluZ2xlc3MgV2ViVVJMLgorICAgICAg
ICAgIERvbid0IHN1Y2Nlc3NmdWxseSByZXR1cm4gYSBkaWN0aW9uYXJ5IGlmIGFueSBvZiB0aGUg
ZW50cmllcyB3ZXJlIG51bGwuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIHZh
bGlkYXRpbmcgdGhlIGN1cnJlbnQgaW5kZXggd2UgcGxhbiB0byByZXR1cm4gaW4gdGhlIGRpY3Rp
b25hcnkuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21D
RkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IE1vcmUgYWdncmVzc2l2ZWx5IHZhbGlkYXRlIHRo
ZQorICAgICAgICAgIGN1cnJlbnQgaW5kZXggcmVhZCBmcm9tIGRpc2suIFJlcGxhY2UgYSBtZWFu
aW5nbGVzcyBzYW5pdHkgY2hlY2sgd2l0aCBvdXIgdHlwaWNhbCBBU1NFUlQuCisKIDIwMTItMDUt
MjQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGb250IEJv
b3N0aW5nOiBBZGQgY29tcGlsZSBmbGFnIGFuZCBydW50aW1lIHNldHRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggNWM1NjdiNS4u
MWVjNWVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9y
d2FyZExpc3QoV2ViUGFnZVByb3h5KiBwYWdlKQogICAgICwgbV9jbG9zZWQodHJ1ZSkKICAgICAs
IG1fZW5hYmxlZCh0cnVlKQogewotICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRl
bUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVChtX3Bh
Z2UpOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2FyZExpc3QoKQpAQCAt
NjEsNDAgKzYxLDQ5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1
cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBp
ZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCisgICAgaWYgKCFtX2NhcGFjaXR5IHx8
ICFtX2VuYWJsZWQgfHwgIW5ld0l0ZW0gfHwgIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gcmVtb3ZlZEl0ZW1zOwogICAgIAotICAgIC8v
IFRvc3MgYW55dGhpbmcgaW4gdGhlIGZvcndhcmQgbGlzdCAgICAKICAgICBpZiAobV9jdXJyZW50
ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgeworICAgICAgICAvLyBUb3NzIGV2ZXJ5dGhpbmcgaW4g
dGhlIGZvcndhcmQgbGlzdC4KICAgICAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IG1fY3VycmVu
dCArIDE7CiAgICAgICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVzLnNp
emUoKSAtIHRhcmdldFNpemUpOwogICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRh
cmdldFNpemUpIHsKLSAgICAgICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9w
YWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllcy5sYXN0KCktPml0ZW1JRCgpKTsK
KyAgICAgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXMubGFz
dCgpLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmll
cy5sYXN0KCkucmVsZWFzZSgpKTsKICAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7
CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBUb3NzIHRoZSBmaXJzdCBpdGVtIGlmIHRoZSBs
aXN0IGlzIGdldHRpbmcgdG9vIGJpZywgYXMgbG9uZyBhcyB3ZSdyZSBub3QgdXNpbmcgaXQKLSAg
ICAvLyAob3IgZXZlbiBpZiB3ZSBhcmUsIGlmIHdlIG9ubHkgd2FudCAxIGVudHJ5KS4KLSAgICBp
ZiAobV9lbnRyaWVzLnNpemUoKSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnQgIT0gMCB8fCBt
X2NhcGFjaXR5ID09IDEpKSB7Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAgICBtX3Bh
Z2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzWzBdLT5pdGVtSUQoKSk7Ci0gICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzWzBdLnJlbGVhc2UoKSk7Ci0gICAgICAg
IG1fZW50cmllcy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY3VycmVudC0tOworICAgICAgICAvLyBU
b3NzIHRoZSBmaXJzdCBpdGVtIGlmIHRoZSBsaXN0IGlzIGdldHRpbmcgdG9vIGJpZywgYXMgbG9u
ZyBhcyB3ZSdyZSBub3QgdXNpbmcgaXQKKyAgICAgICAgLy8gKG9yIGV2ZW4gaWYgd2UgYXJlLCBp
ZiB3ZSBvbmx5IHdhbnQgMSBlbnRyeSkuCisgICAgICAgIGlmIChtX2VudHJpZXMuc2l6ZSgpID09
IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVudCB8fCBtX2NhcGFjaXR5ID09IDEpKSB7CisgICAgICAg
ICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRSZW1v
dmVkSXRlbShtX2VudHJpZXNbMF0tPml0ZW1JRCgpKTsKKyAgICAgICAgICAgIHJlbW92ZWRJdGVt
cy5hcHBlbmQobV9lbnRyaWVzWzBdLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2VudHJpZXMu
cmVtb3ZlKDApOworICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleCwgd2Ugc2hv
dWxkIGhhdmUgbm8gb3RoZXIgZW50cmllcyBiZWZvcmUgYWRkaW5nIHRoaXMgbmV3IGl0ZW0uCisg
ICAgICAgIHNpemVfdCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIG1fcGFnZS0+YmFja0Zvcndh
cmRSZW1vdmVkSXRlbShtX2VudHJpZXNbaV0tPml0ZW1JRCgpKTsKKyAgICAgICAgICAgIHJlbW92
ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgfQorICAgIAorICAgIGlmIChtX2N1cnJlbnQgPT0g
Tm9DdXJyZW50SXRlbUluZGV4KQorICAgICAgICBtX2N1cnJlbnQgPSAwOworICAgIGVsc2UKKyAg
ICAgICAgbV9jdXJyZW50Kys7CiAKLSAgICBtX2VudHJpZXMuaW5zZXJ0KG1fY3VycmVudCArIDEs
IG5ld0l0ZW0pOwotICAgIG1fY3VycmVudCsrOworICAgIG1fZW50cmllcy5pbnNlcnQobV9jdXJy
ZW50LCBuZXdJdGVtKTsKIAogICAgIGlmIChtX3BhZ2UpCiAgICAgICAgIG1fcGFnZS0+ZGlkQ2hh
bmdlQmFja0ZvcndhcmRMaXN0KG5ld0l0ZW0sICZyZW1vdmVkSXRlbXMpOwotCi0gICAgQVNTRVJU
KG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVz
LnNpemUoKSk7CiB9CiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtKQpAQCAtMTQ3LDggKzE1NiwxMCBAQCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6Oml0ZW1BdEluZGV4KGludCBpbmRleCkKIHsK
ICAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQg
PCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0IGRv
aW5nIG1hdGggb24gaW5kZXggdG8gYXZvaWQgb3ZlcmZsb3cuCi0gICAgaWYgKGluZGV4IDwgLXN0
YXRpY19jYXN0PGludD4obV9jdXJyZW50KSkKKyAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVu
dEl0ZW1JbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKGluZGV4IDwgLWJh
Y2tMaXN0Q291bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgaWYgKGluZGV4ID4g
Zm9yd2FyZExpc3RDb3VudCgpKQpAQCAtMjMyLDEyICsyNDMsMTcgQEAgdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgaWYgKGkgIT0gbV9jdXJyZW50KQogICAgICAgICAg
ICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChtX2VudHJpZXNbaV0ucmVsZWFzZSgpKTsKICAgICB9Ci0g
ICAgCi0gICAgbV9lbnRyaWVzLnNocmluaygxKTsKLSAgICBtX2VudHJpZXNbMF0gPSBjdXJyZW50
SXRlbS5yZWxlYXNlKCk7CiAKICAgICBtX2N1cnJlbnQgPSAwOwogCisgICAgaWYgKGN1cnJlbnRJ
dGVtKSB7CisgICAgICAgIG1fZW50cmllcy5zaHJpbmsoMSk7CisgICAgICAgIG1fZW50cmllc1sw
XSA9IGN1cnJlbnRJdGVtLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VudHJp
ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworICAg
IH0KKwogICAgIGlmIChtX3BhZ2UpCiAgICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0Zvcndh
cmRMaXN0KDAsICZyZW1vdmVkSXRlbXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKaW5kZXggNzJjMzYxNy4uMzhjYTM2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJk
TGlzdENGLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0Zvcndh
cmRMaXN0Q0YuY3BwCkBAIC01OCwxMCArNTgsMTQgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tG
b3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3gK
ICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwgQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNr
cykpOwogCiAgICAgLy8gV2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGluZGV4IHRv
IGFjY291bnQgZm9yIGVudHJpZXMgdGhhdCBhcmUgZmlsdGVyZWQgYnkgdGhlIGNhbGxiYWNrLgot
ICAgIGludCBjdXJyZW50SW5kZXggPSBtX2N1cnJlbnQ7CisgICAgQ0ZJbmRleCBjdXJyZW50SW5k
ZXggPSBtX2N1cnJlbnQ7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cmllcy5z
aXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8V2ViVVJMPiB3ZWJVUkwgPSBXZWJVUkw6OmNy
ZWF0ZShtX2VudHJpZXNbaV0tPnVybCgpKTsKKyAgICAgICAgLy8gSWYgd2Ugc29tZWhvdyBlbmRl
ZCB1cCB3aXRoIGEgbnVsbCBlbnRyeSB0aGVuIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZGF0YSBp
bnZhbGlkIGFuZCBub3Qgc2F2ZSBzZXNzaW9uIGhpc3RvcnkgYXQgYWxsLgorICAgICAgICBBU1NF
UlQobV9lbnRyaWVzW2ldKTsKKyAgICAgICAgaWYgKCFtX2VudHJpZXNbaV0pCisgICAgICAgICAg
ICByZXR1cm4gMDsKKwogICAgICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIodG9BUEkobV9wYWdl
KSwgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUoKSwgdG9VUkxSZWYobV9lbnRy
aWVzW2ldLT5vcmlnaW5hbFVSTCgpLmltcGwoKSksIGNvbnRleHQpKSB7CiAgICAgICAgICAgICBp
ZiAoaSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY3VycmVudCkpCiAgICAgICAgICAgICAgICAg
Y3VycmVudEluZGV4LS07CkBAIC04Myw4ICs4NywxNSBAQCBDRkRpY3Rpb25hcnlSZWYgV2ViQmFj
a0ZvcndhcmRMaXN0OjpjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJv
eAogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlEaWN0aW9u
YXJ5LmdldCgpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoY3VycmVudEluZGV4IDwgQ0ZBcnJheUdl
dENvdW50KGVudHJpZXMuZ2V0KCkpICYmIGN1cnJlbnRJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+
KE5vQ3VycmVudEl0ZW1JbmRleCkpOwotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gY3VycmVu
dEluZGV4TnVtYmVyKEFkb3B0Q0YsIENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUs
ICZjdXJyZW50SW5kZXgpKTsKKyAgICBBU1NFUlQoY3VycmVudEluZGV4IDwgQ0ZBcnJheUdldENv
dW50KGVudHJpZXMuZ2V0KCkpICYmIGN1cnJlbnRJbmRleCA+PSAtMSk7CisgICAgLy8gSWYgYWxs
IGl0ZW1zIGJlZm9yZSBhbmQgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGl0ZW0gd2VyZSBmaWx0ZXJl
ZCB0aGVuIGN1cnJlbnRJbmRleCB3aWxsIGJlIC0xLgorICAgIC8vIEFzc3VtaW5nIHdlIGRpZG4n
dCBzdGFydCBvdXQgd2l0aCBOb0N1cnJlbnRJdGVtSW5kZXgsIHdlIHNob3VsZCBzdG9yZSAiY3Vy
cmVudCIgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGl0ZW0uCisgICAgaWYgKGN1cnJlbnRJbmRleCA9
PSAtMSAmJiBtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4ICYmIENGQXJyYXlHZXRDb3Vu
dChlbnRyaWVzLmdldCgpKSkKKyAgICAgICAgY3VycmVudEluZGV4ID0gMDsKKyAgICAKKyAgICAv
LyBGSVhNRTogV2UncmUgcmVseWluZyBvbiBjdXJyZW50SW5kZXggPT0gLTEgdG8gbWVhbiB0aGUg
ZXhhY3Qgc2FtZSB0aGluZyBhcyBOb0N1cnJlbnRJdGVtSW5kZXggKFVJTlRfTUFYKSBpbiB1bnNp
Z25lZCBmb3JtLgorICAgIC8vIFRoYXQgc2VlbXMgaW1wbGljaXQgYW5kIGZyYWdpbGUgYW5kIHdl
IHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSBvZiByZXByZXNlbnRpbmcgdGhlIE5vQ3VycmVudEl0
ZW1JbmRleCBjYXNlLgorICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gY3VycmVudEluZGV4TnVt
YmVyKEFkb3B0Q0YsIENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmY3Vy
cmVudEluZGV4KSk7CiAKICAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNzaW9uSGlzdG9y
eUN1cnJlbnRJbmRleEtleSgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSB9OwogICAgIGNv
bnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgY3VycmVudEluZGV4TnVtYmVyLmdldCgpLCBlbnRyaWVz
LmdldCgpIH07CkBAIC0xMDAsMTEgKzExMSwyMCBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6
cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQ0ZJbmRleCBjdXJyZW50SW5kZXg7
Ci0gICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGNmSW5kZXgsIGtDRk51bWJlckNGSW5kZXhUeXBl
LCAmY3VycmVudEluZGV4KSkgeworICAgIENGSW5kZXggY3VycmVudENGSW5kZXg7CisgICAgaWYg
KCFDRk51bWJlckdldFZhbHVlKGNmSW5kZXgsIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmY3VycmVu
dENGSW5kZXgpKSB7CiAgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExp
c3QgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgaW50ZWdl
ciBjdXJyZW50IGluZGV4Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisg
ICAgaWYgKGN1cnJlbnRDRkluZGV4IDwgLTEpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGEg
bmVnYXRpdmUgY3VycmVudCBpbmRleCB0aGF0IGlzIGJvZ3VzICglbGQpIiwgY3VycmVudENGSW5k
ZXgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlJ3Jl
IHJlbHlpbmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhlIGV4YWN0IHNhbWUgdGhp
bmcgYXMgTm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5zaWduZWQgZm9ybS4KKyAg
ICAvLyBUaGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3ZSBzaG91bGQgZmluZCBh
IGJldHRlciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJdGVtSW5kZXggY2FzZS4K
KyAgICB1aW50MzJfdCBjdXJyZW50SW5kZXggPSBjdXJyZW50Q0ZJbmRleCA9PSAtMSA/IE5vQ3Vy
cmVudEl0ZW1JbmRleCA6IGN1cnJlbnRDRkluZGV4OwogCiAgICAgQ0ZBcnJheVJlZiBjZkVudHJp
ZXMgPSAoQ0ZBcnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBTZXNzaW9u
SGlzdG9yeUVudHJpZXNLZXkoKSk7CiAgICAgaWYgKCFjZkVudHJpZXMgfHwgQ0ZHZXRUeXBlSUQo
Y2ZFbnRyaWVzKSAhPSBDRkFycmF5R2V0VHlwZUlEKCkpIHsKQEAgLTExMywxMiArMTMzLDEyIEBA
IGJvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uKENGRGljdGlvbmFyeVJlZiBkCiAgICAgfQogCiAgICAgQ0ZJbmRleCBzaXplID0gQ0ZB
cnJheUdldENvdW50KGNmRW50cmllcyk7Ci0gICAgaWYgKGN1cnJlbnRJbmRleCAhPSBzdGF0aWNf
Y2FzdDxDRkluZGV4PihOb0N1cnJlbnRJdGVtSW5kZXgpICYmIGN1cnJlbnRJbmRleCA+PSBzaXpl
KSB7Ci0gICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlv
bmFyeSByZXByZXNlbnRhdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIGN1cnJlbnQgaW5kZXggKCVs
ZCkgZm9yIHRoZSBudW1iZXIgb2YgZW50cmllcyAoJWxkKSIsIGN1cnJlbnRJbmRleCwgc2l6ZSk7
CisgICAgaWYgKGN1cnJlbnRJbmRleCAhPSBOb0N1cnJlbnRJdGVtSW5kZXggJiYgY3VycmVudElu
ZGV4ID49IHNpemUpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJk
TGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGFuIGludmFsaWQgY3VycmVu
dCBpbmRleCAoJXUpIGZvciB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKCVsZCkiLCBjdXJyZW50SW5k
ZXgsIHNpemUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGN1cnJl
bnRJbmRleCA9PSBzdGF0aWNfY2FzdDxDRkluZGV4PihOb0N1cnJlbnRJdGVtSW5kZXgpICYmIHNp
emUpIHsKKyAgICBpZiAoY3VycmVudEluZGV4ID09IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBzaXpl
KSB7CiAgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlv
bmFyeSByZXByZXNlbnRhdGlvbiBzYXlzIHRoZXJlIGlzIG5vIGN1cnJlbnQgaXRlbSBpbmRleCwg
YnV0IHRoZXJlIGlzIGEgbGlzdCBvZiAlbGQgZW50cmllcyAtIHRoaXMgaXMgYm9ndXMiLCBzaXpl
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2MSw5ICsxODEsOCBAQCBib29s
IFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlv
bihDRkRpY3Rpb25hcnlSZWYgZAogICAgIAogICAgIG1fZW50cmllcyA9IG5ld0VudHJpZXM7CiAg
ICAgbV9jdXJyZW50ID0gY3VycmVudEluZGV4OwotICAgIC8vIFBlcmZvcm0gYSBzYW5pdHkgY2hl
Y2s6IGluIGNhc2Ugd2UncmUgb3V0IG9mIHJhbmdlLCB3ZSByZXNldC4KLSAgICBpZiAobV9jdXJy
ZW50ICE9IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBtX2N1cnJlbnQgPj0gbmV3RW50cmllcy5zaXpl
KCkpCi0gICAgICAgIG1fY3VycmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsKKworICAgIEFTU0VS
VChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmll
cy5zaXplKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143894</attachid>
            <date>2012-05-24 14:31:26 -0700</date>
            <delta_ts>2012-05-24 14:33:50 -0700</delta_ts>
            <desc>Patch v3 - Remove an unneeded ASSERT and add one addition currentIndex safeguard when writing to disk.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11289</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzOGIyMWQzLi44MjBmMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDUtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMDA5MDc2ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzQxNworICAgICAgICAoVW5yZXBybykgQ3Jhc2hlcyBzYXZpbmcg
c2Vzc2lvbiBzdGF0ZSBpbiBXZWJCYWNrRm9yd2FyZExpc3QKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOiBO
dWxsIGNoZWNrIHRoZSBwcm9wb3NlZCBpdGVtIGFuZCBhbHNvIG1fcGFnZSwgdG8gbWFrZQorICAg
ICAgICAgIHN1cmUgdGhlIHBhZ2UgaGFzbid0IGJlZW4gY2xvc2VkIG1ha2luZyB0aGlzIGxpc3Qg
aW5hY3RpdmUuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIGNsZWFyaW5nIHRo
ZSBjdXJyZW50IGVudHJpZXMgb3V0IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4K
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleCk6IEVhcmx5
IG51bGwgcmV0dXJuIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW5kZXguCisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOiBEb24ndCBwdXQgdGhlIGN1cnJlbnQgaXRl
bSBiYWNrIGluIHRoZSBhcnJheSBpZiB0aGVyZSB3YXMKKyAgICAgICAgICBubyBjdXJyZW50IGl0
ZW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKTogRG9uJ3QgY3JlYXRlIGEgbWVhbmluZ2xlc3MgV2ViVVJMLgorICAgICAg
ICAgIERvbid0IHN1Y2Nlc3NmdWxseSByZXR1cm4gYSBkaWN0aW9uYXJ5IGlmIGFueSBvZiB0aGUg
ZW50cmllcyB3ZXJlIG51bGwuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIHZh
bGlkYXRpbmcgdGhlIGN1cnJlbnQgaW5kZXggd2UgcGxhbiB0byByZXR1cm4gaW4gdGhlIGRpY3Rp
b25hcnkuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21D
RkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IE1vcmUgYWdncmVzc2l2ZWx5IHZhbGlkYXRlIHRo
ZQorICAgICAgICAgIGN1cnJlbnQgaW5kZXggcmVhZCBmcm9tIGRpc2suIFJlcGxhY2UgYSBtZWFu
aW5nbGVzcyBzYW5pdHkgY2hlY2sgd2l0aCBvdXIgdHlwaWNhbCBBU1NFUlQuCisKIDIwMTItMDUt
MjQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGb250IEJv
b3N0aW5nOiBBZGQgY29tcGlsZSBmbGFnIGFuZCBydW50aW1lIHNldHRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggNWM1NjdiNS4u
MWVjNWVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9y
d2FyZExpc3QoV2ViUGFnZVByb3h5KiBwYWdlKQogICAgICwgbV9jbG9zZWQodHJ1ZSkKICAgICAs
IG1fZW5hYmxlZCh0cnVlKQogewotICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRl
bUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVChtX3Bh
Z2UpOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2FyZExpc3QoKQpAQCAt
NjEsNDAgKzYxLDQ5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1
cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBp
ZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCisgICAgaWYgKCFtX2NhcGFjaXR5IHx8
ICFtX2VuYWJsZWQgfHwgIW5ld0l0ZW0gfHwgIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gcmVtb3ZlZEl0ZW1zOwogICAgIAotICAgIC8v
IFRvc3MgYW55dGhpbmcgaW4gdGhlIGZvcndhcmQgbGlzdCAgICAKICAgICBpZiAobV9jdXJyZW50
ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgeworICAgICAgICAvLyBUb3NzIGV2ZXJ5dGhpbmcgaW4g
dGhlIGZvcndhcmQgbGlzdC4KICAgICAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IG1fY3VycmVu
dCArIDE7CiAgICAgICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVzLnNp
emUoKSAtIHRhcmdldFNpemUpOwogICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRh
cmdldFNpemUpIHsKLSAgICAgICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9w
YWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllcy5sYXN0KCktPml0ZW1JRCgpKTsK
KyAgICAgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXMubGFz
dCgpLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmll
cy5sYXN0KCkucmVsZWFzZSgpKTsKICAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7
CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBUb3NzIHRoZSBmaXJzdCBpdGVtIGlmIHRoZSBs
aXN0IGlzIGdldHRpbmcgdG9vIGJpZywgYXMgbG9uZyBhcyB3ZSdyZSBub3QgdXNpbmcgaXQKLSAg
ICAvLyAob3IgZXZlbiBpZiB3ZSBhcmUsIGlmIHdlIG9ubHkgd2FudCAxIGVudHJ5KS4KLSAgICBp
ZiAobV9lbnRyaWVzLnNpemUoKSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnQgIT0gMCB8fCBt
X2NhcGFjaXR5ID09IDEpKSB7Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAgICBtX3Bh
Z2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzWzBdLT5pdGVtSUQoKSk7Ci0gICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzWzBdLnJlbGVhc2UoKSk7Ci0gICAgICAg
IG1fZW50cmllcy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY3VycmVudC0tOworICAgICAgICAvLyBU
b3NzIHRoZSBmaXJzdCBpdGVtIGlmIHRoZSBsaXN0IGlzIGdldHRpbmcgdG9vIGJpZywgYXMgbG9u
ZyBhcyB3ZSdyZSBub3QgdXNpbmcgaXQKKyAgICAgICAgLy8gKG9yIGV2ZW4gaWYgd2UgYXJlLCBp
ZiB3ZSBvbmx5IHdhbnQgMSBlbnRyeSkuCisgICAgICAgIGlmIChtX2VudHJpZXMuc2l6ZSgpID09
IG1fY2FwYWNpdHkgJiYgKG1fY3VycmVudCB8fCBtX2NhcGFjaXR5ID09IDEpKSB7CisgICAgICAg
ICAgICBpZiAobV9wYWdlKQorICAgICAgICAgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRSZW1v
dmVkSXRlbShtX2VudHJpZXNbMF0tPml0ZW1JRCgpKTsKKyAgICAgICAgICAgIHJlbW92ZWRJdGVt
cy5hcHBlbmQobV9lbnRyaWVzWzBdLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2VudHJpZXMu
cmVtb3ZlKDApOworICAgICAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleCwgd2Ugc2hv
dWxkIGhhdmUgbm8gb3RoZXIgZW50cmllcyBiZWZvcmUgYWRkaW5nIHRoaXMgbmV3IGl0ZW0uCisg
ICAgICAgIHNpemVfdCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIG1fcGFnZS0+YmFja0Zvcndh
cmRSZW1vdmVkSXRlbShtX2VudHJpZXNbaV0tPml0ZW1JRCgpKTsKKyAgICAgICAgICAgIHJlbW92
ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ldLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgfQorICAgIAorICAgIGlmIChtX2N1cnJlbnQgPT0g
Tm9DdXJyZW50SXRlbUluZGV4KQorICAgICAgICBtX2N1cnJlbnQgPSAwOworICAgIGVsc2UKKyAg
ICAgICAgbV9jdXJyZW50Kys7CiAKLSAgICBtX2VudHJpZXMuaW5zZXJ0KG1fY3VycmVudCArIDEs
IG5ld0l0ZW0pOwotICAgIG1fY3VycmVudCsrOworICAgIG1fZW50cmllcy5pbnNlcnQobV9jdXJy
ZW50LCBuZXdJdGVtKTsKIAogICAgIGlmIChtX3BhZ2UpCiAgICAgICAgIG1fcGFnZS0+ZGlkQ2hh
bmdlQmFja0ZvcndhcmRMaXN0KG5ld0l0ZW0sICZyZW1vdmVkSXRlbXMpOwotCi0gICAgQVNTRVJU
KG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVz
LnNpemUoKSk7CiB9CiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0Ojpnb1RvSXRlbShXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtKQpAQCAtMTQ3LDggKzE1NiwxMCBAQCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3Q6Oml0ZW1BdEluZGV4KGludCBpbmRleCkKIHsK
ICAgICBBU1NFUlQobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8fCBtX2N1cnJlbnQg
PCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aXRob3V0IGRv
aW5nIG1hdGggb24gaW5kZXggdG8gYXZvaWQgb3ZlcmZsb3cuCi0gICAgaWYgKGluZGV4IDwgLXN0
YXRpY19jYXN0PGludD4obV9jdXJyZW50KSkKKyAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVu
dEl0ZW1JbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKGluZGV4IDwgLWJh
Y2tMaXN0Q291bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgaWYgKGluZGV4ID4g
Zm9yd2FyZExpc3RDb3VudCgpKQpAQCAtMjMyLDEyICsyNDMsMTcgQEAgdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgaWYgKGkgIT0gbV9jdXJyZW50KQogICAgICAgICAg
ICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChtX2VudHJpZXNbaV0ucmVsZWFzZSgpKTsKICAgICB9Ci0g
ICAgCi0gICAgbV9lbnRyaWVzLnNocmluaygxKTsKLSAgICBtX2VudHJpZXNbMF0gPSBjdXJyZW50
SXRlbS5yZWxlYXNlKCk7CiAKICAgICBtX2N1cnJlbnQgPSAwOwogCisgICAgaWYgKGN1cnJlbnRJ
dGVtKSB7CisgICAgICAgIG1fZW50cmllcy5zaHJpbmsoMSk7CisgICAgICAgIG1fZW50cmllc1sw
XSA9IGN1cnJlbnRJdGVtLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VudHJp
ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworICAg
IH0KKwogICAgIGlmIChtX3BhZ2UpCiAgICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0Zvcndh
cmRMaXN0KDAsICZyZW1vdmVkSXRlbXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKaW5kZXggNzJjMzYxNy4uNzBiMjEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJk
TGlzdENGLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0Zvcndh
cmRMaXN0Q0YuY3BwCkBAIC01OCwxMCArNTgsMTQgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tG
b3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3gK
ICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwgQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNr
cykpOwogCiAgICAgLy8gV2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGluZGV4IHRv
IGFjY291bnQgZm9yIGVudHJpZXMgdGhhdCBhcmUgZmlsdGVyZWQgYnkgdGhlIGNhbGxiYWNrLgot
ICAgIGludCBjdXJyZW50SW5kZXggPSBtX2N1cnJlbnQ7CisgICAgQ0ZJbmRleCBjdXJyZW50SW5k
ZXggPSBtX2N1cnJlbnQ7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cmllcy5z
aXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8V2ViVVJMPiB3ZWJVUkwgPSBXZWJVUkw6OmNy
ZWF0ZShtX2VudHJpZXNbaV0tPnVybCgpKTsKKyAgICAgICAgLy8gSWYgd2Ugc29tZWhvdyBlbmRl
ZCB1cCB3aXRoIGEgbnVsbCBlbnRyeSB0aGVuIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZGF0YSBp
bnZhbGlkIGFuZCBub3Qgc2F2ZSBzZXNzaW9uIGhpc3RvcnkgYXQgYWxsLgorICAgICAgICBBU1NF
UlQobV9lbnRyaWVzW2ldKTsKKyAgICAgICAgaWYgKCFtX2VudHJpZXNbaV0pCisgICAgICAgICAg
ICByZXR1cm4gMDsKKwogICAgICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIodG9BUEkobV9wYWdl
KSwgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUoKSwgdG9VUkxSZWYobV9lbnRy
aWVzW2ldLT5vcmlnaW5hbFVSTCgpLmltcGwoKSksIGNvbnRleHQpKSB7CiAgICAgICAgICAgICBp
ZiAoaSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY3VycmVudCkpCiAgICAgICAgICAgICAgICAg
Y3VycmVudEluZGV4LS07CkBAIC04Miw5ICs4NiwxOCBAQCBDRkRpY3Rpb25hcnlSZWYgV2ViQmFj
a0ZvcndhcmRMaXN0OjpjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJv
eAogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbnRyeURpY3Rpb25hcnkoQWRv
cHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNCwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwog
ICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlEaWN0aW9uYXJ5
LmdldCgpKTsKICAgICB9CisgICAgICAgIAorICAgIC8vIElmIGFsbCBpdGVtcyBiZWZvcmUgYW5k
IGluY2x1ZGluZyB0aGUgY3VycmVudCBpdGVtIHdlcmUgZmlsdGVyZWQgdGhlbiBjdXJyZW50SW5k
ZXggd2lsbCBiZSAtMS4KKyAgICAvLyBBc3N1bWluZyB3ZSBkaWRuJ3Qgc3RhcnQgb3V0IHdpdGgg
Tm9DdXJyZW50SXRlbUluZGV4LCB3ZSBzaG91bGQgc3RvcmUgImN1cnJlbnQiIHRvIHBvaW50IGF0
IHRoZSBmaXJzdCBpdGVtLgorICAgIGlmIChjdXJyZW50SW5kZXggPT0gLTEgJiYgbV9jdXJyZW50
ICE9IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBDRkFycmF5R2V0Q291bnQoZW50cmllcy5nZXQoKSkp
CisgICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CisKKyAgICAvLyBGSVhNRTogV2UncmUgcmVseWlu
ZyBvbiBjdXJyZW50SW5kZXggPT0gLTEgdG8gbWVhbiB0aGUgZXhhY3Qgc2FtZSB0aGluZyBhcyBO
b0N1cnJlbnRJdGVtSW5kZXggKFVJTlRfTUFYKSBpbiB1bnNpZ25lZCBmb3JtLgorICAgIC8vIFRo
YXQgc2VlbXMgaW1wbGljaXQgYW5kIGZyYWdpbGUgYW5kIHdlIHNob3VsZCBmaW5kIGEgYmV0dGVy
IHdheSBvZiByZXByZXNlbnRpbmcgdGhlIE5vQ3VycmVudEl0ZW1JbmRleCBjYXNlLgorICAgIGlm
IChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8ICFDRkFycmF5R2V0Q291bnQoZW50
cmllcy5nZXQoKSkpCisgICAgICAgIGN1cnJlbnRJbmRleCA9IC0xOwogCi0gICAgQVNTRVJUKGN1
cnJlbnRJbmRleCA8IENGQXJyYXlHZXRDb3VudChlbnRyaWVzLmdldCgpKSAmJiBjdXJyZW50SW5k
ZXggPj0gc3RhdGljX2Nhc3Q8aW50PihOb0N1cnJlbnRJdGVtSW5kZXgpKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZOdW1iZXJSZWY+IGN1cnJlbnRJbmRleE51bWJlcihBZG9wdENGLCBDRk51bWJlckNyZWF0
ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmY3VycmVudEluZGV4KSk7CisgICAgUmV0YWluUHRyPENG
TnVtYmVyUmVmPiBjdXJyZW50SW5kZXhOdW1iZXIoQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwg
a0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjdXJyZW50SW5kZXgpKTsKIAogICAgIGNvbnN0IHZvaWQq
IGtleXNbMl0gPSB7IFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5KCksIFNlc3Npb25IaXN0
b3J5RW50cmllc0tleSgpIH07CiAgICAgY29uc3Qgdm9pZCogdmFsdWVzWzJdID0geyBjdXJyZW50
SW5kZXhOdW1iZXIuZ2V0KCksIGVudHJpZXMuZ2V0KCkgfTsKQEAgLTEwMCwxMSArMTEzLDIwIEBA
IGJvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uKENGRGljdGlvbmFyeVJlZiBkCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBDRkluZGV4IGN1cnJlbnRJbmRleDsKLSAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJ
bmRleCwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjdXJyZW50SW5kZXgpKSB7CisgICAgQ0ZJbmRl
eCBjdXJyZW50Q0ZJbmRleDsKKyAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJbmRleCwga0NG
TnVtYmVyQ0ZJbmRleFR5cGUsICZjdXJyZW50Q0ZJbmRleCkpIHsKICAgICAgICAgTE9HKFNlc3Np
b25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRv
ZXMgbm90IGhhdmUgYSB2YWxpZCBpbnRlZ2VyIGN1cnJlbnQgaW5kZXgiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KKyAgICAKKyAgICBpZiAoY3VycmVudENGSW5kZXggPCAtMSkgewor
ICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkg
cmVwcmVzZW50YXRpb24gY29udGFpbnMgYSBuZWdhdGl2ZSBjdXJyZW50IGluZGV4IHRoYXQgaXMg
Ym9ndXMgKCVsZCkiLCBjdXJyZW50Q0ZJbmRleCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogV2UncmUgcmVseWluZyBvbiBjdXJyZW50SW5kZXggPT0gLTEg
dG8gbWVhbiB0aGUgZXhhY3Qgc2FtZSB0aGluZyBhcyBOb0N1cnJlbnRJdGVtSW5kZXggKFVJTlRf
TUFYKSBpbiB1bnNpZ25lZCBmb3JtLgorICAgIC8vIFRoYXQgc2VlbXMgaW1wbGljaXQgYW5kIGZy
YWdpbGUgYW5kIHdlIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSBvZiByZXByZXNlbnRpbmcgdGhl
IE5vQ3VycmVudEl0ZW1JbmRleCBjYXNlLgorICAgIHVpbnQzMl90IGN1cnJlbnRJbmRleCA9IGN1
cnJlbnRDRkluZGV4ID09IC0xID8gTm9DdXJyZW50SXRlbUluZGV4IDogY3VycmVudENGSW5kZXg7
CiAKICAgICBDRkFycmF5UmVmIGNmRW50cmllcyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKGRpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpKTsKICAgICBpZiAo
IWNmRW50cmllcyB8fCBDRkdldFR5cGVJRChjZkVudHJpZXMpICE9IENGQXJyYXlHZXRUeXBlSUQo
KSkgewpAQCAtMTEzLDEyICsxMzUsMTIgQEAgYm9vbCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlc3Rv
cmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIGQKICAgICB9
CiAKICAgICBDRkluZGV4IHNpemUgPSBDRkFycmF5R2V0Q291bnQoY2ZFbnRyaWVzKTsKLSAgICBp
ZiAoY3VycmVudEluZGV4ICE9IHN0YXRpY19jYXN0PENGSW5kZXg+KE5vQ3VycmVudEl0ZW1JbmRl
eCkgJiYgY3VycmVudEluZGV4ID49IHNpemUpIHsKLSAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGFu
IGludmFsaWQgY3VycmVudCBpbmRleCAoJWxkKSBmb3IgdGhlIG51bWJlciBvZiBlbnRyaWVzICgl
bGQpIiwgY3VycmVudEluZGV4LCBzaXplKTsKKyAgICBpZiAoY3VycmVudEluZGV4ICE9IE5vQ3Vy
cmVudEl0ZW1JbmRleCAmJiBjdXJyZW50SW5kZXggPj0gc2l6ZSkgeworICAgICAgICBMT0coU2Vz
c2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24g
Y29udGFpbnMgYW4gaW52YWxpZCBjdXJyZW50IGluZGV4ICgldSkgZm9yIHRoZSBudW1iZXIgb2Yg
ZW50cmllcyAoJWxkKSIsIGN1cnJlbnRJbmRleCwgc2l6ZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoY3VycmVudEluZGV4ID09IHN0YXRpY19jYXN0PENGSW5kZXg+
KE5vQ3VycmVudEl0ZW1JbmRleCkgJiYgc2l6ZSkgeworICAgIGlmIChjdXJyZW50SW5kZXggPT0g
Tm9DdXJyZW50SXRlbUluZGV4ICYmIHNpemUpIHsKICAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwg
IldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIHNheXMgdGhlcmUg
aXMgbm8gY3VycmVudCBpdGVtIGluZGV4LCBidXQgdGhlcmUgaXMgYSBsaXN0IG9mICVsZCBlbnRy
aWVzIC0gdGhpcyBpcyBib2d1cyIsIHNpemUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQpAQCAtMTYxLDkgKzE4Myw4IEBAIGJvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJv
bUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZiBkCiAgICAgCiAgICAg
bV9lbnRyaWVzID0gbmV3RW50cmllczsKICAgICBtX2N1cnJlbnQgPSBjdXJyZW50SW5kZXg7Ci0g
ICAgLy8gUGVyZm9ybSBhIHNhbml0eSBjaGVjazogaW4gY2FzZSB3ZSdyZSBvdXQgb2YgcmFuZ2Us
IHdlIHJlc2V0LgotICAgIGlmIChtX2N1cnJlbnQgIT0gTm9DdXJyZW50SXRlbUluZGV4ICYmIG1f
Y3VycmVudCA+PSBuZXdFbnRyaWVzLnNpemUoKSkKLSAgICAgICAgbV9jdXJyZW50ID0gTm9DdXJy
ZW50SXRlbUluZGV4OworCisgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5k
ZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143897</attachid>
            <date>2012-05-24 14:33:50 -0700</date>
            <delta_ts>2012-05-24 14:52:57 -0700</delta_ts>
            <desc>Patch v4 - Hopefully last iteration - remove some unnecessary if (m_page) checks.</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>11254</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzOGIyMWQzLi44MjBmMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDUtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMDA5MDc2ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NzQxNworICAgICAgICAoVW5yZXBybykgQ3Jhc2hlcyBzYXZpbmcg
c2Vzc2lvbiBzdGF0ZSBpbiBXZWJCYWNrRm9yd2FyZExpc3QKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOiBO
dWxsIGNoZWNrIHRoZSBwcm9wb3NlZCBpdGVtIGFuZCBhbHNvIG1fcGFnZSwgdG8gbWFrZQorICAg
ICAgICAgIHN1cmUgdGhlIHBhZ2UgaGFzbid0IGJlZW4gY2xvc2VkIG1ha2luZyB0aGlzIGxpc3Qg
aW5hY3RpdmUuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIGNsZWFyaW5nIHRo
ZSBjdXJyZW50IGVudHJpZXMgb3V0IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4K
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjppdGVtQXRJbmRleCk6IEVhcmx5
IG51bGwgcmV0dXJuIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW5kZXguCisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOiBEb24ndCBwdXQgdGhlIGN1cnJlbnQgaXRl
bSBiYWNrIGluIHRoZSBhcnJheSBpZiB0aGVyZSB3YXMKKyAgICAgICAgICBubyBjdXJyZW50IGl0
ZW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJl
cHJlc2VudGF0aW9uKTogRG9uJ3QgY3JlYXRlIGEgbWVhbmluZ2xlc3MgV2ViVVJMLgorICAgICAg
ICAgIERvbid0IHN1Y2Nlc3NmdWxseSByZXR1cm4gYSBkaWN0aW9uYXJ5IGlmIGFueSBvZiB0aGUg
ZW50cmllcyB3ZXJlIG51bGwuIEJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dAorICAgICAgICAgIHZh
bGlkYXRpbmcgdGhlIGN1cnJlbnQgaW5kZXggd2UgcGxhbiB0byByZXR1cm4gaW4gdGhlIGRpY3Rp
b25hcnkuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21D
RkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IE1vcmUgYWdncmVzc2l2ZWx5IHZhbGlkYXRlIHRo
ZQorICAgICAgICAgIGN1cnJlbnQgaW5kZXggcmVhZCBmcm9tIGRpc2suIFJlcGxhY2UgYSBtZWFu
aW5nbGVzcyBzYW5pdHkgY2hlY2sgd2l0aCBvdXIgdHlwaWNhbCBBU1NFUlQuCisKIDIwMTItMDUt
MjQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGb250IEJv
b3N0aW5nOiBBZGQgY29tcGlsZSBmbGFnIGFuZCBydW50aW1lIHNldHRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggNWM1NjdiNS4u
MjdmYmJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgV2ViQmFja0ZvcndhcmRMaXN0OjpXZWJCYWNrRm9y
d2FyZExpc3QoV2ViUGFnZVByb3h5KiBwYWdlKQogICAgICwgbV9jbG9zZWQodHJ1ZSkKICAgICAs
IG1fZW5hYmxlZCh0cnVlKQogewotICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRl
bUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkpOworICAgIEFTU0VSVChtX3Bh
Z2UpOwogfQogCiBXZWJCYWNrRm9yd2FyZExpc3Q6On5XZWJCYWNrRm9yd2FyZExpc3QoKQpAQCAt
NjEsNDAgKzYxLDQ3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIG5ld0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1
cnJlbnRJdGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBp
ZiAobV9jYXBhY2l0eSA9PSAwIHx8ICFtX2VuYWJsZWQpCisgICAgaWYgKCFtX2NhcGFjaXR5IHx8
ICFtX2VuYWJsZWQgfHwgIW5ld0l0ZW0gfHwgIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gcmVtb3ZlZEl0ZW1zOwogICAgIAotICAgIC8v
IFRvc3MgYW55dGhpbmcgaW4gdGhlIGZvcndhcmQgbGlzdCAgICAKICAgICBpZiAobV9jdXJyZW50
ICE9IE5vQ3VycmVudEl0ZW1JbmRleCkgeworICAgICAgICAvLyBUb3NzIGV2ZXJ5dGhpbmcgaW4g
dGhlIGZvcndhcmQgbGlzdC4KICAgICAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IG1fY3VycmVu
dCArIDE7CiAgICAgICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVzLnNp
emUoKSAtIHRhcmdldFNpemUpOwogICAgICAgICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRh
cmdldFNpemUpIHsKLSAgICAgICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAgICAgICAgbV9w
YWdlLT5iYWNrRm9yd2FyZFJlbW92ZWRJdGVtKG1fZW50cmllcy5sYXN0KCktPml0ZW1JRCgpKTsK
KyAgICAgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXMubGFz
dCgpLT5pdGVtSUQoKSk7CiAgICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmll
cy5sYXN0KCkucmVsZWFzZSgpKTsKICAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7
CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBUb3NzIHRoZSBmaXJzdCBpdGVtIGlmIHRoZSBs
aXN0IGlzIGdldHRpbmcgdG9vIGJpZywgYXMgbG9uZyBhcyB3ZSdyZSBub3QgdXNpbmcgaXQKLSAg
ICAvLyAob3IgZXZlbiBpZiB3ZSBhcmUsIGlmIHdlIG9ubHkgd2FudCAxIGVudHJ5KS4KLSAgICBp
ZiAobV9lbnRyaWVzLnNpemUoKSA9PSBtX2NhcGFjaXR5ICYmIChtX2N1cnJlbnQgIT0gMCB8fCBt
X2NhcGFjaXR5ID09IDEpKSB7Ci0gICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgIC8vIFRvc3Mg
dGhlIGZpcnN0IGl0ZW0gaWYgdGhlIGxpc3QgaXMgZ2V0dGluZyB0b28gYmlnLCBhcyBsb25nIGFz
IHdlJ3JlIG5vdCB1c2luZyBpdAorICAgICAgICAvLyAob3IgZXZlbiBpZiB3ZSBhcmUsIGlmIHdl
IG9ubHkgd2FudCAxIGVudHJ5KS4KKyAgICAgICAgaWYgKG1fZW50cmllcy5zaXplKCkgPT0gbV9j
YXBhY2l0eSAmJiAobV9jdXJyZW50IHx8IG1fY2FwYWNpdHkgPT0gMSkpIHsKICAgICAgICAgICAg
IG1fcGFnZS0+YmFja0ZvcndhcmRSZW1vdmVkSXRlbShtX2VudHJpZXNbMF0tPml0ZW1JRCgpKTsK
LSAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChtX2VudHJpZXNbMF0ucmVsZWFzZSgpKTsKLSAg
ICAgICAgbV9lbnRyaWVzLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jdXJyZW50LS07CisgICAgICAg
ICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1swXS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgbV9lbnRyaWVzLnJlbW92ZSgwKTsKKyAgICAgICAgICAgIG1fY3VycmVudC0tOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjdXJyZW50IGl0
ZW0gaW5kZXgsIHdlIHNob3VsZCBoYXZlIG5vIG90aGVyIGVudHJpZXMgYmVmb3JlIGFkZGluZyB0
aGlzIG5ldyBpdGVtLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBt
X3BhZ2UtPmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZW0obV9lbnRyaWVzW2ldLT5pdGVtSUQoKSk7Cisg
ICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKG1fZW50cmllc1tpXS5yZWxlYXNlKCkpOwor
ICAgICAgICB9CisgICAgICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgIH0KKyAgICAKKyAgICBp
ZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCkKKyAgICAgICAgbV9jdXJyZW50ID0g
MDsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudCsrOwogCi0gICAgbV9lbnRyaWVzLmluc2Vy
dChtX2N1cnJlbnQgKyAxLCBuZXdJdGVtKTsKLSAgICBtX2N1cnJlbnQrKzsKLQotICAgIGlmICht
X3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG5ld0l0ZW0s
ICZyZW1vdmVkSXRlbXMpOworICAgIG1fZW50cmllcy5pbnNlcnQobV9jdXJyZW50LCBuZXdJdGVt
KTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3Vy
cmVudCA8IG1fZW50cmllcy5zaXplKCkpOworICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0Zvcndh
cmRMaXN0KG5ld0l0ZW0sICZyZW1vdmVkSXRlbXMpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJk
TGlzdDo6Z29Ub0l0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKQEAgLTE0Nyw4ICsx
NTQsMTAgQEAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0OjppdGVt
QXRJbmRleChpbnQgaW5kZXgpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCA9PSBOb0N1cnJlbnRJ
dGVtSW5kZXggfHwgbV9jdXJyZW50IDwgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICAvLyBEbyBy
YW5nZSBjaGVja3Mgd2l0aG91dCBkb2luZyBtYXRoIG9uIGluZGV4IHRvIGF2b2lkIG92ZXJmbG93
LgotICAgIGlmIChpbmRleCA8IC1zdGF0aWNfY2FzdDxpbnQ+KG1fY3VycmVudCkpCisgICAgaWYg
KG1fY3VycmVudCA9PSBOb0N1cnJlbnRJdGVtSW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIGlmIChpbmRleCA8IC1iYWNrTGlzdENvdW50KCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAogICAgIGlmIChpbmRleCA+IGZvcndhcmRMaXN0Q291bnQoKSkKQEAgLTIzMiwxMiArMjQx
LDE3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgIGlmIChpICE9
IG1fY3VycmVudCkKICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQobV9lbnRyaWVzW2ld
LnJlbGVhc2UoKSk7CiAgICAgfQotICAgIAotICAgIG1fZW50cmllcy5zaHJpbmsoMSk7Ci0gICAg
bV9lbnRyaWVzWzBdID0gY3VycmVudEl0ZW0ucmVsZWFzZSgpOwogCiAgICAgbV9jdXJyZW50ID0g
MDsKIAorICAgIGlmIChjdXJyZW50SXRlbSkgeworICAgICAgICBtX2VudHJpZXMuc2hyaW5rKDEp
OworICAgICAgICBtX2VudHJpZXNbMF0gPSBjdXJyZW50SXRlbS5yZWxlYXNlKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CisgICAgICAgIG1fY3VycmVudCA9IE5v
Q3VycmVudEl0ZW1JbmRleDsKKyAgICB9CisKICAgICBpZiAobV9wYWdlKQogICAgICAgICBtX3Bh
Z2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgwLCAmcmVtb3ZlZEl0ZW1zKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3Bw
CmluZGV4IDcyYzM2MTcuLjcwYjIxMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcApAQCAtNTgsMTAgKzU4LDE0IEBAIENG
RGljdGlvbmFyeVJlZiBXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJl
c2VudGF0aW9uKFdlYlBhZ2VQcm94CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBl
bnRyaWVzKEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fZW50cmllcy5zaXplKCks
ICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKIAogICAgIC8vIFdlIG1heSBuZWVkIHRvIHVwZGF0
ZSB0aGUgY3VycmVudCBpbmRleCB0byBhY2NvdW50IGZvciBlbnRyaWVzIHRoYXQgYXJlIGZpbHRl
cmVkIGJ5IHRoZSBjYWxsYmFjay4KLSAgICBpbnQgY3VycmVudEluZGV4ID0gbV9jdXJyZW50Owor
ICAgIENGSW5kZXggY3VycmVudEluZGV4ID0gbV9jdXJyZW50OwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFdlYlVS
TD4gd2ViVVJMID0gV2ViVVJMOjpjcmVhdGUobV9lbnRyaWVzW2ldLT51cmwoKSk7CisgICAgICAg
IC8vIElmIHdlIHNvbWVob3cgZW5kZWQgdXAgd2l0aCBhIG51bGwgZW50cnkgdGhlbiB3ZSBzaG91
bGQgY29uc2lkZXIgdGhlIGRhdGEgaW52YWxpZCBhbmQgbm90IHNhdmUgc2Vzc2lvbiBoaXN0b3J5
IGF0IGFsbC4KKyAgICAgICAgQVNTRVJUKG1fZW50cmllc1tpXSk7CisgICAgICAgIGlmICghbV9l
bnRyaWVzW2ldKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKICAgICAgICAgaWYgKGZpbHRlciAm
JiAhZmlsdGVyKHRvQVBJKG1fcGFnZSksIFdLUGFnZUdldFNlc3Npb25IaXN0b3J5VVJMVmFsdWVU
eXBlKCksIHRvVVJMUmVmKG1fZW50cmllc1tpXS0+b3JpZ2luYWxVUkwoKS5pbXBsKCkpLCBjb250
ZXh0KSkgewogICAgICAgICAgICAgaWYgKGkgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnJl
bnQpKQogICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleC0tOwpAQCAtODIsOSArODYsMTggQEAg
Q0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVw
cmVzZW50YXRpb24oV2ViUGFnZVByb3gKICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gZW50cnlEaWN0aW9uYXJ5KEFkb3B0Q0YsIENGRGljdGlvbmFyeUNyZWF0ZSgwLCBrZXlzLCB2
YWx1ZXMsIDQsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGVudHJpZXMu
Z2V0KCksIGVudHJ5RGljdGlvbmFyeS5nZXQoKSk7CiAgICAgfQorICAgICAgICAKKyAgICAvLyBJ
ZiBhbGwgaXRlbXMgYmVmb3JlIGFuZCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgaXRlbSB3ZXJlIGZp
bHRlcmVkIHRoZW4gY3VycmVudEluZGV4IHdpbGwgYmUgLTEuCisgICAgLy8gQXNzdW1pbmcgd2Ug
ZGlkbid0IHN0YXJ0IG91dCB3aXRoIE5vQ3VycmVudEl0ZW1JbmRleCwgd2Ugc2hvdWxkIHN0b3Jl
ICJjdXJyZW50IiB0byBwb2ludCBhdCB0aGUgZmlyc3QgaXRlbS4KKyAgICBpZiAoY3VycmVudElu
ZGV4ID09IC0xICYmIG1fY3VycmVudCAhPSBOb0N1cnJlbnRJdGVtSW5kZXggJiYgQ0ZBcnJheUdl
dENvdW50KGVudHJpZXMuZ2V0KCkpKQorICAgICAgICBjdXJyZW50SW5kZXggPSAwOworCisgICAg
Ly8gRklYTUU6IFdlJ3JlIHJlbHlpbmcgb24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhl
IGV4YWN0IHNhbWUgdGhpbmcgYXMgTm9DdXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5z
aWduZWQgZm9ybS4KKyAgICAvLyBUaGF0IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3
ZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJ
dGVtSW5kZXggY2FzZS4KKyAgICBpZiAobV9jdXJyZW50ID09IE5vQ3VycmVudEl0ZW1JbmRleCB8
fCAhQ0ZBcnJheUdldENvdW50KGVudHJpZXMuZ2V0KCkpKQorICAgICAgICBjdXJyZW50SW5kZXgg
PSAtMTsKIAotICAgIEFTU0VSVChjdXJyZW50SW5kZXggPCBDRkFycmF5R2V0Q291bnQoZW50cmll
cy5nZXQoKSkgJiYgY3VycmVudEluZGV4ID49IHN0YXRpY19jYXN0PGludD4oTm9DdXJyZW50SXRl
bUluZGV4KSk7Ci0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXhOdW1iZXIo
QWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJmN1cnJlbnRJbmRl
eCkpOworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gY3VycmVudEluZGV4TnVtYmVyKEFkb3B0
Q0YsIENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmY3VycmVudEluZGV4
KSk7CiAKICAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNzaW9uSGlzdG9yeUN1cnJlbnRJ
bmRleEtleSgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSB9OwogICAgIGNvbnN0IHZvaWQq
IHZhbHVlc1syXSA9IHsgY3VycmVudEluZGV4TnVtYmVyLmdldCgpLCBlbnRyaWVzLmdldCgpIH07
CkBAIC0xMDAsMTEgKzExMywyMCBAQCBib29sIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZy
b21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgZAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQ0ZJbmRleCBjdXJyZW50SW5kZXg7Ci0gICAgaWYg
KCFDRk51bWJlckdldFZhbHVlKGNmSW5kZXgsIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmY3VycmVu
dEluZGV4KSkgeworICAgIENGSW5kZXggY3VycmVudENGSW5kZXg7CisgICAgaWYgKCFDRk51bWJl
ckdldFZhbHVlKGNmSW5kZXgsIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmY3VycmVudENGSW5kZXgp
KSB7CiAgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlv
bmFyeSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgaW50ZWdlciBjdXJyZW50
IGluZGV4Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgaWYgKGN1
cnJlbnRDRkluZGV4IDwgLTEpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tG
b3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGEgbmVnYXRpdmUg
Y3VycmVudCBpbmRleCB0aGF0IGlzIGJvZ3VzICglbGQpIiwgY3VycmVudENGSW5kZXgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlJ3JlIHJlbHlpbmcg
b24gY3VycmVudEluZGV4ID09IC0xIHRvIG1lYW4gdGhlIGV4YWN0IHNhbWUgdGhpbmcgYXMgTm9D
dXJyZW50SXRlbUluZGV4IChVSU5UX01BWCkgaW4gdW5zaWduZWQgZm9ybS4KKyAgICAvLyBUaGF0
IHNlZW1zIGltcGxpY2l0IGFuZCBmcmFnaWxlIGFuZCB3ZSBzaG91bGQgZmluZCBhIGJldHRlciB3
YXkgb2YgcmVwcmVzZW50aW5nIHRoZSBOb0N1cnJlbnRJdGVtSW5kZXggY2FzZS4KKyAgICB1aW50
MzJfdCBjdXJyZW50SW5kZXggPSBjdXJyZW50Q0ZJbmRleCA9PSAtMSA/IE5vQ3VycmVudEl0ZW1J
bmRleCA6IGN1cnJlbnRDRkluZGV4OwogCiAgICAgQ0ZBcnJheVJlZiBjZkVudHJpZXMgPSAoQ0ZB
cnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBTZXNzaW9uSGlzdG9yeUVu
dHJpZXNLZXkoKSk7CiAgICAgaWYgKCFjZkVudHJpZXMgfHwgQ0ZHZXRUeXBlSUQoY2ZFbnRyaWVz
KSAhPSBDRkFycmF5R2V0VHlwZUlEKCkpIHsKQEAgLTExMywxMiArMTM1LDEyIEBAIGJvb2wgV2Vi
QmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKENG
RGljdGlvbmFyeVJlZiBkCiAgICAgfQogCiAgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdldENv
dW50KGNmRW50cmllcyk7Ci0gICAgaWYgKGN1cnJlbnRJbmRleCAhPSBzdGF0aWNfY2FzdDxDRklu
ZGV4PihOb0N1cnJlbnRJdGVtSW5kZXgpICYmIGN1cnJlbnRJbmRleCA+PSBzaXplKSB7Ci0gICAg
ICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXBy
ZXNlbnRhdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIGN1cnJlbnQgaW5kZXggKCVsZCkgZm9yIHRo
ZSBudW1iZXIgb2YgZW50cmllcyAoJWxkKSIsIGN1cnJlbnRJbmRleCwgc2l6ZSk7CisgICAgaWYg
KGN1cnJlbnRJbmRleCAhPSBOb0N1cnJlbnRJdGVtSW5kZXggJiYgY3VycmVudEluZGV4ID49IHNp
emUpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0
aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGFuIGludmFsaWQgY3VycmVudCBpbmRleCAo
JXUpIGZvciB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKCVsZCkiLCBjdXJyZW50SW5kZXgsIHNpemUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGN1cnJlbnRJbmRleCA9
PSBzdGF0aWNfY2FzdDxDRkluZGV4PihOb0N1cnJlbnRJdGVtSW5kZXgpICYmIHNpemUpIHsKKyAg
ICBpZiAoY3VycmVudEluZGV4ID09IE5vQ3VycmVudEl0ZW1JbmRleCAmJiBzaXplKSB7CiAgICAg
ICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXBy
ZXNlbnRhdGlvbiBzYXlzIHRoZXJlIGlzIG5vIGN1cnJlbnQgaXRlbSBpbmRleCwgYnV0IHRoZXJl
IGlzIGEgbGlzdCBvZiAlbGQgZW50cmllcyAtIHRoaXMgaXMgYm9ndXMiLCBzaXplKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2MSw5ICsxODMsOCBAQCBib29sIFdlYkJhY2tG
b3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rp
b25hcnlSZWYgZAogICAgIAogICAgIG1fZW50cmllcyA9IG5ld0VudHJpZXM7CiAgICAgbV9jdXJy
ZW50ID0gY3VycmVudEluZGV4OwotICAgIC8vIFBlcmZvcm0gYSBzYW5pdHkgY2hlY2s6IGluIGNh
c2Ugd2UncmUgb3V0IG9mIHJhbmdlLCB3ZSByZXNldC4KLSAgICBpZiAobV9jdXJyZW50ICE9IE5v
Q3VycmVudEl0ZW1JbmRleCAmJiBtX2N1cnJlbnQgPj0gbmV3RW50cmllcy5zaXplKCkpCi0gICAg
ICAgIG1fY3VycmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsKKworICAgIEFTU0VSVChtX2N1cnJl
bnQgPT0gTm9DdXJyZW50SXRlbUluZGV4IHx8IG1fY3VycmVudCA8IG1fZW50cmllcy5zaXplKCkp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9Cg==
</data>
<flag name="review"
          id="150586"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>