<?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>92275</bug_id>
          
          <creation_ts>2012-07-25 11:48:20 -0700</creation_ts>
          <short_desc>Need a way to get a snapshot image that does not show the selection</short_desc>
          <delta_ts>2012-08-10 00:22:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeff Miller">jeffm</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jeffm</cc>
    
    <cc>kbalazs</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>sullivan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>678306</commentid>
    <comment_count>0</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2012-07-25 11:48:20 -0700</bug_when>
    <thetext>We need a way to get a snapshot image that does not show the selection.

For example, navigate to any page and choose Edit-&gt;Select All (without a form field selected) to highlight the entire web page. I&apos;d like to be able to generate a snapshot of the page without the selection highlighting.

Simon and Sam suggested that this may require a new paint behavior, and Sam said we could expose this through a new API like WKBundlePageCreateSnapshotInViewCoordinatesWithOptions(). Dan notes that Frame::rangeImage shows how to save and restore the render tree selection without side effects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678307</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-07-25 11:48:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/11956802&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683298</commentid>
    <comment_count>2</comment_count>
      <attachid>155592</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-07-31 11:34:44 -0700</bug_when>
    <thetext>Created attachment 155592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683317</commentid>
    <comment_count>3</comment_count>
      <attachid>155592</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-07-31 11:43:49 -0700</bug_when>
    <thetext>Comment on attachment 155592
Patch

It seems a bit odd to make WKImageOptions know about document coordinates and selection, since it is really just a generic image class.  These options would be better suited as specific to the snapshot function I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683320</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-07-31 11:45:07 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 155592 [details])
&gt; It seems a bit odd to make WKImageOptions know about document coordinates and selection, since it is really just a generic image class.  These options would be better suited as specific to the snapshot function I think.

WKSnapshotOptions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683323</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-07-31 11:47:56 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 155592 [details] [details])
&gt; &gt; It seems a bit odd to make WKImageOptions know about document coordinates and selection, since it is really just a generic image class.  These options would be better suited as specific to the snapshot function I think.
&gt; 
&gt; WKSnapshotOptions?

Yeah, and just one of the options will make it create a shareable image.  This probably means we need a new function name as well, so how about WKBundlePageCreateSnapshopWithOptions().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683328</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-07-31 11:49:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 155592 [details] [details] [details])
&gt; &gt; &gt; It seems a bit odd to make WKImageOptions know about document coordinates and selection, since it is really just a generic image class.  These options would be better suited as specific to the snapshot function I think.
&gt; &gt; 
&gt; &gt; WKSnapshotOptions?
&gt; 
&gt; Yeah, and just one of the options will make it create a shareable image.  This probably means we need a new function name as well, so how about WKBundlePageCreateSnapshopWithOptions().

My patch already adds a function with this very name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683336</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-07-31 11:52:25 -0700</bug_when>
    <thetext>The term “selection” might be ambiguous in the API, because it may be mistaken to mean the selected range, rather than just the selection highlighting (and other effects), especially when combined with “exclude”. I don’t have a concrete alternative name to suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683380</commentid>
    <comment_count>8</comment_count>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2012-07-31 12:27:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The term “selection” might be ambiguous in the API, because it may be mistaken to mean the selected range, rather than just the selection highlighting (and other effects), especially when combined with “exclude”. I don’t have a concrete alternative name to suggest.

ImageOptionsSnapshotExcludingSelection could be ImageOptionsSnapshotExcludingSelectionHighlight

That might not be perfectly accurate, but it seems clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683386</commentid>
    <comment_count>9</comment_count>
      <attachid>155606</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-07-31 12:33:35 -0700</bug_when>
    <thetext>Created attachment 155606
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683399</commentid>
    <comment_count>10</comment_count>
      <attachid>155606</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-07-31 12:52:07 -0700</bug_when>
    <thetext>Comment on attachment 155606
New patch

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

&gt; Source/WebCore/page/FrameView.cpp:3207
&gt; +    HashMap&lt;RenderView*, RenderViewSelectionInfo&gt; selectionMap;
&gt; +    if (shouldPaintSelection == ExcludeSelection) {
&gt; +        for (Frame* frame = m_frame.get(); frame; frame = frame-&gt;tree()-&gt;traverseNext(m_frame.get())) {
&gt; +            if (RenderView* root = frame-&gt;contentRenderer()) {
&gt; +                RenderObject* currentStartObject;
&gt; +                int currentStartPos;
&gt; +                RenderObject* currentEndObject;
&gt; +                int currentEndPos;
&gt; +                root-&gt;getSelection(currentStartObject, currentStartPos, currentEndObject, currentEndPos);
&gt; +                selectionMap.add(root, RenderViewSelectionInfo(currentStartObject, currentStartPos, currentEndObject, currentEndPos));
&gt; +                root-&gt;clearSelection();
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +
&gt; +    paintContents(context, imageRect);
&gt; +
&gt; +    // Restore cached selection information.
&gt; +    const HashMap&lt;RenderView*, RenderViewSelectionInfo&gt;::const_iterator end = selectionMap.end();
&gt; +    for (HashMap&lt;RenderView*, RenderViewSelectionInfo&gt;::const_iterator it = selectionMap.begin(); it != end; ++it) {
&gt; +        RenderView* view = it-&gt;first;
&gt; +        RenderViewSelectionInfo selectionInfo = it-&gt;second;
&gt; +        view-&gt;setSelection(selectionInfo.startObject, selectionInfo.startPos, selectionInfo.endObject, selectionInfo.endPos);
&gt; +    }

This makes me a bit nervous. If anything happens during the paint that causes RenderObjects to get destroyed (e.g. a plugin runs script), then your pointers can go bad and you have a nasty security issue.

&gt; Source/WebKit2/Shared/ImageOptions.h:39
&gt; +enum SnapshotOptions {
&gt; +    SnapshotOptionsShareable = 1 &lt;&lt; 0,
&gt; +    SnapshotOptionsInDocumentCoordinates = 1 &lt;&lt; 1,
&gt; +    SnapshotOptionsExcludeSelectionHighlighting = 1 &lt;&lt; 2
&gt; +};

I think this needs a typedef for the type that holds the union of the flags, like WKSnapshotOptions.

&gt; Source/WebKit2/Shared/API/c/WKSharedAPICast.h:761
&gt; +inline SnapshotOptions wkImageOptionsToSnapshotOptions(WKImageOptions wkImageOptions)

I think it makes slightly more sense to say snapshotOptionsFromImageOptions

&gt; Source/WebKit2/Shared/API/c/WKSharedAPICast.h:768
&gt; +    return static_cast&lt;SnapshotOptions&gt;(snapshotOptions);

This is why you need that typedef.

&gt; Source/WebKit2/Shared/API/c/WKSharedAPICast.h:771
&gt; +inline SnapshotOptions toSnapshotOptions(WKSnapshotOptions wkSnapshotOptions)

Also use &apos;from&apos;.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h:404
&gt; +WK_EXPORT WKImageRef WKBundlePageCreateSnapshotWithOptions(WKBundlePageRef page, WKRect rect, WKSnapshotOptions options);
&gt;  WK_EXPORT WKImageRef WKBundlePageCreateSnapshotInViewCoordinates(WKBundlePageRef page, WKRect rect, WKImageOptions options);
&gt;  WK_EXPORT WKImageRef WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef page, WKRect rect, WKImageOptions options);
&gt;  WK_EXPORT WKImageRef WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef page, WKRect rect, double scaleFactor, WKImageOptions options);

So many snapshot methods!  What coordinate system does WKBundlePageCreateSnapshotWithOptions() use? How is it different from the 3 others? I think we should try hard not to add a new method here. Maybe the others should all be one, with flags.

Oh, I see that you&apos;re adding one with flags. Can we mark the others as deprecated? Can we just removed them (since we don&apos;t have many API clients yet)?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1228
&gt; +    FrameView::SelectionInSnaphot shouldPaintSelection = FrameView::ExcludeSelection;

Shouldn&apos;t this default to IncludeSelection?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:352
&gt; +    PassRefPtr&lt;WebImage&gt; snapshotWithOptions(const WebCore::IntRect&amp;, SnapshotOptions);
&gt; +    PassRefPtr&lt;WebImage&gt; snapshotInViewCoordinates(const WebCore::IntRect&amp;, SnapshotOptions);
&gt; +    PassRefPtr&lt;WebImage&gt; snapshotInDocumentCoordinates(const WebCore::IntRect&amp;, SnapshotOptions);
&gt; +    PassRefPtr&lt;WebImage&gt; scaledSnapshotInDocumentCoordinates(const WebCore::IntRect&amp;, double scaleFactor, SnapshotOptions);

These aren&apos;t API, so perhaps we can merge them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683430</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-07-31 13:30:44 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 155606 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155606&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:3207
&gt; &gt; +    HashMap&lt;RenderView*, RenderViewSelectionInfo&gt; selectionMap;
&gt; &gt; +    if (shouldPaintSelection == ExcludeSelection) {
&gt; &gt; +        for (Frame* frame = m_frame.get(); frame; frame = frame-&gt;tree()-&gt;traverseNext(m_frame.get())) {
&gt; &gt; +            if (RenderView* root = frame-&gt;contentRenderer()) {
&gt; &gt; +                RenderObject* currentStartObject;
&gt; &gt; +                int currentStartPos;
&gt; &gt; +                RenderObject* currentEndObject;
&gt; &gt; +                int currentEndPos;
&gt; &gt; +                root-&gt;getSelection(currentStartObject, currentStartPos, currentEndObject, currentEndPos);
&gt; &gt; +                selectionMap.add(root, RenderViewSelectionInfo(currentStartObject, currentStartPos, currentEndObject, currentEndPos));
&gt; &gt; +                root-&gt;clearSelection();
&gt; &gt; +            }
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    paintContents(context, imageRect);
&gt; &gt; +
&gt; &gt; +    // Restore cached selection information.
&gt; &gt; +    const HashMap&lt;RenderView*, RenderViewSelectionInfo&gt;::const_iterator end = selectionMap.end();
&gt; &gt; +    for (HashMap&lt;RenderView*, RenderViewSelectionInfo&gt;::const_iterator it = selectionMap.begin(); it != end; ++it) {
&gt; &gt; +        RenderView* view = it-&gt;first;
&gt; &gt; +        RenderViewSelectionInfo selectionInfo = it-&gt;second;
&gt; &gt; +        view-&gt;setSelection(selectionInfo.startObject, selectionInfo.startPos, selectionInfo.endObject, selectionInfo.endPos);
&gt; &gt; +    }
&gt; 
&gt; This makes me a bit nervous. If anything happens during the paint that causes RenderObjects to get destroyed (e.g. a plugin runs script), then your pointers can go bad and you have a nasty security issue.
&gt; 

Hmm, good point. I originally implemented this by adding 4 new member variables to RenderView to cache this selection information. That approach would avoid this problem, but of course it has the downside of adding 4 member variables to RenderView. Hmm. I&apos;ll have to think about this.

&gt; &gt; Source/WebKit2/Shared/ImageOptions.h:39
&gt; &gt; +enum SnapshotOptions {
&gt; &gt; +    SnapshotOptionsShareable = 1 &lt;&lt; 0,
&gt; &gt; +    SnapshotOptionsInDocumentCoordinates = 1 &lt;&lt; 1,
&gt; &gt; +    SnapshotOptionsExcludeSelectionHighlighting = 1 &lt;&lt; 2
&gt; &gt; +};
&gt; 
&gt; I think this needs a typedef for the type that holds the union of the flags, like WKSnapshotOptions.
&gt; 

I didn&apos;t add one because ImageOptions (in the same file) does not have one. Neither does FindOptions…it seems like most of the &quot;options&quot; don&apos;t do this. But that doesn&apos;t mean it&apos;s a good precedent, I suppose.

&gt; &gt; Source/WebKit2/Shared/API/c/WKSharedAPICast.h:761
&gt; &gt; +inline SnapshotOptions wkImageOptionsToSnapshotOptions(WKImageOptions wkImageOptions)
&gt; 
&gt; I think it makes slightly more sense to say snapshotOptionsFromImageOptions
&gt; 

Okay, fixed. 

&gt; &gt; Source/WebKit2/Shared/API/c/WKSharedAPICast.h:768
&gt; &gt; +    return static_cast&lt;SnapshotOptions&gt;(snapshotOptions);
&gt; 
&gt; This is why you need that typedef.
&gt; 

Again, the static cast matches the other &quot;options&quot; conversions in this file.

&gt; &gt; Source/WebKit2/Shared/API/c/WKSharedAPICast.h:771
&gt; &gt; +inline SnapshotOptions toSnapshotOptions(WKSnapshotOptions wkSnapshotOptions)
&gt; 
&gt; Also use &apos;from&apos;.
&gt; 

The standard in the file is to use &apos;to&apos; not &apos;from.&apos; See toImageOptions() and toFindOptions().

&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h:404
&gt; &gt; +WK_EXPORT WKImageRef WKBundlePageCreateSnapshotWithOptions(WKBundlePageRef page, WKRect rect, WKSnapshotOptions options);
&gt; &gt;  WK_EXPORT WKImageRef WKBundlePageCreateSnapshotInViewCoordinates(WKBundlePageRef page, WKRect rect, WKImageOptions options);
&gt; &gt;  WK_EXPORT WKImageRef WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef page, WKRect rect, WKImageOptions options);
&gt; &gt;  WK_EXPORT WKImageRef WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef page, WKRect rect, double scaleFactor, WKImageOptions options);
&gt; 
&gt; So many snapshot methods!  What coordinate system does WKBundlePageCreateSnapshotWithOptions() use? How is it different from the 3 others? I think we should try hard not to add a new method here. Maybe the others should all be one, with flags.
&gt; 
&gt; Oh, I see that you&apos;re adding one with flags. Can we mark the others as deprecated? Can we just removed them (since we don&apos;t have many API clients yet)?
&gt; 

The plan Sam outlines in the Radar is indeed to deprecate the older methods. As I explain the the Changelog, WKBundlePageCreateSnapshotWithOptions() assumes view coordinated unless you specify document coordinates with that option. 

They are used a few places in Safari, so we should remove them, but I think that should be a separate patch.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1228
&gt; &gt; +    FrameView::SelectionInSnaphot shouldPaintSelection = FrameView::ExcludeSelection;
&gt; 
&gt; Shouldn&apos;t this default to IncludeSelection?
&gt; 

Oops! Yes. I just set it to Exclude in order to test and forgot to set it back.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:352
&gt; &gt; +    PassRefPtr&lt;WebImage&gt; snapshotWithOptions(const WebCore::IntRect&amp;, SnapshotOptions);
&gt; &gt; +    PassRefPtr&lt;WebImage&gt; snapshotInViewCoordinates(const WebCore::IntRect&amp;, SnapshotOptions);
&gt; &gt; +    PassRefPtr&lt;WebImage&gt; snapshotInDocumentCoordinates(const WebCore::IntRect&amp;, SnapshotOptions);
&gt; &gt; +    PassRefPtr&lt;WebImage&gt; scaledSnapshotInDocumentCoordinates(const WebCore::IntRect&amp;, double scaleFactor, SnapshotOptions);
&gt; 
&gt; These aren&apos;t API, so perhaps we can merge them.

This is probably true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683532</commentid>
    <comment_count>12</comment_count>
      <attachid>155647</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-07-31 15:31:46 -0700</bug_when>
    <thetext>Created attachment 155647
New patch that attempts to address security concern</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683841</commentid>
    <comment_count>13</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-07-31 21:03:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=155647) [details]
&gt; New patch that attempts to address security concern

I think this only partly addresses the concern. Namely, it addresses the fact that a RenderView may go away, but not any of the other two renderer you save for each frame.

It occurs to me that rather than save, clear, and then restore the RenderView selection, you might be able to just clear it, and then later invoke FrameSelection::updateAppearance, which will reconstruct it in a safe manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684418</commentid>
    <comment_count>14</comment_count>
      <attachid>155851</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-08-01 11:57:46 -0700</bug_when>
    <thetext>Created attachment 155851
Patch

Good call, Dan! That totally works. Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689533</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-07 15:58:01 -0700</bug_when>
    <thetext>Sounds useful for chrome://newtab</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689551</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-07 16:02:27 -0700</bug_when>
    <thetext>This appears to be solving some of the same goals as bug 92043.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690772</commentid>
    <comment_count>17</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-08-08 14:50:35 -0700</bug_when>
    <thetext>Thanks Anders! Committed change: http://trac.webkit.org/changeset/125091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691490</commentid>
    <comment_count>18</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-09 09:16:06 -0700</bug_when>
    <thetext>After this change we don&apos;t draw scrollbars anymore, because now it calls FrameView::paintContents instead of ScrollView::paint, so it breaks a huge amount of pixel results (I checked Qt but I guess the same happens with the Mac port.) Was that intentional? If no, I&apos;m happy to prepare a patch to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691605</commentid>
    <comment_count>19</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-08-09 11:04:06 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; After this change we don&apos;t draw scrollbars anymore, because now it calls FrameView::paintContents instead of ScrollView::paint, so it breaks a huge amount of pixel results (I checked Qt but I guess the same happens with the Mac port.) Was that intentional? If no, I&apos;m happy to prepare a patch to fix this.

That was not intentional. Can you tell me some specific tests that are failing? So far I have not seen any failures in the Mac port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692266</commentid>
    <comment_count>20</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-10 00:00:40 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; After this change we don&apos;t draw scrollbars anymore, because now it calls FrameView::paintContents instead of ScrollView::paint, so it breaks a huge amount of pixel results (I checked Qt but I guess the same happens with the Mac port.) Was that intentional? If no, I&apos;m happy to prepare a patch to fix this.
&gt; 
&gt; That was not intentional. Can you tell me some specific tests that are failing? So far I have not seen any failures in the Mac port.

Have you run pixel tests? Bots don&apos;t do it. Basically every test that normally shows scrollbars are broken. For example there are 67 image fail in css1 with Qt (this can vary between ports according to the number of skipped tests):

run-webkit-tests -p -2 LayoutTests/css1
...
Regressions: Unexpected image-only failures : (67)
  css1/basic/comments.html = IMAGE
  css1/basic/containment.html = IMAGE
  css1/basic/id_as_selector.html = IMAGE
  css1/basic/inheritance.html = IMAGE
  css1/box_properties/border.html = IMAGE
  css1/box_properties/border_bottom.html = IMAGE
  css1/box_properties/border_bottom_width.html = IMAGE
  css1/box_properties/border_left.html = IMAGE
  ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692275</commentid>
    <comment_count>21</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-10 00:22:08 -0700</bug_when>
    <thetext>Filed bug 93693 to fix the scrollbar issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155592</attachid>
            <date>2012-07-31 11:34:44 -0700</date>
            <delta_ts>2012-07-31 12:33:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>14671</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA3LTMxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzUKKyAgICAgICAgTmVlZCBhIHdheSB0byBnZXQgYSBzbmFw
c2hvdCBpbWFnZSB0aGF0IGRvZXMgbm90IHNob3cgdGhlIHNlbGVjdGlvbgorICAgICAgICAtYW5k
IGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk1NjgwMj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgZnVuY3Rpb24g
RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoKSBoYXMgdGhlIG9wdGlvbiB0byAK
KyAgICAgICAgZXhjbHVkZSBzZWxlY3Rpb24gZnJvbSB0aGUgc25hcHNob3QuCisKKyAgICAgICAg
RXhwb3J0IG5ldyBmdW5jdGlvbgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAg
IFVzZSBhIEhhc2hNYXAgbWFwcGluZyBSZW5kZXJWaWV3cyB0byB0aGVpciBjb3JyZXNwb25kaW5n
IHNlbGVjdGlvbiAKKyAgICAgICAgaW5mb3JtYXRpb24gc28gdGhhdCBpdCBjYW4gYmUgY2FjaGVk
IGFuZCB0aGVuIGNsZWFyZWQgZnJvbSB0aGUgCisgICAgICAgIFJlbmRlclZpZXcgd2hlbiBzZWxl
Y3Rpb24gaXMgdG8gYmUgZXhjbHVkZWQuIFJlc3RvcmUgYWxsIG9mIHRoaXMgCisgICAgICAgIGlu
Zm9ybWF0aW9uIGFmdGVyIGNhbGxpbmcgcGFpbnRDb250ZW50cygpLgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXdTZWxlY3Rpb25JbmZv
OjpSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbyk6CisgICAgICAgIChSZW5kZXJWaWV3U2VsZWN0aW9u
SW5mbyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
cGFpbnRDb250ZW50c0ZvclNuYXBzaG90KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgor
CiAyMDEyLTA3LTMxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI0MjA3LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NTUsNiArOTU1LDcgQEAgX19aTjdXZWJDb3JlOUZy
YW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcAogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0QmFz
ZUJhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyM3Vw
ZGF0ZUNhbkhhdmVTY3JvbGxiYXJzRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNGZvcmNlTGF5
b3V0Rm9yUGFnaW5hdGlvbkVSS05TXzlGbG9hdFNpemVFUzNfZk5TXzE5QWRqdXN0Vmlld1NpemVP
ck5vdEUKK19fWk43V2ViQ29yZTlGcmFtZVZpZXcyNHBhaW50Q29udGVudHNGb3JTbmFwc2hvdEVQ
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEVOUzBfMThTZWxlY3Rpb25JblNuYXBo
b3RFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjZhZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZEVQ
ZmZmZgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzI5c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3Jl
ZW5FYgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzM3dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRl
ZFJlY3Vyc2l2ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAx
MjQwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNTAsNiArMzE1MCw2NiBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyhO
b2RlKiBub2RlCiAgICAgbV9ub2RlVG9EcmF3ID0gbm9kZTsKIH0KIAorc3RydWN0IFJlbmRlclZp
ZXdTZWxlY3Rpb25JbmZvIHsKKyAgICBSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbygpCisgICAgICAg
IDogc3RhcnRPYmplY3QoMCkKKyAgICAgICAgLCBzdGFydFBvcygtMSkKKyAgICAgICAgLCBlbmRP
YmplY3QoMCkKKyAgICAgICAgLCBlbmRQb3MoLTEpCisgICAgeworICAgIH0KKyAgICBSZW5kZXJW
aWV3U2VsZWN0aW9uSW5mbyhSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRJbmRleCwgUmVu
ZGVyT2JqZWN0KiBlbmQsIGludCBlbmRJbmRleCkKKyAgICAgICAgOiBzdGFydE9iamVjdChzdGFy
dCkKKyAgICAgICAgLCBzdGFydFBvcyhzdGFydEluZGV4KQorICAgICAgICAsIGVuZE9iamVjdChl
bmQpCisgICAgICAgICwgZW5kUG9zKGVuZEluZGV4KQorICAgIHsKKyAgICB9CisgICAgUmVuZGVy
T2JqZWN0KiBzdGFydE9iamVjdDsKKyAgICBpbnQgc3RhcnRQb3M7CisgICAgUmVuZGVyT2JqZWN0
KiBlbmRPYmplY3Q7CisgICAgaW50IGVuZFBvczsKK307CisKK3ZvaWQgRnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIFNlbGVjdGlvbkluU25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbikK
K3sKKyAgICB1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisKKyAgICAv
LyBDYWNoZSBwYWludCBiZWhhdmlvciBhbmQgc2V0IGEgbmV3IGJlaGF2aW9yIGFwcHJvcHJpYXRl
IGZvciBzbmFwc2hvdHMuCisgICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IHBhaW50QmVo
YXZpb3IoKTsKKyAgICBzZXRQYWludEJlaGF2aW9yKG9sZEJlaGF2aW9yIHwgUGFpbnRCZWhhdmlv
ckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CisKKyAgICAvLyBJZiB0aGUgc25hcHNob3Qgc2hv
dWxkIGV4Y2x1ZGUgc2VsZWN0aW9uLCB0aGVuIHdlIGhhdmUgdG8gZ28gdGhyb3VnaCBhbmQgY2Fj
aGUgdGhlbiBjbGVhcgorICAgIC8vIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgYWxsIG9mIG91
ciBGcmFtZXMuCisgICAgSGFzaE1hcDxSZW5kZXJWaWV3KiwgUmVuZGVyVmlld1NlbGVjdGlvbklu
Zm8+IHNlbGVjdGlvbk1hcDsKKyAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVk
ZVNlbGVjdGlvbikgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgp
KSkgeworICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTdGFydE9i
amVjdDsKKyAgICAgICAgICAgICAgICBpbnQgY3VycmVudFN0YXJ0UG9zOworICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY3VycmVudEVuZE9iamVjdDsKKyAgICAgICAgICAgICAgICBpbnQg
Y3VycmVudEVuZFBvczsKKyAgICAgICAgICAgICAgICByb290LT5nZXRTZWxlY3Rpb24oY3VycmVu
dFN0YXJ0T2JqZWN0LCBjdXJyZW50U3RhcnRQb3MsIGN1cnJlbnRFbmRPYmplY3QsIGN1cnJlbnRF
bmRQb3MpOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1hcC5hZGQocm9vdCwgUmVuZGVyVmll
d1NlbGVjdGlvbkluZm8oY3VycmVudFN0YXJ0T2JqZWN0LCBjdXJyZW50U3RhcnRQb3MsIGN1cnJl
bnRFbmRPYmplY3QsIGN1cnJlbnRFbmRQb3MpKTsKKyAgICAgICAgICAgICAgICByb290LT5jbGVh
clNlbGVjdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcGFp
bnRDb250ZW50cyhjb250ZXh0LCBpbWFnZVJlY3QpOworCisgICAgLy8gUmVzdG9yZSBjYWNoZWQg
c2VsZWN0aW9uIGluZm9ybWF0aW9uLgorICAgIGNvbnN0IEhhc2hNYXA8UmVuZGVyVmlldyosIFJl
bmRlclZpZXdTZWxlY3Rpb25JbmZvPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2VsZWN0aW9uTWFw
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxSZW5kZXJWaWV3KiwgUmVuZGVyVmlld1NlbGVjdGlv
bkluZm8+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNlbGVjdGlvbk1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IGl0LT5maXJzdDsKKyAgICAg
ICAgUmVuZGVyVmlld1NlbGVjdGlvbkluZm8gc2VsZWN0aW9uSW5mbyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzZWxlY3Rpb25JbmZvLnN0YXJ0T2JqZWN0LCBzZWxl
Y3Rpb25JbmZvLnN0YXJ0UG9zLCBzZWxlY3Rpb25JbmZvLmVuZE9iamVjdCwgc2VsZWN0aW9uSW5m
by5lbmRQb3MpOworICAgIH0KKworICAgIC8vIFJlc3RvcmUgY2FjaGVkIHBhaW50IGJlaGF2aW9y
LgorICAgIHNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IpOworfQorCiB2b2lkIEZyYW1lVmll
dzo6cGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVydGljYWxPdmVy
aGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lv
biAxMjQwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDYsNiArMjQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGFzdFBhaW50VGlt
ZShkb3VibGUgbGFzdFBhaW50VGltZSkgeyBtX2xhc3RQYWludFRpbWUgPSBsYXN0UGFpbnRUaW1l
OyB9CiAgICAgdm9pZCBzZXROb2RlVG9EcmF3KE5vZGUqKTsKIAorICAgIGVudW0gU2VsZWN0aW9u
SW5TbmFwaG90IHsgSW5jbHVkZVNlbGVjdGlvbiwgRXhjbHVkZVNlbGVjdGlvbiB9OworICAgIHZv
aWQgcGFpbnRDb250ZW50c0ZvclNuYXBzaG90KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGltYWdlUmVjdCwgU2VsZWN0aW9uSW5TbmFwaG90IHNob3VsZFBhaW50U2VsZWN0aW9uKTsK
KwogICAgIHZpcnR1YWwgdm9pZCBwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVy
dGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGNvcm5lclJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbGJhcihHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMjQyMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wNy0zMSAgQmV0aCBEYWtpbiAgPGJkYWtp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkyMjc1CisgICAgICAgIE5lZWQgYSB3YXkgdG8gZ2V0IGEgc25hcHNob3QgaW1hZ2Ug
dGhhdCBkb2VzIG5vdCBzaG93IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgLWFuZCBjb3JyZXNwb25k
aW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE5NTY4MDI+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSBXS0J1bmRsZVBh
Z2VDcmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKCkKKworICAgICAgICBOZXcgSW1hZ2VPcHRpb25z
IHRyYWNrIGlmIHRoZSBzbmFwc2hvdCBpcyBpbiBkb2N1bWVudCBjb29yZGluYXRlZCAKKyAgICAg
ICAgKG90aGVyd2lzZSB2aWV3IGNvb3JkaW5hdGVzIGFyZSBhc3N1bWVkKSBhbmQgd2hldGhlciBz
bmFwc2hvdHMgCisgICAgICAgIHNob3VsZCBleGNsdWRlIHNlbGVjdGlvbi4KKyAgICAgICAgKiBT
aGFyZWQvQVBJL2MvV0tJbWFnZS5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQ
SUNhc3QuaDoKKyAgICAgICAgKFdlYktpdDo6dG9JbWFnZU9wdGlvbnMpOgorICAgICAgICAqIFNo
YXJlZC9JbWFnZU9wdGlvbnMuaDoKKworICAgICAgICBOZXcgQVBJLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdL
QnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90V2l0aE9wdGlvbnMpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmg6CisKKyAgICAgICAgV2ViUGFn
ZTo6c25hcHNob3RXaXRoT3B0aW9ucygpIGNhbGxzIGVpdGhlciAKKyAgICAgICAgc25hcHNob3RJ
blZpZXdDb29yZGluYXRlcygpIG9yIHNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKCkgYmFz
ZWQgCisgICAgICAgIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c25hcHNo
b3RXaXRoT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgIFRoZXNlIGZ1bmN0
aW9ucyBub3cgdXNlIG5ldyBBUEkgb24gRnJhbWVWaWV3IHRvIHBhaW50IGludG8gdGhlIAorICAg
ICAgICBJbWFnZSdzIEdyYXBoaWNzQ29udGV4dC4gCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNuYXBzaG90SW5WaWV3Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
Y2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYlBhZ2UpOgorCiAyMDEyLTA3LTMxICBB
bmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgogCiAgICAgICAgIFtXSzJdIFZp
c2libGUgY29udGVudCByZWN0IHVwZGF0ZSB3aXRoIG51bGwgdHJhamVjdG9yeSB2ZWN0b3IgZG9l
cyBub3QgcmVhY2ggdGhlIGJhY2tpbmcgc3RvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9JbWFnZU9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1h
Z2VPcHRpb25zLmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9J
bWFnZU9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogZW51bSBJbWFnZU9wdGlvbnMgewogICAgIEltYWdlT3B0aW9uc1NoYXJlYWJs
ZSA9IDEgPDwgMCwKKyAgICBJbWFnZU9wdGlvbnNTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRl
cyA9IDEgPDwgMSwKKyAgICBJbWFnZU9wdGlvbnNTbmFwc2hvdEV4Y2x1ZGluZ1NlbGVjdGlvbiA9
IDEgPDwgMgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL2MvV0tJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9XS0ltYWdlLmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAg
ZXh0ZXJuICJDIiB7CiAKIGVudW0gewogICAgIGtXS0ltYWdlT3B0aW9uc1NoYXJlYWJsZSA9IDEg
PDwgMCwKKyAgICBrV0tJbWFnZU9wdGlvbnNTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyA9
IDEgPDwgMSwKKyAgICBrV0tJbWFnZU9wdGlvbnNTbmFwc2hvdEV4Y2x1ZGluZ1NlbGVjdGlvbiA9
IDEgPDwgMgogfTsKIHR5cGVkZWYgdWludDMyX3QgV0tJbWFnZU9wdGlvbnM7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHJldmlzaW9u
IDEyNDA0NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNzU0LDYgKzc1NCwxMCBAQCBpbmxpbmUgSW1hZ2VPcHRpb25z
IHRvSW1hZ2VPcHRpb25zKFdLSW1hCiAKICAgICBpZiAod2tJbWFnZU9wdGlvbnMgJiBrV0tJbWFn
ZU9wdGlvbnNTaGFyZWFibGUpCiAgICAgICAgIGltYWdlT3B0aW9ucyB8PSBJbWFnZU9wdGlvbnNT
aGFyZWFibGU7CisgICAgaWYgKHdrSW1hZ2VPcHRpb25zICYga1dLSW1hZ2VPcHRpb25zU25hcHNo
b3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpCisgICAgICAgIGltYWdlT3B0aW9ucyB8PSBJbWFnZU9w
dGlvbnNTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlczsKKyAgICBpZiAod2tJbWFnZU9wdGlv
bnMgJiBrV0tJbWFnZU9wdGlvbnNTbmFwc2hvdEV4Y2x1ZGluZ1NlbGVjdGlvbikKKyAgICAgICAg
aW1hZ2VPcHRpb25zIHw9IEltYWdlT3B0aW9uc1NuYXBzaG90RXhjbHVkaW5nU2VsZWN0aW9uOwog
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEltYWdlT3B0aW9ucz4oaW1hZ2VPcHRpb25zKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDEyNDA0NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4NywxMiBAQCBib29sIFdLQnVuZGxl
UGFnZUZpbmRTdHJpbmcoV0tCdW5kbGVQYWdlCiAgICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+
ZmluZFN0cmluZ0Zyb21JbmplY3RlZEJ1bmRsZSh0b0ltcGwodGFyZ2V0KS0+c3RyaW5nKCksIHRv
RmluZE9wdGlvbnMoZmluZE9wdGlvbnMpKTsKIH0KIAorV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VD
cmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3Qg
cmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBSZWZQdHI8V2ViSW1hZ2U+IHdl
YkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5zbmFwc2hvdFdpdGhPcHRpb25zKHRvSW50UmVjdChy
ZWN0KSwgdG9JbWFnZU9wdGlvbnMob3B0aW9ucykpOworICAgIHJldHVybiB0b0FQSSh3ZWJJbWFn
ZS5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KKwogV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VDcmVh
dGVTbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1Jl
Y3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBSZWZQdHI8V2ViSW1hZ2U+
IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5zbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKHRv
SW50UmVjdChyZWN0KSwgdG9JbWFnZU9wdGlvbnMob3B0aW9ucykpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5oCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTgsNiArMzk4LDcgQEAgV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVQYWdlQ2FuSGFuZGxl
UmVxdQogCiBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0YXJnZXQsIFdLRmluZE9wdGlvbnMgZmluZE9wdGlvbnMp
OwogCitXS19FWFBPUlQgV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdFdpdGhP
cHRpb25zKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMg
b3B0aW9ucyk7CiBXS19FWFBPUlQgV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hv
dEluVmlld0Nvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwgV0tJ
bWFnZU9wdGlvbnMgb3B0aW9ucyk7CiBXS19FWFBPUlQgV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VD
cmVhdGVTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tSZWN0IHJlY3QsIFdLSW1hZ2VPcHRpb25zIG9wdGlvbnMpOwogV0tfRVhQT1JUIFdLSW1hZ2VS
ZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU2NhbGVkU25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBkb3VibGUgc2NhbGVGYWN0b3IsIFdL
SW1hZ2VPcHRpb25zIG9wdGlvbnMpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTI0MDQ1KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkw
LDYgKzExOTAsMTMgQEAgdm9pZCBXZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlTwog
I2VuZGlmCiB9CiAKK1Bhc3NSZWZQdHI8V2ViSW1hZ2U+IFdlYlBhZ2U6OnNuYXBzaG90V2l0aE9w
dGlvbnMoY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2VPcHRpb25zIG9wdGlvbnMpCit7CisgICAg
aWYgKG9wdGlvbnMgJiBJbWFnZU9wdGlvbnNTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcykK
KyAgICAgICAgcmV0dXJuIHNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKHJlY3QsIG9wdGlv
bnMpOworICAgIHJldHVybiBzbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKHJlY3QsIG9wdGlvbnMp
OworfQorCiBQYXNzUmVmUHRyPFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hvdEluVmlld0Nvb3Jk
aW5hdGVzKGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlT3B0aW9ucyBvcHRpb25zKQogewogICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7
CkBAIC0xMjA4LDEyICsxMjE1LDExIEBAIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IFdlYlBhZ2U6OnNu
YXBzaG90SW4KICAgICBncmFwaGljc0NvbnRleHQtPmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2
aWNlU2NhbGVGYWN0b3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1yZWN0Lngo
KSwgLXJlY3QueSgpKTsKIAotICAgIGZyYW1lVmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5l
ZWRlZFJlY3Vyc2l2ZSgpOworICAgIEZyYW1lVmlldzo6U2VsZWN0aW9uSW5TbmFwaG90IHNob3Vs
ZFBhaW50U2VsZWN0aW9uID0gRnJhbWVWaWV3OjpJbmNsdWRlU2VsZWN0aW9uOworICAgIGlmIChv
cHRpb25zICYgSW1hZ2VPcHRpb25zU25hcHNob3RFeGNsdWRpbmdTZWxlY3Rpb24pCisgICAgICAg
IHNob3VsZFBhaW50U2VsZWN0aW9uID0gRnJhbWVWaWV3OjpFeGNsdWRlU2VsZWN0aW9uOwogCi0g
ICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhhdmlvcigp
OwotICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvciB8IFBhaW50QmVo
YXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotICAgIGZyYW1lVmlldy0+cGFpbnQoZ3Jh
cGhpY3NDb250ZXh0LmdldCgpLCByZWN0KTsKLSAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZp
b3Iob2xkQmVoYXZpb3IpOworICAgIGZyYW1lVmlldy0+cGFpbnRDb250ZW50c0ZvclNuYXBzaG90
KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgcmVjdCwgc2hvdWxkUGFpbnRTZWxlY3Rpb24pOwogCiAg
ICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKIH0KQEAgLTEyMzQsMTIgKzEyNDAsMTEgQEAg
UGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c2NhbGVkU25hcAogICAgIGdyYXBoaWNzQ29u
dGV4dC0+YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihjb21iaW5lZFNjYWxlRmFjdG9yKTsKICAgICBn
cmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAKLSAgICBm
cmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICBG
cmFtZVZpZXc6OlNlbGVjdGlvbkluU25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbiA9IEZyYW1l
Vmlldzo6SW5jbHVkZVNlbGVjdGlvbjsKKyAgICBpZiAob3B0aW9ucyAmIEltYWdlT3B0aW9uc1Nu
YXBzaG90RXhjbHVkaW5nU2VsZWN0aW9uKQorICAgICAgICBzaG91bGRQYWludFNlbGVjdGlvbiA9
IEZyYW1lVmlldzo6RXhjbHVkZVNlbGVjdGlvbjsKIAotICAgIFBhaW50QmVoYXZpb3Igb2xkQmVo
YXZpb3IgPSBmcmFtZVZpZXctPnBhaW50QmVoYXZpb3IoKTsKLSAgICBmcmFtZVZpZXctPnNldFBh
aW50QmVoYXZpb3Iob2xkQmVoYXZpb3IgfCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5n
TGF5ZXJzKTsKLSAgICBmcmFtZVZpZXctPnBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0Lmdl
dCgpLCByZWN0KTsKLSAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3Ip
OworICAgIGZyYW1lVmlldy0+cGFpbnRDb250ZW50c0ZvclNuYXBzaG90KGdyYXBoaWNzQ29udGV4
dC5nZXQoKSwgcmVjdCwgc2hvdWxkUGFpbnRTZWxlY3Rpb24pOwogCiAgICAgcmV0dXJuIHNuYXBz
aG90LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTI0MDQ1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3IEBA
IHB1YmxpYzoKICAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOwogICAgIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCisgICAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gc25hcHNo
b3RXaXRoT3B0aW9ucyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgSW1hZ2VPcHRpb25zKTsKICAg
ICBQYXNzUmVmUHRyPFdlYkltYWdlPiBzbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBJbWFnZU9wdGlvbnMpOwogICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+
IHNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBJ
bWFnZU9wdGlvbnMpOwogICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNjYWxlZFNuYXBzaG90SW5E
b2N1bWVudENvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBkb3VibGUgc2NhbGVG
YWN0b3IsIEltYWdlT3B0aW9ucyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155606</attachid>
            <date>2012-07-31 12:33:35 -0700</date>
            <delta_ts>2012-07-31 15:31:46 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>19575</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA3LTMxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzUKKyAgICAgICAgTmVlZCBhIHdheSB0byBnZXQgYSBzbmFw
c2hvdCBpbWFnZSB0aGF0IGRvZXMgbm90IHNob3cgdGhlIHNlbGVjdGlvbgorICAgICAgICAtYW5k
IGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk1NjgwMj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgZnVuY3Rpb24g
RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoKSBoYXMgdGhlIG9wdGlvbiB0byAK
KyAgICAgICAgZXhjbHVkZSBzZWxlY3Rpb24gZnJvbSB0aGUgc25hcHNob3QuCisKKyAgICAgICAg
RXhwb3J0IG5ldyBmdW5jdGlvbgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAg
IFVzZSBhIEhhc2hNYXAgbWFwcGluZyBSZW5kZXJWaWV3cyB0byB0aGVpciBjb3JyZXNwb25kaW5n
IHNlbGVjdGlvbiAKKyAgICAgICAgaW5mb3JtYXRpb24gc28gdGhhdCBpdCBjYW4gYmUgY2FjaGVk
IGFuZCB0aGVuIGNsZWFyZWQgZnJvbSB0aGUgCisgICAgICAgIFJlbmRlclZpZXcgd2hlbiBzZWxl
Y3Rpb24gaXMgdG8gYmUgZXhjbHVkZWQuIFJlc3RvcmUgYWxsIG9mIHRoaXMgCisgICAgICAgIGlu
Zm9ybWF0aW9uIGFmdGVyIGNhbGxpbmcgcGFpbnRDb250ZW50cygpLgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXdTZWxlY3Rpb25JbmZv
OjpSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbyk6CisgICAgICAgIChSZW5kZXJWaWV3U2VsZWN0aW9u
SW5mbyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
cGFpbnRDb250ZW50c0ZvclNuYXBzaG90KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgor
CiAyMDEyLTA3LTMxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI0MjA3LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NTUsNiArOTU1LDcgQEAgX19aTjdXZWJDb3JlOUZy
YW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcAogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0QmFz
ZUJhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyM3Vw
ZGF0ZUNhbkhhdmVTY3JvbGxiYXJzRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNGZvcmNlTGF5
b3V0Rm9yUGFnaW5hdGlvbkVSS05TXzlGbG9hdFNpemVFUzNfZk5TXzE5QWRqdXN0Vmlld1NpemVP
ck5vdEUKK19fWk43V2ViQ29yZTlGcmFtZVZpZXcyNHBhaW50Q29udGVudHNGb3JTbmFwc2hvdEVQ
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEVOUzBfMThTZWxlY3Rpb25JblNuYXBo
b3RFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjZhZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZEVQ
ZmZmZgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzI5c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3Jl
ZW5FYgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzM3dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRl
ZFJlY3Vyc2l2ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAx
MjQwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNTAsNiArMzE1MCw2NiBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyhO
b2RlKiBub2RlCiAgICAgbV9ub2RlVG9EcmF3ID0gbm9kZTsKIH0KIAorc3RydWN0IFJlbmRlclZp
ZXdTZWxlY3Rpb25JbmZvIHsKKyAgICBSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbygpCisgICAgICAg
IDogc3RhcnRPYmplY3QoMCkKKyAgICAgICAgLCBzdGFydFBvcygtMSkKKyAgICAgICAgLCBlbmRP
YmplY3QoMCkKKyAgICAgICAgLCBlbmRQb3MoLTEpCisgICAgeworICAgIH0KKyAgICBSZW5kZXJW
aWV3U2VsZWN0aW9uSW5mbyhSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRJbmRleCwgUmVu
ZGVyT2JqZWN0KiBlbmQsIGludCBlbmRJbmRleCkKKyAgICAgICAgOiBzdGFydE9iamVjdChzdGFy
dCkKKyAgICAgICAgLCBzdGFydFBvcyhzdGFydEluZGV4KQorICAgICAgICAsIGVuZE9iamVjdChl
bmQpCisgICAgICAgICwgZW5kUG9zKGVuZEluZGV4KQorICAgIHsKKyAgICB9CisgICAgUmVuZGVy
T2JqZWN0KiBzdGFydE9iamVjdDsKKyAgICBpbnQgc3RhcnRQb3M7CisgICAgUmVuZGVyT2JqZWN0
KiBlbmRPYmplY3Q7CisgICAgaW50IGVuZFBvczsKK307CisKK3ZvaWQgRnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIFNlbGVjdGlvbkluU25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbikK
K3sKKyAgICB1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisKKyAgICAv
LyBDYWNoZSBwYWludCBiZWhhdmlvciBhbmQgc2V0IGEgbmV3IGJlaGF2aW9yIGFwcHJvcHJpYXRl
IGZvciBzbmFwc2hvdHMuCisgICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IHBhaW50QmVo
YXZpb3IoKTsKKyAgICBzZXRQYWludEJlaGF2aW9yKG9sZEJlaGF2aW9yIHwgUGFpbnRCZWhhdmlv
ckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CisKKyAgICAvLyBJZiB0aGUgc25hcHNob3Qgc2hv
dWxkIGV4Y2x1ZGUgc2VsZWN0aW9uLCB0aGVuIHdlIGhhdmUgdG8gZ28gdGhyb3VnaCBhbmQgY2Fj
aGUgdGhlbiBjbGVhcgorICAgIC8vIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgYWxsIG9mIG91
ciBGcmFtZXMuCisgICAgSGFzaE1hcDxSZW5kZXJWaWV3KiwgUmVuZGVyVmlld1NlbGVjdGlvbklu
Zm8+IHNlbGVjdGlvbk1hcDsKKyAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVk
ZVNlbGVjdGlvbikgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgp
KSkgeworICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTdGFydE9i
amVjdDsKKyAgICAgICAgICAgICAgICBpbnQgY3VycmVudFN0YXJ0UG9zOworICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY3VycmVudEVuZE9iamVjdDsKKyAgICAgICAgICAgICAgICBpbnQg
Y3VycmVudEVuZFBvczsKKyAgICAgICAgICAgICAgICByb290LT5nZXRTZWxlY3Rpb24oY3VycmVu
dFN0YXJ0T2JqZWN0LCBjdXJyZW50U3RhcnRQb3MsIGN1cnJlbnRFbmRPYmplY3QsIGN1cnJlbnRF
bmRQb3MpOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1hcC5hZGQocm9vdCwgUmVuZGVyVmll
d1NlbGVjdGlvbkluZm8oY3VycmVudFN0YXJ0T2JqZWN0LCBjdXJyZW50U3RhcnRQb3MsIGN1cnJl
bnRFbmRPYmplY3QsIGN1cnJlbnRFbmRQb3MpKTsKKyAgICAgICAgICAgICAgICByb290LT5jbGVh
clNlbGVjdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcGFp
bnRDb250ZW50cyhjb250ZXh0LCBpbWFnZVJlY3QpOworCisgICAgLy8gUmVzdG9yZSBjYWNoZWQg
c2VsZWN0aW9uIGluZm9ybWF0aW9uLgorICAgIGNvbnN0IEhhc2hNYXA8UmVuZGVyVmlldyosIFJl
bmRlclZpZXdTZWxlY3Rpb25JbmZvPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2VsZWN0aW9uTWFw
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxSZW5kZXJWaWV3KiwgUmVuZGVyVmlld1NlbGVjdGlv
bkluZm8+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNlbGVjdGlvbk1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IGl0LT5maXJzdDsKKyAgICAg
ICAgUmVuZGVyVmlld1NlbGVjdGlvbkluZm8gc2VsZWN0aW9uSW5mbyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzZWxlY3Rpb25JbmZvLnN0YXJ0T2JqZWN0LCBzZWxl
Y3Rpb25JbmZvLnN0YXJ0UG9zLCBzZWxlY3Rpb25JbmZvLmVuZE9iamVjdCwgc2VsZWN0aW9uSW5m
by5lbmRQb3MpOworICAgIH0KKworICAgIC8vIFJlc3RvcmUgY2FjaGVkIHBhaW50IGJlaGF2aW9y
LgorICAgIHNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IpOworfQorCiB2b2lkIEZyYW1lVmll
dzo6cGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVydGljYWxPdmVy
aGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lv
biAxMjQwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDYsNiArMjQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGFzdFBhaW50VGlt
ZShkb3VibGUgbGFzdFBhaW50VGltZSkgeyBtX2xhc3RQYWludFRpbWUgPSBsYXN0UGFpbnRUaW1l
OyB9CiAgICAgdm9pZCBzZXROb2RlVG9EcmF3KE5vZGUqKTsKIAorICAgIGVudW0gU2VsZWN0aW9u
SW5TbmFwaG90IHsgSW5jbHVkZVNlbGVjdGlvbiwgRXhjbHVkZVNlbGVjdGlvbiB9OworICAgIHZv
aWQgcGFpbnRDb250ZW50c0ZvclNuYXBzaG90KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGltYWdlUmVjdCwgU2VsZWN0aW9uSW5TbmFwaG90IHNob3VsZFBhaW50U2VsZWN0aW9uKTsK
KwogICAgIHZpcnR1YWwgdm9pZCBwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVy
dGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGNvcm5lclJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbGJhcihHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMjQyMzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw1NSBAQAorMjAxMi0wNy0zMSAgQmV0aCBEYWtpbiAgPGJkYWtp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkyMjc1CisgICAgICAgIE5lZWQgYSB3YXkgdG8gZ2V0IGEgc25hcHNob3QgaW1hZ2Ug
dGhhdCBkb2VzIG5vdCBzaG93IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgLWFuZCBjb3JyZXNwb25k
aW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE5NTY4MDI+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSBXS0J1bmRsZVBh
Z2VDcmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKCkKKworICAgICAgICBOZXcgZW51bSBTbmFwc2hv
dE9wdGlvbnMgdHJhY2tzIHRyYWNrIGlmIHRoZSBzbmFwc2hvdCBpcyBpbiBkb2N1bWVudCAKKyAg
ICAgICAgY29vcmRpbmF0ZWQgKG90aGVyd2lzZSB2aWV3IGNvb3JkaW5hdGVzIGFyZSBhc3N1bWVk
KSBhbmQgd2hldGhlciAKKyAgICAgICAgc25hcHNob3RzIHNob3VsZCBleGNsdWRlIHNlbGVjdGlv
biBoaWdobGlnaHRpbmcsIGluIGFkZGl0aW9uIHRvIAorICAgICAgICB0cmFja2luZyB3aGV0aGVy
IHRoZSBpbWFnZSBpcyBzaGFyYWJsZSBsaWtlIG9yaWdpbmFsIEltYWdlT3B0aW9ucy4KKyAgICAg
ICAgKiBTaGFyZWQvQVBJL2MvV0tJbWFnZS5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1No
YXJlZEFQSUNhc3QuaDoKKyAgICAgICAgKFdlYktpdDo6d2tJbWFnZU9wdGlvbnNUb1NuYXBzaG90
T3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojp0b1NuYXBzaG90
T3B0aW9ucyk6CisgICAgICAgICogU2hhcmVkL0ltYWdlT3B0aW9ucy5oOgorCisgICAgICAgIE5l
dyBBUEkuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0aW9u
cyk6CisKKyAgICAgICAgV2ViUGFnZSBpbXBsZW1lbnRhdGlvbnMgbm93IHRha2UgU25hcHNob3RP
cHRpb25zIGluc3RlYWQgb2YgCisgICAgICAgIEltYWdlT3B0aW9ucy4KKyAgICAgICAgKFdLQnVu
ZGxlUGFnZUNyZWF0ZVNuYXBzaG90SW5WaWV3Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV0tCdW5k
bGVQYWdlQ3JlYXRlU25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV0tC
dW5kbGVQYWdlQ3JlYXRlU2NhbGVkU25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmg6CisK
KyAgICAgICAgV2ViUGFnZTo6c25hcHNob3RXaXRoT3B0aW9ucygpIGNhbGxzIGVpdGhlciAKKyAg
ICAgICAgc25hcHNob3RJblZpZXdDb29yZGluYXRlcygpIG9yIHNuYXBzaG90SW5Eb2N1bWVudENv
b3JkaW5hdGVzKCkgYmFzZWQgCisgICAgICAgIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6c25hcHNob3RXaXRoT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQpOgorCisgICAg
ICAgIE5lZWQgdG8gY29udmVydCB0aGUgU25hcHNob3RPcHRpb25zIHRvIEltYWdlT3B0aW9ucyB3
aGVuIGNyZWF0aW5nIHRoZSAKKyAgICAgICAgaW1hZ2UuCisgICAgICAgIChXZWJLaXQ6OnNuYXBz
aG90T3B0aW9uc1RvSW1hZ2VPcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c25h
cHNob3RJblZpZXdDb29yZGluYXRlcyk6CisKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIG5vdyB1
c2UgbmV3IEFQSSBvbiBGcmFtZVZpZXcgdG8gcGFpbnQgaW50byB0aGUgCisgICAgICAgIEltYWdl
J3MgR3JhcGhpY3NDb250ZXh0LiAKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2NhbGVkU25h
cHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
bmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYlBhZ2UpOgorCiAyMDEyLTA3LTMxICBBbmRyYXMg
QmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgogCiAgICAgICAgIFtXSzJdIFZpc2libGUg
Y29udGVudCByZWN0IHVwZGF0ZSB3aXRoIG51bGwgdHJhamVjdG9yeSB2ZWN0b3IgZG9lcyBub3Qg
cmVhY2ggdGhlIGJhY2tpbmcgc3RvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbWFn
ZU9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1hZ2VPcHRp
b25zLmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbWFnZU9w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTIgQEAgZW51bSBJbWFnZU9wdGlv
bnMgewogICAgIEltYWdlT3B0aW9uc1NoYXJlYWJsZSA9IDEgPDwgMCwKIH07CiAKK2VudW0gU25h
cHNob3RPcHRpb25zIHsKKyAgICBTbmFwc2hvdE9wdGlvbnNTaGFyZWFibGUgPSAxIDw8IDAsCisg
ICAgU25hcHNob3RPcHRpb25zSW5Eb2N1bWVudENvb3JkaW5hdGVzID0gMSA8PCAxLAorICAgIFNu
YXBzaG90T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcgPSAxIDw8IDIKK307CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gSW1hZ2VPcHRpb25zX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLSW1hZ2UuaAkocmV2aXNpb24gMTI0MDQ1KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsMTMgQEAgZW51bSB7CiB9OwogdHlwZWRlZiB1aW50MzJfdCBXS0ltYWdlT3B0aW9u
czsKIAorZW51bSB7CisgICAga1dLU25hcHNob3RPcHRpb25zU2hhcmVhYmxlID0gMSA8PCAwLAor
ICAgIGtXS1NuYXBzaG90T3B0aW9uc0luRG9jdW1lbnRDb29yZGluYXRlcyA9IDEgPDwgMSwKKyAg
ICBrV0tTbmFwc2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nID0gMSA8PCAy
Cit9OwordHlwZWRlZiB1aW50MzJfdCBXS1NuYXBzaG90T3B0aW9uczsKKwogV0tfRVhQT1JUIFdL
VHlwZUlEIFdLSW1hZ2VHZXRUeXBlSUQoKTsKIAogV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tJbWFn
ZUNyZWF0ZShXS1NpemUgc2l6ZSwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucyk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCShyZXZpc2lvbiAx
MjQwNDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1OCw2ICs3NTgsMzAgQEAgaW5saW5lIEltYWdlT3B0aW9ucyB0
b0ltYWdlT3B0aW9ucyhXS0ltYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZU9wdGlvbnM+
KGltYWdlT3B0aW9ucyk7CiB9CiAKK2lubGluZSBTbmFwc2hvdE9wdGlvbnMgd2tJbWFnZU9wdGlv
bnNUb1NuYXBzaG90T3B0aW9ucyhXS0ltYWdlT3B0aW9ucyB3a0ltYWdlT3B0aW9ucykKK3sKKyAg
ICB1bnNpZ25lZCBzbmFwc2hvdE9wdGlvbnMgPSAwOworCisgICAgaWYgKHdrSW1hZ2VPcHRpb25z
ICYga1dLSW1hZ2VPcHRpb25zU2hhcmVhYmxlKQorICAgICAgICBzbmFwc2hvdE9wdGlvbnMgfD0g
U25hcHNob3RPcHRpb25zU2hhcmVhYmxlOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNuYXBz
aG90T3B0aW9ucz4oc25hcHNob3RPcHRpb25zKTsKK30KKworaW5saW5lIFNuYXBzaG90T3B0aW9u
cyB0b1NuYXBzaG90T3B0aW9ucyhXS1NuYXBzaG90T3B0aW9ucyB3a1NuYXBzaG90T3B0aW9ucykK
K3sKKyAgICB1bnNpZ25lZCBzbmFwc2hvdE9wdGlvbnMgPSAwOworCisgICAgaWYgKHdrU25hcHNo
b3RPcHRpb25zICYga1dLU25hcHNob3RPcHRpb25zU2hhcmVhYmxlKQorICAgICAgICBzbmFwc2hv
dE9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zU2hhcmVhYmxlOworICAgIGlmICh3a1NuYXBzaG90
T3B0aW9ucyAmIGtXS1NuYXBzaG90T3B0aW9uc0luRG9jdW1lbnRDb29yZGluYXRlcykKKyAgICAg
ICAgc25hcHNob3RPcHRpb25zIHw9IFNuYXBzaG90T3B0aW9uc0luRG9jdW1lbnRDb29yZGluYXRl
czsKKyAgICBpZiAod2tTbmFwc2hvdE9wdGlvbnMgJiBrV0tTbmFwc2hvdE9wdGlvbnNFeGNsdWRl
U2VsZWN0aW9uSGlnaGxpZ2h0aW5nKQorICAgICAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNo
b3RPcHRpb25zRXhjbHVkZVNlbGVjdGlvbkhpZ2hsaWdodGluZzsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTbmFwc2hvdE9wdGlvbnM+KHNuYXBzaG90T3B0aW9ucyk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gV0tTaGFyZWRBUElDYXN0X2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg3LDIxICsyODcsMjcgQEAgYm9vbCBXS0J1bmRsZVBhZ2VGaW5kU3Ry
aW5nKFdLQnVuZGxlUGFnZQogICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmdG
cm9tSW5qZWN0ZWRCdW5kbGUodG9JbXBsKHRhcmdldCktPnN0cmluZygpLCB0b0ZpbmRPcHRpb25z
KGZpbmRPcHRpb25zKSk7CiB9CiAKK1dLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNo
b3RXaXRoT3B0aW9ucyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJlY3QsIFdLU25h
cHNob3RPcHRpb25zIG9wdGlvbnMpCit7CisgICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9
IHRvSW1wbChwYWdlUmVmKS0+c25hcHNob3RXaXRoT3B0aW9ucyh0b0ludFJlY3QocmVjdCksIHRv
U25hcHNob3RPcHRpb25zKG9wdGlvbnMpKTsKKyAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UucmVs
ZWFzZSgpLmxlYWtSZWYoKSk7Cit9CisKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25h
cHNob3RJblZpZXdDb29yZGluYXRlcyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJl
Y3QsIFdLSW1hZ2VPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJ
bWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+c25hcHNob3RJblZpZXdDb29yZGluYXRlcyh0b0ludFJl
Y3QocmVjdCksIHRvSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKKyAgICBSZWZQdHI8V2ViSW1hZ2U+
IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5zbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKHRv
SW50UmVjdChyZWN0KSwgd2tJbWFnZU9wdGlvbnNUb1NuYXBzaG90T3B0aW9ucyhvcHRpb25zKSk7
CiAgICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCiBX
S0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVz
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0
aW9ucykKIHsKLSAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYp
LT5zbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyh0b0ludFJlY3QocmVjdCksIHRvSW1hZ2VP
cHRpb25zKG9wdGlvbnMpKTsKKyAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9JbXBs
KHBhZ2VSZWYpLT5zbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyh0b0ludFJlY3QocmVjdCks
IHdrSW1hZ2VPcHRpb25zVG9TbmFwc2hvdE9wdGlvbnMob3B0aW9ucykpOwogICAgIHJldHVybiB0
b0FQSSh3ZWJJbWFnZS5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1
bmRsZVBhZ2VDcmVhdGVTY2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhXS0J1bmRs
ZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJlY3QsIGRvdWJsZSBzY2FsZUZhY3RvciwgV0tJbWFn
ZU9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9J
bXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyh0b0ludFJl
Y3QocmVjdCksIHNjYWxlRmFjdG9yLCB0b0ltYWdlT3B0aW9ucyhvcHRpb25zKSk7CisgICAgUmVm
UHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+c2NhbGVkU25hcHNob3RJ
bkRvY3VtZW50Q29vcmRpbmF0ZXModG9JbnRSZWN0KHJlY3QpLCBzY2FsZUZhY3Rvciwgd2tJbWFn
ZU9wdGlvbnNUb1NuYXBzaG90T3B0aW9ucyhvcHRpb25zKSk7CiAgICAgcmV0dXJuIHRvQVBJKHdl
YkltYWdlLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlLmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
OCw2ICszOTgsNyBAQCBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZVBhZ2VDYW5IYW5kbGVSZXF1CiAK
IFdLX0VYUE9SVCBib29sIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLU3RyaW5nUmVmIHRhcmdldCwgV0tGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyk7CiAKK1dL
X0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90V2l0aE9wdGlvbnMo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBXS1NuYXBzaG90T3B0aW9ucyBvcHRp
b25zKTsKIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90SW5W
aWV3Q29vcmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBXS0ltYWdl
T3B0aW9ucyBvcHRpb25zKTsKIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0
ZVNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1Jl
Y3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucyk7CiBXS19FWFBPUlQgV0tJbWFnZVJlZiBX
S0J1bmRsZVBhZ2VDcmVhdGVTY2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tSZWN0IHJlY3QsIGRvdWJsZSBzY2FsZUZhY3RvciwgV0tJbWFn
ZU9wdGlvbnMgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTAsNyAr
MTE5MCwyNCBAQCB2b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPCiAjZW5k
aWYKIH0KIAotUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c25hcHNob3RJblZpZXdDb29y
ZGluYXRlcyhjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZU9wdGlvbnMgb3B0aW9ucykKK1Bhc3NS
ZWZQdHI8V2ViSW1hZ2U+IFdlYlBhZ2U6OnNuYXBzaG90V2l0aE9wdGlvbnMoY29uc3QgSW50UmVj
dCYgcmVjdCwgU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCit7CisgICAgaWYgKG9wdGlvbnMgJiBT
bmFwc2hvdE9wdGlvbnNJbkRvY3VtZW50Q29vcmRpbmF0ZXMpCisgICAgICAgIHJldHVybiBzbmFw
c2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhyZWN0LCBvcHRpb25zKTsKKyAgICByZXR1cm4gc25h
cHNob3RJblZpZXdDb29yZGluYXRlcyhyZWN0LCBvcHRpb25zKTsKK30KKworc3RhdGljIEltYWdl
T3B0aW9ucyBzbmFwc2hvdE9wdGlvbnNUb0ltYWdlT3B0aW9ucyhTbmFwc2hvdE9wdGlvbnMgc25h
cHNob3RPcHRpb25zKQoreworICAgIHVuc2lnbmVkIGltYWdlT3B0aW9ucyA9IDA7CisKKyAgICBp
ZiAoc25hcHNob3RPcHRpb25zICYgU25hcHNob3RPcHRpb25zU2hhcmVhYmxlKQorICAgICAgICBp
bWFnZU9wdGlvbnMgfD0gSW1hZ2VPcHRpb25zU2hhcmVhYmxlOworCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEltYWdlT3B0aW9ucz4oaW1hZ2VPcHRpb25zKTsKK30KKworUGFzc1JlZlB0cjxXZWJJ
bWFnZT4gV2ViUGFnZTo6c25hcHNob3RJblZpZXdDb29yZGluYXRlcyhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3
KQpAQCAtMTIwMCw3ICsxMjE3LDcgQEAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c25h
cHNob3RJbgogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gY29yZVBhZ2UoKS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKTsKICAgICBiaXRtYXBTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsK
IAotICAgIFJlZlB0cjxXZWJJbWFnZT4gc25hcHNob3QgPSBXZWJJbWFnZTo6Y3JlYXRlKGJpdG1h
cFNpemUsIG9wdGlvbnMpOworICAgIFJlZlB0cjxXZWJJbWFnZT4gc25hcHNob3QgPSBXZWJJbWFn
ZTo6Y3JlYXRlKGJpdG1hcFNpemUsIHNuYXBzaG90T3B0aW9uc1RvSW1hZ2VPcHRpb25zKG9wdGlv
bnMpKTsKICAgICBpZiAoIXNuYXBzaG90LT5iaXRtYXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCkBAIC0xMjA4LDE3ICsxMjI1LDE2IEBAIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IFdlYlBhZ2U6
OnNuYXBzaG90SW4KICAgICBncmFwaGljc0NvbnRleHQtPmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1yZWN0
LngoKSwgLXJlY3QueSgpKTsKIAotICAgIGZyYW1lVmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJ
Zk5lZWRlZFJlY3Vyc2l2ZSgpOworICAgIEZyYW1lVmlldzo6U2VsZWN0aW9uSW5TbmFwaG90IHNo
b3VsZFBhaW50U2VsZWN0aW9uID0gRnJhbWVWaWV3OjpFeGNsdWRlU2VsZWN0aW9uOworICAgIGlm
IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zRXhjbHVkZVNlbGVjdGlvbkhpZ2hsaWdodGluZykK
KyAgICAgICAgc2hvdWxkUGFpbnRTZWxlY3Rpb24gPSBGcmFtZVZpZXc6OkV4Y2x1ZGVTZWxlY3Rp
b247CiAKLSAgICBQYWludEJlaGF2aW9yIG9sZEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWludEJl
aGF2aW9yKCk7Ci0gICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKG9sZEJlaGF2aW9yIHwg
UGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7Ci0gICAgZnJhbWVWaWV3LT5w
YWludChncmFwaGljc0NvbnRleHQuZ2V0KCksIHJlY3QpOwotICAgIGZyYW1lVmlldy0+c2V0UGFp
bnRCZWhhdmlvcihvbGRCZWhhdmlvcik7CisgICAgZnJhbWVWaWV3LT5wYWludENvbnRlbnRzRm9y
U25hcHNob3QoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCByZWN0LCBzaG91bGRQYWludFNlbGVjdGlv
bik7CiAKICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFdl
YkltYWdlPiBXZWJQYWdlOjpzY2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhjb25z
dCBJbnRSZWN0JiByZWN0LCBkb3VibGUgc2NhbGVGYWN0b3IsIEltYWdlT3B0aW9ucyBvcHRpb25z
KQorUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c2NhbGVkU25hcHNob3RJbkRvY3VtZW50
Q29vcmRpbmF0ZXMoY29uc3QgSW50UmVjdCYgcmVjdCwgZG91YmxlIHNjYWxlRmFjdG9yLCBTbmFw
c2hvdE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fbWFp
bkZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQpAQCAtMTIy
Niw3ICsxMjQyLDcgQEAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c2NhbGVkU25hcAog
CiAgICAgZmxvYXQgY29tYmluZWRTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yICogY29yZVBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBJbnRTaXplIHNpemUoY2VpbChyZWN0LndpZHRo
KCkgKiBjb21iaW5lZFNjYWxlRmFjdG9yKSwgY2VpbChyZWN0LmhlaWdodCgpICogY29tYmluZWRT
Y2FsZUZhY3RvcikpOwotICAgIFJlZlB0cjxXZWJJbWFnZT4gc25hcHNob3QgPSBXZWJJbWFnZTo6
Y3JlYXRlKHNpemUsIG9wdGlvbnMpOworICAgIFJlZlB0cjxXZWJJbWFnZT4gc25hcHNob3QgPSBX
ZWJJbWFnZTo6Y3JlYXRlKHNpemUsIHNuYXBzaG90T3B0aW9uc1RvSW1hZ2VPcHRpb25zKG9wdGlv
bnMpKTsKICAgICBpZiAoIXNuYXBzaG90LT5iaXRtYXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
QEAgLTEyMzQsMTcgKzEyNTAsMTYgQEAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c2Nh
bGVkU25hcAogICAgIGdyYXBoaWNzQ29udGV4dC0+YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihjb21i
aW5lZFNjYWxlRmFjdG9yKTsKICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54
KCksIC1yZWN0LnkoKSk7CiAKLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZO
ZWVkZWRSZWN1cnNpdmUoKTsKKyAgICBGcmFtZVZpZXc6OlNlbGVjdGlvbkluU25hcGhvdCBzaG91
bGRQYWludFNlbGVjdGlvbiA9IEZyYW1lVmlldzo6RXhjbHVkZVNlbGVjdGlvbjsKKyAgICBpZiAo
b3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcpCisg
ICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uID0gRnJhbWVWaWV3OjpFeGNsdWRlU2VsZWN0aW9u
OwogCi0gICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhh
dmlvcigpOwotICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvciB8IFBh
aW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotICAgIGZyYW1lVmlldy0+cGFp
bnRDb250ZW50cyhncmFwaGljc0NvbnRleHQuZ2V0KCksIHJlY3QpOwotICAgIGZyYW1lVmlldy0+
c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvcik7CisgICAgZnJhbWVWaWV3LT5wYWludENvbnRl
bnRzRm9yU25hcHNob3QoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCByZWN0LCBzaG91bGRQYWludFNl
bGVjdGlvbik7CiAKICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogfQogCi1QYXNzUmVm
UHRyPFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhjb25z
dCBJbnRSZWN0JiByZWN0LCBJbWFnZU9wdGlvbnMgb3B0aW9ucykKK1Bhc3NSZWZQdHI8V2ViSW1h
Z2U+IFdlYlBhZ2U6OnNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKGNvbnN0IEludFJlY3Qm
IHJlY3QsIFNuYXBzaG90T3B0aW9ucyBvcHRpb25zKQogewogICAgIHJldHVybiBzY2FsZWRTbmFw
c2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhyZWN0LCAxLCBvcHRpb25zKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTI0
MDQ1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQ2LDkgKzM0NiwxMCBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW50
UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBXZWJD
b3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIAot
ICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNuYXBzaG90SW5WaWV3Q29vcmRpbmF0ZXMoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIEltYWdlT3B0aW9ucyk7Ci0gICAgUGFzc1JlZlB0cjxXZWJJbWFn
ZT4gc25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IEltYWdlT3B0aW9ucyk7Ci0gICAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gc2NhbGVkU25hcHNob3RJ
bkRvY3VtZW50Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGRvdWJsZSBzY2Fs
ZUZhY3RvciwgSW1hZ2VPcHRpb25zKTsKKyAgICBQYXNzUmVmUHRyPFdlYkltYWdlPiBzbmFwc2hv
dFdpdGhPcHRpb25zKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBTbmFwc2hvdE9wdGlvbnMpOwor
ICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNuYXBzaG90SW5WaWV3Q29vcmRpbmF0ZXMoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIFNuYXBzaG90T3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxXZWJJ
bWFnZT4gc25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIFNuYXBzaG90T3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gc2NhbGVkU25h
cHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGRvdWJs
ZSBzY2FsZUZhY3RvciwgU25hcHNob3RPcHRpb25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBXZWJF
dmVudCogY3VycmVudEV2ZW50KCk7CiAK
</data>
<flag name="review"
          id="165109"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155647</attachid>
            <date>2012-07-31 15:31:46 -0700</date>
            <delta_ts>2012-08-01 11:57:46 -0700</delta_ts>
            <desc>New patch that attempts to address security concern</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>18578</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA3LTMxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzUKKyAgICAgICAgTmVlZCBhIHdheSB0byBnZXQgYSBzbmFw
c2hvdCBpbWFnZSB0aGF0IGRvZXMgbm90IHNob3cgdGhlIHNlbGVjdGlvbgorICAgICAgICAtYW5k
IGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk1NjgwMj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgZnVuY3Rpb24g
RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoKSBoYXMgdGhlIG9wdGlvbiB0byAK
KyAgICAgICAgZXhjbHVkZSBzZWxlY3Rpb24gZnJvbSB0aGUgc25hcHNob3QuCisKKyAgICAgICAg
RXhwb3J0IG5ldyBmdW5jdGlvbgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAg
IFVzZSBhIEhhc2hNYXAgbWFwcGluZyBSZW5kZXJWaWV3cyB0byB0aGVpciBjb3JyZXNwb25kaW5n
IHNlbGVjdGlvbiAKKyAgICAgICAgaW5mb3JtYXRpb24gc28gdGhhdCBpdCBjYW4gYmUgY2FjaGVk
IGFuZCB0aGVuIGNsZWFyZWQgZnJvbSB0aGUgCisgICAgICAgIFJlbmRlclZpZXcgd2hlbiBzZWxl
Y3Rpb24gaXMgdG8gYmUgZXhjbHVkZWQuIFJlc3RvcmUgYWxsIG9mIHRoaXMgCisgICAgICAgIGlu
Zm9ybWF0aW9uIGFmdGVyIGNhbGxpbmcgcGFpbnRDb250ZW50cygpLgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXdTZWxlY3Rpb25JbmZv
OjpSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbyk6CisgICAgICAgIChSZW5kZXJWaWV3U2VsZWN0aW9u
SW5mbyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
cGFpbnRDb250ZW50c0ZvclNuYXBzaG90KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgor
CiAyMDEyLTA3LTMxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI0MjA3LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NTUsNiArOTU1LDcgQEAgX19aTjdXZWJDb3JlOUZy
YW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcAogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0QmFz
ZUJhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyM3Vw
ZGF0ZUNhbkhhdmVTY3JvbGxiYXJzRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNGZvcmNlTGF5
b3V0Rm9yUGFnaW5hdGlvbkVSS05TXzlGbG9hdFNpemVFUzNfZk5TXzE5QWRqdXN0Vmlld1NpemVP
ck5vdEUKK19fWk43V2ViQ29yZTlGcmFtZVZpZXcyNHBhaW50Q29udGVudHNGb3JTbmFwc2hvdEVQ
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEVOUzBfMThTZWxlY3Rpb25JblNuYXBo
b3RFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjZhZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZEVQ
ZmZmZgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzI5c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3Jl
ZW5FYgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzM3dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRl
ZFJlY3Vyc2l2ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAx
MjQwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNTAsNiArMzE1MCw3MSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyhO
b2RlKiBub2RlCiAgICAgbV9ub2RlVG9EcmF3ID0gbm9kZTsKIH0KIAorc3RydWN0IFJlbmRlclZp
ZXdTZWxlY3Rpb25JbmZvIHsKKyAgICBSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbygpCisgICAgICAg
IDogc3RhcnRPYmplY3QoMCkKKyAgICAgICAgLCBzdGFydFBvcygtMSkKKyAgICAgICAgLCBlbmRP
YmplY3QoMCkKKyAgICAgICAgLCBlbmRQb3MoLTEpCisgICAgeworICAgIH0KKyAgICBSZW5kZXJW
aWV3U2VsZWN0aW9uSW5mbyhSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRJbmRleCwgUmVu
ZGVyT2JqZWN0KiBlbmQsIGludCBlbmRJbmRleCkKKyAgICAgICAgOiBzdGFydE9iamVjdChzdGFy
dCkKKyAgICAgICAgLCBzdGFydFBvcyhzdGFydEluZGV4KQorICAgICAgICAsIGVuZE9iamVjdChl
bmQpCisgICAgICAgICwgZW5kUG9zKGVuZEluZGV4KQorICAgIHsKKyAgICB9CisgICAgUmVuZGVy
T2JqZWN0KiBzdGFydE9iamVjdDsKKyAgICBpbnQgc3RhcnRQb3M7CisgICAgUmVuZGVyT2JqZWN0
KiBlbmRPYmplY3Q7CisgICAgaW50IGVuZFBvczsKK307CisKK3ZvaWQgRnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIFNlbGVjdGlvbkluU25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbikK
K3sKKyAgICB1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisKKyAgICAv
LyBDYWNoZSBwYWludCBiZWhhdmlvciBhbmQgc2V0IGEgbmV3IGJlaGF2aW9yIGFwcHJvcHJpYXRl
IGZvciBzbmFwc2hvdHMuCisgICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IHBhaW50QmVo
YXZpb3IoKTsKKyAgICBzZXRQYWludEJlaGF2aW9yKG9sZEJlaGF2aW9yIHwgUGFpbnRCZWhhdmlv
ckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CisKKyAgICAvLyBJZiB0aGUgc25hcHNob3Qgc2hv
dWxkIGV4Y2x1ZGUgc2VsZWN0aW9uLCB0aGVuIHdlIGhhdmUgdG8gZ28gdGhyb3VnaCBhbmQgY2Fj
aGUgdGhlbiBjbGVhcgorICAgIC8vIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgYWxsIG9mIG91
ciBGcmFtZXMuCisgICAgSGFzaE1hcDxSZW5kZXJWaWV3KiwgUmVuZGVyVmlld1NlbGVjdGlvbklu
Zm8+IHNlbGVjdGlvbk1hcDsKKyAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVk
ZVNlbGVjdGlvbikgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgp
KSkgeworICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTdGFydE9i
amVjdDsKKyAgICAgICAgICAgICAgICBpbnQgY3VycmVudFN0YXJ0UG9zOworICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY3VycmVudEVuZE9iamVjdDsKKyAgICAgICAgICAgICAgICBpbnQg
Y3VycmVudEVuZFBvczsKKyAgICAgICAgICAgICAgICByb290LT5nZXRTZWxlY3Rpb24oY3VycmVu
dFN0YXJ0T2JqZWN0LCBjdXJyZW50U3RhcnRQb3MsIGN1cnJlbnRFbmRPYmplY3QsIGN1cnJlbnRF
bmRQb3MpOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1hcC5hZGQocm9vdCwgUmVuZGVyVmll
d1NlbGVjdGlvbkluZm8oY3VycmVudFN0YXJ0T2JqZWN0LCBjdXJyZW50U3RhcnRQb3MsIGN1cnJl
bnRFbmRPYmplY3QsIGN1cnJlbnRFbmRQb3MpKTsKKyAgICAgICAgICAgICAgICByb290LT5jbGVh
clNlbGVjdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcGFp
bnRDb250ZW50cyhjb250ZXh0LCBpbWFnZVJlY3QpOworCisgICAgLy8gUmVzdG9yZSBjYWNoZWQg
c2VsZWN0aW9uIGluZm9ybWF0aW9uLiBJdGVyYXRlIHRob3VnaCB0aGUgZnJhbWVzIGluc3RlYWQg
b2YgdGhlIEhhc2hNYXAgaW4gY2FzZQorICAgIC8vIGFueSBvZiB0aGUgUmVuZGVyVmlld3MgaW4g
dGhlIEhhc2hNYXAgd2VyZSBkZXN0cm95ZWQgaW4gdGhlIHBhaW50aW5nIHByb2Nlc3MuCisgICAg
aWYgKHNob3VsZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxlY3Rpb24pIHsKKyAgICAgICAg
Zm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmIChS
ZW5kZXJWaWV3KiByb290ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvbk1hcC5jb250YWlucyhyb290KSkgeworICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJWaWV3U2VsZWN0aW9uSW5mbyBzZWxlY3Rpb25JbmZvID0gc2VsZWN0aW9uTWFw
LmdldChyb290KTsKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+c2V0U2VsZWN0aW9uKHNlbGVj
dGlvbkluZm8uc3RhcnRPYmplY3QsIHNlbGVjdGlvbkluZm8uc3RhcnRQb3MsIHNlbGVjdGlvbklu
Zm8uZW5kT2JqZWN0LCBzZWxlY3Rpb25JbmZvLmVuZFBvcyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVzdG9yZSBjYWNoZWQg
cGFpbnQgYmVoYXZpb3IuCisgICAgc2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvcik7Cit9CisK
IHZvaWQgRnJhbWVWaWV3OjpwYWludE92ZXJoYW5nQXJlYXMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0
JiB2ZXJ0aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAg
IGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRMYXN0UGFpbnRUaW1lKGRvdWJsZSBsYXN0UGFpbnRUaW1lKSB7IG1fbGFzdFBhaW50VGltZSA9
IGxhc3RQYWludFRpbWU7IH0KICAgICB2b2lkIHNldE5vZGVUb0RyYXcoTm9kZSopOwogCisgICAg
ZW51bSBTZWxlY3Rpb25JblNuYXBob3QgeyBJbmNsdWRlU2VsZWN0aW9uLCBFeGNsdWRlU2VsZWN0
aW9uIH07CisgICAgdm9pZCBwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBTZWxlY3Rpb25JblNuYXBob3Qgc2hvdWxkUGFp
bnRTZWxlY3Rpb24pOworCiAgICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdBcmVhcyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3ZlcmhhbmdBcmVhLCBjb25z
dCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xs
YmFyKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBPVkVSUklE
RTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDI1MykKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA3LTMxICBCZXRo
IERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzUKKyAgICAgICAgTmVlZCBhIHdheSB0byBnZXQgYSBz
bmFwc2hvdCBpbWFnZSB0aGF0IGRvZXMgbm90IHNob3cgdGhlIHNlbGVjdGlvbgorICAgICAgICAt
YW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk1NjgwMj4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcg
QVBJIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90V2l0aE9wdGlvbnMoKQorCisgICAgICAgIE5l
dyBlbnVtIFNuYXBzaG90T3B0aW9ucyB0cmFja3Mgd2hldGhlciBzbmFwc2hvdHMgc2hvdWxkIGV4
Y2x1ZGUgCisgICAgICAgIHNlbGVjdGlvbiBoaWdobGlnaHRpbmcgaW4gYWRkaXRpb24gdG8gdHJh
Y2tpbmcgd2hldGhlciB0aGUgaW1hZ2UgaXMgCisgICAgICAgIHNoYXJhYmxlIGxpa2UgdGhlIG9y
aWdpbmFsIEltYWdlT3B0aW9ucy4KKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvV0tJbWFnZS5oOgor
ICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaDoKKyAgICAgICAgKFdlYktp
dDo6c25hcHNob3RPcHRpb25zRnJvbUltYWdlT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0Ojp0b1NuYXBzaG90T3B0aW9ucyk6CisgICAgICAgICogU2hhcmVkL0lt
YWdlT3B0aW9ucy5oOgorCisgICAgICAgIE5ldyBBUEkuCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRs
ZVBhZ2VDcmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKToKKworICAgICAgICBUaGVzZSBleGlzdGlu
ZyBBUElzIGFsbCBub3cgY2FsbCAKKyAgICAgICAgV2ViUGFnZTo6c2NhbGVkU25hcHNob3RXaXRo
T3B0aW9ucygpLgorICAgICAgICAoV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RJblZpZXdDb29y
ZGluYXRlcyk6CisgICAgICAgIChXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdEluRG9jdW1lbnRD
b29yZGluYXRlcyk6CisgICAgICAgIChXS0J1bmRsZVBhZ2VDcmVhdGVTY2FsZWRTbmFwc2hvdElu
RG9jdW1lbnRDb29yZGluYXRlcyk6CisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIFdlYlBh
Z2U6OnNuYXBzaG90SW5WaWV3Q29vcmRpbmF0ZXMoKSwgCisgICAgICAgIFdlYlBhZ2U6OnNuYXBz
aG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKCksIGFuZCAKKyAgICAgICAgV2ViUGFnZTo6c2NhbGVk
U25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoKS4gQWxsIG9mIHRoZSBsb2dpYyBpcyAKKyAg
ICAgICAgbm93IGNvbnNvbGlkYXRlZCBpbnRvIFdlYlBhZ2U6OnNjYWxlZFNuYXBzaG90V2l0aE9w
dGlvbnMoKS4gSXQgdHVybnMgCisgICAgICAgIG91dCB0aGF0IHdlIG5ldmVyIGRpZCBhbnl0aGlu
ZyBkaWZmZXJlbnQgZm9yIGRvY3VtZW50IGNvb3JkaW5hdGVzIAorICAgICAgICB2ZXJzdXMgdmll
dyBjb29yZGluYXRlcywgc28gdGhhdCBjb21wbGV4aXR5IGNvdWxkIGp1c3QgYmUgZWxpbWluYXRl
ZCAKKyAgICAgICAgb3V0cmlnaHQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpzbmFwc2hvdE9wdGlvbnNUb0ltYWdlT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAoV2ViUGFnZSk6CisKIDIwMTItMDctMzEgIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gVXNlIGFuIGFjdHVhbCBXZWJQcm9jZXNz
UHJveHkgd2hlbiBkZWNvZGluZyBtZXNzYWdlcwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L0ltYWdlT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbWFn
ZU9wdGlvbnMuaAkocmV2aXNpb24gMTI0MDQ1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0lt
YWdlT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxMiBAQCBlbnVtIEltYWdl
T3B0aW9ucyB7CiAgICAgSW1hZ2VPcHRpb25zU2hhcmVhYmxlID0gMSA8PCAwLAogfTsKIAorZW51
bSB7CisgICAgU25hcHNob3RPcHRpb25zU2hhcmVhYmxlID0gMSA8PCAwLAorICAgIFNuYXBzaG90
T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcgPSAxIDw8IDEKK307Cit0eXBlZGVm
IHVpbnQzMl90IFNuYXBzaG90T3B0aW9uczsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBJbWFnZU9wdGlvbnNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9j
L1dLSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tJ
bWFnZS5oCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
V0tJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMiBAQCBlbnVtIHsKIH07CiB0
eXBlZGVmIHVpbnQzMl90IFdLSW1hZ2VPcHRpb25zOwogCitlbnVtIHsKKyAgICBrV0tTbmFwc2hv
dE9wdGlvbnNTaGFyZWFibGUgPSAxIDw8IDAsCisgICAga1dLU25hcHNob3RPcHRpb25zRXhjbHVk
ZVNlbGVjdGlvbkhpZ2hsaWdodGluZyA9IDEgPDwgMQorfTsKK3R5cGVkZWYgdWludDMyX3QgV0tT
bmFwc2hvdE9wdGlvbnM7CisKIFdLX0VYUE9SVCBXS1R5cGVJRCBXS0ltYWdlR2V0VHlwZUlEKCk7
CiAKIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLSW1hZ2VDcmVhdGUoV0tTaXplIHNpemUsIFdLSW1h
Z2VPcHRpb25zIG9wdGlvbnMpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
U2hhcmVkQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS1NoYXJlZEFQSUNhc3QuaAkocmV2aXNpb24gMTI0MDQ1KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTgsNiAr
NzU4LDI4IEBAIGlubGluZSBJbWFnZU9wdGlvbnMgdG9JbWFnZU9wdGlvbnMoV0tJbWEKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SW1hZ2VPcHRpb25zPihpbWFnZU9wdGlvbnMpOwogfQogCitpbmxp
bmUgU25hcHNob3RPcHRpb25zIHNuYXBzaG90T3B0aW9uc0Zyb21JbWFnZU9wdGlvbnMoV0tJbWFn
ZU9wdGlvbnMgd2tJbWFnZU9wdGlvbnMpCit7CisgICAgdW5zaWduZWQgc25hcHNob3RPcHRpb25z
ID0gMDsKKworICAgIGlmICh3a0ltYWdlT3B0aW9ucyAmIGtXS0ltYWdlT3B0aW9uc1NoYXJlYWJs
ZSkKKyAgICAgICAgc25hcHNob3RPcHRpb25zIHw9IFNuYXBzaG90T3B0aW9uc1NoYXJlYWJsZTsK
KworICAgIHJldHVybiBzbmFwc2hvdE9wdGlvbnM7Cit9CisKK2lubGluZSBTbmFwc2hvdE9wdGlv
bnMgdG9TbmFwc2hvdE9wdGlvbnMoV0tTbmFwc2hvdE9wdGlvbnMgd2tTbmFwc2hvdE9wdGlvbnMp
Cit7CisgICAgdW5zaWduZWQgc25hcHNob3RPcHRpb25zID0gMDsKKworICAgIGlmICh3a1NuYXBz
aG90T3B0aW9ucyAmIGtXS1NuYXBzaG90T3B0aW9uc1NoYXJlYWJsZSkKKyAgICAgICAgc25hcHNo
b3RPcHRpb25zIHw9IFNuYXBzaG90T3B0aW9uc1NoYXJlYWJsZTsKKyAgICBpZiAod2tTbmFwc2hv
dE9wdGlvbnMgJiBrV0tTbmFwc2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5n
KQorICAgICAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zRXhjbHVkZVNlbGVj
dGlvbkhpZ2hsaWdodGluZzsKKworICAgIHJldHVybiBzbmFwc2hvdE9wdGlvbnM7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gV0tTaGFyZWRBUElDYXN0X2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDIxICsyODcsMjcgQEAgYm9vbCBXS0J1bmRsZVBhZ2VG
aW5kU3RyaW5nKFdLQnVuZGxlUGFnZQogICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmZpbmRT
dHJpbmdGcm9tSW5qZWN0ZWRCdW5kbGUodG9JbXBsKHRhcmdldCktPnN0cmluZygpLCB0b0ZpbmRP
cHRpb25zKGZpbmRPcHRpb25zKSk7CiB9CiAKK1dLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRl
U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJlY3Qs
IFdLU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCit7CisgICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJ
bWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyh0b0ludFJl
Y3QocmVjdCksIDEsIHRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMpKTsKKyAgICByZXR1cm4gdG9B
UEkod2ViSW1hZ2UucmVsZWFzZSgpLmxlYWtSZWYoKSk7Cit9CisKIFdLSW1hZ2VSZWYgV0tCdW5k
bGVQYWdlQ3JlYXRlU25hcHNob3RJblZpZXdDb29yZGluYXRlcyhXS0J1bmRsZVBhZ2VSZWYgcGFn
ZVJlZiwgV0tSZWN0IHJlY3QsIFdLSW1hZ2VPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRy
PFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+c25hcHNob3RJblZpZXdDb29y
ZGluYXRlcyh0b0ludFJlY3QocmVjdCksIHRvSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKKyAgICBS
ZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hv
dFdpdGhPcHRpb25zKHRvSW50UmVjdChyZWN0KSwgMSwgc25hcHNob3RPcHRpb25zRnJvbUltYWdl
T3B0aW9ucyhvcHRpb25zKSk7CiAgICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLnJlbGVhc2UoKS5s
ZWFrUmVmKCkpOwogfQogCiBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90SW5E
b2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3QgcmVjdCwg
V0tJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdl
ID0gdG9JbXBsKHBhZ2VSZWYpLT5zbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyh0b0ludFJl
Y3QocmVjdCksIHRvSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKKyAgICBSZWZQdHI8V2ViSW1hZ2U+
IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKHRv
SW50UmVjdChyZWN0KSwgMSwgc25hcHNob3RPcHRpb25zRnJvbUltYWdlT3B0aW9ucyhvcHRpb25z
KSk7CiAgICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQog
CiBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENv
b3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3QgcmVjdCwgZG91YmxlIHNj
YWxlRmFjdG9yLCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKQogewotICAgIFJlZlB0cjxXZWJJbWFn
ZT4gd2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENv
b3JkaW5hdGVzKHRvSW50UmVjdChyZWN0KSwgc2NhbGVGYWN0b3IsIHRvSW1hZ2VPcHRpb25zKG9w
dGlvbnMpKTsKKyAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYp
LT5zY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKHRvSW50UmVjdChyZWN0KSwgc2NhbGVGYWN0b3Is
IHNuYXBzaG90T3B0aW9uc0Zyb21JbWFnZU9wdGlvbnMob3B0aW9ucykpOwogICAgIHJldHVybiB0
b0FQSSh3ZWJJbWFnZS5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5oCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTgsOCArMzk4LDE0IEBAIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlUGFnZUNhbkhhbmRs
ZVJlcXUKIAogV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVQYWdlRmluZFN0cmluZyhXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGFyZ2V0LCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRpb25z
KTsKIAorV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRo
T3B0aW9ucyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tSZWN0IHJlY3QsIFdLU25hcHNob3RPcHRp
b25zIG9wdGlvbnMpOworCisvLyBXZSBkZXByZWNhdGUgdGhlc2UgZnVuY3Rpb25zIGluIGZhdm9y
IG9mIGp1c3QgdXNpbmcgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0aW9ucy4KIFdL
X0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90SW5WaWV3Q29vcmRp
bmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBXS0ltYWdlT3B0aW9ucyBv
cHRpb25zKTsKIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90
SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwg
V0tJbWFnZU9wdGlvbnMgb3B0aW9ucyk7CisKKy8vIFdlIHNob3VsZCBrZWVwIHRoaXMgc25hcHNo
b3R0aW5nIGZ1bmN0aW9uIHNpbmNlIGl0IGFsbG93IHBhc3NpbmcgYSBzY2FsZSBmYWN0b3IsIGJ1
dCB3ZSBzaG91bGQgcmUtbmFtZSBpdAorLy8gdG8gV0tCdW5kbGVQYWdlQ3JlYXRlU2NhbGVkU25h
cHNob3RXaXRoT3B0aW9ucy4KIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0
ZVNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS1JlY3QgcmVjdCwgZG91YmxlIHNjYWxlRmFjdG9yLCBXS0ltYWdlT3B0aW9ucyBvcHRpb25z
KTsKIAogV0tfRVhQT1JUIGRvdWJsZSBXS0J1bmRsZVBhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3Io
V0tCdW5kbGVQYWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTI0MDQ1KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkw
LDQzICsxMTkwLDI3IEBAIHZvaWQgV2ViUGFnZTo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU8K
ICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hvdEluVmll
d0Nvb3JkaW5hdGVzKGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlT3B0aW9ucyBvcHRpb25zKQor
c3RhdGljIEltYWdlT3B0aW9ucyBzbmFwc2hvdE9wdGlvbnNUb0ltYWdlT3B0aW9ucyhTbmFwc2hv
dE9wdGlvbnMgc25hcHNob3RPcHRpb25zKQogewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgSW50U2l6ZSBiaXRtYXBTaXplID0gcmVjdC5zaXplKCk7
Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBjb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZh
Y3RvcigpOwotICAgIGJpdG1hcFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAg
UmVmUHRyPFdlYkltYWdlPiBzbmFwc2hvdCA9IFdlYkltYWdlOjpjcmVhdGUoYml0bWFwU2l6ZSwg
b3B0aW9ucyk7Ci0gICAgaWYgKCFzbmFwc2hvdC0+Yml0bWFwKCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIAotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dCA9IHNuYXBzaG90LT5iaXRtYXAoKS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAg
Z3JhcGhpY3NDb250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7
Ci0KLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUo
KTsKKyAgICB1bnNpZ25lZCBpbWFnZU9wdGlvbnMgPSAwOwogCi0gICAgUGFpbnRCZWhhdmlvciBv
bGRCZWhhdmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhhdmlvcigpOwotICAgIGZyYW1lVmlldy0+
c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvciB8IFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9z
aXRpbmdMYXllcnMpOwotICAgIGZyYW1lVmlldy0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LmdldCgp
LCByZWN0KTsKLSAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IpOwor
ICAgIGlmIChzbmFwc2hvdE9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNTaGFyZWFibGUpCisgICAg
ICAgIGltYWdlT3B0aW9ucyB8PSBJbWFnZU9wdGlvbnNTaGFyZWFibGU7CiAKLSAgICByZXR1cm4g
c25hcHNob3QucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZU9wdGlvbnM+
KGltYWdlT3B0aW9ucyk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViSW1hZ2U+IFdlYlBhZ2U6OnNjYWxl
ZFNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKGNvbnN0IEludFJlY3QmIHJlY3QsIGRvdWJs
ZSBzY2FsZUZhY3RvciwgSW1hZ2VPcHRpb25zIG9wdGlvbnMpCitQYXNzUmVmUHRyPFdlYkltYWdl
PiBXZWJQYWdlOjpzY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGRvdWJsZSBzY2FsZUZhY3RvciwgU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKICAg
ICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBJbnRTaXplIGJpdG1h
cFNpemUgPSByZWN0LnNpemUoKTsKICAgICBmbG9hdCBjb21iaW5lZFNjYWxlRmFjdG9yID0gc2Nh
bGVGYWN0b3IgKiBjb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIEludFNpemUg
c2l6ZShjZWlsKHJlY3Qud2lkdGgoKSAqIGNvbWJpbmVkU2NhbGVGYWN0b3IpLCBjZWlsKHJlY3Qu
aGVpZ2h0KCkgKiBjb21iaW5lZFNjYWxlRmFjdG9yKSk7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiBz
bmFwc2hvdCA9IFdlYkltYWdlOjpjcmVhdGUoc2l6ZSwgb3B0aW9ucyk7CisgICAgYml0bWFwU2l6
ZS5zY2FsZShjb21iaW5lZFNjYWxlRmFjdG9yKTsKKworICAgIFJlZlB0cjxXZWJJbWFnZT4gc25h
cHNob3QgPSBXZWJJbWFnZTo6Y3JlYXRlKGJpdG1hcFNpemUsIHNuYXBzaG90T3B0aW9uc1RvSW1h
Z2VPcHRpb25zKG9wdGlvbnMpKTsKICAgICBpZiAoIXNuYXBzaG90LT5iaXRtYXAoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTEyMzQsMjEgKzEyMTgsMTUgQEAgUGFzc1JlZlB0cjxXZWJJbWFn
ZT4gV2ViUGFnZTo6c2NhbGVkU25hcAogICAgIGdyYXBoaWNzQ29udGV4dC0+YXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcihjb21iaW5lZFNjYWxlRmFjdG9yKTsKICAgICBncmFwaGljc0NvbnRleHQtPnRy
YW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAKLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxh
eW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICBGcmFtZVZpZXc6OlNlbGVjdGlv
bkluU25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbiA9IEZyYW1lVmlldzo6SW5jbHVkZVNlbGVj
dGlvbjsKKyAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rpb25I
aWdobGlnaHRpbmcpCisgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uID0gRnJhbWVWaWV3OjpF
eGNsdWRlU2VsZWN0aW9uOwogCi0gICAgUGFpbnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IGZyYW1l
Vmlldy0+cGFpbnRCZWhhdmlvcigpOwotICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihv
bGRCZWhhdmlvciB8IFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotICAg
IGZyYW1lVmlldy0+cGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQuZ2V0KCksIHJlY3QpOwot
ICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvcik7CisgICAgZnJhbWVW
aWV3LT5wYWludENvbnRlbnRzRm9yU25hcHNob3QoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCByZWN0
LCBzaG91bGRQYWludFNlbGVjdGlvbik7CiAKICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hvdEluRG9jdW1lbnRD
b29yZGluYXRlcyhjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZU9wdGlvbnMgb3B0aW9ucykKLXsK
LSAgICByZXR1cm4gc2NhbGVkU25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMocmVjdCwgMSwg
b3B0aW9ucyk7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6cGFnZURpZFNjcm9sbCgpCiB7CiAgICAgbV91
aUNsaWVudC5wYWdlRGlkU2Nyb2xsKHRoaXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYs
OSArMzQ2LDcgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dU
b1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAKLSAgICBQYXNzUmVmUHRyPFdlYklt
YWdlPiBzbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBJ
bWFnZU9wdGlvbnMpOwotICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNuYXBzaG90SW5Eb2N1bWVu
dENvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBJbWFnZU9wdGlvbnMpOwotICAg
IFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVz
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBkb3VibGUgc2NhbGVGYWN0b3IsIEltYWdlT3B0aW9u
cyk7CisgICAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gc2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZG91YmxlIHNjYWxlRmFjdG9yLCBTbmFwc2hvdE9wdGlv
bnMpOwogCiAgICAgc3RhdGljIGNvbnN0IFdlYkV2ZW50KiBjdXJyZW50RXZlbnQoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155851</attachid>
            <date>2012-08-01 11:57:46 -0700</date>
            <delta_ts>2012-08-08 14:45:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>16937</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA4LTAxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzUKKyAgICAgICAgTmVlZCBhIHdheSB0byBnZXQgYSBzbmFw
c2hvdCBpbWFnZSB0aGF0IGRvZXMgbm90IHNob3cgdGhlIHNlbGVjdGlvbgorICAgICAgICAtYW5k
IGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTk1NjgwMj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgZnVuY3Rpb24g
RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoKSBoYXMgdGhlIG9wdGlvbiB0byAK
KyAgICAgICAgZXhjbHVkZSBzZWxlY3Rpb24gZnJvbSB0aGUgc25hcHNob3QuCisKKyAgICAgICAg
RXhwb3J0IG5ldyBmdW5jdGlvbgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAg
IENsZWFyIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgUmVuZGVyVmlldyB3aGVuIHNlbGVjdGlvbiBp
cyB0byBiZSBleGNsdWRlZC4gUmVzdG9yZSAKKyAgICAgICAgYWxsIG9mIHRoaXMgaW5mb3JtYXRp
b24gdmlhIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkgYWZ0ZXIgY2FsbGluZyAK
KyAgICAgICAgcGFpbnRDb250ZW50cygpLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNuYXBzaG90KToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorCiAyMDEyLTA3LTMxICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTI0MjA3LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEyNDA0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05
NTUsNiArOTU1LDcgQEAgX19aTjdXZWJDb3JlOUZyYW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcAog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0QmFzZUJhY2tncm91bmRDb2xvckVSS05TXzVDb2xv
ckUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyM3VwZGF0ZUNhbkhhdmVTY3JvbGxiYXJzRXYKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyNGZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbkVSS05TXzlGbG9h
dFNpemVFUzNfZk5TXzE5QWRqdXN0Vmlld1NpemVPck5vdEUKK19fWk43V2ViQ29yZTlGcmFtZVZp
ZXcyNHBhaW50Q29udGVudHNGb3JTbmFwc2hvdEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183
SW50UmVjdEVOUzBfMThTZWxlY3Rpb25JblNuYXBob3RFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3
MjZhZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZEVQZmZmZgogX19aTjdXZWJDb3JlOUZyYW1lVmll
dzI5c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5FYgogX19aTjdXZWJDb3JlOUZyYW1lVmll
dzM3dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZUV2CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNTAsNiArMzE1MCwzNiBAQCB2
b2lkIEZyYW1lVmlldzo6c2V0Tm9kZVRvRHJhdyhOb2RlKiBub2RlCiAgICAgbV9ub2RlVG9EcmF3
ID0gbm9kZTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHNGb3JTbmFwc2hvdChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgU2VsZWN0
aW9uSW5TbmFwaG90IHNob3VsZFBhaW50U2VsZWN0aW9uKQoreworICAgIHVwZGF0ZUxheW91dEFu
ZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKworICAgIC8vIENhY2hlIHBhaW50IGJlaGF2aW9y
IGFuZCBzZXQgYSBuZXcgYmVoYXZpb3IgYXBwcm9wcmlhdGUgZm9yIHNuYXBzaG90cy4KKyAgICBQ
YWludEJlaGF2aW9yIG9sZEJlaGF2aW9yID0gcGFpbnRCZWhhdmlvcigpOworICAgIHNldFBhaW50
QmVoYXZpb3Iob2xkQmVoYXZpb3IgfCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzKTsKKworICAgIC8vIElmIHRoZSBzbmFwc2hvdCBzaG91bGQgZXhjbHVkZSBzZWxlY3Rpb24s
IHRoZW4gd2UnbGwgY2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCisgICAgLy8gaW4gdGhlIHJl
bmRlciB0cmVlIG9ubHkuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZXN0b3JlIHRoZSBzZWxlY3Rp
b24gZnJvbSB0aGUgRE9NCisgICAgLy8gYWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgorICAg
IGlmIChzaG91bGRQYWludFNlbGVjdGlvbiA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7CisgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAo
UmVuZGVyVmlldyogcm9vdCA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgICAg
ICAgICByb290LT5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFp
bnRDb250ZW50cyhjb250ZXh0LCBpbWFnZVJlY3QpOworCisgICAgLy8gUmVzdG9yZSBzZWxlY3Rp
b24uCisgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxlY3Rpb24pIHsK
KyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpCisgICAgICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPnVwZGF0ZUFwcGVhcmFuY2UoKTsKKyAgICB9CisKKyAgICAv
LyBSZXN0b3JlIGNhY2hlZCBwYWludCBiZWhhdmlvci4KKyAgICBzZXRQYWludEJlaGF2aW9yKG9s
ZEJlaGF2aW9yKTsKK30KKwogdm9pZCBGcmFtZVZpZXc6OnBhaW50T3ZlcmhhbmdBcmVhcyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ0Fy
ZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTI0MDQ1KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExhc3RQYWludFRpbWUoZG91YmxlIGxhc3RQYWludFRpbWUpIHsg
bV9sYXN0UGFpbnRUaW1lID0gbGFzdFBhaW50VGltZTsgfQogICAgIHZvaWQgc2V0Tm9kZVRvRHJh
dyhOb2RlKik7CiAKKyAgICBlbnVtIFNlbGVjdGlvbkluU25hcGhvdCB7IEluY2x1ZGVTZWxlY3Rp
b24sIEV4Y2x1ZGVTZWxlY3Rpb24gfTsKKyAgICB2b2lkIHBhaW50Q29udGVudHNGb3JTbmFwc2hv
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIFNlbGVjdGlvbklu
U25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbik7CisKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRP
dmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGhvcml6b250YWxP
dmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3ZlcmhhbmdBcmVhLCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRTY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTI0MjUzKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMTItMDgtMDEgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3NQorICAgICAgICBOZWVk
IGEgd2F5IHRvIGdldCBhIHNuYXBzaG90IGltYWdlIHRoYXQgZG9lcyBub3Qgc2hvdyB0aGUgc2Vs
ZWN0aW9uCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzExOTU2ODAyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIG5ldyBBUEkgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0aW9u
cygpCisKKyAgICAgICAgTmV3IGVudW0gU25hcHNob3RPcHRpb25zIHRyYWNrcyB3aGV0aGVyIHNu
YXBzaG90cyBzaG91bGQgZXhjbHVkZSAKKyAgICAgICAgc2VsZWN0aW9uIGhpZ2hsaWdodGluZyBp
biBhZGRpdGlvbiB0byB0cmFja2luZyB3aGV0aGVyIHRoZSBpbWFnZSBpcyAKKyAgICAgICAgc2hh
cmFibGUgbGlrZSB0aGUgb3JpZ2luYWwgSW1hZ2VPcHRpb25zLgorICAgICAgICAqIFNoYXJlZC9B
UEkvYy9XS0ltYWdlLmg6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5o
OgorICAgICAgICAoV2ViS2l0OjpzbmFwc2hvdE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnRvU25hcHNob3RPcHRpb25zKToKKyAg
ICAgICAgKiBTaGFyZWQvSW1hZ2VPcHRpb25zLmg6CisKKyAgICAgICAgTmV3IEFQSS4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoK
KyAgICAgICAgKFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90V2l0aE9wdGlvbnMpOgorCisgICAg
ICAgIFRoZXNlIGV4aXN0aW5nIEFQSXMgYWxsIG5vdyBjYWxsIAorICAgICAgICBXZWJQYWdlOjpz
Y2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKCkuCisgICAgICAgIChXS0J1bmRsZVBhZ2VDcmVhdGVT
bmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdLQnVuZGxlUGFnZUNyZWF0ZVNu
YXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdLQnVuZGxlUGFnZUNyZWF0
ZVNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKToKKworICAgICAgICBUaGlzIHBh
dGNoIHJlbW92ZXMgV2ViUGFnZTo6c25hcHNob3RJblZpZXdDb29yZGluYXRlcygpLCAKKyAgICAg
ICAgV2ViUGFnZTo6c25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoKSwgYW5kIAorICAgICAg
ICBXZWJQYWdlOjpzY2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcygpLiBBbGwgb2Yg
dGhlIGxvZ2ljIGlzIAorICAgICAgICBub3cgY29uc29saWRhdGVkIGludG8gV2ViUGFnZTo6c2Nh
bGVkU25hcHNob3RXaXRoT3B0aW9ucygpLiBJdCB0dXJucyAKKyAgICAgICAgb3V0IHRoYXQgd2Ug
bmV2ZXIgZGlkIGFueXRoaW5nIGRpZmZlcmVudCBmb3IgZG9jdW1lbnQgY29vcmRpbmF0ZXMgCisg
ICAgICAgIHZlcnN1cyB2aWV3IGNvb3JkaW5hdGVzLCBzbyB0aGF0IGNvbXBsZXhpdHkgY291bGQg
anVzdCBiZSBlbGltaW5hdGVkIAorICAgICAgICBvdXRyaWdodC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNuYXBzaG90T3B0aW9u
c1RvSW1hZ2VPcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2NhbGVkU25hcHNo
b3RXaXRoT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJQYWdlKToKKwogMjAxMi0wNy0zMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBVc2UgYW4g
YWN0dWFsIFdlYlByb2Nlc3NQcm94eSB3aGVuIGRlY29kaW5nIG1lc3NhZ2VzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvSW1hZ2VPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0ltYWdlT3B0aW9ucy5oCShyZXZpc2lvbiAxMjQwNDUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvSW1hZ2VPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDEyIEBAIGVudW0gSW1hZ2VPcHRpb25zIHsKICAgICBJbWFnZU9wdGlvbnNTaGFyZWFibGUgPSAx
IDw8IDAsCiB9OwogCitlbnVtIHsKKyAgICBTbmFwc2hvdE9wdGlvbnNTaGFyZWFibGUgPSAxIDw8
IDAsCisgICAgU25hcHNob3RPcHRpb25zRXhjbHVkZVNlbGVjdGlvbkhpZ2hsaWdodGluZyA9IDEg
PDwgMQorfTsKK3R5cGVkZWYgdWludDMyX3QgU25hcHNob3RPcHRpb25zOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEltYWdlT3B0aW9uc19oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0ltYWdlLmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvYy9XS0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEy
IEBAIGVudW0gewogfTsKIHR5cGVkZWYgdWludDMyX3QgV0tJbWFnZU9wdGlvbnM7CiAKK2VudW0g
eworICAgIGtXS1NuYXBzaG90T3B0aW9uc1NoYXJlYWJsZSA9IDEgPDwgMCwKKyAgICBrV0tTbmFw
c2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nID0gMSA8PCAxCit9OwordHlw
ZWRlZiB1aW50MzJfdCBXS1NuYXBzaG90T3B0aW9uczsKKwogV0tfRVhQT1JUIFdLVHlwZUlEIFdL
SW1hZ2VHZXRUeXBlSUQoKTsKIAogV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tJbWFnZUNyZWF0ZShX
S1NpemUgc2l6ZSwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCShyZXZpc2lvbiAxMjQwNDUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc1OCw2ICs3NTgsMjggQEAgaW5saW5lIEltYWdlT3B0aW9ucyB0b0ltYWdlT3B0
aW9ucyhXS0ltYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZU9wdGlvbnM+KGltYWdlT3B0
aW9ucyk7CiB9CiAKK2lubGluZSBTbmFwc2hvdE9wdGlvbnMgc25hcHNob3RPcHRpb25zRnJvbUlt
YWdlT3B0aW9ucyhXS0ltYWdlT3B0aW9ucyB3a0ltYWdlT3B0aW9ucykKK3sKKyAgICB1bnNpZ25l
ZCBzbmFwc2hvdE9wdGlvbnMgPSAwOworCisgICAgaWYgKHdrSW1hZ2VPcHRpb25zICYga1dLSW1h
Z2VPcHRpb25zU2hhcmVhYmxlKQorICAgICAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNob3RP
cHRpb25zU2hhcmVhYmxlOworCisgICAgcmV0dXJuIHNuYXBzaG90T3B0aW9uczsKK30KKworaW5s
aW5lIFNuYXBzaG90T3B0aW9ucyB0b1NuYXBzaG90T3B0aW9ucyhXS1NuYXBzaG90T3B0aW9ucyB3
a1NuYXBzaG90T3B0aW9ucykKK3sKKyAgICB1bnNpZ25lZCBzbmFwc2hvdE9wdGlvbnMgPSAwOwor
CisgICAgaWYgKHdrU25hcHNob3RPcHRpb25zICYga1dLU25hcHNob3RPcHRpb25zU2hhcmVhYmxl
KQorICAgICAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zU2hhcmVhYmxlOwor
ICAgIGlmICh3a1NuYXBzaG90T3B0aW9ucyAmIGtXS1NuYXBzaG90T3B0aW9uc0V4Y2x1ZGVTZWxl
Y3Rpb25IaWdobGlnaHRpbmcpCisgICAgICAgIHNuYXBzaG90T3B0aW9ucyB8PSBTbmFwc2hvdE9w
dGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nOworCisgICAgcmV0dXJuIHNuYXBzaG90
T3B0aW9uczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBXS1NoYXJl
ZEFQSUNhc3RfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24g
MTI0MDQ1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsMjEgKzI4NywyNyBAQCBi
b29sIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoV0tCdW5kbGVQYWdlCiAgICAgcmV0dXJuIHRvSW1w
bChwYWdlUmVmKS0+ZmluZFN0cmluZ0Zyb21JbmplY3RlZEJ1bmRsZSh0b0ltcGwodGFyZ2V0KS0+
c3RyaW5nKCksIHRvRmluZE9wdGlvbnMoZmluZE9wdGlvbnMpKTsKIH0KIAorV0tJbWFnZVJlZiBX
S0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlUGFnZVJlZiBwYWdl
UmVmLCBXS1JlY3QgcmVjdCwgV0tTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBSZWZQ
dHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hvdFdp
dGhPcHRpb25zKHRvSW50UmVjdChyZWN0KSwgMSwgdG9TbmFwc2hvdE9wdGlvbnMob3B0aW9ucykp
OworICAgIHJldHVybiB0b0FQSSh3ZWJJbWFnZS5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KKwog
V0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9u
cykKIHsKLSAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5z
bmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKHRvSW50UmVjdChyZWN0KSwgdG9JbWFnZU9wdGlvbnMo
b3B0aW9ucykpOworICAgIFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJl
ZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJlY3QpLCAxLCBzbmFwc2hv
dE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKICAgICByZXR1cm4gdG9BUEkod2Vi
SW1hZ2UucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdl
Q3JlYXRlU25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLUmVjdCByZWN0LCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKQogewotICAgIFJlZlB0cjxX
ZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJlZiktPnNuYXBzaG90SW5Eb2N1bWVudENv
b3JkaW5hdGVzKHRvSW50UmVjdChyZWN0KSwgdG9JbWFnZU9wdGlvbnMob3B0aW9ucykpOworICAg
IFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBz
aG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJlY3QpLCAxLCBzbmFwc2hvdE9wdGlvbnNGcm9tSW1h
Z2VPcHRpb25zKG9wdGlvbnMpKTsKICAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UucmVsZWFzZSgp
LmxlYWtSZWYoKSk7CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU2NhbGVkU25h
cHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLUmVj
dCByZWN0LCBkb3VibGUgc2NhbGVGYWN0b3IsIFdLSW1hZ2VPcHRpb25zIG9wdGlvbnMpCiB7Ci0g
ICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+c2NhbGVkU25h
cHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXModG9JbnRSZWN0KHJlY3QpLCBzY2FsZUZhY3Rvciwg
dG9JbWFnZU9wdGlvbnMob3B0aW9ucykpOworICAgIFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2Ug
PSB0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJl
Y3QpLCBzY2FsZUZhY3Rvciwgc25hcHNob3RPcHRpb25zRnJvbUltYWdlT3B0aW9ucyhvcHRpb25z
KSk7CiAgICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgJKHJldmlzaW9uIDEyNDA0NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw4ICszOTgsMTQgQEAgV0tfRVhQT1JUIGJvb2wgV0tC
dW5kbGVQYWdlQ2FuSGFuZGxlUmVxdQogCiBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZVBhZ2VGaW5k
U3RyaW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0YXJnZXQsIFdLRmluZE9w
dGlvbnMgZmluZE9wdGlvbnMpOwogCitXS19FWFBPUlQgV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VD
cmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVj
dCwgV0tTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucyk7CisKKy8vIFdlIHNob3VsZCBkZXByZWNhdGUg
dGhlc2UgZnVuY3Rpb25zIGluIGZhdm9yIG9mIGp1c3QgdXNpbmcgV0tCdW5kbGVQYWdlQ3JlYXRl
U25hcHNob3RXaXRoT3B0aW9ucy4KIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNy
ZWF0ZVNuYXBzaG90SW5WaWV3Q29vcmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLUmVj
dCByZWN0LCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKTsKIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdL
QnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucyk7CisKKy8vIFdl
IHNob3VsZCBrZWVwIHRoaXMgZnVuY3Rpb24gc2luY2UgaXQgYWxsb3dzIHBhc3NpbmcgYSBzY2Fs
ZSBmYWN0b3IsIGJ1dCB3ZSBzaG91bGQgcmUtbmFtZSBpdCB0bworLy8gV0tCdW5kbGVQYWdlQ3Jl
YXRlU2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucy4KIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLQnVu
ZGxlUGFnZUNyZWF0ZVNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxl
UGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwgZG91YmxlIHNjYWxlRmFjdG9yLCBXS0ltYWdlT3B0
aW9ucyBvcHRpb25zKTsKIAogV0tfRVhQT1JUIGRvdWJsZSBXS0J1bmRsZVBhZ2VHZXRCYWNraW5n
U2NhbGVGYWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTI0MDQ1KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTkwLDQzICsxMTkwLDI3IEBAIHZvaWQgV2ViUGFnZTo6dW5pbnN0YWxsUGFnZU92
ZXJsYXkoUGFnZU8KICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFdlYkltYWdlPiBXZWJQYWdlOjpz
bmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlT3B0aW9u
cyBvcHRpb25zKQorc3RhdGljIEltYWdlT3B0aW9ucyBzbmFwc2hvdE9wdGlvbnNUb0ltYWdlT3B0
aW9ucyhTbmFwc2hvdE9wdGlvbnMgc25hcHNob3RPcHRpb25zKQogewotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFm
cmFtZVZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSW50U2l6ZSBiaXRtYXBTaXplID0g
cmVjdC5zaXplKCk7Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBjb3JlUGFnZSgpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIGJpdG1hcFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0
b3IpOwotCi0gICAgUmVmUHRyPFdlYkltYWdlPiBzbmFwc2hvdCA9IFdlYkltYWdlOjpjcmVhdGUo
Yml0bWFwU2l6ZSwgb3B0aW9ucyk7Ci0gICAgaWYgKCFzbmFwc2hvdC0+Yml0bWFwKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGdyYXBoaWNzQ29udGV4dCA9IHNuYXBzaG90LT5iaXRtYXAoKS0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmlj
ZVNjYWxlRmFjdG9yKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCks
IC1yZWN0LnkoKSk7Ci0KLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUoKTsKKyAgICB1bnNpZ25lZCBpbWFnZU9wdGlvbnMgPSAwOwogCi0gICAgUGFp
bnRCZWhhdmlvciBvbGRCZWhhdmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhhdmlvcigpOwotICAg
IGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvciB8IFBhaW50QmVoYXZpb3JG
bGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotICAgIGZyYW1lVmlldy0+cGFpbnQoZ3JhcGhpY3ND
b250ZXh0LmdldCgpLCByZWN0KTsKLSAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xk
QmVoYXZpb3IpOworICAgIGlmIChzbmFwc2hvdE9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNTaGFy
ZWFibGUpCisgICAgICAgIGltYWdlT3B0aW9ucyB8PSBJbWFnZU9wdGlvbnNTaGFyZWFibGU7CiAK
LSAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJ
bWFnZU9wdGlvbnM+KGltYWdlT3B0aW9ucyk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViSW1hZ2U+IFdl
YlBhZ2U6OnNjYWxlZFNuYXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGRvdWJsZSBzY2FsZUZhY3RvciwgSW1hZ2VPcHRpb25zIG9wdGlvbnMpCitQYXNzUmVm
UHRyPFdlYkltYWdlPiBXZWJQYWdlOjpzY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGRvdWJsZSBzY2FsZUZhY3RvciwgU25hcHNob3RPcHRpb25zIG9wdGlvbnMp
CiB7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCkt
PnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBJ
bnRTaXplIGJpdG1hcFNpemUgPSByZWN0LnNpemUoKTsKICAgICBmbG9hdCBjb21iaW5lZFNjYWxl
RmFjdG9yID0gc2NhbGVGYWN0b3IgKiBjb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwot
ICAgIEludFNpemUgc2l6ZShjZWlsKHJlY3Qud2lkdGgoKSAqIGNvbWJpbmVkU2NhbGVGYWN0b3Ip
LCBjZWlsKHJlY3QuaGVpZ2h0KCkgKiBjb21iaW5lZFNjYWxlRmFjdG9yKSk7Ci0gICAgUmVmUHRy
PFdlYkltYWdlPiBzbmFwc2hvdCA9IFdlYkltYWdlOjpjcmVhdGUoc2l6ZSwgb3B0aW9ucyk7Cisg
ICAgYml0bWFwU2l6ZS5zY2FsZShjb21iaW5lZFNjYWxlRmFjdG9yKTsKKworICAgIFJlZlB0cjxX
ZWJJbWFnZT4gc25hcHNob3QgPSBXZWJJbWFnZTo6Y3JlYXRlKGJpdG1hcFNpemUsIHNuYXBzaG90
T3B0aW9uc1RvSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKICAgICBpZiAoIXNuYXBzaG90LT5iaXRt
YXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEyMzQsMjEgKzEyMTgsMTUgQEAgUGFzc1Jl
ZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c2NhbGVkU25hcAogICAgIGdyYXBoaWNzQ29udGV4dC0+
YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihjb21iaW5lZFNjYWxlRmFjdG9yKTsKICAgICBncmFwaGlj
c0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAKLSAgICBmcmFtZVZp
ZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICBGcmFtZVZp
ZXc6OlNlbGVjdGlvbkluU25hcGhvdCBzaG91bGRQYWludFNlbGVjdGlvbiA9IEZyYW1lVmlldzo6
SW5jbHVkZVNlbGVjdGlvbjsKKyAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc0V4Y2x1
ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcpCisgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uID0g
RnJhbWVWaWV3OjpFeGNsdWRlU2VsZWN0aW9uOwogCi0gICAgUGFpbnRCZWhhdmlvciBvbGRCZWhh
dmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhhdmlvcigpOwotICAgIGZyYW1lVmlldy0+c2V0UGFp
bnRCZWhhdmlvcihvbGRCZWhhdmlvciB8IFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdM
YXllcnMpOwotICAgIGZyYW1lVmlldy0+cGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQuZ2V0
KCksIHJlY3QpOwotICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRCZWhhdmlvcik7
CisgICAgZnJhbWVWaWV3LT5wYWludENvbnRlbnRzRm9yU25hcHNob3QoZ3JhcGhpY3NDb250ZXh0
LmdldCgpLCByZWN0LCBzaG91bGRQYWludFNlbGVjdGlvbik7CiAKICAgICByZXR1cm4gc25hcHNo
b3QucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hv
dEluRG9jdW1lbnRDb29yZGluYXRlcyhjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZU9wdGlvbnMg
b3B0aW9ucykKLXsKLSAgICByZXR1cm4gc2NhbGVkU25hcHNob3RJbkRvY3VtZW50Q29vcmRpbmF0
ZXMocmVjdCwgMSwgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6cGFnZURpZFNjcm9sbCgp
CiB7CiAgICAgbV91aUNsaWVudC5wYWdlRGlkU2Nyb2xsKHRoaXMpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxMjQwNDUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDYsOSArMzQ2LDcgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkludFBvaW50IHNj
cmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgV2ViQ29yZTo6SW50
UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAKLSAgICBQYXNz
UmVmUHRyPFdlYkltYWdlPiBzbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBJbWFnZU9wdGlvbnMpOwotICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNuYXBz
aG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBJbWFnZU9w
dGlvbnMpOwotICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNjYWxlZFNuYXBzaG90SW5Eb2N1bWVu
dENvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBkb3VibGUgc2NhbGVGYWN0b3Is
IEltYWdlT3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxXZWJJbWFnZT4gc2NhbGVkU25hcHNob3RX
aXRoT3B0aW9ucyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZG91YmxlIHNjYWxlRmFjdG9yLCBT
bmFwc2hvdE9wdGlvbnMpOwogCiAgICAgc3RhdGljIGNvbnN0IFdlYkV2ZW50KiBjdXJyZW50RXZl
bnQoKTsKIAo=
</data>
<flag name="review"
          id="165405"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>