<?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>145567</bug_id>
          
          <creation_ts>2015-06-02 13:39:11 -0700</creation_ts>
          <short_desc>[iOS] UI process memory spike, hang when uploading a very large JPEG</short_desc>
          <delta_ts>2015-06-09 06:27:57 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>iOS 8.2</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Honeycutt">jhoneycutt</reporter>
          <assigned_to name="Jon Honeycutt">jhoneycutt</assigned_to>
          <cc>aestes</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>enrica</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098881</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-06-02 13:39:11 -0700</bug_when>
    <thetext>Memory usage spike and UI process hangs for several seconds when attaching a large JPEG in a web form.

To reproduce:

1. Go to &lt;http://imgur.com&gt;
2. Click “Upload”
3. Click “device”
4. Select a very large JPEG from your photo library, e.g. &lt;http://imgsrc.hubblesite.org/hu/db/images/hs-2015-12-a-full_jpg.jpg&gt;

You do not have to try to upload the file; selecting it will exhibit the behavior as the UI process attempts to generate an icon from the image.

&lt;rdar://problem/21206699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098892</commentid>
    <comment_count>1</comment_count>
      <attachid>254101</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-06-02 14:12:48 -0700</bug_when>
    <thetext>Created attachment 254101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098896</commentid>
    <comment_count>2</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-06-02 14:18:01 -0700</bug_when>
    <thetext>Patch doesn’t apply because it depends on the changes from &lt;https://bugs.webkit.org/show_bug.cgi?id=145539&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098910</commentid>
    <comment_count>3</comment_count>
      <attachid>254101</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-06-02 14:53:14 -0700</bug_when>
    <thetext>Comment on attachment 254101
Patch

Nice! Looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099247</commentid>
    <comment_count>4</comment_count>
      <attachid>254101</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-03 13:32:48 -0700</bug_when>
    <thetext>Comment on attachment 254101
Patch

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

Patch doesn’t apply so you should upload a rebased one.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:93
&gt; +static const CGSize iconSize = { 100.0f, 100.0f };

Would be nice to have a comment explaining where the 100 comes from, why it’s a good value.

The use of 100.0f here is a little strange. In 64-bit it’s a double, not a float so you’d want “100.0”. But why not just say &quot;100&quot; instead?

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:154
&gt; +        (id)kCGImageSourceThumbnailMaxPixelSize: @(std::max(iconSize.width, iconSize.height)),

Seems a bit strange to call max on two compile time constants. Not sure I really understand why this is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099319</commentid>
    <comment_count>5</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-06-03 16:39:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 254101 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=254101&amp;action=review
&gt; 
&gt; Patch doesn’t apply so you should upload a rebased one.

This patch is on top of the changes from &lt;https://bugs.webkit.org/show_bug.cgi?id=145539&gt; which hasn&apos;t landed yet. I can reupload after that change lands.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:93
&gt; &gt; +static const CGSize iconSize = { 100.0f, 100.0f };
&gt; 
&gt; Would be nice to have a comment explaining where the 100 comes from, why
&gt; it’s a good value.

I&apos;m not sure where the 100 comes from. It was already in the code, I just moved it to a global so it could be shared.

&gt; 
&gt; The use of 100.0f here is a little strange. In 64-bit it’s a double, not a
&gt; float so you’d want “100.0”. But why not just say &quot;100&quot; instead?

I didn&apos;t know that CGFloat was a double on 64-bit! I fixed this to be 100.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:154
&gt; &gt; +        (id)kCGImageSourceThumbnailMaxPixelSize: @(std::max(iconSize.width, iconSize.height)),
&gt; 
&gt; Seems a bit strange to call max on two compile time constants. Not sure I
&gt; really understand why this is correct.

I want the larger of the width and the height, so that we can select the optimal size of the thumbnail to generate/retrieve, although in practice I don&apos;t expect the width and the height to differ. Would it be better to have a global CGFloat squareIconSideLength?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099780</commentid>
    <comment_count>6</comment_count>
      <attachid>254348</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-06-05 02:13:19 -0700</bug_when>
    <thetext>Created attachment 254348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100144</commentid>
    <comment_count>7</comment_count>
      <attachid>254348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-06 22:28:15 -0700</bug_when>
    <thetext>Comment on attachment 254348
Patch

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

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:95
&gt;  static CGRect squareCropRectForSize(CGSize size)

Not part of this patch, but reading this function, I see incorrect use of the rintf function. It’s wrong in two ways:

1) It always converts to a float, which is not good when CGFloat is a double in 64-bit.
2) It rounds based on “the prevailing rounding mode”; this is not what we want and is why we normally use functions from the round family of functions, not the rint family.

Since this is C++ code, the best solution is to use the std::round function, which is overloaded for both float and double.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:131
&gt; +    CGRect destRect = { CGPointZero, CGSizeMake(iconSideLength, iconSideLength) };

The idiom here is a bit strange. Instead we could write one of these more idiomatic forms:

    CGRect destRect { 0, 0, iconSideLength, iconSideLength };
    CGRect destRect = { 0, 0, iconSideLength, iconSideLength };
    CGRect destRect = CGRectMake(0, 0, iconSideLength, iconSideLength);

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:164
&gt; +    return squareImage([UIImage imageWithCGImage:thumbnail.get()]);

Seems like this could create an image smaller than 100x100; is that OK? Why not use thumbnailSizedImageForImage here? Should do no harm if the thumbnail is the right size and if it’s not exactly right it will correctly scale up.

Code in function below uses initWithCGImage: and adoptNS rather than imageWithCGImage: and relying on autorelease. It’s not elegant to use two different idioms in these adjacent functions. Also seems that these functions now share more. In both cases, once they create a CGImageRef the rest is the same. I also will note that thumbnailSizedImageForImage and squareImage unnecessarily take a UIImage. All they do is extract the CGImageRef from it, which is ironic since all we do to make the UIImage is wrap the CGImageRef in it! I believe this points to a little refactoring that would improve things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100604</commentid>
    <comment_count>8</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-06-09 01:20:23 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 254348 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=254348&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:95
&gt; &gt;  static CGRect squareCropRectForSize(CGSize size)
&gt; 
&gt; Not part of this patch, but reading this function, I see incorrect use of
&gt; the rintf function. It’s wrong in two ways:
&gt; 
&gt; 1) It always converts to a float, which is not good when CGFloat is a double
&gt; in 64-bit.
&gt; 2) It rounds based on “the prevailing rounding mode”; this is not what we
&gt; want and is why we normally use functions from the round family of
&gt; functions, not the rint family.
&gt; 
&gt; Since this is C++ code, the best solution is to use the std::round function,
&gt; which is overloaded for both float and double.
&gt; 

Fixed to use std::round.

&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:131
&gt; &gt; +    CGRect destRect = { CGPointZero, CGSizeMake(iconSideLength, iconSideLength) };
&gt; 
&gt; The idiom here is a bit strange. Instead we could write one of these more
&gt; idiomatic forms:
&gt; 
&gt;     CGRect destRect { 0, 0, iconSideLength, iconSideLength };
&gt;     CGRect destRect = { 0, 0, iconSideLength, iconSideLength };
&gt;     CGRect destRect = CGRectMake(0, 0, iconSideLength, iconSideLength);

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:164
&gt; &gt; +    return squareImage([UIImage imageWithCGImage:thumbnail.get()]);
&gt; 
&gt; Seems like this could create an image smaller than 100x100; is that OK? Why
&gt; not use thumbnailSizedImageForImage here? Should do no harm if the thumbnail
&gt; is the right size and if it’s not exactly right it will correctly scale up.

This should have called thumbnailSizedImageForImage. Fixed.

&gt; 
&gt; Code in function below uses initWithCGImage: and adoptNS rather than
&gt; imageWithCGImage: and relying on autorelease. It’s not elegant to use two
&gt; different idioms in these adjacent functions. Also seems that these
&gt; functions now share more. In both cases, once they create a CGImageRef the
&gt; rest is the same. I also will note that thumbnailSizedImageForImage and
&gt; squareImage unnecessarily take a UIImage. All they do is extract the
&gt; CGImageRef from it, which is ironic since all we do to make the UIImage is
&gt; wrap the CGImageRef in it! I believe this points to a little refactoring
&gt; that would improve things.

I did some minor refactoring here.

Thanks for the review!

Landed in &lt;http://trac.webkit.org/changeset/185357&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100639</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2015-06-09 06:27:57 -0700</bug_when>
    <thetext>Follow-up build fix in r185362.

&lt;http://trac.webkit.org/r185362&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254101</attachid>
            <date>2015-06-02 14:12:48 -0700</date>
            <delta_ts>2015-06-05 02:13:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0002-iOS-UI-process-memory-spike-hang-when-uploading-a-ve.patch</filename>
            <type>text/plain</type>
            <size>8777</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">RnJvbSA5N2VkMjEyMjc5NzlhOGVjZWUxMGIxYzViNzI3MDRmM2E4OGMzOTM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gSG9uZXljdXR0IDxqaG9uZXljdXR0QGFwcGxlLmNvbT4K
RGF0ZTogVHVlLCAyIEp1biAyMDE1IDE0OjAzOjQxIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gW2lP
U10gVUkgcHJvY2VzcyBtZW1vcnkgc3Bpa2UsIGhhbmcgd2hlbiB1cGxvYWRpbmcgYSB2ZXJ5CiBs
YXJnZSBKUEVHCgo8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTU2
Nz4KPHJkYXI6Ly9wcm9ibGVtLzIxMjA2Njk5PgoKV2hlbiB1cGxvYWRpbmcgYW4gaW1hZ2UsIHdl
IGdlbmVyYXRlIGEgdGh1bWJuYWlsIHRvIHVzZSBmb3IgYW4gaWNvbgp0aGF0IHNpdHMgbmV4dCB0
byB0aGUgY29udHJvbC4gVG8gZG8gdGhpcywgd2UgbG9hZCB0aGUgaW1hZ2UgYW5kIGRyYXcKaXQg
aW50byBhIHRodW1ibmFpbC1zaXplZCBjYW52YXMuIFRoaXMgY2FuIGJlIHZlcnkgZXhwZW5zaXZl
IGZvciBsYXJnZQppbWFnZXMuCgpUbyBmaXggdGhpcywgd2UnbGwgdXNlIENHSW1hZ2VTb3VyY2Ug
QVBJLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIGdldAphbnkgZXhpc3RpbmcgdGh1bWJuYWlsIHRo
YXQgZXhpc3RzIGluIHRoZSBzb3VyY2UgZmlsZS4KClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKKiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tOgoodGh1bWJuYWls
U2l6ZWRJbWFnZUZvckltYWdlKToKKGljb25Gb3JJbWFnZUZpbGUpOgpDcmVhdGUgYW4gaW1hZ2Ug
c291cmNlIGZvciB0aGUgZmlsZSwgdGhlbiB1c2UgQ0dJbWFnZVNvdXJjZSBBUEkgdG8KZ2VuZXJh
dGUgYSB0aHVtYm5haWwuCigtW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gaW5pdFdpdGhGaWxlVVJM
Om9yaWdpbmFsSW1hZ2U6XSk6IERlbGV0ZWQuCigtW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gZGlz
cGxheUltYWdlXSk6ClVzZSBpY29uRm9ySW1hZ2VGaWxlKCkgcmF0aGVyIHRoYW4gdHJ5aW5nIHRv
IGdlbmVyYXRlIGFuIGljb24gZnJvbSB0aGUKVUlJbWFnZS4KKC1bV0tGaWxlVXBsb2FkUGFuZWwg
X3VwbG9hZEl0ZW1Gb3JJbWFnZURhdGE6aW1hZ2VOYW1lOnN1Y2Nlc3NCbG9jazpmYWlsdXJlQmxv
Y2s6XSk6ClJlbW92ZWQgb3JpZ2luYWxJbWFnZSBwYXJhbWV0ZXI7IF9XS0ltYWdlRmlsZVVwbG9h
ZEl0ZW0gbm8gbG9uZ2VyIHVzZXMKaXQuCigtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxvYWRJdGVt
Rm9ySlBFR1JlcHJlc2VudGF0aW9uT2ZJbWFnZTpzdWNjZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0p
OgooLVtXS0ZpbGVVcGxvYWRQYW5lbCBfdXBsb2FkSXRlbUZvckltYWdlOndpdGhBc3NldFVSTDpz
dWNjZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0pOgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzIgKysrKysrKysrKysrKysrCiAuLi4vVUlQ
cm9jZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbSAgICAgICB8IDQ1ICsrKysrKysr
KystLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgMjQgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDRmZTVhYTYuLmYyYjhkMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNSBAQAorMjAxNS0wNi0wMiAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBw
bGUuY29tPgorCisgICAgICAgIFtpT1NdIFVJIHByb2Nlc3MgbWVtb3J5IHNwaWtlLCBoYW5nIHdo
ZW4gdXBsb2FkaW5nIGEgdmVyeSBsYXJnZSBKUEVHCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1Njc+CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8yMTIwNjY5OT4KKworICAgICAgICBXaGVuIHVwbG9hZGluZyBhbiBpbWFnZSwgd2UgZ2VuZXJh
dGUgYSB0aHVtYm5haWwgdG8gdXNlIGZvciBhbiBpY29uCisgICAgICAgIHRoYXQgc2l0cyBuZXh0
IHRvIHRoZSBjb250cm9sLiBUbyBkbyB0aGlzLCB3ZSBsb2FkIHRoZSBpbWFnZSBhbmQgZHJhdwor
ICAgICAgICBpdCBpbnRvIGEgdGh1bWJuYWlsLXNpemVkIGNhbnZhcy4gVGhpcyBjYW4gYmUgdmVy
eSBleHBlbnNpdmUgZm9yIGxhcmdlCisgICAgICAgIGltYWdlcy4KKworICAgICAgICBUbyBmaXgg
dGhpcywgd2UnbGwgdXNlIENHSW1hZ2VTb3VyY2UgQVBJLCB3aGljaCB3aWxsIGFsbG93IHVzIHRv
IGdldAorICAgICAgICBhbnkgZXhpc3RpbmcgdGh1bWJuYWlsIHRoYXQgZXhpc3RzIGluIHRoZSBz
b3VyY2UgZmlsZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW06CisgICAgICAg
ICh0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2UpOgorICAgICAgICAoaWNvbkZvckltYWdlRmls
ZSk6CisgICAgICAgIENyZWF0ZSBhbiBpbWFnZSBzb3VyY2UgZm9yIHRoZSBmaWxlLCB0aGVuIHVz
ZSBDR0ltYWdlU291cmNlIEFQSSB0bworICAgICAgICBnZW5lcmF0ZSBhIHRodW1ibmFpbC4KKyAg
ICAgICAgKC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBpbml0V2l0aEZpbGVVUkw6b3JpZ2luYWxJ
bWFnZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBkaXNw
bGF5SW1hZ2VdKToKKyAgICAgICAgVXNlIGljb25Gb3JJbWFnZUZpbGUoKSByYXRoZXIgdGhhbiB0
cnlpbmcgdG8gZ2VuZXJhdGUgYW4gaWNvbiBmcm9tIHRoZQorICAgICAgICBVSUltYWdlLgorICAg
ICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfdXBsb2FkSXRlbUZvckltYWdlRGF0YTppbWFnZU5h
bWU6c3VjY2Vzc0Jsb2NrOmZhaWx1cmVCbG9jazpdKToKKyAgICAgICAgUmVtb3ZlZCBvcmlnaW5h
bEltYWdlIHBhcmFtZXRlcjsgX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBubyBsb25nZXIgdXNlcwor
ICAgICAgICBpdC4KKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX3VwbG9hZEl0ZW1Gb3JK
UEVHUmVwcmVzZW50YXRpb25PZkltYWdlOnN1Y2Nlc3NCbG9jazpmYWlsdXJlQmxvY2s6XSk6Cisg
ICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxvYWRJdGVtRm9ySW1hZ2U6d2l0aEFzc2V0
VVJMOnN1Y2Nlc3NCbG9jazpmYWlsdXJlQmxvY2s6XSk6CisKIDIwMTUtMDYtMDEgIEpvbiBIb25l
eWN1dHQgIDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBVcGxvYWRpbmcg
YW4gYW5pbWF0ZWQgR0lGIGZyb20gdGhlIHBob3RvIGxpYnJhcnkgdXBsb2FkcyBhIEpQRUcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2Fk
UGFuZWwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9h
ZFBhbmVsLm1tCmluZGV4IDU5MDZjODguLjUzMzQxZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbQpAQCAtOTAs
NiArOTAsOCBAQCBzdGF0aWMgaW5saW5lIFVJSW1hZ2UgKmNhbWVyYUljb24oKQogCiAjcHJhZ21h
IG1hcmsgLSBJY29uIGdlbmVyYXRpb24KIAorc3RhdGljIGNvbnN0IENHU2l6ZSBpY29uU2l6ZSA9
IHsgMTAwLjBmLCAxMDAuMGYgfTsKKwogc3RhdGljIENHUmVjdCBzcXVhcmVDcm9wUmVjdEZvclNp
emUoQ0dTaXplIHNpemUpCiB7CiAgICAgQ0dGbG9hdCBzbWFsbGVyU2lkZSA9IE1JTihzaXplLndp
ZHRoLCBzaXplLmhlaWdodCk7CkBAIC0xMjYsNyArMTI4LDcgQEAgc3RhdGljIFVJSW1hZ2UgKnRo
dW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShVSUltYWdlICppbWFnZSkKICAgICBpZiAoIXNxdWFy
ZWRJbWFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIENHUmVjdCBkZXN0UmVjdCA9IENH
UmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApOworICAgIENHUmVjdCBkZXN0UmVjdCA9IHsgQ0dQb2lu
dFplcm8sIGljb25TaXplIH07CiAgICAgVUlHcmFwaGljc0JlZ2luSW1hZ2VDb250ZXh0KGRlc3RS
ZWN0LnNpemUpOwogICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KFVJR3JhcGhp
Y3NHZXRDdXJyZW50Q29udGV4dCgpLCBrQ0dJbnRlcnBvbGF0aW9uSGlnaCk7CiAgICAgW3NxdWFy
ZWRJbWFnZSBkcmF3SW5SZWN0OmRlc3RSZWN0XTsKQEAgLTE0NywxMSArMTQ5LDE5IEBAIHN0YXRp
YyBVSUltYWdlKiBpY29uRm9ySW1hZ2VGaWxlKE5TVVJMICpmaWxlKQogewogICAgIEFTU0VSVF9B
UkcoZmlsZSwgW2ZpbGUgaXNGaWxlVVJMXSk7CiAKLSAgICBpZiAoVUlJbWFnZSAqaW1hZ2UgPSBb
VUlJbWFnZSBpbWFnZVdpdGhDb250ZW50c09mRmlsZTpmaWxlLnBhdGhdKQotICAgICAgICByZXR1
cm4gdGh1bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKGltYWdlKTsKKyAgICBOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBAeworICAgICAgICAoaWQpa0NHSW1hZ2VTb3VyY2VDcmVhdGVUaHVtYm5haWxG
cm9tSW1hZ2VJZkFic2VudDogQFlFUywKKyAgICAgICAgKGlkKWtDR0ltYWdlU291cmNlVGh1bWJu
YWlsTWF4UGl4ZWxTaXplOiBAKHN0ZDo6bWF4KGljb25TaXplLndpZHRoLCBpY29uU2l6ZS5oZWln
aHQpKSwKKyAgICAgICAgKGlkKWtDR0ltYWdlU291cmNlQ3JlYXRlVGh1bWJuYWlsV2l0aFRyYW5z
Zm9ybTogQFlFUywKKyAgICB9OworICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlPiBpbWFnZVNv
dXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZVdpdGhVUkwoKENGVVJMUmVmKWZpbGUs
IDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gdGh1bWJuYWlsID0gYWRvcHRDRihDR0lt
YWdlU291cmNlQ3JlYXRlVGh1bWJuYWlsQXRJbmRleChpbWFnZVNvdXJjZS5nZXQoKSwgMCwgKENG
RGljdGlvbmFyeVJlZilvcHRpb25zKSk7CisgICAgaWYgKCF0aHVtYm5haWwpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5lbDogRXJyb3IgY3JlYXRpbmcgdGh1bWJuYWlsIGlt
YWdlIGZvciBpbWFnZTogJUAiLCBmaWxlKTsKKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrSWNvbkZv
ckZpbGUoZmlsZSk7CisgICAgfQogCi0gICAgTE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5lbDog
RXJyb3IgY3JlYXRpbmcgdGh1bWJuYWlsIGltYWdlIGZvciBpbWFnZTogJUAiLCBmaWxlKTsKLSAg
ICByZXR1cm4gZmFsbGJhY2tJY29uRm9yRmlsZShmaWxlKTsKKyAgICByZXR1cm4gc3F1YXJlSW1h
Z2UoW1VJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTp0aHVtYm5haWwuZ2V0KCldKTsKIH0KIAogc3Rh
dGljIFVJSW1hZ2UqIGljb25Gb3JWaWRlb0ZpbGUoTlNVUkwgKmZpbGUpCkBAIC0yMzgsMjEgKzI0
OCw5IEBAIEBlbmQKIAogCiBAaW50ZXJmYWNlIF9XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gOiBfV0tG
aWxlVXBsb2FkSXRlbQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVVSTDooTlNVUkwgKilm
aWxlVVJMIG9yaWdpbmFsSW1hZ2U6KFVJSW1hZ2UgKilvcmlnaW5hbEltYWdlOwogQGVuZAogCi1A
aW1wbGVtZW50YXRpb24gX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSB7Ci0gICAgUmV0YWluUHRyPFVJ
SW1hZ2U+IF9vcmlnaW5hbEltYWdlOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxl
VVJMOihOU1VSTCAqKWZpbGVVUkwgb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1h
Z2UKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRmlsZVVSTDpmaWxlVVJMXSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfb3JpZ2luYWxJbWFnZSA9IG9yaWdpbmFsSW1h
Z2U7Ci0gICAgcmV0dXJuIHNlbGY7Ci19CitAaW1wbGVtZW50YXRpb24gX1dLSW1hZ2VGaWxlVXBs
b2FkSXRlbQogCiAtIChCT09MKWlzVmlkZW8KIHsKQEAgLTI2MSw3ICsyNTksNyBAQCAtIChCT09M
KWlzVmlkZW8KIAogLSAoVUlJbWFnZSAqKWRpc3BsYXlJbWFnZQogewotICAgIHJldHVybiB0aHVt
Ym5haWxTaXplZEltYWdlRm9ySW1hZ2UoX29yaWdpbmFsSW1hZ2UuZ2V0KCkpOworICAgIHJldHVy
biBpY29uRm9ySW1hZ2VGaWxlKHNlbGYuZmlsZVVSTCk7CiB9CiAKIEBlbmQKQEAgLTczNSwxMCAr
NzMzLDkgQEAgLSAodm9pZClfcHJvY2Vzc01lZGlhSW5mb0RpY3Rpb25hcmllczooTlNBcnJheSAq
KWluZm9zIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKICAgICBbc2VsZiBfdXBsb2FkSXRlbUZy
b21NZWRpYUluZm86aW5mbyBzdWNjZXNzQmxvY2s6dXBsb2FkSXRlbVN1Y2Nlc3NCbG9jayBmYWls
dXJlQmxvY2s6ZmFpbHVyZUJsb2NrXTsKIH0KIAotLSAodm9pZClfdXBsb2FkSXRlbUZvckltYWdl
RGF0YTooTlNEYXRhICopaW1hZ2VEYXRhIG9yaWdpbmFsSW1hZ2U6KFVJSW1hZ2UgKilvcmlnaW5h
bEltYWdlIGltYWdlTmFtZTooTlNTdHJpbmcgKilpbWFnZU5hbWUgc3VjY2Vzc0Jsb2NrOih2b2lk
ICheKShfV0tGaWxlVXBsb2FkSXRlbSAqKSlzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOih2b2lk
ICheKSh2b2lkKSlmYWlsdXJlQmxvY2sKKy0gKHZvaWQpX3VwbG9hZEl0ZW1Gb3JJbWFnZURhdGE6
KE5TRGF0YSAqKWltYWdlRGF0YSBpbWFnZU5hbWU6KE5TU3RyaW5nICopaW1hZ2VOYW1lIHN1Y2Nl
c3NCbG9jazoodm9pZCAoXikoX1dLRmlsZVVwbG9hZEl0ZW0gKikpc3VjY2Vzc0Jsb2NrIGZhaWx1
cmVCbG9jazoodm9pZCAoXikodm9pZCkpZmFpbHVyZUJsb2NrCiB7CiAgICAgQVNTRVJUX0FSRyhp
bWFnZURhdGEsIGltYWdlRGF0YSk7Ci0gICAgQVNTRVJUX0FSRyhvcmlnaW5hbEltYWdlLCBvcmln
aW5hbEltYWdlKTsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIE5TU3RyaW5n
ICogY29uc3Qga1RlbXBvcmFyeURpcmVjdG9yeU5hbWUgPSBAIldLV2ViRmlsZVVwbG9hZCI7CkBA
IC03NjIsNyArNzU5LDcgQEAgLSAodm9pZClfdXBsb2FkSXRlbUZvckltYWdlRGF0YTooTlNEYXRh
ICopaW1hZ2VEYXRhIG9yaWdpbmFsSW1hZ2U6KFVJSW1hZ2UgKilvcmkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHN1Y2Nlc3NCbG9jayhhZG9wdE5TKFtbX1dLSW1hZ2VGaWxlVXBsb2Fk
SXRlbSBhbGxvY10gaW5pdFdpdGhGaWxlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZmlsZVBh
dGhdIG9yaWdpbmFsSW1hZ2U6b3JpZ2luYWxJbWFnZV0pLmdldCgpKTsKKyAgICBzdWNjZXNzQmxv
Y2soYWRvcHROUyhbW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gYWxsb2NdIGluaXRXaXRoRmlsZVVS
TDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmZpbGVQYXRoXV0pLmdldCgpKTsKIH0KIAogLSAodm9p
ZClfdXBsb2FkSXRlbUZvckpQRUdSZXByZXNlbnRhdGlvbk9mSW1hZ2U6KFVJSW1hZ2UgKilpbWFn
ZSBzdWNjZXNzQmxvY2s6KHZvaWQgKF4pKF9XS0ZpbGVVcGxvYWRJdGVtICopKXN1Y2Nlc3NCbG9j
ayBmYWlsdXJlQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWZhaWx1cmVCbG9jawpAQCAtNzg1LDcgKzc4
Miw3IEBAIC0gKHZvaWQpX3VwbG9hZEl0ZW1Gb3JKUEVHUmVwcmVzZW50YXRpb25PZkltYWdlOihV
SUltYWdlICopaW1hZ2Ugc3VjY2Vzc0Jsb2NrOih2CiAgICAgICAgIC8vIG5hbWluZyBlYWNoIG9m
IHRoZSBpbmRpdmlkdWFsIHVwbG9hZHMgaW1hZ2UuanBnPyBUaGlzIHdvbid0IHdvcmsgZm9yIHBo
b3RvcyB0YWtlbiB3aXRoCiAgICAgICAgIC8vIHRoZSBjYW1lcmEsIGJ1dCB3b3VsZCB3b3JrIGZv
ciBwaG90b3MgcGlja2VkIGZyb20gdGhlIGxpYnJhcnkuCiAgICAgICAgIE5TU3RyaW5nICogY29u
c3Qga1VwbG9hZEltYWdlTmFtZSA9IEAiaW1hZ2UuanBnIjsKLSAgICAgICAgW3NlbGYgX3VwbG9h
ZEl0ZW1Gb3JJbWFnZURhdGE6anBlZyBvcmlnaW5hbEltYWdlOmltYWdlIGltYWdlTmFtZTprVXBs
b2FkSW1hZ2VOYW1lIHN1Y2Nlc3NCbG9jazpzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZhaWx1
cmVCbG9ja107CisgICAgICAgIFtzZWxmIF91cGxvYWRJdGVtRm9ySW1hZ2VEYXRhOmpwZWcgaW1h
Z2VOYW1lOmtVcGxvYWRJbWFnZU5hbWUgc3VjY2Vzc0Jsb2NrOnN1Y2Nlc3NCbG9jayBmYWlsdXJl
QmxvY2s6ZmFpbHVyZUJsb2NrXTsKICAgICB9KTsKIH0KIApAQCAtODQyLDcgKzgzOSw3IEBAIC0g
KHZvaWQpX3VwbG9hZEl0ZW1Gb3JJbWFnZTooVUlJbWFnZSAqKWltYWdlIHdpdGhBc3NldFVSTDoo
TlNVUkwgKilhc3NldFVSTCBzdWNjCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgTlNTdHJpbmcgKmltYWdlTmFtZSA9IHVwbG9hZEltYWdlTmFtZUZy
b21VVEkoZGF0YVVUSSk7Ci0gICAgICAgICAgICBbc2VsZiBfdXBsb2FkSXRlbUZvckltYWdlRGF0
YTppbWFnZURhdGEgb3JpZ2luYWxJbWFnZTppbWFnZSBpbWFnZU5hbWU6aW1hZ2VOYW1lIHN1Y2Nl
c3NCbG9jazpzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZhaWx1cmVCbG9ja107CisgICAgICAg
ICAgICBbc2VsZiBfdXBsb2FkSXRlbUZvckltYWdlRGF0YTppbWFnZURhdGEgaW1hZ2VOYW1lOmlt
YWdlTmFtZSBzdWNjZXNzQmxvY2s6c3VjY2Vzc0Jsb2NrIGZhaWx1cmVCbG9jazpmYWlsdXJlQmxv
Y2tdOwogICAgICAgICB9XTsKICAgICB9KTsKIH0KLS0gCjIuMy40IChBcHBsZSBHaXQtNTYpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254348</attachid>
            <date>2015-06-05 02:13:19 -0700</date>
            <delta_ts>2015-06-06 22:28:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145567-20150605021256.patch</filename>
            <type>text/plain</type>
            <size>7454</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjljNzZiMDZhOTM1MjZm
Yjg3OTE1Mjk4ZDQwMzRmNmJiNDA1ZDQyYS4uNzVlZjRlNzBlNzU1N2ViMWRhNGJkZDg5OTY2Y2U1
OTRlZmRkM2NmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA2LTAyICBKb24g
SG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVUkgcHJv
Y2VzcyBtZW1vcnkgc3Bpa2UsIGhhbmcgd2hlbiB1cGxvYWRpbmcgYSB2ZXJ5IGxhcmdlIEpQRUcK
KworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTU2
Nz4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxMjA2Njk5PgorCisgICAgICAgIFdoZW4gdXBs
b2FkaW5nIGFuIGltYWdlLCB3ZSBnZW5lcmF0ZSBhIHRodW1ibmFpbCB0byB1c2UgZm9yIGFuIGlj
b24KKyAgICAgICAgdGhhdCBzaXRzIG5leHQgdG8gdGhlIGNvbnRyb2wuIFRvIGRvIHRoaXMsIHdl
IGxvYWQgdGhlIGltYWdlIGFuZCBkcmF3CisgICAgICAgIGl0IGludG8gYSB0aHVtYm5haWwtc2l6
ZWQgY2FudmFzLiBUaGlzIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSBmb3IgbGFyZ2UKKyAgICAgICAg
aW1hZ2VzLgorCisgICAgICAgIFRvIGZpeCB0aGlzLCB3ZSdsbCB1c2UgQ0dJbWFnZVNvdXJjZSBB
UEksIHdoaWNoIHdpbGwgYWxsb3cgdXMgdG8gZ2V0CisgICAgICAgIGFueSBleGlzdGluZyB0aHVt
Ym5haWwgdGhhdCBleGlzdHMgaW4gdGhlIHNvdXJjZSBmaWxlLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zp
bGVVcGxvYWRQYW5lbC5tbToKKyAgICAgICAgKHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZSk6
CisgICAgICAgIChpY29uRm9ySW1hZ2VGaWxlKToKKyAgICAgICAgQ3JlYXRlIGFuIGltYWdlIHNv
dXJjZSBmb3IgdGhlIGZpbGUsIHRoZW4gdXNlIENHSW1hZ2VTb3VyY2UgQVBJIHRvCisgICAgICAg
IGdlbmVyYXRlIGEgdGh1bWJuYWlsLgorICAgICAgICAoLVtfV0tJbWFnZUZpbGVVcGxvYWRJdGVt
IGluaXRXaXRoRmlsZVVSTDpvcmlnaW5hbEltYWdlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtf
V0tJbWFnZUZpbGVVcGxvYWRJdGVtIGRpc3BsYXlJbWFnZV0pOgorICAgICAgICBVc2UgaWNvbkZv
ckltYWdlRmlsZSgpIHJhdGhlciB0aGFuIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBpY29uIGZyb20g
dGhlCisgICAgICAgIFVJSW1hZ2UuCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxv
YWRJdGVtRm9ySW1hZ2VEYXRhOmltYWdlTmFtZTpzdWNjZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0p
OgorICAgICAgICBSZW1vdmVkIG9yaWdpbmFsSW1hZ2UgcGFyYW1ldGVyOyBfV0tJbWFnZUZpbGVV
cGxvYWRJdGVtIG5vIGxvbmdlciB1c2VzCisgICAgICAgIGl0LgorICAgICAgICAoLVtXS0ZpbGVV
cGxvYWRQYW5lbCBfdXBsb2FkSXRlbUZvckpQRUdSZXByZXNlbnRhdGlvbk9mSW1hZ2U6c3VjY2Vz
c0Jsb2NrOmZhaWx1cmVCbG9jazpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX3Vw
bG9hZEl0ZW1Gb3JJbWFnZTp3aXRoQXNzZXRVUkw6c3VjY2Vzc0Jsb2NrOmZhaWx1cmVCbG9jazpd
KToKKwogMjAxNS0wNi0wMSAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdIFVwbG9hZGluZyBhbiBhbmltYXRlZCBHSUYgZnJvbSB0aGUgcGhvdG8g
bGlicmFyeSB1cGxvYWRzIGEgSlBFRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KaW5kZXggM2NkZjgxZGYyMTUzMGE2
NjcxYjM3ZjgyNzU2YWEyNGMxMzRhYzNkZS4uMzc3MWRhMWI4MjMwNzgyOWYyNjQzMjQzYmNkZmFj
MDNkYjBlZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9mb3Jt
cy9XS0ZpbGVVcGxvYWRQYW5lbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tCkBAIC05MCw2ICs5MCw4IEBAIHN0YXRpYyBpbmxp
bmUgVUlJbWFnZSAqY2FtZXJhSWNvbigpCiAKICNwcmFnbWEgbWFyayAtIEljb24gZ2VuZXJhdGlv
bgogCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBpY29uU2lkZUxlbmd0aCA9IDEwMDsKKwogc3RhdGlj
IENHUmVjdCBzcXVhcmVDcm9wUmVjdEZvclNpemUoQ0dTaXplIHNpemUpCiB7CiAgICAgQ0dGbG9h
dCBzbWFsbGVyU2lkZSA9IE1JTihzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CkBAIC0xMjYsNyAr
MTI4LDcgQEAgc3RhdGljIFVJSW1hZ2UgKnRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShVSUlt
YWdlICppbWFnZSkKICAgICBpZiAoIXNxdWFyZWRJbWFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIENHUmVjdCBkZXN0UmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApOworICAg
IENHUmVjdCBkZXN0UmVjdCA9IHsgQ0dQb2ludFplcm8sIENHU2l6ZU1ha2UoaWNvblNpZGVMZW5n
dGgsIGljb25TaWRlTGVuZ3RoKSB9OwogICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dChk
ZXN0UmVjdC5zaXplKTsKICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShVSUdy
YXBoaWNzR2V0Q3VycmVudENvbnRleHQoKSwga0NHSW50ZXJwb2xhdGlvbkhpZ2gpOwogICAgIFtz
cXVhcmVkSW1hZ2UgZHJhd0luUmVjdDpkZXN0UmVjdF07CkBAIC0xNDcsMTEgKzE0OSwxOSBAQCBz
dGF0aWMgVUlJbWFnZSogaWNvbkZvckltYWdlRmlsZShOU1VSTCAqZmlsZSkKIHsKICAgICBBU1NF
UlRfQVJHKGZpbGUsIFtmaWxlIGlzRmlsZVVSTF0pOwogCi0gICAgaWYgKFVJSW1hZ2UgKmltYWdl
ID0gW1VJSW1hZ2UgaW1hZ2VXaXRoQ29udGVudHNPZkZpbGU6ZmlsZS5wYXRoXSkKLSAgICAgICAg
cmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShpbWFnZSk7CisgICAgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zID0gQHsKKyAgICAgICAgKGlkKWtDR0ltYWdlU291cmNlQ3JlYXRlVGh1bWJu
YWlsRnJvbUltYWdlSWZBYnNlbnQ6IEBZRVMsCisgICAgICAgIChpZClrQ0dJbWFnZVNvdXJjZVRo
dW1ibmFpbE1heFBpeGVsU2l6ZTogQChpY29uU2lkZUxlbmd0aCksCisgICAgICAgIChpZClrQ0dJ
bWFnZVNvdXJjZUNyZWF0ZVRodW1ibmFpbFdpdGhUcmFuc2Zvcm06IEBZRVMsCisgICAgfTsKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZT4gaW1hZ2VTb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VT
b3VyY2VDcmVhdGVXaXRoVVJMKChDRlVSTFJlZilmaWxlLCAwKSk7CisgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IHRodW1ibmFpbCA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZVRodW1ibmFp
bEF0SW5kZXgoaW1hZ2VTb3VyY2UuZ2V0KCksIDAsIChDRkRpY3Rpb25hcnlSZWYpb3B0aW9ucykp
OworICAgIGlmICghdGh1bWJuYWlsKSB7CisgICAgICAgIExPR19FUlJPUigiV0tGaWxlVXBsb2Fk
UGFuZWw6IEVycm9yIGNyZWF0aW5nIHRodW1ibmFpbCBpbWFnZSBmb3IgaW1hZ2U6ICVAIiwgZmls
ZSk7CisgICAgICAgIHJldHVybiBmYWxsYmFja0ljb25Gb3JGaWxlKGZpbGUpOworICAgIH0KIAot
ICAgIExPR19FUlJPUigiV0tGaWxlVXBsb2FkUGFuZWw6IEVycm9yIGNyZWF0aW5nIHRodW1ibmFp
bCBpbWFnZSBmb3IgaW1hZ2U6ICVAIiwgZmlsZSk7Ci0gICAgcmV0dXJuIGZhbGxiYWNrSWNvbkZv
ckZpbGUoZmlsZSk7CisgICAgcmV0dXJuIHNxdWFyZUltYWdlKFtVSUltYWdlIGltYWdlV2l0aENH
SW1hZ2U6dGh1bWJuYWlsLmdldCgpXSk7CiB9CiAKIHN0YXRpYyBVSUltYWdlKiBpY29uRm9yVmlk
ZW9GaWxlKE5TVVJMICpmaWxlKQpAQCAtMjM4LDIxICsyNDgsOSBAQCBAZW5kCiAKIAogQGludGVy
ZmFjZSBfV0tJbWFnZUZpbGVVcGxvYWRJdGVtIDogX1dLRmlsZVVwbG9hZEl0ZW0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEZpbGVVUkw6KE5TVVJMICopZmlsZVVSTCBvcmlnaW5hbEltYWdlOihV
SUltYWdlICopb3JpZ2luYWxJbWFnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIF9XS0ltYWdl
RmlsZVVwbG9hZEl0ZW0gewotICAgIFJldGFpblB0cjxVSUltYWdlPiBfb3JpZ2luYWxJbWFnZTsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVVSTDooTlNVUkwgKilmaWxlVVJMIG9y
aWdpbmFsSW1hZ2U6KFVJSW1hZ2UgKilvcmlnaW5hbEltYWdlCi17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEZpbGVVUkw6ZmlsZVVSTF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgX29yaWdpbmFsSW1hZ2UgPSBvcmlnaW5hbEltYWdlOwotICAgIHJldHVybiBzZWxmOwot
fQorQGltcGxlbWVudGF0aW9uIF9XS0ltYWdlRmlsZVVwbG9hZEl0ZW0KIAogLSAoQk9PTClpc1Zp
ZGVvCiB7CkBAIC0yNjEsNyArMjU5LDcgQEAgLSAoQk9PTClpc1ZpZGVvCiAKIC0gKFVJSW1hZ2Ug
KilkaXNwbGF5SW1hZ2UKIHsKLSAgICByZXR1cm4gdGh1bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdl
KF9vcmlnaW5hbEltYWdlLmdldCgpKTsKKyAgICByZXR1cm4gaWNvbkZvckltYWdlRmlsZShzZWxm
LmZpbGVVUkwpOwogfQogCiBAZW5kCkBAIC03MzUsMTAgKzczMyw5IEBAIC0gKHZvaWQpX3Byb2Nl
c3NNZWRpYUluZm9EaWN0aW9uYXJpZXM6KE5TQXJyYXkgKilpbmZvcyBhdEluZGV4OihOU1VJbnRl
Z2VyKWluZGV4CiAgICAgW3NlbGYgX3VwbG9hZEl0ZW1Gcm9tTWVkaWFJbmZvOmluZm8gc3VjY2Vz
c0Jsb2NrOnVwbG9hZEl0ZW1TdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZhaWx1cmVCbG9ja107
CiB9CiAKLS0gKHZvaWQpX3VwbG9hZEl0ZW1Gb3JJbWFnZURhdGE6KE5TRGF0YSAqKWltYWdlRGF0
YSBvcmlnaW5hbEltYWdlOihVSUltYWdlICopb3JpZ2luYWxJbWFnZSBpbWFnZU5hbWU6KE5TU3Ry
aW5nICopaW1hZ2VOYW1lIHN1Y2Nlc3NCbG9jazoodm9pZCAoXikoX1dLRmlsZVVwbG9hZEl0ZW0g
Kikpc3VjY2Vzc0Jsb2NrIGZhaWx1cmVCbG9jazoodm9pZCAoXikodm9pZCkpZmFpbHVyZUJsb2Nr
CistICh2b2lkKV91cGxvYWRJdGVtRm9ySW1hZ2VEYXRhOihOU0RhdGEgKilpbWFnZURhdGEgaW1h
Z2VOYW1lOihOU1N0cmluZyAqKWltYWdlTmFtZSBzdWNjZXNzQmxvY2s6KHZvaWQgKF4pKF9XS0Zp
bGVVcGxvYWRJdGVtICopKXN1Y2Nlc3NCbG9jayBmYWlsdXJlQmxvY2s6KHZvaWQgKF4pKHZvaWQp
KWZhaWx1cmVCbG9jawogewogICAgIEFTU0VSVF9BUkcoaW1hZ2VEYXRhLCBpbWFnZURhdGEpOwot
ICAgIEFTU0VSVF9BUkcob3JpZ2luYWxJbWFnZSwgb3JpZ2luYWxJbWFnZSk7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAKICAgICBOU1N0cmluZyAqIGNvbnN0IGtUZW1wb3JhcnlEaXJl
Y3RvcnlOYW1lID0gQCJXS1dlYkZpbGVVcGxvYWQiOwpAQCAtNzYyLDcgKzc1OSw3IEBAIC0gKHZv
aWQpX3VwbG9hZEl0ZW1Gb3JJbWFnZURhdGE6KE5TRGF0YSAqKWltYWdlRGF0YSBvcmlnaW5hbElt
YWdlOihVSUltYWdlICopb3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdWNjZXNz
QmxvY2soYWRvcHROUyhbW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gYWxsb2NdIGluaXRXaXRoRmls
ZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmZpbGVQYXRoXSBvcmlnaW5hbEltYWdlOm9yaWdp
bmFsSW1hZ2VdKS5nZXQoKSk7CisgICAgc3VjY2Vzc0Jsb2NrKGFkb3B0TlMoW1tfV0tJbWFnZUZp
bGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpmaWxlUGF0aF1dKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpX3VwbG9hZEl0ZW1Gb3JKUEVHUmVw
cmVzZW50YXRpb25PZkltYWdlOihVSUltYWdlICopaW1hZ2Ugc3VjY2Vzc0Jsb2NrOih2b2lkIChe
KShfV0tGaWxlVXBsb2FkSXRlbSAqKSlzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOih2b2lkIChe
KSh2b2lkKSlmYWlsdXJlQmxvY2sKQEAgLTc4NSw3ICs3ODIsNyBAQCAtICh2b2lkKV91cGxvYWRJ
dGVtRm9ySlBFR1JlcHJlc2VudGF0aW9uT2ZJbWFnZTooVUlJbWFnZSAqKWltYWdlIHN1Y2Nlc3NC
bG9jazoodgogICAgICAgICAvLyBuYW1pbmcgZWFjaCBvZiB0aGUgaW5kaXZpZHVhbCB1cGxvYWRz
IGltYWdlLmpwZz8gVGhpcyB3b24ndCB3b3JrIGZvciBwaG90b3MgdGFrZW4gd2l0aAogICAgICAg
ICAvLyB0aGUgY2FtZXJhLCBidXQgd291bGQgd29yayBmb3IgcGhvdG9zIHBpY2tlZCBmcm9tIHRo
ZSBsaWJyYXJ5LgogICAgICAgICBOU1N0cmluZyAqIGNvbnN0IGtVcGxvYWRJbWFnZU5hbWUgPSBA
ImltYWdlLmpwZyI7Ci0gICAgICAgIFtzZWxmIF91cGxvYWRJdGVtRm9ySW1hZ2VEYXRhOmpwZWcg
b3JpZ2luYWxJbWFnZTppbWFnZSBpbWFnZU5hbWU6a1VwbG9hZEltYWdlTmFtZSBzdWNjZXNzQmxv
Y2s6c3VjY2Vzc0Jsb2NrIGZhaWx1cmVCbG9jazpmYWlsdXJlQmxvY2tdOworICAgICAgICBbc2Vs
ZiBfdXBsb2FkSXRlbUZvckltYWdlRGF0YTpqcGVnIGltYWdlTmFtZTprVXBsb2FkSW1hZ2VOYW1l
IHN1Y2Nlc3NCbG9jazpzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZhaWx1cmVCbG9ja107CiAg
ICAgfSk7CiB9CiAKQEAgLTgxNyw3ICs4MTQsNyBAQCAtICh2b2lkKV91cGxvYWRJdGVtRm9ySW1h
Z2U6KFVJSW1hZ2UgKilpbWFnZSB3aXRoQXNzZXRVUkw6KE5TVVJMICopYXNzZXRVUkwgc3VjYwog
CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGV4dGVuc2lvbiA9IGFkb3B0Q0Yo
VVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcygoQ0ZTdHJpbmdSZWYpZGF0YVVUSSwga1VU
VGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbikpOwogICAgICAgICAgICAgTlNTdHJpbmcgKmltYWdl
TmFtZSA9IFtAImltYWdlLiIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6KGV4dGVuc2lvbiA/IChp
ZClleHRlbnNpb24uZ2V0KCkgOiBAImpwZyIpXTsKLSAgICAgICAgICAgIFtzZWxmIF91cGxvYWRJ
dGVtRm9ySW1hZ2VEYXRhOmltYWdlRGF0YSBvcmlnaW5hbEltYWdlOmltYWdlIGltYWdlTmFtZTpp
bWFnZU5hbWUgc3VjY2Vzc0Jsb2NrOnN1Y2Nlc3NCbG9jayBmYWlsdXJlQmxvY2s6ZmFpbHVyZUJs
b2NrXTsKKyAgICAgICAgICAgIFtzZWxmIF91cGxvYWRJdGVtRm9ySW1hZ2VEYXRhOmltYWdlRGF0
YSBpbWFnZU5hbWU6aW1hZ2VOYW1lIHN1Y2Nlc3NCbG9jazpzdWNjZXNzQmxvY2sgZmFpbHVyZUJs
b2NrOmZhaWx1cmVCbG9ja107CiAgICAgICAgIH1dOwogICAgIH0pOwogfQo=
</data>
<flag name="review"
          id="279327"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>