<?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>45902</bug_id>
          
          <creation_ts>2010-09-16 09:55:40 -0700</creation_ts>
          <short_desc>[Cairo] Port drawTiledShadow to the new ContextShadow</short_desc>
          <delta_ts>2010-10-05 01:09:22 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>47076</dependson>
          <blocked>46475</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>280161</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-16 09:55:40 -0700</bug_when>
    <thetext>drawTiledShadow should be a method on ContextShadow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288868</commentid>
    <comment_count>1</comment_count>
      <attachid>69614</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-04 04:15:01 -0700</bug_when>
    <thetext>Created attachment 69614
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288871</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-04 04:20:07 -0700</bug_when>
    <thetext>Attachment 69614 did not build on gtk:
Build output: http://queues.webkit.org/results/4185065</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288872</commentid>
    <comment_count>3</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-04 04:23:32 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 69614 [details] did not build on gtk:
&gt; Build output: http://queues.webkit.org/results/4185065

Gtk depends on the bug 47076. I&apos;ll reupload when that patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288937</commentid>
    <comment_count>4</comment_count>
      <attachid>69614</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-04 08:21:58 -0700</bug_when>
    <thetext>Comment on attachment 69614
Proposed patch

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

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:168
&gt; +void ContextShadow::drawShadowedRect(PlatformContext context, const IntRect&amp; rect, const FloatSize&amp; topLeftRadius, const FloatSize&amp; topRightRadius, const FloatSize&amp; bottomLeftRadius, const FloatSize&amp; bottomRightRadius, float alpha)
&gt; +{

I think I&apos;d like to see two more things inside this method:
1. The logic which falls back to the normal shadow path if the context has transformation that we still do not support.
2. The code that adds the path to the Cairo surface.

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:175
&gt; +    FloatRect shadowRect;
&gt; +    shadowRect = FloatRect(rect.location(), shadowBufferSize);

Probably better just to collapse this down to:
FloatRect shadowRect = FloatRect(rect.location(), shadowBufferSize);

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:216
&gt; +        beginShadowLayer(context, shadowRect);
&gt; +
&gt; +        if (!m_layerContext)
&gt; +            return;
&gt; +
&gt; +        cairo_new_path(m_layerContext);
&gt; +        OwnPtr&lt;cairo_path_t&gt; path(cairo_copy_path(context));
&gt; +        cairo_append_path(m_layerContext, path.get());
&gt; +
&gt; +        cairo_save(m_layerContext);
&gt; +        cairo_set_source_rgb(m_layerContext, 0.f, 0.f, 0.f);
&gt; +        cairo_clip_preserve(m_layerContext);
&gt; +        cairo_paint_with_alpha(m_layerContext, alpha);
&gt; +        cairo_restore(m_layerContext);
&gt; +
&gt; +        endShadowLayer(context);
&gt; +

This should probably be a helper function.

&gt; WebCore/platform/graphics/qt/ContextShadowQt.cpp:164
&gt; +void ContextShadow::drawShadowedRect(PlatformContext context, const IntRect&amp; rect, const FloatSize&amp; topLeftRadius, const FloatSize&amp; topRightRadius, const FloatSize&amp; bottomLeftRadius, const FloatSize&amp; bottomRightRadius, float alpha)
&gt; +{
&gt; +    // Not implemented.
&gt; +}
&gt; +
&gt;  }

I think you should skip this and just do #ifdefs in the ContextShadow.h. I don&apos;t think the Qt guys want this optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288948</commentid>
    <comment_count>5</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-04 08:28:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 69614 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69614&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:168
&gt; &gt; +void ContextShadow::drawShadowedRect(PlatformContext context, const IntRect&amp; rect, const FloatSize&amp; topLeftRadius, const FloatSize&amp; topRightRadius, const FloatSize&amp; bottomLeftRadius, const FloatSize&amp; bottomRightRadius, float alpha)
&gt; &gt; +{
&gt; 
&gt; [...]
&gt;

Thanks for the comments, I&apos;ll review them :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289022</commentid>
    <comment_count>6</comment_count>
      <attachid>69650</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-04 11:29:54 -0700</bug_when>
    <thetext>Created attachment 69650
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289036</commentid>
    <comment_count>7</comment_count>
      <attachid>69650</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-04 11:45:43 -0700</bug_when>
    <thetext>Comment on attachment 69650
Proposed patch

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

Great! Please fix the small issues before landing.

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:139
&gt; +    cairo_set_source_rgba(m_layerContext, 0.f, 0.f, 0.f, alpha);

I think this can just be cairo_set_source_rgba(m_layerContext, 0, 0, 0, alpha);

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:144
&gt; +
&gt; +    return;

No need for this.

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:199
&gt; +    // Calculate filter values to create appropriate shadow.

Might want to update this comment, as we are no longer using SVG filters.

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:201
&gt; +    shadowBufferSize = IntSize(rect.width() + m_blurRadius * 2, rect.height() + m_blurRadius * 2);

I think this can be:
IntSize shadowBufferSize = IntSize(rect.width() + m_blurRadius * 2, rect.height() + m_blurRadius * 2);

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:248
&gt; +    cairo_set_source_rgba(m_layerContext, 0.f, 0.f, 0.f, context-&gt;getAlpha());

These can also be cairo_set_source_rgba(m_layerContext, 0, 0, 0, context-&gt;getAlpha());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289484</commentid>
    <comment_count>8</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-05 01:09:22 -0700</bug_when>
    <thetext>Thanks, reviewed and landed http://trac.webkit.org/changeset/69092</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69614</attachid>
            <date>2010-10-04 04:15:01 -0700</date>
            <delta_ts>2010-10-04 11:29:54 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tile_shadowed_rect.patch</filename>
            <type>text/plain</type>
            <size>14726</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDhjYzJkMWFjNTc3NDA1ZjQ5OGFlYTE0ZTEzODk1NTNmMjczMjM4ZTMKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgTW9uIE9jdCA0IDEx
OjQ4OjQwIDIwMTAgKzAyMDAKCiAgICAyMDEwLTEwLTA0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8
YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgogICAgCiAgICAgICAgICAgIFtDYWlyb10gUG9ydCBkcmF3VGlsZWRTaGFkb3cgdG8gdGhl
IG5ldyBDb250ZXh0U2hhZG93CiAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTkwMgogICAgCiAgICAgICAgICAgIFBvcnRlZCB0aGUgZHJhd1RpbGVk
U2hhZG93IGZ1bmN0aW9uIHRvIHRoZSBDb250ZXh0U2hhZG93LCBpdAogICAgICAgICAgICByZW5k
ZXJzIHNoYWRvd3MgZm9yIHJlY3RzIGZhc3RlciB0aGFuIHRoZSBzaW1wbGUgYmx1cnJpbmcgdXNp
bmcKICAgICAgICAgICAgdGlsaW5nIG9mIGEgc21hbGxlciByZWN0LiBXZSB3aWxsIHJlbW92ZSB0
aGUgb2xkIGZ1bmN0aW9uIGluIGEKICAgICAgICAgICAgbmV4dCBwYXRjaCB3aGVuIHN0YXJ0aW5n
IHRvIHVzZSBDb250ZXh0U2hhZG93cyBmb3IgY2Fpcm8KICAgICAgICAgICAgcmVuZGVyaW5nLgog
ICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oOgogICAg
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHA6
CiAgICAgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0U2hhZG93OjpkcmF3U2hhZG93ZWRSZWN0KToKICAgICAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dFNoYWRvdzo6ZHJhd1NoYWRvd2VkUmVjdCk6CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNzJhOWRmLi4xNzBmMzc3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEwLTEwLTA0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDYWly
b10gUG9ydCBkcmF3VGlsZWRTaGFkb3cgdG8gdGhlIG5ldyBDb250ZXh0U2hhZG93CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTkwMgorCisgICAgICAg
IFBvcnRlZCB0aGUgZHJhd1RpbGVkU2hhZG93IGZ1bmN0aW9uIHRvIHRoZSBDb250ZXh0U2hhZG93
LCBpdAorICAgICAgICByZW5kZXJzIHNoYWRvd3MgZm9yIHJlY3RzIGZhc3RlciB0aGFuIHRoZSBz
aW1wbGUgYmx1cnJpbmcgdXNpbmcKKyAgICAgICAgdGlsaW5nIG9mIGEgc21hbGxlciByZWN0LiBX
ZSB3aWxsIHJlbW92ZSB0aGUgb2xkIGZ1bmN0aW9uIGluIGEKKyAgICAgICAgbmV4dCBwYXRjaCB3
aGVuIHN0YXJ0aW5nIHRvIHVzZSBDb250ZXh0U2hhZG93cyBmb3IgY2Fpcm8KKyAgICAgICAgcmVu
ZGVyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
U2hhZG93OjpkcmF3U2hhZG93ZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Db250ZXh0U2hhZG93UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6
ZHJhd1NoYWRvd2VkUmVjdCk6CisKIDIwMTAtMDktMjcgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxh
bGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCmluZGV4IGVkZTkzMzYuLmEz
NTJiMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRv
dy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCkBAIC05
OCw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUNvbnRleHQgYmVnaW5TaGFkb3dMYXll
cihQbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKTsKICAgICB2b2lk
IGVuZFNoYWRvd0xheWVyKFBsYXRmb3JtQ29udGV4dCk7CiAgICAgc3RhdGljIHZvaWQgcHVyZ2VT
Y3JhdGNoQnVmZmVyKCk7CisgICAgdm9pZCBkcmF3U2hhZG93ZWRSZWN0KFBsYXRmb3JtQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxl
ZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIGZsb2F0IGFscGhh
KTsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFQb2ludEYgb2Zmc2V0KCkgeyByZXR1cm4gUVBv
aW50RihtX29mZnNldC53aWR0aCgpLCBtX29mZnNldC5oZWlnaHQoKSk7IH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcApp
bmRleCA0Yjk0Y2IzLi4xOTUzNDM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCkBAIC0yOSwxMCArMjksMTUgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgIk93blB0ckNhaXJvLmgiCisjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAordXNpbmcgV1RGOjptYXg7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGNhaXJvX3N1cmZhY2VfdCogc2NyYXRjaEJ1ZmZlciA9IDA7CkBA
IC0xMTksNCArMTI0LDIxMyBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmVuZFNoYWRvd0xheWVyKGNh
aXJvX3QqIGNyKQogICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZSkKK3sKKyAgICBGbG9hdFBvaW50IHBoYXNlID0gZGVzdC5sb2NhdGlv
bigpOworICAgIHBoYXNlLm1vdmUoLXRpbGUueCgpLCAtdGlsZS55KCkpOworCisgICAgcmV0dXJu
IHBoYXNlOworfQorCisvKgorICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGlsaW5nIHRvIGltcHJvdmUg
dGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzaGFkb3cKKyAgZHJhd2luZyBvZiByb3VuZGVkIHJlY3Rh
bmdsZXMuIFRoZSBjb2RlIGJhc2ljYWxseSBkb2VzIHRoZSBmb2xsb3dpbmcKKyAgc3RlcHM6CisK
KyAgICAgMS4gQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBzaGFkb3cgdGVtcGxhdGUsIGEgcmVj
dGFuZ2xlIHRoYXQKKyAgICAgY29udGFpbnMgYWxsIHRoZSBuZWNlc3NhcnkgdGlsZXMgdG8gZHJh
dyB0aGUgY29tcGxldGUgc2hhZG93LgorCisgICAgIDIuIElmIHRoYXQgc2l6ZSBpcyBzbWFsbGVy
IHRoYW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJlbmRlciB0aGUgbmV3CisgICAgIHRlbXBsYXRlIHJl
Y3RhbmdsZSBhbmQgaXRzIHNoYWRvdyBpbiBhIG5ldyBzdXJmYWNlLCBpbiBvdGhlciBjYXNlCisg
ICAgIHJlbmRlciB0aGUgc2hhZG93IG9mIHRoZSByZWFsIHJlY3RhbmdsZSBpbiB0aGUgZGVzdGlu
YXRpb24KKyAgICAgc3VyZmFjZS4KKworICAgICAzLiBDYWxjdWxhdGUgdGhlIHNpemVzIGFuZCBw
b3NpdGlvbnMgb2YgdGhlIHRpbGVzIGFuZCB0aGVpcgorICAgICBkZXN0aW5hdGlvbnMgYW5kIHVz
ZSBkcmF3UGF0dGVybiB0byByZW5kZXIgdGhlIGZpbmFsIHNoYWRvdy4gVGhlCisgICAgIGNvZGUg
ZGl2aWRlcyB0aGUgcmVuZGVyaW5nIGluIDggdGlsZXM6CisKKyAgICAgICAgMSB8IDIgfCAzCisg
ICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgNCB8ICAgfCA1CisgICAgICAgLS0tLS0tLS0tLS0K
KyAgICAgICAgNiB8IDcgfCA4CisKKyAgICAgVGhlIGNvcm5lcnMgYXJlIGRpcmVjdGx5IGNvcGll
ZCBmcm9tIHRoZSB0ZW1wbGF0ZSByZWN0YW5nbGUgdG8gdGhlCisgICAgIHJlYWwgb25lIGFuZCB0
aGUgc2lkZSB0aWxlcyBhcmUgMSBwaXhlbCB3aWR0aCwgd2UgdXNlIHRoZW0gYXMKKworICAgICB0
aWxlcyB0byBjb3ZlciB0aGUgZGVzdGluYXRpb24gc2lkZS4gVGhlIGNvcm5lciB0aWxlcyBhcmUg
YmlnZ2VyCisgICAgIHRoYW4ganVzdCB0aGUgc2lkZSBvZiB0aGUgcm91bmRlZCBjb3JuZXIsIHdl
IG5lZWQgdG8gaW5jcmVhc2UgaXQKKyAgICAgYmVjYXVzZSB0aGUgbW9kaWZpY2F0aW9ucyBjYXVz
ZWQgYnkgdGhlIGNvcm5lciBvdmVyIHRoZSBibHVyCisgICAgIGVmZmVjdC4gV2UgZmlsbCB0aGUg
Y2VudHJhbCBwYXJ0IHdpdGggc29saWQgY29sb3IgdG8gY29tcGxldGUgdGhlCisgICAgIHNoYWRv
dy4KKyAqLwordm9pZCBDb250ZXh0U2hhZG93OjpkcmF3U2hhZG93ZWRSZWN0KFBsYXRmb3JtQ29u
dGV4dCBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExl
ZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cywg
ZmxvYXQgYWxwaGEpCit7CisgICAgLy8gQ2FsY3VsYXRlIGZpbHRlciB2YWx1ZXMgdG8gY3JlYXRl
IGFwcHJvcHJpYXRlIHNoYWRvdy4KKyAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNpemU7CisgICAg
c2hhZG93QnVmZmVyU2l6ZSA9IEludFNpemUocmVjdC53aWR0aCgpICsgbV9ibHVyUmFkaXVzICog
MiwgcmVjdC5oZWlnaHQoKSArIG1fYmx1clJhZGl1cyAqIDIpOworCisgICAgLy8gRGV0ZXJtaW5l
IGRpbWVuc2lvbnMgb2Ygc2hhZG93IHJlY3QuCisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3Q7Cisg
ICAgc2hhZG93UmVjdCA9IEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIHNoYWRvd0J1ZmZlclNp
emUpOworICAgIHNoYWRvd1JlY3QubW92ZSgtIG1fYmx1clJhZGl1cywgLSBtX2JsdXJSYWRpdXMp
OworCisgICAgLy8gU2l6ZSBvZiB0aGUgdGlsaW5nIHNpZGUuCisgICAgaW50IHNpZGVUaWxlV2lk
dGggPSAxOworICAgIGZsb2F0IHJhZGl1c1R3aWNlID0gbV9ibHVyUmFkaXVzICogMjsKKworICAg
IC8vIEZpbmQgdGhlIGV4dHJhIHNwYWNlIG5lZWRlZCBmcm9tIHRoZSBjdXJ2ZSBvZiB0aGUgY29y
bmVycy4KKyAgICBpbnQgZXh0cmFXaWR0aEZyb21Db3JuZXJSYWRpaSA9IHJhZGl1c1R3aWNlICsg
bWF4KHRvcExlZnRSYWRpdXMud2lkdGgoKSwgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpKSArCisg
ICAgICAgIHJhZGl1c1R3aWNlICsgbWF4KHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIGJvdHRvbVJp
Z2h0UmFkaXVzLndpZHRoKCkpOworICAgIGludCBleHRyYUhlaWdodEZyb21Db3JuZXJSYWRpaSA9
IHJhZGl1c1R3aWNlICsgbWF4KHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHRvcFJpZ2h0UmFkaXVz
LmhlaWdodCgpKSArCisgICAgICAgIHJhZGl1c1R3aWNlICsgbWF4KGJvdHRvbUxlZnRSYWRpdXMu
aGVpZ2h0KCksIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKworICAgIC8vIFRoZSBsZW5n
dGggb2YgYSBzaWRlIG9mIHRoZSBidWZmZXIgaXMgdGhlIGVub3VnaCBzcGFjZSBmb3IgZm91ciBi
bHVyIHJhZGlpLAorICAgIC8vIHRoZSByYWRpaSBvZiB0aGUgY29ybmVycywgYW5kIHRoZW4gMSBw
aXhlbCB0byBkcmF3IHRoZSBzaWRlIHRpbGVzLgorICAgIEludFNpemUgc2hhZG93VGVtcGxhdGVT
aXplID0gSW50U2l6ZShzaWRlVGlsZVdpZHRoICsgZXh0cmFXaWR0aEZyb21Db3JuZXJSYWRpaSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVRpbGVXaWR0aCAr
IGV4dHJhSGVpZ2h0RnJvbUNvcm5lclJhZGlpKTsKKworICAgIC8vIFJlZHVjZSB0aGUgc2l6ZSBv
ZiB3aGF0IHdlIGhhdmUgdG8gZHJhdyB3aXRoIHRoZSBjbGlwIGFyZWEuCisgICAgZG91YmxlIHgx
LCB4MiwgeTEsIHkyOworICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjb250ZXh0LCAmeDEsICZ5MSwg
JngyLCAmeTIpOworICAgIGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KHNoYWRvd1JlY3QsIElu
dFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKSk7CisKKyAgICBpZiAoKHNoYWRvd1RlbXBs
YXRlU2l6ZS53aWR0aCgpICogc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpID4gbV9sYXllclJl
Y3Qud2lkdGgoKSAqIG1fbGF5ZXJSZWN0LmhlaWdodCgpKQorICAgICAgICB8fCAocmFkaXVzVHdp
Y2UgPiByZWN0LndpZHRoKCkpIHx8IHJhZGl1c1R3aWNlID4gcmVjdC5oZWlnaHQoKSB8fCAobV90
eXBlICE9IEJsdXJTaGFkb3cpKSB7CisgICAgICAgIGJlZ2luU2hhZG93TGF5ZXIoY29udGV4dCwg
c2hhZG93UmVjdCk7CisKKyAgICAgICAgaWYgKCFtX2xheWVyQ29udGV4dCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYWlyb19uZXdfcGF0aChtX2xheWVyQ29udGV4dCk7CisgICAg
ICAgIE93blB0cjxjYWlyb19wYXRoX3Q+IHBhdGgoY2Fpcm9fY29weV9wYXRoKGNvbnRleHQpKTsK
KyAgICAgICAgY2Fpcm9fYXBwZW5kX3BhdGgobV9sYXllckNvbnRleHQsIHBhdGguZ2V0KCkpOwor
CisgICAgICAgIGNhaXJvX3NhdmUobV9sYXllckNvbnRleHQpOworICAgICAgICBjYWlyb19zZXRf
c291cmNlX3JnYihtX2xheWVyQ29udGV4dCwgMC5mLCAwLmYsIDAuZik7CisgICAgICAgIGNhaXJv
X2NsaXBfcHJlc2VydmUobV9sYXllckNvbnRleHQpOworICAgICAgICBjYWlyb19wYWludF93aXRo
X2FscGhhKG1fbGF5ZXJDb250ZXh0LCBhbHBoYSk7CisgICAgICAgIGNhaXJvX3Jlc3RvcmUobV9s
YXllckNvbnRleHQpOworCisgICAgICAgIGVuZFNoYWRvd0xheWVyKGNvbnRleHQpOworCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaGFkb3dSZWN0Lm1vdmUobV9vZmZzZXQud2lkdGgo
KSwgbV9vZmZzZXQuaGVpZ2h0KCkpOworCisgICAgbV9sYXllckltYWdlID0gZ2V0U2NyYXRjaEJ1
ZmZlcihzaGFkb3dUZW1wbGF0ZVNpemUpOworCisgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5l
dyBJbWFnZUJ1ZmZlci4KKyAgICBtX2xheWVyQ29udGV4dCA9IGNhaXJvX2NyZWF0ZShtX2xheWVy
SW1hZ2UpOworCisgICAgLy8gQ2xlYXIgdGhlIHN1cmZhY2UgZmlyc3QuCisgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKG1fbGF5ZXJDb250ZXh0LCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fp
cm9fcGFpbnQobV9sYXllckNvbnRleHQpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2xheWVy
Q29udGV4dCwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CisKKyAgICAvLyBEcmF3IHRoZSByZWN0YW5n
bGUuCisgICAgSW50UmVjdCB0ZW1wbGF0ZVJlY3QgPSBJbnRSZWN0KG1fYmx1clJhZGl1cywgbV9i
bHVyUmFkaXVzLCBzaGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzaGFk
b3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSk7CisgICAgYXBwZW5kV2ViQ29y
ZVBhdGhUb0NhaXJvQ29udGV4dChtX2xheWVyQ29udGV4dCwgUGF0aDo6Y3JlYXRlUm91bmRlZFJl
Y3RhbmdsZSh0ZW1wbGF0ZVJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMp
KTsKKworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShtX2xheWVyQ29udGV4dCwgMC5mLCAwLmYs
IDAuZiwgYWxwaGEpOworICAgIGNhaXJvX2ZpbGwobV9sYXllckNvbnRleHQpOworCisgICAgLy8g
Qmx1ciB0aGUgaW1hZ2UuCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX2xheWVySW1hZ2UpOwor
ICAgIGJsdXJMYXllckltYWdlKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9sYXllcklt
YWdlKSwgc2hhZG93VGVtcGxhdGVTaXplLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
bV9sYXllckltYWdlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5KG1fbGF5ZXJJbWFn
ZSk7CisKKyAgICAvLyBNYXNrIHRoZSBpbWFnZSB3aXRoIHRoZSBzaGFkb3cgY29sb3IuCisgICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKG1fbGF5ZXJDb250ZXh0LCBDQUlST19PUEVSQVRPUl9JTik7Cisg
ICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihtX2xheWVyQ29udGV4dCwgbV9jb2xvcik7CisgICAg
Y2Fpcm9fcGFpbnQobV9sYXllckNvbnRleHQpOworCisgICAgY2Fpcm9fZGVzdHJveShtX2xheWVy
Q29udGV4dCk7CisgICAgbV9sYXllckNvbnRleHQgPSAwOworCisgICAgLy8gRmlsbCB0aGUgaW50
ZXJuYWwgcGFydCBvZiB0aGUgc2hhZG93LgorICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgtcmFkaXVz
VHdpY2UpOworICAgIGlmICghc2hhZG93UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2Fpcm9f
c2F2ZShjb250ZXh0KTsKKyAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChj
b250ZXh0LCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRS
YWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJh
ZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xv
cihjb250ZXh0LCBtX2NvbG9yKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKKyAgICAg
ICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAgICB9CisgICAgc2hhZG93UmVjdC5pbmZsYXRl
KHJhZGl1c1R3aWNlKTsKKworICAgIC8vIERyYXcgdG9wIHNpZGUuCisgICAgRmxvYXRSZWN0IHRp
bGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAw
LCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
dGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55
KCkpOworICAgIGRlc3RSZWN0LnNldFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRS
YWRpdXMud2lkdGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgLSBtX2JsdXJSYWRpdXMgKiA0
KTsKKyAgICBGbG9hdFBvaW50IHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNm
b3JtLm1ha2VJZGVudGl0eSgpOworICAgIGRyYXdQYXR0ZXJuQ2Fpcm8oY29udGV4dCwgbV9sYXll
ckltYWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJlY3QpOworCisgICAgLy8gRHJhdyB0aGUg
Ym90dG9tIHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyBib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCksIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1
c1R3aWNlLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgZGVzdFJlY3QgPSB0aWxl
UmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSAr
IHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQo
KSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgpIC0gYm90dG9tTGVm
dFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAtIG1fYmx1clJhZGl1
cyAqIDQpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRpbGVSZWN0KTsKKyAgICBk
cmF3UGF0dGVybkNhaXJvKGNvbnRleHQsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXpl
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIs
IGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIHJpZ2h0IHNpZGUuCisgICAgdGlsZVJlY3Qg
PSBGbG9hdFJlY3Qoc2hhZG93VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFk
aXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHNpZGVUaWxl
V2lkdGgpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92ZShzaGFk
b3dSZWN0LngoKSArIHJhZGl1c1R3aWNlICsgcmVjdC53aWR0aCgpIC0gc2hhZG93VGVtcGxhdGVT
aXplLndpZHRoKCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hh
ZG93UmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgLSBtX2JsdXJSYWRpdXMgKiA0KTsKKyAgICBwaGFzZSA9IGdldFBoYXNl
KGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgZHJhd1BhdHRlcm5DYWlybyhjb250ZXh0LCBtX2xh
eWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3IHRo
ZSBsZWZ0IHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgcmFkaXVzVHdpY2UgKyB0
b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgc2lkZVRpbGVXaWR0aCk7CisgICAg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0
KCkgLSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAt
IG1fYmx1clJhZGl1cyAqIDQpOworICAgIHBoYXNlID0gRmxvYXRQb2ludChkZXN0UmVjdC54KCkg
LSB0aWxlUmVjdC54KCksIGRlc3RSZWN0LnkoKSAtIHRpbGVSZWN0LnkoKSk7CisgICAgZHJhd1Bh
dHRlcm5DYWlybyhjb250ZXh0LCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0
UmVjdCk7CisKKyAgICAvLyBEcmF3IHRoZSB0b3AgbGVmdCBjb3JuZXIuCisgICAgdGlsZVJlY3Qg
PSBGbG9hdFJlY3QoMCwgMCwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJh
ZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxl
UmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7
CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIGRyYXdQYXR0
ZXJuQ2Fpcm8oY29udGV4dCwgbV9sYXllckltYWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJl
Y3QpOworCisgICAgLy8gRHJhdyB0aGUgdG9wIHJpZ2h0IGNvcm5lci4KKyAgICB0aWxlUmVjdCA9
IEZsb2F0UmVjdChzaGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9w
UmlnaHRSYWRpdXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRp
dXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJlY3QubW92
ZShzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0
aCgpICsgcmFkaXVzVHdpY2UsIHNoYWRvd1JlY3QueSgpKTsKKyAgICBwaGFzZSA9IGdldFBoYXNl
KGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgZHJhd1BhdHRlcm5DYWlybyhjb250ZXh0LCBtX2xh
eWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3IHRo
ZSBib3R0b20gcmlnaHQgY29ybmVyLgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNoYWRvd1Rl
bXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQo
KSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFkaXVzVHdpY2UgKyBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCBy
YWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVjdCA9
IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLSBzaGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLAorICAgICAgICAg
ICAgICAgICAgc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gc2hhZG93VGVtcGxhdGVT
aXplLmhlaWdodCgpICsgcmFkaXVzVHdpY2UpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJl
Y3QsIHRpbGVSZWN0KTsKKyAgICBkcmF3UGF0dGVybkNhaXJvKGNvbnRleHQsIG1fbGF5ZXJJbWFn
ZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGJvdHRv
bSBsZWZ0IGNvcm5lci4KKyAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzaGFkb3dUZW1wbGF0
ZVNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSk7CisgICAg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLSBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0
KCkgKyByYWRpdXNUd2ljZSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJl
Y3QpOworICAgIGRyYXdQYXR0ZXJuQ2Fpcm8oY29udGV4dCwgbV9sYXllckltYWdlLCBzaGFkb3dU
ZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BF
UkFUT1JfT1ZFUiwgZGVzdFJlY3QpOworCisgICAgLy8gU2NoZWR1bGUgYSBwdXJnZSBvZiB0aGUg
c2NyYXRjaCBidWZmZXIKKyAgICBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dR
dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAK
aW5kZXggMzQyZTAyNy4uYzgwZjY2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcApAQCAtMTU2LDQgKzE1Niw5IEBAIHZvaWQgQ29udGV4
dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoUGxhdGZvcm1Db250ZXh0IHApCiAgICAgc2NyYXRjaFNo
YWRvd0J1ZmZlcigpLT5zY2hlZHVsZVB1cmdlKCk7CiB9CiAKK3ZvaWQgQ29udGV4dFNoYWRvdzo6
ZHJhd1NoYWRvd2VkUmVjdChQbGF0Zm9ybUNvbnRleHQgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIGZsb2F0IGFscGhhKQoreworICAgIC8vIE5vdCBp
bXBsZW1lbnRlZC4KK30KKwogfQo=
</data>
<flag name="review"
          id="59326"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69650</attachid>
            <date>2010-10-04 11:29:54 -0700</date>
            <delta_ts>2010-10-04 11:45:43 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>tile_shadowed_rect.patch</filename>
            <type>text/plain</type>
            <size>15263</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDVhNGQwMzZhMWUyY2FiODhjYTExZDgyNzgzNzVhODFiYWExZmYyY2MKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgTW9uIE9jdCA0IDE5
OjI3OjIyIDIwMTAgKzAyMDAKCiAgICAyMDEwLTEwLTA0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8
YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgogICAgCiAgICAgICAgICAgIFtDYWlyb10gUG9ydCBkcmF3VGlsZWRTaGFkb3cgdG8gdGhl
IG5ldyBDb250ZXh0U2hhZG93CiAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTkwMgogICAgCiAgICAgICAgICAgIFBvcnRlZCB0aGUgZHJhd1RpbGVk
U2hhZG93IGZ1bmN0aW9uIHRvIHRoZSBDb250ZXh0U2hhZG93LCBpdAogICAgICAgICAgICByZW5k
ZXJzIHNoYWRvd3MgZm9yIHJlY3RzIGZhc3RlciB0aGFuIHRoZSBzaW1wbGUgYmx1cnJpbmcgdXNp
bmcKICAgICAgICAgICAgdGlsaW5nIG9mIGEgc21hbGxlciByZWN0LiBXZSB3aWxsIHJlbW92ZSB0
aGUgb2xkIGZ1bmN0aW9uIGluIGEKICAgICAgICAgICAgbmV4dCBwYXRjaCB3aGVuIHN0YXJ0aW5n
IHRvIHVzZSBDb250ZXh0U2hhZG93cyBmb3IgY2Fpcm8KICAgICAgICAgICAgcmVuZGVyaW5nLgog
ICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oOgogICAg
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHA6
CiAgICAgICAgICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvd1dpdGhv
dXRUaWxpbmcpOgogICAgICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZHJhd1JlY3RT
aGFkb3cpOgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNGQ3OWQxMC4uMWRjZTkzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0wNCAgQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbQ2Fpcm9dIFBvcnQgZHJhd1RpbGVkU2hhZG93
IHRvIHRoZSBuZXcgQ29udGV4dFNoYWRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDU5MDIKKworICAgICAgICBQb3J0ZWQgdGhlIGRyYXdUaWxlZFNo
YWRvdyBmdW5jdGlvbiB0byB0aGUgQ29udGV4dFNoYWRvdywgaXQKKyAgICAgICAgcmVuZGVycyBz
aGFkb3dzIGZvciByZWN0cyBmYXN0ZXIgdGhhbiB0aGUgc2ltcGxlIGJsdXJyaW5nIHVzaW5nCisg
ICAgICAgIHRpbGluZyBvZiBhIHNtYWxsZXIgcmVjdC4gV2Ugd2lsbCByZW1vdmUgdGhlIG9sZCBm
dW5jdGlvbiBpbiBhCisgICAgICAgIG5leHQgcGF0Y2ggd2hlbiBzdGFydGluZyB0byB1c2UgQ29u
dGV4dFNoYWRvd3MgZm9yIGNhaXJvCisgICAgICAgIHJlbmRlcmluZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KToKKwogMjAxMC0xMC0wMSAgVmljdG9y
aWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBS
b2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNo
YWRvdy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmgKaW5kZXgg
ZWRlOTMzNi4uMzM1YWY4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b250ZXh0U2hhZG93LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hh
ZG93LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKIApAQCAtOTgsNiArOTksOSBAQCBwdWJs
aWM6CiAgICAgUGxhdGZvcm1Db250ZXh0IGJlZ2luU2hhZG93TGF5ZXIoUGxhdGZvcm1Db250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSk7CiAgICAgdm9pZCBlbmRTaGFkb3dMYXllcihQ
bGF0Zm9ybUNvbnRleHQpOwogICAgIHN0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1ZmZlcigpOwor
I2lmIFBMQVRGT1JNKENBSVJPKQorICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0
UmFkaXVzLCBjb25zdCBJbnRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgSW50U2l6ZSYgYm90
dG9tTGVmdFJhZGl1cywgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOworI2VuZGlm
CiAKICNpZiBQTEFURk9STShRVCkKICAgICBRUG9pbnRGIG9mZnNldCgpIHsgcmV0dXJuIFFQb2lu
dEYobV9vZmZzZXQud2lkdGgoKSwgbV9vZmZzZXQuaGVpZ2h0KCkpOyB9CkBAIC0xMTEsNiArMTE1
LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhcios
IGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgaW50IHN0cmlkZSk7CiAgICAgdm9pZCBjYWxjdWxh
dGVMYXllckJvdW5kaW5nUmVjdChjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpOworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIHZvaWQgZHJhd1JlY3RT
aGFkb3dXaXRob3V0VGlsaW5nKFBsYXRmb3JtQ29udGV4dCBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiBzaGFkb3dSZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBJbnRTaXpl
JiB0b3BSaWdodFJhZGl1cywgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3Qg
SW50U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMsIGZsb2F0IGFscGhhKTsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCmluZGV4IDgxNjE1YmQuLmExYTgyODAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRv
d0NhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRT
aGFkb3dDYWlyby5jcHAKQEAgLTI5LDEwICsyOSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIK
KyNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxjYWlyby5o
PgogCit1c2luZyBXVEY6Om1heDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY2Fp
cm9fc3VyZmFjZV90KiBzY3JhdGNoQnVmZmVyID0gMDsKQEAgLTEyMiw0ICsxMjcsMjIxIEBAIHZv
aWQgQ29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoY2Fpcm9fdCogY3IpCiAgICAgc2NoZWR1
bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAordm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVj
dFNoYWRvd1dpdGhvdXRUaWxpbmcoUGxhdGZvcm1Db250ZXh0IGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHNoYWRvd1JlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEludFNp
emUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25z
dCBJbnRTaXplJiBib3R0b21SaWdodFJhZGl1cywgZmxvYXQgYWxwaGEpCit7CisgICAgYmVnaW5T
aGFkb3dMYXllcihjb250ZXh0LCBzaGFkb3dSZWN0KTsKKworICAgIGlmICghbV9sYXllckNvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKworICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRl
eHQobV9sYXllckNvbnRleHQsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVj
dCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiYShtX2xheWVyQ29udGV4dCwgMC5mLCAwLmYsIDAuZiwgYWxwaGEpOworICAgIGNh
aXJvX2ZpbGwobV9sYXllckNvbnRleHQpOworCisgICAgZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7
CisKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShj
b25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZSkKK3sKKyAgICBGbG9h
dFBvaW50IHBoYXNlID0gZGVzdC5sb2NhdGlvbigpOworICAgIHBoYXNlLm1vdmUoLXRpbGUueCgp
LCAtdGlsZS55KCkpOworCisgICAgcmV0dXJuIHBoYXNlOworfQorCisvKgorICBUaGlzIGZ1bmN0
aW9uIHVzZXMgdGlsaW5nIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzaGFkb3cK
KyAgZHJhd2luZyBvZiByb3VuZGVkIHJlY3RhbmdsZXMuIFRoZSBjb2RlIGJhc2ljYWxseSBkb2Vz
IHRoZSBmb2xsb3dpbmcKKyAgc3RlcHM6CisKKyAgICAgMS4gQ2FsY3VsYXRlIHRoZSBzaXplIG9m
IHRoZSBzaGFkb3cgdGVtcGxhdGUsIGEgcmVjdGFuZ2xlIHRoYXQKKyAgICAgY29udGFpbnMgYWxs
IHRoZSBuZWNlc3NhcnkgdGlsZXMgdG8gZHJhdyB0aGUgY29tcGxldGUgc2hhZG93LgorCisgICAg
IDIuIElmIHRoYXQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlYWwgcmVjdGFuZ2xlIHJlbmRl
ciB0aGUgbmV3CisgICAgIHRlbXBsYXRlIHJlY3RhbmdsZSBhbmQgaXRzIHNoYWRvdyBpbiBhIG5l
dyBzdXJmYWNlLCBpbiBvdGhlciBjYXNlCisgICAgIHJlbmRlciB0aGUgc2hhZG93IG9mIHRoZSBy
ZWFsIHJlY3RhbmdsZSBpbiB0aGUgZGVzdGluYXRpb24KKyAgICAgc3VyZmFjZS4KKworICAgICAz
LiBDYWxjdWxhdGUgdGhlIHNpemVzIGFuZCBwb3NpdGlvbnMgb2YgdGhlIHRpbGVzIGFuZCB0aGVp
cgorICAgICBkZXN0aW5hdGlvbnMgYW5kIHVzZSBkcmF3UGF0dGVybiB0byByZW5kZXIgdGhlIGZp
bmFsIHNoYWRvdy4gVGhlCisgICAgIGNvZGUgZGl2aWRlcyB0aGUgcmVuZGVyaW5nIGluIDggdGls
ZXM6CisKKyAgICAgICAgMSB8IDIgfCAzCisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgNCB8
ICAgfCA1CisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgNiB8IDcgfCA4CisKKyAgICAgVGhl
IGNvcm5lcnMgYXJlIGRpcmVjdGx5IGNvcGllZCBmcm9tIHRoZSB0ZW1wbGF0ZSByZWN0YW5nbGUg
dG8gdGhlCisgICAgIHJlYWwgb25lIGFuZCB0aGUgc2lkZSB0aWxlcyBhcmUgMSBwaXhlbCB3aWR0
aCwgd2UgdXNlIHRoZW0gYXMKKworICAgICB0aWxlcyB0byBjb3ZlciB0aGUgZGVzdGluYXRpb24g
c2lkZS4gVGhlIGNvcm5lciB0aWxlcyBhcmUgYmlnZ2VyCisgICAgIHRoYW4ganVzdCB0aGUgc2lk
ZSBvZiB0aGUgcm91bmRlZCBjb3JuZXIsIHdlIG5lZWQgdG8gaW5jcmVhc2UgaXQKKyAgICAgYmVj
YXVzZSB0aGUgbW9kaWZpY2F0aW9ucyBjYXVzZWQgYnkgdGhlIGNvcm5lciBvdmVyIHRoZSBibHVy
CisgICAgIGVmZmVjdC4gV2UgZmlsbCB0aGUgY2VudHJhbCBwYXJ0IHdpdGggc29saWQgY29sb3Ig
dG8gY29tcGxldGUgdGhlCisgICAgIHNoYWRvdy4KKyAqLwordm9pZCBDb250ZXh0U2hhZG93Ojpk
cmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0
UmFkaXVzLCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBJbnRTaXplJiBi
b3R0b21SaWdodFJhZGl1cykKK3sKKworICAgIC8vIGRyYXdTaGFkb3dlZFJlY3Qgc3RpbGwgZG9l
cyBub3Qgd29yayB3aXRoIHJvdGF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDUwNDIKKyAgICBmbG9hdCByYWRpdXNUd2ljZSA9IG1fYmx1clJh
ZGl1cyAqIDI7CisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBpZiAoKCFjb250ZXh0LT5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxp
cHBlZCgpKSB8fCAocmFkaXVzVHdpY2UgPiByZWN0LndpZHRoKCkpIHx8IChyYWRpdXNUd2ljZSA+
IHJlY3QuaGVpZ2h0KCkpKSB7CisgICAgICAgIGRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhj
ciwgcmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMs
IGJvdHRvbVJpZ2h0UmFkaXVzLCBjb250ZXh0LT5nZXRBbHBoYSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBmaWx0ZXIgdmFsdWVzIHRvIGNyZWF0ZSBhcHBy
b3ByaWF0ZSBzaGFkb3cuCisgICAgSW50U2l6ZSBzaGFkb3dCdWZmZXJTaXplOworICAgIHNoYWRv
d0J1ZmZlclNpemUgPSBJbnRTaXplKHJlY3Qud2lkdGgoKSArIG1fYmx1clJhZGl1cyAqIDIsIHJl
Y3QuaGVpZ2h0KCkgKyBtX2JsdXJSYWRpdXMgKiAyKTsKKworICAgIC8vIERldGVybWluZSBkaW1l
bnNpb25zIG9mIHNoYWRvdyByZWN0LgorICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0ID0gRmxvYXRS
ZWN0KHJlY3QubG9jYXRpb24oKSwgc2hhZG93QnVmZmVyU2l6ZSk7CisgICAgc2hhZG93UmVjdC5t
b3ZlKC0gbV9ibHVyUmFkaXVzLCAtIG1fYmx1clJhZGl1cyk7CisKKyAgICAvLyBTaXplIG9mIHRo
ZSB0aWxpbmcgc2lkZS4KKyAgICBpbnQgc2lkZVRpbGVXaWR0aCA9IDE7CisKKyAgICAvLyBGaW5k
IHRoZSBleHRyYSBzcGFjZSBuZWVkZWQgZnJvbSB0aGUgY3VydmUgb2YgdGhlIGNvcm5lcnMuCisg
ICAgaW50IGV4dHJhV2lkdGhGcm9tQ29ybmVyUmFkaWkgPSByYWRpdXNUd2ljZSArIG1heCh0b3BM
ZWZ0UmFkaXVzLndpZHRoKCksIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSkgKworICAgICAgICBy
YWRpdXNUd2ljZSArIG1heCh0b3BSaWdodFJhZGl1cy53aWR0aCgpLCBib3R0b21SaWdodFJhZGl1
cy53aWR0aCgpKTsKKyAgICBpbnQgZXh0cmFIZWlnaHRGcm9tQ29ybmVyUmFkaWkgPSByYWRpdXNU
d2ljZSArIG1heCh0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCB0b3BSaWdodFJhZGl1cy5oZWlnaHQo
KSkgKworICAgICAgICByYWRpdXNUd2ljZSArIG1heChib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgp
LCBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICAvLyBUaGUgbGVuZ3RoIG9mIGEg
c2lkZSBvZiB0aGUgYnVmZmVyIGlzIHRoZSBlbm91Z2ggc3BhY2UgZm9yIGZvdXIgYmx1ciByYWRp
aSwKKyAgICAvLyB0aGUgcmFkaWkgb2YgdGhlIGNvcm5lcnMsIGFuZCB0aGVuIDEgcGl4ZWwgdG8g
ZHJhdyB0aGUgc2lkZSB0aWxlcy4KKyAgICBJbnRTaXplIHNoYWRvd1RlbXBsYXRlU2l6ZSA9IElu
dFNpemUoc2lkZVRpbGVXaWR0aCArIGV4dHJhV2lkdGhGcm9tQ29ybmVyUmFkaWksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVUaWxlV2lkdGggKyBleHRyYUhl
aWdodEZyb21Db3JuZXJSYWRpaSk7CisKKyAgICAvLyBSZWR1Y2UgdGhlIHNpemUgb2Ygd2hhdCB3
ZSBoYXZlIHRvIGRyYXcgd2l0aCB0aGUgY2xpcCBhcmVhLgorICAgIGRvdWJsZSB4MSwgeDIsIHkx
LCB5MjsKKyAgICBjYWlyb19jbGlwX2V4dGVudHMoY3IsICZ4MSwgJnkxLCAmeDIsICZ5Mik7Cisg
ICAgY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3Qoc2hhZG93UmVjdCwgSW50UmVjdCh4MSwgeTEs
IHgyIC0geDEsIHkyIC0geTEpKTsKKworICAgIGlmICgoc2hhZG93VGVtcGxhdGVTaXplLndpZHRo
KCkgKiBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgPiBtX2xheWVyUmVjdC53aWR0aCgpICog
bV9sYXllclJlY3QuaGVpZ2h0KCkpIHx8IChtX3R5cGUgIT0gQmx1clNoYWRvdykpIHsKKyAgICAg
ICAgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNyLCByZWN0LCB0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMsIGNvbnRl
eHQtPmdldEFscGhhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2hhZG93UmVj
dC5tb3ZlKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zmc2V0LmhlaWdodCgpKTsKKworICAgIG1fbGF5
ZXJJbWFnZSA9IGdldFNjcmF0Y2hCdWZmZXIoc2hhZG93VGVtcGxhdGVTaXplKTsKKworICAgIC8v
IERyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCisgICAgbV9sYXllckNvbnRleHQg
PSBjYWlyb19jcmVhdGUobV9sYXllckltYWdlKTsKKworICAgIC8vIENsZWFyIHRoZSBzdXJmYWNl
IGZpcnN0LgorICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2xheWVyQ29udGV4dCwgQ0FJUk9fT1BF
UkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KG1fbGF5ZXJDb250ZXh0KTsKKyAgICBjYWly
b19zZXRfb3BlcmF0b3IobV9sYXllckNvbnRleHQsIENBSVJPX09QRVJBVE9SX09WRVIpOworCisg
ICAgLy8gRHJhdyB0aGUgcmVjdGFuZ2xlLgorICAgIEludFJlY3QgdGVtcGxhdGVSZWN0ID0gSW50
UmVjdChtX2JsdXJSYWRpdXMsIG1fYmx1clJhZGl1cywgc2hhZG93VGVtcGxhdGVTaXplLndpZHRo
KCkgLSByYWRpdXNUd2ljZSwgc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdp
Y2UpOworICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQobV9sYXllckNvbnRleHQs
IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUodGVtcGxhdGVSZWN0LCB0b3BMZWZ0UmFkaXVz
LCB0b3BSaWdodFJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEobV9s
YXllckNvbnRleHQsIDAuZiwgMC5mLCAwLmYsIGNvbnRleHQtPmdldEFscGhhKCkpOworICAgIGNh
aXJvX2ZpbGwobV9sYXllckNvbnRleHQpOworCisgICAgLy8gQmx1ciB0aGUgaW1hZ2UuCisgICAg
Y2Fpcm9fc3VyZmFjZV9mbHVzaChtX2xheWVySW1hZ2UpOworICAgIGJsdXJMYXllckltYWdlKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9sYXllckltYWdlKSwgc2hhZG93VGVtcGxhdGVT
aXplLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9sYXllckltYWdlKSk7CisgICAg
Y2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5KG1fbGF5ZXJJbWFnZSk7CisKKyAgICAvLyBNYXNrIHRo
ZSBpbWFnZSB3aXRoIHRoZSBzaGFkb3cgY29sb3IuCisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1f
bGF5ZXJDb250ZXh0LCBDQUlST19PUEVSQVRPUl9JTik7CisgICAgc2V0U291cmNlUkdCQUZyb21D
b2xvcihtX2xheWVyQ29udGV4dCwgbV9jb2xvcik7CisgICAgY2Fpcm9fcGFpbnQobV9sYXllckNv
bnRleHQpOworCisgICAgY2Fpcm9fZGVzdHJveShtX2xheWVyQ29udGV4dCk7CisgICAgbV9sYXll
ckNvbnRleHQgPSAwOworCisgICAgLy8gRmlsbCB0aGUgaW50ZXJuYWwgcGFydCBvZiB0aGUgc2hh
ZG93LgorICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgtcmFkaXVzVHdpY2UpOworICAgIGlmICghc2hh
ZG93UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgICAgIGFw
cGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0
YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
cFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAg
ICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBtX2NvbG9yKTsKKyAgICAgICAgY2Fpcm9f
ZmlsbChjcik7CisgICAgICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworICAgIH0KKyAgICBzaGFkb3dS
ZWN0LmluZmxhdGUocmFkaXVzVHdpY2UpOworCisgICAgLy8gRHJhdyB0b3Agc2lkZS4KKyAgICBG
bG9hdFJlY3QgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVz
LndpZHRoKCksIDAsIHNpZGVUaWxlV2lkdGgsIHJhZGl1c1R3aWNlKTsKKyAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgp
IC0gdG9wTGVmdFJhZGl1cy53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSAtIG1fYmx1
clJhZGl1cyAqIDQpOworICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwg
dGlsZVJlY3QpOworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOworICAgIHBh
dHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29u
dGV4dChjciwgbV9sYXllckltYWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJlY3QpOworCisg
ICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFk
aXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHNoYWRvd1RlbXBsYXRlU2l6ZS5o
ZWlnaHQoKSAtIHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAg
ZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBz
aGFkb3dSZWN0LnkoKSArIHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RlbXBs
YXRlU2l6ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0
aCgpIC0gYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgo
KSAtIG1fYmx1clJhZGl1cyAqIDQpOworICAgIHBoYXNlID0gZ2V0UGhhc2UoZGVzdFJlY3QsIHRp
bGVSZWN0KTsKKyAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2Us
IHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBD
QUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3IHRoZSByaWdodCBz
aWRlLgorICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgp
IC0gcmFkaXVzVHdpY2UsIHJhZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJh
ZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRoKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAg
IGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByYWRpdXNUd2ljZSArIHJlY3Qud2lkdGgo
KSAtIHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgZGVz
dFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWln
aHQoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gbV9ibHVyUmFkaXVzICogNCk7Cisg
ICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIGRyYXdQYXR0ZXJu
VG9DYWlyb0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RS
ZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGxlZnQgc2lkZS4KKyAgICB0aWxlUmVjdCA9IEZsb2F0
UmVjdCgwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNl
LCBzaWRlVGlsZVdpZHRoKTsKKyAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0
Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKKyAgICBkZXN0UmVjdC5zZXRI
ZWlnaHQoc2hhZG93UmVjdC5oZWlnaHQoKSAtIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgLSBib3R0
b21MZWZ0UmFkaXVzLmhlaWdodCgpIC0gbV9ibHVyUmFkaXVzICogNCk7CisgICAgcGhhc2UgPSBG
bG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJlY3QueSgpIC0gdGls
ZVJlY3QueSgpKTsKKyAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1h
Z2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVjdCk7CisKKyAgICAvLyBEcmF3IHRoZSB0b3Ag
bGVmdCBjb3JuZXIuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgcmFkaXVzVHdpY2Ug
KyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy5oZWln
aHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRv
d1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVj
dCwgdGlsZVJlY3QpOworICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY3IsIG1fbGF5ZXJJ
bWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIHRv
cCByaWdodCBjb3JuZXIuCisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc2hhZG93VGVtcGxhdGVT
aXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIDAsIHJh
ZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKTsKKyAgICBkZXN0UmVj
dCA9IHRpbGVSZWN0OworICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgLSBzaGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dS
ZWN0LnkoKSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAg
IGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxh
dGVTaXplLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9S
X09WRVIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIu
CisgICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc2hhZG93VGVtcGxhdGVTaXplLndpZHRoKCkgLSBy
YWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0
b21SaWdodFJhZGl1cy5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNU
d2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmln
aHRSYWRpdXMuaGVpZ2h0KCkpOworICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CisgICAgZGVzdFJl
Y3QubW92ZShzaGFkb3dSZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHNoYWRvd1RlbXBsYXRlU2l6
ZS53aWR0aCgpICsgcmFkaXVzVHdpY2UsCisgICAgICAgICAgICAgICAgICBzaGFkb3dSZWN0Lnko
KSArIHJlY3QuaGVpZ2h0KCkgLSBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgKyByYWRpdXNU
d2ljZSk7CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIGRy
YXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVT
aXplLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09W
RVIsIGRlc3RSZWN0KTsKKworICAgIC8vIERyYXcgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lci4KKyAg
ICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBy
YWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHJhZGl1c1R3
aWNlICsgYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QgPSB0aWxlUmVj
dDsKKyAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkgLSBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgKyByYWRpdXNUd2ljZSk7
CisgICAgcGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIGRyYXdQYXR0
ZXJuVG9DYWlyb0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRl
c3RSZWN0KTsKKworICAgIC8vIFNjaGVkdWxlIGEgcHVyZ2Ugb2YgdGhlIHNjcmF0Y2ggYnVmZmVy
CisgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKK30KKwogfQo=
</data>
<flag name="review"
          id="59365"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>