<?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>161866</bug_id>
          
          <creation_ts>2016-09-12 10:13:49 -0700</creation_ts>
          <short_desc>Undefined behavior: Left shift negative number</short_desc>
          <delta_ts>2016-09-20 10:16: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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1228776</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-12 10:13:49 -0700</bug_when>
    <thetext>Left shifting a negative number is undefined behavior in C/C++, although most implementations do defined this behavior.

The following files left shift negative numbers:
JavaScriptCore/dfg/DFGAbstractHeap.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228870</commentid>
    <comment_count>1</comment_count>
      <attachid>288605</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-12 13:32:12 -0700</bug_when>
    <thetext>Created attachment 288605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228875</commentid>
    <comment_count>2</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-12 13:41:06 -0700</bug_when>
    <thetext>wtf/text/Base64.cpp also left shifts negative numbers.  It is possible that there are more cases of this, since the undefined behavior sanitizer works at runtime and there are other issues preventing a more complete search of WebKit for left shifting of negative numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229439</commentid>
    <comment_count>3</comment_count>
      <attachid>288605</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-13 21:31:39 -0700</bug_when>
    <thetext>Comment on attachment 288605
Patch

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

Does this hit when compiling + running with ubsan?

&gt; Source/JavaScriptCore/dfg/DFGAbstractHeap.h:301
&gt; +        return kindAsInt | static_cast&lt;int64_t&gt;(static_cast&lt;int64_t&gt;(payload.isTop()) &lt;&lt; topShift) | (static_cast&lt;int64_t&gt;(payload.valueImpl()) &lt;&lt; valueShift);

isTop() returns bool, it seems better to cast it to uint64_t.
valueImpl() is already int64_t, do you have a repo of when it is negative? It seems good to at least assert that the bits being shifted out are all zero or all one.

&gt; Source/WTF/wtf/text/Base64.cpp:119
&gt; +    const unsigned char* udata = reinterpret_cast&lt;const unsigned char*&gt;(data);

You should change the function signature of base64EncodeInternal instead, it&apos;s only used in 4 places below and is cast from void* to char*. These casts need to be updated as well. Though either one isn&apos;t great because char* has magical meaning to C++ aliasing which unsigned char* doesn&apos;t in either solution. The other alternative is to case each data[] value about to be left-shifted to an unsigned. I&apos;d rather take one of these approaches and not reinterpret_cast here.

&gt; Source/WTF/wtf/text/Base64.cpp:248
&gt; +    unsigned char* uout = reinterpret_cast&lt;unsigned char*&gt;(out.data());

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229556</commentid>
    <comment_count>4</comment_count>
      <attachid>288605</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-14 08:26:28 -0700</bug_when>
    <thetext>Comment on attachment 288605
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractHeap.h:301
&gt;&gt; +        return kindAsInt | static_cast&lt;int64_t&gt;(static_cast&lt;int64_t&gt;(payload.isTop()) &lt;&lt; topShift) | (static_cast&lt;int64_t&gt;(payload.valueImpl()) &lt;&lt; valueShift);
&gt; 
&gt; isTop() returns bool, it seems better to cast it to uint64_t.
&gt; valueImpl() is already int64_t, do you have a repo of when it is negative? It seems good to at least assert that the bits being shifted out are all zero or all one.

Actually, both should be uint64.  valueImpl() can (in some cases) be negative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229622</commentid>
    <comment_count>5</comment_count>
      <attachid>288605</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-14 10:22:00 -0700</bug_when>
    <thetext>Comment on attachment 288605
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractHeap.h:301
&gt;&gt;&gt; +        return kindAsInt | static_cast&lt;int64_t&gt;(static_cast&lt;int64_t&gt;(payload.isTop()) &lt;&lt; topShift) | (static_cast&lt;int64_t&gt;(payload.valueImpl()) &lt;&lt; valueShift);
&gt;&gt; 
&gt;&gt; isTop() returns bool, it seems better to cast it to uint64_t.
&gt;&gt; valueImpl() is already int64_t, do you have a repo of when it is negative? It seems good to at least assert that the bits being shifted out are all zero or all one.
&gt; 
&gt; Actually, both should be uint64.  valueImpl() can (in some cases) be negative.

So valueImpl should be bitwise_cast to uint64, and top bits debug-assert-checked to make sure information isn&apos;t shifted out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230048</commentid>
    <comment_count>6</comment_count>
      <attachid>288964</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-15 09:58:35 -0700</bug_when>
    <thetext>Created attachment 288964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230055</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-15 10:06:47 -0700</bug_when>
    <thetext>Information is shifted out, and was shifted out in previous implementations.  A debug check would be frequently triggered, and I believe that it is expected that some data is shifted out.

accessibility/media-element.html provides an example of a test which will attempt to shift a negative payload.valueImpl() (on line 301 of JavaScriptCore/dfg/DFGAbstractHeap.h)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230058</commentid>
    <comment_count>8</comment_count>
      <attachid>288964</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-15 10:10:23 -0700</bug_when>
    <thetext>Comment on attachment 288964
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractHeap.h:301
&gt; +        return kindAsInt | (static_cast&lt;uint64_t&gt;(payload.isTop()) &lt;&lt; topShift) | (bitwise_cast&lt;uint64_t&gt;(payload.valueImpl()) &lt;&lt; valueShift);

This relies on 2 things:
 - valueImpl goes in the very top of the packed value (so sext bits don&apos;t mask out kind nor isTop).
 - valueImpl&apos;s representation has insignificant 15 bits at the top.

I&apos;d like to assert on the second assumption, because it&apos;s dynamic:
auto valueImpl = bitwise_cast&lt;uint64_t&gt;(payload.valueImpl();
ASSERT(payload.valueImpl() == ((payload.valueImpl() &lt;&lt; valueShift) &gt;&gt; valueShift));
return kindAsInt | (static_cast&lt;uint64_t&gt;(payload.isTop()) &lt;&lt; topShift) | (valueImpl &lt;&lt; valueShift));

&gt; Source/WTF/ChangeLog:34
&gt; +

ChangeLog needs to be merged.

&gt; Source/WTF/wtf/text/Base64.h:55
&gt; +    void clear() { m_vector.u-&gt;clear(); }

Is the vector ever stored as a char and retrieved as a uint8_t (or the other way around)? If so then this is also undefined behavior: the union should only be accessed with its active member (roughly: the last one stored to the union).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230061</commentid>
    <comment_count>9</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-15 10:13:37 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Information is shifted out, and was shifted out in previous implementations.
&gt; A debug check would be frequently triggered, and I believe that it is
&gt; expected that some data is shifted out.
&gt; 
&gt; accessibility/media-element.html provides an example of a test which will
&gt; attempt to shift a negative payload.valueImpl() (on line 301 of
&gt; JavaScriptCore/dfg/DFGAbstractHeap.h)

Sorry, replied without seeing this.

Do you mean that sext bits are shifted out? That&apos;s fine, the assert I suggest above shouldn&apos;t trigger when this happens.

If significant bits are shifted out then isn&apos;t that a correctness issue?

Sorry for asking so many questions, I simply don&apos;t know the codebase well enough yet :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230081</commentid>
    <comment_count>10</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-15 10:48:57 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; ...
&gt;

I am going to dig a little bit deeper here to see why we&apos;re getting negative values at all.  In accessibility/media-element.html (just as an example, there are other that do this too) the payload value at one point is -7, which is 0xFFFFFFFFFFFFFFF9 when converted to unsigned.  Obviously this is going to   Currently, things seem to be working well, so throwing out the top 15 bits seems to be the intended behavior (although I agree that it seems weird)

And as for the union bit, the previous version of the class was built as a conversion class (essentially a bitwise_cast) converting an unsigned char vector into a signed char vector.  I need to ask around because you&apos;re right, using unions to preform bitwise_casts is undefined in the standard (although defined in all relevant implementations) but we use this technique often in WebKit (actually, take a look at our implementation of bitwise_cast, it actually uses a union to preform the cast).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230117</commentid>
    <comment_count>11</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-15 11:45:30 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; 
&gt; &gt; ...
&gt; &gt;
&gt; 
&gt; I am going to dig a little bit deeper here to see why we&apos;re getting negative
&gt; values at all.  In accessibility/media-element.html (just as an example,
&gt; there are other that do this too) the payload value at one point is -7,
&gt; which is 0xFFFFFFFFFFFFFFF9 when converted to unsigned.  Obviously this is
&gt; going to   Currently, things seem to be working well, so throwing out the
&gt; top 15 bits seems to be the intended behavior (although I agree that it
&gt; seems weird)

OK cool, ty. That could be done separately IMO: it may be intended, and the assert won&apos;t fire.

&gt; And as for the union bit, the previous version of the class was built as a
&gt; conversion class (essentially a bitwise_cast) converting an unsigned char
&gt; vector into a signed char vector.  I need to ask around because you&apos;re
&gt; right, using unions to preform bitwise_casts is undefined in the standard
&gt; (although defined in all relevant implementations) but we use this technique
&gt; often in WebKit (actually, take a look at our implementation of
&gt; bitwise_cast, it actually uses a union to preform the cast).

It doesn&apos;t anymore, I fixed it ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230158</commentid>
    <comment_count>12</comment_count>
      <attachid>288990</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-15 13:33:43 -0700</bug_when>
    <thetext>Created attachment 288990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230159</commentid>
    <comment_count>13</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-15 13:35:30 -0700</bug_when>
    <thetext>This patch fixes the union issues, although it still leaves out the ASSERT because that (currently) will cause test failures.

I will continue investigating to figure out if the negative integer is expected behavior in the first place, and if it is not, I will put in the ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231544</commentid>
    <comment_count>14</comment_count>
      <attachid>288990</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-19 22:49:59 -0700</bug_when>
    <thetext>Comment on attachment 288990
Patch

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

I think some of the diff is missing?

&gt; Source/WTF/wtf/text/Base64.h:80
&gt; +        m_vector.u-&gt;clear();

The non-return cases are wrong (below as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231667</commentid>
    <comment_count>15</comment_count>
      <attachid>289355</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-20 09:00:54 -0700</bug_when>
    <thetext>Created attachment 289355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231679</commentid>
    <comment_count>16</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-09-20 09:12:28 -0700</bug_when>
    <thetext>lgtm. I don&apos;t have review access, so you&apos;ll need someone else to r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231695</commentid>
    <comment_count>17</comment_count>
      <attachid>289355</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-20 09:29:42 -0700</bug_when>
    <thetext>Comment on attachment 289355
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231742</commentid>
    <comment_count>18</comment_count>
      <attachid>289355</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-20 10:16:13 -0700</bug_when>
    <thetext>Comment on attachment 289355
Patch

Clearing flags on attachment: 289355

Committed r206151: &lt;http://trac.webkit.org/changeset/206151&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231743</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-20 10:16:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288605</attachid>
            <date>2016-09-12 13:32:12 -0700</date>
            <delta_ts>2016-09-15 09:58:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161866-20160912132939.patch</filename>
            <type>text/plain</type>
            <size>5890</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTA5LTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAg
ICAgICBVbmRlZmluZWQgYmVoYXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5n
IGEgbmVnYXRpdmUgbnVtYmVyIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91
Z2ggbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gZGVmaW5lIGl0LiAgRXhwbGljaXRseSBjbGFyaWZ5
aW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBkdWUgdG8gc2hpZnRpbmcgbmVnYXRpdmUgbnVtYmVy
IGluIHNvbWUgY2FzZXMuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjplbmNvZGUpOiBFeHBsaWNpdGx5IGNhc3Qgc2ln
bmVkIGludGVnZXIgZm9yIGxlZnQgc2hpZnQuCisKIDIwMTYtMDgtMzEgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFdLMiBHYW1lcGFkIHByb3ZpZGVyIG9uIGlP
Uy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAko
cmV2aXNpb24gMjA1MjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBpbnQ2NF90IGtpbmRBc0ludCA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGtpbmQp
OwogICAgICAgICBBU1NFUlQoa2luZEFzSW50IDwgKDEgPDwgdG9wU2hpZnQpKTsKLSAgICAgICAg
cmV0dXJuIGtpbmRBc0ludCB8IChwYXlsb2FkLmlzVG9wKCkgPDwgdG9wU2hpZnQpIHwgKHBheWxv
YWQudmFsdWVJbXBsKCkgPDwgdmFsdWVTaGlmdCk7CisgICAgICAgIHJldHVybiBraW5kQXNJbnQg
fCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxpbnQ2NF90PihwYXlsb2FkLmlzVG9w
KCkpIDw8IHRvcFNoaWZ0KSB8IChzdGF0aWNfY2FzdDxpbnQ2NF90PihwYXlsb2FkLnZhbHVlSW1w
bCgpKSA8PCB2YWx1ZVNoaWZ0KTsKICAgICB9CiAgICAgCiAgICAgLy8gVGhlIGxheW91dCBvZiB0
aGUgdmFsdWUgaXM6CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MjQ4KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wOS0xMiAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CisKKyAgICAgICAgVW5kZWZpbmVkIGJlaGF2
aW9yOiBMZWZ0IHNoaWZ0IG5lZ2F0aXZlIG51bWJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxODY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTGVmdCBzaGlmdGluZyBhIG5lZ2F0aXZlIG51bWJlciBp
cyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy9DKyssIGFsdGhvdWdoIG1vc3QgaW1wbGVtZW50YXRp
b25zIGRvIGRlZmluZSBpdC4gIEV4cGxpY2l0bHkgY2xhcmlmeWluZyB0aGUgaW50ZW5kZWQgYmVo
YXZpb3IgZHVlIHRvIHNoaWZ0aW5nIG5lZ2F0aXZlIG51bWJlciBpbiBzb21lIGNhc2VzLgorCisg
ICAgICAgICogd3RmL3RleHQvQmFzZTY0LmNwcDoKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2Rl
SW50ZXJuYWwpOiBFeHBsaWNpdGx5IGNhc3QgYmVmb3JlIHNoaWZ0aW5nLgorICAgICAgICAoV1RG
OjpiYXNlNjREZWNvZGVJbnRlcm5hbCk6IERpdHRvLgorCiAyMDE2LTA4LTMwICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBHYW1lQ29udHJvbGxlci5mcmFtZXdv
cmsgYmFja2VuZCBmb3IgZ2FtZXBhZCBBUEkuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jh
c2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAyMDUyNDgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5j
b2RlSW50ZXJuYWwoCiAgICAgICAgIG91dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEpIC8gNzYp
OwogCiAgICAgaW50IGNvdW50ID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1ZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpOwogICAgIG91dC5n
cm93KG91dExlbmd0aCk7CiAKICAgICAvLyAzLWJ5dGUgdG8gNC1ieXRlIGNvbnZlcnNpb24gKyAw
LTYzIHRvIGFzY2lpIHByaW50YWJsZSBjb252ZXJzaW9uCkBAIC0xMjYsMTAgKzEyNywxMCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJuYWwoCiAgICAgICAgICAgICAgICAg
ICAgIG91dFtkaWR4KytdID0gJ1xuJzsKICAgICAgICAgICAgICAgICBjb3VudCArPSA0OwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lk
eF0gPj4gMikgJiAwNzddOwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChk
YXRhW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGRhdGFbc2lkeF0gPDwgNCkgJiAwNzcpXTsK
LSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMl0gPj4g
NikgJiAwMDMpIHwgKChkYXRhW3NpZHggKyAxXSA8PCAyKSAmIDA3NyldOwotICAgICAgICAgICAg
b3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbZGF0YVtzaWR4ICsgMl0gJiAwNzddOworICAgICAgICAg
ICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKHVkYXRhW3NpZHhdID4+IDIpICYgMDc3XTsKKyAg
ICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygodWRhdGFbc2lkeCArIDFdID4+IDQp
ICYgMDE3KSB8ICgodWRhdGFbc2lkeF0gPDwgNCkgJiAwNzcpXTsKKyAgICAgICAgICAgIG91dFtk
aWR4KytdID0gZW5jb2RlTWFwWygodWRhdGFbc2lkeCArIDJdID4+IDYpICYgMDAzKSB8ICgodWRh
dGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVu
Y29kZU1hcFt1ZGF0YVtzaWR4ICsgMl0gJiAwNzddOwogICAgICAgICAgICAgc2lkeCArPSAzOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTM4LDEyICsxMzksMTIgQEAgc3RhdGljIGlubGluZSB2b2lk
IGJhc2U2NEVuY29kZUludGVybmFsKAogICAgICAgICBpZiAoaW5zZXJ0TEZzICYmIChjb3VudCA+
IDApICYmICEoY291bnQgJSA3NikpCiAgICAgICAgICAgIG91dFtkaWR4KytdID0gJ1xuJzsKIAot
ICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAyKSAmIDA3N107
CisgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyh1ZGF0YVtzaWR4XSA+PiAyKSAmIDA3
N107CiAgICAgICAgIGlmIChzaWR4IDwgbGVuIC0gMSkgewotICAgICAgICAgICAgb3V0W2RpZHgr
K10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGRhdGFbc2lk
eF0gPDwgNCkgJiAwNzcpXTsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhk
YXRhW3NpZHggKyAxXSA8PCAyKSAmIDA3N107CisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVu
Y29kZU1hcFsoKHVkYXRhW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKHVkYXRhW3NpZHhdIDw8
IDQpICYgMDc3KV07CisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsodWRhdGFb
c2lkeCArIDFdIDw8IDIpICYgMDc3XTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsodWRhdGFbc2lkeF0gPDwgNCkgJiAwNzddOwogICAg
IH0KIAogICAgIC8vIEFkZCBwYWRkaW5nCkBAIC0yNDQsMjEgKzI0NSwyMiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgYmFzZTY0RGVjb2RlSW50ZXJuYWwoCiAKICAgICB1bnNpZ25lZCBzaWR4ID0gMDsK
ICAgICB1bnNpZ25lZCBkaWR4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyKiB1b3V0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0LmRhdGEoKSk7CiAgICAgaWYgKG91dExlbmd0
aCA+IDEpIHsKICAgICAgICAgd2hpbGUgKGRpZHggPCBvdXRMZW5ndGggLSAyKSB7Ci0gICAgICAg
ICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeF0gPDwgMikgJiAyNTUpIHwgKChvdXRbc2lkeCAr
IDFdID4+IDQpICYgMDAzKSk7Ci0gICAgICAgICAgICBvdXRbZGlkeCArIDFdID0gKCgob3V0W3Np
ZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsKLSAg
ICAgICAgICAgIG91dFtkaWR4ICsgMl0gPSAoKChvdXRbc2lkeCArIDJdIDw8IDYpICYgMjU1KSB8
IChvdXRbc2lkeCArIDNdICYgMDc3KSk7CisgICAgICAgICAgICBvdXRbZGlkeF0gPSAoKCh1b3V0
W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgodW91dFtzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKKyAg
ICAgICAgICAgIG91dFtkaWR4ICsgMV0gPSAoKCh1b3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkg
fCAoKHVvdXRbc2lkeCArIDJdID4+IDIpICYgMDE3KSk7CisgICAgICAgICAgICBvdXRbZGlkeCAr
IDJdID0gKCgodW91dFtzaWR4ICsgMl0gPDwgNikgJiAyNTUpIHwgKHVvdXRbc2lkeCArIDNdICYg
MDc3KSk7CiAgICAgICAgICAgICBzaWR4ICs9IDQ7CiAgICAgICAgICAgICBkaWR4ICs9IDM7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoZGlkeCA8IG91dExlbmd0aCkKLSAgICAgICAgb3V0
W2RpZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0
KSAmIDAwMykpOworICAgICAgICBvdXRbZGlkeF0gPSAoKCh1b3V0W3NpZHhdIDw8IDIpICYgMjU1
KSB8ICgodW91dFtzaWR4ICsgMV0gPj4gNCkgJiAwMDMpKTsKIAogICAgIGlmICgrK2RpZHggPCBv
dXRMZW5ndGgpCi0gICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4ICsgMV0gPDwgNCkgJiAy
NTUpIHwgKChvdXRbc2lkeCArIDJdID4+IDIpICYgMDE3KSk7CisgICAgICAgIG91dFtkaWR4XSA9
ICgoKHVvdXRbc2lkeCArIDFdIDw8IDQpICYgMjU1KSB8ICgodW91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKIAogICAgIGlmIChvdXRMZW5ndGggPCBvdXQuc2l6ZSgpKQogICAgICAgICBvdXQu
c2hyaW5rKG91dExlbmd0aCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288964</attachid>
            <date>2016-09-15 09:58:35 -0700</date>
            <delta_ts>2016-09-15 13:33:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161866-20160915095557.patch</filename>
            <type>text/plain</type>
            <size>7338</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTA5LTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAg
ICAgICBVbmRlZmluZWQgYmVoYXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5n
IGEgbmVnYXRpdmUgbnVtYmVyIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91
Z2ggbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gZGVmaW5lIGl0LiAgRXhwbGljaXRseSBjbGFyaWZ5
aW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBkdWUgdG8gc2hpZnRpbmcgbmVnYXRpdmUgbnVtYmVy
IGluIHNvbWUgY2FzZXMuCisKKyAgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5oOgorICAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmVuY29kZSk6IEV4cGxpY2l0bHkgY2FzdCBz
aWduZWQgaW50ZWdlciBmb3IgbGVmdCBzaGlmdC4KKwogMjAxNi0wOS0xNSAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIHRlc3QyNjI6IFNob3VsZCBiZSBh
IFN5bnRheEVycm9yIGZvciBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIGluIGZ1bmN0aW9uIHdp
dGggZGVmYXVsdCBwYXJhbWV0ZXJzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDIwNTk2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaW50NjRfdCBraW5kQXNJbnQgPSBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihraW5kKTsKICAgICAgICAgQVNTRVJUKGtpbmRBc0ludCA8ICgxIDw8IHRv
cFNoaWZ0KSk7Ci0gICAgICAgIHJldHVybiBraW5kQXNJbnQgfCAocGF5bG9hZC5pc1RvcCgpIDw8
IHRvcFNoaWZ0KSB8IChwYXlsb2FkLnZhbHVlSW1wbCgpIDw8IHZhbHVlU2hpZnQpOworICAgICAg
ICByZXR1cm4ga2luZEFzSW50IHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYXlsb2FkLmlzVG9w
KCkpIDw8IHRvcFNoaWZ0KSB8IChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBheWxvYWQudmFsdWVJ
bXBsKCkpIDw8IHZhbHVlU2hpZnQpOwogICAgIH0KICAgICAKICAgICAvLyBUaGUgbGF5b3V0IG9m
IHRoZSB2YWx1ZSBpczoKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU5NjcpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE2LTA5LTE1ICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAgICAgICBVbmRlZmluZWQgYmVo
YXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgbnVtYmVy
IGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91Z2ggbW9zdCBpbXBsZW1lbnRh
dGlvbnMgZG8gZGVmaW5lIGl0LiAgRXhwbGljaXRseSBjbGFyaWZ5aW5nIHRoZSBpbnRlbmRlZCBi
ZWhhdmlvciBkdWUgdG8gc2hpZnRpbmcgbmVnYXRpdmUgbnVtYmVyIGluIHNvbWUgY2FzZXMuCisK
KyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNv
ZGVJbnRlcm5hbCk6IENoYW5nZWQgc2lnbmVkIGNoYXJhY3RlciB0byB1bnNpZ25lZCB3aGVuIHNo
aWZ0aW5nLgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOiBEaXR0by4KKyAgICAgICAgKFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKTogRGl0dG8uCisgICAgICAgIChXVEY6OmJhc2U2NERlY29kZUlu
dGVybmFsKTogRGl0dG8uCisgICAgICAgICogd3RmL3RleHQvQmFzZTY0Lmg6IFVzZSB1bnNpZ25l
ZCBjaGFyYWN0ZXJzIGZvciBWZWN0b3JBZGFwdGVyIGluc3RlYWQgb2Ygc2lnbmVkLgorICAgICAg
ICAoV1RGOjpTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXI6Om9wZXJhdG9yIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiYpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyOjpjbGVhcik6IERpdHRvLgorICAgICAgICAoV1RGOjpDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcjo6b3BlcmF0b3IgY29uc3QgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+Jik6IERpdHRvLgorICAgICAgICAoV1RGOjpDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlcjo6ZGF0YSk6IERpdHRvLgorICAgICAgICAoV1RGOjpDb25zdFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcjo6c2l6ZSk6IERpdHRvLgorCisyMDE2LTA5
LTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAgICAgICBVbmRl
ZmluZWQgYmVoYXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5nIGEgbmVnYXRp
dmUgbnVtYmVyIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91Z2ggbW9zdCBp
bXBsZW1lbnRhdGlvbnMgZG8gZGVmaW5lIGl0LiAgRXhwbGljaXRseSBjbGFyaWZ5aW5nIHRoZSBp
bnRlbmRlZCBiZWhhdmlvciBkdWUgdG8gc2hpZnRpbmcgbmVnYXRpdmUgbnVtYmVyIGluIHNvbWUg
Y2FzZXMuCisKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOgorICAgICAgICAoV1RGOjpi
YXNlNjRFbmNvZGVJbnRlcm5hbCk6IEV4cGxpY2l0bHkgY2FzdCBiZWZvcmUgc2hpZnRpbmcuCisg
ICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVybmFsKTogRGl0dG8uCisKIDIwMTYtMDktMTQg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDU5MzMgYW5kIHIyMDU5MzYuCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9C
YXNlNjQuY3BwCShyZXZpc2lvbiAyMDU5NjcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIg
YmFzZTY0VVJMRGVjTWFwWzEyOF0gPQogICAgIDB4MzEsIDB4MzIsIDB4MzMsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldAogfTsK
IAotc3RhdGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXApWzY0XSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBi
YXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBjb25zdCBj
aGFyICgmZW5jb2RlTWFwKVs2NF0pCiB7CiAgICAgb3V0LmNsZWFyKCk7CiAgICAgaWYgKCFsZW4p
CkBAIC0xNjAsMjkgKzE2MCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50
ZXJuYWwoCiBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVz
dWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKSwgbGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICBiYXNlNjRF
bmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxl
bmd0aCwgcmVzdWx0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7CiAgICAgcmV0dXJuIFN0cmluZyhy
ZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKIH0KIAogdm9pZCBiYXNlNjRFbmNvZGUoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5j
b2RlUG9saWN5IHBvbGljeSkKIHsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7Cisg
ICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGRhdGEpLCBsZW4sIG91dCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOwogfQogCiBTdHJpbmcgYmFz
ZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBW
ZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIEJhc2U2NFVSTFBvbGljeSwgYmFz
ZTY0VVJMRW5jTWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ks
IGJhc2U2NFVSTEVuY01hcCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1
bHQuc2l6ZSgpKTsKIH0KIAogdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCkKIHsKLSAgICBiYXNlNjRFbmNvZGVJbnRl
cm5hbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQ
b2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwgQmFzZTY0VVJMUG9s
aWN5LCBiYXNlNjRVUkxFbmNNYXApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGlj
IGlubGluZSBib29sIGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNvbnN0IGNoYXIg
KCZkZWNvZGVNYXApWzEyOF0pCitzdGF0aWMgaW5saW5lIGJvb2wgYmFzZTY0RGVjb2RlSW50ZXJu
YWwoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4m
IG91dCwgdW5zaWduZWQgb3B0aW9ucywgY29uc3QgY2hhciAoJmRlY29kZU1hcClbMTI4XSkKIHsK
ICAgICBvdXQuY2xlYXIoKTsKICAgICBpZiAoIWxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQu
aAkocmV2aXNpb24gMjA1OTY3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAgICAgU2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyKFZlY3RvcjxjaGFyPiYgdmVjdG9yKSB7IG1fdmVjdG9yLmMgPSAm
dmVjdG9yOyB9CiAgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rvcjx1
aW50OF90PiYgdmVjdG9yKSB7IG1fdmVjdG9yLnUgPSAmdmVjdG9yOyB9CiAKLSAgICBvcGVyYXRv
ciBWZWN0b3I8Y2hhcj4mKCkgeyByZXR1cm4gKm1fdmVjdG9yLmM7IH0KLSAgICB2b2lkIGNsZWFy
KCkgeyBtX3ZlY3Rvci5jLT5jbGVhcigpOyB9CisgICAgb3BlcmF0b3IgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+JigpIHsgcmV0dXJuICptX3ZlY3Rvci51OyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV92
ZWN0b3IudS0+Y2xlYXIoKTsgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKQEAgLTY2LDkgKzY2
LDkgQEAgcHVibGljOgogICAgIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKSB7IG1fdmVjdG9yLmMgPSAmdmVjdG9yOyB9CiAg
ICAgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2ZWN0b3IpIHsgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7IH0KIAotICAgIG9wZXJhdG9y
IGNvbnN0IFZlY3RvcjxjaGFyPiYoKSB7IHJldHVybiAqbV92ZWN0b3IuYzsgfQotICAgIGNvbnN0
IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5jLT5kYXRhKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmMtPnNpemUoKTsgfQorICAgIG9w
ZXJhdG9yIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYoKSB7IHJldHVybiAqbV92ZWN0b3Iu
dTsgfQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Zl
Y3Rvci51LT5kYXRhKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yLnUtPnNpemUoKTsgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288990</attachid>
            <date>2016-09-15 13:33:43 -0700</date>
            <delta_ts>2016-09-20 09:00:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161866-20160915133104.patch</filename>
            <type>text/plain</type>
            <size>8126</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1OTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTA5LTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAg
ICAgICBVbmRlZmluZWQgYmVoYXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5n
IGEgbmVnYXRpdmUgbnVtYmVyIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91
Z2ggbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gZGVmaW5lIGl0LiBFeHBsaWNpdGx5IGNsYXJpZnlp
bmcgdGhlIGludGVuZGVkIGJlaGF2aW9yIGR1ZSB0byBzaGlmdGluZyBuZWdhdGl2ZSBudW1iZXIg
aW4gc29tZSBjYXNlcy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmVuY29kZSk6IEV4cGxpY2l0bHkgY2FzdCBzaWdu
ZWQgaW50ZWdlciBmb3IgbGVmdCBzaGlmdC4KKwogMjAxNi0wOS0xNSAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDIwNTk5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3
ICsyOTgsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaW50NjRfdCBraW5kQXNJbnQgPSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihraW5kKTsKICAgICAgICAgQVNTRVJUKGtpbmRBc0ludCA8ICgx
IDw8IHRvcFNoaWZ0KSk7Ci0gICAgICAgIHJldHVybiBraW5kQXNJbnQgfCAocGF5bG9hZC5pc1Rv
cCgpIDw8IHRvcFNoaWZ0KSB8IChwYXlsb2FkLnZhbHVlSW1wbCgpIDw8IHZhbHVlU2hpZnQpOwor
ICAgICAgICByZXR1cm4ga2luZEFzSW50IHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYXlsb2Fk
LmlzVG9wKCkpIDw8IHRvcFNoaWZ0KSB8IChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBheWxvYWQu
dmFsdWVJbXBsKCkpIDw8IHZhbHVlU2hpZnQpOwogICAgIH0KICAgICAKICAgICAvLyBUaGUgbGF5
b3V0IG9mIHRoZSB2YWx1ZSBpczoKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU5OTIpCisrKyBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA5LTE1
ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAgICAgICBVbmRlZmlu
ZWQgYmVoYXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5nIGEgbmVnYXRpdmUg
bnVtYmVyIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91Z2ggbW9zdCBpbXBs
ZW1lbnRhdGlvbnMgZG8gZGVmaW5lIGl0LiBFeHBsaWNpdGx5IGNsYXJpZnlpbmcgdGhlIGludGVu
ZGVkIGJlaGF2aW9yIGR1ZSB0byBzaGlmdGluZyBuZWdhdGl2ZSBudW1iZXIgaW4gc29tZSBjYXNl
cy4KKworICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2
NEVuY29kZUludGVybmFsKTogQ2hhbmdlZCBzaWduZWQgY2hhcmFjdGVyIHRvIHVuc2lnbmVkIHdo
ZW4gc2hpZnRpbmcuCisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZSk6IERpdHRvLgorICAgICAg
ICAoV1RGOjpiYXNlNjRVUkxFbmNvZGUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6YmFzZTY0RGVj
b2RlSW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDogRGl0dG8u
CisgICAgICAgIChXVEY6OlNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik6IFJlYnVp
bHQgdG8gc3RvcCB1c2luZyB1bmlvbiBhcyBhIGJpdHdpc2VfY2FzdC4KKyAgICAgICAgKFdURjo6
Q29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOiBEaXR0by4KKwogMjAxNi0w
OS0xNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQ
cmFnbWEgb3V0IHVuZGVmaW5lZC12YXItdGVtcGxhdGUgd2FybmluZ3MgaW4gSlNDIGZvciBKU09i
amVjdHMgdGhhdCBhcmUgdGVtcGxhdGl6ZWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAJKHJl
dmlzaW9uIDIwNTk5MikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxEZWNN
YXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwgMHgzMywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0
LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0CiB9OwogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3Qg
Y2hhciAoJmVuY29kZU1hcClbNjRdKQorc3RhdGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUlu
dGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNo
YXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVN
YXApWzY0XSkKIHsKICAgICBvdXQuY2xlYXIoKTsKICAgICBpZiAoIWxlbikKQEAgLTE2MCwyOSAr
MTYwLDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbCgKIFN0cmlu
ZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5KQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYmFz
ZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgs
IHJlc3VsdCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOworICAgIGJhc2U2NEVuY29kZUludGVybmFs
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQs
IHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKICAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCkpOwogfQogCiB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5KQogewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihkYXRhKSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICBiYXNlNjRFbmNv
ZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbiwg
b3V0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7CiB9CiAKIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZlY3RvcjxjaGFyPiBy
ZXN1bHQ7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEpLCBsZW5ndGgsIHJlc3VsdCwgQmFzZTY0VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXAp
OworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5j
TWFwKTsKICAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwog
fQogCiB2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4s
IFZlY3RvcjxjaGFyPiYgb3V0KQogewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuLCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0
VVJMRW5jTWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVS
TEVuY01hcCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIGJvb2wg
YmFzZTY0RGVjb2RlSW50ZXJuYWwoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBWZWN0
b3I8Y2hhcj4mIG91dCwgdW5zaWduZWQgb3B0aW9ucywgY29uc3QgY2hhciAoJmRlY29kZU1hcClb
MTI4XSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciYg
b3V0LCB1bnNpZ25lZCBvcHRpb25zLCBjb25zdCBjaGFyICgmZGVjb2RlTWFwKVsxMjhdKQogewog
ICAgIG91dC5jbGVhcigpOwogICAgIGlmICghbGVuZ3RoKQpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5o
CShyZXZpc2lvbiAyMDU5OTIpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMyArNDgsNTYgQEAgZW51bSBCYXNlNjREZWNvZGVPcHRpb25zIHsK
IAogY2xhc3MgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIHsKIHB1YmxpYzoKLSAg
ICBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9yPGNoYXI+JiB2ZWN0b3Ip
IHsgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7IH0KLSAgICBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IpIHsgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7
IH0KLQotICAgIG9wZXJhdG9yIFZlY3RvcjxjaGFyPiYoKSB7IHJldHVybiAqbV92ZWN0b3IuYzsg
fQotICAgIHZvaWQgY2xlYXIoKSB7IG1fdmVjdG9yLmMtPmNsZWFyKCk7IH0KKyAgICBTaWduZWRP
clVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCisgICAgICAg
IDogbV9pc1NpZ25lZCh0cnVlKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7
CisgICAgfQorICAgIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8dWlu
dDhfdD4mIHZlY3RvcikKKyAgICAgICAgOiBtX2lzU2lnbmVkKGZhbHNlKQorICAgIHsKKyAgICAg
ICAgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7CisgICAgfQorCisgICAgdWludDhfdCogZGF0YSgpCisg
ICAgeworICAgICAgICBpZiAobV9pc1NpZ25lZCkKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5jLT5kYXRhKCkpOworICAgICAgICByZXR1cm4g
bV92ZWN0b3IudS0+ZGF0YSgpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9pc1NpZ25lZCkKKyAgICAgICAgICAgIHJldHVybiBtX3Zl
Y3Rvci5jLT5zaXplKCk7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvci51LT5zaXplKCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNTaWduZWQp
CisgICAgICAgICAgICBtX3ZlY3Rvci5jLT5jbGVhcigpOworICAgICAgICBtX3ZlY3Rvci51LT5j
bGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpCisgICAgewor
ICAgICAgICBpZiAobV9pc1NpZ25lZCkKKyAgICAgICAgICAgIG1fdmVjdG9yLmMtPmdyb3coc2l6
ZSk7CisgICAgICAgIG1fdmVjdG9yLnUtPmdyb3coc2l6ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2hyaW5rKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNTaWduZWQpCisg
ICAgICAgICAgICBtX3ZlY3Rvci5jLT5zaHJpbmsoc2l6ZSk7CisgICAgICAgIG1fdmVjdG9yLnUt
PnNocmluayhzaXplKTsKKyAgICB9CisgICAgCisgICAgdWludDhfdCYgb3BlcmF0b3JbXShzaXpl
X3QgcG9zaXRpb24pIHsgcmV0dXJuIGRhdGEoKVtwb3NpdGlvbl07IH0KIAogcHJpdmF0ZToKKyAg
ICBib29sIG1faXNTaWduZWQ7CiAgICAgdW5pb24gewogICAgICAgICBWZWN0b3I8Y2hhcj4qIGM7
CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiogdTsKQEAgLTYzLDE0ICsxMDYsMzIgQEAgcHJpdmF0
ZToKIAogY2xhc3MgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVi
bGljOgotICAgIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmVjdG9yKSB7IG1fdmVjdG9yLmMgPSAmdmVjdG9yOyB9Ci0gICAgQ29uc3RT
aWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
ZWN0b3IpIHsgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7IH0KLQotICAgIG9wZXJhdG9yIGNvbnN0IFZl
Y3RvcjxjaGFyPiYoKSB7IHJldHVybiAqbV92ZWN0b3IuYzsgfQotICAgIGNvbnN0IGNoYXIqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5jLT5kYXRhKCk7IH0KLSAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmMtPnNpemUoKTsgfQorICAgIENvbnN0U2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQor
ICAgICAgICA6IG1faXNTaWduZWQoZmFsc2UpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5jID0g
JnZlY3RvcjsKKyAgICB9CisgICAgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IpCisgICAgICAgIDogbV9pc1NpZ25lZCh0
cnVlKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7CisgICAgfQorCisgICAg
Y29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9pc1NpZ25l
ZCkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPiht
X3ZlY3Rvci5jLT5kYXRhKCkpOworICAgICAgICByZXR1cm4gbV92ZWN0b3IudS0+ZGF0YSgpOwor
ICAgIH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9pc1Np
Z25lZCkKKyAgICAgICAgICAgIHJldHVybiBtX3ZlY3Rvci5jLT5zaXplKCk7CisgICAgICAgIHJl
dHVybiBtX3ZlY3Rvci51LT5zaXplKCk7CisgICAgfQogCiBwcml2YXRlOgorICAgIGJvb2wgbV9p
c1NpZ25lZDsKICAgICB1bmlvbiB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiogYzsKICAg
ICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+KiB1Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289355</attachid>
            <date>2016-09-20 09:00:54 -0700</date>
            <delta_ts>2016-09-20 10:16:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161866-20160920085807.patch</filename>
            <type>text/plain</type>
            <size>8233</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTA5LTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAg
ICAgICBVbmRlZmluZWQgYmVoYXZpb3I6IExlZnQgc2hpZnQgbmVnYXRpdmUgbnVtYmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4NjYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHNoaWZ0aW5n
IGEgbmVnYXRpdmUgbnVtYmVyIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDL0MrKywgYWx0aG91
Z2ggbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gZGVmaW5lIGl0LiBFeHBsaWNpdGx5IGNsYXJpZnlp
bmcgdGhlIGludGVuZGVkIGJlaGF2aW9yIGR1ZSB0byBzaGlmdGluZyBuZWdhdGl2ZSBudW1iZXIg
aW4gc29tZSBjYXNlcy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmVuY29kZSk6IEV4cGxpY2l0bHkgY2FzdCBzaWdu
ZWQgaW50ZWdlciBmb3IgbGVmdCBzaGlmdC4KKwogMjAxNi0wOS0xOSAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEhhc093blByb3BlcnR5IGZhc3RlcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZp
c2lvbiAyMDYxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIGludDY0X3Qga2luZEFzSW50ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oa2luZCk7CiAg
ICAgICAgIEFTU0VSVChraW5kQXNJbnQgPCAoMSA8PCB0b3BTaGlmdCkpOwotICAgICAgICByZXR1
cm4ga2luZEFzSW50IHwgKHBheWxvYWQuaXNUb3AoKSA8PCB0b3BTaGlmdCkgfCAocGF5bG9hZC52
YWx1ZUltcGwoKSA8PCB2YWx1ZVNoaWZ0KTsKKyAgICAgICAgcmV0dXJuIGtpbmRBc0ludCB8IChz
dGF0aWNfY2FzdDx1aW50NjRfdD4ocGF5bG9hZC5pc1RvcCgpKSA8PCB0b3BTaGlmdCkgfCAoYml0
d2lzZV9jYXN0PHVpbnQ2NF90PihwYXlsb2FkLnZhbHVlSW1wbCgpKSA8PCB2YWx1ZVNoaWZ0KTsK
ICAgICB9CiAgICAgCiAgICAgLy8gVGhlIGxheW91dCBvZiB0aGUgdmFsdWUgaXM6CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjA2MTQ1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMSBAQAorMjAxNi0wOS0yMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBh
cHBsZS5jb20+CisKKyAgICAgICAgVW5kZWZpbmVkIGJlaGF2aW9yOiBMZWZ0IHNoaWZ0IG5lZ2F0
aXZlIG51bWJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYxODY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGVmdCBzaGlmdGluZyBhIG5lZ2F0aXZlIG51bWJlciBpcyB1bmRlZmluZWQgYmVoYXZpb3Ig
aW4gQy9DKyssIGFsdGhvdWdoIG1vc3QgaW1wbGVtZW50YXRpb25zIGRvIGRlZmluZSBpdC4gRXhw
bGljaXRseSBjbGFyaWZ5aW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBkdWUgdG8gc2hpZnRpbmcg
bmVnYXRpdmUgbnVtYmVyIGluIHNvbWUgY2FzZXMuCisKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNl
NjQuY3BwOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVJbnRlcm5hbCk6IENoYW5nZWQgc2ln
bmVkIGNoYXJhY3RlciB0byB1bnNpZ25lZCB3aGVuIHNoaWZ0aW5nLgorICAgICAgICAoV1RGOjpi
YXNlNjRFbmNvZGUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRW5jb2RlKTogRGl0
dG8uCisgICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVybmFsKTogRGl0dG8uCisgICAgICAg
ICogd3RmL3RleHQvQmFzZTY0Lmg6IERpdHRvLgorICAgICAgICAoV1RGOjpTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIpOiBSZWJ1aWx0IHRvIHN0b3AgdXNpbmcgdW5pb24gYXMgYSBi
aXR3aXNlX2Nhc3QuCisgICAgICAgIChXVEY6OkNvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyKTogRGl0dG8uCisKIDIwMTYtMDktMTkgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKSBhdXRv
bWF0aWMgdGV4dCBzaXplIGFkanVzdG1lbnQgY29kZQpJbmRleDogU291cmNlL1dURi93dGYvdGV4
dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNw
cAkocmV2aXNpb24gMjA2MTQ1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGJhc2U2NFVS
TERlY01hcFsxMjhdID0KICAgICAweDMxLCAweDMyLCAweDMzLCBub25BbHBoYWJldCwgbm9uQWxw
aGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQKIH07CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCBjaGFyKiBkYXRhLCB1bnNp
Z25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5LCBj
b25zdCBjaGFyICgmZW5jb2RlTWFwKVs2NF0pCitzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5j
b2RlSW50ZXJuYWwoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0
b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVu
Y29kZU1hcClbNjRdKQogewogICAgIG91dC5jbGVhcigpOwogICAgIGlmICghbGVuKQpAQCAtMTYw
LDI5ICsxNjAsMjkgQEAgc3RhdGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKAog
U3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEJh
c2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxl
bmd0aCwgcmVzdWx0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50
ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW5ndGgsIHJl
c3VsdCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOwogICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRh
dGEoKSwgcmVzdWx0LnNpemUoKSk7CiB9CiAKIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3kpCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEpLCBsZW4sIG91dCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOworICAgIGJhc2U2
NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwg
bGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKIH0KIAogU3RyaW5nIGJhc2U2NFVSTEVu
Y29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVu
Y01hcCk7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGRhdGEpLCBsZW5ndGgsIHJlc3VsdCwgQmFzZTY0VVJMUG9saWN5LCBiYXNlNjRV
UkxFbmNNYXApOwogICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUo
KSk7CiB9CiAKIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVk
IGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwgQmFzZTY0VVJMUG9saWN5LCBi
YXNlNjRVUkxFbmNNYXApOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuLCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFz
ZTY0VVJMRW5jTWFwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgs
IFZlY3RvcjxjaGFyPiYgb3V0LCB1bnNpZ25lZCBvcHRpb25zLCBjb25zdCBjaGFyICgmZGVjb2Rl
TWFwKVsxMjhdKQorc3RhdGljIGlubGluZSBib29sIGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0
IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyJiBvdXQsIHVuc2lnbmVkIG9wdGlvbnMsIGNvbnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0p
CiB7CiAgICAgb3V0LmNsZWFyKCk7CiAgICAgaWYgKCFsZW5ndGgpCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmgJKHJldmlzaW9uIDIwNjE0NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCw2MiBAQCBlbnVtIEJhc2U2NERlY29kZU9wdGlv
bnMgewogCiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewogcHVibGlj
OgotICAgIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZl
Y3RvcikgeyBtX3ZlY3Rvci5jID0gJnZlY3RvcjsgfQotICAgIFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlcihWZWN0b3I8dWludDhfdD4mIHZlY3RvcikgeyBtX3ZlY3Rvci51ID0gJnZl
Y3RvcjsgfQotCi0gICAgb3BlcmF0b3IgVmVjdG9yPGNoYXI+JigpIHsgcmV0dXJuICptX3ZlY3Rv
ci5jOyB9Ci0gICAgdm9pZCBjbGVhcigpIHsgbV92ZWN0b3IuYy0+Y2xlYXIoKTsgfQorICAgIFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikKKyAg
ICAgICAgOiBtX2lzU2lnbmVkKHRydWUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5jID0gJnZl
Y3RvcjsKKyAgICB9CisgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rv
cjx1aW50OF90PiYgdmVjdG9yKQorICAgICAgICA6IG1faXNTaWduZWQoZmFsc2UpCisgICAgewor
ICAgICAgICBtX3ZlY3Rvci51ID0gJnZlY3RvcjsKKyAgICB9CisKKyAgICB1aW50OF90KiBkYXRh
KCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzU2lnbmVkKQorICAgICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yLmMtPmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBtX3ZlY3Rvci51LT5kYXRhKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzU2lnbmVkKQorICAgICAgICAgICAgcmV0dXJu
IG1fdmVjdG9yLmMtPnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnUtPnNpemUoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAobV9pc1Np
Z25lZCkgeworICAgICAgICAgICAgbV92ZWN0b3IuYy0+Y2xlYXIoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3ZlY3Rvci51LT5jbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAobV9pc1Np
Z25lZCkgeworICAgICAgICAgICAgbV92ZWN0b3IuYy0+Z3JvdyhzaXplKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3ZlY3Rvci51LT5ncm93KHNpemUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNocmluayhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlm
IChtX2lzU2lnbmVkKSB7CisgICAgICAgICAgICBtX3ZlY3Rvci5jLT5zaHJpbmsoc2l6ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV92ZWN0b3IudS0+c2hyaW5r
KHNpemUpOworICAgIH0KKyAgICAKKyAgICB1aW50OF90JiBvcGVyYXRvcltdKHNpemVfdCBwb3Np
dGlvbikgeyByZXR1cm4gZGF0YSgpW3Bvc2l0aW9uXTsgfQogCiBwcml2YXRlOgorICAgIGJvb2wg
bV9pc1NpZ25lZDsKICAgICB1bmlvbiB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiogYzsKICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+KiB1OwpAQCAtNjMsMTQgKzExMiwzMiBAQCBwcml2YXRlOgogCiBj
bGFzcyBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciB7CiBwdWJsaWM6Ci0g
ICAgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPGNo
YXI+JiB2ZWN0b3IpIHsgbV92ZWN0b3IuYyA9ICZ2ZWN0b3I7IH0KLSAgICBDb25zdFNpZ25lZE9y
VW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlY3Rvcikg
eyBtX3ZlY3Rvci51ID0gJnZlY3RvcjsgfQotCi0gICAgb3BlcmF0b3IgY29uc3QgVmVjdG9yPGNo
YXI+JigpIHsgcmV0dXJuICptX3ZlY3Rvci5jOyB9Ci0gICAgY29uc3QgY2hhciogZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yLmMtPmRhdGEoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3IuYy0+c2l6ZSgpOyB9CisgICAgQ29uc3RTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCisgICAgICAg
IDogbV9pc1NpZ25lZChmYWxzZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLmMgPSAmdmVjdG9y
OworICAgIH0KKyAgICBDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihjb25z
dCBWZWN0b3I8dWludDhfdD4mIHZlY3RvcikKKyAgICAgICAgOiBtX2lzU2lnbmVkKHRydWUpCisg
ICAgeworICAgICAgICBtX3ZlY3Rvci51ID0gJnZlY3RvcjsKKyAgICB9CisKKyAgICBjb25zdCB1
aW50OF90KiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzU2lnbmVkKQorICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fdmVjdG9y
LmMtPmRhdGEoKSk7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvci51LT5kYXRhKCk7CisgICAgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzU2lnbmVkKQor
ICAgICAgICAgICAgcmV0dXJuIG1fdmVjdG9yLmMtPnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yLnUtPnNpemUoKTsKKyAgICB9CiAKIHByaXZhdGU6CisgICAgYm9vbCBtX2lzU2lnbmVk
OwogICAgIHVuaW9uIHsKICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+KiBjOwogICAgICAgICBj
b25zdCBWZWN0b3I8dWludDhfdD4qIHU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>