<?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>49481</bug_id>
          
          <creation_ts>2010-11-12 15:55:38 -0800</creation_ts>
          <short_desc>Implement WebKit Full Screen support</short_desc>
          <delta_ts>2011-03-03 16:48:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://wiki.mozilla.org/Gecko:FullScreenAPI</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>43099</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>buildbot</cc>
    
    <cc>ddorwin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>peter</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>scherkus</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>sjl</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>308817</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 15:55:38 -0800</bug_when>
    <thetext>Implement the Gecko Full Screen API support inside of WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308847</commentid>
    <comment_count>1</comment_count>
      <attachid>73793</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 16:55:34 -0800</bug_when>
    <thetext>Created attachment 73793
WebCore-RenderFullScreen</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308848</commentid>
    <comment_count>2</comment_count>
      <attachid>73794</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 16:56:00 -0800</bug_when>
    <thetext>Created attachment 73794
WebCore-DOM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308849</commentid>
    <comment_count>3</comment_count>
      <attachid>73795</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 16:56:42 -0800</bug_when>
    <thetext>Created attachment 73795
WebCore-Rendering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308851</commentid>
    <comment_count>4</comment_count>
      <attachid>73796</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 16:57:09 -0800</bug_when>
    <thetext>Created attachment 73796
WebCore-EverythingElse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308852</commentid>
    <comment_count>5</comment_count>
      <attachid>73797</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 16:57:44 -0800</bug_when>
    <thetext>Created attachment 73797
WebKit-WebFullScreenController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308853</commentid>
    <comment_count>6</comment_count>
      <attachid>73798</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 16:58:11 -0800</bug_when>
    <thetext>Created attachment 73798
WebKit-WebView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308854</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-12 16:58:39 -0800</bug_when>
    <thetext>Attachment 73795 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/page/FrameView.cpp&apos;, u&apos;WebCore/rendering/RenderLayerBacking.cpp&apos;, u&apos;WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;WebCore/rendering/RenderLayerCompositor.h&apos;]&quot; exit_code: 1
WebCore/rendering/RenderLayerCompositor.cpp:806:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 4 files


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

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit/ChangeLog&apos;, u&apos;WebKit/WebKit.xcodeproj/project.pbxproj&apos;, u&apos;WebKit/mac/ChangeLog&apos;, u&apos;WebKit/mac/WebView/WebFullscreenController.h&apos;, u&apos;WebKit/mac/WebView/WebFullscreenController.mm&apos;]&quot; exit_code: 1
WebKit/mac/WebView/WebFullscreenController.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/mac/WebView/WebFullscreenController.h:40:  _element is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:41:  _renderer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:42:  _replacementElement is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:46:  _rendererLayer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:47:  _backgroundLayer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:48:  _mediaEventListener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:50:  _isAnimating is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:51:  _isFullscreen is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:52:  _isWindowLoaded is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:53:  _forceDisableAnimation is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:54:  _isPlaying is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:55:  _idleDisplaySleepAssertion is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:56:  _idleSystemSleepAssertion is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:58:  _savedUIMode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:59:  _savedUIOptions is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:60:  _initialFrame is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 17 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308859</commentid>
    <comment_count>9</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-12 17:03:38 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; WebCore/rendering/RenderLayerCompositor.cpp:806:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]

I&apos;ve removed the &quot;else&quot; statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308861</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-12 17:13:13 -0800</bug_when>
    <thetext>Attachment 73795 did not build on mac:
Build output: http://queues.webkit.org/results/5827003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308868</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-12 17:22:01 -0800</bug_when>
    <thetext>Attachment 73795 did not build on chromium:
Build output: http://queues.webkit.org/results/5819003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308873</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-12 17:36:14 -0800</bug_when>
    <thetext>Attachment 73795 did not build on qt:
Build output: http://queues.webkit.org/results/5826003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308933</commentid>
    <comment_count>13</comment_count>
      <attachid>73793</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-11-12 23:03:09 -0800</bug_when>
    <thetext>Comment on attachment 73793
WebCore-RenderFullScreen

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

&gt; WebCore/rendering/RenderFullScreen.cpp:8
&gt; +/*
&gt; + *  RenderFullScreen.cpp
&gt; + *  WebCore
&gt; + *
&gt; + *  Created by Jer Noble on 10/25/10.
&gt; + *  Copyright 2010 Apple Computer. All rights reserved.
&gt; + *
&gt; + */

Briefly glanced at this patch and noticed that this comment is similar to the default Xcode copyright comment. Instead, this file should have the same copyright comment as in RenderFullScreen.h. Also, while the license in RenderFullScreen.h is sufficient it differs in wording from the Apple license used in Apple-contributed files, see &lt;http://trac.webkit.org/browser/trunk/WebKit/LICENSE&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308936</commentid>
    <comment_count>14</comment_count>
      <attachid>73793</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-12 23:16:49 -0800</bug_when>
    <thetext>Comment on attachment 73793
WebCore-RenderFullScreen

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

&gt;&gt; WebCore/rendering/RenderFullScreen.cpp:8
&gt;&gt; +/*
&gt;&gt; + *  RenderFullScreen.cpp
&gt;&gt; + *  WebCore
&gt;&gt; + *
&gt;&gt; + *  Created by Jer Noble on 10/25/10.
&gt;&gt; + *  Copyright 2010 Apple Computer. All rights reserved.
&gt;&gt; + *
&gt;&gt; + */
&gt; 
&gt; Briefly glanced at this patch and noticed that this comment is similar to the default Xcode copyright comment. Instead, this file should have the same copyright comment as in RenderFullScreen.h. Also, while the license in RenderFullScreen.h is sufficient it differs in wording from the Apple license used in Apple-contributed files, see &lt;http://trac.webkit.org/browser/trunk/WebKit/LICENSE&gt;.

Good point.  We need a WebKit-compatible license block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309350</commentid>
    <comment_count>15</comment_count>
      <attachid>73911</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-15 10:44:43 -0800</bug_when>
    <thetext>Created attachment 73911
WebCore-RenderFullScreen

Updated license text in both RenderFullScreen.cpp and RenderFullScreen.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309355</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-15 10:57:06 -0800</bug_when>
    <thetext>Attachment 73911 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;WebCore/rendering/RenderFullScreen.cpp&apos;, u&apos;WebCore/rendering/RenderFullScreen.h&apos;, u&apos;WebCore/rendering/RenderObject.h&apos;]&quot; exit_code: 1
WebCore/rendering/RenderFullScreen.cpp:33:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309366</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-11-15 11:24:34 -0800</bug_when>
    <thetext>Is it possible to make a series of patches that are not split by directory, but rather logically build each on top of the last?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309387</commentid>
    <comment_count>18</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-15 12:10:30 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Is it possible to make a series of patches that are not split by directory, but rather logically build each on top of the last?

They do.  In order:

WebCore-RenderFullScreen: contains the new RenderFullScreen class and the necessary project file changes.
WebCore-DOM: contains changes to the Document and Node classes needed to create and access the RenderFullScreenObject.
WebCore-Rendering: uses the DOM changes to correctly render the RenderFullScreen object.
WebCore-EverythingElse: export file changes and miscellaneous changes not directly related to the RenderFullScreen object.
WebKit-WebFullScreenController: uses the DOM changes to host the RenderFullScreen layer in a new fullscreen window.
WebKit-WebView: Ties the new Document notifications to the new window controller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309528</commentid>
    <comment_count>19</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2010-11-15 17:24:59 -0800</bug_when>
    <thetext>exciting!  will skim through the patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309556</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-15 20:17:52 -0800</bug_when>
    <thetext>Attachment 73795 did not build on win:
Build output: http://queues.webkit.org/results/5939095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310618</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-17 17:01:18 -0800</bug_when>
    <thetext>Attachment 73795 did not build on chromium:
Build output: http://queues.webkit.org/results/6204020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311742</commentid>
    <comment_count>22</comment_count>
    <who name="David Dorwin">ddorwin</who>
    <bug_when>2010-11-19 16:10:57 -0800</bug_when>
    <thetext>Hi. I&apos;ll be implementing full screen support in Chromium, so I was reading through these patches.

&gt; WebCore/dom/Document.cpp:4764
&gt; +    element-&gt;detach();
&gt;      // m_fullScreenElement has already been cleared; recalc the style of 
&gt;      // the passed in element instead.
&gt;      element-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt;      if (element != documentElement())
&gt;          documentElement()-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt; +    element-&gt;attach();
It&apos;s not clear to me why the element needs to be detached then attached. An explanation might be helpful.

Looking at Node::setNeedsStyleRecalc(), it appears that the detach() call might result in the element-&gt;setNeedsStyleRecalc(FullStyleChange) call having no effect. Maybe I&apos;m missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311751</commentid>
    <comment_count>23</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-11-19 16:33:59 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; It&apos;s not clear to me why the element needs to be detached then attached. An explanation might be helpful.
&gt; 
&gt; Looking at Node::setNeedsStyleRecalc(), it appears that the detach() call might result in the element-&gt;setNeedsStyleRecalc(FullStyleChange) call having no effect. Maybe I&apos;m missing something.

Detaching and re-attaching forces the element&apos;s renderer to be re-created, thus disconnecting it from the RenderFullScreen renderer.  Without detaching the element, I don&apos;t think the style update machinery would know that element&apos;s renderer needs to be reparented.

It might be the case that the element-&gt;attach() is unnecessary, and the element will get attach() called on it as part of the normal style recalculation.  But I thought it best to be explicit about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316292</commentid>
    <comment_count>24</comment_count>
      <attachid>73794</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 11:36:39 -0800</bug_when>
    <thetext>Comment on attachment 73794
WebCore-DOM

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

&gt; WebCore/dom/Document.cpp:4741
&gt; +    setNeedsStyleRecalc(SyntheticStyleChange);
&gt; +    documentElement()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; +    m_fullScreenElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);

You don&apos;t need these if you&apos;re doing a recalcStyle(Force).

&gt; WebCore/dom/Document.cpp:4746
&gt; +    frame()-&gt;view()-&gt;setShouldUpdateWhileOffscreen(TRUE);

true, not TRUE

&gt; WebCore/dom/Document.cpp:4772
&gt; +    element-&gt;detach();
&gt;      // m_fullScreenElement has already been cleared; recalc the style of 
&gt;      // the passed in element instead.
&gt;      element-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt;      if (element != documentElement())
&gt;          documentElement()-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt; +    element-&gt;attach();
&gt; +
&gt;      updateStyleIfNeeded();

Why not just do a recalcStyle(Force) here too?

&gt; WebCore/dom/Document.cpp:4778
&gt; +    // Save off the m_fullScreenRenderer to destroy only after the client has
&gt; +    // been notified that the renderer has changed:
&gt; +    RenderBox* renderer = m_fullScreenRenderer;
&gt; +    webkitSetFullScreenRenderer(0);
&gt; +    renderer-&gt;destroy();

Renderers are not refcounted, and are only normally created/destroyed in attach/detach or style changes. It worries me that you&apos;re destroying the renderer here.

&gt; WebCore/dom/Document.cpp:4780
&gt; +    frame()-&gt;view()-&gt;setShouldUpdateWhileOffscreen(FALSE);

false, not FALSE

&gt; WebCore/dom/Document.cpp:4788
&gt; +void Document::webkitSetFullScreenRenderer(RenderBox* renderer)
&gt; +{
&gt; +    m_fullScreenRenderer = renderer;
&gt; +    page()-&gt;chrome()-&gt;client()-&gt;fullScreenRendererChanged(m_fullScreenRenderer);
&gt; +}

Where is the corresponding Document.h change?

This method does not need the webkit prefix.

&gt; WebCore/dom/Node.cpp:1338
&gt; +    if (document()-&gt;webkitFullScreen() &amp;&amp; document()-&gt;webkitCurrentFullScreenElement() == this) {

document()-&gt;webkitFullScreen() is a bad method name. It should be isFullscreen(). Only methods exposed via IDL need the webkit prefix.

&gt; WebCore/dom/Node.cpp:1345
&gt; +        RenderFullScreen* fullscreenRenderer = new (document()-&gt;renderArena()) RenderFullScreen(document());
&gt; +        fullscreenRenderer-&gt;setStyle(RenderFullScreen::createFullScreenStyle());
&gt; +        parentRenderer-&gt;addChild(fullscreenRenderer, 0);
&gt; +        parentRenderer = fullscreenRenderer;
&gt; +        nextRenderer = 0;
&gt; +        document()-&gt;webkitSetFullScreenRenderer(fullscreenRenderer);
&gt; +    }

What prevents this renderer from being destroyed if JS runs in the document, and the parent&apos;s child renderers are re-computed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316295</commentid>
    <comment_count>25</comment_count>
      <attachid>73795</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 11:41:18 -0800</bug_when>
    <thetext>Comment on attachment 73795
WebCore-Rendering

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

There&apos;s too much special magic here, and it&apos;s not clear to me how much is just for the fullscreen animation.

&gt; WebCore/page/FrameView.cpp:495
&gt; +#if ENABLE(FULLSCREEN_API)
&gt; +    Document* document = m_frame-&gt;document();
&gt; +    if (document-&gt;webkitFullScreen() &amp;&amp; document-&gt;webkitFullScreenRenderer())
&gt; +        view-&gt;compositor()-&gt;updateCompositingLayers(CompositingUpdateAfterLayoutOrStyleChange, document-&gt;webkitFullScreenRenderer()-&gt;layer());
&gt; +#endif

I don&apos;t think the fullscreen layers should be disconnected at all, so they shoudn&apos;t need updating separately.

&gt; WebCore/page/FrameView.cpp:563
&gt; +    // The fullScreenRenderer&apos;s graphicsLayer  has been re-parented, and the above recursive syncCompositingState
&gt; +    // call will not cause the subtree under it to repaint.  Explicitly call the syncCompositingState on 
&gt; +    // the fullScreenRenderer&apos;s graphicsLayer here:
&gt; +    Document* document = m_frame-&gt;document();
&gt; +    if (document-&gt;webkitFullScreen() &amp;&amp; document-&gt;webkitFullScreenRenderer()) {
&gt; +        RenderObject* fullScreenRenderer = document-&gt;webkitFullScreenRenderer();
&gt; +        if (GraphicsLayer* fullScreenLayer = toRenderBox(fullScreenRenderer)-&gt;layer()-&gt;backing()-&gt;graphicsLayer())
&gt; +            fullScreenLayer-&gt;syncCompositingState();
&gt; +    }

Ditto.

&gt; WebCore/page/FrameView.cpp:2005
&gt; +        // The fullScreenRenderer&apos;s graphicsLayer  has been re-parented, and the above recursive syncCompositingState
&gt; +        // call will not cause the subtree under it to repaint.  Explicitly call the syncCompositingState on 
&gt; +        // the fullScreenRenderer&apos;s graphicsLayer here:
&gt; +        if (document-&gt;webkitFullScreen() &amp;&amp; document-&gt;webkitFullScreenRenderer()) {
&gt; +            RenderObject* fullScreenRenderer = document-&gt;webkitFullScreenRenderer();
&gt; +            if (GraphicsLayer* fullScreenLayer = toRenderBox(fullScreenRenderer)-&gt;layer()-&gt;backing()-&gt;graphicsLayer())
&gt; +                fullScreenLayer-&gt;syncCompositingState();
&gt; +        }

Ditto.

&gt; WebCore/rendering/RenderLayerBacking.cpp:185
&gt; +    // We&apos;d need RenderObject::convertContainerToLocalQuad(), which doesn&apos;t yet exist.  If this
&gt; +    // is a fullscreen renderer, don&apos;t clip to the viewport, as the renderer will be asked to
&gt; +    // display outside of the viewport bounds.
&gt; +    if (compositor()-&gt;compositingConsultsOverlap() &amp;&amp; !layerOrAncestorIsTransformed(m_owningLayer) 
&gt; +#if ENABLE(FULLSCREEN_API)
&gt; +        &amp;&amp; !layerOrAncestorIsFullScreen(m_owningLayer)
&gt; +#endif

Is this only true during animation to fullscreen, or when in fullscreen? Why isn&apos;t the viewport fullscreen when in fullscreen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316297</commentid>
    <comment_count>26</comment_count>
      <attachid>73796</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 11:43:01 -0800</bug_when>
    <thetext>Comment on attachment 73796
WebCore-EverythingElse

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

&gt; WebCore/css/fullscreen.css:2
&gt;  :-webkit-full-screen {
&gt; -    position:fixed;
&gt; -    top:0;
&gt; -    left:0;
&gt; -    right:0;
&gt; -    bottom:0;
&gt; +    background-color: white;

Why do we no longer use position:fixed etc?

&gt; WebCore/dom/Element.h:164
&gt; +    IntRect screenRect();

Should be const. Needs as comment saying what it really means, or a better name, like boundingBoxInScreenCoordinates().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316302</commentid>
    <comment_count>27</comment_count>
      <attachid>73911</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 11:47:13 -0800</bug_when>
    <thetext>Comment on attachment 73911
WebCore-RenderFullScreen

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

&gt; WebCore/ChangeLog:56
&gt; +        * WebCore.exp.in: Export a number of symbols newly used by WebKit.
&gt; +        * WebCore.xcodeproj/project.pbxproj: Add RenderFullScreen.cpp,h to the project.
&gt; +        * css/fullscreen.css: Change the default style rules for fullscreen elements.
&gt; +        * dom/Document.cpp:
&gt; +        (WebCore::Document::Document): Initialize m_fullscreenRenderer.
&gt; +        (WebCore::Document::detach): Uninitialize m_fullscreenRenderer.
&gt; +        (WebCore::Document::webkitWillEnterFullScreenForElement): 
&gt; +        (WebCore::Document::webkitDidExitFullScreenForElement):
&gt; +        (WebCore::Document::webkitSetFullScreenRenderer): Set m_fullscreenRenderer, and notify chrome clients.
&gt; +        * dom/Document.h:
&gt; +        (WebCore::Document::webkitFullScreenRenderer): Accessor for m_fullscreenRenderer.
&gt; +        * dom/Element.cpp:
&gt; +        (WebCore::Element::screenRect): Moved into Element from HTMLMediaElement.
&gt; +        * dom/Node.cpp:
&gt; +        (WebCore::Node::createRendererIfNeeded): Creates a RenderFullScreen parent for the
&gt; +            current fullscreen element.
&gt; +        * html/HTMLMediaElement.cpp: Moved screenRect into Element.
&gt; +        * html/HTMLMediaElement.h: Ditto.
&gt; +        * page/ChromeClient.h:
&gt; +        (WebCore::ChromeClient::fullScreenRendererChanged): New function used to notify clients of full 
&gt; +            screen renderer changes.
&gt; +        * page/FrameView.cpp:
&gt; +        (WebCore::FrameView::updateCompositingLayers):  Special treatment for fullscreen renderer.
&gt; +        (WebCore::FrameView::syncCompositingStateRecursive): Ditto.
&gt; +        (WebCore::FrameView::paintContents): Ditto.
&gt; +        * rendering/RenderFullScreen.cpp: Added.
&gt; +        (RenderFullScreen::createFullScreenStyle): Default style for RenderFullScreen elements.
&gt; +        * rendering/RenderFullScreen.h: Added.
&gt; +        * rendering/RenderLayerBacking.cpp:
&gt; +        (WebCore::layerOrAncestorIsFullScreen): New function.
&gt; +        (WebCore::RenderLayerBacking::updateCompositedBounds): Do not clip if the layerOrAncestorIsFullScreen.
&gt; +        * rendering/RenderLayerCompositor.cpp:
&gt; +        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Special treatment for fullscreen renderer.
&gt; +        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Ditto.
&gt; +        (WebCore::RenderLayerCompositor::requiresCompositingForFullScreen): Ditto.
&gt; +        * rendering/RenderLayerCompositor.h:
&gt; +        * rendering/RenderObject.h:
&gt; +        (WebCore::RenderObject::isFullScreen): New function.

There are lots of changes here that are not in this patch.

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21445
&gt; -			developmentRegion = English;

Please update your Xcode!

&gt; WebCore/rendering/RenderFullScreen.cpp:33
&gt; +    PassRefPtr&lt;RenderStyle&gt; fullscreenStyle = RenderStyle::createDefaultStyle();

This should be a RefPtr.

&gt; WebCore/rendering/RenderFullScreen.cpp:36
&gt; +    // Create a stacking context:
&gt; +    fullscreenStyle-&gt;setZIndex(INT_MAX);

setZIndex(0) is sufficient to create a stacking context.

&gt; WebCore/rendering/RenderFullScreen.h:36
&gt; +    RenderFullScreen(Node* node) : RenderFlexibleBox(node) { setReplaced(false); setIsAnonymous(false); }

We normally put these on multiple lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316303</commentid>
    <comment_count>28</comment_count>
      <attachid>73798</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 11:49:01 -0800</bug_when>
    <thetext>Comment on attachment 73798
WebKit-WebView

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

&gt; WebKit/mac/WebView/WebView.mm:5977
&gt; +        // The backend may just warn us that the underlaying plaftormMovie()
&gt; +        // has changed. Just force an update.

Typo &quot;plaftorm&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316308</commentid>
    <comment_count>29</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 11:52:44 -0800</bug_when>
    <thetext>In general I think this feature should still work if accelerated compositing is disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316319</commentid>
    <comment_count>30</comment_count>
      <attachid>73797</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 12:06:15 -0800</bug_when>
    <thetext>Comment on attachment 73797
WebKit-WebFullScreenController

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

&gt; WebKit/mac/WebView/WebFullscreenController.h:2
&gt; + * Copyright (C) 2009 Apple Inc. All rights reserved.

2010

&gt; WebKit/mac/WebView/WebFullscreenController.h:42
&gt; +    RefPtr&lt;WebCore::Element&gt; _element; // (retain)
&gt; +    WebCore::RenderBox* _renderer; // (set)
&gt; +    RefPtr&lt;WebCore::Element&gt; _replacementElement; // (retain)

No need for the //retain comments on C++ things; it&apos;s obvious.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:83
&gt; +using WebCore::AnimationList;
&gt; +using WebCore::Animation;
&gt; +using WebCore::DOMWindow;
&gt; +using WebCore::Document;
&gt; +using WebCore::Element;
&gt; +using WebCore::Event;
&gt; +using WebCore::EventListener;
&gt; +using WebCore::EventNames;
&gt; +using WebCore::FloatRect;
&gt; +using WebCore::FloatSize;
&gt; +using WebCore::GraphicsLayer;
&gt; +using WebCore::HTMLMediaElement;
&gt; +using WebCore::HTMLNames::videoTag;
&gt; +using WebCore::Length;
&gt; +using WebCore::LengthType;
&gt; +using WebCore::Node;
&gt; +using WebCore::NodeList;
&gt; +using WebCore::RenderBlock;
&gt; +using WebCore::RenderBox;
&gt; +using WebCore::RenderFullScreen;
&gt; +using WebCore::RenderLayer;
&gt; +using WebCore::RenderLayerBacking;
&gt; +using WebCore::RenderObject;
&gt; +using WebCore::RenderStyle;
&gt; +using WebCore::ScriptExecutionContext;
&gt; +

Why not just &quot;using namespace WebCore&quot;?

&gt; WebKit/mac/WebView/WebFullscreenController.mm:144
&gt; +    [_tickleTimer invalidate];
&gt; +    [_tickleTimer release];
&gt; +    _tickleTimer = nil;

There&apos;s a retain cycle between the timer and self. You&apos;ll never hit dealloc with a non-nil timer.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:156
&gt; +#ifdef BUILDING_ON_TIGER
&gt; +    // WebFullscreenController is not supported on Tiger:
&gt; +    ASSERT_NOT_REACHED();

This is odd. Why not assert earlier, or #ifdef all the code out on Tiger?

&gt; WebKit/mac/WebView/WebFullscreenController.mm:210
&gt; +    if (_element) {
&gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; +        if (window) {
&gt; +            window-&gt;removeEventListener(eventNames.playEvent,  _mediaEventListener.get(), true);
&gt; +            window-&gt;removeEventListener(eventNames.pauseEvent, _mediaEventListener.get(), true);
&gt; +            window-&gt;removeEventListener(eventNames.endedEvent, _mediaEventListener.get(), true);
&gt; +        }
&gt; +    }
&gt; +        
&gt; +    _element = element;
&gt; +    
&gt; +    if (_element) {
&gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; +        if (window) {
&gt; +            window-&gt;addEventListener(eventNames.playEvent,  _mediaEventListener, true);
&gt; +            window-&gt;addEventListener(eventNames.pauseEvent, _mediaEventListener, true);
&gt; +            window-&gt;addEventListener(eventNames.endedEvent, _mediaEventListener, true);
&gt; +        }
&gt; +    }

Can you explain what you&apos;re doing here? Why are media events special? What if the content has registered event listeners on the old window?

&gt; WebKit/mac/WebView/WebFullscreenController.mm:274
&gt; +        [[[self webView] window] orderOut:self];

Is this hiding the browser window? Is that the right thing to do in all cases (including non-browser clients)?

&gt; WebKit/mac/WebView/WebFullscreenController.mm:312
&gt; +    [[self window] setFrame:[[[self window] screen] frame] display:YES];

Maybe cache [self window]

&gt; WebKit/mac/WebView/WebFullscreenController.mm:378
&gt; +    // Set up the final style of the FullScreen render block.  Set an absolute
&gt; +    // width and height equal to the size of the screen, and anchor the layer
&gt; +    // at the top, left at (0,0).  The RenderFullScreen style is already set 
&gt; +    // to position:fixed.
&gt; +    PassRefPtr&lt;RenderStyle&gt; newStyle = RenderStyle::clone(_renderer-&gt;style());
&gt; +    newStyle-&gt;setWidth(Length((int)screenFrame.size.width, WebCore::Fixed));
&gt; +    newStyle-&gt;setHeight(Length((int)screenFrame.size.height, WebCore::Fixed));
&gt; +    newStyle-&gt;setTop(Length(0, WebCore::Fixed));
&gt; +    newStyle-&gt;setLeft(Length(0, WebCore::Fixed));
&gt; +    _renderer-&gt;setStyle(newStyle);

It&apos;s weird to be running this code in WebKit. You should move it to WebCore somehow.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:389
&gt; +    // Cause the document to layout, thus calculating a new fullscreen element size:
&gt; +    [self _document]-&gt;updateLayout();
&gt; +    
&gt; +    RenderBox* childRenderer = _renderer-&gt;firstChildBox();
&gt; +    CGRect destinationFrame = CGRectMake(childRenderer-&gt;x(), childRenderer-&gt;y(), childRenderer-&gt;width(), childRenderer-&gt;height());
&gt; +    
&gt; +    // Some properties haven&apos;t propogated from the GraphicsLayer to the CALayer yet.  So
&gt; +    // tell the renderer&apos;s layer to sync it&apos;s compositing state:
&gt; +    GraphicsLayer* rendererGraphics = _renderer-&gt;layer()-&gt;backing()-&gt;graphicsLayer();
&gt; +    rendererGraphics-&gt;syncCompositingState();    

Maybe move this code too. Also don&apos;t assume that you have any GraphicsLayers; accelerated composting might be disabled.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:586
&gt; +    _tickleTimer = [[NSTimer scheduledTimerWithTimeInterval:tickleTimerInterval target:self selector:@selector(_tickleTimerFired) userInfo:nil repeats:YES] retain];

This creates a retain cycle between the timer and self.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:651
&gt; +- (BOOL)_isAnyMoviePlaying
&gt; +{
&gt; +    if (!_element)
&gt; +        return NO;
&gt; +    
&gt; +    Node* nextNode = _element.get();
&gt; +    while (nextNode)
&gt; +    {
&gt; +        if (nextNode-&gt;hasTagName(videoTag)) {
&gt; +            HTMLMediaElement* element = static_cast&lt;HTMLMediaElement*&gt;(nextNode);
&gt; +            if (!element-&gt;paused() &amp;&amp; !element-&gt;ended())
&gt; +                return YES;
&gt; +        }
&gt; +        
&gt; +        nextNode = nextNode-&gt;traverseNextNode(_element.get());
&gt; +    }
&gt; +    
&gt; +    return NO;
&gt; +}
&gt; +

What about movies in subframes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316323</commentid>
    <comment_count>31</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 12:14:40 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; In general I think this feature should still work if accelerated compositing is disabled.

Fullscreen for video elements currently is disabled if accelerated compositing is not available.  Why is this different?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316347</commentid>
    <comment_count>32</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 12:35:04 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 73794 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73794&amp;action=review
&gt; 
&gt; &gt; WebCore/dom/Document.cpp:4741
&gt; &gt; +    setNeedsStyleRecalc(SyntheticStyleChange);
&gt; &gt; +    documentElement()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; &gt; +    m_fullScreenElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; 
&gt; You don&apos;t need these if you&apos;re doing a recalcStyle(Force).

Gone.

&gt; &gt; WebCore/dom/Document.cpp:4746
&gt; &gt; +    frame()-&gt;view()-&gt;setShouldUpdateWhileOffscreen(TRUE);
&gt; 
&gt; true, not TRUE

Changed.

&gt; &gt; WebCore/dom/Document.cpp:4772
&gt; &gt; +    element-&gt;detach();
&gt; &gt;      // m_fullScreenElement has already been cleared; recalc the style of 
&gt; &gt;      // the passed in element instead.
&gt; &gt;      element-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt; &gt;      if (element != documentElement())
&gt; &gt;          documentElement()-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt; &gt; +    element-&gt;attach();
&gt; &gt; +
&gt; &gt;      updateStyleIfNeeded();
&gt; 
&gt; Why not just do a recalcStyle(Force) here too?

Sure.  I was just trying to do the least amount of updating necessary.  Changed.

&gt; &gt; WebCore/dom/Document.cpp:4778
&gt; &gt; +    // Save off the m_fullScreenRenderer to destroy only after the client has
&gt; &gt; +    // been notified that the renderer has changed:
&gt; &gt; +    RenderBox* renderer = m_fullScreenRenderer;
&gt; &gt; +    webkitSetFullScreenRenderer(0);
&gt; &gt; +    renderer-&gt;destroy();
&gt; 
&gt; Renderers are not refcounted, and are only normally created/destroyed in attach/detach or style changes. It worries me that you&apos;re destroying the renderer here.

Just trying to be stingy with memory.  I can not destroy the renderer.  Changed.

&gt; &gt; WebCore/dom/Document.cpp:4780
&gt; &gt; +    frame()-&gt;view()-&gt;setShouldUpdateWhileOffscreen(FALSE);
&gt; 
&gt; false, not FALSE
&gt; 
&gt; &gt; WebCore/dom/Document.cpp:4788
&gt; &gt; +void Document::webkitSetFullScreenRenderer(RenderBox* renderer)
&gt; &gt; +{
&gt; &gt; +    m_fullScreenRenderer = renderer;
&gt; &gt; +    page()-&gt;chrome()-&gt;client()-&gt;fullScreenRendererChanged(m_fullScreenRenderer);
&gt; &gt; +}
&gt; 
&gt; Where is the corresponding Document.h change?

Whoops, somehow the Document.h file escaped the diff.  I&apos;ll regenerate.

&gt; This method does not need the webkit prefix.

Changed.

&gt; &gt; WebCore/dom/Node.cpp:1338
&gt; &gt; +    if (document()-&gt;webkitFullScreen() &amp;&amp; document()-&gt;webkitCurrentFullScreenElement() == this) {
&gt; 
&gt; document()-&gt;webkitFullScreen() is a bad method name. It should be isFullscreen(). Only methods exposed via IDL need the webkit prefix.

That function is exposed via the IDL.  I agree, it&apos;s a bad name, and I&apos;d much rather it was isFullScreen() too.  Should we ignore the spec?

&gt; &gt; WebCore/dom/Node.cpp:1345
&gt; &gt; +        RenderFullScreen* fullscreenRenderer = new (document()-&gt;renderArena()) RenderFullScreen(document());
&gt; &gt; +        fullscreenRenderer-&gt;setStyle(RenderFullScreen::createFullScreenStyle());
&gt; &gt; +        parentRenderer-&gt;addChild(fullscreenRenderer, 0);
&gt; &gt; +        parentRenderer = fullscreenRenderer;
&gt; &gt; +        nextRenderer = 0;
&gt; &gt; +        document()-&gt;webkitSetFullScreenRenderer(fullscreenRenderer);
&gt; &gt; +    }
&gt; 
&gt; What prevents this renderer from being destroyed if JS runs in the document, and the parent&apos;s child renderers are re-computed?

Nothing.  But then the re-computation will create a new RenderFullScreen object, and in the above function will call document()-&gt;setFullScreenRenderer().  That will in turn notify all the clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316359</commentid>
    <comment_count>33</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-12-02 12:47:28 -0800</bug_when>
    <thetext>I have many objections to these patches.

(1) I don&apos;t understand why RenderFullScreen is needed.  What purpose is it serving?

(2) I dislike passing RenderObjects as arguments through the ChromeClient.  While this can be made to compile, it feels pretty ugly to me.  Renderers are really supposed to be internal to WebCore.  Why not just use the element instead of the renderer?

(3) I don&apos;t understand caching a renderer in Document for full-screen.  You already know the full-screen element. Why do you have to cache a renderer too?

(4) Why do we have a pseudo-class for full-screen?  I don&apos;t understand what purpose that serves.  Why do we have to have a fullscreen.css file?  Why not just teach img and video what to do in their RenderObjects?

This feels way more complicated than it needs to be to me, unless there&apos;s something I&apos;m missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316369</commentid>
    <comment_count>34</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 12:56:30 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; document()-&gt;webkitFullScreen() is a bad method name. It should be isFullscreen(). Only methods exposed via IDL need the webkit prefix.

We should work to get the spec changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316370</commentid>
    <comment_count>35</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-02 12:58:05 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #29)
&gt; &gt; In general I think this feature should still work if accelerated compositing is disabled.
&gt; 
&gt; Fullscreen for video elements currently is disabled if accelerated compositing is not available.  Why is this different?

Because this is generic fullscreen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316375</commentid>
    <comment_count>36</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 13:03:44 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 73797 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73797&amp;action=review
&gt; 
&gt; &gt; WebKit/mac/WebView/WebFullscreenController.h:2
&gt; &gt; + * Copyright (C) 2009 Apple Inc. All rights reserved.
&gt; 
&gt; 2010

Changed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.h:42
&gt; &gt; +    RefPtr&lt;WebCore::Element&gt; _element; // (retain)
&gt; &gt; +    WebCore::RenderBox* _renderer; // (set)
&gt; &gt; +    RefPtr&lt;WebCore::Element&gt; _replacementElement; // (retain)
&gt; 
&gt; No need for the //retain comments on C++ things; it&apos;s obvious.

Removed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:83
&gt; &gt; +using WebCore::AnimationList;
&gt; &gt; +using WebCore::Animation;
&gt; &gt; +using WebCore::DOMWindow;
&gt; &gt; +using WebCore::Document;
&gt; &gt; +using WebCore::Element;
&gt; &gt; +using WebCore::Event;
&gt; &gt; +using WebCore::EventListener;
&gt; &gt; +using WebCore::EventNames;
&gt; &gt; +using WebCore::FloatRect;
&gt; &gt; +using WebCore::FloatSize;
&gt; &gt; +using WebCore::GraphicsLayer;
&gt; &gt; +using WebCore::HTMLMediaElement;
&gt; &gt; +using WebCore::HTMLNames::videoTag;
&gt; &gt; +using WebCore::Length;
&gt; &gt; +using WebCore::LengthType;
&gt; &gt; +using WebCore::Node;
&gt; &gt; +using WebCore::NodeList;
&gt; &gt; +using WebCore::RenderBlock;
&gt; &gt; +using WebCore::RenderBox;
&gt; &gt; +using WebCore::RenderFullScreen;
&gt; &gt; +using WebCore::RenderLayer;
&gt; &gt; +using WebCore::RenderLayerBacking;
&gt; &gt; +using WebCore::RenderObject;
&gt; &gt; +using WebCore::RenderStyle;
&gt; &gt; +using WebCore::ScriptExecutionContext;
&gt; &gt; +
&gt; 
&gt; Why not just &quot;using namespace WebCore&quot;?

Just trying not to pull in more than I needed.  Changed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:144
&gt; &gt; +    [_tickleTimer invalidate];
&gt; &gt; +    [_tickleTimer release];
&gt; &gt; +    _tickleTimer = nil;
&gt; 
&gt; There&apos;s a retain cycle between the timer and self. You&apos;ll never hit dealloc with a non-nil timer.

It will always be a retain loop anyway, since as a repeating timer, it&apos;s retained by the run loop until someone calls invalidate on it.  And I was specifically instructed in the review of WebVideoFullscreenController to retain the _tickleTimer.  But you&apos;re right, this should probably be an ASSERT(!_tickleTimer).

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:156
&gt; &gt; +#ifdef BUILDING_ON_TIGER
&gt; &gt; +    // WebFullscreenController is not supported on Tiger:
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt; 
&gt; This is odd. Why not assert earlier, or #ifdef all the code out on Tiger?

We do assert earlier, in setElement:, and in windowDidLoad:.  Are you saying we shouldn&apos;t assert here, because we probably already asserted earlier?

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:210
&gt; &gt; +    if (_element) {
&gt; &gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; &gt; +        if (window) {
&gt; &gt; +            window-&gt;removeEventListener(eventNames.playEvent,  _mediaEventListener.get(), true);
&gt; &gt; +            window-&gt;removeEventListener(eventNames.pauseEvent, _mediaEventListener.get(), true);
&gt; &gt; +            window-&gt;removeEventListener(eventNames.endedEvent, _mediaEventListener.get(), true);
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +        
&gt; &gt; +    _element = element;
&gt; &gt; +    
&gt; &gt; +    if (_element) {
&gt; &gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; &gt; +        if (window) {
&gt; &gt; +            window-&gt;addEventListener(eventNames.playEvent,  _mediaEventListener, true);
&gt; &gt; +            window-&gt;addEventListener(eventNames.pauseEvent, _mediaEventListener, true);
&gt; &gt; +            window-&gt;addEventListener(eventNames.endedEvent, _mediaEventListener, true);
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Can you explain what you&apos;re doing here? Why are media events special? What if the content has registered event listeners on the old window?

We&apos;re listening for play/pause events so that we can disable the screensaver.  This is to keep feature parity with the old video fullscreen mode.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:274
&gt; &gt; +        [[[self webView] window] orderOut:self];
&gt; 
&gt; Is this hiding the browser window? Is that the right thing to do in all cases (including non-browser clients)?

We probably don&apos;t really want the user to be able to interact with the non-fullscreen part of the window (in the multi-monitor straddling corner case).  I guess we could cancel fullscreen mode if the original window became active instead.  But I&apos;ll remove this for now.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:312
&gt; &gt; +    [[self window] setFrame:[[[self window] screen] frame] display:YES];
&gt; 
&gt; Maybe cache [self window]

Sure.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:378
&gt; &gt; +    // Set up the final style of the FullScreen render block.  Set an absolute
&gt; &gt; +    // width and height equal to the size of the screen, and anchor the layer
&gt; &gt; +    // at the top, left at (0,0).  The RenderFullScreen style is already set 
&gt; &gt; +    // to position:fixed.
&gt; &gt; +    PassRefPtr&lt;RenderStyle&gt; newStyle = RenderStyle::clone(_renderer-&gt;style());
&gt; &gt; +    newStyle-&gt;setWidth(Length((int)screenFrame.size.width, WebCore::Fixed));
&gt; &gt; +    newStyle-&gt;setHeight(Length((int)screenFrame.size.height, WebCore::Fixed));
&gt; &gt; +    newStyle-&gt;setTop(Length(0, WebCore::Fixed));
&gt; &gt; +    newStyle-&gt;setLeft(Length(0, WebCore::Fixed));
&gt; &gt; +    _renderer-&gt;setStyle(newStyle);
&gt; 
&gt; It&apos;s weird to be running this code in WebKit. You should move it to WebCore somehow.

I&apos;m going to have to pass in a width and a height somehow.  I don&apos;t see a way to do that which would be less weird.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:389
&gt; &gt; +    // Cause the document to layout, thus calculating a new fullscreen element size:
&gt; &gt; +    [self _document]-&gt;updateLayout();
&gt; &gt; +    
&gt; &gt; +    RenderBox* childRenderer = _renderer-&gt;firstChildBox();
&gt; &gt; +    CGRect destinationFrame = CGRectMake(childRenderer-&gt;x(), childRenderer-&gt;y(), childRenderer-&gt;width(), childRenderer-&gt;height());
&gt; &gt; +    
&gt; &gt; +    // Some properties haven&apos;t propogated from the GraphicsLayer to the CALayer yet.  So
&gt; &gt; +    // tell the renderer&apos;s layer to sync it&apos;s compositing state:
&gt; &gt; +    GraphicsLayer* rendererGraphics = _renderer-&gt;layer()-&gt;backing()-&gt;graphicsLayer();
&gt; &gt; +    rendererGraphics-&gt;syncCompositingState();    
&gt; 
&gt; Maybe move this code too. Also don&apos;t assume that you have any GraphicsLayers; accelerated composting might be disabled.

Fullscreen should be disabled if accelerated compositing is not available.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:586
&gt; &gt; +    _tickleTimer = [[NSTimer scheduledTimerWithTimeInterval:tickleTimerInterval target:self selector:@selector(_tickleTimerFired) userInfo:nil repeats:YES] retain];
&gt; 
&gt; This creates a retain cycle between the timer and self.

See above.  Because self is the only thing capable of canceling the timer, it&apos;s a retain cycle regardless.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:651
&gt; &gt; +- (BOOL)_isAnyMoviePlaying
&gt; &gt; +{
&gt; &gt; +    if (!_element)
&gt; &gt; +        return NO;
&gt; &gt; +    
&gt; &gt; +    Node* nextNode = _element.get();
&gt; &gt; +    while (nextNode)
&gt; &gt; +    {
&gt; &gt; +        if (nextNode-&gt;hasTagName(videoTag)) {
&gt; &gt; +            HTMLMediaElement* element = static_cast&lt;HTMLMediaElement*&gt;(nextNode);
&gt; &gt; +            if (!element-&gt;paused() &amp;&amp; !element-&gt;ended())
&gt; &gt; +                return YES;
&gt; &gt; +        }
&gt; &gt; +        
&gt; &gt; +        nextNode = nextNode-&gt;traverseNextNode(_element.get());
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    return NO;
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; What about movies in subframes?

They won&apos;t count for the purposes of disabling the screensaver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316382</commentid>
    <comment_count>37</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 13:12:44 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; I have many objections to these patches.
&gt; 
&gt; (1) I don&apos;t understand why RenderFullScreen is needed.  What purpose is it serving?

It&apos;s there to guarantee a CALayer is created (for the purpose of the enter- and exit-fullscreen animations.)

&gt; (2) I dislike passing RenderObjects as arguments through the ChromeClient.  While this can be made to compile, it feels pretty ugly to me.  Renderers are really supposed to be internal to WebCore.  Why not just use the element instead of the renderer?

Because, for the animation to work, I need access to the CALayer backing the RenderLayer.  

&gt; (3) I don&apos;t understand caching a renderer in Document for full-screen.  You already know the full-screen element. Why do you have to cache a renderer too?

I guess that could be replaced by asking the fullscreen element&apos;s renderer for it&apos;s parent renderer.

&gt; (4) Why do we have a pseudo-class for full-screen?  I don&apos;t understand what purpose that serves.  Why do we have to have a fullscreen.css file?  Why not just teach img and video what to do in their RenderObjects?

Because (1) it&apos;s part of the spec, and (2) authors may want different styling for their objects once they enter full screen mode.

&gt; This feels way more complicated than it needs to be to me, unless there&apos;s something I&apos;m missing.

The objective I was given was to create an arbitrary element fullscreen experience which was indistinguishable in performance and look-and-feel from the existing video element fullscreen support.  The complexity in the patch reflects how difficult that is to achieve.  This proposed technique came out of discussions between myself, Maciej, Daren, and Dan.  I&apos;m open to alternative proposals for different techniques.  In that case, this will be the third fullscreen implementation that I&apos;ve written then thrown away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316388</commentid>
    <comment_count>38</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 13:20:27 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #29)
&gt; &gt; &gt; In general I think this feature should still work if accelerated compositing is disabled.
&gt; &gt; 
&gt; &gt; Fullscreen for video elements currently is disabled if accelerated compositing is not available.  Why is this different?
&gt; 
&gt; Because this is generic fullscreen.

The primary use case for this work is to take video elements fullscreen (with custom controls).  I don&apos;t really see the difference.  If accelerated compositing isn&apos;t available, the performance of drawing 30 fps video across a fullscreen window in software-only mode is going to be atrocious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316403</commentid>
    <comment_count>39</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 13:43:28 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 73796 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73796&amp;action=review
&gt; 
&gt; &gt; WebCore/css/fullscreen.css:2
&gt; &gt;  :-webkit-full-screen {
&gt; &gt; -    position:fixed;
&gt; &gt; -    top:0;
&gt; &gt; -    left:0;
&gt; &gt; -    right:0;
&gt; &gt; -    bottom:0;
&gt; &gt; +    background-color: white;
&gt; 
&gt; Why do we no longer use position:fixed etc?

Because the parent renderer of the fullscreen element is now a flex box.  

&gt; &gt; WebCore/dom/Element.h:164
&gt; &gt; +    IntRect screenRect();
&gt; 
&gt; Should be const. Needs as comment saying what it really means, or a better name, like boundingBoxInScreenCoordinates().

This method was simply moved up the hierarchy chain from HTMLMediaElement.  Changing it&apos;s name would require unrelated changes elsewhere in the project.  I suggest a separate bug for that.  Making it const should be no problem though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316425</commentid>
    <comment_count>40</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-02 14:43:47 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; &gt; 
&gt; &gt; It&apos;s weird to be running this code in WebKit. You should move it to WebCore somehow.
&gt; 
&gt; I&apos;m going to have to pass in a width and a height somehow.  I don&apos;t see a way to do that which would be less weird.

Actually, I might be able to add a &quot;setFullscreenRendererSize(int, int)&quot; function which does the equivalent, but pushes the implementation back down into webkit.  Let me look into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317082</commentid>
    <comment_count>41</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 15:09:58 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Hi. I&apos;ll be implementing full screen support in Chromium, so I was reading through these patches.
&gt; 
&gt; &gt; WebCore/dom/Document.cpp:4764
&gt; &gt; +    element-&gt;detach();
&gt; &gt;      // m_fullScreenElement has already been cleared; recalc the style of 
&gt; &gt;      // the passed in element instead.
&gt; &gt;      element-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt; &gt;      if (element != documentElement())
&gt; &gt;          documentElement()-&gt;setNeedsStyleRecalc(FullStyleChange);
&gt; &gt; +    element-&gt;attach();
&gt; It&apos;s not clear to me why the element needs to be detached then attached. An explanation might be helpful.
&gt; 
&gt; Looking at Node::setNeedsStyleRecalc(), it appears that the detach() call might result in the element-&gt;setNeedsStyleRecalc(FullStyleChange) call having no effect. Maybe I&apos;m missing something.

I looked into this, and it appears you&apos;re right.   However, the renderer gets created anyway during updateStyleIfNeeded(), despite that setNeedsStyleRecalc() has had no effect.  Regardless, I&apos;ve swapped the order of the detach() and the setNeedsStyleRecalc().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317085</commentid>
    <comment_count>42</comment_count>
      <attachid>75552</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 15:13:21 -0800</bug_when>
    <thetext>Created attachment 75552
WebCore-DOM

Addressed Simon&apos;s and David&apos;s reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317093</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-03 15:18:12 -0800</bug_when>
    <thetext>Attachment 75552 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/dom/Document.cpp&apos;, u&apos;WebCore/dom/Document.h&apos;, u&apos;WebCore/dom/Node.cpp&apos;, u&apos;WebCore/page/ChromeClient.h&apos;]&quot; exit_code: 1
WebCore/dom/Document.cpp:4884:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317099</commentid>
    <comment_count>44</comment_count>
      <attachid>75552</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-03 15:22:34 -0800</bug_when>
    <thetext>Comment on attachment 75552
WebCore-DOM

Isn&apos;t this patch incomplete? Where are the idl changes for webkitIsFullScreen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317107</commentid>
    <comment_count>45</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 15:29:38 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 75552 [details])
&gt; Isn&apos;t this patch incomplete? Where are the idl changes for webkitIsFullScreen?

You&apos;re right, I&apos;ll recreate it and repost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317109</commentid>
    <comment_count>46</comment_count>
      <attachid>75558</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 15:30:13 -0800</bug_when>
    <thetext>Created attachment 75558
WebCore-DOM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317110</commentid>
    <comment_count>47</comment_count>
      <attachid>75559</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 15:31:25 -0800</bug_when>
    <thetext>Created attachment 75559
WebCore-DOM

Whoops, that last patch was missing Document.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317115</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-03 15:39:28 -0800</bug_when>
    <thetext>Attachment 75559 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/dom/Document.cpp&apos;, u&apos;WebCore/dom/Document.h&apos;, u&apos;WebCore/dom/Document.idl&apos;, u&apos;WebCore/dom/Node.cpp&apos;, u&apos;WebCore/page/ChromeClient.h&apos;]&quot; exit_code: 1
WebCore/dom/Document.cpp:4884:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317125</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-03 15:46:56 -0800</bug_when>
    <thetext>Attachment 75552 did not build on chromium:
Build output: http://queues.webkit.org/results/6775046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317127</commentid>
    <comment_count>50</comment_count>
      <attachid>75564</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 15:48:43 -0800</bug_when>
    <thetext>Created attachment 75564
WebCore-DOM

Addressed the StyleBot and Simon&apos;s PassRefPtr review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317158</commentid>
    <comment_count>51</comment_count>
      <attachid>75574</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-03 16:13:07 -0800</bug_when>
    <thetext>Created attachment 75574
WebKit-WebFullScreenController

Addressed Simon&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317163</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-03 16:17:06 -0800</bug_when>
    <thetext>Attachment 75574 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit/ChangeLog&apos;, u&apos;WebKit/WebKit.xcodeproj/project.pbxproj&apos;, u&apos;WebKit/mac/ChangeLog&apos;, u&apos;WebKit/mac/WebView/WebFullscreenController.h&apos;, u&apos;WebKit/mac/WebView/WebFullscreenController.mm&apos;]&quot; exit_code: 1
WebKit/mac/WebView/WebFullscreenController.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/mac/WebView/WebFullscreenController.h:40:  _element is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:41:  _renderer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:42:  _replacementElement is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:46:  _rendererLayer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:47:  _backgroundLayer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:48:  _mediaEventListener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:50:  _isAnimating is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:51:  _isFullscreen is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:52:  _isWindowLoaded is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:53:  _forceDisableAnimation is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:54:  _isPlaying is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:55:  _idleDisplaySleepAssertion is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:56:  _idleSystemSleepAssertion is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:58:  _savedUIMode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:59:  _savedUIOptions is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:60:  _initialFrame is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 17 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317171</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-03 16:25:53 -0800</bug_when>
    <thetext>Attachment 75564 did not build on chromium:
Build output: http://queues.webkit.org/results/6748042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317172</commentid>
    <comment_count>54</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-03 16:29:30 -0800</bug_when>
    <thetext>Attachment 75564 did not build on qt:
Build output: http://queues.webkit.org/results/6778033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317203</commentid>
    <comment_count>55</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-03 18:25:24 -0800</bug_when>
    <thetext>Attachment 75564 did not build on win:
Build output: http://queues.webkit.org/results/6763033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317237</commentid>
    <comment_count>56</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-03 22:10:29 -0800</bug_when>
    <thetext>Attachment 75564 did not build on mac:
Build output: http://queues.webkit.org/results/6753044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317248</commentid>
    <comment_count>57</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-04 00:55:22 -0800</bug_when>
    <thetext>Attachment 75574 did not build on mac:
Build output: http://queues.webkit.org/results/6780032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317349</commentid>
    <comment_count>58</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-04 23:26:31 -0800</bug_when>
    <thetext>Attachment 75564 did not build on chromium:
Build output: http://queues.webkit.org/results/6744044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317744</commentid>
    <comment_count>59</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-06 11:29:51 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 73795 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73795&amp;action=review
&gt; 
&gt; There&apos;s too much special magic here, and it&apos;s not clear to me how much is just for the fullscreen animation.

It&apos;s all necessary for the fullscreen animation.  Without the changes in the patch, the fullscreen layer will not update during the animation.

&gt; I don&apos;t think the fullscreen layers should be disconnected at all, so they shoudn&apos;t need updating separately.

Given the requirements of the feature, what do you suggest be done instead?

&gt; Is this only true during animation to fullscreen, or when in fullscreen? Why isn&apos;t the viewport fullscreen when in fullscreen?

For now, this is true during the animation AND the entire time the layer is in fullscreen.  This patch does not address reparenting the WebView into the fullscreen window.  That will be addressed in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317751</commentid>
    <comment_count>60</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-06 11:43:07 -0800</bug_when>
    <thetext>I understand that the animation is important, but I&apos;d much rather get the basics of the feature working first, and then focus on the animation second.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317759</commentid>
    <comment_count>61</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-06 11:53:10 -0800</bug_when>
    <thetext>(In reply to comment #60)
&gt; I understand that the animation is important, but I&apos;d much rather get the basics of the feature working first, and then focus on the animation second.

Once this patch goes in, I can start working on the rest of the feature.  Do you have any suggestions for the patch at hand?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319566</commentid>
    <comment_count>62</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-12-09 10:35:56 -0800</bug_when>
    <thetext>CCiny myself as I&apos;d be interested to work on support for this on GTK too. Some initial support already landed in r73624</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325078</commentid>
    <comment_count>63</comment_count>
      <attachid>77133</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:13:31 -0800</bug_when>
    <thetext>Created attachment 77133
NewFullScreen-Part-1-RenderFullScreen</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325079</commentid>
    <comment_count>64</comment_count>
      <attachid>77134</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:14:26 -0800</bug_when>
    <thetext>Created attachment 77134
NewFullScreen-Part-2-The-Document</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325081</commentid>
    <comment_count>65</comment_count>
      <attachid>77135</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:15:02 -0800</bug_when>
    <thetext>Created attachment 77135
NewFullScreen-Part-3-Renderering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325084</commentid>
    <comment_count>66</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 11:16:06 -0800</bug_when>
    <thetext>Attachment 77133 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;WebCore/css/fullscreen.css&apos;, u&apos;WebCore/rendering/RenderFullScreen.cpp&apos;, u&apos;WebCore/rendering/RenderFullScreen.h&apos;, u&apos;WebCore/rendering/RenderObject.h&apos;]&quot; exit_code: 1
WebCore/rendering/RenderFullScreen.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
WebCore/rendering/RenderFullScreen.cpp:41:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325085</commentid>
    <comment_count>67</comment_count>
      <attachid>77136</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:16:28 -0800</bug_when>
    <thetext>Created attachment 77136
NewFullScreen-Part-4-Element-screenRect.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325086</commentid>
    <comment_count>68</comment_count>
      <attachid>77137</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:17:06 -0800</bug_when>
    <thetext>Created attachment 77137
NewFullScreen-Part-5-WebFullscreenController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325089</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 11:20:06 -0800</bug_when>
    <thetext>Attachment 77137 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/WebCore.exp.in&apos;, u&apos;WebKit/mac/ChangeLog&apos;, u&apos;WebKit/mac/WebView/WebFullscreenController.h&apos;, u&apos;WebKit/mac/WebView/WebFullscreenController.mm&apos;]&quot; exit_code: 1
WebKit/mac/WebView/WebFullscreenController.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/mac/WebView/WebFullscreenController.h:40:  _element is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:41:  _renderer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:42:  _replacementElement is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:46:  _placeholderView is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:47:  _rendererLayer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:48:  _backgroundLayer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:49:  _mediaEventListener is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:51:  _isAnimating is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:52:  _isFullscreen is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:53:  _isWindowLoaded is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:54:  _forceDisableAnimation is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:55:  _isPlaying is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:56:  _idleDisplaySleepAssertion is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:57:  _idleSystemSleepAssertion is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:59:  _savedUIMode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:60:  _savedUIOptions is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/WebView/WebFullscreenController.h:61:  _initialFrame is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 18 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325093</commentid>
    <comment_count>70</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 11:24:03 -0800</bug_when>
    <thetext>Clearly check-webkit-style doesn&apos;t understand that your file contains AppKit-style objective-C.  Maybe check-webkit-style doesn&apos;t understand objective-c?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325098</commentid>
    <comment_count>71</comment_count>
      <attachid>77139</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:26:09 -0800</bug_when>
    <thetext>Created attachment 77139
NewFullScreen-Part-1-RenderFullScreen

Addressed the PassRefPtr -&gt; RefPtr issue pointed out by the style-bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325102</commentid>
    <comment_count>72</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 11:29:24 -0800</bug_when>
    <thetext>I&apos;ve re-organized and regenerated the patchset for this feature.  Now each individual subpatch includes a ChangeLog.  (Yay, git!)

Also, this patchset addresses Simon&apos;s desire to see mouse-events, keyboard-events, keyboard-security and view reparenting work.  This patchset allows fullscreen to occur in environments where accelerated compositing is not available; in that case, there will be no animation between windowed and full screen states.  This patchset also makes explicit that the special cases in rendering only occur while the RenderFullScreen renderer is animating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325112</commentid>
    <comment_count>73</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 11:44:38 -0800</bug_when>
    <thetext>Attachment 77135 did not build on chromium:
Build output: http://queues.webkit.org/results/7333035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325122</commentid>
    <comment_count>74</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-21 11:53:55 -0800</bug_when>
    <thetext>Attachment 77135 did not build on qt:
Build output: http://queues.webkit.org/results/7217092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325125</commentid>
    <comment_count>75</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-21 11:58:44 -0800</bug_when>
    <thetext>Attachment 77135 did not build on win:
Build output: http://queues.webkit.org/results/7212093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325135</commentid>
    <comment_count>76</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 12:13:06 -0800</bug_when>
    <thetext>Attachment 77135 did not build on gtk:
Build output: http://queues.webkit.org/results/7214105</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325143</commentid>
    <comment_count>77</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 12:33:11 -0800</bug_when>
    <thetext>Attachment 77133 did not build on mac:
Build output: http://queues.webkit.org/results/7202099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325144</commentid>
    <comment_count>78</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 12:33:29 -0800</bug_when>
    <thetext>Attachment 77135 did not build on chromium:
Build output: http://queues.webkit.org/results/7248087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325152</commentid>
    <comment_count>79</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 12:50:24 -0800</bug_when>
    <thetext>Attachment 77135 did not build on mac:
Build output: http://queues.webkit.org/results/7279102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325156</commentid>
    <comment_count>80</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 12:54:53 -0800</bug_when>
    <thetext>Attachment 77137 did not build on mac:
Build output: http://queues.webkit.org/results/7306085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325159</commentid>
    <comment_count>81</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-21 13:02:38 -0800</bug_when>
    <thetext>(In reply to comment #70)
&gt; Clearly check-webkit-style doesn&apos;t understand that your file contains AppKit-style objective-C.  Maybe check-webkit-style doesn&apos;t understand objective-c?

Noted and added to my work queue. (fwiw, this bug would likely benefit from dependent bugs but I&apos;m removing myself due to all the broken build message :).)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325160</commentid>
    <comment_count>82</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 13:03:53 -0800</bug_when>
    <thetext>(In reply to comment #81)
&gt; (In reply to comment #70)
&gt; &gt; Clearly check-webkit-style doesn&apos;t understand that your file contains AppKit-style objective-C.  Maybe check-webkit-style doesn&apos;t understand objective-c?
&gt; 
&gt; Noted and added to my work queue. (fwiw, this bug would likely benefit from dependent bugs but I&apos;m removing myself due to all the broken build message :).)

That&apos;s a good idea.  I&apos;ll break future patch sets like this into separate, dependent bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325173</commentid>
    <comment_count>83</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 13:32:52 -0800</bug_when>
    <thetext>Attachment 77136 did not build on mac:
Build output: http://queues.webkit.org/results/7299091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325177</commentid>
    <comment_count>84</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-21 13:40:39 -0800</bug_when>
    <thetext>Attachment 77139 did not build on mac:
Build output: http://queues.webkit.org/results/7250088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325181</commentid>
    <comment_count>85</comment_count>
      <attachid>77136</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-21 13:48:06 -0800</bug_when>
    <thetext>Comment on attachment 77136
NewFullScreen-Part-4-Element-screenRect.patch

r=me if you fix the exports error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325186</commentid>
    <comment_count>86</comment_count>
      <attachid>77139</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-21 13:58:36 -0800</bug_when>
    <thetext>Comment on attachment 77139
NewFullScreen-Part-1-RenderFullScreen

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

&gt; WebCore/rendering/RenderFullScreen.cpp:39
&gt; +PassRefPtr&lt;RenderStyle&gt; RenderFullScreen::createFullScreenStyle()

Does the -webkit-full-screen pseudoclass get applied to the RenderFullScreen, or its child that is the element for which fullscreen was requested?

In general, we prefer to put styles into the UA stylesheet, rather than hardcoding them as is done here.

&gt; WebCore/rendering/RenderFullScreen.h:37
&gt; +    virtual bool isFullScreen() const { return true; }

I think this would be better as isRenderFullScreen(), otherwise it can be misinterpreted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325207</commentid>
    <comment_count>87</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 14:41:14 -0800</bug_when>
    <thetext>(In reply to comment #85)
&gt; (From update of attachment 77136 [details])
&gt; r=me if you fix the exports error.

Now that I&apos;m groking git, that should be an easy fix to this patch.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325209</commentid>
    <comment_count>88</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-12-21 14:42:31 -0800</bug_when>
    <thetext>(In reply to comment #86)
&gt; (From update of attachment 77139 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77139&amp;action=review
&gt; 
&gt; &gt; WebCore/rendering/RenderFullScreen.cpp:39
&gt; &gt; +PassRefPtr&lt;RenderStyle&gt; RenderFullScreen::createFullScreenStyle()
&gt; 
&gt; Does the -webkit-full-screen pseudoclass get applied to the RenderFullScreen, or its child that is the element for which fullscreen was requested?

To the element.

&gt; In general, we prefer to put styles into the UA stylesheet, rather than hardcoding them as is done here.

How would the styles get applied to a renderer with no matching element?

&gt; &gt; WebCore/rendering/RenderFullScreen.h:37
&gt; &gt; +    virtual bool isFullScreen() const { return true; }
&gt; 
&gt; I think this would be better as isRenderFullScreen(), otherwise it can be misinterpreted.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325409</commentid>
    <comment_count>89</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 00:26:18 -0800</bug_when>
    <thetext>(In reply to comment #70)
&gt; Clearly check-webkit-style doesn&apos;t understand that your file contains AppKit-style objective-C.  Maybe check-webkit-style doesn&apos;t understand objective-c?

fyi, https://bugs.webkit.org/show_bug.cgi?id=51452</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328837</commentid>
    <comment_count>90</comment_count>
      <attachid>77135</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-03 16:41:28 -0800</bug_when>
    <thetext>Comment on attachment 77135
NewFullScreen-Part-3-Renderering

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

I&apos;d like to see one more rev of this patch.

&gt; WebCore/ChangeLog:16
&gt; +        The RenderFullScreen is intended to be used by clients of that API to allow a DOM subtree to
&gt; +        be rendered outside its original Frame. Because of this, there are a few areas of the
&gt; +        rendering code which need to be special cased: RenderFullScreen layers should not be clipped
&gt; +        to the viewport, as they will almost always be rendering outside the viewport area;
&gt; +        RenderFullScreen graphics layers should not be reparented by the RenderLayerCompositor, as
&gt; +        the client will likely want to reparent the platformLayer into their own fullscreen platform
&gt; +        window; the FrameView must update the RenderFullScreen graphics layer tree separately from
&gt; +        the root layer, as the two trees are disconnected.

Rendering outside the viewport is only true now when animating, correct? If so, the changelog should be updated to say this.

&gt; WebCore/page/FrameView.cpp:542
&gt; +    if (document-&gt;webkitIsFullScreen() &amp;&amp; document-&gt;webkitFullScreenRenderer() &amp;&amp; document-&gt;webkitFullScreenRenderer()-&gt;isAnimating())

Maybe you could add a Document::isRunningFullscreenAnimation() method that encapsulates those tests.

&gt; WebCore/page/FrameView.cpp:646
&gt; +        if (GraphicsLayer* fullScreenLayer = toRenderBox(fullScreenRenderer)-&gt;layer()-&gt;backing()-&gt;graphicsLayer())

I think you should null-check layer()-&gt;backing().

&gt; WebCore/page/FrameView.cpp:2153
&gt; +            if (GraphicsLayer* fullScreenLayer = toRenderBox(fullScreenRenderer)-&gt;layer()-&gt;backing()-&gt;graphicsLayer())

Ditto.

&gt; WebCore/rendering/RenderLayerBacking.cpp:63
&gt; +#if ENABLE(FULLSCREEN_API)
&gt; +#include &quot;RenderFullScreen.h&quot;
&gt; +#endif
&gt; +

Not sure why this include is necessary.

&gt; WebCore/rendering/RenderLayerBacking.cpp:185
&gt; +        &amp;&amp; !layerOrAncestorIsFullScreen(m_owningLayer)

It&apos;s unfortunate that the common case of layerOrAncestorIsFullScreen() walks the whole tree. Maybe test whether the document has a fullscreen renderer first?

&gt; WebCore/rendering/RenderLayerCompositor.cpp:819
&gt; +#if ENABLE(FULLSCREEN_API)
&gt; +        // For the sake of clients of the full screen renderer, don&apos;t reparent
&gt; +        // the full screen layer out from under them if they&apos;re in the middle of
&gt; +        // animating.
&gt; +        if (layer-&gt;renderer()-&gt;isFullScreen() &amp;&amp; toRenderFullScreen(layer-&gt;renderer())-&gt;isAnimating())
&gt; +            return;
&gt; +#endif

What happens to ensure that layers are correctly updated once the animation is complete? Do we just rely on the style change? Is there a way we can make this special-casing unnecessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328843</commentid>
    <comment_count>91</comment_count>
      <attachid>77137</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-03 17:07:45 -0800</bug_when>
    <thetext>Comment on attachment 77137
NewFullScreen-Part-5-WebFullscreenController

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

&gt; WebKit/mac/ChangeLog:44
&gt; +        * WebView/WebFullscreenController.h: Added.
&gt; +        * WebView/WebFullscreenController.mm: Added.
&gt; +        (-[WebFullscreenController windowDidExitFullscreen:]):  Close the fullscreen window.
&gt; +        (-[WebFullscreenController windowDidEnterFullscreen:]): Swap the webView back into the fullscreen window. 
&gt; +        (-[WebFullscreenController animationDidStop:finished:]): Call windowDid{Exit|Enter}FullScreen as appropriate.
&gt; +        (-[WebFullscreenController applicationDidResignActive:]):
&gt; +        (-[WebFullscreenController applicationDidChangeScreenParameters:]): Resize the fullscreen window to match
&gt; +            the new screen parameters.
&gt; +        (-[WebFullscreenController enterFullscreen:]):  Set up the animation that will take the fullscreen element
&gt; +            from its original screen rect into fullscreen.
&gt; +        (-[WebFullscreenController exitFullscreen]): Swap the webView back into its original window.
&gt; +            Set up the animation that will take the fullscreen element back into its original screen
&gt; +            rect.
&gt; +        (-[WebFullscreenController _updatePowerAssertions]): Now checks _isAnyMoviePlaying to determine 
&gt; +            whether to disable screensaver and sleep.
&gt; +        (-[WebFullscreenController _isAnyMoviePlaying]): Walks through the sub-tree starting at the fullscreen element
&gt; +            looking for HTMLVideoElements; returns whether any are found to be playing.
&gt; +        (-[WebFullscreenController _animationDuration]): Returns the current animation duration, affected by control
&gt; +            and shift keys.
&gt; +        (-[WebFullscreenWindow canBecomeKeyWindow]): Allow the window to become key.
&gt; +        (-[WebFullscreenWindow keyDown:]): Handle the &apos;Esc&apos; key.
&gt; +        (-[WebFullscreenWindow cancelOperation:]): Request to exit fullscreen.
&gt; +        (-[WebFullscreenWindow rendererLayer]): Convenience accessor.
&gt; +        (-[WebFullscreenWindow setRendererLayer:]): Ditto.
&gt; +        (-[WebFullscreenWindow backgroundLayer]): Ditto.
&gt; +        (-[WebFullscreenWindow animationView]): Ditto.
&gt; +        (MediaEventListener::MediaEventListener): Implements the EventListener protocol.
&gt; +        (MediaEventListener::handleEvent): Tells its delegate to _updatePowerAssertions.

You should use FullScreen, not Fullscreen, consistently, for the classes, methods and filenames.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:33
&gt; +#import &lt;IOKit/pwr_mgt/IOPMLib.h&gt;

Why not IOKit/IOKit.h?

&gt; WebKit/mac/WebView/WebFullscreenController.mm:57
&gt; +static const NSString* isFullscreenKey = @&quot;isFullscreen&quot;;

Should be NSString * const IsFullScreenKey, or, given its usage, IsEnteringFullScreenKey

&gt; WebKit/mac/WebView/WebFullscreenController.mm:88
&gt; +@interface WebFullscreenController()

We usually name such a category Private

&gt; WebKit/mac/WebView/WebFullscreenController.mm:105
&gt; +#pragma mark -
&gt; +#pragma mark Initialization

We don&apos;t use #pragma mark

&gt; WebKit/mac/WebView/WebFullscreenController.mm:189
&gt; +    if (_element) {
&gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; +        if (window) {
&gt; +            window-&gt;removeEventListener(eventNames.playEvent,  _mediaEventListener.get(), true);
&gt; +            window-&gt;removeEventListener(eventNames.pauseEvent, _mediaEventListener.get(), true);
&gt; +            window-&gt;removeEventListener(eventNames.endedEvent, _mediaEventListener.get(), true);
&gt; +        }
&gt; +    }
&gt; +        
&gt; +    _element = element;
&gt; +    
&gt; +    if (_element) {
&gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; +        if (window) {
&gt; +            window-&gt;addEventListener(eventNames.playEvent,  _mediaEventListener, true);
&gt; +            window-&gt;addEventListener(eventNames.pauseEvent, _mediaEventListener, true);
&gt; +            window-&gt;addEventListener(eventNames.endedEvent, _mediaEventListener, true);
&gt; +        }
&gt; +    }

Please add some comments about why you need to register this event handler.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:271
&gt; +        WebFullscreenWindow* window = [self _fullscreenWindow];

The * go on the right for Obj-C objects, so WebFullscreenWindow *window =

&gt; WebKit/mac/WebView/WebFullscreenController.mm:287
&gt; +    BOOL isFullscreenAnimation = [[anim valueForKey:isFullscreenKey] boolValue];

Variable name is ambiguous. Should be isEnteringFullscreenAnimation

&gt; WebKit/mac/WebView/WebFullscreenController.mm:407
&gt; +    CGRect destinationFrame = CGRectMake(childRenderer-&gt;x(), childRenderer-&gt;y(), childRenderer-&gt;width(), childRenderer-&gt;height());    

childRenderer-&gt;x(), childRenderer-&gt;y() are not the correct way to find out where an element is. X and Y can be relative to some enclosing element (e.g. something with a transform). Maybe use getBoundingClientRect?

&gt; WebKit/mac/WebView/WebFullscreenController.mm:498
&gt; +    // webView was moved to the fullscreen window.  Check too see

One space after periods please. Typo at &quot;too see&quot;.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:502
&gt; +    if (_placeholderView &amp;&amp; [_placeholderView window])
&gt; +    {

Brace should be on previous line.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:663
&gt; +#if !defined(BUILDING_ON_TIGER) // IOPMAssertionCreateWithName not defined on &lt; 10.5
&gt; +- (void)_disableIdleDisplaySleep
&gt; +{
&gt; +    if (_idleDisplaySleepAssertion == kIOPMNullAssertionID) 
&gt; +#if defined(BUILDING_ON_LEOPARD) // IOPMAssertionCreateWithName is not defined in the 10.5 SDK
&gt; +        IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, &amp;_idleDisplaySleepAssertion);
&gt; +#else // IOPMAssertionCreate is depreciated in &gt; 10.5
&gt; +        IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, CFSTR(&quot;WebKit playing a video fullscreen.&quot;), &amp;_idleDisplaySleepAssertion);
&gt; +#endif
&gt; +}
&gt; +
&gt; +- (void)_enableIdleDisplaySleep
&gt; +{
&gt; +    if (_idleDisplaySleepAssertion != kIOPMNullAssertionID) {
&gt; +        IOPMAssertionRelease(_idleDisplaySleepAssertion);
&gt; +        _idleDisplaySleepAssertion = kIOPMNullAssertionID;
&gt; +    }
&gt; +}
&gt; +
&gt; +- (void)_disableIdleSystemSleep
&gt; +{
&gt; +    if (_idleSystemSleepAssertion == kIOPMNullAssertionID) 
&gt; +#if defined(BUILDING_ON_LEOPARD) // IOPMAssertionCreateWithName is not defined in the 10.5 SDK
&gt; +        IOPMAssertionCreate(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &amp;_idleSystemSleepAssertion);
&gt; +#else // IOPMAssertionCreate is depreciated in &gt; 10.5
&gt; +    IOPMAssertionCreateWithName(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, CFSTR(&quot;WebKit playing a video fullscreen.&quot;), &amp;_idleSystemSleepAssertion);
&gt; +#endif
&gt; +}
&gt; +
&gt; +- (void)_enableIdleSystemSleep
&gt; +{
&gt; +    if (_idleSystemSleepAssertion != kIOPMNullAssertionID) {
&gt; +        IOPMAssertionRelease(_idleSystemSleepAssertion);
&gt; +        _idleSystemSleepAssertion = kIOPMNullAssertionID;
&gt; +    }
&gt; +}
&gt; +

I think it would have been preferable to add this in a separate patch.

&gt; WebKit/mac/WebView/WebFullscreenController.mm:739
&gt; +    return (WebFullscreenWindow *)[super window];

[self window] should do, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328844</commentid>
    <comment_count>92</comment_count>
      <attachid>77134</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-03 17:19:46 -0800</bug_when>
    <thetext>Comment on attachment 77134
NewFullScreen-Part-2-The-Document

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

&gt; WebCore/dom/Document.cpp:3375
&gt;          m_fullScreenElement-&gt;dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEvent, true, false));

Is this a safe time to be calling script?

&gt; WebCore/dom/Document.cpp:4838
&gt; +    setNeedsStyleRecalc(SyntheticStyleChange);
&gt; +    documentElement()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);

Why are these synthetic style changes needed?

&gt; WebCore/dom/Document.cpp:4839
&gt; +    m_fullScreenElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);

I assume this one is required to get m_fullScreenElement a layer and compositing layer?

&gt; WebCore/dom/Document.cpp:4851
&gt; +    m_fullScreenElement-&gt;dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEvent, true, false));

Is this a safe time to be calling script? Who calls webkitDidEnterFullScreenForElement()?

It might be safer to dispatch the event on a zero-delay timer.

&gt; WebCore/dom/Document.cpp:4860
&gt; +    setNeedsStyleRecalc(SyntheticStyleChange);
&gt; +    documentElement()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);

Ditto.

&gt; WebCore/dom/Document.cpp:4896
&gt; +void Document::setFullScreenRendererSize(int width, int height)

Use const IntSize&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329040</commentid>
    <comment_count>93</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-04 10:23:41 -0800</bug_when>
    <thetext>(In reply to comment #90)
&gt; (From update of attachment 77135 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77135&amp;action=review
&gt; 
&gt; I&apos;d like to see one more rev of this patch.
&gt; 
&gt; &gt; WebCore/ChangeLog:16
&gt; &gt; +        The RenderFullScreen is intended to be used by clients of that API to allow a DOM subtree to
&gt; &gt; +        be rendered outside its original Frame. Because of this, there are a few areas of the
&gt; &gt; +        rendering code which need to be special cased: RenderFullScreen layers should not be clipped
&gt; &gt; +        to the viewport, as they will almost always be rendering outside the viewport area;
&gt; &gt; +        RenderFullScreen graphics layers should not be reparented by the RenderLayerCompositor, as
&gt; &gt; +        the client will likely want to reparent the platformLayer into their own fullscreen platform
&gt; &gt; +        window; the FrameView must update the RenderFullScreen graphics layer tree separately from
&gt; &gt; +        the root layer, as the two trees are disconnected.
&gt; 
&gt; Rendering outside the viewport is only true now when animating, correct? If so, the changelog should be updated to say this.

Okay.

&gt; &gt; WebCore/page/FrameView.cpp:542
&gt; &gt; +    if (document-&gt;webkitIsFullScreen() &amp;&amp; document-&gt;webkitFullScreenRenderer() &amp;&amp; document-&gt;webkitFullScreenRenderer()-&gt;isAnimating())
&gt; 
&gt; Maybe you could add a Document::isRunningFullscreenAnimation() method that encapsulates those tests.

It seems like that, since this pattern is only used in FrameView.cpp, a static function called &quot;bool isDocumentRunningFullScreenAnimation(Document*)&quot; would suffice (instead of adding on yet another function to Document).

&gt; &gt; WebCore/page/FrameView.cpp:646
&gt; &gt; +        if (GraphicsLayer* fullScreenLayer = toRenderBox(fullScreenRenderer)-&gt;layer()-&gt;backing()-&gt;graphicsLayer())
&gt; 
&gt; I think you should null-check layer()-&gt;backing().
&gt; 
&gt; &gt; WebCore/page/FrameView.cpp:2153
&gt; &gt; +            if (GraphicsLayer* fullScreenLayer = toRenderBox(fullScreenRenderer)-&gt;layer()-&gt;backing()-&gt;graphicsLayer())
&gt; 
&gt; Ditto.

Okay on both.

&gt; &gt; WebCore/rendering/RenderLayerBacking.cpp:63
&gt; &gt; +#if ENABLE(FULLSCREEN_API)
&gt; &gt; +#include &quot;RenderFullScreen.h&quot;
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; Not sure why this include is necessary.

It&apos;s not.  Removed.

&gt; &gt; WebCore/rendering/RenderLayerBacking.cpp:185
&gt; &gt; +        &amp;&amp; !layerOrAncestorIsFullScreen(m_owningLayer)
&gt; 
&gt; It&apos;s unfortunate that the common case of layerOrAncestorIsFullScreen() walks the whole tree. Maybe test whether the document has a fullscreen renderer first?

Sure.

&gt; &gt; WebCore/rendering/RenderLayerCompositor.cpp:819
&gt; &gt; +#if ENABLE(FULLSCREEN_API)
&gt; &gt; +        // For the sake of clients of the full screen renderer, don&apos;t reparent
&gt; &gt; +        // the full screen layer out from under them if they&apos;re in the middle of
&gt; &gt; +        // animating.
&gt; &gt; +        if (layer-&gt;renderer()-&gt;isFullScreen() &amp;&amp; toRenderFullScreen(layer-&gt;renderer())-&gt;isAnimating())
&gt; &gt; +            return;
&gt; &gt; +#endif
&gt; 
&gt; What happens to ensure that layers are correctly updated once the animation is complete? Do we just rely on the style change? Is there a way we can make this special-casing unnecessary?

The final style update causes the layers to reparent. I haven&apos;t yet found a way to make this special-casing unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329112</commentid>
    <comment_count>94</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-04 11:59:10 -0800</bug_when>
    <thetext>(In reply to comment #91)
&gt; (From update of attachment 77137 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77137&amp;action=review
&gt; 
&gt; You should use FullScreen, not Fullscreen, consistently, for the classes, methods and filenames.

Sure.  Renamed WebKitFullscreenController -&gt; WebKitFullScreenController.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:33
&gt; &gt; +#import &lt;IOKit/pwr_mgt/IOPMLib.h&gt;
&gt; 
&gt; Why not IOKit/IOKit.h?

There is no such header.  The closest thing is IOKit/IOKitLib.h, and that does not include the IOPMLib.h header.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:57
&gt; &gt; +static const NSString* isFullscreenKey = @&quot;isFullscreen&quot;;
&gt; 
&gt; Should be NSString * const IsFullScreenKey, or, given its usage, IsEnteringFullScreenKey

Changed on both counts.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:88
&gt; &gt; +@interface WebFullscreenController()
&gt; 
&gt; We usually name such a category Private

For certain uses of categories, a continuation category (like above) is necessary, such as adding private @properties to Obj-C classes.  Also, using a continuation is safer, as the compiler checks that all the functions defined in the continuation have been implemented.  See http://www.friday.com/bbum/2009/09/11/class-extensions-explained/.

However, it&apos;s probably safe to make this a traditional category.  Changed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:105
&gt; &gt; +#pragma mark -
&gt; &gt; +#pragma mark Initialization
&gt; 
&gt; We don&apos;t use #pragma mark

There are 58 instances of #pragma mark in the WebKit codebase, excluding these.  #pragma mark is a problem in cross-platform code, but since this lives in the mac/ platform, it&apos;s perfectly safe, and it makes the code more readable and navigable in XCode.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:189
&gt; &gt; +    if (_element) {
&gt; &gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; &gt; +        if (window) {
&gt; &gt; +            window-&gt;removeEventListener(eventNames.playEvent,  _mediaEventListener.get(), true);
&gt; &gt; +            window-&gt;removeEventListener(eventNames.pauseEvent, _mediaEventListener.get(), true);
&gt; &gt; +            window-&gt;removeEventListener(eventNames.endedEvent, _mediaEventListener.get(), true);
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +        
&gt; &gt; +    _element = element;
&gt; &gt; +    
&gt; &gt; +    if (_element) {
&gt; &gt; +        DOMWindow* window = _element-&gt;document()-&gt;domWindow();
&gt; &gt; +        if (window) {
&gt; &gt; +            window-&gt;addEventListener(eventNames.playEvent,  _mediaEventListener, true);
&gt; &gt; +            window-&gt;addEventListener(eventNames.pauseEvent, _mediaEventListener, true);
&gt; &gt; +            window-&gt;addEventListener(eventNames.endedEvent, _mediaEventListener, true);
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Please add some comments about why you need to register this event handler.

Done.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:271
&gt; &gt; +        WebFullscreenWindow* window = [self _fullscreenWindow];
&gt; 
&gt; The * go on the right for Obj-C objects, so WebFullscreenWindow *window =

I believe that rule applies only for ObjC headers.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:287
&gt; &gt; +    BOOL isFullscreenAnimation = [[anim valueForKey:isFullscreenKey] boolValue];
&gt; 
&gt; Variable name is ambiguous. Should be isEnteringFullscreenAnimation

Changed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:407
&gt; &gt; +    CGRect destinationFrame = CGRectMake(childRenderer-&gt;x(), childRenderer-&gt;y(), childRenderer-&gt;width(), childRenderer-&gt;height());    
&gt; 
&gt; childRenderer-&gt;x(), childRenderer-&gt;y() are not the correct way to find out where an element is. X and Y can be relative to some enclosing element (e.g. something with a transform). Maybe use getBoundingClientRect?

getBoundingClientRect returns a PassRefPtr&lt;ClientRect&gt;, and ClientRect.h is not (currently) exported by WebCore.  I don&apos;t believe it will ever be possible for the childRenderer to be relative to anything other than its parent the RenderFullScreen object, since it&apos;s both position fixed, and creates a stacking context.  Is this not true?

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:498
&gt; &gt; +    // webView was moved to the fullscreen window.  Check too see
&gt; 
&gt; One space after periods please. Typo at &quot;too see&quot;.

Whoops, changed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:502
&gt; &gt; +    if (_placeholderView &amp;&amp; [_placeholderView window])
&gt; &gt; +    {
&gt; 
&gt; Brace should be on previous line.

Changed.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:663
&gt; &gt; +#if !defined(BUILDING_ON_TIGER) // IOPMAssertionCreateWithName not defined on &lt; 10.5
&gt; &gt; +- (void)_disableIdleDisplaySleep
&gt; &gt; +{
&gt; &gt; +    if (_idleDisplaySleepAssertion == kIOPMNullAssertionID) 
&gt; &gt; +#if defined(BUILDING_ON_LEOPARD) // IOPMAssertionCreateWithName is not defined in the 10.5 SDK
&gt; &gt; +        IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, &amp;_idleDisplaySleepAssertion);
&gt; &gt; +#else // IOPMAssertionCreate is depreciated in &gt; 10.5
&gt; &gt; +        IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, CFSTR(&quot;WebKit playing a video fullscreen.&quot;), &amp;_idleDisplaySleepAssertion);
&gt; &gt; +#endif
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (void)_enableIdleDisplaySleep
&gt; &gt; +{
&gt; &gt; +    if (_idleDisplaySleepAssertion != kIOPMNullAssertionID) {
&gt; &gt; +        IOPMAssertionRelease(_idleDisplaySleepAssertion);
&gt; &gt; +        _idleDisplaySleepAssertion = kIOPMNullAssertionID;
&gt; &gt; +    }
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (void)_disableIdleSystemSleep
&gt; &gt; +{
&gt; &gt; +    if (_idleSystemSleepAssertion == kIOPMNullAssertionID) 
&gt; &gt; +#if defined(BUILDING_ON_LEOPARD) // IOPMAssertionCreateWithName is not defined in the 10.5 SDK
&gt; &gt; +        IOPMAssertionCreate(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &amp;_idleSystemSleepAssertion);
&gt; &gt; +#else // IOPMAssertionCreate is depreciated in &gt; 10.5
&gt; &gt; +    IOPMAssertionCreateWithName(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, CFSTR(&quot;WebKit playing a video fullscreen.&quot;), &amp;_idleSystemSleepAssertion);
&gt; &gt; +#endif
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +- (void)_enableIdleSystemSleep
&gt; &gt; +{
&gt; &gt; +    if (_idleSystemSleepAssertion != kIOPMNullAssertionID) {
&gt; &gt; +        IOPMAssertionRelease(_idleSystemSleepAssertion);
&gt; &gt; +        _idleSystemSleepAssertion = kIOPMNullAssertionID;
&gt; &gt; +    }
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; I think it would have been preferable to add this in a separate patch.

These already exist in WebVideoFullscreenController.mm, verbatim.

&gt; &gt; WebKit/mac/WebView/WebFullscreenController.mm:739
&gt; &gt; +    return (WebFullscreenWindow *)[super window];
&gt; 
&gt; [self window] should do, right?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329201</commentid>
    <comment_count>95</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-04 14:06:37 -0800</bug_when>
    <thetext>(In reply to comment #92)
&gt; (From update of attachment 77134 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77134&amp;action=review
&gt; 
&gt; &gt; WebCore/dom/Document.cpp:3375
&gt; &gt;          m_fullScreenElement-&gt;dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEvent, true, false));
&gt; 
&gt; Is this a safe time to be calling script?

You&apos;re right, a zero delay timer call might be appropriate here.  There are already protections against reentrancy up in WebFullScreenController, but those wouldn&apos;t be necessary if that event was dispatched in the next run-loop.

&gt; &gt; WebCore/dom/Document.cpp:4838
&gt; &gt; +    setNeedsStyleRecalc(SyntheticStyleChange);
&gt; &gt; +    documentElement()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; 
&gt; Why are these synthetic style changes needed?

That was there to accommodate the :full-screen-root-with-target pseudo class, which was removed from the spec.  These lines should be able to be removed safely.

&gt; &gt; WebCore/dom/Document.cpp:4839
&gt; &gt; +    m_fullScreenElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; 
&gt; I assume this one is required to get m_fullScreenElement a layer and compositing layer?

Yes.

&gt; &gt; WebCore/dom/Document.cpp:4851
&gt; &gt; +    m_fullScreenElement-&gt;dispatchEvent(Event::create(eventNames().webkitfullscreenchangeEvent, true, false));
&gt; 
&gt; Is this a safe time to be calling script? Who calls webkitDidEnterFullScreenForElement()?
&gt; 
&gt; It might be safer to dispatch the event on a zero-delay timer.

Indeed, as above.

&gt; &gt; WebCore/dom/Document.cpp:4860
&gt; &gt; +    setNeedsStyleRecalc(SyntheticStyleChange);
&gt; &gt; +    documentElement()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; WebCore/dom/Document.cpp:4896
&gt; &gt; +void Document::setFullScreenRendererSize(int width, int height)
&gt; 
&gt; Use const IntSize&amp;

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330256</commentid>
    <comment_count>96</comment_count>
      <attachid>78136</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-06 11:30:02 -0800</bug_when>
    <thetext>Created attachment 78136
NewFullScreen-Part-3-Renderering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330264</commentid>
    <comment_count>97</comment_count>
      <attachid>78136</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-06 11:52:01 -0800</bug_when>
    <thetext>Comment on attachment 78136
NewFullScreen-Part-3-Renderering

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

&gt; WebCore/page/FrameView.cpp:529
&gt; +static bool isDocumentRunningFullScreenAnimation(Document* document)

Since the param makes it obvious this applies to a Document, isRunningFullScreenAnimation(Document*) is better I think.

&gt; WebCore/page/FrameView.cpp:646
&gt; +    // The fullScreenRenderer&apos;s graphicsLayer  has been re-parented, and the above recursive syncCompositingState

Double space between graphicsLayer and has.

&gt; WebCore/rendering/RenderFullScreen.cpp:36
&gt; -        layer()-&gt;rendererContentChanged();
&gt; +        layer()-&gt;contentChanged(RenderLayer::VideoChanged);

I can&apos;t see enough context to know if this is an appropriate change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330347</commentid>
    <comment_count>98</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-06 13:02:20 -0800</bug_when>
    <thetext>(In reply to comment #97)
&gt; (From update of attachment 78136 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78136&amp;action=review
&gt; 
&gt; &gt; WebCore/page/FrameView.cpp:529
&gt; &gt; +static bool isDocumentRunningFullScreenAnimation(Document* document)
&gt; 
&gt; Since the param makes it obvious this applies to a Document, isRunningFullScreenAnimation(Document*) is better I think.

Sure.

&gt; &gt; WebCore/page/FrameView.cpp:646
&gt; &gt; +    // The fullScreenRenderer&apos;s graphicsLayer  has been re-parented, and the above recursive syncCompositingState
&gt; 
&gt; Double space between graphicsLayer and has.

Removed.

&gt; &gt; WebCore/rendering/RenderFullScreen.cpp:36
&gt; &gt; -        layer()-&gt;rendererContentChanged();
&gt; &gt; +        layer()-&gt;contentChanged(RenderLayer::VideoChanged);
&gt; 
&gt; I can&apos;t see enough context to know if this is an appropriate change.

In https://bugs.webkit.org/show_bug.cgi?id=49746, you removed the RenderLayer::rendererContentChanged() function, and replaced it with RenderLayer::ContentChanged(ContentChangeType).  The VideoChanged enum will ensure setCompositingLayersNeedRebuild() gets called.

I can add a new enum for FullScreenChanged if you like, and change the associated code in RenderLayer to match.  Or we can do that in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330349</commentid>
    <comment_count>99</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-06 13:04:37 -0800</bug_when>
    <thetext>(In reply to comment #98)

&gt; &gt; &gt; WebCore/rendering/RenderFullScreen.cpp:36
&gt; &gt; &gt; -        layer()-&gt;rendererContentChanged();
&gt; &gt; &gt; +        layer()-&gt;contentChanged(RenderLayer::VideoChanged);
&gt; &gt; 
&gt; &gt; I can&apos;t see enough context to know if this is an appropriate change.
&gt; 
&gt; In https://bugs.webkit.org/show_bug.cgi?id=49746, you removed the RenderLayer::rendererContentChanged() function, and replaced it with RenderLayer::ContentChanged(ContentChangeType).  The VideoChanged enum will ensure setCompositingLayersNeedRebuild() gets called.
&gt; 
&gt; I can add a new enum for FullScreenChanged if you like, and change the associated code in RenderLayer to match.  Or we can do that in a later patch.

A new enum would be good, and doing so in this patch is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331024</commentid>
    <comment_count>100</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-07 14:47:14 -0800</bug_when>
    <thetext>Committed r75277: https://trac.webkit.org/changeset/75277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331172</commentid>
    <comment_count>101</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-08 00:15:44 -0800</bug_when>
    <thetext>This broke the bots. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331256</commentid>
    <comment_count>102</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-08 13:06:22 -0800</bug_when>
    <thetext>Nearly a day later and all the bots are still broken.

I tried a rollout, but this is a multi-revision commit (which the sheriff-bot can handle, I just need to dig up all the revisions).

This was not well handled. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331261</commentid>
    <comment_count>103</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-08 13:20:24 -0800</bug_when>
    <thetext>It&apos;s impossible to roll this out given the WebCore rename which went in last night, sadly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331283</commentid>
    <comment_count>104</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-08 14:16:46 -0800</bug_when>
    <thetext>I don&apos;t understand why these two tests are failing, but I&apos;m going to check in failing results to allow the bots to go green again and the commit-queue to unclog (it&apos;s at 20 patches backlog, atm).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331284</commentid>
    <comment_count>105</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-08 14:18:14 -0800</bug_when>
    <thetext>Committed r75326: &lt;http://trac.webkit.org/changeset/75326&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331291</commentid>
    <comment_count>106</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-01-08 14:41:27 -0800</bug_when>
    <thetext>(In reply to comment #103)
&gt; It&apos;s impossible to roll this out given the WebCore rename which went in last night, sadly.

I have an idea how can we handle this kind of rollouts manually:
- Prepare rollout on an earlier revision with webkit-patch (before WebCore rename)
- Rename WebCore in the diff file with sed
- Apply the patch on the trunk
- Be happy :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331387</commentid>
    <comment_count>107</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-01-09 00:13:48 -0800</bug_when>
    <thetext>The LayoutTest failures were being tracked by https://bugs.webkit.org/show_bug.cgi?id=52095, but I neglected to relate this bug to that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361183</commentid>
    <comment_count>108</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-02 16:53:43 -0800</bug_when>
    <thetext>This may have contributed to peacekeeper performance troubles documented in bug 55626.

It&apos;s also not clear to me from the change, why the FULLSCREEN_API block in Node::createRendererIfNecessary ignores nextRenderer when appending the fullscreen node, or why it clears it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361189</commentid>
    <comment_count>109</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-02 16:58:17 -0800</bug_when>
    <thetext>(In reply to comment #108)
&gt; This may have contributed to peacekeeper performance troubles documented in bug 55626.
&gt; 
&gt; It&apos;s also not clear to me from the change, why the FULLSCREEN_API block in Node::createRendererIfNecessary ignores nextRenderer when appending the fullscreen node, or why it clears it.

Yes, it looks like there is an error there: addChild(fullscreenRenderer, 0) should be addChild(fullscreenRenderer, nextRenderer);  

But it has to be cleared before continuing, as the next child added will be the first child of the fullscreen renderer, and thus have no existing sibling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361191</commentid>
    <comment_count>110</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-02 16:59:09 -0800</bug_when>
    <thetext>(In reply to comment #109)
&gt; (In reply to comment #108)
&gt; &gt; This may have contributed to peacekeeper performance troubles documented in bug 55626.
&gt; &gt; 
&gt; &gt; It&apos;s also not clear to me from the change, why the FULLSCREEN_API block in Node::createRendererIfNecessary ignores nextRenderer when appending the fullscreen node, or why it clears it.
&gt; 
&gt; Yes, it looks like there is an error there: addChild(fullscreenRenderer, 0) should be addChild(fullscreenRenderer, nextRenderer);  
&gt; 
&gt; But it has to be cleared before continuing, as the next child added will be the first child of the fullscreen renderer, and thus have no existing sibling.

How would we test this?  Is FULLSCREEN_API enabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361195</commentid>
    <comment_count>111</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-02 17:01:50 -0800</bug_when>
    <thetext>(In reply to comment #110)
&gt; (In reply to comment #109)
&gt; &gt; (In reply to comment #108)
&gt; &gt; &gt; This may have contributed to peacekeeper performance troubles documented in bug 55626.
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s also not clear to me from the change, why the FULLSCREEN_API block in Node::createRendererIfNecessary ignores nextRenderer when appending the fullscreen node, or why it clears it.
&gt; &gt; 
&gt; &gt; Yes, it looks like there is an error there: addChild(fullscreenRenderer, 0) should be addChild(fullscreenRenderer, nextRenderer);  
&gt; &gt; 
&gt; &gt; But it has to be cleared before continuing, as the next child added will be the first child of the fullscreen renderer, and thus have no existing sibling.
&gt; 
&gt; How would we test this?  Is FULLSCREEN_API enabled?

It is enabled on WebKit/OSX builds; but the feature must be enabled at runtime by setting a user default:

defaults write com.apple.Safari WebKitFullScreenEnabled -bool true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362085</commentid>
    <comment_count>112</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-03 16:48:14 -0800</bug_when>
    <thetext>Bug 55720 fixes the renderer insertion position trouble, and makes us call nextRenderer only when needed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73793</attachid>
            <date>2010-11-12 16:55:34 -0800</date>
            <delta_ts>2010-11-15 10:44:43 -0800</delta_ts>
            <desc>WebCore-RenderFullScreen</desc>
            <filename>NewFullScreen-Rev-2.RenderFullScreen.patch</filename>
            <type>text/plain</type>
            <size>12490</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMTAtMTEtMTIgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IFdlYktpdCBGdWxsIFNjcmVlbiBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0ODEKKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
ODI0NzQ0NAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFJl
bmRlck9iamVjdCB0eXBlOiBSZW5kZXJGdWxsU2NyZWVuLiAgVGhlIFJlbmRlckZ1bGxTY3JlZW4g
cmVuZGVyZXIgCisgICAgICAgIHdpbGwgYmUgdXNlZCB0byBpbXBsZW1lbnQgbmV3IEZ1bGxTY3Jl
ZW4gQVBJcy4gIFRoZSByZW5kZXJlciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGNsaWVudHMg
b2YKKyAgICAgICAgdGhhdCBBUEkgdG8gYWxsb3cgYSBET00gc3VidHJlZSB0byBiZSByZW5kZXJl
ZCBvdXRzaWRlIGl0cyBvcmlnaW5hbCBGcmFtZS4gIEJlY2F1c2Ugb2YgdGhpcywgdGhlcmUKKyAg
ICAgICAgYXJlIGEgZmV3IGFyZWFzIG9mIHRoZSByZW5kZXJpbmcgY29kZSB3aGljaCBuZWVkIHRv
IGJlIHNwZWNpYWwgY2FzZWQ6IFJlbmRlckZ1bGxTY3JlZW4gbGF5ZXJzIHNob3VsZCAKKyAgICAg
ICAgbm90IGJlIGNsaXBwZWQgdG8gdGhlIHZpZXdwb3J0LCBhcyB0aGV5IHdpbGwgYWxtb3N0IGFs
d2F5cyBiZSByZW5kZXJpbmcgb3V0c2lkZSB0aGUgdmlld3BvcnQgYXJlYTsgCisgICAgICAgIFJl
bmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3MgbGF5ZXJzIHNob3VsZCBub3QgYmUgcmVwYXJlbnRlZCBi
eSB0aGUgUmVuZGVyTGF5ZXJDb21wb3NpdG9yLCBhcyB0aGUgY2xpZW50CisgICAgICAgIHdpbGwg
bGlrZWx5IHdhbnQgdG8gcmVwYXJlbnQgdGhlIHBsYXRmb3JtTGF5ZXIgaW50byB0aGVpciBvd24g
ZnVsbHNjcmVlbiBwbGF0Zm9ybSB3aW5kb3c7IHRoZSBGcmFtZVZpZXcKKyAgICAgICAgbXVzdCB1
cGRhdGUgdGhlIFJlbmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3MgbGF5ZXIgdHJlZSBzZXBhcmF0ZWx5
IGZyb20gdGhlIHJvb3QgbGF5ZXIsIGFzIHRoZSB0d28gdHJlZXMKKyAgICAgICAgYXJlIGRpc2Nv
bm5lY3RlZC4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBFeHBvcnQgYSBudW1iZXIgb2Yg
c3ltYm9scyBuZXdseSB1c2VkIGJ5IFdlYktpdC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6IEFkZCBSZW5kZXJGdWxsU2NyZWVuLmNwcCxoIHRvIHRoZSBwcm9q
ZWN0LgorICAgICAgICAqIGNzcy9mdWxsc2NyZWVuLmNzczogQ2hhbmdlIHRoZSBkZWZhdWx0IHN0
eWxlIHJ1bGVzIGZvciBmdWxsc2NyZWVuIGVsZW1lbnRzLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOiBJbml0aWFsaXpl
IG1fZnVsbHNjcmVlblJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFj
aCk6IFVuaW5pdGlhbGl6ZSBtX2Z1bGxzY3JlZW5SZW5kZXJlci4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IAorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0U2V0RnVsbFNjcmVlblJlbmRlcmVy
KTogU2V0IG1fZnVsbHNjcmVlblJlbmRlcmVyLCBhbmQgbm90aWZ5IGNocm9tZSBjbGllbnRzLgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondl
YmtpdEZ1bGxTY3JlZW5SZW5kZXJlcik6IEFjY2Vzc29yIGZvciBtX2Z1bGxzY3JlZW5SZW5kZXJl
ci4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzY3JlZW5SZWN0KTogTW92ZWQgaW50byBFbGVtZW50IGZyb20gSFRNTE1lZGlhRWxlbWVudC4K
KyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjcmVhdGVS
ZW5kZXJlcklmTmVlZGVkKTogQ3JlYXRlcyBhIFJlbmRlckZ1bGxTY3JlZW4gcGFyZW50IGZvciB0
aGUKKyAgICAgICAgICAgIGN1cnJlbnQgZnVsbHNjcmVlbiBlbGVtZW50LgorICAgICAgICAqIGh0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6IE1vdmVkIHNjcmVlblJlY3QgaW50byBFbGVtZW50Lgor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpmdWxsU2Ny
ZWVuUmVuZGVyZXJDaGFuZ2VkKTogTmV3IGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IGNsaWVudHMg
b2YgZnVsbCAKKyAgICAgICAgICAgIHNjcmVlbiByZW5kZXJlciBjaGFuZ2VzLgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMpOiAgU3BlY2lhbCB0cmVhdG1lbnQgZm9yIGZ1bGxzY3JlZW4gcmVu
ZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRl
UmVjdXJzaXZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29u
dGVudHMpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHA6
IEFkZGVkLgorICAgICAgICAoUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlRnVsbFNjcmVlblN0eWxl
KTogRGVmYXVsdCBzdHlsZSBmb3IgUmVuZGVyRnVsbFNjcmVlbiBlbGVtZW50cy4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNl
c3RvcklzRnVsbFNjcmVlbik6IE5ldyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6IERvIG5vdCBjbGlwIGlmIHRo
ZSBsYXllck9yQW5jZXN0b3JJc0Z1bGxTY3JlZW4uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSk6IFNwZWNpYWwgdHJlYXRtZW50IGZv
ciBmdWxsc2NyZWVuIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3Jl
ZW4pOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc0Z1bGxTY3JlZW4pOiBOZXcgZnVuY3Rpb24uCisKKzIwMTAtMTEtMDEg
IEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FuJ3QgdmlldyBIVE1MNSB2aWRlbyB3aGVuIHJ1
bm5pbmcgU2FmYXJpIHdpdGggYW4gYXV0aGVudGljYXRlZCBwcm94eSBzZXJ2ZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4Nzg3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MzUxOTI2PgorICAgICAgICAKKyAgICAgICAgT24gU25vd0xlb3BhcmQg
b25seSwgY2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gPHZpZGVvPiBzb3VyY2UgVVJMIHdpbGwgdXNl
IGEgcHJveHkgc2VydmVyLAorICAgICAgICBhbmQgaWYgc28sIGZhbGwgYmFjayB0byB0aGUgUXVp
Y2tUaW1lNyBwYXRoIGJ5IG5vdCBwYXNzaW5nIFFUTW92aWVPcGVuRm9yUGxheWJhY2tBdHRyaWJ1
dGUKKyAgICAgICAgdG8gY3JlYXRlTW92aWVXaXRoQXR0cmlidXRlczouCisgICAgICAgIAorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZSk6CisK
IDIwMTAtMTEtMTIgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjEzLDYg
KzUyMTMsOCBAQAogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwu
Y3BwICovOyB9OwogCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2
N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLzsgfTsKIAkJQ0EzQkY2
N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuaCAqLzsgfTsKKwkJQ0RFQTdDODQxMjc2MjMwNDAwQjg0NkREIC8qIFJl
bmRlckZ1bGxTY3JlZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENERUE3QzgyMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmggKi87
IH07CisJCUNERUE3Qzg1MTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERUE3QzgzMTI3
NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCAqLzsgfTsKIAkJQ0UwMkYwQzQx
MUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEg
LyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwICovOyB9OwogCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRTA1N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTExMTczLDYgKzExMTc1LDggQEAKIAkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9s
bEFuaW1hdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0EzQkY2N0QxMEQ5
OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNENEUwQUZBMTFGN0JDMjcwMDlEMzgxMSAvKiBmdWxsc2NyZWVuLmNzcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuY3NzOyBwYXRoID0gZnVsbHNjcmVlbi5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNERUE3QzgyMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RFQTdDODMxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1
bGxTY3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
RnVsbFNjcmVlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFF
ODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNF
MDU3RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzYwNSw2ICsxNzYwOSw4IEBACiAJCQkJ
MEZEMzA4MEQxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oICovLAogCQkJCUE4
NzFERUNBMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5jcHAgKi8sCiAJCQkJQTg3
MURFQzkwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmggKi8sCisJCQkJQ0RFQTdD
ODMxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwICovLAorCQkJCUNERUE3
QzgyMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmggKi8sCiAJCQkJQkNFQTQ4
MkEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckhUTUxDYW52YXMuY3BwICovLAogCQkJCUJDRUE0
ODJCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJIVE1MQ2FudmFzLmggKi8sCiAJCQkJMEZEMzA4
RDMxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5jcHAgKi8sCkBAIC0xODE0Myw2ICsx
ODE0OSw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlDREVBN0M4NDEyNzYyMzA0MDBC
ODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjVCNURDNkEx
MTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjlBODEyMkUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjM0NzksNiArMjM0ODYsNyBAQAogCQkJCTA4MTA5
M0RCMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDgwRTQ5MjUxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODBFNDkyNzEyNTVG
M0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQ0RFQTdDODUxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogIFJlbmRlckZ1bGxTY3JlZW4u
Y3BwCisgKiAgV2ViQ29yZQorICoKKyAqICBDcmVhdGVkIGJ5IEplciBOb2JsZSBvbiAxMC8yNS8x
MC4KKyAqICBDb3B5cmlnaHQgMjAxMCBBcHBsZSBDb21wdXRlci4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVuZGVyRnVs
bFNjcmVlbi5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlRnVsbFNjcmVlblN0eWxlKCkKK3sKKyAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBmdWxsc2NyZWVuU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlRGVmYXVsdFN0eWxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzdGFja2luZyBjb250ZXh0
OgorICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0WkluZGV4KElOVF9NQVgpOworCisgICAgZnVsbHNj
cmVlblN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uKCkpOworICAgIGZ1
bGxzY3JlZW5TdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKworICAgIGZ1bGxzY3JlZW5TdHlsZS0+
c2V0RGlzcGxheShCT1gpOworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0Qm94UGFjayhCQ0VOVEVS
KTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldEJveEFsaWduKEJDRU5URVIpOworICAgIGZ1bGxz
Y3JlZW5TdHlsZS0+c2V0Qm94T3JpZW50KEhPUklaT05UQUwpOworICAgIAorICAgIGZ1bGxzY3Jl
ZW5TdHlsZS0+c2V0UG9zaXRpb24oRml4ZWRQb3NpdGlvbik7CisgICAgZnVsbHNjcmVlblN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoMS4wLCBQZXJjZW50KSk7CisgICAgZnVsbHNjcmVlblN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKDEuMCwgUGVyY2VudCkpOworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0
TGVmdChMZW5ndGgoMCwgRml4ZWQpKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldFRvcChMZW5n
dGgoMCwgRml4ZWQpKTsKKyAgICAKKyAgICByZXR1cm4gZnVsbHNjcmVlblN0eWxlOworfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFJlbmRlckZ1bGxTY3JlZW5faAorI2RlZmluZSBSZW5kZXJGdWxs
U2NyZWVuX2gKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworI2luY2x1ZGUgIlJlbmRl
ckZsZXhpYmxlQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyRnVs
bFNjcmVlbiA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7CitwdWJsaWM6CisgICAgUmVuZGVy
RnVsbFNjcmVlbihOb2RlKiBub2RlKSA6IFJlbmRlckZsZXhpYmxlQm94KG5vZGUpIHsgc2V0UmVw
bGFjZWQoZmFsc2UpOyBzZXRJc0Fub255bW91cyhmYWxzZSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNGdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGdWxsU2NyZWVuIjsgfQor
ICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVGdWxsU2NyZWVu
U3R5bGUoKTsKK307Cit9CisKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNiArMjg0LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0NhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorI2VuZGlmCiAKICAgICBib29sIGlzUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IG1fbm9kZTsgfQogICAgIGJvb2wgaXNCb2R5KCkg
Y29uc3Q7Cg==
</data>
<flag name="review"
          id="64295"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73794</attachid>
            <date>2010-11-12 16:56:00 -0800</date>
            <delta_ts>2010-12-03 15:13:21 -0800</delta_ts>
            <desc>WebCore-DOM</desc>
            <filename>NewFullScreen-Rev-2.DOM.patch</filename>
            <type>text/plain</type>
            <size>5206</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDY4OTI4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDEwIEBACiAjaW5jbHVkZSAiSFRNTE5v
U2NyaXB0RWxlbWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisj
aW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC00
MDUsNiArNDA5LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSwog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1faXNGdWxsU2NyZWVuKDApCiAgICAg
LCBtX2FyZUtleXNFbmFibGVkSW5GdWxsU2NyZWVuKDApCisgICAgLCBtX2Z1bGxTY3JlZW5SZW5k
ZXJlcigwKQogI2VuZGlmCiAgICAgLCBtX2xvYWRFdmVudERlbGF5Q291bnQoMCkKIHsKQEAgLTE3
MzEsNiArMTczNiwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogCiAgICAgLy8gaW5kaWNh
dGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4gYXR0YWNoZWQoKSBidXQgcmVuZGVyZXIgPT0gMAog
ICAgIHNldFJlbmRlcmVyKDApOworICAgIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICB3ZWJraXRTZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisjZW5kaWYKIAogICAgIG1faG92ZXJO
b2RlID0gMDsKICAgICBtX2ZvY3VzZWROb2RlID0gMDsKQEAgLTQ3MjcsMTAgKzQ3MzYsMTQgQEAg
dm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogCiAgICAgbV9mdWxsU2Ny
ZWVuRWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgbV9pc0Z1bGxTY3JlZW4gPSB0cnVlOwotICAgIGRv
Y3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7Ci0g
ICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFu
Z2UpOwotICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICAKKyAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBkb2N1bWVudEVsZW1lbnQoKS0+c2V0
TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgbV9mdWxsU2NyZWVu
RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
bV9mdWxsU2NyZWVuRWxlbWVudC0+ZGV0YWNoKCk7CisKKyAgICByZWNhbGNTdHlsZShGb3JjZSk7
ICAgIAorCisgICAgZnJhbWUoKS0+dmlldygpLT5zZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVl
bihUUlVFKTsKICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFs
c2UpKTsKIH0KICAgICAKQEAgLTQ3NDgsMTYgKzQ3NjEsMzIgQEAgdm9pZCBEb2N1bWVudDo6d2Vi
a2l0RGlkRXhpdEZ1bGxTY3JlZW5GbwogICAgIG1faXNGdWxsU2NyZWVuID0gZmFsc2U7CiAgICAg
bV9hcmVLZXlzRW5hYmxlZEluRnVsbFNjcmVlbiA9IGZhbHNlOwogCisgICAgZWxlbWVudC0+ZGV0
YWNoKCk7CiAgICAgLy8gbV9mdWxsU2NyZWVuRWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFy
ZWQ7IHJlY2FsYyB0aGUgc3R5bGUgb2YgCiAgICAgLy8gdGhlIHBhc3NlZCBpbiBlbGVtZW50IGlu
c3RlYWQuCiAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2Up
OwogICAgIGlmIChlbGVtZW50ICE9IGRvY3VtZW50RWxlbWVudCgpKQogICAgICAgICBkb2N1bWVu
dEVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgIGVs
ZW1lbnQtPmF0dGFjaCgpOworCiAgICAgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIAorICAg
IC8vIFNhdmUgb2ZmIHRoZSBtX2Z1bGxTY3JlZW5SZW5kZXJlciB0byBkZXN0cm95IG9ubHkgYWZ0
ZXIgdGhlIGNsaWVudCBoYXMKKyAgICAvLyBiZWVuIG5vdGlmaWVkIHRoYXQgdGhlIHJlbmRlcmVy
IGhhcyBjaGFuZ2VkOgorICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBtX2Z1bGxTY3JlZW5SZW5k
ZXJlcjsKKyAgICB3ZWJraXRTZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisgICAgcmVuZGVyZXIt
PmRlc3Ryb3koKTsKKyAgICAKKyAgICBmcmFtZSgpLT52aWV3KCktPnNldFNob3VsZFVwZGF0ZVdo
aWxlT2Zmc2NyZWVuKEZBTFNFKTsKICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFs
c2UpKTsKIH0KICAgICAKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdFNldEZ1bGxTY3JlZW5SZW5kZXJl
cihSZW5kZXJCb3gqIHJlbmRlcmVyKQoreworICAgIG1fZnVsbFNjcmVlblJlbmRlcmVyID0gcmVu
ZGVyZXI7CisgICAgcGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZ1bGxTY3JlZW5SZW5kZXJl
ckNoYW5nZWQobV9mdWxsU2NyZWVuUmVuZGVyZXIpOworfQorCiAjZW5kaWYKIAogdm9pZCBEb2N1
bWVudDo6ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpCkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gNjg5
MjgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
MTAgQEAKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9n
cmVzc0V2ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJl
bmRlckZ1bGxTY3JlZW4uaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yTm9kZUxpc3QuaCIKICNpbmNsdWRl
ICJTdGF0aWNOb2RlTGlzdC5oIgpAQCAtMTMyNyw2ICsxMzMwLDIxIEBAIHZvaWQgTm9kZTo6Y3Jl
YXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgQVNTRVJUKHBhcmVudCk7CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJPYmplY3QqIG5leHRSZW5kZXJlciA9IHRoaXMtPm5leHRSZW5kZXJlcigpOworICAgIAorI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAvLyBJZiB0aGlzIG5vZGUgaXMgYSBmdWxsc2Ny
ZWVuIG5vZGUsIGNyZWF0ZSBhIG5ldyBhbm9ueW1vdXMgZnVsbCBzY3JlZW4KKyAgICAvLyByZW5k
ZXJlci4KKyAgICBpZiAoZG9jdW1lbnQoKS0+d2Via2l0RnVsbFNjcmVlbigpICYmIGRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09IHRoaXMpIHsKKyAgICAgICAg
UmVuZGVyRnVsbFNjcmVlbiogZnVsbHNjcmVlblJlbmRlcmVyID0gbmV3IChkb2N1bWVudCgpLT5y
ZW5kZXJBcmVuYSgpKSBSZW5kZXJGdWxsU2NyZWVuKGRvY3VtZW50KCkpOworICAgICAgICBmdWxs
c2NyZWVuUmVuZGVyZXItPnNldFN0eWxlKFJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZUZ1bGxTY3Jl
ZW5TdHlsZSgpKTsKKyAgICAgICAgcGFyZW50UmVuZGVyZXItPmFkZENoaWxkKGZ1bGxzY3JlZW5S
ZW5kZXJlciwgMCk7CisgICAgICAgIHBhcmVudFJlbmRlcmVyID0gZnVsbHNjcmVlblJlbmRlcmVy
OworICAgICAgICBuZXh0UmVuZGVyZXIgPSAwOworICAgICAgICBkb2N1bWVudCgpLT53ZWJraXRT
ZXRGdWxsU2NyZWVuUmVuZGVyZXIoZnVsbHNjcmVlblJlbmRlcmVyKTsKKyAgICB9CisjZW5kaWYK
KyAgICAKICAgICBpZiAocGFyZW50UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhhdmVD
aGlsZHJlbigpCiAjaWYgRU5BQkxFKFNWRykgfHwgRU5BQkxFKFhIVE1MTVApCiAgICAgICAgICYm
IHBhcmVudC0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0aGlzKQpAQCAtMTM0MCw3ICsxMzU4
LDcgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKICAgICAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyZXIocik7CiAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnNldEFuaW1hdGFibGVTdHlsZShzdHlsZS5yZWxlYXNlKCkp
OwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQocmVuZGVyZXIo
KSwgbmV4dFJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+
YWRkQ2hpbGQocmVuZGVyZXIoKSwgbmV4dFJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDY4
OTI4KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDMsNiArMjQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNGdWxsU2NyZWVuRm9yRWxlbWVudChjb25zdCBFbGVtZW50KikgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCopIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQqKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJlckNo
YW5nZWQoUmVuZGVyT2JqZWN0KikgeyB9CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCg==
</data>
<flag name="review"
          id="64296"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73795</attachid>
            <date>2010-11-12 16:56:42 -0800</date>
            <delta_ts>2010-12-21 11:15:02 -0800</delta_ts>
            <desc>WebCore-Rendering</desc>
            <filename>NewFullScreen-Rev-2.Rendering.patch</filename>
            <type>text/plain</type>
            <size>7085</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNiArNDg3LDEyIEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVycygKICAgICAvLyBUaGlzIGNhbGwgd2lsbCBtYWtl
IHN1cmUgdGhlIGNhY2hlZCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nIGlzIHVwZGF0ZWQgZnJv
bSB0aGUgcHJlZgogICAgIHZpZXctPmNvbXBvc2l0b3IoKS0+Y2FjaGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRmxhZ3MoKTsKICAgICB2aWV3LT5jb21wb3NpdG9yKCktPnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKTsKKyAgICAK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jdW1lbnQtPndlYmtpdEZ1bGxTY3JlZW4oKSAm
JiBkb2N1bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCkpCisgICAgICAgIHZpZXctPmNv
bXBvc2l0b3IoKS0+dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVBZnRl
ckxheW91dE9yU3R5bGVDaGFuZ2UsIGRvY3VtZW50LT53ZWJraXRGdWxsU2NyZWVuUmVuZGVyZXIo
KS0+bGF5ZXIoKSk7CisjZW5kaWYKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnNldE5lZWRzT25lU2hv
dERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpAQCAtNTQ0LDYgKzU1MCwxOCBAQCBib29sIEZyYW1l
Vmlldzo6c3luY0NvbXBvc2l0aW5nU3RhdGVSZWN1CiAgICAgCiAgICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIHJvb3RMYXllciA9IGNvbnRlbnRSZW5kZXJlci0+Y29tcG9zaXRvcigpLT5yb290UGxhdGZv
cm1MYXllcigpKQogICAgICAgICByb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Cisg
ICAgCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIC8vIFRoZSBmdWxsU2NyZWVuUmVu
ZGVyZXIncyBncmFwaGljc0xheWVyICBoYXMgYmVlbiByZS1wYXJlbnRlZCwgYW5kIHRoZSBhYm92
ZSByZWN1cnNpdmUgc3luY0NvbXBvc2l0aW5nU3RhdGUKKyAgICAvLyBjYWxsIHdpbGwgbm90IGNh
dXNlIHRoZSBzdWJ0cmVlIHVuZGVyIGl0IHRvIHJlcGFpbnQuICBFeHBsaWNpdGx5IGNhbGwgdGhl
IHN5bmNDb21wb3NpdGluZ1N0YXRlIG9uIAorICAgIC8vIHRoZSBmdWxsU2NyZWVuUmVuZGVyZXIn
cyBncmFwaGljc0xheWVyIGhlcmU6CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jdW1lbnQtPndlYmtpdEZ1bGxTY3JlZW4oKSAmJiBkb2N1
bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBmdWxsU2NyZWVuUmVuZGVyZXIgPSBkb2N1bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVy
KCk7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBmdWxsU2NyZWVuTGF5ZXIgPSB0b1JlbmRl
ckJveChmdWxsU2NyZWVuUmVuZGVyZXIpLT5sYXllcigpLT5iYWNraW5nKCktPmdyYXBoaWNzTGF5
ZXIoKSkKKyAgICAgICAgICAgIGZ1bGxTY3JlZW5MYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUo
KTsKKyAgICB9CisjZW5kaWYgICAgCiAKICAgICBib29sIGFsbFN1YmZyYW1lc1N5bmNlZCA9IHRy
dWU7CiAgICAgY29uc3QgSGFzaFNldDxSZWZQdHI8V2lkZ2V0PiA+KiB2aWV3Q2hpbGRyZW4gPSBj
aGlsZHJlbigpOwpAQCAtMTk3Niw2ICsxOTk0LDE2IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoIXAtPnBhaW50aW5nRGlzYWJsZWQoKSkgewogICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gY29udGVudFJlbmRlcmVyLT5jb21w
b3NpdG9yKCktPnJvb3RQbGF0Zm9ybUxheWVyKCkpCiAgICAgICAgICAgICByb290TGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlKCk7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgICAg
ICAvLyBUaGUgZnVsbFNjcmVlblJlbmRlcmVyJ3MgZ3JhcGhpY3NMYXllciAgaGFzIGJlZW4gcmUt
cGFyZW50ZWQsIGFuZCB0aGUgYWJvdmUgcmVjdXJzaXZlIHN5bmNDb21wb3NpdGluZ1N0YXRlCisg
ICAgICAgIC8vIGNhbGwgd2lsbCBub3QgY2F1c2UgdGhlIHN1YnRyZWUgdW5kZXIgaXQgdG8gcmVw
YWludC4gIEV4cGxpY2l0bHkgY2FsbCB0aGUgc3luY0NvbXBvc2l0aW5nU3RhdGUgb24gCisgICAg
ICAgIC8vIHRoZSBmdWxsU2NyZWVuUmVuZGVyZXIncyBncmFwaGljc0xheWVyIGhlcmU6CisgICAg
ICAgIGlmIChkb2N1bWVudC0+d2Via2l0RnVsbFNjcmVlbigpICYmIGRvY3VtZW50LT53ZWJraXRG
dWxsU2NyZWVuUmVuZGVyZXIoKSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBmdWxsU2Ny
ZWVuUmVuZGVyZXIgPSBkb2N1bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCk7CisgICAg
ICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogZnVsbFNjcmVlbkxheWVyID0gdG9SZW5kZXJCb3go
ZnVsbFNjcmVlblJlbmRlcmVyKS0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCkp
CisgICAgICAgICAgICAgICAgZnVsbFNjcmVlbkxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgp
OworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYg
KzU2LDEwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJSZW5k
ZXJGdWxsU2NyZWVuLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTUzLDYgKzE1NywxOCBAQCBzdGF0aWMgYm9vbCBsYXllck9yQW5j
ZXN0b3JJc1RyYW5zZm9ybWVkCiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQorICAgIAorI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK3N0YXRpYyBib29sIGxheWVyT3JBbmNlc3RvcklzRnVs
bFNjcmVlbihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogY3Vy
ciA9IGxheWVyOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGN1
cnItPnJlbmRlcmVyKCktPmlzRnVsbFNjcmVlbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgogCiB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpCiB7CkBAIC0xNjAsOCArMTc2
LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGUKIAogICAgIC8v
IENsaXAgdG8gdGhlIHNpemUgb2YgdGhlIGRvY3VtZW50IG9yIGVuY2xvc2luZyBvdmVyZmxvdy1z
Y3JvbGwgbGF5ZXIuCiAgICAgLy8gSWYgdGhpcyBvciBhbiBhbmNlc3RvciBpcyB0cmFuc2Zvcm1l
ZCwgd2UgY2FuJ3QgY3VycmVudGx5IGNvbXB1dGUgdGhlIGNvcnJlY3QgcmVjdCB0byBpbnRlcnNl
Y3Qgd2l0aC4KLSAgICAvLyBXZSdkIG5lZWQgUmVuZGVyT2JqZWN0Ojpjb252ZXJ0Q29udGFpbmVy
VG9Mb2NhbFF1YWQoKSwgd2hpY2ggZG9lc24ndCB5ZXQgZXhpc3QuCi0gICAgaWYgKGNvbXBvc2l0
b3IoKS0+Y29tcG9zaXRpbmdDb25zdWx0c092ZXJsYXAoKSAmJiAhbGF5ZXJPckFuY2VzdG9ySXNU
cmFuc2Zvcm1lZChtX293bmluZ0xheWVyKSkgeworICAgIC8vIFdlJ2QgbmVlZCBSZW5kZXJPYmpl
Y3Q6OmNvbnZlcnRDb250YWluZXJUb0xvY2FsUXVhZCgpLCB3aGljaCBkb2Vzbid0IHlldCBleGlz
dC4gIElmIHRoaXMKKyAgICAvLyBpcyBhIGZ1bGxzY3JlZW4gcmVuZGVyZXIsIGRvbid0IGNsaXAg
dG8gdGhlIHZpZXdwb3J0LCBhcyB0aGUgcmVuZGVyZXIgd2lsbCBiZSBhc2tlZCB0bworICAgIC8v
IGRpc3BsYXkgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYm91bmRzLgorICAgIGlmIChjb21wb3Np
dG9yKCktPmNvbXBvc2l0aW5nQ29uc3VsdHNPdmVybGFwKCkgJiYgIWxheWVyT3JBbmNlc3Rvcklz
VHJhbnNmb3JtZWQobV9vd25pbmdMYXllcikgCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgICAgICAmJiAhbGF5ZXJPckFuY2VzdG9ySXNGdWxsU2NyZWVuKG1fb3duaW5nTGF5ZXIpCisj
ZW5kaWYKKyAgICAgICAgKSB7CiAgICAgICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX293bmluZ0xh
eWVyLT5yZW5kZXJlcigpLT52aWV3KCk7CiAgICAgICAgIFJlbmRlckxheWVyKiByb290TGF5ZXIg
PSB2aWV3LT5sYXllcigpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDY4OTI4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk5LDYgKzc5OSwxMyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvCiAgICAgICAgIGlmICgh
cGFyZW50ZWQpCiAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygp
LT5zZXRDaGlsZHJlbihsYXllckNoaWxkcmVuKTsKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKyAgICAgICAgLy8gRm9yIHRoZSBzYWtlIG9mIGNsaWVudHMgb2YgdGhlIGZ1bGwgc2NyZWVu
IHJlbmRlcmVyLCBkb24ndCByZXBhcmVudAorICAgICAgICAvLyB0aGUgZnVsbCBzY3JlZW4gbGF5
ZXIgb3V0IGZyb20gdW5kZXIgdGhlbS4KKyAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5p
c0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZQorI2VuZGlm
CiAgICAgICAgIGNoaWxkTGF5ZXJzT2ZFbmNsb3NpbmdMYXllci5hcHBlbmQobGF5ZXJCYWNraW5n
LT5jaGlsZEZvclN1cGVybGF5ZXJzKCkpOwogICAgIH0KIH0KQEAgLTExMzAsNyArMTEzNyw4IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKICAgICAgICAgICAgICB8
fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9ySUZyYW1lKHJlbmRlcmVyKQogICAgICAgICAgICAgIHx8
IHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxpdHkoKSA9PSBCYWNrZmFjZVZpc2li
aWxpdHlIaWRkZW4KICAgICAgICAgICAgICB8fCBjbGlwc0NvbXBvc2l0aW5nRGVzY2VuZGFudHMo
bGF5ZXIpCi0gICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihy
ZW5kZXJlcik7CisgICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlv
bihyZW5kZXJlcikKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNj
cmVlbihyZW5kZXJlcik7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5CZUNv
bXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25zdApAQCAtMTI4Myw2ICsxMjkx
LDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIHsKICAgICBy
ZXR1cm4gcmVuZGVyZXItPmhhc1RyYW5zZm9ybSgpIHx8IHJlbmRlcmVyLT5pc1RyYW5zcGFyZW50
KCkgfHwgcmVuZGVyZXItPmhhc01hc2soKSB8fCByZW5kZXJlci0+aGFzUmVmbGVjdGlvbigpOwog
fQorICAgIAorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JGdWxsU2NyZWVuKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJlbmRlcmVyLT5pc0Z1bGxTY3JlZW4oKTsKK30KIAogLy8gSWYgYW4gZWxlbWVudCBoYXMgbmVn
YXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRyZW4gcmVuZGVyIGluIGZyb250IG9m
IHRoZSAKIC8vIGxheWVyIGJhY2tncm91bmQsIHNvIHdlIG5lZWQgYW4gZXh0cmEgJ2NvbnRlbnRz
JyBsYXllciBmb3IgdGhlIGZvcmVncm91bmQgb2YgdGhlIGxheWVyCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gNjg5MjgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIyLDYgKzIyMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9y
UGx1Z2luKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGlu
Z0ZvcklGcmFtZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9z
aXRpbmdXaGVuRGVzY2VuZGFudHNBcmVDb21wb3NpdGluZyhSZW5kZXJPYmplY3QqKSBjb25zdDsK
KyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGdWxsU2NyZWVuKFJlbmRlck9iamVjdCop
IGNvbnN0OwogCiAgICAgYm9vbCByZXF1aXJlc1Njcm9sbExheWVyKFJvb3RMYXllckF0dGFjaG1l
bnQpIGNvbnN0OwogICAgIAo=
</data>
<flag name="review"
          id="64297"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73796</attachid>
            <date>2010-11-12 16:57:09 -0800</date>
            <delta_ts>2010-12-21 11:16:28 -0800</delta_ts>
            <desc>WebCore-EverythingElse</desc>
            <filename>NewFullScreen-Rev-2.EverythingElse.patch</filename>
            <type>text/plain</type>
            <size>4066</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgkocmV2aXNpb24gNjg5MjgpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDY3LDcgKzE0NjcsNiBAQCBfd2tTdXBwb3J0c011bHRpcGFydFhN
aXhlZFJlcGxhY2UKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQotX19aTjdXZWJDb3JlMTZI
VE1MTWVkaWFFbGVtZW50MTBzY3JlZW5SZWN0RXYKIF9fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxl
bWVudDEyZW5kU2NydWJiaW5nRXYKIF9fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDE0YmVn
aW5TY3J1YmJpbmdFdgogX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTRleGl0RnVsbHNj
cmVlbkV2CkBAIC0xNDk5LDYgKzE0OTgsMTYgQEAgX19aTjdXZWJDb3JlOERvY3VtZW50MzN3ZWJr
aXREaWRFeGl0RnVsbAogX19aTjdXZWJDb3JlOERvY3VtZW50MzR3ZWJraXREaWRFbnRlckZ1bGxT
Y3JlZW5Gb3JFbGVtZW50RVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZThEb2N1bWVudDM0d2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudEVQTlNfN0VsZW1lbnRFCiBfX1pON1dlYkNv
cmU4RG9jdW1lbnQzNXdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50RVBOU183RWxl
bWVudEUKK19fWk5LN1dlYkNvcmU4RG9jdW1lbnQ5ZG9tV2luZG93RXYKK19fWk5LN1dlYkNvcmUx
NkhUTUxNZWRpYUVsZW1lbnQ1ZW5kZWRFdgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVu
dDZwYXVzZWRFdgorX19aTjdXZWJDb3JlMTJTdHlsZUJveERhdGFDMUVSS1MwXworX19aTjdXZWJD
b3JlMTFSZW5kZXJTdHlsZTVjbG9uZUVQS1MwXworX19aTjdXZWJDb3JlN0VsZW1lbnQxMHNjcmVl
blJlY3RFdgorX19aTjdXZWJDb3JlOERvY3VtZW50MTJ1cGRhdGVMYXlvdXRFdgorX19aTks3V2Vi
Q29yZTROb2RlMTZ0cmF2ZXJzZU5leHROb2RlRVBLUzBfCitfX1pON1dlYkNvcmUxMVJlbmRlclN0
eWxlRDFFdgorX19aTjdXZWJDb3JlMTdTdHlsZVN1cnJvdW5kRGF0YUMxRVJLUzBfCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkluZGV4OiBXZWJDb3JlL2Nz
cy9mdWxsc2NyZWVuLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9mdWxsc2NyZWVuLmNz
cwkocmV2aXNpb24gNjg5MjgpCisrKyBXZWJDb3JlL2Nzcy9mdWxsc2NyZWVuLmNzcwkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5ICsxLDUgQEAKIDotd2Via2l0LWZ1bGwtc2NyZWVuIHsKLSAgICBwb3Np
dGlvbjpmaXhlZDsKLSAgICB0b3A6MDsKLSAgICBsZWZ0OjA7Ci0gICAgcmlnaHQ6MDsKLSAgICBi
b3R0b206MDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKIH0KIAogOnJvb3Q6ZnVsbC1z
Y3JlZW4tZG9jdW1lbnQ6bm90KDpmdWxsLXNjcmVlbikgewpAQCAtMTEsMTUgKzcsMTYgQEAKIH0K
IAogdmlkZW86LXdlYmtpdC1mdWxsLXNjcmVlbiB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgaGVp
Z2h0OiAxMDAlCi0gICAgaW1hZ2UtZml0OiBmaWxsOworICAgIGJhY2tncm91bmQtY29sb3I6IGJs
YWNrOworICAgIHdpZHRoOiBhdXRvOyAgIAorICAgIGhlaWdodDogMTAwJTsKKyAgICBtYXgtd2lk
dGg6IDEwMCU7CiB9CiAKIGltZzotd2Via2l0LWZ1bGwtc2NyZWVuIHsKLSAgICB3aWR0aDogMTAw
JTsKKyAgICB3aWR0aDogYXV0bzsgICAKICAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgaW1hZ2UtZml0
OiBmaWxsOworICAgIG1heC13aWR0aDogMTAwJTsKIH0KIAogdmlkZW86LXdlYmtpdC1mdWxsLXBh
Z2UtbWVkaWE6LXdlYmtpdC1mdWxsLXNjcmVlbjo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5l
bCB7CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNjg5MjgpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE2LDYgKzUxNiwxMyBAQCBQYXNzUmVmUHRyPENsaWVu
dFJlY3Q+IEVsZW1lbnQ6OmdldEJvdW5kCiAKICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRl
KHJlc3VsdCk7CiB9CisgICAgCitJbnRSZWN0IEVsZW1lbnQ6OnNjcmVlblJlY3QoKQoreworICAg
IGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4g
cmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihyZW5kZXJl
cigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKK30KIAogc3RhdGljIGlubGluZSBib29s
IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoY29uc3QgRWxlbWVudCogZSkKIHsKSW5kZXg6IFdl
YkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDY4OTI4KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0
TGlzdD4gZ2V0Q2xpZW50UmVjdHMoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPENsaWVudFJlY3Q+
IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OworICAgIEludFJlY3Qgc2NyZWVuUmVjdCgp
OwogCiAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDY4OTI4KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAwLDEzICsyMTAw
LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZvbHVtZURpZENoYQogICAgIHVwZGF0
ZVZvbHVtZSgpOwogfQogCi1JbnRSZWN0IEhUTUxNZWRpYUVsZW1lbnQ6OnNjcmVlblJlY3QoKQot
ewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBy
ZXR1cm4gcmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihy
ZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKLX0KLSAgICAKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAjaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgJKHJldmlzaW9uIDY4OTI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2lu
U2NydWJiaW5nKCk7CiAgICAgdm9pZCBlbmRTY3J1YmJpbmcoKTsKIAotICAgIEludFJlY3Qgc2Ny
ZWVuUmVjdCgpOwotCiAgICAgYm9vbCBjYW5QbGF5KCkgY29uc3Q7CiAKICAgICBmbG9hdCBwZXJj
ZW50TG9hZGVkKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73797</attachid>
            <date>2010-11-12 16:57:44 -0800</date>
            <delta_ts>2010-12-03 16:13:07 -0800</delta_ts>
            <desc>WebKit-WebFullScreenController</desc>
            <filename>NewFullScreen-Rev-2.WebFullscreenController.patch</filename>
            <type>text/plain</type>
            <size>41093</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gNzE5NTMpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMTEtMTIgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVt
ZW50IFdlYktpdCBGdWxsIFNjcmVlbiBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0ODEKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODI0
NzQ0NAorICAgICAgICAKKyAgICAgICAgQWRkIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcCxo
IHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisKIDIwMTAtMTEtMTIgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCkluZGV4OiBXZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzY2
LDYgKzM2Niw4IEBACiAJCUMwQzVCM0VFMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVu
dFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMwQzVCM0VDMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMEM1
QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBDNUIzRUQxMTc3QTRB
MDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5tbSAqLzsgfTsKIAkJQ0Q4RUFD
NzMxMUNBQzlBMzAwNzc0MDc1IC8qIElPS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEVBQzcyMTFDQUM5QTMwMDc3NDA3NSAv
KiBJT0tpdC5mcmFtZXdvcmsgKi87IH07CisJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBX
ZWJGdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxzY3JlZW5D
b250cm9sbGVyLmggKi87IH07CisJCUNEQTYyQUUzMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxs
c2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsc2NyZWVuQ29udHJv
bGxlci5tbSAqLzsgfTsKIAkJREQ3Q0RFRTcwQTIzQkE5RTAwMDY5OTI4IC8qIFdlYlR5cGVzSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERE
N0NERUU2MEEyM0JBOUUwMDA2OTkyOCAvKiBXZWJUeXBlc0ludGVybmFsLmggKi87IH07CiAJCURE
ODk2ODIwMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQ4OTY4MUUwOUFBODcyNDAw
OTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5LmggKi87IH07CiAJCUREODk2ODIxMDlBQTg3
MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREODk2ODFGMDlBQTg3MjQwMDk3RTdGMCAvKiBX
ZWJFbGVtZW50RGljdGlvbmFyeS5tbSAqLzsgfTsKQEAgLTY5MCw2ICs2OTIsOCBAQAogCQlDMEM1
QjNFQzExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEM1QjNFRDExNzdBNEEwMDAyQjBBRUYgLyog
V2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRDhFQUM3MjExQ0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3b3Jr
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBl
ci5mcmFtZXdvcms7IG5hbWUgPSBJT0tpdC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CisJCUNEQTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsc2NyZWVuQ29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGdWxsc2NyZWVuQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREE2MkFFMTEyNUY4N0MyMDA3
RkQxMTggLyogV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQ3Q0RFRTYwQTIzQkE5RTAwMDY5OTI4IC8qIFdlYlR5cGVz
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVHlwZXNJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDg5NjgxRTA5QUE4NzI0MDA5
N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFbGVtZW50RGljdGlvbmFyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJREQ4OTY4
MUYwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFbGVtZW50
RGljdGlvbmFyeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CkBAIC0xMTkzLDYgKzExOTcsOCBAQAogCQkJCTUxQThCNTJGMDQyODJCNTkw
MENBMkQzQSAvKiBXZWJGcmFtZVZpZXcubW0gKi8sCiAJCQkJNTFBOEI1MzIwNDI4MkJEMjAwQ0Ey
RDNBIC8qIFdlYkZyYW1lVmlld0ludGVybmFsLmggKi8sCiAJCQkJOTNDNkYxNDUwNzkyMEI5MzAw
MjQ0OUNEIC8qIFdlYkZyYW1lVmlld1ByaXZhdGUuaCAqLywKKwkJCQlDREE2MkFFMDEyNUY4N0My
MDA3RkQxMTggLyogV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKKwkJCQlDREE2MkFFMTEy
NUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCiAJCQkJQkM3
Rjg4OUMxMEM5RDMwQzAwRDYxMzNEIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLywKIAkJ
CQlCQzdGODg5RDEwQzlEMzBDMDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5tbSAq
LywKIAkJCQlCQzdGODhBNDEwQzlEODhCMDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlv
bkludGVybmFsLmggKi8sCkBAIC0xNjMzLDYgKzE2MzksNyBAQAogCQkJCTU5OEFEOTJBMTIwMUNG
M0IwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9ja0ludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1OThBREE0NjEyMDIyNzUwMDBBQkFFNEUgLyogV2ViRGV2aWNl
T3JpZW50YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFMkExQTQxMjNCMEIz
QzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RB
NjJBRTIxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTIwMDAsNiArMjAwNyw3IEBACiAJCQkJNTk4QUQ5MjIxMjAxQ0YxMDAwQUJB
RTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTk4QUQ5
MjgxMjAxQ0YzMjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMkExQTUxMjNCMEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hi
b2FyZFJlZ2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQTYyQUUzMTI1Rjg3QzIwMDdGRDEx
OCAvKiBXZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDcxOTUzKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw1MSBAQAorMjAxMC0xMS0xMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnQgV2ViS2l0IEZ1bGwgU2NyZWVuIHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ4MQorICAgICAgICByZGFyOi8vcHJvYmxlbS84
MjQ3NDQ0CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIEZ1bGxT
Y3JlZW4gQVBJcyB1c2luZyB0aGUgbmV3IFJlbmRlckZ1bGxTY3JlZW4gcmVuZGVyZXIgYW5kIHRo
ZSBuZXcKKyAgICAgICAgRG9jdW1lbnQgY2xpZW50IEFQSXMuICBUaGUgUmVuZGVyRnVsbFNjcmVl
biByZW5kZXJlcidzIENBTGF5ZXIgaXMgaG9zdGVkIGluIGEgbmV3LCBmdWxsc2NyZWVuCisgICAg
ICAgIHdpbmRvdywgYW5kIGEgY3VzdG9tIENBQW5pbWF0aW9uIGFuaW1hdGVzIHRoYXQgbGF5ZXIg
YmV0d2VlbiB0aGUgaW5pdGlhbCBzY3JlZW4gcmVjdCBvZiB0aGUgZnVsbAorICAgICAgICBzY3Jl
ZW4gZWxlbWVudCwgdG8gaXRzIGZpbmFsIHZhbHVlLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c0Z1bGxTY3JlZW5G
b3JFbGVtZW50KTogSWYgdGhlIGRlbGVnYXRlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBtZXRob2QK
KyAgICAgICAgICAgIGluc3RlYWQgYWxsb3cgV2ViVmlldyB0byBwcm92aWRlIGEgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6ZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZCk6IERpdHRvLgorICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfc3VwcG9ydHNG
dWxsU2NyZWVuRm9yRWxlbWVudDpXZWJDb3JlOjpdKTogQ2hlY2sgdG8gc2VlIGlmIHRoZSBmdWxs
c2NyZWVuIHByZWYgaGFzIGJlZW4gZW5hYmxlZC4KKyAgICAgICAgKC1bV2ViVmlldyBfZW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudDpXZWJDb3JlOjpdKTogQ3JlYXRlIGEgV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXIuCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRGdWxsU2NyZWVuRm9yRWxlbWVudDpX
ZWJDb3JlOjpdKTogUmVxdWVzdCB0aGF0IHRoZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBleGl0
IGZ1bGxzY3JlZW4uCisgICAgICAgICgtW1dlYlZpZXcgX2Z1bGxTY3JlZW5SZW5kZXJlckNoYW5n
ZWQ6V2ViQ29yZTo6XSk6IE5vdGlmeSB0aGUgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgdGhhdCBp
dHMgcmVuZGVyZXIgaGFzIGNoYW5nZWQuCisgICAgICAgICogV2ViVmlldy9XZWJGdWxsc2NyZWVu
Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250
cm9sbGVyLm1tOiBBZGRlZC4gIENvcGllZCBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgYW5kIG1vZGlmaWVkLgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuQ29udHJvbGxlciBzZXRF
bGVtZW50Ol0pOiAgQWRkIGxpc3RlbmVycyBmb3IgbWVkaWEgZXZlbnRzIHRvIHRoZSBlbGVtZW50
J3Mgd2luZG93LgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuQ29udHJvbGxlciB3aW5kb3dEaWRF
eGl0RnVsbHNjcmVlbjpdKToKKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgd2lu
ZG93RGlkRW50ZXJGdWxsc2NyZWVuOl0pOgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuQ29udHJv
bGxlciBlbnRlckZ1bGxzY3JlZW46XSk6CisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5Db250cm9s
bGVyIGV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5Db250cm9sbGVy
IF91cGRhdGVQb3dlckFzc2VydGlvbnNdKTogVXNlIF9pc0FueU1vdmllUGxheWluZyB0byBkZXRl
cm1pbmUgd2hpY2ggYXNzZXJ0aW9ucyB0byBzZXQuCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5D
b250cm9sbGVyIF9pc0FueU1vdmllUGxheWluZ10pOiBXYWxrIHRocm91Z2ggdGhlIF9lbGVtZW50
IGFuZCBpdHMgY2hpbGRyZW4gbG9va2luZyBmb3IgCisgICAgICAgICAgICBtZWRpYSBlbGVtZW50
cywgYW5kIGlmIGZvdW5kLCBjaGVjayB0aGVpciBwbGF5IHN0YXRlLgorICAgICAgICAoLVtXZWJG
dWxsc2NyZWVuQ29udHJvbGxlciBfZnVsbHNjcmVlbldpbmRvd10pOiBDb252ZW5pZW5jZSBmdW5j
dGlvbi4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgX2RvY3VtZW50XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuQ29udHJvbGxlciBfYW5pbWF0aW9uRHVyYXRp
b25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5XaW5kb3cgaW5pdFdpdGhDb250
ZW50UmVjdDpzdHlsZU1hc2s6YmFja2luZzpkZWZlcjpdKTogV2luZG93IGlzIG5vdCBtb3ZhYmxl
LCBhbmQgY3JlYXRlcyAKKyAgICAgICAgICAgIHRoZSBiYWNrZ3JvdW5kIGxheWVyLgorICAgICAg
ICAoLVtXZWJGdWxsc2NyZWVuV2luZG93IGtleURvd246XSk6IEhhbmRsZSB0aGUgJ0VzYycga2V5
LgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuV2luZG93IGNhbmNlbE9wZXJhdGlvbjpdKTogUmVx
dWVzdCB0byBleGl0IGZ1bGxzY3JlZW4uCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5XaW5kb3cg
cmVuZGVyZXJMYXllcl0pOiBDb252ZW5pZW5jZSBhY2Nlc3Nvci4KKyAgICAgICAgKC1bV2ViRnVs
bHNjcmVlbldpbmRvdyBzZXRSZW5kZXJlckxheWVyOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
RnVsbHNjcmVlbldpbmRvdyBiYWNrZ3JvdW5kTGF5ZXJdKTogRGl0dG8uCisgICAgICAgIChNZWRp
YUV2ZW50TGlzdGVuZXI6Ok1lZGlhRXZlbnRMaXN0ZW5lcik6IEltcGxlbWVudHMgdGhlIEV2ZW50
TGlzdGVuZXIgcHJvdG9jb2wuCisgICAgICAgIChNZWRpYUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KTogVGVsbHMgaXRzIGRlbGVnYXRlIHRvIF91cGRhdGVQb3dlckFzc2VydGlvbnMuCisKIDIw
MTAtMTEtMTIgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworI2ltcG9y
dCA8d3RmL1JlZlB0ci5oPgorCitAY2xhc3MgV2ViV2luZG93RmFkZUFuaW1hdGlvbjsKK0BjbGFz
cyBXZWJWaWV3OworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAg
Y2xhc3MgUmVuZGVyQm94OworICAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7Cit9CisKK0BpbnRlcmZh
Y2UgV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgeworQHByaXZh
dGUKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gX2VsZW1lbnQ7IC8vIChyZXRhaW4pCisg
ICAgV2ViQ29yZTo6UmVuZGVyQm94KiBfcmVuZGVyZXI7IC8vIChzZXQpCisgICAgUmVmUHRyPFdl
YkNvcmU6OkVsZW1lbnQ+IF9yZXBsYWNlbWVudEVsZW1lbnQ7IC8vIChyZXRhaW4pCisgICAgTlNX
aW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsgLy8gKHJldGFpbikKKyAgICBXZWJX
aW5kb3dGYWRlQW5pbWF0aW9uICpfZmFkZUFuaW1hdGlvbjsgLy8gKHJldGFpbikKKyAgICBXZWJW
aWV3ICpfd2ViVmlldzsKKyAgICBDQUxheWVyKiBfcmVuZGVyZXJMYXllcjsKKyAgICBDQUxheWVy
KiBfYmFja2dyb3VuZExheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudExpc3RlbmVyPiBf
bWVkaWFFdmVudExpc3RlbmVyOyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNBbmltYXRpbmc7
CisgICAgQk9PTCBfaXNGdWxsc2NyZWVuOworICAgIEJPT0wgX2lzV2luZG93TG9hZGVkOworICAg
IEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKyAgICBCT09MIF9pc1BsYXlpbmc7CisgICAg
dWludDMyX3QgX2lkbGVEaXNwbGF5U2xlZXBBc3NlcnRpb247CisgICAgdWludDMyX3QgX2lkbGVT
eXN0ZW1TbGVlcEFzc2VydGlvbjsKKyAgICBOU1RpbWVyICpfdGlja2xlVGltZXI7CisgICAgU3lz
dGVtVUlNb2RlIF9zYXZlZFVJTW9kZTsKKyAgICBTeXN0ZW1VSU9wdGlvbnMgX3NhdmVkVUlPcHRp
b25zOworICAgIENHUmVjdCBfaW5pdGlhbEZyYW1lOworfQorCistIChXZWJWaWV3Kil3ZWJWaWV3
OworLSAodm9pZClzZXRXZWJWaWV3OihXZWJWaWV3Kil3ZWJWaWV3OworCistICh2b2lkKXNldEVs
ZW1lbnQ6KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4pZWxlbWVudDsKKy0gKFdlYkNvcmU6
OkVsZW1lbnQqKWVsZW1lbnQ7CisKKy0gKHZvaWQpc2V0UmVuZGVyZXI6KFdlYkNvcmU6OlJlbmRl
ckJveCopcmVuZGVyZXI7CistIChXZWJDb3JlOjpSZW5kZXJCb3gqKXJlbmRlcmVyOworCistICh2
b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lkKWV4aXRGdWxs
c2NyZWVuOworCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyLm1tCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyLm1t
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisKKyNpbXBvcnQgIldlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmgiCisK
KyNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViV2luZG93QW5p
bWF0aW9uLmgiCisjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPElPS2l0L3B3
cl9tZ3QvSU9QTUxpYi5oPgorI2ltcG9ydCA8V2ViQ29yZS9BbmltYXRpb25MaXN0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0NTU1Byb3BlcnR5TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRE9NRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RE9NRG9jdW1lbnRJbnRlcm5hbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9ET01IVE1MRWxlbWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9ET01XaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRM
aXN0ZW5lci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0hUTUxFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZUxpc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExp
bmtpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxvY2suaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+
CisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFt
Lmg+CisKK3N0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCB0aWNrbGVUaW1lckludGVydmFsID0g
MS4wOworc3RhdGljIGNvbnN0IE5TU3RyaW5nKiBpc0Z1bGxzY3JlZW5LZXkgPSBAImlzRnVsbHNj
cmVlbiI7CisKK3VzaW5nIFdlYkNvcmU6OkFuaW1hdGlvbkxpc3Q7Cit1c2luZyBXZWJDb3JlOjpB
bmltYXRpb247Cit1c2luZyBXZWJDb3JlOjpET01XaW5kb3c7Cit1c2luZyBXZWJDb3JlOjpEb2N1
bWVudDsKK3VzaW5nIFdlYkNvcmU6OkVsZW1lbnQ7Cit1c2luZyBXZWJDb3JlOjpFdmVudDsKK3Vz
aW5nIFdlYkNvcmU6OkV2ZW50TGlzdGVuZXI7Cit1c2luZyBXZWJDb3JlOjpFdmVudE5hbWVzOwor
dXNpbmcgV2ViQ29yZTo6RmxvYXRSZWN0OwordXNpbmcgV2ViQ29yZTo6RmxvYXRTaXplOwordXNp
bmcgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjsKK3VzaW5nIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ7Cit1c2luZyBXZWJDb3JlOjpIVE1MTmFtZXM6OnZpZGVvVGFnOwordXNpbmcgV2ViQ29yZTo6
TGVuZ3RoOwordXNpbmcgV2ViQ29yZTo6TGVuZ3RoVHlwZTsKK3VzaW5nIFdlYkNvcmU6Ok5vZGU7
Cit1c2luZyBXZWJDb3JlOjpOb2RlTGlzdDsKK3VzaW5nIFdlYkNvcmU6OlJlbmRlckJsb2NrOwor
dXNpbmcgV2ViQ29yZTo6UmVuZGVyQm94OwordXNpbmcgV2ViQ29yZTo6UmVuZGVyRnVsbFNjcmVl
bjsKK3VzaW5nIFdlYkNvcmU6OlJlbmRlckxheWVyOwordXNpbmcgV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOwordXNpbmcgV2ViQ29yZTo6UmVuZGVyT2JqZWN0OwordXNpbmcgV2ViQ29yZTo6
UmVuZGVyU3R5bGU7Cit1c2luZyBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitA
aW50ZXJmYWNlIFdlYkZ1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdworI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorPE5TQW5p
bWF0aW9uRGVsZWdhdGU+CisjZW5kaWYKK3sKKyAgICBDQUxheWVyKiBfcmVuZGVyZXJMYXllcjsK
KyAgICBDQUxheWVyKiBfYmFja2dyb3VuZExheWVyOworfQorLSAoQ0FMYXllciopcmVuZGVyZXJM
YXllcjsKKy0gKHZvaWQpc2V0UmVuZGVyZXJMYXllcjooQ0FMYXllciopcmVuZGVyZXJMYXllcjsK
Ky0gKENBTGF5ZXIqKWJhY2tncm91bmRMYXllcjsKK0BlbmQKKworY2xhc3MgTWVkaWFFdmVudExp
c3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1lZGlhRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKFdlYkZ1bGxzY3JlZW5Db250cm9sbGVy
KiBkZWxlZ2F0ZSk7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0
ZW5lciYpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgRXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUV2ZW50TGlzdGVuZXIoV2ViRnVs
bHNjcmVlbkNvbnRyb2xsZXIqIGRlbGVnYXRlKTsgCisgICAgV2ViRnVsbHNjcmVlbkNvbnRyb2xs
ZXIqIGRlbGVnYXRlOworfTsKKworQGludGVyZmFjZSBXZWJGdWxsc2NyZWVuQ29udHJvbGxlcigp
CistICh2b2lkKV9yZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOihCT09MKWFuaW1h
dGlvbjsKKy0gKHZvaWQpX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbjsKKy0gKHZvaWQp
X3VwZGF0ZVBvd2VyQXNzZXJ0aW9uczsKKy0gKFdlYkZ1bGxzY3JlZW5XaW5kb3cgKilfZnVsbHNj
cmVlbldpbmRvdzsKKy0gKERvY3VtZW50KilfZG9jdW1lbnQ7CistIChDRlRpbWVJbnRlcnZhbClf
YW5pbWF0aW9uRHVyYXRpb247CistIChCT09MKV9pc0FueU1vdmllUGxheWluZzsKK0BlbmQKKwor
QGludGVyZmFjZSBOU1dpbmRvdyhJc09uQWN0aXZlU3BhY2VBZGRpdGlvbkZvclRpZ2VyQW5kTGVv
cGFyZCkKKy0gKEJPT0wpaXNPbkFjdGl2ZVNwYWNlOworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJ
bml0aWFsaXphdGlvbgorLSAoaWQpaW5pdAoreworICAgIC8vIERvIG5vdCBkZWZlciB3aW5kb3cg
Y3JlYXRpb24sIHRvIG1ha2Ugc3VyZSAtd2luZG93TnVtYmVyIGlzIGNyZWF0ZWQgKG5lZWRlZCBi
eSBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbikuCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2Vi
RnVsbHNjcmVlbldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0
eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZm
ZXJlZCBkZWZlcjpOT107CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpbmRvdzp3aW5kb3dd
OworICAgIFt3aW5kb3cgcmVsZWFzZV07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIFtzZWxmIHdpbmRvd0RpZExvYWRdOworICAgIF9tZWRpYUV2ZW50TGlzdGVuZXIg
PSBNZWRpYUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKKyAg
ICAKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW190aWNrbGVUaW1lciBpbnZhbGlkYXRl
XTsKKyAgICBbX3RpY2tsZVRpbWVyIHJlbGVhc2VdOworICAgIF90aWNrbGVUaW1lciA9IG5pbDsK
KyAgICAKKyAgICBbc2VsZiBzZXRXZWJWaWV3Om5pbF07CisgICAgCisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpd2luZG93RGlkTG9hZAoreworI2lmZGVmIEJVSUxE
SU5HX09OX1RJR0VSCisgICAgLy8gV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgaXMgbm90IHN1cHBv
cnRlZCBvbiBUaWdlcjoKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlCisgICAgCisg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTopIG5hbWU6TlNB
cHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOikg
bmFtZTpOU0FwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyc05vdGlmaWNhdGlvbiBv
YmplY3Q6TlNBcHBdOworI2VuZGlmCit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsg
QWNjZXNzb3JzCisKKy0gKFdlYlZpZXcqKXdlYlZpZXcKK3sKKyAgICByZXR1cm4gX3dlYlZpZXc7
Cit9CisKKy0gKHZvaWQpc2V0V2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBbd2Vi
VmlldyByZXRhaW5dOworICAgIFtfd2ViVmlldyByZWxlYXNlXTsKKyAgICBfd2ViVmlldyA9IHdl
YlZpZXc7Cit9CisKKy0gKEVsZW1lbnQqKWVsZW1lbnQKK3sKKyAgICByZXR1cm4gX2VsZW1lbnQu
Z2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RWxlbWVudDooUGFzc1JlZlB0cjxFbGVtZW50PillbGVt
ZW50Cit7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBXZWJGdWxsc2NyZWVuQ29u
dHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFRpZ2VyOgorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2Vsc2UKKyAgICBFdmVudE5hbWVzJiBldmVudE5hbWVzID0gV2ViQ29yZTo6ZXZlbnRO
YW1lcygpOworICAgIAorICAgIGlmIChfZWxlbWVudCkgeworICAgICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IF9lbGVtZW50LT5kb2N1bWVudCgpLT5kb21XaW5kb3coKTsKKyAgICAgICAgaWYgKHdp
bmRvdykgeworICAgICAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMucGxheUV2ZW50LCAgX21lZGlhRXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICB3aW5kb3ctPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wYXVzZUV2ZW50LCBf
bWVkaWFFdmVudExpc3RlbmVyLmdldCgpLCB0cnVlKTsKKyAgICAgICAgICAgIHdpbmRvdy0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLmVuZGVkRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVu
ZXIuZ2V0KCksIHRydWUpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBfZWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgCisgICAgaWYgKF9lbGVtZW50KSB7CisgICAgICAgIERPTVdpbmRv
dyogd2luZG93ID0gX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpOworICAgICAgICBp
ZiAod2luZG93KSB7CisgICAgICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcy5wbGF5RXZlbnQsICBfbWVkaWFFdmVudExpc3RlbmVyLCB0cnVlKTsKKyAgICAgICAgICAg
IHdpbmRvdy0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQsIF9tZWRpYUV2
ZW50TGlzdGVuZXIsIHRydWUpOworICAgICAgICAgICAgd2luZG93LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMuZW5kZWRFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKK30KKworLSAoUmVuZGVyQm94KilyZW5kZXJlciAKK3sKKyAg
ICByZXR1cm4gX3JlbmRlcmVyOworfQorCistICh2b2lkKXNldFJlbmRlcmVyOihSZW5kZXJCb3gq
KXJlbmRlcmVyCit7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBXZWJGdWxsc2Ny
ZWVuQ29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFRpZ2VyOgorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2Vsc2UKKyAgICBfcmVuZGVyZXIgPSByZW5kZXJlcjsKKyNlbmRpZgorfQor
CisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE5vdGlmaWNhdGlvbnMKKworLSAodm9pZCl3
aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjooQk9PTClmaW5pc2hlZAoreworICAgIGlmICghX2lzQW5p
bWF0aW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKF9pc0Z1bGxzY3JlZW4pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CisgICAg
QVNTRVJUKF9lbGVtZW50KTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIF9lbGVtZW50ID0gMDsKKwor
ICAgIGlmIChmaW5pc2hlZCkgeworICAgICAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JG
dWxsc2NyZWVuXTsgICAKKyAgICAgICAgW3NlbGYgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Cisg
ICAgICAgIAorICAgICAgICBbW193ZWJWaWV3IHdpbmRvd10gZGlzcGxheV07CisgICAgICAgIFtb
c2VsZiBfZnVsbHNjcmVlbldpbmRvd10gc2V0UmVuZGVyZXJMYXllcjpuaWxdOworICAgICAgICBb
W3NlbGYgd2luZG93XSBjbG9zZV07CisgICAgfQorCisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVz
KCk7CisKKyAgICBfaXNBbmltYXRpbmcgPSBOTzsKKyAgICBbc2VsZiBhdXRvcmVsZWFzZV07IC8v
IEFzc29jaWF0ZWQgLXJldGFpbiBpcyBpbiAtZXhpdEZ1bGxzY3JlZW4uCit9CisKKy0gKHZvaWQp
d2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOihCT09MKWZpbmlzaGVkCit7CisgICAgaWYgKCFfaXNB
bmltYXRpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIV9pc0Z1bGxzY3JlZW4p
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRF
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAKKyAgICBpZiAo
ZmluaXNoZWQpIHsKKyAgICAgICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVl
bl07CisgICAgICAgIFtzZWxmIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOworICAgICAgICBbTlND
dXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllFU107CisgICAgICAgIFtbW3NlbGYgd2Vi
Vmlld10gd2luZG93XSBvcmRlck91dDpzZWxmXTsKKyAgICB9CisKKyAgICBfaXNBbmltYXRpbmcg
PSBOTzsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRTdG9wOihDQUFuaW1hdGlvbiAqKWFuaW0g
ZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQKK3sKKyAgICBCT09MIGlzRnVsbHNjcmVlbkFuaW1hdGlv
biA9IFtbYW5pbSB2YWx1ZUZvcktleTppc0Z1bGxzY3JlZW5LZXldIGJvb2xWYWx1ZV07CisgICAg
CisgICAgaWYgKCFpc0Z1bGxzY3JlZW5BbmltYXRpb24pCisgICAgICAgIFtzZWxmIHdpbmRvd0Rp
ZEV4aXRGdWxsc2NyZWVuOmZpbmlzaGVkXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHdpbmRv
d0RpZEVudGVyRnVsbHNjcmVlbjpmaW5pc2hlZF07Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25E
aWRSZXNpZ25BY3RpdmU6KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb24KK3sgICAKKyAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhlIGZ1bGxzY3JlZW5XaW5kb3cgaXMgb24gdGhlIGFjdGl2ZSBz
cGFjZTsgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUKKyAgICAvLyBvbiAxMC42IGFuZCBsYXRl
ciwgc28gZGVmYXVsdCB0byBZRVMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGU6Cisg
ICAgTlNXaW5kb3cqIGZ1bGxzY3JlZW5XaW5kb3cgPSBbc2VsZiBfZnVsbHNjcmVlbldpbmRvd107
CisgICAgQk9PTCBpc09uQWN0aXZlU3BhY2UgPSAoW2Z1bGxzY3JlZW5XaW5kb3cgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihpc09uQWN0aXZlU3BhY2UpXSA/IFtmdWxsc2NyZWVuV2luZG93
IGlzT25BY3RpdmVTcGFjZV0gOiBZRVMpOworCisgICAgLy8gUmVwbGljYXRlIHRoZSBRdWlja1Rp
bWUgUGxheWVyIChYKSBiZWhhdmlvciB3aGVuIGxvc2luZyBhY3RpdmUgYXBwbGljYXRpb24gc3Rh
dHVzOgorICAgIC8vIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiB0aGUgbWFpbiBzY3JlZW4/IChO
b3RlOiB0aGlzIGNvdmVycyB0aGUgY2FzZSB3aGVyZSBvbmx5IGEgCisgICAgLy8gc2luZ2xlIHNj
cmVlbiBpcyBhdmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJy
ZW50IHNwYWNlPyBJRkYgc28sIAorICAgIC8vIHRoZW4gZXhpdCBmdWxsc2NyZWVuIG1vZGUuICAg
IAorICAgIGlmIChbZnVsbHNjcmVlbldpbmRvdyBzY3JlZW5dID09IFtbTlNTY3JlZW4gc2NyZWVu
c10gb2JqZWN0QXRJbmRleDowXSAmJiBpc09uQWN0aXZlU3BhY2UpCisgICAgICAgICBbc2VsZiBf
cmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9CisKKy0gKHZvaWQpYXBw
bGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOihOU05vdGlmaWNhdGlvbiopbm90aWZp
Y2F0aW9uCit7CisgICAgLy8gVGhlIHVzZXIgbWF5IGhhdmUgY2hhbmdlZCB0aGUgbWFpbiBzY3Jl
ZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkCisgICAg
Ly8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5IG1heSBoYXZlIGNoYW5nZWQg
dGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gIAorICAgIC8vIFVwZGF0ZSBvdXIg
cHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1cmUgdGhhdCB0aGUgZnVsbCBzY3JlZW4g
d2luZG93IG9jY3VwaWVzIHRoZSAKKyAgICAvLyBlbnRpcmUgc2NyZWVuOgorICAgIFtzZWxmIF91
cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOworICAgIFtbc2VsZiB3aW5kb3ddIHNldEZy
YW1lOltbW3NlbGYgd2luZG93XSBzY3JlZW5dIGZyYW1lXSBkaXNwbGF5OllFU107Cit9CisKKyNw
cmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UKKworLSAodm9pZCll
bnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCit7CisgICAgaWYgKF9pc0Z1bGxzY3Jl
ZW4pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoX2lzQW5pbWF0aW5nKSB7CisgICAg
ICAgIC8vIFRoZSBDQUFuaW1hdGlvbiBkZWxlZ2F0ZSBmdW5jdGlvbnMgd2lsbCBvbmx5IGJlIGNh
bGxlZCB0aGUKKyAgICAgICAgLy8gbmV4dCB0cmlwIHRocm91Z2ggdGhlIHJ1bi1sb29wLCBzbyBt
YW51YWxseSBjYWxsIHRoZSBkZWxlZ2F0ZQorICAgICAgICAvLyBmdW5jdGlvbiBoZXJlLCBsZXR0
aW5nIGl0IGtub3cgdGhlIGFuaW1hdGlvbiBkaWQgbm90IGNvbXBsZXRlOgorICAgICAgICBbc2Vs
ZiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjpOT107CisgICAgICAgIEFTU0VSVCghX2lzQW5pbWF0
aW5nKTsKKyAgICB9CisgICAgX2lzRnVsbHNjcmVlbiA9IFlFUzsKKyAgICBfaXNBbmltYXRpbmcg
PSBZRVM7CisgICAgCisgICAgLy8gc2V0RWxlbWVudDogbXVzdCBiZSBjYWxsZWQgd2l0aCBhIG5v
bi1uaWwgdmFsdWUgYmVmb3JlIGNhbGxpbmcgZW50ZXJGdWxsc2NyZWVuOi4KKyAgICBBU1NFUlQo
X2VsZW1lbnQpOworICAgIAorICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKKyAgICAKKyAg
ICBpZiAoIXNjcmVlbikKKyAgICAgICAgc2NyZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5dOwor
ICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtzY3JlZW4gZnJhbWVdOworICAgIAorICAgIFdlYlZp
ZXcqIHdlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKKyAgICBOU1JlY3Qgd2ViVmlld0ZyYW1lID0g
W3dlYlZpZXcgY29udmVydFJlY3RUb0Jhc2U6W3dlYlZpZXcgZnJhbWVdXTsKKyAgICB3ZWJWaWV3
RnJhbWUub3JpZ2luID0gW1t3ZWJWaWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjp3ZWJW
aWV3RnJhbWUub3JpZ2luXTsKKyAgICAKKyAgICBOU1JlY3QgZWxlbWVudEZyYW1lID0gX2VsZW1l
bnQtPnNjcmVlblJlY3QoKTsKKyAgICAKKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIG11bHRpLW1v
bml0b3Igc2V0dXAgd2hlcmUgdGhlIHdlYlZpZXcgc3RyYWRkbGVzIHR3bworICAgIC8vIG1vbml0
b3JzLCB3ZSBtdXN0IGNyZWF0ZSBhIHdpbmRvdyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUg
ZGVzdGluYXRpb24KKyAgICAvLyBmcmFtZSBhbmQgdGhlIGluaXRpYWwgZnJhbWUuCisgICAgW1tz
ZWxmIHdpbmRvd10gc2V0RnJhbWU6TlNVbmlvblJlY3Qoc2NyZWVuRnJhbWUsIGVsZW1lbnRGcmFt
ZSkgZGlzcGxheTpZRVNdOworICAgIAorICAgIE5TVmlldyogY29udGVudFZpZXcgPSBbW3NlbGYg
d2luZG93XSBjb250ZW50Vmlld107CisgICAgTlNSZWN0IHZpZXdCb3VuZHMgPSBbY29udGVudFZp
ZXcgYm91bmRzXTsKKyAgICAKKyAgICBOU1JlY3QgYmFja2dyb3VuZEJvdW5kcyA9IHtbW3NlbGYg
d2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnNjcmVlbkZyYW1lLm9yaWdpbl0sIHNjcmVlbkZy
YW1lLnNpemV9OworICAgIGJhY2tncm91bmRCb3VuZHMgPSBbY29udGVudFZpZXcgY29udmVydFJl
Y3RGcm9tQmFzZTpiYWNrZ3JvdW5kQm91bmRzXTsKKyAgICAKKyAgICAvLyBTZXQgb3VyIGZ1bGxz
Y3JlZW4gZWxlbWVudCdzIGluaXRpYWwgZnJhbWUsIGFuZCBmbGlwIHRoZSBjb29yZGluYXRlIHN5
c3RlbXMgZnJvbQorICAgIC8vIHNjcmVlbiBjb29yZGluYXRlcyAoYm90dG9tL2xlZnQpIHRvIGxh
eWVyIGNvb3JkaW5hdGVzICh0b3AvbGVmdCk6CisgICAgX2luaXRpYWxGcmFtZSA9IE5TUmVjdFRv
Q0dSZWN0KE5TSW50ZXJzZWN0aW9uUmVjdChlbGVtZW50RnJhbWUsIHdlYlZpZXdGcmFtZSkpOwor
ICAgIF9pbml0aWFsRnJhbWUub3JpZ2luLnkgPSB2aWV3Qm91bmRzLnNpemUuaGVpZ2h0IC0gQ0dS
ZWN0R2V0TWF4WShfaW5pdGlhbEZyYW1lKTsKKyAgICAKKyAgICAvLyBJbmZvcm0gdGhlIGRvY3Vt
ZW50IHRoYXQgd2Ugd2lsbCBiZWdpbiBlbnRlcmluZyBmdWxsIHNjcmVlbi4gIFRoaXMgd2lsbCBj
aGFuZ2UKKyAgICAvLyBwc2V1ZG8tY2xhc3NlcyBvbiB0aGUgZnVsbHNjcmVlbiBlbGVtZW50IGFu
ZCB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBbc2VsZiBf
ZG9jdW1lbnRdOworICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxl
bWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgCisgICAgLy8gU2V0IHVwIHRoZSBmaW5hbCBzdHls
ZSBvZiB0aGUgRnVsbFNjcmVlbiByZW5kZXIgYmxvY2suICBTZXQgYW4gYWJzb2x1dGUKKyAgICAv
LyB3aWR0aCBhbmQgaGVpZ2h0IGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4sIGFuZCBh
bmNob3IgdGhlIGxheWVyCisgICAgLy8gYXQgdGhlIHRvcCwgbGVmdCBhdCAoMCwwKS4gIFRoZSBS
ZW5kZXJGdWxsU2NyZWVuIHN0eWxlIGlzIGFscmVhZHkgc2V0IAorICAgIC8vIHRvIHBvc2l0aW9u
OmZpeGVkLgorICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lKF9yZW5kZXJlci0+c3R5bGUoKSk7CisgICAgbmV3U3R5bGUtPnNldFdpZHRoKExl
bmd0aCgoaW50KXNjcmVlbkZyYW1lLnNpemUud2lkdGgsIFdlYkNvcmU6OkZpeGVkKSk7CisgICAg
bmV3U3R5bGUtPnNldEhlaWdodChMZW5ndGgoKGludClzY3JlZW5GcmFtZS5zaXplLmhlaWdodCwg
V2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0VG9wKExlbmd0aCgwLCBXZWJDb3Jl
OjpGaXhlZCkpOworICAgIG5ld1N0eWxlLT5zZXRMZWZ0KExlbmd0aCgwLCBXZWJDb3JlOjpGaXhl
ZCkpOworICAgIF9yZW5kZXJlci0+c2V0U3R5bGUobmV3U3R5bGUpOworICAgIAorICAgIC8vIENh
dXNlIHRoZSBkb2N1bWVudCB0byBsYXlvdXQsIHRodXMgY2FsY3VsYXRpbmcgYSBuZXcgZnVsbHNj
cmVlbiBlbGVtZW50IHNpemU6CisgICAgW3NlbGYgX2RvY3VtZW50XS0+dXBkYXRlTGF5b3V0KCk7
CisgICAgCisgICAgUmVuZGVyQm94KiBjaGlsZFJlbmRlcmVyID0gX3JlbmRlcmVyLT5maXJzdENo
aWxkQm94KCk7CisgICAgQ0dSZWN0IGRlc3RpbmF0aW9uRnJhbWUgPSBDR1JlY3RNYWtlKGNoaWxk
UmVuZGVyZXItPngoKSwgY2hpbGRSZW5kZXJlci0+eSgpLCBjaGlsZFJlbmRlcmVyLT53aWR0aCgp
LCBjaGlsZFJlbmRlcmVyLT5oZWlnaHQoKSk7CisgICAgCisgICAgLy8gU29tZSBwcm9wZXJ0aWVz
IGhhdmVuJ3QgcHJvcG9nYXRlZCBmcm9tIHRoZSBHcmFwaGljc0xheWVyIHRvIHRoZSBDQUxheWVy
IHlldC4gIFNvCisgICAgLy8gdGVsbCB0aGUgcmVuZGVyZXIncyBsYXllciB0byBzeW5jIGl0J3Mg
Y29tcG9zaXRpbmcgc3RhdGU6CisgICAgR3JhcGhpY3NMYXllciogcmVuZGVyZXJHcmFwaGljcyA9
IF9yZW5kZXJlci0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7CisgICAgcmVu
ZGVyZXJHcmFwaGljcy0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsgICAgCisKKyAgICBDQUxheWVy
KiByZW5kZXJlckxheWVyID0gcmVuZGVyZXJHcmFwaGljcy0+cGxhdGZvcm1MYXllcigpOworICAg
IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gc2V0UmVuZGVyZXJMYXllcjpyZW5kZXJlckxheWVy
XTsgICAgCisgICAgCisgICAgQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0
aW9uRHVyYXRpb25dOworCisgICAgLy8gQ3JlYXRlIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRo
YXQgd2lsbCB0cmFuc2Zvcm0gdGhlIHJlbmRlcmVyIGxheWVyIHN1Y2ggdGhhdCAKKyAgICAvLyB0
aGUgZnVsbHNjcmVlbiBlbGVtZW50IGFwcGVhcnMgdG8gbW92ZSBmcm9tIGl0cyBzdGFydGluZyBw
b3NpdGlvbiBhbmQgc2l6ZSB0byBpdHMKKyAgICAvLyBmaW5hbCBvbmU6CisgICAgQ0FUcmFuc2Zv
cm0zRCBzaHJpbmtUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKF9pbml0aWFsRnJh
bWUuc2l6ZS53aWR0aCAvIGRlc3RpbmF0aW9uRnJhbWUuc2l6ZS53aWR0aCwgX2luaXRpYWxGcmFt
ZS5zaXplLmhlaWdodCAvIGRlc3RpbmF0aW9uRnJhbWUuc2l6ZS5oZWlnaHQsIDEpOworICAgIFty
ZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpzaHJpbmtUcmFuc2Zvcm1dOworICAgIENHUmVjdCBz
aHJ1bmtEZXN0aW5hdGlvbkZyYW1lID0gW3JlbmRlcmVyTGF5ZXIgY29udmVydFJlY3Q6ZGVzdGlu
YXRpb25GcmFtZSB0b0xheWVyOltjb250ZW50VmlldyBsYXllcl1dOworICAgIENBVHJhbnNmb3Jt
M0QgbW92ZVRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRpb24oX2luaXRpYWxG
cmFtZS5vcmlnaW4ueCAtIHNocnVua0Rlc3RpbmF0aW9uRnJhbWUub3JpZ2luLngsIF9pbml0aWFs
RnJhbWUub3JpZ2luLnkgLSBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi55LCAwKTsKKyAg
ICBDQVRyYW5zZm9ybTNEIGZpbmFsVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRENvbmNhdChzaHJp
bmtUcmFuc2Zvcm0sIG1vdmVUcmFuc2Zvcm0pOworICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5z
Zm9ybTpmaW5hbFRyYW5zZm9ybV07CisgICAgQ0dSZWN0IHRyYW5zbGF0ZWREZXN0aW5hdGlvbkZy
YW1lID0gW3JlbmRlcmVyTGF5ZXIgY29udmVydFJlY3Q6ZGVzdGluYXRpb25GcmFtZSB0b0xheWVy
Oltjb250ZW50VmlldyBsYXllcl1dOworICAgIAorICAgIENBTGF5ZXIqIGJhY2tncm91bmRMYXll
ciA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYmFja2dyb3VuZExheWVyXTsKKworICAgIC8v
IFN0YXJ0IHRoZSBvcGFjaXR5IGFuaW1hdGlvbi4gIFdlIGNhbiB1c2UgaW1wbGljaXQgYW5pbWF0
aW9ucyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgY2FyZSB3aGVuCisgICAgLy8gdGhlIGFuaW1hdGlv
biBmaW5pc2hlcy4KKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rp
b24gc2V0QW5pbWF0aW9uRHVyYXRpb246ZHVyYXRpb25dOworICAgIFtiYWNrZ3JvdW5kTGF5ZXIg
c2V0T3BhY2l0eToxXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIAorICAgIC8v
IFVzZSBhIENBQmFzaWNBbmltYXRpb24gaGVyZSBmb3IgdGhlIHpvb20gZWZmZWN0LiAgV2Ugd2Fu
dCB0byBiZSBub3RpZmllZCB0aGF0IHRoZSBhbmltYXRpb24gaGFzIAorICAgIC8vIGNvbXBsZXRl
ZCBieSB3YXkgb2YgdGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlLgorICAgIENBQmFzaWNBbmltYXRp
b24qIHpvb21BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0
aDpAInRyYW5zZm9ybSJdOworICAgIFt6b29tQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpbTlNWYWx1
ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOmZpbmFsVHJhbnNmb3JtXV07CisgICAgW3pvb21Bbmlt
YXRpb24gc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNm
b3JtM0RJZGVudGl0eV1dOworICAgIFt6b29tQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOwor
ICAgIFt6b29tQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBbem9vbUFuaW1h
dGlvbiBzZXRUaW1pbmdGdW5jdGlvbjpbQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uIGZ1bmN0aW9uV2l0
aE5hbWU6a0NBTWVkaWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VPdXRdXTsKKyAgICBbem9vbUFu
aW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKKyAgICBbem9vbUFuaW1h
dGlvbiBzZXRWYWx1ZTooaWQpa0NGQm9vbGVhblRydWUgZm9yS2V5OmlzRnVsbHNjcmVlbktleV07
CisgICAgCisgICAgLy8gRGlzYWJsZSBpbXBsaWNpdCBhbmltYXRpb25zIGFuZCBzZXQgdGhlIGxh
eWVyJ3MgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIGl0cyBmaW5hbCBzdGF0ZS4KKyAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKKyAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRElkZW50
aXR5XTsKKyAgICBbcmVuZGVyZXJMYXllciBhZGRBbmltYXRpb246em9vbUFuaW1hdGlvbiBmb3JL
ZXk6QCJ6b29tIl07CisgICAgW2JhY2tncm91bmRMYXllciBzZXRGcmFtZTpOU1JlY3RUb0NHUmVj
dChiYWNrZ3JvdW5kQm91bmRzKV07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICAK
KyAgICAvLyBJbiBhIHByZXZpb3VzIGluY2FybmF0aW9uLCB0aGUgTlNXaW5kb3cgYXR0YWNoZWQg
dG8gdGhpcyBjb250cm9sbGVyIG1heSBoYXZlCisgICAgLy8gYmVlbiBvbiBhIGRpZmZlcmVudCBz
Y3JlZW4uICBUZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGNvbGxlY3Rpb25CZWhhdmlvciBvZiB0aGUg
d2luZG93OgorICAgIE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yIGJlaGF2aW9yID0gW1tzZWxm
IHdpbmRvd10gY29sbGVjdGlvbkJlaGF2aW9yXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRDb2xs
ZWN0aW9uQmVoYXZpb3I6TlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JDYW5Kb2luQWxsU3BhY2Vz
XTsKKyAgICBbW3NlbGYgd2luZG93XSBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKKyAgICBb
W3NlbGYgd2luZG93XSBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6YmVoYXZpb3JdOworICAgIFtbX3dl
YlZpZXcgd2luZG93XSBkaXNwbGF5XTsKKyAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsKK30K
KworLSAodm9pZClleGl0RnVsbHNjcmVlbgoreworICAgIGlmICghX2lzRnVsbHNjcmVlbikKKyAg
ICAgICAgcmV0dXJuOyAgICAKKyAgCisgICAgQ0FMYXllciogcmVuZGVyZXJMYXllciA9IF9yZW5k
ZXJlci0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCktPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICAKKyAgICBDQVRyYW5zZm9ybTNEIHN0YXJ0VHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0z
RElkZW50aXR5OworICAgIGlmIChfaXNBbmltYXRpbmcpIHsKKyAgICAgICAgc3RhcnRUcmFuc2Zv
cm0gPSBbW3JlbmRlcmVyTGF5ZXIgcHJlc2VudGF0aW9uTGF5ZXJdIHRyYW5zZm9ybV07CisgICAg
ICAgIAorICAgICAgICAvLyBUaGUgQ0FBbmltYXRpb24gZGVsZWdhdGUgZnVuY3Rpb25zIHdpbGwg
b25seSBiZSBjYWxsZWQgdGhlCisgICAgICAgIC8vIG5leHQgdHJpcCB0aHJvdWdoIHRoZSBydW4t
bG9vcCwgc28gbWFudWFsbHkgY2FsbCB0aGUgZGVsZWdhdGUKKyAgICAgICAgLy8gZnVuY3Rpb24g
aGVyZSwgbGV0dGluZyBpdCBrbm93IHRoZSBhbmltYXRpb24gZGlkIG5vdCBjb21wbGV0ZToKKyAg
ICAgICAgW3NlbGYgd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOk5PXTsKKyAgICAgICAgQVNTRVJU
KCFfaXNBbmltYXRpbmcpOworICAgIH0KKyAgICBfaXNGdWxsc2NyZWVuID0gTk87CisgICAgX2lz
QW5pbWF0aW5nID0gWUVTOworICAgIAorICAgIC8vIFRoZSB1c2VyIG1heSBoYXZlIG1vdmVkIHRo
ZSBmdWxsc2NyZWVuIHdpbmRvdyBpbiBTcGFjZXMsIHNvIHRlbXBvcmFyaWx5IGNoYW5nZSAKKyAg
ICAvLyB0aGUgY29sbGVjdGlvbkJlaGF2aW9yIG9mIHRoZSB3ZWJWaWV3J3Mgd2luZG93OgorICAg
IE5TV2luZG93KiB3ZWJXaW5kb3cgPSBbW3NlbGYgd2ViVmlld10gd2luZG93XTsKKyAgICBOU1dp
bmRvd0NvbGxlY3Rpb25CZWhhdmlvciBiZWhhdmlvciA9IFt3ZWJXaW5kb3cgY29sbGVjdGlvbkJl
aGF2aW9yXTsKKyAgICBbd2ViV2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjpOU1dpbmRvd0Nv
bGxlY3Rpb25CZWhhdmlvckNhbkpvaW5BbGxTcGFjZXNdOworICAgIFt3ZWJXaW5kb3cgb3JkZXJX
aW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJl
cl1dOworICAgIFt3ZWJXaW5kb3cgc2V0Q29sbGVjdGlvbkJlaGF2aW9yOmJlaGF2aW9yXTsKKyAg
ICAKKyAgICBOU1ZpZXcqIGNvbnRlbnRWaWV3ID0gW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXdd
OworICAgIENHUmVjdCBsYXllckVuZEZyYW1lID0gTlNSZWN0VG9DR1JlY3QoW2NvbnRlbnRWaWV3
IGNvbnZlcnRSZWN0Ol9pbml0aWFsRnJhbWUgZnJvbVZpZXc6bmlsXSk7CisKKyAgICBSZW5kZXJC
b3gqIGNoaWxkUmVuZGVyZXIgPSBfcmVuZGVyZXItPmZpcnN0Q2hpbGRCb3goKTsKKyAgICBDR1Jl
Y3QgbGF5ZXJTdGFydEZyYW1lID0gQ0dSZWN0TWFrZShjaGlsZFJlbmRlcmVyLT54KCksIGNoaWxk
UmVuZGVyZXItPnkoKSwgY2hpbGRSZW5kZXJlci0+d2lkdGgoKSwgY2hpbGRSZW5kZXJlci0+aGVp
Z2h0KCkpOworCisgICAgQ0FUcmFuc2Zvcm0zRCBzaHJpbmtUcmFuc2Zvcm0gPSBDQVRyYW5zZm9y
bTNETWFrZVNjYWxlKGxheWVyRW5kRnJhbWUuc2l6ZS53aWR0aCAvIGxheWVyU3RhcnRGcmFtZS5z
aXplLndpZHRoLCBsYXllckVuZEZyYW1lLnNpemUuaGVpZ2h0IC8gbGF5ZXJTdGFydEZyYW1lLnNp
emUuaGVpZ2h0LCAxKTsKKyAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06c2hyaW5rVHJh
bnNmb3JtXTsKKyAgICBDR1JlY3Qgc2hydW5rRGVzdGluYXRpb25GcmFtZSA9IFtyZW5kZXJlckxh
eWVyIGNvbnZlcnRSZWN0OmxheWVyU3RhcnRGcmFtZSB0b0xheWVyOltjb250ZW50VmlldyBsYXll
cl1dOworICAgIENBVHJhbnNmb3JtM0QgbW92ZVRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtl
VHJhbnNsYXRpb24obGF5ZXJFbmRGcmFtZS5vcmlnaW4ueCAtIHNocnVua0Rlc3RpbmF0aW9uRnJh
bWUub3JpZ2luLngsIGxheWVyRW5kRnJhbWUub3JpZ2luLnkgLSBzaHJ1bmtEZXN0aW5hdGlvbkZy
YW1lLm9yaWdpbi55LCAwKTsKKyAgICBDQVRyYW5zZm9ybTNEIGZpbmFsVHJhbnNmb3JtID0gQ0FU
cmFuc2Zvcm0zRENvbmNhdChzaHJpbmtUcmFuc2Zvcm0sIG1vdmVUcmFuc2Zvcm0pOworICAgIFty
ZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpmaW5hbFRyYW5zZm9ybV07CisgICAgQ0dSZWN0IHRy
YW5zbGF0ZWREZXN0aW5hdGlvbkZyYW1lID0gW3JlbmRlcmVyTGF5ZXIgY29udmVydFJlY3Q6bGF5
ZXJTdGFydEZyYW1lIHRvTGF5ZXI6W2NvbnRlbnRWaWV3IGxheWVyXV07CisgICAgCisgICAgQ0ZU
aW1lSW50ZXJ2YWwgZHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0aW9uRHVyYXRpb25dOworICAgIAor
ICAgIC8vIFdlIGhhdmUgdG8gcmV0YWluIG91cnNlbHZlcyBiZWNhdXNlIHdlIHdhbnQgdG8gYmUg
YWxpdmUgZm9yIHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbi4KKyAgICAvLyBJZiBvdXIgb3duZXIg
cmVsZWFzZXMgdXMgd2UgY291bGQgY3Jhc2ggaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCisgICAg
Ly8gQmFsYW5jZWQgaW4gd2luZG93RGlkRXhpdEZ1bGxzY3JlZW4KKyAgICBbc2VsZiByZXRhaW5d
OworICAgIAorICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworCisgICAgQ0FMYXllciogYmFja2dyb3VuZExheWVy
ID0gW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5ZXJdOworICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlv
bjpkdXJhdGlvbl07CisgICAgW2JhY2tncm91bmRMYXllciBzZXRPcGFjaXR5OjBdOworICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgCisgICAgQ0FCYXNpY0FuaW1hdGlvbiogem9vbUFu
aW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAidHJhbnNm
b3JtIl07CisgICAgW3pvb21BbmltYXRpb24gc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0
aENBVHJhbnNmb3JtM0Q6c3RhcnRUcmFuc2Zvcm1dXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRU
b1ZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6ZmluYWxUcmFuc2Zvcm1dXTsK
KyAgICBbem9vbUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbem9vbUFuaW1hdGlv
biBzZXREdXJhdGlvbjpkdXJhdGlvbl07CisgICAgW3pvb21BbmltYXRpb24gc2V0VGltaW5nRnVu
Y3Rpb246W0NBTWVkaWFUaW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOmtDQU1lZGlhVGlt
aW5nRnVuY3Rpb25FYXNlSW5FYXNlT3V0XV07CisgICAgW3pvb21BbmltYXRpb24gc2V0RmlsbE1v
ZGU6a0NBRmlsbE1vZGVCb3RoXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21w
bGV0aW9uOk5PXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRWYWx1ZTooaWQpa0NGQm9vbGVhbkZh
bHNlIGZvcktleTppc0Z1bGxzY3JlZW5LZXldOworICAgIAorICAgIFtyZW5kZXJlckxheWVyIGFk
ZEFuaW1hdGlvbjp6b29tQW5pbWF0aW9uIGZvcktleTpAInpvb20iXTsKK30KKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBJbnRlcm5hbCBJbnRlcmZhY2UKKworLSAodm9pZClfdXBkYXRl
TWVudUFuZERvY2tGb3JGdWxsc2NyZWVuCit7CisgICAgLy8gTlNBcHBsaWNhdGlvblByZXNlbnRh
dGlvbk9wdGlvbnMgaXMgYXZhaWxhYmxlIG9uID4gMTAuNiBvbmx5OgorI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIE5T
QXBwbGljYXRpb25QcmVzZW50YXRpb25PcHRpb25zIG9wdGlvbnMgPSBOU0FwcGxpY2F0aW9uUHJl
c2VudGF0aW9uRGVmYXVsdDsKKyAgICBOU1NjcmVlbiogZnVsbHNjcmVlblNjcmVlbiA9IFtbc2Vs
ZiB3aW5kb3ddIHNjcmVlbl07CisgICAgCisgICAgaWYgKF9pc0Z1bGxzY3JlZW4pIHsKKyAgICAg
ICAgLy8gQXV0by1oaWRlIHRoZSBtZW51IGJhciBpZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBjb250
YWlucyB0aGUgbWVudSBiYXI6CisgICAgICAgIC8vIE5PVEU6IGlmIHRoZSBmdWxsc2NyZWVuU2Ny
ZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhciBidXQgbm90IHRoZSBkb2NrLCB3ZSBtdXN0IHN0aWxs
IAorICAgICAgICAvLyBhdXRvLWhpZGUgdGhlIGRvY2ssIG9yIGFuIGV4Y2VwdGlvbiB3aWxsIGJl
IHRocm93bi4KKyAgICAgICAgaWYgKFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDow
XSA9PSBmdWxsc2NyZWVuU2NyZWVuKQorICAgICAgICAgICAgb3B0aW9ucyB8PSAoTlNBcHBsaWNh
dGlvblByZXNlbnRhdGlvbkF1dG9IaWRlTWVudUJhciB8IE5TQXBwbGljYXRpb25QcmVzZW50YXRp
b25BdXRvSGlkZURvY2spOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzY3JlZW4g
Y29udGFpbnMgdGhlIGRvY2sgYnkgY29tcGFyaW5nIHRoZSBzY3JlZW4ncyBmcmFtZSB0byBpdHMK
KyAgICAgICAgLy8gdmlzaWJsZUZyYW1lOyBpZiBhIGRvY2sgaXMgcHJlc2VudCwgdGhlIHZpc2li
bGVGcmFtZSB3aWxsIGRpZmZlci4gIElmIHRoZSBjdXJyZW50IHNjcmVlbgorICAgICAgICAvLyBj
b250YWlucyB0aGUgZG9jaywgaGlkZSBpdC4KKyAgICAgICAgZWxzZSBpZiAoIU5TRXF1YWxSZWN0
cyhbZnVsbHNjcmVlblNjcmVlbiBmcmFtZV0sIFtmdWxsc2NyZWVuU2NyZWVuIHZpc2libGVGcmFt
ZV0pKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0
b0hpZGVEb2NrOworICAgIH0KKyAgICAKKyAgICBpZiAoW05TQXBwIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3Ioc2V0UHJlc2VudGF0aW9uT3B0aW9uczopXSkKKyAgICAgICAgW05TQXBwIHNl
dFByZXNlbnRhdGlvbk9wdGlvbnM6b3B0aW9uc107CisgICAgZWxzZQorI2VuZGlmCisgICAgICAg
IFNldFN5c3RlbVVJTW9kZShfaXNGdWxsc2NyZWVuID8ga1VJTW9kZU5vcm1hbCA6IGtVSU1vZGVB
bGxIaWRkZW4sIDApOworfQorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIC8vIElP
UE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZSBub3QgZGVmaW5lZCBvbiA8IDEwLjUKKy0gKHZvaWQp
X2Rpc2FibGVJZGxlRGlzcGxheVNsZWVwCit7CisgICAgaWYgKF9pZGxlRGlzcGxheVNsZWVwQXNz
ZXJ0aW9uID09IGtJT1BNTnVsbEFzc2VydGlvbklEKSAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpIC8vIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZSBpcyBub3QgZGVmaW5lZCBp
biB0aGUgMTAuNSBTREsKKyAgICAgICAgSU9QTUFzc2VydGlvbkNyZWF0ZShrSU9QTUFzc2VydGlv
blR5cGVOb0Rpc3BsYXlTbGVlcCwga0lPUE1Bc3NlcnRpb25MZXZlbE9uLCAmX2lkbGVEaXNwbGF5
U2xlZXBBc3NlcnRpb24pOworI2Vsc2UgLy8gSU9QTUFzc2VydGlvbkNyZWF0ZSBpcyBkZXByZWNp
YXRlZCBpbiA+IDEwLjUKKyAgICAgICAgSU9QTUFzc2VydGlvbkNyZWF0ZVdpdGhOYW1lKGtJT1BN
QXNzZXJ0aW9uVHlwZU5vRGlzcGxheVNsZWVwLCBrSU9QTUFzc2VydGlvbkxldmVsT24sIENGU1RS
KCJXZWJLaXQgcGxheWluZyBhIHZpZGVvIGZ1bGxzY3JlZW4uIiksICZfaWRsZURpc3BsYXlTbGVl
cEFzc2VydGlvbik7CisjZW5kaWYKK30KKworLSAodm9pZClfZW5hYmxlSWRsZURpc3BsYXlTbGVl
cAoreworICAgIGlmIChfaWRsZURpc3BsYXlTbGVlcEFzc2VydGlvbiAhPSBrSU9QTU51bGxBc3Nl
cnRpb25JRCkgeworICAgICAgICBJT1BNQXNzZXJ0aW9uUmVsZWFzZShfaWRsZURpc3BsYXlTbGVl
cEFzc2VydGlvbik7CisgICAgICAgIF9pZGxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uID0ga0lPUE1O
dWxsQXNzZXJ0aW9uSUQ7CisgICAgfQorfQorCistICh2b2lkKV9kaXNhYmxlSWRsZVN5c3RlbVNs
ZWVwCit7CisgICAgaWYgKF9pZGxlU3lzdGVtU2xlZXBBc3NlcnRpb24gPT0ga0lPUE1OdWxsQXNz
ZXJ0aW9uSUQpIAorI2lmIGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgLy8gSU9QTUFzc2Vy
dGlvbkNyZWF0ZVdpdGhOYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZSAxMC41IFNESworICAgICAg
ICBJT1BNQXNzZXJ0aW9uQ3JlYXRlKGtJT1BNQXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBrSU9Q
TUFzc2VydGlvbkxldmVsT24sICZfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uKTsKKyNlbHNlIC8v
IElPUE1Bc3NlcnRpb25DcmVhdGUgaXMgZGVwcmVjaWF0ZWQgaW4gPiAxMC41CisgICAgSU9QTUFz
c2VydGlvbkNyZWF0ZVdpdGhOYW1lKGtJT1BNQXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBrSU9Q
TUFzc2VydGlvbkxldmVsT24sIENGU1RSKCJXZWJLaXQgcGxheWluZyBhIHZpZGVvIGZ1bGxzY3Jl
ZW4uIiksICZfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uKTsKKyNlbmRpZgorfQorCistICh2b2lk
KV9lbmFibGVJZGxlU3lzdGVtU2xlZXAKK3sKKyAgICBpZiAoX2lkbGVTeXN0ZW1TbGVlcEFzc2Vy
dGlvbiAhPSBrSU9QTU51bGxBc3NlcnRpb25JRCkgeworICAgICAgICBJT1BNQXNzZXJ0aW9uUmVs
ZWFzZShfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uKTsKKyAgICAgICAgX2lkbGVTeXN0ZW1TbGVl
cEFzc2VydGlvbiA9IGtJT1BNTnVsbEFzc2VydGlvbklEOworICAgIH0KK30KKworLSAodm9pZClf
ZW5hYmxlVGlja2xlVGltZXIKK3sKKyAgICBbX3RpY2tsZVRpbWVyIGludmFsaWRhdGVdOworICAg
IFtfdGlja2xlVGltZXIgcmVsZWFzZV07CisgICAgX3RpY2tsZVRpbWVyID0gW1tOU1RpbWVyIHNj
aGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDp0aWNrbGVUaW1lckludGVydmFsIHRhcmdldDpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfdGlja2xlVGltZXJGaXJlZCkgdXNlckluZm86bmlsIHJl
cGVhdHM6WUVTXSByZXRhaW5dOworfQorCistICh2b2lkKV9kaXNhYmxlVGlja2xlVGltZXIKK3sK
KyAgICBbX3RpY2tsZVRpbWVyIGludmFsaWRhdGVdOworICAgIFtfdGlja2xlVGltZXIgcmVsZWFz
ZV07CisgICAgX3RpY2tsZVRpbWVyID0gbmlsOworfQorCistICh2b2lkKV90aWNrbGVUaW1lckZp
cmVkCit7CisgICAgVXBkYXRlU3lzdGVtQWN0aXZpdHkoT3ZlcmFsbEFjdCk7Cit9CisjZW5kaWYK
KworLSAodm9pZClfdXBkYXRlUG93ZXJBc3NlcnRpb25zCit7CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpIAorICAgIEJPT0wgaXNQbGF5aW5nID0gW3NlbGYgX2lzQW55TW92aWVQbGF5
aW5nXTsKKyAgICAKKyAgICBpZiAoaXNQbGF5aW5nICYmIF9pc0Z1bGxzY3JlZW4pIHsKKyAgICAg
ICAgW3NlbGYgX2Rpc2FibGVJZGxlU3lzdGVtU2xlZXBdOworICAgICAgICBbc2VsZiBfZGlzYWJs
ZUlkbGVEaXNwbGF5U2xlZXBdOworICAgICAgICBbc2VsZiBfZW5hYmxlVGlja2xlVGltZXJdOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFtzZWxmIF9lbmFibGVJZGxlU3lzdGVtU2xlZXBdOworICAg
ICAgICBbc2VsZiBfZW5hYmxlSWRsZURpc3BsYXlTbGVlcF07CisgICAgICAgIFtzZWxmIF9kaXNh
YmxlVGlja2xlVGltZXJdOworICAgIH0KKyNlbmRpZgorfQorCistICh2b2lkKV9yZXF1ZXN0RXhp
dAoreworICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuXTsKKyAgICBfZm9yY2VEaXNhYmxlQW5pbWF0
aW9uID0gTk87Cit9CisKKy0gKHZvaWQpX3JlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRp
b246KEJPT0wpYW5pbWF0aW9uCit7CisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmlt
YXRpb247CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQp
IHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CisKK30KKworLSAoQk9PTClfaXNBbnlNb3Zp
ZVBsYXlpbmcKK3sKKyAgICBpZiAoIV9lbGVtZW50KQorICAgICAgICByZXR1cm4gTk87CisgICAg
CisgICAgTm9kZSogbmV4dE5vZGUgPSBfZWxlbWVudC5nZXQoKTsKKyAgICB3aGlsZSAobmV4dE5v
ZGUpCisgICAgeworICAgICAgICBpZiAobmV4dE5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpKSB7
CisgICAgICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TE1lZGlhRWxlbWVudCo+KG5leHROb2RlKTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+cGF1
c2VkKCkgJiYgIWVsZW1lbnQtPmVuZGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZShfZWxlbWVudC5nZXQoKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBOTzsK
K30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBVdGlsaXR5IEZ1bmN0aW9ucworCist
IChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5XaW5kb3cKK3sKKyAgICByZXR1cm4g
KFdlYkZ1bGxzY3JlZW5XaW5kb3cgKilbc3VwZXIgd2luZG93XTsKK30KKworLSAoRG9jdW1lbnQq
KV9kb2N1bWVudCAKK3sKKyAgICByZXR1cm4gY29yZShbW1tzZWxmIHdlYlZpZXddIG1haW5GcmFt
ZV0gRE9NRG9jdW1lbnRdKTsKK30KKworLSAoQ0ZUaW1lSW50ZXJ2YWwpX2FuaW1hdGlvbkR1cmF0
aW9uCit7CisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIGRlZmF1bHREdXJhdGlvbiA9
IDAuNTsKKyAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9IGRlZmF1bHREdXJhdGlvbjsKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKKyAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBbTlNFdmVudCBtb2RpZmllckZs
YWdzXTsKKyNlbHNlCisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gW1tOU0V2ZW50IGN1
cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc107CisjZW5kaWYKKyAgICBpZiAoKG1vZGlmaWVyRmxh
Z3MgJiBOU0NvbnRyb2xLZXlNYXNrKSA9PSBOU0NvbnRyb2xLZXlNYXNrKQorICAgICAgICBkdXJh
dGlvbiAqPSAyOworICAgIGlmICgobW9kaWZpZXJGbGFncyAmIE5TU2hpZnRLZXlNYXNrKSA9PSBO
U1NoaWZ0S2V5TWFzaykKKyAgICAgICAgZHVyYXRpb24gKj0gMTA7CisgICAgaWYgKF9mb3JjZURp
c2FibGVBbmltYXRpb24pIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2FibGUgc2NhbGUgYW5p
bWF0aW9uCisgICAgICAgIGR1cmF0aW9uID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGR1cmF0aW9u
OworfQorCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCitAaW1wbGVtZW50YXRpb24gV2ViRnVsbHNj
cmVlbldpbmRvdworCistIChpZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1JlY3QpY29udGVudFJl
Y3Qgc3R5bGVNYXNrOihOU1VJbnRlZ2VyKWFTdHlsZSBiYWNraW5nOihOU0JhY2tpbmdTdG9yZVR5
cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjooQk9PTClmbGFnCit7CisgICAgVU5VU0VEX1BBUkFNKGFT
dHlsZSk7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aENvbnRlbnRSZWN0OmNvbnRlbnRSZWN0
IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBk
ZWZlcjpmbGFnXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgW3Nl
bGYgc2V0T3BhcXVlOk5PXTsKKyAgICBbc2VsZiBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3Ig
Y2xlYXJDb2xvcl1dOworICAgIFtzZWxmIHNldElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAg
W3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6WUVTXTsKKyAgICBbc2VsZiBzZXRSZWxl
YXNlZFdoZW5DbG9zZWQ6Tk9dOworICAgIFtzZWxmIHNldEhhc1NoYWRvdzpZRVNdOworICAgIFtz
ZWxmIHNldE1vdmFibGU6Tk9dOworICAgIAorICAgIE5TVmlldyogY29udGVudFZpZXcgPSBbc2Vs
ZiBjb250ZW50Vmlld107CisgICAgQ0FMYXllciogY29udGVudExheWVyID0gW1tDQUxheWVyIGFs
bG9jXSBpbml0XTsKKyAgICBbY29udGVudFZpZXcgc2V0TGF5ZXI6Y29udGVudExheWVyXTsKKyAg
ICBbY29udGVudFZpZXcgc2V0V2FudHNMYXllcjpZRVNdOworICAgIAorICAgIF9iYWNrZ3JvdW5k
TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIFtjb250ZW50TGF5ZXIgYWRkU3Vi
bGF5ZXI6X2JhY2tncm91bmRMYXllcl07CisgICAgW2NvbnRlbnRMYXllciBzZXRHZW9tZXRyeUZs
aXBwZWQ6WUVTXTsKKyAgICAKKyAgICBbX2JhY2tncm91bmRMYXllciBzZXRCYWNrZ3JvdW5kQ29s
b3I6Q0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFjayldOworICAgIFtfYmFja2dy
b3VuZExheWVyIHNldE9wYWNpdHk6MF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfYmFja2dyb3VuZExheWVyIHJlbGVhc2VdOworICAgIFtfcmVuZGVy
ZXJMYXllciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEJPT0wpcmVz
aWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpY2FuQmVj
b21lS2V5V2luZG93Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZCltb3VzZURvd246
KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7Cit9CisK
Ky0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgaWYgKFtbdGhlRXZl
bnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXSBpc0VxdWFsOkAiXGUiXSkgLy8gRXNhY3Bl
IGtleS1jb2RlCisgICAgICAgIFtzZWxmIGNhbmNlbE9wZXJhdGlvbjpzZWxmXTsKKyAgICBlbHNl
IFtzdXBlciBrZXlEb3duOnRoZUV2ZW50XTsKK30KKworLSAodm9pZCljYW5jZWxPcGVyYXRpb246
KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworICAgIFtbc2VsZiB3aW5k
b3dDb250cm9sbGVyXSBfcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwor
fQorCistIChDQUxheWVyKilyZW5kZXJlckxheWVyCit7CisgICAgcmV0dXJuIF9yZW5kZXJlckxh
eWVyOworfQorCistICh2b2lkKXNldFJlbmRlcmVyTGF5ZXI6KENBTGF5ZXIgKilyZW5kZXJlckxh
eWVyCit7CisgICAgW3JlbmRlcmVyTGF5ZXIgcmV0YWluXTsKKyAgICBbX3JlbmRlcmVyTGF5ZXIg
cmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtfcmVuZGVyZXJMYXllciByZWxlYXNlXTsKKyAg
ICBfcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyTGF5ZXI7CisgICAgCisgICAgaWYgKF9yZW5kZXJl
ckxheWVyKQorICAgICAgICBbW1tzZWxmIGNvbnRlbnRWaWV3XSBsYXllcl0gYWRkU3VibGF5ZXI6
X3JlbmRlcmVyTGF5ZXJdOworfQorCistIChDQUxheWVyKiliYWNrZ3JvdW5kTGF5ZXIKK3sKKyAg
ICByZXR1cm4gX2JhY2tncm91bmRMYXllcjsKK30KK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKyNw
cmFnbWEgbWFyayBNZWRpYUV2ZW50TGlzdGVuZXIKKworTWVkaWFFdmVudExpc3RlbmVyOjpNZWRp
YUV2ZW50TGlzdGVuZXIoV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIqIGRlbGVnYXRlKQorICAgIDog
RXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSkKKyAgICAsIGRlbGVnYXRlKGRlbGVn
YXRlKQoreyAKK30KKworUGFzc1JlZlB0cjxNZWRpYUV2ZW50TGlzdGVuZXI+IE1lZGlhRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZSkgCit7IAor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFFdmVudExpc3RlbmVyKGRlbGVnYXRlKSk7IAor
fQorCitib29sIE1lZGlhRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3Rl
bmVyJiBsaXN0ZW5lcikKK3sKKyAgICByZXR1cm4gdGhpcyA9PSAmbGlzdGVuZXI7Cit9CisKK3Zv
aWQgTWVkaWFFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCit7CisgICAgW2RlbGVnYXRlIF91cGRhdGVQb3dlckFz
c2VydGlvbnNdOworfQorCisjZW5kaWYgLyogRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAqLwo=
</data>
<flag name="review"
          id="64299"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73798</attachid>
            <date>2010-11-12 16:58:11 -0800</date>
            <delta_ts>2010-12-02 11:49:00 -0800</delta_ts>
            <desc>WebKit-WebView</desc>
            <filename>NewFullScreen-Rev-2.WebView.patch</filename>
            <type>text/plain</type>
            <size>4551</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gNjg5MjgpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7
CiAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7
CisgICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJlckNoYW5nZWQoV2ViQ29yZTo6UmVu
ZGVyQm94Kik7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNjg5MjgpCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2ltcG9ydCAi
V2ViRm9ybURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkZ1bGxzY3JlZW5D
b250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCIK
ICNpbXBvcnQgIldlYkdlb2xvY2F0aW9uUG9zaXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
SFRNTFJlcHJlc2VudGF0aW9uLmgiCkBAIC01OTU1LDYgKzU5NTYsNDkgQEAgLSAodm9pZClfZXhp
dEZ1bGxzY3JlZW4KIAogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCistIChC
T09MKV9zdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50Oihjb25zdCBXZWJDb3JlOjpFbGVtZW50
KillbGVtZW50Cit7CisgICAgaWYgKCFbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5j
ZXNdIGZ1bGxTY3JlZW5FbmFibGVkXSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgLy8gRklY
TUU6IElmIHRoZSBlbGVtZW50IGlzIGluIGFuIElGcmFtZSwgd2Ugc2hvdWxkIGVuc3VyZSBpdCBo
YXMgCisgICAgLy8gYW4gQWxsb3dzRnVsbFNjcmVlbj1ZRVMgYXR0cmlidXRlIGJlZm9yZSBhbGxv
d2luZyBmdWxsc2NyZWVuIGFjY2Vzcy4KKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKV9l
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50OihXZWJDb3JlOjpFbGVtZW50KillbGVtZW50Cit7Cisg
ICAgaWYgKCFfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIpCisgICAgICAgIF9wcml2
YXRlLT5uZXdGdWxsc2NyZWVuQ29udHJvbGxlciA9IFtbV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIg
YWxsb2NdIGluaXRdOworCisgICAgaWYgKFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZWxlbWVudF0gPT0gZWxlbWVudCkgeworICAgICAgICAvLyBUaGUgYmFja2VuZCBtYXkganVz
dCB3YXJuIHVzIHRoYXQgdGhlIHVuZGVybGF5aW5nIHBsYWZ0b3JtTW92aWUoKQorICAgICAgICAv
LyBoYXMgY2hhbmdlZC4gSnVzdCBmb3JjZSBhbiB1cGRhdGUuCisgICAgICAgIFtfcHJpdmF0ZS0+
bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0RWxlbWVudDplbGVtZW50XTsKKyAgICAgICAgcmV0
dXJuOyAvLyBObyBtb3JlIHRvIGRvLgorICAgIH0KKyAgICAgICAgCisgICAgW19wcml2YXRlLT5u
ZXdGdWxsc2NyZWVuQ29udHJvbGxlciBzZXRFbGVtZW50OmVsZW1lbnRdOworICAgIFtfcHJpdmF0
ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0V2ViVmlldzpzZWxmXTsKKyAgICBbX3ByaXZh
dGUtPm5ld0Z1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjpbW3NlbGYgd2luZG93
XSBzY3JlZW5dXTsgICAgICAgIAorfQorCistICh2b2lkKV9leGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQ6KFdlYkNvcmU6OkVsZW1lbnQqKWVsZW1lbnQKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5uZXdG
dWxsc2NyZWVuQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIFtfcHJpdmF0ZS0+bmV3
RnVsbHNjcmVlbkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dOworfQorCistICh2b2lkKV9mdWxs
U2NyZWVuUmVuZGVyZXJDaGFuZ2VkOihXZWJDb3JlOjpSZW5kZXJCb3gqKXJlbmRlcmVyCit7Cisg
ICAgaWYgKCFfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIpCisgICAgICAgIF9wcml2
YXRlLT5uZXdGdWxsc2NyZWVuQ29udHJvbGxlciA9IFtbV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIg
YWxsb2NdIGluaXRdOworICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0
UmVuZGVyZXI6cmVuZGVyZXJdOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpCiAKIHN0YXRpYyB2b2lkIGdsaWJDb250ZXh0SXRlcmF0aW9uQ2FsbGJhY2so
Q0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGl2aXR5LCB2b2lkKikKSW5kZXg6IFdl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5oCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoVklERU8pCiBAY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlcjsKICNlbmRpZgorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK0BjbGFz
cyBXZWJGdWxsc2NyZWVuQ29udHJvbGxlcjsKKyNlbmRpZgogCiBleHRlcm4gQk9PTCBhcHBsaWNh
dGlvbklzVGVybWluYXRpbmc7CiBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7
CkBAIC0xNzEsNiArMTc0LDEwIEBAIEBpbnRlcmZhY2UgV2ViVmlld1ByaXZhdGUgOiBOU09iamVj
dCB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIg
KmZ1bGxzY3JlZW5Db250cm9sbGVyOwogI2VuZGlmCisgICAgCisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorICAgIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyICpuZXdGdWxsc2NyZWVuQ29udHJv
bGxlcjsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogICAg
IENGUnVuTG9vcE9ic2VydmVyUmVmIGdsaWJSdW5Mb29wT2JzZXJ2ZXI7CkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA2ODkyOCkKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEy
IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgS1VSTDsKICAgICBj
bGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgUmVuZGVyQm94
OwogICAgIGNsYXNzIE5vZGU7CiB9CiAjZW5kaWYKQEAgLTE4NSw2ICsxODcsMTMgQEAgQGludGVy
ZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJbnRlcm5hbAogLSAodm9pZClfZXhpdEZ1bGxzY3Jl
ZW47CiAjZW5kaWYKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgZGVmaW5lZChfX2Nw
bHVzcGx1cykKKy0gKEJPT0wpX3N1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQ6KFdlYkNvcmU6
OkVsZW1lbnQqKWVsZW1lbnQ7CistICh2b2lkKV9lbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50OihX
ZWJDb3JlOjpFbGVtZW50KillbGVtZW50OworLSAodm9pZClfZXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50OihXZWJDb3JlOjpFbGVtZW50KillbGVtZW50OworLSAodm9pZClfZnVsbFNjcmVlblJlbmRl
cmVyQ2hhbmdlZDooV2ViQ29yZTo6UmVuZGVyQm94KilyZW5kZXJlcjsKKyNlbmRpZgorCiAtIChK
U1ZhbHVlUmVmKV9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86KEpTQ29udGV4dFJl
Ziljb250ZXh0IGZvckVsZW1lbnQ6KEpTVmFsdWVSZWYpdmFsdWU7CiAKIEBlbmQK
</data>
<flag name="review"
          id="64300"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73911</attachid>
            <date>2010-11-15 10:44:43 -0800</date>
            <delta_ts>2010-12-21 11:13:31 -0800</delta_ts>
            <desc>WebCore-RenderFullScreen</desc>
            <filename>NewFullScreen-Rev-2.RenderFullScreen.patch</filename>
            <type>text/plain</type>
            <size>14503</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTk1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMTAtMTEtMTIgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IFdlYktpdCBGdWxsIFNjcmVlbiBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0ODEKKyAgICAgICAgcmRhcjovL3Byb2JsZW0v
ODI0NzQ0NAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFJl
bmRlck9iamVjdCB0eXBlOiBSZW5kZXJGdWxsU2NyZWVuLiAgVGhlIFJlbmRlckZ1bGxTY3JlZW4g
cmVuZGVyZXIgCisgICAgICAgIHdpbGwgYmUgdXNlZCB0byBpbXBsZW1lbnQgbmV3IEZ1bGxTY3Jl
ZW4gQVBJcy4gIFRoZSByZW5kZXJlciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGNsaWVudHMg
b2YKKyAgICAgICAgdGhhdCBBUEkgdG8gYWxsb3cgYSBET00gc3VidHJlZSB0byBiZSByZW5kZXJl
ZCBvdXRzaWRlIGl0cyBvcmlnaW5hbCBGcmFtZS4gIEJlY2F1c2Ugb2YgdGhpcywgdGhlcmUKKyAg
ICAgICAgYXJlIGEgZmV3IGFyZWFzIG9mIHRoZSByZW5kZXJpbmcgY29kZSB3aGljaCBuZWVkIHRv
IGJlIHNwZWNpYWwgY2FzZWQ6IFJlbmRlckZ1bGxTY3JlZW4gbGF5ZXJzIHNob3VsZCAKKyAgICAg
ICAgbm90IGJlIGNsaXBwZWQgdG8gdGhlIHZpZXdwb3J0LCBhcyB0aGV5IHdpbGwgYWxtb3N0IGFs
d2F5cyBiZSByZW5kZXJpbmcgb3V0c2lkZSB0aGUgdmlld3BvcnQgYXJlYTsgCisgICAgICAgIFJl
bmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3MgbGF5ZXJzIHNob3VsZCBub3QgYmUgcmVwYXJlbnRlZCBi
eSB0aGUgUmVuZGVyTGF5ZXJDb21wb3NpdG9yLCBhcyB0aGUgY2xpZW50CisgICAgICAgIHdpbGwg
bGlrZWx5IHdhbnQgdG8gcmVwYXJlbnQgdGhlIHBsYXRmb3JtTGF5ZXIgaW50byB0aGVpciBvd24g
ZnVsbHNjcmVlbiBwbGF0Zm9ybSB3aW5kb3c7IHRoZSBGcmFtZVZpZXcKKyAgICAgICAgbXVzdCB1
cGRhdGUgdGhlIFJlbmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3MgbGF5ZXIgdHJlZSBzZXBhcmF0ZWx5
IGZyb20gdGhlIHJvb3QgbGF5ZXIsIGFzIHRoZSB0d28gdHJlZXMKKyAgICAgICAgYXJlIGRpc2Nv
bm5lY3RlZC4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBFeHBvcnQgYSBudW1iZXIgb2Yg
c3ltYm9scyBuZXdseSB1c2VkIGJ5IFdlYktpdC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6IEFkZCBSZW5kZXJGdWxsU2NyZWVuLmNwcCxoIHRvIHRoZSBwcm9q
ZWN0LgorICAgICAgICAqIGNzcy9mdWxsc2NyZWVuLmNzczogQ2hhbmdlIHRoZSBkZWZhdWx0IHN0
eWxlIHJ1bGVzIGZvciBmdWxsc2NyZWVuIGVsZW1lbnRzLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOiBJbml0aWFsaXpl
IG1fZnVsbHNjcmVlblJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFj
aCk6IFVuaW5pdGlhbGl6ZSBtX2Z1bGxzY3JlZW5SZW5kZXJlci4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IAorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0U2V0RnVsbFNjcmVlblJlbmRlcmVy
KTogU2V0IG1fZnVsbHNjcmVlblJlbmRlcmVyLCBhbmQgbm90aWZ5IGNocm9tZSBjbGllbnRzLgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondl
YmtpdEZ1bGxTY3JlZW5SZW5kZXJlcik6IEFjY2Vzc29yIGZvciBtX2Z1bGxzY3JlZW5SZW5kZXJl
ci4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzY3JlZW5SZWN0KTogTW92ZWQgaW50byBFbGVtZW50IGZyb20gSFRNTE1lZGlhRWxlbWVudC4K
KyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjcmVhdGVS
ZW5kZXJlcklmTmVlZGVkKTogQ3JlYXRlcyBhIFJlbmRlckZ1bGxTY3JlZW4gcGFyZW50IGZvciB0
aGUKKyAgICAgICAgICAgIGN1cnJlbnQgZnVsbHNjcmVlbiBlbGVtZW50LgorICAgICAgICAqIGh0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6IE1vdmVkIHNjcmVlblJlY3QgaW50byBFbGVtZW50Lgor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpmdWxsU2Ny
ZWVuUmVuZGVyZXJDaGFuZ2VkKTogTmV3IGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IGNsaWVudHMg
b2YgZnVsbCAKKyAgICAgICAgICAgIHNjcmVlbiByZW5kZXJlciBjaGFuZ2VzLgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMpOiAgU3BlY2lhbCB0cmVhdG1lbnQgZm9yIGZ1bGxzY3JlZW4gcmVu
ZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRl
UmVjdXJzaXZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29u
dGVudHMpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHA6
IEFkZGVkLgorICAgICAgICAoUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlRnVsbFNjcmVlblN0eWxl
KTogRGVmYXVsdCBzdHlsZSBmb3IgUmVuZGVyRnVsbFNjcmVlbiBlbGVtZW50cy4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNl
c3RvcklzRnVsbFNjcmVlbik6IE5ldyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6IERvIG5vdCBjbGlwIGlmIHRo
ZSBsYXllck9yQW5jZXN0b3JJc0Z1bGxTY3JlZW4uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSk6IFNwZWNpYWwgdHJlYXRtZW50IGZv
ciBmdWxsc2NyZWVuIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3Jl
ZW4pOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc0Z1bGxTY3JlZW4pOiBOZXcgZnVuY3Rpb24uCisKKzIwMTAtMTEtMDEg
IEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FuJ3QgdmlldyBIVE1MNSB2aWRlbyB3aGVuIHJ1
bm5pbmcgU2FmYXJpIHdpdGggYW4gYXV0aGVudGljYXRlZCBwcm94eSBzZXJ2ZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4Nzg3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MzUxOTI2PgorICAgICAgICAKKyAgICAgICAgT24gU25vd0xlb3BhcmQg
b25seSwgY2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gPHZpZGVvPiBzb3VyY2UgVVJMIHdpbGwgdXNl
IGEgcHJveHkgc2VydmVyLAorICAgICAgICBhbmQgaWYgc28sIGZhbGwgYmFjayB0byB0aGUgUXVp
Y2tUaW1lNyBwYXRoIGJ5IG5vdCBwYXNzaW5nIFFUTW92aWVPcGVuRm9yUGxheWJhY2tBdHRyaWJ1
dGUKKyAgICAgICAgdG8gY3JlYXRlTW92aWVXaXRoQXR0cmlidXRlczouCisgICAgICAgIAorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZSk6CisK
IDIwMTAtMTEtMTIgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcxOTU3KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUzMTQsNiArNTMx
NCw4IEBACiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAg
Ki87IH07CiAJCUNBM0JGNjdDMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNCRjY3QjEw
RDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovOyB9OwogCQlDQTNCRjY3RTEw
RDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3Jv
bGxBbmltYXRvci5oICovOyB9OworCQlDREVBN0M4NDEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVy
RnVsbFNjcmVlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RFQTdDODIxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uaCAqLzsgfTsK
KwkJQ0RFQTdDODUxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFQTdDODMxMjc2MjMw
NDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwICovOyB9OwogCQlDRTAyRjBDNDExRTgz
QUREMDBDNjY4NEEgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMDJGMEMzMTFFODNBREQwMEM2Njg0QSAvKiBT
Y3JpcHRDb250cm9sbGVyQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUNFMDU3RkE1MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0UwNTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgKi87IH07CiAJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFMDU3RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTEz
OTEsNiArMTEzOTMsOCBAQAogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5p
bWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5p
bWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3RDEwRDk5QkFF
MDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q0
RTBBRkExMUY3QkMyNzAwOUQzODExIC8qIGZ1bGxzY3JlZW4uY3NzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5j
c3M7IHBhdGggPSBmdWxsc2NyZWVuLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RFQTdDODIxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRnVsbFNjcmVlbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREVBN0M4MzEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNj
cmVlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGdWxs
U2NyZWVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FE
RDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdG
QTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTY4LDYgKzE3OTcyLDggQEAKIAkJCQkwRkQz
MDgwRDExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmggKi8sCiAJCQkJQTg3MURF
Q0EwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmNwcCAqLywKIAkJCQlBODcxREVD
OTBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWVTZXQuaCAqLywKKwkJCQlDREVBN0M4MzEy
NzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5jcHAgKi8sCisJCQkJQ0RFQTdDODIx
Mjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uaCAqLywKIAkJCQlCQ0VBNDgyQTA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySFRNTENhbnZhcy5jcHAgKi8sCiAJCQkJQkNFQTQ4MkIw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckhUTUxDYW52YXMuaCAqLywKIAkJCQkwRkQzMDhEMzEx
N0QxNjg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCAqLywKQEAgLTE4NTA1LDYgKzE4NTEx
LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUNERUE3Qzg0MTI3NjIzMDQwMEI4NDZE
RCAvKiBSZW5kZXJGdWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUI1REM2QTExOUJC
M0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFF
MUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyOUE4MTIyRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2Vs
bC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTQ0Miw3ICsyMTQ0OSw2IEBACiAJCQlpc2EgPSBQQlhQ
cm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhB
OUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUi
ICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3Bt
ZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJ
a25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkBAIC0yMzk1Niw2ICsyMzk2Miw3IEBACiAJ
CQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDk5QjNDNUExMjhDNjQxRTAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkzODg4RjZFRTEyOEM5ODg5MDAwQ0E4RTAgLyogSW5zcGVjdG9y
RmlsZVN5c3RlbUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNERUE3Qzg1MTI3NjIzMDQw
MEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlJl
bmRlckZ1bGxTY3JlZW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1Bhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZUZ1bGxTY3JlZW5TdHlsZSgp
Cit7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZnVsbHNjcmVlblN0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZURlZmF1bHRTdHlsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3RhY2tpbmcg
Y29udGV4dDoKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldFpJbmRleChJTlRfTUFYKTsKKworICAg
IGZ1bGxzY3JlZW5TdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbigpKTsK
KyAgICBmdWxsc2NyZWVuU3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CisKKyAgICBmdWxsc2NyZWVu
U3R5bGUtPnNldERpc3BsYXkoQk9YKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldEJveFBhY2so
QkNFTlRFUik7CisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXRCb3hBbGlnbihCQ0VOVEVSKTsKKyAg
ICBmdWxsc2NyZWVuU3R5bGUtPnNldEJveE9yaWVudChIT1JJWk9OVEFMKTsKKyAgICAKKyAgICBm
dWxsc2NyZWVuU3R5bGUtPnNldFBvc2l0aW9uKEZpeGVkUG9zaXRpb24pOworICAgIGZ1bGxzY3Jl
ZW5TdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDEuMCwgUGVyY2VudCkpOworICAgIGZ1bGxzY3JlZW5T
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgxLjAsIFBlcmNlbnQpKTsKKyAgICBmdWxsc2NyZWVuU3R5
bGUtPnNldExlZnQoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXRU
b3AoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgCisgICAgcmV0dXJuIGZ1bGxzY3JlZW5TdHlsZTsK
K30KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlckZ1bGxTY3JlZW5faAor
I2RlZmluZSBSZW5kZXJGdWxsU2NyZWVuX2gKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
KworI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyRnVsbFNjcmVlbiA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7Citw
dWJsaWM6CisgICAgUmVuZGVyRnVsbFNjcmVlbihOb2RlKiBub2RlKSA6IFJlbmRlckZsZXhpYmxl
Qm94KG5vZGUpIHsgc2V0UmVwbGFjZWQoZmFsc2UpOyBzZXRJc0Fub255bW91cyhmYWxzZSk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJGdWxsU2NyZWVuIjsgfQorICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKTsKK307Cit9CisKKyNlbmRpZgorCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA3MTk1NykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNiArMjg0LDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0NhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKICAgICBib29sIGlzUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IG1fbm9kZTsgfQog
ICAgIGJvb2wgaXNCb2R5KCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75552</attachid>
            <date>2010-12-03 15:13:21 -0800</date>
            <delta_ts>2010-12-03 15:30:13 -0800</delta_ts>
            <desc>WebCore-DOM</desc>
            <filename>NewFullScreen-Rev-2.DOM.patch</filename>
            <type>text/plain</type>
            <size>7335</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDczMTgzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDEwIEBACiAjaW5jbHVkZSAiSFRNTE5v
U2NyaXB0RWxlbWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisj
aW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC00
MTEsNiArNDE1LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSwog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1faXNGdWxsU2NyZWVuKDApCiAgICAg
LCBtX2FyZUtleXNFbmFibGVkSW5GdWxsU2NyZWVuKDApCisgICAgLCBtX2Z1bGxTY3JlZW5SZW5k
ZXJlcigwKQogI2VuZGlmCiAgICAgLCBtX2xvYWRFdmVudERlbGF5Q291bnQoMCkKICAgICAsIG1f
bG9hZEV2ZW50RGVsYXlUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5VGltZXJG
aXJlZCkKQEAgLTE4MTMsNiArMTgxOCwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogCiAg
ICAgLy8gaW5kaWNhdGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4gYXR0YWNoZWQoKSBidXQgcmVu
ZGVyZXIgPT0gMAogICAgIHNldFJlbmRlcmVyKDApOworICAgIAorI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyAgICBzZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisjZW5kaWYKIAogICAgIG1f
aG92ZXJOb2RlID0gMDsKICAgICBtX2ZvY3VzZWROb2RlID0gMDsKQEAgLTQ4MjAsMTAgKzQ4Mjks
MTQgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogCiAgICAgbV9m
dWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgbV9pc0Z1bGxTY3JlZW4gPSB0cnVlOwot
ICAgIGRvY3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5n
ZSk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5
bGVDaGFuZ2UpOworCisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5n
ZSk7CisgICAgZG9jdW1lbnRFbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRldGFj
aCgpOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICAKKworICAgIGZyYW1lKCktPnZp
ZXcoKS0+c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4odHJ1ZSk7CiAgICAgbV9mdWxsU2Ny
ZWVuRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKSk7CiB9CiAgICAgCkBAIC00ODQz
LDE0ICs0ODU2LDM5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm8K
IAogICAgIC8vIG1fZnVsbFNjcmVlbkVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkOyBy
ZWNhbGMgdGhlIHN0eWxlIG9mIAogICAgIC8vIHRoZSBwYXNzZWQgaW4gZWxlbWVudCBpbnN0ZWFk
LgorICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGRv
Y3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CiAg
ICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOwotICAgIGlm
IChlbGVtZW50ICE9IGRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICBkb2N1bWVudEVsZW1lbnQo
KS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgIGVsZW1lbnQtPmRl
dGFjaCgpOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAKKyAgICBtX2Z1bGxTY3Jl
ZW5SZW5kZXJlci0+cmVtb3ZlKCk7CisgICAgc2V0RnVsbFNjcmVlblJlbmRlcmVyKDApOworICAg
IAorICAgIGZyYW1lKCktPnZpZXcoKS0+c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oZmFs
c2UpOwogICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOwogfQogICAgIAor
dm9pZCBEb2N1bWVudDo6c2V0RnVsbFNjcmVlblJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIp
Cit7CisgICAgbV9mdWxsU2NyZWVuUmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBwYWdlKCktPmNo
cm9tZSgpLT5jbGllbnQoKS0+ZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZChtX2Z1bGxTY3JlZW5S
ZW5kZXJlcik7Cit9CisgICAgCit2b2lkIERvY3VtZW50OjpzZXRGdWxsU2NyZWVuUmVuZGVyZXJT
aXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuUmVu
ZGVyZXIpOworICAgIGlmICghbV9mdWxsU2NyZWVuUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxl
OjpjbG9uZShtX2Z1bGxTY3JlZW5SZW5kZXJlci0+c3R5bGUoKSk7CisgICAgbmV3U3R5bGUtPnNl
dFdpZHRoKExlbmd0aCh3aWR0aCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChoZWlnaHQsIFdlYkNvcmU6OkZpeGVkKSk7CisgICAgbmV3U3R5bGUtPnNl
dFRvcChMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0TGVmdChM
ZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBtX2Z1bGxTY3JlZW5SZW5kZXJlci0+c2V0
U3R5bGUobmV3U3R5bGUpOworfQorCiAjZW5kaWYKIAogdm9pZCBEb2N1bWVudDo6ZGVjcmVtZW50
TG9hZEV2ZW50RGVsYXlDb3VudCgpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDczMTgzKQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIGNs
YXNzIFJhbmdlOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBSZW5kZXJB
cmVuYTsKIGNsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBSZW5kZXJGdWxsU2NyZWVuOwogY2xhc3Mg
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOwogY2xhc3MgU2NyaXB0RWxlbWVudERhdGE7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKQEAgLTEwMzYsNyArMTAzNyw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lkQXR0
cmlidXRlTmFtZTsgfQogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBib29s
IHdlYmtpdEZ1bGxTY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbFNjcmVlbjsgfQorICAg
IGJvb2wgd2Via2l0SXNGdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxTY3JlZW47
IH0KICAgICBib29sIHdlYmtpdEZ1bGxTY3JlZW5LZXlib2FyZElucHV0QWxsb3dlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNGdWxsU2NyZWVuICYmIG1fYXJlS2V5c0VuYWJsZWRJbkZ1bGxTY3JlZW47
IH0KICAgICBFbGVtZW50KiB3ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpOyB9CiAgICAgdm9pZCB3ZWJraXRSZXF1
ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCosIHVuc2lnbmVkIHNob3J0IGZsYWdzKTsK
QEAgLTEwNDYsNiArMTA0NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3ZWJraXREaWRFbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHdlYmtpdFdpbGxFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKKyAgICAKKyAgICB2b2lkIHNldEZ1bGxTY3JlZW5S
ZW5kZXJlcihSZW5kZXJCb3gqIHJlbmRlcmVyKTsKKyAgICBSZW5kZXJCb3gqIHdlYmtpdEZ1bGxT
Y3JlZW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlblJlbmRlcmVyOyB9Cisg
ICAgCisgICAgdm9pZCBzZXRGdWxsU2NyZWVuUmVuZGVyZXJTaXplKGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAjZW5kaWYKIAogICAgIC8vIFVzZWQgdG8gYWxsb3cgZWxlbWVudCB0aGF0IGxvYWRz
IGRhdGEgd2l0aG91dCBnb2luZyB0aHJvdWdoIGEgRnJhbWVMb2FkZXIgdG8gZGVsYXkgdGhlICds
b2FkJyBldmVudC4KQEAgLTEzNjcsNiArMTM3Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
RnVsbFNjcmVlbjsKICAgICBib29sIG1fYXJlS2V5c0VuYWJsZWRJbkZ1bGxTY3JlZW47CiAgICAg
UmVmUHRyPEVsZW1lbnQ+IG1fZnVsbFNjcmVlbkVsZW1lbnQ7CisgICAgUmVuZGVyQm94KiBtX2Z1
bGxTY3JlZW5SZW5kZXJlcjsKICNlbmRpZgogCiAgICAgaW50IG1fbG9hZEV2ZW50RGVsYXlDb3Vu
dDsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L05vZGUuY3BwCShyZXZpc2lvbiA3MzE4MykKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMCBAQAogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oIgogI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKICNpbmNsdWRlICJSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VsZWN0
b3JOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCkBAIC0xMzI3LDYgKzEz
MzAsMjEgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKICAgICBBU1NFUlQo
cGFyZW50KTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50
LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogbmV4dFJlbmRlcmVyID0gdGhpcy0+bmV4
dFJlbmRlcmVyKCk7CisgICAgCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIC8vIElm
IHRoaXMgbm9kZSBpcyBhIGZ1bGxzY3JlZW4gbm9kZSwgY3JlYXRlIGEgbmV3IGFub255bW91cyBm
dWxsIHNjcmVlbgorICAgIC8vIHJlbmRlcmVyLgorICAgIGlmIChkb2N1bWVudCgpLT53ZWJraXRJ
c0Z1bGxTY3JlZW4oKSAmJiBkb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1l
bnQoKSA9PSB0aGlzKSB7CisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW4qIGZ1bGxzY3JlZW5SZW5k
ZXJlciA9IG5ldyAoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyRnVsbFNjcmVlbihk
b2N1bWVudCgpKTsKKyAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5zZXRTdHlsZShSZW5kZXJG
dWxsU2NyZWVuOjpjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKSk7CisgICAgICAgIHBhcmVudFJlbmRl
cmVyLT5hZGRDaGlsZChmdWxsc2NyZWVuUmVuZGVyZXIsIDApOworICAgICAgICBwYXJlbnRSZW5k
ZXJlciA9IGZ1bGxzY3JlZW5SZW5kZXJlcjsKKyAgICAgICAgbmV4dFJlbmRlcmVyID0gMDsKKyAg
ICAgICAgZG9jdW1lbnQoKS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyKGZ1bGxzY3JlZW5SZW5kZXJl
cik7CisgICAgfQorI2VuZGlmCisgICAgCiAgICAgaWYgKHBhcmVudFJlbmRlcmVyICYmIHBhcmVu
dFJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4oKSAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIodGhpcykpIHsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0
eWxlRm9yUmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0
KCkpKSB7CkBAIC0xMzM2LDcgKzEzNTQsNyBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZO
ZWVkZWQoKQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzZXRS
ZW5kZXJlcihyKTsKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0QW5pbWF0YWJs
ZVN0eWxlKHN0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudFJlbmRl
cmVyLT5hZGRDaGlsZChyZW5kZXJlcigpLCBuZXh0UmVuZGVyZXIoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGlsZChyZW5kZXJlcigpLCBuZXh0UmVuZGVyZXIp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAkocmV2aXNpb24gNzMxODMpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw2ICsyNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50KGNvbnN0
IEVsZW1lbnQqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBl
eGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZChSZW5kZXJCb3gqKSB7IH0KICNlbmRpZgogICAg
ICAgICAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75558</attachid>
            <date>2010-12-03 15:30:13 -0800</date>
            <delta_ts>2010-12-03 15:31:25 -0800</delta_ts>
            <desc>WebCore-DOM</desc>
            <filename>NewFullScreen-Rev-2.DOM.patch</filename>
            <type>text/plain</type>
            <size>2840</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gNzMxODMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgY2xhc3MgUmFuZ2U7CiBjbGFzcyBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIFJlbmRlckFyZW5hOwogY2xhc3MgUmVuZGVyVmll
dzsKK2NsYXNzIFJlbmRlckZ1bGxTY3JlZW47CiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXI7CiBjbGFzcyBTY3JpcHRFbGVtZW50RGF0YTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAt
MTAzNiw3ICsxMDM3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlkQXR0
cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faWRBdHRyaWJ1dGVOYW1lOyB9CiAgICAgCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGJvb2wgd2Via2l0RnVsbFNjcmVlbigpIGNv
bnN0IHsgcmV0dXJuIG1faXNGdWxsU2NyZWVuOyB9CisgICAgYm9vbCB3ZWJraXRJc0Z1bGxTY3Jl
ZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbFNjcmVlbjsgfQogICAgIGJvb2wgd2Via2l0RnVs
bFNjcmVlbktleWJvYXJkSW5wdXRBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxTY3Jl
ZW4gJiYgbV9hcmVLZXlzRW5hYmxlZEluRnVsbFNjcmVlbjsgfQogICAgIEVsZW1lbnQqIHdlYmtp
dEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlbkVs
ZW1lbnQuZ2V0KCk7IH0KICAgICB2b2lkIHdlYmtpdFJlcXVlc3RGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50KiwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpOwpAQCAtMTA0Niw2ICsxMDQ3LDExIEBA
IHB1YmxpYzoKICAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCopOwogICAgIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVt
ZW50Kik7CiAgICAgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCopOworICAgIAorICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRlcmVyKFJlbmRlckJveCogcmVu
ZGVyZXIpOworICAgIFJlbmRlckJveCogd2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9mdWxsU2NyZWVuUmVuZGVyZXI7IH0KKyAgICAKKyAgICB2b2lkIHNldEZ1bGxT
Y3JlZW5SZW5kZXJlclNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICNlbmRpZgogCiAgICAg
Ly8gVXNlZCB0byBhbGxvdyBlbGVtZW50IHRoYXQgbG9hZHMgZGF0YSB3aXRob3V0IGdvaW5nIHRo
cm91Z2ggYSBGcmFtZUxvYWRlciB0byBkZWxheSB0aGUgJ2xvYWQnIGV2ZW50LgpAQCAtMTM2Nyw2
ICsxMzczLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNGdWxsU2NyZWVuOwogICAgIGJvb2wg
bV9hcmVLZXlzRW5hYmxlZEluRnVsbFNjcmVlbjsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9mdWxs
U2NyZWVuRWxlbWVudDsKKyAgICBSZW5kZXJCb3gqIG1fZnVsbFNjcmVlblJlbmRlcmVyOwogI2Vu
ZGlmCiAKICAgICBpbnQgbV9sb2FkRXZlbnREZWxheUNvdW50OwpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2
aXNpb24gNzMxODMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI0Myw3ICsyNDMsNyBAQCBtb2R1bGUgY29yZSB7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQo
RU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEVfRlVMTFNDUkVFTl9BUEkKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Via2l0RnVsbFNjcmVlbjsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Via2l0SXNGdWxsU2NyZWVuOwogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRGdWxsU2NyZWVuS2V5Ym9hcmRJbnB1dEFsbG93
ZWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50IHdlYmtpdEN1cnJlbnRGdWxs
U2NyZWVuRWxlbWVudDsKICAgICAgICAgdm9pZCB3ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA3MzE4MykKKysrIFdlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKSB7IH0KICAgICAgICAgdmlydHVh
bCB2b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBmdWxsU2NyZWVuUmVuZGVyZXJDaGFuZ2VkKFJlbmRlckJveCopIHsgfQogI2Vu
ZGlmCiAgICAgICAgIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75559</attachid>
            <date>2010-12-03 15:31:25 -0800</date>
            <delta_ts>2010-12-03 15:48:43 -0800</delta_ts>
            <desc>WebCore-DOM</desc>
            <filename>NewFullScreen-Rev-2.DOM.patch</filename>
            <type>text/plain</type>
            <size>7922</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDczMTgzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDEwIEBACiAjaW5jbHVkZSAiSFRNTE5v
U2NyaXB0RWxlbWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisj
aW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC00
MTEsNiArNDE1LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSwog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1faXNGdWxsU2NyZWVuKDApCiAgICAg
LCBtX2FyZUtleXNFbmFibGVkSW5GdWxsU2NyZWVuKDApCisgICAgLCBtX2Z1bGxTY3JlZW5SZW5k
ZXJlcigwKQogI2VuZGlmCiAgICAgLCBtX2xvYWRFdmVudERlbGF5Q291bnQoMCkKICAgICAsIG1f
bG9hZEV2ZW50RGVsYXlUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5VGltZXJG
aXJlZCkKQEAgLTE4MTMsNiArMTgxOCwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogCiAg
ICAgLy8gaW5kaWNhdGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4gYXR0YWNoZWQoKSBidXQgcmVu
ZGVyZXIgPT0gMAogICAgIHNldFJlbmRlcmVyKDApOworICAgIAorI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyAgICBzZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisjZW5kaWYKIAogICAgIG1f
aG92ZXJOb2RlID0gMDsKICAgICBtX2ZvY3VzZWROb2RlID0gMDsKQEAgLTQ4MjAsMTAgKzQ4Mjks
MTQgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogCiAgICAgbV9m
dWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgbV9pc0Z1bGxTY3JlZW4gPSB0cnVlOwot
ICAgIGRvY3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5n
ZSk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5
bGVDaGFuZ2UpOworCisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5n
ZSk7CisgICAgZG9jdW1lbnRFbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRldGFj
aCgpOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICAKKworICAgIGZyYW1lKCktPnZp
ZXcoKS0+c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4odHJ1ZSk7CiAgICAgbV9mdWxsU2Ny
ZWVuRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKSk7CiB9CiAgICAgCkBAIC00ODQz
LDE0ICs0ODU2LDM5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm8K
IAogICAgIC8vIG1fZnVsbFNjcmVlbkVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkOyBy
ZWNhbGMgdGhlIHN0eWxlIG9mIAogICAgIC8vIHRoZSBwYXNzZWQgaW4gZWxlbWVudCBpbnN0ZWFk
LgorICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGRv
Y3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CiAg
ICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOwotICAgIGlm
IChlbGVtZW50ICE9IGRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICBkb2N1bWVudEVsZW1lbnQo
KS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgIGVsZW1lbnQtPmRl
dGFjaCgpOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAKKyAgICBtX2Z1bGxTY3Jl
ZW5SZW5kZXJlci0+cmVtb3ZlKCk7CisgICAgc2V0RnVsbFNjcmVlblJlbmRlcmVyKDApOworICAg
IAorICAgIGZyYW1lKCktPnZpZXcoKS0+c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oZmFs
c2UpOwogICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOwogfQogICAgIAor
dm9pZCBEb2N1bWVudDo6c2V0RnVsbFNjcmVlblJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIp
Cit7CisgICAgbV9mdWxsU2NyZWVuUmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBwYWdlKCktPmNo
cm9tZSgpLT5jbGllbnQoKS0+ZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZChtX2Z1bGxTY3JlZW5S
ZW5kZXJlcik7Cit9CisgICAgCit2b2lkIERvY3VtZW50OjpzZXRGdWxsU2NyZWVuUmVuZGVyZXJT
aXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuUmVu
ZGVyZXIpOworICAgIGlmICghbV9mdWxsU2NyZWVuUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxl
OjpjbG9uZShtX2Z1bGxTY3JlZW5SZW5kZXJlci0+c3R5bGUoKSk7CisgICAgbmV3U3R5bGUtPnNl
dFdpZHRoKExlbmd0aCh3aWR0aCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChoZWlnaHQsIFdlYkNvcmU6OkZpeGVkKSk7CisgICAgbmV3U3R5bGUtPnNl
dFRvcChMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0TGVmdChM
ZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBtX2Z1bGxTY3JlZW5SZW5kZXJlci0+c2V0
U3R5bGUobmV3U3R5bGUpOworfQorCiAjZW5kaWYKIAogdm9pZCBEb2N1bWVudDo6ZGVjcmVtZW50
TG9hZEV2ZW50RGVsYXlDb3VudCgpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDczMTgzKQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIGNs
YXNzIFJhbmdlOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBSZW5kZXJB
cmVuYTsKIGNsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBSZW5kZXJGdWxsU2NyZWVuOwogY2xhc3Mg
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOwogY2xhc3MgU2NyaXB0RWxlbWVudERhdGE7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKQEAgLTEwMzYsNyArMTAzNyw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lkQXR0
cmlidXRlTmFtZTsgfQogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBib29s
IHdlYmtpdEZ1bGxTY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbFNjcmVlbjsgfQorICAg
IGJvb2wgd2Via2l0SXNGdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxTY3JlZW47
IH0KICAgICBib29sIHdlYmtpdEZ1bGxTY3JlZW5LZXlib2FyZElucHV0QWxsb3dlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNGdWxsU2NyZWVuICYmIG1fYXJlS2V5c0VuYWJsZWRJbkZ1bGxTY3JlZW47
IH0KICAgICBFbGVtZW50KiB3ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpOyB9CiAgICAgdm9pZCB3ZWJraXRSZXF1
ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCosIHVuc2lnbmVkIHNob3J0IGZsYWdzKTsK
QEAgLTEwNDYsNiArMTA0NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3ZWJraXREaWRFbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHdlYmtpdFdpbGxFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKKyAgICAKKyAgICB2b2lkIHNldEZ1bGxTY3JlZW5S
ZW5kZXJlcihSZW5kZXJCb3gqIHJlbmRlcmVyKTsKKyAgICBSZW5kZXJCb3gqIHdlYmtpdEZ1bGxT
Y3JlZW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlblJlbmRlcmVyOyB9Cisg
ICAgCisgICAgdm9pZCBzZXRGdWxsU2NyZWVuUmVuZGVyZXJTaXplKGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAjZW5kaWYKIAogICAgIC8vIFVzZWQgdG8gYWxsb3cgZWxlbWVudCB0aGF0IGxvYWRz
IGRhdGEgd2l0aG91dCBnb2luZyB0aHJvdWdoIGEgRnJhbWVMb2FkZXIgdG8gZGVsYXkgdGhlICds
b2FkJyBldmVudC4KQEAgLTEzNjcsNiArMTM3Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
RnVsbFNjcmVlbjsKICAgICBib29sIG1fYXJlS2V5c0VuYWJsZWRJbkZ1bGxTY3JlZW47CiAgICAg
UmVmUHRyPEVsZW1lbnQ+IG1fZnVsbFNjcmVlbkVsZW1lbnQ7CisgICAgUmVuZGVyQm94KiBtX2Z1
bGxTY3JlZW5SZW5kZXJlcjsKICNlbmRpZgogCiAgICAgaW50IG1fbG9hZEV2ZW50RGVsYXlDb3Vu
dDsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDczMTgzKQorKysgV2ViQ29yZS9kb20vRG9jdW1l
bnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgbW9kdWxlIGNvcmUgewog
I2VuZGlmCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZV
TExTQ1JFRU5fQVBJCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHdlYmtpdEZ1
bGxTY3JlZW47CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHdlYmtpdElzRnVs
bFNjcmVlbjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Via2l0RnVsbFNj
cmVlbktleWJvYXJkSW5wdXRBbGxvd2VkOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxl
bWVudCB3ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQ7CiAgICAgICAgIHZvaWQgd2Via2l0
Q2FuY2VsRnVsbFNjcmVlbigpOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDczMTgzKQorKysgV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDEwIEBACiAjaW5jbHVkZSAi
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3Qu
aCIKQEAgLTEzMjcsNiArMTMzMCwyMSBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVk
ZWQoKQogICAgIEFTU0VSVChwYXJlbnQpOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50
UmVuZGVyZXIgPSBwYXJlbnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVu
ZGVyZXIgPSB0aGlzLT5uZXh0UmVuZGVyZXIoKTsKKyAgICAKKyNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCisgICAgLy8gSWYgdGhpcyBub2RlIGlzIGEgZnVsbHNjcmVlbiBub2RlLCBjcmVhdGUg
YSBuZXcgYW5vbnltb3VzIGZ1bGwgc2NyZWVuCisgICAgLy8gcmVuZGVyZXIuCisgICAgaWYgKGRv
Y3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpICYmIGRvY3VtZW50KCktPndlYmtpdEN1cnJl
bnRGdWxsU2NyZWVuRWxlbWVudCgpID09IHRoaXMpIHsKKyAgICAgICAgUmVuZGVyRnVsbFNjcmVl
biogZnVsbHNjcmVlblJlbmRlcmVyID0gbmV3IChkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKSBS
ZW5kZXJGdWxsU2NyZWVuKGRvY3VtZW50KCkpOworICAgICAgICBmdWxsc2NyZWVuUmVuZGVyZXIt
PnNldFN0eWxlKFJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZUZ1bGxTY3JlZW5TdHlsZSgpKTsKKyAg
ICAgICAgcGFyZW50UmVuZGVyZXItPmFkZENoaWxkKGZ1bGxzY3JlZW5SZW5kZXJlciwgMCk7Cisg
ICAgICAgIHBhcmVudFJlbmRlcmVyID0gZnVsbHNjcmVlblJlbmRlcmVyOworICAgICAgICBuZXh0
UmVuZGVyZXIgPSAwOworICAgICAgICBkb2N1bWVudCgpLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXIo
ZnVsbHNjcmVlblJlbmRlcmVyKTsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICBpZiAocGFyZW50
UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpICYmIHBhcmVudC0+
Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0aGlzKSkgewogICAgICAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gc3R5bGVGb3JSZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXJJ
c05lZWRlZChzdHlsZS5nZXQoKSkpIHsKQEAgLTEzMzYsNyArMTM1NCw3IEBAIHZvaWQgTm9kZTo6
Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHNldFJlbmRlcmVyKHIpOwogICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT5zZXRBbmltYXRhYmxlU3R5bGUoc3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyZW50UmVuZGVyZXItPmFkZENoaWxkKHJlbmRlcmVyKCksIG5leHRSZW5kZXJlcigp
KTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVuZGVyZXItPmFkZENoaWxkKHJlbmRlcmVy
KCksIG5leHRSZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA3MzE4MykKKysrIFdlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbFNjcmVl
bkZvckVsZW1lbnQoY29uc3QgRWxlbWVudCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKSB7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBmdWxsU2NyZWVuUmVuZGVyZXJDaGFuZ2VkKFJlbmRlckJveCop
IHsgfQogI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75564</attachid>
            <date>2010-12-03 15:48:43 -0800</date>
            <delta_ts>2010-12-21 11:14:26 -0800</delta_ts>
            <desc>WebCore-DOM</desc>
            <filename>NewFullScreen-Rev-2.DOM.patch</filename>
            <type>text/plain</type>
            <size>7918</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDczMTgzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDEwIEBACiAjaW5jbHVkZSAiSFRNTE5v
U2NyaXB0RWxlbWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisj
aW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC00
MTEsNiArNDE1LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSwog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1faXNGdWxsU2NyZWVuKDApCiAgICAg
LCBtX2FyZUtleXNFbmFibGVkSW5GdWxsU2NyZWVuKDApCisgICAgLCBtX2Z1bGxTY3JlZW5SZW5k
ZXJlcigwKQogI2VuZGlmCiAgICAgLCBtX2xvYWRFdmVudERlbGF5Q291bnQoMCkKICAgICAsIG1f
bG9hZEV2ZW50RGVsYXlUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5VGltZXJG
aXJlZCkKQEAgLTE4MTMsNiArMTgxOCwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogCiAg
ICAgLy8gaW5kaWNhdGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4gYXR0YWNoZWQoKSBidXQgcmVu
ZGVyZXIgPT0gMAogICAgIHNldFJlbmRlcmVyKDApOworICAgIAorI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyAgICBzZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisjZW5kaWYKIAogICAgIG1f
aG92ZXJOb2RlID0gMDsKICAgICBtX2ZvY3VzZWROb2RlID0gMDsKQEAgLTQ4MjAsMTAgKzQ4Mjks
MTQgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogCiAgICAgbV9m
dWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgbV9pc0Z1bGxTY3JlZW4gPSB0cnVlOwot
ICAgIGRvY3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5n
ZSk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5
bGVDaGFuZ2UpOworCisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5n
ZSk7CisgICAgZG9jdW1lbnRFbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRldGFj
aCgpOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICAKKworICAgIGZyYW1lKCktPnZp
ZXcoKS0+c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4odHJ1ZSk7CiAgICAgbV9mdWxsU2Ny
ZWVuRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKSk7CiB9CiAgICAgCkBAIC00ODQz
LDE0ICs0ODU2LDM5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm8K
IAogICAgIC8vIG1fZnVsbFNjcmVlbkVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkOyBy
ZWNhbGMgdGhlIHN0eWxlIG9mIAogICAgIC8vIHRoZSBwYXNzZWQgaW4gZWxlbWVudCBpbnN0ZWFk
LgorICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGRv
Y3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CiAg
ICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOwotICAgIGlm
IChlbGVtZW50ICE9IGRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICBkb2N1bWVudEVsZW1lbnQo
KS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgIGVsZW1lbnQtPmRl
dGFjaCgpOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAKKyAgICBtX2Z1bGxTY3Jl
ZW5SZW5kZXJlci0+cmVtb3ZlKCk7CisgICAgc2V0RnVsbFNjcmVlblJlbmRlcmVyKDApOworICAg
IAorICAgIGZyYW1lKCktPnZpZXcoKS0+c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oZmFs
c2UpOwogICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOwogfQogICAgIAor
dm9pZCBEb2N1bWVudDo6c2V0RnVsbFNjcmVlblJlbmRlcmVyKFJlbmRlckJveCogcmVuZGVyZXIp
Cit7CisgICAgbV9mdWxsU2NyZWVuUmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBwYWdlKCktPmNo
cm9tZSgpLT5jbGllbnQoKS0+ZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZChtX2Z1bGxTY3JlZW5S
ZW5kZXJlcik7Cit9CisgICAgCit2b2lkIERvY3VtZW50OjpzZXRGdWxsU2NyZWVuUmVuZGVyZXJT
aXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuUmVu
ZGVyZXIpOworICAgIGlmICghbV9mdWxsU2NyZWVuUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNs
b25lKG1fZnVsbFNjcmVlblJlbmRlcmVyLT5zdHlsZSgpKTsKKyAgICBuZXdTdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHdpZHRoLCBXZWJDb3JlOjpGaXhlZCkpOworICAgIG5ld1N0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKGhlaWdodCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0VG9w
KExlbmd0aCgwLCBXZWJDb3JlOjpGaXhlZCkpOworICAgIG5ld1N0eWxlLT5zZXRMZWZ0KExlbmd0
aCgwLCBXZWJDb3JlOjpGaXhlZCkpOworICAgIG1fZnVsbFNjcmVlblJlbmRlcmVyLT5zZXRTdHls
ZShuZXdTdHlsZSk7Cit9CisKICNlbmRpZgogCiB2b2lkIERvY3VtZW50OjpkZWNyZW1lbnRMb2Fk
RXZlbnREZWxheUNvdW50KCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNzMxODMpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgY2xhc3Mg
UmFuZ2U7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIFJlbmRlckFyZW5h
OwogY2xhc3MgUmVuZGVyVmlldzsKK2NsYXNzIFJlbmRlckZ1bGxTY3JlZW47CiBjbGFzcyBTY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXI7CiBjbGFzcyBTY3JpcHRFbGVtZW50RGF0YTsKIGNsYXNzIFNl
Y3VyaXR5T3JpZ2luOwpAQCAtMTAzNiw3ICsxMDM3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faWRBdHRyaWJ1
dGVOYW1lOyB9CiAgICAgCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGJvb2wgd2Vi
a2l0RnVsbFNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGdWxsU2NyZWVuOyB9CisgICAgYm9v
bCB3ZWJraXRJc0Z1bGxTY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbFNjcmVlbjsgfQog
ICAgIGJvb2wgd2Via2l0RnVsbFNjcmVlbktleWJvYXJkSW5wdXRBbGxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0Z1bGxTY3JlZW4gJiYgbV9hcmVLZXlzRW5hYmxlZEluRnVsbFNjcmVlbjsgfQog
ICAgIEVsZW1lbnQqIHdlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCk7IH0KICAgICB2b2lkIHdlYmtpdFJlcXVlc3RG
dWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpOwpAQCAt
MTA0Niw2ICsxMDQ3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCopOworICAgIAorICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRl
cmVyKFJlbmRlckJveCogcmVuZGVyZXIpOworICAgIFJlbmRlckJveCogd2Via2l0RnVsbFNjcmVl
blJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2NyZWVuUmVuZGVyZXI7IH0KKyAgICAK
KyAgICB2b2lkIHNldEZ1bGxTY3JlZW5SZW5kZXJlclNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKICNlbmRpZgogCiAgICAgLy8gVXNlZCB0byBhbGxvdyBlbGVtZW50IHRoYXQgbG9hZHMgZGF0
YSB3aXRob3V0IGdvaW5nIHRocm91Z2ggYSBGcmFtZUxvYWRlciB0byBkZWxheSB0aGUgJ2xvYWQn
IGV2ZW50LgpAQCAtMTM2Nyw2ICsxMzczLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNGdWxs
U2NyZWVuOwogICAgIGJvb2wgbV9hcmVLZXlzRW5hYmxlZEluRnVsbFNjcmVlbjsKICAgICBSZWZQ
dHI8RWxlbWVudD4gbV9mdWxsU2NyZWVuRWxlbWVudDsKKyAgICBSZW5kZXJCb3gqIG1fZnVsbFNj
cmVlblJlbmRlcmVyOwogI2VuZGlmCiAKICAgICBpbnQgbV9sb2FkRXZlbnREZWxheUNvdW50OwpJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbAkocmV2aXNpb24gNzMxODMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw3ICsyNDMsNyBAQCBtb2R1bGUgY29yZSB7CiAjZW5k
aWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEVfRlVMTFND
UkVFTl9BUEkKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Via2l0RnVsbFNj
cmVlbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Via2l0SXNGdWxsU2Ny
ZWVuOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRGdWxsU2NyZWVu
S2V5Ym9hcmRJbnB1dEFsbG93ZWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50
IHdlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudDsKICAgICAgICAgdm9pZCB3ZWJraXRDYW5j
ZWxGdWxsU2NyZWVuKCk7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gNzMxODMpCisrKyBXZWJDb3JlL2RvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksMTAgQEAKICNpbmNsdWRlICJQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCiAjaW5jbHVk
ZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKKyNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlNlbGVjdG9yTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgpA
QCAtMTMyNyw2ICsxMzMwLDIxIEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgp
CiAgICAgQVNTRVJUKHBhcmVudCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5k
ZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIG5leHRSZW5kZXJl
ciA9IHRoaXMtPm5leHRSZW5kZXJlcigpOworICAgIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKyAgICAvLyBJZiB0aGlzIG5vZGUgaXMgYSBmdWxsc2NyZWVuIG5vZGUsIGNyZWF0ZSBhIG5l
dyBhbm9ueW1vdXMgZnVsbCBzY3JlZW4KKyAgICAvLyByZW5kZXJlci4KKyAgICBpZiAoZG9jdW1l
bnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkgJiYgZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCkgPT0gdGhpcykgeworICAgICAgICBSZW5kZXJGdWxsU2NyZWVuKiBm
dWxsc2NyZWVuUmVuZGVyZXIgPSBuZXcgKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRl
ckZ1bGxTY3JlZW4oZG9jdW1lbnQoKSk7CisgICAgICAgIGZ1bGxzY3JlZW5SZW5kZXJlci0+c2V0
U3R5bGUoUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlRnVsbFNjcmVlblN0eWxlKCkpOworICAgICAg
ICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQoZnVsbHNjcmVlblJlbmRlcmVyLCAwKTsKKyAgICAg
ICAgcGFyZW50UmVuZGVyZXIgPSBmdWxsc2NyZWVuUmVuZGVyZXI7CisgICAgICAgIG5leHRSZW5k
ZXJlciA9IDA7CisgICAgICAgIGRvY3VtZW50KCktPnNldEZ1bGxTY3JlZW5SZW5kZXJlcihmdWxs
c2NyZWVuUmVuZGVyZXIpOworICAgIH0KKyNlbmRpZgorICAgIAogICAgIGlmIChwYXJlbnRSZW5k
ZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkgJiYgcGFyZW50LT5jaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKHRoaXMpKSB7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChyZW5kZXJlcklzTmVl
ZGVkKHN0eWxlLmdldCgpKSkgewpAQCAtMTMzNiw3ICsxMzU0LDcgQEAgdm9pZCBOb2RlOjpjcmVh
dGVSZW5kZXJlcklmTmVlZGVkKCkKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgc2V0UmVuZGVyZXIocik7CiAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnNldEFuaW1hdGFibGVTdHlsZShzdHlsZS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQocmVuZGVyZXIoKSwgbmV4dFJlbmRlcmVyKCkpOwor
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQocmVuZGVyZXIoKSwg
bmV4dFJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDczMTgzKQorKysgV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsU2NyZWVuRm9y
RWxlbWVudChjb25zdCBFbGVtZW50KikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVh
bCB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopIHsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJlckNoYW5nZWQoUmVuZGVyQm94KikgeyB9
CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75574</attachid>
            <date>2010-12-03 16:13:07 -0800</date>
            <delta_ts>2010-12-21 11:17:06 -0800</delta_ts>
            <desc>WebKit-WebFullScreenController</desc>
            <filename>NewFullScreen-Rev-2.WebFullscreenController.patch</filename>
            <type>text/plain</type>
            <size>40712</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gNzMxODMpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMTEtMTIgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVt
ZW50IFdlYktpdCBGdWxsIFNjcmVlbiBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0ODEKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODI0
NzQ0NAorICAgICAgICAKKyAgICAgICAgQWRkIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcCxo
IHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisKIDIwMTAtMTEtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgICogU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0OiBVcGRhdGVkIGZvciByZWNlbnQg
Y2hhbmdlcy4KSW5kZXg6IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDczMTgzKQorKysgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNiArMzYzLDggQEAKIAkJQzBDNUIzRUUxMTc3QTRBMDAw
MkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBDNUIzRUMxMTc3QTRBMDAwMkIwQUVGIC8qIFdl
YlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUMwQzVCM0VGMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29u
dGVudFVSTFBhdHRlcm4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMEM1QjNFRDExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLm1tICovOyB9OwogCQlDRDhFQUM3MzExQ0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4
RUFDNzIxMUNBQzlBMzAwNzc0MDc1IC8qIElPS2l0LmZyYW1ld29yayAqLzsgfTsKKwkJQ0RBNjJB
RTIxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE2MkFFMDEyNUY4N0MyMDA3
RkQxMTggLyogV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0RBNjJBRTMxMjVG
ODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNjJBRTExMjVGODdDMjAwN0ZEMTE4
IC8qIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyLm1tICovOyB9OwogCQlERDdDREVFNzBBMjNCQTlF
MDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gREQ3Q0RFRTYwQTIzQkE5RTAwMDY5OTI4IC8qIFdlYlR5cGVz
SW50ZXJuYWwuaCAqLzsgfTsKIAkJREQ4OTY4MjAwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1l
bnREaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBERDg5NjgxRTA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkuaCAq
LzsgfTsKIAkJREQ4OTY4MjEwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQ4OTY4
MUYwOUFBODcyNDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tICovOyB9OwpAQCAt
Njg1LDYgKzY4Nyw4IEBACiAJCUMwQzVCM0VDMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwQzVC
M0VEMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRl
cm4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEVBQzcyMTFDQUM5QTMwMDc3
NDA3NSAvKiBJT0tpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IElPS2l0LmZyYW1ld29y
azsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yazsgc291
cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8q
IFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsc2NyZWVuQ29udHJvbGxlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkZ1bGxzY3JlZW5D
b250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDdDREVFNjBBMjNC
QTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJUeXBlc0ludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUREODk2ODFFMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVsZW1l
bnREaWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQlERDg5NjgxRjA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERp
Y3Rpb25hcnkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTExODcsNiArMTE5MSw4IEBA
CiAJCQkJNTFBOEI1MkYwNDI4MkI1OTAwQ0EyRDNBIC8qIFdlYkZyYW1lVmlldy5tbSAqLywKIAkJ
CQk1MUE4QjUzMjA0MjgyQkQyMDBDQTJEM0EgLyogV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCAqLywK
IAkJCQk5M0M2RjE0NTA3OTIwQjkzMDAyNDQ5Q0QgLyogV2ViRnJhbWVWaWV3UHJpdmF0ZS5oICov
LAorCQkJCUNEQTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsc2NyZWVuQ29udHJvbGxl
ci5oICovLAorCQkJCUNEQTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsc2NyZWVuQ29u
dHJvbGxlci5tbSAqLywKIAkJCQlCQzdGODg5QzEwQzlEMzBDMDBENjEzM0QgLyogV2ViR2VvbG9j
YXRpb25Qb3NpdGlvbi5oICovLAogCQkJCUJDN0Y4ODlEMTBDOUQzMEMwMEQ2MTMzRCAvKiBXZWJH
ZW9sb2NhdGlvblBvc2l0aW9uLm1tICovLAogCQkJCUJDN0Y4OEE0MTBDOUQ4OEIwMEQ2MTMzRCAv
KiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uSW50ZXJuYWwuaCAqLywKQEAgLTE2MjUsNiArMTYzMSw3
IEBACiAJCQkJNTk4QUQ5MkExMjAxQ0YzQjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9u
UHJvdmlkZXJNb2NrSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5OEFEQTQ2MTIwMjI3
NTAwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0UyQTFBNDEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbHNj
cmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTY2Niw3ICsxNjczLDYgQEAKIAkJ
CWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4MzIw
ODkwMkIwRjAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiV2ViS2l0IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0J
CQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rpbmdz
ID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTk5Myw2ICsxOTk5
LDcgQEAKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRp
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFFNEUgLyogV2Vi
RGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0Uy
QTFBNTEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJQ0RBNjJBRTMxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxzY3JlZW5Db250cm9s
bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzMxODMpCisrKyBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEwLTExLTEy
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBXZWJLaXQgRnVsbCBTY3JlZW4g
c3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ5NDgxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzgyNDc0NDQKKyAgICAgICAgCisgICAgICAg
IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgRnVsbFNjcmVlbiBBUElzIHVzaW5nIHRoZSBuZXcg
UmVuZGVyRnVsbFNjcmVlbiByZW5kZXJlciBhbmQgdGhlIG5ldworICAgICAgICBEb2N1bWVudCBj
bGllbnQgQVBJcy4gIFRoZSBSZW5kZXJGdWxsU2NyZWVuIHJlbmRlcmVyJ3MgQ0FMYXllciBpcyBo
b3N0ZWQgaW4gYSBuZXcsIGZ1bGxzY3JlZW4KKyAgICAgICAgd2luZG93LCBhbmQgYSBjdXN0b20g
Q0FBbmltYXRpb24gYW5pbWF0ZXMgdGhhdCBsYXllciBiZXR3ZWVuIHRoZSBpbml0aWFsIHNjcmVl
biByZWN0IG9mIHRoZSBmdWxsCisgICAgICAgIHNjcmVlbiBlbGVtZW50LCB0byBpdHMgZmluYWwg
dmFsdWUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQpOiBJZiB0aGUgZGVsZWdh
dGUgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG1ldGhvZAorICAgICAgICAgICAgaW5zdGVhZCBhbGxv
dyBXZWJWaWV3IHRvIHByb3ZpZGUgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xp
ZW50IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjplbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpmdWxsU2Ny
ZWVuUmVuZGVyZXJDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJWaWV3IF9zdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50OldlYkNv
cmU6Ol0pOiBDaGVjayB0byBzZWUgaWYgdGhlIGZ1bGxzY3JlZW4gcHJlZiBoYXMgYmVlbiBlbmFi
bGVkLgorICAgICAgICAoLVtXZWJWaWV3IF9lbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50OldlYkNv
cmU6Ol0pOiBDcmVhdGUgYSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci4KKyAgICAgICAgKC1bV2Vi
VmlldyBfZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50OldlYkNvcmU6Ol0pOiBSZXF1ZXN0IHRoYXQg
dGhlIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGV4aXQgZnVsbHNjcmVlbi4KKyAgICAgICAgKC1b
V2ViVmlldyBfZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZDpXZWJDb3JlOjpdKTogTm90aWZ5IHRo
ZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlciB0aGF0IGl0cyByZW5kZXJlciBoYXMgY2hhbmdlZC4K
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIubW06IEFkZGVkLiAgQ29waWVk
IGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBhbmQgbW9kaWZpZWQuCisgICAgICAg
ICgtW1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyIHNldEVsZW1lbnQ6XSk6ICBBZGQgbGlzdGVuZXJz
IGZvciBtZWRpYSBldmVudHMgdG8gdGhlIGVsZW1lbnQncyB3aW5kb3cuCisgICAgICAgICgtW1dl
YkZ1bGxzY3JlZW5Db250cm9sbGVyIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuOl0pOgorICAgICAg
ICAoLVtXZWJGdWxsc2NyZWVuQ29udHJvbGxlciB3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW46XSk6
CisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjpdKToK
KyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dKToKKyAg
ICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc10p
OiBVc2UgX2lzQW55TW92aWVQbGF5aW5nIHRvIGRldGVybWluZSB3aGljaCBhc3NlcnRpb25zIHRv
IHNldC4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgX2lzQW55TW92aWVQbGF5
aW5nXSk6IFdhbGsgdGhyb3VnaCB0aGUgX2VsZW1lbnQgYW5kIGl0cyBjaGlsZHJlbiBsb29raW5n
IGZvciAKKyAgICAgICAgICAgIG1lZGlhIGVsZW1lbnRzLCBhbmQgaWYgZm91bmQsIGNoZWNrIHRo
ZWlyIHBsYXkgc3RhdGUuCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyIF9mdWxs
c2NyZWVuV2luZG93XSk6IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoLVtXZWJGdWxs
c2NyZWVuQ29udHJvbGxlciBfZG9jdW1lbnRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZ1bGxz
Y3JlZW5Db250cm9sbGVyIF9hbmltYXRpb25EdXJhdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnVsbHNjcmVlbldpbmRvdyBpbml0V2l0aENvbnRlbnRSZWN0OnN0eWxlTWFzazpiYWNraW5n
OmRlZmVyOl0pOiBXaW5kb3cgaXMgbm90IG1vdmFibGUsIGFuZCBjcmVhdGVzIAorICAgICAgICAg
ICAgdGhlIGJhY2tncm91bmQgbGF5ZXIuCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5XaW5kb3cg
a2V5RG93bjpdKTogSGFuZGxlIHRoZSAnRXNjJyBrZXkuCisgICAgICAgICgtW1dlYkZ1bGxzY3Jl
ZW5XaW5kb3cgY2FuY2VsT3BlcmF0aW9uOl0pOiBSZXF1ZXN0IHRvIGV4aXQgZnVsbHNjcmVlbi4K
KyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbldpbmRvdyByZW5kZXJlckxheWVyXSk6IENvbnZlbmll
bmNlIGFjY2Vzc29yLgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuV2luZG93IHNldFJlbmRlcmVy
TGF5ZXI6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuV2luZG93IGJhY2tncm91
bmRMYXllcl0pOiBEaXR0by4KKyAgICAgICAgKE1lZGlhRXZlbnRMaXN0ZW5lcjo6TWVkaWFFdmVu
dExpc3RlbmVyKTogSW1wbGVtZW50cyB0aGUgRXZlbnRMaXN0ZW5lciBwcm90b2NvbC4KKyAgICAg
ICAgKE1lZGlhRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOiBUZWxscyBpdHMgZGVsZWdhdGUg
dG8gX3VwZGF0ZVBvd2VyQXNzZXJ0aW9ucy4KKwogMjAxMC0xMi0wMiAgSm9obiBLbm90dGVuYmVs
dCAgPGprbm90dGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBC
bG9jay4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxl
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250
cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKK0BjbGFz
cyBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uOworQGNsYXNzIFdlYlZpZXc7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBSZW5kZXJCb3g7CisgICAgY2xh
c3MgRXZlbnRMaXN0ZW5lcjsKK30KKworQGludGVyZmFjZSBXZWJGdWxsc2NyZWVuQ29udHJvbGxl
ciA6IE5TV2luZG93Q29udHJvbGxlciB7CitAcHJpdmF0ZQorICAgIFJlZlB0cjxXZWJDb3JlOjpF
bGVtZW50PiBfZWxlbWVudDsKKyAgICBXZWJDb3JlOjpSZW5kZXJCb3gqIF9yZW5kZXJlcjsgLy8g
KHNldCkKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gX3JlcGxhY2VtZW50RWxlbWVudDsg
CisgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsgLy8gKHJldGFpbikK
KyAgICBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uICpfZmFkZUFuaW1hdGlvbjsgLy8gKHJldGFpbikK
KyAgICBXZWJWaWV3ICpfd2ViVmlldzsKKyAgICBDQUxheWVyKiBfcmVuZGVyZXJMYXllcjsKKyAg
ICBDQUxheWVyKiBfYmFja2dyb3VuZExheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudExp
c3RlbmVyPiBfbWVkaWFFdmVudExpc3RlbmVyOyAKKworICAgIEJPT0wgX2lzQW5pbWF0aW5nOwor
ICAgIEJPT0wgX2lzRnVsbHNjcmVlbjsKKyAgICBCT09MIF9pc1dpbmRvd0xvYWRlZDsKKyAgICBC
T09MIF9mb3JjZURpc2FibGVBbmltYXRpb247CisgICAgQk9PTCBfaXNQbGF5aW5nOworICAgIHVp
bnQzMl90IF9pZGxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uOworICAgIHVpbnQzMl90IF9pZGxlU3lz
dGVtU2xlZXBBc3NlcnRpb247CisgICAgTlNUaW1lciAqX3RpY2tsZVRpbWVyOworICAgIFN5c3Rl
bVVJTW9kZSBfc2F2ZWRVSU1vZGU7CisgICAgU3lzdGVtVUlPcHRpb25zIF9zYXZlZFVJT3B0aW9u
czsKKyAgICBDR1JlY3QgX2luaXRpYWxGcmFtZTsKK30KKworLSAoV2ViVmlldyopd2ViVmlldzsK
Ky0gKHZvaWQpc2V0V2ViVmlldzooV2ViVmlldyopd2ViVmlldzsKKworLSAodm9pZClzZXRFbGVt
ZW50OihQYXNzUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+KWVsZW1lbnQ7CistIChXZWJDb3JlOjpF
bGVtZW50KillbGVtZW50OworCistICh2b2lkKXNldFJlbmRlcmVyOihXZWJDb3JlOjpSZW5kZXJC
b3gqKXJlbmRlcmVyOworLSAoV2ViQ29yZTo6UmVuZGVyQm94KilyZW5kZXJlcjsKKworLSAodm9p
ZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuOworLSAodm9pZClleGl0RnVsbHNj
cmVlbjsKKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbQkocmV2aXNp
b24gMCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorCisjaW1wb3J0ICJXZWJGdWxsc2NyZWVuQ29udHJvbGxlci5oIgorCisj
aW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYldpbmRvd0FuaW1h
dGlvbi5oIgorI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0IDxJT0tpdC9wd3Jf
bWd0L0lPUE1MaWIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQW5pbWF0aW9uTGlzdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9DU1NQcm9wZXJ0eU5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTURvY3VtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RP
TURvY3VtZW50SW50ZXJuYWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRE9NSFRNTEVsZW1lbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRE9NV2luZG93Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TGlz
dGVuZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL05vZGVMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5r
aW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJsb2NrLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgor
I2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5o
PgorCitzdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGlja2xlVGltZXJJbnRlcnZhbCA9IDEu
MDsKK3N0YXRpYyBjb25zdCBOU1N0cmluZyogaXNGdWxsc2NyZWVuS2V5ID0gQCJpc0Z1bGxzY3Jl
ZW4iOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGludGVyZmFjZSBXZWJGdWxsc2Ny
ZWVuV2luZG93IDogTlNXaW5kb3cKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKzxOU0FuaW1hdGlvbkRlbGVnYXRlPgorI2Vu
ZGlmCit7CisgICAgQ0FMYXllciogX3JlbmRlcmVyTGF5ZXI7CisgICAgQ0FMYXllciogX2JhY2tn
cm91bmRMYXllcjsKK30KKy0gKENBTGF5ZXIqKXJlbmRlcmVyTGF5ZXI7CistICh2b2lkKXNldFJl
bmRlcmVyTGF5ZXI6KENBTGF5ZXIqKXJlbmRlcmVyTGF5ZXI7CistIChDQUxheWVyKiliYWNrZ3Jv
dW5kTGF5ZXI7CitAZW5kCisKK2NsYXNzIE1lZGlhRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVu
dExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUV2ZW50TGlz
dGVuZXI+IGNyZWF0ZShXZWJGdWxsc2NyZWVuQ29udHJvbGxlciogZGVsZWdhdGUpOworICAgIHZp
cnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50Kik7CisKK3By
aXZhdGU6CisgICAgTWVkaWFFdmVudExpc3RlbmVyKFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyKiBk
ZWxlZ2F0ZSk7IAorICAgIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZTsKK307CisK
K0BpbnRlcmZhY2UgV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIoKQorLSAodm9pZClfcmVxdWVzdEV4
aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247CistICh2b2lkKV91cGRh
dGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47CistICh2b2lkKV91cGRhdGVQb3dlckFzc2VydGlv
bnM7CistIChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5XaW5kb3c7CistIChEb2N1
bWVudCopX2RvY3VtZW50OworLSAoQ0ZUaW1lSW50ZXJ2YWwpX2FuaW1hdGlvbkR1cmF0aW9uOwor
LSAoQk9PTClfaXNBbnlNb3ZpZVBsYXlpbmc7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNXaW5kb3co
SXNPbkFjdGl2ZVNwYWNlQWRkaXRpb25Gb3JUaWdlckFuZExlb3BhcmQpCistIChCT09MKWlzT25B
Y3RpdmVTcGFjZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkZ1bGxzY3JlZW5Db250cm9s
bGVyCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgSW5pdGlhbGl6YXRpb24KKy0gKGlk
KWluaXQKK3sKKyAgICAvLyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0aW9uLCB0byBtYWtlIHN1
cmUgLXdpbmRvd051bWJlciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2ViV2luZG93U2NhbGVBbmlt
YXRpb24pLgorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbW1dlYkZ1bGxzY3JlZW5XaW5kb3cgYWxs
b2NdIGluaXRXaXRoQ29udGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNz
V2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVh
c2VdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3aW5k
b3dEaWRMb2FkXTsKKyAgICBfbWVkaWFFdmVudExpc3RlbmVyID0gTWVkaWFFdmVudExpc3RlbmVy
OjpjcmVhdGUoc2VsZik7CisgICAgcmV0dXJuIHNlbGY7CisgICAgCit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIEFTU0VSVCghX3RpY2tsZVRpbWVyKTsKKyAgICAKKyAgICBbc2VsZiBzZXRX
ZWJWaWV3Om5pbF07CisgICAgCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KHZvaWQpd2luZG93RGlkTG9hZAoreworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8g
V2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBUaWdlcjoKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlCisgICAgCisgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihh
cHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZFJlc2lnbkFj
dGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYXBw
bGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOikgbmFtZTpOU0FwcGxpY2F0aW9uRGlk
Q2hhbmdlU2NyZWVuUGFyYW1ldGVyc05vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOworI2VuZGlm
Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQWNjZXNzb3JzCisKKy0gKFdlYlZp
ZXcqKXdlYlZpZXcKK3sKKyAgICByZXR1cm4gX3dlYlZpZXc7Cit9CisKKy0gKHZvaWQpc2V0V2Vi
VmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBbd2ViVmlldyByZXRhaW5dOworICAgIFtf
d2ViVmlldyByZWxlYXNlXTsKKyAgICBfd2ViVmlldyA9IHdlYlZpZXc7Cit9CisKKy0gKEVsZW1l
bnQqKWVsZW1lbnQKK3sKKyAgICByZXR1cm4gX2VsZW1lbnQuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
c2V0RWxlbWVudDooUGFzc1JlZlB0cjxFbGVtZW50PillbGVtZW50Cit7CisjaWZkZWYgQlVJTERJ
TkdfT05fVElHRVIKKyAgICAvLyBXZWJGdWxsc2NyZWVuQ29udHJvbGxlciBpcyBub3Qgc3VwcG9y
dGVkIG9uIFRpZ2VyOgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vsc2UKKyAgICBFdmVu
dE5hbWVzJiBldmVudE5hbWVzID0gV2ViQ29yZTo6ZXZlbnROYW1lcygpOworICAgIAorICAgIGlm
IChfZWxlbWVudCkgeworICAgICAgICBET01XaW5kb3cqIHdpbmRvdyA9IF9lbGVtZW50LT5kb2N1
bWVudCgpLT5kb21XaW5kb3coKTsKKyAgICAgICAgaWYgKHdpbmRvdykgeworICAgICAgICAgICAg
d2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMucGxheUV2ZW50LCAgX21lZGlh
RXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICB3aW5kb3ctPnJlbW92ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wYXVzZUV2ZW50LCBfbWVkaWFFdmVudExpc3RlbmVyLmdl
dCgpLCB0cnVlKTsKKyAgICAgICAgICAgIHdpbmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzLmVuZGVkRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVuZXIuZ2V0KCksIHRydWUpOworICAg
ICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBfZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgCisg
ICAgaWYgKF9lbGVtZW50KSB7CisgICAgICAgIERPTVdpbmRvdyogd2luZG93ID0gX2VsZW1lbnQt
PmRvY3VtZW50KCktPmRvbVdpbmRvdygpOworICAgICAgICBpZiAod2luZG93KSB7CisgICAgICAg
ICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wbGF5RXZlbnQsICBfbWVk
aWFFdmVudExpc3RlbmVyLCB0cnVlKTsKKyAgICAgICAgICAgIHdpbmRvdy0+YWRkRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVuZXIsIHRydWUpOwor
ICAgICAgICAgICAgd2luZG93LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMuZW5kZWRFdmVu
dCwgX21lZGlhRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
K30KKworLSAoUmVuZGVyQm94KilyZW5kZXJlciAKK3sKKyAgICByZXR1cm4gX3JlbmRlcmVyOwor
fQorCistICh2b2lkKXNldFJlbmRlcmVyOihSZW5kZXJCb3gqKXJlbmRlcmVyCit7CisjaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBXZWJGdWxsc2NyZWVuQ29udHJvbGxlciBpcyBub3Qg
c3VwcG9ydGVkIG9uIFRpZ2VyOgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vsc2UKKyAg
ICBfcmVuZGVyZXIgPSByZW5kZXJlcjsKKyNlbmRpZgorfQorCisjcHJhZ21hIG1hcmsgLQorI3By
YWdtYSBtYXJrIE5vdGlmaWNhdGlvbnMKKworLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbHNjcmVl
bjooQk9PTClmaW5pc2hlZAoreworICAgIGlmICghX2lzQW5pbWF0aW5nKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKF9pc0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgQVNTRVJUKF9lbGVtZW50KTsKKyAg
ICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2Vs
ZW1lbnQuZ2V0KCkpOworICAgIF9lbGVtZW50ID0gMDsKKworICAgIGlmIChmaW5pc2hlZCkgewor
ICAgICAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuXTsgICAKKyAgICAg
ICAgW3NlbGYgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc107CisgICAgICAgIAorICAgICAgICBbW193
ZWJWaWV3IHdpbmRvd10gZGlzcGxheV07CisgICAgICAgIFtbc2VsZiBfZnVsbHNjcmVlbldpbmRv
d10gc2V0UmVuZGVyZXJMYXllcjpuaWxdOworICAgICAgICBbW3NlbGYgd2luZG93XSBjbG9zZV07
CisgICAgfQorCisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7CisKKyAgICBfaXNBbmltYXRp
bmcgPSBOTzsKKyAgICBbc2VsZiBhdXRvcmVsZWFzZV07IC8vIEFzc29jaWF0ZWQgLXJldGFpbiBp
cyBpbiAtZXhpdEZ1bGxzY3JlZW4uCit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsc2Ny
ZWVuOihCT09MKWZpbmlzaGVkCit7CisgICAgaWYgKCFfaXNBbmltYXRpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAoIV9pc0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAKKyAgICBpZiAoZmluaXNoZWQpIHsKKyAgICAgICAg
W3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07CisgICAgICAgIFtzZWxmIF91
cGRhdGVQb3dlckFzc2VydGlvbnNdOworICAgICAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxN
b3VzZU1vdmVzOllFU107CisgICAgfQorCisgICAgX2lzQW5pbWF0aW5nID0gTk87Cit9CisKKy0g
KHZvaWQpYW5pbWF0aW9uRGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmltIGZpbmlzaGVkOihCT09M
KWZpbmlzaGVkCit7CisgICAgQk9PTCBpc0Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW2FuaW0gdmFs
dWVGb3JLZXk6aXNGdWxsc2NyZWVuS2V5XSBib29sVmFsdWVdOworICAgIAorICAgIGlmICghaXNG
dWxsc2NyZWVuQW5pbWF0aW9uKQorICAgICAgICBbc2VsZiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVl
bjpmaW5pc2hlZF07CisgICAgZWxzZQorICAgICAgICBbc2VsZiB3aW5kb3dEaWRFbnRlckZ1bGxz
Y3JlZW46ZmluaXNoZWRdOworfQorCistICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZl
OihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCit7ICAgCisgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBmdWxsc2NyZWVuV2luZG93IGlzIG9uIHRoZSBhY3RpdmUgc3BhY2U7IHRoaXMgZnVu
Y3Rpb24gaXMgYXZhaWxhYmxlCisgICAgLy8gb24gMTAuNiBhbmQgbGF0ZXIsIHNvIGRlZmF1bHQg
dG8gWUVTIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlOgorICAgIE5TV2luZG93KiBm
dWxsc2NyZWVuV2luZG93ID0gW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddOworICAgIEJPT0wgaXNP
bkFjdGl2ZVNwYWNlID0gKFtmdWxsc2NyZWVuV2luZG93IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoaXNPbkFjdGl2ZVNwYWNlKV0gPyBbZnVsbHNjcmVlbldpbmRvdyBpc09uQWN0aXZlU3Bh
Y2VdIDogWUVTKTsKKworICAgIC8vIFJlcGxpY2F0ZSB0aGUgUXVpY2tUaW1lIFBsYXllciAoWCkg
YmVoYXZpb3Igd2hlbiBsb3NpbmcgYWN0aXZlIGFwcGxpY2F0aW9uIHN0YXR1czoKKyAgICAvLyBJ
cyB0aGUgZnVsbHNjcmVlbiBzY3JlZW4gdGhlIG1haW4gc2NyZWVuPyAoTm90ZTogdGhpcyBjb3Zl
cnMgdGhlIGNhc2Ugd2hlcmUgb25seSBhIAorICAgIC8vIHNpbmdsZSBzY3JlZW4gaXMgYXZhaWxh
YmxlLikgIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiBvbiB0aGUgY3VycmVudCBzcGFjZT8gSUZG
IHNvLCAKKyAgICAvLyB0aGVuIGV4aXQgZnVsbHNjcmVlbiBtb2RlLiAgICAKKyAgICBpZiAoW2Z1
bGxzY3JlZW5XaW5kb3cgc2NyZWVuXSA9PSBbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5k
ZXg6MF0gJiYgaXNPbkFjdGl2ZVNwYWNlKQorICAgICAgICAgW3NlbGYgX3JlcXVlc3RFeGl0RnVs
bHNjcmVlbldpdGhBbmltYXRpb246Tk9dOworfQorCistICh2b2lkKWFwcGxpY2F0aW9uRGlkQ2hh
bmdlU2NyZWVuUGFyYW1ldGVyczooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgoreworICAg
IC8vIFRoZSB1c2VyIG1heSBoYXZlIGNoYW5nZWQgdGhlIG1haW4gc2NyZWVuIGJ5IG1vdmluZyB0
aGUgbWVudSBiYXIsIG9yIHRoZXkgbWF5IGhhdmUgY2hhbmdlZAorICAgIC8vIHRoZSBEb2NrJ3Mg
c2l6ZSBvciBsb2NhdGlvbiwgb3IgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBmdWxsc2NyZWVu
IHNjcmVlbidzIGRpbWVuc2lvbnMuICAKKyAgICAvLyBVcGRhdGUgb3VyIHByZXNlbnRhdGlvbiBw
YXJhbWV0ZXJzLCBhbmQgZW5zdXJlIHRoYXQgdGhlIGZ1bGwgc2NyZWVuIHdpbmRvdyBvY2N1cGll
cyB0aGUgCisgICAgLy8gZW50aXJlIHNjcmVlbjoKKyAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERv
Y2tGb3JGdWxsc2NyZWVuXTsKKyAgICBOU1dpbmRvdyogd2luZG93ID0gW3NlbGYgd2luZG93XTsK
KyAgICBbd2luZG93IHNldEZyYW1lOltbd2luZG93IHNjcmVlbl0gZnJhbWVdIGRpc3BsYXk6WUVT
XTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBFeHBvc2VkIEludGVyZmFjZQor
CistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KK3sKKyAgICBpZiAo
X2lzRnVsbHNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChfaXNBbmltYXRp
bmcpIHsKKyAgICAgICAgLy8gVGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlIGZ1bmN0aW9ucyB3aWxs
IG9ubHkgYmUgY2FsbGVkIHRoZQorICAgICAgICAvLyBuZXh0IHRyaXAgdGhyb3VnaCB0aGUgcnVu
LWxvb3AsIHNvIG1hbnVhbGx5IGNhbGwgdGhlIGRlbGVnYXRlCisgICAgICAgIC8vIGZ1bmN0aW9u
IGhlcmUsIGxldHRpbmcgaXQga25vdyB0aGUgYW5pbWF0aW9uIGRpZCBub3QgY29tcGxldGU6Cisg
ICAgICAgIFtzZWxmIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuOk5PXTsKKyAgICAgICAgQVNTRVJU
KCFfaXNBbmltYXRpbmcpOworICAgIH0KKyAgICBfaXNGdWxsc2NyZWVuID0gWUVTOworICAgIF9p
c0FuaW1hdGluZyA9IFlFUzsKKyAgICAKKyAgICAvLyBzZXRFbGVtZW50OiBtdXN0IGJlIGNhbGxl
ZCB3aXRoIGEgbm9uLW5pbCB2YWx1ZSBiZWZvcmUgY2FsbGluZyBlbnRlckZ1bGxzY3JlZW46Lgor
ICAgIEFTU0VSVChfZWxlbWVudCk7CisgICAgCisgICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRlcygp
OworICAgIAorICAgIGlmICghc2NyZWVuKQorICAgICAgICBzY3JlZW4gPSBbTlNTY3JlZW4gbWFp
blNjcmVlbl07CisgICAgTlNSZWN0IHNjcmVlbkZyYW1lID0gW3NjcmVlbiBmcmFtZV07CisgICAg
CisgICAgV2ViVmlldyogd2ViVmlldyA9IFtzZWxmIHdlYlZpZXddOworICAgIE5TUmVjdCB3ZWJW
aWV3RnJhbWUgPSBbd2ViVmlldyBjb252ZXJ0UmVjdFRvQmFzZTpbd2ViVmlldyBmcmFtZV1dOwor
ICAgIHdlYlZpZXdGcmFtZS5vcmlnaW4gPSBbW3dlYlZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRv
U2NyZWVuOndlYlZpZXdGcmFtZS5vcmlnaW5dOworICAgIAorICAgIE5TUmVjdCBlbGVtZW50RnJh
bWUgPSBfZWxlbWVudC0+c2NyZWVuUmVjdCgpOworICAgIAorICAgIC8vIEluIHRoZSBjYXNlIG9m
IGEgbXVsdGktbW9uaXRvciBzZXR1cCB3aGVyZSB0aGUgd2ViVmlldyBzdHJhZGRsZXMgdHdvCisg
ICAgLy8gbW9uaXRvcnMsIHdlIG11c3QgY3JlYXRlIGEgd2luZG93IGxhcmdlIGVub3VnaCB0byBj
b250YWluIHRoZSBkZXN0aW5hdGlvbgorICAgIC8vIGZyYW1lIGFuZCB0aGUgaW5pdGlhbCBmcmFt
ZS4KKyAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSBOU1VuaW9uUmVjdChzY3JlZW5GcmFtZSwgZWxl
bWVudEZyYW1lKTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTp3aW5kb3dGcmFtZSBkaXNw
bGF5OllFU107CisgICAgCisgICAgTlNWaWV3KiBjb250ZW50VmlldyA9IFtbc2VsZiB3aW5kb3dd
IGNvbnRlbnRWaWV3XTsKKyAgICBOU1JlY3Qgdmlld0JvdW5kcyA9IFtjb250ZW50VmlldyBib3Vu
ZHNdOworICAgIAorICAgIE5TUmVjdCBiYWNrZ3JvdW5kQm91bmRzID0ge1tbc2VsZiB3aW5kb3dd
IGNvbnZlcnRTY3JlZW5Ub0Jhc2U6c2NyZWVuRnJhbWUub3JpZ2luXSwgc2NyZWVuRnJhbWUuc2l6
ZX07CisgICAgYmFja2dyb3VuZEJvdW5kcyA9IFtjb250ZW50VmlldyBjb252ZXJ0UmVjdEZyb21C
YXNlOmJhY2tncm91bmRCb3VuZHNdOworICAgIC8vIEZsaXAgdGhlIGJhY2tncm91bmQgbGF5ZXIn
cyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBiYWNrZ3JvdW5kQm91bmRzLm9yaWdpbi55ID0gd2lu
ZG93RnJhbWUuc2l6ZS5oZWlnaHQgLSBOU01heFkoYmFja2dyb3VuZEJvdW5kcyk7CisgICAgCisg
ICAgLy8gU2V0IG91ciBmdWxsc2NyZWVuIGVsZW1lbnQncyBpbml0aWFsIGZyYW1lLCBhbmQgZmxp
cCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW1zIGZyb20KKyAgICAvLyBzY3JlZW4gY29vcmRpbmF0ZXMg
KGJvdHRvbS9sZWZ0KSB0byBsYXllciBjb29yZGluYXRlcyAodG9wL2xlZnQpOgorICAgIF9pbml0
aWFsRnJhbWUgPSBOU1JlY3RUb0NHUmVjdChOU0ludGVyc2VjdGlvblJlY3QoZWxlbWVudEZyYW1l
LCB3ZWJWaWV3RnJhbWUpKTsKKyAgICBfaW5pdGlhbEZyYW1lLm9yaWdpbi55ID0gc2NyZWVuRnJh
bWUuc2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRNYXhZKF9pbml0aWFsRnJhbWUpOworICAgIAorICAg
IC8vIEluZm9ybSB0aGUgZG9jdW1lbnQgdGhhdCB3ZSB3aWxsIGJlZ2luIGVudGVyaW5nIGZ1bGwg
c2NyZWVuLiAgVGhpcyB3aWxsIGNoYW5nZQorICAgIC8vIHBzZXVkby1jbGFzc2VzIG9uIHRoZSBm
dWxsc2NyZWVuIGVsZW1lbnQgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IFtzZWxmIF9kb2N1bWVudF07CisgICAgZG9jdW1lbnQtPndlYmtpdFdpbGxF
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBBU1NFUlQoX3Jl
bmRlcmVyKTsKKyAgICAKKyAgICAvLyBTZXQgdXAgdGhlIGZpbmFsIHN0eWxlIG9mIHRoZSBGdWxs
U2NyZWVuIHJlbmRlciBibG9jay4gIFNldCBhbiBhYnNvbHV0ZQorICAgIC8vIHdpZHRoIGFuZCBo
ZWlnaHQgZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIHNjcmVlbiwgYW5kIGFuY2hvciB0aGUgbGF5
ZXIKKyAgICAvLyBhdCB0aGUgdG9wLCBsZWZ0IGF0ICgwLDApLiAgVGhlIFJlbmRlckZ1bGxTY3Jl
ZW4gc3R5bGUgaXMgYWxyZWFkeSBzZXQgCisgICAgLy8gdG8gcG9zaXRpb246Zml4ZWQuCisgICAg
W3NlbGYgX2RvY3VtZW50XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyU2l6ZShzY3JlZW5GcmFtZS5z
aXplLndpZHRoLCBzY3JlZW5GcmFtZS5zaXplLmhlaWdodCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgCisgICAgLy8gQ2F1c2UgdGhlIGRvY3Vt
ZW50IHRvIGxheW91dCwgdGh1cyBjYWxjdWxhdGluZyBhIG5ldyBmdWxsc2NyZWVuIGVsZW1lbnQg
c2l6ZToKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQoKTsKKyAgICAKKyAgICAv
LyBGSVhNRTogdHJ5IHRvIHVzZSB0aGUgZnVsbHNjcmVlbiBlbGVtZW50J3MgY2FsY3VsYXRlZCB4
LCB5LCB3aWR0aCwgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIHRoZQorICAgIC8vIHJlbmRlckJveCBm
dW5jdGlvbnM6CisgICAgUmVuZGVyQm94KiBjaGlsZFJlbmRlcmVyID0gX3JlbmRlcmVyLT5maXJz
dENoaWxkQm94KCk7CisgICAgQ0dSZWN0IGRlc3RpbmF0aW9uRnJhbWUgPSBDR1JlY3RNYWtlKGNo
aWxkUmVuZGVyZXItPngoKSwgY2hpbGRSZW5kZXJlci0+eSgpLCBjaGlsZFJlbmRlcmVyLT53aWR0
aCgpLCBjaGlsZFJlbmRlcmVyLT5oZWlnaHQoKSk7ICAgIAorICAgIAorICAgIC8vIFNvbWUgcHJv
cGVydGllcyBoYXZlbid0IHByb3BvZ2F0ZWQgZnJvbSB0aGUgR3JhcGhpY3NMYXllciB0byB0aGUg
Q0FMYXllciB5ZXQuICBTbworICAgIC8vIHRlbGwgdGhlIHJlbmRlcmVyJ3MgbGF5ZXIgdG8gc3lu
YyBpdCdzIGNvbXBvc2l0aW5nIHN0YXRlOgorICAgIEdyYXBoaWNzTGF5ZXIqIHJlbmRlcmVyR3Jh
cGhpY3MgPSBfcmVuZGVyZXItPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpOwor
ICAgIHJlbmRlcmVyR3JhcGhpY3MtPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7ICAgIAorCisgICAg
Q0FMYXllciogcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyR3JhcGhpY3MtPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIHNldFJlbmRlcmVyTGF5ZXI6cmVuZGVy
ZXJMYXllcl07ICAgIAorICAgIAorICAgIENGVGltZUludGVydmFsIGR1cmF0aW9uID0gW3NlbGYg
X2FuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgIC8vIENyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeCB0aGF0IHdpbGwgdHJhbnNmb3JtIHRoZSByZW5kZXJlciBsYXllciBzdWNoIHRoYXQgCisg
ICAgLy8gdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCBhcHBlYXJzIHRvIG1vdmUgZnJvbSBpdHMgc3Rh
cnRpbmcgcG9zaXRpb24gYW5kIHNpemUgdG8gaXRzCisgICAgLy8gZmluYWwgb25lOgorICAgIENB
VHJhbnNmb3JtM0Qgc2hyaW5rVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShfaW5p
dGlhbEZyYW1lLnNpemUud2lkdGggLyBkZXN0aW5hdGlvbkZyYW1lLnNpemUud2lkdGgsIF9pbml0
aWFsRnJhbWUuc2l6ZS5oZWlnaHQgLyBkZXN0aW5hdGlvbkZyYW1lLnNpemUuaGVpZ2h0LCAxKTsK
KyAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06c2hyaW5rVHJhbnNmb3JtXTsKKyAgICBD
R1JlY3Qgc2hydW5rRGVzdGluYXRpb25GcmFtZSA9IFtyZW5kZXJlckxheWVyIGNvbnZlcnRSZWN0
OmRlc3RpbmF0aW9uRnJhbWUgdG9MYXllcjpbY29udGVudFZpZXcgbGF5ZXJdXTsKKyAgICBDQVRy
YW5zZm9ybTNEIG1vdmVUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKF9p
bml0aWFsRnJhbWUub3JpZ2luLnggLSBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi54LCBf
aW5pdGlhbEZyYW1lLm9yaWdpbi55IC0gc2hydW5rRGVzdGluYXRpb25GcmFtZS5vcmlnaW4ueSwg
MCk7CisgICAgQ0FUcmFuc2Zvcm0zRCBmaW5hbFRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RDb25j
YXQoc2hyaW5rVHJhbnNmb3JtLCBtb3ZlVHJhbnNmb3JtKTsKKyAgICBbcmVuZGVyZXJMYXllciBz
ZXRUcmFuc2Zvcm06ZmluYWxUcmFuc2Zvcm1dOworICAgIENHUmVjdCB0cmFuc2xhdGVkRGVzdGlu
YXRpb25GcmFtZSA9IFtyZW5kZXJlckxheWVyIGNvbnZlcnRSZWN0OmRlc3RpbmF0aW9uRnJhbWUg
dG9MYXllcjpbY29udGVudFZpZXcgbGF5ZXJdXTsKKyAgICAKKyAgICBDQUxheWVyKiBiYWNrZ3Jv
dW5kTGF5ZXIgPSBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIGJhY2tncm91bmRMYXllcl07CisK
KyAgICAvLyBTdGFydCB0aGUgb3BhY2l0eSBhbmltYXRpb24uICBXZSBjYW4gdXNlIGltcGxpY2l0
IGFuaW1hdGlvbnMgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgd2hlbgorICAgIC8vIHRoZSBh
bmltYXRpb24gZmluaXNoZXMuCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRy
YW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBbYmFja2dyb3Vu
ZExheWVyIHNldE9wYWNpdHk6MV07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICAK
KyAgICAvLyBVc2UgYSBDQUJhc2ljQW5pbWF0aW9uIGhlcmUgZm9yIHRoZSB6b29tIGVmZmVjdC4g
IFdlIHdhbnQgdG8gYmUgbm90aWZpZWQgdGhhdCB0aGUgYW5pbWF0aW9uIGhhcyAKKyAgICAvLyBj
b21wbGV0ZWQgYnkgd2F5IG9mIHRoZSBDQUFuaW1hdGlvbiBkZWxlZ2F0ZS4KKyAgICBDQUJhc2lj
QW5pbWF0aW9uKiB6b29tQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0
aEtleVBhdGg6QCJ0cmFuc2Zvcm0iXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6
W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpmaW5hbFRyYW5zZm9ybV1dOworICAgIFt6
b29tQW5pbWF0aW9uIHNldFRvVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpD
QVRyYW5zZm9ybTNESWRlbnRpdHldXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpz
ZWxmXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07CisgICAgW3pv
b21BbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb246W0NBTWVkaWFUaW1pbmdGdW5jdGlvbiBmdW5j
dGlvbldpdGhOYW1lOmtDQU1lZGlhVGltaW5nRnVuY3Rpb25FYXNlSW5FYXNlT3V0XV07CisgICAg
W3pvb21BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW3pv
b21BbmltYXRpb24gc2V0VmFsdWU6KGlkKWtDRkJvb2xlYW5UcnVlIGZvcktleTppc0Z1bGxzY3Jl
ZW5LZXldOworICAgIAorICAgIC8vIERpc2FibGUgaW1wbGljaXQgYW5pbWF0aW9ucyBhbmQgc2V0
IHRoZSBsYXllcidzIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBpdHMgZmluYWwgc3RhdGUuCisg
ICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107CisgICAgW3JlbmRlcmVyTGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3Jt
M0RJZGVudGl0eV07CisgICAgW3JlbmRlcmVyTGF5ZXIgYWRkQW5pbWF0aW9uOnpvb21BbmltYXRp
b24gZm9yS2V5OkAiem9vbSJdOworICAgIFtiYWNrZ3JvdW5kTGF5ZXIgc2V0RnJhbWU6TlNSZWN0
VG9DR1JlY3QoYmFja2dyb3VuZEJvdW5kcyldOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
CisgICAgCisgICAgLy8gSW4gYSBwcmV2aW91cyBpbmNhcm5hdGlvbiwgdGhlIE5TV2luZG93IGF0
dGFjaGVkIHRvIHRoaXMgY29udHJvbGxlciBtYXkgaGF2ZQorICAgIC8vIGJlZW4gb24gYSBkaWZm
ZXJlbnQgc2NyZWVuLiAgVGVtcG9yYXJpbHkgY2hhbmdlIHRoZSBjb2xsZWN0aW9uQmVoYXZpb3Ig
b2YgdGhlIHdpbmRvdzoKKyAgICBOU1dpbmRvd0NvbGxlY3Rpb25CZWhhdmlvciBiZWhhdmlvciA9
IFtbc2VsZiB3aW5kb3ddIGNvbGxlY3Rpb25CZWhhdmlvcl07CisgICAgW1tzZWxmIHdpbmRvd10g
c2V0Q29sbGVjdGlvbkJlaGF2aW9yOk5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yQ2FuSm9pbkFs
bFNwYWNlc107CisgICAgW1tzZWxmIHdpbmRvd10gbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07
CisgICAgW1tzZWxmIHdpbmRvd10gc2V0Q29sbGVjdGlvbkJlaGF2aW9yOmJlaGF2aW9yXTsKKyAg
ICBbW193ZWJWaWV3IHdpbmRvd10gZGlzcGxheV07CisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVz
KCk7Cit9CisKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBpZiAoIV9pc0Z1bGxzY3Jl
ZW4pCisgICAgICAgIHJldHVybjsgICAgCisgIAorICAgIENBTGF5ZXIqIHJlbmRlcmVyTGF5ZXIg
PSBfcmVuZGVyZXItPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9y
bUxheWVyKCk7CisgICAgCisgICAgQ0FUcmFuc2Zvcm0zRCBzdGFydFRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RJZGVudGl0eTsKKyAgICBpZiAoX2lzQW5pbWF0aW5nKSB7CisgICAgICAgIHN0YXJ0
VHJhbnNmb3JtID0gW1tyZW5kZXJlckxheWVyIHByZXNlbnRhdGlvbkxheWVyXSB0cmFuc2Zvcm1d
OworICAgICAgICAKKyAgICAgICAgLy8gVGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlIGZ1bmN0aW9u
cyB3aWxsIG9ubHkgYmUgY2FsbGVkIHRoZQorICAgICAgICAvLyBuZXh0IHRyaXAgdGhyb3VnaCB0
aGUgcnVuLWxvb3AsIHNvIG1hbnVhbGx5IGNhbGwgdGhlIGRlbGVnYXRlCisgICAgICAgIC8vIGZ1
bmN0aW9uIGhlcmUsIGxldHRpbmcgaXQga25vdyB0aGUgYW5pbWF0aW9uIGRpZCBub3QgY29tcGxl
dGU6CisgICAgICAgIFtzZWxmIHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbjpOT107CisgICAgICAg
IEFTU0VSVCghX2lzQW5pbWF0aW5nKTsKKyAgICB9CisgICAgX2lzRnVsbHNjcmVlbiA9IE5POwor
ICAgIF9pc0FuaW1hdGluZyA9IFlFUzsKKyAgICAKKyAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBt
b3ZlZCB0aGUgZnVsbHNjcmVlbiB3aW5kb3cgaW4gU3BhY2VzLCBzbyB0ZW1wb3JhcmlseSBjaGFu
Z2UgCisgICAgLy8gdGhlIGNvbGxlY3Rpb25CZWhhdmlvciBvZiB0aGUgd2ViVmlldydzIHdpbmRv
dzoKKyAgICBOU1dpbmRvdyogd2ViV2luZG93ID0gW1tzZWxmIHdlYlZpZXddIHdpbmRvd107Cisg
ICAgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3IgYmVoYXZpb3IgPSBbd2ViV2luZG93IGNvbGxl
Y3Rpb25CZWhhdmlvcl07CisgICAgW3dlYldpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6TlNX
aW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JDYW5Kb2luQWxsU3BhY2VzXTsKKyAgICBbd2ViV2luZG93
IG9yZGVyV2luZG93Ok5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzpbW3NlbGYgd2luZG93XSB3aW5k
b3dOdW1iZXJdXTsKKyAgICBbd2ViV2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjpiZWhhdmlv
cl07CisgICAgCisgICAgTlNWaWV3KiBjb250ZW50VmlldyA9IFtbc2VsZiB3aW5kb3ddIGNvbnRl
bnRWaWV3XTsKKyAgICBDR1JlY3QgbGF5ZXJFbmRGcmFtZSA9IE5TUmVjdFRvQ0dSZWN0KFtjb250
ZW50VmlldyBjb252ZXJ0UmVjdDpfaW5pdGlhbEZyYW1lIGZyb21WaWV3Om5pbF0pOworCisgICAg
UmVuZGVyQm94KiBjaGlsZFJlbmRlcmVyID0gX3JlbmRlcmVyLT5maXJzdENoaWxkQm94KCk7Cisg
ICAgQ0dSZWN0IGxheWVyU3RhcnRGcmFtZSA9IENHUmVjdE1ha2UoY2hpbGRSZW5kZXJlci0+eCgp
LCBjaGlsZFJlbmRlcmVyLT55KCksIGNoaWxkUmVuZGVyZXItPndpZHRoKCksIGNoaWxkUmVuZGVy
ZXItPmhlaWdodCgpKTsKKworICAgIENBVHJhbnNmb3JtM0Qgc2hyaW5rVHJhbnNmb3JtID0gQ0FU
cmFuc2Zvcm0zRE1ha2VTY2FsZShsYXllckVuZEZyYW1lLnNpemUud2lkdGggLyBsYXllclN0YXJ0
RnJhbWUuc2l6ZS53aWR0aCwgbGF5ZXJFbmRGcmFtZS5zaXplLmhlaWdodCAvIGxheWVyU3RhcnRG
cmFtZS5zaXplLmhlaWdodCwgMSk7CisgICAgW3JlbmRlcmVyTGF5ZXIgc2V0VHJhbnNmb3JtOnNo
cmlua1RyYW5zZm9ybV07CisgICAgQ0dSZWN0IHNocnVua0Rlc3RpbmF0aW9uRnJhbWUgPSBbcmVu
ZGVyZXJMYXllciBjb252ZXJ0UmVjdDpsYXllclN0YXJ0RnJhbWUgdG9MYXllcjpbY29udGVudFZp
ZXcgbGF5ZXJdXTsKKyAgICBDQVRyYW5zZm9ybTNEIG1vdmVUcmFuc2Zvcm0gPSBDQVRyYW5zZm9y
bTNETWFrZVRyYW5zbGF0aW9uKGxheWVyRW5kRnJhbWUub3JpZ2luLnggLSBzaHJ1bmtEZXN0aW5h
dGlvbkZyYW1lLm9yaWdpbi54LCBsYXllckVuZEZyYW1lLm9yaWdpbi55IC0gc2hydW5rRGVzdGlu
YXRpb25GcmFtZS5vcmlnaW4ueSwgMCk7CisgICAgQ0FUcmFuc2Zvcm0zRCBmaW5hbFRyYW5zZm9y
bSA9IENBVHJhbnNmb3JtM0RDb25jYXQoc2hyaW5rVHJhbnNmb3JtLCBtb3ZlVHJhbnNmb3JtKTsK
KyAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06ZmluYWxUcmFuc2Zvcm1dOworICAgIENH
UmVjdCB0cmFuc2xhdGVkRGVzdGluYXRpb25GcmFtZSA9IFtyZW5kZXJlckxheWVyIGNvbnZlcnRS
ZWN0OmxheWVyU3RhcnRGcmFtZSB0b0xheWVyOltjb250ZW50VmlldyBsYXllcl1dOworICAgIAor
ICAgIENGVGltZUludGVydmFsIGR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXTsK
KyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50
IHRvIGJlIGFsaXZlIGZvciB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3Vy
IG93bmVyIHJlbGVhc2VzIHVzIHdlIGNvdWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNl
LgorICAgIC8vIEJhbGFuY2VkIGluIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYg
cmV0YWluXTsKKyAgICAKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKworICAgIENBTGF5ZXIqIGJhY2tncm91
bmRMYXllciA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYmFja2dyb3VuZExheWVyXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9u
RHVyYXRpb246ZHVyYXRpb25dOworICAgIFtiYWNrZ3JvdW5kTGF5ZXIgc2V0T3BhY2l0eTowXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIAorICAgIENBQmFzaWNBbmltYXRpb24q
IHpvb21BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpA
InRyYW5zZm9ybSJdOworICAgIFt6b29tQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpbTlNWYWx1ZSB2
YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnN0YXJ0VHJhbnNmb3JtXV07CisgICAgW3pvb21BbmltYXRp
b24gc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOmZpbmFsVHJhbnNm
b3JtXV07CisgICAgW3pvb21BbmltYXRpb24gc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3pvb21B
bmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIFt6b29tQW5pbWF0aW9uIHNldFRp
bWluZ0Z1bmN0aW9uOltDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FN
ZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF1dOworICAgIFt6b29tQW5pbWF0aW9uIHNl
dEZpbGxNb2RlOmtDQUZpbGxNb2RlQm90aF07CisgICAgW3pvb21BbmltYXRpb24gc2V0UmVtb3Zl
ZE9uQ29tcGxldGlvbjpOT107CisgICAgW3pvb21BbmltYXRpb24gc2V0VmFsdWU6KGlkKWtDRkJv
b2xlYW5GYWxzZSBmb3JLZXk6aXNGdWxsc2NyZWVuS2V5XTsKKyAgICAKKyAgICBbcmVuZGVyZXJM
YXllciBhZGRBbmltYXRpb246em9vbUFuaW1hdGlvbiBmb3JLZXk6QCJ6b29tIl07Cit9CisKKyNw
cmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCisKKy0gKHZvaWQp
X3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgoreworICAgIC8vIE5TQXBwbGljYXRpb25Q
cmVzZW50YXRpb25PcHRpb25zIGlzIGF2YWlsYWJsZSBvbiA+IDEwLjYgb25seToKKyNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
KyAgICBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNh
dGlvblByZXNlbnRhdGlvbkRlZmF1bHQ7CisgICAgTlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4g
PSBbW3NlbGYgd2luZG93XSBzY3JlZW5dOworICAgIAorICAgIGlmIChfaXNGdWxsc2NyZWVuKSB7
CisgICAgICAgIC8vIEF1dG8taGlkZSB0aGUgbWVudSBiYXIgaWYgdGhlIGZ1bGxzY3JlZW5TY3Jl
ZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyOgorICAgICAgICAvLyBOT1RFOiBpZiB0aGUgZnVsbHNj
cmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVudSBiYXIgYnV0IG5vdCB0aGUgZG9jaywgd2UgbXVz
dCBzdGlsbCAKKyAgICAgICAgLy8gYXV0by1oaWRlIHRoZSBkb2NrLCBvciBhbiBleGNlcHRpb24g
d2lsbCBiZSB0aHJvd24uCisgICAgICAgIGlmIChbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0
SW5kZXg6MF0gPT0gZnVsbHNjcmVlblNjcmVlbikKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gKE5T
QXBwbGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZU1lbnVCYXIgfCBOU0FwcGxpY2F0aW9uUHJl
c2VudGF0aW9uQXV0b0hpZGVEb2NrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQg
c2NyZWVuIGNvbnRhaW5zIHRoZSBkb2NrIGJ5IGNvbXBhcmluZyB0aGUgc2NyZWVuJ3MgZnJhbWUg
dG8gaXRzCisgICAgICAgIC8vIHZpc2libGVGcmFtZTsgaWYgYSBkb2NrIGlzIHByZXNlbnQsIHRo
ZSB2aXNpYmxlRnJhbWUgd2lsbCBkaWZmZXIuICBJZiB0aGUgY3VycmVudCBzY3JlZW4KKyAgICAg
ICAgLy8gY29udGFpbnMgdGhlIGRvY2ssIGhpZGUgaXQuCisgICAgICAgIGVsc2UgaWYgKCFOU0Vx
dWFsUmVjdHMoW2Z1bGxzY3JlZW5TY3JlZW4gZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNp
YmxlRnJhbWVdKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRh
dGlvbkF1dG9IaWRlRG9jazsKKyAgICB9CisgICAgCisgICAgaWYgKFtOU0FwcCByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHNldFByZXNlbnRhdGlvbk9wdGlvbnM6KV0pCisgICAgICAgIFtO
U0FwcCBzZXRQcmVzZW50YXRpb25PcHRpb25zOm9wdGlvbnNdOworICAgIGVsc2UKKyNlbmRpZgor
ICAgICAgICBTZXRTeXN0ZW1VSU1vZGUoX2lzRnVsbHNjcmVlbiA/IGtVSU1vZGVOb3JtYWwgOiBr
VUlNb2RlQWxsSGlkZGVuLCAwKTsKK30KKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAvLyBJT1BNQXNzZXJ0aW9uQ3JlYXRlV2l0aE5hbWUgbm90IGRlZmluZWQgb24gPCAxMC41Cist
ICh2b2lkKV9kaXNhYmxlSWRsZURpc3BsYXlTbGVlcAoreworICAgIGlmIChfaWRsZURpc3BsYXlT
bGVlcEFzc2VydGlvbiA9PSBrSU9QTU51bGxBc3NlcnRpb25JRCkgCisjaWYgZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAvLyBJT1BNQXNzZXJ0aW9uQ3JlYXRlV2l0aE5hbWUgaXMgbm90IGRl
ZmluZWQgaW4gdGhlIDEwLjUgU0RLCisgICAgICAgIElPUE1Bc3NlcnRpb25DcmVhdGUoa0lPUE1B
c3NlcnRpb25UeXBlTm9EaXNwbGF5U2xlZXAsIGtJT1BNQXNzZXJ0aW9uTGV2ZWxPbiwgJl9pZGxl
RGlzcGxheVNsZWVwQXNzZXJ0aW9uKTsKKyNlbHNlIC8vIElPUE1Bc3NlcnRpb25DcmVhdGUgaXMg
ZGVwcmVjaWF0ZWQgaW4gPiAxMC41CisgICAgICAgIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFt
ZShrSU9QTUFzc2VydGlvblR5cGVOb0Rpc3BsYXlTbGVlcCwga0lPUE1Bc3NlcnRpb25MZXZlbE9u
LCBDRlNUUigiV2ViS2l0IHBsYXlpbmcgYSB2aWRlbyBmdWxsc2NyZWVuLiIpLCAmX2lkbGVEaXNw
bGF5U2xlZXBBc3NlcnRpb24pOworI2VuZGlmCit9CisKKy0gKHZvaWQpX2VuYWJsZUlkbGVEaXNw
bGF5U2xlZXAKK3sKKyAgICBpZiAoX2lkbGVEaXNwbGF5U2xlZXBBc3NlcnRpb24gIT0ga0lPUE1O
dWxsQXNzZXJ0aW9uSUQpIHsKKyAgICAgICAgSU9QTUFzc2VydGlvblJlbGVhc2UoX2lkbGVEaXNw
bGF5U2xlZXBBc3NlcnRpb24pOworICAgICAgICBfaWRsZURpc3BsYXlTbGVlcEFzc2VydGlvbiA9
IGtJT1BNTnVsbEFzc2VydGlvbklEOworICAgIH0KK30KKworLSAodm9pZClfZGlzYWJsZUlkbGVT
eXN0ZW1TbGVlcAoreworICAgIGlmIChfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uID09IGtJT1BN
TnVsbEFzc2VydGlvbklEKSAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIC8vIElP
UE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgMTAuNSBTREsK
KyAgICAgICAgSU9QTUFzc2VydGlvbkNyZWF0ZShrSU9QTUFzc2VydGlvblR5cGVOb0lkbGVTbGVl
cCwga0lPUE1Bc3NlcnRpb25MZXZlbE9uLCAmX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlvbik7Cisj
ZWxzZSAvLyBJT1BNQXNzZXJ0aW9uQ3JlYXRlIGlzIGRlcHJlY2lhdGVkIGluID4gMTAuNQorICAg
IElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZShrSU9QTUFzc2VydGlvblR5cGVOb0lkbGVTbGVl
cCwga0lPUE1Bc3NlcnRpb25MZXZlbE9uLCBDRlNUUigiV2ViS2l0IHBsYXlpbmcgYSB2aWRlbyBm
dWxsc2NyZWVuLiIpLCAmX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlvbik7CisjZW5kaWYKK30KKwor
LSAodm9pZClfZW5hYmxlSWRsZVN5c3RlbVNsZWVwCit7CisgICAgaWYgKF9pZGxlU3lzdGVtU2xl
ZXBBc3NlcnRpb24gIT0ga0lPUE1OdWxsQXNzZXJ0aW9uSUQpIHsKKyAgICAgICAgSU9QTUFzc2Vy
dGlvblJlbGVhc2UoX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlvbik7CisgICAgICAgIF9pZGxlU3lz
dGVtU2xlZXBBc3NlcnRpb24gPSBrSU9QTU51bGxBc3NlcnRpb25JRDsKKyAgICB9Cit9CisKKy0g
KHZvaWQpX2VuYWJsZVRpY2tsZVRpbWVyCit7CisgICAgW190aWNrbGVUaW1lciBpbnZhbGlkYXRl
XTsKKyAgICBbX3RpY2tsZVRpbWVyIHJlbGVhc2VdOworICAgIF90aWNrbGVUaW1lciA9IFtbTlNU
aW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6dGlja2xlVGltZXJJbnRlcnZhbCB0
YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3RpY2tsZVRpbWVyRmlyZWQpIHVzZXJJbmZv
Om5pbCByZXBlYXRzOllFU10gcmV0YWluXTsKK30KKworLSAodm9pZClfZGlzYWJsZVRpY2tsZVRp
bWVyCit7CisgICAgW190aWNrbGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpY2tsZVRpbWVy
IHJlbGVhc2VdOworICAgIF90aWNrbGVUaW1lciA9IG5pbDsKK30KKworLSAodm9pZClfdGlja2xl
VGltZXJGaXJlZAoreworICAgIFVwZGF0ZVN5c3RlbUFjdGl2aXR5KE92ZXJhbGxBY3QpOworfQor
I2VuZGlmCisKKy0gKHZvaWQpX3VwZGF0ZVBvd2VyQXNzZXJ0aW9ucworeworI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAKKyAgICBCT09MIGlzUGxheWluZyA9IFtzZWxmIF9pc0FueU1v
dmllUGxheWluZ107CisgICAgCisgICAgaWYgKGlzUGxheWluZyAmJiBfaXNGdWxsc2NyZWVuKSB7
CisgICAgICAgIFtzZWxmIF9kaXNhYmxlSWRsZVN5c3RlbVNsZWVwXTsKKyAgICAgICAgW3NlbGYg
X2Rpc2FibGVJZGxlRGlzcGxheVNsZWVwXTsKKyAgICAgICAgW3NlbGYgX2VuYWJsZVRpY2tsZVRp
bWVyXTsKKyAgICB9IGVsc2UgeworICAgICAgICBbc2VsZiBfZW5hYmxlSWRsZVN5c3RlbVNsZWVw
XTsKKyAgICAgICAgW3NlbGYgX2VuYWJsZUlkbGVEaXNwbGF5U2xlZXBdOworICAgICAgICBbc2Vs
ZiBfZGlzYWJsZVRpY2tsZVRpbWVyXTsKKyAgICB9CisjZW5kaWYKK30KKworLSAodm9pZClfcmVx
dWVzdEV4aXQKK3sKKyAgICBbc2VsZiBleGl0RnVsbHNjcmVlbl07CisgICAgX2ZvcmNlRGlzYWJs
ZUFuaW1hdGlvbiA9IE5POworfQorCistICh2b2lkKV9yZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRo
QW5pbWF0aW9uOihCT09MKWFuaW1hdGlvbgoreworICAgIF9mb3JjZURpc2FibGVBbmltYXRpb24g
PSAhYW5pbWF0aW9uOworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX3JlcXVl
c3RFeGl0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOworCit9CisKKy0gKEJPT0wpX2lz
QW55TW92aWVQbGF5aW5nCit7CisgICAgaWYgKCFfZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIE5P
OworICAgIAorICAgIE5vZGUqIG5leHROb2RlID0gX2VsZW1lbnQuZ2V0KCk7CisgICAgd2hpbGUg
KG5leHROb2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5leHROb2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dmlkZW9UYWcpKSB7CisgICAgICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG5leHROb2RlKTsKKyAgICAgICAgICAg
IGlmICghZWxlbWVudC0+cGF1c2VkKCkgJiYgIWVsZW1lbnQtPmVuZGVkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbmV4dE5vZGUg
PSBuZXh0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShfZWxlbWVudC5nZXQoKSk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBOTzsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBVdGls
aXR5IEZ1bmN0aW9ucworCistIChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5XaW5k
b3cKK3sKKyAgICByZXR1cm4gKFdlYkZ1bGxzY3JlZW5XaW5kb3cgKilbc3VwZXIgd2luZG93XTsK
K30KKworLSAoRG9jdW1lbnQqKV9kb2N1bWVudCAKK3sKKyAgICByZXR1cm4gY29yZShbW1tzZWxm
IHdlYlZpZXddIG1haW5GcmFtZV0gRE9NRG9jdW1lbnRdKTsKK30KKworLSAoQ0ZUaW1lSW50ZXJ2
YWwpX2FuaW1hdGlvbkR1cmF0aW9uCit7CisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFs
IGRlZmF1bHREdXJhdGlvbiA9IDAuNTsKKyAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9IGRl
ZmF1bHREdXJhdGlvbjsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBb
TlNFdmVudCBtb2RpZmllckZsYWdzXTsKKyNlbHNlCisgICAgTlNVSW50ZWdlciBtb2RpZmllckZs
YWdzID0gW1tOU0V2ZW50IGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc107CisjZW5kaWYKKyAg
ICBpZiAoKG1vZGlmaWVyRmxhZ3MgJiBOU0NvbnRyb2xLZXlNYXNrKSA9PSBOU0NvbnRyb2xLZXlN
YXNrKQorICAgICAgICBkdXJhdGlvbiAqPSAyOworICAgIGlmICgobW9kaWZpZXJGbGFncyAmIE5T
U2hpZnRLZXlNYXNrKSA9PSBOU1NoaWZ0S2V5TWFzaykKKyAgICAgICAgZHVyYXRpb24gKj0gMTA7
CisgICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCisgICAgICAgIGR1cmF0aW9uID0gMDsKKyAgICB9Cisg
ICAgcmV0dXJuIGR1cmF0aW9uOworfQorCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCitAaW1wbGVt
ZW50YXRpb24gV2ViRnVsbHNjcmVlbldpbmRvdworCistIChpZClpbml0V2l0aENvbnRlbnRSZWN0
OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOihOU1VJbnRlZ2VyKWFTdHlsZSBiYWNraW5n
OihOU0JhY2tpbmdTdG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjooQk9PTClmbGFnCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGFTdHlsZSk7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aENvbnRl
bnRSZWN0OmNvbnRlbnRSZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tp
bmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFnXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICBbc2VsZiBzZXRCYWNrZ3Jv
dW5kQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFtzZWxmIHNldElnbm9yZXNNb3Vz
ZUV2ZW50czpOT107CisgICAgW3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6WUVTXTsK
KyAgICBbc2VsZiBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworICAgIFtzZWxmIHNldEhhc1No
YWRvdzpZRVNdOworICAgIFtzZWxmIHNldE1vdmFibGU6Tk9dOworICAgIAorICAgIE5TVmlldyog
Y29udGVudFZpZXcgPSBbc2VsZiBjb250ZW50Vmlld107CisgICAgQ0FMYXllciogY29udGVudExh
eWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0XTsKKyAgICBbY29udGVudFZpZXcgc2V0TGF5ZXI6
Y29udGVudExheWVyXTsKKyAgICBbY29udGVudFZpZXcgc2V0V2FudHNMYXllcjpZRVNdOworICAg
IAorICAgIF9iYWNrZ3JvdW5kTGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIFtj
b250ZW50TGF5ZXIgYWRkU3VibGF5ZXI6X2JhY2tncm91bmRMYXllcl07CisgICAgW2NvbnRlbnRM
YXllciBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsKKyAgICAKKyAgICBbX2JhY2tncm91bmRMYXll
ciBzZXRCYWNrZ3JvdW5kQ29sb3I6Q0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFj
ayldOworICAgIFtfYmFja2dyb3VuZExheWVyIHNldE9wYWNpdHk6MF07CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfYmFja2dyb3VuZExheWVyIHJlbGVh
c2VdOworICAgIFtfcmVuZGVyZXJMYXllciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gTk87Cit9
CisKKy0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKwor
LSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9QQVJB
TSh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKXRoZUV2ZW50Cit7
CisgICAgaWYgKFtbdGhlRXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXSBpc0VxdWFs
OkAiXGUiXSkgLy8gRXNhY3BlIGtleS1jb2RlCisgICAgICAgIFtzZWxmIGNhbmNlbE9wZXJhdGlv
bjpzZWxmXTsKKyAgICBlbHNlIFtzdXBlciBrZXlEb3duOnRoZUV2ZW50XTsKK30KKworLSAodm9p
ZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIp
OworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBfcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0
aEFuaW1hdGlvbjpZRVNdOworfQorCistIChDQUxheWVyKilyZW5kZXJlckxheWVyCit7CisgICAg
cmV0dXJuIF9yZW5kZXJlckxheWVyOworfQorCistICh2b2lkKXNldFJlbmRlcmVyTGF5ZXI6KENB
TGF5ZXIgKilyZW5kZXJlckxheWVyCit7CisgICAgW3JlbmRlcmVyTGF5ZXIgcmV0YWluXTsKKyAg
ICBbX3JlbmRlcmVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtfcmVuZGVyZXJM
YXllciByZWxlYXNlXTsKKyAgICBfcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyTGF5ZXI7CisgICAg
CisgICAgaWYgKF9yZW5kZXJlckxheWVyKQorICAgICAgICBbW1tzZWxmIGNvbnRlbnRWaWV3XSBs
YXllcl0gYWRkU3VibGF5ZXI6X3JlbmRlcmVyTGF5ZXJdOworfQorCistIChDQUxheWVyKiliYWNr
Z3JvdW5kTGF5ZXIKK3sKKyAgICByZXR1cm4gX2JhY2tncm91bmRMYXllcjsKK30KK0BlbmQKKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYUV2ZW50TGlzdGVuZXIKKworTWVkaWFF
dmVudExpc3RlbmVyOjpNZWRpYUV2ZW50TGlzdGVuZXIoV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIq
IGRlbGVnYXRlKQorICAgIDogRXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSkKKyAg
ICAsIGRlbGVnYXRlKGRlbGVnYXRlKQoreyAKK30KKworUGFzc1JlZlB0cjxNZWRpYUV2ZW50TGlz
dGVuZXI+IE1lZGlhRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKFdlYkZ1bGxzY3JlZW5Db250cm9sbGVy
KiBkZWxlZ2F0ZSkgCit7IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFFdmVudExpc3Rl
bmVyKGRlbGVnYXRlKSk7IAorfQorCitib29sIE1lZGlhRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9
PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICByZXR1cm4gdGhpcyA9PSAm
bGlzdGVuZXI7Cit9CisKK3ZvaWQgTWVkaWFFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCit7CisgICAgW2RlbGVn
YXRlIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOworfQorCisjZW5kaWYgLyogRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKSAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77133</attachid>
            <date>2010-12-21 11:13:31 -0800</date>
            <delta_ts>2010-12-21 11:26:09 -0800</delta_ts>
            <desc>NewFullScreen-Part-1-RenderFullScreen</desc>
            <filename>0001-NewFullScreen-Part-1-RenderFullScreen.patch</filename>
            <type>text/plain</type>
            <size>13433</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBmYWI2NWFkZDkxODcwNTQ0MGFmMjYyM2FjNTgwNzNkZjViYmRiODVlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDEyOjUxOjAyIC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzVdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDEgLSBSZW5kZXJGdWxsU2NyZWVuCgotLS0KIFdlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrKysrKysrKwogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogfCAgICA4ICsrKysKIFdlYkNvcmUv
Y3NzL2Z1bGxzY3JlZW4uY3NzICAgICAgICAgICAgICAgIHwgICAxNyArKystLS0tLQogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgICAgfCAgIDYzICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmggICAg
ICB8ICAgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggICAgICAgICAgfCAgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgMTY3IGlu
c2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MWU5YzVjLi4wM2M5OTM1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDEwLTEyLTE3ICBKZXIgTm9ibGUgIDxqZXJAa29rb2RlLmFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViS2l0IEZ1bGwgU2NyZWVuIHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ4MQorICAgICAgICByZGFyOi8vcHJvYmxlbS84MjQ3NDQ0
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUmVuZGVyT2Jq
ZWN0IHR5cGU6IFJlbmRlckZ1bGxTY3JlZW4uICBUaGUgUmVuZGVyRnVsbFNjcmVlbiByZW5kZXJl
ciAKKyAgICAgICAgd2lsbCBiZSB1c2VkIHRvIGltcGxlbWVudCBuZXcgRnVsbFNjcmVlbiBBUElz
LiAgQmVjYXVzZSB0aGUgUmVuZGVyRnVsbFNjcmVlbiBvYmplY3Qgd2lsbCBiZSB0aGUKKyAgICAg
ICAgcGFyZW50IG9mIHRoZSBjdXJyZW50IGZ1bGxzY3JlZW4gZWxlbWVudCwgdGhlIHN0eWxlIHJ1
bGVzIGZvciBmdWxsc2NyZWVuIG9iamVjdHMgbXVzdCBjaGFuZ2UgdG8KKyAgICAgICAgbWF0Y2gu
CisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoUmVuZGVyRnVsbFNjcmVlbjo6c2V0QW5pbWF0aW5nKTogU2V0cyB0aGUgbV9pc0FuaW1hdGlu
ZyBmbGFnLgorICAgICAgICAoUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlRnVsbFNjcmVlblN0eWxl
KTogUmV0dXJucyBhIG5ldyBSZW5kZXJTdHlsZSBjb250YWluaW5nIHRoZSBkZWZhdWx0IHN0eWUK
KyAgICAgICAgICAgIGZvciBSZW5kZXJGdWxsU2NyZWVuIG9iamVjdHMuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGdWxsU2NyZWVuOjppc0Z1bGxTY3JlZW4pOiBBZGRlZC4gIE92ZXJyaWRlcyB0aGUgUmVuZGVy
T2JqZWN0IHZlcnNpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0Z1bGxTY3JlZW4pOiBBZGRlZC4gIFVzZWQg
Zm9yIHR5cGUtY2hlY2tpbmcgUmVuZGVyRnVsbFNjcmVlbiBvYmplY3RzLgorICAgICAgICAqIGNz
cy9mdWxsc2NyZWVuLmNzczogIE1vZGlmaWVkIHRoZSBjb250YWluZWQgZnVsbHNjcmVlbiBzdHls
ZXMuCisKKwogMjAxMC0xMi0wNyAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMDYwNzhmLi5jMzc5YWYzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTMwOSw2ICs1MzA5LDggQEAKIAkJ
QzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5
QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKIAkJ
Q0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2
Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CiAJCUNBM0JGNjdFMTBEOTlCQUUwMEU2
Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9y
LmggKi87IH07CisJCUNERUE3Qzg0MTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREVBN0M4
MjEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovOyB9OworCQlDREVBN0M4
NTEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREVBN0M4MzEyNzYyMzA0MDBCODQ2REQg
LyogUmVuZGVyRnVsbFNjcmVlbi5jcHAgKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0
QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRy
b2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1
N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsg
fTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdG
QTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTQxOSw2ICsxMTQy
MSw4IEBACiAJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDRFMEFGQTExRjdC
QzI3MDA5RDM4MTEgLyogZnVsbHNjcmVlbi5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9
IGZ1bGxzY3JlZW4uY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREVBN0M4MjEy
NzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJGdWxsU2NyZWVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNERUE3QzgzMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZ1bGxTY3JlZW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEg
LyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2NyaXB0Q29udHJvbGxlckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0UwNTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTA1N0ZBNDEyMjA3MzEx
MDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTgwODQsNiArMTgwODgsOCBAQAogCQkJCTBGRDMwODBEMTE3Q0Y3
RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCAqLywKIAkJCQlBODcxREVDQTBBMTUzMEM3
MDBCMTJBNjggLyogUmVuZGVyRnJhbWVTZXQuY3BwICovLAogCQkJCUE4NzFERUM5MEExNTMwQzcw
MEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5oICovLAorCQkJCUNERUE3QzgzMTI3NjIzMDQwMEI4
NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCAqLywKKwkJCQlDREVBN0M4MjEyNzYyMzA0MDBC
ODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovLAogCQkJCUJDRUE0ODJBMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJIVE1MQ2FudmFzLmNwcCAqLywKIAkJCQlCQ0VBNDgyQjA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVySFRNTENhbnZhcy5oICovLAogCQkJCTBGRDMwOEQzMTE3RDE2ODQwMEE3
OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwICovLApAQCAtMTg2MjQsNiArMTg2MzAsNyBAQAogCQkJ
aXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQ0RFQTdDODQxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRl
ckZ1bGxTY3JlZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUI1QjVEQzZBMTE5QkIzRDUwMDJBODc5
MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUUxQjFEMTBGRjU5
ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgx
MjJFMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI0MTAyLDYgKzI0MTA5LDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAx
RTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFC
RTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291
cmNlcyAqLywKKyAJCQkJQ0RFQTdDODUxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3Jl
ZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5QjNFRDYxMjhDRDMxNDAwRTcyNkMyIC8qIEdy
YXBoaWNzTGF5ZXJDQS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTU4NzgyMTEyQTU3RERGMDA3
MjM4QUMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5
NTg3ODIyMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL2Z1bGxzY3JlZW4uY3NzIGIvV2ViQ29yZS9j
c3MvZnVsbHNjcmVlbi5jc3MKaW5kZXggZWJmM2EwMi4uMmUzOGM5NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9jc3MvZnVsbHNjcmVlbi5jc3MKKysrIGIvV2ViQ29yZS9jc3MvZnVsbHNjcmVlbi5jc3MK
QEAgLTEsOSArMSw1IEBACiA6LXdlYmtpdC1mdWxsLXNjcmVlbiB7Ci0gICAgcG9zaXRpb246Zml4
ZWQ7Ci0gICAgdG9wOjA7Ci0gICAgbGVmdDowOwotICAgIHJpZ2h0OjA7Ci0gICAgYm90dG9tOjA7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiB9CiAKIDpyb290OmZ1bGwtc2NyZWVuLWRv
Y3VtZW50Om5vdCg6ZnVsbC1zY3JlZW4pIHsKQEAgLTExLDE1ICs3LDE2IEBACiB9CiAKIHZpZGVv
Oi13ZWJraXQtZnVsbC1zY3JlZW4gewotICAgIHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMTAw
JQotICAgIGltYWdlLWZpdDogZmlsbDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAg
ICB3aWR0aDogYXV0bzsgICAKKyAgICBoZWlnaHQ6IDEwMCU7CisgICAgbWF4LXdpZHRoOiAxMDAl
OwogfQogCiBpbWc6LXdlYmtpdC1mdWxsLXNjcmVlbiB7Ci0gICAgd2lkdGg6IDEwMCU7CisgICAg
d2lkdGg6IGF1dG87ICAgCiAgICAgaGVpZ2h0OiAxMDAlOwotICAgIGltYWdlLWZpdDogZmlsbDsK
KyAgICBtYXgtd2lkdGg6IDEwMCU7CiB9CiAKIHZpZGVvOi13ZWJraXQtZnVsbC1wYWdlLW1lZGlh
Oi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jYTQ1MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBS
ZW5kZXJGdWxsU2NyZWVuOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCit7CisgICAgbV9p
c0FuaW1hdGluZyA9IGFuaW1hdGluZzsKKyAgICBpZiAobGF5ZXIoKSkKKyAgICAgICAgbGF5ZXIo
KS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKQoreworICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IGZ1bGxzY3JlZW5TdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVE
ZWZhdWx0U3R5bGUoKTsKKworICAgIC8vIENyZWF0ZSBhIHN0YWNraW5nIGNvbnRleHQ6CisgICAg
ZnVsbHNjcmVlblN0eWxlLT5zZXRaSW5kZXgoMCk7CisKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24oKSk7CisgICAgZnVsbHNjcmVlblN0eWxl
LT5mb250KCkudXBkYXRlKDApOworCisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXREaXNwbGF5KEJP
WCk7CisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXRCb3hQYWNrKEJDRU5URVIpOworICAgIGZ1bGxz
Y3JlZW5TdHlsZS0+c2V0Qm94QWxpZ24oQkNFTlRFUik7CisgICAgZnVsbHNjcmVlblN0eWxlLT5z
ZXRCb3hPcmllbnQoSE9SSVpPTlRBTCk7CisgICAgCisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXRQ
b3NpdGlvbihGaXhlZFBvc2l0aW9uKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldFdpZHRoKExl
bmd0aCgxMDAuMCwgUGVyY2VudCkpOworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aCgxMDAuMCwgUGVyY2VudCkpOworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0TGVmdChMZW5n
dGgoMCwgRml4ZWQpKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldFRvcChMZW5ndGgoMCwgRml4
ZWQpKTsKKyAgICAKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xv
cjo6YmxhY2spOworICAgIAorICAgIHJldHVybiBmdWxsc2NyZWVuU3R5bGU7Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmggYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGdWxsU2NyZWVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTQxODY4MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1
bGxTY3JlZW4uaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJGdWxsU2NyZWVuX2gKKyNkZWZpbmUgUmVuZGVyRnVsbFNjcmVlbl9oCisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisKKyNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlckZ1bGxTY3JlZW4gOiBwdWJsaWMgUmVuZGVy
RmxleGlibGVCb3ggeworcHVibGljOgorICAgIFJlbmRlckZ1bGxTY3JlZW4oTm9kZSogbm9kZSkg
OiBSZW5kZXJGbGV4aWJsZUJveChub2RlKSB7IHNldFJlcGxhY2VkKGZhbHNlKTsgc2V0SXNBbm9u
eW1vdXMoZmFsc2UpOyB9CisgICAgdmlydHVhbCBib29sIGlzRnVsbFNjcmVlbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVyRnVsbFNjcmVlbiI7IH0KKyAgICAKKyAgICBib29sIGlzQW5pbWF0
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0QW5pbWF0
aW5nKGJvb2wpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVh
dGVGdWxsU2NyZWVuU3R5bGUoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBib29sIG1faXNBbmlt
YXRpbmc7Cit9OworICAgIAoraW5saW5lIFJlbmRlckZ1bGxTY3JlZW4qIHRvUmVuZGVyRnVsbFNj
cmVlbihSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0LT5pc0Z1bGxT
Y3JlZW4oKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckZ1bGxTY3JlZW4qPihvYmpl
Y3QpOworfQorICAgIAorLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vz
c2FyeSBjYXN0Ogordm9pZCB0b1JlbmRlckZ1bGxTY3JlZW4oUmVuZGVyRnVsbFNjcmVlbiopOwor
fQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDVjNjhh
NmQuLjE4NDI2YzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yODcsNiArMjg3LDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0NhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKICAgICBib29sIGlzUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IG1fbm9kZTsgfQog
ICAgIGJvb2wgaXNCb2R5KCkgY29uc3Q7Ci0tIAoxLjYuNS4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77134</attachid>
            <date>2010-12-21 11:14:26 -0800</date>
            <delta_ts>2011-01-03 17:19:46 -0800</delta_ts>
            <desc>NewFullScreen-Part-2-The-Document</desc>
            <filename>0002-NewFullScreen-Part-2-The-Document.patch</filename>
            <type>text/plain</type>
            <size>16918</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBiNTY1ZDhjMmMxZmM0YTg4Mzc0Y2MxMGJiMThjYWVlZDU0MTAwOWYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDE0OjAzOjU4IC0wODAwClN1YmplY3Q6IFtQQVRDSCAyLzVdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDIgLSBUaGUgRG9jdW1lbnQKCi0tLQogV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MCArKysrKysrKysrKysrKysKIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICB8ICAgIDIgKy0KIFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwICAgICAgICAgICB8ICAgIDYgKy0KIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcCAgICAgICAgICAgICAgICAgICB8ICAgNzYgKysrKysrKysrKysrKysrKysr
KysrKysrKystLQogV2ViQ29yZS9kb20vRG9jdW1lbnQuaCAgICAgICAgICAgICAgICAgICAgIHwg
ICAxMCArKystCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgICAgICAgICAgICAgICAgICAgfCAg
ICAyICstCiBXZWJDb3JlL2RvbS9Ob2RlLmNwcCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIw
ICsrKysrKystCiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggICAgICAgICAgICAgICAgfCAg
ICAxICsKIFdlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCB8ICAgIDIg
Ky0KIDkgZmlsZXMgY2hhbmdlZCwgMTQ2IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDNjOTkzNS4uYWM0YzI4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0NiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEltcGxlbWVudGVkIG5vbi1hY2NlbGVyYXRlZCBmdWxs
c2NyZWVuIHN1cHBvcnQuICBUaGUgRG9jdW1lbnQgd2lsbCBub3cgdmVuZCBhIFJlbmRlckZ1bGxT
Y3JlZW4gb2JqZWN0IGZvciBjbGllbnRzIHRvCisgICAgICAgIHVzZSB0byByZWxvY2F0ZSB0aGUg
ZnVsbHNjcmVlbiBlbGVtZW50IHN1YnRyZWUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDgxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzgyNDc0
NDQKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmxvYWRGdWxsU2NyZWVuUnVsZXNJZk5lZWRlZCk6IENoYW5nZSB3ZWJraXRGdWxsU2NyZWVu
IC0+IHdlYmtpdElzRnVsbFNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcik6IERpdHRvLgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQp
OiBJbml0aWFsaXplIG1fZnVsbFNjcmVlblJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmRldGFjaCk6IENhbGwgc2V0RnVsbFNjcmVlblJlbmRlcmVyKDApLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKTogUmVwbGljYXRlIHRoZSBsb2dp
YyBpbiB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6ICBEZXRh
Y2ggdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCB0byBjYXVzZQorICAgICAgICAgICAgYSBuZXcgUmVu
ZGVyRnVsbFNjcmVlbiByZW5kZXJlciB0byBiZSBjcmVhdGVkIHdpdGggdGhlIG5ldyBmdWxsc2Ny
ZWVuIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0RGlkRW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudCk6ICBOb3RpZnkgY2xpZW50cyBvZiBhIGZ1bGxzY3JlZW4gY2hh
bmdlCisgICAgICAgICAgICBoZXJlLCByYXRoZXIgaW4gIndpbGxFbnRlciIsIHRvIGF2b2lkIHJl
ZW50cmFuY3kgcHJvYmxlbXMgd2hlbiBjbGllbnRzIHJlbW92ZSBub2RlcyBpbiByZXNwb25zZQor
ICAgICAgICAgICAgdG8gd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSBldmVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCk6IFJl
Y2FsY3VsYXRlIHRoZSBmdWxsc2NyZWVuIGVsZW1lbnQncyBzdHlsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGdWxsU2NyZWVuUmVuZGVyZXIpOiBBY2Nl
c3NvciBmb3IgbV9mdWxsU2NyZWVuUmVuZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6c2V0RnVsbFNjcmVlblJlbmRlcmVyU2l6ZSk6IFNldCB0aGUgc3R5bGUgb24gdGhlIG1fZnVs
bFNjcmVlblJlbmRlcmVyIHdpdGggYSBuZXcKKyAgICAgICAgICAgIHNpemU7IHRoaXMga2VlcHMg
Y2xpZW50cyBmcm9tIGhhdmluZyB0byBhY2Nlc3MgdGhlIHJlbmRlcmVyJ3Mgc3R5bGUgZGlyZWN0
bHkuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFj
a2dyb3VuZENvbG9yKTogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0SXNGdWxsU2NyZWVuKTogQ2hhbmdlIHdlYmtpdEZ1
bGxTY3JlZW4gLT4gd2Via2l0SXNGdWxsU2NyZWVuLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmZ1bGxTY3JlZW5SZW5kZXJlcik6IEFjY2Vzc29yLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5pZGw6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6IElmIHRoZSBkb2N1bWVudCBpcyBpbiBmdWxsc2NyZWVu
IG1vZGUsIGNyZWF0ZSBhIFJlbmRlckZ1bGxTY3JlZW4KKyAgICAgICAgICAgIG9iamVjdCB0byBp
bnNlcnQgYmV0d2VlbiB0aGUgZnVsbHNjcmVlbiBlbGVtZW50IGFuZCBpdHMgcGFyZW50LgorICAg
ICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGll
bnQ6OmZ1bGxTY3JlZW5SZW5kZXJlckNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBDaGFuZ2Ug
d2Via2l0RnVsbFNjcmVlbiAtPiB3ZWJraXRJc0Z1bGxTY3JlZW4uCisKKzIwMTAtMTItMTcgIEpl
ciBOb2JsZSAgPGplckBrb2tvZGUuYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAgICAgICAgIEltcGxlbWVudCBXZWJLaXQgRnVsbCBTY3JlZW4gc3Vw
cG9ydC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
NDgxCiAgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzgyNDc0NDQKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzM3OWFmMy4uZTQ1NDAyMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0MTA5LDcgKzI0MTA5LDcgQEAK
IAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQg
LyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKLSAJCQkJQ0RFQTdDODUxMjc2MjMwNDAw
Qjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RFQTdD
ODUxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDk5QjNFRDYxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0OTU4NzgyMTEyQTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUFu
aW1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5NTg3ODIyMTJBNTdEREYwMDcyMzhB
QyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKaW5kZXggNzJiNGE5Ny4uOTQ5NTU5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKQEAgLTU0Niw3ICs1NDYsNyBAQCBzdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgp
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogc3RhdGljIHZvaWQgbG9hZEZ1bGxTY3JlZW5S
dWxlc0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBpZiAoIWRvY3VtZW50LT53
ZWJraXRGdWxsU2NyZWVuKCkpCisgICAgaWYgKCFkb2N1bWVudC0+d2Via2l0SXNGdWxsU2NyZWVu
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGdWxsLXNjcmVlbiBydWxlcy4KICAgICBTdHJp
bmcgZnVsbHNjcmVlblJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0
LCBzaXplb2YoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS0+ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwpAQCAtMjYwMCw3ICsyNjAw
LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWUKICAgICAgICAgICAgICAgICAvLyBlbGVtZW50
IGlzIGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9j
bGFzcyBhcHBsaWVzIHRvIAogICAgICAgICAgICAgICAgIC8vIHRoYXQgZWxlbWVudC4gQWxzbywg
YW4gPGlmcmFtZT4sIDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudCB3aG9zZSBjaGlsZCBicm93
c2luZyAKICAgICAgICAgICAgICAgICAvLyBjb250ZXh0J3MgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1
bGxzY3JlZW4gc3RhdGUgaGFzIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxpZWQu
Ci0gICAgICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRGdWxsU2NyZWVuKCkp
CisgICAgICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4o
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlm
IChlICE9IGUtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjA4LDcgKzI2MDgsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRnVsbFNjcmVlbkRvY3VtZW50OgogICAgICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1l
bnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQn
IHBzZXVkb2NsYXNzIGFwcGxpZXMgCiAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIHJvb3QgZWxl
bWVudCBvZiB0aGF0IERvY3VtZW50LgotICAgICAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQo
KS0+d2Via2l0RnVsbFNjcmVlbigpKQorICAgICAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQo
KS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICBpZiAoZSAhPSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDAw
ZDMyYTYuLmFiNjBiOGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTIwMSw2ICsyMDEsMTAgQEAKICNpbmNsdWRl
ICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29k
ZTsKQEAgLTQxMiw2ICs0MTYsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBj
b25zdCBLVVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwsIGNvbgogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1faXNGdWxsU2NyZWVuKDApCiAgICAgLCBtX2FyZUtl
eXNFbmFibGVkSW5GdWxsU2NyZWVuKDApCisgICAgLCBtX2Z1bGxTY3JlZW5SZW5kZXJlcigwKQog
I2VuZGlmCiAgICAgLCBtX2xvYWRFdmVudERlbGF5Q291bnQoMCkKICAgICAsIG1fbG9hZEV2ZW50
RGVsYXlUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmxvYWRFdmVudERlbGF5VGltZXJGaXJlZCkKQEAg
LTE4MTQsNiArMTgxOSwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogCiAgICAgLy8gaW5k
aWNhdGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4gYXR0YWNoZWQoKSBidXQgcmVuZGVyZXIgPT0g
MAogICAgIHNldFJlbmRlcmVyKDApOworICAgIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
KyAgICBzZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisjZW5kaWYKIAogICAgIG1faG92ZXJOb2Rl
ID0gMDsKICAgICBtX2ZvY3VzZWROb2RlID0gMDsKQEAgLTMzNTgsOCArMzM2NywxMSBAQCB2b2lk
IERvY3VtZW50Ojpub2RlV2lsbEJlUmVtb3ZlZChOb2RlKiBuKQogICAgIEFTU0VSVChuKTsKICAg
ICBpZiAobi0+Y29udGFpbnMobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSkpIHsKICAgICAgICAg
QVNTRVJUKG4gIT0gZG9jdW1lbnRFbGVtZW50KCkpOworICAgICAgICBzZXRGdWxsU2NyZWVuUmVu
ZGVyZXIoMCk7CiAgICAgICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQo
KTsKICAgICAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kZXRhY2goKTsKKyAgICAgICAgdXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwogICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCwg
dHJ1ZSwgZmFsc2UpKTsKICAgICB9CiAjZW5kaWYKQEAgLTQ4MjEsMTkgKzQ4MzMsMzMgQEAgdm9p
ZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKIAogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBlbGVtZW50OwogICAgIG1faXNG
dWxsU2NyZWVuID0gdHJ1ZTsKLSAgICBkb2N1bWVudEVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhGdWxsU3R5bGVDaGFuZ2UpOwotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPnNldE5lZWRz
U3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGRvY3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0
eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50
LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBtX2Z1bGxT
Y3JlZW5FbGVtZW50LT5kZXRhY2goKTsKICAgICB1cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAg
Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS53ZWJraXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKSk7Cisg
ICAgQVNTRVJUKG1fZnVsbFNjcmVlblJlbmRlcmVyKTsKKyAgICBtX2Z1bGxTY3JlZW5SZW5kZXJl
ci0+c2V0QW5pbWF0aW5nKHRydWUpOwogfQogICAgIAogdm9pZCBEb2N1bWVudDo6d2Via2l0RGlk
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKIHsKKyAgICBBU1NFUlQobV9mdWxs
U2NyZWVuUmVuZGVyZXIpOworICAgIG1fZnVsbFNjcmVlblJlbmRlcmVyLT5zZXRBbmltYXRpbmco
ZmFsc2UpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxz
ZSkpOwogfQogCiB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqKQogeworICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5SZW5kZXJlcik7CisgICAg
bV9mdWxsU2NyZWVuUmVuZGVyZXItPnNldEFuaW1hdGluZyh0cnVlKTsKKworICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGRvY3VtZW50RWxlbWVudCgp
LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBtX2Z1bGxT
Y3JlZW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
KyAgICB1cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OndlYmtpdERp
ZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQpAQCAtNDg0NCwxNCAr
NDg3MCw1NCBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCkKIAogICAgIC8vIG1fZnVsbFNjcmVlbkVsZW1lbnQgaGFzIGFs
cmVhZHkgYmVlbiBjbGVhcmVkOyByZWNhbGMgdGhlIHN0eWxlIG9mIAogICAgIC8vIHRoZSBwYXNz
ZWQgaW4gZWxlbWVudCBpbnN0ZWFkLgorICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIGRvY3VtZW50RWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxj
KEZ1bGxTdHlsZUNoYW5nZSk7CiAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxs
U3R5bGVDaGFuZ2UpOwotICAgIGlmIChlbGVtZW50ICE9IGRvY3VtZW50RWxlbWVudCgpKQotICAg
ICAgICBkb2N1bWVudEVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFu
Z2UpOworICAgIGVsZW1lbnQtPmRldGFjaCgpOworCisgICAgQVNTRVJUKG1fZnVsbFNjcmVlblJl
bmRlcmVyKTsKKyAgICBtX2Z1bGxTY3JlZW5SZW5kZXJlci0+cmVtb3ZlKCk7CisgICAgc2V0RnVs
bFNjcmVlblJlbmRlcmVyKDApOwogICAgIHVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAKKyAg
ICBmcmFtZSgpLT52aWV3KCktPnNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKGZhbHNlKTsK
ICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndl
YmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0KICAgICAKK3ZvaWQg
RG9jdW1lbnQ6OnNldEZ1bGxTY3JlZW5SZW5kZXJlcihSZW5kZXJGdWxsU2NyZWVuKiByZW5kZXJl
cikKK3sKKyAgICBtX2Z1bGxTY3JlZW5SZW5kZXJlciA9IHJlbmRlcmVyOworICAgIAorICAgIC8v
IFRoaXMgbm90aWZpY2F0aW9uIGNhbiBjb21lIGluIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIGRl
c3Ryb3llZC4KKyAgICBpZiAocGFnZSgpKQorICAgICAgICBwYWdlKCktPmNocm9tZSgpLT5jbGll
bnQoKS0+ZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZChtX2Z1bGxTY3JlZW5SZW5kZXJlcik7Cit9
CisgICAgCit2b2lkIERvY3VtZW50OjpzZXRGdWxsU2NyZWVuUmVuZGVyZXJTaXplKGludCB3aWR0
aCwgaW50IGhlaWdodCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuUmVuZGVyZXIpOworICAg
IGlmICghbV9mdWxsU2NyZWVuUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKG1fZnVsbFNj
cmVlblJlbmRlcmVyLT5zdHlsZSgpKTsKKyAgICBuZXdTdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdp
ZHRoLCBXZWJDb3JlOjpGaXhlZCkpOworICAgIG5ld1N0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhl
aWdodCwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBuZXdTdHlsZS0+c2V0VG9wKExlbmd0aCgwLCBX
ZWJDb3JlOjpGaXhlZCkpOworICAgIG5ld1N0eWxlLT5zZXRMZWZ0KExlbmd0aCgwLCBXZWJDb3Jl
OjpGaXhlZCkpOworICAgIG1fZnVsbFNjcmVlblJlbmRlcmVyLT5zZXRTdHlsZShuZXdTdHlsZSk7
Cit9CisgICAgCit2b2lkIERvY3VtZW50OjpzZXRGdWxsU2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5k
Q29sb3IoQ29sb3IgYmFja2dyb3VuZENvbG9yKQoreworICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5S
ZW5kZXJlcik7CisgICAgaWYgKCFtX2Z1bGxTY3JlZW5SZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUobV9mdWxsU2NyZWVuUmVuZGVyZXItPnN0eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXRC
YWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKKyAgICBtX2Z1bGxTY3JlZW5SZW5kZXJl
ci0+c2V0U3R5bGUobmV3U3R5bGUpOworfQorCiAjZW5kaWYKIAogdm9pZCBEb2N1bWVudDo6ZGVj
cmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAyZDYwN2M5Li43YzI2Y2NiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTEwOCw2ICsxMDgsNyBAQCBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJWaWV3OworY2xh
c3MgUmVuZGVyRnVsbFNjcmVlbjsKIGNsYXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjsKIGNs
YXNzIFNjcmlwdEVsZW1lbnREYXRhOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBAIC0xMDM3LDcg
KzEwMzgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgaWRBdHRyaWJ1dGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9pZEF0dHJpYnV0ZU5hbWU7IH0KICAgICAKICNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgYm9vbCB3ZWJraXRGdWxsU2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0Z1bGxTY3JlZW47IH0KKyAgICBib29sIHdlYmtpdElzRnVsbFNjcmVlbigpIGNv
bnN0IHsgcmV0dXJuIG1faXNGdWxsU2NyZWVuOyB9CiAgICAgYm9vbCB3ZWJraXRGdWxsU2NyZWVu
S2V5Ym9hcmRJbnB1dEFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbFNjcmVlbiAmJiBt
X2FyZUtleXNFbmFibGVkSW5GdWxsU2NyZWVuOyB9CiAgICAgRWxlbWVudCogd2Via2l0Q3VycmVu
dEZ1bGxTY3JlZW5FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2NyZWVuRWxlbWVudC5n
ZXQoKTsgfQogICAgIHZvaWQgd2Via2l0UmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQqLCB1bnNpZ25lZCBzaG9ydCBmbGFncyk7CkBAIC0xMDQ3LDYgKzEwNDgsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7
CiAgICAgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsK
ICAgICB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7Cisg
ICAgCisgICAgdm9pZCBzZXRGdWxsU2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogcmVu
ZGVyZXIpOworICAgIFJlbmRlckZ1bGxTY3JlZW4qIGZ1bGxTY3JlZW5SZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZnVsbFNjcmVlblJlbmRlcmVyOyB9CisgICAgCisgICAgdm9pZCBzZXRGdWxs
U2NyZWVuUmVuZGVyZXJTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBzZXRG
dWxsU2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3IpOwogI2VuZGlmCiAKICAgICAv
LyBVc2VkIHRvIGFsbG93IGVsZW1lbnQgdGhhdCBsb2FkcyBkYXRhIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBhIEZyYW1lTG9hZGVyIHRvIGRlbGF5IHRoZSAnbG9hZCcgZXZlbnQuCkBAIC0xMzY5LDYg
KzEzNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Z1bGxTY3JlZW47CiAgICAgYm9vbCBt
X2FyZUtleXNFbmFibGVkSW5GdWxsU2NyZWVuOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2Z1bGxT
Y3JlZW5FbGVtZW50OworICAgIFJlbmRlckZ1bGxTY3JlZW4qIG1fZnVsbFNjcmVlblJlbmRlcmVy
OwogI2VuZGlmCiAKICAgICBpbnQgbV9sb2FkRXZlbnREZWxheUNvdW50OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCmluZGV4
IDEzODc1N2YuLmVkNDJmMzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAor
KysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKQEAgLTI0Myw3ICsyNDMsNyBAQCBtb2R1bGUg
Y29yZSB7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAmJiBF
TkFCTEVfRlVMTFNDUkVFTl9BUEkKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4g
d2Via2l0RnVsbFNjcmVlbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Vi
a2l0SXNGdWxsU2NyZWVuOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJr
aXRGdWxsU2NyZWVuS2V5Ym9hcmRJbnB1dEFsbG93ZWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBFbGVtZW50IHdlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudDsKICAgICAgICAgdm9p
ZCB3ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGQ2ZmZjNjguLjVmMWVkMTQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBA
IC02OSw3ICs2OSwxMCBAQAogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisj
aW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5o
IgogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCkBAIC0xMzM5LDYgKzEzNDIsMjEgQEAgdm9p
ZCBOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKICAgICBBU1NFUlQocGFyZW50KTsKICAg
ICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigp
OworICAgIFJlbmRlck9iamVjdCogbmV4dFJlbmRlcmVyID0gdGhpcy0+bmV4dFJlbmRlcmVyKCk7
CisgICAgCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIC8vIElmIHRoaXMgbm9kZSBp
cyBhIGZ1bGxzY3JlZW4gbm9kZSwgY3JlYXRlIGEgbmV3IGFub255bW91cyBmdWxsIHNjcmVlbgor
ICAgIC8vIHJlbmRlcmVyLgorICAgIGlmIChkb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4o
KSAmJiBkb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSA9PSB0aGlz
KSB7CisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW4qIGZ1bGxzY3JlZW5SZW5kZXJlciA9IG5ldyAo
ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyRnVsbFNjcmVlbihkb2N1bWVudCgpKTsK
KyAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5zZXRTdHlsZShSZW5kZXJGdWxsU2NyZWVuOjpj
cmVhdGVGdWxsU2NyZWVuU3R5bGUoKSk7CisgICAgICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGls
ZChmdWxsc2NyZWVuUmVuZGVyZXIsIDApOworICAgICAgICBwYXJlbnRSZW5kZXJlciA9IGZ1bGxz
Y3JlZW5SZW5kZXJlcjsKKyAgICAgICAgbmV4dFJlbmRlcmVyID0gMDsKKyAgICAgICAgZG9jdW1l
bnQoKS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyKGZ1bGxzY3JlZW5SZW5kZXJlcik7CisgICAgfQor
I2VuZGlmCisgICAgCiAgICAgaWYgKHBhcmVudFJlbmRlcmVyICYmIHBhcmVudFJlbmRlcmVyLT5j
YW5IYXZlQ2hpbGRyZW4oKSAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhp
cykpIHsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yUmVuZGVy
ZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpKSB7CkBAIC0x
MzQ4LDcgKzEzNjYsNyBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQogICAg
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzZXRSZW5kZXJlcihyKTsK
ICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0QW5pbWF0YWJsZVN0eWxlKHN0eWxl
LnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGls
ZChyZW5kZXJlcigpLCBuZXh0UmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFJlbmRlcmVyLT5hZGRDaGlsZChyZW5kZXJlcigpLCBuZXh0UmVuZGVyZXIpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oIGIvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGQw
MTNkMWMuLjIyMDE4M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAor
KysgYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTI2MSw2ICsyNjEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxTY3JlZW5G
b3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikgeyB9CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZChSZW5kZXJCb3gqKSB7
IH0KICNlbmRpZgogICAgICAgICAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAxYWYxYjgwLi4z
NWE1NmE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBA
IC04MDQsNyArODA0LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIC8vIHZpZGVvIGlt
cGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRoZW0gdG8gaW1wbGVtZW50IHRoZWlyIG93
biBmdWxsIAogICAgICAgICAvLyBzY3JlZW4gYmVoYXZpb3IuCiAgICAgICAgIGlmIChkb2N1bWVu
dCgpLT5zZXR0aW5ncygpICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPmZ1bGxTY3JlZW5FbmFi
bGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT53ZWJraXRGdWxsU2NyZWVuKCkg
JiYgZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgPT0gbWVkaWFF
bGVtZW50KCkpCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVu
KCkgJiYgZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgPT0gbWVk
aWFFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+d2Via2l0Q2FuY2VsRnVs
bFNjcmVlbigpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVu
dCgpLT53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbigwKTsKLS0gCjEuNi41LjEKCg==
</data>
<flag name="review"
          id="68180"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77135</attachid>
            <date>2010-12-21 11:15:02 -0800</date>
            <delta_ts>2011-01-06 13:02:54 -0800</delta_ts>
            <desc>NewFullScreen-Part-3-Renderering</desc>
            <filename>0003-NewFullScreen-Part-3-Renderering.patch</filename>
            <type>text/plain</type>
            <size>10810</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSA1NGFiOTAxZDU5MTY1YTNhMzNjMGIyOGQxNTlhMTJlZTk4NTNlNWExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDE0OjEwOjExIC0wODAwClN1YmplY3Q6IFtQQVRDSCAzLzVdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDMgLSBSZW5kZXJlcmluZwoKLS0tCiBXZWJDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMCArKysrKysrKysrKysrKysrKysrKysr
KysrKysKIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwICAgICAgICAgICAgICAgICAgfCAgIDI5
ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwICAgIHwgICAyNiArKysrKysrKysrKysrKysrKysrKystCiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIHwgICAxNiArKysrKysrKysrKysrLQog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggICB8ICAgIDEgKwogNSBm
aWxlcyBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWM0YzI4OS4u
NmViN2ExOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTIsNiArMiwzNiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgogCisgICAgICAgIEltcGxlbWVudCBXZWJLaXQgRnVsbCBTY3JlZW4gc3VwcG9ydC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDgxCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzgyNDc0NDQKKworICAgICAgICBUaGUgUmVuZGVyRnVsbFNjcmVl
biBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGNsaWVudHMgb2YgdGhhdCBBUEkgdG8gYWxsb3cg
YSBET00gc3VidHJlZSB0bworICAgICAgICBiZSByZW5kZXJlZCBvdXRzaWRlIGl0cyBvcmlnaW5h
bCBGcmFtZS4gQmVjYXVzZSBvZiB0aGlzLCB0aGVyZSBhcmUgYSBmZXcgYXJlYXMgb2YgdGhlCisg
ICAgICAgIHJlbmRlcmluZyBjb2RlIHdoaWNoIG5lZWQgdG8gYmUgc3BlY2lhbCBjYXNlZDogUmVu
ZGVyRnVsbFNjcmVlbiBsYXllcnMgc2hvdWxkIG5vdCBiZSBjbGlwcGVkCisgICAgICAgIHRvIHRo
ZSB2aWV3cG9ydCwgYXMgdGhleSB3aWxsIGFsbW9zdCBhbHdheXMgYmUgcmVuZGVyaW5nIG91dHNp
ZGUgdGhlIHZpZXdwb3J0IGFyZWE7CisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3Mg
bGF5ZXJzIHNob3VsZCBub3QgYmUgcmVwYXJlbnRlZCBieSB0aGUgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLCBhcworICAgICAgICB0aGUgY2xpZW50IHdpbGwgbGlrZWx5IHdhbnQgdG8gcmVwYXJlbnQg
dGhlIHBsYXRmb3JtTGF5ZXIgaW50byB0aGVpciBvd24gZnVsbHNjcmVlbiBwbGF0Zm9ybQorICAg
ICAgICB3aW5kb3c7IHRoZSBGcmFtZVZpZXcgbXVzdCB1cGRhdGUgdGhlIFJlbmRlckZ1bGxTY3Jl
ZW4gZ3JhcGhpY3MgbGF5ZXIgdHJlZSBzZXBhcmF0ZWx5IGZyb20KKyAgICAgICAgdGhlIHJvb3Qg
bGF5ZXIsIGFzIHRoZSB0d28gdHJlZXMgYXJlIGRpc2Nvbm5lY3RlZC4KKworICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnMpOiAgU3BlY2lhbCB0cmVhdG1lbnQgZm9yIGZ1bGxzY3JlZW4gcmVuZGVy
ZXIuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlUmVj
dXJzaXZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVu
dHMpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzRnVsbFNjcmVlbik6IE5ldyBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9z
aXRlZEJvdW5kcyk6IERvIG5vdCBjbGlwIGlmIHRoZSBsYXllck9yQW5jZXN0b3JJc0Z1bGxTY3Jl
ZW4uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xh
eWVyVHJlZSk6IFNwZWNpYWwgdHJlYXRtZW50IGZvciBmdWxsc2NyZWVuIHJlbmRlcmVyLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5n
TGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisKKzIwMTAtMTItMTcgIEplciBOb2JsZSAg
PGplckBrb2tvZGUuYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCiAgICAgICAgIEltcGxlbWVudGVkIG5vbi1hY2NlbGVyYXRlZCBmdWxsc2NyZWVuIHN1
cHBvcnQuICBUaGUgRG9jdW1lbnQgd2lsbCBub3cgdmVuZCBhIFJlbmRlckZ1bGxTY3JlZW4gb2Jq
ZWN0IGZvciBjbGllbnRzIHRvCiAgICAgICAgIHVzZSB0byByZWxvY2F0ZSB0aGUgZnVsbHNjcmVl
biBlbGVtZW50IHN1YnRyZWUuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZmRkNmU5My4uYmYwODA3NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyLmgiCkBAIC01MzUsNiArNTM2LDEyIEBAIHZvaWQgRnJhbWVWaWV3Ojp1
cGRhdGVDb21wb3NpdGluZ0xheWVycygpCiAgICAgLy8gVGhpcyBjYWxsIHdpbGwgbWFrZSBzdXJl
IHRoZSBjYWNoZWQgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyBpcyB1cGRhdGVkIGZyb20gdGhl
IHByZWYKICAgICB2aWV3LT5jb21wb3NpdG9yKCktPmNhY2hlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZsYWdzKCk7CiAgICAgdmlldy0+Y29tcG9zaXRvcigpLT51cGRhdGVDb21wb3NpdGluZ0xheWVy
cyhDb21wb3NpdGluZ1VwZGF0ZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk7CisgICAgCisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50LT53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBk
b2N1bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPndlYmtpdEZ1
bGxTY3JlZW5SZW5kZXJlcigpLT5pc0FuaW1hdGluZygpKQorICAgICAgICB2aWV3LT5jb21wb3Np
dG9yKCktPnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlQWZ0ZXJMYXlv
dXRPclN0eWxlQ2hhbmdlLCBkb2N1bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCktPmxh
eWVyKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpzZXROZWVkc09uZVNob3REcmF3
aW5nU3luY2hyb25pemF0aW9uKCkKQEAgLTYyOCw2ICs2MzUsMTggQEAgYm9vbCBGcmFtZVZpZXc6
OnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCkKICAgICAKICAgICBpZiAoR3JhcGhpY3NM
YXllciogcm9vdExheWVyID0gY29udGVudFJlbmRlcmVyLT5jb21wb3NpdG9yKCktPnJvb3RQbGF0
Zm9ybUxheWVyKCkpCiAgICAgICAgIHJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsK
KyAgICAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLy8gVGhlIGZ1bGxTY3JlZW5S
ZW5kZXJlcidzIGdyYXBoaWNzTGF5ZXIgIGhhcyBiZWVuIHJlLXBhcmVudGVkLCBhbmQgdGhlIGFi
b3ZlIHJlY3Vyc2l2ZSBzeW5jQ29tcG9zaXRpbmdTdGF0ZQorICAgIC8vIGNhbGwgd2lsbCBub3Qg
Y2F1c2UgdGhlIHN1YnRyZWUgdW5kZXIgaXQgdG8gcmVwYWludC4gIEV4cGxpY2l0bHkgY2FsbCB0
aGUgc3luY0NvbXBvc2l0aW5nU3RhdGUgb24gCisgICAgLy8gdGhlIGZ1bGxTY3JlZW5SZW5kZXJl
cidzIGdyYXBoaWNzTGF5ZXIgaGVyZToKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpOworICAgIGlmIChkb2N1bWVudC0+d2Via2l0SXNGdWxsU2NyZWVuKCkgJiYg
ZG9jdW1lbnQtPndlYmtpdEZ1bGxTY3JlZW5SZW5kZXJlcigpICYmIGRvY3VtZW50LT53ZWJraXRG
dWxsU2NyZWVuUmVuZGVyZXIoKS0+aXNBbmltYXRpbmcoKSkgeworICAgICAgICBSZW5kZXJPYmpl
Y3QqIGZ1bGxTY3JlZW5SZW5kZXJlciA9IGRvY3VtZW50LT53ZWJraXRGdWxsU2NyZWVuUmVuZGVy
ZXIoKTsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGZ1bGxTY3JlZW5MYXllciA9IHRvUmVu
ZGVyQm94KGZ1bGxTY3JlZW5SZW5kZXJlciktPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NM
YXllcigpKQorICAgICAgICAgICAgZnVsbFNjcmVlbkxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZSgpOworICAgIH0KKyNlbmRpZiAgICAKIAogICAgIGJvb2wgYWxsU3ViZnJhbWVzU3luY2VkID0g
dHJ1ZTsKICAgICBjb25zdCBIYXNoU2V0PFJlZlB0cjxXaWRnZXQ+ID4qIHZpZXdDaGlsZHJlbiA9
IGNoaWxkcmVuKCk7CkBAIC0yMTI1LDYgKzIxNDQsMTYgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlm
ICghcC0+cGFpbnRpbmdEaXNhYmxlZCgpKSB7CiAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBy
b290TGF5ZXIgPSBjb250ZW50UmVuZGVyZXItPmNvbXBvc2l0b3IoKS0+cm9vdFBsYXRmb3JtTGF5
ZXIoKSkKICAgICAgICAgICAgIHJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgIC8vIFRoZSBmdWxsU2NyZWVuUmVuZGVy
ZXIncyBncmFwaGljc0xheWVyICBoYXMgYmVlbiByZS1wYXJlbnRlZCwgYW5kIHRoZSBhYm92ZSBy
ZWN1cnNpdmUgc3luY0NvbXBvc2l0aW5nU3RhdGUKKyAgICAgICAgLy8gY2FsbCB3aWxsIG5vdCBj
YXVzZSB0aGUgc3VidHJlZSB1bmRlciBpdCB0byByZXBhaW50LiAgRXhwbGljaXRseSBjYWxsIHRo
ZSBzeW5jQ29tcG9zaXRpbmdTdGF0ZSBvbiAKKyAgICAgICAgLy8gdGhlIGZ1bGxTY3JlZW5SZW5k
ZXJlcidzIGdyYXBoaWNzTGF5ZXIgaGVyZToKKyAgICAgICAgaWYgKGRvY3VtZW50LT53ZWJraXRJ
c0Z1bGxTY3JlZW4oKSAmJiBkb2N1bWVudC0+d2Via2l0RnVsbFNjcmVlblJlbmRlcmVyKCkgJiYg
ZG9jdW1lbnQtPndlYmtpdEZ1bGxTY3JlZW5SZW5kZXJlcigpLT5pc0FuaW1hdGluZygpKSB7Cisg
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIGZ1bGxTY3JlZW5SZW5kZXJlciA9IGRvY3VtZW50LT53
ZWJraXRGdWxsU2NyZWVuUmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVy
KiBmdWxsU2NyZWVuTGF5ZXIgPSB0b1JlbmRlckJveChmdWxsU2NyZWVuUmVuZGVyZXIpLT5sYXll
cigpLT5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBmdWxsU2Ny
ZWVuTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIH0KKyNlbmRpZgogICAg
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRl
eCBiOWJmMTk2Li45NTg1ODUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKQEAgLTU3LDYgKzU3LDEwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
KyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTU0LDYgKzE1OCwxOCBAQCBzdGF0aWMg
Ym9vbCBsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkKFJlbmRlckxheWVyKiBsYXllcikKICAg
ICAKICAgICByZXR1cm4gZmFsc2U7CiB9CisgICAgCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNGdWxsU2NyZWVuKFJlbmRlckxheWVyKiBs
YXllcikKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjdXJyID0gbGF5ZXI7IGN1cnI7IGN1cnIg
PSBjdXJyLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNGdWxs
U2NyZWVuKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGZhbHNlOworfQorI2VuZGlmCiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVD
b21wb3NpdGVkQm91bmRzKCkKIHsKQEAgLTE2MSw4ICsxNzcsMTQgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogCiAgICAgLy8gQ2xpcCB0byB0aGUg
c2l6ZSBvZiB0aGUgZG9jdW1lbnQgb3IgZW5jbG9zaW5nIG92ZXJmbG93LXNjcm9sbCBsYXllci4K
ICAgICAvLyBJZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGlzIHRyYW5zZm9ybWVkLCB3ZSBjYW4ndCBj
dXJyZW50bHkgY29tcHV0ZSB0aGUgY29ycmVjdCByZWN0IHRvIGludGVyc2VjdCB3aXRoLgotICAg
IC8vIFdlJ2QgbmVlZCBSZW5kZXJPYmplY3Q6OmNvbnZlcnRDb250YWluZXJUb0xvY2FsUXVhZCgp
LCB3aGljaCBkb2Vzbid0IHlldCBleGlzdC4KLSAgICBpZiAoY29tcG9zaXRvcigpLT5jb21wb3Np
dGluZ0NvbnN1bHRzT3ZlcmxhcCgpICYmICFsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVkKG1f
b3duaW5nTGF5ZXIpKSB7CisgICAgLy8gV2UnZCBuZWVkIFJlbmRlck9iamVjdDo6Y29udmVydENv
bnRhaW5lclRvTG9jYWxRdWFkKCksIHdoaWNoIGRvZXNuJ3QgeWV0IGV4aXN0LiAgSWYgdGhpcwor
ICAgIC8vIGlzIGEgZnVsbHNjcmVlbiByZW5kZXJlciwgZG9uJ3QgY2xpcCB0byB0aGUgdmlld3Bv
cnQsIGFzIHRoZSByZW5kZXJlciB3aWxsIGJlIGFza2VkIHRvCisgICAgLy8gZGlzcGxheSBvdXRz
aWRlIG9mIHRoZSB2aWV3cG9ydCBib3VuZHMuCisgICAgaWYgKGNvbXBvc2l0b3IoKS0+Y29tcG9z
aXRpbmdDb25zdWx0c092ZXJsYXAoKSAmJiAhbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZCht
X293bmluZ0xheWVyKSAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgICYmICFs
YXllck9yQW5jZXN0b3JJc0Z1bGxTY3JlZW4obV9vd25pbmdMYXllcikKKyNlbmRpZgorICAgICAg
ICApIHsKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IG1fb3duaW5nTGF5ZXItPnJlbmRlcmVy
KCktPnZpZXcoKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciA9IHZpZXctPmxheWVy
KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4
IGQyOGYzZDcuLjNiOTY4NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJBcHBsZXQuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgi
CkBAIC04MDksNiArODEwLDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxk
Q29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zCiAgICAgICAgIGlm
ICghcGFyZW50ZWQpCiAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVy
cygpLT5zZXRDaGlsZHJlbihsYXllckNoaWxkcmVuKTsKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICAgICAgLy8gRm9yIHRoZSBzYWtlIG9mIGNsaWVudHMgb2YgdGhlIGZ1bGwgc2Ny
ZWVuIHJlbmRlcmVyLCBkb24ndCByZXBhcmVudAorICAgICAgICAvLyB0aGUgZnVsbCBzY3JlZW4g
bGF5ZXIgb3V0IGZyb20gdW5kZXIgdGhlbSBpZiB0aGV5J3JlIGluIHRoZSBtaWRkbGUgb2YKKyAg
ICAgICAgLy8gYW5pbWF0aW5nLgorICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzRnVs
bFNjcmVlbigpICYmIHRvUmVuZGVyRnVsbFNjcmVlbihsYXllci0+cmVuZGVyZXIoKSktPmlzQW5p
bWF0aW5nKCkpCisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICAgICAgY2hpbGRMYXll
cnNPZkVuY2xvc2luZ0xheWVyLmFwcGVuZChsYXllckJhY2tpbmctPmNoaWxkRm9yU3VwZXJsYXll
cnMoKSk7CiAgICAgfQogfQpAQCAtMTEzOCw3ICsxMTQ2LDggQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciogbGF5
ZXIpIGMKICAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9ySUZyYW1lKHJlbmRl
cmVyKQogICAgICAgICAgICAgIHx8IChjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSAmJiByZW5kZXJl
ci0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlk
ZGVuKQogICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhsYXllcikK
LSAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJlbmRlcmVy
KTsKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJlbmRl
cmVyKQorICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGdWxsU2NyZWVuKHJl
bmRlcmVyKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaXRl
ZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0CkBAIC0xMzA0LDYgKzEzMTMsMTEgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdXaGVuRGVzY2Vu
ZGFudHNBcmVDb21wb3NpdGluZyhSZW4KIHsKICAgICByZXR1cm4gcmVuZGVyZXItPmhhc1RyYW5z
Zm9ybSgpIHx8IHJlbmRlcmVyLT5pc1RyYW5zcGFyZW50KCkgfHwgcmVuZGVyZXItPmhhc01hc2so
KSB8fCByZW5kZXJlci0+aGFzUmVmbGVjdGlvbigpOwogfQorICAgIAorYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGdWxsU2NyZWVuKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5pc0Z1bGxTY3JlZW4o
KSAmJiB0b1JlbmRlckZ1bGxTY3JlZW4ocmVuZGVyZXIpLT5pc0FuaW1hdGluZygpOworfQogCiAv
LyBJZiBhbiBlbGVtZW50IGhhcyBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLCB0aG9zZSBjaGls
ZHJlbiByZW5kZXIgaW4gZnJvbnQgb2YgdGhlIAogLy8gbGF5ZXIgYmFja2dyb3VuZCwgc28gd2Ug
bmVlZCBhbiBleHRyYSAnY29udGVudHMnIGxheWVyIGZvciB0aGUgZm9yZWdyb3VuZCBvZiB0aGUg
bGF5ZXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggZjdl
NGZmYS4uYWIxOTM0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKQEAgLTIyNiw2ICsyMjYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3Np
dGluZ0ZvclBsdWdpbihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JJRnJhbWUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJl
c0NvbXBvc2l0aW5nV2hlbkRlc2NlbmRhbnRzQXJlQ29tcG9zaXRpbmcoUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihSZW5kZXJP
YmplY3QqKSBjb25zdDsKIAogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxMYXllcihSb290TGF5ZXJB
dHRhY2htZW50KSBjb25zdDsKICAgICAKLS0gCjEuNi41LjEKCg==
</data>
<flag name="review"
          id="68181"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77136</attachid>
            <date>2010-12-21 11:16:28 -0800</date>
            <delta_ts>2010-12-21 13:48:05 -0800</delta_ts>
            <desc>NewFullScreen-Part-4-Element-screenRect.patch</desc>
            <filename>0004-NewFullScreen-Part-4-Element-screenRect.patch</filename>
            <type>text/plain</type>
            <size>3719</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSAxMWJlYjMzNWU5NmM1MjRlOWVmMWI1NWY3NzU4MmVjMDk2NWIzNjFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDE0OjQyOjIwIC0wODAwClN1YmplY3Q6IFtQQVRDSCA0LzVdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDQgLSBFbGVtZW50OjpzY3JlZW5SZWN0KCkKCi0tLQogV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAxNyArKysrKysrKysrKysrKysrKwogV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAgICAgICAgICAgIHwgICAgNyArKysrKysrCiBXZWJDb3JlL2Rv
bS9FbGVtZW50LmggICAgICAgICAgICAgfCAgICAzICsrKwogV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIHwgICAgNyAtLS0tLS0tCiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oICAgfCAgICAyIC0tCiA1IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDkgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2ZWI3YTE5Li5jNWVmODlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDIzIEBACiAgICAgICAgIEltcGxl
bWVudCBXZWJLaXQgRnVsbCBTY3JlZW4gc3VwcG9ydC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDgxCiAgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzgy
NDc0NDQKKyAgICAgICAgCisgICAgICAgIHNjcmVlblJlY3QgaXMgdXNlZnVsIGZvciBtb3JlIHRo
YW4ganVzdCBIVE1MTWVkaWFFbGVtZW50cy4gIFByb21vdGUgaXQgaW50bworICAgICAgICBFbGVt
ZW50LgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOiBNb3ZlZCBpbnRvIEVsZW1lbnQgZnJv
bSBIVE1MTWVkaWFFbGVtZW50LgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IERpdHRvLgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
OiBNb3ZlZCBzY3JlZW5SZWN0IGludG8gRWxlbWVudC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuaDogRGl0dG8uCisKKzIwMTAtMTItMTcgIEplciBOb2JsZSAgPGplckBrb2tvZGUu
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBXZWJLaXQgRnVsbCBTY3JlZW4gc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDgxCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzgyNDc0NDQKIAogICAgICAgICBUaGUgUmVuZGVyRnVsbFNjcmVlbiBpcyBpbnRlbmRl
ZCB0byBiZSB1c2VkIGJ5IGNsaWVudHMgb2YgdGhhdCBBUEkgdG8gYWxsb3cgYSBET00gc3VidHJl
ZSB0bwogICAgICAgICBiZSByZW5kZXJlZCBvdXRzaWRlIGl0cyBvcmlnaW5hbCBGcmFtZS4gQmVj
YXVzZSBvZiB0aGlzLCB0aGVyZSBhcmUgYSBmZXcgYXJlYXMgb2YgdGhlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGJl
NDAwYjguLmE5MWY4NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC01NTgsNiArNTU4LDEzIEBAIFBhc3NSZWZQdHI8
Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgY29uc3QKICAgICBh
ZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigpKTsKICAgICBy
ZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRlKHJlc3VsdCk7CiB9CisgICAgCitJbnRSZWN0IEVsZW1l
bnQ6OnNjcmVlblJlY3QoKSBjb25zdAoreworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+Y29udGVudHNUb1NjcmVlbihyZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dCgpKTsKK30KIAogc3RhdGljIGlubGluZSBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Uo
Y29uc3QgRWxlbWVudCogZSkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBi
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCA4NDMyZjgyLi5kYzQ3MTMxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0x
NjksNiArMTY5LDkgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4g
Z2V0Q2xpZW50UmVjdHMoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPENsaWVudFJlY3Q+IGdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdGhlIGFic29s
dXRlIGJvdW5kaW5nIGJveCB0cmFuc2xhdGVkIGludG8gc2NyZWVuIGNvb3JkaW5hdGVzOgorICAg
IEludFJlY3Qgc2NyZWVuUmVjdCgpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCByZW1vdmVBdHRy
aWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA0OTYy
ZjhlLi5lMDY4NGI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yMjY3LDEzICsy
MjY3LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSgpCiAg
ICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKLUludFJlY3QgSFRNTE1lZGlhRWxlbWVudDo6c2NyZWVu
UmVjdCgpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwotICAgIHJldHVybiByZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1Rv
U2NyZWVuKHJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwotfQotICAgIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
IHsKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCmluZGV4IGVkYWY3NmMuLmJkYzM0NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAt
MTQwLDggKzE0MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luU2NydWJiaW5nKCk7CiAgICAg
dm9pZCBlbmRTY3J1YmJpbmcoKTsKIAotICAgIEludFJlY3Qgc2NyZWVuUmVjdCgpOwotCiAgICAg
Ym9vbCBjYW5QbGF5KCkgY29uc3Q7CiAKICAgICBmbG9hdCBwZXJjZW50TG9hZGVkKCkgY29uc3Q7
Ci0tIAoxLjYuNS4xCgo=
</data>
<flag name="review"
          id="68182"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77137</attachid>
            <date>2010-12-21 11:17:06 -0800</date>
            <delta_ts>2011-01-03 17:07:44 -0800</delta_ts>
            <desc>NewFullScreen-Part-5-WebFullscreenController</desc>
            <filename>0005-NewFullScreen-Part-5-WebFullscreenController.patch</filename>
            <type>text/plain</type>
            <size>43058</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSA1NDc0YTE2OWIyYmY5YTQ0YTE4N2EzOGVlY2MyZTQ0NmU4ZGZiZTM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDE1OjE4OjQyIC0wODAwClN1YmplY3Q6IFtQQVRDSCA1LzVdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDUgLSBXZWJGdWxsc2NyZWVuQ29udHJvbGxlcgoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsKIFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KIFdlYktp
dC9tYWMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDUgKysKIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5oICB8ICAgNzggKysrCiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gfCAgODg1ICsrKysrKysr
KysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTAyOCBpbnNlcnRpb25zKCspLCAx
IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9tYWMvV2ViVmlldy9XZWJG
dWxsc2NyZWVuQ29udHJvbGxlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyLm1tCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNWVmODlhLi5lMzQ4YTkwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1
LDE4IEBACiAgICAgICAgIEltcGxlbWVudCBXZWJLaXQgRnVsbCBTY3JlZW4gc3VwcG9ydC4KICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDgxCiAgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzgyNDc0NDQKKworICAgICAgICBNYXJrIGZvciBleHBvcnQgYWxs
IHRob3NlIFdlYkNvcmUgZnVuY3Rpb25zIG5lZWRlZCBieSBXZWJGdWxsc2NyZWVuQ29udHJvbGxl
ci4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisyMDEwLTEyLTE3ICBKZXIgTm9ibGUg
IDxqZXJAa29rb2RlLmFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgV2ViS2l0IEZ1bGwgU2NyZWVuIHN1cHBvcnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ4MQorICAg
ICAgICByZGFyOi8vcHJvYmxlbS84MjQ3NDQ0CiAgICAgICAgIAogICAgICAgICBzY3JlZW5SZWN0
IGlzIHVzZWZ1bCBmb3IgbW9yZSB0aGFuIGp1c3QgSFRNTE1lZGlhRWxlbWVudHMuICBQcm9tb3Rl
IGl0IGludG8KICAgICAgICAgRWxlbWVudC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4gYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGM3OWViYTcuLjM2M2Y1NjMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgpAQCAtMTU2Myw3ICsxNTYzLDYgQEAgX3drU3VwcG9ydHNNdWx0aXBhcnRYTWl4ZWRSZXBs
YWNlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKLV9fWk43V2ViQ29yZTE2SFRNTE1lZGlh
RWxlbWVudDEwc2NyZWVuUmVjdEV2CiBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxMmVu
ZFNjcnViYmluZ0V2CiBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxNGJlZ2luU2NydWJi
aW5nRXYKIF9fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDE0ZXhpdEZ1bGxzY3JlZW5FdgpA
QCAtMTU5NSw2ICsxNTk0LDE0IEBAIF9fWk43V2ViQ29yZThEb2N1bWVudDMzd2Via2l0RGlkRXhp
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50RVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZThEb2N1bWVu
dDM0d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudEVQTlNfN0VsZW1lbnRFCiBfX1pO
N1dlYkNvcmU4RG9jdW1lbnQzNHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnRFUE5T
XzdFbGVtZW50RQogX19aTjdXZWJDb3JlOERvY3VtZW50MzV3ZWJraXRXaWxsRW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudEVQTlNfN0VsZW1lbnRFCitfX1pON1dlYkNvcmU4RG9jdW1lbnQyNXNldEZ1
bGxTY3JlZW5SZW5kZXJlclNpemVFaWkKK19fWk43V2ViQ29yZThEb2N1bWVudDM2c2V0RnVsbFNj
cmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yRU5TXzVDb2xvckUKK19fWk5LN1dlYkNvcmU4RG9j
dW1lbnQ5ZG9tV2luZG93RXYKK19fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ1ZW5kZWRF
dgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDZwYXVzZWRFdgorX19aTks3V2ViQ29y
ZTdFbGVtZW50MTBzY3JlZW5SZWN0RXYKK19fWk43V2ViQ29yZThEb2N1bWVudDEydXBkYXRlTGF5
b3V0RXYKK19fWk5LN1dlYkNvcmU0Tm9kZTE2dHJhdmVyc2VOZXh0Tm9kZUVQS1MwXwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBmYjE5ZWQ2Li43
ZDM4NDk1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEwLTEyLTE3ICBKZXIgTm9ibGUgIDxqZXJA
a29rb2RlLmFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgV2ViS2l0IEZ1bGwgU2NyZWVuIHN1cHBvcnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ4MQorICAgICAgICBy
ZGFyOi8vcHJvYmxlbS84MjQ3NDQ0CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGltcGxl
bWVudHMgdGhlIEZ1bGxTY3JlZW4gQVBJcyB1c2luZyB0aGUgbmV3IFJlbmRlckZ1bGxTY3JlZW4g
cmVuZGVyZXIgYW5kIHRoZSBuZXcKKyAgICAgICAgRG9jdW1lbnQgY2xpZW50IEFQSXMuIFRoZSBS
ZW5kZXJGdWxsU2NyZWVuIHJlbmRlcmVyJ3MgQ0FMYXllciBpcyBob3N0ZWQgaW4gYSBuZXcsIGZ1
bGxzY3JlZW4KKyAgICAgICAgd2luZG93LCBhbmQgYSBjdXN0b20gQ0FBbmltYXRpb24gYW5pbWF0
ZXMgdGhhdCBsYXllciBiZXR3ZWVuIHRoZSBpbml0aWFsIHNjcmVlbiByZWN0IG9mIHRoZQorICAg
ICAgICBmdWxsIHNjcmVlbiBlbGVtZW50LCB0byBpdHMgZmluYWwgdmFsdWUuIFdlYkZ1bGxzY3Jl
ZW5Db250cm9sbGVyIHdpbGwgc3dhcCB0aGUgV2ViVmlldyBvdXQgb2YKKyAgICAgICAgaXRzIG9y
aWdpbmFsIHdpbmRvdywgYW5kIGludG8gdGhlIGZ1bGxzY3JlZW4gd2luZG93LiBUaGUgY29udHJv
bGxlciB3aWxsIHJlcGxhY2UgdGhlIFdlYlZpZXcKKyAgICAgICAgd2l0aCBhIHBsYWNlaG9sZGVy
IHZpZXcsIHNvIHRoYXQgaWYgdGhlIHBsYWNlaG9sZGVyIG1vdmVzIG9yIHJlc2l6ZWQgd2hpbGUg
dGhlIFdlYlZpZXcgaXMKKyAgICAgICAgYWJzZW50LCB0aGUgV2ViVmlldyB3aWxsIG1vdmUgYmFj
ayB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiB3aGVuIGV4aXRpbmcgZnVsbHNjcmVlbi4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAg
ICogV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbTogQWRkZWQuCisgICAgICAgICgt
W1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuOl0pOiAgQ2xv
c2UgdGhlIGZ1bGxzY3JlZW4gd2luZG93LgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuQ29udHJv
bGxlciB3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW46XSk6IFN3YXAgdGhlIHdlYlZpZXcgYmFjayBp
bnRvIHRoZSBmdWxsc2NyZWVuIHdpbmRvdy4gCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5Db250
cm9sbGVyIGFuaW1hdGlvbkRpZFN0b3A6ZmluaXNoZWQ6XSk6IENhbGwgd2luZG93RGlke0V4aXR8
RW50ZXJ9RnVsbFNjcmVlbiBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVl
bkNvbnRyb2xsZXIgYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6XSk6CisgICAgICAgICgtW1dl
YkZ1bGxzY3JlZW5Db250cm9sbGVyIGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVy
czpdKTogUmVzaXplIHRoZSBmdWxsc2NyZWVuIHdpbmRvdyB0byBtYXRjaAorICAgICAgICAgICAg
dGhlIG5ldyBzY3JlZW4gcGFyYW1ldGVycy4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRy
b2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiAgU2V0IHVwIHRoZSBhbmltYXRpb24gdGhhdCB3aWxs
IHRha2UgdGhlIGZ1bGxzY3JlZW4gZWxlbWVudAorICAgICAgICAgICAgZnJvbSBpdHMgb3JpZ2lu
YWwgc2NyZWVuIHJlY3QgaW50byBmdWxsc2NyZWVuLgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVu
Q29udHJvbGxlciBleGl0RnVsbHNjcmVlbl0pOiBTd2FwIHRoZSB3ZWJWaWV3IGJhY2sgaW50byBp
dHMgb3JpZ2luYWwgd2luZG93LgorICAgICAgICAgICAgU2V0IHVwIHRoZSBhbmltYXRpb24gdGhh
dCB3aWxsIHRha2UgdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCBiYWNrIGludG8gaXRzIG9yaWdpbmFs
IHNjcmVlbgorICAgICAgICAgICAgcmVjdC4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbkNvbnRy
b2xsZXIgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBOb3cgY2hlY2tzIF9pc0FueU1vdmllUGxh
eWluZyB0byBkZXRlcm1pbmUgCisgICAgICAgICAgICB3aGV0aGVyIHRvIGRpc2FibGUgc2NyZWVu
c2F2ZXIgYW5kIHNsZWVwLgorICAgICAgICAoLVtXZWJGdWxsc2NyZWVuQ29udHJvbGxlciBfaXNB
bnlNb3ZpZVBsYXlpbmddKTogV2Fsa3MgdGhyb3VnaCB0aGUgc3ViLXRyZWUgc3RhcnRpbmcgYXQg
dGhlIGZ1bGxzY3JlZW4gZWxlbWVudAorICAgICAgICAgICAgbG9va2luZyBmb3IgSFRNTFZpZGVv
RWxlbWVudHM7IHJldHVybnMgd2hldGhlciBhbnkgYXJlIGZvdW5kIHRvIGJlIHBsYXlpbmcuCisg
ICAgICAgICgtW1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyIF9hbmltYXRpb25EdXJhdGlvbl0pOiBS
ZXR1cm5zIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBkdXJhdGlvbiwgYWZmZWN0ZWQgYnkgY29udHJv
bAorICAgICAgICAgICAgYW5kIHNoaWZ0IGtleXMuCisgICAgICAgICgtW1dlYkZ1bGxzY3JlZW5X
aW5kb3cgY2FuQmVjb21lS2V5V2luZG93XSk6IEFsbG93IHRoZSB3aW5kb3cgdG8gYmVjb21lIGtl
eS4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbldpbmRvdyBrZXlEb3duOl0pOiBIYW5kbGUgdGhl
ICdFc2MnIGtleS4KKyAgICAgICAgKC1bV2ViRnVsbHNjcmVlbldpbmRvdyBjYW5jZWxPcGVyYXRp
b246XSk6IFJlcXVlc3QgdG8gZXhpdCBmdWxsc2NyZWVuLgorICAgICAgICAoLVtXZWJGdWxsc2Ny
ZWVuV2luZG93IHJlbmRlcmVyTGF5ZXJdKTogQ29udmVuaWVuY2UgYWNjZXNzb3IuCisgICAgICAg
ICgtW1dlYkZ1bGxzY3JlZW5XaW5kb3cgc2V0UmVuZGVyZXJMYXllcjpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkZ1bGxzY3JlZW5XaW5kb3cgYmFja2dyb3VuZExheWVyXSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJGdWxsc2NyZWVuV2luZG93IGFuaW1hdGlvblZpZXddKTogRGl0dG8uCisgICAg
ICAgIChNZWRpYUV2ZW50TGlzdGVuZXI6Ok1lZGlhRXZlbnRMaXN0ZW5lcik6IEltcGxlbWVudHMg
dGhlIEV2ZW50TGlzdGVuZXIgcHJvdG9jb2wuCisgICAgICAgIChNZWRpYUV2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KTogVGVsbHMgaXRzIGRlbGVnYXRlIHRvIF91cGRhdGVQb3dlckFzc2VydGlv
bnMuCisgICAgICAgIAogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5oIGIvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZ1bGxzY3JlZW5Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDMzOWIxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCisjaW1wb3J0IDx3dGYvUmVmUHRy
Lmg+CisKK0BjbGFzcyBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uOworQGNsYXNzIFdlYlZpZXc7Citu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBSZW5kZXJC
b3g7CisgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKK30KKworQGludGVyZmFjZSBXZWJGdWxsc2Ny
ZWVuQ29udHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlciB7CitAcHJpdmF0ZQorICAgIFJlZlB0
cjxXZWJDb3JlOjpFbGVtZW50PiBfZWxlbWVudDsKKyAgICBXZWJDb3JlOjpSZW5kZXJCb3gqIF9y
ZW5kZXJlcjsgLy8gKHNldCkKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gX3JlcGxhY2Vt
ZW50RWxlbWVudDsgCisgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsg
Ly8gKHJldGFpbikKKyAgICBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uICpfZmFkZUFuaW1hdGlvbjsg
Ly8gKHJldGFpbikKKyAgICBXZWJWaWV3ICpfd2ViVmlldzsKKyAgICBOU1ZpZXcqIF9wbGFjZWhv
bGRlclZpZXc7CisgICAgQ0FMYXllciogX3JlbmRlcmVyTGF5ZXI7CisgICAgQ0FMYXllciogX2Jh
Y2tncm91bmRMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRMaXN0ZW5lcj4gX21lZGlh
RXZlbnRMaXN0ZW5lcjsgCisKKyAgICBCT09MIF9pc0FuaW1hdGluZzsKKyAgICBCT09MIF9pc0Z1
bGxzY3JlZW47CisgICAgQk9PTCBfaXNXaW5kb3dMb2FkZWQ7CisgICAgQk9PTCBfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uOworICAgIEJPT0wgX2lzUGxheWluZzsKKyAgICB1aW50MzJfdCBfaWRsZURp
c3BsYXlTbGVlcEFzc2VydGlvbjsKKyAgICB1aW50MzJfdCBfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0
aW9uOworICAgIE5TVGltZXIgKl90aWNrbGVUaW1lcjsKKyAgICBTeXN0ZW1VSU1vZGUgX3NhdmVk
VUlNb2RlOworICAgIFN5c3RlbVVJT3B0aW9ucyBfc2F2ZWRVSU9wdGlvbnM7CisgICAgQ0dSZWN0
IF9pbml0aWFsRnJhbWU7Cit9CisKKy0gKFdlYlZpZXcqKXdlYlZpZXc7CistICh2b2lkKXNldFdl
YlZpZXc6KFdlYlZpZXcqKXdlYlZpZXc7CisKKy0gKHZvaWQpc2V0RWxlbWVudDooUGFzc1JlZlB0
cjxXZWJDb3JlOjpFbGVtZW50PillbGVtZW50OworLSAoV2ViQ29yZTo6RWxlbWVudCopZWxlbWVu
dDsKKworLSAodm9pZClzZXRSZW5kZXJlcjooV2ViQ29yZTo6UmVuZGVyQm94KilyZW5kZXJlcjsK
Ky0gKFdlYkNvcmU6OlJlbmRlckJveCopcmVuZGVyZXI7CisKKy0gKHZvaWQpZW50ZXJGdWxsc2Ny
ZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CisKK0BlbmQK
KworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGdWxsc2NyZWVuQ29udHJvbGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42NDBlMDNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZ1bGxzY3JlZW5Db250cm9sbGVyLm1tCkBAIC0wLDAgKzEsODg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworI2ltcG9ydCAiV2ViRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaCIKKworI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCisjaW1wb3J0ICJX
ZWJXaW5kb3dBbmltYXRpb24uaCIKKyNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCA8SU9LaXQvcHdyX21ndC9JT1BNTGliLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkxp
c3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJvcGVydHlOYW1lcy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9ET01Eb2N1bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9ET01Eb2N1bWVudEludGVybmFs
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTUhUTUxFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0RPTVdpbmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRp
YUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Ob2RlTGlzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJCbG9jay5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KKyNpbXBvcnQgPG9iamMvb2Jq
Yy1ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KKworc3RhdGljIGNvbnN0
IE5TVGltZUludGVydmFsIHRpY2tsZVRpbWVySW50ZXJ2YWwgPSAxLjA7CitzdGF0aWMgY29uc3Qg
TlNTdHJpbmcqIGlzRnVsbHNjcmVlbktleSA9IEAiaXNGdWxsc2NyZWVuIjsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViRnVsbHNjcmVlbldpbmRvdyA6IE5TV2lu
ZG93CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpCis8TlNBbmltYXRpb25EZWxlZ2F0ZT4KKyNlbmRpZgoreworICAgIE5TVmll
dyogX2FuaW1hdGlvblZpZXc7CisgICAgCisgICAgQ0FMYXllciogX3JlbmRlcmVyTGF5ZXI7Cisg
ICAgQ0FMYXllciogX2JhY2tncm91bmRMYXllcjsKK30KKy0gKENBTGF5ZXIqKXJlbmRlcmVyTGF5
ZXI7CistICh2b2lkKXNldFJlbmRlcmVyTGF5ZXI6KENBTGF5ZXIqKXJlbmRlcmVyTGF5ZXI7Cist
IChDQUxheWVyKiliYWNrZ3JvdW5kTGF5ZXI7CistIChOU1ZpZXcqKWFuaW1hdGlvblZpZXc7CitA
ZW5kCisKK2NsYXNzIE1lZGlhRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUV2ZW50TGlzdGVuZXI+IGNyZWF0
ZShXZWJGdWxsc2NyZWVuQ29udHJvbGxlciogZGVsZWdhdGUpOworICAgIHZpcnR1YWwgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50Kik7CisKK3ByaXZhdGU6CisgICAg
TWVkaWFFdmVudExpc3RlbmVyKFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZSk7IAor
ICAgIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZTsKK307CisKK0BpbnRlcmZhY2Ug
V2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIoKQorLSAodm9pZClfcmVxdWVzdEV4aXRGdWxsc2NyZWVu
V2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247CistICh2b2lkKV91cGRhdGVNZW51QW5kRG9j
a0ZvckZ1bGxzY3JlZW47CistICh2b2lkKV91cGRhdGVQb3dlckFzc2VydGlvbnM7CistIChXZWJG
dWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5XaW5kb3c7CistIChEb2N1bWVudCopX2RvY3Vt
ZW50OworLSAoQ0ZUaW1lSW50ZXJ2YWwpX2FuaW1hdGlvbkR1cmF0aW9uOworLSAoQk9PTClfaXNB
bnlNb3ZpZVBsYXlpbmc7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNXaW5kb3coSXNPbkFjdGl2ZVNw
YWNlQWRkaXRpb25Gb3JUaWdlckFuZExlb3BhcmQpCistIChCT09MKWlzT25BY3RpdmVTcGFjZTsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkZ1bGxzY3JlZW5Db250cm9sbGVyCisKKyNwcmFn
bWEgbWFyayAtCisjcHJhZ21hIG1hcmsgSW5pdGlhbGl6YXRpb24KKy0gKGlkKWluaXQKK3sKKyAg
ICAvLyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0aW9uLCB0byBtYWtlIHN1cmUgLXdpbmRvd051
bWJlciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2ViV2luZG93U2NhbGVBbmltYXRpb24pLgorICAg
IE5TV2luZG93ICp3aW5kb3cgPSBbW1dlYkZ1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGluaXRXaXRo
Q29udGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBi
YWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3aW5kb3dEaWRMb2FkXTsK
KyAgICBfbWVkaWFFdmVudExpc3RlbmVyID0gTWVkaWFFdmVudExpc3RlbmVyOjpjcmVhdGUoc2Vs
Zik7CisgICAgcmV0dXJuIHNlbGY7CisgICAgCit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IEFTU0VSVCghX3RpY2tsZVRpbWVyKTsKKyAgICAKKyAgICBbc2VsZiBzZXRXZWJWaWV3Om5pbF07
CisgICAgW19wbGFjZWhvbGRlclZpZXcgcmVsZWFzZV07CisgICAgCisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpd2luZG93RGlkTG9hZAoreworI2lmZGVmIEJVSUxE
SU5HX09OX1RJR0VSCisgICAgLy8gV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIgaXMgbm90IHN1cHBv
cnRlZCBvbiBUaWdlcjoKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlCisgICAgCisg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTopIG5hbWU6TlNB
cHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOikg
bmFtZTpOU0FwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyc05vdGlmaWNhdGlvbiBv
YmplY3Q6TlNBcHBdOworI2VuZGlmCit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsg
QWNjZXNzb3JzCisKKy0gKFdlYlZpZXcqKXdlYlZpZXcKK3sKKyAgICByZXR1cm4gX3dlYlZpZXc7
Cit9CisKKy0gKHZvaWQpc2V0V2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBbd2Vi
VmlldyByZXRhaW5dOworICAgIFtfd2ViVmlldyByZWxlYXNlXTsKKyAgICBfd2ViVmlldyA9IHdl
YlZpZXc7Cit9CisKKy0gKEVsZW1lbnQqKWVsZW1lbnQKK3sKKyAgICByZXR1cm4gX2VsZW1lbnQu
Z2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0RWxlbWVudDooUGFzc1JlZlB0cjxFbGVtZW50PillbGVt
ZW50Cit7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBXZWJGdWxsc2NyZWVuQ29u
dHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFRpZ2VyOgorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2Vsc2UKKyAgICBFdmVudE5hbWVzJiBldmVudE5hbWVzID0gV2ViQ29yZTo6ZXZlbnRO
YW1lcygpOworICAgIAorICAgIGlmIChfZWxlbWVudCkgeworICAgICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IF9lbGVtZW50LT5kb2N1bWVudCgpLT5kb21XaW5kb3coKTsKKyAgICAgICAgaWYgKHdp
bmRvdykgeworICAgICAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMucGxheUV2ZW50LCAgX21lZGlhRXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICB3aW5kb3ctPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wYXVzZUV2ZW50LCBf
bWVkaWFFdmVudExpc3RlbmVyLmdldCgpLCB0cnVlKTsKKyAgICAgICAgICAgIHdpbmRvdy0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLmVuZGVkRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVu
ZXIuZ2V0KCksIHRydWUpOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBfZWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgCisgICAgaWYgKF9lbGVtZW50KSB7CisgICAgICAgIERPTVdpbmRv
dyogd2luZG93ID0gX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpOworICAgICAgICBp
ZiAod2luZG93KSB7CisgICAgICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcy5wbGF5RXZlbnQsICBfbWVkaWFFdmVudExpc3RlbmVyLCB0cnVlKTsKKyAgICAgICAgICAg
IHdpbmRvdy0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQsIF9tZWRpYUV2
ZW50TGlzdGVuZXIsIHRydWUpOworICAgICAgICAgICAgd2luZG93LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMuZW5kZWRFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKK30KKworLSAoUmVuZGVyQm94KilyZW5kZXJlciAKK3sKKyAg
ICByZXR1cm4gX3JlbmRlcmVyOworfQorCistICh2b2lkKXNldFJlbmRlcmVyOihSZW5kZXJCb3gq
KXJlbmRlcmVyCit7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBXZWJGdWxsc2Ny
ZWVuQ29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFRpZ2VyOgorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2Vsc2UKKyAgICBfcmVuZGVyZXIgPSByZW5kZXJlcjsKKyNlbmRpZgorfQor
CisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE5vdGlmaWNhdGlvbnMKKworLSAodm9pZCl3
aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjooQk9PTClmaW5pc2hlZAoreworICAgIGlmICghX2lzQW5p
bWF0aW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKF9pc0Z1bGxzY3JlZW4pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CisgICAg
QVNTRVJUKF9lbGVtZW50KTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVu
ZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRd
LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAg
IF9lbGVtZW50ID0gMDsKKworICAgIGlmIChmaW5pc2hlZCkgeworICAgICAgICBbc2VsZiBfdXBk
YXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuXTsgICAKKyAgICAgICAgW3NlbGYgX3VwZGF0ZVBv
d2VyQXNzZXJ0aW9uc107CisgICAgICAgIAorICAgICAgICBbW193ZWJWaWV3IHdpbmRvd10gZGlz
cGxheV07CisgICAgICAgIFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gc2V0UmVuZGVyZXJMYXll
cjpuaWxdOworICAgICAgICBbW3NlbGYgd2luZG93XSBjbG9zZV07CisgICAgfQorCisgICAgTlNF
bmFibGVTY3JlZW5VcGRhdGVzKCk7CisKKyAgICBfaXNBbmltYXRpbmcgPSBOTzsKKyAgICBbc2Vs
ZiBhdXRvcmVsZWFzZV07IC8vIEFzc29jaWF0ZWQgLXJldGFpbiBpcyBpbiAtZXhpdEZ1bGxzY3Jl
ZW4uCit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOihCT09MKWZpbmlzaGVk
Cit7CisgICAgaWYgKCFfaXNBbmltYXRpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoIV9pc0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU0Rpc2FibGVT
Y3JlZW5VcGRhdGVzKCk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+
c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yKENvbG9yOjpibGFjayk7CisgICAg
CisgICAgaWYgKGZpbmlzaGVkKSB7CisgICAgICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0Zv
ckZ1bGxzY3JlZW5dOworICAgICAgICBbc2VsZiBfdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAg
ICAgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworICAgIAorICAg
ICAgICAvLyBNb3ZlIHRoZSB3ZWJWaWV3IGludG8gb3VyIGZ1bGxzY3JlZW4gV2luZG93CisgICAg
ICAgIGlmICghX3BsYWNlaG9sZGVyVmlldykKKyAgICAgICAgICAgIF9wbGFjZWhvbGRlclZpZXcg
PSBbW05TVmlldyBhbGxvY10gaW5pdF07CisKKyAgICAgICAgV2ViVmlldyogd2ViVmlldyA9IFtz
ZWxmIHdlYlZpZXddOworICAgICAgICBbX3BsYWNlaG9sZGVyVmlldyBzZXRGcmFtZTpbd2ViVmll
dyBmcmFtZV1dOyAgICAgICAgCisgICAgICAgIFtfcGxhY2Vob2xkZXJWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6W3dlYlZpZXcgYXV0b3Jlc2l6aW5nTWFza11dOworICAgICAgICBbX3BsYWNlaG9s
ZGVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgW1t3ZWJWaWV3IHN1cGVydmll
d10gcmVwbGFjZVN1YnZpZXc6d2ViVmlldyB3aXRoOl9wbGFjZWhvbGRlclZpZXddOworCisgICAg
ICAgIFtbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld10gYWRkU3Vidmlldzp3ZWJWaWV3XTsKKyAg
ICAgICAgW3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGV8TlNW
aWV3SGVpZ2h0U2l6YWJsZV07CisgICAgICAgIFt3ZWJWaWV3IHNldEZyYW1lOltbW3NlbGYgd2lu
ZG93XSBjb250ZW50Vmlld10gYm91bmRzXV07CisgICAgICAgIAorICAgICAgICBXZWJGdWxsc2Ny
ZWVuV2luZG93KiB3aW5kb3cgPSBbc2VsZiBfZnVsbHNjcmVlbldpbmRvd107CisgICAgICAgIFt3
aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsKKyAgICAgICAg
W3dpbmRvdyBzZXRPcGFxdWU6WUVTXTsKKworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07
CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAg
IFtbW3dpbmRvdyBhbmltYXRpb25WaWV3XSBsYXllcl0gc2V0T3BhY2l0eTowXTsKKyAgICAgICAg
W0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICB9CisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVz
KCk7CisKKyAgICBfaXNBbmltYXRpbmcgPSBOTzsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRT
dG9wOihDQUFuaW1hdGlvbiAqKWFuaW0gZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQKK3sKKyAgICBC
T09MIGlzRnVsbHNjcmVlbkFuaW1hdGlvbiA9IFtbYW5pbSB2YWx1ZUZvcktleTppc0Z1bGxzY3Jl
ZW5LZXldIGJvb2xWYWx1ZV07CisgICAgCisgICAgaWYgKCFpc0Z1bGxzY3JlZW5BbmltYXRpb24p
CisgICAgICAgIFtzZWxmIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuOmZpbmlzaGVkXTsKKyAgICBl
bHNlCisgICAgICAgIFtzZWxmIHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbjpmaW5pc2hlZF07Cit9
CisKKy0gKHZvaWQpYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6KE5TTm90aWZpY2F0aW9uKilu
b3RpZmljYXRpb24KK3sgICAKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGZ1bGxzY3JlZW5X
aW5kb3cgaXMgb24gdGhlIGFjdGl2ZSBzcGFjZTsgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUK
KyAgICAvLyBvbiAxMC42IGFuZCBsYXRlciwgc28gZGVmYXVsdCB0byBZRVMgaWYgdGhlIGZ1bmN0
aW9uIGlzIG5vdCBhdmFpbGFibGU6CisgICAgTlNXaW5kb3cqIGZ1bGxzY3JlZW5XaW5kb3cgPSBb
c2VsZiBfZnVsbHNjcmVlbldpbmRvd107CisgICAgQk9PTCBpc09uQWN0aXZlU3BhY2UgPSAoW2Z1
bGxzY3JlZW5XaW5kb3cgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihpc09uQWN0aXZlU3Bh
Y2UpXSA/IFtmdWxsc2NyZWVuV2luZG93IGlzT25BY3RpdmVTcGFjZV0gOiBZRVMpOworCisgICAg
Ly8gUmVwbGljYXRlIHRoZSBRdWlja1RpbWUgUGxheWVyIChYKSBiZWhhdmlvciB3aGVuIGxvc2lu
ZyBhY3RpdmUgYXBwbGljYXRpb24gc3RhdHVzOgorICAgIC8vIElzIHRoZSBmdWxsc2NyZWVuIHNj
cmVlbiB0aGUgbWFpbiBzY3JlZW4/IChOb3RlOiB0aGlzIGNvdmVycyB0aGUgY2FzZSB3aGVyZSBv
bmx5IGEgCisgICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBhdmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxz
Y3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNlPyBJRkYgc28sIAorICAgIC8vIHRoZW4g
ZXhpdCBmdWxsc2NyZWVuIG1vZGUuICAgIAorICAgIGlmIChbZnVsbHNjcmVlbldpbmRvdyBzY3Jl
ZW5dID09IFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSAmJiBpc09uQWN0aXZl
U3BhY2UpCisgICAgICAgICBbc2VsZiBfcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlv
bjpOT107Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJz
OihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCit7CisgICAgLy8gVGhlIHVzZXIgbWF5IGhh
dmUgY2hhbmdlZCB0aGUgbWFpbiBzY3JlZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhl
eSBtYXkgaGF2ZSBjaGFuZ2VkCisgICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBv
ciB0aGV5IG1heSBoYXZlIGNoYW5nZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9u
cy4gIAorICAgIC8vIFVwZGF0ZSBvdXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1
cmUgdGhhdCB0aGUgZnVsbCBzY3JlZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKKyAgICAvLyBlbnRp
cmUgc2NyZWVuOgorICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOwor
ICAgIE5TV2luZG93KiB3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIFt3aW5kb3cgc2V0RnJh
bWU6W1t3aW5kb3cgc2NyZWVuXSBmcmFtZV0gZGlzcGxheTpZRVNdOworfQorCisjcHJhZ21hIG1h
cmsgLQorI3ByYWdtYSBtYXJrIEV4cG9zZWQgSW50ZXJmYWNlCisKKy0gKHZvaWQpZW50ZXJGdWxs
c2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgoreworICAgIGlmIChfaXNGdWxsc2NyZWVuKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKF9pc0FuaW1hdGluZykgeworICAgICAgICAvLyBU
aGUgQ0FBbmltYXRpb24gZGVsZWdhdGUgZnVuY3Rpb25zIHdpbGwgb25seSBiZSBjYWxsZWQgdGhl
CisgICAgICAgIC8vIG5leHQgdHJpcCB0aHJvdWdoIHRoZSBydW4tbG9vcCwgc28gbWFudWFsbHkg
Y2FsbCB0aGUgZGVsZWdhdGUKKyAgICAgICAgLy8gZnVuY3Rpb24gaGVyZSwgbGV0dGluZyBpdCBr
bm93IHRoZSBhbmltYXRpb24gZGlkIG5vdCBjb21wbGV0ZToKKyAgICAgICAgW3NlbGYgd2luZG93
RGlkRXhpdEZ1bGxzY3JlZW46Tk9dOworICAgICAgICBBU1NFUlQoIV9pc0FuaW1hdGluZyk7Cisg
ICAgfQorICAgIF9pc0Z1bGxzY3JlZW4gPSBZRVM7CisgICAgX2lzQW5pbWF0aW5nID0gWUVTOwor
ICAgIAorICAgIC8vIHNldEVsZW1lbnQ6IG11c3QgYmUgY2FsbGVkIHdpdGggYSBub24tbmlsIHZh
bHVlIGJlZm9yZSBjYWxsaW5nIGVudGVyRnVsbHNjcmVlbjouCisgICAgQVNTRVJUKF9lbGVtZW50
KTsKKyAgICAKKyAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgCisgICAgaWYgKCFz
Y3JlZW4pCisgICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsKKyAgICBOU1Jl
Y3Qgc2NyZWVuRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKKyAgICAKKyAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gW3NlbGYgd2ViVmlld107CisgICAgTlNSZWN0IHdlYlZpZXdGcmFtZSA9IFt3ZWJWaWV3
IGNvbnZlcnRSZWN0VG9CYXNlOlt3ZWJWaWV3IGZyYW1lXV07CisgICAgd2ViVmlld0ZyYW1lLm9y
aWdpbiA9IFtbd2ViVmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2ViVmlld0ZyYW1l
Lm9yaWdpbl07CisgICAgCisgICAgTlNSZWN0IGVsZW1lbnRGcmFtZSA9IF9lbGVtZW50LT5zY3Jl
ZW5SZWN0KCk7CisgICAgCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBtdWx0aS1tb25pdG9yIHNl
dHVwIHdoZXJlIHRoZSB3ZWJWaWV3IHN0cmFkZGxlcyB0d28KKyAgICAvLyBtb25pdG9ycywgd2Ug
bXVzdCBjcmVhdGUgYSB3aW5kb3cgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGRlc3RpbmF0
aW9uCisgICAgLy8gZnJhbWUgYW5kIHRoZSBpbml0aWFsIGZyYW1lLgorICAgIE5TUmVjdCB3aW5k
b3dGcmFtZSA9IE5TVW5pb25SZWN0KHNjcmVlbkZyYW1lLCBlbGVtZW50RnJhbWUpOworICAgIFtb
c2VsZiB3aW5kb3ddIHNldEZyYW1lOndpbmRvd0ZyYW1lIGRpc3BsYXk6WUVTXTsKKyAgICAKKyAg
ICAvLyBJbiBhIHByZXZpb3VzIGluY2FybmF0aW9uLCB0aGUgTlNXaW5kb3cgYXR0YWNoZWQgdG8g
dGhpcyBjb250cm9sbGVyIG1heSBoYXZlCisgICAgLy8gYmVlbiBvbiBhIGRpZmZlcmVudCBzY3Jl
ZW4uICBUZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGNvbGxlY3Rpb25CZWhhdmlvciBvZiB0aGUgd2lu
ZG93OgorICAgIE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yIGJlaGF2aW9yID0gW1tzZWxmIHdp
bmRvd10gY29sbGVjdGlvbkJlaGF2aW9yXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRDb2xsZWN0
aW9uQmVoYXZpb3I6TlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JDYW5Kb2luQWxsU3BhY2VzXTsK
KyAgICBbW3NlbGYgd2luZG93XSBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKKyAgICBbW3Nl
bGYgd2luZG93XSBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6YmVoYXZpb3JdOworICAgIAorICAgIE5T
VmlldyogYW5pbWF0aW9uVmlldyA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0aW9u
Vmlld107CisgICAgTlNSZWN0IHZpZXdCb3VuZHMgPSBbYW5pbWF0aW9uVmlldyBib3VuZHNdOwor
ICAgIAorICAgIE5TUmVjdCBiYWNrZ3JvdW5kQm91bmRzID0ge1tbc2VsZiB3aW5kb3ddIGNvbnZl
cnRTY3JlZW5Ub0Jhc2U6c2NyZWVuRnJhbWUub3JpZ2luXSwgc2NyZWVuRnJhbWUuc2l6ZX07Cisg
ICAgYmFja2dyb3VuZEJvdW5kcyA9IFthbmltYXRpb25WaWV3IGNvbnZlcnRSZWN0RnJvbUJhc2U6
YmFja2dyb3VuZEJvdW5kc107CisgICAgLy8gRmxpcCB0aGUgYmFja2dyb3VuZCBsYXllcidzIGNv
b3JkaW5hdGUgc3lzdGVtLgorICAgIGJhY2tncm91bmRCb3VuZHMub3JpZ2luLnkgPSB3aW5kb3dG
cmFtZS5zaXplLmhlaWdodCAtIE5TTWF4WShiYWNrZ3JvdW5kQm91bmRzKTsKKyAgICAKKyAgICAv
LyBTZXQgb3VyIGZ1bGxzY3JlZW4gZWxlbWVudCdzIGluaXRpYWwgZnJhbWUsIGFuZCBmbGlwIHRo
ZSBjb29yZGluYXRlIHN5c3RlbXMgZnJvbQorICAgIC8vIHNjcmVlbiBjb29yZGluYXRlcyAoYm90
dG9tL2xlZnQpIHRvIGxheWVyIGNvb3JkaW5hdGVzICh0b3AvbGVmdCk6CisgICAgX2luaXRpYWxG
cmFtZSA9IE5TUmVjdFRvQ0dSZWN0KE5TSW50ZXJzZWN0aW9uUmVjdChlbGVtZW50RnJhbWUsIHdl
YlZpZXdGcmFtZSkpOworICAgIF9pbml0aWFsRnJhbWUub3JpZ2luLnkgPSBzY3JlZW5GcmFtZS5z
aXplLmhlaWdodCAtIENHUmVjdEdldE1heFkoX2luaXRpYWxGcmFtZSk7CisgICAgCisgICAgLy8g
SW5mb3JtIHRoZSBkb2N1bWVudCB0aGF0IHdlIHdpbGwgYmVnaW4gZW50ZXJpbmcgZnVsbCBzY3Jl
ZW4uICBUaGlzIHdpbGwgY2hhbmdlCisgICAgLy8gcHNldWRvLWNsYXNzZXMgb24gdGhlIGZ1bGxz
Y3JlZW4gZWxlbWVudCBhbmQgdGhlIGRvY3VtZW50IGVsZW1lbnQuCisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gW3NlbGYgX2RvY3VtZW50XTsKKyAgICBkb2N1bWVudC0+d2Via2l0V2lsbEVudGVy
RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIAorICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB0aGUgZnVsbHNjcmVlbiByZW5kZXJlciBpcyBjb21wb3NpdGVkLiBJZiBub3Qs
IGFjY2VsZXJhdGVkIGdyYXBoaWNzIAorICAgIC8vIG1heSBiZSBkaXNhYmxlZC4gIEluIHRoaXMg
Y2FzZSwgZG8gbm90IGF0dGVtcHQgdG8gYW5pbWF0ZSB0aGUgY29udGVudHMgaW50byBwbGFjZTsg
CisgICAgLy8gbWVyZWx5IHNuYXAgdG8gdGhlIGZpbmFsIHBvc2l0aW9uOgorICAgIGlmICghX3Jl
bmRlcmVyIHx8ICFfcmVuZGVyZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAg
IFtzZWxmIHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbjpZRVNdOworICAgICAgICBOU0VuYWJsZVNj
cmVlblVwZGF0ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gICAgCisgICAgCisgICAgLy8g
U2V0IHVwIHRoZSBmaW5hbCBzdHlsZSBvZiB0aGUgRnVsbFNjcmVlbiByZW5kZXIgYmxvY2suICBT
ZXQgYW4gYWJzb2x1dGUKKyAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGVxdWFsIHRvIHRoZSBzaXpl
IG9mIHRoZSBzY3JlZW4sIGFuZCBhbmNob3IgdGhlIGxheWVyCisgICAgLy8gYXQgdGhlIHRvcCwg
bGVmdCBhdCAoMCwwKS4gIFRoZSBSZW5kZXJGdWxsU2NyZWVuIHN0eWxlIGlzIGFscmVhZHkgc2V0
IAorICAgIC8vIHRvIHBvc2l0aW9uOmZpeGVkLgorICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEZ1
bGxTY3JlZW5SZW5kZXJlclNpemUoc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCwgc2NyZWVuRnJhbWUu
c2l6ZS5oZWlnaHQpOworICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEZ1bGxTY3JlZW5SZW5kZXJl
ckJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIAorICAgIC8vIENhdXNl
IHRoZSBkb2N1bWVudCB0byBsYXlvdXQsIHRodXMgY2FsY3VsYXRpbmcgYSBuZXcgZnVsbHNjcmVl
biBlbGVtZW50IHNpemU6CisgICAgW3NlbGYgX2RvY3VtZW50XS0+dXBkYXRlTGF5b3V0KCk7Cisg
ICAgCisgICAgLy8gRklYTUU6IHRyeSB0byB1c2UgdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCdzIGNh
bGN1bGF0ZWQgeCwgeSwgd2lkdGgsIGFuZCBoZWlnaHQgaW5zdGVhZCBvZiB0aGUKKyAgICAvLyBy
ZW5kZXJCb3ggZnVuY3Rpb25zOgorICAgIFJlbmRlckJveCogY2hpbGRSZW5kZXJlciA9IF9yZW5k
ZXJlci0+Zmlyc3RDaGlsZEJveCgpOworICAgIENHUmVjdCBkZXN0aW5hdGlvbkZyYW1lID0gQ0dS
ZWN0TWFrZShjaGlsZFJlbmRlcmVyLT54KCksIGNoaWxkUmVuZGVyZXItPnkoKSwgY2hpbGRSZW5k
ZXJlci0+d2lkdGgoKSwgY2hpbGRSZW5kZXJlci0+aGVpZ2h0KCkpOyAgICAKKyAgICAKKyAgICAv
LyBTb21lIHByb3BlcnRpZXMgaGF2ZW4ndCBwcm9wb2dhdGVkIGZyb20gdGhlIEdyYXBoaWNzTGF5
ZXIgdG8gdGhlIENBTGF5ZXIgeWV0LiAgU28KKyAgICAvLyB0ZWxsIHRoZSByZW5kZXJlcidzIGxh
eWVyIHRvIHN5bmMgaXQncyBjb21wb3NpdGluZyBzdGF0ZToKKyAgICBHcmFwaGljc0xheWVyKiBy
ZW5kZXJlckdyYXBoaWNzID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5nKCktPmdyYXBoaWNz
TGF5ZXIoKTsKKyAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOyAg
ICAKKworICAgIENBTGF5ZXIqIHJlbmRlcmVyTGF5ZXIgPSByZW5kZXJlckdyYXBoaWNzLT5wbGF0
Zm9ybUxheWVyKCk7CisgICAgW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBzZXRSZW5kZXJlckxh
eWVyOnJlbmRlcmVyTGF5ZXJdOyAgICAKKyAgICAKKyAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlv
biA9IFtzZWxmIF9hbmltYXRpb25EdXJhdGlvbl07CisKKyAgICAvLyBDcmVhdGUgYSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXggdGhhdCB3aWxsIHRyYW5zZm9ybSB0aGUgcmVuZGVyZXIgbGF5ZXIgc3Vj
aCB0aGF0IAorICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVsZW1lbnQgYXBwZWFycyB0byBtb3ZlIGZy
b20gaXRzIHN0YXJ0aW5nIHBvc2l0aW9uIGFuZCBzaXplIHRvIGl0cworICAgIC8vIGZpbmFsIG9u
ZS4gIFBlcmZvcm0gdGhlIHRyYW5zZm9ybWF0aW9uIGluIHR3byBzdGVwcywgdXNpbmcgdGhlIENB
TGF5ZXIncyBtYXRyaXggCisgICAgLy8gbWF0aCB0byBjYWxjdWxhdGUgdGhlIGVmZmVjdHMgb2Yg
ZWFjaCBzdGVwOgorICAgIC8vIDEuIEFwcGx5IGEgc2NhbGUgdHJhbmZvcm0gdG8gc2hyaW5rIHRo
ZSBhcHBhcmVudCBzaXplIG9mIHRoZSBsYXllciB0byB0aGUgb3JpZ2luYWwKKyAgICAvLyAgICBl
bGVtZW50IHNjcmVlbiBzaXplLgorICAgIC8vIDIuIEFwcGx5IGEgdHJhbnNsYXRpb24gdHJhbnNm
b3JtIHRvIG1vdmUgdGhlIHNocnVuayBsYXllciBpbnRvIHRoZSBzYW1lIHNjcmVlbiBwb3NpdGlv
bgorICAgIC8vICAgIGFzIHRoZSBvcmlnaW5hbCBlbGVtZW50LgorICAgIENBVHJhbnNmb3JtM0Qg
c2hyaW5rVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShfaW5pdGlhbEZyYW1lLnNp
emUud2lkdGggLyBkZXN0aW5hdGlvbkZyYW1lLnNpemUud2lkdGgsIF9pbml0aWFsRnJhbWUuc2l6
ZS5oZWlnaHQgLyBkZXN0aW5hdGlvbkZyYW1lLnNpemUuaGVpZ2h0LCAxKTsKKyAgICBbcmVuZGVy
ZXJMYXllciBzZXRUcmFuc2Zvcm06c2hyaW5rVHJhbnNmb3JtXTsKKyAgICBDR1JlY3Qgc2hydW5r
RGVzdGluYXRpb25GcmFtZSA9IFtyZW5kZXJlckxheWVyIGNvbnZlcnRSZWN0OmRlc3RpbmF0aW9u
RnJhbWUgdG9MYXllcjpbYW5pbWF0aW9uVmlldyBsYXllcl1dOworICAgIENBVHJhbnNmb3JtM0Qg
bW92ZVRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRpb24oX2luaXRpYWxGcmFt
ZS5vcmlnaW4ueCAtIHNocnVua0Rlc3RpbmF0aW9uRnJhbWUub3JpZ2luLngsIF9pbml0aWFsRnJh
bWUub3JpZ2luLnkgLSBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi55LCAwKTsKKyAgICBD
QVRyYW5zZm9ybTNEIGZpbmFsVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRENvbmNhdChzaHJpbmtU
cmFuc2Zvcm0sIG1vdmVUcmFuc2Zvcm0pOworICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9y
bTpmaW5hbFRyYW5zZm9ybV07CisgICAgQ0dSZWN0IHRyYW5zbGF0ZWREZXN0aW5hdGlvbkZyYW1l
ID0gW3JlbmRlcmVyTGF5ZXIgY29udmVydFJlY3Q6ZGVzdGluYXRpb25GcmFtZSB0b0xheWVyOlth
bmltYXRpb25WaWV3IGxheWVyXV07CisgICAgCisgICAgQ0FMYXllciogYmFja2dyb3VuZExheWVy
ID0gW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5ZXJdOworCisgICAgLy8g
U3RhcnQgdGhlIG9wYWNpdHkgYW5pbWF0aW9uLiAgV2UgY2FuIHVzZSBpbXBsaWNpdCBhbmltYXRp
b25zIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBjYXJlIHdoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9u
IGZpbmlzaGVzLgorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlv
biBzZXRBbmltYXRpb25EdXJhdGlvbjpkdXJhdGlvbl07CisgICAgW2JhY2tncm91bmRMYXllciBz
ZXRPcGFjaXR5OjFdOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgCisgICAgLy8g
VXNlIGEgQ0FCYXNpY0FuaW1hdGlvbiBoZXJlIGZvciB0aGUgem9vbSBlZmZlY3QuICBXZSB3YW50
IHRvIGJlIG5vdGlmaWVkIHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgCisgICAgLy8gY29tcGxldGVk
IGJ5IHdheSBvZiB0aGUgQ0FBbmltYXRpb24gZGVsZWdhdGUuCisgICAgQ0FCYXNpY0FuaW1hdGlv
biogem9vbUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRo
OkAidHJhbnNmb3JtIl07CisgICAgW3pvb21BbmltYXRpb24gc2V0RnJvbVZhbHVlOltOU1ZhbHVl
IHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6ZmluYWxUcmFuc2Zvcm1dXTsKKyAgICBbem9vbUFuaW1h
dGlvbiBzZXRUb1ZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zv
cm0zRElkZW50aXR5XV07CisgICAgW3pvb21BbmltYXRpb24gc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgW3pvb21BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIFt6b29tQW5pbWF0
aW9uIHNldFRpbWluZ0Z1bmN0aW9uOltDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRo
TmFtZTprQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF1dOworICAgIFt6b29tQW5p
bWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFt6b29tQW5pbWF0
aW9uIHNldFZhbHVlOihpZClrQ0ZCb29sZWFuVHJ1ZSBmb3JLZXk6aXNGdWxsc2NyZWVuS2V5XTsK
KyAgICAKKyAgICAvLyBEaXNhYmxlIGltcGxpY2l0IGFuaW1hdGlvbnMgYW5kIHNldCB0aGUgbGF5
ZXIncyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gaXRzIGZpbmFsIHN0YXRlLgorICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOworICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNESWRlbnRp
dHldOworICAgIFtyZW5kZXJlckxheWVyIGFkZEFuaW1hdGlvbjp6b29tQW5pbWF0aW9uIGZvcktl
eTpAInpvb20iXTsKKyAgICBbYmFja2dyb3VuZExheWVyIHNldEZyYW1lOk5TUmVjdFRvQ0dSZWN0
KGJhY2tncm91bmRCb3VuZHMpXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIAor
ICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygpOworfQorCistICh2b2lkKWV4aXRGdWxsc2NyZWVu
Cit7CisgICAgaWYgKCFfaXNGdWxsc2NyZWVuKQorICAgICAgICByZXR1cm47ICAgIAorICAgICAg
CisgICAgQ0FUcmFuc2Zvcm0zRCBzdGFydFRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RJZGVudGl0
eTsKKyAgICBpZiAoX2lzQW5pbWF0aW5nKSB7CisgICAgICAgIGlmIChfcmVuZGVyZXIgJiYgX3Jl
bmRlcmVyLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAgICAgQ0FMYXllciog
cmVuZGVyZXJMYXllciA9IF9yZW5kZXJlci0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xh
eWVyKCktPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgICAgIHN0YXJ0VHJhbnNmb3JtID0gW1ty
ZW5kZXJlckxheWVyIHByZXNlbnRhdGlvbkxheWVyXSB0cmFuc2Zvcm1dOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgQ0FBbmltYXRpb24gZGVsZWdhdGUgZnVuY3Rpb25zIHdp
bGwgb25seSBiZSBjYWxsZWQgdGhlCisgICAgICAgIC8vIG5leHQgdHJpcCB0aHJvdWdoIHRoZSBy
dW4tbG9vcCwgc28gbWFudWFsbHkgY2FsbCB0aGUgZGVsZWdhdGUKKyAgICAgICAgLy8gZnVuY3Rp
b24gaGVyZSwgbGV0dGluZyBpdCBrbm93IHRoZSBhbmltYXRpb24gZGlkIG5vdCBjb21wbGV0ZToK
KyAgICAgICAgW3NlbGYgd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOk5PXTsKKyAgICAgICAgQVNT
RVJUKCFfaXNBbmltYXRpbmcpOworICAgIH0KKyAgICBfaXNGdWxsc2NyZWVuID0gTk87CisgICAg
X2lzQW5pbWF0aW5nID0gWUVTOworICAgIAorICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsK
KyAgICAKKyAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBtb3ZlZCB0aGUgZnVsbHNjcmVlbiB3aW5k
b3cgaW4gU3BhY2VzLCBzbyB0ZW1wb3JhcmlseSBjaGFuZ2UgCisgICAgLy8gdGhlIGNvbGxlY3Rp
b25CZWhhdmlvciBvZiB0aGUgd2ViVmlldydzIHdpbmRvdzoKKyAgICBOU1dpbmRvdyogd2ViV2lu
ZG93ID0gW1tzZWxmIHdlYlZpZXddIHdpbmRvd107CisgICAgTlNXaW5kb3dDb2xsZWN0aW9uQmVo
YXZpb3IgYmVoYXZpb3IgPSBbd2ViV2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl07CisgICAgW3dl
YldpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6TlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JD
YW5Kb2luQWxsU3BhY2VzXTsKKyAgICBbd2ViV2luZG93IG9yZGVyV2luZG93Ok5TV2luZG93QmVs
b3cgcmVsYXRpdmVUbzpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdXTsKKyAgICBbd2ViV2lu
ZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjpiZWhhdmlvcl07CisgICAgCisgICAgLy8gVGhlIGZ1
bGxzY3JlZW4gYW5pbWF0aW9uIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkIGJlZm9yZSB0aGUgCisg
ICAgLy8gd2ViVmlldyB3YXMgbW92ZWQgdG8gdGhlIGZ1bGxzY3JlZW4gd2luZG93LiAgQ2hlY2sg
dG9vIHNlZQorICAgIC8vIGlmIHRoZSBfcGxhY2Vob2xkZXJWaWV3IGV4aXN0cyBhbmQgaXMgaW4g
YSB3aW5kb3cgYmVmb3JlCisgICAgLy8gYXR0ZW1wdGluZyB0byBzd2FwIHRoZSB3ZWJWaWV3IGJh
Y2sgdG8gaXQncyBvcmlnaW5hbCB0cmVlOgorICAgIGlmIChfcGxhY2Vob2xkZXJWaWV3ICYmIFtf
cGxhY2Vob2xkZXJWaWV3IHdpbmRvd10pCisgICAgeworICAgICAgICAvLyBNb3ZlIHRoZSB3ZWJW
aWV3IGJhY2sgdG8gaXRzIG93biBuYXRpdmUgd2luZG93OgorICAgICAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gW3NlbGYgd2ViVmlld107CisgICAgICAgIFt3ZWJWaWV3IHNldEZyYW1lOltfcGxhY2Vo
b2xkZXJWaWV3IGZyYW1lXV07CisgICAgICAgIFt3ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6
W19wbGFjZWhvbGRlclZpZXcgYXV0b3Jlc2l6aW5nTWFza11dOworICAgICAgICBbd2ViVmlldyBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgW1tfcGxhY2Vob2xkZXJWaWV3IHN1cGVydmll
d10gcmVwbGFjZVN1YnZpZXc6X3BsYWNlaG9sZGVyVmlldyB3aXRoOndlYlZpZXddOworICAgICAg
ICAKKyAgICAgICAgLy8gQmVjYXVzZSB0aGUgYW5pbWF0aW9uIHZpZXcgaXMgbGF5ZXItaG9zdGVk
LCBtYWtlIHN1cmUgdG8gCisgICAgICAgIC8vIGRpc2FibGUgYW5pbWF0aW9ucyB3aGVuIGNoYW5n
aW5nIHRoZSBsYXllcidzIG9wYWNpdHkuICBPdGhlci0KKyAgICAgICAgLy8gd2lzZSwgdGhlIGNv
bnRlbnQgd2lsbCBhcHBlYXIgdG8gZmFkZSBpbnRvIHZpZXcuCisgICAgICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKKyAgICAgICAgV2ViRnVsbHNjcmVlbldpbmRvdyogd2luZG93ID0gW3NlbGYgX2Z1bGxzY3Jl
ZW5XaW5kb3ddOworICAgICAgICBbW1t3aW5kb3cgYW5pbWF0aW9uVmlld10gbGF5ZXJdIHNldE9w
YWNpdHk6MV07CisgICAgICAgIFt3aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNs
ZWFyQ29sb3JdXTsKKyAgICAgICAgW3dpbmRvdyBzZXRPcGFxdWU6Tk9dOworICAgICAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworICAgIH0KKworICAgIE5TVmlldyogYW5pbWF0aW9uVmlldyA9
IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0aW9uVmlld107CisgICAgQ0dSZWN0IGxh
eWVyRW5kRnJhbWUgPSBOU1JlY3RUb0NHUmVjdChbYW5pbWF0aW9uVmlldyBjb252ZXJ0UmVjdDpf
aW5pdGlhbEZyYW1lIGZyb21WaWV3Om5pbF0pOworCisgICAgLy8gVGhlIF9yZW5kZXJlciBtaWdo
dCBiZSBOVUxMIGR1ZSB0byBpdHMgYW5jZXN0b3IgYmVpbmcgcmVtb3ZlZDoKKyAgICBDR1JlY3Qg
bGF5ZXJTdGFydEZyYW1lID0gQ0dSZWN0WmVybzsKKyAgICBpZiAoX3JlbmRlcmVyKSB7CisgICAg
ICAgIFJlbmRlckJveCogY2hpbGRSZW5kZXJlciA9IF9yZW5kZXJlci0+Zmlyc3RDaGlsZEJveCgp
OworICAgICAgICBsYXllclN0YXJ0RnJhbWUgPSBDR1JlY3RNYWtlKGNoaWxkUmVuZGVyZXItPngo
KSwgY2hpbGRSZW5kZXJlci0+eSgpLCBjaGlsZFJlbmRlcmVyLT53aWR0aCgpLCBjaGlsZFJlbmRl
cmVyLT5oZWlnaHQoKSk7CisgICAgfQorICAgIAorICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtp
dFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxm
IF9kb2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOworICAgIAorICAgIC8vIFdlIGhhdmUgdG8gcmV0
YWluIG91cnNlbHZlcyBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWxpdmUgZm9yIHRoZSBlbmQgb2Yg
dGhlIGFuaW1hdGlvbi4KKyAgICAvLyBJZiBvdXIgb3duZXIgcmVsZWFzZXMgdXMgd2UgY291bGQg
Y3Jhc2ggaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCisgICAgLy8gQmFsYW5jZWQgaW4gd2luZG93
RGlkRXhpdEZ1bGxzY3JlZW4KKyAgICBbc2VsZiByZXRhaW5dOworICAgIAorICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB0aGUgZnVsbHNjcmVlbiByZW5kZXJlciBpcyBjb21wb3NpdGVkLiBJZiBub3Qs
IGFjY2VsZXJhdGVkIGdyYXBoaWNzIAorICAgIC8vIG1heSBiZSBkaXNhYmxlZC4gIEluIHRoaXMg
Y2FzZSwgZG8gbm90IGF0dGVtcHQgdG8gYW5pbWF0ZSB0aGUgY29udGVudHMgaW50byBwbGFjZTsg
CisgICAgLy8gbWVyZWx5IHNuYXAgdG8gdGhlIGZpbmFsIHBvc2l0aW9uOgorICAgIGlmICghX3Jl
bmRlcmVyIHx8ICFfcmVuZGVyZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAg
IFtzZWxmIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuOllFU107CisgICAgICAgIE5TRW5hYmxlU2Ny
ZWVuVXBkYXRlcygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBHcmFw
aGljc0xheWVyKiByZW5kZXJlckdyYXBoaWNzID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5n
KCktPmdyYXBoaWNzTGF5ZXIoKTsKKyAgICAKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxs
U2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKworICAg
IHJlbmRlcmVyR3JhcGhpY3MtPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7ICAgIAorCisgICAgQ0FM
YXllciogcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyR3JhcGhpY3MtPnBsYXRmb3JtTGF5ZXIoKTsK
KyAgICBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIHNldFJlbmRlcmVyTGF5ZXI6cmVuZGVyZXJM
YXllcl07ICAgIAorICAgIAorICAgIC8vIENyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0
aGF0IHdpbGwgdHJhbnNmb3JtIHRoZSByZW5kZXJlciBsYXllciBzdWNoIHRoYXQgCisgICAgLy8g
dGhlIGZ1bGxzY3JlZW4gZWxlbWVudCBhcHBlYXJzIHRvIG1vdmUgZnJvbSB0aGUgZnVsbCBzY3Jl
ZW4gdG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uIAorICAgIC8vIGFuZCBzaXplLiAgUGVyZm9ybSB0
aGUgdHJhbnNmb3JtYXRpb24gaW4gdHdvIHN0ZXBzLCB1c2luZyB0aGUgQ0FMYXllcidzIG1hdHJp
eCAKKyAgICAvLyBtYXRoIHRvIGNhbGN1bGF0ZSB0aGUgZWZmZWN0cyBvZiBlYWNoIHN0ZXA6Cisg
ICAgLy8gMS4gQXBwbHkgYSBzY2FsZSB0cmFuZm9ybSB0byBzaHJpbmsgdGhlIGFwcGFyZW50IHNp
emUgb2YgdGhlIGxheWVyIHRvIHRoZSBvcmlnaW5hbAorICAgIC8vICAgIGVsZW1lbnQgc2NyZWVu
IHNpemUuCisgICAgLy8gMi4gQXBwbHkgYSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0gdG8gbW92ZSB0
aGUgc2hydW5rIGxheWVyIGludG8gdGhlIHNhbWUgc2NyZWVuIHBvc2l0aW9uCisgICAgLy8gICAg
YXMgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCisgICAgQ0FUcmFuc2Zvcm0zRCBzaHJpbmtUcmFuc2Zv
cm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGxheWVyRW5kRnJhbWUuc2l6ZS53aWR0aCAvIGxh
eWVyU3RhcnRGcmFtZS5zaXplLndpZHRoLCBsYXllckVuZEZyYW1lLnNpemUuaGVpZ2h0IC8gbGF5
ZXJTdGFydEZyYW1lLnNpemUuaGVpZ2h0LCAxKTsKKyAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFu
c2Zvcm06c2hyaW5rVHJhbnNmb3JtXTsKKyAgICBDR1JlY3Qgc2hydW5rRGVzdGluYXRpb25GcmFt
ZSA9IFtyZW5kZXJlckxheWVyIGNvbnZlcnRSZWN0OmxheWVyU3RhcnRGcmFtZSB0b0xheWVyOlth
bmltYXRpb25WaWV3IGxheWVyXV07CisgICAgQ0FUcmFuc2Zvcm0zRCBtb3ZlVHJhbnNmb3JtID0g
Q0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbihsYXllckVuZEZyYW1lLm9yaWdpbi54IC0gc2hy
dW5rRGVzdGluYXRpb25GcmFtZS5vcmlnaW4ueCwgbGF5ZXJFbmRGcmFtZS5vcmlnaW4ueSAtIHNo
cnVua0Rlc3RpbmF0aW9uRnJhbWUub3JpZ2luLnksIDApOworICAgIENBVHJhbnNmb3JtM0QgZmlu
YWxUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNEQ29uY2F0KHNocmlua1RyYW5zZm9ybSwgbW92ZVRy
YW5zZm9ybSk7CisgICAgW3JlbmRlcmVyTGF5ZXIgc2V0VHJhbnNmb3JtOmZpbmFsVHJhbnNmb3Jt
XTsKKyAgICBDR1JlY3QgdHJhbnNsYXRlZERlc3RpbmF0aW9uRnJhbWUgPSBbcmVuZGVyZXJMYXll
ciBjb252ZXJ0UmVjdDpsYXllclN0YXJ0RnJhbWUgdG9MYXllcjpbYW5pbWF0aW9uVmlldyBsYXll
cl1dOworICAgIAorICAgIENGVGltZUludGVydmFsIGR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlv
bkR1cmF0aW9uXTsKKyAgICAgICAgCisgICAgQ0FMYXllciogYmFja2dyb3VuZExheWVyID0gW1tz
ZWxmIF9mdWxsc2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5ZXJdOworICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjpkdXJh
dGlvbl07CisgICAgW2JhY2tncm91bmRMYXllciBzZXRPcGFjaXR5OjBdOworICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07CisgICAgCisgICAgQ0FCYXNpY0FuaW1hdGlvbiogem9vbUFuaW1hdGlv
biA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAidHJhbnNmb3JtIl07
CisgICAgW3pvb21BbmltYXRpb24gc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJh
bnNmb3JtM0Q6c3RhcnRUcmFuc2Zvcm1dXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRUb1ZhbHVl
OltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6ZmluYWxUcmFuc2Zvcm1dXTsKKyAgICBb
em9vbUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRE
dXJhdGlvbjpkdXJhdGlvbl07CisgICAgW3pvb21BbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb246
W0NBTWVkaWFUaW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOmtDQU1lZGlhVGltaW5nRnVu
Y3Rpb25FYXNlSW5FYXNlT3V0XV07CisgICAgW3pvb21BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NB
RmlsbE1vZGVCb3RoXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9u
Ok5PXTsKKyAgICBbem9vbUFuaW1hdGlvbiBzZXRWYWx1ZTooaWQpa0NGQm9vbGVhbkZhbHNlIGZv
cktleTppc0Z1bGxzY3JlZW5LZXldOworICAgIAorICAgIFtyZW5kZXJlckxheWVyIGFkZEFuaW1h
dGlvbjp6b29tQW5pbWF0aW9uIGZvcktleTpAInpvb20iXTsKKyAgICAKKyAgICBOU0VuYWJsZVNj
cmVlblVwZGF0ZXMoKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJbnRlcm5h
bCBJbnRlcmZhY2UKKworLSAodm9pZClfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuCit7
CisgICAgLy8gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgaXMgYXZhaWxhYmxlIG9u
ID4gMTAuNiBvbmx5OgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25PcHRp
b25zIG9wdGlvbnMgPSBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uRGVmYXVsdDsKKyAgICBOU1Nj
cmVlbiogZnVsbHNjcmVlblNjcmVlbiA9IFtbc2VsZiB3aW5kb3ddIHNjcmVlbl07CisgICAgCisg
ICAgaWYgKF9pc0Z1bGxzY3JlZW4pIHsKKyAgICAgICAgLy8gQXV0by1oaWRlIHRoZSBtZW51IGJh
ciBpZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVudSBiYXI6CisgICAgICAg
IC8vIE5PVEU6IGlmIHRoZSBmdWxsc2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhciBi
dXQgbm90IHRoZSBkb2NrLCB3ZSBtdXN0IHN0aWxsIAorICAgICAgICAvLyBhdXRvLWhpZGUgdGhl
IGRvY2ssIG9yIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKyAgICAgICAgaWYgKFtbTlNT
Y3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSA9PSBmdWxsc2NyZWVuU2NyZWVuKQorICAg
ICAgICAgICAgb3B0aW9ucyB8PSAoTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlTWVu
dUJhciB8IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZURvY2spOworICAgICAgICAv
LyBDaGVjayBpZiB0aGUgY3VycmVudCBzY3JlZW4gY29udGFpbnMgdGhlIGRvY2sgYnkgY29tcGFy
aW5nIHRoZSBzY3JlZW4ncyBmcmFtZSB0byBpdHMKKyAgICAgICAgLy8gdmlzaWJsZUZyYW1lOyBp
ZiBhIGRvY2sgaXMgcHJlc2VudCwgdGhlIHZpc2libGVGcmFtZSB3aWxsIGRpZmZlci4gIElmIHRo
ZSBjdXJyZW50IHNjcmVlbgorICAgICAgICAvLyBjb250YWlucyB0aGUgZG9jaywgaGlkZSBpdC4K
KyAgICAgICAgZWxzZSBpZiAoIU5TRXF1YWxSZWN0cyhbZnVsbHNjcmVlblNjcmVlbiBmcmFtZV0s
IFtmdWxsc2NyZWVuU2NyZWVuIHZpc2libGVGcmFtZV0pKQorICAgICAgICAgICAgb3B0aW9ucyB8
PSBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVEb2NrOworICAgIH0KKyAgICAKKyAg
ICBpZiAoW05TQXBwIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0UHJlc2VudGF0aW9u
T3B0aW9uczopXSkKKyAgICAgICAgW05TQXBwIHNldFByZXNlbnRhdGlvbk9wdGlvbnM6b3B0aW9u
c107CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIFNldFN5c3RlbVVJTW9kZShfaXNGdWxsc2Ny
ZWVuID8ga1VJTW9kZU5vcm1hbCA6IGtVSU1vZGVBbGxIaWRkZW4sIDApOworfQorCisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpIC8vIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZSBu
b3QgZGVmaW5lZCBvbiA8IDEwLjUKKy0gKHZvaWQpX2Rpc2FibGVJZGxlRGlzcGxheVNsZWVwCit7
CisgICAgaWYgKF9pZGxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uID09IGtJT1BNTnVsbEFzc2VydGlv
bklEKSAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIC8vIElPUE1Bc3NlcnRpb25D
cmVhdGVXaXRoTmFtZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgMTAuNSBTREsKKyAgICAgICAgSU9Q
TUFzc2VydGlvbkNyZWF0ZShrSU9QTUFzc2VydGlvblR5cGVOb0Rpc3BsYXlTbGVlcCwga0lPUE1B
c3NlcnRpb25MZXZlbE9uLCAmX2lkbGVEaXNwbGF5U2xlZXBBc3NlcnRpb24pOworI2Vsc2UgLy8g
SU9QTUFzc2VydGlvbkNyZWF0ZSBpcyBkZXByZWNpYXRlZCBpbiA+IDEwLjUKKyAgICAgICAgSU9Q
TUFzc2VydGlvbkNyZWF0ZVdpdGhOYW1lKGtJT1BNQXNzZXJ0aW9uVHlwZU5vRGlzcGxheVNsZWVw
LCBrSU9QTUFzc2VydGlvbkxldmVsT24sIENGU1RSKCJXZWJLaXQgcGxheWluZyBhIHZpZGVvIGZ1
bGxzY3JlZW4uIiksICZfaWRsZURpc3BsYXlTbGVlcEFzc2VydGlvbik7CisjZW5kaWYKK30KKwor
LSAodm9pZClfZW5hYmxlSWRsZURpc3BsYXlTbGVlcAoreworICAgIGlmIChfaWRsZURpc3BsYXlT
bGVlcEFzc2VydGlvbiAhPSBrSU9QTU51bGxBc3NlcnRpb25JRCkgeworICAgICAgICBJT1BNQXNz
ZXJ0aW9uUmVsZWFzZShfaWRsZURpc3BsYXlTbGVlcEFzc2VydGlvbik7CisgICAgICAgIF9pZGxl
RGlzcGxheVNsZWVwQXNzZXJ0aW9uID0ga0lPUE1OdWxsQXNzZXJ0aW9uSUQ7CisgICAgfQorfQor
CistICh2b2lkKV9kaXNhYmxlSWRsZVN5c3RlbVNsZWVwCit7CisgICAgaWYgKF9pZGxlU3lzdGVt
U2xlZXBBc3NlcnRpb24gPT0ga0lPUE1OdWxsQXNzZXJ0aW9uSUQpIAorI2lmIGRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgLy8gSU9QTUFzc2VydGlvbkNyZWF0ZVdpdGhOYW1lIGlzIG5vdCBk
ZWZpbmVkIGluIHRoZSAxMC41IFNESworICAgICAgICBJT1BNQXNzZXJ0aW9uQ3JlYXRlKGtJT1BN
QXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBrSU9QTUFzc2VydGlvbkxldmVsT24sICZfaWRsZVN5
c3RlbVNsZWVwQXNzZXJ0aW9uKTsKKyNlbHNlIC8vIElPUE1Bc3NlcnRpb25DcmVhdGUgaXMgZGVw
cmVjaWF0ZWQgaW4gPiAxMC41CisgICAgSU9QTUFzc2VydGlvbkNyZWF0ZVdpdGhOYW1lKGtJT1BN
QXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBrSU9QTUFzc2VydGlvbkxldmVsT24sIENGU1RSKCJX
ZWJLaXQgcGxheWluZyBhIHZpZGVvIGZ1bGxzY3JlZW4uIiksICZfaWRsZVN5c3RlbVNsZWVwQXNz
ZXJ0aW9uKTsKKyNlbmRpZgorfQorCistICh2b2lkKV9lbmFibGVJZGxlU3lzdGVtU2xlZXAKK3sK
KyAgICBpZiAoX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlvbiAhPSBrSU9QTU51bGxBc3NlcnRpb25J
RCkgeworICAgICAgICBJT1BNQXNzZXJ0aW9uUmVsZWFzZShfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0
aW9uKTsKKyAgICAgICAgX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlvbiA9IGtJT1BNTnVsbEFzc2Vy
dGlvbklEOworICAgIH0KK30KKworLSAodm9pZClfZW5hYmxlVGlja2xlVGltZXIKK3sKKyAgICBb
X3RpY2tsZVRpbWVyIGludmFsaWRhdGVdOworICAgIFtfdGlja2xlVGltZXIgcmVsZWFzZV07Cisg
ICAgX3RpY2tsZVRpbWVyID0gW1tOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZh
bDp0aWNrbGVUaW1lckludGVydmFsIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfdGlj
a2xlVGltZXJGaXJlZCkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOworfQorCist
ICh2b2lkKV9kaXNhYmxlVGlja2xlVGltZXIKK3sKKyAgICBbX3RpY2tsZVRpbWVyIGludmFsaWRh
dGVdOworICAgIFtfdGlja2xlVGltZXIgcmVsZWFzZV07CisgICAgX3RpY2tsZVRpbWVyID0gbmls
OworfQorCistICh2b2lkKV90aWNrbGVUaW1lckZpcmVkCit7CisgICAgVXBkYXRlU3lzdGVtQWN0
aXZpdHkoT3ZlcmFsbEFjdCk7Cit9CisjZW5kaWYKKworLSAodm9pZClfdXBkYXRlUG93ZXJBc3Nl
cnRpb25zCit7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIAorICAgIEJPT0wgaXNQ
bGF5aW5nID0gW3NlbGYgX2lzQW55TW92aWVQbGF5aW5nXTsKKyAgICAKKyAgICBpZiAoaXNQbGF5
aW5nICYmIF9pc0Z1bGxzY3JlZW4pIHsKKyAgICAgICAgW3NlbGYgX2Rpc2FibGVJZGxlU3lzdGVt
U2xlZXBdOworICAgICAgICBbc2VsZiBfZGlzYWJsZUlkbGVEaXNwbGF5U2xlZXBdOworICAgICAg
ICBbc2VsZiBfZW5hYmxlVGlja2xlVGltZXJdOworICAgIH0gZWxzZSB7CisgICAgICAgIFtzZWxm
IF9lbmFibGVJZGxlU3lzdGVtU2xlZXBdOworICAgICAgICBbc2VsZiBfZW5hYmxlSWRsZURpc3Bs
YXlTbGVlcF07CisgICAgICAgIFtzZWxmIF9kaXNhYmxlVGlja2xlVGltZXJdOworICAgIH0KKyNl
bmRpZgorfQorCistICh2b2lkKV9yZXF1ZXN0RXhpdAoreworICAgIFtzZWxmIGV4aXRGdWxsc2Ny
ZWVuXTsKKyAgICBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uID0gTk87Cit9CisKKy0gKHZvaWQpX3Jl
cXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uCit7CisgICAg
X2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmltYXRpb247CisgICAgW3NlbGYgcGVyZm9ybVNl
bGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6
MF07CisKK30KKworLSAoQk9PTClfaXNBbnlNb3ZpZVBsYXlpbmcKK3sKKyAgICBpZiAoIV9lbGVt
ZW50KQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgTm9kZSogbmV4dE5vZGUgPSBfZWxl
bWVudC5nZXQoKTsKKyAgICB3aGlsZSAobmV4dE5vZGUpCisgICAgeworICAgICAgICBpZiAobmV4
dE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpIHsKKyAgICAgICAgICAgIEhU
TUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4o
bmV4dE5vZGUpOworICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5wYXVzZWQoKSAmJiAhZWxlbWVu
dC0+ZW5kZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLT50cmF2ZXJzZU5leHROb2RlKF9lbGVt
ZW50LmdldCgpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE5POworfQorCisjcHJhZ21hIG1h
cmsgLQorI3ByYWdtYSBtYXJrIFV0aWxpdHkgRnVuY3Rpb25zCisKKy0gKFdlYkZ1bGxzY3JlZW5X
aW5kb3cgKilfZnVsbHNjcmVlbldpbmRvdworeworICAgIHJldHVybiAoV2ViRnVsbHNjcmVlbldp
bmRvdyAqKVtzdXBlciB3aW5kb3ddOworfQorCistIChEb2N1bWVudCopX2RvY3VtZW50IAorewor
ICAgIHJldHVybiBjb3JlKFtbW3NlbGYgd2ViVmlld10gbWFpbkZyYW1lXSBET01Eb2N1bWVudF0p
OworfQorCistIChDRlRpbWVJbnRlcnZhbClfYW5pbWF0aW9uRHVyYXRpb24KK3sKKyAgICBzdGF0
aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZGVmYXVsdER1cmF0aW9uID0gMC41OworICAgIENGVGlt
ZUludGVydmFsIGR1cmF0aW9uID0gZGVmYXVsdER1cmF0aW9uOworI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIE5TVUlu
dGVnZXIgbW9kaWZpZXJGbGFncyA9IFtOU0V2ZW50IG1vZGlmaWVyRmxhZ3NdOworI2Vsc2UKKyAg
ICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBbW05TRXZlbnQgY3VycmVudEV2ZW50XSBtb2Rp
ZmllckZsYWdzXTsKKyNlbmRpZgorICAgIGlmICgobW9kaWZpZXJGbGFncyAmIE5TQ29udHJvbEtl
eU1hc2spID09IE5TQ29udHJvbEtleU1hc2spCisgICAgICAgIGR1cmF0aW9uICo9IDI7CisgICAg
aWYgKChtb2RpZmllckZsYWdzICYgTlNTaGlmdEtleU1hc2spID09IE5TU2hpZnRLZXlNYXNrKQor
ICAgICAgICBkdXJhdGlvbiAqPSAxMDsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikg
eworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24KKyAgICAgICAg
ZHVyYXRpb24gPSAwOworICAgIH0KKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisKK0BlbmQKKwor
I3ByYWdtYSBtYXJrIC0KK0BpbXBsZW1lbnRhdGlvbiBXZWJGdWxsc2NyZWVuV2luZG93CisKKy0g
KGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5T
VUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBl
IGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9y
ZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiBzZXRPcGFxdWU6Tk9d
OworICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Cisg
ICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKKyAgICBbc2VsZiBzZXRBY2NlcHRz
TW91c2VNb3ZlZEV2ZW50czpZRVNdOworICAgIFtzZWxmIHNldFJlbGVhc2VkV2hlbkNsb3NlZDpO
T107CisgICAgW3NlbGYgc2V0SGFzU2hhZG93OllFU107CisgICAgW3NlbGYgc2V0TW92YWJsZTpO
T107CisgICAgCisgICAgTlNWaWV3KiBjb250ZW50VmlldyA9IFtzZWxmIGNvbnRlbnRWaWV3XTsK
KyAgICBfYW5pbWF0aW9uVmlldyA9IFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltjb250
ZW50VmlldyBib3VuZHNdXTsKKyAgICAKKyAgICBDQUxheWVyKiBjb250ZW50TGF5ZXIgPSBbW0NB
TGF5ZXIgYWxsb2NdIGluaXRdOworICAgIFtfYW5pbWF0aW9uVmlldyBzZXRMYXllcjpjb250ZW50
TGF5ZXJdOworICAgIFtfYW5pbWF0aW9uVmlldyBzZXRXYW50c0xheWVyOllFU107CisgICAgW19h
bmltYXRpb25WaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlfE5TVmll
d0hlaWdodFNpemFibGVdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9hbmltYXRpb25W
aWV3XTsKKyAgICAKKyAgICBfYmFja2dyb3VuZExheWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0
XTsKKyAgICBbY29udGVudExheWVyIGFkZFN1YmxheWVyOl9iYWNrZ3JvdW5kTGF5ZXJdOworICAg
IFtjb250ZW50TGF5ZXIgc2V0R2VvbWV0cnlGbGlwcGVkOllFU107CisgICAgW2NvbnRlbnRMYXll
ciBzZXRPcGFjaXR5OjBdOworICAgIAorICAgIFtfYmFja2dyb3VuZExheWVyIHNldEJhY2tncm91
bmRDb2xvcjpDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKV07CisgICAgW19i
YWNrZ3JvdW5kTGF5ZXIgc2V0T3BhY2l0eTowXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW19hbmltYXRpb25WaWV3IHJlbGVhc2VdOworICAgIFtfYmFj
a2dyb3VuZExheWVyIHJlbGVhc2VdOworICAgIFtfcmVuZGVyZXJMYXllciByZWxlYXNlXTsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Cit7Cisg
ICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopdGhlRXZlbnQK
K3sKKyAgICBpZiAoW1t0aGVFdmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdIGlzRXF1
YWw6QCJcZSJdKSAvLyBFc2FjcGUga2V5LWNvZGUKKyAgICAgICAgW3NlbGYgY2FuY2VsT3BlcmF0
aW9uOnNlbGZdOworICAgIGVsc2UgW3N1cGVyIGtleURvd246dGhlRXZlbnRdOworfQorCistICh2
b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIF9yZXF1ZXN0RXhpdEZ1bGxzY3JlZW5X
aXRoQW5pbWF0aW9uOllFU107Cit9CisKKy0gKENBTGF5ZXIqKXJlbmRlcmVyTGF5ZXIKK3sKKyAg
ICByZXR1cm4gX3JlbmRlcmVyTGF5ZXI7Cit9CisKKy0gKHZvaWQpc2V0UmVuZGVyZXJMYXllcjoo
Q0FMYXllciAqKXJlbmRlcmVyTGF5ZXIKK3sKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Cisg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBbcmVuZGVyZXJM
YXllciByZXRhaW5dOworICAgIFtfcmVuZGVyZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgW19yZW5kZXJlckxheWVyIHJlbGVhc2VdOworICAgIF9yZW5kZXJlckxheWVyID0gcmVu
ZGVyZXJMYXllcjsKKyAgICAKKyAgICBpZiAoX3JlbmRlcmVyTGF5ZXIpCisgICAgICAgIFtbW3Nl
bGYgYW5pbWF0aW9uVmlld10gbGF5ZXJdIGFkZFN1YmxheWVyOl9yZW5kZXJlckxheWVyXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistIChDQUxheWVyKiliYWNrZ3JvdW5kTGF5
ZXIKK3sKKyAgICByZXR1cm4gX2JhY2tncm91bmRMYXllcjsKK30KKworLSAoTlNWaWV3Kilhbmlt
YXRpb25WaWV3Cit7CisgICAgcmV0dXJuIF9hbmltYXRpb25WaWV3OworfQorQGVuZAorCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhRXZlbnRMaXN0ZW5lcgorCitNZWRpYUV2ZW50
TGlzdGVuZXI6Ok1lZGlhRXZlbnRMaXN0ZW5lcihXZWJGdWxsc2NyZWVuQ29udHJvbGxlciogZGVs
ZWdhdGUpCisgICAgOiBFdmVudExpc3RlbmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQorICAgICwg
ZGVsZWdhdGUoZGVsZWdhdGUpCit7IAorfQorCitQYXNzUmVmUHRyPE1lZGlhRXZlbnRMaXN0ZW5l
cj4gTWVkaWFFdmVudExpc3RlbmVyOjpjcmVhdGUoV2ViRnVsbHNjcmVlbkNvbnRyb2xsZXIqIGRl
bGVnYXRlKSAKK3sgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUV2ZW50TGlzdGVuZXIo
ZGVsZWdhdGUpKTsgCit9CisKK2Jvb2wgTWVkaWFFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09KGNv
bnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQoreworICAgIHJldHVybiB0aGlzID09ICZsaXN0
ZW5lcjsKK30KKwordm9pZCBNZWRpYUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2ZW50KiBldmVudCkKK3sKKyAgICBbZGVsZWdhdGUg
X3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Cit9CisKKyNlbmRpZiAvKiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpICovCi0tIAoxLjYuNS4xCgo=
</data>
<flag name="review"
          id="68183"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77139</attachid>
            <date>2010-12-21 11:26:09 -0800</date>
            <delta_ts>2011-01-03 17:20:51 -0800</delta_ts>
            <desc>NewFullScreen-Part-1-RenderFullScreen</desc>
            <filename>0001-NewFullScreen-Part-1-RenderFullScreen.patch</filename>
            <type>text/plain</type>
            <size>13429</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSA2ZmM1YmIyNzM3NzI3YzBkOWZiMmQ0NjY3ZWQwYTU5ODQzZmYxZTc1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDEyOjUxOjAyIC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzVdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDEgLSBSZW5kZXJGdWxsU2NyZWVuCgotLS0KIFdlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrKysrKysrKwogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogfCAgICA4ICsrKysKIFdlYkNvcmUv
Y3NzL2Z1bGxzY3JlZW4uY3NzICAgICAgICAgICAgICAgIHwgICAxNyArKystLS0tLQogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgICAgfCAgIDYzICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmggICAg
ICB8ICAgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggICAgICAgICAgfCAgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgMTY3IGlu
c2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MWU5YzVjLi4wM2M5OTM1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDEwLTEyLTE3ICBKZXIgTm9ibGUgIDxqZXJAa29rb2RlLmFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViS2l0IEZ1bGwgU2NyZWVuIHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ4MQorICAgICAgICByZGFyOi8vcHJvYmxlbS84MjQ3NDQ0
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUmVuZGVyT2Jq
ZWN0IHR5cGU6IFJlbmRlckZ1bGxTY3JlZW4uICBUaGUgUmVuZGVyRnVsbFNjcmVlbiByZW5kZXJl
ciAKKyAgICAgICAgd2lsbCBiZSB1c2VkIHRvIGltcGxlbWVudCBuZXcgRnVsbFNjcmVlbiBBUElz
LiAgQmVjYXVzZSB0aGUgUmVuZGVyRnVsbFNjcmVlbiBvYmplY3Qgd2lsbCBiZSB0aGUKKyAgICAg
ICAgcGFyZW50IG9mIHRoZSBjdXJyZW50IGZ1bGxzY3JlZW4gZWxlbWVudCwgdGhlIHN0eWxlIHJ1
bGVzIGZvciBmdWxsc2NyZWVuIG9iamVjdHMgbXVzdCBjaGFuZ2UgdG8KKyAgICAgICAgbWF0Y2gu
CisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoUmVuZGVyRnVsbFNjcmVlbjo6c2V0QW5pbWF0aW5nKTogU2V0cyB0aGUgbV9pc0FuaW1hdGlu
ZyBmbGFnLgorICAgICAgICAoUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlRnVsbFNjcmVlblN0eWxl
KTogUmV0dXJucyBhIG5ldyBSZW5kZXJTdHlsZSBjb250YWluaW5nIHRoZSBkZWZhdWx0IHN0eWUK
KyAgICAgICAgICAgIGZvciBSZW5kZXJGdWxsU2NyZWVuIG9iamVjdHMuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGdWxsU2NyZWVuOjppc0Z1bGxTY3JlZW4pOiBBZGRlZC4gIE92ZXJyaWRlcyB0aGUgUmVuZGVy
T2JqZWN0IHZlcnNpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0Z1bGxTY3JlZW4pOiBBZGRlZC4gIFVzZWQg
Zm9yIHR5cGUtY2hlY2tpbmcgUmVuZGVyRnVsbFNjcmVlbiBvYmplY3RzLgorICAgICAgICAqIGNz
cy9mdWxsc2NyZWVuLmNzczogIE1vZGlmaWVkIHRoZSBjb250YWluZWQgZnVsbHNjcmVlbiBzdHls
ZXMuCisKKwogMjAxMC0xMi0wNyAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMDYwNzhmLi5jMzc5YWYzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTMwOSw2ICs1MzA5LDggQEAKIAkJ
QzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5
QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKIAkJ
Q0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2
Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CiAJCUNBM0JGNjdFMTBEOTlCQUUwMEU2
Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9y
LmggKi87IH07CisJCUNERUE3Qzg0MTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREVBN0M4
MjEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovOyB9OworCQlDREVBN0M4
NTEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREVBN0M4MzEyNzYyMzA0MDBCODQ2REQg
LyogUmVuZGVyRnVsbFNjcmVlbi5jcHAgKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0
QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRy
b2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1
N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsg
fTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdG
QTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTQxOSw2ICsxMTQy
MSw4IEBACiAJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDRFMEFGQTExRjdC
QzI3MDA5RDM4MTEgLyogZnVsbHNjcmVlbi5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9
IGZ1bGxzY3JlZW4uY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREVBN0M4MjEy
NzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJGdWxsU2NyZWVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNERUE3QzgzMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZ1bGxTY3JlZW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEg
LyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2NyaXB0Q29udHJvbGxlckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0UwNTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTA1N0ZBNDEyMjA3MzEx
MDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTgwODQsNiArMTgwODgsOCBAQAogCQkJCTBGRDMwODBEMTE3Q0Y3
RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCAqLywKIAkJCQlBODcxREVDQTBBMTUzMEM3
MDBCMTJBNjggLyogUmVuZGVyRnJhbWVTZXQuY3BwICovLAogCQkJCUE4NzFERUM5MEExNTMwQzcw
MEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5oICovLAorCQkJCUNERUE3QzgzMTI3NjIzMDQwMEI4
NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCAqLywKKwkJCQlDREVBN0M4MjEyNzYyMzA0MDBC
ODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovLAogCQkJCUJDRUE0ODJBMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJIVE1MQ2FudmFzLmNwcCAqLywKIAkJCQlCQ0VBNDgyQjA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVySFRNTENhbnZhcy5oICovLAogCQkJCTBGRDMwOEQzMTE3RDE2ODQwMEE3
OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwICovLApAQCAtMTg2MjQsNiArMTg2MzAsNyBAQAogCQkJ
aXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQ0RFQTdDODQxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRl
ckZ1bGxTY3JlZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUI1QjVEQzZBMTE5QkIzRDUwMDJBODc5
MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUUxQjFEMTBGRjU5
ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgx
MjJFMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI0MTAyLDYgKzI0MTA5LDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAx
RTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFC
RTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291
cmNlcyAqLywKKyAJCQkJQ0RFQTdDODUxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3Jl
ZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5QjNFRDYxMjhDRDMxNDAwRTcyNkMyIC8qIEdy
YXBoaWNzTGF5ZXJDQS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTU4NzgyMTEyQTU3RERGMDA3
MjM4QUMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5
NTg3ODIyMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL2Z1bGxzY3JlZW4uY3NzIGIvV2ViQ29yZS9j
c3MvZnVsbHNjcmVlbi5jc3MKaW5kZXggZWJmM2EwMi4uMmUzOGM5NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9jc3MvZnVsbHNjcmVlbi5jc3MKKysrIGIvV2ViQ29yZS9jc3MvZnVsbHNjcmVlbi5jc3MK
QEAgLTEsOSArMSw1IEBACiA6LXdlYmtpdC1mdWxsLXNjcmVlbiB7Ci0gICAgcG9zaXRpb246Zml4
ZWQ7Ci0gICAgdG9wOjA7Ci0gICAgbGVmdDowOwotICAgIHJpZ2h0OjA7Ci0gICAgYm90dG9tOjA7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiB9CiAKIDpyb290OmZ1bGwtc2NyZWVuLWRv
Y3VtZW50Om5vdCg6ZnVsbC1zY3JlZW4pIHsKQEAgLTExLDE1ICs3LDE2IEBACiB9CiAKIHZpZGVv
Oi13ZWJraXQtZnVsbC1zY3JlZW4gewotICAgIHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMTAw
JQotICAgIGltYWdlLWZpdDogZmlsbDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAg
ICB3aWR0aDogYXV0bzsgICAKKyAgICBoZWlnaHQ6IDEwMCU7CisgICAgbWF4LXdpZHRoOiAxMDAl
OwogfQogCiBpbWc6LXdlYmtpdC1mdWxsLXNjcmVlbiB7Ci0gICAgd2lkdGg6IDEwMCU7CisgICAg
d2lkdGg6IGF1dG87ICAgCiAgICAgaGVpZ2h0OiAxMDAlOwotICAgIGltYWdlLWZpdDogZmlsbDsK
KyAgICBtYXgtd2lkdGg6IDEwMCU7CiB9CiAKIHZpZGVvOi13ZWJraXQtZnVsbC1wYWdlLW1lZGlh
Oi13ZWJraXQtZnVsbC1zY3JlZW46Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40MTkxZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBS
ZW5kZXJGdWxsU2NyZWVuOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCit7CisgICAgbV9p
c0FuaW1hdGluZyA9IGFuaW1hdGluZzsKKyAgICBpZiAobGF5ZXIoKSkKKyAgICAgICAgbGF5ZXIo
KS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKQoreworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gZnVsbHNjcmVlblN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZURlZmF1
bHRTdHlsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3RhY2tpbmcgY29udGV4dDoKKyAgICBmdWxs
c2NyZWVuU3R5bGUtPnNldFpJbmRleCgwKTsKKworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPmZv
bnQoKS51cGRhdGUoMCk7CisKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldERpc3BsYXkoQk9YKTsK
KyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldEJveFBhY2soQkNFTlRFUik7CisgICAgZnVsbHNjcmVl
blN0eWxlLT5zZXRCb3hBbGlnbihCQ0VOVEVSKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldEJv
eE9yaWVudChIT1JJWk9OVEFMKTsKKyAgICAKKyAgICBmdWxsc2NyZWVuU3R5bGUtPnNldFBvc2l0
aW9uKEZpeGVkUG9zaXRpb24pOworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KDEwMC4wLCBQZXJjZW50KSk7CisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KDEwMC4wLCBQZXJjZW50KSk7CisgICAgZnVsbHNjcmVlblN0eWxlLT5zZXRMZWZ0KExlbmd0aCgw
LCBGaXhlZCkpOworICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0VG9wKExlbmd0aCgwLCBGaXhlZCkp
OworICAgIAorICAgIGZ1bGxzY3JlZW5TdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjpi
bGFjayk7CisgICAgCisgICAgcmV0dXJuIGZ1bGxzY3JlZW5TdHlsZTsKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZ1bGxTY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
NDE4NjgzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNj
cmVlbi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlckZ1
bGxTY3JlZW5faAorI2RlZmluZSBSZW5kZXJGdWxsU2NyZWVuX2gKKworI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKKworI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyRnVsbFNjcmVlbiA6IHB1YmxpYyBSZW5kZXJGbGV4
aWJsZUJveCB7CitwdWJsaWM6CisgICAgUmVuZGVyRnVsbFNjcmVlbihOb2RlKiBub2RlKSA6IFJl
bmRlckZsZXhpYmxlQm94KG5vZGUpIHsgc2V0UmVwbGFjZWQoZmFsc2UpOyBzZXRJc0Fub255bW91
cyhmYWxzZSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJGdWxsU2NyZWVuIjsgfQorICAgIAorICAgIGJvb2wgaXNBbmltYXRpbmco
KSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9CisgICAgdm9pZCBzZXRBbmltYXRpbmco
Ym9vbCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUZ1
bGxTY3JlZW5TdHlsZSgpOworICAgIAorcHJvdGVjdGVkOgorICAgIGJvb2wgbV9pc0FuaW1hdGlu
ZzsKK307CisgICAgCitpbmxpbmUgUmVuZGVyRnVsbFNjcmVlbiogdG9SZW5kZXJGdWxsU2NyZWVu
KFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVChvYmplY3QtPmlzRnVsbFNjcmVl
bigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyRnVsbFNjcmVlbio+KG9iamVjdCk7
Cit9CisgICAgCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5
IGNhc3Q6Cit2b2lkIHRvUmVuZGVyRnVsbFNjcmVlbihSZW5kZXJGdWxsU2NyZWVuKik7Cit9CisK
KyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNWM2OGE2ZC4u
MTg0MjZjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTI4Nyw2ICsyODcsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQ2FudmFzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdmlydHVhbCBib29sIGlzRnVsbFNjcmVlbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAogICAgIGJvb2wgaXNSb290KCkgY29uc3Qg
eyByZXR1cm4gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gbV9ub2RlOyB9CiAgICAg
Ym9vbCBpc0JvZHkoKSBjb25zdDsKLS0gCjEuNi41LjEKCg==
</data>
<flag name="review"
          id="68185"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78136</attachid>
            <date>2011-01-06 11:30:02 -0800</date>
            <delta_ts>2011-01-06 11:52:01 -0800</delta_ts>
            <desc>NewFullScreen-Part-3-Renderering</desc>
            <filename>0003-NewFullScreen-Part-3-Renderering.patch</filename>
            <type>text/plain</type>
            <size>11711</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSAzYjRiMmNhN2Y5NzJjNzU4NTY4MzNiZjcxODM4ODMyZGYwODIxOGE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplckBrb2tvZGUuYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IERlYyAyMDEwIDE0OjEwOjExIC0wODAwClN1YmplY3Q6IFtQQVRDSCAzLzZdIE5l
d0Z1bGxTY3JlZW4gLSBQYXJ0IDMgLSBSZW5kZXJlcmluZwoKLS0tCiBXZWJDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMCArKysrKysrKysrKysrKysrKysrKysK
IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrKysr
KysrKysrKysrKysrKysrKysrKysrLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVl
bi5jcHAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAgICAgfCAgIDI2ICsrKysrKysrKysrKysrKysrLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCB8ICAgMTYgKysrKysrKysrKystCiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCAgIHwgICAgMSArCiA2IGZpbGVzIGNoYW5nZWQs
IDEwNyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2U0NjAzMy4uNTZmNDkwNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIs
NiArMiwzNiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAg
ICAgIEltcGxlbWVudCBXZWJLaXQgRnVsbCBTY3JlZW4gc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDgxCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzgyNDc0NDQKKworICAgICAgICBUaGUgUmVuZGVyRnVsbFNjcmVlbiBpcyBpbnRlbmRl
ZCB0byBiZSB1c2VkIGJ5IGNsaWVudHMgb2YgdGhhdCBBUEkgdG8gYWxsb3cgYSBET00gc3VidHJl
ZSB0bworICAgICAgICBiZSByZW5kZXJlZCBvdXRzaWRlIGl0cyBvcmlnaW5hbCBGcmFtZS4gQmVj
YXVzZSBvZiB0aGlzLCB0aGVyZSBhcmUgYSBmZXcgYXJlYXMgb2YgdGhlCisgICAgICAgIHJlbmRl
cmluZyBjb2RlIHdoaWNoIG5lZWQgdG8gYmUgc3BlY2lhbCBjYXNlZDogUmVuZGVyRnVsbFNjcmVl
biBsYXllcnMgc2hvdWxkIG5vdCBiZSBjbGlwcGVkCisgICAgICAgIHRvIHRoZSB2aWV3cG9ydCwg
YXMgdGhleSB3aWxsIGFsbW9zdCBhbHdheXMgYmUgcmVuZGVyaW5nIG91dHNpZGUgdGhlIHZpZXdw
b3J0IGFyZWE7CisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3MgbGF5ZXJzIHNob3Vs
ZCBub3QgYmUgcmVwYXJlbnRlZCBieSB0aGUgUmVuZGVyTGF5ZXJDb21wb3NpdG9yLCBhcworICAg
ICAgICB0aGUgY2xpZW50IHdpbGwgbGlrZWx5IHdhbnQgdG8gcmVwYXJlbnQgdGhlIHBsYXRmb3Jt
TGF5ZXIgaW50byB0aGVpciBvd24gZnVsbHNjcmVlbiBwbGF0Zm9ybQorICAgICAgICB3aW5kb3c7
IHRoZSBGcmFtZVZpZXcgbXVzdCB1cGRhdGUgdGhlIFJlbmRlckZ1bGxTY3JlZW4gZ3JhcGhpY3Mg
bGF5ZXIgdHJlZSBzZXBhcmF0ZWx5IGZyb20KKyAgICAgICAgdGhlIHJvb3QgbGF5ZXIsIGFzIHRo
ZSB0d28gdHJlZXMgYXJlIGRpc2Nvbm5lY3RlZC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlQ29tcG9zaXRpbmdMYXll
cnMpOiAgU3BlY2lhbCB0cmVhdG1lbnQgZm9yIGZ1bGxzY3JlZW4gcmVuZGVyZXIuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmxheWVyT3JBbmNlc3RvcklzRnVsbFNjcmVlbik6IE5ldyBmdW5jdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6
IERvIG5vdCBjbGlwIGlmIHRoZSBsYXllck9yQW5jZXN0b3JJc0Z1bGxTY3JlZW4uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSk6IFNw
ZWNpYWwgdHJlYXRtZW50IGZvciBmdWxsc2NyZWVuIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0ZvckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmg6CisKKzIwMTAtMTItMTcgIEplciBOb2JsZSAgPGplckBrb2tvZGUu
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAg
ICAgIEltcGxlbWVudGVkIG5vbi1hY2NlbGVyYXRlZCBmdWxsc2NyZWVuIHN1cHBvcnQuICBUaGUg
RG9jdW1lbnQgd2lsbCBub3cgdmVuZCBhIFJlbmRlckZ1bGxTY3JlZW4gb2JqZWN0IGZvciBjbGll
bnRzIHRvCiAgICAgICAgIHVzZSB0byByZWxvY2F0ZSB0aGUgZnVsbHNjcmVlbiBlbGVtZW50IHN1
YnRyZWUuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMjQ4NDg2MC4uZjRiMGQyOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRP
YmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xs
YmFyLmgiCkBAIC01MjQsNiArNTI1LDEyIEBAIHZvaWQgRnJhbWVWaWV3OjpjYWxjdWxhdGVTY3Jv
bGxiYXJNb2Rlc0ZvckxheW91dChTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyCiAgICAg
fSAgICAKIH0KIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK3N0YXRpYyBib29sIGlzRG9j
dW1lbnRSdW5uaW5nRnVsbFNjcmVlbkFuaW1hdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCit7Cisg
ICAgcmV0dXJuIGRvY3VtZW50LT53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBkb2N1bWVudC0+ZnVs
bFNjcmVlblJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPmZ1bGxTY3JlZW5SZW5kZXJlcigpLT5pc0Fu
aW1hdGluZygpOworfQorI2VuZGlmCiAgICAgCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKQEAgLTUzNSw2
ICs1NDIsMTIgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKICAg
ICAvLyBUaGlzIGNhbGwgd2lsbCBtYWtlIHN1cmUgdGhlIGNhY2hlZCBoYXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nIGlzIHVwZGF0ZWQgZnJvbSB0aGUgcHJlZgogICAgIHZpZXctPmNvbXBvc2l0b3Io
KS0+Y2FjaGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRmxhZ3MoKTsKICAgICB2aWV3LT5jb21wb3Np
dG9yKCktPnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlQWZ0ZXJMYXlv
dXRPclN0eWxlQ2hhbmdlKTsKKyAgICAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoaXNEb2N1
bWVudFJ1bm5pbmdGdWxsU2NyZWVuQW5pbWF0aW9uKGRvY3VtZW50KSkKKyAgICAgICAgdmlldy0+
Y29tcG9zaXRvcigpLT51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZUFm
dGVyTGF5b3V0T3JTdHlsZUNoYW5nZSwgZG9jdW1lbnQtPmZ1bGxTY3JlZW5SZW5kZXJlcigpLT5s
YXllcigpKTsKKyNlbmRpZgogfQogCiB2b2lkIEZyYW1lVmlldzo6c2V0TmVlZHNPbmVTaG90RHJh
d2luZ1N5bmNocm9uaXphdGlvbigpCkBAIC02MTIsNyArNjI1LDcgQEAgYm9vbCBGcmFtZVZpZXc6
OmlzRW5jbG9zZWRJbkNvbXBvc2l0aW5nTGF5ZXIoKSBjb25zdAogI2VuZGlmCiAgICAgcmV0dXJu
IGZhbHNlOwogfQotCisgICAgCiBib29sIEZyYW1lVmlldzo6c3luY0NvbXBvc2l0aW5nU3RhdGVS
ZWN1cnNpdmUoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTYyOCw2
ICs2NDEsMTggQEAgYm9vbCBGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZl
KCkKICAgICAKICAgICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gY29udGVudFJlbmRl
cmVyLT5jb21wb3NpdG9yKCktPnJvb3RQbGF0Zm9ybUxheWVyKCkpCiAgICAgICAgIHJvb3RMYXll
ci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisgICAgLy8gVGhlIGZ1bGxTY3JlZW5SZW5kZXJlcidzIGdyYXBoaWNzTGF5ZXIgIGhhcyBi
ZWVuIHJlLXBhcmVudGVkLCBhbmQgdGhlIGFib3ZlIHJlY3Vyc2l2ZSBzeW5jQ29tcG9zaXRpbmdT
dGF0ZQorICAgIC8vIGNhbGwgd2lsbCBub3QgY2F1c2UgdGhlIHN1YnRyZWUgdW5kZXIgaXQgdG8g
cmVwYWludC4gIEV4cGxpY2l0bHkgY2FsbCB0aGUgc3luY0NvbXBvc2l0aW5nU3RhdGUgb24gCisg
ICAgLy8gdGhlIGZ1bGxTY3JlZW5SZW5kZXJlcidzIGdyYXBoaWNzTGF5ZXIgaGVyZToKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmIChpc0RvY3Vt
ZW50UnVubmluZ0Z1bGxTY3JlZW5BbmltYXRpb24oZG9jdW1lbnQpKSB7CisgICAgICAgIFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IGRvY3VtZW50LT5mdWxsU2NyZWVuUmVuZGVyZXIoKS0+
bGF5ZXIoKS0+YmFja2luZygpOworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogZnVsbFNjcmVl
bkxheWVyID0gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKQorICAgICAgICAgICAgZnVsbFNjcmVl
bkxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIH0KKyNlbmRpZiAgICAKIAogICAg
IGJvb2wgYWxsU3ViZnJhbWVzU3luY2VkID0gdHJ1ZTsKICAgICBjb25zdCBIYXNoU2V0PFJlZlB0
cjxXaWRnZXQ+ID4qIHZpZXdDaGlsZHJlbiA9IGNoaWxkcmVuKCk7CkBAIC0yMTI1LDYgKzIxNTAs
MTYgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBwLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmICghcC0+cGFpbnRpbmdEaXNhYmxlZCgpKSB7CiAg
ICAgICAgIGlmIChHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSBjb250ZW50UmVuZGVyZXItPmNv
bXBvc2l0b3IoKS0+cm9vdFBsYXRmb3JtTGF5ZXIoKSkKICAgICAgICAgICAgIHJvb3RMYXllci0+
c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
ICAgIC8vIFRoZSBmdWxsU2NyZWVuUmVuZGVyZXIncyBncmFwaGljc0xheWVyICBoYXMgYmVlbiBy
ZS1wYXJlbnRlZCwgYW5kIHRoZSBhYm92ZSByZWN1cnNpdmUgc3luY0NvbXBvc2l0aW5nU3RhdGUK
KyAgICAgICAgLy8gY2FsbCB3aWxsIG5vdCBjYXVzZSB0aGUgc3VidHJlZSB1bmRlciBpdCB0byBy
ZXBhaW50LiAgRXhwbGljaXRseSBjYWxsIHRoZSBzeW5jQ29tcG9zaXRpbmdTdGF0ZSBvbiAKKyAg
ICAgICAgLy8gdGhlIGZ1bGxTY3JlZW5SZW5kZXJlcidzIGdyYXBoaWNzTGF5ZXIgaGVyZToKKyAg
ICAgICAgaWYgKGlzRG9jdW1lbnRSdW5uaW5nRnVsbFNjcmVlbkFuaW1hdGlvbihkb2N1bWVudCkp
IHsKKyAgICAgICAgICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGRvY3VtZW50LT5m
dWxsU2NyZWVuUmVuZGVyZXIoKS0+bGF5ZXIoKS0+YmFja2luZygpOworICAgICAgICAgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGZ1bGxTY3JlZW5MYXllciA9IGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIo
KSkKKyAgICAgICAgICAgICAgICBmdWxsU2NyZWVuTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
KCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZ1bGxTY3JlZW4uY3BwCmluZGV4IDQxOTFlNTkuLmQyYTJkOTkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCkBAIC0zMyw3ICszMyw3IEBAIHZvaWQgUmVuZGVyRnVs
bFNjcmVlbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKQogewogICAgIG1faXNBbmltYXRp
bmcgPSBhbmltYXRpbmc7CiAgICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnJlbmRl
cmVyQ29udGVudENoYW5nZWQoKTsKKyAgICAgICAgbGF5ZXIoKS0+Y29udGVudENoYW5nZWQoUmVu
ZGVyTGF5ZXI6OlZpZGVvQ2hhbmdlZCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJl
bmRlckZ1bGxTY3JlZW46OmNyZWF0ZUZ1bGxTY3JlZW5TdHlsZSgpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBlNzE4MDQ0Li4yZGVjMGMxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE1NCw2ICsxNTQsMjIgQEAgc3Rh
dGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZChSZW5kZXJMYXllciogbGF5ZXIp
CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQorICAgIAorI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKK3N0YXRpYyBib29sIGxheWVyT3JBbmNlc3RvcklzRnVsbFNjcmVlbihSZW5kZXJMYXll
ciogbGF5ZXIpCit7CisgICAgLy8gRG9uJ3QgdHJhdmVyc2UgdGhyb3VnaCB0aGUgcmVuZGVyIGxh
eWVyIHRyZWUgaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgZnVsbCBzY3JlZW4gcmVuZGVyZXIuICAg
ICAgICAKKyAgICBpZiAoIWxheWVyLT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5mdWxsU2NyZWVu
UmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChSZW5kZXJMYXll
ciogY3VyciA9IGxheWVyOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKKyAgICAgICAg
aWYgKGN1cnItPnJlbmRlcmVyKCktPmlzUmVuZGVyRnVsbFNjcmVlbigpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgog
CiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpCiB7CkBA
IC0xNjEsOCArMTc3LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3Np
dGVkQm91bmRzKCkKIAogICAgIC8vIENsaXAgdG8gdGhlIHNpemUgb2YgdGhlIGRvY3VtZW50IG9y
IGVuY2xvc2luZyBvdmVyZmxvdy1zY3JvbGwgbGF5ZXIuCiAgICAgLy8gSWYgdGhpcyBvciBhbiBh
bmNlc3RvciBpcyB0cmFuc2Zvcm1lZCwgd2UgY2FuJ3QgY3VycmVudGx5IGNvbXB1dGUgdGhlIGNv
cnJlY3QgcmVjdCB0byBpbnRlcnNlY3Qgd2l0aC4KLSAgICAvLyBXZSdkIG5lZWQgUmVuZGVyT2Jq
ZWN0Ojpjb252ZXJ0Q29udGFpbmVyVG9Mb2NhbFF1YWQoKSwgd2hpY2ggZG9lc24ndCB5ZXQgZXhp
c3QuCi0gICAgaWYgKGNvbXBvc2l0b3IoKS0+Y29tcG9zaXRpbmdDb25zdWx0c092ZXJsYXAoKSAm
JiAhbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZChtX293bmluZ0xheWVyKSkgeworICAgIC8v
IFdlJ2QgbmVlZCBSZW5kZXJPYmplY3Q6OmNvbnZlcnRDb250YWluZXJUb0xvY2FsUXVhZCgpLCB3
aGljaCBkb2Vzbid0IHlldCBleGlzdC4gIElmIHRoaXMKKyAgICAvLyBpcyBhIGZ1bGxzY3JlZW4g
cmVuZGVyZXIsIGRvbid0IGNsaXAgdG8gdGhlIHZpZXdwb3J0LCBhcyB0aGUgcmVuZGVyZXIgd2ls
bCBiZSBhc2tlZCB0bworICAgIC8vIGRpc3BsYXkgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYm91
bmRzLgorICAgIGlmIChjb21wb3NpdG9yKCktPmNvbXBvc2l0aW5nQ29uc3VsdHNPdmVybGFwKCkg
JiYgIWxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWQobV9vd25pbmdMYXllcikgCisjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQorICAgICAgICAmJiAhbGF5ZXJPckFuY2VzdG9ySXNGdWxsU2Ny
ZWVuKG1fb3duaW5nTGF5ZXIpCisjZW5kaWYKKyAgICAgICAgKSB7CiAgICAgICAgIFJlbmRlclZp
ZXcqIHZpZXcgPSBtX293bmluZ0xheWVyLT5yZW5kZXJlcigpLT52aWV3KCk7CiAgICAgICAgIFJl
bmRlckxheWVyKiByb290TGF5ZXIgPSB2aWV3LT5sYXllcigpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBmYTI1MzQ4Li45NGEwY2ZkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTQ0LDYgKzQ0
LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXBwbGV0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVu
LmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtODE3LDYgKzgxOCwxMyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJl
bmRlckxheWVyKiBsYXllciwgY29ucwogICAgICAgICBpZiAoIXBhcmVudGVkKQogICAgICAgICAg
ICAgbGF5ZXJCYWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+c2V0Q2hpbGRyZW4obGF5ZXJD
aGlsZHJlbik7CiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgIC8vIEZvciB0
aGUgc2FrZSBvZiBjbGllbnRzIG9mIHRoZSBmdWxsIHNjcmVlbiByZW5kZXJlciwgZG9uJ3QgcmVw
YXJlbnQKKyAgICAgICAgLy8gdGhlIGZ1bGwgc2NyZWVuIGxheWVyIG91dCBmcm9tIHVuZGVyIHRo
ZW0gaWYgdGhleSdyZSBpbiB0aGUgbWlkZGxlIG9mCisgICAgICAgIC8vIGFuaW1hdGluZy4KKyAg
ICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlckZ1bGxTY3JlZW4oKSAmJiB0b1Jl
bmRlckZ1bGxTY3JlZW4obGF5ZXItPnJlbmRlcmVyKCkpLT5pc0FuaW1hdGluZygpKQorICAgICAg
ICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgICAgIGNoaWxkTGF5ZXJzT2ZFbmNsb3NpbmdMYXll
ci5hcHBlbmQobGF5ZXJCYWNraW5nLT5jaGlsZEZvclN1cGVybGF5ZXJzKCkpOwogICAgIH0KIH0K
QEAgLTExNDcsNyArMTE1NSw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjCiAgICAgICAgICAg
ICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvcklGcmFtZShyZW5kZXJlcikKICAgICAgICAgICAg
ICB8fCAoY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkgJiYgcmVuZGVyZXItPnN0eWxlKCktPmJhY2tm
YWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbikKICAgICAgICAgICAg
ICB8fCBjbGlwc0NvbXBvc2l0aW5nRGVzY2VuZGFudHMobGF5ZXIpCi0gICAgICAgICAgICAgfHwg
cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihyZW5kZXJlcik7CisgICAgICAgICAgICAg
fHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihyZW5kZXJlcikKKyAgICAgICAgICAg
ICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihyZW5kZXJlcik7CiB9CiAKIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5
ZXIqIGxheWVyKSBjb25zdApAQCAtMTMxMyw2ICsxMzIyLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nV2hlbkRlc2NlbmRhbnRzQXJlQ29tcG9zaXRp
bmcoUmVuCiB7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5oYXNUcmFuc2Zvcm0oKSB8fCByZW5kZXJl
ci0+aXNUcmFuc3BhcmVudCgpIHx8IHJlbmRlcmVyLT5oYXNNYXNrKCkgfHwgcmVuZGVyZXItPmhh
c1JlZmxlY3Rpb24oKTsKIH0KKyAgICAKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25z
dAoreworICAgIHJldHVybiByZW5kZXJlci0+aXNSZW5kZXJGdWxsU2NyZWVuKCkgJiYgdG9SZW5k
ZXJGdWxsU2NyZWVuKHJlbmRlcmVyKS0+aXNBbmltYXRpbmcoKTsKK30KIAogLy8gSWYgYW4gZWxl
bWVudCBoYXMgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRyZW4gcmVuZGVy
IGluIGZyb250IG9mIHRoZSAKIC8vIGxheWVyIGJhY2tncm91bmQsIHNvIHdlIG5lZWQgYW4gZXh0
cmEgJ2NvbnRlbnRzJyBsYXllciBmb3IgdGhlIGZvcmVncm91bmQgb2YgdGhlIGxheWVyCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDA2YzBiY2QuLmNiZWIy
ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0yMjYs
NiArMjI2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVn
aW4oUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9y
SUZyYW1lKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGlu
Z1doZW5EZXNjZW5kYW50c0FyZUNvbXBvc2l0aW5nKFJlbmRlck9iamVjdCopIGNvbnN0OworICAg
IGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0KikgY29u
c3Q7CiAKICAgICBib29sIHJlcXVpcmVzU2Nyb2xsTGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCkg
Y29uc3Q7CiAgICAgCi0tIAoxLjYuNS4xCgo=
</data>
<flag name="review"
          id="69403"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>