<?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>50623</bug_id>
          
          <creation_ts>2010-12-07 04:24:56 -0800</creation_ts>
          <short_desc>[GTK] Use gtk_icon_set_render_icon() to render icons in RenderThemeGtk</short_desc>
          <delta_ts>2010-12-09 00:34:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>318126</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-07 04:24:56 -0800</bug_when>
    <thetext>Using gtk_icon_set_render_icon() we use the gtk icon cache and icons are rendered using state and direction. So, icons are prelighted on hover (we can remove the TODO comment in paintSearchFieldCancelButton), although it doesn&apos;t currently work due to a gtk+ issue (https://bugzilla.gnome.org/show_bug.cgi?id=636691). Gtk icon cache is automatically cleared when the theme changes, so we don&apos;t need to connect to the theme changed signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318128</commentid>
    <comment_count>1</comment_count>
      <attachid>75798</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-07 04:30:46 -0800</bug_when>
    <thetext>Created attachment 75798
Patch to use gtk_icon_set_render_icon()

With this patch bugs #50225 and #50226 can be closed too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318133</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-07 04:43:57 -0800</bug_when>
    <thetext>*** Bug 50226 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318135</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-07 04:44:08 -0800</bug_when>
    <thetext>*** Bug 50225 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318213</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 08:42:53 -0800</bug_when>
    <thetext>Attachment 75798 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318261</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 09:43:59 -0800</bug_when>
    <thetext>Attachment 75798 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318310</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:44:57 -0800</bug_when>
    <thetext>Attachment 75798 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318361</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:46:10 -0800</bug_when>
    <thetext>Attachment 75798 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318591</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:33:09 -0800</bug_when>
    <thetext>Attachment 75798 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318695</commentid>
    <comment_count>9</comment_count>
      <attachid>75798</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-08 01:29:19 -0800</bug_when>
    <thetext>Comment on attachment 75798
Patch to use gtk_icon_set_render_icon()

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

Great patch. My biggest concern is whether or not the GTK+ icon caching behavior is defined. If it&apos;s defined can we be sure that it&apos;s performant?

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:85
&gt; +    RefPtr&lt;BitmapImage&gt; img = BitmapImage::create(surface);
&gt; +    return img.release();
&gt; +}

I think this should just be return BitmapImage::create(surface);

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:117
&gt; +            iconSet = gtk_icon_set_new();

If this variable isn&apos;t used outside this block, it should be delcared here.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:263
&gt; +GtkStateType RenderThemeGtk::gtkIconState(RenderObject* renderObject)

I think this can just be a static function. It doesn&apos;t seem to need to be a method.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:268
&gt; +        state = GTK_STATE_INSENSITIVE;

These should be early returns.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:478
&gt; +    gint width, height;

Please initialize these values to 0.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:502
&gt; +    RefPtr&lt;Image&gt; searchImage = loadStockIcon(style, GTK_STOCK_FIND, gtkTextDirection(renderObject-&gt;style()-&gt;direction()),

Instead of blitting the icon GdkPixbuf to a cairo surface wrapping it in a WebCore Image and then having WebCore paint one surface to another, it would be more effecieint to simply call gdk_cairo_set_source_pixbuf and paint the GdkPixbuf directly.

Does GtkIconSet cache the icons or does it load them every time?

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:515
&gt; +    gint width, height;

Please initialize these values before using them.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:525
&gt; +    RefPtr&lt;Image&gt; cancelImage = loadStockIcon(style, GTK_STOCK_CLEAR, gtkTextDirection(renderObject-&gt;style()-&gt;direction()),
&gt; +                                              gtkIconState(renderObject), GTK_ICON_SIZE_MENU);

Same suggesiton here as above.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:789
&gt; +bool RenderThemeGtk::paintMediaButton(RenderObject* renderObject, GraphicsContext* context, const IntRect&amp; rect, const char* iconName, Color panelColor, int mediaIconSize)

Is it possible to make this a static function instead of a method?

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:793
&gt; +    RefPtr&lt;Image&gt; image = loadStockIcon(style, iconName, gtkTextDirection(renderObject-&gt;style()-&gt;direction()), gtkIconState(renderObject), getMediaButtonIconSize(mediaIconSize));

Ditto.

&gt; WebCore/platform/gtk/RenderThemeGtk.h:142
&gt; +    virtual void initMediaColors();
&gt; +    virtual void initMediaButtons();

Please remove the &apos;virtual&apos; here.

&gt; WebCore/platform/gtk/RenderThemeGtk.h:175
&gt; +    bool paintMediaButton(RenderObject*, GraphicsContext*, const IntRect&amp; rect, const char *iconName, Color panelColor, int mediaIconSize);

No need for &quot;rect&quot; variable name and the asterisk on iconName should be with the type name.

&gt; WebCore/platform/gtk/RenderThemeGtk.h:177
&gt; +    GtkStateType gtkIconState(RenderObject* renderObject);

No need for the variable name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318700</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-08 02:01:13 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 75798 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75798&amp;action=review
&gt; 
&gt; Great patch. My biggest concern is whether or not the GTK+ icon caching behavior is defined. If it&apos;s defined can we be sure that it&apos;s performant?

GTK+ icon caching behaviour? icons are cached by gtkiconfactory, for any of their states and direction the first time they are rendered, and cache is cleared when the theme changes. Take a look at the code if you want to make sure:

http://git.gnome.org/browse/gtk+/tree/gtk/gtkiconfactory.c#n1082

Why wouldn&apos;t it be performant?

&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:85
&gt; &gt; +    RefPtr&lt;BitmapImage&gt; img = BitmapImage::create(surface);
&gt; &gt; +    return img.release();
&gt; &gt; +}
&gt; 
&gt; I think this should just be return BitmapImage::create(surface);
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:117
&gt; &gt; +            iconSet = gtk_icon_set_new();
&gt; 
&gt; If this variable isn&apos;t used outside this block, it should be delcared here.

Ok.

&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:263
&gt; &gt; +GtkStateType RenderThemeGtk::gtkIconState(RenderObject* renderObject)
&gt; 
&gt; I think this can just be a static function. It doesn&apos;t seem to need to be a method.

I don&apos;t think so, isEnabled(), isPressed() and isHovered() are methods of RenderTheme, I can make it static and pass a pointer to RenderTheme, but I don&apos;t think it&apos;s worth it. 

&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:268
&gt; &gt; +        state = GTK_STATE_INSENSITIVE;
&gt; 
&gt; These should be early returns.

Ok

&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:478
&gt; &gt; +    gint width, height;
&gt; 
&gt; Please initialize these values to 0.
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:502
&gt; &gt; +    RefPtr&lt;Image&gt; searchImage = loadStockIcon(style, GTK_STOCK_FIND, gtkTextDirection(renderObject-&gt;style()-&gt;direction()),
&gt; 
&gt; Instead of blitting the icon GdkPixbuf to a cairo surface wrapping it in a WebCore Image and then having WebCore paint one surface to another, it would be more effecieint to simply call gdk_cairo_set_source_pixbuf and paint the GdkPixbuf directly.

It&apos;s mostly the same, gdk_cairo_set_source_pixbuf() converts the pixbuf into a cairo surface and sets the surface as the current source, so you don&apos;t paint the pixbuf directly. 

&gt; Does GtkIconSet cache the icons or does it load them every time?

Yes, icons are cached by gtk+.

&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:515
&gt; &gt; +    gint width, height;
&gt; 
&gt; Please initialize these values before using them.
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:525
&gt; &gt; +    RefPtr&lt;Image&gt; cancelImage = loadStockIcon(style, GTK_STOCK_CLEAR, gtkTextDirection(renderObject-&gt;style()-&gt;direction()),
&gt; &gt; +                                              gtkIconState(renderObject), GTK_ICON_SIZE_MENU);
&gt; 
&gt; Same suggesiton here as above.
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:789
&gt; &gt; +bool RenderThemeGtk::paintMediaButton(RenderObject* renderObject, GraphicsContext* context, const IntRect&amp; rect, const char* iconName, Color panelColor, int mediaIconSize)
&gt; 
&gt; Is it possible to make this a static function instead of a method?

I don&apos;t think so. we are using gtkContainer()

&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.cpp:793
&gt; &gt; +    RefPtr&lt;Image&gt; image = loadStockIcon(style, iconName, gtkTextDirection(renderObject-&gt;style()-&gt;direction()), gtkIconState(renderObject), getMediaButtonIconSize(mediaIconSize));
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.h:142
&gt; &gt; +    virtual void initMediaColors();
&gt; &gt; +    virtual void initMediaButtons();
&gt; 
&gt; Please remove the &apos;virtual&apos; here.
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.h:175
&gt; &gt; +    bool paintMediaButton(RenderObject*, GraphicsContext*, const IntRect&amp; rect, const char *iconName, Color panelColor, int mediaIconSize);
&gt; 
&gt; No need for &quot;rect&quot; variable name and the asterisk on iconName should be with the type name.
&gt; 
&gt; &gt; WebCore/platform/gtk/RenderThemeGtk.h:177
&gt; &gt; +    GtkStateType gtkIconState(RenderObject* renderObject);
&gt; 
&gt; No need for the variable name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318730</commentid>
    <comment_count>11</comment_count>
      <attachid>75890</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-08 04:48:55 -0800</bug_when>
    <thetext>Created attachment 75890
Updated patch addressing martin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318739</commentid>
    <comment_count>12</comment_count>
      <attachid>75890</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-08 05:19:49 -0800</bug_when>
    <thetext>Comment on attachment 75890
Updated patch addressing martin&apos;s comments

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

Looking good!

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:73
&gt; +    PlatformRefPtr&lt;GdkPixbuf&gt; icon = gtk_icon_set_render_icon(iconSet, style, direction, state, iconSize, 0, 0);

If gtk_icon_set_render_icon returns a new reference this should be wrapped in adoptPlatformRef. If it doesn&apos;t, this can just be a raw GdkPixbuf* since we don&apos;t need to take a reference.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:102
&gt; +    if (!iconsInitialized) {

Please use an early return here.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:103
&gt; +        GtkIconFactory* iconFactory = gtk_icon_factory_new();

This is a situation where a PlatformRefPtr with adoptPlatformRef would make sense.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:480
&gt; +        return IntPoint(rect.x(), rect.y());

This should just be rect.topLeft()

&gt; WebCore/platform/gtk/RenderThemeGtk.h:175
&gt; +    bool paintMediaButton(RenderObject*, GraphicsContext*, const IntRect&amp;, const char* iconName, Color panelColor, int mediaIconSize);

It looks like panelColor is always m_panelColor and mediaIconSize is always m_mediaIconSize, so you can remove these parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318769</commentid>
    <comment_count>13</comment_count>
      <attachid>75901</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-08 07:23:33 -0800</bug_when>
    <thetext>Created attachment 75901
A new update fixing more issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318834</commentid>
    <comment_count>14</comment_count>
      <attachid>75901</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-08 09:39:26 -0800</bug_when>
    <thetext>Comment on attachment 75901
A new update fixing more issues

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319091</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-08 15:47:42 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 75901:

inspector/debugger-breakpoints-not-activated-on-reload.html

Please file bugs against the tests.  These tests were authored by loislo@chromium.org and podivilov@chromium.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319094</commentid>
    <comment_count>16</comment_count>
      <attachid>75901</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-08 15:50:44 -0800</bug_when>
    <thetext>Comment on attachment 75901
A new update fixing more issues

Clearing flags on attachment: 75901

Committed r73561: &lt;http://trac.webkit.org/changeset/73561&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319095</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-08 15:50:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319305</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-09 00:34:22 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73561 might have broken GTK Linux 32-bit Release and GTK Linux 64-bit Debug
The following tests are not passing:
fast/css/input-search-padding.html
fast/css/text-input-with-webkit-border-radius.html
fast/forms/box-shadow-override.html
fast/forms/control-restrict-line-height.html
fast/forms/input-appearance-height.html
fast/forms/placeholder-pseudo-style.html
fast/forms/placeholder-set-value.html
fast/forms/search-cancel-button-style-sharing.html
fast/forms/search-placeholder-value-changed.html
fast/forms/search-rtl.html
fast/forms/search-styled.html
fast/forms/search-transformed.html
fast/forms/search-vertical-alignment.html
fast/forms/search-zoomed.html
fast/forms/searchfield-heights.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75798</attachid>
            <date>2010-12-07 04:30:46 -0800</date>
            <delta_ts>2010-12-08 04:48:55 -0800</delta_ts>
            <desc>Patch to use gtk_icon_set_render_icon()</desc>
            <filename>icons.diff</filename>
            <type>text/plain</type>
            <size>18862</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDQ4N2YyNi4uMGU2NDY4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0xMi0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gVXNlIGd0a19pY29uX3NldF9yZW5kZXJfaWNv
bigpIHRvIHJlbmRlciBpY29ucyBpbiBSZW5kZXJUaGVtZUd0aworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA2MjMKKworICAgICAgICBXZSBkb24ndCBu
ZWVkIHRvIGNhY2hlIHRoZSBpY29ucyBzaW5jZSB0aGUgd2lsbCBiZSBjYWNoZWQgYnkgR1RLKywK
KyAgICAgICAgYW5kIHRoZXkgd2lsbCBiZSByZW5kZXJlZCB1c2luZyB0aGUgc3RhdGUgYW5kIHRl
eHQgZGlyZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRTdG9ja0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TWVkaWFCdXR0b25JY29uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6aW5pdE1lZGlhQ29sb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpp
bml0TWVkaWFCdXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpSZW5k
ZXJUaGVtZUd0ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6flJlbmRlclRo
ZW1lR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpndGtJY29uU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9yc0RpZENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFN
dXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
UGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVNlZWtCYWNrQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5oOgorCiAyMDEwLTEyLTA2ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gUm9sbGluZyBvdXQgcjcyOTg4IGZvciBi
cmVha2luZyBpZnJhbWVzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCmlu
ZGV4IGM5ZTQyNDMuLjJjZDM5MjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1
ZGUgIkdyYWRpZW50LmgiCkBAIC02Niw1NiArNjcsNjMgQEAgc3RhdGljIEhUTUxNZWRpYUVsZW1l
bnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKIH0KIAot
c3RhdGljIGdjaGFyKiBnZXRJY29uTmFtZUZvclRleHREaXJlY3Rpb24oY29uc3QgY2hhciogYmFz
ZU5hbWUpCitzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFN0b2NrSWNvbihHdGtTdHlsZSog
c3R5bGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
R3RrU3RhdGVUeXBlIHN0YXRlLCBHdGtJY29uU2l6ZSBpY29uU2l6ZSkKIHsKLSAgICBHU3RyaW5n
KiBuYW1lV2l0aERpcmVjdGlvbiA9IGdfc3RyaW5nX25ldyhiYXNlTmFtZSk7Ci0gICAgR3RrVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZ3RrX3dpZGdldF9nZXRfZGVmYXVsdF9kaXJlY3Rp
b24oKTsKKyAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2xvb2t1cF9pY29uX3Nl
dChzdHlsZSwgaWNvbk5hbWUpOworICAgIFBsYXRmb3JtUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9
IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbihpY29uU2V0LCBzdHlsZSwgZGlyZWN0aW9uLCBzdGF0
ZSwgaWNvblNpemUsIDAsIDApOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKGdka19waXhidWZfZ2V0X2hhc19hbHBoYShpY29uLmdldCgp
KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiA6IENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfcGl4
YnVmX2dldF93aWR0aChpY29uLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNvbi5n
ZXQoKSkpOworICAgIGNhaXJvX3QqIGNvbnRleHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7Cisg
ICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIDAsIDAp
OworICAgIGNhaXJvX3BhaW50KGNvbnRleHQpOworICAgIGNhaXJvX2Rlc3Ryb3koY29udGV4dCk7
CiAKLSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfUlRMKQotICAgICAgICBn
X3N0cmluZ19hcHBlbmQobmFtZVdpdGhEaXJlY3Rpb24sICItcnRsIik7Ci0gICAgZWxzZSBpZiAo
dGV4dERpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICBnX3N0cmluZ19hcHBl
bmQobmFtZVdpdGhEaXJlY3Rpb24sICItbHRyIik7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBp
bWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworICAgIHJldHVybiBpbWcucmVsZWFz
ZSgpOworfQogCi0gICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUobmFtZVdpdGhEaXJlY3Rpb24sIEZB
TFNFKTsKK3N0YXRpYyBHdGtJY29uU2l6ZSBnZXRNZWRpYUJ1dHRvbkljb25TaXplKGludCBtZWRp
YUljb25TaXplKQoreworICAgIEd0a0ljb25TaXplIGljb25TaXplID0gZ3RrX2ljb25fc2l6ZV9m
cm9tX25hbWUoIndlYmtpdC1tZWRpYS1idXR0b24tc2l6ZSIpOworICAgIGlmICghaWNvblNpemUp
CisgICAgICAgIGljb25TaXplID0gZ3RrX2ljb25fc2l6ZV9yZWdpc3Rlcigid2Via2l0LW1lZGlh
LWJ1dHRvbi1zaXplIiwgbWVkaWFJY29uU2l6ZSwgbWVkaWFJY29uU2l6ZSk7CisgICAgcmV0dXJu
IGljb25TaXplOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFTdHlsaW5nKEd0
a1N0eWxlKiBzdHlsZSwgYm9vbCBmb3JjZSkKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRp
YUNvbG9ycygpCiB7Ci0gICAgc3RhdGljIGJvb2wgc3R5bGluZ0luaXRpYWxpemVkID0gZmFsc2U7
CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChn
dGtDb250YWluZXIoKSkpOworICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVf
Tk9STUFMXTsKKyAgICBtX3NsaWRlckNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVd
OworICAgIG1fc2xpZGVyVGh1bWJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfU0VMRUNURURd
OworfQogCi0gICAgaWYgKCFzdHlsaW5nSW5pdGlhbGl6ZWQgfHwgZm9yY2UpIHsKLSAgICAgICAg
bV9wYW5lbENvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9OT1JNQUxdOwotICAgICAgICBtX3Ns
aWRlckNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVdOwotICAgICAgICBtX3NsaWRl
clRodW1iQ29sb3IgPSBzdHlsZS0+YmdbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK3ZvaWQgUmVuZGVy
VGhlbWVHdGs6OmluaXRNZWRpYUJ1dHRvbnMoKQoreworICAgIHN0YXRpYyBib29sIGljb25zSW5p
dGlhbGl6ZWQgPSBmYWxzZTsKIAotICAgICAgICAvLyBOYW1lcyBvZiB0aGVzZSBpY29ucyBjYW4g
dmFyeSBiZWNhdXNlIG9mIHRleHQgZGlyZWN0aW9uLgotICAgICAgICBnY2hhciogcGxheUJ1dHRv
bkljb25OYW1lID0gZ2V0SWNvbk5hbWVGb3JUZXh0RGlyZWN0aW9uKCJndGstbWVkaWEtcGxheSIp
OwotICAgICAgICBnY2hhciogc2Vla0JhY2tCdXR0b25JY29uTmFtZSA9IGdldEljb25OYW1lRm9y
VGV4dERpcmVjdGlvbigiZ3RrLW1lZGlhLXJld2luZCIpOwotICAgICAgICBnY2hhciogc2Vla0Zv
cndhcmRCdXR0b25JY29uTmFtZSA9IGdldEljb25OYW1lRm9yVGV4dERpcmVjdGlvbigiZ3RrLW1l
ZGlhLWZvcndhcmQiKTsKKyAgICBpZiAoIWljb25zSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgR3Rr
SWNvbkZhY3RvcnkqIGljb25GYWN0b3J5ID0gZ3RrX2ljb25fZmFjdG9yeV9uZXcoKTsKKyAgICAg
ICAgR3RrSWNvblNvdXJjZSogaWNvblNvdXJjZSA9IGd0a19pY29uX3NvdXJjZV9uZXcoKTsKKyAg
ICAgICAgR3RrSWNvblNldCogaWNvblNldDsKKyAgICAgICAgY29uc3QgY2hhciogaWNvbnNbXSA9
IHsgImF1ZGlvLXZvbHVtZS1oaWdoIiwgImF1ZGlvLXZvbHVtZS1tdXRlZCIgfTsKIAotICAgICAg
ICBtX2Z1bGxzY3JlZW5CdXR0b24uY2xlYXIoKTsKLSAgICAgICAgbV9tdXRlQnV0dG9uLmNsZWFy
KCk7Ci0gICAgICAgIG1fdW5tdXRlQnV0dG9uLmNsZWFyKCk7Ci0gICAgICAgIG1fcGxheUJ1dHRv
bi5jbGVhcigpOwotICAgICAgICBtX3BhdXNlQnV0dG9uLmNsZWFyKCk7Ci0gICAgICAgIG1fc2Vl
a0JhY2tCdXR0b24uY2xlYXIoKTsKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi5jbGVhcigp
OworICAgICAgICBndGtfaWNvbl9mYWN0b3J5X2FkZF9kZWZhdWx0KGljb25GYWN0b3J5KTsKIAot
ICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29u
KCJndGstZnVsbHNjcmVlbiIsIG1fbWVkaWFJY29uU2l6ZSk7Ci0gICAgICAgIC8vIE5vdGUgdGhh
dCB0aGUgbXV0ZUJ1dHRvbiBhbmQgdW5tdXRlQnV0dG9uIHRha2UgaWNvbnMgcmVmbGVjdGluZwot
ICAgICAgICAvLyB0aGUgKmN1cnJlbnQqIHN0YXRlLiBIZW5jZSwgdGhlIHVubXV0ZUJ1dHRvbiBy
ZXByZXNlbnRzIHRoZSAqbXV0ZWQqCi0gICAgICAgIC8vIHN0YXR1cywgdGhlIG11dGVCdXR0b24g
cmVwcmVzZW50cyB0aGUgdGhlbiBjdXJyZW50ICp1bm11dGVkKiBzdGF0dXMuCi0gICAgICAgIG1f
bXV0ZUJ1dHRvbiA9IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24oImF1ZGlvLXZvbHVtZS1o
aWdoIiwgbV9tZWRpYUljb25TaXplKTsKLSAgICAgICAgbV91bm11dGVCdXR0b24gPSBJbWFnZTo6
bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJhdWRpby12b2x1bWUtbXV0ZWQiLCBtX21lZGlhSWNvblNp
emUpOwotICAgICAgICBtX3BsYXlCdXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29u
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHBsYXlCdXR0b25JY29uTmFtZSksIG1fbWVk
aWFJY29uU2l6ZSk7Ci0gICAgICAgIG1fcGF1c2VCdXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
VGhlbWVJY29uKCJndGstbWVkaWEtcGF1c2UiLCBtX21lZGlhSWNvblNpemUpOwotICAgICAgICBt
X3NlZWtCYWNrQnV0dG9uID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVRoZW1lSWNvbihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihzZWVrQmFja0J1dHRvbkljb25OYW1lKSwgbV9tZWRpYUljb25T
aXplKTsKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9IEltYWdlOjpsb2FkUGxhdGZvcm1U
aGVtZUljb24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc2Vla0ZvcndhcmRCdXR0b25J
Y29uTmFtZSksIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgR19OX0VMRU1FTlRTKGljb25zKTsgKytpKSB7CisgICAgICAgICAgICBndGtfaWNvbl9zb3Vy
Y2Vfc2V0X2ljb25fbmFtZShpY29uU291cmNlLCBpY29uc1tpXSk7CisgICAgICAgICAgICBpY29u
U2V0ID0gZ3RrX2ljb25fc2V0X25ldygpOworICAgICAgICAgICAgZ3RrX2ljb25fc2V0X2FkZF9z
b3VyY2UoaWNvblNldCwgaWNvblNvdXJjZSk7CisgICAgICAgICAgICBndGtfaWNvbl9mYWN0b3J5
X2FkZChpY29uRmFjdG9yeSwgaWNvbnNbaV0sIGljb25TZXQpOworICAgICAgICAgICAgZ3RrX2lj
b25fc2V0X3VucmVmKGljb25TZXQpOworICAgICAgICB9CiAKLSAgICAgICAgZ19mcmVlKHBsYXlC
dXR0b25JY29uTmFtZSk7Ci0gICAgICAgIGdfZnJlZShzZWVrQmFja0J1dHRvbkljb25OYW1lKTsK
LSAgICAgICAgZ19mcmVlKHNlZWtGb3J3YXJkQnV0dG9uSWNvbk5hbWUpOwotICAgICAgICBzdHls
aW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBndGtfaWNvbl9zb3VyY2VfZnJlZShpY29u
U291cmNlKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaWNvbkZhY3RvcnkpOworCisgICAgICAg
IGljb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTQ2LDEzICsx
NTQsNiBAQCBSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGsoKQogICAgICwgbV9tZWRpYVNs
aWRlckhlaWdodCgxNCkKICAgICAsIG1fbWVkaWFTbGlkZXJUaHVtYldpZHRoKDEyKQogICAgICwg
bV9tZWRpYVNsaWRlclRodW1iSGVpZ2h0KDEyKQotICAgICwgbV9mdWxsc2NyZWVuQnV0dG9uKDAp
Ci0gICAgLCBtX211dGVCdXR0b24oMCkKLSAgICAsIG1fdW5tdXRlQnV0dG9uKDApCi0gICAgLCBt
X3BsYXlCdXR0b24oMCkKLSAgICAsIG1fcGF1c2VCdXR0b24oMCkKLSAgICAsIG1fc2Vla0JhY2tC
dXR0b24oMCkKLSAgICAsIG1fc2Vla0ZvcndhcmRCdXR0b24oMCkKICNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgogICAgICwgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCh0cnVlKQogI2VuZGlm
CkBAIC0xNzYsNyArMTc3LDggQEAgUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3RrKCkKICAg
ICArK21vekd0a1JlZkNvdW50OwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGluaXRNZWRpYVN0
eWxpbmcoZ3RrX3JjX2dldF9zdHlsZShHVEtfV0lER0VUKGd0a0NvbnRhaW5lcigpKSksIGZhbHNl
KTsKKyAgICBpbml0TWVkaWFDb2xvcnMoKTsKKyAgICBpbml0TWVkaWFCdXR0b25zKCk7CiAjZW5k
aWYKIH0KIApAQCAtMTg3LDE0ICsxODksNiBAQCBSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1l
R3RrKCkKICAgICBpZiAoIW1vekd0a1JlZkNvdW50KQogICAgICAgICBtb3pfZ3RrX3NodXRkb3du
KCk7CiAKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24uY2xlYXIoKTsKLSAgICBtX211dGVCdXR0b24u
Y2xlYXIoKTsKLSAgICBtX3VubXV0ZUJ1dHRvbi5jbGVhcigpOwotICAgIG1fcGxheUJ1dHRvbi5j
bGVhcigpOwotICAgIG1fcGF1c2VCdXR0b24uY2xlYXIoKTsKLSAgICBtX3NlZWtCYWNrQnV0dG9u
LmNsZWFyKCk7Ci0gICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi5jbGVhcigpOwotCiAgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsKIH0KIApAQCAtMjY2LDYgKzI2MCwyMCBAQCBzdGF0
aWMgR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQogICAgIH0KIH0KIAorR3RrU3RhdGVUeXBlIFJlbmRlclRoZW1lR3RrOjpndGtJY29uU3Rh
dGUoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCit7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRl
ID0gR1RLX1NUQVRFX05PUk1BTDsKKworICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkp
CisgICAgICAgIHN0YXRlID0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlz
UHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBzdGF0ZSA9IEdUS19TVEFURV9BQ1RJVkU7
CisgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHN0YXRlID0g
R1RLX1NUQVRFX1BSRUxJR0hUOworCisgICAgcmV0dXJuIHN0YXRlOworfQorCiBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50IGZsYWdzKQogewogICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVk
IHNvIGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKQEAgLTQ2NywxMCArNDc1LDEwIEBAIHZv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAgICAgc3R5
bGUtPnJlc2V0UGFkZGluZygpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBo
YXJkLWNvZGVkLgotICAgIEludFNpemUgc2l6ZSA9IEludFNpemUoMTQsIDE0KTsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIGdpbnQgd2lkdGgsIGhl
aWdodDsKKyAgICBndGtfaWNvbl9zaXplX2xvb2t1cChHVEtfSUNPTl9TSVpFX01FTlUsICZ3aWR0
aCwgJmhlaWdodCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
KyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CiB9CiAKIHN0YXRp
YyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00ODgsMTEgKzQ5NiwxNCBA
QCBzdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgIHJldHVybiBjZW50ZXJlZFJlY3Q7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBzdGF0aWMgSW1hZ2UqIHNlYXJjaEltYWdl
ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVRoZW1lSWNvbihHVEtfU1RPQ0tfRklORCwgcmVjdC53aWR0
aCgpKS5yZWxlYXNlUmVmKCk7Ci0gICAgSW50UmVjdCBjZW50ZXJlZFJlY3QoY2VudGVyUmVjdFZl
cnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChvYmplY3QsIHJlY3QpKTsKLSAgICBpLmNvbnRl
eHQtPmRyYXdJbWFnZShzZWFyY2hJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgY2VudGVyZWRS
ZWN0KTsKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShHVEtfV0lE
R0VUKGd0a0VudHJ5KCkpKTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNlYXJjaEltYWdlID0gbG9hZFN0
b2NrSWNvbihzdHlsZSwgR1RLX1NUT0NLX0ZJTkQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2Jq
ZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHJlbmRlck9iamVjdCksIEdUS19JQ09OX1NJ
WkVfTUVOVSk7CisgICAgSW50UmVjdCBjZW50ZXJlZFJlY3QoY2VudGVyUmVjdFZlcnRpY2FsbHlJ
blBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpKTsKKyAgICBwYWludEluZm8u
Y29udGV4dC0+ZHJhd0ltYWdlKHNlYXJjaEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBjZW50ZXJlZFJlY3QpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01MDEsMTggKzUx
MiwyMCBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdAogICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OwogICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBub3QgYmUgaGFyZC1jb2RlZC4KLSAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKDE0LCAxNCk7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBnaW50
IHdpZHRoLCBoZWlnaHQ7CisgICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoR1RLX0lDT05fU0laRV9N
RU5VLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBUT0RPOiBCcmlnaHRlbmluZyB1cCB0aGUgaW1h
Z2Ugb24gaG92ZXIgaXMgZGVzaXJhYmxlIGhlcmUsIEkgYmVsaWV2ZS4KLSAgICBzdGF0aWMgSW1h
Z2UqIGNhbmNlbEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVRoZW1lSWNvbihHVEtfU1RPQ0tf
Q0xFQVIsIHJlY3Qud2lkdGgoKSkucmVsZWFzZVJlZigpOwotICAgIEludFJlY3QgY2VudGVyZWRS
ZWN0KGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQob2JqZWN0LCByZWN0
KSk7Ci0gICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoY2FuY2VsSW1hZ2UsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIGNlbnRlcmVkUmVjdCk7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9n
ZXRfc3R5bGUoR1RLX1dJREdFVChndGtFbnRyeSgpKSk7CisgICAgUmVmUHRyPEltYWdlPiBjYW5j
ZWxJbWFnZSA9IGxvYWRTdG9ja0ljb24oc3R5bGUsIEdUS19TVE9DS19DTEVBUiwgZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUocmVuZGVyT2Jq
ZWN0KSwgR1RLX0lDT05fU0laRV9NRU5VKTsKKyAgICBJbnRSZWN0IGNlbnRlcmVkUmVjdChjZW50
ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCkp
OworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UoY2FuY2VsSW1hZ2UuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGNlbnRlcmVkUmVjdCk7CisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTc2Miw3ICs3NzUsNyBAQCBHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtTY3Jv
bGxiYXIoKQogdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKQog
ewogI2lmIEVOQUJMRShWSURFTykKLSAgICBpbml0TWVkaWFTdHlsaW5nKGd0a19yY19nZXRfc3R5
bGUoR1RLX1dJREdFVChndGtDb250YWluZXIoKSkpLCB0cnVlKTsKKyAgICBpbml0TWVkaWFDb2xv
cnMoKTsKICNlbmRpZgogICAgIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgp
OwogfQpAQCAtNzczLDQ5ICs3ODYsNTMgQEAgU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpleHRyYU1l
ZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKICAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNH
dGtVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0d0a1VzZXJBZ2VudFN0
eWxlU2hlZXQpKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHBhaW50TWVkaWFCdXR0b24oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByLCBJbWFnZSogaW1hZ2UsIENv
bG9yIHBhbmVsQ29sb3IsIGludCBtZWRpYUljb25TaXplKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBjaGFyKiBpY29uTmFtZSwg
Q29sb3IgcGFuZWxDb2xvciwgaW50IG1lZGlhSWNvblNpemUpCiB7Ci0gICAgY29udGV4dC0+Zmls
bFJlY3QoRmxvYXRSZWN0KHIpLCBwYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsCi0gICAgICAg
ICAgICAgICAgICAgICAgIEludFJlY3Qoci54KCkgKyAoci53aWR0aCgpIC0gbWVkaWFJY29uU2l6
ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIueSgpICsgKHIuaGVpZ2h0
KCkgLSBtZWRpYUljb25TaXplKSAvIDIsCisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdl
dF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250YWluZXIoKSkpOworCisgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGxvYWRTdG9ja0ljb24oc3R5bGUsIGljb25OYW1lLCBndGtUZXh0RGlyZWN0
aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLCBndGtJY29uU3RhdGUocmVu
ZGVyT2JqZWN0KSwgZ2V0TWVkaWFCdXR0b25JY29uU2l6ZShtZWRpYUljb25TaXplKSk7CisKKyAg
ICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIHBhbmVsQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChyZWN0LngoKSAr
IChyZWN0LndpZHRoKCkgLSBtZWRpYUljb25TaXplKSAvIDIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIG1lZGlhSWNvblNpemUpIC8g
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUljb25TaXplLCBtZWRpYUlj
b25TaXplKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0
dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHIsIG1fZnVsbHNjcmVlbkJ1
dHRvbi5nZXQoKSwgbV9wYW5lbENvbG9yLCBtX21lZGlhSWNvblNpemUpOworICAgIHJldHVybiBw
YWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIEdU
S19TVE9DS19GVUxMU0NSRUVOLCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gZ2V0TWVkaWFFbGVtZW50RnJv
bVJlbmRlck9iamVjdChvKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBn
ZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCk7CiAgICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBwYWludE1l
ZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByLCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBt
X3VubXV0ZUJ1dHRvbi5nZXQoKSA6IG1fbXV0ZUJ1dHRvbi5nZXQoKSwgbV9wYW5lbENvbG9yLCBt
X21lZGlhSWNvblNpemUpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVj
dCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/ICJhdWRp
by12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIiwgbV9wYW5lbENvbG9yLCBtX21l
ZGlhSWNvblNpemUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhUGxheUJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9k
ZSogbm9kZSA9IHJlbmRlck9iamVjdC0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqIGJ1dHRv
biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Kj4obm9kZSk7Ci0g
ICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHIsIGJ1dHRvbi0+
ZGlzcGxheVR5cGUoKSA9PSBNZWRpYVBsYXlCdXR0b24gPyBtX3BsYXlCdXR0b24uZ2V0KCkgOiBt
X3BhdXNlQnV0dG9uLmdldCgpLCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAg
cmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwg
cmVjdCwgYnV0dG9uLT5kaXNwbGF5VHlwZSgpID09IE1lZGlhUGxheUJ1dHRvbiA/IEdUS19TVE9D
S19NRURJQV9QTEFZIDogR1RLX1NUT0NLX01FRElBX1BBVVNFLCBtX3BhbmVsQ29sb3IsIG1fbWVk
aWFJY29uU2l6ZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrQmFj
a0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0
dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihw
YWludEluZm8uY29udGV4dCwgciwgbV9zZWVrQmFja0J1dHRvbi5nZXQoKSwgbV9wYW5lbENvbG9y
LCBtX21lZGlhSWNvblNpemUpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9i
amVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIEdUS19TVE9DS19NRURJQV9SRVdJTkQsIG1f
cGFuZWxDb2xvciwgbV9tZWRpYUljb25TaXplKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJl
dHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByLCBtX3NlZWtGb3J3YXJk
QnV0dG9uLmdldCgpLCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgcmV0dXJu
IHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwg
R1RLX1NUT0NLX01FRElBX0ZPUldBUkQsIG1fcGFuZWxDb2xvciwgbV9tZWRpYUljb25TaXplKTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAppbmRleCBlYzg0YjZhLi5kOTA3NzNhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKQEAgLTEzOCw3ICsxMzgsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJP
YmplY3QqIG9iamVjdCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2
b2lkIGluaXRNZWRpYVN0eWxpbmcoR3RrU3R5bGUqIHN0eWxlLCBib29sIGZvcmNlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgdmlydHVhbCB2b2lkIGluaXRNZWRp
YUJ1dHRvbnMoKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRl
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
QEAgLTE3MCw2ICsxNzEsMTAgQEAgcHJpdmF0ZToKICAgICBHdGtDb250YWluZXIqIGd0a0NvbnRh
aW5lcigpIGNvbnN0OwogCiAgICAgYm9vbCBwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdl
dFR5cGUsIFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGludCBmbGFncyA9IDApOworI2lmIEVOQUJMRShWSURFTykKKyAgICBib29sIHBhaW50TWVk
aWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgY2hhciAqaWNvbk5hbWUsIENvbG9yIHBhbmVsQ29sb3IsIGludCBtZWRpYUlj
b25TaXplKTsKKyNlbmRpZgorICAgIEd0a1N0YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QpOwogCiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93
OwogICAgIG11dGFibGUgR3RrQ29udGFpbmVyKiBtX2d0a0NvbnRhaW5lcjsKQEAgLTE4NiwxMyAr
MTkxLDYgQEAgcHJpdmF0ZToKICAgICBjb25zdCBpbnQgbV9tZWRpYVNsaWRlclRodW1iV2lkdGg7
CiAgICAgY29uc3QgaW50IG1fbWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKIAotICAgIFJlZlB0cjxJ
bWFnZT4gbV9mdWxsc2NyZWVuQnV0dG9uOwotICAgIFJlZlB0cjxJbWFnZT4gbV9tdXRlQnV0dG9u
OwotICAgIFJlZlB0cjxJbWFnZT4gbV91bm11dGVCdXR0b247Ci0gICAgUmVmUHRyPEltYWdlPiBt
X3BsYXlCdXR0b247Ci0gICAgUmVmUHRyPEltYWdlPiBtX3BhdXNlQnV0dG9uOwotICAgIFJlZlB0
cjxJbWFnZT4gbV9zZWVrQmFja0J1dHRvbjsKLSAgICBSZWZQdHI8SW1hZ2U+IG1fc2Vla0Zvcndh
cmRCdXR0b247CiAgICAgR3RrVGhlbWVQYXJ0cyBtX3RoZW1lUGFydHM7CiAjaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKICAgICBib29sIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXA7Cg==
</data>
<flag name="review"
          id="66638"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75890</attachid>
            <date>2010-12-08 04:48:55 -0800</date>
            <delta_ts>2010-12-08 07:23:33 -0800</delta_ts>
            <desc>Updated patch addressing martin&apos;s comments</desc>
            <filename>stock-icons.diff</filename>
            <type>text/plain</type>
            <size>18873</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGNlYzlhYS4uN2MwZDc1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0xMi0wOCAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gVXNlIGd0a19pY29uX3NldF9yZW5kZXJfaWNv
bigpIHRvIHJlbmRlciBpY29ucyBpbiBSZW5kZXJUaGVtZUd0aworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA2MjMKKworICAgICAgICBXZSBkb24ndCBu
ZWVkIHRvIGNhY2hlIHRoZSBpY29ucyBzaW5jZSB0aGUgd2lsbCBiZSBjYWNoZWQgYnkgR1RLKywK
KyAgICAgICAgYW5kIHRoZXkgd2lsbCBiZSByZW5kZXJlZCB1c2luZyB0aGUgc3RhdGUgYW5kIHRl
eHQgZGlyZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3RvY2tJY29uKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldE1lZGlhQnV0dG9uSWNvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OmluaXRNZWRpYUNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
aW5pdE1lZGlhQnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6UmVu
ZGVyVGhlbWVHdGspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6On5SZW5kZXJU
aGVtZUd0ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z3RrSWNvblN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2VudGVyUmVjdFZlcnRp
Y2FsbHlJblBhcmVudElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1
bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNlZWtCYWNrQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oOgorCiAyMDEwLTEyLTA4ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MzQ5Mi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAppbmRleCA3YjI1Y2Q5Li4zZjBmMjgz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCkBAIC02Niw1NiArNjYs
NTggQEAgc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJP
YmplY3QoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFF
bGVtZW50Kj4obWVkaWFOb2RlKTsKIH0KIAotc3RhdGljIGdjaGFyKiBnZXRJY29uTmFtZUZvclRl
eHREaXJlY3Rpb24oY29uc3QgY2hhciogYmFzZU5hbWUpCi17Ci0gICAgR1N0cmluZyogbmFtZVdp
dGhEaXJlY3Rpb24gPSBnX3N0cmluZ19uZXcoYmFzZU5hbWUpOwotICAgIEd0a1RleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiA9IGd0a193aWRnZXRfZ2V0X2RlZmF1bHRfZGlyZWN0aW9uKCk7Ci0K
LSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfUlRMKQotICAgICAgICBnX3N0
cmluZ19hcHBlbmQobmFtZVdpdGhEaXJlY3Rpb24sICItcnRsIik7Ci0gICAgZWxzZSBpZiAodGV4
dERpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICBnX3N0cmluZ19hcHBlbmQo
bmFtZVdpdGhEaXJlY3Rpb24sICItbHRyIik7Ci0KLSAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShu
YW1lV2l0aERpcmVjdGlvbiwgRkFMU0UpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0
TWVkaWFTdHlsaW5nKEd0a1N0eWxlKiBzdHlsZSwgYm9vbCBmb3JjZSkKLXsKLSAgICBzdGF0aWMg
Ym9vbCBzdHlsaW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGlmICghc3R5bGluZ0luaXRp
YWxpemVkIHx8IGZvcmNlKSB7Ci0gICAgICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtf
U1RBVEVfTk9STUFMXTsKLSAgICAgICAgbV9zbGlkZXJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RB
VEVfQUNUSVZFXTsKLSAgICAgICAgbV9zbGlkZXJUaHVtYkNvbG9yID0gc3R5bGUtPmJnW0dUS19T
VEFURV9TRUxFQ1RFRF07Ci0KLSAgICAgICAgLy8gTmFtZXMgb2YgdGhlc2UgaWNvbnMgY2FuIHZh
cnkgYmVjYXVzZSBvZiB0ZXh0IGRpcmVjdGlvbi4KLSAgICAgICAgZ2NoYXIqIHBsYXlCdXR0b25J
Y29uTmFtZSA9IGdldEljb25OYW1lRm9yVGV4dERpcmVjdGlvbigiZ3RrLW1lZGlhLXBsYXkiKTsK
LSAgICAgICAgZ2NoYXIqIHNlZWtCYWNrQnV0dG9uSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZvclRl
eHREaXJlY3Rpb24oImd0ay1tZWRpYS1yZXdpbmQiKTsKLSAgICAgICAgZ2NoYXIqIHNlZWtGb3J3
YXJkQnV0dG9uSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZvclRleHREaXJlY3Rpb24oImd0ay1tZWRp
YS1mb3J3YXJkIik7Ci0KLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLmNsZWFyKCk7Ci0gICAg
ICAgIG1fbXV0ZUJ1dHRvbi5jbGVhcigpOwotICAgICAgICBtX3VubXV0ZUJ1dHRvbi5jbGVhcigp
OwotICAgICAgICBtX3BsYXlCdXR0b24uY2xlYXIoKTsKLSAgICAgICAgbV9wYXVzZUJ1dHRvbi5j
bGVhcigpOwotICAgICAgICBtX3NlZWtCYWNrQnV0dG9uLmNsZWFyKCk7Ci0gICAgICAgIG1fc2Vl
a0ZvcndhcmRCdXR0b24uY2xlYXIoKTsKLQotICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJndGstZnVsbHNjcmVlbiIsIG1fbWVkaWFJY29u
U2l6ZSk7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXV0ZUJ1dHRvbiBhbmQgdW5tdXRlQnV0
dG9uIHRha2UgaWNvbnMgcmVmbGVjdGluZwotICAgICAgICAvLyB0aGUgKmN1cnJlbnQqIHN0YXRl
LiBIZW5jZSwgdGhlIHVubXV0ZUJ1dHRvbiByZXByZXNlbnRzIHRoZSAqbXV0ZWQqCi0gICAgICAg
IC8vIHN0YXR1cywgdGhlIG11dGVCdXR0b24gcmVwcmVzZW50cyB0aGUgdGhlbiBjdXJyZW50ICp1
bm11dGVkKiBzdGF0dXMuCi0gICAgICAgIG1fbXV0ZUJ1dHRvbiA9IEltYWdlOjpsb2FkUGxhdGZv
cm1UaGVtZUljb24oImF1ZGlvLXZvbHVtZS1oaWdoIiwgbV9tZWRpYUljb25TaXplKTsKLSAgICAg
ICAgbV91bm11dGVCdXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJhdWRpby12
b2x1bWUtbXV0ZWQiLCBtX21lZGlhSWNvblNpemUpOwotICAgICAgICBtX3BsYXlCdXR0b24gPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KHBsYXlCdXR0b25JY29uTmFtZSksIG1fbWVkaWFJY29uU2l6ZSk7Ci0gICAgICAgIG1fcGF1c2VC
dXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJndGstbWVkaWEtcGF1c2UiLCBt
X21lZGlhSWNvblNpemUpOwotICAgICAgICBtX3NlZWtCYWNrQnV0dG9uID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVRoZW1lSWNvbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzZWVrQmFja0J1
dHRvbkljb25OYW1lKSwgbV9tZWRpYUljb25TaXplKTsKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1
dHRvbiA9IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oc2Vla0ZvcndhcmRCdXR0b25JY29uTmFtZSksIG1fbWVkaWFJY29uU2l6ZSk7Ci0K
LSAgICAgICAgZ19mcmVlKHBsYXlCdXR0b25JY29uTmFtZSk7Ci0gICAgICAgIGdfZnJlZShzZWVr
QmFja0J1dHRvbkljb25OYW1lKTsKLSAgICAgICAgZ19mcmVlKHNlZWtGb3J3YXJkQnV0dG9uSWNv
bk5hbWUpOwotICAgICAgICBzdHlsaW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworc3RhdGljIHZvaWQg
cGFpbnRTdG9ja0ljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYg
aWNvblBvaW50LCBHdGtTdHlsZSogc3R5bGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEd0a1N0YXRl
VHlwZSBzdGF0ZSwgR3RrSWNvblNpemUgaWNvblNpemUpCit7CisgICAgR3RrSWNvblNldCogaWNv
blNldCA9IGd0a19zdHlsZV9sb29rdXBfaWNvbl9zZXQoc3R5bGUsIGljb25OYW1lKTsKKyAgICBQ
bGF0Zm9ybVJlZlB0cjxHZGtQaXhidWY+IGljb24gPSBndGtfaWNvbl9zZXRfcmVuZGVyX2ljb24o
aWNvblNldCwgc3R5bGUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplLCAwLCAwKTsKKworICAg
IGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fc2F2
ZShjcik7CisgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBpY29uLmdldCgpLCBp
Y29uUG9pbnQueCgpLCBpY29uUG9pbnQueSgpKTsKKyAgICBjYWlyb19wYWludChjcik7CisgICAg
Y2Fpcm9fcmVzdG9yZShjcik7Cit9CisKK3N0YXRpYyBHdGtJY29uU2l6ZSBnZXRNZWRpYUJ1dHRv
bkljb25TaXplKGludCBtZWRpYUljb25TaXplKQoreworICAgIEd0a0ljb25TaXplIGljb25TaXpl
ID0gZ3RrX2ljb25fc2l6ZV9mcm9tX25hbWUoIndlYmtpdC1tZWRpYS1idXR0b24tc2l6ZSIpOwor
ICAgIGlmICghaWNvblNpemUpCisgICAgICAgIGljb25TaXplID0gZ3RrX2ljb25fc2l6ZV9yZWdp
c3Rlcigid2Via2l0LW1lZGlhLWJ1dHRvbi1zaXplIiwgbWVkaWFJY29uU2l6ZSwgbWVkaWFJY29u
U2l6ZSk7CisgICAgcmV0dXJuIGljb25TaXplOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpp
bml0TWVkaWFDb2xvcnMoKQoreworICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0
X3N0eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKKyAgICBtX3BhbmVsQ29sb3IgPSBz
dHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF07CisgICAgbV9zbGlkZXJDb2xvciA9IHN0eWxlLT5i
Z1tHVEtfU1RBVEVfQUNUSVZFXTsKKyAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBzdHlsZS0+Ymdb
R1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlh
QnV0dG9ucygpCit7CisgICAgc3RhdGljIGJvb2wgaWNvbnNJbml0aWFsaXplZCA9IGZhbHNlOwor
CisgICAgaWYgKCFpY29uc0luaXRpYWxpemVkKSB7CisgICAgICAgIEd0a0ljb25GYWN0b3J5KiBp
Y29uRmFjdG9yeSA9IGd0a19pY29uX2ZhY3RvcnlfbmV3KCk7CisgICAgICAgIEd0a0ljb25Tb3Vy
Y2UqIGljb25Tb3VyY2UgPSBndGtfaWNvbl9zb3VyY2VfbmV3KCk7CisgICAgICAgIGNvbnN0IGNo
YXIqIGljb25zW10gPSB7ICJhdWRpby12b2x1bWUtaGlnaCIsICJhdWRpby12b2x1bWUtbXV0ZWQi
IH07CisKKyAgICAgICAgZ3RrX2ljb25fZmFjdG9yeV9hZGRfZGVmYXVsdChpY29uRmFjdG9yeSk7
CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoaWNvbnMpOyAr
K2kpIHsKKyAgICAgICAgICAgIGd0a19pY29uX3NvdXJjZV9zZXRfaWNvbl9uYW1lKGljb25Tb3Vy
Y2UsIGljb25zW2ldKTsKKyAgICAgICAgICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfaWNv
bl9zZXRfbmV3KCk7CisgICAgICAgICAgICBndGtfaWNvbl9zZXRfYWRkX3NvdXJjZShpY29uU2V0
LCBpY29uU291cmNlKTsKKyAgICAgICAgICAgIGd0a19pY29uX2ZhY3RvcnlfYWRkKGljb25GYWN0
b3J5LCBpY29uc1tpXSwgaWNvblNldCk7CisgICAgICAgICAgICBndGtfaWNvbl9zZXRfdW5yZWYo
aWNvblNldCk7CisgICAgICAgIH0KKworICAgICAgICBndGtfaWNvbl9zb3VyY2VfZnJlZShpY29u
U291cmNlKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaWNvbkZhY3RvcnkpOworCisgICAgICAg
IGljb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTQ2LDEzICsx
NDgsNiBAQCBSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGsoKQogICAgICwgbV9tZWRpYVNs
aWRlckhlaWdodCgxNCkKICAgICAsIG1fbWVkaWFTbGlkZXJUaHVtYldpZHRoKDEyKQogICAgICwg
bV9tZWRpYVNsaWRlclRodW1iSGVpZ2h0KDEyKQotICAgICwgbV9mdWxsc2NyZWVuQnV0dG9uKDAp
Ci0gICAgLCBtX211dGVCdXR0b24oMCkKLSAgICAsIG1fdW5tdXRlQnV0dG9uKDApCi0gICAgLCBt
X3BsYXlCdXR0b24oMCkKLSAgICAsIG1fcGF1c2VCdXR0b24oMCkKLSAgICAsIG1fc2Vla0JhY2tC
dXR0b24oMCkKLSAgICAsIG1fc2Vla0ZvcndhcmRCdXR0b24oMCkKICNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgogICAgICwgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCh0cnVlKQogI2VuZGlm
CkBAIC0xNzYsNyArMTcxLDggQEAgUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3RrKCkKICAg
ICArK21vekd0a1JlZkNvdW50OwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGluaXRNZWRpYVN0
eWxpbmcoZ3RrX3JjX2dldF9zdHlsZShHVEtfV0lER0VUKGd0a0NvbnRhaW5lcigpKSksIGZhbHNl
KTsKKyAgICBpbml0TWVkaWFDb2xvcnMoKTsKKyAgICBpbml0TWVkaWFCdXR0b25zKCk7CiAjZW5k
aWYKIH0KIApAQCAtMTg3LDE0ICsxODMsNiBAQCBSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1l
R3RrKCkKICAgICBpZiAoIW1vekd0a1JlZkNvdW50KQogICAgICAgICBtb3pfZ3RrX3NodXRkb3du
KCk7CiAKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24uY2xlYXIoKTsKLSAgICBtX211dGVCdXR0b24u
Y2xlYXIoKTsKLSAgICBtX3VubXV0ZUJ1dHRvbi5jbGVhcigpOwotICAgIG1fcGxheUJ1dHRvbi5j
bGVhcigpOwotICAgIG1fcGF1c2VCdXR0b24uY2xlYXIoKTsKLSAgICBtX3NlZWtCYWNrQnV0dG9u
LmNsZWFyKCk7Ci0gICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi5jbGVhcigpOwotCiAgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsKIH0KIApAQCAtMjY2LDYgKzI1NCwxOCBAQCBzdGF0
aWMgR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQogICAgIH0KIH0KIAorR3RrU3RhdGVUeXBlIFJlbmRlclRoZW1lR3RrOjpndGtJY29uU3Rh
dGUoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCit7CisgICAgaWYgKCFpc0VuYWJsZWQocmVu
ZGVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBp
ZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNU
SVZFOworICAgIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdU
S19TVEFURV9QUkVMSUdIVDsKKworICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOworfQorCiBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUg
dHlwZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IGZsYWdzKQogewogICAgIC8vIFBhaW50aW5nIGlz
IGRpc2FibGVkIHNvIGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKQEAgLTQ2NywzMiArNDY3
LDMzIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CiAgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG5vdCBiZSBoYXJkLWNvZGVkLgotICAgIEludFNpemUgc2l6ZSA9IEludFNpemUoMTQsIDE0KTsK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIGdpbnQg
d2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIGd0a19pY29uX3NpemVfbG9va3VwKEdUS19JQ09O
X1NJWkVfTUVOVSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4
ZWQpKTsKIH0KIAotc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElu
cHV0RWxlbWVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0
YXRpYyBJbnRQb2ludCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEludFJlY3Qg
Y2VudGVyZWRSZWN0KHJlY3QpOwogICAgIE5vZGUqIGlucHV0ID0gb2JqZWN0LT5ub2RlKCktPnNo
YWRvd0FuY2VzdG9yTm9kZSgpOyAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVu
dC4KLSAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKSAKLSAgICAgICAgcmV0dXJu
IGNlbnRlcmVkUmVjdDsKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAg
ICAgICByZXR1cm4gSW50UG9pbnQocmVjdC54KCksIHJlY3QueSgpKTsKIAogICAgIC8vIElmIHBv
c3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSByZWN0IHZlcnRpY2FsbHkgaW4g
dGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgogICAgIC8vIFdlIGFsc28gYWRkIG9uZSBwaXhlbCBo
ZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMgcm91bmRlZCB1cCBmb3IgYm94
IGhlaWdodHMKICAgICAvLyB0aGF0IGFyZSBldmVuLCB3aGljaCBsb29rcyBpbiByZWxhdGlvbiB0
byB0aGUgYm94IHRleHQuCiAgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSB0b1JlbmRlckJv
eChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIGNlbnRlcmVk
UmVjdC5zZXRZKGlucHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgp
IC0gY2VudGVyZWRSZWN0LmhlaWdodCgpICsgMSkgLyAyKTsKLSAgICByZXR1cm4gY2VudGVyZWRS
ZWN0OworCisgICAgcmV0dXJuIEludFBvaW50KHJlY3QueCgpLCBpbnB1dENvbnRlbnRCb3gueSgp
ICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIHJlY3QuaGVpZ2h0KCkgKyAxKSAvIDIpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgc3RhdGljIEltYWdlKiBzZWFyY2hJ
bWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24oR1RLX1NUT0NLX0ZJTkQsIHJlY3Qu
d2lkdGgoKSkucmVsZWFzZVJlZigpOwotICAgIEludFJlY3QgY2VudGVyZWRSZWN0KGNlbnRlclJl
Y3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQob2JqZWN0LCByZWN0KSk7Ci0gICAgaS5j
b250ZXh0LT5kcmF3SW1hZ2Uoc2VhcmNoSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNlbnRl
cmVkUmVjdCk7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RL
X1dJREdFVChndGtFbnRyeSgpKSk7CisgICAgSW50UG9pbnQgaWNvblBvaW50KGNlbnRlclJlY3RW
ZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KSk7CisgICAg
cGFpbnRTdG9ja0ljb24ocGFpbnRJbmZvLmNvbnRleHQsIGljb25Qb2ludCwgc3R5bGUsIEdUS19T
VE9DS19GSU5ELAorICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2Jq
ZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0
YXRlKHJlbmRlck9iamVjdCksIEdUS19JQ09OX1NJWkVfTUVOVSk7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkBAIC01MDEsMTggKzUwMiwxOSBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdAogICAg
IHN0eWxlLT5yZXNldEJvcmRlcigpOwogICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKIAotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgaGFyZC1jb2RlZC4KLSAgICBJbnRTaXplIHNp
emUgPSBJbnRTaXplKDE0LCAxNCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndp
ZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKKyAgICBnaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBndGtfaWNv
bl9zaXplX2xvb2t1cChHVEtfSUNPTl9TSVpFX01FTlUsICZ3aWR0aCwgJmhlaWdodCk7CisgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIC8v
IFRPRE86IEJyaWdodGVuaW5nIHVwIHRoZSBpbWFnZSBvbiBob3ZlciBpcyBkZXNpcmFibGUgaGVy
ZSwgSSBiZWxpZXZlLgotICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtVGhlbWVJY29uKEdUS19TVE9DS19DTEVBUiwgcmVjdC53aWR0aCgpKS5yZWxlYXNl
UmVmKCk7Ci0gICAgSW50UmVjdCBjZW50ZXJlZFJlY3QoY2VudGVyUmVjdFZlcnRpY2FsbHlJblBh
cmVudElucHV0RWxlbWVudChvYmplY3QsIHJlY3QpKTsKLSAgICBpLmNvbnRleHQtPmRyYXdJbWFn
ZShjYW5jZWxJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgY2VudGVyZWRSZWN0KTsKKyAgICBH
dGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShHVEtfV0lER0VUKGd0a0VudHJ5
KCkpKTsKKyAgICBJbnRQb2ludCBpY29uUG9pbnQoY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVu
dElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpKTsKKyAgICBwYWludFN0b2NrSWNvbihw
YWludEluZm8uY29udGV4dCwgaWNvblBvaW50LCBzdHlsZSwgR1RLX1NUT0NLX0NMRUFSLAorICAg
ICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHJlbmRlck9iamVj
dCksIEdUS19JQ09OX1NJWkVfTUVOVSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC03NjIs
NyArNzY0LDcgQEAgR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrU2Nyb2xsYmFyKCkKIHZv
aWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKIHsKICNpZiBFTkFC
TEUoVklERU8pCi0gICAgaW5pdE1lZGlhU3R5bGluZyhndGtfcmNfZ2V0X3N0eWxlKEdUS19XSURH
RVQoZ3RrQ29udGFpbmVyKCkpKSwgdHJ1ZSk7CisgICAgaW5pdE1lZGlhQ29sb3JzKCk7CiAjZW5k
aWYKICAgICBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKIH0KQEAgLTc3
Myw0OSArNzc1LDUwIEBAIFN0cmluZyBSZW5kZXJUaGVtZUd0azo6ZXh0cmFNZWRpYUNvbnRyb2xz
U3R5bGVTaGVldCgpCiAgICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNHdGtVc2VyQWdlbnRTdHlsZVNoZWV0KSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwYWludE1lZGlhQnV0dG9uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgciwgSW1hZ2UqIGltYWdlLCBDb2xvciBwYW5lbENv
bG9yLCBpbnQgbWVkaWFJY29uU2l6ZSkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFC
dXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciogaWNvbk5hbWUsIENvbG9yIHBhbmVs
Q29sb3IsIGludCBtZWRpYUljb25TaXplKQogewotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0
UmVjdChyKSwgcGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLAotICAgICAgICAgICAgICAgICAg
ICAgICBJbnRSZWN0KHIueCgpICsgKHIud2lkdGgoKSAtIG1lZGlhSWNvblNpemUpIC8gMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnkoKSArIChyLmhlaWdodCgpIC0gbWVkaWFJ
Y29uU2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSWNvblNp
emUsIG1lZGlhSWNvblNpemUpKTsKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dl
dF9zdHlsZShHVEtfV0lER0VUKGd0a0NvbnRhaW5lcigpKSk7CisgICAgSW50UG9pbnQgaWNvblBv
aW50KHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1lZGlhSWNvblNpemUpIC8gMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIG1lZGlhSWNvblNp
emUpIC8gMik7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QpLCBwYW5lbENv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYWludFN0b2NrSWNvbihjb250ZXh0LCBp
Y29uUG9pbnQsIHN0eWxlLCBpY29uTmFtZSwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Qt
PnN0eWxlKCktPmRpcmVjdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUo
cmVuZGVyT2JqZWN0KSwgZ2V0TWVkaWFCdXR0b25JY29uU2l6ZShtZWRpYUljb25TaXplKSk7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFG
dWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVs
bHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TWVk
aWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHIsIG1fZnVsbHNjcmVlbkJ1dHRvbi5nZXQoKSwg
bV9wYW5lbENvbG9yLCBtX21lZGlhSWNvblNpemUpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0
dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIEdUS19TVE9DS19GVUxM
U0NSRUVOLCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVj
dChvKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1l
bnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBh
aW50SW5mby5jb250ZXh0LCByLCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBtX3VubXV0ZUJ1dHRv
bi5nZXQoKSA6IG1fbXV0ZUJ1dHRvbi5nZXQoKSwgbV9wYW5lbENvbG9yLCBtX21lZGlhSWNvblNp
emUpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZv
LmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/ICJhdWRpby12b2x1bWUtbXV0
ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIiwgbV9wYW5lbENvbG9yLCBtX21lZGlhSWNvblNpemUp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHJl
bmRlck9iamVjdC0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqIGJ1dHRvbiA9IHN0YXRpY19j
YXN0PE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Kj4obm9kZSk7Ci0gICAgcmV0dXJuIHBh
aW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHIsIGJ1dHRvbi0+ZGlzcGxheVR5cGUo
KSA9PSBNZWRpYVBsYXlCdXR0b24gPyBtX3BsYXlCdXR0b24uZ2V0KCkgOiBtX3BhdXNlQnV0dG9u
LmdldCgpLCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgcmV0dXJuIHBhaW50
TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgYnV0dG9u
LT5kaXNwbGF5VHlwZSgpID09IE1lZGlhUGxheUJ1dHRvbiA/IEdUS19TVE9DS19NRURJQV9QTEFZ
IDogR1RLX1NUT0NLX01FRElBX1BBVVNFLCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29u
dGV4dCwgciwgbV9zZWVrQmFja0J1dHRvbi5nZXQoKSwgbV9wYW5lbENvbG9yLCBtX21lZGlhSWNv
blNpemUpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QsIEdUS19TVE9DS19NRURJQV9SRVdJTkQsIG1fcGFuZWxDb2xvciwg
bV9tZWRpYUljb25TaXplKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1l
ZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByLCBtX3NlZWtGb3J3YXJkQnV0dG9uLmdldCgp
LCBtX3BhbmVsQ29sb3IsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFC
dXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgR1RLX1NUT0NLX01F
RElBX0ZPUldBUkQsIG1fcGFuZWxDb2xvciwgbV9tZWRpYUljb25TaXplKTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaAppbmRleCBlYzg0YjZhLi42Y2Q3MjhiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKQEAgLTEzOCw3ICsxMzgsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG9iamVj
dCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIGluaXRNZWRp
YVN0eWxpbmcoR3RrU3R5bGUqIHN0eWxlLCBib29sIGZvcmNlKTsKKyAgICB2b2lkIGluaXRNZWRp
YUNvbG9ycygpOworICAgIHZvaWQgaW5pdE1lZGlhQnV0dG9ucygpOwogICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTcwLDYgKzE3MSwxMCBAQCBwcml2YXRl
OgogICAgIEd0a0NvbnRhaW5lciogZ3RrQ29udGFpbmVyKCkgY29uc3Q7CiAKICAgICBib29sIHBh
aW50UmVuZGVyT2JqZWN0KEd0a1RoZW1lV2lkZ2V0VHlwZSwgUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IGZsYWdzID0gMCk7CisjaWYgRU5B
QkxFKFZJREVPKQorICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hhciogaWNvbk5hbWUsIENvbG9y
IHBhbmVsQ29sb3IsIGludCBtZWRpYUljb25TaXplKTsKKyNlbmRpZgorICAgIEd0a1N0YXRlVHlw
ZSBndGtJY29uU3RhdGUoUmVuZGVyT2JqZWN0Kik7CiAKICAgICBtdXRhYmxlIEd0a1dpZGdldCog
bV9ndGtXaW5kb3c7CiAgICAgbXV0YWJsZSBHdGtDb250YWluZXIqIG1fZ3RrQ29udGFpbmVyOwpA
QCAtMTg2LDEzICsxOTEsNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVy
VGh1bWJXaWR0aDsKICAgICBjb25zdCBpbnQgbV9tZWRpYVNsaWRlclRodW1iSGVpZ2h0OwogCi0g
ICAgUmVmUHRyPEltYWdlPiBtX2Z1bGxzY3JlZW5CdXR0b247Ci0gICAgUmVmUHRyPEltYWdlPiBt
X211dGVCdXR0b247Ci0gICAgUmVmUHRyPEltYWdlPiBtX3VubXV0ZUJ1dHRvbjsKLSAgICBSZWZQ
dHI8SW1hZ2U+IG1fcGxheUJ1dHRvbjsKLSAgICBSZWZQdHI8SW1hZ2U+IG1fcGF1c2VCdXR0b247
Ci0gICAgUmVmUHRyPEltYWdlPiBtX3NlZWtCYWNrQnV0dG9uOwotICAgIFJlZlB0cjxJbWFnZT4g
bV9zZWVrRm9yd2FyZEJ1dHRvbjsKICAgICBHdGtUaGVtZVBhcnRzIG1fdGhlbWVQYXJ0czsKICNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIGJvb2wgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xv
cm1hcDsK
</data>
<flag name="review"
          id="66745"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75901</attachid>
            <date>2010-12-08 07:23:33 -0800</date>
            <delta_ts>2010-12-08 15:50:44 -0800</delta_ts>
            <desc>A new update fixing more issues</desc>
            <filename>stock-icons2.diff</filename>
            <type>text/plain</type>
            <size>18622</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGNlYzlhYS4uN2MwZDc1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0xMi0wOCAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gVXNlIGd0a19pY29uX3NldF9yZW5kZXJfaWNv
bigpIHRvIHJlbmRlciBpY29ucyBpbiBSZW5kZXJUaGVtZUd0aworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA2MjMKKworICAgICAgICBXZSBkb24ndCBu
ZWVkIHRvIGNhY2hlIHRoZSBpY29ucyBzaW5jZSB0aGUgd2lsbCBiZSBjYWNoZWQgYnkgR1RLKywK
KyAgICAgICAgYW5kIHRoZXkgd2lsbCBiZSByZW5kZXJlZCB1c2luZyB0aGUgc3RhdGUgYW5kIHRl
eHQgZGlyZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3RvY2tJY29uKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldE1lZGlhQnV0dG9uSWNvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OmluaXRNZWRpYUNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
aW5pdE1lZGlhQnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6UmVu
ZGVyVGhlbWVHdGspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6On5SZW5kZXJU
aGVtZUd0ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z3RrSWNvblN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2VudGVyUmVjdFZlcnRp
Y2FsbHlJblBhcmVudElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1
bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNlZWtCYWNrQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oOgorCiAyMDEwLTEyLTA4ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MzQ5Mi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAppbmRleCA3YjI1Y2Q5Li43NWJmZDVi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCkBAIC02Niw1NyArNjYs
NTkgQEAgc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJP
YmplY3QoUmVuZGVyT2JqZWN0KiBvKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFF
bGVtZW50Kj4obWVkaWFOb2RlKTsKIH0KIAotc3RhdGljIGdjaGFyKiBnZXRJY29uTmFtZUZvclRl
eHREaXJlY3Rpb24oY29uc3QgY2hhciogYmFzZU5hbWUpCi17Ci0gICAgR1N0cmluZyogbmFtZVdp
dGhEaXJlY3Rpb24gPSBnX3N0cmluZ19uZXcoYmFzZU5hbWUpOwotICAgIEd0a1RleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiA9IGd0a193aWRnZXRfZ2V0X2RlZmF1bHRfZGlyZWN0aW9uKCk7Ci0K
LSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfUlRMKQotICAgICAgICBnX3N0
cmluZ19hcHBlbmQobmFtZVdpdGhEaXJlY3Rpb24sICItcnRsIik7Ci0gICAgZWxzZSBpZiAodGV4
dERpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICBnX3N0cmluZ19hcHBlbmQo
bmFtZVdpdGhEaXJlY3Rpb24sICItbHRyIik7Ci0KLSAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShu
YW1lV2l0aERpcmVjdGlvbiwgRkFMU0UpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0
TWVkaWFTdHlsaW5nKEd0a1N0eWxlKiBzdHlsZSwgYm9vbCBmb3JjZSkKLXsKLSAgICBzdGF0aWMg
Ym9vbCBzdHlsaW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGlmICghc3R5bGluZ0luaXRp
YWxpemVkIHx8IGZvcmNlKSB7Ci0gICAgICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtf
U1RBVEVfTk9STUFMXTsKLSAgICAgICAgbV9zbGlkZXJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RB
VEVfQUNUSVZFXTsKLSAgICAgICAgbV9zbGlkZXJUaHVtYkNvbG9yID0gc3R5bGUtPmJnW0dUS19T
VEFURV9TRUxFQ1RFRF07Ci0KLSAgICAgICAgLy8gTmFtZXMgb2YgdGhlc2UgaWNvbnMgY2FuIHZh
cnkgYmVjYXVzZSBvZiB0ZXh0IGRpcmVjdGlvbi4KLSAgICAgICAgZ2NoYXIqIHBsYXlCdXR0b25J
Y29uTmFtZSA9IGdldEljb25OYW1lRm9yVGV4dERpcmVjdGlvbigiZ3RrLW1lZGlhLXBsYXkiKTsK
LSAgICAgICAgZ2NoYXIqIHNlZWtCYWNrQnV0dG9uSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZvclRl
eHREaXJlY3Rpb24oImd0ay1tZWRpYS1yZXdpbmQiKTsKLSAgICAgICAgZ2NoYXIqIHNlZWtGb3J3
YXJkQnV0dG9uSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZvclRleHREaXJlY3Rpb24oImd0ay1tZWRp
YS1mb3J3YXJkIik7Ci0KLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLmNsZWFyKCk7Ci0gICAg
ICAgIG1fbXV0ZUJ1dHRvbi5jbGVhcigpOwotICAgICAgICBtX3VubXV0ZUJ1dHRvbi5jbGVhcigp
OwotICAgICAgICBtX3BsYXlCdXR0b24uY2xlYXIoKTsKLSAgICAgICAgbV9wYXVzZUJ1dHRvbi5j
bGVhcigpOwotICAgICAgICBtX3NlZWtCYWNrQnV0dG9uLmNsZWFyKCk7Ci0gICAgICAgIG1fc2Vl
a0ZvcndhcmRCdXR0b24uY2xlYXIoKTsKLQotICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJndGstZnVsbHNjcmVlbiIsIG1fbWVkaWFJY29u
U2l6ZSk7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXV0ZUJ1dHRvbiBhbmQgdW5tdXRlQnV0
dG9uIHRha2UgaWNvbnMgcmVmbGVjdGluZwotICAgICAgICAvLyB0aGUgKmN1cnJlbnQqIHN0YXRl
LiBIZW5jZSwgdGhlIHVubXV0ZUJ1dHRvbiByZXByZXNlbnRzIHRoZSAqbXV0ZWQqCi0gICAgICAg
IC8vIHN0YXR1cywgdGhlIG11dGVCdXR0b24gcmVwcmVzZW50cyB0aGUgdGhlbiBjdXJyZW50ICp1
bm11dGVkKiBzdGF0dXMuCi0gICAgICAgIG1fbXV0ZUJ1dHRvbiA9IEltYWdlOjpsb2FkUGxhdGZv
cm1UaGVtZUljb24oImF1ZGlvLXZvbHVtZS1oaWdoIiwgbV9tZWRpYUljb25TaXplKTsKLSAgICAg
ICAgbV91bm11dGVCdXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJhdWRpby12
b2x1bWUtbXV0ZWQiLCBtX21lZGlhSWNvblNpemUpOwotICAgICAgICBtX3BsYXlCdXR0b24gPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KHBsYXlCdXR0b25JY29uTmFtZSksIG1fbWVkaWFJY29uU2l6ZSk7Ci0gICAgICAgIG1fcGF1c2VC
dXR0b24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKCJndGstbWVkaWEtcGF1c2UiLCBt
X21lZGlhSWNvblNpemUpOwotICAgICAgICBtX3NlZWtCYWNrQnV0dG9uID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVRoZW1lSWNvbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzZWVrQmFja0J1
dHRvbkljb25OYW1lKSwgbV9tZWRpYUljb25TaXplKTsKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1
dHRvbiA9IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oc2Vla0ZvcndhcmRCdXR0b25JY29uTmFtZSksIG1fbWVkaWFJY29uU2l6ZSk7Ci0K
LSAgICAgICAgZ19mcmVlKHBsYXlCdXR0b25JY29uTmFtZSk7Ci0gICAgICAgIGdfZnJlZShzZWVr
QmFja0J1dHRvbkljb25OYW1lKTsKLSAgICAgICAgZ19mcmVlKHNlZWtGb3J3YXJkQnV0dG9uSWNv
bk5hbWUpOwotICAgICAgICBzdHlsaW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworc3RhdGljIHZvaWQg
cGFpbnRTdG9ja0ljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYg
aWNvblBvaW50LCBHdGtTdHlsZSogc3R5bGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEd0a1N0YXRl
VHlwZSBzdGF0ZSwgR3RrSWNvblNpemUgaWNvblNpemUpCit7CisgICAgR3RrSWNvblNldCogaWNv
blNldCA9IGd0a19zdHlsZV9sb29rdXBfaWNvbl9zZXQoc3R5bGUsIGljb25OYW1lKTsKKyAgICBQ
bGF0Zm9ybVJlZlB0cjxHZGtQaXhidWY+IGljb24gPSBhZG9wdFBsYXRmb3JtUmVmKGd0a19pY29u
X3NldF9yZW5kZXJfaWNvbihpY29uU2V0LCBzdHlsZSwgZGlyZWN0aW9uLCBzdGF0ZSwgaWNvblNp
emUsIDAsIDApKTsKKworICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVm
KGNyLCBpY29uLmdldCgpLCBpY29uUG9pbnQueCgpLCBpY29uUG9pbnQueSgpKTsKKyAgICBjYWly
b19wYWludChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKK3N0YXRpYyBHdGtJY29u
U2l6ZSBnZXRNZWRpYUJ1dHRvbkljb25TaXplKGludCBtZWRpYUljb25TaXplKQoreworICAgIEd0
a0ljb25TaXplIGljb25TaXplID0gZ3RrX2ljb25fc2l6ZV9mcm9tX25hbWUoIndlYmtpdC1tZWRp
YS1idXR0b24tc2l6ZSIpOworICAgIGlmICghaWNvblNpemUpCisgICAgICAgIGljb25TaXplID0g
Z3RrX2ljb25fc2l6ZV9yZWdpc3Rlcigid2Via2l0LW1lZGlhLWJ1dHRvbi1zaXplIiwgbWVkaWFJ
Y29uU2l6ZSwgbWVkaWFJY29uU2l6ZSk7CisgICAgcmV0dXJuIGljb25TaXplOworfQorCit2b2lk
IFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFDb2xvcnMoKQoreworICAgIEd0a1N0eWxlKiBzdHls
ZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKKyAg
ICBtX3BhbmVsQ29sb3IgPSBzdHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF07CisgICAgbV9zbGlk
ZXJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfQUNUSVZFXTsKKyAgICBtX3NsaWRlclRodW1i
Q29sb3IgPSBzdHlsZS0+YmdbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUd0azo6aW5pdE1lZGlhQnV0dG9ucygpCit7CisgICAgc3RhdGljIGJvb2wgaWNvbnNJbml0
aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKGljb25zSW5pdGlhbGl6ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFBsYXRmb3JtUmVmUHRyPEd0a0ljb25GYWN0b3J5PiBpY29uRmFjdG9yeSA9
IGFkb3B0UGxhdGZvcm1SZWYoZ3RrX2ljb25fZmFjdG9yeV9uZXcoKSk7CisgICAgR3RrSWNvblNv
dXJjZSogaWNvblNvdXJjZSA9IGd0a19pY29uX3NvdXJjZV9uZXcoKTsKKyAgICBjb25zdCBjaGFy
KiBpY29uc1tdID0geyAiYXVkaW8tdm9sdW1lLWhpZ2giLCAiYXVkaW8tdm9sdW1lLW11dGVkIiB9
OworCisgICAgZ3RrX2ljb25fZmFjdG9yeV9hZGRfZGVmYXVsdChpY29uRmFjdG9yeS5nZXQoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhpY29ucyk7ICsraSkg
eworICAgICAgICBndGtfaWNvbl9zb3VyY2Vfc2V0X2ljb25fbmFtZShpY29uU291cmNlLCBpY29u
c1tpXSk7CisgICAgICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfaWNvbl9zZXRfbmV3KCk7
CisgICAgICAgIGd0a19pY29uX3NldF9hZGRfc291cmNlKGljb25TZXQsIGljb25Tb3VyY2UpOwor
ICAgICAgICBndGtfaWNvbl9mYWN0b3J5X2FkZChpY29uRmFjdG9yeS5nZXQoKSwgaWNvbnNbaV0s
IGljb25TZXQpOworICAgICAgICBndGtfaWNvbl9zZXRfdW5yZWYoaWNvblNldCk7CiAgICAgfQor
CisgICAgZ3RrX2ljb25fc291cmNlX2ZyZWUoaWNvblNvdXJjZSk7CisKKyAgICBpY29uc0luaXRp
YWxpemVkID0gdHJ1ZTsKIH0KICNlbmRpZgogCkBAIC0xNDYsMTMgKzE0OCw2IEBAIFJlbmRlclRo
ZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCiAgICAgLCBtX21lZGlhU2xpZGVySGVpZ2h0KDE0KQog
ICAgICwgbV9tZWRpYVNsaWRlclRodW1iV2lkdGgoMTIpCiAgICAgLCBtX21lZGlhU2xpZGVyVGh1
bWJIZWlnaHQoMTIpCi0gICAgLCBtX2Z1bGxzY3JlZW5CdXR0b24oMCkKLSAgICAsIG1fbXV0ZUJ1
dHRvbigwKQotICAgICwgbV91bm11dGVCdXR0b24oMCkKLSAgICAsIG1fcGxheUJ1dHRvbigwKQot
ICAgICwgbV9wYXVzZUJ1dHRvbigwKQotICAgICwgbV9zZWVrQmFja0J1dHRvbigwKQotICAgICwg
bV9zZWVrRm9yd2FyZEJ1dHRvbigwKQogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgLCBt
X3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwKHRydWUpCiAjZW5kaWYKQEAgLTE3Niw3ICsxNzEs
OCBAQCBSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGsoKQogICAgICsrbW96R3RrUmVmQ291
bnQ7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaW5pdE1lZGlhU3R5bGluZyhndGtfcmNfZ2V0
X3N0eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKSwgZmFsc2UpOworICAgIGluaXRNZWRp
YUNvbG9ycygpOworICAgIGluaXRNZWRpYUJ1dHRvbnMoKTsKICNlbmRpZgogfQogCkBAIC0xODcs
MTQgKzE4Myw2IEBAIFJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQogICAgIGlmICgh
bW96R3RrUmVmQ291bnQpCiAgICAgICAgIG1vel9ndGtfc2h1dGRvd24oKTsKIAotICAgIG1fZnVs
bHNjcmVlbkJ1dHRvbi5jbGVhcigpOwotICAgIG1fbXV0ZUJ1dHRvbi5jbGVhcigpOwotICAgIG1f
dW5tdXRlQnV0dG9uLmNsZWFyKCk7Ci0gICAgbV9wbGF5QnV0dG9uLmNsZWFyKCk7Ci0gICAgbV9w
YXVzZUJ1dHRvbi5jbGVhcigpOwotICAgIG1fc2Vla0JhY2tCdXR0b24uY2xlYXIoKTsKLSAgICBt
X3NlZWtGb3J3YXJkQnV0dG9uLmNsZWFyKCk7Ci0KICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9n
dGtXaW5kb3cpOwogfQogCkBAIC0yNjYsNiArMjU0LDE4IEBAIHN0YXRpYyBHdGtUZXh0RGlyZWN0
aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgfQogfQog
CitHdGtTdGF0ZVR5cGUgUmVuZGVyVGhlbWVHdGs6Omd0a0ljb25TdGF0ZShSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCkKK3sKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpKQorICAg
ICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAgIGlmIChpc1ByZXNzZWQocmVu
ZGVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7CisgICAgaWYgKGlz
SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hU
OworCisgICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50UmVuZGVyT2JqZWN0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBpbnQgZmxhZ3MpCiB7CiAgICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVz
dCBjbGFpbSB0byBoYXZlIHN1Y2NlZWRlZApAQCAtNDY3LDMyICs0NjcsMzMgQEAgdm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHMKICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKICAgICBzdHlsZS0+cmVz
ZXRQYWRkaW5nKCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlIGhhcmQtY29k
ZWQuCi0gICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZSgxNCwgMTQpOwotICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgZ2ludCB3aWR0aCA9IDAsIGhlaWdo
dCA9IDA7CisgICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoR1RLX0lDT05fU0laRV9NRU5VLCAmd2lk
dGgsICZoZWlnaHQpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkpOwogfQogCi1zdGF0
aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorc3RhdGljIEludFBvaW50IGNl
bnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSW50UmVjdCBjZW50ZXJlZFJlY3QocmVj
dCk7CiAgICAgTm9kZSogaW5wdXQgPSBvYmplY3QtPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCk7IC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgotICAgIGlmICghaW5w
dXQtPnJlbmRlcmVyKCktPmlzQm94KCkpIAotICAgICAgICByZXR1cm4gY2VudGVyZWRSZWN0Owor
ICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiByZWN0
LnRvcExlZnQoKTsKIAogICAgIC8vIElmIHBvc3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRl
IG9mIHRoZSByZWN0IHZlcnRpY2FsbHkgaW4gdGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgogICAg
IC8vIFdlIGFsc28gYWRkIG9uZSBwaXhlbCBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3Jk
aW5hdGUgaXMgcm91bmRlZCB1cCBmb3IgYm94IGhlaWdodHMKICAgICAvLyB0aGF0IGFyZSBldmVu
LCB3aGljaCBsb29rcyBpbiByZWxhdGlvbiB0byB0aGUgYm94IHRleHQuCiAgICAgSW50UmVjdCBp
bnB1dENvbnRlbnRCb3ggPSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRl
Q29udGVudEJveCgpOwotICAgIGNlbnRlcmVkUmVjdC5zZXRZKGlucHV0Q29udGVudEJveC55KCkg
KyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gY2VudGVyZWRSZWN0LmhlaWdodCgpICsgMSkg
LyAyKTsKLSAgICByZXR1cm4gY2VudGVyZWRSZWN0OworCisgICAgcmV0dXJuIEludFBvaW50KHJl
Y3QueCgpLCBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAt
IHJlY3QuaGVpZ2h0KCkgKyAxKSAvIDIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgc3RhdGljIEltYWdlKiBzZWFyY2hJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVt
ZUljb24oR1RLX1NUT0NLX0ZJTkQsIHJlY3Qud2lkdGgoKSkucmVsZWFzZVJlZigpOwotICAgIElu
dFJlY3QgY2VudGVyZWRSZWN0KGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1l
bnQob2JqZWN0LCByZWN0KSk7Ci0gICAgaS5jb250ZXh0LT5kcmF3SW1hZ2Uoc2VhcmNoSW1hZ2Us
IENvbG9yU3BhY2VEZXZpY2VSR0IsIGNlbnRlcmVkUmVjdCk7CisgICAgR3RrU3R5bGUqIHN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtFbnRyeSgpKSk7CisgICAgSW50
UG9pbnQgaWNvblBvaW50KGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQo
cmVuZGVyT2JqZWN0LCByZWN0KSk7CisgICAgcGFpbnRTdG9ja0ljb24ocGFpbnRJbmZvLmNvbnRl
eHQsIGljb25Qb2ludCwgc3R5bGUsIEdUS19TVE9DS19GSU5ELAorICAgICAgICAgICAgICAgICAg
IGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisg
ICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHJlbmRlck9iamVjdCksIEdUS19JQ09OX1NJ
WkVfTUVOVSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01MDEsMTggKzUwMiwxOSBAQCB2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdAogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwogICAgIHN0
eWxlLT5yZXNldFBhZGRpbmcoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUg
aGFyZC1jb2RlZC4KLSAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKDE0LCAxNCk7Ci0gICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBnaW50IHdpZHRoID0g
MCwgaGVpZ2h0ID0gMDsKKyAgICBndGtfaWNvbl9zaXplX2xvb2t1cChHVEtfSUNPTl9TSVpFX01F
TlUsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIC8vIFRPRE86IEJyaWdodGVuaW5nIHVwIHRoZSBpbWFn
ZSBvbiBob3ZlciBpcyBkZXNpcmFibGUgaGVyZSwgSSBiZWxpZXZlLgotICAgIHN0YXRpYyBJbWFn
ZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKEdUS19TVE9DS19D
TEVBUiwgcmVjdC53aWR0aCgpKS5yZWxlYXNlUmVmKCk7Ci0gICAgSW50UmVjdCBjZW50ZXJlZFJl
Y3QoY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChvYmplY3QsIHJlY3Qp
KTsKLSAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShjYW5jZWxJbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgY2VudGVyZWRSZWN0KTsKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dl
dF9zdHlsZShHVEtfV0lER0VUKGd0a0VudHJ5KCkpKTsKKyAgICBJbnRQb2ludCBpY29uUG9pbnQo
Y2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJl
Y3QpKTsKKyAgICBwYWludFN0b2NrSWNvbihwYWludEluZm8uY29udGV4dCwgaWNvblBvaW50LCBz
dHlsZSwgR1RLX1NUT0NLX0NMRUFSLAorICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rp
b24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAg
ICAgZ3RrSWNvblN0YXRlKHJlbmRlck9iamVjdCksIEdUS19JQ09OX1NJWkVfTUVOVSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCkBAIC03NjIsNyArNzY0LDcgQEAgR3RrV2lkZ2V0KiBSZW5kZXJU
aGVtZUd0azo6Z3RrU2Nyb2xsYmFyKCkKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29s
b3JzRGlkQ2hhbmdlKCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaW5pdE1lZGlhU3R5bGlu
ZyhndGtfcmNfZ2V0X3N0eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKSwgdHJ1ZSk7Cisg
ICAgaW5pdE1lZGlhQ29sb3JzKCk7CiAjZW5kaWYKICAgICBSZW5kZXJUaGVtZTo6cGxhdGZvcm1D
b2xvcnNEaWRDaGFuZ2UoKTsKIH0KQEAgLTc3Myw0OSArNzc1LDUwIEBAIFN0cmluZyBSZW5kZXJU
aGVtZUd0azo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiAgICAgcmV0dXJuIFN0cmlu
ZyhtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJv
bHNHdGtVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwYWlu
dE1lZGlhQnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgciwg
SW1hZ2UqIGltYWdlLCBDb2xvciBwYW5lbENvbG9yLCBpbnQgbWVkaWFJY29uU2l6ZSkKK2Jvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
Y2hhciogaWNvbk5hbWUpCiB7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHIpLCBw
YW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
aW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsCi0gICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3Qoci54KCkgKyAoci53aWR0aCgpIC0gbWVkaWFJY29uU2l6ZSkgLyAyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHIueSgpICsgKHIuaGVpZ2h0KCkgLSBtZWRpYUljb25TaXplKSAv
IDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJY29uU2l6ZSwgbWVkaWFJ
Y29uU2l6ZSkpOworICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKEdU
S19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKKyAgICBJbnRQb2ludCBpY29uUG9pbnQocmVjdC54
KCkgKyAocmVjdC53aWR0aCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIsCisgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8g
Mik7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHBhaW50U3RvY2tJY29uKGNvbnRleHQsIGljb25Q
b2ludCwgc3R5bGUsIGljb25OYW1lLCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkpLAorICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZShyZW5k
ZXJPYmplY3QpLCBnZXRNZWRpYUJ1dHRvbkljb25TaXplKG1fbWVkaWFJY29uU2l6ZSkpOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVs
bHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1bGxz
Y3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1lZGlh
QnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByLCBtX2Z1bGxzY3JlZW5CdXR0b24uZ2V0KCksIG1f
cGFuZWxDb2xvciwgbV9tZWRpYUljb25TaXplKTsKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRv
bihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBHVEtfU1RPQ0tfRlVMTFND
UkVFTik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gZ2V0TWVk
aWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChvKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCk7
CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByLCBtZWRpYUVsZW1lbnQt
Pm11dGVkKCkgPyBtX3VubXV0ZUJ1dHRvbi5nZXQoKSA6IG1fbXV0ZUJ1dHRvbi5nZXQoKSwgbV9w
YW5lbENvbG9yLCBtX21lZGlhSWNvblNpemUpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9u
KHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0
ZWQoKSA/ICJhdWRpby12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIik7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcmVuZGVyT2Jq
ZWN0LT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogYnV0dG9uID0gc3RhdGljX2Nhc3Q8TWVk
aWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKTsKLSAgICByZXR1cm4gcGFpbnRNZWRp
YUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgciwgYnV0dG9uLT5kaXNwbGF5VHlwZSgpID09IE1l
ZGlhUGxheUJ1dHRvbiA/IG1fcGxheUJ1dHRvbi5nZXQoKSA6IG1fcGF1c2VCdXR0b24uZ2V0KCks
IG1fcGFuZWxDb2xvciwgbV9tZWRpYUljb25TaXplKTsKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1
dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBidXR0b24tPmRpc3Bs
YXlUeXBlKCkgPT0gTWVkaWFQbGF5QnV0dG9uID8gR1RLX1NUT0NLX01FRElBX1BMQVkgOiBHVEtf
U1RPQ0tfTUVESUFfUEFVU0UpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
U2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVr
QmFja0J1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFC
dXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHIsIG1fc2Vla0JhY2tCdXR0b24uZ2V0KCksIG1fcGFu
ZWxDb2xvciwgbV9tZWRpYUljb25TaXplKTsKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihy
ZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBHVEtfU1RPQ0tfTUVESUFfUkVX
SU5EKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBh
aW50SW5mby5jb250ZXh0LCByLCBtX3NlZWtGb3J3YXJkQnV0dG9uLmdldCgpLCBtX3BhbmVsQ29s
b3IsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVy
T2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgR1RLX1NUT0NLX01FRElBX0ZPUldBUkQp
OwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IGVjODRiNmEuLmNmNDBmYzgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApAQCAtMTM4LDcgKzEzOCw4IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
ck9iamVjdCogb2JqZWN0KSBjb25zdDsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFs
IHZvaWQgaW5pdE1lZGlhU3R5bGluZyhHdGtTdHlsZSogc3R5bGUsIGJvb2wgZm9yY2UpOworICAg
IHZvaWQgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgdm9pZCBpbml0TWVkaWFCdXR0b25zKCk7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xNzAsNiArMTcx
LDEwIEBAIHByaXZhdGU6CiAgICAgR3RrQ29udGFpbmVyKiBndGtDb250YWluZXIoKSBjb25zdDsK
IAogICAgIGJvb2wgcGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlLCBSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgZmxhZ3Mg
PSAwKTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgYm9vbCBwYWludE1lZGlhQnV0dG9uKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBjaGFyKiBp
Y29uTmFtZSk7CisjZW5kaWYKKyAgICBHdGtTdGF0ZVR5cGUgZ3RrSWNvblN0YXRlKFJlbmRlck9i
amVjdCopOwogCiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93OwogICAgIG11dGFi
bGUgR3RrQ29udGFpbmVyKiBtX2d0a0NvbnRhaW5lcjsKQEAgLTE4NiwxMyArMTkxLDYgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBpbnQgbV9tZWRpYVNsaWRlclRodW1iV2lkdGg7CiAgICAgY29uc3Qg
aW50IG1fbWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKIAotICAgIFJlZlB0cjxJbWFnZT4gbV9mdWxs
c2NyZWVuQnV0dG9uOwotICAgIFJlZlB0cjxJbWFnZT4gbV9tdXRlQnV0dG9uOwotICAgIFJlZlB0
cjxJbWFnZT4gbV91bm11dGVCdXR0b247Ci0gICAgUmVmUHRyPEltYWdlPiBtX3BsYXlCdXR0b247
Ci0gICAgUmVmUHRyPEltYWdlPiBtX3BhdXNlQnV0dG9uOwotICAgIFJlZlB0cjxJbWFnZT4gbV9z
ZWVrQmFja0J1dHRvbjsKLSAgICBSZWZQdHI8SW1hZ2U+IG1fc2Vla0ZvcndhcmRCdXR0b247CiAg
ICAgR3RrVGhlbWVQYXJ0cyBtX3RoZW1lUGFydHM7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
ICAgICBib29sIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXA7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>