<?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>35550</bug_id>
          
          <creation_ts>2010-03-01 15:24:36 -0800</creation_ts>
          <short_desc>Allow a plugin to participate in the browser&apos;s print workflow.</short_desc>
          <delta_ts>2010-03-10 15:28:44 -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>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>sanjeevr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>fishd</cc>
    
    <cc>jam</cc>
    
    <cc>kdecker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>194843</commentid>
    <comment_count>0</comment_count>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-01 15:24:36 -0800</bug_when>
    <thetext>I am working on extending the Pepper NPAPI extensions interface to allow a plugin to support printing. The current NPP_Print interface has a few drawbacks. For one, the interface is platform dependent (it expects an HDC on Windows etc). Also, it expects a full-page plugin to completely control the print workflow (i.e. show a page setup dialog print dialog etc). This may not be possible for plugins running in a sandbox (e.g. the Chromium sandbox). Instead, the idea is to extend the API to allow us to query information like number of pages to print from the plugin and have the browser put up the print dialog (just like it would in the case of printing a web page). In addition, the plugin would support APIs to print a specific page in a raster or a vector format given the user-selected print settings.

To make this possible, we need to add some printing interface methods to WebCore::Widget. In addition we need to add support in Chromium&apos;s implementation of WebKit::WebFrame to allow us to bypass Webkit and go to the plugin directly for printing needs (if the plugin supports the new custom print interfaces).

I am working on making these changes and plan to submit a patch for review soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194845</commentid>
    <comment_count>1</comment_count>
      <attachid>49757</attachid>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-01 15:32:04 -0800</bug_when>
    <thetext>Created attachment 49757
WebCore changes for plugin print.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194846</commentid>
    <comment_count>2</comment_count>
      <attachid>49758</attachid>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-01 15:32:40 -0800</bug_when>
    <thetext>Created attachment 49758
Chromium changes for plugin print</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196594</commentid>
    <comment_count>3</comment_count>
      <attachid>49757</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-05 12:48:58 -0800</bug_when>
    <thetext>Comment on attachment 49757
WebCore changes for plugin print.

&gt; Index: loader/PluginDocument.cpp

&gt; +    static Widget* PluginWidgetFromDocument(Document* doc);

nit: use camelCase naming


&gt; +Widget* PluginTokenizer::PluginWidgetFromDocument(Document* doc)
&gt; +{
&gt; +    ASSERT(doc);
&gt; +    RefPtr&lt;Element&gt; body = doc-&gt;body();
&gt; +    if (body) {
&gt; +        RefPtr&lt;Node&gt; embedNode = body-&gt;firstChild();
&gt; +        RefPtr&lt;HTMLEmbedElement&gt; embedElement = static_cast&lt;HTMLEmbedElement*&gt;(embedNode.get());
&gt; +        if (embedElement) {
&gt; +            RenderWidget* renderer = toRenderWidget(embedElement-&gt;renderer());
&gt; +            if (renderer)
&gt; +                return renderer-&gt;widget();
&gt; +        }
&gt; +    }
&gt; +    return 0;
&gt; +}
&gt; +

I would write the above a bit differently.  Like this:

Widget* PluginTokenizer::pluginWidgetFromDocument(Document* doc)
{
    ASSERT(doc);
    RefPtr&lt;Element&gt; body = doc-&gt;body();
    if (body) {
        RefPtr&lt;Node&gt; node = body-&gt;firstChild();
        if (node &amp;&amp; node-&gt;renderer())
            return toRenderEmbeddedObject(node-&gt;renderer())-&gt;widget();
    }
    return 0;
}

We could also add a check to verify that node-&gt;renderer()-&gt;isEmbeddedObject()
returns true, but it&apos;s also fine to leave that as a debug-only check.  See
the implementation of toRenderEmbeddedObject.


&gt; Index: platform/Widget.h
...
&gt; +    // Virtual methods for printing. The widget can support custom printing
&gt; +    // (which means it controls the layout, number of pages etc). This typically
&gt; +    // happens if the widget is hosting a plugin. In the below methods, printableArea
&gt; +    // is in points (a point is 1/72 of an inch).
&gt; +    virtual bool supportsCustomPrint() const { return false; }
&gt; +    virtual int getNumPages(const IntRect&amp; printableArea, int printerDpi) const { return 0; }
&gt; +    virtual void printPage(int pageNumber, GraphicsContext* gc, const IntRect&amp; printableArea, int printerDpi) {}

Since you aren&apos;t calling these methods from WebCore, it turns out that
there is another option.  From the WebKit layer, if the Document is a
PluginDocument, then we can just get the pluginWidget, and cast that to
WebPluginContainerImpl.  That might be better than adding these methods
to WebCore::Widget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196602</commentid>
    <comment_count>4</comment_count>
      <attachid>49758</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-05 13:05:19 -0800</bug_when>
    <thetext>Comment on attachment 49758
Chromium changes for plugin print

&gt; Index: public/WebFrame.h
...
&gt; -    // Reformats the WebFrame for printing.  pageSize is the page size in
&gt; -    // pixels.  Returns the number of pages that can be printed at the
&gt; -    // given page size.
&gt; -    virtual int printBegin(const WebSize&amp; pageSize) = 0;
&gt; +    // Reformats the WebFrame for printing. pageSize is the page size in
&gt; +    // points (a point in 1/72 of an inch). printer_dpi is the user selected,

nit: printer_dpi -&gt; printerDPI

in webkit, when you have an acronym, it should either be all uppercase or all
lowercase.  it is only all lowercase if it forms the first word of a name.

see http://webkit.org/coding/coding-style.html


&gt; +    // DPI for the printer. Returns the number of pages that
&gt; +    // can be printed at the given page size. The out param useBrowserOverlays
&gt; +    // specifies whether the browser process should use its overlays (header,
&gt; +    // footer, margins etc) or whether the renderer controls this.
&gt; +    virtual int printBegin(const WebSize&amp; pageSize, int printerDpi = 72,

printerDpi -&gt; printerDPI


&gt; Index: public/WebPlugin.h
...
&gt; +    // Printing interface. In the below methods, printableArea
&gt; +    // is in points (a point is 1/72 of an inch).
&gt; +    // These methods have default implementations so as to not break existing
&gt; +    // Chromium builds. They will be made pure virtual once the corresponding
&gt; +    // Chromium patch lands.
&gt; +    virtual bool supportsCustomPrint() { return false; }
&gt; +    virtual int getNumPages(const WebRect&amp; printableArea, int printerDpi) { return 0; }
&gt; +    virtual bool printPage(int pageNumber, WebCanvas* canvas, const WebRect&amp; printableArea, int printerDpi) { return false; }

in webkit style, names should be spelled out.  so, getNumPages -&gt; getNumberOfPages.

Or, why not use a similar API as was designed for WebFrame?

  bool supportsPrinting();
  int printBegin(const WebSize&amp; pageSize, int printerDPI);  // returns number of pages that can be printed
  void printPage(int pageNumber, WebCanvas*);
  void printEnd();

Maybe this is too incompatible with the ChromePrintContext?

Q: Do you need printableArea to be a rect?  It can&apos;t be a WebSize like it is for WebFrame?


&gt; Index: src/WebFrameImpl.cpp
...
&gt; +    virtual void end()
&gt;      {
&gt; +      PrintContext::end();

nit: indentation


&gt; +    virtual void computePageRects(const FloatRect&amp; printRect, float headerHeight, float footerHeight, float userScaleFactor, float&amp; outPageHeight)
&gt; +    {
&gt; +      return PrintContext::computePageRects(printRect, headerHeight, footerHeight, userScaleFactor, outPageHeight);
&gt; +    }

nit: indentation


&gt; +
&gt; +    virtual int pageCount() const
&gt; +    {
&gt; +      return PrintContext::pageCount();

nit: indentation


&gt; +    }
&gt; +
&gt; +    virtual bool ShouldUseBrowserOverlays() const

nit: ShouldUse -&gt; shouldUse


&gt; +int WebFrameImpl::printBegin(const WebSize&amp; pageSize, int printerDpi, bool *useBrowserOverlays)
&gt;  {
&gt;      ASSERT(!frame()-&gt;document()-&gt;isFrameSet());
&gt; +    // If this is a plugin document, check if the plugin supports its own
&gt; +    // printing. If it does, we will delegate all printing to that.
&gt; +    if (frame()-&gt;document()-&gt;isPluginDocument()) {
&gt; +        PluginDocument* pluginDocument = static_cast&lt;PluginDocument*&gt;(frame()-&gt;document());
&gt; +        WebCore::Widget * pluginWidget = pluginDocument-&gt;pluginWidget();

There is a &apos;using namespace WebCore&apos; at the top of this file, so you shouldn&apos;t
need to write &quot;WebCore::&quot; anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196740</commentid>
    <comment_count>5</comment_count>
      <attachid>50133</attachid>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-05 15:35:47 -0800</bug_when>
    <thetext>Created attachment 50133
Updated patch with code review changes

Updated patch with code review changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196741</commentid>
    <comment_count>6</comment_count>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-05 15:37:23 -0800</bug_when>
    <thetext>I made almost all the changes you suggested. I used a rect for PrintableArea because it is possible that you want the plugin to print within a portion of the entire page.
Also I left the print interface for WebPluginContainerImpl as is because the plugin is not expected to maintain any state between printBegin and printEnd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197834</commentid>
    <comment_count>7</comment_count>
      <attachid>50133</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-09 16:21:31 -0800</bug_when>
    <thetext>Comment on attachment 50133
Updated patch with code review changes

&gt; Index: WebCore/loader/PluginDocument.cpp
...
&gt; -    
&gt; +
&gt; +Widget* PluginDocument::pluginWidget()
&gt; +{
&gt; +    return PluginTokenizer::pluginWidgetFromDocument(this);
&gt;  }
&gt; +}

nit: please preserve the new line before the last &quot;}&quot;


&gt; Index: WebCore/loader/PluginDocument.h
...

nit: please preserve the new line after the &quot;{&quot;

&gt;  namespace WebCore {
&gt; -    
&gt; +class Widget;
&gt;  class PluginDocument : public HTMLDocument {


&gt; Index: WebKit/chromium/public/WebPlugin.h
...
&gt; +    // Printing interface. In the below methods, printableArea
&gt; +    // is in points (a point is 1/72 of an inch).
&gt; +    // These methods have default implementations so as to not break existing
&gt; +    // Chromium builds. They will be made pure virtual once the corresponding
&gt; +    // Chromium patch lands.
&gt; +    virtual bool supportsCustomPrint() { return false; }

Instead of supportsCustomPrint, how about a name that is consistent with
printPage?  Like supportsPaginatedPrinting or canPrintPage?  That
way it is clear that we mean that the printPage method is supported.


&gt; +    virtual int getNumberOfPages(const WebRect&amp; printableArea, int printerDPI) { return 0; }
&gt; +    virtual bool printPage(int pageNumber, WebCanvas* canvas, const WebRect&amp; printableArea, int printerDPI) { return false; }

I&apos;m still a bit surprised that we wouldn&apos;t want there to be some state
held by the plugin here.  This API suggests that any complex page layout
required to compute the number of pages in a document would need to be
done twice.  Or, the implementation would need to do some caching.

This is why the begin/print/end pattern could be better.


R- because of nits, but I would like to discuss the API a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197849</commentid>
    <comment_count>8</comment_count>
      <attachid>50362</attachid>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-09 17:44:29 -0800</bug_when>
    <thetext>Created attachment 50362
Updated patch with code review changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197876</commentid>
    <comment_count>9</comment_count>
      <attachid>50362</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-09 21:07:34 -0800</bug_when>
    <thetext>Comment on attachment 50362
Updated patch with code review changes

&gt; Index: WebCore/loader/PluginDocument.cpp
...
&gt; +Widget* PluginTokenizer::pluginWidgetFromDocument(Document* doc)
&gt; +{
&gt; +    ASSERT(doc);
&gt; +    RefPtr&lt;Element&gt; body = doc-&gt;body();
&gt; +    if (body) {
&gt; +        RefPtr&lt;Node&gt; node = body-&gt;firstChild();
&gt; +        if (node &amp;&amp; node-&gt;renderer()) {
&gt; +            ASSERT(node-&gt;renderer()-&gt;isEmbeddedObject());
&gt; +            return toRenderEmbeddedObject(node-&gt;renderer())-&gt;widget();
&gt; +        }
&gt; +    }
&gt; +    return 0;
&gt; +}
&gt; +
&gt; +
&gt;  void PluginTokenizer::write(const SegmentedString&amp;, bool)

nit: ^^^ only one new line between methods.


&gt; Index: WebKit/chromium/public/WebPlugin.h
...
&gt; +    // Printing interface. In the below methods, printableArea
&gt; +    // is in points (a point is 1/72 of an inch).
&gt; +    // These methods have default implementations so as to not break existing
&gt; +    // Chromium builds. They will be made pure virtual once the corresponding
&gt; +    // Chromium patch lands.
&gt; +    virtual bool supportsPaginatedPrint() { return false; }
&gt; +    virtual int printBegin(const WebRect&amp; printableArea, int printerDPI) { return 0; }
&gt; +    virtual bool printPage(int pageNumber, WebCanvas* canvas) { return false; }
&gt; +    virtual void printEnd() { }

^^^ some documentation for these methods would be good since this is
the public API.

also, it is OK to have default implementations for methods in the
WebKit API.  i actually intended to give all methods on WebPlugin
default implementations but somehow forgot.


&gt; Index: WebKit/chromium/src/WebFrameImpl.cpp

&gt; +class ChromePluginPrintContext : public ChromePrintContext {
&gt; +public:
&gt; +    ChromePluginPrintContext(Frame* frame, int printerDPI)
&gt; +        : ChromePrintContext(frame), m_pageCount(0), m_printerDPI(printerDPI)
&gt; +    {
&gt; +        // This HAS to be a frame hosting a full-mode plugin
&gt; +        ASSERT(frame-&gt;document()-&gt;isPluginDocument());
&gt; +    }
&gt; +
&gt; +    virtual void begin(float width)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    virtual void end()
&gt; +    {
&gt; +        PluginDocument* pluginDocument = static_cast&lt;PluginDocument*&gt;(m_frame-&gt;document());
&gt; +        WebPluginContainerImpl * pluginContainer = reinterpret_cast&lt;WebPluginContainerImpl *&gt;(pluginDocument-&gt;pluginWidget());

^^^ that reinterpret_cast can be a static_cast since a
WebPluginContainerImpl &quot;is a&quot; WebCore::Widget.

also, since the code to get the pluginContainer for this class
is repeated, it would be good to put it in a helper function.


&gt; +int WebFrameImpl::printBegin(const WebSize&amp; pageSize, int printerDPI, bool *useBrowserOverlays)
&gt;  {
&gt;      ASSERT(!frame()-&gt;document()-&gt;isFrameSet());
&gt; +    // If this is a plugin document, check if the plugin supports its own
&gt; +    // printing. If it does, we will delegate all printing to that.
&gt; +    if (frame()-&gt;document()-&gt;isPluginDocument()) {
&gt; +        PluginDocument* pluginDocument = static_cast&lt;PluginDocument*&gt;(frame()-&gt;document());
&gt; +        WebPluginContainerImpl * pluginContainer = reinterpret_cast&lt;WebPluginContainerImpl *&gt;(pluginDocument-&gt;pluginWidget());

The same code appears here too.  Maybe the helper function should be
at file scope so it can be used by this class as well.


&gt; Index: WebKit/chromium/src/WebPluginContainerImpl.h
...
&gt; +    // Virtual methods for printing. The plugin can support custom printing
&gt; +    // (which means it controls the layout, number of pages etc). This typically
&gt; +    // happens if the widget is hosting a plugin. In the below methods, printableArea
&gt; +    // is in points (a point is 1/72 of an inch) with the origin of the rect being
&gt; +    // the top-left corner of the frame
&gt; +    virtual bool supportsPaginatedPrint() const;
&gt; +    virtual int printBegin(const WebCore::IntRect&amp; printableArea, int printerDPI) const;
&gt; +    virtual void printPage(int pageNumber, WebCore::GraphicsContext* gc);
&gt; +    virtual void printEnd();

do these ones need to be virtual?  maybe that is leftover from
when these were overrides of WebCore::Widget methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197885</commentid>
    <comment_count>10</comment_count>
      <attachid>50370</attachid>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-09 21:51:46 -0800</bug_when>
    <thetext>Created attachment 50370
Updated patch with code review changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197886</commentid>
    <comment_count>11</comment_count>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-09 21:52:28 -0800</bug_when>
    <thetext>Made all the changes and uploaded a new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197887</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-09 21:56:23 -0800</bug_when>
    <thetext>Attachment 50370 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/WebFrameImpl.cpp:256:  Use 0 instead of NULL.  [readability/null] [5]
WebKit/chromium/src/WebFrameImpl.cpp:258:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197888</commentid>
    <comment_count>13</comment_count>
      <attachid>50370</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-09 22:09:48 -0800</bug_when>
    <thetext>Comment on attachment 50370
Updated patch with code review changes

&gt; +static WebPluginContainerImpl* pluginContainerFromFrame(Frame* frame)
&gt; +{
&gt; +    if (!frame)
&gt; +        return NULL;
&gt; +    if (!frame-&gt;document() || !frame-&gt;document()-&gt;isPluginDocument())
&gt; +        return NULL;
&gt; +    PluginDocument* pluginDocument = static_cast&lt;PluginDocument*&gt;(frame-&gt;document());
&gt; +    return static_cast&lt;WebPluginContainerImpl *&gt;(pluginDocument-&gt;pluginWidget());
&gt; +}

As the style bot says, NULL -&gt; 0

R=me otherwise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198165</commentid>
    <comment_count>14</comment_count>
      <attachid>50407</attachid>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-10 09:08:50 -0800</bug_when>
    <thetext>Created attachment 50407
Fixed style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198166</commentid>
    <comment_count>15</comment_count>
    <who name="">sanjeevr</who>
    <bug_when>2010-03-10 09:09:11 -0800</bug_when>
    <thetext>Fixed style issues and uploaded a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198385</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-10 15:28:44 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/55814</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49757</attachid>
            <date>2010-03-01 15:32:04 -0800</date>
            <delta_ts>2010-03-05 15:35:47 -0800</delta_ts>
            <desc>WebCore changes for plugin print.</desc>
            <filename>PluginPrintWebCore.patch</filename>
            <type>text/plain</type>
            <size>3681</size>
            <attacher>sanjeevr</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTUz
ODApDQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDE3IEBADQorMjAx
MC0wMy0wMSAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8c2FuamVldnJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGEg
cGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93c2VyJ3MgcHJpbnQgd29ya2Zsb3cuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTU1MAorCisg
ICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvUGx1
Z2luRG9jdW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldpZGdldDo6c3VwcG9ydHNDdXN0b21QcmludCk6CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXQ6OmdldE51bVBhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cHJpbnRQYWdl
KToKKwogMjAxMC0wMy0wMSAgRnJpZHJpY2ggU3RyYmEgIDxmcmlkcmljaC5zdHJiYUBibHVld2lu
LmNoPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6IGxvYWRl
ci9QbHVnaW5Eb2N1bWVudC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsb2FkZXIvUGx1Z2luRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiA1NTI1MCkNCisrKyBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpDQpAQCAtNDcsNiArNDcsNyBAQA0KIGNsYXNzIFBsdWdpblRva2VuaXplciA6
IHB1YmxpYyBUb2tlbml6ZXIgewogcHVibGljOgogICAgIFBsdWdpblRva2VuaXplcihEb2N1bWVu
dCogZG9jKSA6IG1fZG9jKGRvYyksIG1fZW1iZWRFbGVtZW50KDApIHt9CisgICAgc3RhdGljIFdp
ZGdldCogUGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2MpOwogICAgICAgICAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYs
IGJvb2wgYXBwZW5kRGF0YSk7CkBAIC02Miw3ICs2MywyMyBAQA0KICAgICBEb2N1bWVudCogbV9k
b2M7CiAgICAgSFRNTEVtYmVkRWxlbWVudCogbV9lbWJlZEVsZW1lbnQ7CiB9OwotICAgIAorCitX
aWRnZXQqIFBsdWdpblRva2VuaXplcjo6UGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KERvY3VtZW50
KiBkb2MpCit7CisgICAgQVNTRVJUKGRvYyk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBk
b2MtPmJvZHkoKTsKKyAgICBpZiAoYm9keSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gZW1iZWRO
b2RlID0gYm9keS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBSZWZQdHI8SFRNTEVtYmVkRWxlbWVu
dD4gZW1iZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KGVtYmVkTm9k
ZS5nZXQoKSk7CisgICAgICAgIGlmIChlbWJlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgIFJlbmRl
cldpZGdldCogcmVuZGVyZXIgPSB0b1JlbmRlcldpZGdldChlbWJlZEVsZW1lbnQtPnJlbmRlcmVy
KCkpOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZW5kZXJlci0+d2lkZ2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
IHZvaWQgUGx1Z2luVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29s
KQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQ2LDUgKzE2Myw5IEBADQogewog
ICAgIHJldHVybiBuZXcgUGx1Z2luVG9rZW5pemVyKHRoaXMpOwogfQotICAgIAorCitXaWRnZXQq
IFBsdWdpbkRvY3VtZW50OjpwbHVnaW5XaWRnZXQoKQoreworICAgIHJldHVybiBQbHVnaW5Ub2tl
bml6ZXI6OlBsdWdpbldpZGdldEZyb21Eb2N1bWVudCh0aGlzKTsKIH0KK30KSW5kZXg6IGxvYWRl
ci9QbHVnaW5Eb2N1bWVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbG9hZGVyL1BsdWdpbkRvY3VtZW50
LmgJKHJldmlzaW9uIDU1MjUwKQ0KKysrIGxvYWRlci9QbHVnaW5Eb2N1bWVudC5oCSh3b3JraW5n
IGNvcHkpDQpAQCAtMjgsNyArMjgsNyBAQA0KICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorY2xhc3MgV2lkZ2V0OwogY2xhc3MgUGx1Z2luRG9j
dW1lbnQgOiBwdWJsaWMgSFRNTERvY3VtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQbHVnaW5Eb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKQEAgLTM2LDYgKzM2LDgg
QEANCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luRG9jdW1lbnQoZnJhbWUpKTsK
ICAgICB9CiAKKyAgICBXaWRnZXQqIHBsdWdpbldpZGdldCgpOworCiBwcml2YXRlOgogICAgIFBs
dWdpbkRvY3VtZW50KEZyYW1lKik7CiAKSW5kZXg6IHBsYXRmb3JtL1dpZGdldC5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDU1MjUwKQ0KKysrIHBsYXRmb3Jt
L1dpZGdldC5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMjAxLDYgKzIwMSwxNCBAQA0KICAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29u
c3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAKKyAgICAvLyBWaXJ0dWFsIG1ldGhvZHMgZm9yIHByaW50aW5n
LiBUaGUgd2lkZ2V0IGNhbiBzdXBwb3J0IGN1c3RvbSBwcmludGluZworICAgIC8vICh3aGljaCBt
ZWFucyBpdCBjb250cm9scyB0aGUgbGF5b3V0LCBudW1iZXIgb2YgcGFnZXMgZXRjKS4gVGhpcyB0
eXBpY2FsbHkKKyAgICAvLyBoYXBwZW5zIGlmIHRoZSB3aWRnZXQgaXMgaG9zdGluZyBhIHBsdWdp
bi4gSW4gdGhlIGJlbG93IG1ldGhvZHMsIHByaW50YWJsZUFyZWEKKyAgICAvLyBpcyBpbiBwb2lu
dHMgKGEgcG9pbnQgaXMgMS83MiBvZiBhbiBpbmNoKS4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNDdXN0b21QcmludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBpbnQg
Z2V0TnVtUGFnZXMoY29uc3QgSW50UmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHByaW50ZXJEcGkp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRQYWdlKGludCBwYWdl
TnVtYmVyLCBHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiBwcmludGFibGVBcmVh
LCBpbnQgcHJpbnRlckRwaSkge30KKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoUGxhdGZvcm1X
aWRnZXQpOyAvLyBNdXN0IGJlIGNhbGxlZCBieSBhbGwgV2lkZ2V0IGNvbnN0cnVjdG9ycyB0byBp
bml0aWFsaXplIGNyb3NzLXBsYXRmb3JtIGRhdGEuCiAK
</data>
<flag name="review"
          id="33167"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49758</attachid>
            <date>2010-03-01 15:32:40 -0800</date>
            <delta_ts>2010-03-05 15:35:47 -0800</delta_ts>
            <desc>Chromium changes for plugin print</desc>
            <filename>PluginPrintChromium.patch</filename>
            <type>text/plain</type>
            <size>12903</size>
            <attacher>sanjeevr</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTUz
ODApDQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDM5IEBADQorMjAx
MC0wMy0wMSAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8c2FuamVldnJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGEg
cGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93c2VyJ3MgcHJpbnQgd29ya2Zsb3cuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTU1MAorCisg
ICAgICAgICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYlBsdWdpbi5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OnN1cHBvcnRzQ3VzdG9tUHJpbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OmdldE51bVBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGx1Z2luOjpwcmludFBhZ2UpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OmJlZ2luKToKKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjplbmQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQ
cmludENvbnRleHQ6OmdldFBhZ2VTaHJpbmspOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmlu
dENvbnRleHQ6OnNwb29sUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4
dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4
dDo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjpTaG91
bGRVc2VCcm93c2VyT3ZlcmxheXMpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQbHVnaW5Qcmlu
dENvbnRleHQ6OkNocm9tZVBsdWdpblByaW50Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZVBsdWdpblByaW50Q29udGV4dDo6YmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQ
bHVnaW5QcmludENvbnRleHQ6OmVuZCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVBsdWdpblBy
aW50Q29udGV4dDo6Z2V0UGFnZVNocmluayk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVBsdWdp
blByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9t
ZVBsdWdpblByaW50Q29udGV4dDo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
UGx1Z2luUHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQ
bHVnaW5QcmludENvbnRleHQ6OlNob3VsZFVzZUJyb3dzZXJPdmVybGF5cyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbik6CisgICAgICAgICogc3JjL1dlYkZyYW1l
SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c3VwcG9ydHNDdXN0b21QcmludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OmdldE51bVBhZ2VzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRQYWdlKToKKyAg
ICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oOgorCiAyMDEwLTAyLTI3ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IHB1YmxpYy9XZWJGcmFtZS5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gcHVibGljL1dlYkZyYW1lLmgJKHJldmlzaW9uIDU1MjUwKQ0KKysrIHB1YmxpYy9XZWJGcmFt
ZS5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMzcwLDEwICszNzAsMTQgQEANCiAKICAgICAvLyBQcmlu
dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotICAgIC8vIFJlZm9ybWF0cyB0aGUgV2ViRnJhbWUgZm9yIHByaW50aW5nLiAg
cGFnZVNpemUgaXMgdGhlIHBhZ2Ugc2l6ZSBpbgotICAgIC8vIHBpeGVscy4gIFJldHVybnMgdGhl
IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSBwcmludGVkIGF0IHRoZQotICAgIC8vIGdpdmVu
IHBhZ2Ugc2l6ZS4KLSAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBh
Z2VTaXplKSA9IDA7CisgICAgLy8gUmVmb3JtYXRzIHRoZSBXZWJGcmFtZSBmb3IgcHJpbnRpbmcu
IHBhZ2VTaXplIGlzIHRoZSBwYWdlIHNpemUgaW4KKyAgICAvLyBwb2ludHMgKGEgcG9pbnQgaW4g
MS83MiBvZiBhbiBpbmNoKS4gcHJpbnRlcl9kcGkgaXMgdGhlIHVzZXIgc2VsZWN0ZWQsCisgICAg
Ly8gRFBJIGZvciB0aGUgcHJpbnRlci4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQK
KyAgICAvLyBjYW4gYmUgcHJpbnRlZCBhdCB0aGUgZ2l2ZW4gcGFnZSBzaXplLiBUaGUgb3V0IHBh
cmFtIHVzZUJyb3dzZXJPdmVybGF5cworICAgIC8vIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBicm93
c2VyIHByb2Nlc3Mgc2hvdWxkIHVzZSBpdHMgb3ZlcmxheXMgKGhlYWRlciwKKyAgICAvLyBmb290
ZXIsIG1hcmdpbnMgZXRjKSBvciB3aGV0aGVyIHRoZSByZW5kZXJlciBjb250cm9scyB0aGlzLgor
ICAgIHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUsIGludCBw
cmludGVyRHBpID0gNzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB1c2VCcm93
c2VyT3ZlcmxheXMgPSAwKSA9IDA7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBwYWdlIHNocmlua2lu
ZyBmYWN0b3IgY2FsY3VsYXRlZCBieSB3ZWJraXQgKHVzdWFsbHkKICAgICAvLyBiZXR3ZWVuIDEv
MS4yNSBhbmQgMS8yKS4gUmV0dXJucyAwIGlmIHRoZSBwYWdlIG51bWJlciBpcyBpbnZhbGlkIG9y
CkluZGV4OiBwdWJsaWMvV2ViUGx1Z2luLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBwdWJsaWMvV2ViUGx1
Z2luLmgJKHJldmlzaW9uIDU1MjUwKQ0KKysrIHB1YmxpYy9XZWJQbHVnaW4uaAkod29ya2luZyBj
b3B5KQ0KQEAgLTgwLDYgKzgwLDE1IEBADQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGlu
Z0ZyYW1lUmVxdWVzdCgKICAgICAgICAgY29uc3QgV2ViVVJMJiwgdm9pZCogbm90aWZ5RGF0YSwg
Y29uc3QgV2ViVVJMRXJyb3ImKSA9IDA7CiAKKyAgICAvLyBQcmludGluZyBpbnRlcmZhY2UuIElu
IHRoZSBiZWxvdyBtZXRob2RzLCBwcmludGFibGVBcmVhCisgICAgLy8gaXMgaW4gcG9pbnRzIChh
IHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaCkuCisgICAgLy8gVGhlc2UgbWV0aG9kcyBoYXZlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb25zIHNvIGFzIHRvIG5vdCBicmVhayBleGlzdGluZworICAgIC8v
IENocm9taXVtIGJ1aWxkcy4gVGhleSB3aWxsIGJlIG1hZGUgcHVyZSB2aXJ0dWFsIG9uY2UgdGhl
IGNvcnJlc3BvbmRpbmcKKyAgICAvLyBDaHJvbWl1bSBwYXRjaCBsYW5kcy4KKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNDdXN0b21QcmludCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBpbnQgZ2V0TnVtUGFnZXMoY29uc3QgV2ViUmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHByaW50
ZXJEcGkpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJpbnRQYWdlKGludCBwYWdl
TnVtYmVyLCBXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcHJpbnRhYmxlQXJlYSwg
aW50IHByaW50ZXJEcGkpIHsgcmV0dXJuIGZhbHNlOyB9CisKIHByb3RlY3RlZDoKICAgICB+V2Vi
UGx1Z2luKCkgeyB9CiB9OwpJbmRleDogc3JjL1dlYkZyYW1lSW1wbC5jcHANCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBzcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNTUyNTApDQorKysgc3JjL1dlYkZy
YW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xMDEsNiArMTAxLDcgQEANCiAjaW5jbHVk
ZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKKyNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlByaW50Q29u
dGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFz
VGV4dC5oIgpAQCAtMjQ2LDcgKzI0Nyw4IEBADQogICAgIH0KIH0KIAotLy8gU2ltcGxlIGNsYXNz
IHRvIG92ZXJyaWRlIHNvbWUgb2YgUHJpbnRDb250ZXh0IGJlaGF2aW9yLgorLy8gU2ltcGxlIGNs
YXNzIHRvIG92ZXJyaWRlIHNvbWUgb2YgUHJpbnRDb250ZXh0IGJlaGF2aW9yLiBTb21lIG9mIHRo
ZSBtZXRob2RzCisvLyBtYWRlIHZpcnR1YWwgc28gdGhhdCB0aGV5IGNhbiBiZSBvdmVycmlkZW4g
YnkgQ2hyb21lUGx1Z2luUHJpbnRDb250ZXh0LgogY2xhc3MgQ2hyb21lUHJpbnRDb250ZXh0IDog
cHVibGljIFByaW50Q29udGV4dCwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBD
aHJvbWVQcmludENvbnRleHQoRnJhbWUqIGZyYW1lKQpAQCAtMjU1LDE1ICsyNTcsMjAgQEANCiAg
ICAgewogICAgIH0KIAotICAgIHZvaWQgYmVnaW4oZmxvYXQgd2lkdGgpCisgICAgdmlydHVhbCB2
b2lkIGJlZ2luKGZsb2F0IHdpZHRoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3ByaW50ZWRQ
YWdlV2lkdGgpOwogICAgICAgICBtX3ByaW50ZWRQYWdlV2lkdGggPSB3aWR0aDsKICAgICAgICAg
UHJpbnRDb250ZXh0OjpiZWdpbihtX3ByaW50ZWRQYWdlV2lkdGgpOwogICAgIH0KIAotICAgIGZs
b2F0IGdldFBhZ2VTaHJpbmsoaW50IHBhZ2VOdW1iZXIpIGNvbnN0CisgICAgdmlydHVhbCB2b2lk
IGVuZCgpCiAgICAgeworICAgICAgUHJpbnRDb250ZXh0OjplbmQoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGZsb2F0IGdldFBhZ2VTaHJpbmsoaW50IHBhZ2VOdW1iZXIpIGNvbnN0CisgICAgewog
ICAgICAgICBJbnRSZWN0IHBhZ2VSZWN0ID0gbV9wYWdlUmVjdHNbcGFnZU51bWJlcl07CiAgICAg
ICAgIHJldHVybiBtX3ByaW50ZWRQYWdlV2lkdGggLyBwYWdlUmVjdC53aWR0aCgpOwogICAgIH0K
QEAgLTI3MSw3ICsyNzgsNyBAQA0KICAgICAvLyBTcG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBz
dWJyZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRoZSBzY2FsZSBzdGVwLgogICAgIC8vIE5hdGl2ZVRo
ZW1lIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggc2NhbGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dz
ZXIgc2lkZQogICAgIC8vIGluc3RlYWQuICBSZXR1cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVk
LgotICAgIGZsb2F0IHNwb29sUGFnZShHcmFwaGljc0NvbnRleHQmIGN0eCwgaW50IHBhZ2VOdW1i
ZXIpCisgICAgdmlydHVhbCBmbG9hdCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGlu
dCBwYWdlTnVtYmVyKQogICAgIHsKICAgICAgICAgSW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJl
Y3RzW3BhZ2VOdW1iZXJdOwogICAgICAgICBmbG9hdCBzY2FsZSA9IG1fcHJpbnRlZFBhZ2VXaWR0
aCAvIHBhZ2VSZWN0LndpZHRoKCk7CkBAIC0yODUsMTEgKzI5Miw5NCBAQA0KICAgICAgICAgcmV0
dXJuIHNjYWxlOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNv
bnN0IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3Rl
ckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKKyAg
ICB7CisgICAgICByZXR1cm4gUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKHByaW50UmVj
dCwgaGVhZGVySGVpZ2h0LCBmb290ZXJIZWlnaHQsIHVzZXJTY2FsZUZhY3Rvciwgb3V0UGFnZUhl
aWdodCk7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQgcGFnZUNvdW50KCkgY29uc3QKKyAgICB7
CisgICAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlQ291bnQoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgU2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBTZXQgd2hlbiBwcmlu
dGluZy4KICAgICBmbG9hdCBtX3ByaW50ZWRQYWdlV2lkdGg7CiB9OwogCisvLyBTaW1wbGUgY2xh
c3MgdG8gb3ZlcnJpZGUgc29tZSBvZiBQcmludENvbnRleHQgYmVoYXZpb3IuIFRoaXMgaXMgdXNl
ZCB3aGVuCisvLyB0aGUgZnJhbWUgaG9zdHMgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBjdXN0b20g
cHJpbnRpbmcuIEluIHRoaXMgY2FzZSwgd2UKKy8vIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHByaW50
aW5nIHJlbGF0ZWQgY2FsbHMgdG8gdGhlIHBsdWdpbi4KK2NsYXNzIENocm9tZVBsdWdpblByaW50
Q29udGV4dCA6IHB1YmxpYyBDaHJvbWVQcmludENvbnRleHQgeworcHVibGljOgorICAgIENocm9t
ZVBsdWdpblByaW50Q29udGV4dChGcmFtZSogZnJhbWUsIGludCBwcmludGVyRHBpKQorICAgICAg
ICA6IENocm9tZVByaW50Q29udGV4dChmcmFtZSksIG1fcGFnZUNvdW50KDApLCBtX3ByaW50ZXJE
cGkocHJpbnRlckRwaSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgSEFTIHRvIGJlIGEgZnJhbWUg
aG9zdGluZyBhIGZ1bGwtbW9kZSBwbHVnaW4KKyAgICAgICAgQVNTRVJUKGZyYW1lLT5kb2N1bWVu
dCgpLT5pc1BsdWdpbkRvY3VtZW50KCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdp
bihmbG9hdCB3aWR0aCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGVuZCgpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgZmxvYXQgZ2V0UGFnZVNocmluayhpbnQgcGFnZU51
bWJlcikgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHNocmluayB0aGUgcGFnZSAo
bWF5YmUgd2Ugc2hvdWxkIGFzayB0aGUgd2lkZ2V0ID8/KQorICAgICAgICByZXR1cm4gMS4wOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVj
dCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxv
YXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKKyAgICB7CisgICAgICAg
IG1fcHJpbnRhYmxlQXJlYSA9IEludFJlY3QocHJpbnRSZWN0KTsKKyAgICAgICAgUGx1Z2luRG9j
dW1lbnQqIHBsdWdpbkRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihtX2Zy
YW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgV2ViQ29yZTo6V2lkZ2V0ICogcGx1Z2luV2lkZ2V0
ID0gcGx1Z2luRG9jdW1lbnQtPnBsdWdpbldpZGdldCgpOworICAgICAgICBpZiAocGx1Z2luV2lk
Z2V0ICYmIHBsdWdpbldpZGdldC0+c3VwcG9ydHNDdXN0b21QcmludCgpKQorICAgICAgICAgICAg
bV9wYWdlQ291bnQgPSBwbHVnaW5XaWRnZXQtPmdldE51bVBhZ2VzKG1fcHJpbnRhYmxlQXJlYSwg
bV9wcmludGVyRHBpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQgcGFnZUNvdW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BhZ2VDb3VudDsKKyAgICB9CisKKyAgICAvLyBTcG9vbHMgdGhl
IHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRoZSBzY2FsZSBzdGVw
LgorICAgIC8vIE5hdGl2ZVRoZW1lIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggc2NhbGluZy4gU2Nh
bGluZyBpcyBkb25lIGJyb3dzZXIgc2lkZQorICAgIC8vIGluc3RlYWQuICBSZXR1cm5zIHRoZSBz
Y2FsZSB0byBiZSBhcHBsaWVkLgorICAgIHZpcnR1YWwgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNz
Q29udGV4dCYgY3R4LCBpbnQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAgIFBsdWdpbkRvY3Vt
ZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4obV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFdlYkNvcmU6OldpZGdldCAqIHBsdWdpbldpZGdldCA9
IHBsdWdpbkRvY3VtZW50LT5wbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgaWYgKHBsdWdpbldpZGdl
dCAmJiBwbHVnaW5XaWRnZXQtPnN1cHBvcnRzQ3VzdG9tUHJpbnQoKSkKKyAgICAgICAgICAgIHBs
dWdpbldpZGdldC0+cHJpbnRQYWdlKHBhZ2VOdW1iZXIsICZjdHgsIG1fcHJpbnRhYmxlQXJlYSwg
bV9wcmludGVyRHBpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAxLjA7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIFNo
b3VsZFVzZUJyb3dzZXJPdmVybGF5cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFNldCB3aGVuIHByaW50aW5nLgorICAgIElu
dFJlY3QgbV9wcmludGFibGVBcmVhOworICAgIGludCBtX3BhZ2VDb3VudDsKKyAgICBpbnQgbV9w
cmludGVyRHBpOworfTsKKwogc3RhdGljIFdlYkRhdGFTb3VyY2UqIERhdGFTb3VyY2VGb3JEb2NM
b2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICByZXR1cm4gbG9hZGVyID8gV2Vi
RGF0YVNvdXJjZUltcGw6OmZyb21Eb2N1bWVudExvYWRlcihsb2FkZXIpIDogMDsKQEAgLTExMDAs
MTEgKzExOTAsMjEgQEANCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBXZWJGcmFtZUltcGw6
OnByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUpCitpbnQgV2ViRnJhbWVJbXBsOjpw
cmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQgcHJpbnRlckRwaSwgYm9vbCAq
dXNlQnJvd3Nlck92ZXJsYXlzKQogewogICAgIEFTU0VSVCghZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
aXNGcmFtZVNldCgpKTsKKyAgICAvLyBJZiB0aGlzIGlzIGEgcGx1Z2luIGRvY3VtZW50LCBjaGVj
ayBpZiB0aGUgcGx1Z2luIHN1cHBvcnRzIGl0cyBvd24KKyAgICAvLyBwcmludGluZy4gSWYgaXQg
ZG9lcywgd2Ugd2lsbCBkZWxlZ2F0ZSBhbGwgcHJpbnRpbmcgdG8gdGhhdC4KKyAgICBpZiAoZnJh
bWUoKS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKSB7CisgICAgICAgIFBsdWdpbkRv
Y3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4oZnJh
bWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFdlYkNvcmU6OldpZGdldCAqIHBsdWdpbldpZGdl
dCA9IHBsdWdpbkRvY3VtZW50LT5wbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgaWYgKHBsdWdpbldp
ZGdldCAmJiBwbHVnaW5XaWRnZXQtPnN1cHBvcnRzQ3VzdG9tUHJpbnQoKSkKKyAgICAgICAgICAg
IG1fcHJpbnRDb250ZXh0LnNldChuZXcgQ2hyb21lUGx1Z2luUHJpbnRDb250ZXh0KGZyYW1lKCks
IHByaW50ZXJEcGkpKTsKKyAgICB9CiAKLSAgICBtX3ByaW50Q29udGV4dC5zZXQobmV3IENocm9t
ZVByaW50Q29udGV4dChmcmFtZSgpKSk7CisgICAgaWYgKCFtX3ByaW50Q29udGV4dCkKKyAgICAg
ICAgbV9wcmludENvbnRleHQuc2V0KG5ldyBDaHJvbWVQcmludENvbnRleHQoZnJhbWUoKSkpOwor
CiAgICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VTaXplLndp
ZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocGFnZVNp
emUuaGVpZ2h0KSk7CiAgICAgbV9wcmludENvbnRleHQtPmJlZ2luKHJlY3Qud2lkdGgoKSk7CkBA
IC0xMTEyLDYgKzEyMTIsOSBAQA0KICAgICAvLyBXZSBpZ25vcmUgdGhlIG92ZXJsYXlzIGNhbGN1
bGF0aW9uIGZvciBub3cgc2luY2UgdGhleSBhcmUgZ2VuZXJhdGVkIGluIHRoZQogICAgIC8vIGJy
b3dzZXIuIHBhZ2VIZWlnaHQgaXMgYWN0dWFsbHkgYW4gb3V0cHV0IHBhcmFtZXRlci4KICAgICBt
X3ByaW50Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0cyhyZWN0LCAwLCAwLCAxLjAsIHBhZ2VIZWln
aHQpOworICAgIGlmICh1c2VCcm93c2VyT3ZlcmxheXMpCisgICAgICAgICp1c2VCcm93c2VyT3Zl
cmxheXMgPSBtX3ByaW50Q29udGV4dC0+U2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKCk7CisKICAg
ICByZXR1cm4gbV9wcmludENvbnRleHQtPnBhZ2VDb3VudCgpOwogfQogCkluZGV4OiBzcmMvV2Vi
RnJhbWVJbXBsLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBzcmMvV2ViRnJhbWVJbXBsLmgJKHJldmlzaW9u
IDU1MjUwKQ0KKysrIHNyYy9XZWJGcmFtZUltcGwuaAkod29ya2luZyBjb3B5KQ0KQEAgLTE0Miw3
ICsxNDIsOCBAQA0KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBzZWxlY3Rpb25Bc1RleHQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBzZWxlY3Rpb25Bc01hcmt1cCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBzZWxlY3RXb3JkQXJvdW5kQ2FyZXQoKTsKLSAgICB2aXJ0dWFsIGludCBw
cmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplKTsKKyAgICB2aXJ0dWFsIGludCBwcmlu
dEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQgcHJpbnRlckRwaSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wqIHVzZUJyb3dzZXJPdmVybGF5cyk7CiAgICAgdmlydHVh
bCBmbG9hdCBwcmludFBhZ2UoaW50IHBhZ2VUb1ByaW50LCBXZWJDYW52YXMqKTsKICAgICB2aXJ0
dWFsIGZsb2F0IGdldFByaW50UGFnZVNocmluayhpbnQgcGFnZSk7CiAgICAgdmlydHVhbCB2b2lk
IHByaW50RW5kKCk7CkluZGV4OiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHJldmlzaW9uIDU1MjUw
KQ0KKysrIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQ0KQEAg
LTIwMCw2ICsyMDAsMzIgQEANCiAgICAgICAgIHJlcG9ydEdlb21ldHJ5KCk7CiB9CiAKK2Jvb2wg
V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c3VwcG9ydHNDdXN0b21QcmludCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fd2ViUGx1Z2luLT5zdXBwb3J0c0N1c3RvbVByaW50KCk7Cit9CisKK2ludCBX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjpnZXROdW1QYWdlcyhjb25zdCBJbnRSZWN0JiBwcmludGFi
bGVBcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlu
dGVyRHBpKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBsdWdpbi0+Z2V0TnVtUGFnZXMocHJp
bnRhYmxlQXJlYSwgcHJpbnRlckRwaSk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6cHJpbnRQYWdlKGludCBwYWdlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBnYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHByaW50YWJs
ZUFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbnRl
ckRwaSkKK3sKKyAgICBnYy0+c2F2ZSgpOworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgV2Vi
Q2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworI2VsaWYg
V0VCS0lUX1VTSU5HX0NHCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250
ZXh0KCk7CisjZW5kaWYKKyAgICBtX3dlYlBsdWdpbi0+cHJpbnRQYWdlKHBhZ2VOdW1iZXIsIGNh
bnZhcywgcHJpbnRhYmxlQXJlYSwgcHJpbnRlckRwaSk7CisgICAgZ2MtPnJlc3RvcmUoKTsKK30K
Kwogdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjppbnZhbGlkYXRlKCkKIHsKICAgICBXaWRn
ZXQ6OmludmFsaWRhdGUoKTsKSW5kZXg6IHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCShyZXZpc2lvbiA1NTI1
MCkNCisrKyBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCSh3b3JraW5nIGNvcHkpDQpAQCAt
NzMsNiArNzMsOSBAQA0KICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50VmlzaWJsZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFyZW50KFdlYkNvcmU6OlNjcm9sbFZpZXcqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNDdXN0b21QcmludCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE51bVBhZ2VzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwcmludFBh
Z2UoaW50LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgaW50KTsKIAogICAgIC8vIFdlYlBsdWdpbkNvbnRhaW5lciBtZXRob2RzCiAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoKTsK
</data>
<flag name="review"
          id="33169"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50133</attachid>
            <date>2010-03-05 15:35:47 -0800</date>
            <delta_ts>2010-03-09 17:44:29 -0800</delta_ts>
            <desc>Updated patch with code review changes</desc>
            <filename>PluginPrint.patch</filename>
            <type>text/plain</type>
            <size>17126</size>
            <attacher>sanjeevr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1NTk4KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE1IEBADQorMjAxMC0wMy0wNSAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8
c2FuamVldnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGEgcGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93
c2VyJ3MgcHJpbnQgd29ya2Zsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTU1MAorCisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJvbURv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3VtZW50OjpwbHVnaW5XaWRnZXQp
OgorICAgICAgICAqIGxvYWRlci9QbHVnaW5Eb2N1bWVudC5oOgorCiAyMDEwLTAzLTA1ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZGZpeCBhZnRlciByNTU1OTMuIChUbyBmaXggUXQgLS1taW5pbWFsIGJ1aWxkLikKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNv
cmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkocmV2aXNpb24gNTU1OTMpDQorKysgV2ViQ29y
ZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMzQsNiArMzQs
NyBAQA0KICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDcsNiArNDgsNyBAQA0KIGNsYXNzIFBsdWdp
blRva2VuaXplciA6IHB1YmxpYyBUb2tlbml6ZXIgewogcHVibGljOgogICAgIFBsdWdpblRva2Vu
aXplcihEb2N1bWVudCogZG9jKSA6IG1fZG9jKGRvYyksIG1fZW1iZWRFbGVtZW50KDApIHt9Cisg
ICAgc3RhdGljIFdpZGdldCogcGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2Mp
OwogICAgICAgICAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7CkBAIC02Miw3ICs2NCwyMiBAQA0KICAgICBE
b2N1bWVudCogbV9kb2M7CiAgICAgSFRNTEVtYmVkRWxlbWVudCogbV9lbWJlZEVsZW1lbnQ7CiB9
OwotICAgIAorCitXaWRnZXQqIFBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJvbURvY3Vt
ZW50KERvY3VtZW50KiBkb2MpCit7CisgICAgQVNTRVJUKGRvYyk7CisgICAgUmVmUHRyPEVsZW1l
bnQ+IGJvZHkgPSBkb2MtPmJvZHkoKTsKKyAgICBpZiAoYm9keSkgeworICAgICAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IGJvZHktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG5vZGUgJiYgbm9k
ZS0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCktPmlz
RW1iZWRkZWRPYmplY3QoKSk7CisgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJFbWJlZGRlZE9i
amVjdChub2RlLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9CisKKwogdm9pZCBQbHVnaW5Ub2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYsIGJvb2wpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDYs
NSArMTYzLDkgQEANCiB7CiAgICAgcmV0dXJuIG5ldyBQbHVnaW5Ub2tlbml6ZXIodGhpcyk7CiB9
Ci0gICAgCisKK1dpZGdldCogUGx1Z2luRG9jdW1lbnQ6OnBsdWdpbldpZGdldCgpCit7CisgICAg
cmV0dXJuIFBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KHRoaXMpOwog
fQorfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmgJKHJldmlzaW9uIDU1NTkzKQ0KKysr
IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmgJKHdvcmtpbmcgY29weSkNCkBAIC0yOCw3
ICsyOCw3IEBADQogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgCitjbGFzcyBXaWRnZXQ7CiBjbGFzcyBQbHVnaW5Eb2N1bWVudCA6IHB1YmxpYyBI
VE1MRG9jdW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkRvY3Vt
ZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQpAQCAtMzYsNiArMzYsOCBAQA0KICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5Eb2N1bWVudChmcmFtZSkpOwogICAgIH0KIAorICAgIFdp
ZGdldCogcGx1Z2luV2lkZ2V0KCk7CisKIHByaXZhdGU6CiAgICAgUGx1Z2luRG9jdW1lbnQoRnJh
bWUqKTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NTk4KQ0KKysrIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMzkgQEANCisyMDEw
LTAzLTA1ICBTYW5qZWV2IFJhZGhha3Jpc2huYW4gIDxzYW5qZWV2ckBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsb3cgYSBw
bHVnaW4gdG8gcGFydGljaXBhdGUgaW4gdGhlIGJyb3dzZXIncyBwcmludCB3b3JrZmxvdy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1NTUwCisKKyAg
ICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6c3VwcG9ydHNDdXN0b21QcmludCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6Z2V0TnVtYmVyT2ZQYWdlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpbjo6cHJpbnRQYWdlKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjpiZWdpbik6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6ZW5kKToKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lUHJpbnRDb250ZXh0OjpnZXRQYWdlU2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
UHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENv
bnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENv
bnRleHQ6OnBhZ2VDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6
c2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUGx1Z2lu
UHJpbnRDb250ZXh0OjpDaHJvbWVQbHVnaW5QcmludENvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpDaHJvbWVQbHVnaW5QcmludENvbnRleHQ6OmJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lUGx1Z2luUHJpbnRDb250ZXh0OjplbmQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQbHVn
aW5QcmludENvbnRleHQ6OmdldFBhZ2VTaHJpbmspOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQ
bHVnaW5QcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMpOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVQbHVnaW5QcmludENvbnRleHQ6OnBhZ2VDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZVBsdWdpblByaW50Q29udGV4dDo6c3Bvb2xQYWdlKToKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lUGx1Z2luUHJpbnRDb250ZXh0OjpzaG91bGRVc2VCcm93c2VyT3ZlcmxheXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnByaW50QmVnaW4pOgorICAgICAgICAqIHNyYy9XZWJG
cmFtZUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnN1cHBvcnRzQ3VzdG9tUHJp
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpnZXROdW1iZXJP
ZlBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRQ
YWdlKToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oOgorCiAyMDEwLTAz
LTA1ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJGcmFtZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oCShyZXZpc2lvbiA1NTU5MykNCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
LmgJKHdvcmtpbmcgY29weSkNCkBAIC0zNzAsMTAgKzM3MCwxNCBAQA0KIAogICAgIC8vIFByaW50
aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi0gICAgLy8gUmVmb3JtYXRzIHRoZSBXZWJGcmFtZSBmb3IgcHJpbnRpbmcuICBw
YWdlU2l6ZSBpcyB0aGUgcGFnZSBzaXplIGluCi0gICAgLy8gcGl4ZWxzLiAgUmV0dXJucyB0aGUg
bnVtYmVyIG9mIHBhZ2VzIHRoYXQgY2FuIGJlIHByaW50ZWQgYXQgdGhlCi0gICAgLy8gZ2l2ZW4g
cGFnZSBzaXplLgotICAgIHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFn
ZVNpemUpID0gMDsKKyAgICAvLyBSZWZvcm1hdHMgdGhlIFdlYkZyYW1lIGZvciBwcmludGluZy4g
cGFnZVNpemUgaXMgdGhlIHBhZ2Ugc2l6ZSBpbgorICAgIC8vIHBvaW50cyAoYSBwb2ludCBpbiAx
LzcyIG9mIGFuIGluY2gpLiBwcmludGVyRFBJIGlzIHRoZSB1c2VyIHNlbGVjdGVkLAorICAgIC8v
IERQSSBmb3IgdGhlIHByaW50ZXIuIFJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0Cisg
ICAgLy8gY2FuIGJlIHByaW50ZWQgYXQgdGhlIGdpdmVuIHBhZ2Ugc2l6ZS4gVGhlIG91dCBwYXJh
bSB1c2VCcm93c2VyT3ZlcmxheXMKKyAgICAvLyBzcGVjaWZpZXMgd2hldGhlciB0aGUgYnJvd3Nl
ciBwcm9jZXNzIHNob3VsZCB1c2UgaXRzIG92ZXJsYXlzIChoZWFkZXIsCisgICAgLy8gZm9vdGVy
LCBtYXJnaW5zIGV0Yykgb3Igd2hldGhlciB0aGUgcmVuZGVyZXIgY29udHJvbHMgdGhpcy4KKyAg
ICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQgcHJp
bnRlckRQSSA9IDcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogdXNlQnJvd3Nl
ck92ZXJsYXlzID0gMCkgPSAwOwogCiAgICAgLy8gUmV0dXJucyB0aGUgcGFnZSBzaHJpbmtpbmcg
ZmFjdG9yIGNhbGN1bGF0ZWQgYnkgd2Via2l0ICh1c3VhbGx5CiAgICAgLy8gYmV0d2VlbiAxLzEu
MjUgYW5kIDEvMikuIFJldHVybnMgMCBpZiB0aGUgcGFnZSBudW1iZXIgaXMgaW52YWxpZCBvcgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgJKHJldmlzaW9uIDU1NTkzKQ0KKysr
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgJKHdvcmtpbmcgY29weSkNCkBAIC04
MCw2ICs4MCwxNSBAQA0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbExvYWRpbmdGcmFtZVJlcXVl
c3QoCiAgICAgICAgIGNvbnN0IFdlYlVSTCYsIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IFdlYlVS
TEVycm9yJikgPSAwOwogCisgICAgLy8gUHJpbnRpbmcgaW50ZXJmYWNlLiBJbiB0aGUgYmVsb3cg
bWV0aG9kcywgcHJpbnRhYmxlQXJlYQorICAgIC8vIGlzIGluIHBvaW50cyAoYSBwb2ludCBpcyAx
LzcyIG9mIGFuIGluY2gpLgorICAgIC8vIFRoZXNlIG1ldGhvZHMgaGF2ZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9ucyBzbyBhcyB0byBub3QgYnJlYWsgZXhpc3RpbmcKKyAgICAvLyBDaHJvbWl1bSBi
dWlsZHMuIFRoZXkgd2lsbCBiZSBtYWRlIHB1cmUgdmlydHVhbCBvbmNlIHRoZSBjb3JyZXNwb25k
aW5nCisgICAgLy8gQ2hyb21pdW0gcGF0Y2ggbGFuZHMuCisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzQ3VzdG9tUHJpbnQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgaW50IGdldE51
bWJlck9mUGFnZXMoY29uc3QgV2ViUmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHByaW50ZXJEUEkp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJpbnRQYWdlKGludCBwYWdlTnVtYmVy
LCBXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHBy
aW50ZXJEUEkpIHsgcmV0dXJuIGZhbHNlOyB9CisKIHByb3RlY3RlZDoKICAgICB+V2ViUGx1Z2lu
KCkgeyB9CiB9OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZp
c2lvbiA1NTU5MykNCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkNCkBAIC0xMDEsNiArMTAxLDcgQEANCiAjaW5jbHVkZSAibWFya3VwLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNs
dWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgogI2luY2x1
ZGUgIlJlbmRlckZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgpAQCAtMTMw
LDYgKzEzMSw3IEBADQogI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiV2Vi
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJS
YW5nZS5oIgogI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2Uu
aCIKQEAgLTI0Niw3ICsyNDgsOCBAQA0KICAgICB9CiB9CiAKLS8vIFNpbXBsZSBjbGFzcyB0byBv
dmVycmlkZSBzb21lIG9mIFByaW50Q29udGV4dCBiZWhhdmlvci4KKy8vIFNpbXBsZSBjbGFzcyB0
byBvdmVycmlkZSBzb21lIG9mIFByaW50Q29udGV4dCBiZWhhdmlvci4gU29tZSBvZiB0aGUgbWV0
aG9kcworLy8gbWFkZSB2aXJ0dWFsIHNvIHRoYXQgdGhleSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IENo
cm9tZVBsdWdpblByaW50Q29udGV4dC4KIGNsYXNzIENocm9tZVByaW50Q29udGV4dCA6IHB1Ymxp
YyBQcmludENvbnRleHQsIHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgQ2hyb21l
UHJpbnRDb250ZXh0KEZyYW1lKiBmcmFtZSkKQEAgLTI1NSwxNSArMjU4LDIwIEBADQogICAgIHsK
ICAgICB9CiAKLSAgICB2b2lkIGJlZ2luKGZsb2F0IHdpZHRoKQorICAgIHZpcnR1YWwgdm9pZCBi
ZWdpbihmbG9hdCB3aWR0aCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wcmludGVkUGFnZVdp
ZHRoKTsKICAgICAgICAgbV9wcmludGVkUGFnZVdpZHRoID0gd2lkdGg7CiAgICAgICAgIFByaW50
Q29udGV4dDo6YmVnaW4obV9wcmludGVkUGFnZVdpZHRoKTsKICAgICB9CiAKLSAgICBmbG9hdCBn
ZXRQYWdlU2hyaW5rKGludCBwYWdlTnVtYmVyKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCBlbmQo
KQogICAgIHsKKyAgICAgICAgUHJpbnRDb250ZXh0OjplbmQoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGZsb2F0IGdldFBhZ2VTaHJpbmsoaW50IHBhZ2VOdW1iZXIpIGNvbnN0CisgICAgewogICAg
ICAgICBJbnRSZWN0IHBhZ2VSZWN0ID0gbV9wYWdlUmVjdHNbcGFnZU51bWJlcl07CiAgICAgICAg
IHJldHVybiBtX3ByaW50ZWRQYWdlV2lkdGggLyBwYWdlUmVjdC53aWR0aCgpOwogICAgIH0KQEAg
LTI3MSw3ICsyNzksNyBAQA0KICAgICAvLyBTcG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBzdWJy
ZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRoZSBzY2FsZSBzdGVwLgogICAgIC8vIE5hdGl2ZVRoZW1l
IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggc2NhbGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dzZXIg
c2lkZQogICAgIC8vIGluc3RlYWQuICBSZXR1cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVkLgot
ICAgIGZsb2F0IHNwb29sUGFnZShHcmFwaGljc0NvbnRleHQmIGN0eCwgaW50IHBhZ2VOdW1iZXIp
CisgICAgdmlydHVhbCBmbG9hdCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGludCBw
YWdlTnVtYmVyKQogICAgIHsKICAgICAgICAgSW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJlY3Rz
W3BhZ2VOdW1iZXJdOwogICAgICAgICBmbG9hdCBzY2FsZSA9IG1fcHJpbnRlZFBhZ2VXaWR0aCAv
IHBhZ2VSZWN0LndpZHRoKCk7CkBAIC0yODUsMTEgKzI5Myw5NCBAQA0KICAgICAgICAgcmV0dXJu
IHNjYWxlOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0
IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3Rlckhl
aWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKKyAgICB7
CisgICAgICAgIHJldHVybiBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMocHJpbnRSZWN0
LCBoZWFkZXJIZWlnaHQsIGZvb3RlckhlaWdodCwgdXNlclNjYWxlRmFjdG9yLCBvdXRQYWdlSGVp
Z2h0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGludCBwYWdlQ291bnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZUNvdW50KCk7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIHNob3VsZFVzZUJyb3dzZXJPdmVybGF5cygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgLy8gU2V0IHdoZW4gcHJp
bnRpbmcuCiAgICAgZmxvYXQgbV9wcmludGVkUGFnZVdpZHRoOwogfTsKIAorLy8gU2ltcGxlIGNs
YXNzIHRvIG92ZXJyaWRlIHNvbWUgb2YgUHJpbnRDb250ZXh0IGJlaGF2aW9yLiBUaGlzIGlzIHVz
ZWQgd2hlbgorLy8gdGhlIGZyYW1lIGhvc3RzIGEgcGx1Z2luIHRoYXQgc3VwcG9ydHMgY3VzdG9t
IHByaW50aW5nLiBJbiB0aGlzIGNhc2UsIHdlCisvLyB3YW50IHRvIGRlbGVnYXRlIGFsbCBwcmlu
dGluZyByZWxhdGVkIGNhbGxzIHRvIHRoZSBwbHVnaW4uCitjbGFzcyBDaHJvbWVQbHVnaW5Qcmlu
dENvbnRleHQgOiBwdWJsaWMgQ2hyb21lUHJpbnRDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBDaHJv
bWVQbHVnaW5QcmludENvbnRleHQoRnJhbWUqIGZyYW1lLCBpbnQgcHJpbnRlckRQSSkKKyAgICAg
ICAgOiBDaHJvbWVQcmludENvbnRleHQoZnJhbWUpLCBtX3BhZ2VDb3VudCgwKSwgbV9wcmludGVy
RFBJKHByaW50ZXJEUEkpCisgICAgeworICAgICAgICAvLyBUaGlzIEhBUyB0byBiZSBhIGZyYW1l
IGhvc3RpbmcgYSBmdWxsLW1vZGUgcGx1Z2luCisgICAgICAgIEFTU0VSVChmcmFtZS0+ZG9jdW1l
bnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW4oZmxvYXQgd2lkdGgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmQoKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGdldFBhZ2VTaHJpbmsoaW50IHBhZ2VO
dW1iZXIpIGNvbnN0CisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBzaHJpbmsgdGhlIHBhZ2Ug
KG1heWJlIHdlIHNob3VsZCBhc2sgdGhlIHdpZGdldCA/PykKKyAgICAgICAgcmV0dXJuIDEuMDsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJl
Y3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZs
b2F0IHVzZXJTY2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQpCisgICAgeworICAgICAg
ICBtX3ByaW50YWJsZUFyZWEgPSBJbnRSZWN0KHByaW50UmVjdCk7CisgICAgICAgIFBsdWdpbkRv
Y3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4obV9m
cmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwgKiBwbHVn
aW5Db250YWluZXIgPSByZWludGVycHJldF9jYXN0PFdlYlBsdWdpbkNvbnRhaW5lckltcGwgKj4o
cGx1Z2luRG9jdW1lbnQtPnBsdWdpbldpZGdldCgpKTsKKyAgICAgICAgaWYgKHBsdWdpbkNvbnRh
aW5lciAmJiBwbHVnaW5Db250YWluZXItPnN1cHBvcnRzQ3VzdG9tUHJpbnQoKSkKKyAgICAgICAg
ICAgIG1fcGFnZUNvdW50ID0gcGx1Z2luQ29udGFpbmVyLT5nZXROdW1iZXJPZlBhZ2VzKG1fcHJp
bnRhYmxlQXJlYSwgbV9wcmludGVyRFBJKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQgcGFnZUNvdW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhZ2VDb3VudDsKKyAgICB9CisKKyAgICAv
LyBTcG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRo
ZSBzY2FsZSBzdGVwLgorICAgIC8vIE5hdGl2ZVRoZW1lIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGgg
c2NhbGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dzZXIgc2lkZQorICAgIC8vIGluc3RlYWQuICBS
ZXR1cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVkLgorICAgIHZpcnR1YWwgZmxvYXQgc3Bvb2xQ
YWdlKEdyYXBoaWNzQ29udGV4dCYgY3R4LCBpbnQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAg
IFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3Vt
ZW50Kj4obV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGwgKiBwbHVnaW5Db250YWluZXIgPSByZWludGVycHJldF9jYXN0PFdlYlBsdWdpbkNvbnRhaW5l
ckltcGwgKj4ocGx1Z2luRG9jdW1lbnQtPnBsdWdpbldpZGdldCgpKTsKKyAgICAgICAgaWYgKHBs
dWdpbkNvbnRhaW5lciAmJiBwbHVnaW5Db250YWluZXItPnN1cHBvcnRzQ3VzdG9tUHJpbnQoKSkK
KyAgICAgICAgICAgIHBsdWdpbkNvbnRhaW5lci0+cHJpbnRQYWdlKHBhZ2VOdW1iZXIsICZjdHgs
IG1fcHJpbnRhYmxlQXJlYSwgbV9wcmludGVyRFBJKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAxLjA7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIHNob3VsZFVzZUJyb3dzZXJPdmVybGF5cygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFNldCB3aGVu
IHByaW50aW5nLgorICAgIEludFJlY3QgbV9wcmludGFibGVBcmVhOworICAgIGludCBtX3BhZ2VD
b3VudDsKKyAgICBpbnQgbV9wcmludGVyRFBJOworfTsKKwogc3RhdGljIFdlYkRhdGFTb3VyY2Uq
IERhdGFTb3VyY2VGb3JEb2NMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBy
ZXR1cm4gbG9hZGVyID8gV2ViRGF0YVNvdXJjZUltcGw6OmZyb21Eb2N1bWVudExvYWRlcihsb2Fk
ZXIpIDogMDsKQEAgLTExMDAsMTEgKzExOTEsMjEgQEANCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWludCBXZWJGcmFtZUltcGw6OnByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUpCitp
bnQgV2ViRnJhbWVJbXBsOjpwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQg
cHJpbnRlckRQSSwgYm9vbCAqdXNlQnJvd3Nlck92ZXJsYXlzKQogewogICAgIEFTU0VSVCghZnJh
bWUoKS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKTsKKyAgICAvLyBJZiB0aGlzIGlzIGEgcGx1
Z2luIGRvY3VtZW50LCBjaGVjayBpZiB0aGUgcGx1Z2luIHN1cHBvcnRzIGl0cyBvd24KKyAgICAv
LyBwcmludGluZy4gSWYgaXQgZG9lcywgd2Ugd2lsbCBkZWxlZ2F0ZSBhbGwgcHJpbnRpbmcgdG8g
dGhhdC4KKyAgICBpZiAoZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKSB7
CisgICAgICAgIFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBs
dWdpbkRvY3VtZW50Kj4oZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFdlYlBsdWdpbkNv
bnRhaW5lckltcGwgKiBwbHVnaW5Db250YWluZXIgPSByZWludGVycHJldF9jYXN0PFdlYlBsdWdp
bkNvbnRhaW5lckltcGwgKj4ocGx1Z2luRG9jdW1lbnQtPnBsdWdpbldpZGdldCgpKTsKKyAgICAg
ICAgaWYgKHBsdWdpbkNvbnRhaW5lciAmJiBwbHVnaW5Db250YWluZXItPnN1cHBvcnRzQ3VzdG9t
UHJpbnQoKSkKKyAgICAgICAgICAgIG1fcHJpbnRDb250ZXh0LnNldChuZXcgQ2hyb21lUGx1Z2lu
UHJpbnRDb250ZXh0KGZyYW1lKCksIHByaW50ZXJEUEkpKTsKKyAgICB9CiAKLSAgICBtX3ByaW50
Q29udGV4dC5zZXQobmV3IENocm9tZVByaW50Q29udGV4dChmcmFtZSgpKSk7CisgICAgaWYgKCFt
X3ByaW50Q29udGV4dCkKKyAgICAgICAgbV9wcmludENvbnRleHQuc2V0KG5ldyBDaHJvbWVQcmlu
dENvbnRleHQoZnJhbWUoKSkpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhZ2VTaXplLndpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFnZVNpemUuaGVpZ2h0KSk7CiAgICAgbV9wcmludENvbnRleHQtPmJl
Z2luKHJlY3Qud2lkdGgoKSk7CkBAIC0xMTEyLDYgKzEyMTMsOSBAQA0KICAgICAvLyBXZSBpZ25v
cmUgdGhlIG92ZXJsYXlzIGNhbGN1bGF0aW9uIGZvciBub3cgc2luY2UgdGhleSBhcmUgZ2VuZXJh
dGVkIGluIHRoZQogICAgIC8vIGJyb3dzZXIuIHBhZ2VIZWlnaHQgaXMgYWN0dWFsbHkgYW4gb3V0
cHV0IHBhcmFtZXRlci4KICAgICBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0cyhyZWN0
LCAwLCAwLCAxLjAsIHBhZ2VIZWlnaHQpOworICAgIGlmICh1c2VCcm93c2VyT3ZlcmxheXMpCisg
ICAgICAgICp1c2VCcm93c2VyT3ZlcmxheXMgPSBtX3ByaW50Q29udGV4dC0+c2hvdWxkVXNlQnJv
d3Nlck92ZXJsYXlzKCk7CisKICAgICByZXR1cm4gbV9wcmludENvbnRleHQtPnBhZ2VDb3VudCgp
OwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAkocmV2aXNpb24gNTU1
OTMpDQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAkod29ya2luZyBjb3B5
KQ0KQEAgLTE0Miw3ICsxNDIsOCBAQA0KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBzZWxlY3Rpb25B
c1RleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBzZWxlY3Rpb25Bc01hcmt1cCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RXb3JkQXJvdW5kQ2FyZXQoKTsKLSAgICB2
aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplKTsKKyAgICB2aXJ0
dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQgcHJpbnRlckRQ
SSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHVzZUJyb3dzZXJPdmVybGF5cyk7
CiAgICAgdmlydHVhbCBmbG9hdCBwcmludFBhZ2UoaW50IHBhZ2VUb1ByaW50LCBXZWJDYW52YXMq
KTsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFByaW50UGFnZVNocmluayhpbnQgcGFnZSk7CiAgICAg
dmlydHVhbCB2b2lkIHByaW50RW5kKCk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBs
dWdpbkNvbnRhaW5lckltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gNTU1OTMpDQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQ0K
QEAgLTIwNiw2ICsyMDYsMzIgQEANCiAgICAgICAgIHJlcG9ydEdlb21ldHJ5KCk7CiB9CiAKK2Jv
b2wgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c3VwcG9ydHNDdXN0b21QcmludCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2ViUGx1Z2luLT5zdXBwb3J0c0N1c3RvbVByaW50KCk7Cit9CisKK2lu
dCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpnZXROdW1iZXJPZlBhZ2VzKGNvbnN0IEludFJlY3Qm
IHByaW50YWJsZUFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgcHJpbnRlckRQSSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQbHVnaW4tPmdl
dE51bWJlck9mUGFnZXMocHJpbnRhYmxlQXJlYSwgcHJpbnRlckRQSSk7Cit9CisKK3ZvaWQgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRQYWdlKGludCBwYWdlTnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBn
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHByaW50YWJsZUFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgcHJpbnRlckRQSSkKK3sKKyAgICBnYy0+c2F2ZSgpOworI2lmIFdFQktJVF9V
U0lOR19TS0lBCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOworI2VsaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgV2ViQ2FudmFzKiBjYW52YXMg
PSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICBtX3dlYlBsdWdpbi0+cHJpbnRQ
YWdlKHBhZ2VOdW1iZXIsIGNhbnZhcywgcHJpbnRhYmxlQXJlYSwgcHJpbnRlckRQSSk7CisgICAg
Z2MtPnJlc3RvcmUoKTsKK30KKwogdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjppbnZhbGlk
YXRlKCkKIHsKICAgICBXaWRnZXQ6OmludmFsaWRhdGUoKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHJldmlzaW9uIDU1NTkzKQ0KKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCSh3b3JraW5nIGNv
cHkpDQpAQCAtODQsNiArODQsMTUgQEANCiAgICAgdmlydHVhbCBXZWJTdHJpbmcgZXhlY3V0ZVNj
cmlwdFVSTChjb25zdCBXZWJVUkwmLCBib29sIHBvcHVwc0FsbG93ZWQpOwogICAgIHZpcnR1YWwg
dm9pZCBsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0IFdlYlVSTFJlcXVlc3QmLCBjb25zdCBXZWJTdHJp
bmcmIHRhcmdldCwgYm9vbCBub3RpZnlOZWVkZWQsIHZvaWQqIG5vdGlmeURhdGEpOwogCisgICAg
Ly8gVmlydHVhbCBtZXRob2RzIGZvciBwcmludGluZy4gVGhlIHBsdWdpbiBjYW4gc3VwcG9ydCBj
dXN0b20gcHJpbnRpbmcKKyAgICAvLyAod2hpY2ggbWVhbnMgaXQgY29udHJvbHMgdGhlIGxheW91
dCwgbnVtYmVyIG9mIHBhZ2VzIGV0YykuIFRoaXMgdHlwaWNhbGx5CisgICAgLy8gaGFwcGVucyBp
ZiB0aGUgd2lkZ2V0IGlzIGhvc3RpbmcgYSBwbHVnaW4uIEluIHRoZSBiZWxvdyBtZXRob2RzLCBw
cmludGFibGVBcmVhCisgICAgLy8gaXMgaW4gcG9pbnRzIChhIHBvaW50IGlzIDEvNzIgb2YgYW4g
aW5jaCkgd2l0aCB0aGUgb3JpZ2luIG9mIHRoZSByZWN0IGJlaW5nCisgICAgLy8gdGhlIHRvcC1s
ZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDdXN0b21Q
cmludCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE51bWJlck9mUGFnZXMoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHByaW50ZXJEUEkpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBwcmludFBhZ2UoaW50IHBhZ2VOdW1iZXIsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCogZ2MsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHByaW50YWJsZUFyZWEsIGludCBw
cmludGVyRFBJKTsKKwogICAgIC8vIFJlc291cmNlIGxvYWQgZXZlbnRzIGZvciB0aGUgcGx1Z2lu
J3Mgc291cmNlIGRhdGE6CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciAqZGF0YSwgaW50IGRhdGFMZW5ndGgpOwo=
</data>
<flag name="review"
          id="33489"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50362</attachid>
            <date>2010-03-09 17:44:29 -0800</date>
            <delta_ts>2010-03-09 21:53:08 -0800</delta_ts>
            <desc>Updated patch with code review changes</desc>
            <filename>PluginPrint.patch</filename>
            <type>text/plain</type>
            <size>17325</size>
            <attacher>sanjeevr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1NzU3KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE1IEBADQorMjAxMC0wMy0wOSAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8
c2FuamVldnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGEgcGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93
c2VyJ3MgcHJpbnQgd29ya2Zsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTU1MAorCisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJvbURv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3VtZW50OjpwbHVnaW5XaWRnZXQp
OgorICAgICAgICAqIGxvYWRlci9QbHVnaW5Eb2N1bWVudC5oOgorCiAyMDEwLTAzLTA5ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9s
aXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA1
NTc1NikNCisrKyBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkNCkBAIC0zNCw2ICszNCw3IEBADQogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUg
IlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC00Nyw2ICs0OCw3
IEBADQogY2xhc3MgUGx1Z2luVG9rZW5pemVyIDogcHVibGljIFRva2VuaXplciB7CiBwdWJsaWM6
CiAgICAgUGx1Z2luVG9rZW5pemVyKERvY3VtZW50KiBkb2MpIDogbV9kb2MoZG9jKSwgbV9lbWJl
ZEVsZW1lbnQoMCkge30KKyAgICBzdGF0aWMgV2lkZ2V0KiBwbHVnaW5XaWRnZXRGcm9tRG9jdW1l
bnQoRG9jdW1lbnQqIGRvYyk7CiAgICAgICAgIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhKTsKQEAgLTYyLDcg
KzY0LDIyIEBADQogICAgIERvY3VtZW50KiBtX2RvYzsKICAgICBIVE1MRW1iZWRFbGVtZW50KiBt
X2VtYmVkRWxlbWVudDsKIH07Ci0gICAgCisKK1dpZGdldCogUGx1Z2luVG9rZW5pemVyOjpwbHVn
aW5XaWRnZXRGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBBU1NFUlQoZG9jKTsK
KyAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvYy0+Ym9keSgpOworICAgIGlmIChib2R5KSB7
CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gYm9keS0+Zmlyc3RDaGlsZCgpOworICAgICAg
ICBpZiAobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+cmVuZGVyZXIoKS0+aXNFbWJlZGRlZE9iamVjdCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0
b1JlbmRlckVtYmVkZGVkT2JqZWN0KG5vZGUtPnJlbmRlcmVyKCkpLT53aWRnZXQoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCiB2b2lkIFBsdWdpblRva2VuaXplcjo6
d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCkKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE0Niw1ICsxNjMsMTAgQEANCiB7CiAgICAgcmV0dXJuIG5ldyBQbHVnaW5U
b2tlbml6ZXIodGhpcyk7CiB9Ci0gICAgCisKK1dpZGdldCogUGx1Z2luRG9jdW1lbnQ6OnBsdWdp
bldpZGdldCgpCit7CisgICAgcmV0dXJuIFBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJv
bURvY3VtZW50KHRoaXMpOwogfQorCit9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1
bWVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuaAko
cmV2aXNpb24gNTU3NTYpDQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQ0KQEAgLTI4LDcgKzI4LDggQEANCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKworY2xhc3MgV2lkZ2V0OwogY2xhc3MgUGx1
Z2luRG9jdW1lbnQgOiBwdWJsaWMgSFRNTERvY3VtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQbHVnaW5Eb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKQEAgLTM2LDYg
KzM3LDggQEANCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luRG9jdW1lbnQoZnJh
bWUpKTsKICAgICB9CiAKKyAgICBXaWRnZXQqIHBsdWdpbldpZGdldCgpOworCiBwcml2YXRlOgog
ICAgIFBsdWdpbkRvY3VtZW50KEZyYW1lKik7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lv
biA1NTc1NykNCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpA
QCAtMSwzICsxLDQxIEBADQorMjAxMC0wMy0wOSAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8c2Fu
amVldnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFsbG93IGEgcGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93c2Vy
J3MgcHJpbnQgd29ya2Zsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNTU1MAorCisgICAgICAgICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAg
ICogcHVibGljL1dlYlBsdWdpbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OnN1cHBv
cnRzUGFnaW5hdGVkUHJpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OnByaW50QmVn
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OnByaW50UGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsdWdpbjo6cHJpbnRFbmQpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OmJlZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjplbmQpOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVQcmludENvbnRleHQ6OmdldFBhZ2VTaHJpbmspOgorICAgICAgICAoV2ViS2l0OjpDaHJv
bWVQcmludENvbnRleHQ6OnNwb29sUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50
Q29udGV4dDo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0
OjpzaG91bGRVc2VCcm93c2VyT3ZlcmxheXMpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQbHVn
aW5QcmludENvbnRleHQ6OkNocm9tZVBsdWdpblByaW50Q29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZVBsdWdpblByaW50Q29udGV4dDo6YmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVQbHVnaW5QcmludENvbnRleHQ6OmVuZCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVBs
dWdpblByaW50Q29udGV4dDo6Z2V0UGFnZVNocmluayk6CisgICAgICAgIChXZWJLaXQ6OkNocm9t
ZVBsdWdpblByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZVBsdWdpblByaW50Q29udGV4dDo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lUGx1Z2luUHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVQbHVnaW5QcmludENvbnRleHQ6OnNob3VsZFVzZUJyb3dzZXJPdmVybGF5cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbik6CisgICAgICAgICogc3JjL1dl
YkZyYW1lSW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c3VwcG9ydHNQYWdpbmF0
ZWRQcmludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnByaW50
QmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwcmludFBh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwcmludEVuZCk6
CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaDoKKwogMjAxMC0wMy0wOSAg
QW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkocmV2aXNp
b24gNTU3NTYpDQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCSh3b3JraW5n
IGNvcHkpDQpAQCAtMzcwLDEwICszNzAsMTQgQEANCiAKICAgICAvLyBQcmludGluZyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
ICAgIC8vIFJlZm9ybWF0cyB0aGUgV2ViRnJhbWUgZm9yIHByaW50aW5nLiAgcGFnZVNpemUgaXMg
dGhlIHBhZ2Ugc2l6ZSBpbgotICAgIC8vIHBpeGVscy4gIFJldHVybnMgdGhlIG51bWJlciBvZiBw
YWdlcyB0aGF0IGNhbiBiZSBwcmludGVkIGF0IHRoZQotICAgIC8vIGdpdmVuIHBhZ2Ugc2l6ZS4K
LSAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplKSA9IDA7
CisgICAgLy8gUmVmb3JtYXRzIHRoZSBXZWJGcmFtZSBmb3IgcHJpbnRpbmcuIHBhZ2VTaXplIGlz
IHRoZSBwYWdlIHNpemUgaW4KKyAgICAvLyBwb2ludHMgKGEgcG9pbnQgaW4gMS83MiBvZiBhbiBp
bmNoKS4gcHJpbnRlckRQSSBpcyB0aGUgdXNlciBzZWxlY3RlZCwKKyAgICAvLyBEUEkgZm9yIHRo
ZSBwcmludGVyLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdAorICAgIC8vIGNhbiBi
ZSBwcmludGVkIGF0IHRoZSBnaXZlbiBwYWdlIHNpemUuIFRoZSBvdXQgcGFyYW0gdXNlQnJvd3Nl
ck92ZXJsYXlzCisgICAgLy8gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGJyb3dzZXIgcHJvY2VzcyBz
aG91bGQgdXNlIGl0cyBvdmVybGF5cyAoaGVhZGVyLAorICAgIC8vIGZvb3RlciwgbWFyZ2lucyBl
dGMpIG9yIHdoZXRoZXIgdGhlIHJlbmRlcmVyIGNvbnRyb2xzIHRoaXMuCisgICAgdmlydHVhbCBp
bnQgcHJpbnRCZWdpbihjb25zdCBXZWJTaXplJiBwYWdlU2l6ZSwgaW50IHByaW50ZXJEUEkgPSA3
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHVzZUJyb3dzZXJPdmVybGF5cyA9
IDApID0gMDsKIAogICAgIC8vIFJldHVybnMgdGhlIHBhZ2Ugc2hyaW5raW5nIGZhY3RvciBjYWxj
dWxhdGVkIGJ5IHdlYmtpdCAodXN1YWxseQogICAgIC8vIGJldHdlZW4gMS8xLjI1IGFuZCAxLzIp
LiBSZXR1cm5zIDAgaWYgdGhlIHBhZ2UgbnVtYmVyIGlzIGludmFsaWQgb3IKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlBsdWdpbi5oCShyZXZpc2lvbiA1NTc1NikNCisrKyBXZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpDQpAQCAtODAsNiArODAsMTYg
QEANCiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5nRnJhbWVSZXF1ZXN0KAogICAgICAg
ICBjb25zdCBXZWJVUkwmLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBXZWJVUkxFcnJvciYpID0g
MDsKIAorICAgIC8vIFByaW50aW5nIGludGVyZmFjZS4gSW4gdGhlIGJlbG93IG1ldGhvZHMsIHBy
aW50YWJsZUFyZWEKKyAgICAvLyBpcyBpbiBwb2ludHMgKGEgcG9pbnQgaXMgMS83MiBvZiBhbiBp
bmNoKS4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGhhdmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMg
c28gYXMgdG8gbm90IGJyZWFrIGV4aXN0aW5nCisgICAgLy8gQ2hyb21pdW0gYnVpbGRzLiBUaGV5
IHdpbGwgYmUgbWFkZSBwdXJlIHZpcnR1YWwgb25jZSB0aGUgY29ycmVzcG9uZGluZworICAgIC8v
IENocm9taXVtIHBhdGNoIGxhbmRzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BhZ2luYXRl
ZFByaW50KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNv
bnN0IFdlYlJlY3QmIHByaW50YWJsZUFyZWEsIGludCBwcmludGVyRFBJKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBib29sIHByaW50UGFnZShpbnQgcGFnZU51bWJlciwgV2ViQ2FudmFzKiBj
YW52YXMpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHByaW50RW5kKCkgeyB9
CisKIHByb3RlY3RlZDoKICAgICB+V2ViUGx1Z2luKCkgeyB9CiB9OwpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA1NTc1NikNCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xMDEsNiArMTAx
LDcgQEANCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIlByaW50Q29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgpAQCAtMTMwLDYgKzEzMSw3IEBADQogI2luY2x1ZGUgIldl
Ykhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
V2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNv
bnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2luY2x1ZGUgIldlYlJlY3Qu
aCIKICNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKQEAgLTI0Niw3ICsyNDgsOCBAQA0KICAg
ICB9CiB9CiAKLS8vIFNpbXBsZSBjbGFzcyB0byBvdmVycmlkZSBzb21lIG9mIFByaW50Q29udGV4
dCBiZWhhdmlvci4KKy8vIFNpbXBsZSBjbGFzcyB0byBvdmVycmlkZSBzb21lIG9mIFByaW50Q29u
dGV4dCBiZWhhdmlvci4gU29tZSBvZiB0aGUgbWV0aG9kcworLy8gbWFkZSB2aXJ0dWFsIHNvIHRo
YXQgdGhleSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IENocm9tZVBsdWdpblByaW50Q29udGV4dC4KIGNs
YXNzIENocm9tZVByaW50Q29udGV4dCA6IHB1YmxpYyBQcmludENvbnRleHQsIHB1YmxpYyBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgQ2hyb21lUHJpbnRDb250ZXh0KEZyYW1lKiBmcmFtZSkK
QEAgLTI1NSwxNSArMjU4LDIwIEBADQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGJlZ2luKGZs
b2F0IHdpZHRoKQorICAgIHZpcnR1YWwgdm9pZCBiZWdpbihmbG9hdCB3aWR0aCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghbV9wcmludGVkUGFnZVdpZHRoKTsKICAgICAgICAgbV9wcmludGVkUGFn
ZVdpZHRoID0gd2lkdGg7CiAgICAgICAgIFByaW50Q29udGV4dDo6YmVnaW4obV9wcmludGVkUGFn
ZVdpZHRoKTsKICAgICB9CiAKLSAgICBmbG9hdCBnZXRQYWdlU2hyaW5rKGludCBwYWdlTnVtYmVy
KSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCBlbmQoKQogICAgIHsKKyAgICAgICAgUHJpbnRDb250
ZXh0OjplbmQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGdldFBhZ2VTaHJpbmsoaW50
IHBhZ2VOdW1iZXIpIGNvbnN0CisgICAgewogICAgICAgICBJbnRSZWN0IHBhZ2VSZWN0ID0gbV9w
YWdlUmVjdHNbcGFnZU51bWJlcl07CiAgICAgICAgIHJldHVybiBtX3ByaW50ZWRQYWdlV2lkdGgg
LyBwYWdlUmVjdC53aWR0aCgpOwogICAgIH0KQEAgLTI3MSw3ICsyNzksNyBAQA0KICAgICAvLyBT
cG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRoZSBz
Y2FsZSBzdGVwLgogICAgIC8vIE5hdGl2ZVRoZW1lIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggc2Nh
bGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dzZXIgc2lkZQogICAgIC8vIGluc3RlYWQuICBSZXR1
cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVkLgotICAgIGZsb2F0IHNwb29sUGFnZShHcmFwaGlj
c0NvbnRleHQmIGN0eCwgaW50IHBhZ2VOdW1iZXIpCisgICAgdmlydHVhbCBmbG9hdCBzcG9vbFBh
Z2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGludCBwYWdlTnVtYmVyKQogICAgIHsKICAgICAgICAg
SW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJlY3RzW3BhZ2VOdW1iZXJdOwogICAgICAgICBmbG9h
dCBzY2FsZSA9IG1fcHJpbnRlZFBhZ2VXaWR0aCAvIHBhZ2VSZWN0LndpZHRoKCk7CkBAIC0yODUs
MTEgKzI5Myw5OCBAQA0KICAgICAgICAgcmV0dXJuIHNjYWxlOwogICAgIH0KIAorICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9h
dCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9y
LCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBQcmludENvbnRl
eHQ6OmNvbXB1dGVQYWdlUmVjdHMocHJpbnRSZWN0LCBoZWFkZXJIZWlnaHQsIGZvb3RlckhlaWdo
dCwgdXNlclNjYWxlRmFjdG9yLCBvdXRQYWdlSGVpZ2h0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGludCBwYWdlQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFByaW50Q29udGV4
dDo6cGFnZUNvdW50KCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUJyb3dz
ZXJPdmVybGF5cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgLy8gU2V0IHdoZW4gcHJpbnRpbmcuCiAgICAgZmxvYXQgbV9wcmludGVk
UGFnZVdpZHRoOwogfTsKIAorLy8gU2ltcGxlIGNsYXNzIHRvIG92ZXJyaWRlIHNvbWUgb2YgUHJp
bnRDb250ZXh0IGJlaGF2aW9yLiBUaGlzIGlzIHVzZWQgd2hlbgorLy8gdGhlIGZyYW1lIGhvc3Rz
IGEgcGx1Z2luIHRoYXQgc3VwcG9ydHMgY3VzdG9tIHByaW50aW5nLiBJbiB0aGlzIGNhc2UsIHdl
CisvLyB3YW50IHRvIGRlbGVnYXRlIGFsbCBwcmludGluZyByZWxhdGVkIGNhbGxzIHRvIHRoZSBw
bHVnaW4uCitjbGFzcyBDaHJvbWVQbHVnaW5QcmludENvbnRleHQgOiBwdWJsaWMgQ2hyb21lUHJp
bnRDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBDaHJvbWVQbHVnaW5QcmludENvbnRleHQoRnJhbWUq
IGZyYW1lLCBpbnQgcHJpbnRlckRQSSkKKyAgICAgICAgOiBDaHJvbWVQcmludENvbnRleHQoZnJh
bWUpLCBtX3BhZ2VDb3VudCgwKSwgbV9wcmludGVyRFBJKHByaW50ZXJEUEkpCisgICAgeworICAg
ICAgICAvLyBUaGlzIEhBUyB0byBiZSBhIGZyYW1lIGhvc3RpbmcgYSBmdWxsLW1vZGUgcGx1Z2lu
CisgICAgICAgIEFTU0VSVChmcmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oZmxvYXQgd2lkdGgpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmQoKQorICAgIHsKKyAgICAgICAgUGx1Z2luRG9jdW1l
bnQqIHBsdWdpbkRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihtX2ZyYW1l
LT5kb2N1bWVudCgpKTsKKyAgICAgICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbCAqIHBsdWdpbkNv
bnRhaW5lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGx1Z2luQ29udGFpbmVySW1wbCAqPihwbHVn
aW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworICAgICAgICBpZiAocGx1Z2luQ29udGFpbmVy
ICYmIHBsdWdpbkNvbnRhaW5lci0+c3VwcG9ydHNQYWdpbmF0ZWRQcmludCgpKQorICAgICAgICAg
ICAgcGx1Z2luQ29udGFpbmVyLT5wcmludEVuZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGdldFBh
Z2VTaHJpbmsoaW50IHBhZ2VOdW1iZXIpIGNvbnN0CisgICAgeworICAgICAgICAvLyBXZSBkb24n
dCBzaHJpbmsgdGhlIHBhZ2UgKG1heWJlIHdlIHNob3VsZCBhc2sgdGhlIHdpZGdldCA/PykKKyAg
ICAgICAgcmV0dXJuIDEuMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBhZ2VS
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9h
dCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWln
aHQpCisgICAgeworICAgICAgICBQbHVnaW5Eb2N1bWVudCogcGx1Z2luRG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICBX
ZWJQbHVnaW5Db250YWluZXJJbXBsICogcGx1Z2luQ29udGFpbmVyID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJQbHVnaW5Db250YWluZXJJbXBsICo+KHBsdWdpbkRvY3VtZW50LT5wbHVnaW5XaWRnZXQo
KSk7CisgICAgICAgIGlmIChwbHVnaW5Db250YWluZXIgJiYgcGx1Z2luQ29udGFpbmVyLT5zdXBw
b3J0c1BhZ2luYXRlZFByaW50KCkpCisgICAgICAgICAgICBtX3BhZ2VDb3VudCA9IHBsdWdpbkNv
bnRhaW5lci0+cHJpbnRCZWdpbihJbnRSZWN0KHByaW50UmVjdCksIG1fcHJpbnRlckRQSSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgaW50IHBhZ2VDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9wYWdlQ291bnQ7CisgICAgfQorCisgICAgLy8gU3Bvb2xzIHRoZSBwcmludGVkIHBhZ2UsIGEg
c3VicmVjdCBvZiBtX2ZyYW1lLiAgU2tpcCB0aGUgc2NhbGUgc3RlcC4KKyAgICAvLyBOYXRpdmVU
aGVtZSBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIHNjYWxpbmcuIFNjYWxpbmcgaXMgZG9uZSBicm93
c2VyIHNpZGUKKyAgICAvLyBpbnN0ZWFkLiAgUmV0dXJucyB0aGUgc2NhbGUgdG8gYmUgYXBwbGll
ZC4KKyAgICB2aXJ0dWFsIGZsb2F0IHNwb29sUGFnZShHcmFwaGljc0NvbnRleHQmIGN0eCwgaW50
IHBhZ2VOdW1iZXIpCisgICAgeworICAgICAgICBQbHVnaW5Eb2N1bWVudCogcGx1Z2luRG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpOwor
ICAgICAgICBXZWJQbHVnaW5Db250YWluZXJJbXBsICogcGx1Z2luQ29udGFpbmVyID0gcmVpbnRl
cnByZXRfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsICo+KHBsdWdpbkRvY3VtZW50LT5wbHVn
aW5XaWRnZXQoKSk7CisgICAgICAgIGlmIChwbHVnaW5Db250YWluZXIgJiYgcGx1Z2luQ29udGFp
bmVyLT5zdXBwb3J0c1BhZ2luYXRlZFByaW50KCkpCisgICAgICAgICAgICBwbHVnaW5Db250YWlu
ZXItPnByaW50UGFnZShwYWdlTnVtYmVyLCAmY3R4KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAxLjA7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIHNob3VsZFVzZUJyb3dzZXJPdmVybGF5cygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFNldCB3aGVu
IHByaW50aW5nLgorICAgIGludCBtX3BhZ2VDb3VudDsKKyAgICBpbnQgbV9wcmludGVyRFBJOwor
fTsKKwogc3RhdGljIFdlYkRhdGFTb3VyY2UqIERhdGFTb3VyY2VGb3JEb2NMb2FkZXIoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICByZXR1cm4gbG9hZGVyID8gV2ViRGF0YVNvdXJjZUlt
cGw6OmZyb21Eb2N1bWVudExvYWRlcihsb2FkZXIpIDogMDsKQEAgLTEwOTIsMTEgKzExODcsMjEg
QEANCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBXZWJGcmFtZUltcGw6OnByaW50QmVnaW4o
Y29uc3QgV2ViU2l6ZSYgcGFnZVNpemUpCitpbnQgV2ViRnJhbWVJbXBsOjpwcmludEJlZ2luKGNv
bnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQgcHJpbnRlckRQSSwgYm9vbCAqdXNlQnJvd3Nlck92
ZXJsYXlzKQogewogICAgIEFTU0VSVCghZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgp
KTsKKyAgICAvLyBJZiB0aGlzIGlzIGEgcGx1Z2luIGRvY3VtZW50LCBjaGVjayBpZiB0aGUgcGx1
Z2luIHN1cHBvcnRzIGl0cyBvd24KKyAgICAvLyBwcmludGluZy4gSWYgaXQgZG9lcywgd2Ugd2ls
bCBkZWxlZ2F0ZSBhbGwgcHJpbnRpbmcgdG8gdGhhdC4KKyAgICBpZiAoZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKSB7CisgICAgICAgIFBsdWdpbkRvY3VtZW50KiBwbHVn
aW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4oZnJhbWUoKS0+ZG9jdW1l
bnQoKSk7CisgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwgKiBwbHVnaW5Db250YWluZXIg
PSByZWludGVycHJldF9jYXN0PFdlYlBsdWdpbkNvbnRhaW5lckltcGwgKj4ocGx1Z2luRG9jdW1l
bnQtPnBsdWdpbldpZGdldCgpKTsKKyAgICAgICAgaWYgKHBsdWdpbkNvbnRhaW5lciAmJiBwbHVn
aW5Db250YWluZXItPnN1cHBvcnRzUGFnaW5hdGVkUHJpbnQoKSkKKyAgICAgICAgICAgIG1fcHJp
bnRDb250ZXh0LnNldChuZXcgQ2hyb21lUGx1Z2luUHJpbnRDb250ZXh0KGZyYW1lKCksIHByaW50
ZXJEUEkpKTsKKyAgICB9CiAKLSAgICBtX3ByaW50Q29udGV4dC5zZXQobmV3IENocm9tZVByaW50
Q29udGV4dChmcmFtZSgpKSk7CisgICAgaWYgKCFtX3ByaW50Q29udGV4dCkKKyAgICAgICAgbV9w
cmludENvbnRleHQuc2V0KG5ldyBDaHJvbWVQcmludENvbnRleHQoZnJhbWUoKSkpOworCiAgICAg
RmxvYXRSZWN0IHJlY3QoMCwgMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VTaXplLndpZHRoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocGFnZVNpemUuaGVp
Z2h0KSk7CiAgICAgbV9wcmludENvbnRleHQtPmJlZ2luKHJlY3Qud2lkdGgoKSk7CkBAIC0xMTA0
LDYgKzEyMDksOSBAQA0KICAgICAvLyBXZSBpZ25vcmUgdGhlIG92ZXJsYXlzIGNhbGN1bGF0aW9u
IGZvciBub3cgc2luY2UgdGhleSBhcmUgZ2VuZXJhdGVkIGluIHRoZQogICAgIC8vIGJyb3dzZXIu
IHBhZ2VIZWlnaHQgaXMgYWN0dWFsbHkgYW4gb3V0cHV0IHBhcmFtZXRlci4KICAgICBtX3ByaW50
Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0cyhyZWN0LCAwLCAwLCAxLjAsIHBhZ2VIZWlnaHQpOwor
ICAgIGlmICh1c2VCcm93c2VyT3ZlcmxheXMpCisgICAgICAgICp1c2VCcm93c2VyT3ZlcmxheXMg
PSBtX3ByaW50Q29udGV4dC0+c2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKCk7CisKICAgICByZXR1
cm4gbV9wcmludENvbnRleHQtPnBhZ2VDb3VudCgpOwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuaAkocmV2aXNpb24gNTU3NTYpDQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuaAkod29ya2luZyBjb3B5KQ0KQEAgLTE0Miw3ICsxNDIsOCBAQA0KICAg
ICB2aXJ0dWFsIFdlYlN0cmluZyBzZWxlY3Rpb25Bc1RleHQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IFdlYlN0cmluZyBzZWxlY3Rpb25Bc01hcmt1cCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBz
ZWxlY3RXb3JkQXJvdW5kQ2FyZXQoKTsKLSAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0
IFdlYlNpemUmIHBhZ2VTaXplKTsKKyAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdl
YlNpemUmIHBhZ2VTaXplLCBpbnQgcHJpbnRlckRQSSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wqIHVzZUJyb3dzZXJPdmVybGF5cyk7CiAgICAgdmlydHVhbCBmbG9hdCBwcmludFBh
Z2UoaW50IHBhZ2VUb1ByaW50LCBXZWJDYW52YXMqKTsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFBy
aW50UGFnZVNocmluayhpbnQgcGFnZSk7CiAgICAgdmlydHVhbCB2b2lkIHByaW50RW5kKCk7Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNw
cAkocmV2aXNpb24gNTU3NTYpDQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250
YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTIwNiw2ICsyMDYsMzUgQEANCiAgICAg
ICAgIHJlcG9ydEdlb21ldHJ5KCk7CiB9CiAKK2Jvb2wgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6
c3VwcG9ydHNQYWdpbmF0ZWRQcmludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGx1Z2lu
LT5zdXBwb3J0c1BhZ2luYXRlZFByaW50KCk7Cit9CisKK2ludCBXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjpwcmludEJlZ2luKGNvbnN0IEludFJlY3QmIHByaW50YWJsZUFyZWEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbnRlckRQSSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV93ZWJQbHVnaW4tPnByaW50QmVnaW4ocHJpbnRhYmxlQXJlYSwgcHJpbnRlckRQ
SSk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRQYWdlKGludCBwYWdl
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0KiBnYykKK3sKKyAgICBnYy0+c2F2ZSgpOworI2lmIFdFQktJVF9VU0lO
R19TS0lBCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpOworI2VsaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBn
Yy0+cGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICBtX3dlYlBsdWdpbi0+cHJpbnRQYWdl
KHBhZ2VOdW1iZXIsIGNhbnZhcyk7CisgICAgZ2MtPnJlc3RvcmUoKTsKK30KKwordm9pZCBXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjpwcmludEVuZCgpCit7CisgICAgcmV0dXJuIG1fd2ViUGx1Z2lu
LT5wcmludEVuZCgpOworfQorCiB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmludmFsaWRh
dGUoKQogewogICAgIFdpZGdldDo6aW52YWxpZGF0ZSgpOwpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaAkocmV2aXNpb24gNTU3NTYpDQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHdvcmtpbmcgY29w
eSkNCkBAIC04NCw2ICs4NCwxNiBAQA0KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBleGVjdXRlU2Ny
aXB0VVJMKGNvbnN0IFdlYlVSTCYsIGJvb2wgcG9wdXBzQWxsb3dlZCk7CiAgICAgdmlydHVhbCB2
b2lkIGxvYWRGcmFtZVJlcXVlc3QoY29uc3QgV2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdlYlN0cmlu
ZyYgdGFyZ2V0LCBib29sIG5vdGlmeU5lZWRlZCwgdm9pZCogbm90aWZ5RGF0YSk7CiAKKyAgICAv
LyBWaXJ0dWFsIG1ldGhvZHMgZm9yIHByaW50aW5nLiBUaGUgcGx1Z2luIGNhbiBzdXBwb3J0IGN1
c3RvbSBwcmludGluZworICAgIC8vICh3aGljaCBtZWFucyBpdCBjb250cm9scyB0aGUgbGF5b3V0
LCBudW1iZXIgb2YgcGFnZXMgZXRjKS4gVGhpcyB0eXBpY2FsbHkKKyAgICAvLyBoYXBwZW5zIGlm
IHRoZSB3aWRnZXQgaXMgaG9zdGluZyBhIHBsdWdpbi4gSW4gdGhlIGJlbG93IG1ldGhvZHMsIHBy
aW50YWJsZUFyZWEKKyAgICAvLyBpcyBpbiBwb2ludHMgKGEgcG9pbnQgaXMgMS83MiBvZiBhbiBp
bmNoKSB3aXRoIHRoZSBvcmlnaW4gb2YgdGhlIHJlY3QgYmVpbmcKKyAgICAvLyB0aGUgdG9wLWxl
ZnQgY29ybmVyIG9mIHRoZSBmcmFtZQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BhZ2luYXRl
ZFByaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBwcmludGFibGVBcmVhLCBpbnQgcHJpbnRlckRQSSkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHByaW50UGFnZShpbnQgcGFnZU51bWJlciwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0KiBnYyk7CisgICAgdmlydHVhbCB2b2lkIHByaW50RW5kKCk7CisKICAgICAvLyBSZXNvdXJj
ZSBsb2FkIGV2ZW50cyBmb3IgdGhlIHBsdWdpbidzIHNvdXJjZSBkYXRhOgogICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIgKmRhdGEsIGludCBkYXRhTGVuZ3RoKTsK
</data>
<flag name="review"
          id="33493"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50370</attachid>
            <date>2010-03-09 21:51:46 -0800</date>
            <delta_ts>2010-03-10 09:08:50 -0800</delta_ts>
            <desc>Updated patch with code review changes</desc>
            <filename>PluginPrint.patch</filename>
            <type>text/plain</type>
            <size>17660</size>
            <attacher>sanjeevr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1NzYyKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE1IEBADQorMjAxMC0wMy0wOSAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8
c2FuamVldnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGEgcGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93
c2VyJ3MgcHJpbnQgd29ya2Zsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTU1MAorCisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJvbURv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3VtZW50OjpwbHVnaW5XaWRnZXQp
OgorICAgICAgICAqIGxvYWRlci9QbHVnaW5Eb2N1bWVudC5oOgorCiAyMDEwLTAzLTA5ICBUb255
IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkocmV2aXNpb24gNTU3NjIp
DQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpDQpA
QCAtMzQsNiArMzQsNyBAQA0KICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNYWlu
UmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDcsNiArNDgsNyBAQA0K
IGNsYXNzIFBsdWdpblRva2VuaXplciA6IHB1YmxpYyBUb2tlbml6ZXIgewogcHVibGljOgogICAg
IFBsdWdpblRva2VuaXplcihEb2N1bWVudCogZG9jKSA6IG1fZG9jKGRvYyksIG1fZW1iZWRFbGVt
ZW50KDApIHt9CisgICAgc3RhdGljIFdpZGdldCogcGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KERv
Y3VtZW50KiBkb2MpOwogICAgICAgICAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRl
KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7CkBAIC02Miw3ICs2NCwy
MSBAQA0KICAgICBEb2N1bWVudCogbV9kb2M7CiAgICAgSFRNTEVtYmVkRWxlbWVudCogbV9lbWJl
ZEVsZW1lbnQ7CiB9OwotICAgIAorCitXaWRnZXQqIFBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lk
Z2V0RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2MpCit7CisgICAgQVNTRVJUKGRvYyk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBkb2MtPmJvZHkoKTsKKyAgICBpZiAoYm9keSkgeworICAg
ICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGJvZHktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYg
KG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJl
bmRlcmVyKCktPmlzRW1iZWRkZWRPYmplY3QoKSk7CisgICAgICAgICAgICByZXR1cm4gdG9SZW5k
ZXJFbWJlZGRlZE9iamVjdChub2RlLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgUGx1Z2luVG9rZW5pemVyOjp3cml0ZShj
b25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTQ2LDUgKzE2MiwxMCBAQA0KIHsKICAgICByZXR1cm4gbmV3IFBsdWdpblRva2VuaXpl
cih0aGlzKTsKIH0KLSAgICAKKworV2lkZ2V0KiBQbHVnaW5Eb2N1bWVudDo6cGx1Z2luV2lkZ2V0
KCkKK3sKKyAgICByZXR1cm4gUGx1Z2luVG9rZW5pemVyOjpwbHVnaW5XaWRnZXRGcm9tRG9jdW1l
bnQodGhpcyk7CiB9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmgN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5oCShyZXZpc2lv
biA1NTc2MikNCisrKyBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5oCSh3b3JraW5nIGNv
cHkpDQpAQCAtMjgsNyArMjgsOCBAQA0KICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIAorCitjbGFzcyBXaWRnZXQ7CiBjbGFzcyBQbHVnaW5Eb2N1
bWVudCA6IHB1YmxpYyBIVE1MRG9jdW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsdWdpbkRvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQpAQCAtMzYsNiArMzcsOCBA
QA0KICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5Eb2N1bWVudChmcmFtZSkpOwog
ICAgIH0KIAorICAgIFdpZGdldCogcGx1Z2luV2lkZ2V0KCk7CisKIHByaXZhdGU6CiAgICAgUGx1
Z2luRG9jdW1lbnQoRnJhbWUqKTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NzYy
KQ0KKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMg
KzEsNDIgQEANCisyMDEwLTAzLTA5ICBTYW5qZWV2IFJhZGhha3Jpc2huYW4gIDxzYW5qZWV2ckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWxsb3cgYSBwbHVnaW4gdG8gcGFydGljaXBhdGUgaW4gdGhlIGJyb3dzZXIncyBwcmlu
dCB3b3JrZmxvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM1NTUwCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBwdWJs
aWMvV2ViUGx1Z2luLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6c3VwcG9ydHNQYWdp
bmF0ZWRQcmludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6cHJpbnRCZWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6cHJpbnRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGx1Z2luOjpwcmludEVuZCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OnBsdWdpbkNvbnRhaW5lckZyb21GcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZVByaW50Q29udGV4dDo6YmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQ
cmludENvbnRleHQ6OmVuZCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6
Z2V0UGFnZVNocmluayk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6c3Bv
b2xQYWdlKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFn
ZVJlY3RzKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjpwYWdlQ291bnQp
OgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OnNob3VsZFVzZUJyb3dzZXJP
dmVybGF5cyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVBsdWdpblByaW50Q29udGV4dDo6Q2hy
b21lUGx1Z2luUHJpbnRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUGx1Z2luUHJp
bnRDb250ZXh0OjpiZWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVBsdWdpblByaW50Q29u
dGV4dDo6ZW5kKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUGx1Z2luUHJpbnRDb250ZXh0Ojpn
ZXRQYWdlU2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUGx1Z2luUHJpbnRDb250ZXh0
Ojpjb21wdXRlUGFnZVJlY3RzKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lUGx1Z2luUHJpbnRD
b250ZXh0OjpwYWdlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQbHVnaW5QcmludENv
bnRleHQ6OnNwb29sUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZVBsdWdpblByaW50Q29u
dGV4dDo6c2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpwcmludEJlZ2luKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAg
ICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjpzdXBwb3J0c1BhZ2luYXRlZFByaW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRCZWdpbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnByaW50UGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnByaW50RW5kKToKKyAgICAgICAgKiBzcmMvV2Vi
UGx1Z2luQ29udGFpbmVySW1wbC5oOgorCiAyMDEwLTAzLTA4ICBKb2huIEFiZC1FbC1NYWxlayAg
PGphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCShyZXZpc2lvbiA1NTc2MikNCisrKyBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkNCkBAIC0zNzAs
MTAgKzM3MCwxNCBAQA0KIAogICAgIC8vIFByaW50aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgLy8gUmVmb3JtYXRz
IHRoZSBXZWJGcmFtZSBmb3IgcHJpbnRpbmcuICBwYWdlU2l6ZSBpcyB0aGUgcGFnZSBzaXplIGlu
Ci0gICAgLy8gcGl4ZWxzLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgY2FuIGJl
IHByaW50ZWQgYXQgdGhlCi0gICAgLy8gZ2l2ZW4gcGFnZSBzaXplLgotICAgIHZpcnR1YWwgaW50
IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUpID0gMDsKKyAgICAvLyBSZWZvcm1h
dHMgdGhlIFdlYkZyYW1lIGZvciBwcmludGluZy4gcGFnZVNpemUgaXMgdGhlIHBhZ2Ugc2l6ZSBp
bgorICAgIC8vIHBvaW50cyAoYSBwb2ludCBpbiAxLzcyIG9mIGFuIGluY2gpLiBwcmludGVyRFBJ
IGlzIHRoZSB1c2VyIHNlbGVjdGVkLAorICAgIC8vIERQSSBmb3IgdGhlIHByaW50ZXIuIFJldHVy
bnMgdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0CisgICAgLy8gY2FuIGJlIHByaW50ZWQgYXQgdGhl
IGdpdmVuIHBhZ2Ugc2l6ZS4gVGhlIG91dCBwYXJhbSB1c2VCcm93c2VyT3ZlcmxheXMKKyAgICAv
LyBzcGVjaWZpZXMgd2hldGhlciB0aGUgYnJvd3NlciBwcm9jZXNzIHNob3VsZCB1c2UgaXRzIG92
ZXJsYXlzIChoZWFkZXIsCisgICAgLy8gZm9vdGVyLCBtYXJnaW5zIGV0Yykgb3Igd2hldGhlciB0
aGUgcmVuZGVyZXIgY29udHJvbHMgdGhpcy4KKyAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNv
bnN0IFdlYlNpemUmIHBhZ2VTaXplLCBpbnQgcHJpbnRlckRQSSA9IDcyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCogdXNlQnJvd3Nlck92ZXJsYXlzID0gMCkgPSAwOwogCiAgICAg
Ly8gUmV0dXJucyB0aGUgcGFnZSBzaHJpbmtpbmcgZmFjdG9yIGNhbGN1bGF0ZWQgYnkgd2Via2l0
ICh1c3VhbGx5CiAgICAgLy8gYmV0d2VlbiAxLzEuMjUgYW5kIDEvMikuIFJldHVybnMgMCBpZiB0
aGUgcGFnZSBudW1iZXIgaXMgaW52YWxpZCBvcgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQbHVnaW4uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGx1Z2luLmgJKHJldmlzaW9uIDU1NzYyKQ0KKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGx1Z2luLmgJKHdvcmtpbmcgY29weSkNCkBAIC04MCw2ICs4MCwxOSBAQA0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbExvYWRpbmdGcmFtZVJlcXVlc3QoCiAgICAgICAgIGNvbnN0IFdlYlVSTCYs
IHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IFdlYlVSTEVycm9yJikgPSAwOwogCisgICAgLy8gUHJp
bnRpbmcgaW50ZXJmYWNlLgorICAgIC8vIFdoZXRoZXIgdGhlIHBsdWdpbiBzdXBwb3J0cyBpdHMg
b3duIHBhZ2luYXRlZCBwcmludC4gVGhlIG90aGVyIHByaW50CisgICAgLy8gaW50ZXJmYWNlIG1l
dGhvZHMgYXJlIGNhbGxlZCBvbmx5IGlmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZS4KKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNQYWdpbmF0ZWRQcmludCgpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgLy8gU2V0cyB1cCBwcmludGluZyBhdCB0aGUgZ2l2ZW4gcHJpbnQgcmVjdCBhbmQgcHJpbnRl
ciBEUEkuIHByaW50YWJsZUFyZWEKKyAgICAvLyBpcyBpbiBwb2ludHMgKGEgcG9pbnQgaXMgMS83
MiBvZiBhbiBpbmNoKS5SZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8KKyAgICAvLyBiZSBw
cmludGVkIGF0IHRoZXNlIHNldHRpbmdzLgorICAgIHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29u
c3QgV2ViUmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHByaW50ZXJEUEkpIHsgcmV0dXJuIDA7IH0K
KyAgICAvLyBQcmludHMgdGhlIHBhZ2Ugc3BlY2lmaWVkIGJ5IHBhZ2VOdW1iZXIgKDAtYmFzZWQg
aW5kZXgpIGludG8gdGhlIHN1cHBsaWVkIGNhbnZhcy4KKyAgICB2aXJ0dWFsIGJvb2wgcHJpbnRQ
YWdlKGludCBwYWdlTnVtYmVyLCBXZWJDYW52YXMqIGNhbnZhcykgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAvLyBFbmRzIHRoZSBwcmludCBvcGVyYXRpb24uCisgICAgdmlydHVhbCB2b2lkIHByaW50
RW5kKCkgeyB9CisKIHByb3RlY3RlZDoKICAgICB+V2ViUGx1Z2luKCkgeyB9CiB9OwpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA1NTc2MikNCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0x
MDEsNiArMTAxLDcgQEANCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJQbHVnaW5Eb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgpAQCAtMTMwLDYgKzEzMSw3IEBADQogI2lu
Y2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lci5oIgorI2luY2x1ZGUgIldl
YlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJSYW5nZS5oIgogI2luY2x1ZGUg
IldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKQEAgLTI0Niw3ICsyNDgs
MjAgQEANCiAgICAgfQogfQogCi0vLyBTaW1wbGUgY2xhc3MgdG8gb3ZlcnJpZGUgc29tZSBvZiBQ
cmludENvbnRleHQgYmVoYXZpb3IuCisvLyBJZiB0aGUgZnJhbWUgaG9zdHMgYSBQbHVnaW5Eb2N1
bWVudCwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgV2ViUGx1Z2luQ29udGFpbmVySW1wbAorLy8g
dGhhdCBob3N0cyB0aGUgcGx1Z2luLgorc3RhdGljIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIHBs
dWdpbkNvbnRhaW5lckZyb21GcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJh
bWUtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgUGx1Z2luRG9jdW1lbnQqIHBsdWdpbkRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
RG9jdW1lbnQqPihmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YlBsdWdpbkNvbnRhaW5lckltcGwgKj4ocGx1Z2luRG9jdW1lbnQtPnBsdWdpbldpZGdldCgpKTsK
K30KKworLy8gU2ltcGxlIGNsYXNzIHRvIG92ZXJyaWRlIHNvbWUgb2YgUHJpbnRDb250ZXh0IGJl
aGF2aW9yLiBTb21lIG9mIHRoZSBtZXRob2RzCisvLyBtYWRlIHZpcnR1YWwgc28gdGhhdCB0aGV5
IGNhbiBiZSBvdmVycmlkZW4gYnkgQ2hyb21lUGx1Z2luUHJpbnRDb250ZXh0LgogY2xhc3MgQ2hy
b21lUHJpbnRDb250ZXh0IDogcHVibGljIFByaW50Q29udGV4dCwgcHVibGljIE5vbmNvcHlhYmxl
IHsKIHB1YmxpYzoKICAgICBDaHJvbWVQcmludENvbnRleHQoRnJhbWUqIGZyYW1lKQpAQCAtMjU1
LDE1ICsyNzAsMjAgQEANCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYmVnaW4oZmxvYXQgd2lk
dGgpCisgICAgdmlydHVhbCB2b2lkIGJlZ2luKGZsb2F0IHdpZHRoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX3ByaW50ZWRQYWdlV2lkdGgpOwogICAgICAgICBtX3ByaW50ZWRQYWdlV2lkdGgg
PSB3aWR0aDsKICAgICAgICAgUHJpbnRDb250ZXh0OjpiZWdpbihtX3ByaW50ZWRQYWdlV2lkdGgp
OwogICAgIH0KIAotICAgIGZsb2F0IGdldFBhZ2VTaHJpbmsoaW50IHBhZ2VOdW1iZXIpIGNvbnN0
CisgICAgdmlydHVhbCB2b2lkIGVuZCgpCiAgICAgeworICAgICAgICBQcmludENvbnRleHQ6OmVu
ZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgZmxvYXQgZ2V0UGFnZVNocmluayhpbnQgcGFnZU51
bWJlcikgY29uc3QKKyAgICB7CiAgICAgICAgIEludFJlY3QgcGFnZVJlY3QgPSBtX3BhZ2VSZWN0
c1twYWdlTnVtYmVyXTsKICAgICAgICAgcmV0dXJuIG1fcHJpbnRlZFBhZ2VXaWR0aCAvIHBhZ2VS
ZWN0LndpZHRoKCk7CiAgICAgfQpAQCAtMjcxLDcgKzI5MSw3IEBADQogICAgIC8vIFNwb29scyB0
aGUgcHJpbnRlZCBwYWdlLCBhIHN1YnJlY3Qgb2YgbV9mcmFtZS4gIFNraXAgdGhlIHNjYWxlIHN0
ZXAuCiAgICAgLy8gTmF0aXZlVGhlbWUgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBzY2FsaW5nLiBT
Y2FsaW5nIGlzIGRvbmUgYnJvd3NlciBzaWRlCiAgICAgLy8gaW5zdGVhZC4gIFJldHVybnMgdGhl
IHNjYWxlIHRvIGJlIGFwcGxpZWQuCi0gICAgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4
dCYgY3R4LCBpbnQgcGFnZU51bWJlcikKKyAgICB2aXJ0dWFsIGZsb2F0IHNwb29sUGFnZShHcmFw
aGljc0NvbnRleHQmIGN0eCwgaW50IHBhZ2VOdW1iZXIpCiAgICAgewogICAgICAgICBJbnRSZWN0
IHBhZ2VSZWN0ID0gbV9wYWdlUmVjdHNbcGFnZU51bWJlcl07CiAgICAgICAgIGZsb2F0IHNjYWxl
ID0gbV9wcmludGVkUGFnZVdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsKQEAgLTI4NSwxMSArMzA1
LDk1IEBADQogICAgICAgICByZXR1cm4gc2NhbGU7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRl
ckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0
JiBvdXRQYWdlSGVpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByaW50Q29udGV4dDo6Y29t
cHV0ZVBhZ2VSZWN0cyhwcmludFJlY3QsIGhlYWRlckhlaWdodCwgZm9vdGVySGVpZ2h0LCB1c2Vy
U2NhbGVGYWN0b3IsIG91dFBhZ2VIZWlnaHQpOworICAgIH0KKworICAgIHZpcnR1YWwgaW50IHBh
Z2VDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdl
Q291bnQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQnJvd3Nlck92ZXJs
YXlzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogcHJpdmF0
ZToKICAgICAvLyBTZXQgd2hlbiBwcmludGluZy4KICAgICBmbG9hdCBtX3ByaW50ZWRQYWdlV2lk
dGg7CiB9OwogCisvLyBTaW1wbGUgY2xhc3MgdG8gb3ZlcnJpZGUgc29tZSBvZiBQcmludENvbnRl
eHQgYmVoYXZpb3IuIFRoaXMgaXMgdXNlZCB3aGVuCisvLyB0aGUgZnJhbWUgaG9zdHMgYSBwbHVn
aW4gdGhhdCBzdXBwb3J0cyBjdXN0b20gcHJpbnRpbmcuIEluIHRoaXMgY2FzZSwgd2UKKy8vIHdh
bnQgdG8gZGVsZWdhdGUgYWxsIHByaW50aW5nIHJlbGF0ZWQgY2FsbHMgdG8gdGhlIHBsdWdpbi4K
K2NsYXNzIENocm9tZVBsdWdpblByaW50Q29udGV4dCA6IHB1YmxpYyBDaHJvbWVQcmludENvbnRl
eHQgeworcHVibGljOgorICAgIENocm9tZVBsdWdpblByaW50Q29udGV4dChGcmFtZSogZnJhbWUs
IGludCBwcmludGVyRFBJKQorICAgICAgICA6IENocm9tZVByaW50Q29udGV4dChmcmFtZSksIG1f
cGFnZUNvdW50KDApLCBtX3ByaW50ZXJEUEkocHJpbnRlckRQSSkKKyAgICB7CisgICAgICAgIC8v
IFRoaXMgSEFTIHRvIGJlIGEgZnJhbWUgaG9zdGluZyBhIGZ1bGwtbW9kZSBwbHVnaW4KKyAgICAg
ICAgQVNTRVJUKGZyYW1lLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBiZWdpbihmbG9hdCB3aWR0aCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGVuZCgpCisgICAgeworICAgICAgICBXZWJQbHVnaW5Db250YWluZXJJ
bXBsKiBwbHVnaW5Db250YWluZXIgPSBwbHVnaW5Db250YWluZXJGcm9tRnJhbWUobV9mcmFtZSk7
CisgICAgICAgIGlmIChwbHVnaW5Db250YWluZXIgJiYgcGx1Z2luQ29udGFpbmVyLT5zdXBwb3J0
c1BhZ2luYXRlZFByaW50KCkpCisgICAgICAgICAgICBwbHVnaW5Db250YWluZXItPnByaW50RW5k
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHZpcnR1YWwgZmxvYXQgZ2V0UGFnZVNocmluayhpbnQgcGFnZU51bWJlcikgY29u
c3QKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHNocmluayB0aGUgcGFnZSAobWF5YmUgd2Ug
c2hvdWxkIGFzayB0aGUgd2lkZ2V0ID8/KQorICAgICAgICByZXR1cm4gMS4wOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgcHJpbnRS
ZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNj
YWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKKyAgICB7CisgICAgICAgIFdlYlBsdWdp
bkNvbnRhaW5lckltcGwqIHBsdWdpbkNvbnRhaW5lciA9IHBsdWdpbkNvbnRhaW5lckZyb21GcmFt
ZShtX2ZyYW1lKTsKKyAgICAgICAgaWYgKHBsdWdpbkNvbnRhaW5lciAmJiBwbHVnaW5Db250YWlu
ZXItPnN1cHBvcnRzUGFnaW5hdGVkUHJpbnQoKSkKKyAgICAgICAgICAgIG1fcGFnZUNvdW50ID0g
cGx1Z2luQ29udGFpbmVyLT5wcmludEJlZ2luKEludFJlY3QocHJpbnRSZWN0KSwgbV9wcmludGVy
RFBJKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCBpbnQgcGFnZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3BhZ2VDb3VudDsKKyAgICB9CisKKyAgICAvLyBTcG9vbHMgdGhlIHByaW50ZWQg
cGFnZSwgYSBzdWJyZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRoZSBzY2FsZSBzdGVwLgorICAgIC8v
IE5hdGl2ZVRoZW1lIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggc2NhbGluZy4gU2NhbGluZyBpcyBk
b25lIGJyb3dzZXIgc2lkZQorICAgIC8vIGluc3RlYWQuICBSZXR1cm5zIHRoZSBzY2FsZSB0byBi
ZSBhcHBsaWVkLgorICAgIHZpcnR1YWwgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dCYg
Y3R4LCBpbnQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGwqIHBsdWdpbkNvbnRhaW5lciA9IHBsdWdpbkNvbnRhaW5lckZyb21GcmFtZShtX2ZyYW1lKTsK
KyAgICAgICAgaWYgKHBsdWdpbkNvbnRhaW5lciAmJiBwbHVnaW5Db250YWluZXItPnN1cHBvcnRz
UGFnaW5hdGVkUHJpbnQoKSkKKyAgICAgICAgICAgIHBsdWdpbkNvbnRhaW5lci0+cHJpbnRQYWdl
KHBhZ2VOdW1iZXIsICZjdHgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDEuMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gU2V0IHdoZW4gcHJpbnRpbmcuCisg
ICAgaW50IG1fcGFnZUNvdW50OworICAgIGludCBtX3ByaW50ZXJEUEk7Cit9OworCiBzdGF0aWMg
V2ViRGF0YVNvdXJjZSogRGF0YVNvdXJjZUZvckRvY0xvYWRlcihEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogewogICAgIHJldHVybiBsb2FkZXIgPyBXZWJEYXRhU291cmNlSW1wbDo6ZnJvbURvY3Vt
ZW50TG9hZGVyKGxvYWRlcikgOiAwOwpAQCAtMTA5MiwxMSArMTE5NiwxNyBAQA0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbihjb25zdCBXZWJTaXpl
JiBwYWdlU2l6ZSkKK2ludCBXZWJGcmFtZUltcGw6OnByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYg
cGFnZVNpemUsIGludCBwcmludGVyRFBJLCBib29sICp1c2VCcm93c2VyT3ZlcmxheXMpCiB7CiAg
ICAgQVNTRVJUKCFmcmFtZSgpLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpOworICAgIC8vIElm
IHRoaXMgaXMgYSBwbHVnaW4gZG9jdW1lbnQsIGNoZWNrIGlmIHRoZSBwbHVnaW4gc3VwcG9ydHMg
aXRzIG93bgorICAgIC8vIHByaW50aW5nLiBJZiBpdCBkb2VzLCB3ZSB3aWxsIGRlbGVnYXRlIGFs
bCBwcmludGluZyB0byB0aGF0LgorICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIHBsdWdpbkNv
bnRhaW5lciA9IHBsdWdpbkNvbnRhaW5lckZyb21GcmFtZShmcmFtZSgpKTsKKyAgICBpZiAocGx1
Z2luQ29udGFpbmVyICYmIHBsdWdpbkNvbnRhaW5lci0+c3VwcG9ydHNQYWdpbmF0ZWRQcmludCgp
KQorICAgICAgICBtX3ByaW50Q29udGV4dC5zZXQobmV3IENocm9tZVBsdWdpblByaW50Q29udGV4
dChmcmFtZSgpLCBwcmludGVyRFBJKSk7CisgICAgZWxzZQorICAgICAgICBtX3ByaW50Q29udGV4
dC5zZXQobmV3IENocm9tZVByaW50Q29udGV4dChmcmFtZSgpKSk7CiAKLSAgICBtX3ByaW50Q29u
dGV4dC5zZXQobmV3IENocm9tZVByaW50Q29udGV4dChmcmFtZSgpKSk7CiAgICAgRmxvYXRSZWN0
IHJlY3QoMCwgMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VTaXplLndpZHRoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocGFnZVNpemUuaGVpZ2h0KSk7CiAg
ICAgbV9wcmludENvbnRleHQtPmJlZ2luKHJlY3Qud2lkdGgoKSk7CkBAIC0xMTA0LDYgKzEyMTQs
OSBAQA0KICAgICAvLyBXZSBpZ25vcmUgdGhlIG92ZXJsYXlzIGNhbGN1bGF0aW9uIGZvciBub3cg
c2luY2UgdGhleSBhcmUgZ2VuZXJhdGVkIGluIHRoZQogICAgIC8vIGJyb3dzZXIuIHBhZ2VIZWln
aHQgaXMgYWN0dWFsbHkgYW4gb3V0cHV0IHBhcmFtZXRlci4KICAgICBtX3ByaW50Q29udGV4dC0+
Y29tcHV0ZVBhZ2VSZWN0cyhyZWN0LCAwLCAwLCAxLjAsIHBhZ2VIZWlnaHQpOworICAgIGlmICh1
c2VCcm93c2VyT3ZlcmxheXMpCisgICAgICAgICp1c2VCcm93c2VyT3ZlcmxheXMgPSBtX3ByaW50
Q29udGV4dC0+c2hvdWxkVXNlQnJvd3Nlck92ZXJsYXlzKCk7CisKICAgICByZXR1cm4gbV9wcmlu
dENvbnRleHQtPnBhZ2VDb3VudCgpOwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZyYW1lSW1wbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuaAkocmV2aXNpb24gNTU3NjIpDQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuaAkod29ya2luZyBjb3B5KQ0KQEAgLTE0Miw3ICsxNDIsOCBAQA0KICAgICB2aXJ0dWFs
IFdlYlN0cmluZyBzZWxlY3Rpb25Bc1RleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlN0cmlu
ZyBzZWxlY3Rpb25Bc01hcmt1cCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RXb3Jk
QXJvdW5kQ2FyZXQoKTsKLSAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUm
IHBhZ2VTaXplKTsKKyAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBh
Z2VTaXplLCBpbnQgcHJpbnRlckRQSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wq
IHVzZUJyb3dzZXJPdmVybGF5cyk7CiAgICAgdmlydHVhbCBmbG9hdCBwcmludFBhZ2UoaW50IHBh
Z2VUb1ByaW50LCBXZWJDYW52YXMqKTsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFByaW50UGFnZVNo
cmluayhpbnQgcGFnZSk7CiAgICAgdmlydHVhbCB2b2lkIHByaW50RW5kKCk7CkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNp
b24gNTU3NjIpDQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBs
LmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTIwNiw2ICsyMDYsMzYgQEANCiAgICAgICAgIHJlcG9y
dEdlb21ldHJ5KCk7CiB9CiAKK2Jvb2wgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c3VwcG9ydHNQ
YWdpbmF0ZWRQcmludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGx1Z2luLT5zdXBwb3J0
c1BhZ2luYXRlZFByaW50KCk7Cit9CisKK2ludCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwcmlu
dEJlZ2luKGNvbnN0IEludFJlY3QmIHByaW50YWJsZUFyZWEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbnRlckRQSSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV93ZWJQbHVnaW4tPnByaW50QmVnaW4ocHJpbnRhYmxlQXJlYSwgcHJpbnRlckRQSSk7Cit9CisK
K2Jvb2wgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRQYWdlKGludCBwYWdlTnVtYmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0KiBnYykKK3sKKyAgICBnYy0+c2F2ZSgpOworI2lmIFdFQktJVF9VU0lOR19TS0lBCisg
ICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwor
I2VsaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZv
cm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICBib29sIHJldCA9IG1fd2ViUGx1Z2luLT5wcmludFBh
Z2UocGFnZU51bWJlciwgY2FudmFzKTsKKyAgICBnYy0+cmVzdG9yZSgpOworICAgIHJldHVybiBy
ZXQ7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cHJpbnRFbmQoKQoreworICAg
IHJldHVybiBtX3dlYlBsdWdpbi0+cHJpbnRFbmQoKTsKK30KKwogdm9pZCBXZWJQbHVnaW5Db250
YWluZXJJbXBsOjppbnZhbGlkYXRlKCkKIHsKICAgICBXaWRnZXQ6OmludmFsaWRhdGUoKTsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHJl
dmlzaW9uIDU1NzYyKQ0KKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVy
SW1wbC5oCSh3b3JraW5nIGNvcHkpDQpAQCAtODQsNiArODQsMjAgQEANCiAgICAgdmlydHVhbCBX
ZWJTdHJpbmcgZXhlY3V0ZVNjcmlwdFVSTChjb25zdCBXZWJVUkwmLCBib29sIHBvcHVwc0FsbG93
ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0IFdlYlVSTFJlcXVl
c3QmLCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldCwgYm9vbCBub3RpZnlOZWVkZWQsIHZvaWQqIG5v
dGlmeURhdGEpOwogCisgICAgLy8gUHJpbnRpbmcgaW50ZXJmYWNlLiBUaGUgcGx1Z2luIGNhbiBz
dXBwb3J0IGN1c3RvbSBwcmludGluZworICAgIC8vICh3aGljaCBtZWFucyBpdCBjb250cm9scyB0
aGUgbGF5b3V0LCBudW1iZXIgb2YgcGFnZXMgZXRjKS4KKyAgICAvLyBXaGV0aGVyIHRoZSBwbHVn
aW4gc3VwcG9ydHMgaXRzIG93biBwYWdpbmF0ZWQgcHJpbnQuIFRoZSBvdGhlciBwcmludAorICAg
IC8vIGludGVyZmFjZSBtZXRob2RzIGFyZSBjYWxsZWQgb25seSBpZiB0aGlzIG1ldGhvZCByZXR1
cm5zIHRydWUuCisgICAgYm9vbCBzdXBwb3J0c1BhZ2luYXRlZFByaW50KCkgY29uc3Q7CisgICAg
Ly8gU2V0cyB1cCBwcmludGluZyBhdCB0aGUgZ2l2ZW4gcHJpbnQgcmVjdCBhbmQgcHJpbnRlciBE
UEkuIHByaW50YWJsZUFyZWEKKyAgICAvLyBpcyBpbiBwb2ludHMgKGEgcG9pbnQgaXMgMS83MiBv
ZiBhbiBpbmNoKS5SZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8KKyAgICAvLyBiZSBwcmlu
dGVkIGF0IHRoZXNlIHNldHRpbmdzLgorICAgIGludCBwcmludEJlZ2luKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHByaW50YWJsZUFyZWEsIGludCBwcmludGVyRFBJKSBjb25zdDsKKyAgICAvLyBQ
cmludHMgdGhlIHBhZ2Ugc3BlY2lmaWVkIGJ5IHBhZ2VOdW1iZXIgKDAtYmFzZWQgaW5kZXgpIGlu
dG8gdGhlIHN1cHBsaWVkIGNhbnZhcy4KKyAgICBib29sIHByaW50UGFnZShpbnQgcGFnZU51bWJl
ciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBnYyk7CisgICAgLy8gRW5kcyB0aGUgcHJpbnQg
b3BlcmF0aW9uLgorICAgIHZvaWQgcHJpbnRFbmQoKTsKKwogICAgIC8vIFJlc291cmNlIGxvYWQg
ZXZlbnRzIGZvciB0aGUgcGx1Z2luJ3Mgc291cmNlIGRhdGE6CiAgICAgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciAqZGF0YSwgaW50IGRhdGFMZW5ndGgpOwo=
</data>
<flag name="review"
          id="33503"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="33504"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50407</attachid>
            <date>2010-03-10 09:08:50 -0800</date>
            <delta_ts>2010-03-10 10:50:29 -0800</delta_ts>
            <desc>Fixed style issues</desc>
            <filename>PluginPrint.patch</filename>
            <type>text/plain</type>
            <size>16204</size>
            <attacher>sanjeevr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1Nzg0KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDEzIEBADQorMjAxMC0wMy0xMCAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8
c2FuamVldnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFsbG93IGEgcGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93
c2VyJ3MgcHJpbnQgd29ya2Zsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTU1MAorCisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNw
cDoKKyAgICAgICAgKiBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuaDoKKwogMjAxMC0wMy0xMCAgSmVy
ZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDU1NzgzKQ0KKysrIFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQ0KQEAgLTM0LDYgKzM0LDcgQEANCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ3LDYgKzQ4
LDcgQEANCiBjbGFzcyBQbHVnaW5Ub2tlbml6ZXIgOiBwdWJsaWMgVG9rZW5pemVyIHsKIHB1Ymxp
YzoKICAgICBQbHVnaW5Ub2tlbml6ZXIoRG9jdW1lbnQqIGRvYykgOiBtX2RvYyhkb2MpLCBtX2Vt
YmVkRWxlbWVudCgwKSB7fQorICAgIHN0YXRpYyBXaWRnZXQqIHBsdWdpbldpZGdldEZyb21Eb2N1
bWVudChEb2N1bWVudCogZG9jKTsKICAgICAgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwpAQCAtNjIs
NyArNjQsMjEgQEANCiAgICAgRG9jdW1lbnQqIG1fZG9jOwogICAgIEhUTUxFbWJlZEVsZW1lbnQq
IG1fZW1iZWRFbGVtZW50OwogfTsKLSAgICAKKworV2lkZ2V0KiBQbHVnaW5Ub2tlbml6ZXI6OnBs
dWdpbldpZGdldEZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jKQoreworICAgIEFTU0VSVChkb2Mp
OworICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jLT5ib2R5KCk7CisgICAgaWYgKGJvZHkp
IHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBib2R5LT5maXJzdENoaWxkKCk7CisgICAg
ICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5yZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpOworICAgICAgICAgICAgcmV0dXJu
IHRvUmVuZGVyRW1iZWRkZWRPYmplY3Qobm9kZS0+cmVuZGVyZXIoKSktPndpZGdldCgpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB2b2lkIFBsdWdpblRva2VuaXplcjo6
d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCkKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE0Niw1ICsxNjIsMTAgQEANCiB7CiAgICAgcmV0dXJuIG5ldyBQbHVnaW5U
b2tlbml6ZXIodGhpcyk7CiB9Ci0gICAgCisKK1dpZGdldCogUGx1Z2luRG9jdW1lbnQ6OnBsdWdp
bldpZGdldCgpCit7CisgICAgcmV0dXJuIFBsdWdpblRva2VuaXplcjo6cGx1Z2luV2lkZ2V0RnJv
bURvY3VtZW50KHRoaXMpOwogfQorCit9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1
bWVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuaAko
cmV2aXNpb24gNTU3ODMpDQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQ0KQEAgLTI4LDcgKzI4LDggQEANCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKworY2xhc3MgV2lkZ2V0OwogY2xhc3MgUGx1
Z2luRG9jdW1lbnQgOiBwdWJsaWMgSFRNTERvY3VtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQbHVnaW5Eb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKQEAgLTM2LDYg
KzM3LDggQEANCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luRG9jdW1lbnQoZnJh
bWUpKTsKICAgICB9CiAKKyAgICBXaWRnZXQqIHBsdWdpbldpZGdldCgpOworCiBwcml2YXRlOgog
ICAgIFBsdWdpbkRvY3VtZW50KEZyYW1lKik7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lv
biA1NTc4NCkNCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpA
QCAtMSwzICsxLDE3IEBADQorMjAxMC0wMy0xMCAgU2FuamVldiBSYWRoYWtyaXNobmFuICA8c2Fu
amVldnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFsbG93IGEgcGx1Z2luIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBicm93c2Vy
J3MgcHJpbnQgd29ya2Zsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNTU1MAorCisgICAgICAgICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAg
ICogcHVibGljL1dlYlBsdWdpbi5oOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgor
ICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5jcHA6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaDoK
KwogMjAxMC0wMy0xMCAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkZyYW1lLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmgJKHJldmlzaW9uIDU1NzgzKQ0KKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RnJhbWUuaAkod29ya2luZyBjb3B5KQ0KQEAgLTM3MCwxMCArMzcwLDE0IEBADQogCiAgICAgLy8g
UHJpbnRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLSAgICAvLyBSZWZvcm1hdHMgdGhlIFdlYkZyYW1lIGZvciBwcmludGlu
Zy4gIHBhZ2VTaXplIGlzIHRoZSBwYWdlIHNpemUgaW4KLSAgICAvLyBwaXhlbHMuICBSZXR1cm5z
IHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgcHJpbnRlZCBhdCB0aGUKLSAgICAvLyBn
aXZlbiBwYWdlIHNpemUuCi0gICAgdmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25zdCBXZWJTaXpl
JiBwYWdlU2l6ZSkgPSAwOworICAgIC8vIFJlZm9ybWF0cyB0aGUgV2ViRnJhbWUgZm9yIHByaW50
aW5nLiBwYWdlU2l6ZSBpcyB0aGUgcGFnZSBzaXplIGluCisgICAgLy8gcG9pbnRzIChhIHBvaW50
IGluIDEvNzIgb2YgYW4gaW5jaCkuIHByaW50ZXJEUEkgaXMgdGhlIHVzZXIgc2VsZWN0ZWQsCisg
ICAgLy8gRFBJIGZvciB0aGUgcHJpbnRlci4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRo
YXQKKyAgICAvLyBjYW4gYmUgcHJpbnRlZCBhdCB0aGUgZ2l2ZW4gcGFnZSBzaXplLiBUaGUgb3V0
IHBhcmFtIHVzZUJyb3dzZXJPdmVybGF5cworICAgIC8vIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBi
cm93c2VyIHByb2Nlc3Mgc2hvdWxkIHVzZSBpdHMgb3ZlcmxheXMgKGhlYWRlciwKKyAgICAvLyBm
b290ZXIsIG1hcmdpbnMgZXRjKSBvciB3aGV0aGVyIHRoZSByZW5kZXJlciBjb250cm9scyB0aGlz
LgorICAgIHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUsIGlu
dCBwcmludGVyRFBJID0gNzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB1c2VC
cm93c2VyT3ZlcmxheXMgPSAwKSA9IDA7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBwYWdlIHNocmlu
a2luZyBmYWN0b3IgY2FsY3VsYXRlZCBieSB3ZWJraXQgKHVzdWFsbHkKICAgICAvLyBiZXR3ZWVu
IDEvMS4yNSBhbmQgMS8yKS4gUmV0dXJucyAwIGlmIHRoZSBwYWdlIG51bWJlciBpcyBpbnZhbGlk
IG9yCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaAkocmV2aXNpb24gNTU3ODMp
DQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaAkod29ya2luZyBjb3B5KQ0K
QEAgLTgwLDYgKzgwLDE5IEBADQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZ0ZyYW1l
UmVxdWVzdCgKICAgICAgICAgY29uc3QgV2ViVVJMJiwgdm9pZCogbm90aWZ5RGF0YSwgY29uc3Qg
V2ViVVJMRXJyb3ImKSA9IDA7CiAKKyAgICAvLyBQcmludGluZyBpbnRlcmZhY2UuCisgICAgLy8g
V2hldGhlciB0aGUgcGx1Z2luIHN1cHBvcnRzIGl0cyBvd24gcGFnaW5hdGVkIHByaW50LiBUaGUg
b3RoZXIgcHJpbnQKKyAgICAvLyBpbnRlcmZhY2UgbWV0aG9kcyBhcmUgY2FsbGVkIG9ubHkgaWYg
dGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BhZ2lu
YXRlZFByaW50KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBTZXRzIHVwIHByaW50aW5nIGF0
IHRoZSBnaXZlbiBwcmludCByZWN0IGFuZCBwcmludGVyIERQSS4gcHJpbnRhYmxlQXJlYQorICAg
IC8vIGlzIGluIHBvaW50cyAoYSBwb2ludCBpcyAxLzcyIG9mIGFuIGluY2gpLlJldHVybnMgdGhl
IG51bWJlciBvZiBwYWdlcyB0bworICAgIC8vIGJlIHByaW50ZWQgYXQgdGhlc2Ugc2V0dGluZ3Mu
CisgICAgdmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25zdCBXZWJSZWN0JiBwcmludGFibGVBcmVh
LCBpbnQgcHJpbnRlckRQSSkgeyByZXR1cm4gMDsgfQorICAgIC8vIFByaW50cyB0aGUgcGFnZSBz
cGVjaWZpZWQgYnkgcGFnZU51bWJlciAoMC1iYXNlZCBpbmRleCkgaW50byB0aGUgc3VwcGxpZWQg
Y2FudmFzLgorICAgIHZpcnR1YWwgYm9vbCBwcmludFBhZ2UoaW50IHBhZ2VOdW1iZXIsIFdlYkNh
bnZhcyogY2FudmFzKSB7IHJldHVybiBmYWxzZTsgfQorICAgIC8vIEVuZHMgdGhlIHByaW50IG9w
ZXJhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRFbmQoKSB7IH0KKwogcHJvdGVjdGVkOgog
ICAgIH5XZWJQbHVnaW4oKSB7IH0KIH07CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5jcHAJKHJldmlzaW9uIDU1NzgzKQ0KKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTEwMSw2ICsxMDEsNyBAQA0KICNpbmNsdWRl
ICJtYXJrdXAuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUHJpbnRDb250
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNU
ZXh0LmgiCkBAIC0xMzAsNiArMTMxLDcgQEANCiAjaW5jbHVkZSAiV2ViSGlzdG9yeUl0ZW0uaCIK
ICNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJQYXNzd29yZEF1dG9j
b21wbGV0ZUxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgog
I2luY2x1ZGUgIldlYlJhbmdlLmgiCiAjaW5jbHVkZSAiV2ViUmVjdC5oIgogI2luY2x1ZGUgIldl
YlNjcmlwdFNvdXJjZS5oIgpAQCAtMjQ2LDcgKzI0OCwyMCBAQA0KICAgICB9CiB9CiAKLS8vIFNp
bXBsZSBjbGFzcyB0byBvdmVycmlkZSBzb21lIG9mIFByaW50Q29udGV4dCBiZWhhdmlvci4KKy8v
IElmIHRoZSBmcmFtZSBob3N0cyBhIFBsdWdpbkRvY3VtZW50LCB0aGlzIG1ldGhvZCByZXR1cm5z
IHRoZSBXZWJQbHVnaW5Db250YWluZXJJbXBsCisvLyB0aGF0IGhvc3RzIHRoZSBwbHVnaW4uCitz
dGF0aWMgV2ViUGx1Z2luQ29udGFpbmVySW1wbCogcGx1Z2luQ29udGFpbmVyRnJvbUZyYW1lKEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1
bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBQbHVnaW5Eb2N1bWVudCogcGx1Z2luRG9j
dW1lbnQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KGZyYW1lLT5kb2N1bWVudCgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViUGx1Z2luQ29udGFpbmVySW1wbCAqPihwbHVnaW5E
b2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworfQorCisvLyBTaW1wbGUgY2xhc3MgdG8gb3ZlcnJp
ZGUgc29tZSBvZiBQcmludENvbnRleHQgYmVoYXZpb3IuIFNvbWUgb2YgdGhlIG1ldGhvZHMKKy8v
IG1hZGUgdmlydHVhbCBzbyB0aGF0IHRoZXkgY2FuIGJlIG92ZXJyaWRlbiBieSBDaHJvbWVQbHVn
aW5QcmludENvbnRleHQuCiBjbGFzcyBDaHJvbWVQcmludENvbnRleHQgOiBwdWJsaWMgUHJpbnRD
b250ZXh0LCBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIENocm9tZVByaW50Q29u
dGV4dChGcmFtZSogZnJhbWUpCkBAIC0yNTUsMTUgKzI3MCwyMCBAQA0KICAgICB7CiAgICAgfQog
Ci0gICAgdm9pZCBiZWdpbihmbG9hdCB3aWR0aCkKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oZmxv
YXQgd2lkdGgpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fcHJpbnRlZFBhZ2VXaWR0aCk7CiAg
ICAgICAgIG1fcHJpbnRlZFBhZ2VXaWR0aCA9IHdpZHRoOwogICAgICAgICBQcmludENvbnRleHQ6
OmJlZ2luKG1fcHJpbnRlZFBhZ2VXaWR0aCk7CiAgICAgfQogCi0gICAgZmxvYXQgZ2V0UGFnZVNo
cmluayhpbnQgcGFnZU51bWJlcikgY29uc3QKKyAgICB2aXJ0dWFsIHZvaWQgZW5kKCkKICAgICB7
CisgICAgICAgIFByaW50Q29udGV4dDo6ZW5kKCk7CisgICAgfQorCisgICAgdmlydHVhbCBmbG9h
dCBnZXRQYWdlU2hyaW5rKGludCBwYWdlTnVtYmVyKSBjb25zdAorICAgIHsKICAgICAgICAgSW50
UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJlY3RzW3BhZ2VOdW1iZXJdOwogICAgICAgICByZXR1cm4g
bV9wcmludGVkUGFnZVdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsKICAgICB9CkBAIC0yNzEsNyAr
MjkxLDcgQEANCiAgICAgLy8gU3Bvb2xzIHRoZSBwcmludGVkIHBhZ2UsIGEgc3VicmVjdCBvZiBt
X2ZyYW1lLiAgU2tpcCB0aGUgc2NhbGUgc3RlcC4KICAgICAvLyBOYXRpdmVUaGVtZSBkb2Vzbid0
IHBsYXkgd2VsbCB3aXRoIHNjYWxpbmcuIFNjYWxpbmcgaXMgZG9uZSBicm93c2VyIHNpZGUKICAg
ICAvLyBpbnN0ZWFkLiAgUmV0dXJucyB0aGUgc2NhbGUgdG8gYmUgYXBwbGllZC4KLSAgICBmbG9h
dCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGludCBwYWdlTnVtYmVyKQorICAgIHZp
cnR1YWwgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dCYgY3R4LCBpbnQgcGFnZU51bWJl
cikKICAgICB7CiAgICAgICAgIEludFJlY3QgcGFnZVJlY3QgPSBtX3BhZ2VSZWN0c1twYWdlTnVt
YmVyXTsKICAgICAgICAgZmxvYXQgc2NhbGUgPSBtX3ByaW50ZWRQYWdlV2lkdGggLyBwYWdlUmVj
dC53aWR0aCgpOwpAQCAtMjg1LDExICszMDUsOTUgQEANCiAgICAgICAgIHJldHVybiBzY2FsZTsK
ICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJl
Y3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZs
b2F0IHVzZXJTY2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQpCisgICAgeworICAgICAg
ICByZXR1cm4gUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKHByaW50UmVjdCwgaGVhZGVy
SGVpZ2h0LCBmb290ZXJIZWlnaHQsIHVzZXJTY2FsZUZhY3Rvciwgb3V0UGFnZUhlaWdodCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCBpbnQgcGFnZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VDb3VudCgpOworICAgIH0KKworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRVc2VCcm93c2VyT3ZlcmxheXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCiBwcml2YXRlOgogICAgIC8vIFNldCB3aGVuIHByaW50aW5nLgog
ICAgIGZsb2F0IG1fcHJpbnRlZFBhZ2VXaWR0aDsKIH07CiAKKy8vIFNpbXBsZSBjbGFzcyB0byBv
dmVycmlkZSBzb21lIG9mIFByaW50Q29udGV4dCBiZWhhdmlvci4gVGhpcyBpcyB1c2VkIHdoZW4K
Ky8vIHRoZSBmcmFtZSBob3N0cyBhIHBsdWdpbiB0aGF0IHN1cHBvcnRzIGN1c3RvbSBwcmludGlu
Zy4gSW4gdGhpcyBjYXNlLCB3ZQorLy8gd2FudCB0byBkZWxlZ2F0ZSBhbGwgcHJpbnRpbmcgcmVs
YXRlZCBjYWxscyB0byB0aGUgcGx1Z2luLgorY2xhc3MgQ2hyb21lUGx1Z2luUHJpbnRDb250ZXh0
IDogcHVibGljIENocm9tZVByaW50Q29udGV4dCB7CitwdWJsaWM6CisgICAgQ2hyb21lUGx1Z2lu
UHJpbnRDb250ZXh0KEZyYW1lKiBmcmFtZSwgaW50IHByaW50ZXJEUEkpCisgICAgICAgIDogQ2hy
b21lUHJpbnRDb250ZXh0KGZyYW1lKSwgbV9wYWdlQ291bnQoMCksIG1fcHJpbnRlckRQSShwcmlu
dGVyRFBJKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBIQVMgdG8gYmUgYSBmcmFtZSBob3N0aW5n
IGEgZnVsbC1tb2RlIHBsdWdpbgorICAgICAgICBBU1NFUlQoZnJhbWUtPmRvY3VtZW50KCktPmlz
UGx1Z2luRG9jdW1lbnQoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luKGZsb2F0
IHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5kKCkKKyAgICB7Cisg
ICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIHBsdWdpbkNvbnRhaW5lciA9IHBsdWdpbkNv
bnRhaW5lckZyb21GcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgaWYgKHBsdWdpbkNvbnRhaW5lciAm
JiBwbHVnaW5Db250YWluZXItPnN1cHBvcnRzUGFnaW5hdGVkUHJpbnQoKSkKKyAgICAgICAgICAg
IHBsdWdpbkNvbnRhaW5lci0+cHJpbnRFbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdmlydHVhbCBmbG9hdCBnZXRQYWdl
U2hyaW5rKGludCBwYWdlTnVtYmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qg
c2hyaW5rIHRoZSBwYWdlIChtYXliZSB3ZSBzaG91bGQgYXNrIHRoZSB3aWRnZXQgPz8pCisgICAg
ICAgIHJldHVybiAxLjA7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQYWdlUmVj
dHMoY29uc3QgRmxvYXRSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQg
Zm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0
KQorICAgIHsKKyAgICAgICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbCogcGx1Z2luQ29udGFpbmVy
ID0gcGx1Z2luQ29udGFpbmVyRnJvbUZyYW1lKG1fZnJhbWUpOworICAgICAgICBpZiAocGx1Z2lu
Q29udGFpbmVyICYmIHBsdWdpbkNvbnRhaW5lci0+c3VwcG9ydHNQYWdpbmF0ZWRQcmludCgpKQor
ICAgICAgICAgICAgbV9wYWdlQ291bnQgPSBwbHVnaW5Db250YWluZXItPnByaW50QmVnaW4oSW50
UmVjdChwcmludFJlY3QpLCBtX3ByaW50ZXJEUEkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGludCBwYWdlQ291
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZUNvdW50OworICAgIH0KKwor
ICAgIC8vIFNwb29scyB0aGUgcHJpbnRlZCBwYWdlLCBhIHN1YnJlY3Qgb2YgbV9mcmFtZS4gIFNr
aXAgdGhlIHNjYWxlIHN0ZXAuCisgICAgLy8gTmF0aXZlVGhlbWUgZG9lc24ndCBwbGF5IHdlbGwg
d2l0aCBzY2FsaW5nLiBTY2FsaW5nIGlzIGRvbmUgYnJvd3NlciBzaWRlCisgICAgLy8gaW5zdGVh
ZC4gIFJldHVybnMgdGhlIHNjYWxlIHRvIGJlIGFwcGxpZWQuCisgICAgdmlydHVhbCBmbG9hdCBz
cG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGludCBwYWdlTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbCogcGx1Z2luQ29udGFpbmVyID0gcGx1Z2luQ29u
dGFpbmVyRnJvbUZyYW1lKG1fZnJhbWUpOworICAgICAgICBpZiAocGx1Z2luQ29udGFpbmVyICYm
IHBsdWdpbkNvbnRhaW5lci0+c3VwcG9ydHNQYWdpbmF0ZWRQcmludCgpKQorICAgICAgICAgICAg
cGx1Z2luQ29udGFpbmVyLT5wcmludFBhZ2UocGFnZU51bWJlciwgJmN0eCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMS4w
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VCcm93c2VyT3ZlcmxheXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICAvLyBTZXQgd2hlbiBwcmludGluZy4KKyAgICBpbnQgbV9wYWdlQ291bnQ7CisgICAgaW50IG1f
cHJpbnRlckRQSTsKK307CisKIHN0YXRpYyBXZWJEYXRhU291cmNlKiBEYXRhU291cmNlRm9yRG9j
TG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgcmV0dXJuIGxvYWRlciA/IFdl
YkRhdGFTb3VyY2VJbXBsOjpmcm9tRG9jdW1lbnRMb2FkZXIobG9hZGVyKSA6IDA7CkBAIC0xMDky
LDExICsxMTk2LDE3IEBADQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgV2ViRnJhbWVJbXBs
OjpwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplKQoraW50IFdlYkZyYW1lSW1wbDo6
cHJpbnRCZWdpbihjb25zdCBXZWJTaXplJiBwYWdlU2l6ZSwgaW50IHByaW50ZXJEUEksIGJvb2wg
KnVzZUJyb3dzZXJPdmVybGF5cykKIHsKICAgICBBU1NFUlQoIWZyYW1lKCktPmRvY3VtZW50KCkt
PmlzRnJhbWVTZXQoKSk7CisgICAgLy8gSWYgdGhpcyBpcyBhIHBsdWdpbiBkb2N1bWVudCwgY2hl
Y2sgaWYgdGhlIHBsdWdpbiBzdXBwb3J0cyBpdHMgb3duCisgICAgLy8gcHJpbnRpbmcuIElmIGl0
IGRvZXMsIHdlIHdpbGwgZGVsZWdhdGUgYWxsIHByaW50aW5nIHRvIHRoYXQuCisgICAgV2ViUGx1
Z2luQ29udGFpbmVySW1wbCogcGx1Z2luQ29udGFpbmVyID0gcGx1Z2luQ29udGFpbmVyRnJvbUZy
YW1lKGZyYW1lKCkpOworICAgIGlmIChwbHVnaW5Db250YWluZXIgJiYgcGx1Z2luQ29udGFpbmVy
LT5zdXBwb3J0c1BhZ2luYXRlZFByaW50KCkpCisgICAgICAgIG1fcHJpbnRDb250ZXh0LnNldChu
ZXcgQ2hyb21lUGx1Z2luUHJpbnRDb250ZXh0KGZyYW1lKCksIHByaW50ZXJEUEkpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcHJpbnRDb250ZXh0LnNldChuZXcgQ2hyb21lUHJpbnRDb250ZXh0KGZy
YW1lKCkpKTsKIAotICAgIG1fcHJpbnRDb250ZXh0LnNldChuZXcgQ2hyb21lUHJpbnRDb250ZXh0
KGZyYW1lKCkpKTsKICAgICBGbG9hdFJlY3QgcmVjdCgwLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFnZVNpemUud2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZs
b2F0PihwYWdlU2l6ZS5oZWlnaHQpKTsKICAgICBtX3ByaW50Q29udGV4dC0+YmVnaW4ocmVjdC53
aWR0aCgpKTsKQEAgLTExMDQsNiArMTIxNCw5IEBADQogICAgIC8vIFdlIGlnbm9yZSB0aGUgb3Zl
cmxheXMgY2FsY3VsYXRpb24gZm9yIG5vdyBzaW5jZSB0aGV5IGFyZSBnZW5lcmF0ZWQgaW4gdGhl
CiAgICAgLy8gYnJvd3Nlci4gcGFnZUhlaWdodCBpcyBhY3R1YWxseSBhbiBvdXRwdXQgcGFyYW1l
dGVyLgogICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKHJlY3QsIDAsIDAsIDEu
MCwgcGFnZUhlaWdodCk7CisgICAgaWYgKHVzZUJyb3dzZXJPdmVybGF5cykKKyAgICAgICAgKnVz
ZUJyb3dzZXJPdmVybGF5cyA9IG1fcHJpbnRDb250ZXh0LT5zaG91bGRVc2VCcm93c2VyT3Zlcmxh
eXMoKTsKKwogICAgIHJldHVybiBtX3ByaW50Q29udGV4dC0+cGFnZUNvdW50KCk7CiB9CiAKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCShyZXZpc2lvbiA1NTc4MykNCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMTQy
LDcgKzE0Miw4IEBADQogICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNlbGVjdGlvbkFzVGV4dCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNlbGVjdGlvbkFzTWFya3VwKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHNlbGVjdFdvcmRBcm91bmRDYXJldCgpOwotICAgIHZpcnR1YWwgaW50
IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUpOworICAgIHZpcnR1YWwgaW50IHBy
aW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUsIGludCBwcmludGVyRFBJLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCogdXNlQnJvd3Nlck92ZXJsYXlzKTsKICAgICB2aXJ0
dWFsIGZsb2F0IHByaW50UGFnZShpbnQgcGFnZVRvUHJpbnQsIFdlYkNhbnZhcyopOwogICAgIHZp
cnR1YWwgZmxvYXQgZ2V0UHJpbnRQYWdlU2hyaW5rKGludCBwYWdlKTsKICAgICB2aXJ0dWFsIHZv
aWQgcHJpbnRFbmQoKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFp
bmVySW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiA1NTc4MykNCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjA2LDYg
KzIwNiwzNiBAQA0KICAgICAgICAgcmVwb3J0R2VvbWV0cnkoKTsKIH0KIAorYm9vbCBXZWJQbHVn
aW5Db250YWluZXJJbXBsOjpzdXBwb3J0c1BhZ2luYXRlZFByaW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV93ZWJQbHVnaW4tPnN1cHBvcnRzUGFnaW5hdGVkUHJpbnQoKTsKK30KKworaW50IFdl
YlBsdWdpbkNvbnRhaW5lckltcGw6OnByaW50QmVnaW4oY29uc3QgSW50UmVjdCYgcHJpbnRhYmxl
QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmludGVy
RFBJKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBsdWdpbi0+cHJpbnRCZWdpbihwcmludGFi
bGVBcmVhLCBwcmludGVyRFBJKTsKK30KKworYm9vbCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpw
cmludFBhZ2UoaW50IHBhZ2VOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdjKQoreworICAgIGdjLT5zYXZlKCk7
CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBXZWJD
YW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAgIGJvb2wg
cmV0ID0gbV93ZWJQbHVnaW4tPnByaW50UGFnZShwYWdlTnVtYmVyLCBjYW52YXMpOworICAgIGdj
LT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjpwcmludEVuZCgpCit7CisgICAgcmV0dXJuIG1fd2ViUGx1Z2luLT5wcmludEVuZCgp
OworfQorCiB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmludmFsaWRhdGUoKQogewogICAg
IFdpZGdldDo6aW52YWxpZGF0ZSgpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVn
aW5Db250YWluZXJJbXBsLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBsdWdpbkNvbnRhaW5lckltcGwuaAkocmV2aXNpb24gNTU3ODMpDQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHdvcmtpbmcgY29weSkNCkBAIC04NCw2
ICs4NCwyMCBAQA0KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBleGVjdXRlU2NyaXB0VVJMKGNvbnN0
IFdlYlVSTCYsIGJvb2wgcG9wdXBzQWxsb3dlZCk7CiAgICAgdmlydHVhbCB2b2lkIGxvYWRGcmFt
ZVJlcXVlc3QoY29uc3QgV2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdlYlN0cmluZyYgdGFyZ2V0LCBi
b29sIG5vdGlmeU5lZWRlZCwgdm9pZCogbm90aWZ5RGF0YSk7CiAKKyAgICAvLyBQcmludGluZyBp
bnRlcmZhY2UuIFRoZSBwbHVnaW4gY2FuIHN1cHBvcnQgY3VzdG9tIHByaW50aW5nCisgICAgLy8g
KHdoaWNoIG1lYW5zIGl0IGNvbnRyb2xzIHRoZSBsYXlvdXQsIG51bWJlciBvZiBwYWdlcyBldGMp
LgorICAgIC8vIFdoZXRoZXIgdGhlIHBsdWdpbiBzdXBwb3J0cyBpdHMgb3duIHBhZ2luYXRlZCBw
cmludC4gVGhlIG90aGVyIHByaW50CisgICAgLy8gaW50ZXJmYWNlIG1ldGhvZHMgYXJlIGNhbGxl
ZCBvbmx5IGlmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZS4KKyAgICBib29sIHN1cHBvcnRzUGFn
aW5hdGVkUHJpbnQoKSBjb25zdDsKKyAgICAvLyBTZXRzIHVwIHByaW50aW5nIGF0IHRoZSBnaXZl
biBwcmludCByZWN0IGFuZCBwcmludGVyIERQSS4gcHJpbnRhYmxlQXJlYQorICAgIC8vIGlzIGlu
IHBvaW50cyAoYSBwb2ludCBpcyAxLzcyIG9mIGFuIGluY2gpLlJldHVybnMgdGhlIG51bWJlciBv
ZiBwYWdlcyB0bworICAgIC8vIGJlIHByaW50ZWQgYXQgdGhlc2Ugc2V0dGluZ3MuCisgICAgaW50
IHByaW50QmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcHJpbnRhYmxlQXJlYSwgaW50IHBy
aW50ZXJEUEkpIGNvbnN0OworICAgIC8vIFByaW50cyB0aGUgcGFnZSBzcGVjaWZpZWQgYnkgcGFn
ZU51bWJlciAoMC1iYXNlZCBpbmRleCkgaW50byB0aGUgc3VwcGxpZWQgY2FudmFzLgorICAgIGJv
b2wgcHJpbnRQYWdlKGludCBwYWdlTnVtYmVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdj
KTsKKyAgICAvLyBFbmRzIHRoZSBwcmludCBvcGVyYXRpb24uCisgICAgdm9pZCBwcmludEVuZCgp
OworCiAgICAgLy8gUmVzb3VyY2UgbG9hZCBldmVudHMgZm9yIHRoZSBwbHVnaW4ncyBzb3VyY2Ug
ZGF0YToKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyICpkYXRhLCBp
bnQgZGF0YUxlbmd0aCk7Cg==
</data>
<flag name="review"
          id="33546"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="33556"
          type_id="3"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>