<?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>137869</bug_id>
          
          <creation_ts>2014-10-19 18:33:59 -0700</creation_ts>
          <short_desc>[Mac] Optimize cookiesForDOM() by filtering and serializing cookies in a single pass</short_desc>
          <delta_ts>2014-10-24 12:42:36 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042706</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 18:33:59 -0700</bug_when>
    <thetext>Optimize cookiesForDOM() by filtering and serializing in 1 pass instead of 2.

Currently, when accessing document.cookie, we end up doing the following:
1. Call wkHTTPCookiesForURL() to get an NSArray of NSHTTPCookies.
2. Call filterCookies() to filter out cookies that are httpOnly or with an empty name, thus allocating a new NSMutableArray.
3. Call NSHTTPCookie&apos;s requestHeaderFieldsWithCookies() to serialize the cookies
4. Construct a WTF::String from the NSString*

There are several inefficiencies here:
1. We need to pre-filter the cookies and allocate a new NSMutableArray before calling requestHeaderFieldsWithCookies()
2. requestHeaderFieldsWithCookies() does more things that we actually need. It constructs a Dictionary of header fields, of which we query the &quot;Cookie&quot; field, even though we merely want a &apos;;&apos;-separated string representation of the cookies in &quot;key=value&quot; form.

My proposal is to take care of the string serialization ourselves using a StringBuilder as it is trivial to do. This also allows us to filter out the httpOnly/invalid cookies as we do the serialization instead of having a first pass for this.

When scrolling the http://www.apple.com/iphone/ entire page down, then up, I see that we spend 13.1% of the NetworkProcess time in WebCore::cookiesForDOM() (~96ms):
Running Time	Self		Symbol Name
96.0ms   13.1%	1.0	 	WebCore::cookiesForDOM(WebCore::NetworkStorageSession const&amp;, WebCore::URL const&amp;, WebCore::URL const&amp;)
51.0ms    7.0%	0.0	 	 -[NSHTTPCookieStorage cookiesForURL:]
26.0ms    3.5%	0.0	 	 +[NSHTTPCookie requestHeaderFieldsWithCookies:]
8.0ms    1.0%	0.0	 	 WebCore::filterCookies(NSArray*)
6.0ms    0.8%	0.0	 	 WebCore::URL::operator NSURL*() const
1.0ms    0.1%	1.0	 	 objc_msgSend
1.0ms    0.1%	0.0	 	 CFRelease
1.0ms    0.1%	1.0	 	 WKHTTPCookiesForURL
1.0ms    0.1%	0.0	 	 WTF::String::String(NSString*)

As you can see, 4.5% of the time is spent in requestHeaderFieldsWithCookies + filterCookies. By doing this in 1 pass, as suggested, we can decrease the time spent in WebCore::cookiesForDOM() by almost 30% (~96ms -&gt; ~74ms):
Running Time	Self		Symbol Name
74.0ms   11.4%	1.0	 	WebCore::cookiesForDOM(WebCore::NetworkStorageSession const&amp;, WebCore::URL const&amp;, WebCore::URL const&amp;)
50.0ms    7.7%	0.0	 	 -[NSHTTPCookieStorage cookiesForURL:]
5.0ms    0.7%	0.0	 	 WebCore::URL::operator NSURL*() const
5.0ms    0.7%	0.0	 	 -[NSHTTPCookie name]
4.0ms    0.6%	0.0	 	 -[NSHTTPCookie value]
2.0ms    0.3%	0.0	 	 bmalloc::Deallocator::deallocateSlowCase(void*)
2.0ms    0.3%	2.0	 	 WTF::StringBuilder::append(WTF::String const&amp;)
2.0ms    0.3%	0.0	 	 WTF::String::String(NSString*)
1.0ms    0.1%	0.0	 	 &lt;Unknown Address&gt;
1.0ms    0.1%	1.0	 	 WTF::StringBuilder::append(unsigned char const*, unsigned int)
1.0ms    0.1%	1.0	 	 objc_msgSend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042707</commentid>
    <comment_count>1</comment_count>
      <attachid>240091</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 18:40:46 -0700</bug_when>
    <thetext>Created attachment 240091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042710</commentid>
    <comment_count>2</comment_count>
      <attachid>240092</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 19:46:00 -0700</bug_when>
    <thetext>Created attachment 240092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042720</commentid>
    <comment_count>3</comment_count>
      <attachid>240092</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-19 20:18:42 -0700</bug_when>
    <thetext>Comment on attachment 240092
Patch

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

&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:88
&gt; +        cookiesBuilder.append(String([cookie name]));

If performance is enough of an issue here, we should consider coming up with a refinement to StringBuilder that doesn’t require allocating a new String for each NSString.

&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:92
&gt; +        if (cookie != lastCookie)
&gt; +            cookiesBuilder.appendLiteral(&quot;; &quot;);

I think a cleaner way to write this is to put at the beginning of the loop:

    if (!cookiesBuilder.isEmpty())
        cookiesBuilder.appendLiteral(&quot;; &quot;);

Then we don’t need lastCookie.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042724</commentid>
    <comment_count>4</comment_count>
      <attachid>240092</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 20:26:37 -0700</bug_when>
    <thetext>Comment on attachment 240092
Patch

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

&gt;&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:88
&gt;&gt; +        cookiesBuilder.append(String([cookie name]));
&gt; 
&gt; If performance is enough of an issue here, we should consider coming up with a refinement to StringBuilder that doesn’t require allocating a new String for each NSString.

Yes, this is a bit unfortunate. However, at the moment, according to the profile (see bottom of the bug description), the impact seems fairly minimal:
2.0ms    0.3%	0.0	 	 WTF::String::String(NSString*)

&gt;&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:92
&gt;&gt; +            cookiesBuilder.appendLiteral(&quot;; &quot;);
&gt; 
&gt; I think a cleaner way to write this is to put at the beginning of the loop:
&gt; 
&gt;     if (!cookiesBuilder.isEmpty())
&gt;         cookiesBuilder.appendLiteral(&quot;; &quot;);
&gt; 
&gt; Then we don’t need lastCookie.

Oh right, better indeed, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042730</commentid>
    <comment_count>5</comment_count>
      <attachid>240097</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-19 20:55:33 -0700</bug_when>
    <thetext>Created attachment 240097
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042743</commentid>
    <comment_count>6</comment_count>
      <attachid>240097</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-20 00:09:43 -0700</bug_when>
    <thetext>Comment on attachment 240097
Patch

Clearing flags on attachment: 240097

Committed r174877: &lt;http://trac.webkit.org/changeset/174877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042744</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-20 00:09:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044030</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-10-24 12:42:36 -0700</bug_when>
    <thetext>This caused bug 138053.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240091</attachid>
            <date>2014-10-19 18:40:46 -0700</date>
            <delta_ts>2014-10-19 19:45:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137869-20141019184052.patch</filename>
            <type>text/plain</type>
            <size>5270</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3OTkwNjU5YmY1N2I5
Yzg3MjIxMTY5MTg3NGVmZjJiZWU3Yzc5Zi4uMTk0ZjU5NDVjYTBlYTZkMDg2NzY4NzMxY2E1ZDNl
MzRiMTE4OTBjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gT3B0aW1pemUgY29v
a2llc0ZvckRPTSgpIGJ5IGZpbHRlcmluZyBhbmQgc2VyaWFsaXppbmcgY29va2llcyBpbiBhIHNp
bmdsZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPcHRpbWl6ZSBjb29raWVzRm9yRE9NKCkgYnkgZmlsdGVyaW5nIGFuZCBzZXJpYWxpemluZyBp
biAxIHBhc3MgaW5zdGVhZCBvZiAyLgorCisgICAgICAgIFByZXZpb3VzbHksIHdoZW4gYWNjZXNz
aW5nIGRvY3VtZW50LmNvb2tpZSwgd2UgZW5kZWQgdXAgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAg
ICAgICAgMS4gQ2FsbCB3a0hUVFBDb29raWVzRm9yVVJMKCkgdG8gZ2V0IGFuIE5TQXJyYXkgb2Yg
TlNIVFRQQ29va2llcy4KKyAgICAgICAgMi4gQ2FsbCBmaWx0ZXJDb29raWVzKCkgdG8gZmlsdGVy
IG91dCBjb29raWVzIHRoYXQgYXJlIGh0dHBPbmx5IG9yIHdpdGggYW4KKyAgICAgICAgICAgZW1w
dHkgbmFtZSwgdGh1cyBhbGxvY2F0aW5nIGEgbmV3IE5TTXV0YWJsZUFycmF5LgorICAgICAgICAz
LiBDYWxsIE5TSFRUUENvb2tpZSdzIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpIHRv
IHNlcmlhbGl6ZSB0aGUKKyAgICAgICAgICAgY29va2llcworICAgICAgICA0LiBDb25zdHJ1Y3Qg
YSBXVEY6OlN0cmluZyBmcm9tIHRoZSBOU1N0cmluZyoKKworICAgICAgICBUaGVyZSB3ZXJlIHNl
dmVyYWwgaW5lZmZpY2llbmNpZXMgaGVyZToKKyAgICAgICAgMS4gV2UgbmVlZGVkIHRvIHByZS1m
aWx0ZXIgdGhlIGNvb2tpZXMgYW5kIGFsbG9jYXRlIGEgbmV3IE5TTXV0YWJsZUFycmF5CisgICAg
ICAgICAgIGJlZm9yZSBjYWxsaW5nIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpCisg
ICAgICAgIDIuIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpIGRvZXMgbW9yZSB0aGlu
Z3MgdGhhdCB3ZSBhY3R1YWxseSBuZWVkLgorICAgICAgICAgICBJdCBjb25zdHJ1Y3RzIGEgRGlj
dGlvbmFyeSBvZiBoZWFkZXIgZmllbGRzLCBvZiB3aGljaCB3ZSBxdWVyeSB0aGUKKyAgICAgICAg
ICAgIkNvb2tpZSIgZmllbGQsIGV2ZW4gdGhvdWdoIHdlIG1lcmVseSB3YW50IGEgJzsnLXNlcGFy
YXRlZCBzdHJpbmcKKyAgICAgICAgICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvb2tpZXMgaW4g
ImtleT12YWx1ZSIgZm9ybS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHdlIG5vdyB0YWtl
IGNhcmUgb2YgdGhlIHN0cmluZyBzZXJpYWxpemF0aW9uIG91cnNlbHZlcywKKyAgICAgICAgdXNp
bmcgYSBTdHJpbmdCdWlsZGVyIGFzIGl0IGlzIHRyaXZpYWwgdG8gZG8uIFRoaXMgYWxzbyBhbGxv
d3MgdXMgdG8gZmlsdGVyCisgICAgICAgIG91dCB0aGUgaHR0cE9ubHkvaW52YWxpZCBjb29raWVz
IGFzIHdlIGRvIHRoZSBzZXJpYWxpemF0aW9uIGluc3RlYWQgb2YKKyAgICAgICAgaGF2aW5nIGEg
Zmlyc3QgcGFzcyB0byBkbyBzby4KKworICAgICAgICBXaGVuIHNjcm9sbGluZyB0aGUgaHR0cDov
L3d3dy5hcHBsZS5jb20vaXBob25lLyBlbnRpcmUgcGFnZSBkb3duLCB0aGVuIHVwLAorICAgICAg
ICBzZSB3ZXJlIHNwZW5kaW5nIH4xMy4xJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MgdGltZSBpbiBj
b29raWVzRm9yRE9NKCkKKyAgICAgICAgKH45Nm1zKSBvbiBteSBtYWNoaW5lLiBXaXRoIHRoZSBw
YXRjaCwgd2Ugc3BlbmQgfjIzJSBsZXNzIHRpbWUgaW4KKyAgICAgICAgY29va2llc0ZvckRPTSgp
ICh+NzRtcykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpjb29raWVzRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVz
Rm9yRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KToKKwogMjAxNC0xMC0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBmcm9tIFBsYXRm
b3JtIHRvIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0Nvb2tpZUphck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Nvb2tpZUphck1hYy5tbQppbmRleCAzY2QxZDJkMWY0NGU0ZWJhMTcxNDY5NmJjMjQ0M2Ez
ZjgxZmRlYzk3Li42MmNlZTIyMTk1ODY5M2E5NDA1MzNkZGJlZmIzNThkOTFlOGM3ZjllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFj
Lm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBlbnVtIHsKICAgICBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCkBAIC02
OSwyNiArNzAsNDIgQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29raWVzKE5T
QXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9
CiAKLVN0cmluZyBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK2VudW0gSW5jbHVk
ZUhUVFBPbmx5T3JOb3QgeyBEb05vdEluY2x1ZGVIVFRQT25seSwgSW5jbHVkZUhUVFBPbmx5IH07
CitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgSW5j
bHVkZUhUVFBPbmx5T3JOb3QgaW5jbHVkZUhUVFBPbmx5KQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9y
VVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwpOwotICAg
IHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Zmls
dGVyQ29va2llcyhjb29raWVzKS5nZXQoKV0gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CisgICAg
U3RyaW5nQnVpbGRlciBjb29raWVzQnVpbGRlcjsKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nv
b2tpZXMgY291bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgTlNIVFRQQ29va2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tp
ZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhd
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkg
JiYgW2Nvb2tpZSBpc0hUVFBPbmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGNvb2tpZXNCdWlsZGVyLmFwcGVuZChTdHJpbmcoW2Nvb2tpZSBuYW1lXSkpOworICAgICAgICBj
b29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5k
KFN0cmluZyhbY29va2llIHZhbHVlXSkpOworICAgICAgICBpZiAoaSA8IGNvdW50IC0gMSkKKyAg
ICAgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7CisgICAgfQorICAg
IHJldHVybiBjb29raWVzQnVpbGRlci50b1N0cmluZygpOwogCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCitTdHJpbmcgY29va2llc0Zv
ckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmly
c3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoc2Vzc2lv
bi5jb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7Ci0gICAgcmV0dXJuIFtb
TlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmpl
Y3RGb3JLZXk6QCJDb29raWUiXTsKKyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oc2Vzc2lv
biwgZmlyc3RQYXJ0eSwgdXJsLCBEb05vdEluY2x1ZGVIVFRQT25seSk7Cit9CiAKLSAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBTdHJpbmcoKTsKK1N0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNl
c3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0
dXJuIGNvb2tpZXNGb3JTZXNzaW9uKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCwgSW5jbHVkZUhU
VFBPbmx5KTsKIH0KIAogdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llU3RyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240092</attachid>
            <date>2014-10-19 19:46:00 -0700</date>
            <delta_ts>2014-10-19 20:55:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137869-20141019194605.patch</filename>
            <type>text/plain</type>
            <size>5214</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3OTkwNjU5YmY1N2I5
Yzg3MjIxMTY5MTg3NGVmZjJiZWU3Yzc5Zi4uMTk0ZjU5NDVjYTBlYTZkMDg2NzY4NzMxY2E1ZDNl
MzRiMTE4OTBjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gT3B0aW1pemUgY29v
a2llc0ZvckRPTSgpIGJ5IGZpbHRlcmluZyBhbmQgc2VyaWFsaXppbmcgY29va2llcyBpbiBhIHNp
bmdsZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPcHRpbWl6ZSBjb29raWVzRm9yRE9NKCkgYnkgZmlsdGVyaW5nIGFuZCBzZXJpYWxpemluZyBp
biAxIHBhc3MgaW5zdGVhZCBvZiAyLgorCisgICAgICAgIFByZXZpb3VzbHksIHdoZW4gYWNjZXNz
aW5nIGRvY3VtZW50LmNvb2tpZSwgd2UgZW5kZWQgdXAgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAg
ICAgICAgMS4gQ2FsbCB3a0hUVFBDb29raWVzRm9yVVJMKCkgdG8gZ2V0IGFuIE5TQXJyYXkgb2Yg
TlNIVFRQQ29va2llcy4KKyAgICAgICAgMi4gQ2FsbCBmaWx0ZXJDb29raWVzKCkgdG8gZmlsdGVy
IG91dCBjb29raWVzIHRoYXQgYXJlIGh0dHBPbmx5IG9yIHdpdGggYW4KKyAgICAgICAgICAgZW1w
dHkgbmFtZSwgdGh1cyBhbGxvY2F0aW5nIGEgbmV3IE5TTXV0YWJsZUFycmF5LgorICAgICAgICAz
LiBDYWxsIE5TSFRUUENvb2tpZSdzIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpIHRv
IHNlcmlhbGl6ZSB0aGUKKyAgICAgICAgICAgY29va2llcworICAgICAgICA0LiBDb25zdHJ1Y3Qg
YSBXVEY6OlN0cmluZyBmcm9tIHRoZSBOU1N0cmluZyoKKworICAgICAgICBUaGVyZSB3ZXJlIHNl
dmVyYWwgaW5lZmZpY2llbmNpZXMgaGVyZToKKyAgICAgICAgMS4gV2UgbmVlZGVkIHRvIHByZS1m
aWx0ZXIgdGhlIGNvb2tpZXMgYW5kIGFsbG9jYXRlIGEgbmV3IE5TTXV0YWJsZUFycmF5CisgICAg
ICAgICAgIGJlZm9yZSBjYWxsaW5nIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpCisg
ICAgICAgIDIuIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpIGRvZXMgbW9yZSB0aGlu
Z3MgdGhhdCB3ZSBhY3R1YWxseSBuZWVkLgorICAgICAgICAgICBJdCBjb25zdHJ1Y3RzIGEgRGlj
dGlvbmFyeSBvZiBoZWFkZXIgZmllbGRzLCBvZiB3aGljaCB3ZSBxdWVyeSB0aGUKKyAgICAgICAg
ICAgIkNvb2tpZSIgZmllbGQsIGV2ZW4gdGhvdWdoIHdlIG1lcmVseSB3YW50IGEgJzsnLXNlcGFy
YXRlZCBzdHJpbmcKKyAgICAgICAgICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvb2tpZXMgaW4g
ImtleT12YWx1ZSIgZm9ybS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHdlIG5vdyB0YWtl
IGNhcmUgb2YgdGhlIHN0cmluZyBzZXJpYWxpemF0aW9uIG91cnNlbHZlcywKKyAgICAgICAgdXNp
bmcgYSBTdHJpbmdCdWlsZGVyIGFzIGl0IGlzIHRyaXZpYWwgdG8gZG8uIFRoaXMgYWxzbyBhbGxv
d3MgdXMgdG8gZmlsdGVyCisgICAgICAgIG91dCB0aGUgaHR0cE9ubHkvaW52YWxpZCBjb29raWVz
IGFzIHdlIGRvIHRoZSBzZXJpYWxpemF0aW9uIGluc3RlYWQgb2YKKyAgICAgICAgaGF2aW5nIGEg
Zmlyc3QgcGFzcyB0byBkbyBzby4KKworICAgICAgICBXaGVuIHNjcm9sbGluZyB0aGUgaHR0cDov
L3d3dy5hcHBsZS5jb20vaXBob25lLyBlbnRpcmUgcGFnZSBkb3duLCB0aGVuIHVwLAorICAgICAg
ICBzZSB3ZXJlIHNwZW5kaW5nIH4xMy4xJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MgdGltZSBpbiBj
b29raWVzRm9yRE9NKCkKKyAgICAgICAgKH45Nm1zKSBvbiBteSBtYWNoaW5lLiBXaXRoIHRoZSBw
YXRjaCwgd2Ugc3BlbmQgfjIzJSBsZXNzIHRpbWUgaW4KKyAgICAgICAgY29va2llc0ZvckRPTSgp
ICh+NzRtcykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpjb29raWVzRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVz
Rm9yRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KToKKwogMjAxNC0xMC0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBmcm9tIFBsYXRm
b3JtIHRvIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0Nvb2tpZUphck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Nvb2tpZUphck1hYy5tbQppbmRleCAzY2QxZDJkMWY0NGU0ZWJhMTcxNDY5NmJjMjQ0M2Ez
ZjgxZmRlYzk3Li4wMGRiODY4YTFlNTU5YThkODVhZGE3OThhMjIzZWYxMmYyODc0YjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFj
Lm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBlbnVtIHsKICAgICBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCkBAIC02
OSwyNiArNzAsNDEgQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29raWVzKE5T
QXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9
CiAKLVN0cmluZyBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK2VudW0gSW5jbHVk
ZUhUVFBPbmx5T3JOb3QgeyBEb05vdEluY2x1ZGVIVFRQT25seSwgSW5jbHVkZUhUVFBPbmx5IH07
CitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgSW5j
bHVkZUhUVFBPbmx5T3JOb3QgaW5jbHVkZUhUVFBPbmx5KQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9y
VVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwpOwotICAg
IHJldHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Zmls
dGVyQ29va2llcyhjb29raWVzKS5nZXQoKV0gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CisgICAg
U3RyaW5nQnVpbGRlciBjb29raWVzQnVpbGRlcjsKKyAgICBOU0hUVFBDb29raWUgKmxhc3RDb29r
aWUgPSBbY29va2llcyBsYXN0T2JqZWN0XTsKKyAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2ll
IGluIGNvb2tpZXMpIHsKKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkgJiYgW2Nv
b2tpZSBpc0hUVFBPbmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvb2tp
ZXNCdWlsZGVyLmFwcGVuZChTdHJpbmcoW2Nvb2tpZSBuYW1lXSkpOworICAgICAgICBjb29raWVz
QnVpbGRlci5hcHBlbmQoJz0nKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFN0cmlu
ZyhbY29va2llIHZhbHVlXSkpOworICAgICAgICBpZiAoY29va2llICE9IGxhc3RDb29raWUpCisg
ICAgICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7ICIpOworICAgIH0KKyAg
ICByZXR1cm4gY29va2llc0J1aWxkZXIudG9TdHJpbmcoKTsKIAogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQorU3RyaW5nIGNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLQotICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKHNlc3Np
b24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwpOwotICAgIHJldHVybiBb
W05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6Y29va2llc10gb2Jq
ZWN0Rm9yS2V5OkAiQ29va2llIl07CisgICAgcmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9uKHNlc3Np
b24sIGZpcnN0UGFydHksIHVybCwgRG9Ob3RJbmNsdWRlSFRUUE9ubHkpOworfQogCi0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU3RyaW5nKCk7CitTdHJpbmcgY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJl
dHVybiBjb29raWVzRm9yU2Vzc2lvbihzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwsIEluY2x1ZGVI
VFRQT25seSk7CiB9CiAKIHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240097</attachid>
            <date>2014-10-19 20:55:33 -0700</date>
            <delta_ts>2014-10-20 00:09:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137869-20141019205538.patch</filename>
            <type>text/plain</type>
            <size>5164</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3OTkwNjU5YmY1N2I5
Yzg3MjIxMTY5MTg3NGVmZjJiZWU3Yzc5Zi4uMjI5YjMzM2VkYTE5ODIzM2YzNzMzNzBjOGJmMjc2
YzkyOWUyODhmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gT3B0aW1pemUgY29v
a2llc0ZvckRPTSgpIGJ5IGZpbHRlcmluZyBhbmQgc2VyaWFsaXppbmcgY29va2llcyBpbiBhIHNp
bmdsZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBP
cHRpbWl6ZSBjb29raWVzRm9yRE9NKCkgYnkgZmlsdGVyaW5nIGFuZCBzZXJpYWxpemluZyBpbiAx
IHBhc3MgaW5zdGVhZCBvZiAyLgorCisgICAgICAgIFByZXZpb3VzbHksIHdoZW4gYWNjZXNzaW5n
IGRvY3VtZW50LmNvb2tpZSwgd2UgZW5kZWQgdXAgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAgICAg
ICAgMS4gQ2FsbCB3a0hUVFBDb29raWVzRm9yVVJMKCkgdG8gZ2V0IGFuIE5TQXJyYXkgb2YgTlNI
VFRQQ29va2llcy4KKyAgICAgICAgMi4gQ2FsbCBmaWx0ZXJDb29raWVzKCkgdG8gZmlsdGVyIG91
dCBjb29raWVzIHRoYXQgYXJlIGh0dHBPbmx5IG9yIHdpdGggYW4KKyAgICAgICAgICAgZW1wdHkg
bmFtZSwgdGh1cyBhbGxvY2F0aW5nIGEgbmV3IE5TTXV0YWJsZUFycmF5LgorICAgICAgICAzLiBD
YWxsIE5TSFRUUENvb2tpZSdzIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpIHRvIHNl
cmlhbGl6ZSB0aGUKKyAgICAgICAgICAgY29va2llcworICAgICAgICA0LiBDb25zdHJ1Y3QgYSBX
VEY6OlN0cmluZyBmcm9tIHRoZSBOU1N0cmluZyoKKworICAgICAgICBUaGVyZSB3ZXJlIHNldmVy
YWwgaW5lZmZpY2llbmNpZXMgaGVyZToKKyAgICAgICAgMS4gV2UgbmVlZGVkIHRvIHByZS1maWx0
ZXIgdGhlIGNvb2tpZXMgYW5kIGFsbG9jYXRlIGEgbmV3IE5TTXV0YWJsZUFycmF5CisgICAgICAg
ICAgIGJlZm9yZSBjYWxsaW5nIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpCisgICAg
ICAgIDIuIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llcygpIGRvZXMgbW9yZSB0aGluZ3Mg
dGhhdCB3ZSBhY3R1YWxseSBuZWVkLgorICAgICAgICAgICBJdCBjb25zdHJ1Y3RzIGEgRGljdGlv
bmFyeSBvZiBoZWFkZXIgZmllbGRzLCBvZiB3aGljaCB3ZSBxdWVyeSB0aGUKKyAgICAgICAgICAg
IkNvb2tpZSIgZmllbGQsIGV2ZW4gdGhvdWdoIHdlIG1lcmVseSB3YW50IGEgJzsnLXNlcGFyYXRl
ZCBzdHJpbmcKKyAgICAgICAgICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvb2tpZXMgaW4gImtl
eT12YWx1ZSIgZm9ybS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHdlIG5vdyB0YWtlIGNh
cmUgb2YgdGhlIHN0cmluZyBzZXJpYWxpemF0aW9uIG91cnNlbHZlcywKKyAgICAgICAgdXNpbmcg
YSBTdHJpbmdCdWlsZGVyIGFzIGl0IGlzIHRyaXZpYWwgdG8gZG8uIFRoaXMgYWxzbyBhbGxvd3Mg
dXMgdG8gZmlsdGVyCisgICAgICAgIG91dCB0aGUgaHR0cE9ubHkvaW52YWxpZCBjb29raWVzIGFz
IHdlIGRvIHRoZSBzZXJpYWxpemF0aW9uIGluc3RlYWQgb2YKKyAgICAgICAgaGF2aW5nIGEgZmly
c3QgcGFzcyB0byBkbyBzby4KKworICAgICAgICBXaGVuIHNjcm9sbGluZyB0aGUgaHR0cDovL3d3
dy5hcHBsZS5jb20vaXBob25lLyBlbnRpcmUgcGFnZSBkb3duLCB0aGVuIHVwLAorICAgICAgICBz
ZSB3ZXJlIHNwZW5kaW5nIH4xMy4xJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MgdGltZSBpbiBjb29r
aWVzRm9yRE9NKCkKKyAgICAgICAgKH45Nm1zKSBvbiBteSBtYWNoaW5lLiBXaXRoIHRoZSBwYXRj
aCwgd2Ugc3BlbmQgfjIzJSBsZXNzIHRpbWUgaW4KKyAgICAgICAgY29va2llc0ZvckRPTSgpICh+
NzRtcykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpjb29raWVzRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9y
RE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KwogMjAxNC0xMC0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gTW92ZSBHdGtEcmFnQW5kRHJvcEhlbHBlciBmcm9tIFBsYXRmb3Jt
IHRvIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Nvb2tpZUphck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L0Nvb2tpZUphck1hYy5tbQppbmRleCAzY2QxZDJkMWY0NGU0ZWJhMTcxNDY5NmJjMjQ0M2EzZjgx
ZmRlYzk3Li5lYmE1NTY5ZjU0NzA5NGM0M2RmYTFlYWYxYjNjMWVjMjg4YjliZWIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1t
CkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIk5ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBlbnVtIHsKICAgICBOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCkBAIC02OSwy
NiArNzAsNDEgQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29raWVzKE5TQXJy
YXkgKnVuZmlsdGVyZWRDb29raWVzKQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAK
LVN0cmluZyBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK2VudW0gSW5jbHVkZUhU
VFBPbmx5T3JOb3QgeyBEb05vdEluY2x1ZGVIVFRQT25seSwgSW5jbHVkZUhUVFBPbmx5IH07Citz
dGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgSW5jbHVk
ZUhUVFBPbmx5T3JOb3QgaW5jbHVkZUhUVFBPbmx5KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIAogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJM
KHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwpOwotICAgIHJl
dHVybiBbW05TSFRUUENvb2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6ZmlsdGVy
Q29va2llcyhjb29raWVzKS5nZXQoKV0gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CisgICAgU3Ry
aW5nQnVpbGRlciBjb29raWVzQnVpbGRlcjsKKyAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2ll
IGluIGNvb2tpZXMpIHsKKyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkgJiYgW2Nv
b2tpZSBpc0hUVFBPbmx5XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgh
Y29va2llc0J1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29va2llc0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiOyAiKTsKKworICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoU3RyaW5n
KFtjb29raWUgbmFtZV0pKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKCc9Jyk7Cisg
ICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChTdHJpbmcoW2Nvb2tpZSB2YWx1ZV0pKTsKKyAg
ICB9CisgICAgcmV0dXJuIGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK1N0cmluZyBj
b29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVS
TChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJsKTsKLSAgICBy
ZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tp
ZXNdIG9iamVjdEZvcktleTpAIkNvb2tpZSJdOworICAgIHJldHVybiBjb29raWVzRm9yU2Vzc2lv
bihzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwsIERvTm90SW5jbHVkZUhUVFBPbmx5KTsKK30KIAot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFN0cmluZygpOworU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK3sK
KyAgICByZXR1cm4gY29va2llc0ZvclNlc3Npb24oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBJ
bmNsdWRlSFRUUE9ubHkpOwogfQogCiB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>