<?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>58167</bug_id>
          
          <creation_ts>2011-04-08 15:27:57 -0700</creation_ts>
          <short_desc>WebKit2: Windows 7 Gestures Window Bounce shouldn&apos;t require a sync message</short_desc>
          <delta_ts>2011-04-11 11:34:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Weinstein">bweinstein</reporter>
          <assigned_to name="Brian Weinstein">bweinstein</assigned_to>
          <cc>aroben</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>382590</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-08 15:27:57 -0700</bug_when>
    <thetext>Handling Window Bounce for Windows 7 gestures shouldn&apos;t require a sync message from the UIProcess -&gt; WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382594</commentid>
    <comment_count>1</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-08 15:29:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/9259813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382602</commentid>
    <comment_count>2</comment_count>
      <attachid>88886</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-08 15:35:49 -0700</bug_when>
    <thetext>Created attachment 88886
[PATCH] Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382604</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-08 15:38:34 -0700</bug_when>
    <thetext>Attachment 88886 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/UIProcess/WebPageProxy.messages.in:234:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit2/UIProcess/WebPageProxy.messages.in:235:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit2/UIProcess/WebPageProxy.h:282:  The parameter name &quot;limitReached&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/PageClient.h:133:  The parameter name &quot;limitReached&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382608</commentid>
    <comment_count>4</comment_count>
      <attachid>88886</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-08 15:41:19 -0700</bug_when>
    <thetext>Comment on attachment 88886
[PATCH] Fix

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

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:691
&gt; +void WebPageProxy::setGestureScrollingLimitReached(bool limitReached)
&gt; +{
&gt; +    m_pageClient-&gt;setGestureScrollingLimitReached(limitReached);
&gt; +}

This and the other Windows-specific functions should really be in WebPageProxyWin.cpp. Can you make a followup patch to move the functions?

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:586
&gt; +        if (m_gestureScrollingLimitReached)

Do we need to reset this when the gesture ends? Otherwise it seems like the wrong thing would happen if you:

1) Gesture-scroll to the end of the document
2) Scroll back up a little by clicking on the scrollbar
3) Gesture-scroll down again

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:425
&gt; +    bool atScrollingLimitBefore = scrollbarAtTopOfBottomOrDocument(verticalScrollbar);
&gt; +    m_gestureTargetNode-&gt;renderer()-&gt;enclosingLayer()-&gt;scrollByRecursively(size.width(), size.height());
&gt; +    bool atScrollingLimitAfter = scrollbarAtTopOfBottomOrDocument(verticalScrollbar);

Sometimes we use names like wasAtScrollingLimit/isAtScrollingLimit. But I think your names are fine, too.

Using the main frame&apos;s scrollbar to answer this question seems wrong. The main frame might be scrolled to the end, but the element you&apos;re scrolling (e.g., a &lt;textarea&gt;) might not be. We don&apos;t want the window to start bouncing in that case.

I guess the preexisting code had this bug, too. But we should fix it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382612</commentid>
    <comment_count>5</comment_count>
      <attachid>88886</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-08 15:50:46 -0700</bug_when>
    <thetext>Comment on attachment 88886
[PATCH] Fix

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

&gt;&gt; Source/WebKit2/UIProcess/PageClient.h:133
&gt;&gt; +    virtual void setGestureScrollingLimitReached(bool limitReached) = 0;
&gt; 
&gt; The parameter name &quot;limitReached&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Removed.

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:691
&gt;&gt; +}
&gt; 
&gt; This and the other Windows-specific functions should really be in WebPageProxyWin.cpp. Can you make a followup patch to move the functions?

I sure can. I&apos;ll put it as a follow-up and attach it to this bug.

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.h:282
&gt;&gt;  #if ENABLE(TILED_BACKING_STORE)
&gt; 
&gt; The parameter name &quot;limitReached&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Removed.

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.messages.in:234
&gt;&gt; +	SetGestureScrollingLimitReached(bool limitReached)
&gt; 
&gt; Line contains tab character.  [whitespace/tab] [5]

Whoa.

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.messages.in:235
&gt;&gt; +#endif
&gt; 
&gt; Line contains tab character.  [whitespace/tab] [5]

Whoa.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:586
&gt;&gt; +        if (m_gestureScrollingLimitReached)
&gt; 
&gt; Do we need to reset this when the gesture ends? Otherwise it seems like the wrong thing would happen if you:
&gt; 
&gt; 1) Gesture-scroll to the end of the document
&gt; 2) Scroll back up a little by clicking on the scrollbar
&gt; 3) Gesture-scroll down again

The worry I had when resetting it was the case:

1) Gesture-scroll to end of document
2) End gesture
3) Scroll down from the bottom of the document.

m_gestureScrollingLimitReached will be false, but when the gesture starts again, we will never get the setGestureScrollingLimitReached call (unless I force it to be called by setting a flag in WebPageWin each time we start a new gesture). I&apos;ll reset it and then send the message every time in the start of the gesture.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:425
&gt;&gt; +    bool atScrollingLimitAfter = scrollbarAtTopOfBottomOrDocument(verticalScrollbar);
&gt; 
&gt; Sometimes we use names like wasAtScrollingLimit/isAtScrollingLimit. But I think your names are fine, too.
&gt; 
&gt; Using the main frame&apos;s scrollbar to answer this question seems wrong. The main frame might be scrolled to the end, but the element you&apos;re scrolling (e.g., a &lt;textarea&gt;) might not be. We don&apos;t want the window to start bouncing in that case.
&gt; 
&gt; I guess the preexisting code had this bug, too. But we should fix it!

I&apos;ll switch to wasAtScrollingLimit/isAtScrollingLimit. I like that better.

So, we want to bounce in the case where the element you are scrolling is the main frame, and you&apos;ve scrolled it to the end. Any ideas in how to accomplish that? The pre-existing code had this bug as well (as did the WK1 code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382613</commentid>
    <comment_count>6</comment_count>
      <attachid>88886</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-08 15:53:26 -0700</bug_when>
    <thetext>Comment on attachment 88886
[PATCH] Fix

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:586
&gt;&gt;&gt; +        if (m_gestureScrollingLimitReached)
&gt;&gt; 
&gt;&gt; Do we need to reset this when the gesture ends? Otherwise it seems like the wrong thing would happen if you:
&gt;&gt; 
&gt;&gt; 1) Gesture-scroll to the end of the document
&gt;&gt; 2) Scroll back up a little by clicking on the scrollbar
&gt;&gt; 3) Gesture-scroll down again
&gt; 
&gt; The worry I had when resetting it was the case:
&gt; 
&gt; 1) Gesture-scroll to end of document
&gt; 2) End gesture
&gt; 3) Scroll down from the bottom of the document.
&gt; 
&gt; m_gestureScrollingLimitReached will be false, but when the gesture starts again, we will never get the setGestureScrollingLimitReached call (unless I force it to be called by setting a flag in WebPageWin each time we start a new gesture). I&apos;ll reset it and then send the message every time in the start of the gesture.

That sounds good to me.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:425
&gt;&gt;&gt; +    bool atScrollingLimitAfter = scrollbarAtTopOfBottomOrDocument(verticalScrollbar);
&gt;&gt; 
&gt;&gt; Sometimes we use names like wasAtScrollingLimit/isAtScrollingLimit. But I think your names are fine, too.
&gt;&gt; 
&gt;&gt; Using the main frame&apos;s scrollbar to answer this question seems wrong. The main frame might be scrolled to the end, but the element you&apos;re scrolling (e.g., a &lt;textarea&gt;) might not be. We don&apos;t want the window to start bouncing in that case.
&gt;&gt; 
&gt;&gt; I guess the preexisting code had this bug, too. But we should fix it!
&gt; 
&gt; I&apos;ll switch to wasAtScrollingLimit/isAtScrollingLimit. I like that better.
&gt; 
&gt; So, we want to bounce in the case where the element you are scrolling is the main frame, and you&apos;ve scrolled it to the end. Any ideas in how to accomplish that? The pre-existing code had this bug as well (as did the WK1 code).

Maybe we need scrollByRecursively to tell us what happened? Layout folks (Simon, Dan, Hyatt) might have ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382654</commentid>
    <comment_count>7</comment_count>
      <attachid>88900</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-08 16:49:54 -0700</bug_when>
    <thetext>Created attachment 88900
[PATCH] Fix v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382662</commentid>
    <comment_count>8</comment_count>
      <attachid>88900</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-08 16:58:18 -0700</bug_when>
    <thetext>Comment on attachment 88900
[PATCH] Fix v2

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

&quot;GestureReachedScrollingLimit&quot; might be slightly better than &quot;GestureScrollingLimitReached&quot;. The former name implies to me that a particular gesture reached the limit, which is I think what we want to convey. It also seems more parallel with GestureWillBegin, GestureDidScroll, GestureDidEnd, etc.

&gt; Source/WebKit2/ChangeLog:33
&gt; +            and send a message if the avlue changed.

Typo: avlue

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:581
&gt;          } else if (gi.dwFlags &amp; GF_END) {
&gt;              EndPanningFeedbackPtr()(m_window, true);
&gt; +            m_gestureScrollingLimitReached = false;

This probably isn&apos;t needed, since you always set the flag to false when you get GF_BEGIN.

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:410
&gt; +static bool scrollbarAtTopOfBottomOrDocument(Scrollbar* scrollbar)
&gt;  {
&gt; -    atBeginningOrEndOfScrollableDocument = false;
&gt; +    if (!scrollbar)
&gt; +        return false;

Don&apos;t we want to return true when there&apos;s no scrollbar? If the document isn&apos;t scrollable, then clearly we&apos;re at both the beginning *and* the end.

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:423
&gt; +    if (Frame* frame = m_page-&gt;mainFrame())
&gt; +        if (ScrollView* view = frame-&gt;view())
&gt; +            verticalScrollbar = view-&gt;verticalScrollbar();

The outer if needs braces around its body. (I&apos;m surprised the style bot didn&apos;t catch this.)

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:439
&gt;  void WebPage::gestureDidEnd()
&gt;  {
&gt; +    m_gestureScrollingLimitReached = false;

This isn&apos;t really needed, since you reset the flag whenever you get gestureWillBegin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383238</commentid>
    <comment_count>9</comment_count>
      <attachid>88900</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-11 10:07:27 -0700</bug_when>
    <thetext>Comment on attachment 88900
[PATCH] Fix v2

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

&gt;&gt; Source/WebKit2/ChangeLog:33
&gt;&gt; +            and send a message if the avlue changed.
&gt; 
&gt; Typo: avlue

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:581
&gt;&gt; +            m_gestureScrollingLimitReached = false;
&gt; 
&gt; This probably isn&apos;t needed, since you always set the flag to false when you get GF_BEGIN.

Removed.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:410
&gt;&gt; +        return false;
&gt; 
&gt; Don&apos;t we want to return true when there&apos;s no scrollbar? If the document isn&apos;t scrollable, then clearly we&apos;re at both the beginning *and* the end.

Well, if the user scrolled a scrollable div or text field in a document without a main frame scrollbar, we don&apos;t want the window to bounce when the user scrolls that scrollable div.

I&apos;m going to change the caller to:

scrollbar &amp;&amp; scrollbarAtTopOrBottomOfDocument, and ASSERT_ARG(scrollbar) here.

Plus I&apos;ll fix the typo in the function name :-).

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:423
&gt;&gt; +            verticalScrollbar = view-&gt;verticalScrollbar();
&gt; 
&gt; The outer if needs braces around its body. (I&apos;m surprised the style bot didn&apos;t catch this.)

Fixed.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:439
&gt;&gt; +    m_gestureScrollingLimitReached = false;
&gt; 
&gt; This isn&apos;t really needed, since you reset the flag whenever you get gestureWillBegin.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383280</commentid>
    <comment_count>10</comment_count>
      <attachid>89031</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-11 11:07:06 -0700</bug_when>
    <thetext>Created attachment 89031
[PATCH] Fix v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383289</commentid>
    <comment_count>11</comment_count>
      <attachid>89031</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-11 11:13:40 -0700</bug_when>
    <thetext>Comment on attachment 89031
[PATCH] Fix v3

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

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:433
&gt; +    if (gestureReachedScrollingLimit != m_gestureReachedScrollingLimit) {

You could make this an early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383313</commentid>
    <comment_count>12</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-11 11:34:13 -0700</bug_when>
    <thetext>Landed in r83460.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88886</attachid>
            <date>2011-04-08 15:35:49 -0700</date>
            <delta_ts>2011-04-08 16:49:54 -0700</delta_ts>
            <desc>[PATCH] Fix</desc>
            <filename>window_bounce_async.patch</filename>
            <type>text/plain</type>
            <size>10357</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMzQ3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDQtMDggIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFdpbmRvd3MgNyBHZXN0dXJlcyBXaW5k
b3cgQm91bmNlIHNob3VsZG4ndCByZXF1aXJlIGEgc3luYyBtZXNzYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODE2NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vOTI1OTgxMz4KKyAgICAgICAgCisgICAgICAgIEluc3RlYWQgb2YgbWFraW5nIEdl
c3R1cmVEaWRTY3JvbGwgc3luYywgaGF2ZSBXZWJQYWdlV2luIGNhbGwgZnJvbSBXZWJQcm9jZXNz
IC0+CisgICAgICAgIFVJUHJvY2VzcyB3aGVuIHRoZSBnZXN0dXJlIGNhdXNlcyB0aGUgcGFnZSB0
byBzY3JvbGwgdG8gdGhlIGJlZ2lubmluZyBvciB0aGUKKyAgICAgICAgZW5kIG9mIHRoZSBkb2N1
bWVudC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Z2VzdHVyZURpZFNjcm9sbCk6IE5vdCBhIHN5bmMgbWVzc2FnZSBhbnltb3JlLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQpOiBU
ZWxsIHRoZSBwYWdlIGNsaWVudCB0aGF0IHRoZSBnZXN0dXJlCisgICAgICAgICAgICBzY3JvbGxp
bmcgbGltbml0IHdhcyByZWFjaGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOiBBZGQgYSBu
ZXcgbWVzc2FnZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KTogSW5pdGlhbGl6ZSBuZXcgdmFyaWFibGUuCisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uR2VzdHVyZSk6IFVzZSB0aGUgc3RhdGUgb2YgdGhl
IG1lbWJlciB2YXJpYWJsZSwgbm90IHRoZSByZXNwb25zZSBmcm9tCisgICAgICAgICAgICB0aGUg
c3luYyBtZXNzYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRHZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93aW4vV2ViUGFnZVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNjcm9sbGJhckF0VG9w
T2ZCb3R0b21PckRvY3VtZW50KTogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2Nyb2xsYmFy
IGlzIGF0IHRoZQorICAgICAgICAgICAgdG9wIG9yIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omdlc3R1cmVEaWRTY3JvbGwpOiBUcmFjayB3aGV0aGVy
IG9yIG5vdCB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgIG9yIGVuZCBv
ZiB0aGUgZG9jdW1lbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCB3ZSBlbmRlZCBhdCB0aGUgYmVnaW5u
aW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQsCisgICAgICAgICAgICBhbmQgc2VuZCBhIG1lc3Nh
Z2UgaWYgdGhlIGF2bHVlIGNoYW5nZWQuCisKIDIwMTEtMDQtMDggIEFscGhhIExhbSAgPGhjbGFt
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODMzMzUu
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDgzMTk4
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMwLDYgKzEzMCw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2
aXJ0dWFsIEhXTkQgbmF0aXZlV2luZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZXN0
dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKGJvb2wgbGltaXRSZWFjaGVkKSA9IDA7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCShyZXZpc2lvbiA4MzE5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsMTcgKzY3NSwyMCBAQCBi
b29sIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZVdpbGxCZWdpbihjb25zCiAgICAgcmV0dXJuIGNhbkJl
Z2luUGFubmluZzsKIH0KIAotYm9vbCBXZWJQYWdlUHJveHk6Omdlc3R1cmVEaWRTY3JvbGwoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlRGlkU2Nyb2xsKGNv
bnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgYm9vbCBhdEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxh
YmxlRG9jdW1lbnQgPSBmYWxzZTsKLSAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpHZXN0dXJlRGlkU2Nyb2xsKHNpemUpLCBNZXNzYWdlczo6V2ViUGFnZTo6R2VzdHVy
ZURpZFNjcm9sbDo6UmVwbHkoYXRCZWdpbm5pbmdPckVuZE9mU2Nyb2xsYWJsZURvY3VtZW50KSwg
bV9wYWdlSUQpOwotICAgIHJldHVybiBhdEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1l
bnQ7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlRGlkU2Ny
b2xsKHNpemUpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlRGlk
RW5kKCkKIHsKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVE
aWRFbmQoKSwgbV9wYWdlSUQpOwogfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0R2VzdHVyZVNj
cm9sbGluZ0xpbWl0UmVhY2hlZChib29sIGxpbWl0UmVhY2hlZCkKK3sKKyAgICBtX3BhZ2VDbGll
bnQtPnNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQobGltaXRSZWFjaGVkKTsKK30KICNl
bmRpZgogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA4MzE5OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDgg
KzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldFNlbGVjdGVkVGV4dCgpOwogCiAgICAg
Ym9vbCBnZXN0dXJlV2lsbEJlZ2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgYm9v
bCBnZXN0dXJlRGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIGdl
c3R1cmVEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHZvaWQgZ2VzdHVy
ZURpZEVuZCgpOworCisgICAgdm9pZCBzZXRHZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKGJv
b2wgbGltaXRSZWFjaGVkKTsKICNlbmRpZgogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQogICAgIHZvaWQgc2V0QWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA4MzE5OCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIy
OCw0ICsyMjgsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxTb29uKGludDMyX3QgcmVhc29uKSAtPiAoU3RyaW5nIHJlc3VsdCkKICAgICBS
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBTdHJpbmcg
cmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyk7CiAjZW5kaWYKKworI2lm
IFBMQVRGT1JNKFdJTikKKwkjIFdpbmRvd3MgNyBHZXN0dXJlIE1lc3NhZ2VzCisJU2V0R2VzdHVy
ZVNjcm9sbGluZ0xpbWl0UmVhY2hlZChib29sIGxpbWl0UmVhY2hlZCkKKyNlbmRpZgogfQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA4MzE5
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NSw2ICsyNzUsNyBAQCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgV2Vi
Q29udGV4dCogCiAgICAgLCBtX2xhc3RQYW5YKDApCiAgICAgLCBtX2xhc3RQYW5ZKDApCiAgICAg
LCBtX292ZXJQYW5ZKDApCisgICAgLCBtX2dlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQoZmFs
c2UpCiB7CiAgICAgcmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MoKTsKIApAQCAtNTY5LDcgKzU3
MCw3IEBAIExSRVNVTFQgV2ViVmlldzo6b25HZXN0dXJlKEhXTkQgaFduZCwgVUkKICAgICAgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBvdmVycGFuIGZvciB3aW5kb3cgYm91bmNlLgogICAgICAgICBtX292
ZXJQYW5ZIC09IGRlbHRhWTsKIAotICAgICAgICBib29sIHNob3VsZEJvdW5jZVdpbmRvdyA9IG1f
cGFnZS0+Z2VzdHVyZURpZFNjcm9sbChJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgICAg
IG1fcGFnZS0+Z2VzdHVyZURpZFNjcm9sbChJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CiAKICAg
ICAgICAgaWYgKGdpLmR3RmxhZ3MgJiBHRl9CRUdJTikgewogICAgICAgICAgICAgQmVnaW5QYW5u
aW5nRmVlZGJhY2tQdHIoKShtX3dpbmRvdyk7CkBAIC01ODIsNyArNTgzLDcgQEAgTFJFU1VMVCBX
ZWJWaWV3Ojpvbkdlc3R1cmUoSFdORCBoV25kLCBVSQogICAgICAgICAvLyBGSVhNRTogU3VwcG9y
dCBob3Jpem9udGFsIHdpbmRvdyBib3VuY2UgLSA8aHR0cDovL3dlYmtpdC5vcmcvYi81ODA2OD4u
CiAgICAgICAgIC8vIEZJWE1FOiBXaW5kb3cgQm91bmNlIGRvZXNuJ3QgdW5kbyB1bnRpbCB1c2Vy
IHJlbGVhc2VzIHRoZWlyIGZpbmdlciAtIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU4MDY5Pi4KIAot
ICAgICAgICBpZiAoc2hvdWxkQm91bmNlV2luZG93KQorICAgICAgICBpZiAobV9nZXN0dXJlU2Ny
b2xsaW5nTGltaXRSZWFjaGVkKQogICAgICAgICAgICAgVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRy
KCkobV93aW5kb3csIDAsIG1fb3ZlclBhblksIGdpLmR3RmxhZ3MgJiBHRl9JTkVSVElBKTsKIAog
ICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gODMxOTgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMTg4LDYgKzE4OCw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIEhXTkQgbmF0aXZlV2lu
ZG93KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VzdHVyZVNjcm9sbGluZ0xpbWl0UmVhY2hl
ZChib29sIGxpbWl0UmVhY2hlZCkgeyBtX2dlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQgPSBs
aW1pdFJlYWNoZWQ7IH0KKwogICAgIC8vIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgog
ICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0sIExQQVJBTSk7CiAKQEAgLTIyOCw2ICsyMzAsOCBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2xhc3RQYW5ZOwogCiAgICAgaW50IG1fb3ZlclBhblk7CisKKyAgICBib29sIG1fZ2VzdHVy
ZVNjcm9sbGluZ0xpbWl0UmVhY2hlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lv
biA4MzE5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRT
ZWxlY3RlZFRleHQoV1RGOjpTdHJpbmcmKTsKIAogICAgIHZvaWQgZ2VzdHVyZVdpbGxCZWdpbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wmIGNhbkJlZ2luUGFubmluZyk7Ci0gICAgdm9p
ZCBnZXN0dXJlRGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBib29sJiBhdEJlZ2lu
bmluZ09yRW5kT2ZEb2N1bWVudCk7CisgICAgdm9pZCBnZXN0dXJlRGlkU2Nyb2xsKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKICAgICB2b2lkIGdlc3R1cmVEaWRFbmQoKTsKICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gODMxOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcg
KzIwMyw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIEdldFNlbGVjdGVkVGV4dCgpIC0+
IChXVEY6OlN0cmluZyB0ZXh0KQogCiAgICAgR2VzdHVyZVdpbGxCZWdpbihXZWJDb3JlOjpJbnRQ
b2ludCBwb2ludCkgLT4gKGJvb2wgY2FuQmVnaW5QYW5uaW5nKQotICAgIEdlc3R1cmVEaWRTY3Jv
bGwoV2ViQ29yZTo6SW50U2l6ZSBzaXplKSAtPiAoYm9vbCBhdEJlZ2lubmluZ09yRW5kT2ZTY3Jv
bGxhYmxlRG9jdW1lbnQpCisgICAgR2VzdHVyZURpZFNjcm9sbChXZWJDb3JlOjpJbnRTaXplIHNp
emUpCiAgICAgR2VzdHVyZURpZEVuZCgpCiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdl
V2luLmNwcAkocmV2aXNpb24gODMxOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJGb250U21vb3RoaW5nTGV2ZWwuaCIKICNpbmNsdWRlICJXZWJFdmVudC5o
IgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVy
ZW5jZXNTdG9yZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Gb250UmVuZGVyaW5nTW9kZS5oPgpAQCAtNDAxLDI4ICs0MDIsMzEgQEAg
dm9pZCBXZWJQYWdlOjpnZXN0dXJlV2lsbEJlZ2luKGNvbnN0IFdlYgogICAgIGNhbkJlZ2luUGFu
bmluZyA9IGZhbHNlOwogfQogCi12b2lkIFdlYlBhZ2U6Omdlc3R1cmVEaWRTY3JvbGwoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCYgYXRCZWdpbm5pbmdPckVuZE9mU2Nyb2xsYWJsZURvY3VtZW50
KQorc3RhdGljIGJvb2wgc2Nyb2xsYmFyQXRUb3BPZkJvdHRvbU9yRG9jdW1lbnQoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCiB7Ci0gICAgYXRCZWdpbm5pbmdPckVuZE9mU2Nyb2xsYWJsZURvY3VtZW50
ID0gZmFsc2U7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiAhc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgfHwgc2Nyb2xsYmFyLT5jdXJyZW50
UG9zKCkgPj0gc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Cit9CiAKK3ZvaWQgV2ViUGFnZTo6Z2VzdHVy
ZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzaXplKQorewogICAgIGlmICghbV9nZXN0dXJlVGFy
Z2V0Tm9kZSB8fCAhbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSB8fCAhbV9nZXN0dXJl
VGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIo
KS0+c2Nyb2xsQnlSZWN1cnNpdmVseShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0g
ICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm47CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IDA7Cisg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIGlmIChT
Y3JvbGxWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgICAgIHZlcnRpY2FsU2Ny
b2xsYmFyID0gdmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsKIAotICAgIFNjcm9sbFZpZXcqIHZp
ZXcgPSBmcmFtZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOworICAg
IGJvb2wgYXRTY3JvbGxpbmdMaW1pdEJlZm9yZSA9IHNjcm9sbGJhckF0VG9wT2ZCb3R0b21PckRv
Y3VtZW50KHZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgYm9vbCBhdFNjcm9sbGluZ0xpbWl0QWZ0ZXIgPSBzY3Jv
bGxiYXJBdFRvcE9mQm90dG9tT3JEb2N1bWVudCh2ZXJ0aWNhbFNjcm9sbGJhcik7CiAKLSAgICBT
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gdmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsK
LSAgICBpZiAoIXZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF0
U2Nyb2xsaW5nTGltaXRCZWZvcmUgIT0gYXRTY3JvbGxpbmdMaW1pdEFmdGVyKQorICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNo
ZWQoYXRTY3JvbGxpbmdMaW1pdEFmdGVyKSk7CiAKLSAgICBhdEJlZ2lubmluZ09yRW5kT2ZTY3Jv
bGxhYmxlRG9jdW1lbnQgPSAhdmVydGljYWxTY3JvbGxiYXItPmN1cnJlbnRQb3MoKSB8fCB2ZXJ0
aWNhbFNjcm9sbGJhci0+Y3VycmVudFBvcygpID49IHZlcnRpY2FsU2Nyb2xsYmFyLT5tYXhpbXVt
KCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2VzdHVyZURpZEVuZCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88900</attachid>
            <date>2011-04-08 16:49:54 -0700</date>
            <delta_ts>2011-04-11 11:07:06 -0700</delta_ts>
            <desc>[PATCH] Fix v2</desc>
            <filename>window_bounce_async.patch</filename>
            <type>text/plain</type>
            <size>11977</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMzQ3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDQtMDggIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFdpbmRvd3MgNyBHZXN0dXJlcyBXaW5k
b3cgQm91bmNlIHNob3VsZG4ndCByZXF1aXJlIGEgc3luYyBtZXNzYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODE2NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vOTI1OTgxMz4KKyAgICAgICAgCisgICAgICAgIEluc3RlYWQgb2YgbWFraW5nIEdl
c3R1cmVEaWRTY3JvbGwgc3luYywgaGF2ZSBXZWJQYWdlV2luIGNhbGwgZnJvbSBXZWJQcm9jZXNz
IC0+CisgICAgICAgIFVJUHJvY2VzcyB3aGVuIHRoZSBnZXN0dXJlIGNhdXNlcyB0aGUgcGFnZSB0
byBzY3JvbGwgdG8gdGhlIGJlZ2lubmluZyBvciB0aGUKKyAgICAgICAgZW5kIG9mIHRoZSBkb2N1
bWVudC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Z2VzdHVyZURpZFNjcm9sbCk6IE5vdCBhIHN5bmMgbWVzc2FnZSBhbnltb3JlLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQpOiBU
ZWxsIHRoZSBwYWdlIGNsaWVudCB0aGF0IHRoZSBnZXN0dXJlCisgICAgICAgICAgICBzY3JvbGxp
bmcgbGltbml0IHdhcyByZWFjaGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOiBBZGQgYSBu
ZXcgbWVzc2FnZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KTogSW5pdGlhbGl6ZSBuZXcgdmFyaWFibGUuCisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uR2VzdHVyZSk6IFVzZSB0aGUgc3RhdGUgb2YgdGhl
IG1lbWJlciB2YXJpYWJsZSwgbm90IHRoZSByZXNwb25zZSBmcm9tCisgICAgICAgICAgICB0aGUg
c3luYyBtZXNzYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRHZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93aW4vV2ViUGFnZVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNjcm9sbGJhckF0VG9w
T2ZCb3R0b21PckRvY3VtZW50KTogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2Nyb2xsYmFy
IGlzIGF0IHRoZQorICAgICAgICAgICAgdG9wIG9yIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omdlc3R1cmVEaWRTY3JvbGwpOiBUcmFjayB3aGV0aGVy
IG9yIG5vdCB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgIG9yIGVuZCBv
ZiB0aGUgZG9jdW1lbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCB3ZSBlbmRlZCBhdCB0aGUgYmVnaW5u
aW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQsCisgICAgICAgICAgICBhbmQgc2VuZCBhIG1lc3Nh
Z2UgaWYgdGhlIGF2bHVlIGNoYW5nZWQuCisKIDIwMTEtMDQtMDggIEFscGhhIExhbSAgPGhjbGFt
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODMzMzUu
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDgzMTk4
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMwLDYgKzEzMCw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2
aXJ0dWFsIEhXTkQgbmF0aXZlV2luZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZXN0
dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKGJvb2wpID0gMDsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDgzMTk4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3NSwxNyArNjc1LDIwIEBAIGJvb2wgV2ViUGFnZVBy
b3h5OjpnZXN0dXJlV2lsbEJlZ2luKGNvbnMKICAgICByZXR1cm4gY2FuQmVnaW5QYW5uaW5nOwog
fQogCi1ib29sIFdlYlBhZ2VQcm94eTo6Z2VzdHVyZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBz
aXplKQordm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVEaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBib29sIGF0QmVnaW5uaW5nT3JFbmRPZlNjcm9sbGFibGVEb2N1bWVudCA9
IGZhbHNlOwotICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okdlc3R1
cmVEaWRTY3JvbGwoc2l6ZSksIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlRGlkU2Nyb2xsOjpS
ZXBseShhdEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQpLCBtX3BhZ2VJRCk7Ci0g
ICAgcmV0dXJuIGF0QmVnaW5uaW5nT3JFbmRPZlNjcm9sbGFibGVEb2N1bWVudDsKKyAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVEaWRTY3JvbGwoc2l6ZSksIG1f
cGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVEaWRFbmQoKQogewogICAg
IHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2VzdHVyZURpZEVuZCgpLCBtX3Bh
Z2VJRCk7CiB9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRHZXN0dXJlU2Nyb2xsaW5nTGltaXRS
ZWFjaGVkKGJvb2wgbGltaXRSZWFjaGVkKQoreworICAgIG1fcGFnZUNsaWVudC0+c2V0R2VzdHVy
ZVNjcm9sbGluZ0xpbWl0UmVhY2hlZChsaW1pdFJlYWNoZWQpOworfQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgzMTk4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsOCArMjc0LDEwIEBAIHB1
YmxpYzoKICAgICBTdHJpbmcgZ2V0U2VsZWN0ZWRUZXh0KCk7CiAKICAgICBib29sIGdlc3R1cmVX
aWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICBib29sIGdlc3R1cmVEaWRT
Y3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9s
bChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBnZXN0dXJlRGlkRW5kKCk7CisK
KyAgICB2b2lkIHNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQoYm9vbCk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICB2b2lkIHNldEFjdHVhbFZpc2li
bGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gODMxOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNCArMjI4LDkgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJl
YXNvbikgLT4gKFN0cmluZyByZXN1bHQpCiAgICAgUmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVw
bGFjZW1lbnRTdHJpbmcpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgIyBXaW5k
b3dzIDcgR2VzdHVyZSBNZXNzYWdlcworICAgIFNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNo
ZWQoYm9vbCBsaW1pdFJlYWNoZWQpCisjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gODMxOTgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNiArMjc1
LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIFdlYkNvbnRleHQqIAogICAgICwgbV9s
YXN0UGFuWCgwKQogICAgICwgbV9sYXN0UGFuWSgwKQogICAgICwgbV9vdmVyUGFuWSgwKQorICAg
ICwgbV9nZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKGZhbHNlKQogewogICAgIHJlZ2lzdGVy
V2ViVmlld1dpbmRvd0NsYXNzKCk7CiAKQEAgLTU2OSwyMCArNTcwLDIyIEBAIExSRVNVTFQgV2Vi
Vmlldzo6b25HZXN0dXJlKEhXTkQgaFduZCwgVUkKICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBv
dmVycGFuIGZvciB3aW5kb3cgYm91bmNlLgogICAgICAgICBtX292ZXJQYW5ZIC09IGRlbHRhWTsK
IAotICAgICAgICBib29sIHNob3VsZEJvdW5jZVdpbmRvdyA9IG1fcGFnZS0+Z2VzdHVyZURpZFNj
cm9sbChJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgICAgIG1fcGFnZS0+Z2VzdHVyZURp
ZFNjcm9sbChJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CiAKICAgICAgICAgaWYgKGdpLmR3Rmxh
Z3MgJiBHRl9CRUdJTikgewogICAgICAgICAgICAgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSht
X3dpbmRvdyk7CisgICAgICAgICAgICBtX2dlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQgPSBm
YWxzZTsKICAgICAgICAgICAgIG1fb3ZlclBhblkgPSAwOwogICAgICAgICB9IGVsc2UgaWYgKGdp
LmR3RmxhZ3MgJiBHRl9FTkQpIHsKICAgICAgICAgICAgIEVuZFBhbm5pbmdGZWVkYmFja1B0cigp
KG1fd2luZG93LCB0cnVlKTsKKyAgICAgICAgICAgIG1fZ2VzdHVyZVNjcm9sbGluZ0xpbWl0UmVh
Y2hlZCA9IGZhbHNlOwogICAgICAgICAgICAgbV9vdmVyUGFuWSA9IDA7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBob3Jpem9udGFsIHdpbmRvdyBib3VuY2UgLSA8aHR0
cDovL3dlYmtpdC5vcmcvYi81ODA2OD4uCiAgICAgICAgIC8vIEZJWE1FOiBXaW5kb3cgQm91bmNl
IGRvZXNuJ3QgdW5kbyB1bnRpbCB1c2VyIHJlbGVhc2VzIHRoZWlyIGZpbmdlciAtIDxodHRwOi8v
d2Via2l0Lm9yZy9iLzU4MDY5Pi4KIAotICAgICAgICBpZiAoc2hvdWxkQm91bmNlV2luZG93KQor
ICAgICAgICBpZiAobV9nZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKQogICAgICAgICAgICAg
VXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkobV93aW5kb3csIDAsIG1fb3ZlclBhblksIGdpLmR3
RmxhZ3MgJiBHRl9JTkVSVElBKTsKIAogICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRy
KCkoZ2VzdHVyZUhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZp
ZXcuaAkocmV2aXNpb24gODMxOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw4IEBAIHByaXZhdGU6CiAKICAg
ICB2aXJ0dWFsIEhXTkQgbmF0aXZlV2luZG93KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2Vz
dHVyZVNjcm9sbGluZ0xpbWl0UmVhY2hlZChib29sIGxpbWl0UmVhY2hlZCkgeyBtX2dlc3R1cmVT
Y3JvbGxpbmdMaW1pdFJlYWNoZWQgPSBsaW1pdFJlYWNoZWQ7IH0KKwogICAgIC8vIFdlYkNvcmU6
OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZlZE1l
c3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKQEAgLTIyOCw2ICsy
MzAsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RQYW5ZOwogCiAgICAgaW50IG1fb3ZlclBh
blk7CisKKyAgICBib29sIG1fZ2VzdHVyZVNjcm9sbGluZ0xpbWl0UmVhY2hlZDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gODMxOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsx
NjksOSBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAgICAgLCBt
X3VzZXJTcGFjZVNjYWxlRmFjdG9yKHBhcmFtZXRlcnMudXNlclNwYWNlU2NhbGVGYWN0b3IpCiAg
ICAgLCBtX2NhY2hlZE1haW5GcmFtZUlzUGlubmVkVG9MZWZ0U2lkZShmYWxzZSkKICAgICAsIG1f
Y2FjaGVkTWFpbkZyYW1lSXNQaW5uZWRUb1JpZ2h0U2lkZShmYWxzZSkKKyNpZiBQTEFURk9STShX
SU4pCisgICAgLCBtX2dlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQoZmFsc2UpCisjZW5kaWYK
IHsKICAgICBBU1NFUlQobV9wYWdlSUQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDgzMTk4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDcg
KzMyNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFNlbGVjdGVkVGV4dChXVEY6OlN0cmluZyYp
OwogCiAgICAgdm9pZCBnZXN0dXJlV2lsbEJlZ2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
Ym9vbCYgY2FuQmVnaW5QYW5uaW5nKTsKLSAgICB2b2lkIGdlc3R1cmVEaWRTY3JvbGwoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIGJvb2wmIGF0QmVnaW5uaW5nT3JFbmRPZkRvY3VtZW50KTsKKyAg
ICB2b2lkIGdlc3R1cmVEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHZv
aWQgZ2VzdHVyZURpZEVuZCgpOwogI2VuZGlmCiAKQEAgLTYyMSw2ICs2MjEsMTAgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgbV9jYWNoZWRNYWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGU7CiAgICAg
Ym9vbCBtX2NhY2hlZE1haW5GcmFtZUlzUGlubmVkVG9SaWdodFNpZGU7CisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgYm9vbCBtX2dlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQ7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDgz
MTk4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNyBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIHsKICAgICBHZXRTZWxlY3RlZFRleHQoKSAtPiAoV1RGOjpTdHJpbmcgdGV4dCkKIAogICAg
IEdlc3R1cmVXaWxsQmVnaW4oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+IChib29sIGNhbkJl
Z2luUGFubmluZykKLSAgICBHZXN0dXJlRGlkU2Nyb2xsKFdlYkNvcmU6OkludFNpemUgc2l6ZSkg
LT4gKGJvb2wgYXRCZWdpbm5pbmdPckVuZE9mU2Nyb2xsYWJsZURvY3VtZW50KQorICAgIEdlc3R1
cmVEaWRTY3JvbGwoV2ViQ29yZTo6SW50U2l6ZSBzaXplKQogICAgIEdlc3R1cmVEaWRFbmQoKQog
I2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAJKHJldmlzaW9uIDgzMTk4KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRm9udFNtb290aGlu
Z0xldmVsLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udFJlbmRlcmlu
Z01vZGUuaD4KQEAgLTM1Nyw2ICszNTgsOCBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkVGV4
dChTdHJpbmcmIHRlCiAKIHZvaWQgV2ViUGFnZTo6Z2VzdHVyZVdpbGxCZWdpbihjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wmIGNhbkJlZ2luUGFubmluZykKIHsKKyAgICBtX2dl
c3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQgPSBmYWxzZTsKKwogICAgIGJvb2wgaGl0U2Nyb2xs
YmFyID0gZmFsc2U7CiAKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0
OjpSZWFkT25seSk7CkBAIC00MDEsMzIgKzQwNCwzOSBAQCB2b2lkIFdlYlBhZ2U6Omdlc3R1cmVX
aWxsQmVnaW4oY29uc3QgV2ViCiAgICAgY2FuQmVnaW5QYW5uaW5nID0gZmFsc2U7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6Z2VzdHVyZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzaXplLCBib29sJiBh
dEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQpCitzdGF0aWMgYm9vbCBzY3JvbGxi
YXJBdFRvcE9mQm90dG9tT3JEb2N1bWVudChTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICBh
dEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQgPSBmYWxzZTsKKyAgICBpZiAoIXNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFzY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKSB8fCBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA+PSBzY3JvbGxiYXItPm1h
eGltdW0oKTsKK30KIAordm9pZCBXZWJQYWdlOjpnZXN0dXJlRGlkU2Nyb2xsKGNvbnN0IEludFNp
emUmIHNpemUpCit7CiAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8ICFtX2dlc3R1cmVU
YXJnZXROb2RlLT5yZW5kZXJlcigpIHx8ICFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigp
LT5lbmNsb3NpbmdMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2dlc3R1cmVUYXJn
ZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICBT
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gMDsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0g
bV9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgaWYgKFNjcm9sbFZpZXcqIHZpZXcgPSBmcmFt
ZS0+dmlldygpKQorICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXIgPSB2aWV3LT52ZXJ0aWNh
bFNjcm9sbGJhcigpOwogCi0gICAgU2Nyb2xsVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0g
ICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47CisgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgIGJvb2wgZ2VzdHVyZVNjcm9sbGluZ0xpbWl0UmVh
Y2hlZCA9IHNjcm9sbGJhckF0VG9wT2ZCb3R0b21PckRvY3VtZW50KHZlcnRpY2FsU2Nyb2xsYmFy
KTsKIAotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSB2aWV3LT52ZXJ0aWNhbFNj
cm9sbGJhcigpOwotICAgIGlmICghdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsK
KyAgICAvLyBGSVhNRTogV2UgcmVhbGx5IG9ubHkgd2FudCB0byB1cGRhdGUgdGhpcyBzdGF0ZSBp
ZiB0aGUgc3RhdGUgd2FzIHVwZGF0ZWQgdmlhIHNjcm9sbGluZyB0aGUgbWFpbiBmcmFtZSwKKyAg
ICAvLyBub3Qgc2Nyb2xsaW5nIHNvbWV0aGluZyBpbiBhIG1haW4gZnJhbWUgd2hlbiB0aGUgbWFp
biBmcmFtZSBoYWQgYWxyZWFkeSByZWFjaGVkIGl0cyBzY3JvbGxpbmcgbGltaXQuCiAKLSAgICBh
dEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQgPSAhdmVydGljYWxTY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhci0+Y3VycmVudFBvcygpID49IHZlcnRp
Y2FsU2Nyb2xsYmFyLT5tYXhpbXVtKCk7CisgICAgaWYgKGdlc3R1cmVTY3JvbGxpbmdMaW1pdFJl
YWNoZWQgIT0gbV9nZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKSB7CisgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0R2VzdHVyZVNjcm9sbGluZ0xpbWl0UmVhY2hlZChn
ZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKSk7CisgICAgICAgIG1fZ2VzdHVyZVNjcm9sbGlu
Z0xpbWl0UmVhY2hlZCA9IGdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQ7CisgICAgfQogfQog
CiB2b2lkIFdlYlBhZ2U6Omdlc3R1cmVEaWRFbmQoKQogeworICAgIG1fZ2VzdHVyZVNjcm9sbGlu
Z0xpbWl0UmVhY2hlZCA9IGZhbHNlOwogICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSBudWxscHRy
OwogfQogCg==
</data>
<flag name="review"
          id="81492"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89031</attachid>
            <date>2011-04-11 11:07:06 -0700</date>
            <delta_ts>2011-04-11 11:13:40 -0700</delta_ts>
            <desc>[PATCH] Fix v3</desc>
            <filename>window_bounce_async.patch</filename>
            <type>text/plain</type>
            <size>12007</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDQtMTEgIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFdpbmRvd3MgNyBHZXN0dXJlcyBXaW5k
b3cgQm91bmNlIHNob3VsZG4ndCByZXF1aXJlIGEgc3luYyBtZXNzYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODE2NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vOTI1OTgxMz4KKyAgICAgICAgCisgICAgICAgIEluc3RlYWQgb2YgbWFraW5nIEdl
c3R1cmVEaWRTY3JvbGwgc3luYywgaGF2ZSBXZWJQYWdlV2luIGNhbGwgZnJvbSBXZWJQcm9jZXNz
IC0+CisgICAgICAgIFVJUHJvY2VzcyB3aGVuIHRoZSBnZXN0dXJlIGNhdXNlcyB0aGUgcGFnZSB0
byBzY3JvbGwgdG8gdGhlIGJlZ2lubmluZyBvciB0aGUKKyAgICAgICAgZW5kIG9mIHRoZSBkb2N1
bWVudC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Z2VzdHVyZURpZFNjcm9sbCk6IE5vdCBhIHN5bmMgbWVzc2FnZSBhbnltb3JlLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEdlc3R1cmVTY3JvbGxpbmdMaW1pdFJlYWNoZWQpOiBU
ZWxsIHRoZSBwYWdlIGNsaWVudCB0aGF0IHRoZSBnZXN0dXJlCisgICAgICAgICAgICBzY3JvbGxp
bmcgbGltbml0IHdhcyByZWFjaGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOiBBZGQgYSBu
ZXcgbWVzc2FnZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KTogSW5pdGlhbGl6ZSBuZXcgdmFyaWFibGUuCisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uR2VzdHVyZSk6IFVzZSB0aGUgc3RhdGUgb2YgdGhl
IG1lbWJlciB2YXJpYWJsZSwgbm90IHRoZSByZXNwb25zZSBmcm9tCisgICAgICAgICAgICB0aGUg
c3luYyBtZXNzYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRHZXN0dXJlU2Nyb2xsaW5nTGltaXRSZWFjaGVkKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93aW4vV2ViUGFnZVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNjcm9sbGJhckF0VG9w
T2ZCb3R0b21PckRvY3VtZW50KTogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2Nyb2xsYmFy
IGlzIGF0IHRoZQorICAgICAgICAgICAgdG9wIG9yIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omdlc3R1cmVEaWRTY3JvbGwpOiBUcmFjayB3aGV0aGVy
IG9yIG5vdCB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgIG9yIGVuZCBv
ZiB0aGUgZG9jdW1lbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCB3ZSBlbmRlZCBhdCB0aGUgYmVnaW5u
aW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQsCisgICAgICAgICAgICBhbmQgc2VuZCBhIG1lc3Nh
Z2UgaWYgdGhlIHZhbHVlIGNoYW5nZWQuCisKIDIwMTEtMDQtMTAgIE1hY2llaiBTdGFjaG93aWFr
ICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEz
MCw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIEhXTkQgbmF0
aXZlV2luZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZXN0dXJlUmVhY2hlZFNjcm9s
bGluZ0xpbWl0KGJvb2wpID0gMDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDgzNDQ2
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3NSwxNyArNjc1LDIwIEBAIGJvb2wgV2ViUGFnZVByb3h5OjpnZXN0dXJlV2ls
bEJlZ2luKGNvbnMKICAgICByZXR1cm4gY2FuQmVnaW5QYW5uaW5nOwogfQogCi1ib29sIFdlYlBh
Z2VQcm94eTo6Z2VzdHVyZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBXZWJQ
YWdlUHJveHk6Omdlc3R1cmVEaWRTY3JvbGwoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBi
b29sIGF0QmVnaW5uaW5nT3JFbmRPZlNjcm9sbGFibGVEb2N1bWVudCA9IGZhbHNlOwotICAgIHBy
b2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVEaWRTY3JvbGwoc2l6
ZSksIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlRGlkU2Nyb2xsOjpSZXBseShhdEJlZ2lubmlu
Z09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQpLCBtX3BhZ2VJRCk7Ci0gICAgcmV0dXJuIGF0QmVn
aW5uaW5nT3JFbmRPZlNjcm9sbGFibGVEb2N1bWVudDsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVEaWRTY3JvbGwoc2l6ZSksIG1fcGFnZUlEKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVEaWRFbmQoKQogewogICAgIHByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6R2VzdHVyZURpZEVuZCgpLCBtX3BhZ2VJRCk7CiB9CisKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZXRHZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0KGJvb2wgbGlt
aXRSZWFjaGVkKQoreworICAgIG1fcGFnZUNsaWVudC0+c2V0R2VzdHVyZVJlYWNoZWRTY3JvbGxp
bmdMaW1pdChsaW1pdFJlYWNoZWQpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsOCArMjc2LDEwIEBAIHB1YmxpYzoKICAgICBTdHJp
bmcgZ2V0U2VsZWN0ZWRUZXh0KCk7CiAKICAgICBib29sIGdlc3R1cmVXaWxsQmVnaW4oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICBib29sIGdlc3R1cmVEaWRTY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9sbChjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJik7CiAgICAgdm9pZCBnZXN0dXJlRGlkRW5kKCk7CisKKyAgICB2b2lkIHNldEdl
c3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQoYm9vbCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKICAgICB2b2lkIHNldEFjdHVhbFZpc2libGVDb250ZW50UmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gODM0NDYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzMsNCArMjMzLDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbikgLT4gKFN0cmlu
ZyByZXN1bHQpCiAgICAgUmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShpbnQzMl90IHJlc3Bv
bnNlVHlwZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcp
OwogI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgIyBXaW5kb3dzIDcgR2VzdHVyZSBN
ZXNzYWdlcworICAgIFNldEdlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQoYm9vbCBsaW1pdFJl
YWNoZWQpCisjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmNwcAkocmV2aXNpb24gODM0NDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNiArMjc1LDcgQEAgV2ViVmlldzo6
V2ViVmlldyhSRUNUIHJlY3QsIFdlYkNvbnRleHQqCiAgICAgLCBtX2xhc3RQYW5YKDApCiAgICAg
LCBtX2xhc3RQYW5ZKDApCiAgICAgLCBtX292ZXJQYW5ZKDApCisgICAgLCBtX2dlc3R1cmVSZWFj
aGVkU2Nyb2xsaW5nTGltaXQoZmFsc2UpCiB7CiAgICAgcmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xh
c3MoKTsKIApAQCAtNTY5LDEwICs1NzAsMTEgQEAgTFJFU1VMVCBXZWJWaWV3Ojpvbkdlc3R1cmUo
SFdORCBoV25kLCBVSQogICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG92ZXJwYW4gZm9yIHdpbmRv
dyBib3VuY2UuCiAgICAgICAgIG1fb3ZlclBhblkgLT0gZGVsdGFZOwogCi0gICAgICAgIGJvb2wg
c2hvdWxkQm91bmNlV2luZG93ID0gbV9wYWdlLT5nZXN0dXJlRGlkU2Nyb2xsKEludFNpemUoZGVs
dGFYLCBkZWx0YVkpKTsKKyAgICAgICAgbV9wYWdlLT5nZXN0dXJlRGlkU2Nyb2xsKEludFNpemUo
ZGVsdGFYLCBkZWx0YVkpKTsKIAogICAgICAgICBpZiAoZ2kuZHdGbGFncyAmIEdGX0JFR0lOKSB7
CiAgICAgICAgICAgICBCZWdpblBhbm5pbmdGZWVkYmFja1B0cigpKG1fd2luZG93KTsKKyAgICAg
ICAgICAgIG1fZ2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdCA9IGZhbHNlOwogICAgICAgICAg
ICAgbV9vdmVyUGFuWSA9IDA7CiAgICAgICAgIH0gZWxzZSBpZiAoZ2kuZHdGbGFncyAmIEdGX0VO
RCkgewogICAgICAgICAgICAgRW5kUGFubmluZ0ZlZWRiYWNrUHRyKCkobV93aW5kb3csIHRydWUp
OwpAQCAtNTgyLDcgKzU4NCw3IEBAIExSRVNVTFQgV2ViVmlldzo6b25HZXN0dXJlKEhXTkQgaFdu
ZCwgVUkKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgaG9yaXpvbnRhbCB3aW5kb3cgYm91bmNl
IC0gPGh0dHA6Ly93ZWJraXQub3JnL2IvNTgwNjg+LgogICAgICAgICAvLyBGSVhNRTogV2luZG93
IEJvdW5jZSBkb2Vzbid0IHVuZG8gdW50aWwgdXNlciByZWxlYXNlcyB0aGVpciBmaW5nZXIgLSA8
aHR0cDovL3dlYmtpdC5vcmcvYi81ODA2OT4uCiAKLSAgICAgICAgaWYgKHNob3VsZEJvdW5jZVdp
bmRvdykKKyAgICAgICAgaWYgKG1fZ2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdCkKICAgICAg
ICAgICAgIFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpKG1fd2luZG93LCAwLCBtX292ZXJQYW5Z
LCBnaS5kd0ZsYWdzICYgR0ZfSU5FUlRJQSk7CiAKICAgICAgICAgQ2xvc2VHZXN0dXJlSW5mb0hh
bmRsZVB0cigpKGdlc3R1cmVIYW5kbGUpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmgJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsOCBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBIV05EIG5hdGl2ZVdpbmRvdygpOwogCisgICAgdmlydHVhbCB2b2lk
IHNldEdlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQoYm9vbCBsaW1pdFJlYWNoZWQpIHsgbV9n
ZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0ID0gbGltaXRSZWFjaGVkOyB9CisKICAgICAvLyBX
ZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVj
ZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCkBAIC0y
MjgsNiArMjMwLDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0UGFuWTsKIAogICAgIGludCBt
X292ZXJQYW5ZOworCisgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjksNiArMTY5LDkgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0CiAg
ICAgLCBtX3VzZXJTcGFjZVNjYWxlRmFjdG9yKHBhcmFtZXRlcnMudXNlclNwYWNlU2NhbGVGYWN0
b3IpCiAgICAgLCBtX2NhY2hlZE1haW5GcmFtZUlzUGlubmVkVG9MZWZ0U2lkZShmYWxzZSkKICAg
ICAsIG1fY2FjaGVkTWFpbkZyYW1lSXNQaW5uZWRUb1JpZ2h0U2lkZShmYWxzZSkKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgLCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQoZmFsc2UpCisj
ZW5kaWYKIHsKICAgICBBU1NFUlQobV9wYWdlSUQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMxLDcgKzMzMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFNlbGVjdGVkVGV4dChXVEY6OlN0
cmluZyYpOwogCiAgICAgdm9pZCBnZXN0dXJlV2lsbEJlZ2luKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgYm9vbCYgY2FuQmVnaW5QYW5uaW5nKTsKLSAgICB2b2lkIGdlc3R1cmVEaWRTY3JvbGwo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGJvb2wmIGF0QmVnaW5uaW5nT3JFbmRPZkRvY3VtZW50
KTsKKyAgICB2b2lkIGdlc3R1cmVEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwog
ICAgIHZvaWQgZ2VzdHVyZURpZEVuZCgpOwogI2VuZGlmCiAKQEAgLTYzMiw2ICs2MzIsMTAgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9jYWNoZWRNYWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGU7
CiAgICAgYm9vbCBtX2NhY2hlZE1haW5GcmFtZUlzUGlubmVkVG9SaWdodFNpZGU7CisKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7Cisj
ZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDgzNDQ2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlIHsKICAgICBHZXRTZWxlY3RlZFRleHQoKSAtPiAoV1RGOjpTdHJpbmcgdGV4dCkK
IAogICAgIEdlc3R1cmVXaWxsQmVnaW4oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+IChib29s
IGNhbkJlZ2luUGFubmluZykKLSAgICBHZXN0dXJlRGlkU2Nyb2xsKFdlYkNvcmU6OkludFNpemUg
c2l6ZSkgLT4gKGJvb2wgYXRCZWdpbm5pbmdPckVuZE9mU2Nyb2xsYWJsZURvY3VtZW50KQorICAg
IEdlc3R1cmVEaWRTY3JvbGwoV2ViQ29yZTo6SW50U2l6ZSBzaXplKQogICAgIEdlc3R1cmVEaWRF
bmQoKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAJKHJldmlzaW9uIDgz
NDQ2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRm9udFNt
b290aGluZ0xldmVsLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udFJl
bmRlcmluZ01vZGUuaD4KQEAgLTM1Nyw2ICszNTgsOCBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVj
dGVkVGV4dChTdHJpbmcmIHRlCiAKIHZvaWQgV2ViUGFnZTo6Z2VzdHVyZVdpbGxCZWdpbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wmIGNhbkJlZ2luUGFubmluZykKIHsKKyAg
ICBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQgPSBmYWxzZTsKKwogICAgIGJvb2wgaGl0
U2Nyb2xsYmFyID0gZmFsc2U7CiAKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RS
ZXF1ZXN0OjpSZWFkT25seSk7CkBAIC00MDEsMjggKzQwNCwzNiBAQCB2b2lkIFdlYlBhZ2U6Omdl
c3R1cmVXaWxsQmVnaW4oY29uc3QgV2ViCiAgICAgY2FuQmVnaW5QYW5uaW5nID0gZmFsc2U7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6Z2VzdHVyZURpZFNjcm9sbChjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sJiBhdEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQpCitzdGF0aWMgYm9vbCBz
Y3JvbGxiYXJBdFRvcE9yQm90dG9tT2ZEb2N1bWVudChTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsK
LSAgICBhdEJlZ2lubmluZ09yRW5kT2ZTY3JvbGxhYmxlRG9jdW1lbnQgPSBmYWxzZTsKKyAgICBB
U1NFUlRfQVJHKHNjcm9sbGJhciwgc2Nyb2xsYmFyKTsKKyAgICByZXR1cm4gIXNjcm9sbGJhci0+
Y3VycmVudFBvcygpIHx8IHNjcm9sbGJhci0+Y3VycmVudFBvcygpID49IHNjcm9sbGJhci0+bWF4
aW11bSgpOworfQogCi0gICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8ICFtX2dlc3R1cmVU
YXJnZXROb2RlLT5yZW5kZXJlcigpIHx8ICFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigp
LT5lbmNsb3NpbmdMYXllcigpKQordm9pZCBXZWJQYWdlOjpnZXN0dXJlRGlkU2Nyb2xsKGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKHNpemUuaXNaZXJvKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQot
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
KyAgICBpZiAoIW1fZ2VzdHVyZVRhcmdldE5vZGUgfHwgIW1fZ2VzdHVyZVRhcmdldE5vZGUtPnJl
bmRlcmVyKCkgfHwgIW1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNjcm9sbFZpZXcqIHZpZXcgPSBmcmFtZS0+
dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOworICAgIFNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIgPSAwOworICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpKSB7CisgICAgICAgIGlmIChTY3JvbGxWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXco
KSkKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyID0gdmlldy0+dmVydGljYWxTY3JvbGxi
YXIoKTsKKyAgICB9CiAKLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gdmlldy0+
dmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBpZiAoIXZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAg
ICByZXR1cm47CisgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5n
TGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworICAgIGJvb2wgZ2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdCA9IHZlcnRpY2FsU2Nyb2xs
YmFyICYmIHNjcm9sbGJhckF0VG9wT3JCb3R0b21PZkRvY3VtZW50KHZlcnRpY2FsU2Nyb2xsYmFy
KTsKKworICAgIC8vIEZJWE1FOiBXZSByZWFsbHkgb25seSB3YW50IHRvIHVwZGF0ZSB0aGlzIHN0
YXRlIGlmIHRoZSBzdGF0ZSB3YXMgdXBkYXRlZCB2aWEgc2Nyb2xsaW5nIHRoZSBtYWluIGZyYW1l
LAorICAgIC8vIG5vdCBzY3JvbGxpbmcgc29tZXRoaW5nIGluIGEgbWFpbiBmcmFtZSB3aGVuIHRo
ZSBtYWluIGZyYW1lIGhhZCBhbHJlYWR5IHJlYWNoZWQgaXRzIHNjcm9sbGluZyBsaW1pdC4KIAot
ICAgIGF0QmVnaW5uaW5nT3JFbmRPZlNjcm9sbGFibGVEb2N1bWVudCA9ICF2ZXJ0aWNhbFNjcm9s
bGJhci0+Y3VycmVudFBvcygpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPj0g
dmVydGljYWxTY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICBpZiAoZ2VzdHVyZVJlYWNoZWRTY3Jv
bGxpbmdMaW1pdCAhPSBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQpIHsKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRHZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xp
bWl0KGdlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQpKTsKKyAgICAgICAgbV9nZXN0dXJlUmVh
Y2hlZFNjcm9sbGluZ0xpbWl0ID0gZ2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdMaW1pdDsKKyAgICB9
CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2VzdHVyZURpZEVuZCgpCg==
</data>
<flag name="review"
          id="81660"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>