<?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>20081</bug_id>
          
          <creation_ts>2008-07-17 10:04:43 -0700</creation_ts>
          <short_desc>[Qt] Add support for windowless NPAPI plugins</short_desc>
          <delta_ts>2014-04-18 16:15:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.communitymx.com/content/source/E5141/wmodetrans.htm</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>24157</blocked>
    
    <blocked>29799</blocked>
    
    <blocked>30149</blocked>
    
    <blocked>30170</blocked>
    
    <blocked>30207</blocked>
    
    <blocked>30214</blocked>
    
    <blocked>30248</blocked>
    
    <blocked>30251</blocked>
    
    <blocked>30355</blocked>
    
    <blocked>30356</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="marcoil">marc.ordinasillopis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>donald.carr</cc>
    
    <cc>girish</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>murali.mandayam</cc>
    
    <cc>sdanahy</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>wade.colson</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>86230</commentid>
    <comment_count>0</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-07-17 10:04:43 -0700</bug_when>
    <thetext>Now that Firefox 3 supports windowless mode in Linux, some plugins are starting to take advantage of it. We should add support for it in QtWebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86353</commentid>
    <comment_count>1</comment_count>
      <attachid>22367</attachid>
    <who name="Chris Kurecka">ckurecka</who>
    <bug_when>2008-07-18 12:04:56 -0700</bug_when>
    <thetext>Created attachment 22367
Zattoo&apos;s modified PluginViewWin.cpp file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86354</commentid>
    <comment_count>2</comment_count>
      <attachid>22368</attachid>
    <who name="Chris Kurecka">ckurecka</who>
    <bug_when>2008-07-18 12:05:28 -0700</bug_when>
    <thetext>Created attachment 22368
Zattoo&apos;s modified PluginView.h file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86357</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Kurecka">ckurecka</who>
    <bug_when>2008-07-18 12:08:31 -0700</bug_when>
    <thetext>Sorry marcoil, I meant my attachments to go against https://bugs.webkit.org/show_bug.cgi?id=20095, which was open in another tab.  I&apos;m not sure how to delete them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86395</commentid>
    <comment_count>4</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-07-18 18:41:20 -0700</bug_when>
    <thetext>Me neither, but don&apos;t worry about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87502</commentid>
    <comment_count>5</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-07-31 09:51:19 -0700</bug_when>
    <thetext>I have two not-fully-working implementations of this:

- At http://git.collabora.co.uk/?p=user/marcoil/webkit.git;a=shortlog;h=refs/heads/marcoil/plugins-wmode-qt there&apos;s a branch that makes the plugin draw directly on the window. This produces flickering artifacts that I think are the result of bad interaction betweeen XRender and X normal drawing.
- The branch at http://git.collabora.co.uk/?p=user/marcoil/webkit.git;a=shortlog;h=refs/heads/marcoil/plugins-wmode-qt-offscreen uses an off-screen pixmap and makes the plugin render into it. The problem is that uninitalized pixmaps have no alpha (thus no transparency). If alpha is added to the pixmap, then Gtk (from the plugins) complains of non-compatible colormaps between the pixmap and the screen.

I have no idea on how to solve these issues, so I&apos;m publishing these in the hope someone else will be able to improve on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115310</commentid>
    <comment_count>6</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2009-03-26 03:13:12 -0700</bug_when>
    <thetext>I&apos;m no longer working on this, so taking me out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135354</commentid>
    <comment_count>7</comment_count>
      <attachid>33666</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-07-28 13:34:05 -0700</bug_when>
    <thetext>Created attachment 33666
patch, not for review

This patch is not final. It contains 2 ways of passing the X11 drawable to the plugin. At this point, none of them fully work. I will keep working on it after my vacation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136778</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-08-03 14:12:04 -0700</bug_when>
    <thetext>Hi Yael, I cleaned up some of your event handling code. Please consult my upcoming patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136779</commentid>
    <comment_count>9</comment_count>
      <attachid>34003</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-08-03 14:14:27 -0700</bug_when>
    <thetext>Created attachment 34003
Implement keyboard event forwarding for windowless plugins

Implement keyboard event forwarding for windowless plugins.

Windowless plugins are not there yet, but this is one small step of the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136782</commentid>
    <comment_count>10</comment_count>
      <attachid>34004</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-08-03 14:29:07 -0700</bug_when>
    <thetext>Created attachment 34004
Implement keyboard event forwarding for windowless plugins

ChangeLog fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136785</commentid>
    <comment_count>11</comment_count>
      <attachid>34004</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-08-03 14:37:33 -0700</bug_when>
    <thetext>Comment on attachment 34004
Implement keyboard event forwarding for windowless plugins

r=me

&gt; 
&gt;         Based on work my Yael Aharon.

I guess that should become a &quot;by&quot; when landing ;-)

&gt; +bool PluginView::dispatchNPEvent(NPEvent&amp; event)

A ### TODO would be nice here to point out that we should unify this function across all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136794</commentid>
    <comment_count>12</comment_count>
      <attachid>34004</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-08-03 14:58:34 -0700</bug_when>
    <thetext>Comment on attachment 34004
Implement keyboard event forwarding for windowless plugins

Landed in 46733</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147763</commentid>
    <comment_count>13</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-17 01:07:54 -0700</bug_when>
    <thetext>I am working on this bug. 

Quick status - I am currently working outside webkit and trying to fix the problem faced by Marc. 

When backing store enabled, I see two approaches:
1. Provide plugin with a Drawable that already has content of Qt&apos;s backing store. So, we just grab the backing store contents into a Drawable before the plugin&apos;s paint event, give it to the plugin and after the plugin paint we put the Drawable back in the backing store. I think, this will work well even if use ARGB visuals but this involves copying back and forth will make it slow.
2. Make plugin paint directly to Qt&apos;s backing store. Will be much faster.

When backing store disabled, we can assume paint on screen. And make the plugin draw directly to the window. This will flicker but they asked for it (as in marc&apos;s patch).

I have been testing with the diamondx plugin (with a windowless patch from bug 137189 of mozilla). You can find the git repo here - http://git.forwardbias.in/?p=diamondx.git;a=shortlog;h=refs/heads/windowless.

I have managed to get approach 1 to work outside webkit, remains to be seen if it will work with webkit :) It&apos;s flicker free. I wrote a pure qt4 &apos;host&apos; that loads a netscape plugin. http://git.forwardbias.in/?p=npploader.git;a=shortlog;h=refs/heads/grab_bs. It&apos;s _very_ hacky. Ideally, we should use QWindowSurface (which is exported but private).

Also, the gdk code and Qt code use different X11 displays. So to sync the painting in the drawable, I have to end up calling XSync :/

I am working on approach 2, but I am getting all sorts of gdk errors atm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147787</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-17 06:09:50 -0700</bug_when>
    <thetext>You should notice that some plugins are using the glib refcounting which can lead to problems (like with the Flash plugin). The problem is that the GtkSocket takes a ref on the GtkPlug, which never happens when using a QX11EmbedContainer, thus we are always left with 1 ref less, which means that the plugin is sometimes destroying parts of itself during resize etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147792</commentid>
    <comment_count>15</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-17 07:20:30 -0700</bug_when>
    <thetext>Ok, approach 2 works too. http://git.forwardbias.in/?p=npploader.git;a=shortlog;h=refs/heads/direct_bs. I will try integrating the approach into qt/webkit now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148729</commentid>
    <comment_count>16</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-21 10:17:41 -0700</bug_when>
    <thetext>Before integrating to WebKit, I thought I should first test with flash instead of diamondx. I had to make a lot of changes to my npploader. After a lot of pain, transparent flash works in npploader!

http://git.forwardbias.in/?p=npploader.git;a=shortlog;h=refs/heads/master

Now to integrate it into Qt/WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148746</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-21 11:09:57 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Before integrating to WebKit, I thought I should first test with flash instead
&gt; of diamondx. I had to make a lot of changes to my npploader. After a lot of
&gt; pain, transparent flash works in npploader!
&gt; 
&gt; http://git.forwardbias.in/?p=npploader.git;a=shortlog;h=refs/heads/master
&gt; 
&gt; Now to integrate it into Qt/WebKit.

Cool news! thanks for the great work Girish!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149959</commentid>
    <comment_count>18</comment_count>
      <attachid>40102</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-25 03:02:38 -0700</bug_when>
    <thetext>Created attachment 40102
Windowless patch - makes painting work

Painting works with windowless plugins with no flicker. Does not work when the view is scrolled, I need to get the scroll offsets right.

My initial version drew directly to the backing store. But it has a couple of problems - the backing store offset changes when new widgets appear _over_ the QWebView. This means that we need to detect this (which is very hard) and also do a setwindow call. The code says that calling setwindow multiple times crashes plugin (doesn&apos;t say which plugin). In general, I thought it was safer to just use a offscreen drawable.

Builds over yael&apos;s patch, the main fixes are how the drawable is grabbed, painted by plugin.

I need comment on the below and on the patch in general:
1. The gdkDisplay is a part of the PluginPackage, I am not sure if this is the right place. I was hoping that after a plugin is loaded (but no new plugin instance created), we use RTLD_NOLOAD using dlopen to detect if gdk-x11 is already open. There seems to be no mechanism to achieve this using QLibrary (besides QLibrary will load gdk-x11 even if the plugin does not need it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149963</commentid>
    <comment_count>19</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-25 03:26:17 -0700</bug_when>
    <thetext>One option is to load gdk-x11 *always* on startup and make Qt use the gdk default display. However, this does not work (Qt bug). Note that, if I do a XOpenDisplay manually and provide that display to Qt, it works. Just not with gdk&apos;s display, I haven&apos;t debugged this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149965</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-25 03:45:09 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; One option is to load gdk-x11 *always* on startup and make Qt use the gdk
&gt; default display. However, this does not work (Qt bug). Note that, if I do a
&gt; XOpenDisplay manually and provide that display to Qt, it works. Just not with
&gt; gdk&apos;s display, I haven&apos;t debugged this problem.

I think always loading gdk-x11 is the best option. Flushing the gdk display shouldn&apos;t be too bad. But why do you have to flush the Qt display? Can&apos;t you simply use QPainter::drawPixmap to paint the pixmap?

We cannot change the way people construct their QApplication or change the existing Qt connection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149967</commentid>
    <comment_count>21</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-25 03:57:21 -0700</bug_when>
    <thetext>Ah, of course, We cannot change the way people construct their QApplication or change the existing Qt connection. What was I thinking...

Flushing Qt connection is required so that changes to the m_drawable are reflected to the plugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149987</commentid>
    <comment_count>22</comment_count>
      <attachid>40107</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-25 05:58:50 -0700</bug_when>
    <thetext>Created attachment 40107
Windowless patch - makes painting work (2)

* Moved gdk display detection code to PluginViewQt (Simon&apos;s suggestion)
* Fixed coding style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149992</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-25 06:50:22 -0700</bug_when>
    <thetext>(In reply to comment #18)

&gt; QWebView. This means that we need to detect this (which is very hard) and also
&gt; do a setwindow call. The code says that calling setwindow multiple times
&gt; crashes plugin (doesn&apos;t say which plugin). 

This is due to Flash crashing when setWindow is called with a different size. Flash destroys its internals and reconstructs them, but as it has one ref less (due to us not using GtkSocket) it becomes 0 and some internals die and result in a crash.

As you are dealing with windowless you might not have this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150457</commentid>
    <comment_count>24</comment_count>
      <attachid>40216</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-27 22:01:04 -0700</bug_when>
    <thetext>Created attachment 40216
Windowless patch - makes painting work (3)

Scrolling works now. The rendering is now ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150458</commentid>
    <comment_count>25</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-27 22:05:11 -0700</bug_when>
    <thetext>Here&apos;s my todo list for this feature to be &apos;complete&apos;:
1. Make it work with QWebGraphicsItem. We most likely cannot support transparent mode but opaque mode should work.
2. Make it work with printing
3. Test grabWidget
4. Test Keyboard and Focus (some code already exists)
5. Implement Mouse handling (Click, Wheel)
6. Check if dialogs and widgets displayed by plugins work (flash shows gtk popup menus and dialogs)
7. Optimize opaque mode. Need not XCopyArea from the backing store to drawable.

Let me know, if I am missed something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150495</commentid>
    <comment_count>26</comment_count>
      <attachid>40216</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-28 06:12:45 -0700</bug_when>
    <thetext>Comment on attachment 40216
Windowless patch - makes painting work (3)

This is a great start!

After a quick discussion with Girish on IRC we agreed that makes more sense to fix point 4/5 and 6 in the TODO before landing. Otherwise I don&apos;t see any issues with the existing patch, except that it would be good to replace the unconditional enabling of the supportswindowless variable with something slightly more conditional depending on the availability of the backing store for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150855</commentid>
    <comment_count>27</comment_count>
      <attachid>40294</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-29 04:41:47 -0700</bug_when>
    <thetext>Created attachment 40294
Windowless patch - painting and event handling (4)

4,5,7 now work. So painting, mouse, focus, keyboard handling should all work.

6, I am not entirely sure.  The diamondx plugin manages to show popups and the gtk file dialog. However, the flash plugin fails to show the context menu. This seems to be the case with chrome/windowless too. So, maybe flash decides not to show the context menu for some reason. No idea how to fix this/proceed. Is this a blocker for landing?

Also fixes the case of not having a backing store, we just use the pixmap and painter (no content propagation).

check-webkit-style reports no errors :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150892</commentid>
    <comment_count>28</comment_count>
      <attachid>40299</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-29 06:40:55 -0700</bug_when>
    <thetext>Created attachment 40299
Windowless patch - painting and event handling (5)

New patch after review by kenneth on irc.

Changes:
1. Create static funcs for setting the XEvent (follow the trend for setting keyboard event).
2. Add better comment for why setNPWindowRect is not called multiple times for windowed/full mode.
3. Add comment for -offset
4. s/hasBackingStore/hasValidBackingStore
5. Display detection code moved to getPluginDisplay()
6. Use QX11Info * in platformStart()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151168</commentid>
    <comment_count>29</comment_count>
      <attachid>40345</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-29 23:19:43 -0700</bug_when>
    <thetext>Created attachment 40345
Windowless patch - painting and event handling (6)

Some updates.

Context menu problem - This is a gtk/qt integration issue and is not a problem that can be solved by this patch. If you use gtk inside Qt application, we are unable to show a gtk context menu. I am not 100% sure why but this appears to be because of gtk failing to grab mouse since Qt has grabbed it. Problem reproducible with diamondx plugin.

GrabWidget - works, with no changes - yay, we can see flash in screenshots :)

Also, I ended up modifying the original patch with the following changes (after reading mozilla code)
1. Implement enter/leave notifications
2. Implement focusin/out.
3. I also made the setX... functions pointer based - I couldn&apos;t find any coding policy on this for WebKit but the Qt way atleast is to pass a pointer (instead of a ref) when the object gets modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151183</commentid>
    <comment_count>30</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-30 01:10:43 -0700</bug_when>
    <thetext>Here&apos;s the bug list, so it can help us decide if we want to land it:
1. Focusing the plugin does not defocus webview. The focus handling is correct and the keyevents are sent correctly. But the lineedit/input cursor keeps blinking. (Side note: There seems to be a general focus problem where the cursor does not blink at all when used with plugins - unrelated to this patch)
2. Flash get confused when the mouse release happens outside the plugin (because we don&apos;t generate a release).
3. When a messagebox pops up, right when the flash gets focus (because of the onblur handler of input) it will start selecting text in lineedit/input even when no mouse button is pressed. Strangely, this happens in chrome too.
4. QGraphicsWebView does not work
5. Printing crashes
6. Using ARGB visuals crashes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151188</commentid>
    <comment_count>31</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-30 01:55:16 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Here&apos;s the bug list, so it can help us decide if we want to land it:
&gt; 1. Focusing the plugin does not defocus webview. The focus handling is correct
&gt; and the keyevents are sent correctly. But the lineedit/input cursor keeps
&gt; blinking. (Side note: There seems to be a general focus problem where the
&gt; cursor does not blink at all when used with plugins - unrelated to this patch)

With windowed plugins this works because the focus is transferred on X level and QWebView/QWebPage receive a FocusOut event, that will deactivate the focuscontroller. We may have to emulate that behaviour.

&gt; 6. Using ARGB visuals crashes

Oops, given the popularity of composition managers these days that&apos;s a problem.

Would a backingstore-less painting help here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151199</commentid>
    <comment_count>32</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-30 02:36:53 -0700</bug_when>
    <thetext>
&gt; With windowed plugins this works because the focus is transferred on X level
&gt; and QWebView/QWebPage receive a FocusOut event, that will deactivate the
&gt; focuscontroller. We may have to emulate that behaviour.
&gt; 
I have tried to do this, but doesn&apos;t help. See the initial lines of 
PluginView::handleMouseEvent. Do I need to do anything else?

&gt; &gt; 6. Using ARGB visuals crashes
&gt; 
&gt; Oops, given the popularity of composition managers these days that&apos;s a problem.
&gt; 
&gt; Would a backingstore-less painting help here?

To clarify, the existence of a compmgr does not crash webkit. It crashes only
when Qt uses ARGB visuals (which I think is not so common) i.e when
Qt::WA_TranslucentWindow is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151203</commentid>
    <comment_count>33</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-30 02:57:27 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; With windowed plugins this works because the focus is transferred on X level
&gt; &gt; and QWebView/QWebPage receive a FocusOut event, that will deactivate the
&gt; &gt; focuscontroller. We may have to emulate that behaviour.
&gt; &gt; 
&gt; I have tried to do this, but doesn&apos;t help. See the initial lines of 
&gt; PluginView::handleMouseEvent. Do I need to do anything else?

Ahh, I found the potential solution: Try using PluginView::focusPluginElement().

&gt; &gt; &gt; 6. Using ARGB visuals crashes
&gt; &gt; 
&gt; &gt; Oops, given the popularity of composition managers these days that&apos;s a problem.
&gt; &gt; 
&gt; &gt; Would a backingstore-less painting help here?
&gt; 
&gt; To clarify, the existence of a compmgr does not crash webkit. It crashes only
&gt; when Qt uses ARGB visuals (which I think is not so common) i.e when
&gt; Qt::WA_TranslucentWindow is used.

Hmm, I see... you&apos;re right, that makes it slightly less vulnerable. Not a showstopper then IMHO. But would be great to at least avoid the crash if it&apos;s easy to detect :) (maybe by comparing the default depths of qt and gtk pixmaps?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151454</commentid>
    <comment_count>34</comment_count>
      <attachid>40422</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-09-30 22:37:03 -0700</bug_when>
    <thetext>Created attachment 40422
Windowless patch - painting and event handling (7)

Can we try to land this and get some blackteam testing?

Changes since last patch:
1. Don&apos;t crash when printing. We just skip painting for the time being.
2. We provide a &apos;white&apos; background for transparent plugins when we have no backing store.

At this point, we are feature par with the windowed mode plugin :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151507</commentid>
    <comment_count>35</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-01 05:02:01 -0700</bug_when>
    <thetext>Some good news and some depressing news.

The good news - I had initially tried to get the plugin to paint to a 32-bit QPixmap. I could not succeed because it was giving me X match errors. I have now figured the problem and solved it. I am able to get DiamondX to paint, even!  The beauty of this approach is that it&apos;s very clean and we can get it to work in qwebview, graphicsview, printing all in a single shot.

The depressing news - Flash does not paint. No errors, nothing. :|

Anyone has friends at Adobe, I can get in touch with :) ? Otherwise, it&apos;s back to 24-bit QPixmap and all sort of hackery to make it work with different paint devices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151665</commentid>
    <comment_count>36</comment_count>
      <attachid>40422</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-01 12:33:55 -0700</bug_when>
    <thetext>Comment on attachment 40422
Windowless patch - painting and event handling (7)

&gt; +#include &lt;QLabel&gt;

I guess this isn&apos;t really needed ;-)

&gt; +            XCopyArea(QX11Info::display(), backingStorePixmap-&gt;handle(), m_drawable.handle(), gc, 
&gt; +                offset.x() + m_windowRect.x() + m_clipRect.x(), offset.y() + m_windowRect.y() + m_clipRect.y(), 

There&apos;s a trailing whitespace after the above two lines!!!

(OMG, I would&apos;ve never thought I&apos;d get that anal in a patch review ;-)

&gt;      setCallingPlugin(true);
&gt; -    bool accepted = m_plugin-&gt;pluginFuncs();
&gt; +    bool accepted = m_plugin-&gt;pluginFuncs()-&gt;event(m_instance, &amp;event);

This is my favourite part of the patch.

&gt; +    const QX11Info *x11Info = 0;

Coding style :)


Regardless of my silly style picks this patch is a great piece of work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151801</commentid>
    <comment_count>37</comment_count>
      <attachid>40500</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-02 02:06:12 -0700</bug_when>
    <thetext>Created attachment 40500
Windowless patch - painting and event handling (8)

Changes since last patch
   * Simon&apos;s last review (coding style, whitespace)
   * Fixes crash reported by Simon in some sites (e.g, facebook/biotronic game)
   * Don&apos;t paint anything when the x11 graphics system is not being used i.e check if pixmap handle is valid.
       - This can be fixed by using plain X Pixmap. However, I will do this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152163</commentid>
    <comment_count>38</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-04 07:49:22 -0700</bug_when>
    <thetext>So what is left on the TODO now, before this can be considered for inclusion?

Does it work with zoom? does it just zoom it as it was an image or actually set another size on the plugin? What does firefox do here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152201</commentid>
    <comment_count>39</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2009-10-04 20:23:24 -0700</bug_when>
    <thetext>in firefox, the associated layout element for a given plugin (&lt;object&gt; or &lt;embed&gt; tags) will be zoomed and the new size will bubbled until it reaches the embeded xwindow plugin (so flash would be resized accordingly to page zoom)

&gt; Does it work with zoom? does it just zoom it as it was an image or actually set
&gt; another size on the plugin? What does firefox do here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152214</commentid>
    <comment_count>40</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-04 21:40:39 -0700</bug_when>
    <thetext>Kenneth, thanks for reminding me about zooming :) I forgot to test it with that.

Important history is being lost, so I put up the patch in http://gitorious.org/~girish/qtwebkit/girishs-clone/commits/windowless. Changes include:
1. Use X Pixmaps (93c3aaf)
2. Add PluginQuirkUsesScreenDefaultVisual for Flash (654645). Inspired by Kenneth&apos;s suggestion on irc.
3. Make zoom work (06e79ab)

I think it&apos;s ready for landing. Here are the pending bugs:
1. Printing does not work (but no crash).
2. -graphicssystem opengl crashes. We cannot paint X11 Pixmap using QPainter. I will disable this in a separate patch (since we need this history)
3. QGVLauncher crashes on exit - WebCore::Chrome::repaint uses the client. The client is alreay gone by then.
4. QGraphicsWebView works, yay! But I need a way to detect painting on qgv and turn off transparency. Any suggestions?
5. When using ARGB visuals on tlw, mouse over crashes. 

In the process of debugging 5, I think I have found a bug. It appears that svn commit 48604 (0292c6) has introduced a bug - it calls the view&apos;s winId(). This actually ends up creating a native window. I don&apos;t think is what we want. For the windowless case, we want the window&apos;s winId (and not the views). Even in the windowed case, only the container needs to have a winId and not the view itself. Simon, Kenneth, is that correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152258</commentid>
    <comment_count>41</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-05 04:22:38 -0700</bug_when>
    <thetext>Patches with the change log are at http://gitorious.org/~girish/qtwebkit/girishs-clone/commits/windowless_20081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152267</commentid>
    <comment_count>42</comment_count>
      <attachid>40625</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-05 04:54:44 -0700</bug_when>
    <thetext>Created attachment 40625
Patch 1/4 - [Qt] Add support for windowless NPAPI plugins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152268</commentid>
    <comment_count>43</comment_count>
      <attachid>40626</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-05 04:55:28 -0700</bug_when>
    <thetext>Created attachment 40626
Patch 2/4 - Use X Pixmap instead of QPixmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152269</commentid>
    <comment_count>44</comment_count>
      <attachid>40627</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-05 04:56:33 -0700</bug_when>
    <thetext>Created attachment 40627
Patch 3/4 - Add PluginQuirkUsesScreenDefaultVisual for Flash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152270</commentid>
    <comment_count>45</comment_count>
      <attachid>40628</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-05 04:57:09 -0700</bug_when>
    <thetext>Created attachment 40628
Patch 4/4 -  Make painting and events work when page is zoomed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152313</commentid>
    <comment_count>46</comment_count>
      <attachid>40626</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-05 09:15:41 -0700</bug_when>
    <thetext>Comment on attachment 40626
Patch 2/4 - Use X Pixmap instead of QPixmap.

tools like git-send-bugzilla or bugzilla-tool post-diff/post-commits can take care of setting the correct mime type and patch checkbox for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152613</commentid>
    <comment_count>47</comment_count>
      <attachid>40626</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-06 00:22:45 -0700</bug_when>
    <thetext>Comment on attachment 40626
Patch 2/4 - Use X Pixmap instead of QPixmap.

The ChangeLog needs a little tweak though to mention that this is in the Qt windowless plugin support. I&apos;ll fix that during landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152640</commentid>
    <comment_count>48</comment_count>
      <attachid>40627</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-06 03:29:17 -0700</bug_when>
    <thetext>Comment on attachment 40627
Patch 3/4 - Add PluginQuirkUsesScreenDefaultVisual for Flash.

There are a few coding style issues left and one detail:

&gt; +
&gt; +        No new tests. (OOPS!)

Please remove this line :)



&gt; +                                   ((NPSetWindowCallbackStruct *)m_npWindow.ws_info)-&gt;depth);

Coding style :)
  

&gt; +    const int drawableDepth = ((NPSetWindowCallbackStruct *)m_npWindow.ws_info)-&gt;depth;

Same here.


&gt; +#ifndef QT_NO_XRENDER
&gt; +    static const bool useXrender = qgetenv(&quot;QT_X11_NO_XRENDER&quot;).isNull(); // Should also check for XRender &gt;= 0.5
&gt; +#else
&gt; +    static const bool useXrender = false;
&gt; +#endif

Kenneth suggested on chat that this should perhaps be useXRender?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152655</commentid>
    <comment_count>49</comment_count>
      <attachid>40709</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-06 04:32:07 -0700</bug_when>
    <thetext>Created attachment 40709
Patch 3/4 - Add PluginQuirkUsesScreenDefaultVisual for Flash (Take 2)

Renamed quirk as discussed on irc.
Fixed coding style.
Renamed to useXRender
Added &quot;[Qt] Windowless plugins: &quot; prefix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152657</commentid>
    <comment_count>50</comment_count>
      <attachid>40710</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-06 04:33:37 -0700</bug_when>
    <thetext>Created attachment 40710
Patch 4/4 -  Make painting and events work when page is zoomed. (Take 2)

Added &quot;[Qt] Windowless plugins: &quot; prefix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152662</commentid>
    <comment_count>51</comment_count>
      <attachid>40711</attachid>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-06 04:40:44 -0700</bug_when>
    <thetext>Created attachment 40711
Enable printing

Bug in Qt has been fixed by Samuel. It is already part of 4.6 branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152666</commentid>
    <comment_count>52</comment_count>
      <attachid>40709</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-06 04:43:23 -0700</bug_when>
    <thetext>Comment on attachment 40709
Patch 3/4 - Add PluginQuirkUsesScreenDefaultVisual for Flash (Take 2)


Minor coding style issue left, but I&apos;ll fix that when landing.

&gt; +        QPixmap* backingStorePixmap = static_cast&lt;QPixmap *&gt;(backingStoreDevice);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152671</commentid>
    <comment_count>53</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-10-06 04:54:31 -0700</bug_when>
    <thetext>All patches landed in 49158, 49159, 49169, 49170 and 49171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152686</commentid>
    <comment_count>54</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-06 05:50:38 -0700</bug_when>
    <thetext>Here&apos;s the TODO list:
1. -graphicssystem opengl crashes. UPDATE: It turns out that it crashes only on
my machine. This is supported by Qt.
2. QGVLauncher crashes on exit - WebCore::Chrome::repaint uses the client. The
client is alreay gone by then.
3. QGraphicsWebView works, yay! But I need a way to detect painting on qgv and
turn off transparency. Any suggestions? UPDATE: Will use pluginParent() and do
a ugly qobject_cast
4. When using ARGB visuals on tlw, mouse over crashes.  UPDATE: Should be
solved with the introduction of pluginParent() and removing winId().
5. Remove the non-transparent sync for opaque mode.
6. Context menu. UPDATE: This requires integration of context menus of gtk
within Qt. The toolkits have to sync up on mouse/keyboard grabs. Qt has to be
fixed, the Qt developers are aware of this problem (but have no solution). No
fix is required in WebKit.

Simon and I agreed that this bug is exhausted. So, I will create separate bugs
for the above TODO list items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152756</commentid>
    <comment_count>55</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-06 09:39:44 -0700</bug_when>
    <thetext>The QGVLauncher has support for flipping the view upside down.

Doing this with a windowless plugin results in the page being painted all wrong :-)

Can be tested with http://www.popup-killer-review.com/windowless-swf.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152942</commentid>
    <comment_count>56</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-06 21:14:47 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; The QGVLauncher has support for flipping the view upside down.
&gt; 
&gt; Doing this with a windowless plugin results in the page being painted all wrong
&gt; :-)
&gt; 
&gt; Can be tested with http://www.popup-killer-review.com/windowless-swf.htm

Indeed, it&apos;s TODO item 3 :)

I have a patch at https://bugs.webkit.org/show_bug.cgi?id=30149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153251</commentid>
    <comment_count>57</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-07 21:00:23 -0700</bug_when>
    <thetext>A note on the quirk mode added to flash. The problem is that flash appears to be using gdk_visual_get_system() to draw to the Drawable instead of the visual provided by us. As a result, when provided with transparent pixmap (which requires a 32-bit visual) flash fails because it uses the system default visual (for example, 24-bit).

To verify that is indeed the case, I shadowed the above gdk symbol (gdk_visual_get_system) to return a 32-bit visual. And it works with transparent pixmaps. This &apos;hack&apos; was found unsuitable for Qt/WebKit since many libraries have started using -Bsymbolic-functions and probably not possible with all platforms/compilers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153440</commentid>
    <comment_count>58</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-10-08 10:44:25 -0700</bug_when>
    <thetext>Comparing the calls to plugins in PluginView.cpp and in PluginViewQt.cpp I noticed 2 differences and I was wondering if they are intentional

In PluginView.cpp:
    JSC::JSLock::DropAllLocks dropAllLocks(&lt;b&gt;JSC::SilenceAssertionsOnly&lt;/b&gt;);
    ...
    PluginView::setCurrentPluginView(0);

In PluginViewQt.cpp:
    JSC::JSLock::DropAllLocks dropAllLocks(&lt;b&gt;false&lt;/b&gt;);
and we never call 
    PluginView::setCurrentPluginView(0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153626</commentid>
    <comment_count>59</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-10-09 00:42:07 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; Comparing the calls to plugins in PluginView.cpp and in PluginViewQt.cpp I
&gt; noticed 2 differences and I was wondering if they are intentional
&gt; 
&gt; In PluginView.cpp:
&gt;     JSC::JSLock::DropAllLocks dropAllLocks(&lt;b&gt;JSC::SilenceAssertionsOnly&lt;/b&gt;);
&gt;     ...
&gt;     PluginView::setCurrentPluginView(0);
&gt; 
&gt; In PluginViewQt.cpp:
&gt;     JSC::JSLock::DropAllLocks dropAllLocks(&lt;b&gt;false&lt;/b&gt;);
&gt; and we never call 
&gt;     PluginView::setCurrentPluginView(0);

It&apos;s not intentional. 

I don&apos;t know anything about the above code other than it locks js code for mulithread access. There is no bool argument to dropAllLocks, so it appears that it is wrong. And setCurrentPluginView(0) is also appears to be needed (I can&apos;t see what it is). I will create patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002063</commentid>
    <comment_count>60</comment_count>
    <who name="Wade Colson">wade.colson</who>
    <bug_when>2014-04-18 16:15:14 -0700</bug_when>
    <thetext>*** Bug 260998 has been marked as a duplicate of this bug. ***
Seen from the domain http://volichat.com
Page where seen: http://volichat.com/adult-chat-rooms
Marked for reference. Resolved as fixed @bugzilla.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22367</attachid>
            <date>2008-07-18 12:04:56 -0700</date>
            <delta_ts>2008-07-18 12:04:56 -0700</delta_ts>
            <desc>Zattoo&apos;s modified PluginViewWin.cpp file</desc>
            <filename>PluginViewWin.cpp</filename>
            <type>text/x-c++src</type>
            <size>26793</size>
            <attacher name="Chris Kurecka">ckurecka</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAqIENvcHlyaWdodCAoQykgMjAwOCBaYXR0b28gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAKICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAqLwoKI2lu
Y2x1ZGUgImNvbmZpZy5oIgoKI2RlZmluZSBET19UUkFDRQojaWZkZWYgRE9fVFJBQ0UKI2luY2x1
ZGUgPGNzdGRpbz4KI2RlZmluZSBUUkFDRSBxRGVidWcKI2VuZGlmCgojaWYgUExBVEZPUk0oUVQp
CiNpbmNsdWRlIDx3aW5kb3dzLmg+CgojaW5jbHVkZSA8UUFwcGxpY2F0aW9uLmg+CiNpbmNsdWRl
IDxRV2lkZ2V0Lmg+CgojaW5jbHVkZSA8V2lkZ2V0Lmg+CgpleHRlcm4gUV9DT1JFX0VYUE9SVCBI
SU5TVEFOQ0UgcVdpbkFwcEluc3QoKTsKCnZvaWQgU2V0V2luZG93UmduKFBsYXRmb3JtV2lkZ2V0
IHdpZGdldCwgSFJHTiByZ24sIEJPT0wgcmVkcmF3KQp7CiAgICA6OlNldFdpbmRvd1Jnbih3aWRn
ZXQtPndpbklkKCksIHJnbiwgcmVkcmF3KTsKfQoKdm9pZCBNb3ZlV2luZG93KFBsYXRmb3JtV2lk
Z2V0IHdpZGdldCwgaW50IG5YLCBpbnQgblksIGludCBuV2lkdGgsIGludCBuSGVpZ2h0LCBCT09M
IGJSZXBhaW50KQp7CiAgICA6Ok1vdmVXaW5kb3cod2lkZ2V0LT53aW5JZCgpLCBuWCwgblksIG5X
aWR0aCwgbkhlaWdodCwgYlJlcGFpbnQpOwp9Cgp2b2lkIFNldEZvY3VzKFBsYXRmb3JtV2lkZ2V0
IHdpZGdldCkKewogICAgOjpTZXRGb2N1cyh3aWRnZXQtPndpbklkKCkpOwp9Cgp2b2lkIFNob3dX
aW5kb3coUGxhdGZvcm1XaWRnZXQgd2lkZ2V0LCBpbnQgbkNtZFNob3cpCnsKICAgIDo6U2hvd1dp
bmRvdyh3aWRnZXQtPndpbklkKCksIG5DbWRTaG93KTsKfQoKdm9pZCBVcGRhdGVXaW5kb3coUGxh
dGZvcm1XaWRnZXQgd2lkZ2V0KQp7CiAgICA6OlVwZGF0ZVdpbmRvdyh3aWRnZXQtPndpbklkKCkp
Owp9Cgp2b2lkIERlc3Ryb3lXaW5kb3coUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQp7CiAgICA6OkRl
c3Ryb3lXaW5kb3cod2lkZ2V0LT53aW5JZCgpKTsKfQoKQk9PTCBTZXRQcm9wKFBsYXRmb3JtV2lk
Z2V0IHdpZGdldCwgTFBDVFNUUiBscFN0cmluZywgSEFORExFIGhEYXRhKQp7CiAgICByZXR1cm4g
OjpTZXRQcm9wKHdpZGdldC0+d2luSWQoKSwgbHBTdHJpbmcsIGhEYXRhKTsKfQoKTE9OR19QVFIg
R2V0V2luZG93TG9uZ1B0cihQbGF0Zm9ybVdpZGdldCB3aWRnZXQsIGludCBuSW5kZXgpCnsKICAg
IHJldHVybiA6OkdldFdpbmRvd0xvbmdQdHIod2lkZ2V0LT53aW5JZCgpLCBuSW5kZXgpOwp9CgpM
T05HX1BUUiBTZXRXaW5kb3dMb25nUHRyKFBsYXRmb3JtV2lkZ2V0IHdpZGdldCwgaW50IG5JbmRl
eCwgTE9OR19QVFIgZHdOZXdMb25nKQp7CiAgICByZXR1cm4gOjpTZXRXaW5kb3dMb25nUHRyKHdp
ZGdldC0+d2luSWQoKSwgbkluZGV4LCBkd05ld0xvbmcpOwp9CgpMT05HX1BUUiBTZXRXaW5kb3dM
b25nUHRyQShQbGF0Zm9ybVdpZGdldCB3aWRnZXQsIGludCBuSW5kZXgsIExPTkdfUFRSIGR3TmV3
TG9uZykKewogICAgcmV0dXJuIDo6U2V0V2luZG93TG9uZ1B0ckEod2lkZ2V0LT53aW5JZCgpLCBu
SW5kZXgsIGR3TmV3TG9uZyk7Cn0KCkJPT0wgSW52YWxpZGF0ZVJlY3QoUGxhdGZvcm1XaWRnZXQg
d2lkZ2V0LCBDT05TVCBSRUNUKiBscFJlY3QsIEJPT0wgYkVyYXNlKQp7CiAgICByZXR1cm4gOjpJ
bnZhbGlkYXRlUmVjdCh3aWRnZXQtPndpbklkKCksIGxwUmVjdCwgYkVyYXNlKTsKfQoKSFdORCBD
cmVhdGVXaW5kb3dFeChEV09SRCBkd0V4U3R5bGUsIExQQ1RTVFIgbHBDbGFzc05hbWUsIExQQ1RT
VFIgbHBXaW5kb3dOYW1lLAoJCURXT1JEIGR3U3R5bGUsIGludCB4LCBpbnQgeSwgaW50IG5XaWR0
aCwgaW50IG5IZWlnaHQsCgkJUGxhdGZvcm1XaWRnZXQgcGFyZW50V2lkZ2V0LCBITUVOVSBoTWVu
dSwgSElOU1RBTkNFIGhJbnN0YW5jZSwgTFBWT0lEIGxwUGFyYW0pCnsKICAgIHJldHVybiA6OkNy
ZWF0ZVdpbmRvd0V4KGR3RXhTdHlsZSwgbHBDbGFzc05hbWUsIGxwV2luZG93TmFtZSwgZHdTdHls
ZSwgeCwgeSwKICAgICAgICAgICAgbldpZHRoLCBuSGVpZ2h0LCBwYXJlbnRXaWRnZXQtPndpbklk
KCksIGhNZW51LCBoSW5zdGFuY2UsIGxwUGFyYW0pOwp9CgojZW5kaWYKCiNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCgojaW5jbHVkZSAiRG9jdW1lbnQuaCIKI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiNpbmNsdWRlICJFbGVtZW50LmgiCiNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgojaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgojaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiNpbmNsdWRlICJGcmFtZS5oIgojaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKI2luY2x1ZGUgIkltYWdlLmgiCiNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgojaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgojaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgojaW5jbHVkZSAiTW91c2VFdmVudC5oIgojaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKI2luY2x1ZGUgIlBhZ2UuaCIKI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgojaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgiCiNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCiNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgojaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgojaW5jbHVkZSAiY19pbnN0YW5jZS5oIgojaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgojaW5jbHVkZSAiU2V0dGluZ3MuaCIKI2luY2x1ZGUgInJ1
bnRpbWUuaCIKI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KI2luY2x1ZGUgPGtqcy9KU1ZhbHVlLmg+
CiNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgoKdXNpbmcgS0pTOjpFeGVjU3RhdGU7CnVzaW5n
IEtKUzo6SlNMb2NrOwp1c2luZyBLSlM6OkpTT2JqZWN0Owp1c2luZyBLSlM6OkpTVmFsdWU7CnVz
aW5nIEtKUzo6VVN0cmluZzsKCnVzaW5nIHN0ZDo6bWluOwoKdXNpbmcgbmFtZXNwYWNlIFdURjsK
Cm5hbWVzcGFjZSBXZWJDb3JlIHsKCnVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwp1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwoKY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNz
TmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7CmNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9w
ZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKCnN0YXRpYyBjb25zdCBjaGFyKiBNb3pp
bGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsg
ZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CgpzdGF0aWMgYm9v
bCByZWdpc3RlclBsdWdpblZpZXcoKQp7CglUUkFDRSgicmVnaXN0ZXJQbHVnaW5WaWV3Iik7CiAg
ICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CiAgICBpZiAo
aGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICBoYXZl
UmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKCiNpZiBQTEFURk9STShRVCkKICAgIFBhZ2U6
OnNldEluc3RhbmNlSGFuZGxlKChISU5TVEFOQ0UpKHFXaW5BcHBJbnN0KCkpKTsKI2VuZGlmCgog
ICAgQVNTRVJUKFBhZ2U6Omluc3RhbmNlSGFuZGxlKCkpOwoKICAgIFdORENMQVNTRVggd2NleDsK
CiAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKCiAgICB3Y2V4LnN0eWxlICAg
ICAgICAgID0gQ1NfREJMQ0xLUzsKICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5kb3dQ
cm9jOwogICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CiAgICB3Y2V4LmNiV25kRXh0cmEgICAg
ID0gMDsKICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBQYWdlOjppbnN0YW5jZUhhbmRsZSgpOwog
ICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7CiAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9h
ZEN1cnNvcigwLCBJRENfQVJST1cpOwogICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IChIQlJVU0gp
Q09MT1JfV0lORE9XOwogICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CiAgICB3Y2V4Lmxwc3pD
bGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7CiAgICB3Y2V4LmhJY29uU20g
ICAgICAgID0gMDsKCiAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndjZXgpOwp9CgpMUkVT
VUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQp7CglUUkFDRSgiUGx1Z2lu
Vmlld1dpbmRQcm9jIik7CiAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRf
Y2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7
CgogICAgcmV0dXJuIHBsdWdpblZpZXctPnduZFByb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0pOwp9CgpzdGF0aWMgYm9vbCBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUoVUlOVCBt
ZXNzYWdlKQp7CiAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKICAgICAgICBjYXNlIFdNX0xCVVRUT05V
UDoKICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoK
ICAgICAgICBjYXNlIFdNX0tFWVVQOgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCkxSRVNVTFQKUGx1Z2lu
Vmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKewoJVFJBQ0UoInduZFByb2MiKTsKCgkvLyA8cmRhcjovLzU3MTExMzY+IFNv
bWV0aW1lcyBGbGFzaCB3aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3JlYXRpbmcKICAgIC8v
IGEgZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNlIGl0LCB3aGljaCBjYXVz
ZXMgdGhlCiAgICAvLyBmdWxsLXNjcmVlbiB3aW5kb3cgdG8gbmV2ZXIgcmVjZWl2ZSBtb3VzZSBl
dmVudHMuIFdlIHNldC9yZWxlYXNlIGNhcHR1cmUKICAgIC8vIG9uIG1vdXNlIGRvd24vdXAgYmVm
b3JlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBwbHVnLWluIHRvIHByZXZlbnQgdGhhdC4KICAg
IHN3aXRjaCAobWVzc2FnZSkgewogICAgICAgIGNhc2UgV01fTEJVVFRPTkRPV046CiAgICAgICAg
Y2FzZSBXTV9NQlVUVE9ORE9XTjoKICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgogICAgICAg
ICAgICA6OlNldENhcHR1cmUoaFduZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug
V01fTEJVVFRPTlVQOgogICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgogICAgICAgIGNhc2UgV01f
UkJVVFRPTlVQOgogICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7CiAgICAgICAgICAgIGJy
ZWFrOwogICAgfQoKICAgIGlmIChtZXNzYWdlID09IG1fbGFzdE1lc3NhZ2UgJiYKICAgICAgICBt
X3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JT
YW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAKICAgICAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFBy
b2MpCiAgICAgICAgcmV0dXJuIDE7CgogICAgaWYgKG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYK
ICAgICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZVdN
VXNlclBsdXNPbmVNZXNzYWdlcykpIHsKICAgICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlcikK
ICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVyLnNldChuZXcgUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbih0aGlzKSk7CgogICAgICAgIG1fbWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2Fn
ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9
CgogICAgbV9sYXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFBy
b2MgPSB0cnVlOwoKICAgIC8vIElmIHRoZSBwbHVnLWluIGRvZXNuJ3QgZXhwbGljaXRseSBzdXBw
b3J0IGNoYW5naW5nIHRoZSBwb3AtdXAgc3RhdGUsIHdlIGVuYWJsZQogICAgLy8gcG9wdXBzIGZv
ciBhbGwgdXNlciBnZXN0dXJlcy4KICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUg
c3RhdGUgaW4gYSB0aW1lciwgYmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKICAgIC8vIHBvcHMg
dXAgd2luZG93cyBpbiByZXNwb25zZSB0byBhIHBvc3RlZCBtZXNzYWdlLgogICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9uIDwgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxFRF9T
VEFURSAmJgogICAgICAgIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShtZXNzYWdlKSAmJiAh
bV9wb3BQb3B1cHNTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKCiAgICAgICAgcHVzaFBvcHVwc0Vu
YWJsZWRTdGF0ZSh0cnVlKTsKCiAgICAgICAgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKICAgIH0KCiAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2luZG93IHByb2MuCiAg
ICBMUkVTVUxUIHJlc3VsdCA9IDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5XbmRQcm9jLCBoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CgogICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9j
ID0gZmFsc2U7CgogICAgcmV0dXJuIHJlc3VsdDsKfQoKdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVX
aW5kb3coKSBjb25zdAp7CglUUkFDRSgidXBkYXRlV2luZG93Iik7CiAgICBpZiAoIXBhcmVudCgp
KQogICAgICAgIHJldHVybjsKCiAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwog
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQo
KSk7CgogICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OwogICAgSW50UmVj
dCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CgogICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChm
cmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBm
cmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgp
OwogICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0Lnko
KSk7CgogICAgaWYgKG1fd2luZG93ICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8
fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkgewogICAgICAgIEhSR04gcmduOwoKICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwoKICAgICAgICAvLyBUbyBwcmV2ZW50IGZsYXNoZXMg
d2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVyaW5nIHRoZSB3aW5kb3cKICAg
ICAgICAvLyB1cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0aGUgd2luZG93IHRvIHRoZSB6ZXJv
IHJlY3QuCgogICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3QgPSAhbV9wbHVnaW4tPnF1aXJrcygp
LmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7Cgog
ICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewogICAgICAgICAgICByZ24gPSBDcmVhdGVSZWN0
UmduKDAsIDAsIDAsIDApOwoJCQk6OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCBGQUxTRSk7
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmduID0gQ3JlYXRlUmVjdFJnbihtX2NsaXBS
ZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3QucmlnaHQoKSwgbV9jbGlwUmVjdC5i
b3R0b20oKSk7CgkJCTo6U2V0V2luZG93UmduKG1fd2luZG93LCByZ24sIFRSVUUpOwogICAgICAg
IH0KCiAgICAgICAgaWYgKG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0KQoJCQk6Ok1vdmVX
aW5kb3cobV93aW5kb3csIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2lu
ZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRSVUUpOwoKICAgICAgICBp
ZiAoY2xpcFRvWmVyb1JlY3QpIHsKICAgICAgICAgICAgcmduID0gQ3JlYXRlUmVjdFJnbihtX2Ns
aXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3QucmlnaHQoKSwgbV9jbGlwUmVj
dC5ib3R0b20oKSk7CgkJCTo6U2V0V2luZG93UmduKG1fd2luZG93LCByZ24sIFRSVUUpOwogICAg
ICAgIH0KCiAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CiAgICB9Cn0KCnZvaWQgUGx1
Z2luVmlldzo6c2V0Rm9jdXMoKQp7CglUUkFDRSgic2V0Rm9jdXMiKTsKICAgIGlmIChtX3dpbmRv
dykKCQk6OlNldEZvY3VzKG1fd2luZG93KTsKCiAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cn0KCnZv
aWQgUGx1Z2luVmlldzo6c2hvdygpCnsKIAlUUkFDRSgic2hvdyIpOwogICAgbV9pc1Zpc2libGUg
PSB0cnVlOwoKICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cgJiYgbV93aW5kb3cpCgkJOjpTaG93
V2luZG93KG1fd2luZG93LCBTV19TSE9XTkEpOwoKICAgIFdpZGdldDo6c2hvdygpOwp9Cgp2b2lk
IFBsdWdpblZpZXc6OmhpZGUoKQp7CiAJVFJBQ0UoImhpZGUiKTsKICAgIG1faXNWaXNpYmxlID0g
ZmFsc2U7CgogICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKCQk6OlNob3dX
aW5kb3cobV93aW5kb3csIFNXX0hJREUpOwoKICAgIFdpZGdldDo6aGlkZSgpOwp9Cgp2b2lkIFBs
dWdpblZpZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQp7CglUUkFDRSgicGFpbnRNaXNzaW5nUGx1Z2luSWNvbiIp
OwogICAgc3RhdGljIEltYWdlKiBudWxsUGx1Z2luSW1hZ2U7CiAgICBpZiAoIW51bGxQbHVnaW5J
bWFnZSkKICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoIm51bGxQbHVnaW4iKTsKCiAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZUdlb21ldHJ5KCku
eCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQ
bHVnaW5JbWFnZS0+aGVpZ2h0KCkpOwoKICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnko
KS53aWR0aCgpIC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKICAgIGludCB5T2Zmc2V0ID0gKGZy
YW1lR2VvbWV0cnkoKS5oZWlnaHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkgLyAyOwoKICAgIGlt
YWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOwoKICAgIGlmICghcmVjdC5pbnRlcnNlY3Rz
KGltYWdlUmVjdCkpCiAgICAgICAgcmV0dXJuOwoKICAgIGNvbnRleHQtPnNhdmUoKTsKICAgIGNv
bnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CiAgICBjb250ZXh0LT5kcmF3SW1hZ2UobnVs
bFBsdWdpbkltYWdlLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7CiAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7Cn0KCmJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZlbnQp
CnsKCVRSQUNFKCJkaXNwYXRjaE5QRXZlbnQiKTsKICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KQogICAgICAgIHJldHVybiB0cnVlOwoKICAgIGJvb2wgc2hvdWxkUG9wID0g
ZmFsc2U7CgogICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9uIDwgTlBWRVJT
X0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJiBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUo
bnBFdmVudC5ldmVudCkpIHsKICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUpOwog
ICAgICAgIHNob3VsZFBvcCA9IHRydWU7CiAgICB9CgogICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3M7CiAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgYm9vbCBy
ZXN1bHQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZl
bnQpOwogICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CgogICAgaWYgKHNob3VsZFBvcCkgCiAg
ICAgICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7CgogICAgcmV0dXJuIHJlc3VsdDsKfQoKdm9p
ZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCnsKCVRSQUNFKCJwYWludCIpOwogICAgaWYgKCFtX2lzU3RhcnRlZCkgewogICAg
ICAgIC8vIERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKICAgICAgICBwYWludE1pc3Np
bmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBp
ZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICBy
ZXR1cm47CgogICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKICAgIEludFJlY3Qg
cmVjdEluV2luZG93ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50
c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKSk7CiAgICBIREMgaGRjID0gY29udGV4dC0+Z2V0V2lu
ZG93c0NvbnRleHQocmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJlbnQpOwogICAgTlBFdmVudCBu
cEV2ZW50OwoKI2lmIFBMQVRGT1JNKFdJTikKICAgIGlmICghY29udGV4dC0+aW5UcmFuc3BhcmVu
Y3lMYXllcigpKSB7CiAgICAgICAgLy8gVGhlIHBsdWdpbiBleHBlY3RzIHRoYXQgdGhlIHBhc3Nl
ZCBpbiBEQyBoYXMgd2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgIFhGT1JNIHRyYW5zZm9ybTsK
ICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5z
Zm9ybS5lRHggPSAwOwogICAgICAgIHRyYW5zZm9ybS5lRHkgPSAwOwogICAgICAgIFNldFdvcmxk
VHJhbnNmb3JtKGhkYywgJnRyYW5zZm9ybSk7CiAgICB9CiNlbmRpZgoKICAgIG1fbnBXaW5kb3cu
dHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwogICAgbV9ucFdpbmRvdy53aW5kb3cgPSBoZGM7
CgogICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29u
dGVudHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSk7CiAgICAKICAgIFdJTkRP
V1BPUyB3aW5kb3dwb3M7CiAgICBtZW1zZXQoJndpbmRvd3BvcywgMCwgc2l6ZW9mKHdpbmRvd3Bv
cykpOwoKICAgIHdpbmRvd3Bvcy54ID0gcC54KCk7CiAgICB3aW5kb3dwb3MueSA9IHAueSgpOwog
ICAgd2luZG93cG9zLmN4ID0gZnJhbWVHZW9tZXRyeSgpLndpZHRoKCk7CiAgICB3aW5kb3dwb3Mu
Y3kgPSBmcmFtZUdlb21ldHJ5KCkuaGVpZ2h0KCk7CgogICAgbnBFdmVudC5ldmVudCA9IFdNX1dJ
TkRPV1BPU0NIQU5HRUQ7CiAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyPigmd2luZG93cG9zKTsKICAgIG5wRXZlbnQud1BhcmFtID0gMDsKCiAgICBkaXNwYXRjaE5Q
RXZlbnQobnBFdmVudCk7CgogICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7Cgog
ICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOwogICAgbnBFdmVudC53UGFyYW0gPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMj4oaGRjKTsKCiAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEg
cG9pbnRlciB0byB0aGUgZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBs
dWdpbgogICAgLy8gaWdub3JlcyBpdCBzbyB3ZSBqdXN0IHBhc3MgbnVsbC4KICAgIG5wRXZlbnQu
bFBhcmFtID0gMDsKCiAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7CgogICAgY29udGV4dC0+
cmVsZWFzZVdpbmRvd3NDb250ZXh0KGhkYywgZnJhbWVHZW9tZXRyeSgpLCBtX2lzVHJhbnNwYXJl
bnQpOwp9Cgp2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCnsKCVRSQUNFKCJrZXlib2FyZEV2ZW50Iik7CiAgICBOUEV2ZW50IG5wRXZlbnQ7
CgogICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAKCiAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsKICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01f
S0VZRE9XTjsKICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CiAgICB9IGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0ga2V5dXBFdmVudCkgewogICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlV
UDsKICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKICAgIH0KCiNpZiAhQ09NUElMRVIo
TUlOR1cpCiAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzOwojZW5kaWYKICAgIGlmICghZGlz
cGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
Owp9CgpleHRlcm4gSENVUlNPUiBsYXN0U2V0Q3Vyc29yOwpleHRlcm4gYm9vbCBpZ25vcmVOZXh0
U2V0Q3Vyc29yOwoKdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
IGV2ZW50KQp7CglUUkFDRSgiaGFuZGxlTW91c2VFdmVudCIpOwogICAgTlBFdmVudCBucEV2ZW50
OwoKICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNv
bnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7
CgogICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CiAgICBucEV2
ZW50LndQYXJhbSA9IDA7CgogICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCiAgICAgICAgbnBFdmVu
dC53UGFyYW0gfD0gTUtfQ09OVFJPTDsKICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKICAgICAg
ICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKCiAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBt
b3VzZW1vdmVFdmVudCB8fAogICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVudCB8
fCAKICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbkRvd24o
KSkKICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKICAgICAgICAgICAgICAg
IGNhc2UgTGVmdEJ1dHRvbjoKICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19MQlVUVE9OOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSBNaWRkbGVCdXR0b246CiAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtf
TUJVVFRPTjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
UmlnaHRCdXR0b246CiAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJV
VFRPTjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICB9CiAgICBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KSB7CiAgICAgICAgLy8gRm9jdXMg
dGhlIHBsdWdpbgogICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgp
KQogICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1f
cGFyZW50RnJhbWUpOwogICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3Vz
ZWROb2RlKG1fZWxlbWVudCk7CiAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKICAg
ICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRU
T05ET1dOOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAg
ICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fUkJVVFRPTkRPV047CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9
IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50KSB7CiAgICAgICAgc3dpdGNo
IChldmVudC0+YnV0dG9uKCkpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRP
TlVQOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAg
ICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICB9CiAgICB9IGVsc2UKICAgICAgICByZXR1cm47CgogICAgSENVUlNPUiBjdXJy
ZW50Q3Vyc29yID0gOjpHZXRDdXJzb3IoKTsKCiNpZiAhQ09NUElMRVIoTUlOR1cpCiAgICBLSlM6
OkpTTG9jazo6RHJvcEFsbExvY2tzOwojZW5kaWYKICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQogICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwoKI2lmIFBMQVRGT1JN
KFdJTikKICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxl
ZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKICAgIC8vIGFuZCBzaW5j
ZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBo
ZXJlIHRvIHByZXZlbnQgdGhhdC4KICAgIGlnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAg
CiAgICBsYXN0U2V0Q3Vyc29yID0gOjpHZXRDdXJzb3IoKTsKI2VuZGlmCn0KCnZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKewoJVFJBQ0UoInNldFBhcmVudCIp
OwogICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKCiAgICBpZiAocGFyZW50KQogICAgICAg
IGluaXQoKTsKICAgIGVsc2UgewogICAgICAgIGlmICghbV93aW5kb3cpCiAgICAgICAgICAgIHJl
dHVybjsKCiAgICAgICAgLy8gSWYgdGhlIHBsdWctaW4gd2luZG93IG9yIG9uZSBvZiBpdHMgY2hp
bGRyZW4gaGF2ZSB0aGUgZm9jdXMsIHdlIG5lZWQgdG8gCiAgICAgICAgLy8gY2xlYXIgaXQgdG8g
cHJldmVudCB0aGUgd2ViIHZpZXcgd2luZG93IGZyb20gYmVpbmcgZm9jdXNlZCBiZWNhdXNlIHRo
YXQgY2FuCiAgICAgICAgLy8gdHJpZ2dlciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVsZW1l
bnQgaXMgYmVpbmcgZGV0YWNoZWQuCiAgICAgICAgSFdORCBmb2N1c2VkV2luZG93ID0gOjpHZXRG
b2N1cygpOwovLyNpZiBQTEFURk9STShXSU4pCi8vICAgICAgICBIV05EIGN1cnJlbnRXaW5kb3cg
PSBtX3dpbmRvdzsKLy8jZW5kaWYKCQlIV05EIGN1cnJlbnRXaW5kb3cgPSBtX3dpbmRvdzsKLy8j
aWYgUExBVEZPUk0oUVQpCi8vICAgICAgICBIV05EIGN1cnJlbnRXaW5kb3cgPSBtX3dpbmRvdy0+
d2luSWQoKTsKLy8jZW5kaWYKCQlpZiAoY3VycmVudFdpbmRvdyA9PSBmb2N1c2VkV2luZG93IHx8
IElzQ2hpbGQoY3VycmVudFdpbmRvdywgZm9jdXNlZFdpbmRvdykpewoJCQlpZiAobV9pc1Zpc2li
bGUgJiYgbV93aW5kb3cpCgkJCQk6OlNldEZvY3VzKChIV05EKTApOwoJCQllbHNlCgkJCQlTZXRG
b2N1cygoUGxhdGZvcm1XaWRnZXQpMCk7CgkJfQogICAgfQoKfQoKdm9pZCBQbHVnaW5WaWV3Ojph
dHRhY2hUb1dpbmRvdygpCnsKCVRSQUNFKCJhdHRhY2hUb1dpbmRvdyIpOwogICAgaWYgKG1fYXR0
YWNoZWRUb1dpbmRvdykKICAgICAgICByZXR1cm47CgogICAgbV9hdHRhY2hlZFRvV2luZG93ID0g
dHJ1ZTsKICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX3dpbmRvdykKCQk6OlNob3dXaW5kb3cobV93
aW5kb3csIFNXX1NIT1dOQSk7Cn0KCnZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygp
CnsKCVRSQUNFKCJkZXRhY2hGcm9tV2luZG93Iik7CiAgICBpZiAoIW1fYXR0YWNoZWRUb1dpbmRv
dykKICAgICAgICByZXR1cm47CgogICAgaWYgKG1faXNWaXNpYmxlICYmIG1fd2luZG93KQoJCTo6
U2hvd1dpbmRvdyhtX3dpbmRvdywgU1dfSElERSk7CiAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSBm
YWxzZTsKfQoKdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKewoJVFJBQ0UoInNldE5QV2luZG93UmVjdCIpOwogICAgaWYgKCFtX2lzU3RhcnRlZCkK
ICAgICAgICByZXR1cm47CgogICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOwogICAgbV9ucFdp
bmRvdy54ID0gcC54KCk7CiAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKCiAgICBtX25wV2luZG93
LndpZHRoID0gcmVjdC53aWR0aCgpOwogICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdo
dCgpOwoKICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CiAgICBtX25wV2luZG93LmNs
aXBSZWN0LnRvcCA9IDA7CiAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0
aCgpOwogICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwoKICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CiAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CiAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5z
dGFuY2UsICZtX25wV2luZG93KTsKICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKCiAg
ICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgQVNT
RVJUKG1fd2luZG93KTsKCgkJSFdORCB3aW5kOwogICAgICAgIFdORFBST0MgY3VycmVudFduZFBy
b2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKG1fd2luZG93LCBHV0xQX1dORFBST0MpOwog
ICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKICAgICAgICAg
ICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93TG9uZ1B0cihtX3dpbmRvdywg
R1dMUF9XTkRQUk9DLCAoTE9ORylQbHVnaW5WaWV3V25kUHJvYyk7CiAgICB9Cn0KCnZvaWQgUGx1
Z2luVmlldzo6c3RvcCgpCnsKCVRSQUNFKCJzdG9wIik7CiAgICBpZiAoIW1faXNTdGFydGVkKQog
ICAgICAgIHJldHVybjsKCiAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFt
cyA9IG1fc3RyZWFtczsKICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0
b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3Ry
ZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgKCppdCktPnN0b3AoKTsKICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdl
dCgpKTsKICAgIH0KCiAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CgogICAgbV9pc1N0
YXJ0ZWQgPSBmYWxzZTsKCiAgICAvLyBVbnN1YmNsYXNzIHRoZSB3aW5kb3cKICAgIGlmIChtX2lz
V2luZG93ZWQpIHsKICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0
V2luZG93TG9uZ1B0cihtX3dpbmRvdywgR1dMUF9XTkRQUk9DKTsKICAgICAgICAKICAgICAgICBp
ZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgIFNldFdp
bmRvd0xvbmdQdHIobV93aW5kb3csIEdXTFBfV05EUFJPQywgKExPTkcpbV9wbHVnaW5XbmRQcm9j
KTsKICAgIH0KCiAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKCiAg
ICAvLyBDbGVhciB0aGUgd2luZG93CiAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CiAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygp
LmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7
CiAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKGZhbHNlKTsKICAgIH0KCiAgICAvLyBEZXN0cm95IHRoZSBwbHVnaW4KICAg
IE5QU2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOwogICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
ICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2lu
c3RhbmNlLCAmc2F2ZWREYXRhKTsKICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwogICAgTE9H
X05QRVJST1IobnBFcnIpOwoKICAgIGlmIChzYXZlZERhdGEpIHsKICAgICAgICBpZiAoc2F2ZWRE
YXRhLT5idWYpCiAgICAgICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0YS0+YnVmKTsKICAgICAg
ICBOUE5fTWVtRnJlZShzYXZlZERhdGEpOwogICAgfQoKICAgIG1faW5zdGFuY2UtPnBkYXRhID0g
MDsKfQoKY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50U3RhdGljKCkKewoJVFJBQ0Uo
InVzZXJBZ2VudFN0YXRpYyIpOwogICAgcmV0dXJuIDA7Cn0KCmNvbnN0IGNoYXIqIFBsdWdpblZp
ZXc6OnVzZXJBZ2VudCgpCnsKCVRSQUNFKCJ1c2VyQWdlbnQiKTsKICAgIGlmIChtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpKQogICAg
ICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwoKICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwo
KSkKICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV91cmwpLnV0ZjgoKTsKICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cn0KCk5QRXJy
b3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1
aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYpCnsKCVRSQUNFKCJoYW5kbGVQb3N0UmVhZEZpbGUi
KTsKICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CgogICAgaWYgKGZpbGVuYW1lLnN0YXJ0
c1dpdGgoImZpbGU6Ly8vIikpCiAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmco
OCk7CgogICAgLy8gR2V0IGZpbGUgaW5mbwogICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBh
dHRyczsKICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykgPT0gMCkK
ICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CgogICAgaWYgKGF0dHJzLmR3Rmls
ZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCiAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOwoKICAgIEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVco
ZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgRklMRV9SRUFEX0RBVEEs
IEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7CiAgICAKICAgIGlmIChm
aWxlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQogICAgICAgIHJldHVybiBOUEVSUl9G
SUxFX05PVF9GT1VORDsKCiAgICBidWZmZXIucmVzaXplKGF0dHJzLm5GaWxlU2l6ZUxvdyk7Cgog
ICAgRFdPUkQgYnl0ZXNSZWFkOwogICAgaW50IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVIYW5kbGUs
IGJ1ZmZlci5kYXRhKCksIGF0dHJzLm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7CgogICAg
Q2xvc2VIYW5kbGUoZmlsZUhhbmRsZSk7CgogICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVh
ZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCiAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZP
VU5EOwoKICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKfQoKTlBFcnJvciBQbHVnaW5WaWV3Ojpn
ZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCnsKCVRSQUNF
KCJnZXRWYWx1ZVN0YXRpYyIpOwogICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cn0KCk5Q
RXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKQp7CglUUkFDRSgiZ2V0VmFsdWUiKTsKICAgIHN3aXRjaCAodmFyaWFibGUpIHsKI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0
OiB7CiAgICAgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKICAgICAgICAgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwoKICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Cgog
ICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFz
IGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4v
bnBydW50aW1lLmh0bWw+CiAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCiAgICAg
ICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwoKICAgICAg
ICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwogICAgICAgICAgICAqdiA9IHdpbmRvd1Nj
cmlwdE9iamVjdDsKCiAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKICAgICAgICB9
CgogICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogewogICAgICAgICAgICBp
ZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCiAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKCiAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAw
OwoKICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpCiAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CgogICAgICAg
ICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2Ny
aWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50
aW1lLmh0bWw+CiAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCiAgICAgICAgICAg
ICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwoKICAgICAgICAgICAg
dm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwogICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9i
amVjdDsKCiAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKICAgICAgICB9CiNlbmRp
ZgoKICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewogICAgICAgICAgICBQbGF0Zm9y
bVdpZGdldCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1XaWRnZXQqPih2YWx1ZSk7Cgog
ICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKCiAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKICAgICAgICB9CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICB9Cn0KCnZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQp7CglUUkFDRSgiaW52YWxpZGF0ZVJlY3QiKTsKICAgIGlm
ICghcmVjdCkgewogICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5s
ZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOwoKICAgIGlmIChtX2lzV2luZG93ZWQpIHsK
ICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyByLngoKSwgci55KCksIHIucmlnaHQoKSwgci5i
b3R0b20oKSB9OwoJCTo6SW52YWxpZGF0ZVJlY3QobV93aW5kb3csICZpbnZhbGlkUmVjdCwgRkFM
U0UpOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKSkgewogICAgICAgICAgICBtX2ludmFsaWRS
ZWN0cy5hcHBlbmQocik7CiAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAw
MSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7
CiAgICB9Cn0KCnZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdp
b24pCnsKCVRSQUNFKCJpbnZhbGlkYXRlUmVnaW9uIik7CiAgICBpZiAobV9pc1dpbmRvd2VkKQog
ICAgICAgIHJldHVybjsKCiAgICBSRUNUIHI7CgogICAgaWYgKEdldFJnbkJveChyZWdpb24sICZy
KSA9PSAwKSB7CiAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoci5sZWZ0LCByLnRvcCksIEludFNpemUoci5yaWdodC1y
LmxlZnQsIHIuYm90dG9tLXIudG9wKSk7CiAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHJlY3Qp
Owp9Cgp2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKewoJVFJBQ0UoImZvcmNlUmVkcmF3
Iik7CiAgICBpZiAobV9pc1dpbmRvd2VkKQogICAgICAgIFVwZGF0ZVdpbmRvdyhtX3dpbmRvdyk7
CiAgICBlbHNlCiAgICAgICAgVXBkYXRlV2luZG93KGNvbnRhaW5pbmdXaW5kb3coKSk7Cn0KClBs
dWdpblZpZXc6On5QbHVnaW5WaWV3KCkKewoJVFJBQ0UoImRlc3RydWN0b3IiKTsKICAgIHN0b3Ao
KTsKCiAgICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0cyk7CgogICAgZnJlZVN0cmluZ0FycmF5
KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFt
VmFsdWVzLCBtX3BhcmFtQ291bnQpOwoKICAgIGlmIChtX3dpbmRvdykKICAgICAgICBEZXN0cm95
V2luZG93KG1fd2luZG93KTsKCiAgICBtX3BhcmVudEZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0
c0ZvclBsdWdpbih0aGlzKTsKCiAgICBpZiAobV9wbHVnaW4gJiYgIW1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQogICAgICAgIG1fcGx1Z2lu
LT51bmxvYWQoKTsKfQoKdm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKewoJVFJBQ0UoImluaXQiKTsK
ICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKICAgICAgICByZXR1cm47CiAgICBtX2hhdmVJbml0
aWFsaXplZCA9IHRydWU7CgogICAgaWYgKCFtX3BsdWdpbikgewogICAgICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CiAgICAgICAgbV9wbHVnaW4gPSAwOwog
ICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKCFzdGFydCgpKSB7CiAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CiAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7CgogICAgICAgIERX
T1JEIGZsYWdzID0gV1NfQ0hJTEQ7CiAgICAgICAgaWYgKG1faXNWaXNpYmxlKQogICAgICAgICAg
ICBmbGFncyB8PSBXU19WSVNJQkxFOwoKI2lmIFBMQVRGT1JNKFFUKQogICAgICAgIC8vbV93aW5k
b3cgPSBuZXcgUVdpZGdldChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3co
KSk7CgkJbV93aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xh
c3NOYW1lLCAwLCBmbGFncywgMCwgMCwgMCwgMCwgbV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250
YWluaW5nV2luZG93KCktPndpbklkKCksIDAsIFBhZ2U6Omluc3RhbmNlSGFuZGxlKCksIDApOwoj
ZWxzZQogICAgICAgIG1fd2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmll
d2Rvd0NsYXNzTmFtZSwgMCwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCAwLCBtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSwg
MCwgUGFnZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CiNlbmRpZgoKICAgICAgICAvLyBDYWxsaW5n
IFNldFdpbmRvd0xvbmdQdHJBIGhlcmUgbWFrZXMgdGhlIHdpbmRvdyBwcm9jIEFTQ0lJLCB3aGlj
aCBpcyByZXF1aXJlZCBieSBhdCBsZWFzdAogICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0
b3IgcGx1Zy1pbi4KICAgICAgICBTZXRXaW5kb3dMb25nUHRyQShtX3dpbmRvdywgR1dMX1dORFBS
T0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsKCiAgICAgICAgU2V0UHJvcChtX3dpbmRvdywga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSwgdGhpcyk7CgogICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZVdpbmRvdzsKICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IG1fd2luZG93Owog
ICAgfSBlbHNlIHsKICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJs
ZTsKICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CiAgICB9CgogICAgaWYgKCFtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkp
CiAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CgogICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cn0KCn0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22368</attachid>
            <date>2008-07-18 12:05:28 -0700</date>
            <delta_ts>2008-07-18 12:05:28 -0700</delta_ts>
            <desc>Zattoo&apos;s modified PluginView.h file</desc>
            <filename>PluginView.h</filename>
            <type>text/x-chdr</type>
            <size>9473</size>
            <attacher name="Chris Kurecka">ckurecka</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAqIENvcHlyaWdodCAoQykgMjAwOCBaYXR0b28gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAKICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAqLwoKI2lm
bmRlZiBQbHVnaW5WaWV3X0gKI2RlZmluZSBQbHVnaW5WaWV3X0gKCiNpbmNsdWRlICJDU3RyaW5n
LmgiCiNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiNpbmNsdWRlICJJbnRSZWN0LmgiCiNp
bmNsdWRlICJLVVJMLmgiCiNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgojaW5jbHVkZSAiUGx1
Z2luU3RyZWFtLmgiCiNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKI2luY2x1ZGUgIlRpbWVy
LmgiCiNpbmNsdWRlICJXaWRnZXQuaCIKI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgoj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgojaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgojaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgoKbmFtZXNwYWNlIEtKUyB7CiAgICBu
YW1lc3BhY2UgQmluZGluZ3MgewogICAgICAgIGNsYXNzIEluc3RhbmNlOwogICAgfQp9CgpuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICBjbGFzcyBFbGVtZW50OwogICAgY2xhc3MgRnJhbWU7CiAgICBj
bGFzcyBLZXlib2FyZEV2ZW50OwogICAgY2xhc3MgTW91c2VFdmVudDsKICAgIGNsYXNzIEtVUkw7
CiNpZiBQTEFURk9STShXSU5fT1MpCiAgICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
OwojZW5kaWYKICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7CiAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0
OwogICAgY2xhc3MgUGx1Z2luU3RyZWFtOwogICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKICAgIGNs
YXNzIFJlc291cmNlUmVzcG9uc2U7CgogICAgZW51bSBQbHVnaW5TdGF0dXMgewogICAgICAgIFBs
dWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCiAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9h
ZFBsdWdpbiwKICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKICAgIH07Cgog
ICAgY2xhc3MgUGx1Z2luUmVxdWVzdCB7CiAgICBwdWJsaWM6CiAgICAgICAgUGx1Z2luUmVxdWVz
dChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCiAgICAg
ICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCiAgICAgICAgICAg
ICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCiAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0
aW9uKHNlbmROb3RpZmljYXRpb24pCiAgICAgICAgICAgICwgbV9zaG91bGRBbGxvd1BvcHVwcyhz
aG91bGRBbGxvd1BvcHVwcykgeyB9CiAgICBwdWJsaWM6CiAgICAgICAgY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVx
dWVzdDsgfQogICAgICAgIHZvaWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlm
eURhdGE7IH0KICAgICAgICBib29sIHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3NlbmROb3RpZmljYXRpb247IH0KICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRBbGxvd1BvcHVwczsgfQogICAgcHJpdmF0ZToKICAgICAgICBG
cmFtZUxvYWRSZXF1ZXN0IG1fZnJhbWVMb2FkUmVxdWVzdDsKICAgICAgICB2b2lkKiBtX25vdGlm
eURhdGE7CiAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CiAgICAgICAgYm9vbCBtX3No
b3VsZEFsbG93UG9wdXBzOwogICAgfTsKCiAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFdp
ZGdldCwgcHJpdmF0ZSBQbHVnaW5TdHJlYW1DbGllbnQgewogICAgcHVibGljOgogICAgICAgIHN0
YXRpYyBQbHVnaW5WaWV3KiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIGxvYWRNYW51YWxseSk7CiAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwoK
ICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5n
ZXQoKTsgfQogICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7
IH0KCiAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAg
IHN0YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOwoKICAgICAgICBQYXNzUmVm
UHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBiaW5kaW5nSW5zdGFuY2UoKTsKCiAgICAgICAg
UGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CgogICAgICAg
IC8vIE5QTiBmdW5jdGlvbnMKICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7CiAgICAgICAgTlBF
cnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOwogICAgICAg
IE5QRXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5
RGF0YSk7CiAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKICAg
ICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgTlBTdHJlYW0qKiBzdHJlYW0pOwogICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJl
YW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKICAgICAgICBOUEVycm9yIGRlc3Ryb3lTdHJl
YW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKICAgICAgICBjb25zdCBjaGFy
KiB1c2VyQWdlbnQoKTsKI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiB1c2VyQWdlbnRTdGF0aWMoKTsKI2VuZGlmCiAgICAgICAgdm9pZCBz
dGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7CiAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwojaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgICAgc3RhdGljIE5QRXJyb3IgZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKI2VuZGlmCiAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShO
UFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwogICAgICAgIHZvaWQgaW52YWxpZGF0
ZVJlY3QoTlBSZWN0Kik7CiAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsK
ICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CiAgICAgICAgdm9pZCBwdXNoUG9wdXBzRW5hYmxl
ZFN0YXRlKGJvb2wgc3RhdGUpOwogICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7
CgogICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0OwoKICAgICAgICB2b2lkIHNl
dEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7CgogICAgICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShQ
bHVnaW5TdHJlYW0qKTsKICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2lu
U3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CgogICAgICAgIC8v
IFdpZGdldCBmdW5jdGlvbnMKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShj
b25zdCBJbnRSZWN0Jik7CiAgICAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNv
bnN0OwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBzaG93KCk7CiAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogICAgICAgIHZpcnR1
YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OwogICAgICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChFdmVudCopOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xs
VmlldyopOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVG9XaW5kb3coKTsKICAgICAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVdpbmRvdygpOwoKICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQ
bHVnaW5WaWV3KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQoKI2lmIFBMQVRGT1JNKFdJTl9PUykK
ICAgICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBV
SU5ULCBXUEFSQU0sIExQQVJBTSk7CiAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKICAgICAgICBXTkRQ
Uk9DIHBsdWdpblduZFByb2MoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KI2Vu
ZGlmCgogICAgICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCiAgICAgICAgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCk7CiAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKCiAgICAg
ICAgc3RhdGljIGJvb2wgaXNDYWxsaW5nUGx1Z2luKCk7CgogICAgcHJpdmF0ZToKICAgICAgICBQ
bHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2th
Z2UqLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKCiAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMpOwogICAgICAgIHZvaWQgaW5pdCgpOwogICAgICAgIGJvb2wgc3RhcnQoKTsKICAg
ICAgICB2b2lkIHN0b3AoKTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmll
dyhQbHVnaW5WaWV3Kik7CiAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOwogICAgICAgIE5Q
RXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOwogICAgICAgIE5QRXJyb3Ig
aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYpOwogICAgICAgIHN0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiog
c3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwogICAgICAgIHZvaWQgc2V0Q2FsbGluZ1BsdWdpbihi
b29sKSBjb25zdDsKCiAgICAgICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7CiAgICAgICAgUmVmUHRy
PFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwogICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAg
ICAgICBib29sIG1faXNTdGFydGVkOwogICAgICAgIEtVUkwgbV91cmw7CiAgICAgICAgS1VSTCBt
X2Jhc2VVUkw7CiAgICAgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOwogICAgICAgIFZlY3RvcjxJ
bnRSZWN0PiBtX2ludmFsaWRSZWN0czsKCiAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVn
aW5SZXF1ZXN0Kik7CiAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdCop
OwogICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlldz4qKTsKICAg
ICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+Kik7CiAgICAg
ICAgVGltZXI8UGx1Z2luVmlldz4gbV9yZXF1ZXN0VGltZXI7CiAgICAgICAgVGltZXI8UGx1Z2lu
Vmlldz4gbV9pbnZhbGlkYXRlVGltZXI7CgogICAgICAgIHZvaWQgcG9wUG9wdXBzU3RhdGVUaW1l
ckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+Kik7CiAgICAgICAgVGltZXI8UGx1Z2luVmlldz4gbV9w
b3BQb3B1cHNTdGF0ZVRpbWVyOwoKI2lmbmRlZiBOUF9OT19DQVJCT04KICAgICAgICBib29sIGRp
c3BhdGNoTlBFdmVudChOUEV2ZW50Jik7CiNlbmRpZgogICAgICAgIHZvaWQgdXBkYXRlV2luZG93
KCkgY29uc3Q7CiAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmKTsKCiAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqKTsKICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVu
dCopOwoKICAgICAgICBpbnQgbV9tb2RlOwogICAgICAgIGludCBtX3BhcmFtQ291bnQ7CiAgICAg
ICAgY2hhcioqIG1fcGFyYW1OYW1lczsKICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKCiAg
ICAgICAgQ1N0cmluZyBtX21pbWVUeXBlOwogICAgICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7CiAg
ICAgICAgCiAgICAgICAgTlBQIG1faW5zdGFuY2U7CiAgICAgICAgTlBQX3QgbV9pbnN0YW5jZVN0
cnVjdDsKICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93OwoKICAgICAgICBWZWN0b3I8Ym9vbCwg
ND4gbV9wb3B1cFN0YXRlU3RhY2s7CgogICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVh
bT4gPiBtX3N0cmVhbXM7CiAgICAgICAgVmVjdG9yPFBsdWdpblJlcXVlc3QqPiBtX3JlcXVlc3Rz
OwoKICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKICAgICAgICBib29sIG1faXNUcmFuc3BhcmVu
dDsKICAgICAgICBib29sIG1faXNWaXNpYmxlOwogICAgICAgIGJvb2wgbV9hdHRhY2hlZFRvV2lu
ZG93OwogICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CgojaWYgUExBVEZPUk0oR1RLKSB8
fCBkZWZpbmVkKFFfV1NfWDExKQogICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKI2VuZGlmCgoj
aWYgUExBVEZPUk0oV0lOX09TKQogICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7CiAgICAgICAgV05EUFJPQyBtX3BsdWdpblduZFByb2M7
CiAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKICAgICAgICBib29sIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYzsKI2VuZGlmCgogICAgICAgIC8vUGxhdGZvcm1XaWRnZXQgbV93aW5kb3c7
IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucwoJCUhXTkQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dl
ZCBwbHVnLWlucwogICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xp
cCByZWN0IHRvIGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgogICAgICAgIG11dGFibGUgSW50
UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KCiAgICAgICAgYm9vbCBtX2xv
YWRNYW51YWxseTsKICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsK
CiAgICAgICAgYm9vbCBtX2lzSmF2YVNjcmlwdFBhdXNlZDsKCiAgICAgICAgc3RhdGljIFBsdWdp
blZpZXcqIHNfY3VycmVudFBsdWdpblZpZXc7CiAgICB9OwoKfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQoKI2VuZGlmIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33666</attachid>
            <date>2009-07-28 13:34:05 -0700</date>
            <delta_ts>2009-07-28 13:34:05 -0700</delta_ts>
            <desc>patch, not for review</desc>
            <filename>a.txt</filename>
            <type>text/plain</type>
            <size>19346</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gNDYxMzUpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQAogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBkZWZpbmVk
KFFfV1NfWDExKSAmJiBQTEFURk9STShRVCkKK2NsYXNzIFFQaXhtYXA7CisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKFdJTl9PUykgJiYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIHN0cnVjdCBIV05EX18q
IEhXTkQ7CiB0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CkBAIC0zMDIsNiArMzA2
LDkgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyNpZiBQTEFURk9STShRVCkK
KyAgICAgICAgUVBpeG1hcCogbV9kcmF3YWJsZTsKKyNlbmRpZgogICAgICAgICBib29sIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9x
dC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCShyZXZpc2lvbiA0NjEzNSkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
QEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
UGx1Z2luQ29udGFpbmVyUXQuaCIKICNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgpAQCAtNTUsMTEg
KzU3LDE4IEBACiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlICJydW50aW1l
LmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8UUtleUV2ZW50PgorI2lu
Y2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8UVdpZGdldD4K
ICNpbmNsdWRlIDxRWDExSW5mbz4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgogCisjaW5jbHVkZSA8UVBhaW50RGV2aWNlPgorI2luY2x1
ZGUgPFgxMS9YLmg+CisKKy8vI2RlZmluZSBVU0VfUElYTUFQIDEKIHVzaW5nIEpTQzo6RXhlY1N0
YXRlOwogdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKIHVzaW5nIEpTQzo6SlNMb2NrOwpAQCAtNzQs
OSArODMsMjcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorYm9vbCBQbHVnaW5W
aWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCit7CisgICAgLy8gc2FuaXR5IGNo
ZWNrCisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOworCisgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
MCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCisKIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRl
UGx1Z2luV2lkZ2V0KCkKIHsKLSAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQgfHwg
IXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKQEAgLTE0NSwxOSAr
MTcyLDE3MyBAQAogCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwotCiAgICAgaWYgKG1faXNXaW5kb3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKQogICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgZWxzZSB7CisgICAgICAg
IGlmIChtX3dpbmRvd1JlY3Qud2lkdGgoKSA9PSAwIHx8IG1fd2luZG93UmVjdCAuaGVpZ2h0KCkg
PT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBz
dGF0aWNfY2FzdDxRUGFpbnRlcio+IChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisjaWYg
VVNFX1BJWE1BUAorI2Vsc2UKKyAgICAgICAgLy9GSVhNRSAtIHN1cHBvcnQgb3RoZXIgdHlwZXMK
KyAgICAgICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKKyAgICAgICAgUVBpeG1hcCogcGl4bWFwID0g
MDsKKyAgICAgICAgc3dpdGNoIChwYWludGVyLT5kZXZpY2UoKS0+ZGV2VHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdp
ZGdldCo+KHBhaW50ZXItPmRldmljZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBwaXhtYXAgPSBzdGF0aWNfY2FzdDxRUGl4
bWFwKj4ocGFpbnRlci0+ZGV2aWNlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRp
ZgorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgICAgIFhFdmVudCBldnQ7Cisg
ICAgICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBncmFwaGljc0V2ZW50ID0gZXZ0LnhncmFwaGlj
c2V4cG9zZTsKKyAgICAgICAgZ3JhcGhpY3NFdmVudC50eXBlID0gR3JhcGhpY3NFeHBvc2U7Cisg
ICAgICAgIGdyYXBoaWNzRXZlbnQuc2VyaWFsID0gMDsKKyAgICAgICAgZ3JhcGhpY3NFdmVudC5z
ZW5kX2V2ZW50ID0gZmFsc2U7CisKKyNpZiBVU0VfUElYTUFQCisgICAgICAgIG1fZHJhd2FibGUt
PmZpbGwoKTsKKyAgICAgICAgSW50UG9pbnQgcHQgPSBmcmFtZVJlY3QoKS5sb2NhdGlvbigpOwor
ICAgICAgICAqbV9kcmF3YWJsZSA9IFFQaXhtYXA6OmdyYWJXaW5kb3cobV9wYXJlbnRGcmFtZS0+
dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCktPndpbklkKCksIHB0LngoKSwg
cHQueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgZ3JhcGhpY3NFdmVudC5kaXNwbGF5ID0gbV9kcmF3YWJsZS0+eDExSW5mbygpLmRpc3Bs
YXkoKTsKKyAgICAgICAgZ3JhcGhpY3NFdmVudC5kcmF3YWJsZSA9IG1fZHJhd2FibGUtPngxMVBp
Y3R1cmVIYW5kbGUoKTsKKyAgICAgICAgZ3JhcGhpY3NFdmVudC54ID0gMDsKKyAgICAgICAgZ3Jh
cGhpY3NFdmVudC55ID0gMDsKKyNlbHNlCisgICAgICAgIGdyYXBoaWNzRXZlbnQuZGlzcGxheSA9
IHdpZGdldCA/IHdpZGdldC0+eDExSW5mbygpLmRpc3BsYXkoKSA6IHBpeG1hcC0+eDExSW5mbygp
LmRpc3BsYXkoKTsKKyAgICAgICAgZ3JhcGhpY3NFdmVudC5kcmF3YWJsZSA9IHdpZGdldC0+aGFu
ZGxlKCk7CisgICAgICAgIGdyYXBoaWNzRXZlbnQueCA9IG1fd2luZG93UmVjdC54KCk7CisgICAg
ICAgIGdyYXBoaWNzRXZlbnQueSA9IG1fd2luZG93UmVjdC55KCk7CisjZW5kaWYKKyAgICAgICAg
Z3JhcGhpY3NFdmVudC53aWR0aCAgPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAgICAgZ3Jh
cGhpY3NFdmVudC5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIGdyYXBo
aWNzRXZlbnQuY291bnQgPSAwOworICAgICAgICBncmFwaGljc0V2ZW50Lm1ham9yX2NvZGUgPSAw
OworICAgICAgICBncmFwaGljc0V2ZW50Lm1pbm9yX2NvZGUgPSAwOworICAgICAgICBib29sIHJl
c3VsdCA9IGRpc3BhdGNoTlBFdmVudChldnQpOworI2lmIFVTRV9QSVhNQVAKKyAgICAgICAgcGFp
bnRlci0+ZHJhd1BpeG1hcCggZnJhbWVSZWN0KCksICptX2RyYXdhYmxlKTsKKyNlbmRpZgorICAg
IH0KIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1faXNXaW5kb3dl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIFhFdmVudCBldnQ7CisgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gImtleWRvd24iIHx8IGV2ZW50LT50eXBlKCkgPT0gImtleXVwIikgeworICAgICAgICBY
S2V5RXZlbnQmIGtleUV2ZW50ID0gZXZ0LnhrZXk7CisgICAgICAgIGtleUV2ZW50LnR5cGUgPSAo
ZXZlbnQtPnR5cGUoKSA9PSAia2V5ZG93biIpID8gMiA6IDM7IC8vS2V5UHJlc3MgOiBLZXlSZWxl
YXNlOyBEb2VzIG5vdCBjb21waWxlCisgICAgICAgIGtleUV2ZW50LnNlcmlhbCA9IDA7CisgICAg
ICAgIGtleUV2ZW50LnNlbmRfZXZlbnQgPSBmYWxzZTsKKyAgICAgICAga2V5RXZlbnQuZGlzcGxh
eSA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygp
LT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAgICBrZXlFdmVudC53aW5kb3cgPSBtX3BhcmVu
dEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKS0+d2luZG93KCkt
PmhhbmRsZSgpOworICAgICAgICBrZXlFdmVudC5yb290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5k
b3coKTsKKyAgICAgICAga2V5RXZlbnQuc3Vid2luZG93ID0gMDsKKyAgICAgICAga2V5RXZlbnQu
dGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICAgICAga2V5RXZlbnQueCA9IDA7CisgICAg
ICAgIGtleUV2ZW50LnkgPSAwOworICAgICAgICBrZXlFdmVudC54X3Jvb3QgPSAtMTsKKyAgICAg
ICAga2V5RXZlbnQueV9yb290ID0gLTE7CisgICAgICAgIGtleUV2ZW50LnN0YXRlID0gZXZlbnQt
PmtleUV2ZW50KCktPnF0RXZlbnQoKS0+bmF0aXZlTW9kaWZpZXJzKCk7CisgICAgICAgIGtleUV2
ZW50LmtleWNvZGUgPSBldmVudC0+a2V5RXZlbnQoKS0+cXRFdmVudCgpLT5uYXRpdmVTY2FuQ29k
ZSgpOworICAgICAgICBrZXlFdmVudC5zYW1lX3NjcmVlbiA9IHRydWU7CisgICAgICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KGV2dCkpCisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAwOworICAg
IHN3aXRjaCAoZXZlbnQtPndoaWNoKCkpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
c3RhdGUgPSBzdGF0ZSB8fCBCdXR0b24xTWFzazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlIHx8IEJ1dHRvbjJNYXNrOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHN0YXRlID0gc3Rh
dGUgfHwgQnV0dG9uM01hc2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZSB8fCBCdXR0b240TWFzazsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlIHx8IEJ1dHRv
bjVNYXNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIHN0YXRl
ID0gc3RhdGUgfHwgQ29udHJvbE1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAg
ICAgICBzdGF0ZSA9IHN0YXRlIHx8IFNoaWZ0TWFzazsKKyAgICAvLyBGSVhNRTogSGFuZGxlIEFs
dCAmIE1ldGEga2V5cworCisgICAgWEV2ZW50IGV2dDsKKyAgICBldnQueGFueS5zZXJpYWwgPSAw
OworICAgIGV2dC54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKKyAgICBldnQueGFueS5kaXNwbGF5
ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkt
PngxMUluZm8oKS5kaXNwbGF5KCk7CisgICAgZXZ0Lnhhbnkud2luZG93ID0gbV9wYXJlbnRGcmFt
ZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCktPndpbmRvdygpLT5oYW5k
bGUoKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSAibW91c2Vtb3ZlIikgeworICAgICAgICBY
TW90aW9uRXZlbnQmIG1vdGlvbkV2ZW50ID0gZXZ0Lnhtb3Rpb247CisgICAgICAgIG1vdGlvbkV2
ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIG1vdGlvbkV2ZW50LnJvb3QgPSBRWDEx
SW5mbzo6YXBwUm9vdFdpbmRvdygpOworICAgICAgICBtb3Rpb25FdmVudC5zdWJ3aW5kb3cgPSAw
OworICAgICAgICBtb3Rpb25FdmVudC50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgICAg
ICBtb3Rpb25FdmVudC54ID0gZXZlbnQtPm9mZnNldFgoKTsKKyAgICAgICAgbW90aW9uRXZlbnQu
eSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAgICAgIG1vdGlvbkV2ZW50Lnhfcm9vdCA9IGV2ZW50
LT5zY3JlZW5YKCkgLSBldmVudC0+Y2xpZW50WCgpOworICAgICAgICBtb3Rpb25FdmVudC55X3Jv
b3QgPSBldmVudC0+c2NyZWVuWSgpIC0gZXZlbnQtPmNsaWVudFkoKTsKKyAgICAgICAgbW90aW9u
RXZlbnQuc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgbW90aW9uRXZlbnQuaXNfaGludCA9IDA7Cisg
ICAgICAgIG1vdGlvbkV2ZW50LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSAibW91c2Vkb3duIiB8fCBldmVudC0+dHlwZSgpID09ICJtb3Vz
ZXVwIikgeworICAgICAgICBYQnV0dG9uRXZlbnQmIGJ1dHRvbkV2ZW50ID0gZXZ0LnhidXR0b247
CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09ICJtb3VzZWRvd24iKQorICAgICAgICAgICAg
Zm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgICAgIGJ1dHRvbkV2ZW50LnR5cGUgPSAoZXZlbnQt
PnR5cGUoKSA9PSAibW91c2Vkb3duIikgPyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7Cisg
ICAgICAgIGJ1dHRvbkV2ZW50LnJvb3QgPSBRWDExSW5mbzo6YXBwUm9vdFdpbmRvdygpOworICAg
ICAgICBidXR0b25FdmVudC5zdWJ3aW5kb3cgPSAwOworICAgICAgICBidXR0b25FdmVudC50aW1l
ID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgICAgICBidXR0b25FdmVudC54ID0gZXZlbnQtPm9m
ZnNldFgoKTsKKyAgICAgICAgYnV0dG9uRXZlbnQueSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAg
ICAgIGJ1dHRvbkV2ZW50Lnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCkgLSBldmVudC0+Y2xpZW50
WCgpOworICAgICAgICBidXR0b25FdmVudC55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpIC0gZXZl
bnQtPmNsaWVudFkoKTsKKyAgICAgICAgYnV0dG9uRXZlbnQuc3RhdGUgPSBzdGF0ZTsKKyAgICAg
ICAgYnV0dG9uRXZlbnQuYnV0dG9uID0gZXZlbnQtPndoaWNoKCk7CisgICAgICAgIGJ1dHRvbkV2
ZW50LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSAibW91c2VvdmVyIiB8fCBldmVudC0+dHlwZSgpID09ICJtb3VzZW91dCIpIHsKKyAgICAg
ICAgWENyb3NzaW5nRXZlbnQmIGNyb3NzaW5nRXZlbnQgPSBldnQueGNyb3NzaW5nOworICAgICAg
ICBjcm9zc2luZ0V2ZW50LnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSAibW91c2VvdmVyIikgPyBF
bnRlck5vdGlmeSA6IExlYXZlTm90aWZ5OworICAgICAgICBjcm9zc2luZ0V2ZW50LnJvb3QgPSBR
WDExSW5mbzo6YXBwUm9vdFdpbmRvdygpOworICAgICAgICBjcm9zc2luZ0V2ZW50LnN1YndpbmRv
dyA9IDA7CisgICAgICAgIGNyb3NzaW5nRXZlbnQudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsK
KyAgICAgICAgY3Jvc3NpbmdFdmVudC54ID0gZXZlbnQtPm9mZnNldFgoKTsKKyAgICAgICAgY3Jv
c3NpbmdFdmVudC55ID0gZXZlbnQtPm9mZnNldFkoKTsKKyAgICAgICAgY3Jvc3NpbmdFdmVudC54
X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpIC0gZXZlbnQtPmNsaWVudFgoKTsKKyAgICAgICAgY3Jv
c3NpbmdFdmVudC55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpIC0gZXZlbnQtPmNsaWVudFkoKTsK
KyAgICAgICAgY3Jvc3NpbmdFdmVudC5tb2RlID0gLTE7CisgICAgICAgIGNyb3NzaW5nRXZlbnQu
ZGV0YWlsID0gMDsKKyAgICAgICAgY3Jvc3NpbmdFdmVudC5zYW1lX3NjcmVlbiA9IHRydWU7Cisg
ICAgICAgIGNyb3NzaW5nRXZlbnQuZm9jdXMgPSBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpID8g
KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbV9lbGVtZW50KSA6
IDA7CisgICAgICAgIGNyb3NzaW5nRXZlbnQuc3RhdGUgPSBzdGF0ZTsKKyAgICB9CisgICAgZWxz
ZQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQoZXZ0KSkKKyAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0
UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKQEAgLTE2OCw5ICszNDksMTEgQEAKICAgICAgICAg
aW5pdCgpOwogfQogCisKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IElu
dFJlY3QmKQogewotICAgIC8vIElnbm9yZWQgYXMgd2UgZG9uJ3Qgd2FudCB0byBtb3ZlIGltbWVk
aWF0ZWx5LgorICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVl
ZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCkBAIC0x
ODYsMzQgKzM2OSw5MSBAQAogICAgICAgICByZXR1cm47CiAgICAgbV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2UgPSBmYWxzZTsKIAotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsK
LSAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOwot
ICAgIC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBp
bmcgd2lsbAotICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhl
IHBsdWdpbiB2aWV3Ci0gICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSghbV9j
bGlwUmVjdC5pc0VtcHR5KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2so
UVJlZ2lvbihtX2NsaXBSZWN0KSk7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBB
U1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCktPnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7CisgICAgICAgIC8vIGlmIHNldE1hc2sg
aXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAorICAgICAgICAv
LyBiZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRlIHRoZSBwbHVnaW4gdmlldwor
ICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0Lmlz
RW1wdHkoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2soUVJlZ2lv
bihtX2NsaXBSZWN0KSk7CisgICAgCisgICAgICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkg
c2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KKyAgICAgICAgLy8gc2V0TlBXaW5kb3co
KSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgorICAgICAgICBpZiAobV9ucFdpbmRvdy53aWR0
aCA9PSAtMSB8fCBtX25wV2luZG93LmhlaWdodCA9PSAtMSkgeworICAgICAgICAgICAgbV9ucFdp
bmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOworICAgICAgICAgICAgbV9ucFdpbmRv
dy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy55
ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAgICAKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0ID0gbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
bV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX2Ns
aXBSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9j
bGlwUmVjdC5oZWlnaHQoKTsKKyAgICAKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcodGhpcyk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGZhbHNlKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRv
dyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8v
IEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8K
KyAgICAgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgorICAg
ICAgICBpZiAobV9ucFdpbmRvdy53aWR0aCA9PSAtMSB8fCBtX25wV2luZG93LmhlaWdodCA9PSAt
MSkgeworICAgICAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgp
OworICAgICAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIAorI2lmIFVTRV9QSVhNQVAKKyAgICAgICAg
Ly8gbWVtb3J5IHJldXNlIGNhdXNlcyB0aGUgbmV3IHBpeG1hcCB0byByZWNlaXZlIHRoZSBzYW1l
IGFkZHJlc3MgYXMgdGhlIG9sZCBwaXhtYXAsIGZvb2xpbmcgdGhlIHBsdWdpbgorICAgICAgICBR
UGl4bWFwKiB0bXBQeCA9IDA7CisgICAgICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgICAg
ICB0bXBQeCA9IG1fZHJhd2FibGU7CisgICAgICAgICAgICBtX2RyYXdhYmxlID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBtX2RyYXdhYmxlID0gbmV3IFFQaXhtYXAobV93aW5kb3dSZWN0LndpZHRo
KCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGRlbGV0ZSB0bXBQeDsKKyAgICAg
ICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV9kcmF3YWJsZS0+eDExUGljdHVyZUhhbmRs
ZSgpOworICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2luZG93LnkgPSAw
OworICAgICAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3c2kgPSAoTlBTZXRXaW5kb3dD
YWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvOworICAgICAgICB3c2ktPmRpc3BsYXkg
PSBtX2RyYXdhYmxlLT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAgICB3c2ktPnZpc3VhbCA9
IChWaXN1YWwqKShtX2RyYXdhYmxlLT54MTFJbmZvKCkudmlzdWFsKCkpOworICAgICAgICB3c2kt
PmRlcHRoID0gbV9kcmF3YWJsZS0+eDExSW5mbygpLmRlcHRoKCk7CisgICAgICAgIHdzaS0+Y29s
b3JtYXAgPSBtX2RyYXdhYmxlLT54MTFJbmZvKCkuY29sb3JtYXAoKTsKIAotICAgIC8vIEZMQVNI
IFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KLSAgICAv
LyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2guCi0gICAgaWYgKG1fbnBX
aW5kb3cud2lkdGggPT0gLTEgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gLTEpIHsKKyNlbHNlCisg
ICAgICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5k
b3cueSA9IG1fd2luZG93UmVjdC55KCk7CisjZW5kaWYKKyAgICAKICAgICAgICAgbV9ucFdpbmRv
dy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOwogICAgICAgICBtX25wV2luZG93LmhlaWdo
dCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKyAgICAKKyAgICAKKyNpZiBVU0VfUElYTUFQCisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1f
Y2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBt
X2NsaXBSZWN0LmhlaWdodCgpOworI2Vsc2UKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0ID0gbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
bV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX2Ns
aXBSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9j
bGlwUmVjdC5oZWlnaHQoKTsKKyNlbmRpZgorICAgIAorICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwor
ICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZt
X25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwogICAgIH0KLQotICAgIG1fbnBXaW5k
b3cueCA9IG1fd2luZG93UmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0
LnkoKTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwot
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93
LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldygwKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKQEAgLTMzNiw2ICs1NzYsMTAgQEAKICAgICAgICAgKnN0YXRpY19j
YXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAgKnN0YXRpY19j
YXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwog
ICAgIH0KQEAgLTM5NSw3ICs2MzksMTAgQEAKIAogICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93
OiB7CiAgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7Ci0g
ICAgICAgICooKFhJRCAqKXcpID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCkt
PnBsYXRmb3JtV2luZG93KCktPndpbklkKCk7CisgICAgICAgIGlmIChtX2lzV2luZG93ZWQpCisg
ICAgICAgICAgICAqKChYSUQgKil3KSA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRv
dygpLT5wbGF0Zm9ybVdpbmRvdygpLT53aW5JZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICAqKChYSUQgKil3KSA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0
Zm9ybVdpbmRvdygpLT53aW5kb3coKS0+aGFuZGxlKCk7CiAgICAgICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKICAgICB9CiAKQEAgLTQxNiwyMyArNjYzLDI3IEBACiAgICAgICAgIHBsYXRmb3Jt
V2lkZ2V0KCktPnVwZGF0ZShyZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIGlu
dmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3
OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0
IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKyAgICBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3Qocik7IAogfQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
aW52YWxpZGF0ZSgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGludmFsaWRhdGUoKTsKIH0KIAogUGx1Z2luVmlldzo6
flBsdWdpblZpZXcoKQpAQCAtNDg1LDMwICs3MzYsNjEgQEAKICAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbmVlZHNYRW1iZWQp
IHsKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0KHRoaXMs
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgbV9zdGF0
dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAgICAgICByZXR1cm47CisgICAg
aWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkKKyAgICAgICAg
ICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5Db250YWluZXJRdCh0aGlzLCBtX3BhcmVu
dEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKSkpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgw
KTsKICAgICBzaG93ICgpOwogCi0gICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3NpID0g
bmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7
CisgICAgICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QgKndzaSA9IG5ldyBOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0KCk7CiAKLSAgICB3c2ktPnR5cGUgPSAwOworICAgICAgICB3c2ktPnR5
cGUgPSAwOworICAgICAgICB3c2ktPmRpc3BsYXkgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54
MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwoKTsKKyAgICAgICAgd3NpLT5kZXB0
aCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5kZXB0aCgpOworICAgICAgICB3
c2ktPmNvbG9ybWFwID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmNvbG9ybWFw
KCk7CisgICAgICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKKyAgICAKKyAgICAgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93Lndp
bmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOworICAgICAgICBt
X25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7Cisg
ICAgfQorICAgIGVsc2UgeworICAgICAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICp3c2kg
PSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwogCi0gICAgd3NpLT5kaXNwbGF5ID0g
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICB3c2ktPnZp
c3VhbCA9IChWaXN1YWwqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwo
KTsKLSAgICB3c2ktPmRlcHRoID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRl
cHRoKCk7Ci0gICAgd3NpLT5jb2xvcm1hcCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUlu
Zm8oKS5jb2xvcm1hcCgpOwotICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKKyAgICAgICAg
d3NpLT50eXBlID0gMDsKKyNpZiBVU0VfUElYTUFQCisgICAgICAgIHdzaS0+ZGlzcGxheSA9IG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpLT54MTFJ
bmZvKCkuZGlzcGxheSgpOworICAgICAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKShtX3BhcmVu
dEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKS0+eDExSW5mbygp
LnZpc3VhbCgpKTsKKyAgICAgICAgd3NpLT5kZXB0aCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpLT54MTFJbmZvKCkuZGVwdGgoKTsKKyAgICAg
ICAgd3NpLT5jb2xvcm1hcCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVdpbmRvdygpLT54MTFJbmZvKCkuY29sb3JtYXAoKTsKKyNlbHNlCisgICAgICAgIHdz
aS0+ZGlzcGxheSA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVdpbmRvdygpLT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAgICB3c2ktPnZpc3VhbCA9IChW
aXN1YWwqKShtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1XaW5k
b3coKS0+eDExSW5mbygpLnZpc3VhbCgpKTsKKyAgICAgICAgd3NpLT5kZXB0aCA9IG1fcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpLT54MTFJbmZvKCku
ZGVwdGgoKTsKKyAgICAgICAgd3NpLT5jb2xvcm1hcCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpLT54MTFJbmZvKCkuY29sb3JtYXAoKTsKKyNl
bmRpZgorICAgICAgICBtX25wV2luZG93LndzX2luZm8gPSB3c2k7CisgICAgCisgICAgICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworI2lmIFVTRV9QSVhNQVAKKyAg
ICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworI2Vsc2UgICAgICAgIAorICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9ICh2b2lkKiltX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1XaW5kb3coKS0+aGFuZGxlKCk7CisjZW5kaWYKKyAgICAgICAgbV9ucFdpbmRv
dy53aWR0aCA9IC0xOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworICAgIH0KIAot
ICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKLSAgICBtX25wV2luZG93
LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOwotICAgIG1f
bnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOwotCiAgICAg
aWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwpKSkgewogICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKICAgICAgICAg
c2V0TlBXaW5kb3dJZk5lZWRlZCgpOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNp
b24gNDYxMzUpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbGlm
IFhQX1VOSVgKICAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVsbC1w
YWdlLgotICAgIGlmIChtX21vZGUgPT0gTlBfRlVMTCkKKyAgICBpZiAobV9tb2RlID09IE5QX0ZV
TEwgfHwgIW1faXNXaW5kb3dlZCkKICAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOwogI2Vu
ZGlmCiB9CkBAIC0xNDcsNiArMTQ3LDcgQEAKICAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNLZXli
b2FyZEV2ZW50KCkpCiAgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5
Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisgICAgLy9GSVhNRTogRm9jdXMgRXZlbnRzCiB9CiAKIGJv
b2wgUGx1Z2luVmlldzo6c3RhcnQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34003</attachid>
            <date>2009-08-03 14:14:27 -0700</date>
            <delta_ts>2009-08-03 14:29:07 -0700</delta_ts>
            <desc>Implement keyboard event forwarding for windowless plugins</desc>
            <filename>0001-2009-08-03-Kenneth-Rohde-Christiansen-kenneth-web.patch</filename>
            <type>text/plain</type>
            <size>5062</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">RnJvbSAzNDU5ZWZiMzY0MTAzODQzMzVmNGQxMzVmZjkwYzY1ZTJlNGVhZmVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiA8a2VubmV0aEB3
ZWJraXQub3JnPgpEYXRlOiBNb24sIDMgQXVnIDIwMDkgMTg6MDg6MzAgLTAzMDAKU3ViamVjdDog
W1BBVENIXSAyMDA5LTA4LTAzICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhA
d2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAg
IEltcGxlbWVudCBrZXlib2FyZCBldmVudCBmb3J3YXJkaW5nIGZvciB3aW5kb3dsZXNzIHBsdWdp
bnMKICAgICAgICBmb3IgdGhlIFF0IHBvcnQuCgogICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwOgogICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQp
OgogICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRYRXZlbnRGaWVsZHMpOgogICAgICAgIChXZWJD
b3JlOjpzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyk6CiAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgogICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVNb3VzZUV2ZW50KToKICAgICAgICAqIHhtbC9OYXRpdmVYUGF0aE5TUmVzb2x2ZXIu
Y3BwOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgIHwgICAxNSArKysr
KysrKwogV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAgfCAgIDY4ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgODEgaW5zZXJ0aW9u
cygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJjN2U0OWQuLmM2MDFhOGIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MDktMDgtMDMgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBrZXlib2FyZCBldmVudCBmb3J3YXJkaW5nIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMKKyAg
ICAgICAgZm9yIHRoZSBRdCBwb3J0LgorCisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFhFdmVudEZpZWxkcyk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAqIHhtbC9OYXRpdmVYUGF0aE5TUmVzb2x2
ZXIuY3BwOgorCiAyMDA5LTA4LTAzICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggNzg4MmM4Mi4uOGE5OTVkMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbHVnaW5D
b250YWluZXJRdC5oIgogI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZS5oIgpAQCAtNTUsMTAgKzU2LDEyIEBACiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5j
bHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8UVgxMUluZm8+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUu
aD4KKyNpbmNsdWRlIDxYMTEvWC5oPgogCiB1c2luZyBKU0M6OkV4ZWNTdGF0ZTsKIHVzaW5nIEpT
Qzo6SW50ZXJwcmV0ZXI7CkBAIC0xNTAsMTQgKzE1Myw3NSBAQCB2b2lkIFBsdWdpblZpZXc6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAg
ICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNo
TlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZmFsc2UpOworCisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBi
b29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCk7CisgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CisKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisKK3ZvaWQgc2V0U2hhcmVk
WEV2ZW50RmllbGRzKFhFdmVudCYgeEV2ZW50LCBRV2lkZ2V0KiBob3N0V2luZG93KQoreworICAg
IHhFdmVudC54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJl
cXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAgeEV2ZW50Lnhhbnkuc2VuZF9ldmVudCA9
IGZhbHNlOworICAgIHhFdmVudC54YW55LmRpc3BsYXkgPSBob3N0V2luZG93LT54MTFJbmZvKCku
ZGlzcGxheSgpOworICAgIC8vIE5PVEU6IGV2ZW50Lnhhbnkud2luZG93IGRvZXNuJ3QgYWx3YXlz
IHJlc3BvbmQgdG8gdGhlIC53aW5kb3cgcHJvcGVydHkgb2Ygb3RoZXIgWEV2ZW50J3MKKyAgICAv
LyBidXQgZG9lcyBpbiB0aGUgY2FzZSBvZiBLZXlQcmVzcywgS2V5UmVsZWFzZSwgQnV0dG9uUHJl
c3MsIEJ1dHRvblJlbGVhc2UsIGFuZCBNb3Rpb25Ob3RpZnkKKyAgICAvLyBldmVudHM7IHRodXMs
IHRoaXMgaXMgcmlnaHQ6CisgICAgeEV2ZW50Lnhhbnkud2luZG93ID0gaG9zdFdpbmRvdy0+d2lu
ZG93KCktPmhhbmRsZSgpOworfQorCit2b2lkIHNldFhLZXlFdmVudFNwZWNpZmljRmllbGRzKFhF
dmVudCYgeEV2ZW50LCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBRS2V5RXZlbnQqIHFL
ZXlFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpLT5xdEV2ZW50KCk7CisKKyAgICB4RXZlbnQueGtl
eS5yb290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5kb3coKTsKKyAgICB4RXZlbnQueGtleS5zdWJ3
aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdworICAgIHhFdmVudC54a2V5LnRp
bWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBxS2V5RXZl
bnQtPm5hdGl2ZU1vZGlmaWVycygpOworICAgIHhFdmVudC54a2V5LmtleWNvZGUgPSBxS2V5RXZl
bnQtPm5hdGl2ZVNjYW5Db2RlKCk7CisgICAgeEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVl
OworCisgICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBhcmUg
c3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cKKyAgICAvLyBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVycyBv
ZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAorICAgIC8vIHNldCB0byB0aGVpciBub3Jt
YWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRpb24u
CisgICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50
CisgICAgeEV2ZW50LnhrZXkueCA9IDA7CisgICAgeEV2ZW50LnhrZXkueSA9IDA7CisgICAgeEV2
ZW50LnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQueGtleS55X3Jvb3QgPSAwOworfQorCiB2
b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSAia2V5ZG93biIgJiYgZXZlbnQt
PnR5cGUoKSAhPSAia2V5dXAiKQorICAgICAgICByZXR1cm47CisKKyAgICBYRXZlbnQgbnBFdmVu
dDsgLy8gT24gVU5JWCBOUEV2ZW50IGlzIGEgdHlwZWRlZiBmb3IgWEV2ZW50LgorCisgICAgbnBF
dmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gImtleWRvd24iKSA/IDIgOiAzOyAvLyBpbnRz
IGFzIFF0IHVuc2V0cyBLZXlQcmVzcyBhbmQgS2V5UmVsZWFzZQorICAgIHNldFNoYXJlZFhFdmVu
dEZpZWxkcyhucEV2ZW50LCBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1XaW5kb3coKSk7CisgICAgc2V0WEtleUV2ZW50U3BlY2lmaWNGaWVsZHMobnBFdmVudCwg
ZXZlbnQpOworCisgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34004</attachid>
            <date>2009-08-03 14:29:07 -0700</date>
            <delta_ts>2009-08-03 14:58:34 -0700</delta_ts>
            <desc>Implement keyboard event forwarding for windowless plugins</desc>
            <filename>forward-events.patch</filename>
            <type>text/plain</type>
            <size>5100</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">RnJvbSBlYjIzMTdmNGZhNzI2MzUxNjZhYjdjZGUyMWQxODI5YTI5NTdkMTJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiA8a2VubmV0aEB3
ZWJraXQub3JnPgpEYXRlOiBNb24sIDMgQXVnIDIwMDkgMTg6MDg6MzAgLTAzMDAKU3ViamVjdDog
W1BBVENIXSAyMDA5LTA4LTAzICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhA
d2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAg
IEJhc2VkIG9uIHdvcmsgbXkgWWFlbCBBaGFyb24uCgogICAgICAgIEltcGxlbWVudCBrZXlib2Fy
ZCBldmVudCBmb3J3YXJkaW5nIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMKICAgICAgICBmb3IgdGhl
IFF0IHBvcnQuCgogICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwOgogICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgogICAgICAgIChXZWJDb3Jl
OjpzZXRTaGFyZWRYRXZlbnRGaWVsZHMpOgogICAgICAgIChXZWJDb3JlOjpzZXRYS2V5RXZlbnRT
cGVjaWZpY0ZpZWxkcyk6CiAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQpOgogICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50
KToKICAgICAgICAqIHhtbC9OYXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwOgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgIHwgICAxNiArKysrKysrKwogV2ViQ29yZS9wbHVn
aW5zL3F0L1BsdWdpblZpZXdRdC5jcHAgfCAgIDY4ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgODIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGJjN2U0OWQuLjg3MzcwZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDgtMDMgIEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2VkIG9uIHdvcmsgbXkgWWFlbCBB
aGFyb24uCisKKyAgICAgICAgSW1wbGVtZW50IGtleWJvYXJkIGV2ZW50IGZvcndhcmRpbmcgZm9y
IHdpbmRvd2xlc3MgcGx1Z2lucworICAgICAgICBmb3IgdGhlIFF0IHBvcnQuCisKKyAgICAgICAg
KiBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkWEV2ZW50
RmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFhLZXlFdmVudFNwZWNpZmljRmllbGRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisKIDIwMDktMDgt
MDMgIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcApp
bmRleCA3ODgyYzgyLi44YTk5NWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luVmlld1F0LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcApA
QCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbnRhaW5lclF0LmgiCiAjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCkBAIC01NSwx
MCArNTYsMTIgQEAKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1bnRp
bWUuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CiAj
aW5jbHVkZSA8UVdpZGdldD4KICNpbmNsdWRlIDxRWDExSW5mbz4KICNpbmNsdWRlIDxydW50aW1l
L0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgPFgxMS9Y
Lmg+CiAKIHVzaW5nIEpTQzo6RXhlY1N0YXRlOwogdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKQEAg
LTE1MCwxNCArMTUzLDc1IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICBzZXROUFdpbmRvd0lmTmVl
ZGVkKCk7CiB9CiAKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2
ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7
CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKworICAg
IHJldHVybiBhY2NlcHRlZDsKK30KKwordm9pZCBzZXRTaGFyZWRYRXZlbnRGaWVsZHMoWEV2ZW50
JiB4RXZlbnQsIFFXaWRnZXQqIGhvc3RXaW5kb3cpCit7CisgICAgeEV2ZW50Lnhhbnkuc2VyaWFs
ID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQgYnkg
WCBTZXJ2ZXIKKyAgICB4RXZlbnQueGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7CisgICAgeEV2ZW50
LnhhbnkuZGlzcGxheSA9IGhvc3RXaW5kb3ctPngxMUluZm8oKS5kaXNwbGF5KCk7CisgICAgLy8g
Tk9URTogZXZlbnQueGFueS53aW5kb3cgZG9lc24ndCBhbHdheXMgcmVzcG9uZCB0byB0aGUgLndp
bmRvdyBwcm9wZXJ0eSBvZiBvdGhlciBYRXZlbnQncworICAgIC8vIGJ1dCBkb2VzIGluIHRoZSBj
YXNlIG9mIEtleVByZXNzLCBLZXlSZWxlYXNlLCBCdXR0b25QcmVzcywgQnV0dG9uUmVsZWFzZSwg
YW5kIE1vdGlvbk5vdGlmeQorICAgIC8vIGV2ZW50czsgdGh1cywgdGhpcyBpcyByaWdodDoKKyAg
ICB4RXZlbnQueGFueS53aW5kb3cgPSBob3N0V2luZG93LT53aW5kb3coKS0+aGFuZGxlKCk7Cit9
CisKK3ZvaWQgc2V0WEtleUV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50JiB4RXZlbnQsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQoreworICAgIFFLZXlFdmVudCogcUtleUV2ZW50ID0gZXZlbnQtPmtl
eUV2ZW50KCktPnF0RXZlbnQoKTsKKworICAgIHhFdmVudC54a2V5LnJvb3QgPSBRWDExSW5mbzo6
YXBwUm9vdFdpbmRvdygpOworICAgIHhFdmVudC54a2V5LnN1YndpbmRvdyA9IDA7IC8vIHdlIGhh
dmUgbm8gY2hpbGQgd2luZG93CisgICAgeEV2ZW50LnhrZXkudGltZSA9IGV2ZW50LT50aW1lU3Rh
bXAoKTsKKyAgICB4RXZlbnQueGtleS5zdGF0ZSA9IHFLZXlFdmVudC0+bmF0aXZlTW9kaWZpZXJz
KCk7CisgICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IHFLZXlFdmVudC0+bmF0aXZlU2NhbkNvZGUo
KTsKKyAgICB4RXZlbnQueGtleS5zYW1lX3NjcmVlbiA9IHRydWU7CisKKyAgICAvLyBOT1RFOiBB
cyB0aGUgWEV2ZW50cyBzZW50IHRvIHRoZSBwbHVnLWluIGFyZSBzeW50aGVzaXplZCBhbmQgdGhl
cmUgaXMgbm90IGEgbmF0aXZlIHdpbmRvdworICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBs
dWctaW4gcmVjdGFuZ2xlLCBzb21lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBYRXZlbnQgc3RydWN0
dXJlcyBhcmUgbm90CisgICAgLy8gc2V0IHRvIHRoZWlyIG5vcm1hbCBYc2VydmVyIHZhbHVlcy4g
ZS5nLiBLZXkgZXZlbnRzIGRvbid0IGhhdmUgYSBwb3NpdGlvbi4KKyAgICAvLyBzb3VyY2U6IGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL05QRXZlbnQKKyAgICB4RXZlbnQueGtleS54
ID0gMDsKKyAgICB4RXZlbnQueGtleS55ID0gMDsKKyAgICB4RXZlbnQueGtleS54X3Jvb3QgPSAw
OworICAgIHhFdmVudC54a2V5Lnlfcm9vdCA9IDA7Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChldmVudC0+dHlwZSgpICE9ICJrZXlkb3duIiAmJiBldmVudC0+dHlwZSgpICE9ICJrZXl1cCIp
CisgICAgICAgIHJldHVybjsKKworICAgIFhFdmVudCBucEV2ZW50OyAvLyBPbiBVTklYIE5QRXZl
bnQgaXMgYSB0eXBlZGVmIGZvciBYRXZlbnQuCisKKyAgICBucEV2ZW50LnR5cGUgPSAoZXZlbnQt
PnR5cGUoKSA9PSAia2V5ZG93biIpID8gMiA6IDM7IC8vIGludHMgYXMgUXQgdW5zZXRzIEtleVBy
ZXNzIGFuZCBLZXlSZWxlYXNlCisgICAgc2V0U2hhcmVkWEV2ZW50RmllbGRzKG5wRXZlbnQsIG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAg
ICBzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyhucEV2ZW50LCBldmVudCk7CisKKyAgICBpZiAo
IWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50
KiBldmVudCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xs
VmlldyogcGFyZW50KQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40102</attachid>
            <date>2009-09-25 03:02:38 -0700</date>
            <delta_ts>2009-09-27 22:01:04 -0700</delta_ts>
            <desc>Windowless patch - makes painting work</desc>
            <filename>windowless.patch</filename>
            <type>text/plain</type>
            <size>14540</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAppbmRleCA2MTJhOWQ3Li4wMjIyODE1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKysrIGIvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblBhY2thZ2UuY3BwCkBAIC0xMDgsNiArMTA4LDkgQEAgUGx1Z2luUGFja2FnZTo6
UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlm
aWVkKQogICAgICwgbV9tb2R1bGUoMCkKICAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmll
ZCkKICAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxp
YnJhcnlUaW1lckZpcmVkKQorI2lmIGRlZmluZWQoUV9XU19YMTEpCisgICAgLCBtX3BsdWdpbkRp
c3BsYXkoMCkKKyNlbmRpZgogewogICAgIG1fZmlsZU5hbWUgPSBwYXRoR2V0RmlsZU5hbWUobV9w
YXRoKTsKICAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgo
KSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCmluZGV4
IDNhZmM1N2YuLjgzNjEyMWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaApAQCAtNzEsNiArNzEs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsdWdpblF1aXJrU2V0IHF1aXJrcygp
IGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzOyB9CiAgICAgICAgIGNvbnN0IFBsYXRmb3JtTW9kdWxl
VmVyc2lvbiYgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbjsgfQogCisj
aWYgZGVmaW5lZChRX1dTX1gxMSkKKyAgICAgICAgdm9pZCAqcGx1Z2luRGlzcGxheSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGx1Z2luRGlzcGxheTsgfQorI2VuZGlmCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1v
ZGlmaWVkKTsKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKQEAgLTEwNyw2ICsxMTAsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlPiBtX2ZyZWVM
aWJyYXJ5VGltZXI7CiAKICAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7CisKKyNpZiBk
ZWZpbmVkKFFfV1NfWDExKQorICAgICAgICB2b2lkICptX3BsdWdpbkRpc3BsYXk7CisjZW5kaWYK
ICAgICB9OwogCiAgICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAppbmRleCBjMjhlNTg2Li5iOTU3MjJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0x
MjcsOCArMTI3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKICAgICAvLyBPbiBXaW5kb3dzLCBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdl
IGdlb21ldHJ5LgogICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbGlmIFhQX1VOSVgKLSAg
ICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVsbC1wYWdlLgotICAgIGlm
IChtX21vZGUgPT0gTlBfRlVMTCkKKyAgICBpZiAobV9tb2RlID09IE5QX0ZVTEwgfHwgIW1faXNX
aW5kb3dlZCkKICAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOwogI2VuZGlmCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCA1NGMxMDY1Li5lNDM5YzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAg
LTUxLDYgKzUxLDEwIEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKIHR5cGVk
ZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZW5kaWYKIAorI2lmIGRl
ZmluZWQoUV9XU19YMTEpCisjaW5jbHVkZSA8UVBpeG1hcD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
SlNDIHsKICAgICBuYW1lc3BhY2UgQmluZGluZ3MgewogICAgICAgICBjbGFzcyBJbnN0YW5jZTsK
QEAgLTMxNSw2ICszMTksNyBAQCBwcml2YXRlOgogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICAg
ICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKKyAgICAgICAgUVBpeG1hcCBt
X2RyYXdhYmxlOwogI2VuZGlmCiAKICAgICAgICAgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUg
Y2xpcCByZWN0IHRvIGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luUGFja2FnZVF0LmNwcAppbmRleCA3ZjVhN2I5Li5lMzJkYmE0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlh
cy5pbj4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNiArOTgsMjUgQEAg
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKIAogICAgIG1faXNMb2FkZWQgPSB0cnVlOwogCisj
aWYgZGVmaW5lZChRX1dTX1gxMSkKKyAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQgcnVu
IHVzaW5nIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbi4gTGV0J3MgdHJ5IHRvIAorICAgIC8vIGRl
dGVjdCB0aGUgZ2RrIGRpc3BsYXkgZm9yIGZsYXNoLiBXZSB0cnkgdG8gbG9hZCB0aGUgZ2RrIHgx
MSBsaWJyYXJ5IGR5bmFtaWNhbGx5CisgICAgLy8gYW5kIGdldCBpdCdzIGRlZmF1bHQgY29ubmVj
dGlvbi4gV2UgY2FuIGRvIG11Y2ggYmV0dGVyOgorICAgIC8vIDEuIFF0IGNhbiB0cnkgdG8gc3Rh
cnQgdXAgd2l0aCBnZGsncyBYIGNvbm5lY3Rpb24uIFRoaXMgZG9lcyBub3Qgd29yayBhdG0gKFF0
IGJ1ZykuCisgICAgLy8gMi4gV2UgY2FuIHVzZSBSVExEX05PTE9BRCB0byBwcmV2ZW50IGxvYWRp
bmcgZ2RrLCBpZiB0aGUgcGx1Z2luIGRvZXNuJ3QgdXNlIGdkay4KKworICAgIC8vIFRoZSBjb2Rl
IGJlbG93IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhpcyBvbmU6CisgICAgLy8gRGlzcGxheSAq
Z2RrRGlzcGxheSA9IGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSk7CisgICAgUUxpYnJhcnkgbGlicmFyeSgibGliZ2RrLXgxMS0yLjAiKTsKKyAg
ICBpZiAobGlicmFyeS5sb2FkKCkpIHsKKyAgICAgICAgdHlwZWRlZiB2b2lkICooKmdka19kaXNw
bGF5X2dldF9kZWZhdWx0X3B0cikoKTsKKyAgICAgICAgZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRf
cHRyIGdka19kaXNwbGF5X2dldF9kZWZhdWx0ID0gKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0
cikgbGlicmFyeS5yZXNvbHZlKCJnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCIpOworICAgICAgICB0
eXBlZGVmIHZvaWQgKigqZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheV9wdHIpKHZvaWQgKik7
CisgICAgICAgIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXlfcHRyIGdka194MTFfZGlzcGxh
eV9nZXRfeGRpc3BsYXkgPSAoZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheV9wdHIpIGxpYnJh
cnkucmVzb2x2ZSgiZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheSIpOworICAgICAgICBtX3Bs
dWdpbkRpc3BsYXkgPSAoRGlzcGxheSAqKSBnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5KGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgTlBfSW5pdGlh
bGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKICAgICBOUEVycm9yIG5wRXJyOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4IGZkZWFjMmYuLmNkZjk2ZTQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmlu
PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw2ICs2MCw5IEBACiAjaW5j
bHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8UVgxMUluZm8+
CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUg
PFFMYWJlbD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNWYWx1ZS5oPgogI2luY2x1ZGUgPFgxMS9YLmg+CkBAIC03OSw3ICs4Myw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0
KCkKIHsKLSAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQgfHwgIXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpCisgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
QVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKQEAgLTE0OSw4ICsxNTMsNTQgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1faXNXaW5kb3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQorICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpOwogICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBRUGFpbnRlciAqcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIFFQb2ludCBvZmZzZXQ7CisgICAgUVBhaW50RGV2aWNlICpiYWNraW5nU3Rv
cmUgPSAgUVBhaW50ZXI6OnJlZGlyZWN0ZWQocGFpbnRlci0+ZGV2aWNlKCksICZvZmZzZXQpOwor
ICAgIG9mZnNldCA9IC1vZmZzZXQ7CisgICAgaWYgKCFiYWNraW5nU3RvcmUgfHwgYmFja2luZ1N0
b3JlLT5kZXZUeXBlKCkgIT0gUUludGVybmFsOjpQaXhtYXApIHsKKyAgICAgICAgcmV0dXJuOyAv
LyBGSVhNRSEKKyAgICB9CisgICAgLy9wcmludGYoInBlIC0gd2luZG93IHJlY3QgLSAlZCAlZCAl
ZCAlZCBcbiIsIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVj
dC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgIC8vcHJpbnRmKCJwZSAtIGNs
aXAgcmVjdCAtICVkICVkICVkICVkIFxuIiwgbV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgp
LCBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJlY3QuaGVpZ2h0KCkpOworICAgIC8vcHJpbnRm
KCJyZWRpcmVjdGlvbiBvZmZzZXQgaXMgJWQgJWRcbiIsIG9mZnNldC54KCksIG9mZnNldC55KCkp
OworCisgICAgUVBpeG1hcCAqcGl4bWFwID0gc3RhdGljX2Nhc3Q8UVBpeG1hcCAqPihiYWNraW5n
U3RvcmUpOworICAgIERpc3BsYXkgKnBsdWdpbkRpc3BsYXkgPSAoRGlzcGxheSAqKSBtX3BsdWdp
bi0+cGx1Z2luRGlzcGxheSgpOworICAgIGNvbnN0IGJvb2wgZmx1c2ggPSBwbHVnaW5EaXNwbGF5
ICYmIHBsdWdpbkRpc3BsYXkgIT0gUVgxMUluZm86OmRpc3BsYXkoKTsKKworICAgIEdDIGdjID0g
WERlZmF1bHRHQyhRWDExSW5mbzo6ZGlzcGxheSgpLCBRWDExSW5mbzo6YXBwU2NyZWVuKCkpOwor
ICAgIFhDb3B5QXJlYShRWDExSW5mbzo6ZGlzcGxheSgpLCBwaXhtYXAtPmhhbmRsZSgpLCBtX2Ry
YXdhYmxlLmhhbmRsZSgpLCBnYywgCisgICAgICAgICAgICAgIG9mZnNldC54KCkgKyBtX3dpbmRv
d1JlY3QueCgpLCBvZmZzZXQueSgpICsgbV93aW5kb3dSZWN0LnkoKSwgCisgICAgICAgICAgICAg
IG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIDAsIDApOworCisg
ICAgaWYgKGZsdXNoKSB7CisgICAgICAgIFFBcHBsaWNhdGlvbjo6c3luY1goKTsgLy8gZmx1c2gg
dGhlIGFib3ZlIGNoYW5nZXMKKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNl
dCgmeGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisgICAgeGV2ZW50LnhncmFwaGljc2V4cG9z
ZS50eXBlID0gR3JhcGhpY3NFeHBvc2U7CisgICAgeGV2ZW50LnhncmFwaGljc2V4cG9zZS5kaXNw
bGF5ID0gUVgxMUluZm86OmRpc3BsYXkoKTsKKyAgICB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlLmRy
YXdhYmxlID0gbV9kcmF3YWJsZS5oYW5kbGUoKTsKKyAgICB4ZXZlbnQueGdyYXBoaWNzZXhwb3Nl
LnggPSBtX2NsaXBSZWN0LngoKTsKKyAgICB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlLnkgPSBtX2Ns
aXBSZWN0LnkoKTsKKyAgICB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlLndpZHRoID0gbV9jbGlwUmVj
dC53aWR0aCgpOworICAgIHhldmVudC54Z3JhcGhpY3NleHBvc2UuaGVpZ2h0ID0gbV9jbGlwUmVj
dC5oZWlnaHQoKTsKKyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChmbHVz
aCkgeworICAgICAgICBYU3luYyhwbHVnaW5EaXNwbGF5LCBGYWxzZSk7IC8vIGZsdXNoIGNoYW5n
ZXMgYnkgcGx1Z2luCisgICAgfQorCisgICAgWENvcHlBcmVhKFFYMTFJbmZvOjpkaXNwbGF5KCks
IG1fZHJhd2FibGUuaGFuZGxlKCksIHBpeG1hcC0+aGFuZGxlKCksIGdjLAorICAgICAgICAgICAg
ICAwLCAwLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAg
ICAgICAgICAgICBvZmZzZXQueCgpICsgbV93aW5kb3dSZWN0LngoKSwgb2Zmc2V0LnkoKSArIG1f
d2luZG93UmVjdC55KCkpOwogfQogCiAvLyBUT0RPOiBVbmlmeSBhY3Jvc3MgcG9ydHMuCkBAIC0x
NjMsNyArMjEzLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYg
ZXZlbnQpCiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2Up
OwogCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBib29sIGFjY2VwdGVkID0gbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCk7CisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwogICAgIHNldENhbGxpbmdQbHVn
aW4oZmFsc2UpOwogCiAgICAgcmV0dXJuIGFjY2VwdGVkOwpAQCAtMjM1LDcgKzI4NSw4IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKIAogdm9pZCBQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgLy8gSWdub3Jl
ZCBhcyB3ZSBkb24ndCB3YW50IHRvIG1vdmUgaW1tZWRpYXRlbHkuCisgICAgaWYgKCFtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTI1MSwxMiArMzAyLDE0IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKICAgICBtX2hh
c1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOwogCi0gICAgQVNTRVJUKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEdlb21ldHJ5KG1f
d2luZG93UmVjdCk7Ci0gICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBRUmVn
aW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgLy8gYmUgcGVyZm9ybWVkLCBzbyBpbiB0aGF0IGNh
c2Ugd2UgaGlkZSB0aGUgcGx1Z2luIHZpZXcKLSAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5z
ZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7Ci0gICAgcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKyAgICBpZiAobV9pc1dpbmRvd2Vk
KSB7CisgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZ2RldCgpKTsKKyAgICAgICAgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0cnkobV93aW5kb3dSZWN0KTsKKyAgICAgICAg
Ly8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3
aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhl
IHBsdWdpbiB2aWV3CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUo
IW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+
c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKyAgICB9CiAKICAgICAvLyBGTEFTSCBXT1JL
QVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRvCiAgICAgLy8gc2V0
TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgpAQCAtMjY1LDEzICszMTgsMTcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgbV9ucFdp
bmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CiAgICAgfQogCi0gICAgbV9ucFdp
bmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsKLSAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1Jl
Y3QueSgpOworICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgbV9ucFdpbmRvdy55ID0gMDsKIAot
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0
LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKG1fZHJhd2FibGUud2lkdGgo
KSAhPSBtX25wV2luZG93LndpZHRoIHx8IG1fZHJhd2FibGUuaGVpZ2h0KCkgIT0gbV9ucFdpbmRv
dy5oZWlnaHQpIHsKKyAgICAgICAgbV9kcmF3YWJsZSA9IFFQaXhtYXAobV9ucFdpbmRvdy53aWR0
aCwgbV9ucFdpbmRvdy5oZWlnaHQpOworICAgIH0KKworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
bGVmdCA9IDA7IC8vIG1fY2xpcFJlY3QueCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9w
ID0gMDsgLy8gbV9jbGlwUmVjdC55KCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9
IDA7IC8vIG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRv
bSA9IDA7IC8vIG1fY2xpcFJlY3QuaGVpZ2h0KCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldyh0aGlzKTsKICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0zMzcsNiArMzk0LDEwIEBA
IE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQogICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1
ZTsKICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogCisgICAgY2FzZSBOUE5WU3VwcG9y
dHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICAgfQpAQCAtMzk2LDcgKzQ1NywxMCBA
QCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSkKIAogICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CiAgICAgICAgIHZvaWQq
IHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7Ci0gICAgICAgICooKFhJRCAqKXcp
ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkt
PndpbklkKCk7CisgICAgICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgICAgICAqKChYSUQg
Kil3KSA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRv
dygpLT53aW5JZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpLT53aW5k
b3coKS0+aGFuZGxlKCk7CiAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKICAgICB9CiAK
QEAgLTQxMyw3ICs0NzcsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7
CisgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT51cGRh
dGUocmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MjMsMTcgKzQ4NywyMyBAQCB2
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgLy9wcmludGYoInJlcXVlc3QgdG8gaW52YWxpZGF0ZSAlZCAlZCAl
ZCAlZFxuIiwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCwgcmVjdC0+Ym90dG9t
KTsKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJp
Z2h0ICsgcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tICsgcmVjdC0+dG9wKTsKKyAgICBpbnZhbGlk
YXRlV2luZG93bGVzc1BsdWdpblJlY3Qocik7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBpbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiBib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtU3RhcnQoKQpAQCAtNDUwLDI5ICs1MjAsNDggQEAgYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgc2V0
UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0KHRoaXMsIG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKSk7CisgICAgaWYgKG1faXNX
aW5kb3dlZCkgeworICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgc2V0
UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0KHRoaXMsIG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKICAgICB9
CiAKICAgICBzaG93KCk7CiAKICAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICp3c2kgPSBu
ZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotCiAgICAgd3NpLT50eXBlID0gMDsKIAot
ICAgIHdzaS0+ZGlzcGxheSA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5kaXNw
bGF5KCk7Ci0gICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsKilwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT54MTFJbmZvKCkudmlzdWFsKCk7Ci0gICAgd3NpLT5kZXB0aCA9IHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCktPngxMUluZm8oKS5kZXB0aCgpOwotICAgIHdzaS0+Y29sb3JtYXAgPSBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT54MTFJbmZvKCkuY29sb3JtYXAoKTsKLSAgICBtX25wV2luZG93LndzX2lu
Zm8gPSB3c2k7Ci0KLSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0g
ICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+d2lu
SWQoKTsKLSAgICBtX25wV2luZG93LndpZHRoID0gLTE7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQg
PSAtMTsKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIHdzaS0+ZGlzcGxheSA9IHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5kaXNwbGF5KCk7CisgICAgICAgIHdzaS0+
dmlzdWFsID0gKFZpc3VhbCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLnZpc3Vh
bCgpOworICAgICAgICB3c2ktPmRlcHRoID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5m
bygpLmRlcHRoKCk7CisgICAgICAgIHdzaS0+Y29sb3JtYXAgPSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLT54MTFJbmZvKCkuY29sb3JtYXAoKTsKKyAgICAgICAgbV9ucFdpbmRvdy53c19pbmZvID0g
d3NpOworCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAg
ICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+
d2luSWQoKTsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgICAgICBtX25wV2lu
ZG93LmhlaWdodCA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIHdzaS0+ZGlzcGxheSA9IG1f
ZHJhd2FibGUueDExSW5mbygpLmRpc3BsYXkoKTsgCisgICAgICAgIHdzaS0+dmlzdWFsID0gKFZp
c3VhbCAqKSBtX2RyYXdhYmxlLngxMUluZm8oKS52aXN1YWwoKTsKKyAgICAgICAgd3NpLT5jb2xv
cm1hcCA9IG1fZHJhd2FibGUueDExSW5mbygpLmNvbG9ybWFwKCk7CisgICAgICAgIHdzaS0+ZGVw
dGggPSBtX2RyYXdhYmxlLngxMUluZm8oKS5kZXB0aCgpOworICAgICAgICBtX25wV2luZG93Lndz
X2luZm8gPSB3c2k7CisKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJh
d2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisgICAg
ICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAg
IG1fbnBXaW5kb3cud2lkdGggPSAtMTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsK
KyAgICB9CiAKICAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKSB7CiAgICAgICAgIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40107</attachid>
            <date>2009-09-25 05:58:50 -0700</date>
            <delta_ts>2009-09-27 22:01:04 -0700</delta_ts>
            <desc>Windowless patch - makes painting work (2)</desc>
            <filename>windowless.patch</filename>
            <type>text/plain</type>
            <size>11479</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IGFiNDdhMDhhNDI2MThjODdlMzJhNjNiYjFiNDgxNzAwY2E5MTBjYTQKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgRnJpIFNl
cCAyNSAxNzozMDo1MCAyMDA5ICswNTMwCgogICAgQWRkIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBv
ZiB3aW5kb3dsZXNzIHBsdWdpbnMgKFF0KS4KCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMjg1
NzJhNC4uNDcyM2RhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTI3LDggKzEyNyw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
Ly8gT24gV2luZG93cywgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KICAg
ICBzZXROUFdpbmRvd1JlY3QocmVjdCk7CiAjZWxpZiBYUF9VTklYCi0gICAgLy8gT24gVW5peCwg
b25seSBjYWxsIHBsdWdpbiBpZiBpdCdzIGZ1bGwtcGFnZS4KLSAgICBpZiAobV9tb2RlID09IE5Q
X0ZVTEwpCisgICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFtX2lzV2luZG93ZWQpCiAgICAg
ICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbmRpZgogfQpAQCAtODA1LDYgKzgwNCw3IEBA
IFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwCiAjZW5kaWYKICNpZiBkZWZpbmVkKFFfV1NfWDExKQog
ICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UoZmFsc2UpCisgICAgLCBtX3BsdWdpbkRp
c3BsYXkoMCkKICNlbmRpZgogICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQogICAg
ICwgbV9tYW51YWxTdHJlYW0oMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU0YzEwNjUuLmMxYmNl
NGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtNTEsNiArNTEsMTAgQEAgdHlwZWRlZiBIV05EIFBs
YXRmb3JtUGx1Z2luV2lkZ2V0OwogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdp
bldpZGdldDsKICNlbmRpZgogCisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyNpbmNsdWRlIDxRUGl4
bWFwPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7
CiAgICAgICAgIGNsYXNzIEluc3RhbmNlOwpAQCAtMzE1LDYgKzMxOSw4IEBAIHByaXZhdGU6CiAK
ICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5
Q2hhbmdlOworICAgICAgICBRUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIERpc3BsYXkqIG1f
cGx1Z2luRGlzcGxheTsKICNlbmRpZgogCiAgICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8g
VGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggOTA4ZTcwNy4uMmFiYmFjYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDYgKzYxLDkgQEAKICNpbmNsdWRl
IDxRS2V5RXZlbnQ+CiAjaW5jbHVkZSA8UVdpZGdldD4KICNpbmNsdWRlIDxRWDExSW5mbz4KKyNp
bmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUxh
YmVsPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1Zh
bHVlLmg+CiAjaW5jbHVkZSA8WDExL1guaD4KQEAgLTgwLDcgKzg0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQog
ewotICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCB8fCAhcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSkKKyAgICBpZiAoIXBhcmVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwpAQCAtMTUwLDggKzE1NCw0NyBAQCB2b2lkIFBs
dWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9pc1dpbmRvd2VkICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CiAgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFFQYWludGVyICpwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CisgICAgUVBvaW50IG9mZnNldDsKKyAgICBRUGFpbnREZXZpY2UgKmJhY2tpbmdTdG9yZSA9
ICBRUGFpbnRlcjo6cmVkaXJlY3RlZChwYWludGVyLT5kZXZpY2UoKSwgJm9mZnNldCk7CisgICAg
b2Zmc2V0ID0gLW9mZnNldDsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSB8fCBiYWNraW5nU3RvcmUt
PmRldlR5cGUoKSAhPSBRSW50ZXJuYWw6OlBpeG1hcCkKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhN
RSEKKworICAgIFFQaXhtYXAgKnBpeG1hcCA9IHN0YXRpY19jYXN0PFFQaXhtYXAgKj4oYmFja2lu
Z1N0b3JlKTsKKyAgICBjb25zdCBib29sIHN5bmMgPSBtX3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVn
aW5EaXNwbGF5ICE9IFFYMTFJbmZvOjpkaXNwbGF5KCk7CisKKyAgICBHQyBnYyA9IFhEZWZhdWx0
R0MoUVgxMUluZm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFwcFNjcmVlbigpKTsKKyAgICBYQ29w
eUFyZWEoUVgxMUluZm86OmRpc3BsYXkoKSwgcGl4bWFwLT5oYW5kbGUoKSwgbV9kcmF3YWJsZS5o
YW5kbGUoKSwgZ2MsIAorICAgICAgICBvZmZzZXQueCgpICsgbV93aW5kb3dSZWN0LngoKSwgb2Zm
c2V0LnkoKSArIG1fd2luZG93UmVjdC55KCksIAorICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgo
KSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLCAwLCAwKTsKKworICAgIGlmIChzeW5jKQorICAgICAg
ICBRQXBwbGljYXRpb246OnN5bmNYKCk7IC8vIHN5bmMgdGhlIGFib3ZlIGNoYW5nZXMKKworICAg
IFhFdmVudCB4ZXZlbnQ7CisgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsK
KyAgICB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlLnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKKyAgICB4
ZXZlbnQueGdyYXBoaWNzZXhwb3NlLmRpc3BsYXkgPSBRWDExSW5mbzo6ZGlzcGxheSgpOworICAg
IHhldmVudC54Z3JhcGhpY3NleHBvc2UuZHJhd2FibGUgPSBtX2RyYXdhYmxlLmhhbmRsZSgpOwor
ICAgIHhldmVudC54Z3JhcGhpY3NleHBvc2UueCA9IG1fY2xpcFJlY3QueCgpOworICAgIHhldmVu
dC54Z3JhcGhpY3NleHBvc2UueSA9IG1fY2xpcFJlY3QueSgpOworICAgIHhldmVudC54Z3JhcGhp
Y3NleHBvc2Uud2lkdGggPSBtX2NsaXBSZWN0LndpZHRoKCk7CisgICAgeGV2ZW50LnhncmFwaGlj
c2V4cG9zZS5oZWlnaHQgPSBtX2NsaXBSZWN0LmhlaWdodCgpOworICAgIGRpc3BhdGNoTlBFdmVu
dCh4ZXZlbnQpOworCisgICAgaWYgKHN5bmMpCisgICAgICAgIFhTeW5jKG1fcGx1Z2luRGlzcGxh
eSwgRmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCisKKyAgICBYQ29weUFyZWEoUVgx
MUluZm86OmRpc3BsYXkoKSwgbV9kcmF3YWJsZS5oYW5kbGUoKSwgcGl4bWFwLT5oYW5kbGUoKSwg
Z2MsCisgICAgICAgIDAsIDAsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVp
Z2h0KCksCisgICAgICAgIG9mZnNldC54KCkgKyBtX3dpbmRvd1JlY3QueCgpLCBvZmZzZXQueSgp
ICsgbV93aW5kb3dSZWN0LnkoKSk7CiB9CiAKIC8vIFRPRE86IFVuaWZ5IGFjcm9zcyBwb3J0cy4K
QEAgLTE2NCw3ICsyMDcsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2
ZW50JiBldmVudCkKICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhm
YWxzZSk7CiAKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKTsKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CiAgICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7CiAKICAgICByZXR1cm4gYWNjZXB0ZWQ7CkBAIC0yMzgsNyArMjgxLDgg
QEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogCiB2b2lk
IFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKIHsKLSAgICAvLyBJ
Z25vcmVkIGFzIHdlIGRvbid0IHdhbnQgdG8gbW92ZSBpbW1lZGlhdGVseS4KKyAgICBpZiAoIW1f
aXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCiB2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQpAQCAtMjU0LDEyICsyOTgsMjAgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAg
IG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gZmFsc2U7CiAKLSAgICBBU1NFUlQocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0
cnkobV93aW5kb3dSZWN0KTsKLSAgICAvLyBpZiBzZXRNYXNrIGlzIHNldCB3aXRoIGFuIGVtcHR5
IFFSZWdpb24sIG5vIGNsaXBwaW5nIHdpbGwKLSAgICAvLyBiZSBwZXJmb3JtZWQsIHNvIGluIHRo
YXQgY2FzZSB3ZSBoaWRlIHRoZSBwbHVnaW4gdmlldwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCktPnNldFZpc2libGUoIW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKLSAgICBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLT5zZXRNYXNrKFFSZWdpb24obV9jbGlwUmVjdCkpOworICAgIGlmIChtX2lzV2lu
ZG93ZWQpIHsKKyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lnZGV0KCkpOworICAgICAg
ICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOworICAg
ICAgICAvLyBpZiBzZXRNYXNrIGlzIHNldCB3aXRoIGFuIGVtcHR5IFFSZWdpb24sIG5vIGNsaXBw
aW5nIHdpbGwKKyAgICAgICAgLy8gYmUgcGVyZm9ybWVkLCBzbyBpbiB0aGF0IGNhc2Ugd2UgaGlk
ZSB0aGUgcGx1Z2luIHZpZXcKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0Vmlz
aWJsZSghbV9jbGlwUmVjdC5pc0VtcHR5KCkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLT5zZXRNYXNrKFFSZWdpb24obV9jbGlwUmVjdCkpOworCisgICAgICAgIG1fbnBXaW5kb3cu
eCA9IG1fd2luZG93UmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVj
dC55KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAg
bV9ucFdpbmRvdy55ID0gMDsKKyAgICB9CiAKICAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5
IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRvCiAgICAgLy8gc2V0TlBXaW5kb3coKSBj
YXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgpAQCAtMjY4LDggKzMyMCw4IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0g
bV93aW5kb3dSZWN0LmhlaWdodCgpOwogICAgIH0KIAotICAgIG1fbnBXaW5kb3cueCA9IG1fd2lu
ZG93UmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAgICBp
ZiAobV9kcmF3YWJsZS53aWR0aCgpICE9IG1fbnBXaW5kb3cud2lkdGggfHwgbV9kcmF3YWJsZS5o
ZWlnaHQoKSAhPSBtX25wV2luZG93LmhlaWdodCkKKyAgICAgICAgbV9kcmF3YWJsZSA9IFFQaXht
YXAobV9ucFdpbmRvdy53aWR0aCwgbV9ucFdpbmRvdy5oZWlnaHQpOwogCiAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKQEAgLTM0MCw2ICszOTIsMTAgQEAgTlBFcnJvciBQbHVn
aW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
CiAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwogICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6
CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKICAgICB9CkBAIC00MTksNyArNDc1LDcgQEAgTlBFcnJvciBQbHVn
aW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCiAKIHZv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKICAgICAg
ICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDI5LDE3ICs0ODUsMjIgQEAgdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghcmVjdCkgewor
ICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSW50UmVj
dCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgKyByZWN0LT5sZWZ0LCByZWN0
LT5ib3R0b20gKyByZWN0LT50b3ApOworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVj
dChyKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJl
Z2lvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGludmFsaWRhdGUoKTsKIH0KIAog
dm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgp
CkBAIC00NTYsMzAgKzUxNyw2MyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQog
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKICAgICB9CiAKLSAg
ICBpZiAobV9uZWVkc1hFbWJlZCkgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0g
bV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgp
OwotICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChuZXcgUGx1Z2luQ29udGFpbmVyUXQodGhpcywg
UVdpZGdldDo6ZmluZChjbGllbnQtPndpbklkKCkpKSk7CisgICAgaWYgKG1faXNXaW5kb3dlZCkg
eworICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgUVdlYlBhZ2VDbGll
bnQqIGNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKTsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5D
b250YWluZXJRdCh0aGlzLCBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICBt
X3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDAp
OworICAgICAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQgcnVuIHVzaW5nIGEgZGlmZmVy
ZW50IFggY29ubmVjdGlvbi4gQXQgdGhlIG1vbWVudCwgd2Ugb25seQorICAgICAgICAvLyBzdXBw
b3J0IGdkayBiYXNlZCBwbHVnaW5zIChsaWtlIGZsYXNoKSB0aGF0IHVzZSBhIGRpZmZlcmVudCBY
IGNvbm5lY3Rpb24uCisKKyAgICAgICAgLy8gVGhlIGNvZGUgYmVsb3cgaGFzIHRoZSBzYW1lIGVm
ZmVjdCBhcyB0aGlzIG9uZToKKyAgICAgICAgLy8gRGlzcGxheSAqZ2RrRGlzcGxheSA9IGdka194
MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAg
ICAgIFFMaWJyYXJ5IGxpYnJhcnkoImxpYmdkay14MTEtMi4wIik7CisgICAgICAgIGlmIChsaWJy
YXJ5LmxvYWQoKSkgeworICAgICAgICAgICAgdHlwZWRlZiB2b2lkICooKmdka19kaXNwbGF5X2dl
dF9kZWZhdWx0X3B0cikoKTsKKyAgICAgICAgICAgIGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0
ciBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCA9IChnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9wdHIp
IGxpYnJhcnkucmVzb2x2ZSgiZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQiKTsKKyAgICAgICAgICAg
IHR5cGVkZWYgdm9pZCAqKCpnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0cikodm9pZCAq
KTsKKyAgICAgICAgICAgIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXlfcHRyIGdka194MTFf
ZGlzcGxheV9nZXRfeGRpc3BsYXkgPSAoZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheV9wdHIp
IGxpYnJhcnkucmVzb2x2ZSgiZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheSIpOworICAgICAg
ICAgICAgaWYgKGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkgJiYgZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQpCisgICAgICAgICAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gKERpc3BsYXkgKikg
Z2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIHNob3coKTsKIAogICAgIE5QU2V0V2luZG93Q2FsbGJh
Y2tTdHJ1Y3QgKndzaSA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7Ci0KICAgICB3
c2ktPnR5cGUgPSAwOwogCi0gICAgd3NpLT5kaXNwbGF5ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwoKTsKLSAgICB3c2ktPmRlcHRoID0g
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRlcHRoKCk7Ci0gICAgd3NpLT5jb2xv
cm1hcCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5jb2xvcm1hcCgpOwotICAg
IG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKLQotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2lu
ZG93VHlwZVdpbmRvdzsKLSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT53aW5JZCgpOwotICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICBt
X25wV2luZG93LmhlaWdodCA9IC0xOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAg
d3NpLT5kaXNwbGF5ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRpc3BsYXko
KTsKKyAgICAgICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsKilwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT54MTFJbmZvKCkudmlzdWFsKCk7CisgICAgICAgIHdzaS0+ZGVwdGggPSBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLT54MTFJbmZvKCkuZGVwdGgoKTsKKyAgICAgICAgd3NpLT5jb2xvcm1hcCA9IHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5jb2xvcm1hcCgpOworICAgICAgICBtX25w
V2luZG93LndzX2luZm8gPSB3c2k7CisKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5k
b3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT53aW5JZCgpOworICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7
CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
d3NpLT5kaXNwbGF5ID0gbV9kcmF3YWJsZS54MTFJbmZvKCkuZGlzcGxheSgpOyAKKyAgICAgICAg
d3NpLT52aXN1YWwgPSAoVmlzdWFsICopIG1fZHJhd2FibGUueDExSW5mbygpLnZpc3VhbCgpOwor
ICAgICAgICB3c2ktPmNvbG9ybWFwID0gbV9kcmF3YWJsZS54MTFJbmZvKCkuY29sb3JtYXAoKTsK
KyAgICAgICAgd3NpLT5kZXB0aCA9IG1fZHJhd2FibGUueDExSW5mbygpLmRlcHRoKCk7CisgICAg
ICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKKworICAgICAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOyAv
LyBOb3QgdXNlZD8KKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAgbV9ucFdpbmRv
dy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgICAgICBtX25wV2lu
ZG93LmhlaWdodCA9IC0xOworICAgIH0KIAogICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKICAgICAgICAg
dXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40216</attachid>
            <date>2009-09-27 22:01:04 -0700</date>
            <delta_ts>2009-09-29 04:41:47 -0700</delta_ts>
            <desc>Windowless patch - makes painting work (3)</desc>
            <filename>windowless3.patch</filename>
            <type>text/plain</type>
            <size>12112</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAyODU3MmE0Li40NzIzZGE2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuY3BwCkBAIC0xMjcsOCArMTI3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBPbiBXaW5kb3dzLCBhbHdheXMgY2FsbCBw
bHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgogICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNl
bGlmIFhQX1VOSVgKLSAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVs
bC1wYWdlLgotICAgIGlmIChtX21vZGUgPT0gTlBfRlVMTCkKKyAgICBpZiAobV9tb2RlID09IE5Q
X0ZVTEwgfHwgIW1faXNXaW5kb3dlZCkKICAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOwog
I2VuZGlmCiB9CkBAIC04MDUsNiArODA0LDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFt
ZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICNl
bmRpZgogI2lmIGRlZmluZWQoUV9XU19YMTEpCiAgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZShmYWxzZSkKKyAgICAsIG1fcGx1Z2luRGlzcGxheSgwKQogI2VuZGlmCiAgICAgLCBtX2xv
YWRNYW51YWxseShsb2FkTWFudWFsbHkpCiAgICAgLCBtX21hbnVhbFN0cmVhbSgwKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmgKaW5kZXggNTRjMTA2NS4uYzFiY2U0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC01
MSw2ICs1MSwxMCBAQCB0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiB0eXBlZGVm
IFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAKKyNpZiBkZWZp
bmVkKFFfV1NfWDExKQorI2luY2x1ZGUgPFFQaXhtYXA+CisjZW5kaWYKKwogbmFtZXNwYWNlIEpT
QyB7CiAgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKICAgICAgICAgY2xhc3MgSW5zdGFuY2U7CkBA
IC0zMTUsNiArMzE5LDggQEAgcHJpdmF0ZToKIAogI2lmIGRlZmluZWQoUV9XU19YMTEpCiAgICAg
ICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CisgICAgICAgIFFQaXhtYXAgbV9k
cmF3YWJsZTsKKyAgICAgICAgRGlzcGxheSogbV9wbHVnaW5EaXNwbGF5OwogI2VuZGlmCiAKICAg
ICAgICAgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEg
d2luZG93ZWQgcGx1Zy1pbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZp
ZXdRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAppbmRleCA5MDhl
NzA3Li5hOTY4MzE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0
LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcApAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2hu
YW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjAsNiArNjEsOSBAQAogI2luY2x1ZGUgPFFLZXlFdmVudD4KICNpbmNsdWRlIDxRV2lk
Z2V0PgogI2luY2x1ZGUgPFFYMTFJbmZvPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUg
PFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRTGFiZWw+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xv
Y2suaD4KICNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KICNpbmNsdWRlIDxYMTEvWC5oPgpA
QCAtODAsNyArODQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiB2b2lkIFBsdWdp
blZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7Ci0gICAgaWYgKCFwYXJlbnQoKSB8fCAhbV9p
c1dpbmRvd2VkIHx8ICFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgIGlmICghcGFyZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7
CkBAIC0xNTAsOCArMTU0LDQ4IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2lzV2luZG93ZWQg
JiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAg
ICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKICAgICAgICAgc2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUVBhaW50ZXIgKnBhaW50
ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBRUG9pbnQgb2Zmc2V0OworICAg
IFFQYWludERldmljZSAqYmFja2luZ1N0b3JlID0gIFFQYWludGVyOjpyZWRpcmVjdGVkKHBhaW50
ZXItPmRldmljZSgpLCAmb2Zmc2V0KTsKKyAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAgIGlmICgh
YmFja2luZ1N0b3JlIHx8IGJhY2tpbmdTdG9yZS0+ZGV2VHlwZSgpICE9IFFJbnRlcm5hbDo6UGl4
bWFwKQorICAgICAgICByZXR1cm47IC8vIEZJWE1FIQorCisgICAgUVBpeG1hcCAqcGl4bWFwID0g
c3RhdGljX2Nhc3Q8UVBpeG1hcCAqPihiYWNraW5nU3RvcmUpOworICAgIGNvbnN0IGJvb2wgc3lu
YyA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gUVgxMUluZm86OmRpc3Bs
YXkoKTsKKworICAgIEdDIGdjID0gWERlZmF1bHRHQyhRWDExSW5mbzo6ZGlzcGxheSgpLCBRWDEx
SW5mbzo6YXBwU2NyZWVuKCkpOworICAgIFhDb3B5QXJlYShRWDExSW5mbzo6ZGlzcGxheSgpLCBw
aXhtYXAtPmhhbmRsZSgpLCBtX2RyYXdhYmxlLmhhbmRsZSgpLCBnYywgCisgICAgICAgIG9mZnNl
dC54KCkgKyBtX3dpbmRvd1JlY3QueCgpICsgbV9jbGlwUmVjdC54KCksIG9mZnNldC55KCkgKyBt
X3dpbmRvd1JlY3QueSgpICsgbV9jbGlwUmVjdC55KCksIAorICAgICAgICBtX2NsaXBSZWN0Lndp
ZHRoKCksIG1fY2xpcFJlY3QuaGVpZ2h0KCksIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0Lnko
KSk7CisKKyAgICBpZiAoc3luYykKKyAgICAgICAgUUFwcGxpY2F0aW9uOjpzeW5jWCgpOyAvLyBz
eW5jIHRoZSBhYm92ZSBjaGFuZ2VzCisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNldCgm
eGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQgJmV4
cG9zZUV2ZW50ID0geGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50eXBl
ID0gR3JhcGhpY3NFeHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IFFYMTFJbmZvOjpk
aXNwbGF5KCk7CisgICAgZXhwb3NlRXZlbnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlLmhhbmRsZSgp
OworICAgIGV4cG9zZUV2ZW50LnggPSBtX2NsaXBSZWN0LngoKTsKKyAgICBleHBvc2VFdmVudC55
ID0gbV9jbGlwUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGggPSBtX2NsaXBSZWN0Lngo
KSArIG1fY2xpcFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mgd2lkdGggaXMg
dGhlIHJpZ2h0CisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gbV9jbGlwUmVjdC55KCkgKyBtX2Ns
aXBSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJv
dHRvbQorICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOworCisgICAgaWYgKHN5bmMpCisgICAg
ICAgIFhTeW5jKG1fcGx1Z2luRGlzcGxheSwgRmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1
Z2luCisKKyAgICBYQ29weUFyZWEoUVgxMUluZm86OmRpc3BsYXkoKSwgbV9kcmF3YWJsZS5oYW5k
bGUoKSwgcGl4bWFwLT5oYW5kbGUoKSwgZ2MsCisgICAgICAgIG1fY2xpcFJlY3QueCgpLCBtX2Ns
aXBSZWN0LnkoKSwgbV9jbGlwUmVjdC53aWR0aCgpLCBtX2NsaXBSZWN0LmhlaWdodCgpLAorICAg
ICAgICBvZmZzZXQueCgpICsgbV93aW5kb3dSZWN0LngoKSArIG1fY2xpcFJlY3QueCgpLCBvZmZz
ZXQueSgpICsgbV93aW5kb3dSZWN0LnkoKSArIG1fY2xpcFJlY3QueSgpKTsKIH0KIAogLy8gVE9E
TzogVW5pZnkgYWNyb3NzIHBvcnRzLgpAQCAtMTY0LDcgKzIwOCw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQogICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKIAogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7Ci0gICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpOworICAgIGJv
b2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwg
JmV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKIAogICAgIHJldHVybiBhY2Nl
cHRlZDsKQEAgLTIzOCw3ICsyODIsOCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3Jv
bGxWaWV3KiBwYXJlbnQpCiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0
IEludFJlY3QmKQogewotICAgIC8vIElnbm9yZWQgYXMgd2UgZG9uJ3Qgd2FudCB0byBtb3ZlIGlt
bWVkaWF0ZWx5LgorICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCkBA
IC0yNTQsMTIgKzI5OSwzMCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQo
KQogICAgICAgICByZXR1cm47CiAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSBmYWxz
ZTsKIAotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOwotICAgIC8vIGlmIHNldE1h
c2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAotICAgIC8v
IGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3Ci0g
ICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSghbV9jbGlwUmVjdC5pc0VtcHR5
KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2soUVJlZ2lvbihtX2NsaXBS
ZWN0KSk7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBBU1NFUlQocGxhdGZvcm1Q
bHVnaW5XaWdkZXQoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEdlb21l
dHJ5KG1fd2luZG93UmVjdCk7CisgICAgICAgIC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGggYW4g
ZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAorICAgICAgICAvLyBiZSBwZXJmb3JtZWQs
IHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRlIHRoZSBwbHVnaW4gdmlldworICAgICAgICBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7CisgICAg
ICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2soUVJlZ2lvbihtX2NsaXBSZWN0KSk7
CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsKKyAgICAgICAgbV9u
cFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKKworICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9
IG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSBtX2NsaXBSZWN0LmhlaWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cu
eCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisKKyAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwor
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5ib3R0b20gPSAwOworICAgIH0KIAogICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6
IE9ubHkgc2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KICAgICAvLyBzZXROUFdpbmRv
dygpIGNhdXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2guCkBAIC0yNjgsMTMgKzMzMSw4IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1fbnBXaW5kb3cuaGVp
Z2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOwogICAgIH0KIAotICAgIG1fbnBXaW5kb3cueCA9
IG1fd2luZG93UmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsK
LQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKG1fZHJhd2FibGUud2lk
dGgoKSAhPSBtX25wV2luZG93LndpZHRoIHx8IG1fZHJhd2FibGUuaGVpZ2h0KCkgIT0gbV9ucFdp
bmRvdy5oZWlnaHQpCisgICAgICAgIG1fZHJhd2FibGUgPSBRUGl4bWFwKG1fbnBXaW5kb3cud2lk
dGgsIG1fbnBXaW5kb3cuaGVpZ2h0KTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTM0MCw2ICszOTgsMTAgQEAgTlBFcnJv
ciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpCiAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwogICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRv
d2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICB9CkBAIC00MTksNyArNDgxLDcgQEAgTlBFcnJv
ciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgIGlmIChtX2lzV2luZG93ZWQpIHsK
ICAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDI5LDE3ICs0OTEsMjIgQEAgdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVS
ZWN0KE5QUmVjdCogcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghcmVj
dCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
SW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgKyByZWN0LT5sZWZ0
LCByZWN0LT5ib3R0b20gKyByZWN0LT50b3ApOworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1
Z2luUmVjdChyKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVn
aW9uIHJlZ2lvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGludmFsaWRhdGUoKTsK
IH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1T
dGFydCgpCkBAIC00NTYsMzAgKzUyMyw2MyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3Rh
cnQoKQogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKICAgICB9
CiAKLSAgICBpZiAobV9uZWVkc1hFbWJlZCkgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xp
ZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOwotICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChuZXcgUGx1Z2luQ29udGFpbmVyUXQo
dGhpcywgUVdpZGdldDo6ZmluZChjbGllbnQtPndpbklkKCkpKSk7CisgICAgaWYgKG1faXNXaW5k
b3dlZCkgeworICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgUVdlYlBh
Z2VDbGllbnQqIGNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQ
bHVnaW5Db250YWluZXJRdCh0aGlzLCBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSkpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAg
ICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldFBsYXRmb3JtV2lk
Z2V0KDApOworICAgICAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQgcnVuIHVzaW5nIGEg
ZGlmZmVyZW50IFggY29ubmVjdGlvbi4gQXQgdGhlIG1vbWVudCwgd2Ugb25seQorICAgICAgICAv
LyBzdXBwb3J0IGdkayBiYXNlZCBwbHVnaW5zIChsaWtlIGZsYXNoKSB0aGF0IHVzZSBhIGRpZmZl
cmVudCBYIGNvbm5lY3Rpb24uCisKKyAgICAgICAgLy8gVGhlIGNvZGUgYmVsb3cgaGFzIHRoZSBz
YW1lIGVmZmVjdCBhcyB0aGlzIG9uZToKKyAgICAgICAgLy8gRGlzcGxheSAqZ2RrRGlzcGxheSA9
IGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7
CisgICAgICAgIFFMaWJyYXJ5IGxpYnJhcnkoImxpYmdkay14MTEtMi4wIik7CisgICAgICAgIGlm
IChsaWJyYXJ5LmxvYWQoKSkgeworICAgICAgICAgICAgdHlwZWRlZiB2b2lkICooKmdka19kaXNw
bGF5X2dldF9kZWZhdWx0X3B0cikoKTsKKyAgICAgICAgICAgIGdka19kaXNwbGF5X2dldF9kZWZh
dWx0X3B0ciBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCA9IChnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dF9wdHIpIGxpYnJhcnkucmVzb2x2ZSgiZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQiKTsKKyAgICAg
ICAgICAgIHR5cGVkZWYgdm9pZCAqKCpnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0ciko
dm9pZCAqKTsKKyAgICAgICAgICAgIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXlfcHRyIGdk
a194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkgPSAoZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxh
eV9wdHIpIGxpYnJhcnkucmVzb2x2ZSgiZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheSIpOwor
ICAgICAgICAgICAgaWYgKGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkgJiYgZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQpCisgICAgICAgICAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gKERpc3Bs
YXkgKikgZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHNob3coKTsKIAogICAgIE5QU2V0V2luZG93
Q2FsbGJhY2tTdHJ1Y3QgKndzaSA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7Ci0K
ICAgICB3c2ktPnR5cGUgPSAwOwogCi0gICAgd3NpLT5kaXNwbGF5ID0gcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwq
KXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwoKTsKLSAgICB3c2ktPmRl
cHRoID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRlcHRoKCk7Ci0gICAgd3Np
LT5jb2xvcm1hcCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5jb2xvcm1hcCgp
OwotICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKLQotICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZVdpbmRvdzsKLSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOwotICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsK
LSAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAg
ICAgICAgd3NpLT5kaXNwbGF5ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRp
c3BsYXkoKTsKKyAgICAgICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsKilwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLT54MTFJbmZvKCkudmlzdWFsKCk7CisgICAgICAgIHdzaS0+ZGVwdGggPSBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCkuZGVwdGgoKTsKKyAgICAgICAgd3NpLT5jb2xvcm1h
cCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5jb2xvcm1hcCgpOworICAgICAg
ICBtX25wV2luZG93LndzX2luZm8gPSB3c2k7CisKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0g
TlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOworICAgICAgICBtX25wV2luZG93LndpZHRo
ID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgd3NpLT5kaXNwbGF5ID0gbV9kcmF3YWJsZS54MTFJbmZvKCkuZGlzcGxheSgpOyAKKyAg
ICAgICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsICopIG1fZHJhd2FibGUueDExSW5mbygpLnZpc3Vh
bCgpOworICAgICAgICB3c2ktPmNvbG9ybWFwID0gbV9kcmF3YWJsZS54MTFJbmZvKCkuY29sb3Jt
YXAoKTsKKyAgICAgICAgd3NpLT5kZXB0aCA9IG1fZHJhd2FibGUueDExSW5mbygpLmRlcHRoKCk7
CisgICAgICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKKworICAgICAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSAwOyAvLyBOb3QgdXNlZD8KKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAgbV9u
cFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgICAgICBt
X25wV2luZG93LmhlaWdodCA9IC0xOworICAgIH0KIAogICAgIGlmICghKG1fcGx1Z2luLT5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKICAg
ICAgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cg==
</data>
<flag name="review"
          id="21400"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40294</attachid>
            <date>2009-09-29 04:41:47 -0700</date>
            <delta_ts>2009-09-29 06:40:55 -0700</delta_ts>
            <desc>Windowless patch - painting and event handling (4)</desc>
            <filename>windowless4.patch</filename>
            <type>text/plain</type>
            <size>15687</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IDVhMmU3ODY1MzVlNzQ2N2M2NDNhOGExZmM5MDU1OWZmOWYxZjhkNGMKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgVHVlIFNl
cCAyOSAxNzowMDozNyAyMDA5ICswNTMwCgogICAgQWRkIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBv
ZiB3aW5kb3dsZXNzIHBsdWdpbnMgKFF0KS4KCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMjg1
NzJhNC4uNDcyM2RhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTI3LDggKzEyNyw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
Ly8gT24gV2luZG93cywgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KICAg
ICBzZXROUFdpbmRvd1JlY3QocmVjdCk7CiAjZWxpZiBYUF9VTklYCi0gICAgLy8gT24gVW5peCwg
b25seSBjYWxsIHBsdWdpbiBpZiBpdCdzIGZ1bGwtcGFnZS4KLSAgICBpZiAobV9tb2RlID09IE5Q
X0ZVTEwpCisgICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFtX2lzV2luZG93ZWQpCiAgICAg
ICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbmRpZgogfQpAQCAtODA1LDYgKzgwNCw3IEBA
IFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwCiAjZW5kaWYKICNpZiBkZWZpbmVkKFFfV1NfWDExKQog
ICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UoZmFsc2UpCisgICAgLCBtX3BsdWdpbkRp
c3BsYXkoMCkKICNlbmRpZgogICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQogICAg
ICwgbV9tYW51YWxTdHJlYW0oMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU0YzEwNjUuLmMxYmNl
NGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtNTEsNiArNTEsMTAgQEAgdHlwZWRlZiBIV05EIFBs
YXRmb3JtUGx1Z2luV2lkZ2V0OwogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdp
bldpZGdldDsKICNlbmRpZgogCisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyNpbmNsdWRlIDxRUGl4
bWFwPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7
CiAgICAgICAgIGNsYXNzIEluc3RhbmNlOwpAQCAtMzE1LDYgKzMxOSw4IEBAIHByaXZhdGU6CiAK
ICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5
Q2hhbmdlOworICAgICAgICBRUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIERpc3BsYXkqIG1f
cGx1Z2luRGlzcGxheTsKICNlbmRpZgogCiAgICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8g
VGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggOTA4ZTcwNy4uZDZmODcxYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CkBAIC01Nyw3ICs1OSwxMCBAQAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJydW50
aW1lX3Jvb3QuaCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPFFBcHBs
aWNhdGlvbj4KICNpbmNsdWRlIDxRS2V5RXZlbnQ+CisjaW5jbHVkZSA8UUxhYmVsPgorI2luY2x1
ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8UVgxMUluZm8+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTgwLDcgKzg1LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQog
ewotICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCB8fCAhcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSkKKyAgICBpZiAoIXBhcmVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwpAQCAtMTUwLDggKzE1NSw0OSBAQCB2b2lkIFBs
dWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9pc1dpbmRvd2VkICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CiAgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CisgICAgUVBvaW50IG9mZnNldDsKKyAgICBRUGFpbnREZXZpY2UqIGJhY2tpbmdTdG9yZURl
dmljZSA9ICBRUGFpbnRlcjo6cmVkaXJlY3RlZChwYWludGVyLT5kZXZpY2UoKSwgJm9mZnNldCk7
CisgICAgY29uc3QgYm9vbCBoYXNCYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmVEZXZpY2UgJiYg
YmFja2luZ1N0b3JlRGV2aWNlLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQaXhtYXA7CisgICAg
b2Zmc2V0ID0gLW9mZnNldDsKKworICAgIGNvbnN0IGJvb2wgc3luY1ggPSBtX3BsdWdpbkRpc3Bs
YXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IFFYMTFJbmZvOjpkaXNwbGF5KCk7CisKKyAgICBHQyBn
YyA9IFhEZWZhdWx0R0MoUVgxMUluZm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFwcFNjcmVlbigp
KTsKKworICAgIGlmIChoYXNCYWNraW5nU3RvcmUgJiYgbV9pc1RyYW5zcGFyZW50KSB7CisgICAg
ICAgIFFQaXhtYXAqIGJhY2tpbmdTdG9yZVBpeG1hcCA9IHN0YXRpY19jYXN0PFFQaXhtYXAgKj4o
YmFja2luZ1N0b3JlRGV2aWNlKTsKKyAgICAgICAgWENvcHlBcmVhKFFYMTFJbmZvOjpkaXNwbGF5
KCksIGJhY2tpbmdTdG9yZVBpeG1hcC0+aGFuZGxlKCksIG1fZHJhd2FibGUuaGFuZGxlKCksIGdj
LCAKKyAgICAgICAgICAgIG9mZnNldC54KCkgKyBtX3dpbmRvd1JlY3QueCgpICsgbV9jbGlwUmVj
dC54KCksIG9mZnNldC55KCkgKyBtX3dpbmRvd1JlY3QueSgpICsgbV9jbGlwUmVjdC55KCksIAor
ICAgICAgICAgICAgbV9jbGlwUmVjdC53aWR0aCgpLCBtX2NsaXBSZWN0LmhlaWdodCgpLCBtX2Ns
aXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCkpOworCisgICAgICAgIGlmIChzeW5jWCkKKyAgICAg
ICAgICAgIFFBcHBsaWNhdGlvbjo6c3luY1goKTsKKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50
OworICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNz
RXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0geGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBl
eHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NFeHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxh
eSA9IFFYMTFJbmZvOjpkaXNwbGF5KCk7CisgICAgZXhwb3NlRXZlbnQuZHJhd2FibGUgPSBtX2Ry
YXdhYmxlLmhhbmRsZSgpOworICAgIGV4cG9zZUV2ZW50LnggPSBtX2NsaXBSZWN0LngoKTsKKyAg
ICBleHBvc2VFdmVudC55ID0gbV9jbGlwUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGgg
PSBtX2NsaXBSZWN0LngoKSArIG1fY2xpcFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0
aGlua3Mgd2lkdGggaXMgdGhlIHJpZ2h0CisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gbV9jbGlw
UmVjdC55KCkgKyBtX2NsaXBSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBo
ZWlnaHQgaXMgdGhlIGJvdHRvbQorICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOworCisgICAg
aWYgKHN5bmNYKQorICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIEZhbHNlKTsgLy8gc3lu
YyBjaGFuZ2VzIGJ5IHBsdWdpbgorCisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChmcmFtZVJlY3Qo
KS54KCkgKyBtX2NsaXBSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgpICsgbV9jbGlwUmVjdC55KCks
IG1fZHJhd2FibGUsIAorICAgICAgIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9j
bGlwUmVjdC53aWR0aCgpLCBtX2NsaXBSZWN0LmhlaWdodCgpKTsKIH0KIAogLy8gVE9ETzogVW5p
ZnkgYWNyb3NzIHBvcnRzLgpAQCAtMTY0LDcgKzIxMCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKIAogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0g
ICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpOworICAgIGJvb2wgYWNj
ZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKIAogICAgIHJldHVybiBhY2NlcHRlZDsK
QEAgLTIwNywxMiArMjUzLDEyIEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBpZiAobV9pc1dpbmRvd2VkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSAia2V5ZG93biIgJiYgZXZlbnQtPnR5
cGUoKSAhPSAia2V5dXAiKQorICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgWEV2ZW50IG5wRXZlbnQ7IC8vIE9uIFVOSVggTlBFdmVu
dCBpcyBhIHR5cGVkZWYgZm9yIFhFdmVudC4KIAotICAgIG5wRXZlbnQudHlwZSA9IChldmVudC0+
dHlwZSgpID09ICJrZXlkb3duIikgPyAyIDogMzsgLy8gaW50cyBhcyBRdCB1bnNldHMgS2V5UHJl
c3MgYW5kIEtleVJlbGVhc2UKKyAgICBucEV2ZW50LnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBpbnRzIGFzIFF0IHVuc2V0cyBL
ZXlQcmVzcyBhbmQgS2V5UmVsZWFzZQogICAgIFFXZWJQYWdlQ2xpZW50KiBjbGllbnQgPSBtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CiAg
ICAgUVdpZGdldCogd2luZG93ID0gUVdpZGdldDo6ZmluZChjbGllbnQtPndpbklkKCkpOwogICAg
IHNldFNoYXJlZFhFdmVudEZpZWxkcyhucEV2ZW50LCB3aW5kb3cpOwpAQCAtMjI2LDYgKzI3Miw2
OSBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQp
CiB7CiAgICAgaWYgKG1faXNXaW5kb3dlZCkKICAgICAgICAgcmV0dXJuOworCisgICAgWEV2ZW50
IG5wRXZlbnQ7CisgICAgbWVtc2V0KCZucEV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisKKyAg
ICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2lu
ZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIFFXaWRnZXQqIHdpbmRvdyA9IFFXaWRn
ZXQ6OmZpbmQoY2xpZW50LT53aW5JZCgpKTsKKyAgICBzZXRTaGFyZWRYRXZlbnRGaWVsZHMobnBF
dmVudCwgd2luZG93KTsKKworICAgIHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7CisgICAgaWYgKGV2
ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIHN0YXRlIHw9IENvbnRyb2xNYXNrOworICAgIGlmIChl
dmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gU2hpZnRNYXNrOworICAgIGlmIChl
dmVudC0+YWx0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IE1vZDFNYXNrOworCisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIC8v
IEdpdmUgZm9jdXMgdG8gdGhlIHBsdWdpbiBvbiBjbGljaworICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7
CisgICAgfQorCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93
bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgewor
ICAgICAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSBucEV2ZW50LnhidXR0b247CisgICAgICAg
IHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOworICAgICAgICB4YnV0dG9uLnN1Yndp
bmRvdyA9IDA7CisgICAgICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAg
ICAgICAgeGJ1dHRvbi54ID0gZXZlbnQtPm9mZnNldFgoKTsKKyAgICAgICAgeGJ1dHRvbi55ID0g
ZXZlbnQtPm9mZnNldFkoKTsKKyAgICAgICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVu
WCgpOworICAgICAgICB4YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgICAg
IHhidXR0b24uc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkp
IHsKKyAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgeGJ1dHRvbi5idXR0b24g
PSBCdXR0b24xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWlkZGxlQnV0dG9u
OgorICAgICAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICB4YnV0dG9uLmJ1dHRv
biA9IEJ1dHRvbjM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB4YnV0
dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CisgICAgICAgIFhNb3Rpb25FdmVudCYgeG1v
dGlvbiA9IG5wRXZlbnQueG1vdGlvbjsKKyAgICAgICAgeG1vdGlvbi50eXBlID0gTW90aW9uTm90
aWZ5OworICAgICAgICB4bW90aW9uLnN1YndpbmRvdyA9IDA7CisgICAgICAgIHhtb3Rpb24udGlt
ZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICAgICAgeG1vdGlvbi54ID0gZXZlbnQtPm9mZnNl
dFgoKTsKKyAgICAgICAgeG1vdGlvbi55ID0gZXZlbnQtPm9mZnNldFkoKTsKKyAgICAgICAgeG1v
dGlvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgICAgICB4bW90aW9uLnlfcm9vdCA9
IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgICAgIHhtb3Rpb24uc3RhdGUgPSBzdGF0ZTsKKyAgICAg
ICAgeG1vdGlvbi5pc19oaW50ID0gMDsKKyAgICAgICAgeG1vdGlvbi5zYW1lX3NjcmVlbiA9IHRy
dWU7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZGlzcGF0Y2hOUEV2
ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAog
dm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQpAQCAtMjM4LDcg
KzM0Nyw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkK
IAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCiB7Ci0g
ICAgLy8gSWdub3JlZCBhcyB3ZSBkb24ndCB3YW50IHRvIG1vdmUgaW1tZWRpYXRlbHkuCisgICAg
aWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAog
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTI1NCwxMiArMzY0LDMw
IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOwogCi0gICAgQVNTRVJU
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNl
dEdlb21ldHJ5KG1fd2luZG93UmVjdCk7Ci0gICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBh
biBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgLy8gYmUgcGVyZm9ybWVkLCBz
byBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGx1Z2luIHZpZXcKLSAgICBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7Ci0gICAgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKyAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZ2RldCgpKTsK
KyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0cnkobV93aW5kb3dSZWN0
KTsKKyAgICAgICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBRUmVnaW9uLCBu
byBjbGlwcGluZyB3aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNl
IHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PnNldFZpc2libGUoIW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKKyAgICAgICAgcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKworICAgICAgICBtX25w
V2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOworICAgICAgICBtX25wV2luZG93LnkgPSBtX3dp
bmRvd1JlY3QueSgpOworCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xp
cFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3Qu
eSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0
aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVp
Z2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAg
bV9ucFdpbmRvdy55ID0gMDsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAw
OworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRv
bSA9IDA7CisgICAgfQogCiAgICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlh
bGx5LiBNdWx0aXBsZSBjYWxscyB0bwogICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBs
dWdpbiB0byBjcmFzaC4KQEAgLTI2OCwxMyArMzk2LDggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1Jl
Y3QuaGVpZ2h0KCk7CiAgICAgfQogCi0gICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0Lngo
KTsKLSAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwotCi0gICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0g
bV9jbGlwUmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9j
bGlwUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAobV9kcmF3YWJsZS53aWR0aCgpICE9IG1fbnBXaW5k
b3cud2lkdGggfHwgbV9kcmF3YWJsZS5oZWlnaHQoKSAhPSBtX25wV2luZG93LmhlaWdodCkKKyAg
ICAgICAgbV9kcmF3YWJsZSA9IFFQaXhtYXAobV9ucFdpbmRvdy53aWR0aCwgbV9ucFdpbmRvdy5o
ZWlnaHQpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwpAQCAtMzQwLDYgKzQ2MywxMCBAQCBOUEVycm9yIFBsdWdpblZpZXc6Omdl
dFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAgICAgICAg
KnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAg
KnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwogICAgIH0KQEAgLTQxOSw3ICs1NDYsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6Omdl
dFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIAogdm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmIChwbGF0
Zm9ybVdpZGdldCgpKSB7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAgICBwbGF0Zm9y
bVdpZGdldCgpLT51cGRhdGUocmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00Mjks
MTcgKzU1NiwyMiBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGlu
dmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0IHIocmVjdC0+
bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCArIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAr
IHJlY3QtPnRvcCk7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHIpOwogfQog
CiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2b2lkIFBsdWdp
blZpZXc6OmZvcmNlUmVkcmF3KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGludmFs
aWRhdGUoKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKQEAgLTQ1Niwz
MCArNTg4LDYzIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwogICAgIH0KIAotICAgIGlmIChtX25l
ZWRzWEVtYmVkKSB7Ci0gICAgICAgIFFXZWJQYWdlQ2xpZW50KiBjbGllbnQgPSBtX3BhcmVudEZy
YW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAg
IHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5Db250YWluZXJRdCh0aGlzLCBRV2lkZ2V0Ojpm
aW5kKGNsaWVudC0+d2luSWQoKSkpKTsKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAg
IGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50
ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpOworICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0
KHRoaXMsIFFXaWRnZXQ6OmZpbmQoY2xpZW50LT53aW5JZCgpKSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7CisgICAgICAg
IC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBydW4gdXNpbmcgYSBkaWZmZXJlbnQgWCBjb25u
ZWN0aW9uLiBBdCB0aGUgbW9tZW50LCB3ZSBvbmx5CisgICAgICAgIC8vIHN1cHBvcnQgZ2RrIGJh
c2VkIHBsdWdpbnMgKGxpa2UgZmxhc2gpIHRoYXQgdXNlIGEgZGlmZmVyZW50IFggY29ubmVjdGlv
bi4KKworICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRo
aXMgb25lOgorICAgICAgICAvLyBEaXNwbGF5ICpnZGtEaXNwbGF5ID0gZ2RrX3gxMV9kaXNwbGF5
X2dldF94ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICAgICAgUUxpYnJh
cnkgbGlicmFyeSgibGliZ2RrLXgxMS0yLjAiKTsKKyAgICAgICAgaWYgKGxpYnJhcnkubG9hZCgp
KSB7CisgICAgICAgICAgICB0eXBlZGVmIHZvaWQgKigqZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRf
cHRyKSgpOworICAgICAgICAgICAgZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfcHRyIGdka19kaXNw
bGF5X2dldF9kZWZhdWx0ID0gKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0cikgbGlicmFyeS5y
ZXNvbHZlKCJnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCIpOworICAgICAgICAgICAgdHlwZWRlZiB2
b2lkICooKmdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXlfcHRyKSh2b2lkICopOworICAgICAg
ICAgICAgZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheV9wdHIgZ2RrX3gxMV9kaXNwbGF5X2dl
dF94ZGlzcGxheSA9IChnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0cikgbGlicmFyeS5y
ZXNvbHZlKCJnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAo
Z2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheSAmJiBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCkK
KyAgICAgICAgICAgICAgICBtX3BsdWdpbkRpc3BsYXkgPSAoRGlzcGxheSAqKSBnZGtfeDExX2Rp
c3BsYXlfZ2V0X3hkaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgc2hvdygpOwogCiAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAq
d3NpID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKLQogICAgIHdzaS0+dHlwZSA9
IDA7CiAKLSAgICB3c2ktPmRpc3BsYXkgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZv
KCkuZGlzcGxheSgpOwotICAgIHdzaS0+dmlzdWFsID0gKFZpc3VhbCopcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+eDExSW5mbygpLnZpc3VhbCgpOwotICAgIHdzaS0+ZGVwdGggPSBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT54MTFJbmZvKCkuZGVwdGgoKTsKLSAgICB3c2ktPmNvbG9ybWFwID0gcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmNvbG9ybWFwKCk7Ci0gICAgbV9ucFdpbmRv
dy53c19pbmZvID0gd3NpOwotCi0gICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2lu
ZG93OwotICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCktPndpbklkKCk7Ci0gICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOwotICAgIG1fbnBXaW5kb3cu
aGVpZ2h0ID0gLTE7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICB3c2ktPmRpc3Bs
YXkgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAg
ICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8o
KS52aXN1YWwoKTsKKyAgICAgICAgd3NpLT5kZXB0aCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PngxMUluZm8oKS5kZXB0aCgpOworICAgICAgICB3c2ktPmNvbG9ybWFwID0gcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKS0+eDExSW5mbygpLmNvbG9ybWFwKCk7CisgICAgICAgIG1fbnBXaW5kb3cud3Nf
aW5mbyA9IHdzaTsKKworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5k
b3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCktPndpbklkKCk7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKKyAgICAgICAg
bV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICB3c2ktPmRpc3Bs
YXkgPSBtX2RyYXdhYmxlLngxMUluZm8oKS5kaXNwbGF5KCk7IAorICAgICAgICB3c2ktPnZpc3Vh
bCA9IChWaXN1YWwgKikgbV9kcmF3YWJsZS54MTFJbmZvKCkudmlzdWFsKCk7CisgICAgICAgIHdz
aS0+Y29sb3JtYXAgPSBtX2RyYXdhYmxlLngxMUluZm8oKS5jb2xvcm1hcCgpOworICAgICAgICB3
c2ktPmRlcHRoID0gbV9kcmF3YWJsZS54MTFJbmZvKCkuZGVwdGgoKTsKKyAgICAgICAgbV9ucFdp
bmRvdy53c19pbmZvID0gd3NpOworCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2Vk
PworICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2luZG93LnkgPSAwOwor
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7CisgICAgfQogCiAgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewogICAgICAgICB1cGRhdGVQbHVn
aW5XaWRnZXQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40299</attachid>
            <date>2009-09-29 06:40:55 -0700</date>
            <delta_ts>2009-09-29 23:19:43 -0700</delta_ts>
            <desc>Windowless patch - painting and event handling (5)</desc>
            <filename>windowless5.patch</filename>
            <type>text/plain</type>
            <size>16136</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IDkyOGQ0MDdhNzU2YjhlNzQ0YWI2NzNjN2JjNGZjM2U0ODNmYmIzZDQKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgVHVlIFNl
cCAyOSAxODo1ODo1OCAyMDA5ICswNTMwCgogICAgQWRkIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBv
ZiB3aW5kb3dsZXNzIHBsdWdpbnMgKFF0KS4KCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMjg1
NzJhNC4uZDJkMGM0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTI3LDggKzEyNyw4IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
Ly8gT24gV2luZG93cywgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KICAg
ICBzZXROUFdpbmRvd1JlY3QocmVjdCk7CiAjZWxpZiBYUF9VTklYCi0gICAgLy8gT24gVW5peCwg
b25seSBjYWxsIHBsdWdpbiBpZiBpdCdzIGZ1bGwtcGFnZS4KLSAgICBpZiAobV9tb2RlID09IE5Q
X0ZVTEwpCisgICAgLy8gT24gVW5peCwgbXVsdGlwbGUgY2FsbHMgdG8gc2V0TlBXaW5kb3coKSBp
biB3aW5kb3dlZCBtb2RlIGNhdXNlcyBGbGFzaCB0byBjcmFzaAorICAgIGlmIChtX21vZGUgPT0g
TlBfRlVMTCB8fCAhbV9pc1dpbmRvd2VkKQogICAgICAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7
CiAjZW5kaWYKIH0KQEAgLTgwNSw2ICs4MDUsNyBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcAog
I2VuZGlmCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5
Q2hhbmdlKGZhbHNlKQorICAgICwgbV9wbHVnaW5EaXNwbGF5KDApCiAjZW5kaWYKICAgICAsIG1f
bG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKICAgICAsIG1fbWFudWFsU3RyZWFtKDApCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCA1NGMxMDY1Li5jMWJjZTRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAg
LTUxLDYgKzUxLDEwIEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKIHR5cGVk
ZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZW5kaWYKIAorI2lmIGRl
ZmluZWQoUV9XU19YMTEpCisjaW5jbHVkZSA8UVBpeG1hcD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
SlNDIHsKICAgICBuYW1lc3BhY2UgQmluZGluZ3MgewogICAgICAgICBjbGFzcyBJbnN0YW5jZTsK
QEAgLTMxNSw2ICszMTksOCBAQCBwcml2YXRlOgogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICAg
ICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKKyAgICAgICAgUVBpeG1hcCBt
X2RyYXdhYmxlOworICAgICAgICBEaXNwbGF5KiBtX3BsdWdpbkRpc3BsYXk7CiAjZW5kaWYKIAog
ICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8g
YSB3aW5kb3dlZCBwbHVnLWluCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2lu
Vmlld1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4IDkw
OGU3MDcuLjEzMTU5MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlz
aG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0Nv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVl
c3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNTcsNyArNTksMTAgQEAKICNpbmNs
dWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSAiUVdl
YlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUtleUV2
ZW50PgorI2luY2x1ZGUgPFFMYWJlbD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxR
V2lkZ2V0PgogI2luY2x1ZGUgPFFYMTFJbmZvPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CkBAIC04MCw3ICs4NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHZvaWQgUGx1
Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIHsKLSAgICBpZiAoIXBhcmVudCgpIHx8ICFt
X2lzV2luZG93ZWQgfHwgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgaWYgKCFwYXJlbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygp
KTsKQEAgLTE1MCw4ICsxNTUsNDggQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faXNXaW5kb3dl
ZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAg
ICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogICAgICAgICBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBib29sIHN5
bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxheSAhPSBRWDExSW5mbzo6ZGlz
cGxheSgpOworCisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICBRUG9pbnQgb2Zmc2V0OworICAgIFFQYWludERldmljZSogYmFja2luZ1N0b3Jl
RGV2aWNlID0gIFFQYWludGVyOjpyZWRpcmVjdGVkKHBhaW50ZXItPmRldmljZSgpLCAmb2Zmc2V0
KTsKKyAgICBjb25zdCBib29sIGhhc1ZhbGlkQmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlRGV2
aWNlICYmIGJhY2tpbmdTdG9yZURldmljZS0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6UGl4bWFw
OworICAgIG9mZnNldCA9IC1vZmZzZXQ7IC8vIG5lZ2F0aW5nIHRoZSBvZmZzZXQgZ2l2ZXMgdXMg
dGhlIG9mZnNldCBvZiB0aGUgdmlldyB3aXRoaW4gdGhlIGJhY2tpbmcgc3RvcmUgcGl4bWFwCisK
KyAgICBpZiAoaGFzVmFsaWRCYWNraW5nU3RvcmUgJiYgbV9pc1RyYW5zcGFyZW50KSB7CisgICAg
ICAgIFFQaXhtYXAqIGJhY2tpbmdTdG9yZVBpeG1hcCA9IHN0YXRpY19jYXN0PFFQaXhtYXAgKj4o
YmFja2luZ1N0b3JlRGV2aWNlKTsKKyAgICAgICAgR0MgZ2MgPSBYRGVmYXVsdEdDKFFYMTFJbmZv
OjpkaXNwbGF5KCksIFFYMTFJbmZvOjphcHBTY3JlZW4oKSk7CisgICAgICAgIFhDb3B5QXJlYShR
WDExSW5mbzo6ZGlzcGxheSgpLCBiYWNraW5nU3RvcmVQaXhtYXAtPmhhbmRsZSgpLCBtX2RyYXdh
YmxlLmhhbmRsZSgpLCBnYywgCisgICAgICAgICAgICBvZmZzZXQueCgpICsgbV93aW5kb3dSZWN0
LngoKSArIG1fY2xpcFJlY3QueCgpLCBvZmZzZXQueSgpICsgbV93aW5kb3dSZWN0LnkoKSArIG1f
Y2xpcFJlY3QueSgpLCAKKyAgICAgICAgICAgIG1fY2xpcFJlY3Qud2lkdGgoKSwgbV9jbGlwUmVj
dC5oZWlnaHQoKSwgbV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpKTsKKworICAgICAgICBp
ZiAoc3luY1gpCisgICAgICAgICAgICBRQXBwbGljYXRpb246OnN5bmNYKCk7CisgICAgfQorCisg
ICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkp
OworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhp
Y3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4
cG9zZUV2ZW50LmRpc3BsYXkgPSBRWDExSW5mbzo6ZGlzcGxheSgpOworICAgIGV4cG9zZUV2ZW50
LmRyYXdhYmxlID0gbV9kcmF3YWJsZS5oYW5kbGUoKTsKKyAgICBleHBvc2VFdmVudC54ID0gbV9j
bGlwUmVjdC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IG1fY2xpcFJlY3QueSgpOworICAgIGV4
cG9zZUV2ZW50LndpZHRoID0gbV9jbGlwUmVjdC54KCkgKyBtX2NsaXBSZWN0LndpZHRoKCk7IC8v
IGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodAorICAgIGV4cG9zZUV2ZW50
LmhlaWdodCA9IG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2gg
YnVnPyBpdCB0aGlua3MgaGVpZ2h0IGlzIHRoZSBib3R0b20KKyAgICBkaXNwYXRjaE5QRXZlbnQo
eGV2ZW50KTsKKworICAgIGlmIChzeW5jWCkKKyAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5
LCBGYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KKworICAgIHBhaW50ZXItPmRyYXdQ
aXhtYXAoZnJhbWVSZWN0KCkueCgpICsgbV9jbGlwUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSAr
IG1fY2xpcFJlY3QueSgpLCBtX2RyYXdhYmxlLCAKKyAgICAgICBtX2NsaXBSZWN0LngoKSwgbV9j
bGlwUmVjdC55KCksIG1fY2xpcFJlY3Qud2lkdGgoKSwgbV9jbGlwUmVjdC5oZWlnaHQoKSk7CiB9
CiAKIC8vIFRPRE86IFVuaWZ5IGFjcm9zcyBwb3J0cy4KQEAgLTE2NCw3ICsyMDksNyBAQCBib29s
IFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CiAKICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KTsKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZldmVudCk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CiAKICAgICBy
ZXR1cm4gYWNjZXB0ZWQ7CkBAIC0yMDcsMTIgKzI1MiwxMiBAQCB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgaWYgKG1faXNXaW5k
b3dlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gImtleWRv
d24iICYmIGV2ZW50LT50eXBlKCkgIT0gImtleXVwIikKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1l
cygpLmtleXVwRXZlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFhFdmVudCBucEV2ZW50OyAv
LyBPbiBVTklYIE5QRXZlbnQgaXMgYSB0eXBlZGVmIGZvciBYRXZlbnQuCiAKLSAgICBucEV2ZW50
LnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSAia2V5ZG93biIpID8gMiA6IDM7IC8vIGludHMgYXMg
UXQgdW5zZXRzIEtleVByZXNzIGFuZCBLZXlSZWxlYXNlCisgICAgbnBFdmVudC50eXBlID0gKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gaW50
cyBhcyBRdCB1bnNldHMgS2V5UHJlc3MgYW5kIEtleVJlbGVhc2UKICAgICBRV2ViUGFnZUNsaWVu
dCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOwogICAgIFFXaWRnZXQqIHdpbmRvdyA9IFFXaWRnZXQ6OmZpbmQoY2xpZW50
LT53aW5JZCgpKTsKICAgICBzZXRTaGFyZWRYRXZlbnRGaWVsZHMobnBFdmVudCwgd2luZG93KTsK
QEAgLTIyMiwxMCArMjY3LDkxIEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVu
dCYgeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUg
PSAwOworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9s
TWFzazsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0
TWFzazsKKyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFz
azsKKworICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9IHhFdmVudC54YnV0dG9uOworICAgIHhi
dXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOworICAgIHhidXR0b24uc3Vid2luZG93ID0g
MDsKKyAgICB4YnV0dG9uLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGJ1dHRvbi54
ID0gZXZlbnQtPm9mZnNldFgoKTsKKyAgICB4YnV0dG9uLnkgPSBldmVudC0+b2Zmc2V0WSgpOwor
ICAgIHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0dG9uLnlfcm9v
dCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IHN0YXRlOworICAgIHN3
aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICB4
YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWlkZGxl
QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9u
MzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVl
OworfQorCitzdGF0aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQm
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgaW50IHN0YXRlID0g
MDsKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gQ29udHJvbE1h
c2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBTaGlmdE1h
c2s7CisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kMU1hc2s7
CisKKyAgICBYTW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQueG1vdGlvbjsKKyAgICB4bW90
aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOworICAg
IHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4bW90aW9uLnggPSBldmVu
dC0+b2Zmc2V0WCgpOworICAgIHhtb3Rpb24ueSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAgeG1v
dGlvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhtb3Rpb24ueV9yb290ID0gZXZl
bnQtPnNjcmVlblkoKTsKKyAgICB4bW90aW9uLnN0YXRlID0gc3RhdGU7CisgICAgeG1vdGlvbi5p
c19oaW50ID0gMDsKKyAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKwogdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewogICAgIGlm
IChtX2lzV2luZG93ZWQpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICAvLyBHaXZlIGZvY3Vz
IHRvIHRoZSBwbHVnaW4gb24gY2xpY2sKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVu
dEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0
QWN0aXZlKHRydWUpOworCisgICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgIH0KKwor
ICAgIFhFdmVudCBucEV2ZW50OworICAgIG1lbXNldCgmbnBFdmVudCwgMCwgc2l6ZW9mKFhFdmVu
dCkpOworCisgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBRV2lkZ2V0KiB3aW5k
b3cgPSBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSk7CisgICAgc2V0U2hhcmVkWEV2ZW50
RmllbGRzKG5wRXZlbnQsIHdpbmRvdyk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50KQorICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhucEV2
ZW50LCBldmVudCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpCisgICAgICAgIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKG5w
RXZlbnQsIGV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZGlz
cGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQpA
QCAtMjM4LDcgKzM2NCw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcq
IHBhcmVudCkKIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVj
dCYpCiB7Ci0gICAgLy8gSWdub3JlZCBhcyB3ZSBkb24ndCB3YW50IHRvIG1vdmUgaW1tZWRpYXRl
bHkuCisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTI1NCwx
MiArMzgxLDMwIEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOwogCi0g
ICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCktPnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7Ci0gICAgLy8gaWYgc2V0TWFzayBpcyBz
ZXQgd2l0aCBhbiBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgLy8gYmUgcGVy
Zm9ybWVkLCBzbyBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGx1Z2luIHZpZXcKLSAgICBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7Ci0g
ICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsK
KyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldp
Z2RldCgpKTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0cnkobV93
aW5kb3dSZWN0KTsKKyAgICAgICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBR
UmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4g
dGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3CisgICAgICAgIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCktPnNldFZpc2libGUoIW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKKyAgICAgICAgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKworICAg
ICAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOworICAgICAgICBtX25wV2luZG93
LnkgPSBtX3dpbmRvd1JlY3QueSgpOworCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVm
dCA9IG1fY2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1f
Y2xpcFJlY3QueSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlw
UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xp
cFJlY3QuaGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsK
KyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmJvdHRvbSA9IDA7CisgICAgfQogCiAgICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBz
ZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bwogICAgIC8vIHNldE5QV2luZG93KCkgY2F1
c2UgdGhlIHBsdWdpbiB0byBjcmFzaC4KQEAgLTI2OCwxMyArNDEzLDggQEAgdm9pZCBQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBt
X3dpbmRvd1JlY3QuaGVpZ2h0KCk7CiAgICAgfQogCi0gICAgbV9ucFdpbmRvdy54ID0gbV93aW5k
b3dSZWN0LngoKTsKLSAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwotCi0gICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0
LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90
dG9tID0gbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAobV9kcmF3YWJsZS53aWR0aCgpICE9
IG1fbnBXaW5kb3cud2lkdGggfHwgbV9kcmF3YWJsZS5oZWlnaHQoKSAhPSBtX25wV2luZG93Lmhl
aWdodCkKKyAgICAgICAgbV9kcmF3YWJsZSA9IFFQaXhtYXAobV9ucFdpbmRvdy53aWR0aCwgbV9u
cFdpbmRvdy5oZWlnaHQpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMzQwLDYgKzQ4MCwxMCBAQCBOUEVycm9yIFBsdWdp
blZpZXc6OmdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkK
ICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOwogICAgIH0KQEAgLTQxOSw3ICs1NjMsNyBAQCBOUEVycm9yIFBsdWdp
blZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIAogdm9p
ZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAg
IGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAg
ICBwbGF0Zm9ybVdpZGdldCgpLT51cGRhdGUocmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC00MjksMTcgKzU3Myw0NSBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBS
ZWN0KiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFyZWN0KSB7Cisg
ICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0
IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCArIHJlY3QtPmxlZnQsIHJlY3Qt
PmJvdHRvbSArIHJlY3QtPnRvcCk7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0
KHIpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVn
aW9uKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGludmFsaWRhdGUoKTsKK30KKworc3RhdGljIERpc3BsYXkgKmdldFBsdWdpbkRpc3BsYXko
KQoreworICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBydW4gdXNpbmcgYSBkaWZmZXJl
bnQgWCBjb25uZWN0aW9uLiBBdCB0aGUgbW9tZW50LCB3ZSBvbmx5CisgICAgLy8gc3VwcG9ydCBn
ZGsgYmFzZWQgcGx1Z2lucyAobGlrZSBmbGFzaCkgdGhhdCB1c2UgYSBkaWZmZXJlbnQgWCBjb25u
ZWN0aW9uLgorICAgIC8vIFRoZSBjb2RlIGJlbG93IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhp
cyBvbmU6CisgICAgLy8gRGlzcGxheSAqZ2RrRGlzcGxheSA9IGdka194MTFfZGlzcGxheV9nZXRf
eGRpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgUUxpYnJhcnkgbGlicmFy
eSgibGliZ2RrLXgxMS0yLjAiKTsKKyAgICBpZiAoIWxpYnJhcnkubG9hZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHR5cGVkZWYgdm9pZCAqKCpnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9w
dHIpKCk7CisgICAgZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfcHRyIGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0ID0gKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0cikgbGlicmFyeS5yZXNvbHZlKCJn
ZGtfZGlzcGxheV9nZXRfZGVmYXVsdCIpOworICAgIGlmICghZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1
bHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgdHlwZWRlZiB2b2lkICooKmdka194MTFfZGlz
cGxheV9nZXRfeGRpc3BsYXlfcHRyKSh2b2lkICopOworICAgIGdka194MTFfZGlzcGxheV9nZXRf
eGRpc3BsYXlfcHRyIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkgPSAoZ2RrX3gxMV9kaXNw
bGF5X2dldF94ZGlzcGxheV9wdHIpIGxpYnJhcnkucmVzb2x2ZSgiZ2RrX3gxMV9kaXNwbGF5X2dl
dF94ZGlzcGxheSIpOworICAgIGlmICghZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKERpc3BsYXkgKikgZ2RrX3gxMV9kaXNwbGF5
X2dldF94ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKIH0KIAogYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKQEAgLTQ1NiwzMSArNjI4LDUwIEBAIGJvb2wgUGx1Z2lu
Vmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KDApOwogICAgIH0KIAotICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIFFX
ZWJQYWdlQ2xpZW50KiBjbGllbnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQ
bHVnaW5Db250YWluZXJRdCh0aGlzLCBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSkpKTsK
KyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Cisg
ICAgICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICAgICAgc2V0UGxh
dGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0KHRoaXMsIFFXaWRnZXQ6OmZpbmQoY2xp
ZW50LT53aW5JZCgpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICAgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBs
dWdpbjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7CisgICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBs
dWdpbkRpc3BsYXkoKTsKICAgICB9CiAKICAgICBzaG93KCk7CiAKICAgICBOUFNldFdpbmRvd0Nh
bGxiYWNrU3RydWN0ICp3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotCiAg
ICAgd3NpLT50eXBlID0gMDsKKyAgICAKKyAgICBjb25zdCBRWDExSW5mbyAqeDExSW5mbyA9IDA7
CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICB4MTFJbmZvID0gJnBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCktPngxMUluZm8oKTsKKworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdp
bmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPndpbklkKCk7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAt
MTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB4MTFJbmZvID0gJm1fZHJhd2FibGUueDExSW5mbygpOworCisgICAgICAgIG1fbnBXaW5kb3cu
dHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9
IDA7IC8vIE5vdCB1c2VkPworICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25w
V2luZG93LnkgPSAwOworICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1f
bnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisgICAgfQogCi0gICAgd3NpLT5kaXNwbGF5ID0gcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9
IChWaXN1YWwqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwoKTsKLSAg
ICB3c2ktPmRlcHRoID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRlcHRoKCk7
Ci0gICAgd3NpLT5jb2xvcm1hcCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5j
b2xvcm1hcCgpOworICAgIHdzaS0+ZGlzcGxheSA9IHgxMUluZm8tPmRpc3BsYXkoKTsKKyAgICB3
c2ktPnZpc3VhbCA9IChWaXN1YWwqKXgxMUluZm8tPnZpc3VhbCgpOworICAgIHdzaS0+ZGVwdGgg
PSB4MTFJbmZvLT5kZXB0aCgpOworICAgIHdzaS0+Y29sb3JtYXAgPSB4MTFJbmZvLT5jb2xvcm1h
cCgpOwogICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKIAotICAgIG1fbnBXaW5kb3cudHlw
ZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKLSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOwotICAgIG1fbnBXaW5kb3cud2lkdGggPSAt
MTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOwotCiAgICAgaWYgKCEobV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewog
ICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40345</attachid>
            <date>2009-09-29 23:19:43 -0700</date>
            <delta_ts>2009-09-30 22:37:03 -0700</delta_ts>
            <desc>Windowless patch - painting and event handling (6)</desc>
            <filename>windowless6.patch</filename>
            <type>text/plain</type>
            <size>22685</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTMwMmRmNC4uMDM4NjM3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOS0wOS0yOSAgR2lyaXNoIFJhbWFr
cmlzaG5hbiAgPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwODEKKyAgICAgICAgW1F0XSBBZGQgc3VwcG9ydCBmb3Igd2luZG93bGVzcyBO
UEFQSSBwbHVnaW5zCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OlBsdWdpblZpZXcpOgorICAgICAgICAq
IHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hh
cmVkWEV2ZW50RmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmluaXRYRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WEtleUV2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjppbnB1dEV2ZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WEJ1dHRv
bkV2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WE1vdGlvbkV2ZW50
U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WENyb3NzaW5nRXZlbnRTcGVj
aWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGx1Z2luRGlzcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKwogMjAwOS0wOS0yNSAgWW9uZ2p1biBa
aGFuZyAgPHlvbmdqdW4uemhhbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFy
aXlhIEhpZGF5YXQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAg
Yi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggMjg1NzJhNC4uYzA4ZDY1NiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTI3LDggKzEyNyw4IEBAIHZvaWQgUGx1Z2luVmll
dzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgLy8gT24gV2luZG93cywg
YWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KICAgICBzZXROUFdpbmRvd1Jl
Y3QocmVjdCk7CiAjZWxpZiBYUF9VTklYCi0gICAgLy8gT24gVW5peCwgb25seSBjYWxsIHBsdWdp
biBpZiBpdCdzIGZ1bGwtcGFnZS4KLSAgICBpZiAobV9tb2RlID09IE5QX0ZVTEwpCisgICAgLy8g
T24gVW5peCwgbXVsdGlwbGUgY2FsbHMgdG8gc2V0TlBXaW5kb3coKSBpbiB3aW5kb3dlZCBtb2Rl
IGNhdXNlcyBGbGFzaCB0byBjcmFzaAorICAgIGlmIChtX21vZGUgPT0gTlBfRlVMTCB8fCAhbV9p
c1dpbmRvd2VkKQogICAgICAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7CiAjZW5kaWYKIH0KQEAg
LTE0Nyw2ICsxNDcsMTIgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCogZXZl
bnQpCiAgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
ZW50KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICBo
YW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwor
I2lmIGRlZmluZWQoUV9XU19YMTEpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuRE9NRm9jdXNPdXRFdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNPdXRFdmVudCgp
OworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLkRPTUZvY3VzSW5F
dmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisjZW5kaWYKIH0KIAogdm9pZCBQ
bHVnaW5WaWV3Ojppbml0KCkKQEAgLTgwNSw2ICs4MTEsNyBAQCBQbHVnaW5WaWV3OjpQbHVnaW5W
aWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2Fn
ZSogcAogI2VuZGlmCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICAgICAsIG1faGFzUGVuZGluZ0dl
b21ldHJ5Q2hhbmdlKGZhbHNlKQorICAgICwgbV9wbHVnaW5EaXNwbGF5KDApCiAjZW5kaWYKICAg
ICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKICAgICAsIG1fbWFudWFsU3RyZWFtKDAp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuaAppbmRleCA1NGMxMDY1Li45M2E2ZDI3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmgKQEAgLTUxLDYgKzUxLDEwIEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsK
IHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZW5kaWYKIAor
I2lmIGRlZmluZWQoUV9XU19YMTEpCisjaW5jbHVkZSA8UVBpeG1hcD4KKyNlbmRpZgorCiBuYW1l
c3BhY2UgSlNDIHsKICAgICBuYW1lc3BhY2UgQmluZGluZ3MgewogICAgICAgICBjbGFzcyBJbnN0
YW5jZTsKQEAgLTI0OSw2ICsyNTMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgICAgIHZvaWQg
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyAg
ICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKKyAgICAgICAgdm9pZCBoYW5kbGVGb2N1
c091dEV2ZW50KCk7CisjZW5kaWYKIAogICAgICAgICBpbnQgbV9tb2RlOwogICAgICAgICBpbnQg
bV9wYXJhbUNvdW50OwpAQCAtMzE1LDYgKzMyMywxMCBAQCBwcml2YXRlOgogCiAjaWYgZGVmaW5l
ZChRX1dTX1gxMSkKICAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKKyAg
ICAgICAgUVBpeG1hcCBtX2RyYXdhYmxlOworICAgICAgICBEaXNwbGF5KiBtX3BsdWdpbkRpc3Bs
YXk7CisKKyAgICAgICAgdm9pZCBpbml0WEV2ZW50KFhFdmVudCogZXZlbnQpOwogI2VuZGlmCiAK
ICAgICAgICAgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRv
IGEgd2luZG93ZWQgcGx1Zy1pbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdp
blZpZXdRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAppbmRleCA5
MDhlNzA3Li5hNGFkNTgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmll
d1F0LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jp
c2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTU3LDcgKzU5LDEwIEBACiAjaW5j
bHVkZSAicnVudGltZS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgIlFX
ZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFLZXlF
dmVudD4KKyNpbmNsdWRlIDxRTGFiZWw+CisjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8
UVdpZGdldD4KICNpbmNsdWRlIDxRWDExSW5mbz4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgpAQCAtODAsNyArODUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiB2b2lkIFBs
dWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7Ci0gICAgaWYgKCFwYXJlbnQoKSB8fCAh
bV9pc1dpbmRvd2VkIHx8ICFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgIGlmICghcGFyZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSk7CkBAIC0xNTAsOCArMTU1LDQ4IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2lzV2luZG93
ZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7Cisg
ICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKICAgICAgICAgc2V0TlBXaW5k
b3dJZk5lZWRlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgYm9vbCBz
eW5jWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gUVgxMUluZm86OmRp
c3BsYXkoKTsKKworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7CisgICAgUVBvaW50IG9mZnNldDsKKyAgICBRUGFpbnREZXZpY2UqIGJhY2tpbmdTdG9y
ZURldmljZSA9ICBRUGFpbnRlcjo6cmVkaXJlY3RlZChwYWludGVyLT5kZXZpY2UoKSwgJm9mZnNl
dCk7CisgICAgY29uc3QgYm9vbCBoYXNWYWxpZEJhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZURl
dmljZSAmJiBiYWNraW5nU3RvcmVEZXZpY2UtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OlBpeG1h
cDsKKyAgICBvZmZzZXQgPSAtb2Zmc2V0OyAvLyBuZWdhdGluZyB0aGUgb2Zmc2V0IGdpdmVzIHVz
IHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcgd2l0aGluIHRoZSBiYWNraW5nIHN0b3JlIHBpeG1hcAor
CisgICAgaWYgKGhhc1ZhbGlkQmFja2luZ1N0b3JlICYmIG1faXNUcmFuc3BhcmVudCkgeworICAg
ICAgICBRUGl4bWFwKiBiYWNraW5nU3RvcmVQaXhtYXAgPSBzdGF0aWNfY2FzdDxRUGl4bWFwICo+
KGJhY2tpbmdTdG9yZURldmljZSk7CisgICAgICAgIEdDIGdjID0gWERlZmF1bHRHQyhRWDExSW5m
bzo6ZGlzcGxheSgpLCBRWDExSW5mbzo6YXBwU2NyZWVuKCkpOworICAgICAgICBYQ29weUFyZWEo
UVgxMUluZm86OmRpc3BsYXkoKSwgYmFja2luZ1N0b3JlUGl4bWFwLT5oYW5kbGUoKSwgbV9kcmF3
YWJsZS5oYW5kbGUoKSwgZ2MsIAorICAgICAgICAgICAgb2Zmc2V0LngoKSArIG1fd2luZG93UmVj
dC54KCkgKyBtX2NsaXBSZWN0LngoKSwgb2Zmc2V0LnkoKSArIG1fd2luZG93UmVjdC55KCkgKyBt
X2NsaXBSZWN0LnkoKSwgCisgICAgICAgICAgICBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJl
Y3QuaGVpZ2h0KCksIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSk7CisKKyAgICAgICAg
aWYgKHN5bmNYKQorICAgICAgICAgICAgUUFwcGxpY2F0aW9uOjpzeW5jWCgpOworICAgIH0KKwor
ICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQp
KTsKKyAgICBYR3JhcGhpY3NFeHBvc2VFdmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBo
aWNzZXhwb3NlOworICAgIGV4cG9zZUV2ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKKyAgICBl
eHBvc2VFdmVudC5kaXNwbGF5ID0gUVgxMUluZm86OmRpc3BsYXkoKTsKKyAgICBleHBvc2VFdmVu
dC5kcmF3YWJsZSA9IG1fZHJhd2FibGUuaGFuZGxlKCk7CisgICAgZXhwb3NlRXZlbnQueCA9IG1f
Y2xpcFJlY3QueCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBtX2NsaXBSZWN0LnkoKTsKKyAgICBl
eHBvc2VFdmVudC53aWR0aCA9IG1fY2xpcFJlY3QueCgpICsgbV9jbGlwUmVjdC53aWR0aCgpOyAv
LyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQKKyAgICBleHBvc2VFdmVu
dC5oZWlnaHQgPSBtX2NsaXBSZWN0LnkoKSArIG1fY2xpcFJlY3QuaGVpZ2h0KCk7IC8vIGZsYXNo
IGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9tCisgICAgZGlzcGF0Y2hOUEV2ZW50
KHhldmVudCk7CisKKyAgICBpZiAoc3luY1gpCisgICAgICAgIFhTeW5jKG1fcGx1Z2luRGlzcGxh
eSwgRmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCisKKyAgICBwYWludGVyLT5kcmF3
UGl4bWFwKGZyYW1lUmVjdCgpLngoKSArIG1fY2xpcFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkg
KyBtX2NsaXBSZWN0LnkoKSwgbV9kcmF3YWJsZSwgCisgICAgICAgbV9jbGlwUmVjdC54KCksIG1f
Y2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJlY3QuaGVpZ2h0KCkpOwog
fQogCiAvLyBUT0RPOiBVbmlmeSBhY3Jvc3MgcG9ydHMuCkBAIC0xNjQsNDIgKzIwOSw1MiBAQCBi
b29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CiAKICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKTsKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZldmVudCk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CiAKICAg
ICByZXR1cm4gYWNjZXB0ZWQ7CiB9CiAKLXZvaWQgc2V0U2hhcmVkWEV2ZW50RmllbGRzKFhFdmVu
dCYgeEV2ZW50LCBRV2lkZ2V0KiBob3N0V2luZG93KQordm9pZCBzZXRTaGFyZWRYRXZlbnRGaWVs
ZHMoWEV2ZW50KiB4RXZlbnQsIFFXaWRnZXQqIGhvc3RXaW5kb3cpCiB7Ci0gICAgeEV2ZW50Lnhh
bnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9j
ZXNzZWQgYnkgWCBTZXJ2ZXIKLSAgICB4RXZlbnQueGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7Ci0g
ICAgeEV2ZW50LnhhbnkuZGlzcGxheSA9IGhvc3RXaW5kb3ctPngxMUluZm8oKS5kaXNwbGF5KCk7
Ci0gICAgLy8gTk9URTogZXZlbnQueGFueS53aW5kb3cgZG9lc24ndCBhbHdheXMgcmVzcG9uZCB0
byB0aGUgLndpbmRvdyBwcm9wZXJ0eSBvZiBvdGhlciBYRXZlbnQncworICAgIHhFdmVudC0+eGFu
eS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5hd2FyZSBvZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nl
c3NlZCBieSBYIFNlcnZlcgorICAgIHhFdmVudC0+eGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7Cisg
ICAgeEV2ZW50LT54YW55LmRpc3BsYXkgPSBob3N0V2luZG93LT54MTFJbmZvKCkuZGlzcGxheSgp
OworICAgIC8vIE5PVEU6IGV2ZW50LT54YW55LndpbmRvdyBkb2Vzbid0IGFsd2F5cyByZXNwb25k
IHRvIHRoZSAud2luZG93IHByb3BlcnR5IG9mIG90aGVyIFhFdmVudCdzCiAgICAgLy8gYnV0IGRv
ZXMgaW4gdGhlIGNhc2Ugb2YgS2V5UHJlc3MsIEtleVJlbGVhc2UsIEJ1dHRvblByZXNzLCBCdXR0
b25SZWxlYXNlLCBhbmQgTW90aW9uTm90aWZ5CiAgICAgLy8gZXZlbnRzOyB0aHVzLCB0aGlzIGlz
IHJpZ2h0OgotICAgIHhFdmVudC54YW55LndpbmRvdyA9IGhvc3RXaW5kb3ctPndpbmRvdygpLT5o
YW5kbGUoKTsKKyAgICB4RXZlbnQtPnhhbnkud2luZG93ID0gaG9zdFdpbmRvdy0+d2luZG93KCkt
PmhhbmRsZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZl
bnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworCisgICAgUVdl
YlBhZ2VDbGllbnQqIGNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBRV2lkZ2V0KiB3aW5kb3cgPSBRV2lkZ2V0Ojpm
aW5kKGNsaWVudC0+d2luSWQoKSk7CisgICAgc2V0U2hhcmVkWEV2ZW50RmllbGRzKHhFdmVudCwg
d2luZG93KTsKIH0KIAotdm9pZCBzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQmIHhF
dmVudCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2b2lkIHNldFhLZXlFdmVudFNwZWNpZmljRmll
bGRzKFhFdmVudCogeEV2ZW50LCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBRS2V5RXZl
bnQqIHFLZXlFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpLT5xdEV2ZW50KCk7CiAKLSAgICB4RXZl
bnQueGtleS5yb290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5kb3coKTsKLSAgICB4RXZlbnQueGtl
eS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdwotICAgIHhFdmVudC54
a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBx
S2V5RXZlbnQtPm5hdGl2ZU1vZGlmaWVycygpOwotICAgIHhFdmVudC54a2V5LmtleWNvZGUgPSBx
S2V5RXZlbnQtPm5hdGl2ZVNjYW5Db2RlKCk7Ci0gICAgeEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4g
PSB0cnVlOworICAgIHhFdmVudC0+dHlwZSA9IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlkb3duRXZlbnQpID8gMiA6IDM7IC8vIGludHMgYXMgUXQgdW5zZXRzIEtleVByZXNzIGFu
ZCBLZXlSZWxlYXNlCisgICAgeEV2ZW50LT54a2V5LnJvb3QgPSBRWDExSW5mbzo6YXBwUm9vdFdp
bmRvdygpOworICAgIHhFdmVudC0+eGtleS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNo
aWxkIHdpbmRvdworICAgIHhFdmVudC0+eGtleS50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwor
ICAgIHhFdmVudC0+eGtleS5zdGF0ZSA9IHFLZXlFdmVudC0+bmF0aXZlTW9kaWZpZXJzKCk7Cisg
ICAgeEV2ZW50LT54a2V5LmtleWNvZGUgPSBxS2V5RXZlbnQtPm5hdGl2ZVNjYW5Db2RlKCk7Cisg
ICAgeEV2ZW50LT54a2V5LnNhbWVfc2NyZWVuID0gdHJ1ZTsKIAogICAgIC8vIE5PVEU6IEFzIHRo
ZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFuZCB0aGVyZSBp
cyBub3QgYSBuYXRpdmUgd2luZG93CiAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgcGx1Zy1p
biByZWN0YW5nbGUsIHNvbWUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1cmVz
IGFyZSBub3QKICAgICAvLyBzZXQgdG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBlLmcu
IEtleSBldmVudHMgZG9uJ3QgaGF2ZSBhIHBvc2l0aW9uLgogICAgIC8vIHNvdXJjZTogaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vTlBFdmVudAotICAgIHhFdmVudC54a2V5LnggPSAw
OwotICAgIHhFdmVudC54a2V5LnkgPSAwOwotICAgIHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7Ci0g
ICAgeEV2ZW50LnhrZXkueV9yb290ID0gMDsKKyAgICB4RXZlbnQtPnhrZXkueCA9IDA7CisgICAg
eEV2ZW50LT54a2V5LnkgPSAwOworICAgIHhFdmVudC0+eGtleS54X3Jvb3QgPSAwOworICAgIHhF
dmVudC0+eGtleS55X3Jvb3QgPSAwOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCkBAIC0yMDcsMjUgKzI2MiwxNDUgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQog
ICAgIGlmIChtX2lzV2luZG93ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChldmVudC0+
dHlwZSgpICE9ICJrZXlkb3duIiAmJiBldmVudC0+dHlwZSgpICE9ICJrZXl1cCIpCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+dHlw
ZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBY
RXZlbnQgbnBFdmVudDsgLy8gT24gVU5JWCBOUEV2ZW50IGlzIGEgdHlwZWRlZiBmb3IgWEV2ZW50
LgotCi0gICAgbnBFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gImtleWRvd24iKSA/IDIg
OiAzOyAvLyBpbnRzIGFzIFF0IHVuc2V0cyBLZXlQcmVzcyBhbmQgS2V5UmVsZWFzZQotICAgIFFX
ZWJQYWdlQ2xpZW50KiBjbGllbnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgUVdpZGdldCogd2luZG93ID0gUVdpZGdldDo6
ZmluZChjbGllbnQtPndpbklkKCkpOwotICAgIHNldFNoYXJlZFhFdmVudEZpZWxkcyhucEV2ZW50
LCB3aW5kb3cpOwotICAgIHNldFhLZXlFdmVudFNwZWNpZmljRmllbGRzKG5wRXZlbnQsIGV2ZW50
KTsKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKyAgICBz
ZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcygmbnBFdmVudCwgZXZlbnQpOwogCiAgICAgaWYgKCFk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0RXZlbnRTdGF0ZShNb3VzZUV2ZW50
KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAwOworICAgIGlmIChldmVudC0+
Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFzazsKKyAgICBpZiAoZXZlbnQt
PnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFzazsKKyAgICBpZiAoZXZlbnQt
PmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsKKyAgICBpZiAoZXZlbnQtPm1l
dGFLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7CisgICAgcmV0dXJuIHN0YXRlOwor
fQorCitzdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhF
dmVudCwgTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgWEJ1dHRvbkV2ZW50JiB4YnV0dG9uID0g
eEV2ZW50LT54YnV0dG9uOworICAgIHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOwor
ICAgIHhidXR0b24ucm9vdCA9IFFYMTFJbmZvOjphcHBSb290V2luZG93KCk7CisgICAgeGJ1dHRv
bi5zdWJ3aW5kb3cgPSAwOworICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsK
KyAgICB4YnV0dG9uLnggPSBldmVudC0+b2Zmc2V0WCgpOworICAgIHhidXR0b24ueSA9IGV2ZW50
LT5vZmZzZXRZKCk7CisgICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAg
IHhidXR0b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4YnV0dG9uLnN0YXRlID0g
aW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewor
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgIHhidXR0b24u
YnV0dG9uID0gQnV0dG9uMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0QnV0dG9uOgor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOworfQorCitzdGF0
aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgWE1vdGlvbkV2ZW50JiB4bW90aW9uID0geEV2ZW50LT54
bW90aW9uOworICAgIHhtb3Rpb24udHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICB4bW90aW9uLnJv
b3QgPSBRWDExSW5mbzo6YXBwUm9vdFdpbmRvdygpOworICAgIHhtb3Rpb24uc3Vid2luZG93ID0g
MDsKKyAgICB4bW90aW9uLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeG1vdGlvbi54
ID0gZXZlbnQtPm9mZnNldFgoKTsKKyAgICB4bW90aW9uLnkgPSBldmVudC0+b2Zmc2V0WSgpOwor
ICAgIHhtb3Rpb24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4bW90aW9uLnlfcm9v
dCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0
ZShldmVudCk7CisgICAgeG1vdGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOworICAgIHhtb3Rp
b24uc2FtZV9zY3JlZW4gPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVu
dFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAg
ICBYQ3Jvc3NpbmdFdmVudCYgeGNyb3NzaW5nID0geEV2ZW50LT54Y3Jvc3Npbmc7CisgICAgeGNy
b3NzaW5nLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVu
dCA/IEVudGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7CisgICAgeGNyb3NzaW5nLnJvb3QgPSBRWDEx
SW5mbzo6YXBwUm9vdFdpbmRvdygpOworICAgIHhjcm9zc2luZy5zdWJ3aW5kb3cgPSAwOworICAg
IHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhjcm9zc2luZy54ID0g
ZXZlbnQtPm9mZnNldFgoKTsKKyAgICB4Y3Jvc3NpbmcueSA9IGV2ZW50LT5vZmZzZXRZKCk7Cisg
ICAgeGNyb3NzaW5nLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeGNyb3NzaW5nLnlf
cm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVu
dFN0YXRlKGV2ZW50KTsKKyAgICB4Y3Jvc3NpbmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICB4
Y3Jvc3NpbmcuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKyAgICB4Y3Jvc3Npbmcuc2FtZV9z
Y3JlZW4gPSB0cnVlOworICAgIHhjcm9zc2luZy5mb2N1cyA9IGZhbHNlOworfQorCiB2b2lkIFBs
dWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7CiAgICAgaWYg
KG1faXNXaW5kb3dlZCkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIC8vIEdpdmUgZm9jdXMg
dG8gdGhlIHBsdWdpbiBvbiBjbGljaworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50
RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRB
Y3RpdmUodHJ1ZSk7CisKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgfQorCisg
ICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CisKKyAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQorICAgICAgICBzZXRYQnV0dG9uRXZl
bnRTcGVjaWZpY0ZpZWxkcygmbnBFdmVudCwgZXZlbnQpOworICAgIGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQorICAgICAgICBzZXRYTW90aW9u
RXZlbnRTcGVjaWZpY0ZpZWxkcygmbnBFdmVudCwgZXZlbnQpOworICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCisgICAgICAgIHNldFhDcm9zc2luZ0V2ZW50
U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0lu
RXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQp
OworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAg
ZXZlbnQudHlwZSA9IDk7IC8qIGludCBhcyBRdCB1bnNldHMgRm9jdXNJbiAqLworICAgIGV2ZW50
Lm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9u
ZTsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0
WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZl
bnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUgPSAxMDsgLyogaW50IGFzIFF0IHVuc2V0cyBGb2N1
c091dCAqLworICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWls
ID0gTm90aWZ5RGV0YWlsTm9uZTsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKIH0K
IAogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQpAQCAtMjM4
LDcgKzQxMyw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVu
dCkKIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCiB7
Ci0gICAgLy8gSWdub3JlZCBhcyB3ZSBkb24ndCB3YW50IHRvIG1vdmUgaW1tZWRpYXRlbHkuCisg
ICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0K
IAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTI1NCwxMiArNDMw
LDMwIEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOwogCi0gICAgQVNT
RVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7Ci0gICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0
aCBhbiBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgLy8gYmUgcGVyZm9ybWVk
LCBzbyBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGx1Z2luIHZpZXcKLSAgICBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7Ci0gICAgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKyAgICBp
ZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZ2RldCgp
KTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0cnkobV93aW5kb3dS
ZWN0KTsKKyAgICAgICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBRUmVnaW9u
LCBubyBjbGlwcGluZyB3aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBj
YXNlIHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCktPnNldFZpc2libGUoIW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKKyAgICAgICAgcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKS0+c2V0TWFzayhRUmVnaW9uKG1fY2xpcFJlY3QpKTsKKworICAgICAgICBt
X25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOworICAgICAgICBtX25wV2luZG93LnkgPSBt
X3dpbmRvd1JlY3QueSgpOworCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1f
Y2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJl
Y3QueSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53
aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3Qu
aGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAg
ICAgbV9ucFdpbmRvdy55ID0gMDsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQg
PSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJv
dHRvbSA9IDA7CisgICAgfQogCiAgICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5p
dGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bwogICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhl
IHBsdWdpbiB0byBjcmFzaC4KQEAgLTI2OCwxMyArNDYyLDggQEAgdm9pZCBQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRv
d1JlY3QuaGVpZ2h0KCk7CiAgICAgfQogCi0gICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0
LngoKTsKLSAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwotCi0gICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0
ID0gbV9jbGlwUmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0g
bV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAobV9kcmF3YWJsZS53aWR0aCgpICE9IG1fbnBX
aW5kb3cud2lkdGggfHwgbV9kcmF3YWJsZS5oZWlnaHQoKSAhPSBtX25wV2luZG93LmhlaWdodCkK
KyAgICAgICAgbV9kcmF3YWJsZSA9IFFQaXhtYXAobV9ucFdpbmRvdy53aWR0aCwgbV9ucFdpbmRv
dy5oZWlnaHQpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwpAQCAtMzQwLDYgKzUyOSwxMCBAQCBOUEVycm9yIFBsdWdpblZpZXc6
OmdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAgICAg
ICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAg
ICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwogICAgIH0KQEAgLTQxOSw3ICs2MTIsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6
OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIAogdm9pZCBQbHVn
aW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmIChw
bGF0Zm9ybVdpZGdldCgpKSB7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAgICBwbGF0
Zm9ybVdpZGdldCgpLT51cGRhdGUocmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MjksMTcgKzYyMiw0NSBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiBy
ZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAg
IGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0IHIocmVj
dC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCArIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRv
bSArIHJlY3QtPnRvcCk7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHIpOwog
fQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2b2lkIFBs
dWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlu
dmFsaWRhdGUoKTsKK30KKworc3RhdGljIERpc3BsYXkgKmdldFBsdWdpbkRpc3BsYXkoKQorewor
ICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBydW4gdXNpbmcgYSBkaWZmZXJlbnQgWCBj
b25uZWN0aW9uLiBBdCB0aGUgbW9tZW50LCB3ZSBvbmx5CisgICAgLy8gc3VwcG9ydCBnZGsgYmFz
ZWQgcGx1Z2lucyAobGlrZSBmbGFzaCkgdGhhdCB1c2UgYSBkaWZmZXJlbnQgWCBjb25uZWN0aW9u
LgorICAgIC8vIFRoZSBjb2RlIGJlbG93IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhpcyBvbmU6
CisgICAgLy8gRGlzcGxheSAqZ2RrRGlzcGxheSA9IGdka194MTFfZGlzcGxheV9nZXRfeGRpc3Bs
YXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgUUxpYnJhcnkgbGlicmFyeSgibGli
Z2RrLXgxMS0yLjAiKTsKKyAgICBpZiAoIWxpYnJhcnkubG9hZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHR5cGVkZWYgdm9pZCAqKCpnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9wdHIpKCk7
CisgICAgZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfcHRyIGdka19kaXNwbGF5X2dldF9kZWZhdWx0
ID0gKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0cikgbGlicmFyeS5yZXNvbHZlKCJnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCIpOworICAgIGlmICghZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgdHlwZWRlZiB2b2lkICooKmdka194MTFfZGlzcGxheV9n
ZXRfeGRpc3BsYXlfcHRyKSh2b2lkICopOworICAgIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3Bs
YXlfcHRyIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkgPSAoZ2RrX3gxMV9kaXNwbGF5X2dl
dF94ZGlzcGxheV9wdHIpIGxpYnJhcnkucmVzb2x2ZSgiZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlz
cGxheSIpOworICAgIGlmICghZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gKERpc3BsYXkgKikgZ2RrX3gxMV9kaXNwbGF5X2dldF94
ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybVN0YXJ0KCkKQEAgLTQ1NiwzMSArNjc3LDUwIEBAIGJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KDApOwogICAgIH0KIAotICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIFFXZWJQYWdl
Q2xpZW50KiBjbGllbnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5D
b250YWluZXJRdCh0aGlzLCBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSkpKTsKKyAgICBp
ZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAg
ICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICAgICAgc2V0UGxhdGZvcm1X
aWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0KHRoaXMsIFFXaWRnZXQ6OmZpbmQoY2xpZW50LT53
aW5JZCgpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICAgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0
UGxhdGZvcm1XaWRnZXQoMCk7CisgICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRp
c3BsYXkoKTsKICAgICB9CiAKICAgICBzaG93KCk7CiAKICAgICBOUFNldFdpbmRvd0NhbGxiYWNr
U3RydWN0ICp3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotCiAgICAgd3Np
LT50eXBlID0gMDsKKyAgICAKKyAgICBjb25zdCBRWDExSW5mbyAqeDExSW5mbyA9IDA7CisgICAg
aWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICB4MTFJbmZvID0gJnBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCktPngxMUluZm8oKTsKKworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCktPndpbklkKCk7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKKyAg
ICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICB4MTFJ
bmZvID0gJm1fZHJhd2FibGUueDExSW5mbygpOworCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8v
IE5vdCB1c2VkPworICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2luZG93
LnkgPSAwOworICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5k
b3cuaGVpZ2h0ID0gLTE7CisgICAgfQogCi0gICAgd3NpLT5kaXNwbGF5ID0gcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKS0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9IChWaXN1
YWwqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwoKTsKLSAgICB3c2kt
PmRlcHRoID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRlcHRoKCk7Ci0gICAg
d3NpLT5jb2xvcm1hcCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5jb2xvcm1h
cCgpOworICAgIHdzaS0+ZGlzcGxheSA9IHgxMUluZm8tPmRpc3BsYXkoKTsKKyAgICB3c2ktPnZp
c3VhbCA9IChWaXN1YWwqKXgxMUluZm8tPnZpc3VhbCgpOworICAgIHdzaS0+ZGVwdGggPSB4MTFJ
bmZvLT5kZXB0aCgpOworICAgIHdzaS0+Y29sb3JtYXAgPSB4MTFJbmZvLT5jb2xvcm1hcCgpOwog
ICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKIAotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZVdpbmRvdzsKLSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT53aW5JZCgpOwotICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAg
ICBtX25wV2luZG93LmhlaWdodCA9IC0xOwotCiAgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygp
LmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewogICAgICAg
ICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40422</attachid>
            <date>2009-09-30 22:37:03 -0700</date>
            <delta_ts>2009-10-02 02:06:12 -0700</delta_ts>
            <desc>Windowless patch - painting and event handling (7)</desc>
            <filename>windowless7.patch</filename>
            <type>text/plain</type>
            <size>23344</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTMwMmRmNC4uZmE2YmNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAwOS0wOS0zMCAgR2lyaXNoIFJhbWFr
cmlzaG5hbiAgPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3dsZXNz
IE5QQVBJIHBsdWdpbnMKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwODEKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlldyk6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRT
aGFyZWRYRXZlbnRGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdFhF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmlucHV0RXZlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQnV0
dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYTW90aW9uRXZl
bnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQ3Jvc3NpbmdFdmVudFNw
ZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQbHVnaW5EaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorCiAyMDA5LTA5LTI1ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bi56aGFuZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QXJpeWEgSGlkYXlhdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAyODU3MmE0Li5jMDhkNjU2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xMjcsOCArMTI3LDggQEAgdm9pZCBQbHVnaW5W
aWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBPbiBXaW5kb3dz
LCBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgogICAgIHNldE5QV2luZG93
UmVjdChyZWN0KTsKICNlbGlmIFhQX1VOSVgKLSAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1
Z2luIGlmIGl0J3MgZnVsbC1wYWdlLgotICAgIGlmIChtX21vZGUgPT0gTlBfRlVMTCkKKyAgICAv
LyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdpbmRvd2VkIG1v
ZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCisgICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFt
X2lzV2luZG93ZWQpCiAgICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbmRpZgogfQpA
QCAtMTQ3LDYgKzE0NywxMiBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBl
dmVudCkKICAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCiAgICAgICAg
IGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7
CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50KQorICAgICAgICBoYW5kbGVGb2N1c091dEV2ZW50
KCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuRE9NRm9jdXNJ
bkV2ZW50KQorICAgICAgICBoYW5kbGVGb2N1c0luRXZlbnQoKTsKKyNlbmRpZgogfQogCiB2b2lk
IFBsdWdpblZpZXc6OmluaXQoKQpAQCAtODA1LDYgKzgxMSw3IEBAIFBsdWdpblZpZXc6OlBsdWdp
blZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNr
YWdlKiBwCiAjZW5kaWYKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgICwgbV9oYXNQZW5kaW5n
R2VvbWV0cnlDaGFuZ2UoZmFsc2UpCisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKICNlbmRpZgog
ICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQogICAgICwgbV9tYW51YWxTdHJlYW0o
MCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU0YzEwNjUuLjkzYTZkMjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaApAQCAtNTEsNiArNTEsMTAgQEAgdHlwZWRlZiBIV05EIFBsYXRmb3JtUGx1Z2luV2lkZ2V0
OwogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKICNlbmRpZgog
CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyNpbmNsdWRlIDxRUGl4bWFwPgorI2VuZGlmCisKIG5h
bWVzcGFjZSBKU0MgewogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAgICAgICAgIGNsYXNzIElu
c3RhbmNlOwpAQCAtMjQ5LDYgKzI1MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICAgICAgdm9p
ZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKyNpZiBkZWZpbmVkKFFfV1NfWDExKQor
ICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOworICAgICAgICB2b2lkIGhhbmRsZUZv
Y3VzT3V0RXZlbnQoKTsKKyNlbmRpZgogCiAgICAgICAgIGludCBtX21vZGU7CiAgICAgICAgIGlu
dCBtX3BhcmFtQ291bnQ7CkBAIC0zMTUsNiArMzIzLDEwIEBAIHByaXZhdGU6CiAKICNpZiBkZWZp
bmVkKFFfV1NfWDExKQogICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOwor
ICAgICAgICBRUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIERpc3BsYXkqIG1fcGx1Z2luRGlz
cGxheTsKKworICAgICAgICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50KiBldmVudCk7CiAjZW5kaWYK
IAogICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkg
dG8gYSB3aW5kb3dlZCBwbHVnLWluCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luVmlld1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4
IDkwOGU3MDcuLmM5MzM5OWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFr
cmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNTcsNyArNTksMTAgQEAKICNp
bmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSAi
UVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUtl
eUV2ZW50PgorI2luY2x1ZGUgPFFMYWJlbD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRl
IDxRV2lkZ2V0PgogI2luY2x1ZGUgPFFYMTFJbmZvPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CkBAIC04MCw3ICs4NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHZvaWQg
UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIHsKLSAgICBpZiAoIXBhcmVudCgpIHx8
ICFtX2lzV2luZG93ZWQgfHwgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgaWYgKCFwYXJl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmll
dygpKTsKQEAgLTE1MCw4ICsxNTUsNjUgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKGNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faXNXaW5k
b3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgIGlmIChtX2lzV2luZG93ZWQpIHsK
KyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogICAgICAgICBzZXROUFdp
bmRvd0lmTmVlZGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBib29s
IHN5bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxheSAhPSBRWDExSW5mbzo6
ZGlzcGxheSgpOworCisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBjb25zdCBib29sIGlzUGFpbnRpbmdPbldpZGdldCA9IHBhaW50ZXItPmRl
dmljZSgpLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQ7CisgICAgaWYgKCFpc1BhaW50
aW5nT25XaWRnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQp
IHsKKyAgICAgICAgLy8gQXR0ZW1wdCBjb250ZW50IHByb3BhZ2F0aW9uIGJ5IGNvcHlpbmcgb3Zl
ciBmcm9tIHRoZSBiYWNraW5nIHN0b3JlCisgICAgICAgIFFQb2ludCBvZmZzZXQ7CisgICAgICAg
IFFQYWludERldmljZSogYmFja2luZ1N0b3JlRGV2aWNlID0gIFFQYWludGVyOjpyZWRpcmVjdGVk
KHBhaW50ZXItPmRldmljZSgpLCAmb2Zmc2V0KTsKKyAgICAgICAgY29uc3QgYm9vbCBoYXNWYWxp
ZEJhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZURldmljZSAmJiBiYWNraW5nU3RvcmVEZXZpY2Ut
PmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OlBpeG1hcDsKKyAgICAgICAgb2Zmc2V0ID0gLW9mZnNl
dDsgLy8gbmVnYXRpbmcgdGhlIG9mZnNldCBnaXZlcyB1cyB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3
IHdpdGhpbiB0aGUgYmFja2luZyBzdG9yZSBwaXhtYXAKKworICAgICAgICBpZiAoaGFzVmFsaWRC
YWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIFFQaXhtYXAqIGJhY2tpbmdTdG9yZVBpeG1hcCA9
IHN0YXRpY19jYXN0PFFQaXhtYXAgKj4oYmFja2luZ1N0b3JlRGV2aWNlKTsKKyAgICAgICAgICAg
IEdDIGdjID0gWERlZmF1bHRHQyhRWDExSW5mbzo6ZGlzcGxheSgpLCBRWDExSW5mbzo6YXBwU2Ny
ZWVuKCkpOworICAgICAgICAgICAgWENvcHlBcmVhKFFYMTFJbmZvOjpkaXNwbGF5KCksIGJhY2tp
bmdTdG9yZVBpeG1hcC0+aGFuZGxlKCksIG1fZHJhd2FibGUuaGFuZGxlKCksIGdjLCAKKyAgICAg
ICAgICAgICAgICBvZmZzZXQueCgpICsgbV93aW5kb3dSZWN0LngoKSArIG1fY2xpcFJlY3QueCgp
LCBvZmZzZXQueSgpICsgbV93aW5kb3dSZWN0LnkoKSArIG1fY2xpcFJlY3QueSgpLCAKKyAgICAg
ICAgICAgICAgICBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJlY3QuaGVpZ2h0KCksIG1fY2xp
cFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSk7CisgICAgICAgIH0gZWxzZSB7IC8vIG5vIGJhY2tp
bmcgc3RvcmUsIGNsZWFuIHRoZSBwaXhtYXAKKyAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIo
Jm1fZHJhd2FibGUpOworICAgICAgICAgICAgcGFpbnRlci5maWxsUmVjdChtX2NsaXBSZWN0LCBR
dDo6d2hpdGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN5bmNYKQorICAgICAgICAgICAg
UUFwcGxpY2F0aW9uOjpzeW5jWCgpOworICAgIH0KKworICAgIFhFdmVudCB4ZXZlbnQ7CisgICAg
bWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKKyAgICBYR3JhcGhpY3NFeHBvc2VF
dmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlOworICAgIGV4cG9zZUV2
ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKKyAgICBleHBvc2VFdmVudC5kaXNwbGF5ID0gUVgx
MUluZm86OmRpc3BsYXkoKTsKKyAgICBleHBvc2VFdmVudC5kcmF3YWJsZSA9IG1fZHJhd2FibGUu
aGFuZGxlKCk7CisgICAgaWYgKGlzUGFpbnRpbmdPbldpZGdldCkgeworICAgICAgICBleHBvc2VF
dmVudC54ID0gbV9jbGlwUmVjdC54KCk7CisgICAgICAgIGV4cG9zZUV2ZW50LnkgPSBtX2NsaXBS
ZWN0LnkoKTsKKyAgICAgICAgZXhwb3NlRXZlbnQud2lkdGggPSBtX2NsaXBSZWN0LngoKSArIG1f
Y2xpcFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mgd2lkdGggaXMgdGhlIHJp
Z2h0CisgICAgICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IG1fY2xpcFJlY3QueSgpICsgbV9jbGlw
UmVjdC5oZWlnaHQoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3MgaGVpZ2h0IGlzIHRoZSBib3R0
b20KKyAgICB9IGVsc2UgeworICAgICAgICBleHBvc2VFdmVudC54ID0gMDsKKyAgICAgICAgZXhw
b3NlRXZlbnQueSA9IDA7CisgICAgICAgIGV4cG9zZUV2ZW50LndpZHRoID0gZnJhbWVSZWN0KCku
d2lkdGgoKTsKKyAgICAgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZnJhbWVSZWN0KCkuaGVpZ2h0
KCk7CisgICAgfQorICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOworCisgICAgaWYgKHN5bmNY
KQorICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIEZhbHNlKTsgLy8gc3luYyBjaGFuZ2Vz
IGJ5IHBsdWdpbgorCisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChmcmFtZVJlY3QoKS54KCkgKyBt
X2NsaXBSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgpICsgbV9jbGlwUmVjdC55KCksIG1fZHJhd2Fi
bGUsIAorICAgICAgICBtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3Qu
d2lkdGgoKSwgbV9jbGlwUmVjdC5oZWlnaHQoKSk7CiB9CiAKIC8vIFRPRE86IFVuaWZ5IGFjcm9z
cyBwb3J0cy4KQEAgLTE2NCw0MiArMjI2LDUyIEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hO
UEV2ZW50KE5QRXZlbnQmIGV2ZW50KQogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGZhbHNlKTsKIAogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgYm9v
bCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpOworICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKICAg
ICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKIAogICAgIHJldHVybiBhY2NlcHRlZDsKIH0KIAot
dm9pZCBzZXRTaGFyZWRYRXZlbnRGaWVsZHMoWEV2ZW50JiB4RXZlbnQsIFFXaWRnZXQqIGhvc3RX
aW5kb3cpCit2b2lkIHNldFNoYXJlZFhFdmVudEZpZWxkcyhYRXZlbnQqIHhFdmVudCwgUVdpZGdl
dCogaG9zdFdpbmRvdykKIHsKLSAgICB4RXZlbnQueGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUg
dW5hd2FyZSBvZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgotICAgIHhF
dmVudC54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKLSAgICB4RXZlbnQueGFueS5kaXNwbGF5ID0g
aG9zdFdpbmRvdy0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICAvLyBOT1RFOiBldmVudC54YW55
LndpbmRvdyBkb2Vzbid0IGFsd2F5cyByZXNwb25kIHRvIHRoZSAud2luZG93IHByb3BlcnR5IG9m
IG90aGVyIFhFdmVudCdzCisgICAgeEV2ZW50LT54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1
bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAgeEV2
ZW50LT54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKKyAgICB4RXZlbnQtPnhhbnkuZGlzcGxheSA9
IGhvc3RXaW5kb3ctPngxMUluZm8oKS5kaXNwbGF5KCk7CisgICAgLy8gTk9URTogZXZlbnQtPnhh
bnkud2luZG93IGRvZXNuJ3QgYWx3YXlzIHJlc3BvbmQgdG8gdGhlIC53aW5kb3cgcHJvcGVydHkg
b2Ygb3RoZXIgWEV2ZW50J3MKICAgICAvLyBidXQgZG9lcyBpbiB0aGUgY2FzZSBvZiBLZXlQcmVz
cywgS2V5UmVsZWFzZSwgQnV0dG9uUHJlc3MsIEJ1dHRvblJlbGVhc2UsIGFuZCBNb3Rpb25Ob3Rp
ZnkKICAgICAvLyBldmVudHM7IHRodXMsIHRoaXMgaXMgcmlnaHQ6Ci0gICAgeEV2ZW50Lnhhbnku
d2luZG93ID0gaG9zdFdpbmRvdy0+d2luZG93KCktPmhhbmRsZSgpOworICAgIHhFdmVudC0+eGFu
eS53aW5kb3cgPSBob3N0V2luZG93LT53aW5kb3coKS0+aGFuZGxlKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aW5pdFhFdmVudChYRXZlbnQqIHhFdmVudCkKK3sKKyAgICBtZW1zZXQoeEV2ZW50
LCAwLCBzaXplb2YoWEV2ZW50KSk7CisKKyAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9w
YXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwor
ICAgIFFXaWRnZXQqIHdpbmRvdyA9IFFXaWRnZXQ6OmZpbmQoY2xpZW50LT53aW5JZCgpKTsKKyAg
ICBzZXRTaGFyZWRYRXZlbnRGaWVsZHMoeEV2ZW50LCB3aW5kb3cpOwogfQogCi12b2lkIHNldFhL
ZXlFdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCYgeEV2ZW50LCBLZXlib2FyZEV2ZW50KiBldmVu
dCkKK3ZvaWQgc2V0WEtleUV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIFFLZXlFdmVudCogcUtleUV2ZW50ID0gZXZlbnQtPmtl
eUV2ZW50KCktPnF0RXZlbnQoKTsKIAotICAgIHhFdmVudC54a2V5LnJvb3QgPSBRWDExSW5mbzo6
YXBwUm9vdFdpbmRvdygpOwotICAgIHhFdmVudC54a2V5LnN1YndpbmRvdyA9IDA7IC8vIHdlIGhh
dmUgbm8gY2hpbGQgd2luZG93Ci0gICAgeEV2ZW50LnhrZXkudGltZSA9IGV2ZW50LT50aW1lU3Rh
bXAoKTsKLSAgICB4RXZlbnQueGtleS5zdGF0ZSA9IHFLZXlFdmVudC0+bmF0aXZlTW9kaWZpZXJz
KCk7Ci0gICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IHFLZXlFdmVudC0+bmF0aXZlU2NhbkNvZGUo
KTsKLSAgICB4RXZlbnQueGtleS5zYW1lX3NjcmVlbiA9IHRydWU7CisgICAgeEV2ZW50LT50eXBl
ID0gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsg
Ly8gaW50cyBhcyBRdCB1bnNldHMgS2V5UHJlc3MgYW5kIEtleVJlbGVhc2UKKyAgICB4RXZlbnQt
PnhrZXkucm9vdCA9IFFYMTFJbmZvOjphcHBSb290V2luZG93KCk7CisgICAgeEV2ZW50LT54a2V5
LnN1YndpbmRvdyA9IDA7IC8vIHdlIGhhdmUgbm8gY2hpbGQgd2luZG93CisgICAgeEV2ZW50LT54
a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeEV2ZW50LT54a2V5LnN0YXRlID0g
cUtleUV2ZW50LT5uYXRpdmVNb2RpZmllcnMoKTsKKyAgICB4RXZlbnQtPnhrZXkua2V5Y29kZSA9
IHFLZXlFdmVudC0+bmF0aXZlU2NhbkNvZGUoKTsKKyAgICB4RXZlbnQtPnhrZXkuc2FtZV9zY3Jl
ZW4gPSB0cnVlOwogCiAgICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUgcGx1
Zy1pbiBhcmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cKICAg
ICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0aGUg
bWVtYmVycyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAogICAgIC8vIHNldCB0byB0
aGVpciBub3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZlIGEg
cG9zaXRpb24uCiAgICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi9OUEV2ZW50Ci0gICAgeEV2ZW50LnhrZXkueCA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueSA9IDA7
Ci0gICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKLSAgICB4RXZlbnQueGtleS55X3Jvb3QgPSAw
OworICAgIHhFdmVudC0+eGtleS54ID0gMDsKKyAgICB4RXZlbnQtPnhrZXkueSA9IDA7CisgICAg
eEV2ZW50LT54a2V5Lnhfcm9vdCA9IDA7CisgICAgeEV2ZW50LT54a2V5Lnlfcm9vdCA9IDA7CiB9
CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBl
dmVudCkKQEAgLTIwNywyNSArMjc5LDE0NSBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgaWYgKG1faXNXaW5kb3dlZCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gImtleWRvd24iICYmIGV2
ZW50LT50eXBlKCkgIT0gImtleXVwIikKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleXVw
RXZlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFhFdmVudCBucEV2ZW50OyAvLyBPbiBVTklY
IE5QRXZlbnQgaXMgYSB0eXBlZGVmIGZvciBYRXZlbnQuCi0KLSAgICBucEV2ZW50LnR5cGUgPSAo
ZXZlbnQtPnR5cGUoKSA9PSAia2V5ZG93biIpID8gMiA6IDM7IC8vIGludHMgYXMgUXQgdW5zZXRz
IEtleVByZXNzIGFuZCBLZXlSZWxlYXNlCi0gICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsK
LSAgICBRV2lkZ2V0KiB3aW5kb3cgPSBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSk7Ci0g
ICAgc2V0U2hhcmVkWEV2ZW50RmllbGRzKG5wRXZlbnQsIHdpbmRvdyk7Ci0gICAgc2V0WEtleUV2
ZW50U3BlY2lmaWNGaWVsZHMobnBFdmVudCwgZXZlbnQpOworICAgIFhFdmVudCBucEV2ZW50Owor
ICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworICAgIHNldFhLZXlFdmVudFNwZWNpZmljRmllbGRz
KCZucEV2ZW50LCBldmVudCk7CiAKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkK
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK3N0YXRpYyB1bnNpZ25l
ZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHVuc2lnbmVk
IGludCBzdGF0ZSA9IDA7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIHN0YXRl
IHw9IENvbnRyb2xNYXNrOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgc3Rh
dGUgfD0gU2hpZnRNYXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpCisgICAgICAgIHN0YXRl
IHw9IE1vZDFNYXNrOworICAgIGlmIChldmVudC0+bWV0YUtleSgpKQorICAgICAgICBzdGF0ZSB8
PSBNb2Q0TWFzazsKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhCdXR0
b25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCkK
K3sKKyAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247CisgICAgeGJ1
dHRvbi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
PyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7CisgICAgeGJ1dHRvbi5yb290ID0gUVgxMUlu
Zm86OmFwcFJvb3RXaW5kb3coKTsKKyAgICB4YnV0dG9uLnN1YndpbmRvdyA9IDA7CisgICAgeGJ1
dHRvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhidXR0b24ueCA9IGV2ZW50LT5v
ZmZzZXRYKCk7CisgICAgeGJ1dHRvbi55ID0gZXZlbnQtPm9mZnNldFkoKTsKKyAgICB4YnV0dG9u
Lnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeGJ1dHRvbi55X3Jvb3QgPSBldmVudC0+
c2NyZWVuWSgpOworICAgIHhidXR0b24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwor
ICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgY2FzZSBNaWRkbGVCdXR0b246Cisg
ICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24zOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExlZnRCdXR0b246CisgICAgZGVmYXVsdDoKKyAgICAgICAgeGJ1
dHRvbi5idXR0b24gPSBCdXR0b24xOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgeGJ1dHRv
bi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhNb3Rpb25FdmVudFNw
ZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBY
TW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CisgICAgeG1vdGlvbi50eXBl
ID0gTW90aW9uTm90aWZ5OworICAgIHhtb3Rpb24ucm9vdCA9IFFYMTFJbmZvOjphcHBSb290V2lu
ZG93KCk7CisgICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOworICAgIHhtb3Rpb24udGltZSA9IGV2
ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4bW90aW9uLnggPSBldmVudC0+b2Zmc2V0WCgpOworICAg
IHhtb3Rpb24ueSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAgeG1vdGlvbi54X3Jvb3QgPSBldmVu
dC0+c2NyZWVuWCgpOworICAgIHhtb3Rpb24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAg
ICB4bW90aW9uLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICB4bW90aW9uLmlz
X2hpbnQgPSBOb3RpZnlOb3JtYWw7CisgICAgeG1vdGlvbi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9
CisKK3N0YXRpYyB2b2lkIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4
RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3Np
bmcgPSB4RXZlbnQtPnhjcm9zc2luZzsKKyAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5v
dGlmeTsKKyAgICB4Y3Jvc3Npbmcucm9vdCA9IFFYMTFJbmZvOjphcHBSb290V2luZG93KCk7Cisg
ICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7CisgICAgeGNyb3NzaW5nLnRpbWUgPSBldmVudC0+
dGltZVN0YW1wKCk7CisgICAgeGNyb3NzaW5nLnggPSBldmVudC0+b2Zmc2V0WCgpOworICAgIHhj
cm9zc2luZy55ID0gZXZlbnQtPm9mZnNldFkoKTsKKyAgICB4Y3Jvc3NpbmcueF9yb290ID0gZXZl
bnQtPnNjcmVlblgoKTsKKyAgICB4Y3Jvc3NpbmcueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsK
KyAgICB4Y3Jvc3Npbmcuc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhjcm9z
c2luZy5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIHhjcm9zc2luZy5kZXRhaWwgPSBOb3RpZnlE
ZXRhaWxOb25lOworICAgIHhjcm9zc2luZy5zYW1lX3NjcmVlbiA9IHRydWU7CisgICAgeGNyb3Nz
aW5nLmZvY3VzID0gZmFsc2U7Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dChNb3VzZUV2ZW50KiBldmVudCkKIHsKICAgICBpZiAobV9pc1dpbmRvd2VkKQogICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQpIHsKKyAgICAgICAgLy8gR2l2ZSBmb2N1cyB0byB0aGUgcGx1Z2luIG9uIGNsaWNrCisg
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICAg
ICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh0cnVlKTsKKworICAgICAgICBm
b2N1c1BsdWdpbkVsZW1lbnQoKTsKKyAgICB9CisKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBp
bml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQpCisgICAgICAgIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKCZucEV2ZW50
LCBldmVudCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpCisgICAgICAgIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKCZucEV2
ZW50LCBldmVudCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJF
dmVudCkKKyAgICAgICAgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygmbnBFdmVudCwg
ZXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFkaXNwYXRjaE5Q
RXZlbnQobnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCit7CisgICAgWEV2ZW50IG5w
RXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CisKKyAgICBYRm9jdXNDaGFuZ2VFdmVu
dCYgZXZlbnQgPSBucEV2ZW50Lnhmb2N1czsKKyAgICBldmVudC50eXBlID0gOTsgLyogaW50IGFz
IFF0IHVuc2V0cyBGb2N1c0luICovCisgICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAg
ICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50
KG5wRXZlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQor
eworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAg
WEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlw
ZSA9IDEwOyAvKiBpbnQgYXMgUXQgdW5zZXRzIEZvY3VzT3V0ICovCisgICAgZXZlbnQubW9kZSA9
IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisg
ICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldFBh
cmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCkBAIC0yMzgsNyArNDMwLDggQEAgdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogCiB2b2lkIFBsdWdpblZpZXc6OnNl
dE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKIHsKLSAgICAvLyBJZ25vcmVkIGFzIHdlIGRv
bid0IHdhbnQgdG8gbW92ZSBpbW1lZGlhdGVseS4KKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAg
ICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5Q
V2luZG93SWZOZWVkZWQoKQpAQCAtMjU0LDEyICs0NDcsMzAgQEAgdm9pZCBQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1faGFzUGVuZGluZ0dl
b21ldHJ5Q2hhbmdlID0gZmFsc2U7CiAKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSk7Ci0gICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0R2VvbWV0cnkobV93aW5kb3dSZWN0
KTsKLSAgICAvLyBpZiBzZXRNYXNrIGlzIHNldCB3aXRoIGFuIGVtcHR5IFFSZWdpb24sIG5vIGNs
aXBwaW5nIHdpbGwKLSAgICAvLyBiZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRl
IHRoZSBwbHVnaW4gdmlldwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUo
IW1fY2xpcFJlY3QuaXNFbXB0eSgpKTsKLSAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRN
YXNrKFFSZWdpb24obV9jbGlwUmVjdCkpOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAg
ICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lnZGV0KCkpOworICAgICAgICBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOworICAgICAgICAvLyBpZiBzZXRN
YXNrIGlzIHNldCB3aXRoIGFuIGVtcHR5IFFSZWdpb24sIG5vIGNsaXBwaW5nIHdpbGwKKyAgICAg
ICAgLy8gYmUgcGVyZm9ybWVkLCBzbyBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGx1Z2luIHZp
ZXcKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSghbV9jbGlwUmVj
dC5pc0VtcHR5KCkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRNYXNrKFFS
ZWdpb24obV9jbGlwUmVjdCkpOworCisgICAgICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVj
dC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7CisKKyAgICAg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QucmlnaHQgPSBtX2NsaXBSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2luZG93LnkgPSAwOworCisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7
CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gMDsKKyAgICB9CiAKICAgICAv
LyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRv
CiAgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgpAQCAtMjY4
LDEzICs0NzksOCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAg
ICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKICAgICB9CiAK
LSAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOwotICAgIG1fbnBXaW5kb3cueSA9
IG1fd2luZG93UmVjdC55KCk7Ci0KLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2Ns
aXBSZWN0LngoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgp
OwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX2NsaXBSZWN0LndpZHRoKCk7Ci0g
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdodCgpOworICAg
IGlmIChtX2RyYXdhYmxlLndpZHRoKCkgIT0gbV9ucFdpbmRvdy53aWR0aCB8fCBtX2RyYXdhYmxl
LmhlaWdodCgpICE9IG1fbnBXaW5kb3cuaGVpZ2h0KQorICAgICAgICBtX2RyYXdhYmxlID0gUVBp
eG1hcChtX25wV2luZG93LndpZHRoLCBtX25wV2luZG93LmhlaWdodCk7CiAKICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0zNDAs
NiArNTQ2LDEwIEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4o
dmFsdWUpID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogCisgICAgY2Fz
ZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4o
dmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICAgfQpAQCAtNDE5
LDcgKzYyOSw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQqIHZhbHVlKQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICBp
ZiAobV9pc1dpbmRvd2VkKSB7CiAgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPnVwZGF0ZShyZWN0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQyOSwxNyArNjM5LDQ1IEBAIHZvaWQgUGx1
Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9pZCBQbHVn
aW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3Qt
PnJpZ2h0ICsgcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tICsgcmVjdC0+dG9wKTsKKyAgICBpbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qocik7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52
YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW52YWxpZGF0ZSgpOworfQorCitzdGF0aWMg
RGlzcGxheSAqZ2V0UGx1Z2luRGlzcGxheSgpCit7CisgICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0
IG1pZ2h0IHJ1biB1c2luZyBhIGRpZmZlcmVudCBYIGNvbm5lY3Rpb24uIEF0IHRoZSBtb21lbnQs
IHdlIG9ubHkKKyAgICAvLyBzdXBwb3J0IGdkayBiYXNlZCBwbHVnaW5zIChsaWtlIGZsYXNoKSB0
aGF0IHVzZSBhIGRpZmZlcmVudCBYIGNvbm5lY3Rpb24uCisgICAgLy8gVGhlIGNvZGUgYmVsb3cg
aGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIG9uZToKKyAgICAvLyBEaXNwbGF5ICpnZGtEaXNw
bGF5ID0gZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKKyAgICBRTGlicmFyeSBsaWJyYXJ5KCJsaWJnZGsteDExLTIuMCIpOworICAgIGlmICgh
bGlicmFyeS5sb2FkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgdHlwZWRlZiB2b2lkICoo
Kmdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0cikoKTsKKyAgICBnZGtfZGlzcGxheV9nZXRfZGVm
YXVsdF9wdHIgZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQgPSAoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1
bHRfcHRyKSBsaWJyYXJ5LnJlc29sdmUoImdka19kaXNwbGF5X2dldF9kZWZhdWx0Iik7CisgICAg
aWYgKCFnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0
eXBlZGVmIHZvaWQgKigqZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheV9wdHIpKHZvaWQgKik7
CisgICAgZ2RrX3gxMV9kaXNwbGF5X2dldF94ZGlzcGxheV9wdHIgZ2RrX3gxMV9kaXNwbGF5X2dl
dF94ZGlzcGxheSA9IChnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0cikgbGlicmFyeS5y
ZXNvbHZlKCJnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5Iik7CisgICAgaWYgKCFnZGtfeDEx
X2Rpc3BsYXlfZ2V0X3hkaXNwbGF5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAo
RGlzcGxheSAqKSBnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5KGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOwogfQogCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQpAQCAtNDU2
LDMxICs2OTQsNTAgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CiAgICAgfQogCi0gICAgaWYgKG1f
bmVlZHNYRW1iZWQpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IG1fcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICAg
ICAgc2V0UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0KHRoaXMsIFFXaWRnZXQ6
OmZpbmQoY2xpZW50LT53aW5JZCgpKSkpOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAg
ICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgIFFXZWJQYWdlQ2xpZW50KiBjbGll
bnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCk7CisgICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChuZXcgUGx1Z2luQ29udGFpbmVy
UXQodGhpcywgUVdpZGdldDo6ZmluZChjbGllbnQtPndpbklkKCkpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKKyAgICAg
ICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOwogICAgIH0KIAogICAgIHNo
b3coKTsKIAogICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QgKndzaSA9IG5ldyBOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KCk7Ci0KICAgICB3c2ktPnR5cGUgPSAwOworICAgIAorICAgIGNv
bnN0IFFYMTFJbmZvICp4MTFJbmZvID0gMDsKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAg
ICAgIHgxMUluZm8gPSAmcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpOworCisgICAg
ICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAodm9pZCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+d2luSWQoKTsKKyAg
ICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9
IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIHgxMUluZm8gPSAmbV9kcmF3YWJsZS54MTFJbmZv
KCk7CisKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Cisg
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisgICAgICAgIG1fbnBX
aW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAgIG1fbnBXaW5k
b3cud2lkdGggPSAtMTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyAgICB9CiAK
LSAgICB3c2ktPmRpc3BsYXkgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCkuZGlz
cGxheSgpOwotICAgIHdzaS0+dmlzdWFsID0gKFZpc3VhbCopcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+eDExSW5mbygpLnZpc3VhbCgpOwotICAgIHdzaS0+ZGVwdGggPSBwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLT54MTFJbmZvKCkuZGVwdGgoKTsKLSAgICB3c2ktPmNvbG9ybWFwID0gcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmNvbG9ybWFwKCk7CisgICAgd3NpLT5kaXNwbGF5ID0g
eDExSW5mby0+ZGlzcGxheSgpOworICAgIHdzaS0+dmlzdWFsID0gKFZpc3VhbCopeDExSW5mby0+
dmlzdWFsKCk7CisgICAgd3NpLT5kZXB0aCA9IHgxMUluZm8tPmRlcHRoKCk7CisgICAgd3NpLT5j
b2xvcm1hcCA9IHgxMUluZm8tPmNvbG9ybWFwKCk7CiAgICAgbV9ucFdpbmRvdy53c19pbmZvID0g
d3NpOwogCi0gICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwotICAgIG1f
bnBXaW5kb3cud2luZG93ID0gKHZvaWQqKXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbklkKCk7
Ci0gICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7
Ci0KICAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCkpKSB7CiAgICAgICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwog
ICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40500</attachid>
            <date>2009-10-02 02:06:12 -0700</date>
            <delta_ts>2009-10-05 04:54:44 -0700</delta_ts>
            <desc>Windowless patch - painting and event handling (8)</desc>
            <filename>windowless8.patch</filename>
            <type>text/plain</type>
            <size>23565</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTMwMmRmNC4uZmE2YmNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAwOS0wOS0zMCAgR2lyaXNoIFJhbWFr
cmlzaG5hbiAgPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3dsZXNz
IE5QQVBJIHBsdWdpbnMKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwODEKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlldyk6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRT
aGFyZWRYRXZlbnRGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdFhF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmlucHV0RXZlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQnV0
dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYTW90aW9uRXZl
bnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQ3Jvc3NpbmdFdmVudFNw
ZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQbHVnaW5EaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorCiAyMDA5LTA5LTI1ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bi56aGFuZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QXJpeWEgSGlkYXlhdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAyODU3MmE0Li5jMDhkNjU2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xMjcsOCArMTI3LDggQEAgdm9pZCBQbHVnaW5W
aWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBPbiBXaW5kb3dz
LCBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgogICAgIHNldE5QV2luZG93
UmVjdChyZWN0KTsKICNlbGlmIFhQX1VOSVgKLSAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1
Z2luIGlmIGl0J3MgZnVsbC1wYWdlLgotICAgIGlmIChtX21vZGUgPT0gTlBfRlVMTCkKKyAgICAv
LyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdpbmRvd2VkIG1v
ZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCisgICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFt
X2lzV2luZG93ZWQpCiAgICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbmRpZgogfQpA
QCAtMTQ3LDYgKzE0NywxMiBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBl
dmVudCkKICAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCiAgICAgICAg
IGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7
CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50KQorICAgICAgICBoYW5kbGVGb2N1c091dEV2ZW50
KCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuRE9NRm9jdXNJ
bkV2ZW50KQorICAgICAgICBoYW5kbGVGb2N1c0luRXZlbnQoKTsKKyNlbmRpZgogfQogCiB2b2lk
IFBsdWdpblZpZXc6OmluaXQoKQpAQCAtODA1LDYgKzgxMSw3IEBAIFBsdWdpblZpZXc6OlBsdWdp
blZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNr
YWdlKiBwCiAjZW5kaWYKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgICwgbV9oYXNQZW5kaW5n
R2VvbWV0cnlDaGFuZ2UoZmFsc2UpCisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKICNlbmRpZgog
ICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQogICAgICwgbV9tYW51YWxTdHJlYW0o
MCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU0YzEwNjUuLjkzYTZkMjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaApAQCAtNTEsNiArNTEsMTAgQEAgdHlwZWRlZiBIV05EIFBsYXRmb3JtUGx1Z2luV2lkZ2V0
OwogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKICNlbmRpZgog
CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyNpbmNsdWRlIDxRUGl4bWFwPgorI2VuZGlmCisKIG5h
bWVzcGFjZSBKU0MgewogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAgICAgICAgIGNsYXNzIElu
c3RhbmNlOwpAQCAtMjQ5LDYgKzI1MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICAgICAgdm9p
ZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKyNpZiBkZWZpbmVkKFFfV1NfWDExKQor
ICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOworICAgICAgICB2b2lkIGhhbmRsZUZv
Y3VzT3V0RXZlbnQoKTsKKyNlbmRpZgogCiAgICAgICAgIGludCBtX21vZGU7CiAgICAgICAgIGlu
dCBtX3BhcmFtQ291bnQ7CkBAIC0zMTUsNiArMzIzLDEwIEBAIHByaXZhdGU6CiAKICNpZiBkZWZp
bmVkKFFfV1NfWDExKQogICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOwor
ICAgICAgICBRUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIERpc3BsYXkqIG1fcGx1Z2luRGlz
cGxheTsKKworICAgICAgICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50KiBldmVudCk7CiAjZW5kaWYK
IAogICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkg
dG8gYSB3aW5kb3dlZCBwbHVnLWluCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luVmlld1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4
IDkwOGU3MDcuLmY1YjZhNjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFr
cmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNTcsNyArNTksOSBAQAogI2lu
Y2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlICJR
V2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRS2V5
RXZlbnQ+CisjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVdpZGdldD4KICNpbmNsdWRl
IDxRWDExSW5mbz4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtODAsNyArODQsNyBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBs
dWdpbldpZGdldCgpCiB7Ci0gICAgaWYgKCFwYXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkIHx8ICFw
bGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgIGlmICghcGFyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CkBAIC0xNTAsOCArMTU0
LDY5IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2lzV2luZG93ZWQgJiYgcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSkKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEFTU0VSVChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKTsKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2luRGlz
cGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gUVgxMUluZm86OmRpc3BsYXkoKTsKKworICAgIFFQ
YWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY29uc3Qg
Ym9vbCBpc1BhaW50aW5nT25XaWRnZXQgPSBwYWludGVyLT5kZXZpY2UoKS0+ZGV2VHlwZSgpID09
IFFJbnRlcm5hbDo6V2lkZ2V0OworICAgIGlmICghaXNQYWludGluZ09uV2lkZ2V0IHx8IG1fZHJh
d2FibGUuaGFuZGxlKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNUcmFu
c3BhcmVudCkgeworICAgICAgICAvLyBBdHRlbXB0IGNvbnRlbnQgcHJvcGFnYXRpb24gYnkgY29w
eWluZyBvdmVyIGZyb20gdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgUVBvaW50IG9mZnNldDsK
KyAgICAgICAgUVBhaW50RGV2aWNlKiBiYWNraW5nU3RvcmVEZXZpY2UgPSAgUVBhaW50ZXI6OnJl
ZGlyZWN0ZWQocGFpbnRlci0+ZGV2aWNlKCksICZvZmZzZXQpOworICAgICAgICBjb25zdCBib29s
IGhhc1ZhbGlkQmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlRGV2aWNlICYmIGJhY2tpbmdTdG9y
ZURldmljZS0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6UGl4bWFwOworICAgICAgICBvZmZzZXQg
PSAtb2Zmc2V0OyAvLyBuZWdhdGluZyB0aGUgb2Zmc2V0IGdpdmVzIHVzIHRoZSBvZmZzZXQgb2Yg
dGhlIHZpZXcgd2l0aGluIHRoZSBiYWNraW5nIHN0b3JlIHBpeG1hcAorCisgICAgICAgIGlmICho
YXNWYWxpZEJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgUVBpeG1hcCogYmFja2luZ1N0b3Jl
UGl4bWFwID0gc3RhdGljX2Nhc3Q8UVBpeG1hcCAqPihiYWNraW5nU3RvcmVEZXZpY2UpOworICAg
ICAgICAgICAgR0MgZ2MgPSBYRGVmYXVsdEdDKFFYMTFJbmZvOjpkaXNwbGF5KCksIFFYMTFJbmZv
OjphcHBTY3JlZW4oKSk7CisgICAgICAgICAgICBYQ29weUFyZWEoUVgxMUluZm86OmRpc3BsYXko
KSwgYmFja2luZ1N0b3JlUGl4bWFwLT5oYW5kbGUoKSwgbV9kcmF3YWJsZS5oYW5kbGUoKSwgZ2Ms
CisgICAgICAgICAgICAgICAgb2Zmc2V0LngoKSArIG1fd2luZG93UmVjdC54KCkgKyBtX2NsaXBS
ZWN0LngoKSwgb2Zmc2V0LnkoKSArIG1fd2luZG93UmVjdC55KCkgKyBtX2NsaXBSZWN0LnkoKSwK
KyAgICAgICAgICAgICAgICBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJlY3QuaGVpZ2h0KCks
IG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSk7CisgICAgICAgIH0gZWxzZSB7IC8vIG5v
IGJhY2tpbmcgc3RvcmUsIGNsZWFuIHRoZSBwaXhtYXAKKyAgICAgICAgICAgIFFQYWludGVyIHBh
aW50ZXIoJm1fZHJhd2FibGUpOworICAgICAgICAgICAgcGFpbnRlci5maWxsUmVjdChtX2NsaXBS
ZWN0LCBRdDo6d2hpdGUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN5bmNYKSB7Cisg
ICAgICAgIC8vIFdlIGFsc28gc3luYyBmb3Igb3BhcXVlIG1vZGUgdGhvdWdoIHdlIG1hZGUgbm8g
Y2hhbmdlcyB0byB0aGUgZHJhd2FibGUuCisgICAgICAgIC8vIE5vdCBzdXJlIHdoeSB0aGlzIGlz
IG5lZWRlZCBidXQgZ2RrIGZhaWxzIHRvIHJlY29nbml6ZSB0aGUgUGl4bWFwIGhhbmRsZQorICAg
ICAgICAvLyB0aGF0IHdlIHNlbmQgYmVsb3cgd2l0aG91dCB0aGlzLgorICAgICAgICBRQXBwbGlj
YXRpb246OnN5bmNYKCk7CisgICAgfQorCisgICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQo
JnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBl
eHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlw
ZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBRWDExSW5mbzo6
ZGlzcGxheSgpOworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3YWJsZS5oYW5kbGUo
KTsKKyAgICBpZiAoaXNQYWludGluZ09uV2lkZ2V0KSB7CisgICAgICAgIGV4cG9zZUV2ZW50Lngg
PSBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgZXhwb3NlRXZlbnQueSA9IG1fY2xpcFJlY3QueSgp
OworICAgICAgICBleHBvc2VFdmVudC53aWR0aCA9IG1fY2xpcFJlY3QueCgpICsgbV9jbGlwUmVj
dC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQKKyAg
ICAgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gbV9jbGlwUmVjdC55KCkgKyBtX2NsaXBSZWN0Lmhl
aWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbQorICAg
IH0gZWxzZSB7CisgICAgICAgIGV4cG9zZUV2ZW50LnggPSAwOworICAgICAgICBleHBvc2VFdmVu
dC55ID0gMDsKKyAgICAgICAgZXhwb3NlRXZlbnQud2lkdGggPSBmcmFtZVJlY3QoKS53aWR0aCgp
OworICAgICAgICBleHBvc2VFdmVudC5oZWlnaHQgPSBmcmFtZVJlY3QoKS5oZWlnaHQoKTsKKyAg
ICB9CisgICAgZGlzcGF0Y2hOUEV2ZW50KHhldmVudCk7CisKKyAgICBpZiAoc3luY1gpCisgICAg
ICAgIFhTeW5jKG1fcGx1Z2luRGlzcGxheSwgRmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1
Z2luCisKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKGZyYW1lUmVjdCgpLngoKSArIG1fY2xpcFJl
Y3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBtX2NsaXBSZWN0LnkoKSwgbV9kcmF3YWJsZSwgCisg
ICAgICAgIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC53aWR0aCgp
LCBtX2NsaXBSZWN0LmhlaWdodCgpKTsKIH0KIAogLy8gVE9ETzogVW5pZnkgYWNyb3NzIHBvcnRz
LgpAQCAtMTY0LDQyICsyMjksNTIgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudCYgZXZlbnQpCiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZmFsc2UpOwogCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBib29sIGFjY2Vw
dGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCk7CisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwogICAgIHNldENh
bGxpbmdQbHVnaW4oZmFsc2UpOwogCiAgICAgcmV0dXJuIGFjY2VwdGVkOwogfQogCi12b2lkIHNl
dFNoYXJlZFhFdmVudEZpZWxkcyhYRXZlbnQmIHhFdmVudCwgUVdpZGdldCogaG9zdFdpbmRvdykK
K3ZvaWQgc2V0U2hhcmVkWEV2ZW50RmllbGRzKFhFdmVudCogeEV2ZW50LCBRV2lkZ2V0KiBob3N0
V2luZG93KQogewotICAgIHhFdmVudC54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1bmF3YXJl
IG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCi0gICAgeEV2ZW50Lnhh
bnkuc2VuZF9ldmVudCA9IGZhbHNlOwotICAgIHhFdmVudC54YW55LmRpc3BsYXkgPSBob3N0V2lu
ZG93LT54MTFJbmZvKCkuZGlzcGxheSgpOwotICAgIC8vIE5PVEU6IGV2ZW50Lnhhbnkud2luZG93
IGRvZXNuJ3QgYWx3YXlzIHJlc3BvbmQgdG8gdGhlIC53aW5kb3cgcHJvcGVydHkgb2Ygb3RoZXIg
WEV2ZW50J3MKKyAgICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUg
b2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2ZXIKKyAgICB4RXZlbnQtPnhh
bnkuc2VuZF9ldmVudCA9IGZhbHNlOworICAgIHhFdmVudC0+eGFueS5kaXNwbGF5ID0gaG9zdFdp
bmRvdy0+eDExSW5mbygpLmRpc3BsYXkoKTsKKyAgICAvLyBOT1RFOiBldmVudC0+eGFueS53aW5k
b3cgZG9lc24ndCBhbHdheXMgcmVzcG9uZCB0byB0aGUgLndpbmRvdyBwcm9wZXJ0eSBvZiBvdGhl
ciBYRXZlbnQncwogICAgIC8vIGJ1dCBkb2VzIGluIHRoZSBjYXNlIG9mIEtleVByZXNzLCBLZXlS
ZWxlYXNlLCBCdXR0b25QcmVzcywgQnV0dG9uUmVsZWFzZSwgYW5kIE1vdGlvbk5vdGlmeQogICAg
IC8vIGV2ZW50czsgdGh1cywgdGhpcyBpcyByaWdodDoKLSAgICB4RXZlbnQueGFueS53aW5kb3cg
PSBob3N0V2luZG93LT53aW5kb3coKS0+aGFuZGxlKCk7CisgICAgeEV2ZW50LT54YW55LndpbmRv
dyA9IGhvc3RXaW5kb3ctPndpbmRvdygpLT5oYW5kbGUoKTsKIH0KIAotdm9pZCBzZXRYS2V5RXZl
bnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQmIHhFdmVudCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2
b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCit7CisgICAgbWVtc2V0
KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworCisgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVu
dCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKTsKKyAgICBRV2lkZ2V0KiB3aW5kb3cgPSBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQo
KSk7CisgICAgc2V0U2hhcmVkWEV2ZW50RmllbGRzKHhFdmVudCwgd2luZG93KTsKK30KKwordm9p
ZCBzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCiB7CiAgICAgUUtleUV2ZW50KiBxS2V5RXZlbnQgPSBldmVudC0+a2V5RXZlbnQo
KS0+cXRFdmVudCgpOwogCi0gICAgeEV2ZW50LnhrZXkucm9vdCA9IFFYMTFJbmZvOjphcHBSb290
V2luZG93KCk7Ci0gICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2UgaGF2ZSBubyBj
aGlsZCB3aW5kb3cKLSAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwot
ICAgIHhFdmVudC54a2V5LnN0YXRlID0gcUtleUV2ZW50LT5uYXRpdmVNb2RpZmllcnMoKTsKLSAg
ICB4RXZlbnQueGtleS5rZXljb2RlID0gcUtleUV2ZW50LT5uYXRpdmVTY2FuQ29kZSgpOwotICAg
IHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB4RXZlbnQtPnR5cGUgPSAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBpbnRz
IGFzIFF0IHVuc2V0cyBLZXlQcmVzcyBhbmQgS2V5UmVsZWFzZQorICAgIHhFdmVudC0+eGtleS5y
b290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5kb3coKTsKKyAgICB4RXZlbnQtPnhrZXkuc3Vid2lu
ZG93ID0gMDsgLy8gd2UgaGF2ZSBubyBjaGlsZCB3aW5kb3cKKyAgICB4RXZlbnQtPnhrZXkudGlt
ZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4RXZlbnQtPnhrZXkuc3RhdGUgPSBxS2V5RXZl
bnQtPm5hdGl2ZU1vZGlmaWVycygpOworICAgIHhFdmVudC0+eGtleS5rZXljb2RlID0gcUtleUV2
ZW50LT5uYXRpdmVTY2FuQ29kZSgpOworICAgIHhFdmVudC0+eGtleS5zYW1lX3NjcmVlbiA9IHRy
dWU7CiAKICAgICAvLyBOT1RFOiBBcyB0aGUgWEV2ZW50cyBzZW50IHRvIHRoZSBwbHVnLWluIGFy
ZSBzeW50aGVzaXplZCBhbmQgdGhlcmUgaXMgbm90IGEgbmF0aXZlIHdpbmRvdwogICAgIC8vIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIHBsdWctaW4gcmVjdGFuZ2xlLCBzb21lIG9mIHRoZSBtZW1iZXJz
IG9mIHRoZSBYRXZlbnQgc3RydWN0dXJlcyBhcmUgbm90CiAgICAgLy8gc2V0IHRvIHRoZWlyIG5v
cm1hbCBYc2VydmVyIHZhbHVlcy4gZS5nLiBLZXkgZXZlbnRzIGRvbid0IGhhdmUgYSBwb3NpdGlv
bi4KICAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL05QRXZl
bnQKLSAgICB4RXZlbnQueGtleS54ID0gMDsKLSAgICB4RXZlbnQueGtleS55ID0gMDsKLSAgICB4
RXZlbnQueGtleS54X3Jvb3QgPSAwOwotICAgIHhFdmVudC54a2V5Lnlfcm9vdCA9IDA7CisgICAg
eEV2ZW50LT54a2V5LnggPSAwOworICAgIHhFdmVudC0+eGtleS55ID0gMDsKKyAgICB4RXZlbnQt
PnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQtPnhrZXkueV9yb290ID0gMDsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQpA
QCAtMjA3LDI1ICsyODIsMTQ1IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBpZiAobV9pc1dpbmRvd2VkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSAia2V5ZG93biIgJiYgZXZlbnQtPnR5
cGUoKSAhPSAia2V5dXAiKQorICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgWEV2ZW50IG5wRXZlbnQ7IC8vIE9uIFVOSVggTlBFdmVu
dCBpcyBhIHR5cGVkZWYgZm9yIFhFdmVudC4KLQotICAgIG5wRXZlbnQudHlwZSA9IChldmVudC0+
dHlwZSgpID09ICJrZXlkb3duIikgPyAyIDogMzsgLy8gaW50cyBhcyBRdCB1bnNldHMgS2V5UHJl
c3MgYW5kIEtleVJlbGVhc2UKLSAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIFFX
aWRnZXQqIHdpbmRvdyA9IFFXaWRnZXQ6OmZpbmQoY2xpZW50LT53aW5JZCgpKTsKLSAgICBzZXRT
aGFyZWRYRXZlbnRGaWVsZHMobnBFdmVudCwgd2luZG93KTsKLSAgICBzZXRYS2V5RXZlbnRTcGVj
aWZpY0ZpZWxkcyhucEV2ZW50LCBldmVudCk7CisgICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5p
dFhFdmVudCgmbnBFdmVudCk7CisgICAgc2V0WEtleUV2ZW50U3BlY2lmaWNGaWVsZHMoJm5wRXZl
bnQsIGV2ZW50KTsKIAogICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBp
bnB1dEV2ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgaW50IHN0
YXRlID0gMDsKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gQ29u
dHJvbE1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBT
aGlmdE1hc2s7CisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9k
MU1hc2s7CisgICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCisgICAgICAgIHN0YXRlIHw9IE1vZDRN
YXNrOworICAgIHJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50
U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAg
IFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9IHhFdmVudC0+eGJ1dHRvbjsKKyAgICB4YnV0dG9uLnR5
cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRv
blByZXNzIDogQnV0dG9uUmVsZWFzZTsKKyAgICB4YnV0dG9uLnJvb3QgPSBRWDExSW5mbzo6YXBw
Um9vdFdpbmRvdygpOworICAgIHhidXR0b24uc3Vid2luZG93ID0gMDsKKyAgICB4YnV0dG9uLnRp
bWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGJ1dHRvbi54ID0gZXZlbnQtPm9mZnNldFgo
KTsKKyAgICB4YnV0dG9uLnkgPSBldmVudC0+b2Zmc2V0WSgpOworICAgIHhidXR0b24ueF9yb290
ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5Z
KCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgc3dp
dGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAg
eGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJpZ2h0
QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICBkZWZhdWx0OgorICAgICAgICB4YnV0dG9uLmJ1
dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB4YnV0dG9uLnNhbWVf
c2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNG
aWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIFhNb3Rpb25F
dmVudCYgeG1vdGlvbiA9IHhFdmVudC0+eG1vdGlvbjsKKyAgICB4bW90aW9uLnR5cGUgPSBNb3Rp
b25Ob3RpZnk7CisgICAgeG1vdGlvbi5yb290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5kb3coKTsK
KyAgICB4bW90aW9uLnN1YndpbmRvdyA9IDA7CisgICAgeG1vdGlvbi50aW1lID0gZXZlbnQtPnRp
bWVTdGFtcCgpOworICAgIHhtb3Rpb24ueCA9IGV2ZW50LT5vZmZzZXRYKCk7CisgICAgeG1vdGlv
bi55ID0gZXZlbnQtPm9mZnNldFkoKTsKKyAgICB4bW90aW9uLnhfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5YKCk7CisgICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhtb3Rp
b24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhtb3Rpb24uaXNfaGludCA9
IE5vdGlmeU5vcm1hbDsKKyAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3Rh
dGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwg
TW91c2VFdmVudCogZXZlbnQpCit7CisgICAgWENyb3NzaW5nRXZlbnQmIHhjcm9zc2luZyA9IHhF
dmVudC0+eGNyb3NzaW5nOworICAgIHhjcm9zc2luZy50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5vdGlmeSA6IExlYXZlTm90aWZ5Owor
ICAgIHhjcm9zc2luZy5yb290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5kb3coKTsKKyAgICB4Y3Jv
c3Npbmcuc3Vid2luZG93ID0gMDsKKyAgICB4Y3Jvc3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3Rh
bXAoKTsKKyAgICB4Y3Jvc3NpbmcueCA9IGV2ZW50LT5vZmZzZXRYKCk7CisgICAgeGNyb3NzaW5n
LnkgPSBldmVudC0+b2Zmc2V0WSgpOworICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2Ny
ZWVuWCgpOworICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhj
cm9zc2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgeGNyb3NzaW5nLm1v
ZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5v
bmU7CisgICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB4Y3Jvc3NpbmcuZm9j
dXMgPSBmYWxzZTsKK30KKwogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqIGV2ZW50KQogewogICAgIGlmIChtX2lzV2luZG93ZWQpCiAgICAgICAgIHJldHVybjsK
KworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkg
eworICAgICAgICAvLyBHaXZlIGZvY3VzIHRvIHRoZSBwbHVnaW4gb24gY2xpY2sKKyAgICAgICAg
aWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOworCisgICAgICAgIGZvY3VzUGx1
Z2luRWxlbWVudCgpOworICAgIH0KKworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZl
bnQoJm5wRXZlbnQpOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50
KTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVF
dmVudCkKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2
ZW50KTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91
dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQor
ICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZucEV2ZW50LCBldmVudCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBYRXZlbnQgbnBFdmVudDsK
KyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVu
dCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUgPSA5OyAvKiBpbnQgYXMgUXQgdW5z
ZXRzIEZvY3VzSW4gKi8KKyAgICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50
LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVu
dCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAg
WEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CisKKyAgICBYRm9jdXND
aGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50Lnhmb2N1czsKKyAgICBldmVudC50eXBlID0gMTA7
IC8qIGludCBhcyBRdCB1bnNldHMgRm9jdXNPdXQgKi8KKyAgICBldmVudC5tb2RlID0gTm90aWZ5
Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAgICBkaXNw
YXRjaE5QRXZlbnQobnBFdmVudCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNj
cm9sbFZpZXcqIHBhcmVudCkKQEAgLTIzOCw3ICs0MzMsOCBAQCB2b2lkIFBsdWdpblZpZXc6OnNl
dFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5k
b3dSZWN0KGNvbnN0IEludFJlY3QmKQogewotICAgIC8vIElnbm9yZWQgYXMgd2UgZG9uJ3Qgd2Fu
dCB0byBtb3ZlIGltbWVkaWF0ZWx5LgorICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICBz
ZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpCkBAIC0yNTQsMTIgKzQ1MCwzMCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2lu
ZG93SWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlD
aGFuZ2UgPSBmYWxzZTsKIAotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAg
ICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOwotICAg
IC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcg
d2lsbAotICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBs
dWdpbiB2aWV3Ci0gICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSghbV9jbGlw
UmVjdC5pc0VtcHR5KCkpOwotICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2soUVJl
Z2lvbihtX2NsaXBSZWN0KSk7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBBU1NF
UlQocGxhdGZvcm1QbHVnaW5XaWdkZXQoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCktPnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7CisgICAgICAgIC8vIGlmIHNldE1hc2sgaXMg
c2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAorICAgICAgICAvLyBi
ZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRlIHRoZSBwbHVnaW4gdmlldworICAg
ICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1w
dHkoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldE1hc2soUVJlZ2lvbiht
X2NsaXBSZWN0KSk7CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKKworICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisKKyAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAgICAg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAwOworICAgIH0KIAogICAgIC8vIEZMQVNI
IFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KICAgICAv
LyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2guCkBAIC0yNjgsMTMgKzQ4
Miw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1f
bnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOwogICAgIH0KIAotICAgIG1f
bnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gbV93aW5k
b3dSZWN0LnkoKTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3Qu
eCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKG1f
ZHJhd2FibGUud2lkdGgoKSAhPSBtX25wV2luZG93LndpZHRoIHx8IG1fZHJhd2FibGUuaGVpZ2h0
KCkgIT0gbV9ucFdpbmRvdy5oZWlnaHQpCisgICAgICAgIG1fZHJhd2FibGUgPSBRUGl4bWFwKG1f
bnBXaW5kb3cud2lkdGgsIG1fbnBXaW5kb3cuaGVpZ2h0KTsKIAogICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTM0MCw2ICs1NDks
MTAgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUpCiAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkg
PSB0cnVlOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAKKyAgICBjYXNlIE5QTlZT
dXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkg
PSB0cnVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICB9CkBAIC00MTksNyArNjMy
LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgIGlmIChtX2lz
V2luZG93ZWQpIHsKICAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNDI5LDE3ICs2NDIsNDUgQEAgdm9pZCBQbHVnaW5WaWV3
OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQg
KyByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gKyByZWN0LT50b3ApOworICAgIGludmFsaWRhdGVX
aW5kb3dsZXNzUGx1Z2luUmVjdChyKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlu
dmFsaWRhdGUoKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3N0YXRpYyBEaXNwbGF5
ICpnZXRQbHVnaW5EaXNwbGF5KCkKK3sKKyAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQg
cnVuIHVzaW5nIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbi4gQXQgdGhlIG1vbWVudCwgd2Ugb25s
eQorICAgIC8vIHN1cHBvcnQgZ2RrIGJhc2VkIHBsdWdpbnMgKGxpa2UgZmxhc2gpIHRoYXQgdXNl
IGEgZGlmZmVyZW50IFggY29ubmVjdGlvbi4KKyAgICAvLyBUaGUgY29kZSBiZWxvdyBoYXMgdGhl
IHNhbWUgZWZmZWN0IGFzIHRoaXMgb25lOgorICAgIC8vIERpc3BsYXkgKmdka0Rpc3BsYXkgPSBn
ZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwor
ICAgIFFMaWJyYXJ5IGxpYnJhcnkoImxpYmdkay14MTEtMi4wIik7CisgICAgaWYgKCFsaWJyYXJ5
LmxvYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0eXBlZGVmIHZvaWQgKigqZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHRfcHRyKSgpOworICAgIGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3B0
ciBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCA9IChnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9wdHIp
IGxpYnJhcnkucmVzb2x2ZSgiZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQiKTsKKyAgICBpZiAoIWdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHR5cGVkZWYg
dm9pZCAqKCpnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0cikodm9pZCAqKTsKKyAgICBn
ZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0ciBnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNw
bGF5ID0gKGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXlfcHRyKSBsaWJyYXJ5LnJlc29sdmUo
Imdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkiKTsKKyAgICBpZiAoIWdka194MTFfZGlzcGxh
eV9nZXRfeGRpc3BsYXkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChEaXNwbGF5
ICopIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQo
KSk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCkBAIC00NTYsMzEgKzY5
Nyw1MCBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKICAgICB9CiAKLSAgICBpZiAobV9uZWVkc1hF
bWJlZCkgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+
dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgICAgICBzZXRQ
bGF0Zm9ybVdpZGdldChuZXcgUGx1Z2luQ29udGFpbmVyUXQodGhpcywgUVdpZGdldDo6ZmluZChj
bGllbnQtPndpbklkKCkpKSk7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBpZiAo
bV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsK
KyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5Db250YWluZXJRdCh0aGlz
LCBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICBtX3N0YXR1cyA9IFBsdWdp
blN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOworICAgICAgICBtX3Bs
dWdpbkRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7CiAgICAgfQogCiAgICAgc2hvdygpOwog
CiAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3NpID0gbmV3IE5QU2V0V2luZG93Q2Fs
bGJhY2tTdHJ1Y3QoKTsKLQogICAgIHdzaS0+dHlwZSA9IDA7CisgICAgCisgICAgY29uc3QgUVgx
MUluZm8qIHgxMUluZm8gPSAwOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgeDEx
SW5mbyA9ICZwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAgICAgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93Lndp
bmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOworICAgICAgICBt
X25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgeDExSW5mbyA9ICZtX2RyYXdhYmxlLngxMUluZm8oKTsKKwor
ICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKyAgICAgICAgbV9ucFdpbmRvdy54
ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0
aCA9IC0xOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworICAgIH0KIAotICAgIHdz
aS0+ZGlzcGxheSA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5kaXNwbGF5KCk7
Ci0gICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJ
bmZvKCkudmlzdWFsKCk7Ci0gICAgd3NpLT5kZXB0aCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PngxMUluZm8oKS5kZXB0aCgpOwotICAgIHdzaS0+Y29sb3JtYXAgPSBwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLT54MTFJbmZvKCkuY29sb3JtYXAoKTsKKyAgICB3c2ktPmRpc3BsYXkgPSB4MTFJbmZv
LT5kaXNwbGF5KCk7CisgICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsKil4MTFJbmZvLT52aXN1YWwo
KTsKKyAgICB3c2ktPmRlcHRoID0geDExSW5mby0+ZGVwdGgoKTsKKyAgICB3c2ktPmNvbG9ybWFw
ID0geDExSW5mby0+Y29sb3JtYXAoKTsKICAgICBtX25wV2luZG93LndzX2luZm8gPSB3c2k7CiAK
LSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0gICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAodm9pZCopcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+d2luSWQoKTsKLSAgICBt
X25wV2luZG93LndpZHRoID0gLTE7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKLQogICAg
IGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsKSkpIHsKICAgICAgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7CiAgICAgICAg
IHNldE5QV2luZG93SWZOZWVkZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40625</attachid>
            <date>2009-10-05 04:54:44 -0700</date>
            <delta_ts>2009-10-06 00:17:42 -0700</delta_ts>
            <desc>Patch 1/4 - [Qt] Add support for windowless NPAPI plugins</desc>
            <filename>patch1</filename>
            <type>text/plain</type>
            <size>23816</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IGZkMTlhNGYwZGIyMGE3MTk1YzE3MjM0YTVkOWYwNjQ2MTQzN2M5NzMKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgTW9uIE9j
dCA1IDE2OjA4OjA3IDIwMDkgKzA1MzAKCiAgICBbUXRdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3ds
ZXNzIE5QQVBJIHBsdWdpbnMKICAgIAogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDgxCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAzN2IxN2Q1Li45OTg0ODQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDA5LTEw
LTA1ICBHaXJpc2ggUmFtYWtyaXNobmFuICA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gQWRkIHN1cHBv
cnQgZm9yIHdpbmRvd2xlc3MgTlBBUEkgcGx1Z2lucworICAgICAgICAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OlBsdWdpblZpZXcpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAg
ICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkWEV2ZW50RmllbGRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmluaXRYRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WEtl
eUV2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnB1dEV2ZW50U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRv
d0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGlj
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGx1
Z2luRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0
KToKKwogMjAwOS0xMC0wMiAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRl
eCAyODU3MmE0Li5jMDhkNjU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xMjcsOCArMTI3
LDggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
ICAgICAvLyBPbiBXaW5kb3dzLCBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5
LgogICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKICNlbGlmIFhQX1VOSVgKLSAgICAvLyBPbiBV
bml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVsbC1wYWdlLgotICAgIGlmIChtX21vZGUg
PT0gTlBfRlVMTCkKKyAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRv
dygpIGluIHdpbmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCisgICAgaWYgKG1fbW9k
ZSA9PSBOUF9GVUxMIHx8ICFtX2lzV2luZG93ZWQpCiAgICAgICAgIHNldE5QV2luZG93UmVjdChy
ZWN0KTsKICNlbmRpZgogfQpAQCAtMTQ3LDYgKzE0NywxMiBAQCB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2Fy
ZEV2ZW50KCkpCiAgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9h
cmRFdmVudCo+KGV2ZW50KSk7CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyAgICBlbHNlIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50KQorICAgICAgICBo
YW5kbGVGb2N1c091dEV2ZW50KCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuRE9NRm9jdXNJbkV2ZW50KQorICAgICAgICBoYW5kbGVGb2N1c0luRXZlbnQoKTsK
KyNlbmRpZgogfQogCiB2b2lkIFBsdWdpblZpZXc6OmluaXQoKQpAQCAtODA1LDYgKzgxMSw3IEBA
IFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwCiAjZW5kaWYKICNpZiBkZWZpbmVkKFFfV1NfWDExKQog
ICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UoZmFsc2UpCisgICAgLCBtX3BsdWdpbkRp
c3BsYXkoMCkKICNlbmRpZgogICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQogICAg
ICwgbV9tYW51YWxTdHJlYW0oMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU0YzEwNjUuLjkzYTZk
MjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtNTEsNiArNTEsMTAgQEAgdHlwZWRlZiBIV05EIFBs
YXRmb3JtUGx1Z2luV2lkZ2V0OwogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdp
bldpZGdldDsKICNlbmRpZgogCisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyNpbmNsdWRlIDxRUGl4
bWFwPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7
CiAgICAgICAgIGNsYXNzIEluc3RhbmNlOwpAQCAtMjQ5LDYgKzI1MywxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKyNpZiBk
ZWZpbmVkKFFfV1NfWDExKQorICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOworICAg
ICAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKKyNlbmRpZgogCiAgICAgICAgIGludCBt
X21vZGU7CiAgICAgICAgIGludCBtX3BhcmFtQ291bnQ7CkBAIC0zMTUsNiArMzIzLDEwIEBAIHBy
aXZhdGU6CiAKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgICAgICBib29sIG1faGFzUGVuZGlu
Z0dlb21ldHJ5Q2hhbmdlOworICAgICAgICBRUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIERp
c3BsYXkqIG1fcGx1Z2luRGlzcGxheTsKKworICAgICAgICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50
KiBldmVudCk7CiAjZW5kaWYKIAogICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBj
bGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCmluZGV4IDkwOGU3MDcuLjVhMWU3NWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAt
NTcsNyArNTksMTAgQEAKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAicnVudGltZV9y
b290LmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxRQXBwbGljYXRp
b24+CisjaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+CiAjaW5jbHVkZSA8UUtleUV2ZW50PgorI2lu
Y2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8UVgxMUluZm8+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTgwLDcgKzg1LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQo
KQogewotICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCB8fCAhcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSkKKyAgICBpZiAoIXBhcmVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwpAQCAtOTYsNiArMTAxLDggQEAgdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgIGlmIChtX3dpbmRvd1JlY3QgPT0g
b2xkV2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQogICAgICAgICByZXR1
cm47CiAKKyAgICBtX2RyYXdhYmxlID0gUVBpeG1hcChtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93
aW5kb3dSZWN0LmhlaWdodCgpKTsKKwogICAgIC8vIGRvIG5vdCBjYWxsIHNldE5QV2luZG93SWZO
ZWVkZWQgaW1tZWRpYXRlbHksIHdpbGwgYmUgY2FsbGVkIG9uIHBhaW50KCkKICAgICBtX2hhc1Bl
bmRpbmdHZW9tZXRyeUNoYW5nZSA9IHRydWU7CiAKQEAgLTE1MCw4ICsxNTcsNjIgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faXNXaW5kb3dlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQot
ICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgp
OworCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
Ym9vbCBzeW5jWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gUVgxMUlu
Zm86OmRpc3BsYXkoKTsKKworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBpc1BhaW50aW5nT25XaWRnZXQgPSBwYWludGVy
LT5kZXZpY2UoKS0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0OworICAgIGlmICghaXNQ
YWludGluZ09uV2lkZ2V0IHx8IG1fZHJhd2FibGUuaGFuZGxlKCkgPT0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1faXNUcmFuc3BhcmVudCkgeworICAgICAgICAvLyBBdHRlbXB0IGNv
bnRlbnQgcHJvcGFnYXRpb24gYnkgY29weWluZyBvdmVyIGZyb20gdGhlIGJhY2tpbmcgc3RvcmUK
KyAgICAgICAgUVBvaW50IG9mZnNldDsKKyAgICAgICAgUVBhaW50RGV2aWNlKiBiYWNraW5nU3Rv
cmVEZXZpY2UgPSAgUVBhaW50ZXI6OnJlZGlyZWN0ZWQocGFpbnRlci0+ZGV2aWNlKCksICZvZmZz
ZXQpOworICAgICAgICBjb25zdCBib29sIGhhc1ZhbGlkQmFja2luZ1N0b3JlID0gYmFja2luZ1N0
b3JlRGV2aWNlICYmIGJhY2tpbmdTdG9yZURldmljZS0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6
UGl4bWFwOworICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OyAvLyBuZWdhdGluZyB0aGUgb2Zmc2V0
IGdpdmVzIHVzIHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcgd2l0aGluIHRoZSBiYWNraW5nIHN0b3Jl
IHBpeG1hcAorCisgICAgICAgIGlmIChoYXNWYWxpZEJhY2tpbmdTdG9yZSkgeworICAgICAgICAg
ICAgUVBpeG1hcCogYmFja2luZ1N0b3JlUGl4bWFwID0gc3RhdGljX2Nhc3Q8UVBpeG1hcCAqPihi
YWNraW5nU3RvcmVEZXZpY2UpOworICAgICAgICAgICAgR0MgZ2MgPSBYRGVmYXVsdEdDKFFYMTFJ
bmZvOjpkaXNwbGF5KCksIFFYMTFJbmZvOjphcHBTY3JlZW4oKSk7CisgICAgICAgICAgICBYQ29w
eUFyZWEoUVgxMUluZm86OmRpc3BsYXkoKSwgYmFja2luZ1N0b3JlUGl4bWFwLT5oYW5kbGUoKSwg
bV9kcmF3YWJsZS5oYW5kbGUoKSwgZ2MsCisgICAgICAgICAgICAgICAgb2Zmc2V0LngoKSArIG1f
d2luZG93UmVjdC54KCkgKyBtX2NsaXBSZWN0LngoKSwgb2Zmc2V0LnkoKSArIG1fd2luZG93UmVj
dC55KCkgKyBtX2NsaXBSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX2NsaXBSZWN0LndpZHRo
KCksIG1fY2xpcFJlY3QuaGVpZ2h0KCksIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSk7
CisgICAgICAgIH0gZWxzZSB7IC8vIG5vIGJhY2tpbmcgc3RvcmUsIGNsZWFuIHRoZSBwaXhtYXAK
KyAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJm1fZHJhd2FibGUpOworICAgICAgICAgICAg
cGFpbnRlci5maWxsUmVjdChtX2NsaXBSZWN0LCBRdDo6d2hpdGUpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHN5bmNYKSB7CisgICAgICAgIC8vIFdlIGFsc28gc3luYyBmb3Igb3BhcXVl
IG1vZGUgdGhvdWdoIHdlIG1hZGUgbm8gY2hhbmdlcyB0byB0aGUgZHJhd2FibGUuCisgICAgICAg
IC8vIE5vdCBzdXJlIHdoeSB0aGlzIGlzIG5lZWRlZCBidXQgZ2RrIGZhaWxzIHRvIHJlY29nbml6
ZSB0aGUgUGl4bWFwIGhhbmRsZQorICAgICAgICAvLyB0aGF0IHdlIHNlbmQgYmVsb3cgd2l0aG91
dCB0aGlzLgorICAgICAgICBRQXBwbGljYXRpb246OnN5bmNYKCk7CisgICAgfQorCisgICAgWEV2
ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAg
IFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBv
c2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2
ZW50LmRpc3BsYXkgPSBRWDExSW5mbzo6ZGlzcGxheSgpOworICAgIGV4cG9zZUV2ZW50LmRyYXdh
YmxlID0gbV9kcmF3YWJsZS5oYW5kbGUoKTsKKyAgICBleHBvc2VFdmVudC54ID0gbV9jbGlwUmVj
dC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IG1fY2xpcFJlY3QueSgpOworICAgIGV4cG9zZUV2
ZW50LndpZHRoID0gbV9jbGlwUmVjdC54KCkgKyBtX2NsaXBSZWN0LndpZHRoKCk7IC8vIGZsYXNo
IGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodAorICAgIGV4cG9zZUV2ZW50LmhlaWdo
dCA9IG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2ggYnVnPyBp
dCB0aGlua3MgaGVpZ2h0IGlzIHRoZSBib3R0b20KKworICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZl
bnQpOworCisgICAgaWYgKHN5bmNYKQorICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIEZh
bHNlKTsgLy8gc3luYyBjaGFuZ2VzIGJ5IHBsdWdpbgorCisgICAgcGFpbnRlci0+ZHJhd1BpeG1h
cChmcmFtZVJlY3QoKS54KCkgKyBtX2NsaXBSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgpICsgbV9j
bGlwUmVjdC55KCksIG1fZHJhd2FibGUsCisgICAgICAgIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBS
ZWN0LnkoKSwgbV9jbGlwUmVjdC53aWR0aCgpLCBtX2NsaXBSZWN0LmhlaWdodCgpKTsKIH0KIAog
Ly8gVE9ETzogVW5pZnkgYWNyb3NzIHBvcnRzLgpAQCAtMTY0LDQyICsyMjUsNTIgQEAgYm9vbCBQ
bHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCiAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOwogCiAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKLSAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCk7
CisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmZXZlbnQpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwogCiAgICAgcmV0
dXJuIGFjY2VwdGVkOwogfQogCi12b2lkIHNldFNoYXJlZFhFdmVudEZpZWxkcyhYRXZlbnQmIHhF
dmVudCwgUVdpZGdldCogaG9zdFdpbmRvdykKK3ZvaWQgc2V0U2hhcmVkWEV2ZW50RmllbGRzKFhF
dmVudCogeEV2ZW50LCBRV2lkZ2V0KiBob3N0V2luZG93KQogewotICAgIHhFdmVudC54YW55LnNl
cmlhbCA9IDA7IC8vIHdlIGFyZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2Vk
IGJ5IFggU2VydmVyCi0gICAgeEV2ZW50Lnhhbnkuc2VuZF9ldmVudCA9IGZhbHNlOwotICAgIHhF
dmVudC54YW55LmRpc3BsYXkgPSBob3N0V2luZG93LT54MTFJbmZvKCkuZGlzcGxheSgpOwotICAg
IC8vIE5PVEU6IGV2ZW50Lnhhbnkud2luZG93IGRvZXNuJ3QgYWx3YXlzIHJlc3BvbmQgdG8gdGhl
IC53aW5kb3cgcHJvcGVydHkgb2Ygb3RoZXIgWEV2ZW50J3MKKyAgICB4RXZlbnQtPnhhbnkuc2Vy
aWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQg
YnkgWCBTZXJ2ZXIKKyAgICB4RXZlbnQtPnhhbnkuc2VuZF9ldmVudCA9IGZhbHNlOworICAgIHhF
dmVudC0+eGFueS5kaXNwbGF5ID0gaG9zdFdpbmRvdy0+eDExSW5mbygpLmRpc3BsYXkoKTsKKyAg
ICAvLyBOT1RFOiBldmVudC0+eGFueS53aW5kb3cgZG9lc24ndCBhbHdheXMgcmVzcG9uZCB0byB0
aGUgLndpbmRvdyBwcm9wZXJ0eSBvZiBvdGhlciBYRXZlbnQncwogICAgIC8vIGJ1dCBkb2VzIGlu
IHRoZSBjYXNlIG9mIEtleVByZXNzLCBLZXlSZWxlYXNlLCBCdXR0b25QcmVzcywgQnV0dG9uUmVs
ZWFzZSwgYW5kIE1vdGlvbk5vdGlmeQogICAgIC8vIGV2ZW50czsgdGh1cywgdGhpcyBpcyByaWdo
dDoKLSAgICB4RXZlbnQueGFueS53aW5kb3cgPSBob3N0V2luZG93LT53aW5kb3coKS0+aGFuZGxl
KCk7CisgICAgeEV2ZW50LT54YW55LndpbmRvdyA9IGhvc3RXaW5kb3ctPndpbmRvdygpLT5oYW5k
bGUoKTsKIH0KIAotdm9pZCBzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQmIHhFdmVu
dCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2
ZW50KiB4RXZlbnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOwor
CisgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBRV2lkZ2V0KiB3aW5kb3cgPSBR
V2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSk7CisgICAgc2V0U2hhcmVkWEV2ZW50RmllbGRz
KHhFdmVudCwgd2luZG93KTsKK30KKwordm9pZCBzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyhY
RXZlbnQqIHhFdmVudCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgUUtleUV2ZW50KiBx
S2V5RXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+cXRFdmVudCgpOwogCi0gICAgeEV2ZW50Lnhr
ZXkucm9vdCA9IFFYMTFJbmZvOjphcHBSb290V2luZG93KCk7Ci0gICAgeEV2ZW50LnhrZXkuc3Vi
d2luZG93ID0gMDsgLy8gd2UgaGF2ZSBubyBjaGlsZCB3aW5kb3cKLSAgICB4RXZlbnQueGtleS50
aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwotICAgIHhFdmVudC54a2V5LnN0YXRlID0gcUtleUV2
ZW50LT5uYXRpdmVNb2RpZmllcnMoKTsKLSAgICB4RXZlbnQueGtleS5rZXljb2RlID0gcUtleUV2
ZW50LT5uYXRpdmVTY2FuQ29kZSgpOwotICAgIHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0gdHJ1
ZTsKKyAgICB4RXZlbnQtPnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBpbnRzIGFzIFF0IHVuc2V0cyBLZXlQcmVzcyBhbmQgS2V5
UmVsZWFzZQorICAgIHhFdmVudC0+eGtleS5yb290ID0gUVgxMUluZm86OmFwcFJvb3RXaW5kb3co
KTsKKyAgICB4RXZlbnQtPnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2UgaGF2ZSBubyBjaGlsZCB3
aW5kb3cKKyAgICB4RXZlbnQtPnhrZXkudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4
RXZlbnQtPnhrZXkuc3RhdGUgPSBxS2V5RXZlbnQtPm5hdGl2ZU1vZGlmaWVycygpOworICAgIHhF
dmVudC0+eGtleS5rZXljb2RlID0gcUtleUV2ZW50LT5uYXRpdmVTY2FuQ29kZSgpOworICAgIHhF
dmVudC0+eGtleS5zYW1lX3NjcmVlbiA9IHRydWU7CiAKICAgICAvLyBOT1RFOiBBcyB0aGUgWEV2
ZW50cyBzZW50IHRvIHRoZSBwbHVnLWluIGFyZSBzeW50aGVzaXplZCBhbmQgdGhlcmUgaXMgbm90
IGEgbmF0aXZlIHdpbmRvdwogICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBsdWctaW4gcmVj
dGFuZ2xlLCBzb21lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBYRXZlbnQgc3RydWN0dXJlcyBhcmUg
bm90CiAgICAgLy8gc2V0IHRvIHRoZWlyIG5vcm1hbCBYc2VydmVyIHZhbHVlcy4gZS5nLiBLZXkg
ZXZlbnRzIGRvbid0IGhhdmUgYSBwb3NpdGlvbi4KICAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL05QRXZlbnQKLSAgICB4RXZlbnQueGtleS54ID0gMDsKLSAg
ICB4RXZlbnQueGtleS55ID0gMDsKLSAgICB4RXZlbnQueGtleS54X3Jvb3QgPSAwOwotICAgIHhF
dmVudC54a2V5Lnlfcm9vdCA9IDA7CisgICAgeEV2ZW50LT54a2V5LnggPSAwOworICAgIHhFdmVu
dC0+eGtleS55ID0gMDsKKyAgICB4RXZlbnQtPnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQt
PnhrZXkueV9yb290ID0gMDsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtMjA3LDI1ICsyNzgsMTQ1IEBAIHZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBp
ZiAobV9pc1dpbmRvd2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUo
KSAhPSAia2V5ZG93biIgJiYgZXZlbnQtPnR5cGUoKSAhPSAia2V5dXAiKQorICAgIGlmIChldmVu
dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWEV2ZW50
IG5wRXZlbnQ7IC8vIE9uIFVOSVggTlBFdmVudCBpcyBhIHR5cGVkZWYgZm9yIFhFdmVudC4KLQot
ICAgIG5wRXZlbnQudHlwZSA9IChldmVudC0+dHlwZSgpID09ICJrZXlkb3duIikgPyAyIDogMzsg
Ly8gaW50cyBhcyBRdCB1bnNldHMgS2V5UHJlc3MgYW5kIEtleVJlbGVhc2UKLSAgICBRV2ViUGFn
ZUNsaWVudCogY2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpOwotICAgIFFXaWRnZXQqIHdpbmRvdyA9IFFXaWRnZXQ6OmZpbmQo
Y2xpZW50LT53aW5JZCgpKTsKLSAgICBzZXRTaGFyZWRYRXZlbnRGaWVsZHMobnBFdmVudCwgd2lu
ZG93KTsKLSAgICBzZXRYS2V5RXZlbnRTcGVjaWZpY0ZpZWxkcyhucEV2ZW50LCBldmVudCk7Cisg
ICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CisgICAgc2V0WEtl
eUV2ZW50U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50KTsKIAogICAgIGlmICghZGlzcGF0
Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
IH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBpbnB1dEV2ZW50U3RhdGUoTW91c2VFdmVudCogZXZl
bnQpCit7CisgICAgdW5zaWduZWQgaW50IHN0YXRlID0gMDsKKyAgICBpZiAoZXZlbnQtPmN0cmxL
ZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gQ29udHJvbE1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlm
dEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBTaGlmdE1hc2s7CisgICAgaWYgKGV2ZW50LT5hbHRL
ZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kMU1hc2s7CisgICAgaWYgKGV2ZW50LT5tZXRhS2V5
KCkpCisgICAgICAgIHN0YXRlIHw9IE1vZDRNYXNrOworICAgIHJldHVybiBzdGF0ZTsKK30KKwor
c3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQs
IE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9IHhFdmVu
dC0+eGJ1dHRvbjsKKyAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9uUmVsZWFzZTsKKyAgICB4
YnV0dG9uLnJvb3QgPSBRWDExSW5mbzo6YXBwUm9vdFdpbmRvdygpOworICAgIHhidXR0b24uc3Vi
d2luZG93ID0gMDsKKyAgICB4YnV0dG9uLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAg
eGJ1dHRvbi54ID0gZXZlbnQtPm9mZnNldFgoKTsKKyAgICB4YnV0dG9uLnkgPSBldmVudC0+b2Zm
c2V0WSgpOworICAgIHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0
dG9uLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0
RXZlbnRTdGF0ZShldmVudCk7CisgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICBj
YXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRv
biA9IEJ1dHRvbjM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICBk
ZWZhdWx0OgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB4YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZl
bnQqIGV2ZW50KQoreworICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVudC0+eG1vdGlv
bjsKKyAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgeG1vdGlvbi5yb290ID0g
UVgxMUluZm86OmFwcFJvb3RXaW5kb3coKTsKKyAgICB4bW90aW9uLnN1YndpbmRvdyA9IDA7Cisg
ICAgeG1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhtb3Rpb24ueCA9IGV2
ZW50LT5vZmZzZXRYKCk7CisgICAgeG1vdGlvbi55ID0gZXZlbnQtPm9mZnNldFkoKTsKKyAgICB4
bW90aW9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeG1vdGlvbi55X3Jvb3QgPSBl
dmVudC0+c2NyZWVuWSgpOworICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZl
bnQpOworICAgIHhtb3Rpb24uaXNfaGludCA9IE5vdGlmeU5vcm1hbDsKKyAgICB4bW90aW9uLnNh
bWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVj
aWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgWENy
b3NzaW5nRXZlbnQmIHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOworICAgIHhjcm9zc2lu
Zy50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBF
bnRlck5vdGlmeSA6IExlYXZlTm90aWZ5OworICAgIHhjcm9zc2luZy5yb290ID0gUVgxMUluZm86
OmFwcFJvb3RXaW5kb3coKTsKKyAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKKyAgICB4Y3Jv
c3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4Y3Jvc3NpbmcueCA9IGV2ZW50
LT5vZmZzZXRYKCk7CisgICAgeGNyb3NzaW5nLnkgPSBldmVudC0+b2Zmc2V0WSgpOworICAgIHhj
cm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhjcm9zc2luZy55X3Jvb3Qg
PSBldmVudC0+c2NyZWVuWSgpOworICAgIHhjcm9zc2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0
ZShldmVudCk7CisgICAgeGNyb3NzaW5nLm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgeGNyb3Nz
aW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisgICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVu
ID0gdHJ1ZTsKKyAgICB4Y3Jvc3NpbmcuZm9jdXMgPSBmYWxzZTsKK30KKwogdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChtX2lz
V2luZG93ZWQpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICAvLyBHaXZlIGZvY3VzIHRvIHRo
ZSBwbHVnaW4gb24gY2xpY2sKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1l
LT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZl
KHRydWUpOworCisgICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgIH0KKworICAgIFhF
dmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2ZW50U3Bl
Y2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50KTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50
U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50KTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQorICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNp
ZmljRmllbGRzKCZucEV2ZW50LCBldmVudCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50
KCkKK3sKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKwor
ICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50
LnR5cGUgPSA5OyAvKiBpbnQgYXMgUXQgdW5zZXRzIEZvY3VzSW4gKi8KKyAgICBldmVudC5tb2Rl
ID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisK
KyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVu
dCgmbnBFdmVudCk7CisKKyAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50Lnhm
b2N1czsKKyAgICBldmVudC50eXBlID0gMTA7IC8qIGludCBhcyBRdCB1bnNldHMgRm9jdXNPdXQg
Ki8KKyAgICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5v
dGlmeURldGFpbE5vbmU7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7CiB9CiAKIHZv
aWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKQEAgLTIzOCw3ICs0
MjksOCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiAK
IHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQogewotICAg
IC8vIElnbm9yZWQgYXMgd2UgZG9uJ3Qgd2FudCB0byBtb3ZlIGltbWVkaWF0ZWx5LgorICAgIGlm
ICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCkBAIC0yNTQsMTIgKzQ0NiwzMCBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICByZXR1cm47
CiAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSBmYWxzZTsKIAotICAgIEFTU0VSVChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRH
ZW9tZXRyeShtX3dpbmRvd1JlY3QpOwotICAgIC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGggYW4g
ZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAotICAgIC8vIGJlIHBlcmZvcm1lZCwgc28g
aW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3Ci0gICAgcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+c2V0VmlzaWJsZSghbV9jbGlwUmVjdC5pc0VtcHR5KCkpOwotICAgIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCktPnNldE1hc2soUVJlZ2lvbihtX2NsaXBSZWN0KSk7CisgICAgaWYgKG1f
aXNXaW5kb3dlZCkgeworICAgICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Cisg
ICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7
CisgICAgICAgIC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8g
Y2xpcHBpbmcgd2lsbAorICAgICAgICAvLyBiZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2FzZSB3
ZSBoaWRlIHRoZSBwbHVnaW4gdmlldworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5z
ZXRWaXNpYmxlKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCktPnNldE1hc2soUVJlZ2lvbihtX2NsaXBSZWN0KSk7CisKKyAgICAgICAgbV9ucFdp
bmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0gbV93aW5k
b3dSZWN0LnkoKTsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBS
ZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0Lnko
KTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgo
KTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdo
dCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1f
bnBXaW5kb3cueSA9IDA7CisKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93
LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSAwOworICAgIH0KIAogICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxs
eS4gTXVsdGlwbGUgY2FsbHMgdG8KICAgICAvLyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVn
aW4gdG8gY3Jhc2guCkBAIC0yNjgsMTQgKzQ3OCw2IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0
LmhlaWdodCgpOwogICAgIH0KIAotICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7
Ci0gICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKLQotICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
dG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1f
Y2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xp
cFJlY3QuaGVpZ2h0KCk7Ci0KICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKQEAgLTM0
MCw2ICs1NDIsMTAgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCiAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSB0cnVlOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAKKyAgICBj
YXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSB0cnVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKICAgICBk
ZWZhdWx0OgogICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICB9CkBAIC00
MTksNyArNjI1LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUpCiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAg
IGlmIChtX2lzV2luZG93ZWQpIHsKICAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+dXBkYXRlKHJl
Y3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDI5LDE3ICs2MzUsNDUgQEAgdm9pZCBQ
bHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVj
dC0+cmlnaHQgKyByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gKyByZWN0LT50b3ApOworICAgIGlu
dmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3N0YXRp
YyBEaXNwbGF5ICpnZXRQbHVnaW5EaXNwbGF5KCkKK3sKKyAgICAvLyBUaGUgcGx1Z2luIHRvb2xr
aXQgbWlnaHQgcnVuIHVzaW5nIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbi4gQXQgdGhlIG1vbWVu
dCwgd2Ugb25seQorICAgIC8vIHN1cHBvcnQgZ2RrIGJhc2VkIHBsdWdpbnMgKGxpa2UgZmxhc2gp
IHRoYXQgdXNlIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbi4KKyAgICAvLyBUaGUgY29kZSBiZWxv
dyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoaXMgb25lOgorICAgIC8vIERpc3BsYXkgKmdka0Rp
c3BsYXkgPSBnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZh
dWx0KCkpOworICAgIFFMaWJyYXJ5IGxpYnJhcnkoImxpYmdkay14MTEtMi4wIik7CisgICAgaWYg
KCFsaWJyYXJ5LmxvYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0eXBlZGVmIHZvaWQg
KigqZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfcHRyKSgpOworICAgIGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0X3B0ciBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCA9IChnZGtfZGlzcGxheV9nZXRfZGVm
YXVsdF9wdHIpIGxpYnJhcnkucmVzb2x2ZSgiZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQiKTsKKyAg
ICBpZiAoIWdka19kaXNwbGF5X2dldF9kZWZhdWx0KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHR5cGVkZWYgdm9pZCAqKCpnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0cikodm9pZCAq
KTsKKyAgICBnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5X3B0ciBnZGtfeDExX2Rpc3BsYXlf
Z2V0X3hkaXNwbGF5ID0gKGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXlfcHRyKSBsaWJyYXJ5
LnJlc29sdmUoImdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkiKTsKKyAgICBpZiAoIWdka194
MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IChEaXNwbGF5ICopIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCkBAIC00
NTYsMzEgKzY5MCw1MCBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKICAgICB9CiAKLSAgICBpZiAo
bV9uZWVkc1hFbWJlZCkgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gbV9wYXJl
bnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAg
ICAgICBzZXRQbGF0Zm9ybVdpZGdldChuZXcgUGx1Z2luQ29udGFpbmVyUXQodGhpcywgUVdpZGdl
dDo6ZmluZChjbGllbnQtPndpbklkKCkpKSk7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAg
ICAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNs
aWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKTsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5Db250YWlu
ZXJRdCh0aGlzLCBRV2lkZ2V0OjpmaW5kKGNsaWVudC0+d2luSWQoKSkpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOworICAg
ICAgICBtX3BsdWdpbkRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7CiAgICAgfQogCiAgICAg
c2hvdygpOwogCiAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3NpID0gbmV3IE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKLQogICAgIHdzaS0+dHlwZSA9IDA7CisgICAgCisgICAg
Y29uc3QgUVgxMUluZm8qIHgxMUluZm8gPSAwOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAg
ICAgICAgeDExSW5mbyA9ICZwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAg
ICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOwor
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeDExSW5mbyA9ICZRQXBwbGljYXRpb246OmRl
c2t0b3AoKS0+eDExSW5mbygpOworCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2Vk
PworICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2luZG93LnkgPSAwOwor
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7CisgICAgfQogCi0gICAgd3NpLT5kaXNwbGF5ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+eDExSW5mbygpLmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS52aXN1YWwoKTsKLSAgICB3c2ktPmRlcHRoID0g
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLmRlcHRoKCk7Ci0gICAgd3NpLT5jb2xv
cm1hcCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPngxMUluZm8oKS5jb2xvcm1hcCgpOworICAg
IHdzaS0+ZGlzcGxheSA9IHgxMUluZm8tPmRpc3BsYXkoKTsKKyAgICB3c2ktPnZpc3VhbCA9IChW
aXN1YWwqKXgxMUluZm8tPnZpc3VhbCgpOworICAgIHdzaS0+ZGVwdGggPSB4MTFJbmZvLT5kZXB0
aCgpOworICAgIHdzaS0+Y29sb3JtYXAgPSB4MTFJbmZvLT5jb2xvcm1hcCgpOwogICAgIG1fbnBX
aW5kb3cud3NfaW5mbyA9IHdzaTsKIAotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZVdpbmRvdzsKLSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLT53aW5JZCgpOwotICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICBtX25wV2lu
ZG93LmhlaWdodCA9IC0xOwotCiAgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewogICAgICAgICB1cGRhdGVQ
bHVnaW5XaWRnZXQoKTsKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwo=
</data>
<flag name="review"
          id="21871"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40626</attachid>
            <date>2009-10-05 04:55:28 -0700</date>
            <delta_ts>2009-10-06 00:22:45 -0700</delta_ts>
            <desc>Patch 2/4 - Use X Pixmap instead of QPixmap.</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>6610</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IDc0NzVlNDk2OTYwZTllOTY2ZDBmNThjZWUzOWUxMjU1NTUyMzVhZGUKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgU2F0IE9j
dCAzIDE1OjQ1OjExIDIwMDkgKzA1MzAKCiAgICBVc2UgWCBQaXhtYXAgaW5zdGVhZCBvZiBRUGl4
bWFwLgogICAgCiAgICBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CiAgICAxLiBB
bGxvd3MgbW9yZSBzaGFyaW5nIG9mIGNvZGUgYmV0d2VlbiBndGsgYW5kIFF0IHBvcnRzIGluIHRo
ZSBmdXR1cmUKICAgIDIuIFFQaXhtYXAgY3JlYXRlcyAyNC1iaXQgYnkgZGVmYXVsdC4gV2UgaGF2
ZSB0byBsYXRlciAndXBncmFkZScgaXQgdG8gMzItYml0LgogICAgMy4gUVBpeG1hcCBtYXkgc29t
ZXRpbWUgY2hhbmdlIGRlcHRoIGJlaGluZCBvdXIgYmFjayEgVGhpcyB3aWxsIHJlcXVpcmUgdXMg
dG8KICAgICAgIHVwZGF0ZSB0aGUgcGx1Z2luIGFib3V0IHRoZSBuZXcgdmlzdWFsIGFuZCBjb2xv
cm1hcC4KICAgIDQuIFdlIGNhbiBlbnN1cmUgdGhhdCBRUGl4bWFwIGlzIGJhY2tlZCBieSBhIFgg
RHJhd2FibGUuIEZvciBleGFtcGxlLCB3aXRoCiAgICAgICAgLWdyYXBoaWNzc3lzdGVtIHJhc3Rl
ciwgUVBpeG1hcCB1c2VzIHRoZSByYXN0ZXIgKGltYWdlKSBiYWNrZW5kLgoKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk4NDg0NS4uYjE5
ZmIzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTIsNiArMiwzMiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgogCisgICAgICAgIFVzZSBYIFBpeG1hcCBpbnN0ZWFkIG9mIFFQaXhtYXAuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CisgICAgICAgIDEuIEFs
bG93cyBtb3JlIHNoYXJpbmcgb2YgY29kZSBiZXR3ZWVuIGd0ayBhbmQgUXQgcG9ydHMgaW4gdGhl
IGZ1dHVyZQorICAgICAgICAyLiBRUGl4bWFwIGNyZWF0ZXMgMjQtYml0IGJ5IGRlZmF1bHQuIFdl
IGhhdmUgdG8gbGF0ZXIgJ3VwZ3JhZGUnIGl0IHRvIDMyLWJpdC4KKyAgICAgICAgMy4gUVBpeG1h
cCBtYXkgc29tZXRpbWUgY2hhbmdlIGRlcHRoIGJlaGluZCBvdXIgYmFjayEgVGhpcyB3aWxsIHJl
cXVpcmUgdXMgdG8KKyAgICAgICAgdXBkYXRlIHRoZSBwbHVnaW4gYWJvdXQgdGhlIG5ldyB2aXN1
YWwgYW5kIGNvbG9ybWFwLgorICAgICAgICA0LiBXZSBjYW4gZW5zdXJlIHRoYXQgUVBpeG1hcCBp
cyBiYWNrZWQgYnkgYSBYIERyYXdhYmxlLiBGb3IgZXhhbXBsZSwgd2l0aAorICAgICAgICAtZ3Jh
cGhpY3NzeXN0ZW0gcmFzdGVyLCBRUGl4bWFwIHVzZXMgdGhlIHJhc3RlciAoaW1hZ2UpIGJhY2tl
bmQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MDgxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbHVnaW5z
L1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmll
dyk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy9x
dC9QbHVnaW5WaWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRl
UGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKKzIwMDktMTAt
MDUgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgW1F0XSBBZGQgc3VwcG9y
dCBmb3Igd2luZG93bGVzcyBOUEFQSSBwbHVnaW5zCiAgICAgICAgIAogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODEKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAppbmRleCBjMDhkNjU2Li4xMTc1YzU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC04MTEs
NiArODExLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICNlbmRpZgogI2lmIGRlZmluZWQo
UV9XU19YMTEpCiAgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZShmYWxzZSkKKyAgICAs
IG1fZHJhd2FibGUoMCkKICAgICAsIG1fcGx1Z2luRGlzcGxheSgwKQogI2VuZGlmCiAgICAgLCBt
X2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCA5M2E2ZDI3
Li5mODUwN2I2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBi
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTUxLDEwICs1MSw2IEBAIHR5cGVkZWYg
SFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZv
cm1QbHVnaW5XaWRnZXQ7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUV9XU19YMTEpCi0jaW5jbHVk
ZSA8UVBpeG1hcD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgSlNDIHsKICAgICBuYW1lc3BhY2UgQmlu
ZGluZ3MgewogICAgICAgICBjbGFzcyBJbnN0YW5jZTsKQEAgLTMyMyw3ICszMTksNyBAQCBwcml2
YXRlOgogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdH
ZW9tZXRyeUNoYW5nZTsKLSAgICAgICAgUVBpeG1hcCBtX2RyYXdhYmxlOworICAgICAgICBQaXht
YXAgbV9kcmF3YWJsZTsKICAgICAgICAgRGlzcGxheSogbV9wbHVnaW5EaXNwbGF5OwogCiAgICAg
ICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZp
ZXdRdC5jcHAKaW5kZXggNWExZTc1ZC4uYmNlNGQ4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVn
aW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZp
ZXdRdC5jcHAKQEAgLTEwMSw3ICsxMDEsMTEgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVn
aW5XaWRnZXQoKQogICAgIGlmIChtX3dpbmRvd1JlY3QgPT0gb2xkV2luZG93UmVjdCAmJiBtX2Ns
aXBSZWN0ID09IG9sZENsaXBSZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RyYXdhYmxl
ID0gUVBpeG1hcChtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsK
KyAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgWEZyZWVQaXhtYXAoUVgxMUluZm86OmRpc3Bs
YXkoKSwgbV9kcmF3YWJsZSk7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgbV9k
cmF3YWJsZSA9IFhDcmVhdGVQaXhtYXAoUVgxMUluZm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFw
cFJvb3RXaW5kb3coKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQo
KSwgUVgxMUluZm86OmFwcERlcHRoKCkpOwogCiAgICAgLy8gZG8gbm90IGNhbGwgc2V0TlBXaW5k
b3dJZk5lZWRlZCBpbW1lZGlhdGVseSwgd2lsbCBiZSBjYWxsZWQgb24gcGFpbnQoKQogICAgIG1f
aGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKQEAgLTE2Niw5ICsxNzAsMTEgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAKICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIGNvbnN0IGJvb2wgaXNQYWludGluZ09uV2lkZ2V0ID0gcGFpbnRlci0+ZGV2
aWNlKCktPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OldpZGdldDsKLSAgICBpZiAoIWlzUGFpbnRp
bmdPbldpZGdldCB8fCBtX2RyYXdhYmxlLmhhbmRsZSgpID09IDApCisgICAgaWYgKCFpc1BhaW50
aW5nT25XaWRnZXQgfHwgIW1fZHJhd2FibGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIFFQaXht
YXAgcXREcmF3YWJsZSA9IFFQaXhtYXA6OmZyb21YMTFQaXhtYXAobV9kcmF3YWJsZSwgUVBpeG1h
cDo6RXhwbGljaXRseVNoYXJlZCk7CisKICAgICBpZiAobV9pc1RyYW5zcGFyZW50KSB7CiAgICAg
ICAgIC8vIEF0dGVtcHQgY29udGVudCBwcm9wYWdhdGlvbiBieSBjb3B5aW5nIG92ZXIgZnJvbSB0
aGUgYmFja2luZyBzdG9yZQogICAgICAgICBRUG9pbnQgb2Zmc2V0OwpAQCAtMTc5LDExICsxODUs
MTEgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCiAgICAgICAgIGlmIChoYXNWYWxpZEJhY2tpbmdTdG9yZSkgewog
ICAgICAgICAgICAgUVBpeG1hcCogYmFja2luZ1N0b3JlUGl4bWFwID0gc3RhdGljX2Nhc3Q8UVBp
eG1hcCAqPihiYWNraW5nU3RvcmVEZXZpY2UpOwogICAgICAgICAgICAgR0MgZ2MgPSBYRGVmYXVs
dEdDKFFYMTFJbmZvOjpkaXNwbGF5KCksIFFYMTFJbmZvOjphcHBTY3JlZW4oKSk7Ci0gICAgICAg
ICAgICBYQ29weUFyZWEoUVgxMUluZm86OmRpc3BsYXkoKSwgYmFja2luZ1N0b3JlUGl4bWFwLT5o
YW5kbGUoKSwgbV9kcmF3YWJsZS5oYW5kbGUoKSwgZ2MsCisgICAgICAgICAgICBYQ29weUFyZWEo
UVgxMUluZm86OmRpc3BsYXkoKSwgYmFja2luZ1N0b3JlUGl4bWFwLT5oYW5kbGUoKSwgbV9kcmF3
YWJsZSwgZ2MsCiAgICAgICAgICAgICAgICAgb2Zmc2V0LngoKSArIG1fd2luZG93UmVjdC54KCkg
KyBtX2NsaXBSZWN0LngoKSwgb2Zmc2V0LnkoKSArIG1fd2luZG93UmVjdC55KCkgKyBtX2NsaXBS
ZWN0LnkoKSwKICAgICAgICAgICAgICAgICBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJlY3Qu
aGVpZ2h0KCksIG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSk7CiAgICAgICAgIH0gZWxz
ZSB7IC8vIG5vIGJhY2tpbmcgc3RvcmUsIGNsZWFuIHRoZSBwaXhtYXAKLSAgICAgICAgICAgIFFQ
YWludGVyIHBhaW50ZXIoJm1fZHJhd2FibGUpOworICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRl
cigmcXREcmF3YWJsZSk7CiAgICAgICAgICAgICBwYWludGVyLmZpbGxSZWN0KG1fY2xpcFJlY3Qs
IFF0Ojp3aGl0ZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDAsNyArMjA2LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiAgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0geGV2ZW50Lnhn
cmFwaGljc2V4cG9zZTsKICAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NFeHBvc2U7CiAg
ICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IFFYMTFJbmZvOjpkaXNwbGF5KCk7Ci0gICAgZXhwb3Nl
RXZlbnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlLmhhbmRsZSgpOworICAgIGV4cG9zZUV2ZW50LmRy
YXdhYmxlID0gbV9kcmF3YWJsZTsKICAgICBleHBvc2VFdmVudC54ID0gbV9jbGlwUmVjdC54KCk7
CiAgICAgZXhwb3NlRXZlbnQueSA9IG1fY2xpcFJlY3QueSgpOwogICAgIGV4cG9zZUV2ZW50Lndp
ZHRoID0gbV9jbGlwUmVjdC54KCkgKyBtX2NsaXBSZWN0LndpZHRoKCk7IC8vIGZsYXNoIGJ1Zz8g
aXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodApAQCAtMjExLDcgKzIxNyw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogICAgIGlmIChzeW5jWCkKICAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5LCBGYWxz
ZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KIAotICAgIHBhaW50ZXItPmRyYXdQaXhtYXAo
ZnJhbWVSZWN0KCkueCgpICsgbV9jbGlwUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSArIG1fY2xp
cFJlY3QueSgpLCBtX2RyYXdhYmxlLAorICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoZnJhbWVSZWN0
KCkueCgpICsgbV9jbGlwUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSArIG1fY2xpcFJlY3QueSgp
LCBxdERyYXdhYmxlLAogICAgICAgICBtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1f
Y2xpcFJlY3Qud2lkdGgoKSwgbV9jbGlwUmVjdC5oZWlnaHQoKSk7CiB9CiAKQEAgLTc0Niw2ICs3
NTIsOSBAQCB2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAgICAgaWYgKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpCiAgICAgICAgIGRlbGV0ZSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpOworCisgICAgaWYgKG1fZHJhd2FibGUpCisgICAgICAgIFhGcmVlUGl4bWFwKFFYMTFJbmZv
OjpkaXNwbGF5KCksIG1fZHJhd2FibGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="21872"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40627</attachid>
            <date>2009-10-05 04:56:33 -0700</date>
            <delta_ts>2009-10-06 04:32:07 -0700</delta_ts>
            <desc>Patch 3/4 - Add PluginQuirkUsesScreenDefaultVisual for Flash.</desc>
            <filename>patch3</filename>
            <type>text/plain</type>
            <size>11975</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IDRkZDI1YjgyYzZhNTk1M2VjYjg5NTU4ZDkxYzk0OWViOTIyYWI0MDEKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgU3VuIE9j
dCA0IDAwOjAwOjAwIDIwMDkgKzA1MzAKCiAgICBBZGQgUGx1Z2luUXVpcmtVc2VzU2NyZWVuRGVm
YXVsdFZpc3VhbCBmb3IgRmxhc2guCiAgICAKICAgIEZsYXNoIGRvZXMgbm90IHVzZSB0aGUgdmlz
dWFsIHByb3ZpZGVkIGJ5IHVzIHRvIGRyYXcgaW50byB0aGUgZHJhd2FibGUuCiAgICBJdCBpbnN0
ZWFkIHVzZXMgdGhlIHN5c3RlbSBkZWZhdWx0IHZpc3VhbCAoYXMgcmV0dXJuZWQgYnkgWERlZmF1
bHRWaXN1YWwpLgogICAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzY3JlZW4gZGVmYXVsdCB2aXN1
YWwgaXMgMjQtYml0LCBGbGFzaCB3b24ndCBiZQogICAgYWJsZSB0byBkcmF3IG9uIDMyLWJpdCBk
cmF3YWJsZSBjcmVhdGVkIGJ5IHVzLiBUaGlzIGlzIGEgYnVnIGluIEZsYXNoCiAgICBhbmQgZm9y
IHRoZSBtb21lbnQsIHRoZSBhYm92ZSBxdWlyayBpcyBvbmx5IHNldCBmb3IgRmxhc2guCiAgICAK
ICAgIE91ciBzdHJhdGVneSB0byBjcmVhdGUgdGhlIGRyYXdhYmxlOgogICAgICAgIDEuIENyZWF0
ZSBhIDMyLWJpdCBkcmF3YWJsZSBpZiB0aGUgZGVmYXVsdCBzY3JlZW4gZGVwdGggaXMgMzIgb3Ig
dGhlCiAgICAgICAgICAgcXVpcmsgaXMgbm90IHNldCAoaS5lIG5vdCBmbGFzaCkKICAgICAgICAy
LiBJZiB3ZSBkaWRuJ3QgY3JlYXRlIGEgMzItYml0IGRyYXdhYmxlIChtYXliZSB0aGUgRGlzcGxh
eSBoYXMgbm8gc3VjaAogICAgICAgICAgIHZpc3VhbCksIHdlIGNyZWF0ZSBhIGRyYXdhYmxlIHdp
dGggZGVmYXVsdCBzY3JlZW4gZGVwdGguCiAgICAKICAgIEFzIGEgcmVzdWx0IG9mIHRoZSBhYm92
ZSBjaGFuZ2VzLCBjb250ZW50IHByb3BhZ2F0aW9uIGJlaGF2aW9yIGNoYW5nZXMgYXM6CiAgICAg
ICAgMS4gQ29udGVudCBwcm9wYWdhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZSBkcmF3YWJs
ZSB3ZSBjcmVhdGUgYW5kCiAgICAgICAgICAgUXQncyBiYWNraW5nIHN0b3JlIGFyZSBvZiB0aGUg
c2FtZSBkZXB0aC4KICAgICAgICAyLiBJZiB3ZSBjcmVhdGVkIGEgMzItYml0IGRyYXdhYmxlLCB0
aGVyZSBpcyBubyBuZWVkIGZvciBjb250ZW50CiAgICAgICAgICAgcHJvcGFnYXRpb24gKFF0IHdp
bGwgdGFrZSBjYXJlIG9mIGl0KS4KCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIxOWZiMzEuLjlhMDFmYzMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsNDggQEAKIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBBZGQgUGx1Z2lu
UXVpcmtVc2VzU2NyZWVuRGVmYXVsdFZpc3VhbCBmb3IgRmxhc2guCisgICAgICAgIAorICAgICAg
ICBGbGFzaCBkb2VzIG5vdCB1c2UgdGhlIHZpc3VhbCBwcm92aWRlZCBieSB1cyB0byBkcmF3IGlu
dG8gdGhlIGRyYXdhYmxlLgorICAgICAgICBJdCBpbnN0ZWFkIHVzZXMgdGhlIHN5c3RlbSBkZWZh
dWx0IHZpc3VhbCAoYXMgcmV0dXJuZWQgYnkgWERlZmF1bHRWaXN1YWwpLgorICAgICAgICBUaGlz
IG1lYW5zIHRoYXQgaWYgdGhlIHNjcmVlbiBkZWZhdWx0IHZpc3VhbCBpcyAyNC1iaXQsIEZsYXNo
IHdvbid0IGJlCisgICAgICAgIGFibGUgdG8gZHJhdyBvbiAzMi1iaXQgZHJhd2FibGUgY3JlYXRl
ZCBieSB1cy4gVGhpcyBpcyBhIGJ1ZyBpbiBGbGFzaAorICAgICAgICBhbmQgZm9yIHRoZSBtb21l
bnQsIHRoZSBhYm92ZSBxdWlyayBpcyBvbmx5IHNldCBmb3IgRmxhc2guCisgICAgICAgIAorICAg
ICAgICBPdXIgc3RyYXRlZ3kgdG8gY3JlYXRlIHRoZSBkcmF3YWJsZToKKyAgICAgICAgMS4gQ3Jl
YXRlIGEgMzItYml0IGRyYXdhYmxlIGlmIHRoZSBkZWZhdWx0IHNjcmVlbiBkZXB0aCBpcyAzMiBv
ciB0aGUKKyAgICAgICAgcXVpcmsgaXMgbm90IHNldCAoaS5lIG5vdCBmbGFzaCkKKyAgICAgICAg
Mi4gSWYgd2UgZGlkbid0IGNyZWF0ZSBhIDMyLWJpdCBkcmF3YWJsZSAobWF5YmUgdGhlIERpc3Bs
YXkgaGFzIG5vIHN1Y2gKKyAgICAgICAgdmlzdWFsKSwgd2UgY3JlYXRlIGEgZHJhd2FibGUgd2l0
aCBkZWZhdWx0IHNjcmVlbiBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIEFzIGEgcmVzdWx0IG9m
IHRoZSBhYm92ZSBjaGFuZ2VzLCBjb250ZW50IHByb3BhZ2F0aW9uIGJlaGF2aW9yIGNoYW5nZXMg
YXM6CisgICAgICAgIDEuIENvbnRlbnQgcHJvcGFnYXRpb24gaXMgcG9zc2libGUgb25seSBpZiB0
aGUgZHJhd2FibGUgd2UgY3JlYXRlIGFuZAorICAgICAgICBRdCdzIGJhY2tpbmcgc3RvcmUgYXJl
IG9mIHRoZSBzYW1lIGRlcHRoLgorICAgICAgICAyLiBJZiB3ZSBjcmVhdGVkIGEgMzItYml0IGRy
YXdhYmxlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBjb250ZW50CisgICAgICAgIHByb3BhZ2F0aW9u
IChRdCB3aWxsIHRha2UgY2FyZSBvZiBpdCkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09Q
UyEpCisKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKiBwbHVnaW5z
L1BsdWdpblF1aXJrU2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpQbHVnaW5W
aWV3KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVnaW5z
L3F0L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRh
dGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpwbGF0Zm9ybURlc3Ryb3kpOgorCisyMDA5LTEwLTA1ICBHaXJpc2ggUmFtYWtyaXNobmFu
ICA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAgICAgICAgIFVzZSBYIFBpeG1hcCBpbnN0ZWFkIG9mIFFQaXhtYXAuCiAgICAg
ICAgIAogICAgICAgICBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHAKaW5kZXggNjEyYTlkNy4uYWE2ODk5OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmNwcApAQCAtMTgzLDYgKzE4Myw3IEBAIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0
ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAjaWYgUExBVEZPUk0oUVQpCiAg
ICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQpOwog
I2VuZGlmCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtVc2VzU2NyZWVuRGVm
YXVsdFZpc3VhbCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGbGFzaCA5IGFu
ZCBvbGRlciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxs
YSB1c2VyIGFnZW50CiAgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01v
emlsbGFVc2VyQWdlbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJr
U2V0LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaAppbmRleCBiNjUyYzZlLi5h
YzRiYWJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaAorKysg
Yi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApAQCAtNDYsNiArNDYsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5k
bGVPbkRlc3Ryb3kgPSAxIDw8IDEwLAogICAgICAgICBQbHVnaW5RdWlya0RvbnRBbGxvd011bHRp
cGxlSW5zdGFuY2VzID0gMSA8PCAxMSwKICAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rv
b2xLaXQgPSAxIDw8IDEyLAorICAgICAgICBQbHVnaW5RdWlya1VzZXNTY3JlZW5EZWZhdWx0Vmlz
dWFsID0gMSA8PCAxMywKICAgICB9OwogCiAgICAgY2xhc3MgUGx1Z2luUXVpcmtTZXQgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuY3BwCmluZGV4IDExNzVjNTcuLjE0MTE3NDkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKQEAgLTgxMiw2ICs4MTIsOCBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcAogI2lmIGRl
ZmluZWQoUV9XU19YMTEpCiAgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZShmYWxzZSkK
ICAgICAsIG1fZHJhd2FibGUoMCkKKyAgICAsIG1fdmlzdWFsKDApCisgICAgLCBtX2NvbG9ybWFw
KDApCiAgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKICNlbmRpZgogICAgICwgbV9sb2FkTWFudWFs
bHkobG9hZE1hbnVhbGx5KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
aCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggZjg1MDdiNi4uZWZlODAwYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCkBAIC0zMjAsNiArMzIwLDggQEAgcHJpdmF0ZToKICNpZiBkZWZp
bmVkKFFfV1NfWDExKQogICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOwog
ICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKKyAgICAgICAgVmlzdWFsICptX3Zpc3VhbDsKKyAg
ICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKICAgICAgICAgRGlzcGxheSogbV9wbHVnaW5EaXNw
bGF5OwogCiAgICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5z
L3F0L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggYmNlNGQ4Yy4uMDg3OGI0ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L3F0L1BsdWdpblZpZXdRdC5jcHAKQEAgLTY4LDYgKzY4LDExIEBACiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KICNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KICNpbmNsdWRlIDxYMTEv
WC5oPgorI2lmbmRlZiBRVF9OT19YUkVOREVSCisjZGVmaW5lIEJvb2wgaW50CisjZGVmaW5lIFN0
YXR1cyBpbnQKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisjZW5kaWYKIAog
dXNpbmcgSlNDOjpFeGVjU3RhdGU7CiB1c2luZyBKU0M6OkludGVycHJldGVyOwpAQCAtMTA1LDcg
KzExMCw4IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKICAgICAgICAg
WEZyZWVQaXhtYXAoUVgxMUluZm86OmRpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CiAKICAgICBpZiAo
IW1faXNXaW5kb3dlZCkKLSAgICAgICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVQaXhtYXAoUVgxMUlu
Zm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFwcFJvb3RXaW5kb3coKSwgbV93aW5kb3dSZWN0Lndp
ZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwgUVgxMUluZm86OmFwcERlcHRoKCkpOworICAg
ICAgICBtX2RyYXdhYmxlID0gWENyZWF0ZVBpeG1hcChRWDExSW5mbzo6ZGlzcGxheSgpLCBRWDEx
SW5mbzo6YXBwUm9vdFdpbmRvdygpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0ICopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGgpOwogCiAgICAg
Ly8gZG8gbm90IGNhbGwgc2V0TlBXaW5kb3dJZk5lZWRlZCBpbW1lZGlhdGVseSwgd2lsbCBiZSBj
YWxsZWQgb24gcGFpbnQoKQogICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsK
QEAgLTE3NCwyMSArMTgwLDI0IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICByZXR1cm47CiAKICAg
ICBRUGl4bWFwIHF0RHJhd2FibGUgPSBRUGl4bWFwOjpmcm9tWDExUGl4bWFwKG1fZHJhd2FibGUs
IFFQaXhtYXA6OkV4cGxpY2l0bHlTaGFyZWQpOworICAgIGNvbnN0IGludCBkcmF3YWJsZURlcHRo
ID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVw
dGg7CisgICAgQVNTRVJUKGRyYXdhYmxlRGVwdGggPT0gcXREcmF3YWJsZS5kZXB0aCgpKTsKIAot
ICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpIHsKLSAgICAgICAgLy8gQXR0ZW1wdCBjb250ZW50IHBy
b3BhZ2F0aW9uIGJ5IGNvcHlpbmcgb3ZlciBmcm9tIHRoZSBiYWNraW5nIHN0b3JlCisgICAgaWYg
KG1faXNUcmFuc3BhcmVudCAmJiBkcmF3YWJsZURlcHRoICE9IDMyKSB7CisgICAgICAgIC8vIEF0
dGVtcHQgY29udGVudCBwcm9wYWdhdGlvbiBmb3IgZHJhd2FibGUgd2l0aCBubyBhbHBoYSBieSBj
b3B5aW5nIG92ZXIgZnJvbSB0aGUgYmFja2luZyBzdG9yZQogICAgICAgICBRUG9pbnQgb2Zmc2V0
OwogICAgICAgICBRUGFpbnREZXZpY2UqIGJhY2tpbmdTdG9yZURldmljZSA9ICBRUGFpbnRlcjo6
cmVkaXJlY3RlZChwYWludGVyLT5kZXZpY2UoKSwgJm9mZnNldCk7Ci0gICAgICAgIGNvbnN0IGJv
b2wgaGFzVmFsaWRCYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmVEZXZpY2UgJiYgYmFja2luZ1N0
b3JlRGV2aWNlLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQaXhtYXA7CiAgICAgICAgIG9mZnNl
dCA9IC1vZmZzZXQ7IC8vIG5lZ2F0aW5nIHRoZSBvZmZzZXQgZ2l2ZXMgdXMgdGhlIG9mZnNldCBv
ZiB0aGUgdmlldyB3aXRoaW4gdGhlIGJhY2tpbmcgc3RvcmUgcGl4bWFwCiAKLSAgICAgICAgaWYg
KGhhc1ZhbGlkQmFja2luZ1N0b3JlKSB7Ci0gICAgICAgICAgICBRUGl4bWFwKiBiYWNraW5nU3Rv
cmVQaXhtYXAgPSBzdGF0aWNfY2FzdDxRUGl4bWFwICo+KGJhY2tpbmdTdG9yZURldmljZSk7Cisg
ICAgICAgIGNvbnN0IGJvb2wgaGFzVmFsaWRCYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmVEZXZp
Y2UgJiYgYmFja2luZ1N0b3JlRGV2aWNlLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQaXhtYXA7
CisgICAgICAgIFFQaXhtYXAqIGJhY2tpbmdTdG9yZVBpeG1hcCA9IHN0YXRpY19jYXN0PFFQaXht
YXAgKj4oYmFja2luZ1N0b3JlRGV2aWNlKTsKKworICAgICAgICBpZiAoaGFzVmFsaWRCYWNraW5n
U3RvcmUgJiYgYmFja2luZ1N0b3JlUGl4bWFwLT5kZXB0aCgpID09IGRyYXdhYmxlRGVwdGgpIHsK
ICAgICAgICAgICAgIEdDIGdjID0gWERlZmF1bHRHQyhRWDExSW5mbzo6ZGlzcGxheSgpLCBRWDEx
SW5mbzo6YXBwU2NyZWVuKCkpOwogICAgICAgICAgICAgWENvcHlBcmVhKFFYMTFJbmZvOjpkaXNw
bGF5KCksIGJhY2tpbmdTdG9yZVBpeG1hcC0+aGFuZGxlKCksIG1fZHJhd2FibGUsIGdjLAogICAg
ICAgICAgICAgICAgIG9mZnNldC54KCkgKyBtX3dpbmRvd1JlY3QueCgpICsgbV9jbGlwUmVjdC54
KCksIG9mZnNldC55KCkgKyBtX3dpbmRvd1JlY3QueSgpICsgbV9jbGlwUmVjdC55KCksCiAgICAg
ICAgICAgICAgICAgbV9jbGlwUmVjdC53aWR0aCgpLCBtX2NsaXBSZWN0LmhlaWdodCgpLCBtX2Ns
aXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCkpOwotICAgICAgICB9IGVsc2UgeyAvLyBubyBiYWNr
aW5nIHN0b3JlLCBjbGVhbiB0aGUgcGl4bWFwCisgICAgICAgIH0gZWxzZSB7IC8vIG5vIGJhY2tp
bmcgc3RvcmUsIGNsZWFuIHRoZSBwaXhtYXAgYmVjYXVzZSB0aGUgcGx1Z2luIHRoaW5rcyBpdCdz
IHRyYW5zcGFyZW50CiAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVyKCZxdERyYXdhYmxlKTsK
ICAgICAgICAgICAgIHBhaW50ZXIuZmlsbFJlY3QobV9jbGlwUmVjdCwgUXQ6OndoaXRlKTsKICAg
ICAgICAgfQpAQCAtNjgyLDYgKzY5MSw0OSBAQCBzdGF0aWMgRGlzcGxheSAqZ2V0UGx1Z2luRGlz
cGxheSgpCiAgICAgcmV0dXJuIChEaXNwbGF5ICopIGdka194MTFfZGlzcGxheV9nZXRfeGRpc3Bs
YXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGdldFZpc3Vh
bEFuZENvbG9ybWFwKGludCBkZXB0aCwgVmlzdWFsICoqdmlzdWFsLCBDb2xvcm1hcCAqY29sb3Jt
YXApCit7CisgICAgKnZpc3VhbCA9IDA7CisgICAgKmNvbG9ybWFwID0gMDsKKworI2lmbmRlZiBR
VF9OT19YUkVOREVSCisgICAgc3RhdGljIGNvbnN0IGJvb2wgdXNlWHJlbmRlciA9IHFnZXRlbnYo
IlFUX1gxMV9OT19YUkVOREVSIikuaXNOdWxsKCk7IC8vIFNob3VsZCBhbHNvIGNoZWNrIGZvciBY
UmVuZGVyID49IDAuNQorI2Vsc2UKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB1c2VYcmVuZGVyID0g
ZmFsc2U7CisjZW5kaWYKKworICAgIGlmICghdXNlWHJlbmRlciAmJiBkZXB0aCA9PSAzMikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaW50IG52aTsKKyAgICBYVmlzdWFsSW5mbyB0ZW1wbDsKKyAg
ICB0ZW1wbC5zY3JlZW4gID0gUVgxMUluZm86OmFwcFNjcmVlbigpOworICAgIHRlbXBsLmRlcHRo
ICAgPSBkZXB0aDsKKyAgICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOworICAgIFhWaXN1YWxJ
bmZvKiB4dmkgPSBYR2V0VmlzdWFsSW5mbyhRWDExSW5mbzo6ZGlzcGxheSgpLCBWaXN1YWxTY3Jl
ZW5NYXNrIHwgVmlzdWFsRGVwdGhNYXNrIHwgVmlzdWFsQ2xhc3NNYXNrLCAmdGVtcGwsICZudmkp
OworCisgICAgaWYgKCF4dmkpCisgICAgICAgIHJldHVybjsKKworI2lmbmRlZiBRVF9OT19YUkVO
REVSCisgICAgaWYgKGRlcHRoID09IDMyKSB7CisgICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlk
eCA8IG52aTsgKytpZHgpIHsKKyAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQg
PSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChRWDExSW5mbzo6ZGlzcGxheSgpLCB4dmlbaWR4XS52
aXN1YWwpOworICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAm
JiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKKyAgICAgICAgICAgICAgICAgKnZpc3VhbCA9
IHh2aVtpZHhdLnZpc3VhbDsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYgLy8gUVRfTk9fWFJFTkRFUgorICAgICAg
ICAqdmlzdWFsID0geHZpWzBdLnZpc3VhbDsKKworICAgIFhGcmVlKHh2aSk7CisKKyAgICBpZiAo
KnZpc3VhbCkKKyAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKFFYMTFJbmZvOjpk
aXNwbGF5KCksIFFYMTFJbmZvOjphcHBSb290V2luZG93KCksICp2aXN1YWwsIEFsbG9jTm9uZSk7
Cit9CisKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiB7CiAgICAgQVNTRVJUKG1f
aXNTdGFydGVkKTsKQEAgLTcxNSwxNiArNzY3LDM0IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCgpCiAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3NpID0gbmV3IE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKICAgICB3c2ktPnR5cGUgPSAwOwogICAgIAotICAgIGNv
bnN0IFFYMTFJbmZvKiB4MTFJbmZvID0gMDsKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAg
ICAgIHgxMUluZm8gPSAmcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpOworICAgICAg
ICBjb25zdCBRWDExSW5mbyogeDExSW5mbyA9ICZwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJ
bmZvKCk7CisKKyAgICAgICAgd3NpLT5kaXNwbGF5ID0geDExSW5mby0+ZGlzcGxheSgpOworICAg
ICAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXgxMUluZm8tPnZpc3VhbCgpOworICAgICAgICB3
c2ktPmRlcHRoID0geDExSW5mby0+ZGVwdGgoKTsKKyAgICAgICAgd3NpLT5jb2xvcm1hcCA9IHgx
MUluZm8tPmNvbG9ybWFwKCk7CiAKICAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dU
eXBlV2luZG93OwogICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT53aW5JZCgpOwogICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CiAg
ICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgeDEx
SW5mbyA9ICZRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+eDExSW5mbygpOworICAgICAgICBjb25z
dCBRWDExSW5mbyogeDExSW5mbyA9ICZRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+eDExSW5mbygp
OworCisgICAgICAgIGlmICh4MTFJbmZvLT5kZXB0aCgpID09IDMyIHx8ICFtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtVc2VzU2NyZWVuRGVmYXVsdFZpc3VhbCkpIHsKKyAg
ICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKDMyLCAmbV92aXN1YWwsICZtX2NvbG9ybWFw
KTsKKyAgICAgICAgICAgIHdzaS0+ZGVwdGggPSAzMjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghbV92aXN1YWwpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKHgxMUluZm8t
PmRlcHRoKCksICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3NpLT5kZXB0
aCA9IHgxMUluZm8tPmRlcHRoKCk7CisgICAgICAgIH0KKworICAgICAgICB3c2ktPmRpc3BsYXkg
PSB4MTFJbmZvLT5kaXNwbGF5KCk7CisgICAgICAgIHdzaS0+dmlzdWFsID0gbV92aXN1YWw7Cisg
ICAgICAgIHdzaS0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOwogCiAgICAgICAgIG1fbnBXaW5kb3cu
dHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwogICAgICAgICBtX25wV2luZG93LndpbmRvdyA9
IDA7IC8vIE5vdCB1c2VkPwpAQCAtNzM0LDEwICs4MDQsNiBAQCBib29sIFBsdWdpblZpZXc6OnBs
YXRmb3JtU3RhcnQoKQogICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOwogICAgIH0KIAot
ICAgIHdzaS0+ZGlzcGxheSA9IHgxMUluZm8tPmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9
IChWaXN1YWwqKXgxMUluZm8tPnZpc3VhbCgpOwotICAgIHdzaS0+ZGVwdGggPSB4MTFJbmZvLT5k
ZXB0aCgpOwotICAgIHdzaS0+Y29sb3JtYXAgPSB4MTFJbmZvLT5jb2xvcm1hcCgpOwogICAgIG1f
bnBXaW5kb3cud3NfaW5mbyA9IHdzaTsKIAogICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKQEAgLTc1NSw2
ICs4MjEsOSBAQCB2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiAKICAgICBpZiAo
bV9kcmF3YWJsZSkKICAgICAgICAgWEZyZWVQaXhtYXAoUVgxMUluZm86OmRpc3BsYXkoKSwgbV9k
cmF3YWJsZSk7CisKKyAgICBpZiAobV9jb2xvcm1hcCkKKyAgICAgICAgWEZyZWVDb2xvcm1hcChR
WDExSW5mbzo6ZGlzcGxheSgpLCBtX2NvbG9ybWFwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>
<flag name="review"
          id="21873"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40628</attachid>
            <date>2009-10-05 04:57:09 -0700</date>
            <delta_ts>2009-10-06 04:33:37 -0700</delta_ts>
            <desc>Patch 4/4 -  Make painting and events work when page is zoomed.</desc>
            <filename>patch4</filename>
            <type>text/plain</type>
            <size>6003</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IGVkNWY0ZmY4N2YzOGM2YjBlMTkxY2EzMWNkMzIwOTg3ZGIzYWU4YTEKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgU3VuIE9j
dCA0IDIxOjE2OjIwIDIwMDkgKzA1MzAKCiAgICBNYWtlIHBhaW50aW5nIGFuZCBldmVudHMgd29y
ayB3aGVuIHBhZ2UgaXMgem9vbWVkLgogICAgCiAgICBUaGUgZWxlbWVudCBnZXRzIHJlc2l6ZWQg
d2hlbiB6b29tZWQuIFNvLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJlc2l6ZQogICAg
dGhlIGRyYXdhYmxlIGFuZCBkbyBhIHNldHdpbmRvdyBjYWxsLiBNdWx0aXBsZSBjYWxscyB0byBz
ZXR3aW5kb3cgZG8gbm90CiAgICBjcmFzaCBwbHVnaW4gaW4gd2luZG93bGVzcyBtb2RlICh1bmxp
a2UgaW4gd2luZG93ZWQgbW9kZSkuCiAgICAKICAgIEZvciBtb3VzZSBldmVudHMgd2UgaGF2ZSB0
byBjb252ZXJ0IHRoZSBwb3MgdG8gcG9zdC16b29tIHBvc2l0aW9uLgoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWEwMWZjMy4uNmU0ZWRk
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTIsNiArMiwyOSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgog
CisgICAgICAgIE1ha2UgcGFpbnRpbmcgYW5kIGV2ZW50cyB3b3JrIHdoZW4gcGFnZSBpcyB6b29t
ZWQuCisgICAgICAgIAorICAgICAgICBUaGUgZWxlbWVudCBnZXRzIHJlc2l6ZWQgd2hlbiB6b29t
ZWQuIFNvLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJlc2l6ZQorICAgICAgICB0aGUg
ZHJhd2FibGUgYW5kIGRvIGEgc2V0d2luZG93IGNhbGwuIE11bHRpcGxlIGNhbGxzIHRvIHNldHdp
bmRvdyBkbyBub3QKKyAgICAgICAgY3Jhc2ggcGx1Z2luIGluIHdpbmRvd2xlc3MgbW9kZSAodW5s
aWtlIGluIHdpbmRvd2VkIG1vZGUpLgorICAgICAgICAKKyAgICAgICAgRm9yIG1vdXNlIGV2ZW50
cyB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHBvcyB0byBwb3N0LXpvb20gcG9zaXRpb24uCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdp
blZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0Zp
ZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisKKzIwMDktMTAtMDUg
IEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWRkIFBsdWdpblF1aXJrVXNl
c1NjcmVlbkRlZmF1bHRWaXN1YWwgZm9yIEZsYXNoLgogICAgICAgICAKICAgICAgICAgRmxhc2gg
ZG9lcyBub3QgdXNlIHRoZSB2aXN1YWwgcHJvdmlkZWQgYnkgdXMgdG8gZHJhdyBpbnRvIHRoZSBk
cmF3YWJsZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3Bw
IGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggMDg3OGI0ZC4uYTVj
YzdkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysr
IGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKQEAgLTMxOCwxNSArMzE5LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRF
dmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1v
dXNlRXZlbnQqIGV2ZW50KQorc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVs
ZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9z
dFpvb21Qb3MpCiB7CiAgICAgWEJ1dHRvbkV2ZW50JiB4YnV0dG9uID0geEV2ZW50LT54YnV0dG9u
OwogICAgIHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOwogICAgIHhidXR0b24ucm9v
dCA9IFFYMTFJbmZvOjphcHBSb290V2luZG93KCk7CiAgICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAw
OwogICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4YnV0dG9uLngg
PSBldmVudC0+b2Zmc2V0WCgpOwotICAgIHhidXR0b24ueSA9IGV2ZW50LT5vZmZzZXRZKCk7Cisg
ICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhidXR0b24ueSA9IHBvc3Rab29t
UG9zLnkoKTsKICAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CiAgICAgeGJ1
dHRvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwogICAgIHhidXR0b24uc3RhdGUgPSBpbnB1
dEV2ZW50U3RhdGUoZXZlbnQpOwpAQCAtMzQ1LDE1ICszNDYsMTUgQEAgc3RhdGljIHZvaWQgc2V0
WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2
ZW50KQogICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBz
ZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCog
ZXZlbnQpCitzdGF0aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQq
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcykK
IHsKICAgICBYTW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CiAgICAgeG1v
dGlvbi50eXBlID0gTW90aW9uTm90aWZ5OwogICAgIHhtb3Rpb24ucm9vdCA9IFFYMTFJbmZvOjph
cHBSb290V2luZG93KCk7CiAgICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOwogICAgIHhtb3Rpb24u
dGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4bW90aW9uLnggPSBldmVudC0+b2Zmc2V0
WCgpOwotICAgIHhtb3Rpb24ueSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAgeG1vdGlvbi54ID0g
cG9zdFpvb21Qb3MueCgpOworICAgIHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKICAgICB4
bW90aW9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CiAgICAgeG1vdGlvbi55X3Jvb3QgPSBl
dmVudC0+c2NyZWVuWSgpOwogICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZl
bnQpOwpAQCAtMzYxLDE1ICszNjIsMTUgQEAgc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2ZW50U3Bl
Y2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50KQogICAgIHhtb3Rp
b24uc2FtZV9zY3JlZW4gPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVu
dFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCkKK3N0YXRp
YyB2b2lkIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1v
dXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MpCiB7CiAgICAgWENy
b3NzaW5nRXZlbnQmIHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOwogICAgIHhjcm9zc2lu
Zy50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBF
bnRlck5vdGlmeSA6IExlYXZlTm90aWZ5OwogICAgIHhjcm9zc2luZy5yb290ID0gUVgxMUluZm86
OmFwcFJvb3RXaW5kb3coKTsKICAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKICAgICB4Y3Jv
c3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4Y3Jvc3NpbmcueCA9IGV2ZW50
LT5vZmZzZXRYKCk7Ci0gICAgeGNyb3NzaW5nLnkgPSBldmVudC0+b2Zmc2V0WSgpOworICAgIHhj
cm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhjcm9zc2luZy55ID0gcG9zdFpvb21Q
b3MueCgpOwogICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOwogICAgIHhj
cm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwogICAgIHhjcm9zc2luZy5zdGF0ZSA9
IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CkBAIC0zOTUsMTIgKzM5NiwxNCBAQCB2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiAgICAgWEV2ZW50IG5w
RXZlbnQ7CiAgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CiAKKyAgICBJbnRQb2ludCBwb3N0Wm9v
bVBvcyA9IHJvdW5kZWRJbnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9M
b2NhbChldmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKSk7CisKICAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0Zp
ZWxkcygmbnBFdmVudCwgZXZlbnQpOworICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0Zp
ZWxkcygmbnBFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zKTsKICAgICBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKLSAgICAgICAgc2V0WE1vdGlv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50KTsKKyAgICAgICAgc2V0WE1vdGlv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcyk7CiAgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKLSAgICAgICAgc2V0
WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygmbnBFdmVudCwgZXZlbnQpOworICAgICAgICBz
ZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZucEV2ZW50LCBldmVudCwgcG9zdFpvb21Q
b3MpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwogCkBAIC00ODcsOCArNDkwLDggQEAgdm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICB9CiAKICAgICAvLyBGTEFT
SCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRvCi0gICAg
Ly8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgotICAgIGlmIChtX25w
V2luZG93LndpZHRoID09IC0xIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IC0xKSB7CisgICAgLy8g
c2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoIGluIHdpbmRvd2VkIG1vZGUu
CisgICAgaWYgKCFtX2lzV2luZG93ZWQgfHwgbV9ucFdpbmRvdy53aWR0aCA9PSAtMSB8fCBtX25w
V2luZG93LmhlaWdodCA9PSAtMSkgewogICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5k
b3dSZWN0LndpZHRoKCk7CiAgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0
LmhlaWdodCgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40709</attachid>
            <date>2009-10-06 04:32:07 -0700</date>
            <delta_ts>2009-10-06 04:43:23 -0700</delta_ts>
            <desc>Patch 3/4 - Add PluginQuirkUsesScreenDefaultVisual for Flash (Take 2)</desc>
            <filename>patch3</filename>
            <type>text/plain</type>
            <size>11955</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IGRkNGZhZjc5YzRhZGI5MjllYTI1MDEwMDU0MWIzMzFiNWNkZmY3NDkKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgVHVlIE9j
dCA2IDE1OjM4OjM3IDIwMDkgKzA1MzAKCiAgICBbUXRdIFdpbmRvd2xlc3MgcGx1Z2luczogQWRk
IFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGggcXVpcmsgZm9yIEZsYXNoLgog
ICAgCiAgICBGbGFzaCBkb2VzIG5vdCB1c2UgdGhlIHZpc3VhbCBwcm92aWRlZCBieSB1cyB0byBk
cmF3IGludG8gdGhlIGRyYXdhYmxlLgogICAgSXQgaW5zdGVhZCB1c2VzIHRoZSBzeXN0ZW0gZGVm
YXVsdCB2aXN1YWwgKGFzIHJldHVybmVkIGJ5IFhEZWZhdWx0VmlzdWFsKS4KICAgIFRoaXMgbWVh
bnMgdGhhdCBpZiB0aGUgc2NyZWVuIGRlZmF1bHQgdmlzdWFsIGlzIDI0LWJpdCwgRmxhc2ggd29u
J3QgYmUKICAgIGFibGUgdG8gZHJhdyBvbiAzMi1iaXQgZHJhd2FibGUgY3JlYXRlZCBieSB1cy4g
VGhpcyBpcyBhIGJ1ZyBpbiBGbGFzaAogICAgYW5kIGZvciB0aGUgbW9tZW50LCB0aGUgYWJvdmUg
cXVpcmsgaXMgb25seSBzZXQgZm9yIEZsYXNoLgogICAgCiAgICBPdXIgc3RyYXRlZ3kgdG8gY3Jl
YXRlIHRoZSBkcmF3YWJsZToKICAgICAgICAxLiBDcmVhdGUgYSAzMi1iaXQgZHJhd2FibGUgaWYg
dGhlIGRlZmF1bHQgc2NyZWVuIGRlcHRoIGlzIDMyIG9yIHRoZQogICAgICAgICAgIHF1aXJrIGlz
IG5vdCBzZXQgKGkuZSBub3QgZmxhc2gpCiAgICAgICAgMi4gSWYgd2UgZGlkbid0IGNyZWF0ZSBh
IDMyLWJpdCBkcmF3YWJsZSAobWF5YmUgdGhlIERpc3BsYXkgaGFzIG5vIHN1Y2gKICAgICAgICAg
ICB2aXN1YWwpLCB3ZSBjcmVhdGUgYSBkcmF3YWJsZSB3aXRoIGRlZmF1bHQgc2NyZWVuIGRlcHRo
LgogICAgCiAgICBBcyBhIHJlc3VsdCBvZiB0aGUgYWJvdmUgY2hhbmdlcywgY29udGVudCBwcm9w
YWdhdGlvbiBiZWhhdmlvciBjaGFuZ2VzIGFzOgogICAgICAgIDEuIENvbnRlbnQgcHJvcGFnYXRp
b24gaXMgcG9zc2libGUgb25seSBpZiB0aGUgZHJhd2FibGUgd2UgY3JlYXRlIGFuZAogICAgICAg
ICAgIFF0J3MgYmFja2luZyBzdG9yZSBhcmUgb2YgdGhlIHNhbWUgZGVwdGguCiAgICAgICAgMi4g
SWYgd2UgY3JlYXRlZCBhIDMyLWJpdCBkcmF3YWJsZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgY29u
dGVudAogICAgICAgICAgIHByb3BhZ2F0aW9uIChRdCB3aWxsIHRha2UgY2FyZSBvZiBpdCkuCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
OWViZTRhLi5kMWQ4NDhlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDA5LTEwLTA2ICBHaXJpc2ggUmFtYWty
aXNobmFuICA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2luZG93bGVzcyBwbHVnaW5zOiBBZGQgUGx1
Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCBxdWlyayBmb3IgRmxhc2guCisgICAg
ICAgIAorICAgICAgICBGbGFzaCBkb2VzIG5vdCB1c2UgdGhlIHZpc3VhbCBwcm92aWRlZCBieSB1
cyB0byBkcmF3IGludG8gdGhlIGRyYXdhYmxlLgorICAgICAgICBJdCBpbnN0ZWFkIHVzZXMgdGhl
IHN5c3RlbSBkZWZhdWx0IHZpc3VhbCAoYXMgcmV0dXJuZWQgYnkgWERlZmF1bHRWaXN1YWwpLgor
ICAgICAgICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHNjcmVlbiBkZWZhdWx0IHZpc3VhbCBpcyAy
NC1iaXQsIEZsYXNoIHdvbid0IGJlCisgICAgICAgIGFibGUgdG8gZHJhdyBvbiAzMi1iaXQgZHJh
d2FibGUgY3JlYXRlZCBieSB1cy4gVGhpcyBpcyBhIGJ1ZyBpbiBGbGFzaAorICAgICAgICBhbmQg
Zm9yIHRoZSBtb21lbnQsIHRoZSBhYm92ZSBxdWlyayBpcyBvbmx5IHNldCBmb3IgRmxhc2guCisg
ICAgICAgIAorICAgICAgICBPdXIgc3RyYXRlZ3kgdG8gY3JlYXRlIHRoZSBkcmF3YWJsZToKKyAg
ICAgICAgMS4gQ3JlYXRlIGEgMzItYml0IGRyYXdhYmxlIGlmIHRoZSBkZWZhdWx0IHNjcmVlbiBk
ZXB0aCBpcyAzMiBvciB0aGUKKyAgICAgICAgcXVpcmsgaXMgbm90IHNldCAoaS5lIG5vdCBmbGFz
aCkKKyAgICAgICAgMi4gSWYgd2UgZGlkbid0IGNyZWF0ZSBhIDMyLWJpdCBkcmF3YWJsZSAobWF5
YmUgdGhlIERpc3BsYXkgaGFzIG5vIHN1Y2gKKyAgICAgICAgdmlzdWFsKSwgd2UgY3JlYXRlIGEg
ZHJhd2FibGUgd2l0aCBkZWZhdWx0IHNjcmVlbiBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIEFz
IGEgcmVzdWx0IG9mIHRoZSBhYm92ZSBjaGFuZ2VzLCBjb250ZW50IHByb3BhZ2F0aW9uIGJlaGF2
aW9yIGNoYW5nZXMgYXM6CisgICAgICAgIDEuIENvbnRlbnQgcHJvcGFnYXRpb24gaXMgcG9zc2li
bGUgb25seSBpZiB0aGUgZHJhd2FibGUgd2UgY3JlYXRlIGFuZAorICAgICAgICBRdCdzIGJhY2tp
bmcgc3RvcmUgYXJlIG9mIHRoZSBzYW1lIGRlcHRoLgorICAgICAgICAyLiBJZiB3ZSBjcmVhdGVk
IGEgMzItYml0IGRyYXdhYmxlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBjb250ZW50CisgICAgICAg
IHByb3BhZ2F0aW9uIChRdCB3aWxsIHRha2UgY2FyZSBvZiBpdCkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgxCisKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6
ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblF1aXJrU2V0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
VmlzdWFsQW5kQ29sb3JtYXApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3kp
OgorCiAyMDA5LTEwLTA2ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcApp
bmRleCA2MTJhOWQ3Li4wMGI1ZmI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UGFja2FnZS5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCkBAIC0x
ODMsNiArMTgzLDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKICNpZiBQTEFURk9STShRVCkKICAgICAgICAgICAgIG1fcXVpcmtz
LmFkZChQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCk7CiAjZW5kaWYKKyAgICAgICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRoKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZsYXNoIDkgYW5kIG9sZGVyIHJlcXVlc3Rz
IHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKICAg
ICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaCBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCmluZGV4IGI2NTJjNmUuLmRlMjliYWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCisrKyBiL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5RdWlya1NldC5oCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSA9IDEg
PDwgMTAsCiAgICAgICAgIFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMgPSAx
IDw8IDExLAogICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9IDEgPDwgMTIs
CisgICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGggPSAxIDw8IDEz
CiAgICAgfTsKIAogICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAppbmRleCA1NzcwODg2Li4xNGY3MDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC04MjEs
NiArODIxLDggQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICNpZiBkZWZpbmVkKFFfV1NfWDEx
KQogICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UoZmFsc2UpCiAgICAgLCBtX2RyYXdh
YmxlKDApCisgICAgLCBtX3Zpc3VhbCgwKQorICAgICwgbV9jb2xvcm1hcCgwKQogICAgICwgbV9w
bHVnaW5EaXNwbGF5KDApCiAjZW5kaWYKICAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxs
eSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IGU3YjIyOTMuLjZhZTFiMTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaApAQCAtMzI3LDYgKzMyNyw4IEBAIHByaXZhdGU6CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkK
ICAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKICAgICAgICAgUGl4bWFw
IG1fZHJhd2FibGU7CisgICAgICAgIFZpc3VhbCogbV92aXN1YWw7CisgICAgICAgIENvbG9ybWFw
IG1fY29sb3JtYXA7CiAgICAgICAgIERpc3BsYXkqIG1fcGx1Z2luRGlzcGxheTsKIAogICAgICAg
ICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50KiBldmVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
dWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwCmluZGV4IGM1YjJiMjYuLjg3ZmRiZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwCkBAIC02OCw2ICs2OCwxMSBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAjaW5jbHVkZSA8WDExL1guaD4KKyNpZm5kZWYg
UVRfTk9fWFJFTkRFUgorI2RlZmluZSBCb29sIGludAorI2RlZmluZSBTdGF0dXMgaW50CisjaW5j
bHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgorI2VuZGlmCiAKIHVzaW5nIEpTQzo6RXhl
Y1N0YXRlOwogdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKQEAgLTEwNSw3ICsxMTAsOCBAQCB2b2lk
IFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiAgICAgICAgIFhGcmVlUGl4bWFwKFFY
MTFJbmZvOjpkaXNwbGF5KCksIG1fZHJhd2FibGUpOwogCiAgICAgaWYgKCFtX2lzV2luZG93ZWQp
Ci0gICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKFFYMTFJbmZvOjpkaXNwbGF5KCks
IFFYMTFJbmZvOjphcHBSb290V2luZG93KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRv
d1JlY3QuaGVpZ2h0KCksIFFYMTFJbmZvOjphcHBEZXB0aCgpKTsKKyAgICAgICAgbV9kcmF3YWJs
ZSA9IFhDcmVhdGVQaXhtYXAoUVgxMUluZm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFwcFJvb3RX
aW5kb3coKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0
cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGgpOwogCiAgICAgLy8gZG8gbm90IGNhbGwg
c2V0TlBXaW5kb3dJZk5lZWRlZCBpbW1lZGlhdGVseSwgd2lsbCBiZSBjYWxsZWQgb24gcGFpbnQo
KQogICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKQEAgLTE3NCwyMSArMTgw
LDI0IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBRUGl4bWFwIHF0RHJh
d2FibGUgPSBRUGl4bWFwOjpmcm9tWDExUGl4bWFwKG1fZHJhd2FibGUsIFFQaXhtYXA6OkV4cGxp
Y2l0bHlTaGFyZWQpOworICAgIGNvbnN0IGludCBkcmF3YWJsZURlcHRoID0gKChOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aDsKKyAgICBBU1NFUlQo
ZHJhd2FibGVEZXB0aCA9PSBxdERyYXdhYmxlLmRlcHRoKCkpOwogCi0gICAgaWYgKG1faXNUcmFu
c3BhcmVudCkgewotICAgICAgICAvLyBBdHRlbXB0IGNvbnRlbnQgcHJvcGFnYXRpb24gYnkgY29w
eWluZyBvdmVyIGZyb20gdGhlIGJhY2tpbmcgc3RvcmUKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50
ICYmIGRyYXdhYmxlRGVwdGggIT0gMzIpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBjb250ZW50IHBy
b3BhZ2F0aW9uIGZvciBkcmF3YWJsZSB3aXRoIG5vIGFscGhhIGJ5IGNvcHlpbmcgb3ZlciBmcm9t
IHRoZSBiYWNraW5nIHN0b3JlCiAgICAgICAgIFFQb2ludCBvZmZzZXQ7CiAgICAgICAgIFFQYWlu
dERldmljZSogYmFja2luZ1N0b3JlRGV2aWNlID0gIFFQYWludGVyOjpyZWRpcmVjdGVkKHBhaW50
ZXItPmRldmljZSgpLCAmb2Zmc2V0KTsKLSAgICAgICAgY29uc3QgYm9vbCBoYXNWYWxpZEJhY2tp
bmdTdG9yZSA9IGJhY2tpbmdTdG9yZURldmljZSAmJiBiYWNraW5nU3RvcmVEZXZpY2UtPmRldlR5
cGUoKSA9PSBRSW50ZXJuYWw6OlBpeG1hcDsKICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsgLy8g
bmVnYXRpbmcgdGhlIG9mZnNldCBnaXZlcyB1cyB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3IHdpdGhp
biB0aGUgYmFja2luZyBzdG9yZSBwaXhtYXAKIAotICAgICAgICBpZiAoaGFzVmFsaWRCYWNraW5n
U3RvcmUpIHsKLSAgICAgICAgICAgIFFQaXhtYXAqIGJhY2tpbmdTdG9yZVBpeG1hcCA9IHN0YXRp
Y19jYXN0PFFQaXhtYXAqPihiYWNraW5nU3RvcmVEZXZpY2UpOworICAgICAgICBjb25zdCBib29s
IGhhc1ZhbGlkQmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlRGV2aWNlICYmIGJhY2tpbmdTdG9y
ZURldmljZS0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6UGl4bWFwOworICAgICAgICBRUGl4bWFw
KiBiYWNraW5nU3RvcmVQaXhtYXAgPSBzdGF0aWNfY2FzdDxRUGl4bWFwICo+KGJhY2tpbmdTdG9y
ZURldmljZSk7CisKKyAgICAgICAgaWYgKGhhc1ZhbGlkQmFja2luZ1N0b3JlICYmIGJhY2tpbmdT
dG9yZVBpeG1hcC0+ZGVwdGgoKSA9PSBkcmF3YWJsZURlcHRoKSB7CiAgICAgICAgICAgICBHQyBn
YyA9IFhEZWZhdWx0R0MoUVgxMUluZm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFwcFNjcmVlbigp
KTsKICAgICAgICAgICAgIFhDb3B5QXJlYShRWDExSW5mbzo6ZGlzcGxheSgpLCBiYWNraW5nU3Rv
cmVQaXhtYXAtPmhhbmRsZSgpLCBtX2RyYXdhYmxlLCBnYywKICAgICAgICAgICAgICAgICBvZmZz
ZXQueCgpICsgbV93aW5kb3dSZWN0LngoKSArIG1fY2xpcFJlY3QueCgpLCBvZmZzZXQueSgpICsg
bV93aW5kb3dSZWN0LnkoKSArIG1fY2xpcFJlY3QueSgpLAogICAgICAgICAgICAgICAgIG1fY2xp
cFJlY3Qud2lkdGgoKSwgbV9jbGlwUmVjdC5oZWlnaHQoKSwgbV9jbGlwUmVjdC54KCksIG1fY2xp
cFJlY3QueSgpKTsKLSAgICAgICAgfSBlbHNlIHsgLy8gbm8gYmFja2luZyBzdG9yZSwgY2xlYW4g
dGhlIHBpeG1hcAorICAgICAgICB9IGVsc2UgeyAvLyBubyBiYWNraW5nIHN0b3JlLCBjbGVhbiB0
aGUgcGl4bWFwIGJlY2F1c2UgdGhlIHBsdWdpbiB0aGlua3MgaXRzIHRyYW5zcGFyZW50CiAgICAg
ICAgICAgICBRUGFpbnRlciBwYWludGVyKCZxdERyYXdhYmxlKTsKICAgICAgICAgICAgIHBhaW50
ZXIuZmlsbFJlY3QobV9jbGlwUmVjdCwgUXQ6OndoaXRlKTsKICAgICAgICAgfQpAQCAtNjgyLDYg
KzY5MSw0OSBAQCBzdGF0aWMgRGlzcGxheSAqZ2V0UGx1Z2luRGlzcGxheSgpCiAgICAgcmV0dXJu
IChEaXNwbGF5KilnZGtfeDExX2Rpc3BsYXlfZ2V0X3hkaXNwbGF5KGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOwogfQogCitzdGF0aWMgdm9pZCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQgZGVw
dGgsIFZpc3VhbCAqKnZpc3VhbCwgQ29sb3JtYXAgKmNvbG9ybWFwKQoreworICAgICp2aXN1YWwg
PSAwOworICAgICpjb2xvcm1hcCA9IDA7CisKKyNpZm5kZWYgUVRfTk9fWFJFTkRFUgorICAgIHN0
YXRpYyBjb25zdCBib29sIHVzZVhSZW5kZXIgPSBxZ2V0ZW52KCJRVF9YMTFfTk9fWFJFTkRFUiIp
LmlzTnVsbCgpOyAvLyBTaG91bGQgYWxzbyBjaGVjayBmb3IgWFJlbmRlciA+PSAwLjUKKyNlbHNl
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdXNlWFJlbmRlciA9IGZhbHNlOworI2VuZGlmCisKKyAg
ICBpZiAoIXVzZVhSZW5kZXIgJiYgZGVwdGggPT0gMzIpCisgICAgICAgIHJldHVybjsKKworICAg
IGludCBudmk7CisgICAgWFZpc3VhbEluZm8gdGVtcGw7CisgICAgdGVtcGwuc2NyZWVuICA9IFFY
MTFJbmZvOjphcHBTY3JlZW4oKTsKKyAgICB0ZW1wbC5kZXB0aCAgID0gZGVwdGg7CisgICAgdGVt
cGwuY19jbGFzcyA9IFRydWVDb2xvcjsKKyAgICBYVmlzdWFsSW5mbyogeHZpID0gWEdldFZpc3Vh
bEluZm8oUVgxMUluZm86OmRpc3BsYXkoKSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRo
TWFzayB8IFZpc3VhbENsYXNzTWFzaywgJnRlbXBsLCAmbnZpKTsKKworICAgIGlmICgheHZpKQor
ICAgICAgICByZXR1cm47CisKKyNpZm5kZWYgUVRfTk9fWFJFTkRFUgorICAgIGlmIChkZXB0aCA9
PSAzMikgeworICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBudmk7ICsraWR4KSB7Cisg
ICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxG
b3JtYXQoUVgxMUluZm86OmRpc3BsYXkoKSwgeHZpW2lkeF0udmlzdWFsKTsKKyAgICAgICAgICAg
IGlmIChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxw
aGFNYXNrKSB7CisgICAgICAgICAgICAgICAgICp2aXN1YWwgPSB4dmlbaWR4XS52aXN1YWw7Cisg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgIH0g
ZWxzZQorI2VuZGlmIC8vIFFUX05PX1hSRU5ERVIKKyAgICAgICAgKnZpc3VhbCA9IHh2aVswXS52
aXN1YWw7CisKKyAgICBYRnJlZSh4dmkpOworCisgICAgaWYgKCp2aXN1YWwpCisgICAgICAgICpj
b2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1hcChRWDExSW5mbzo6ZGlzcGxheSgpLCBRWDExSW5mbzo6
YXBwUm9vdFdpbmRvdygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOworfQorCiBib29sIFBsdWdpblZp
ZXc6OnBsYXRmb3JtU3RhcnQoKQogewogICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CkBAIC03MTUs
MTYgKzc2NywzNCBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgIE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzaSA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0
KCk7CiAgICAgd3NpLT50eXBlID0gMDsKIAotICAgIGNvbnN0IFFYMTFJbmZvKiB4MTFJbmZvID0g
MDsKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIHgxMUluZm8gPSAmcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKS0+eDExSW5mbygpOworICAgICAgICBjb25zdCBRWDExSW5mbyogeDExSW5m
byA9ICZwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAgICAgICAgd3NpLT5k
aXNwbGF5ID0geDExSW5mby0+ZGlzcGxheSgpOworICAgICAgICB3c2ktPnZpc3VhbCA9IChWaXN1
YWwqKXgxMUluZm8tPnZpc3VhbCgpOworICAgICAgICB3c2ktPmRlcHRoID0geDExSW5mby0+ZGVw
dGgoKTsKKyAgICAgICAgd3NpLT5jb2xvcm1hcCA9IHgxMUluZm8tPmNvbG9ybWFwKCk7CiAKICAg
ICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwogICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9ICh2b2lkKilwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5JZCgpOwog
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7CiAgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgeDExSW5mbyA9ICZRQXBwbGljYXRpb246OmRl
c2t0b3AoKS0+eDExSW5mbygpOworICAgICAgICBjb25zdCBRWDExSW5mbyogeDExSW5mbyA9ICZR
QXBwbGljYXRpb246OmRlc2t0b3AoKS0+eDExSW5mbygpOworCisgICAgICAgIGlmICh4MTFJbmZv
LT5kZXB0aCgpID09IDMyIHx8ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFu
ZENvbG9ybWFwKDMyLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKKyAgICAgICAgICAgIHdzaS0+
ZGVwdGggPSAzMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV92aXN1YWwpIHsKKyAgICAg
ICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKHgxMUluZm8tPmRlcHRoKCksICZtX3Zpc3VhbCwg
Jm1fY29sb3JtYXApOworICAgICAgICAgICAgd3NpLT5kZXB0aCA9IHgxMUluZm8tPmRlcHRoKCk7
CisgICAgICAgIH0KKworICAgICAgICB3c2ktPmRpc3BsYXkgPSB4MTFJbmZvLT5kaXNwbGF5KCk7
CisgICAgICAgIHdzaS0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgICAgIHdzaS0+Y29sb3JtYXAg
PSBtX2NvbG9ybWFwOwogCiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURy
YXdhYmxlOwogICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPwpAQCAt
NzM0LDEwICs4MDQsNiBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAg
ICBtX25wV2luZG93LmhlaWdodCA9IC0xOwogICAgIH0KIAotICAgIHdzaS0+ZGlzcGxheSA9IHgx
MUluZm8tPmRpc3BsYXkoKTsKLSAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXgxMUluZm8tPnZp
c3VhbCgpOwotICAgIHdzaS0+ZGVwdGggPSB4MTFJbmZvLT5kZXB0aCgpOwotICAgIHdzaS0+Y29s
b3JtYXAgPSB4MTFJbmZvLT5jb2xvcm1hcCgpOwogICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdz
aTsKIAogICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0Rl
ZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKQEAgLTc1NSw2ICs4MjEsOSBAQCB2b2lkIFBsdWdp
blZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiAKICAgICBpZiAobV9kcmF3YWJsZSkKICAgICAgICAg
WEZyZWVQaXhtYXAoUVgxMUluZm86OmRpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisKKyAgICBpZiAo
bV9jb2xvcm1hcCkKKyAgICAgICAgWEZyZWVDb2xvcm1hcChRWDExSW5mbzo6ZGlzcGxheSgpLCBt
X2NvbG9ybWFwKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpoYWx0KCkK
</data>
<flag name="review"
          id="21964"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40710</attachid>
            <date>2009-10-06 04:33:37 -0700</date>
            <delta_ts>2009-10-06 04:45:28 -0700</delta_ts>
            <desc>Patch 4/4 -  Make painting and events work when page is zoomed. (Take 2)</desc>
            <filename>patch4</filename>
            <type>text/plain</type>
            <size>6054</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IDE2MmYxZTllMzQzMzExYTczNTQxOTNiYjc1MDVkYWE4YTU5OWEwZmMKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgVHVlIE9j
dCA2IDE2OjUzOjU0IDIwMDkgKzA1MzAKCiAgICBbUXRdIFdpbmRvd2xlc3MgcGx1Z2luczogTWFr
ZSBwYWludGluZyBhbmQgZXZlbnRzIHdvcmsgd2hlbiBwYWdlIGlzIHpvb21lZC4KICAgIAogICAg
VGhlIGVsZW1lbnQgZ2V0cyByZXNpemVkIHdoZW4gem9vbWVkLiBTbywgd2UgaGF2ZSB0byBtYWtl
IHN1cmUgdGhhdCB3ZSByZXNpemUKICAgIHRoZSBkcmF3YWJsZSBhbmQgZG8gYSBzZXR3aW5kb3cg
Y2FsbC4gTXVsdGlwbGUgY2FsbHMgdG8gc2V0d2luZG93IGRvIG5vdAogICAgY3Jhc2ggcGx1Z2lu
IGluIHdpbmRvd2xlc3MgbW9kZSAodW5saWtlIGluIHdpbmRvd2VkIG1vZGUpLgogICAgCiAgICBG
b3IgbW91c2UgZXZlbnRzIHdlIGhhdmUgdG8gY29udmVydCB0aGUgcG9zIHRvIHBvc3Qtem9vbSBw
b3NpdGlvbi4KCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGQxZDg0OGUuLjM0MWVlNzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjcgQEAKIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbUXRdIFdpbmRvd2xlc3MgcGx1Z2lu
czogTWFrZSBwYWludGluZyBhbmQgZXZlbnRzIHdvcmsgd2hlbiBwYWdlIGlzIHpvb21lZC4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBlbGVtZW50IGdldHMgcmVzaXplZCB3aGVuIHpvb21lZC4gU28s
IHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcmVzaXplCisgICAgICAgIHRoZSBkcmF3YWJs
ZSBhbmQgZG8gYSBzZXR3aW5kb3cgY2FsbC4gTXVsdGlwbGUgY2FsbHMgdG8gc2V0d2luZG93IGRv
IG5vdAorICAgICAgICBjcmFzaCBwbHVnaW4gaW4gd2luZG93bGVzcyBtb2RlICh1bmxpa2UgaW4g
d2luZG93ZWQgbW9kZSkuCisgICAgICAgIAorICAgICAgICBGb3IgbW91c2UgZXZlbnRzIHdlIGhh
dmUgdG8gY29udmVydCB0aGUgcG9zIHRvIHBvc3Qtem9vbSBwb3NpdGlvbi4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODEKKworICAgICAgICAq
IHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFhCdXR0
b25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFhNb3Rpb25FdmVu
dFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFhDcm9zc2luZ0V2ZW50U3Bl
Y2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVk
KToKKworMjAwOS0xMC0wNSAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdpcmlzaEBmb3J3YXJkYmlh
cy5pbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBb
UXRdIFdpbmRvd2xlc3MgcGx1Z2luczogQWRkIFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2Ny
ZWVuRGVwdGggcXVpcmsgZm9yIEZsYXNoLgogICAgICAgICAKICAgICAgICAgRmxhc2ggZG9lcyBu
b3QgdXNlIHRoZSB2aXN1YWwgcHJvdmlkZWQgYnkgdXMgdG8gZHJhdyBpbnRvIHRoZSBkcmF3YWJs
ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggODdmZGJmYS4uOWRlNjAzYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKQEAgLTMxOCwxNSArMzE5LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRFdmVudFN0
YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotc3RhdGljIHZv
aWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZl
bnQqIGV2ZW50KQorc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2
ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Q
b3MpCiB7CiAgICAgWEJ1dHRvbkV2ZW50JiB4YnV0dG9uID0geEV2ZW50LT54YnV0dG9uOwogICAg
IHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOwogICAgIHhidXR0b24ucm9vdCA9IFFY
MTFJbmZvOjphcHBSb290V2luZG93KCk7CiAgICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAwOwogICAg
IHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4YnV0dG9uLnggPSBldmVu
dC0+b2Zmc2V0WCgpOwotICAgIHhidXR0b24ueSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAgeGJ1
dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhidXR0b24ueSA9IHBvc3Rab29tUG9zLnko
KTsKICAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CiAgICAgeGJ1dHRvbi55
X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwogICAgIHhidXR0b24uc3RhdGUgPSBpbnB1dEV2ZW50
U3RhdGUoZXZlbnQpOwpAQCAtMzQ1LDE1ICszNDYsMTUgQEAgc3RhdGljIHZvaWQgc2V0WEJ1dHRv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50KQog
ICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzZXRYTW90
aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQp
CitzdGF0aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVu
dCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcykKIHsKICAg
ICBYTW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CiAgICAgeG1vdGlvbi50
eXBlID0gTW90aW9uTm90aWZ5OwogICAgIHhtb3Rpb24ucm9vdCA9IFFYMTFJbmZvOjphcHBSb290
V2luZG93KCk7CiAgICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOwogICAgIHhtb3Rpb24udGltZSA9
IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4bW90aW9uLnggPSBldmVudC0+b2Zmc2V0WCgpOwot
ICAgIHhtb3Rpb24ueSA9IGV2ZW50LT5vZmZzZXRZKCk7CisgICAgeG1vdGlvbi54ID0gcG9zdFpv
b21Qb3MueCgpOworICAgIHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKICAgICB4bW90aW9u
Lnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CiAgICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+
c2NyZWVuWSgpOwogICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwpA
QCAtMzYxLDE1ICszNjIsMTUgQEAgc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNG
aWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50KQogICAgIHhtb3Rpb24uc2Ft
ZV9zY3JlZW4gPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNp
ZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lk
IHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZl
bnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MpCiB7CiAgICAgWENyb3NzaW5n
RXZlbnQmIHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOwogICAgIHhjcm9zc2luZy50eXBl
ID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5v
dGlmeSA6IExlYXZlTm90aWZ5OwogICAgIHhjcm9zc2luZy5yb290ID0gUVgxMUluZm86OmFwcFJv
b3RXaW5kb3coKTsKICAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKICAgICB4Y3Jvc3Npbmcu
dGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4Y3Jvc3NpbmcueCA9IGV2ZW50LT5vZmZz
ZXRYKCk7Ci0gICAgeGNyb3NzaW5nLnkgPSBldmVudC0+b2Zmc2V0WSgpOworICAgIHhjcm9zc2lu
Zy54ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhjcm9zc2luZy55ID0gcG9zdFpvb21Qb3MueCgp
OwogICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOwogICAgIHhjcm9zc2lu
Zy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwogICAgIHhjcm9zc2luZy5zdGF0ZSA9IGlucHV0
RXZlbnRTdGF0ZShldmVudCk7CkBAIC0zOTUsMTIgKzM5NiwxNCBAQCB2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiAgICAgWEV2ZW50IG5wRXZlbnQ7
CiAgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CiAKKyAgICBJbnRQb2ludCBwb3N0Wm9vbVBvcyA9
IHJvdW5kZWRJbnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChl
dmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKSk7CisKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2V1cEV2ZW50KQotICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcygm
bnBFdmVudCwgZXZlbnQpOworICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcygm
bnBFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zKTsKICAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKLSAgICAgICAgc2V0WE1vdGlvbkV2ZW50
U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50KTsKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50
U3BlY2lmaWNGaWVsZHMoJm5wRXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcyk7CiAgICAgZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKLSAgICAgICAgc2V0WENyb3Nz
aW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygmbnBFdmVudCwgZXZlbnQpOworICAgICAgICBzZXRYQ3Jv
c3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZucEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MpOwog
ICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwogCkBAIC00ODcsOCArNDkwLDggQEAgdm9pZCBQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICB9CiAKICAgICAvLyBGTEFTSCBXT1JL
QVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRvCi0gICAgLy8gc2V0
TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoLgotICAgIGlmIChtX25wV2luZG93
LndpZHRoID09IC0xIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IC0xKSB7CisgICAgLy8gc2V0TlBX
aW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCisgICAg
aWYgKCFtX2lzV2luZG93ZWQgfHwgbV9ucFdpbmRvdy53aWR0aCA9PSAtMSB8fCBtX25wV2luZG93
LmhlaWdodCA9PSAtMSkgewogICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0
LndpZHRoKCk7CiAgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdo
dCgpOwogICAgIH0K
</data>
<flag name="review"
          id="21965"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40711</attachid>
            <date>2009-10-06 04:40:44 -0700</date>
            <delta_ts>2009-10-06 04:46:47 -0700</delta_ts>
            <desc>Enable printing</desc>
            <filename>patch5</filename>
            <type>text/plain</type>
            <size>2370</size>
            <attacher name="Girish Ramakrishnan">girish</attacher>
            
              <data encoding="base64">Y29tbWl0IDA1YTg5OTRjY2JkM2IwMWJhOTQ2NDU5Y2Q1MGMzZTNlZmY1ZDVhMTAKQXV0aG9yOiBH
aXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CkRhdGU6ICAgVHVlIE9j
dCA2IDE2OjU2OjUzIDIwMDkgKzA1MzAKCiAgICBbUXRdIFdpbmRvd2xlc3MgcGx1Z2luczogRW5h
YmxlIHBhaW50aW5nIG9uIHByaW50ZXIuCiAgICAKICAgIFRoZSBwcmludCBwcmV2aWV3IGRpYWxv
ZyBjcmFzaGVkIGJlY2F1c2UgdGhlIGRlcHRoIG9mIHRoZSBkcmF3YWJsZQogICAgY2hhbmdlZCBv
d2luZyB0byBhIGJ1ZyBpbiBRdCAtIGlmIHlvdSBkcmF3IG9udG8gYSAzMi1iaXQgcGl4bWFwLAog
ICAgYW5kIHNldCBhIDI0LWJpdCBwaXhtYXAgYXMgc291cmNlLCBpdCB3aWxsIGNvbnZlcnQgdGhl
IHNvdXJjZSB0bwogICAgMzItYml0LgogICAgCiAgICAxMjEwZmE1YjJkNjU4OTVhZDJiZTFmOWNh
N2NhZTU4NmUzYjI5ZGMxIGlzIHRoZSBidWcgZml4IGluIFF0LgoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzQxZWU3Ny4uZGY0NmU0ZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTIsNiArMiwyNCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisg
ICAgICAgIFtRdF0gV2luZG93bGVzcyBwbHVnaW5zOiBFbmFibGUgcGFpbnRpbmcgb24gcHJpbnRl
ci4KKyAgICAgICAgCisgICAgICAgIFRoZSBwcmludCBwcmV2aWV3IGRpYWxvZyBjcmFzaGVkIGJl
Y2F1c2UgdGhlIGRlcHRoIG9mIHRoZSBkcmF3YWJsZQorICAgICAgICBjaGFuZ2VkIG93aW5nIHRv
IGEgYnVnIGluIFF0IC0gaWYgeW91IGRyYXcgb250byBhIDMyLWJpdCBwaXhtYXAsCisgICAgICAg
IGFuZCBzZXQgYSAyNC1iaXQgcGl4bWFwIGFzIHNvdXJjZSwgaXQgd2lsbCBjb252ZXJ0IHRoZSBz
b3VyY2UgdG8KKyAgICAgICAgMzItYml0LgorICAgICAgICAKKyAgICAgICAgMTIxMGZhNWIyZDY1
ODk1YWQyYmUxZjljYTdjYWU1ODZlM2IyOWRjMSBpcyB0aGUgYnVnIGZpeCBpbiBRdC4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODEKKworICAg
ICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBhaW50KToKKworMjAwOS0xMC0wNSAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdp
cmlzaEBmb3J3YXJkYmlhcy5pbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogICAgICAgICBbUXRdIFdpbmRvd2xlc3MgcGx1Z2luczogTWFrZSBwYWludGluZyBhbmQg
ZXZlbnRzIHdvcmsgd2hlbiBwYWdlIGlzIHpvb21lZC4KICAgICAgICAgCiAgICAgICAgIFRoZSBl
bGVtZW50IGdldHMgcmVzaXplZCB3aGVuIHpvb21lZC4gU28sIHdlIGhhdmUgdG8gbWFrZSBzdXJl
IHRoYXQgd2UgcmVzaXplCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmll
d1F0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4IDlkZTYw
M2IuLmQyZGIyN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQu
Y3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCkBAIC0xNzAsMTUg
KzE3MCwxMiBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIAogICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIAot
ICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCAhbV9kcmF3YWJs
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2luRGlz
cGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gUVgxMUluZm86OmRpc3BsYXkoKTsKIAogICAgIFFQ
YWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY29uc3Qg
Ym9vbCBpc1BhaW50aW5nT25XaWRnZXQgPSBwYWludGVyLT5kZXZpY2UoKS0+ZGV2VHlwZSgpID09
IFFJbnRlcm5hbDo6V2lkZ2V0OwotICAgIGlmICghaXNQYWludGluZ09uV2lkZ2V0IHx8ICFtX2Ry
YXdhYmxlKQotICAgICAgICByZXR1cm47CiAKICAgICBRUGl4bWFwIHF0RHJhd2FibGUgPSBRUGl4
bWFwOjpmcm9tWDExUGl4bWFwKG1fZHJhd2FibGUsIFFQaXhtYXA6OkV4cGxpY2l0bHlTaGFyZWQp
OwogICAgIGNvbnN0IGludCBkcmF3YWJsZURlcHRoID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3Ry
dWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aDsK
</data>
<flag name="review"
          id="21966"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>