<?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>63871</bug_id>
          
          <creation_ts>2011-07-03 02:41:49 -0700</creation_ts>
          <short_desc>[Chromium] canvas/philip/tests/2d.gradient.object.update.html is failed on chromium.</short_desc>
          <delta_ts>2011-07-11 18:22:43 -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>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>64281</dup_id>
          
          <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>0</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dongseong.hwang</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>reed</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>senorblanco</cc>
    
    <cc>skyul</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>431685</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-03 02:41:49 -0700</bug_when>
    <thetext>From HTML5 canvas spec:
http://dev.w3.org/html5/2dcontext/#colors-and-styles

&quot;When set to a CanvasPattern or CanvasGradient object, the assignment is live, meaning that changes made to the object after the assignment do affect subsequent stroking or filling of shapes.&quot;

However, after setting CanvasPattern or CanvasGradient object and changing the object, changes made to the object after the assignment do not affect subsequent stroking or filling of shapes on chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431686</commentid>
    <comment_count>1</comment_count>
      <attachid>99570</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-03 02:52:03 -0700</bug_when>
    <thetext>Created attachment 99570
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431687</commentid>
    <comment_count>2</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-03 02:54:30 -0700</bug_when>
    <thetext>[Chromium] Update Gradient and Pattern every time to draw similar to PlatformContext::prepareForSoftwareDraw() 
    
GraphicsContextSkia::set[Fill|Stroke][Gradient|Pattern] has the problem that GraphicsContextSkia does not apply gradient or pattern style if the gradient or pattern is changed after GraphicsContextSkia::set[Fill|Stroke][Gradient|Pattern].
 
For example,
 Gradient* gradient;
 gradient-&gt;doSomething();
 graphicsContext.setFillGradient(gradient);
 gradient-&gt;addColorStop(...);  &lt;- GraphicsContextSkia does not apply this.

It is because GraphicsContextSkia creates new platform gradient or pattern object and it would be different from original gradient or pattern object in the above case.

This patch makes Chromium comform following Canvas spec.
From HTML5 canvas spec:
http://dev.w3.org/html5/2dcontext/#colors-and-styles

&quot;When set to a CanvasPattern or CanvasGradient object, the assignment is live, meaning that changes made to the object after the assignment do affect subsequent stroking or filling of shapes.&quot;
        
This patch makes chromium pass canvas/philip/tests/2d.gradient.object.update.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432497</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-05 17:50:04 -0700</bug_when>
    <thetext>Really?  We need to call that in so many places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432536</commentid>
    <comment_count>4</comment_count>
      <attachid>99773</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-05 18:44:09 -0700</bug_when>
    <thetext>Created attachment 99773
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432548</commentid>
    <comment_count>5</comment_count>
      <attachid>99773</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-05 18:52:32 -0700</bug_when>
    <thetext>Comment on attachment 99773
patch

I think we need to call before all drawing.
I separated stroke and fill updates like CG port.
CG calls those only on fillPath, fillRect, drawRect, strokePath, and strokRect because other drawing functions render through fillPath, fillRect, drawRect, strokePath, and strokRect. However, skia drawing function directly call SkCanvas&apos;s drawing functions.

I wonders how I handle drawLineForTextChecking and drawLineForText.
I put both applyStrokePatternOrGradient and applyFillPatternOrGradient in those.
I need advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434023</commentid>
    <comment_count>6</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-07-08 06:03:30 -0700</bug_when>
    <thetext>I agree this looks very invasive. Looking further up, I wonder why skia has this dual between graphicscontext-&gt;m_state (which has the gradient) and platformcontext which has the skia gradient. I notice the the webkit Gradient object itself holds a cache of the skia gradient, and it is correctly purged when addColorStop is called. If skia always went directly to m_state.fillGradient, I think we could skip all of these pushes.

Another clue that something funny is going on. Look in GraphicsContext.cpp


#if !USE(SKIA)
void GraphicsContext::setPlatformFillGradient(Gradient*)
{
}

void GraphicsContext::setPlatformFillPattern(Pattern*)
{
}

void GraphicsContext::setPlatformStrokeGradient(Gradient*)
{
}

void GraphicsContext::setPlatformStrokePattern(Pattern*)
{
}
#endif

All of these seem to exist solely for skia. If we didn&apos;t make a (premature) copy of the gradient, but reached directly into m_state each time, I think we would (a) fix this bug, and (b) avoid this whole layer of indirection/copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434142</commentid>
    <comment_count>7</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-07-08 10:43:22 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I agree this looks very invasive. Looking further up, I wonder why skia has this dual between graphicscontext-&gt;m_state (which has the gradient) and platformcontext which has the skia gradient. I notice the the webkit Gradient object itself holds a cache of the skia gradient, and it is correctly purged when addColorStop is called. If skia always went directly to m_state.fillGradient, I think we could skip all of these pushes.
&gt; 
&gt; Another clue that something funny is going on. Look in GraphicsContext.cpp
&gt; 
&gt; 
&gt; #if !USE(SKIA)
&gt; void GraphicsContext::setPlatformFillGradient(Gradient*)
&gt; {
&gt; }
&gt; 
&gt; void GraphicsContext::setPlatformFillPattern(Pattern*)
&gt; {
&gt; }
&gt; 
&gt; void GraphicsContext::setPlatformStrokeGradient(Gradient*)
&gt; {
&gt; }
&gt; 
&gt; void GraphicsContext::setPlatformStrokePattern(Pattern*)
&gt; {
&gt; }
&gt; #endif
&gt; 
&gt; All of these seem to exist solely for skia. If we didn&apos;t make a (premature) copy of the gradient, but reached directly into m_state each time, I think we would (a) fix this bug, and (b) avoid this whole layer of indirection/copying.

I&apos;m to blame for introducing these, in:

http://trac.webkit.org/changeset/46017

It was to refactor a bunch of cut-and-paste code, so that setupPaintForStroking() and setupPaintForFilling() could handle patterns and gradients, rather than having to cut-and-paste the same 5 lines of code we were using everywhere else for gradients and patterns (see the CL desc).

That may not be relevant anymore; I&apos;m not sure.  But anything we come up with should be checked against the tests that were fixed in that CL, at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434151</commentid>
    <comment_count>8</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-07-08 10:53:53 -0700</bug_when>
    <thetext>Ah, that helps. Certainly will explicitly check for regressions against those tests (and all of DRT).

I have a preliminary CL https://bugs.webkit.org/show_bug.cgi?id=64178 that is good in its own right, but will simplify a future CL (which I haven&apos;t posted yet) where I think we can address these gradient concerns w/o the extra calls proposed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434363</commentid>
    <comment_count>9</comment_count>
      <attachid>99773</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 16:06:57 -0700</bug_when>
    <thetext>Comment on attachment 99773
patch

Too invasive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434772</commentid>
    <comment_count>10</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-11 05:26:22 -0700</bug_when>
    <thetext>I found that we did not need to handle Pattern, because Pattern is mutable only due to Pattern::setPatternSpaceTransform() and setPatternSpaceTransform() already updates platformPattern.

I agree that this patch is too invasive. It is because SkGradientShader is immutable. We have to change platformGradient in GraphicsContext at every time that Gradient is modified. There is two approaches in order to change the platformGradient object.
1. Above approach.
2. Gradient has the callback for updating platformGradient in GraphicsContextSkia.

The second approach will be similar that DrawingBufferChromium uses WillPublishCallback class for managing a PlatformContextSkia object.
However, it will be more complex that a GradientSkia manages GraphicsContextSkia listners than a DrawingBufferChromium manages a PlatformContextSkia because several GraphicsContext objects can share one Gradient object and even one GraphicsContext can use one Gradient twice (i.e. fill and stroke).

I think two approaches are too invasive. It is why I chose the first invasive approach.

Recommend me better idea, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434902</commentid>
    <comment_count>11</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-07-11 08:48:34 -0700</bug_when>
    <thetext>proposed alternate fix: https://bugs.webkit.org/show_bug.cgi?id=64281</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435073</commentid>
    <comment_count>12</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-07-11 11:53:26 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=64281

This CL has landed. Can you confirm whether it fixes the issue for you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435104</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-07-11 12:13:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; https://bugs.webkit.org/show_bug.cgi?id=64281
&gt; 
&gt; This CL has landed. Can you confirm whether it fixes the issue for you?

FYI, 2d.gradient.object.update seems to be passing on the canaries:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Linux/builds/10413

I&apos;ll update the test expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435372</commentid>
    <comment_count>14</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-11 18:20:52 -0700</bug_when>
    <thetext>OMG!

https://bugs.webkit.org/show_bug.cgi?id=64281 solved it.

I&apos;m sorry for confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435373</commentid>
    <comment_count>15</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2011-07-11 18:22:43 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 64281 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99570</attachid>
            <date>2011-07-03 02:52:03 -0700</date>
            <delta_ts>2011-07-05 18:44:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Chromium-Update-Gradient-and-Pattern-every-time-to-d.patch</filename>
            <type>text/plain</type>
            <size>12185</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSA4NGUwYzJkMDVmYTY3Mzc5MGMxMTNlNDg4MzM0OTczMTZkMGQ4MTQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IFN1biwgMyBKdWwgMjAxMSAxODoxNzozNiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd
IFtDaHJvbWl1bV0gVXBkYXRlIEdyYWRpZW50IGFuZCBQYXR0ZXJuIGV2ZXJ5IHRpbWUgdG8gZHJh
dyBzaW1pbGFyIHRvCiBQbGF0Zm9ybUNvbnRleHQ6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKQog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzODcxCgpHcmFwaGljc0Nv
bnRleHRTa2lhOjpzZXRbRmlsbHxTdHJva2VdW0dyYWRpZW50fFBhdHRlcm5dIGhhcyB0aGUgcHJv
YmxlbSB0aGF0CkdyYXBoaWNzQ29udGV4dFNraWEgZG9lcyBub3QgYXBwbHkgZ3JhZGllbnQgb3Ig
cGF0dGVybiBzdHlsZSBpZiB0aGUgZ3JhZGllbnQgb3IKcGF0dGVybiBpcyBjaGFuZ2VkIGFmdGVy
IEdyYXBoaWNzQ29udGV4dFNraWE6OnNldFtGaWxsfFN0cm9rZV1bR3JhZGllbnR8UGF0dGVybl0u
CgpGb3IgZXhhbXBsZSwKICAgIEdyYWRpZW50KiBncmFkaWVudDsKICAgIGdyYWRpZW50LT5kb1Nv
bWV0aGluZygpOwogICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7
CiAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKC4uLik7ICA8LSBHcmFwaGljc0NvbnRleHRTa2lh
IGRvZXMgbm90IGFwcGx5IHRoaXMuCgpJdCBpcyBiZWNhdXNlIEdyYXBoaWNzQ29udGV4dFNraWEg
Y3JlYXRlcyBuZXcgcGxhdGZvcm0gZ3JhZGllbnQgb3IgcGF0dGVybgpvYmplY3QgYW5kIGl0IHdv
dWxkIGJlIGRpZmZlcmVudCBmcm9tIG9yaWdpbmFsIGdyYWRpZW50IG9yIHBhdHRlcm4gb2JqZWN0
CmluIHRoZSBhYm92ZSBjYXNlLgoKVGhpcyBwYXRjaCBtYWtlcyBDaHJvbWl1bSBjb21mb3JtIGZv
bGxvd2luZyBDYW52YXMgc3BlYy4KRnJvbSBIVE1MNSBjYW52YXMgc3BlYzoKaHR0cDovL2Rldi53
My5vcmcvaHRtbDUvMmRjb250ZXh0LyNjb2xvcnMtYW5kLXN0eWxlcwoKIldoZW4gc2V0IHRvIGEg
Q2FudmFzUGF0dGVybiBvciBDYW52YXNHcmFkaWVudCBvYmplY3QsIHRoZSBhc3NpZ25tZW50IGlz
IGxpdmUsCm1lYW5pbmcgdGhhdCBjaGFuZ2VzIG1hZGUgdG8gdGhlIG9iamVjdCBhZnRlciB0aGUg
YXNzaWdubWVudCBkbyBhZmZlY3QKc3Vic2VxdWVudCBzdHJva2luZyBvciBmaWxsaW5nIG9mIHNo
YXBlcy4iCgpUaGlzIHBhdGNoIG1ha2VzIGNocm9taXVtIHBhc3MKY2FudmFzL3BoaWxpcC90ZXN0
cy8yZC5ncmFkaWVudC5vYmplY3QudXBkYXRlLmh0bWwKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKysrKysrKysrKysrKysKIC4u
Li9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgICAgICAgIHwgICAgMSAt
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
NTAgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIHwgICAgNCArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgfCAgIDQxICsrKysrKysrKysrKysrKysKIDUgZmlsZXMg
Y2hhbmdlZCwgMTMwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDlhYjhj
MWQuLjQzNzU3ODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMS0wNy0wMyAgSHVhbmcgRG9u
Z3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIFVwZGF0ZSBHcmFkaWVudCBhbmQg
UGF0dGVybiBldmVyeSB0aW1lIHRvIGRyYXcgc2ltaWxhciB0bworICAgICAgICBQbGF0Zm9ybUNv
bnRleHQ6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4NzEKKworICAgICAgICBHcmFwaGljc0NvbnRleHRT
a2lhOjpzZXRbRmlsbHxTdHJva2VdW0dyYWRpZW50fFBhdHRlcm5dIGhhcyB0aGUgcHJvYmxlbSB0
aGF0CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFNraWEgZG9lcyBub3QgYXBwbHkgZ3JhZGllbnQg
b3IgcGF0dGVybiBzdHlsZSBpZiB0aGUgZ3JhZGllbnQgb3IKKyAgICAgICAgcGF0dGVybiBpcyBj
aGFuZ2VkIGFmdGVyIEdyYXBoaWNzQ29udGV4dFNraWE6OnNldFtGaWxsfFN0cm9rZV1bR3JhZGll
bnR8UGF0dGVybl0uCisKKyAgICAgICAgRm9yIGV4YW1wbGUsCisgICAgICAgICAgICBHcmFkaWVu
dCogZ3JhZGllbnQ7CisgICAgICAgICAgICBncmFkaWVudC0+ZG9Tb21ldGhpbmcoKTsKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOworICAgICAg
ICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCguLi4pOyAgPC0gR3JhcGhpY3NDb250ZXh0U2tp
YSBkb2VzIG5vdCBhcHBseSB0aGlzLgorCisgICAgICAgIEl0IGlzIGJlY2F1c2UgR3JhcGhpY3ND
b250ZXh0U2tpYSBjcmVhdGVzIG5ldyBwbGF0Zm9ybSBncmFkaWVudCBvciBwYXR0ZXJuCisgICAg
ICAgIG9iamVjdCBhbmQgaXQgd291bGQgYmUgZGlmZmVyZW50IGZyb20gb3JpZ2luYWwgZ3JhZGll
bnQgb3IgcGF0dGVybiBvYmplY3QKKyAgICAgICAgaW4gdGhlIGFib3ZlIGNhc2UuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyBDaHJvbWl1bSBjb21mb3JtIGZvbGxvd2luZyBDYW52YXMgc3Bl
Yy4KKyAgICAgICAgRnJvbSBIVE1MNSBjYW52YXMgc3BlYzoKKyAgICAgICAgaHR0cDovL2Rldi53
My5vcmcvaHRtbDUvMmRjb250ZXh0LyNjb2xvcnMtYW5kLXN0eWxlcworCisgICAgICAgICJXaGVu
IHNldCB0byBhIENhbnZhc1BhdHRlcm4gb3IgQ2FudmFzR3JhZGllbnQgb2JqZWN0LCB0aGUgYXNz
aWdubWVudCBpcyBsaXZlLAorICAgICAgICBtZWFuaW5nIHRoYXQgY2hhbmdlcyBtYWRlIHRvIHRo
ZSBvYmplY3QgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQgZG8gYWZmZWN0CisgICAgICAgIHN1YnNlcXVl
bnQgc3Ryb2tpbmcgb3IgZmlsbGluZyBvZiBzaGFwZXMuIgorCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgY2hyb21pdW0gcGFzcworICAgICAgICBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLmdyYWRp
ZW50Lm9iamVjdC51cGRhdGUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDExLTA3LTAxICBIdWFuZyBEb25nc3VuZyAgPGx1eHRl
bGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CmluZGV4IGVlM2M4ZTIuLmE2MTg0OGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTIwMzYsNyArMjAzNiw2
IEBAIEJVR1dLNTA4NTkgOiBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLnRleHQuZm9udC5wYXJzZS5z
eXN0ZW0uaHRtbCA9IFRFWFQKIEJVR1dLNDU5OTEgOiBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLnRl
eHQubWVhc3VyZS53aWR0aC5zcGFjZS5odG1sID0gVEVYVAogCiAvLyBUaGVzZSB0ZXN0cyBmYWls
IGV2ZXJ5d2hlcmUgd2UgdXNlIHNraWEgYW5kIGFyZSBtb3N0IGxpa2VseSBza2lhIGJ1Z3MKLUJV
R1dLNDU5OTEgTElOVVggV0lOIDogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5ncmFkaWVudC5vYmpl
Y3QudXBkYXRlLmh0bWwgPSBURVhUCiBCVUdXSzQ1OTkxIExJTlVYIFdJTiA6IGNhbnZhcy9waGls
aXAvdGVzdHMvMmQuZ3JhZGllbnQucmFkaWFsLmNvbmUuYmVoaW5kLmh0bWwgPSBURVhUCiBCVUdX
SzQ1OTkxIExJTlVYIFdJTiA6IGNhbnZhcy9waGlsaXAvdGVzdHMvMmQuZ3JhZGllbnQucmFkaWFs
LmNvbmUuYmVzaWRlLmh0bWwgPSBURVhUCiBCVUdXSzQ1OTkxIFdJTiA6IGNhbnZhcy9waGlsaXAv
dGVzdHMvMmQuZ3JhZGllbnQucmFkaWFsLmNvbmUuY3lsaW5kZXIuaHRtbCA9IFRFWFQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAyOWU5Y2I0Li43ODQ0MTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIw
MTEtMDctMDMgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBV
cGRhdGUgR3JhZGllbnQgYW5kIFBhdHRlcm4gZXZlcnkgdGltZSB0byBkcmF3IHNpbWlsYXIgdG8K
KyAgICAgICAgUGxhdGZvcm1Db250ZXh0OjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KCkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzODcxCisKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U2tpYTo6c2V0W0ZpbGx8U3Ryb2tlXVtHcmFkaWVudHxQYXR0ZXJu
XSBoYXMgdGhlIHByb2JsZW0gdGhhdAorICAgICAgICBHcmFwaGljc0NvbnRleHRTa2lhIGRvZXMg
bm90IGFwcGx5IGdyYWRpZW50IG9yIHBhdHRlcm4gc3R5bGUgaWYgdGhlIGdyYWRpZW50IG9yCisg
ICAgICAgIHBhdHRlcm4gaXMgY2hhbmdlZCBhZnRlciBHcmFwaGljc0NvbnRleHRTa2lhOjpzZXRb
RmlsbHxTdHJva2VdW0dyYWRpZW50fFBhdHRlcm5dLgorCisgICAgICAgIEZvciBleGFtcGxlLAor
ICAgICAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50OworICAgICAgICAgICAgZ3JhZGllbnQtPmRv
U29tZXRoaW5nKCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbEdyYWRpZW50
KGdyYWRpZW50KTsKKyAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoLi4uKTsgIDwt
IEdyYXBoaWNzQ29udGV4dFNraWEgZG9lcyBub3QgYXBwbHkgdGhpcy4KKworICAgICAgICBJdCBp
cyBiZWNhdXNlIEdyYXBoaWNzQ29udGV4dFNraWEgY3JlYXRlcyBuZXcgcGxhdGZvcm0gZ3JhZGll
bnQgb3IgcGF0dGVybgorICAgICAgICBvYmplY3QgYW5kIGl0IHdvdWxkIGJlIGRpZmZlcmVudCBm
cm9tIG9yaWdpbmFsIGdyYWRpZW50IG9yIHBhdHRlcm4gb2JqZWN0CisgICAgICAgIGluIHRoZSBh
Ym92ZSBjYXNlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgQ2hyb21pdW0gY29tZm9ybSBm
b2xsb3dpbmcgQ2FudmFzIHNwZWMuCisgICAgICAgIEZyb20gSFRNTDUgY2FudmFzIHNwZWM6Cisg
ICAgICAgIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1LzJkY29udGV4dC8jY29sb3JzLWFuZC1zdHls
ZXMKKworICAgICAgICAiV2hlbiBzZXQgdG8gYSBDYW52YXNQYXR0ZXJuIG9yIENhbnZhc0dyYWRp
ZW50IG9iamVjdCwgdGhlIGFzc2lnbm1lbnQgaXMgbGl2ZSwKKyAgICAgICAgbWVhbmluZyB0aGF0
IGNoYW5nZXMgbWFkZSB0byB0aGUgb2JqZWN0IGFmdGVyIHRoZSBhc3NpZ25tZW50IGRvIGFmZmVj
dAorICAgICAgICBzdWJzZXF1ZW50IHN0cm9raW5nIG9yIGZpbGxpbmcgb2Ygc2hhcGVzLiIKKwor
ICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNocm9taXVtIHBhc3MKKyAgICAgICAgY2FudmFzL3Bo
aWxpcC90ZXN0cy8yZC5ncmFkaWVudC5vYmplY3QudXBkYXRlLmh0bWwKKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZVBsYXRmb3JtU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdCk6CisKIDIwMTEtMDctMDEgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFA
Y29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CmluZGV4IDM2MGE3YzUuLjIyYjVkZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01MzQsNiArNTM0LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudChHcmFk
aWVudCopOwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiopOwog
CisjaWYgVVNFKFNLSUEpCisgICAgICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TdHlsZSgpOworI2Vu
ZGlmCisKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHRTa2lhLmNwcAppbmRleCBiNmI1NDM4Li5jMGMzNGY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAKQEAgLTQ3NSw2ICs0NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAgICBpZiAobnVtUG9pbnRzIDw9IDEp
CiAgICAgICAgIHJldHVybjsKIAorICAgIHVwZGF0ZVBsYXRmb3JtU3R5bGUoKTsKKwogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKICAgICBTa1BhdGgg
cGF0aDsKQEAgLTUxNyw2ICs1MTksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlw
c2UoY29uc3QgSW50UmVjdCYgZWxpcHNlUmVjdCkKICAgICBpZiAoIWlzUmVjdFNraWFTYWZlKGdl
dENUTSgpLCByZWN0KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgdXBkYXRlUGxhdGZvcm1TdHls
ZSgpOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsK
ICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9y
RmlsbGluZygmcGFpbnQpOwpAQCAtNTc0LDYgKzU3OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwg
aW50CiAgICAgaWYgKCFyZWN0Q291bnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIHVwZGF0ZVBs
YXRmb3JtU3R5bGUoKTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdh
cmVEcmF3KCk7CiAgICAgU2tSZWdpb24gZm9jdXNSaW5nUmVnaW9uOwogICAgIGNvbnN0IFNrU2Nh
bGFyIGZvY3VzUmluZ091dHNldCA9IGdldEZvY3VzUmluZ091dHNldCh3aWR0aCk7CkBAIC02MDks
NiArNjE1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50
JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAgICAgaWYgKCFpc1BvaW50U2tpYVNh
ZmUoZ2V0Q1RNKCksIHBvaW50MSkgfHwgIWlzUG9pbnRTa2lhU2FmZShnZXRDVE0oKSwgcG9pbnQy
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgdXBkYXRlUGxhdGZvcm1TdHlsZSgpOworCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAogICAgIEZsb2F0
UG9pbnQgcDEgPSBwb2ludDE7CkBAIC02NTUsNiArNjYzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3
aWR0aCwKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICB1cGRhdGVQbGF0Zm9ybVN0eWxlKCk7CisKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFy
ZUZvclNvZnR3YXJlRHJhdygpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBwYXR0ZXJuIHdlJ2xsIHVz
ZSB0byBkcmF3IHRoZSB1bmRlcmxpbmUuCkBAIC03MzcsNiArNzQ3LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwKICAgICBpZiAo
d2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuOwogCisgICAgdXBkYXRlUGxhdGZvcm1TdHlsZSgp
OworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAog
ICAgIGludCB0aGlja25lc3MgPSBTa01heDMyKHN0YXRpY19jYXN0PGludD4oc3Ryb2tlVGhpY2tu
ZXNzKCkpLCAxKTsKQEAgLTc1OSw2ICs3NzEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICB1cGRhdGVQbGF0Zm9ybVN0eWxlKCk7CisKICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCiAgICAgU2tSZWN0IHIg
PSByZWN0OwpAQCAtNzg2LDYgKzgwMCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RN
KCksIHBhdGgpKQogICAgICAgcmV0dXJuOwogCisgICAgdXBkYXRlUGxhdGZvcm1TdHlsZSgpOwor
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAogICAg
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CkBAIC04MTUsNiAr
ODMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHVwZGF0ZVBsYXRmb3JtU3R5bGUo
KTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zYXZlKCk7CiAKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwpAQCAtODM3LDYgKzg1NSw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICB1cGRhdGVQ
bGF0Zm9ybVN0eWxlKCk7CisKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3
YXJlRHJhdygpOwogCiAgICAgU2tSZWN0IHIgPSByZWN0OwpAQCAtODcxLDYgKzg5MSw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICB1cGRh
dGVQbGF0Zm9ybVN0eWxlKCk7CisKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNv
ZnR3YXJlRHJhdygpOwogCiAgICAgU2tSZWN0IHIgPSByZWN0OwpAQCAtMTE4Nyw2ICsxMjA5LDE5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVy
biogcGF0dGVybikKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVyKHBhdHRl
cm4tPnBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6dXBkYXRlUGxhdGZvcm1TdHlsZSgpCit7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4p
CisgICAgICAgIHNldFBsYXRmb3JtRmlsbFBhdHRlcm4obV9zdGF0ZS5maWxsUGF0dGVybi5nZXQo
KSk7CisgICAgZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIHNldFBsYXRm
b3JtRmlsbEdyYWRpZW50KG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKKworICAgIGlmICht
X3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybiht
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworICAgIGVsc2UgaWYgKG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQpCisgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQobV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC5nZXQoKSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCkBAIC0xMjEyLDYgKzEyNDcsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5n
bGVTcGFuKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIHVwZGF0ZVBsYXRmb3JtU3R5bGUoKTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVw
YXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKICAgICBTa1BhaW50IHBhaW50OwpAQCAtMTI0NSw2ICsx
MjgyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aFRvU3Ryb2tlKQogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICB1cGRhdGVQbGF0Zm9ybVN0eWxlKCk7CisKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCiAgICAgU2tQYWludCBwYWlu
dDsKQEAgLTEyNjAsNiArMTI5OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIGlmICghaXNSZWN0
U2tpYVNhZmUoZ2V0Q1RNKCksIHJlY3QpKQogICAgICAgICByZXR1cm47CiAKKyAgICB1cGRhdGVQ
bGF0Zm9ybVN0eWxlKCk7CisKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3
YXJlRHJhdygpOwogCiAgICAgU2tQYWludCBwYWludDsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99773</attachid>
            <date>2011-07-05 18:44:09 -0700</date>
            <delta_ts>2011-07-08 16:06:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Chromium-Update-Gradient-and-Pattern-every-time-to-d.patch</filename>
            <type>text/plain</type>
            <size>12526</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSAzYjEwZDdjZmNhNTg5N2ZjZGFhMzRjOWYyMTliMDNhZDE0MDdjYmZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IFN1biwgMyBKdWwgMjAxMSAxODoxNzozNiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd
IFtDaHJvbWl1bV0gVXBkYXRlIEdyYWRpZW50IGFuZCBQYXR0ZXJuIGV2ZXJ5IHRpbWUgdG8gZHJh
dyBzaW1pbGFyIHRvCiBQbGF0Zm9ybUNvbnRleHQ6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKQog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzODcxCgpHcmFwaGljc0Nv
bnRleHRTa2lhOjpzZXRbRmlsbHxTdHJva2VdW0dyYWRpZW50fFBhdHRlcm5dIGhhcyB0aGUgcHJv
YmxlbSB0aGF0CkdyYXBoaWNzQ29udGV4dFNraWEgZG9lcyBub3QgYXBwbHkgZ3JhZGllbnQgb3Ig
cGF0dGVybiBzdHlsZSBpZiB0aGUgZ3JhZGllbnQgb3IKcGF0dGVybiBpcyBjaGFuZ2VkIGFmdGVy
IEdyYXBoaWNzQ29udGV4dFNraWE6OnNldFtGaWxsfFN0cm9rZV1bR3JhZGllbnR8UGF0dGVybl0u
CgpGb3IgZXhhbXBsZSwKICAgIEdyYWRpZW50KiBncmFkaWVudDsKICAgIGdyYWRpZW50LT5kb1Nv
bWV0aGluZygpOwogICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7
CiAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKC4uLik7ICA8LSBHcmFwaGljc0NvbnRleHRTa2lh
IGRvZXMgbm90IGFwcGx5IHRoaXMuCgpJdCBpcyBiZWNhdXNlIEdyYXBoaWNzQ29udGV4dFNraWEg
Y3JlYXRlcyBuZXcgcGxhdGZvcm0gZ3JhZGllbnQgb3IgcGF0dGVybgpvYmplY3QgYW5kIGl0IHdv
dWxkIGJlIGRpZmZlcmVudCBmcm9tIG9yaWdpbmFsIGdyYWRpZW50IG9yIHBhdHRlcm4gb2JqZWN0
CmluIHRoZSBhYm92ZSBjYXNlLgoKVGhpcyBwYXRjaCBtYWtlcyBDaHJvbWl1bSBjb21mb3JtIGZv
bGxvd2luZyBDYW52YXMgc3BlYy4KRnJvbSBIVE1MNSBjYW52YXMgc3BlYzoKaHR0cDovL2Rldi53
My5vcmcvaHRtbDUvMmRjb250ZXh0LyNjb2xvcnMtYW5kLXN0eWxlcwoKIldoZW4gc2V0IHRvIGEg
Q2FudmFzUGF0dGVybiBvciBDYW52YXNHcmFkaWVudCBvYmplY3QsIHRoZSBhc3NpZ25tZW50IGlz
IGxpdmUsCm1lYW5pbmcgdGhhdCBjaGFuZ2VzIG1hZGUgdG8gdGhlIG9iamVjdCBhZnRlciB0aGUg
YXNzaWdubWVudCBkbyBhZmZlY3QKc3Vic2VxdWVudCBzdHJva2luZyBvciBmaWxsaW5nIG9mIHNo
YXBlcy4iCgpUaGlzIHBhdGNoIG1ha2VzIGNocm9taXVtIHBhc3MKY2FudmFzL3BoaWxpcC90ZXN0
cy8yZC5ncmFkaWVudC5vYmplY3QudXBkYXRlLmh0bWwKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKysrKysrKysrKysrKysKIC4u
Li9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgICAgICAgIHwgICAgMSAt
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
NTAgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIHwgICAgNSArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgfCAgIDQ3ICsrKysrKysrKysrKysrKysrKwogNSBmaWxl
cyBjaGFuZ2VkLCAxMzcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOWFi
OGMxZC4uNDM3NTc4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTA3LTAzICBIdWFuZyBE
b25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gVXBkYXRlIEdyYWRpZW50IGFu
ZCBQYXR0ZXJuIGV2ZXJ5IHRpbWUgdG8gZHJhdyBzaW1pbGFyIHRvCisgICAgICAgIFBsYXRmb3Jt
Q29udGV4dDo6cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg3MQorCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFNraWE6OnNldFtGaWxsfFN0cm9rZV1bR3JhZGllbnR8UGF0dGVybl0gaGFzIHRoZSBwcm9ibGVt
IHRoYXQKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U2tpYSBkb2VzIG5vdCBhcHBseSBncmFkaWVu
dCBvciBwYXR0ZXJuIHN0eWxlIGlmIHRoZSBncmFkaWVudCBvcgorICAgICAgICBwYXR0ZXJuIGlz
IGNoYW5nZWQgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0U2tpYTo6c2V0W0ZpbGx8U3Ryb2tlXVtHcmFk
aWVudHxQYXR0ZXJuXS4KKworICAgICAgICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAgIEdyYWRp
ZW50KiBncmFkaWVudDsKKyAgICAgICAgICAgIGdyYWRpZW50LT5kb1NvbWV0aGluZygpOworICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7CisgICAg
ICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKC4uLik7ICA8LSBHcmFwaGljc0NvbnRleHRT
a2lhIGRvZXMgbm90IGFwcGx5IHRoaXMuCisKKyAgICAgICAgSXQgaXMgYmVjYXVzZSBHcmFwaGlj
c0NvbnRleHRTa2lhIGNyZWF0ZXMgbmV3IHBsYXRmb3JtIGdyYWRpZW50IG9yIHBhdHRlcm4KKyAg
ICAgICAgb2JqZWN0IGFuZCBpdCB3b3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBvcmlnaW5hbCBncmFk
aWVudCBvciBwYXR0ZXJuIG9iamVjdAorICAgICAgICBpbiB0aGUgYWJvdmUgY2FzZS4KKworICAg
ICAgICBUaGlzIHBhdGNoIG1ha2VzIENocm9taXVtIGNvbWZvcm0gZm9sbG93aW5nIENhbnZhcyBz
cGVjLgorICAgICAgICBGcm9tIEhUTUw1IGNhbnZhcyBzcGVjOgorICAgICAgICBodHRwOi8vZGV2
LnczLm9yZy9odG1sNS8yZGNvbnRleHQvI2NvbG9ycy1hbmQtc3R5bGVzCisKKyAgICAgICAgIldo
ZW4gc2V0IHRvIGEgQ2FudmFzUGF0dGVybiBvciBDYW52YXNHcmFkaWVudCBvYmplY3QsIHRoZSBh
c3NpZ25tZW50IGlzIGxpdmUsCisgICAgICAgIG1lYW5pbmcgdGhhdCBjaGFuZ2VzIG1hZGUgdG8g
dGhlIG9iamVjdCBhZnRlciB0aGUgYXNzaWdubWVudCBkbyBhZmZlY3QKKyAgICAgICAgc3Vic2Vx
dWVudCBzdHJva2luZyBvciBmaWxsaW5nIG9mIHNoYXBlcy4iCisKKyAgICAgICAgVGhpcyBwYXRj
aCBtYWtlcyBjaHJvbWl1bSBwYXNzCisgICAgICAgIGNhbnZhcy9waGlsaXAvdGVzdHMvMmQuZ3Jh
ZGllbnQub2JqZWN0LnVwZGF0ZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDctMDEgIEh1YW5nIERvbmdzdW5nICA8bHV4
dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQKaW5kZXggZWUzYzhlMi4uYTYxODQ4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtMjAzNiw3ICsyMDM2
LDYgQEAgQlVHV0s1MDg1OSA6IGNhbnZhcy9waGlsaXAvdGVzdHMvMmQudGV4dC5mb250LnBhcnNl
LnN5c3RlbS5odG1sID0gVEVYVAogQlVHV0s0NTk5MSA6IGNhbnZhcy9waGlsaXAvdGVzdHMvMmQu
dGV4dC5tZWFzdXJlLndpZHRoLnNwYWNlLmh0bWwgPSBURVhUCiAKIC8vIFRoZXNlIHRlc3RzIGZh
aWwgZXZlcnl3aGVyZSB3ZSB1c2Ugc2tpYSBhbmQgYXJlIG1vc3QgbGlrZWx5IHNraWEgYnVncwot
QlVHV0s0NTk5MSBMSU5VWCBXSU4gOiBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLmdyYWRpZW50Lm9i
amVjdC51cGRhdGUuaHRtbCA9IFRFWFQKIEJVR1dLNDU5OTEgTElOVVggV0lOIDogY2FudmFzL3Bo
aWxpcC90ZXN0cy8yZC5ncmFkaWVudC5yYWRpYWwuY29uZS5iZWhpbmQuaHRtbCA9IFRFWFQKIEJV
R1dLNDU5OTEgTElOVVggV0lOIDogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5ncmFkaWVudC5yYWRp
YWwuY29uZS5iZXNpZGUuaHRtbCA9IFRFWFQKIEJVR1dLNDU5OTEgV0lOIDogY2FudmFzL3BoaWxp
cC90ZXN0cy8yZC5ncmFkaWVudC5yYWRpYWwuY29uZS5jeWxpbmRlci5odG1sID0gVEVYVApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDI5ZTljYjQuLjc4NDQxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAor
MjAxMS0wNy0wMyAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1d
IFVwZGF0ZSBHcmFkaWVudCBhbmQgUGF0dGVybiBldmVyeSB0aW1lIHRvIGRyYXcgc2ltaWxhciB0
bworICAgICAgICBQbGF0Zm9ybUNvbnRleHQ6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4NzEKKworICAg
ICAgICBHcmFwaGljc0NvbnRleHRTa2lhOjpzZXRbRmlsbHxTdHJva2VdW0dyYWRpZW50fFBhdHRl
cm5dIGhhcyB0aGUgcHJvYmxlbSB0aGF0CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFNraWEgZG9l
cyBub3QgYXBwbHkgZ3JhZGllbnQgb3IgcGF0dGVybiBzdHlsZSBpZiB0aGUgZ3JhZGllbnQgb3IK
KyAgICAgICAgcGF0dGVybiBpcyBjaGFuZ2VkIGFmdGVyIEdyYXBoaWNzQ29udGV4dFNraWE6OnNl
dFtGaWxsfFN0cm9rZV1bR3JhZGllbnR8UGF0dGVybl0uCisKKyAgICAgICAgRm9yIGV4YW1wbGUs
CisgICAgICAgICAgICBHcmFkaWVudCogZ3JhZGllbnQ7CisgICAgICAgICAgICBncmFkaWVudC0+
ZG9Tb21ldGhpbmcoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsR3JhZGll
bnQoZ3JhZGllbnQpOworICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCguLi4pOyAg
PC0gR3JhcGhpY3NDb250ZXh0U2tpYSBkb2VzIG5vdCBhcHBseSB0aGlzLgorCisgICAgICAgIEl0
IGlzIGJlY2F1c2UgR3JhcGhpY3NDb250ZXh0U2tpYSBjcmVhdGVzIG5ldyBwbGF0Zm9ybSBncmFk
aWVudCBvciBwYXR0ZXJuCisgICAgICAgIG9iamVjdCBhbmQgaXQgd291bGQgYmUgZGlmZmVyZW50
IGZyb20gb3JpZ2luYWwgZ3JhZGllbnQgb3IgcGF0dGVybiBvYmplY3QKKyAgICAgICAgaW4gdGhl
IGFib3ZlIGNhc2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBDaHJvbWl1bSBjb21mb3Jt
IGZvbGxvd2luZyBDYW52YXMgc3BlYy4KKyAgICAgICAgRnJvbSBIVE1MNSBjYW52YXMgc3BlYzoK
KyAgICAgICAgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvMmRjb250ZXh0LyNjb2xvcnMtYW5kLXN0
eWxlcworCisgICAgICAgICJXaGVuIHNldCB0byBhIENhbnZhc1BhdHRlcm4gb3IgQ2FudmFzR3Jh
ZGllbnQgb2JqZWN0LCB0aGUgYXNzaWdubWVudCBpcyBsaXZlLAorICAgICAgICBtZWFuaW5nIHRo
YXQgY2hhbmdlcyBtYWRlIHRvIHRoZSBvYmplY3QgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQgZG8gYWZm
ZWN0CisgICAgICAgIHN1YnNlcXVlbnQgc3Ryb2tpbmcgb3IgZmlsbGluZyBvZiBzaGFwZXMuIgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgY2hyb21pdW0gcGFzcworICAgICAgICBjYW52YXMv
cGhpbGlwL3Rlc3RzLzJkLmdyYWRpZW50Lm9iamVjdC51cGRhdGUuaHRtbAorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dENoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRlUGxhdGZvcm1TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KToKKwogMjAxMS0wNy0wMSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxs
YUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKaW5kZXggMzYwYTdjNS4uZDRmYjliMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTUzNCw2ICs1MzQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdy
YWRpZW50Kik7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKik7
CiAKKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm5PckdyYWRp
ZW50KCk7CisgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybk9yR3JhZGllbnQoKTsKKyNlbmRp
ZgorCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCk7CiAgICAg
ICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAKaW5kZXggYjZiNTQzOC4uOTU0MTM4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwCkBAIC00NzUsNiArNDc1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsCiAgICAgaWYgKG51bVBvaW50cyA8PSAxKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBhcHBseUZpbGxQYXR0ZXJuT3JHcmFkaWVudCgpOworCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAogICAgIFNr
UGF0aCBwYXRoOwpAQCAtNTE3LDYgKzUxOSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
RWxsaXBzZShjb25zdCBJbnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIGlmICghaXNSZWN0U2tpYVNh
ZmUoZ2V0Q1RNKCksIHJlY3QpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhcHBseUZpbGxQYXR0
ZXJuT3JHcmFkaWVudCgpOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0
d2FyZURyYXcoKTsKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwpAQCAtNTc0LDYgKzU3OCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50CiAgICAgaWYgKCFyZWN0Q291bnQpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGFwcGx5U3Ryb2tlUGF0dGVybk9yR3JhZGllbnQoKTsKKwogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAgICAgU2tSZWdpb24gZm9jdXNSaW5nUmVn
aW9uOwogICAgIGNvbnN0IFNrU2NhbGFyIGZvY3VzUmluZ091dHNldCA9IGdldEZvY3VzUmluZ091
dHNldCh3aWR0aCk7CkBAIC02MDksNiArNjE1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAg
ICAgaWYgKCFpc1BvaW50U2tpYVNhZmUoZ2V0Q1RNKCksIHBvaW50MSkgfHwgIWlzUG9pbnRTa2lh
U2FmZShnZXRDVE0oKSwgcG9pbnQyKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXBwbHlTdHJv
a2VQYXR0ZXJuT3JHcmFkaWVudCgpOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKTsKIAogICAgIEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7CkBAIC02NTUs
NiArNjYzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhcHBseVN0cm9rZVBhdHRlcm5PckdyYWRp
ZW50KCk7CisgICAgYXBwbHlGaWxsUGF0dGVybk9yR3JhZGllbnQoKTsKKwogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKICAgICAvLyBDcmVhdGUgdGhl
IHBhdHRlcm4gd2UnbGwgdXNlIHRvIGRyYXcgdGhlIHVuZGVybGluZS4KQEAgLTczNyw2ICs3NDgs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHB0LAogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKKyAgICBhcHBs
eVN0cm9rZVBhdHRlcm5PckdyYWRpZW50KCk7CisgICAgYXBwbHlGaWxsUGF0dGVybk9yR3JhZGll
bnQoKTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7
CiAKICAgICBpbnQgdGhpY2tuZXNzID0gU2tNYXgzMihzdGF0aWNfY2FzdDxpbnQ+KHN0cm9rZVRo
aWNrbmVzcygpKSwgMSk7CkBAIC03NTksNiArNzczLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXBwbHlTdHJva2VQYXR0ZXJuT3JHcmFkaWVudCgp
OworICAgIGFwcGx5RmlsbFBhdHRlcm5PckdyYWRpZW50KCk7CisKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCiAgICAgU2tSZWN0IHIgPSByZWN0OwpA
QCAtNzg2LDYgKzgwMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoVG9GaWxsKQogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgp
KQogICAgICAgcmV0dXJuOwogCisgICAgYXBwbHlGaWxsUGF0dGVybk9yR3JhZGllbnQoKTsKKwog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKICAgICBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpAQCAtODE1LDYgKzgz
NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBhcHBseUZpbGxQYXR0ZXJuT3JHcmFk
aWVudCgpOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNhdmUoKTsKIAogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CkBAIC04MzcsNiArODU4LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGFw
cGx5RmlsbFBhdHRlcm5PckdyYWRpZW50KCk7CisKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJl
cGFyZUZvclNvZnR3YXJlRHJhdygpOwogCiAgICAgU2tSZWN0IHIgPSByZWN0OwpAQCAtODcxLDYg
Kzg5NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCwKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBhcHBseUZpbGxQYXR0ZXJuT3JHcmFkaWVudCgpOworCiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAogICAgIFNrUmVjdCByID0gcmVjdDsK
QEAgLTExODcsNiArMTIxMiwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VQYXR0ZXJuKFBhdHRlcm4qIHBhdHRlcm4pCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNl
dFN0cm9rZVNoYWRlcihwYXR0ZXJuLT5wbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybk9yR3JhZGllbnQoKQorewor
ICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tl
UGF0dGVybihtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworICAgIGVsc2UgaWYgKG1fc3Rh
dGUuc3Ryb2tlR3JhZGllbnQpCisgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQobV9z
dGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
cHBseUZpbGxQYXR0ZXJuT3JHcmFkaWVudCgpCit7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRl
cm4pCisgICAgICAgIHNldFBsYXRmb3JtRmlsbFBhdHRlcm4obV9zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKSk7CisgICAgZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIHNldFBs
YXRmb3JtRmlsbEdyYWRpZW50KG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKK30KKwogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5n
TW9kZUZsYWdzIG1vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEyMTIs
NiArMTI1Myw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVj
dCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXBwbHlTdHJva2VQYXR0ZXJuT3JHcmFk
aWVudCgpOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXco
KTsKIAogICAgIFNrUGFpbnQgcGFpbnQ7CkBAIC0xMjQ1LDYgKzEyODgsOCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiAgICAgaWYg
KCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGFwcGx5U3Ryb2tlUGF0dGVybk9yR3JhZGllbnQoKTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKICAgICBTa1BhaW50IHBhaW50OwpAQCAtMTI2
MCw2ICsxMzA1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgaWYgKCFpc1JlY3RTa2lhU2FmZShn
ZXRDVE0oKSwgcmVjdCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGFwcGx5U3Ryb2tlUGF0dGVy
bk9yR3JhZGllbnQoKTsKKwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdh
cmVEcmF3KCk7CiAKICAgICBTa1BhaW50IHBhaW50OwotLSAKMS43LjEKCg==
</data>
<flag name="review"
          id="94324"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>