<?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>74183</bug_id>
          
          <creation_ts>2011-12-09 07:22:50 -0800</creation_ts>
          <short_desc>[Chromium] With the skia port, setting LCD text filtering is causing texture cache invalidations of gpu canvas backing store</short_desc>
          <delta_ts>2012-04-05 11:49:45 -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>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Windows 7</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="Justin Novosad">junov</reporter>
          <assigned_to name="Justin Novosad">junov</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>jin.a.yang</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>518253</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-12-09 07:22:50 -0800</bug_when>
    <thetext>Function isCanvasMultiLayered in SkiaFontWin.cpp creates
a layer iterator for the sole purpose of verifying the existence of multiple
layers. The iterator assumes that it is used for drawing, and therefore makes a
call to SkDevice::accessBitmap, which triggers a pixels changed notification, resulting in a GPU texture invalidation in Skia&apos;s caching system.  The unnecessary invalidations are preventing the cache form working properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518262</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-12-09 07:41:41 -0800</bug_when>
    <thetext>The main use case where this causes trouble is with canvas to canvas draws from a software canvas to a GPU accelerated canvas.  The backing store of the source canvas gets cached on the GPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520661</commentid>
    <comment_count>2</comment_count>
    <who name="Jin Yang">jin.a.yang</who>
    <bug_when>2011-12-13 21:13:16 -0800</bug_when>
    <thetext>Bug 73186 is also related to the generation id management.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596636</commentid>
    <comment_count>3</comment_count>
      <attachid>135840</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-04-05 09:37:01 -0700</bug_when>
    <thetext>Created attachment 135840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596637</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-04-05 09:39:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=135840) [details]
&gt; Patch

In this patch I removed all unnecessary uses of LayerIter that could be replaced with SkCanvas::isDrawingToLayer, not just the one in SkiaFontWin.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596640</commentid>
    <comment_count>5</comment_count>
      <attachid>135840</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-05 09:42:51 -0700</bug_when>
    <thetext>Comment on attachment 135840
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp:143
&gt; +    } else if (m_createdTransparencyLayer || m_platformContext-&gt;canvas()-&gt;isDrawingToLayer()) {

None of these changes are functionally the same, however. The old code checked if there was &gt; 1 layer present. The new code checks if there is &gt; 0 layers present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596677</commentid>
    <comment_count>6</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-04-05 10:27:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 135840 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135840&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp:143
&gt; &gt; +    } else if (m_createdTransparencyLayer || m_platformContext-&gt;canvas()-&gt;isDrawingToLayer()) {
&gt; 
&gt; None of these changes are functionally the same, however. The old code checked if there was &gt; 1 layer present. The new code checks if there is &gt; 0 layers present.

Actually, behavior is the same. It is a little confusing, but the fLayerCount in SkCanvas represents the number of saved layers, which does not include the root layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596680</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-04-05 10:31:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
 
&gt; Actually, behavior is the same. It is a little confusing, but the fLayerCount in SkCanvas represents the number of saved layers, which does not include the root layer.

There is clearly a readability issue here. I think I will rename fLayerCount to fSavedLayerCount, to make things clearer in SkCanvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596688</commentid>
    <comment_count>8</comment_count>
      <attachid>135840</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-05 10:37:00 -0700</bug_when>
    <thetext>Comment on attachment 135840
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp:143
&gt;&gt;&gt; +    } else if (m_createdTransparencyLayer || m_platformContext-&gt;canvas()-&gt;isDrawingToLayer()) {
&gt;&gt; 
&gt;&gt; None of these changes are functionally the same, however. The old code checked if there was &gt; 1 layer present. The new code checks if there is &gt; 0 layers present.
&gt; 
&gt; Actually, behavior is the same. It is a little confusing, but the fLayerCount in SkCanvas represents the number of saved layers, which does not include the root layer.

I see, thanks for the clarification. Making that more clear in Skia would be great :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596694</commentid>
    <comment_count>9</comment_count>
      <attachid>135840</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-04-05 10:43:52 -0700</bug_when>
    <thetext>Comment on attachment 135840
Patch

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

&gt; Source/WebKit/chromium/src/WebFontImpl.cpp:116
&gt; +    if (canvasIsOpaque &amp;&amp; SkColorGetA(color) == 0xFF &amp;&amp; !const_cast&lt;SkCanvas*&gt;(canvas)-&gt;isDrawingToLayer()) {

Not your fault, but is this const_cast necessary anymore?  isDrawingToLayer() is const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596704</commentid>
    <comment_count>10</comment_count>
      <attachid>135858</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-04-05 10:50:40 -0700</bug_when>
    <thetext>Created attachment 135858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596706</commentid>
    <comment_count>11</comment_count>
      <attachid>135858</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-04-05 10:54:29 -0700</bug_when>
    <thetext>Comment on attachment 135858
Patch

Looks good!  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596755</commentid>
    <comment_count>12</comment_count>
      <attachid>135858</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-05 11:49:33 -0700</bug_when>
    <thetext>Comment on attachment 135858
Patch

Clearing flags on attachment: 135858

Committed r113345: &lt;http://trac.webkit.org/changeset/113345&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596756</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-05 11:49:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135840</attachid>
            <date>2012-04-05 09:37:01 -0700</date>
            <delta_ts>2012-04-05 10:50:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74183-20120405123700.patch</filename>
            <type>text/plain</type>
            <size>10753</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzMyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTA1ICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFdpdGgg
dGhlIHNraWEgcG9ydCwgc2V0dGluZyBMQ0QgdGV4dCBmaWx0ZXJpbmcgaXMgY2F1c2luZyB0ZXh0
dXJlIGNhY2hlIGludmFsaWRhdGlvbnMgb2YgZ3B1IGNhbnZhcyBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2luZyB1bm5l
Y2Vzc2FyeSB1c2FnZSBvZiBTa0NhbnZhczo6TGF5ZXJJdGVyIHdpdGggY2FsbHMgdG8KKyAgICAg
ICAgU2tDYW52YXM6OmlzRHJhd2luZ1RvTGF5ZXIoKS4gU2FtZSByZXN1bHRzLCBsb3dlciBvdmVy
aGVhZCwgYW5kIG5vCisgICAgICAgIEdQVSB0ZXh0dXJlIGludmFsaWRhdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXI6OmluaXRpYWxpemVGb3JHREkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0ZvbnRIYXJmQnV6ei5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkanVzdFRleHRSZW5kZXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ZvbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0VGV4dFJlbmRlck1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvU2tpYUZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkaXNhYmxlVGV4dExDRCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDQtMDUgIEFydmlkIE5pbHNz
b24gIDxhbmlsc3NvbkByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBEaXNhYmxlIHBh
aW50aW5nR29lc1RvV2luZG93KCkgZm9yIHRoZSByb290IGxheWVyIHdoZW4gZm9yY2VkIGNvbXBv
c2l0aW5nIG1vZGUgaXMgYWN0aXZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHJl
dmlzaW9uIDExMzMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiAhVVNFKFNLSUFfVEVYVCkKIG5hbWVzcGFjZSB7CiAK
LWJvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMoY29uc3QgU2tDYW52YXMqIGNhbnZhcykKLXsK
LSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoY29uc3RfY2FzdDxTa0NhbnZhcyo+KGNhbnZh
cyksIGZhbHNlKTsKLSAgICBpdGVyLm5leHQoKTsgLy8gVGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0
IG9uZSBsYXllci4KLSAgICByZXR1cm4gIWl0ZXIuZG9uZSgpOyAvLyBUaGVyZSBpcyA+IDEgbGF5
ZXIgaWYgdGhlIHRoZSBpdGVyYXRvciBjYW4gc3RpbCBhZHZhbmNlLgotfQotCiBjbGFzcyBUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKIHB1YmxpYzoKICAgICBUcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmKTsKQEAgLTE0
Nyw3ICsxNDAsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpCiAg
ICAgICAgIC8vIHRoaXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3IuCiAgICAgICAg
IG1fdHJhbnNwYXJlbmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7CiAgICAgICAgIGNv
bG9yID0gU2tDb2xvclNldFJHQigwLCAwLCAwKTsKLSAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRy
YW5zcGFyZW5jeUxheWVyIHx8IGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKG1fcGxhdGZvcm1Db250
ZXh0LT5jYW52YXMoKSkpIHsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxh
eWVyIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKS0+aXNEcmF3aW5nVG9MYXllcigpKSB7
CiAgICAgICAgIC8vIFdoZW4gd2UncmUgZHJhd2luZyBhIHdlYiBwYWdlLCB3ZSBrbm93IHRoZSBi
YWNrZ3JvdW5kIGlzIG9wYXF1ZSwKICAgICAgICAgLy8gYnV0IGlmIHdlJ3JlIGRyYXdpbmcgdG8g
YSBsYXllciwgd2Ugc3RpbGwgbmVlZCBleHRyYSB3b3JrLgogICAgICAgICBsYXllck1vZGUgPSBU
cmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1
enouY3BwCShyZXZpc2lvbiAxMTMzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwyMCAr
NjAsMTMgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNDYW52YXNNdWx0aUxheWVyZWQoU2tDYW52
YXMqIGNhbnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGxheWVySXRlcmF0b3IoY2Fu
dmFzLCBmYWxzZSk7Ci0gICAgbGF5ZXJJdGVyYXRvci5uZXh0KCk7Ci0gICAgcmV0dXJuICFsYXll
ckl0ZXJhdG9yLmRvbmUoKTsKLX0KLQogc3RhdGljIHZvaWQgYWRqdXN0VGV4dFJlbmRlck1vZGUo
U2tQYWludCogcGFpbnQsIFBsYXRmb3JtQ29udGV4dFNraWEqIHNraWFDb250ZXh0KQogewogICAg
IC8vIE91ciBsYXllcnMgb25seSBoYXZlIGEgc2luZ2xlIGFscGhhIGNoYW5uZWwuIFRoaXMgbWVh
bnMgdGhhdCBzdWJwaXhlbAogICAgIC8vIHJlbmRlcmVkIHRleHQgY2Fubm90IGJlIGNvbXBvc2l0
aWVkIGNvcnJlY3RseSB3aGVuIHRoZSBsYXllciBpcwogICAgIC8vIGNvbGxhcHNlZC4gVGhlcmVm
b3JlLCBzdWJwaXhlbCB0ZXh0IGlzIGRpc2FibGVkIHdoZW4gd2UgYXJlIGRyYXdpbmcKICAgICAv
LyBvbnRvIGEgbGF5ZXIgb3Igd2hlbiB0aGUgY29tcG9zaXRvciBpcyBiZWluZyB1c2VkLgotICAg
IGlmIChpc0NhbnZhc011bHRpTGF5ZXJlZChza2lhQ29udGV4dC0+Y2FudmFzKCkpIHx8IHNraWFD
b250ZXh0LT5pc0RyYXdpbmdUb0ltYWdlQnVmZmVyKCkpCisgICAgaWYgKHNraWFDb250ZXh0LT5j
YW52YXMoKS0+aXNEcmF3aW5nVG9MYXllcigpIHx8IHNraWFDb250ZXh0LT5pc0RyYXdpbmdUb0lt
YWdlQnVmZmVyKCkpCiAgICAgICAgIHBhaW50LT5zZXRMQ0RSZW5kZXJUZXh0KGZhbHNlKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250U2tpYS5jcHAJKHJldmlzaW9uIDExMzMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMCArNTQs
MTMgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBpc0NhbnZhc011bHRpTGF5ZXJlZChTa0NhbnZhcyog
Y2FudmFzKQotewotICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgbGF5ZXJJdGVyYXRvcihjYW52YXMs
IGZhbHNlKTsKLSAgICBsYXllckl0ZXJhdG9yLm5leHQoKTsKLSAgICByZXR1cm4gIWxheWVySXRl
cmF0b3IuZG9uZSgpOwotfQotCiBzdGF0aWMgdm9pZCBhZGp1c3RUZXh0UmVuZGVyTW9kZShTa1Bh
aW50KiBwYWludCwgUGxhdGZvcm1Db250ZXh0U2tpYSogc2tpYUNvbnRleHQpCiB7CiAgICAgLy8g
T3VyIGxheWVycyBvbmx5IGhhdmUgYSBzaW5nbGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBtZWFucyB0
aGF0IHN1YnBpeGVsCiAgICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQg
Y29ycmVjdGx5IHdoZW4gdGhlIGxheWVyIGlzCiAgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUs
IHN1YnBpeGVsIHRleHQgaXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZwogICAgIC8vIG9u
dG8gYSBsYXllciBvciB3aGVuIHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQuCi0gICAgaWYg
KGlzQ2FudmFzTXVsdGlMYXllcmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkgfHwgc2tpYUNvbnRl
eHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkKKyAgICBpZiAoc2tpYUNvbnRleHQtPmNhbnZh
cygpLT5pc0RyYXdpbmdUb0xheWVyKCkgfHwgc2tpYUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VC
dWZmZXIoKSkKICAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoZmFsc2UpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFGb250V2luLmNwcAkocmV2aXNpb24gMTEzMzI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywx
MyArMTM3LDYgQEAgc3RhdGljIHZvaWQgc2tpYURyYXdUZXh0KFNrQ2FudmFzKiBjYW52YQogICAg
IH0KIH0KIAotc3RhdGljIGJvb2wgaXNDYW52YXNNdWx0aUxheWVyZWQoU2tDYW52YXMqIGNhbnZh
cykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGxheWVySXRlcmF0b3IoY2FudmFzLCBmYWxz
ZSk7Ci0gICAgbGF5ZXJJdGVyYXRvci5uZXh0KCk7Ci0gICAgcmV0dXJuICFsYXllckl0ZXJhdG9y
LmRvbmUoKTsKLX0KLQogLy8gbGlmdGVkIGZyb20gRm9udFNraWEuY3BwCiBzdGF0aWMgYm9vbCBk
aXNhYmxlVGV4dExDRChQbGF0Zm9ybUNvbnRleHRTa2lhKiBza2lhQ29udGV4dCkKIHsKQEAgLTE1
MSw3ICsxNDQsNyBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlVGV4dExDRChQbGF0Zm9ybUNvbnRlCiAg
ICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQgY29ycmVjdGx5IHdoZW4g
dGhlIGxheWVyIGlzCiAgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1YnBpeGVsIHRleHQg
aXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZwogICAgIC8vIG9udG8gYSBsYXllciBvciB3
aGVuIHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQuCi0gICAgcmV0dXJuIGlzQ2FudmFzTXVs
dGlMYXllcmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkKKyAgICByZXR1cm4gc2tpYUNvbnRleHQt
PmNhbnZhcygpLT5pc0RyYXdpbmdUb0xheWVyKCkKICAgICAgICAgICAgfHwgc2tpYUNvbnRleHQt
PmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMTEz
MzI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTggKzEwMiwxMSBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAKLSAgICBzdGF0aWMgYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0Nh
bnZhcyogY2FudmFzKQotICAgIHsKLSAgICAgICAgU2tDYW52YXM6OkxheWVySXRlciBpdGVyKGNv
bnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7Ci0gICAgICAgIGl0ZXIubmV4dCgp
OyAvLyBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgotICAgICAgICByZXR1cm4g
IWl0ZXIuZG9uZSgpOyAvLyBUaGVyZSBpcyA+IDEgbGF5ZXIgaWYgdGhlIHRoZSBpdGVyYXRvciBj
YW4gc3RpbCBhZHZhbmNlLgotICAgIH0KLQogICAgIHN0YXRpYyBUcmFuc3BhcmVuY3lXaW46Okxh
eWVyTW9kZSBnZXRMYXllck1vZGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUcmFuc3BhcmVu
Y3lXaW46OlRyYW5zZm9ybU1vZGUgdHJhbnNmb3JtTW9kZSkKICAgICB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNEcmF3aW5nVG9JbWFnZUJ1ZmZlcigpKSAvLyBN
aWdodCBoYXZlIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCiAgICAgICAgICAgICByZXR1cm4gVHJh
bnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyOwotICAgICAgICBpZiAoY2FudmFzSGFzTXVsdGlwbGVM
YXllcnMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKSkgLy8gTmVlZHMgYW50
aWFsaWFzaW5nIGhlbHAuCisgICAgICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmlzRHJhd2luZ1RvTGF5ZXIoKSkgLy8gTmVlZHMgYW50aWFsaWFzaW5nIGhlbHAu
CiAgICAgICAgICAgICByZXR1cm4gVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXll
cjsKICAgICAgICAgLy8gTm90aGluZyBpbnRlcmVzdGluZy4KICAgICAgICAgcmV0dXJuIHRyYW5z
Zm9ybU1vZGUgPT0gVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtID8gVHJhbnNwYXJlbmN5
V2luOjpOb0xheWVyIDogVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllcjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTMzMjYpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDEyLTA0LTA1ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFdpdGggdGhlIHNraWEgcG9ydCwgc2V0dGluZyBMQ0QgdGV4dCBmaWx0
ZXJpbmcgaXMgY2F1c2luZyB0ZXh0dXJlIGNhY2hlIGludmFsaWRhdGlvbnMgb2YgZ3B1IGNhbnZh
cyBiYWNraW5nIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NDE4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlcGxhY2luZyB1bm5lY2Vzc2FyeSB1c2FnZSBvZiBTa0NhbnZhczo6TGF5ZXJJdGVy
IHdpdGggY2FsbCB0bworICAgICAgICBTa0NhbnZhczo6aXNEcmF3aW5nVG9MYXllcigpLiBTYW1l
IHJlc3VsdHMsIGxvd2VyIG92ZXJoZWFkLCBhbmQgbm8KKyAgICAgICAgR1BVIHRleHR1cmUgaW52
YWxpZGF0aW9uLgorCisgICAgICAgICogc3JjL1dlYkZvbnRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRm9udEltcGw6OmRyYXdUZXh0KToKKwogMjAxMi0wNC0wNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbY2hy
b21pdW1dIGNsZWFuIHVwIFdEVEZDOjpzYXZlQXMgYWZ0ZXIgbWlncmF0aW9uIHRvIHNhdmUoKQpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRJbXBsLmNwcAkocmV2aXNp
b24gMTEzMzI1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMjQgKzExMywxOSBAQCB2b2lkIFdlYkZvbnRJbXBsOjpk
cmF3VGV4dChXZWJDYW52YXMqIGNhCiAgICAgZ2MucmVzdG9yZSgpOwogCiAjaWYgZGVmaW5lZChX
SU4zMikKLSAgICBpZiAoY2FudmFzSXNPcGFxdWUgJiYgU2tDb2xvckdldEEoY29sb3IpID09IDB4
RkYpIHsKLSAgICAgICAgU2tDYW52YXM6OkxheWVySXRlciBpdGVyKGNvbnN0X2Nhc3Q8U2tDYW52
YXMqPihjYW52YXMpLCBmYWxzZSk7Ci0gICAgICAgIGl0ZXIubmV4dCgpOyAvLyBUaGVyZSBpcyBh
bHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgotICAgICAgICBib29sIG11bHRpcGxlTGF5ZXJzID0g
IWl0ZXIuZG9uZSgpOwotICAgICAgICBpZiAoIW11bHRpcGxlTGF5ZXJzKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgdGV4dCBkcmF3aW5nIGxvZ2ljIG9uIFdpbmRvd3MgaWdub3JlcyB0aGUgYWxwaGEg
Y29tcG9uZW50Ci0gICAgICAgICAgICAvLyBpbnRlbnRpb25hbGx5LCBmb3IgcGVyZm9ybWFuY2Ug
cmVhc29ucy4KLSAgICAgICAgICAgIC8vIChQbGVhc2Ugc2VlIFRyYW5zcGFyZW5jeUF3YXJlRm9u
dFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkgaW4KLSAgICAgICAgICAgIC8vIEZvbnRDaHJvbWl1
bVdpbi5jcHAuKQotICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNhbnZhcy0+
Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKLSAgICAgICAgICAgIEludFJlY3Qg
dGV4dEJvdW5kcyA9IGVzdGltYXRlVGV4dEJvdW5kcyhydW4sIGxlZnRCYXNlbGluZSk7Ci0gICAg
ICAgICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZ2MuZ2V0Q1RNKCkubWFwUmVjdCh0ZXh0Qm91bmRz
KTsKLSAgICAgICAgICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGJpdG1hcC53
aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSBkZXN0
UmVjdC55KCksIG1heFkgPSBkZXN0UmVjdC5tYXhZKCk7IHkgPCBtYXhZOyB5KyspIHsKLSAgICAg
ICAgICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gZGVzdFJlY3QueCgpLCBtYXhYID0gZGVzdFJlY3QubWF4
WCgpOyB4IDwgbWF4WDsgeCsrKQotICAgICAgICAgICAgICAgICAgICByb3dbeF0gfD0gKDB4RkYg
PDwgU0tfQTMyX1NISUZUKTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoY2FudmFzSXNPcGFxdWUg
JiYgU2tDb2xvckdldEEoY29sb3IpID09IDB4RkYgJiYgIWNvbnN0X2Nhc3Q8U2tDYW52YXMqPihj
YW52YXMpLT5pc0RyYXdpbmdUb0xheWVyKCkpIHsKKyAgICAgICAgLy8gVGhlIHRleHQgZHJhd2lu
ZyBsb2dpYyBvbiBXaW5kb3dzIGlnbm9yZXMgdGhlIGFscGhhIGNvbXBvbmVudAorICAgICAgICAv
LyBpbnRlbnRpb25hbGx5LCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAgLy8gKFBs
ZWFzZSBzZWUgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdESSBp
bgorICAgICAgICAvLyBGb250Q2hyb21pdW1XaW4uY3BwLikKKyAgICAgICAgY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCA9IGNhbnZhcy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsK
KyAgICAgICAgSW50UmVjdCB0ZXh0Qm91bmRzID0gZXN0aW1hdGVUZXh0Qm91bmRzKHJ1biwgbGVm
dEJhc2VsaW5lKTsKKyAgICAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGdjLmdldENUTSgpLm1hcFJl
Y3QodGV4dEJvdW5kcyk7CisgICAgICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAs
IGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpKTsKKyAgICAgICAgZm9yIChpbnQgeSA9
IGRlc3RSZWN0LnkoKSwgbWF4WSA9IGRlc3RSZWN0Lm1heFkoKTsgeSA8IG1heFk7IHkrKykgewor
ICAgICAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CisgICAg
ICAgICAgICBmb3IgKGludCB4ID0gZGVzdFJlY3QueCgpLCBtYXhYID0gZGVzdFJlY3QubWF4WCgp
OyB4IDwgbWF4WDsgeCsrKQorICAgICAgICAgICAgICAgIHJvd1t4XSB8PSAoMHhGRiA8PCBTS19B
MzJfU0hJRlQpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135858</attachid>
            <date>2012-04-05 10:50:40 -0700</date>
            <delta_ts>2012-04-05 11:49:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74183-20120405135038.patch</filename>
            <type>text/plain</type>
            <size>10748</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzMyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA0LTA1ICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFdpdGgg
dGhlIHNraWEgcG9ydCwgc2V0dGluZyBMQ0QgdGV4dCBmaWx0ZXJpbmcgaXMgY2F1c2luZworICAg
ICAgICB0ZXh0dXJlIGNhY2hlIGludmFsaWRhdGlvbnMgb2YgZ3B1IGNhbnZhcyBiYWNraW5nIHN0
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE4
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxh
Y2luZyB1bm5lY2Vzc2FyeSB1c2FnZSBvZiBTa0NhbnZhczo6TGF5ZXJJdGVyIHdpdGggY2FsbHMg
dG8KKyAgICAgICAgU2tDYW52YXM6OmlzRHJhd2luZ1RvTGF5ZXIoKS4gU2FtZSByZXN1bHRzLCBs
b3dlciBvdmVyaGVhZCwgYW5kIG5vCisgICAgICAgIEdQVSB0ZXh0dXJlIGludmFsaWRhdGlvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFkanVzdFRleHRSZW5kZXJNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6YWRqdXN0VGV4dFJlbmRlck1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpkaXNhYmxlVGV4dExDRCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDQtMDUgIEFy
dmlkIE5pbHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBE
aXNhYmxlIHBhaW50aW5nR29lc1RvV2luZG93KCkgZm9yIHRoZSByb290IGxheWVyIHdoZW4gZm9y
Y2VkIGNvbXBvc2l0aW5nIG1vZGUgaXMgYWN0aXZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdp
bi5jcHAJKHJldmlzaW9uIDExMzMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEz
ICs1NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiAhVVNFKFNLSUFfVEVYVCkKIG5hbWVz
cGFjZSB7CiAKLWJvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMoY29uc3QgU2tDYW52YXMqIGNh
bnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoY29uc3RfY2FzdDxTa0NhbnZh
cyo+KGNhbnZhcyksIGZhbHNlKTsKLSAgICBpdGVyLm5leHQoKTsgLy8gVGhlcmUgaXMgYWx3YXlz
IGF0IGxlYXN0IG9uZSBsYXllci4KLSAgICByZXR1cm4gIWl0ZXIuZG9uZSgpOyAvLyBUaGVyZSBp
cyA+IDEgbGF5ZXIgaWYgdGhlIHRoZSBpdGVyYXRvciBjYW4gc3RpbCBhZHZhbmNlLgotfQotCiBj
bGFzcyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKIHB1YmxpYzoKICAgICBUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQm
KTsKQEAgLTE0Nyw3ICsxNDAsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6
OmluaXRpCiAgICAgICAgIC8vIHRoaXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3Iu
CiAgICAgICAgIG1fdHJhbnNwYXJlbmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7CiAg
ICAgICAgIGNvbG9yID0gU2tDb2xvclNldFJHQigwLCAwLCAwKTsKLSAgICB9IGVsc2UgaWYgKG1f
Y3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyIHx8IGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKG1fcGxh
dGZvcm1Db250ZXh0LT5jYW52YXMoKSkpIHsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKS0+aXNEcmF3aW5nVG9M
YXllcigpKSB7CiAgICAgICAgIC8vIFdoZW4gd2UncmUgZHJhd2luZyBhIHdlYiBwYWdlLCB3ZSBr
bm93IHRoZSBiYWNrZ3JvdW5kIGlzIG9wYXF1ZSwKICAgICAgICAgLy8gYnV0IGlmIHdlJ3JlIGRy
YXdpbmcgdG8gYSBsYXllciwgd2Ugc3RpbGwgbmVlZCBleHRyYSB3b3JrLgogICAgICAgICBsYXll
ck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9G
b250SGFyZkJ1enouY3BwCShyZXZpc2lvbiAxMTMzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwyMCArNjAsMTMgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5D
bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNDYW52YXNNdWx0aUxheWVy
ZWQoU2tDYW52YXMqIGNhbnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGxheWVySXRl
cmF0b3IoY2FudmFzLCBmYWxzZSk7Ci0gICAgbGF5ZXJJdGVyYXRvci5uZXh0KCk7Ci0gICAgcmV0
dXJuICFsYXllckl0ZXJhdG9yLmRvbmUoKTsKLX0KLQogc3RhdGljIHZvaWQgYWRqdXN0VGV4dFJl
bmRlck1vZGUoU2tQYWludCogcGFpbnQsIFBsYXRmb3JtQ29udGV4dFNraWEqIHNraWFDb250ZXh0
KQogewogICAgIC8vIE91ciBsYXllcnMgb25seSBoYXZlIGEgc2luZ2xlIGFscGhhIGNoYW5uZWwu
IFRoaXMgbWVhbnMgdGhhdCBzdWJwaXhlbAogICAgIC8vIHJlbmRlcmVkIHRleHQgY2Fubm90IGJl
IGNvbXBvc2l0aWVkIGNvcnJlY3RseSB3aGVuIHRoZSBsYXllciBpcwogICAgIC8vIGNvbGxhcHNl
ZC4gVGhlcmVmb3JlLCBzdWJwaXhlbCB0ZXh0IGlzIGRpc2FibGVkIHdoZW4gd2UgYXJlIGRyYXdp
bmcKICAgICAvLyBvbnRvIGEgbGF5ZXIgb3Igd2hlbiB0aGUgY29tcG9zaXRvciBpcyBiZWluZyB1
c2VkLgotICAgIGlmIChpc0NhbnZhc011bHRpTGF5ZXJlZChza2lhQ29udGV4dC0+Y2FudmFzKCkp
IHx8IHNraWFDb250ZXh0LT5pc0RyYXdpbmdUb0ltYWdlQnVmZmVyKCkpCisgICAgaWYgKHNraWFD
b250ZXh0LT5jYW52YXMoKS0+aXNEcmF3aW5nVG9MYXllcigpIHx8IHNraWFDb250ZXh0LT5pc0Ry
YXdpbmdUb0ltYWdlQnVmZmVyKCkpCiAgICAgICAgIHBhaW50LT5zZXRMQ0RSZW5kZXJUZXh0KGZh
bHNlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Gb250U2tpYS5jcHAJKHJldmlzaW9uIDExMzMyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCwyMCArNTQsMTMgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Dbwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBpc0NhbnZhc011bHRpTGF5ZXJlZChT
a0NhbnZhcyogY2FudmFzKQotewotICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgbGF5ZXJJdGVyYXRv
cihjYW52YXMsIGZhbHNlKTsKLSAgICBsYXllckl0ZXJhdG9yLm5leHQoKTsKLSAgICByZXR1cm4g
IWxheWVySXRlcmF0b3IuZG9uZSgpOwotfQotCiBzdGF0aWMgdm9pZCBhZGp1c3RUZXh0UmVuZGVy
TW9kZShTa1BhaW50KiBwYWludCwgUGxhdGZvcm1Db250ZXh0U2tpYSogc2tpYUNvbnRleHQpCiB7
CiAgICAgLy8gT3VyIGxheWVycyBvbmx5IGhhdmUgYSBzaW5nbGUgYWxwaGEgY2hhbm5lbC4gVGhp
cyBtZWFucyB0aGF0IHN1YnBpeGVsCiAgICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29t
cG9zaXRpZWQgY29ycmVjdGx5IHdoZW4gdGhlIGxheWVyIGlzCiAgICAgLy8gY29sbGFwc2VkLiBU
aGVyZWZvcmUsIHN1YnBpeGVsIHRleHQgaXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZwog
ICAgIC8vIG9udG8gYSBsYXllciBvciB3aGVuIHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQu
Ci0gICAgaWYgKGlzQ2FudmFzTXVsdGlMYXllcmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkgfHwg
c2tpYUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkKKyAgICBpZiAoc2tpYUNvbnRl
eHQtPmNhbnZhcygpLT5pc0RyYXdpbmdUb0xheWVyKCkgfHwgc2tpYUNvbnRleHQtPmlzRHJhd2lu
Z1RvSW1hZ2VCdWZmZXIoKSkKICAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoZmFsc2Up
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFG
b250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1NraWFGb250V2luLmNwcAkocmV2aXNpb24gMTEzMzI1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNywxMyArMTM3LDYgQEAgc3RhdGljIHZvaWQgc2tpYURyYXdUZXh0KFNrQ2FudmFzKiBj
YW52YQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNDYW52YXNNdWx0aUxheWVyZWQoU2tDYW52
YXMqIGNhbnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGxheWVySXRlcmF0b3IoY2Fu
dmFzLCBmYWxzZSk7Ci0gICAgbGF5ZXJJdGVyYXRvci5uZXh0KCk7Ci0gICAgcmV0dXJuICFsYXll
ckl0ZXJhdG9yLmRvbmUoKTsKLX0KLQogLy8gbGlmdGVkIGZyb20gRm9udFNraWEuY3BwCiBzdGF0
aWMgYm9vbCBkaXNhYmxlVGV4dExDRChQbGF0Zm9ybUNvbnRleHRTa2lhKiBza2lhQ29udGV4dCkK
IHsKQEAgLTE1MSw3ICsxNDQsNyBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlVGV4dExDRChQbGF0Zm9y
bUNvbnRlCiAgICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQgY29ycmVj
dGx5IHdoZW4gdGhlIGxheWVyIGlzCiAgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1YnBp
eGVsIHRleHQgaXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZwogICAgIC8vIG9udG8gYSBs
YXllciBvciB3aGVuIHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQuCi0gICAgcmV0dXJuIGlz
Q2FudmFzTXVsdGlMYXllcmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkKKyAgICByZXR1cm4gc2tp
YUNvbnRleHQtPmNhbnZhcygpLT5pc0RyYXdpbmdUb0xheWVyKCkKICAgICAgICAgICAgfHwgc2tp
YUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2
aXNpb24gMTEzMzI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTggKzEwMiwxMSBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAKLSAgICBzdGF0aWMgYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhj
b25zdCBTa0NhbnZhcyogY2FudmFzKQotICAgIHsKLSAgICAgICAgU2tDYW52YXM6OkxheWVySXRl
ciBpdGVyKGNvbnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7Ci0gICAgICAgIGl0
ZXIubmV4dCgpOyAvLyBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgotICAgICAg
ICByZXR1cm4gIWl0ZXIuZG9uZSgpOyAvLyBUaGVyZSBpcyA+IDEgbGF5ZXIgaWYgdGhlIHRoZSBp
dGVyYXRvciBjYW4gc3RpbCBhZHZhbmNlLgotICAgIH0KLQogICAgIHN0YXRpYyBUcmFuc3BhcmVu
Y3lXaW46OkxheWVyTW9kZSBnZXRMYXllck1vZGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBU
cmFuc3BhcmVuY3lXaW46OlRyYW5zZm9ybU1vZGUgdHJhbnNmb3JtTW9kZSkKICAgICB7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNEcmF3aW5nVG9JbWFnZUJ1ZmZl
cigpKSAvLyBNaWdodCBoYXZlIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCiAgICAgICAgICAgICBy
ZXR1cm4gVHJhbnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyOwotICAgICAgICBpZiAoY2FudmFzSGFz
TXVsdGlwbGVMYXllcnMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKSkgLy8g
TmVlZHMgYW50aWFsaWFzaW5nIGhlbHAuCisgICAgICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCktPmlzRHJhd2luZ1RvTGF5ZXIoKSkgLy8gTmVlZHMgYW50aWFsaWFz
aW5nIGhlbHAuCiAgICAgICAgICAgICByZXR1cm4gVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21w
b3NpdGVMYXllcjsKICAgICAgICAgLy8gTm90aGluZyBpbnRlcmVzdGluZy4KICAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybU1vZGUgPT0gVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtID8gVHJh
bnNwYXJlbmN5V2luOjpOb0xheWVyIDogVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVM
YXllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTMzMjYpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDEyLTA0LTA1ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbQ2hyb21pdW1dIFdpdGggdGhlIHNraWEgcG9ydCwgc2V0dGluZyBMQ0Qg
dGV4dCBmaWx0ZXJpbmcgaXMgY2F1c2luZworICAgICAgICB0ZXh0dXJlIGNhY2hlIGludmFsaWRh
dGlvbnMgb2YgZ3B1IGNhbnZhcyBiYWNraW5nIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2luZyB1bm5lY2Vzc2FyeSB1c2FnZSBvZiBT
a0NhbnZhczo6TGF5ZXJJdGVyIHdpdGggY2FsbCB0bworICAgICAgICBTa0NhbnZhczo6aXNEcmF3
aW5nVG9MYXllcigpLiBTYW1lIHJlc3VsdHMsIGxvd2VyIG92ZXJoZWFkLCBhbmQgbm8KKyAgICAg
ICAgR1BVIHRleHR1cmUgaW52YWxpZGF0aW9uLgorCisgICAgICAgICogc3JjL1dlYkZvbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udEltcGw6OmRyYXdUZXh0KToKKwogMjAxMi0w
NC0wNSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBbY2hyb21pdW1dIGNsZWFuIHVwIFdEVEZDOjpzYXZlQXMgYWZ0ZXIgbWln
cmF0aW9uIHRvIHNhdmUoKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9u
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZv
bnRJbXBsLmNwcAkocmV2aXNpb24gMTEzMzI1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRm9udEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMjQgKzExMywxOSBAQCB2
b2lkIFdlYkZvbnRJbXBsOjpkcmF3VGV4dChXZWJDYW52YXMqIGNhCiAgICAgZ2MucmVzdG9yZSgp
OwogCiAjaWYgZGVmaW5lZChXSU4zMikKLSAgICBpZiAoY2FudmFzSXNPcGFxdWUgJiYgU2tDb2xv
ckdldEEoY29sb3IpID09IDB4RkYpIHsKLSAgICAgICAgU2tDYW52YXM6OkxheWVySXRlciBpdGVy
KGNvbnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7Ci0gICAgICAgIGl0ZXIubmV4
dCgpOyAvLyBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgotICAgICAgICBib29s
IG11bHRpcGxlTGF5ZXJzID0gIWl0ZXIuZG9uZSgpOwotICAgICAgICBpZiAoIW11bHRpcGxlTGF5
ZXJzKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdGV4dCBkcmF3aW5nIGxvZ2ljIG9uIFdpbmRvd3Mg
aWdub3JlcyB0aGUgYWxwaGEgY29tcG9uZW50Ci0gICAgICAgICAgICAvLyBpbnRlbnRpb25hbGx5
LCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KLSAgICAgICAgICAgIC8vIChQbGVhc2Ugc2VlIFRy
YW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkgaW4KLSAgICAgICAg
ICAgIC8vIEZvbnRDaHJvbWl1bVdpbi5jcHAuKQotICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCA9IGNhbnZhcy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKLSAg
ICAgICAgICAgIEludFJlY3QgdGV4dEJvdW5kcyA9IGVzdGltYXRlVGV4dEJvdW5kcyhydW4sIGxl
ZnRCYXNlbGluZSk7Ci0gICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZ2MuZ2V0Q1RNKCku
bWFwUmVjdCh0ZXh0Qm91bmRzKTsKLSAgICAgICAgICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRS
ZWN0KDAsIDAsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSBkZXN0UmVjdC55KCksIG1heFkgPSBkZXN0UmVjdC5tYXhZKCk7IHkgPCBt
YXhZOyB5KyspIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFk
ZHIzMigwLCB5KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gZGVzdFJlY3QueCgpLCBt
YXhYID0gZGVzdFJlY3QubWF4WCgpOyB4IDwgbWF4WDsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICByb3dbeF0gfD0gKDB4RkYgPDwgU0tfQTMyX1NISUZUKTsKLSAgICAgICAgICAgIH0KKyAgICBp
ZiAoY2FudmFzSXNPcGFxdWUgJiYgU2tDb2xvckdldEEoY29sb3IpID09IDB4RkYgJiYgIWNhbnZh
cy0+aXNEcmF3aW5nVG9MYXllcigpKSB7CisgICAgICAgIC8vIFRoZSB0ZXh0IGRyYXdpbmcgbG9n
aWMgb24gV2luZG93cyBpZ25vcmVzIHRoZSBhbHBoYSBjb21wb25lbnQKKyAgICAgICAgLy8gaW50
ZW50aW9uYWxseSwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgICAgICAgIC8vIChQbGVhc2Ug
c2VlIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkgaW4KKyAg
ICAgICAgLy8gRm9udENocm9taXVtV2luLmNwcC4pCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBi
aXRtYXAgPSBjYW52YXMtPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7CisgICAg
ICAgIEludFJlY3QgdGV4dEJvdW5kcyA9IGVzdGltYXRlVGV4dEJvdW5kcyhydW4sIGxlZnRCYXNl
bGluZSk7CisgICAgICAgIEludFJlY3QgZGVzdFJlY3QgPSBnYy5nZXRDVE0oKS5tYXBSZWN0KHRl
eHRCb3VuZHMpOworICAgICAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBiaXRt
YXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKSk7CisgICAgICAgIGZvciAoaW50IHkgPSBkZXN0
UmVjdC55KCksIG1heFkgPSBkZXN0UmVjdC5tYXhZKCk7IHkgPCBtYXhZOyB5KyspIHsKKyAgICAg
ICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOworICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IGRlc3RSZWN0LngoKSwgbWF4WCA9IGRlc3RSZWN0Lm1heFgoKTsgeCA8
IG1heFg7IHgrKykKKyAgICAgICAgICAgICAgICByb3dbeF0gfD0gKDB4RkYgPDwgU0tfQTMyX1NI
SUZUKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>