<?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>75904</bug_id>
          
          <creation_ts>2012-01-09 16:22:07 -0800</creation_ts>
          <short_desc>WebKit 1: Scrollbar uiStateTransitionProgress requires tracking the mouse all the time</short_desc>
          <delta_ts>2012-01-11 17:19:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>532622</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-09 16:22:07 -0800</bug_when>
    <thetext>With https://bugs.webkit.org/show_bug.cgi?id=71490 and http://trac.webkit.org/changeset/99493 I added support for uiStateTransitionProgress on scrollbars. To properly animate uiStateTransitionProgress, we keep track of whenever the mouse enters or exits a scrollbar. However, to fully support the feature, we have to keep track of that information even when the window is not key. Currently, we only track mouseMoved events when the window is key, so this needs to change to fully support uiStateTransitionProgress. This bug has already been fixed in WebKit 2 (see https://bugs.webkit.org/show_bug.cgi?id=72400 ), so this report is about fixing it for WebKit 1.

&lt;rdar://problem/10498816&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532632</commentid>
    <comment_count>1</comment_count>
      <attachid>121756</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-09 16:30:16 -0800</bug_when>
    <thetext>Created attachment 121756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533029</commentid>
    <comment_count>2</comment_count>
      <attachid>121756</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-01-10 06:53:36 -0800</bug_when>
    <thetext>Comment on attachment 121756
Patch 

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

I have a few comments, but I&apos;m going to let someone who&apos;s more knowledgeable about WebHTMLView give the official r+.

&gt; Source/WebCore/ChangeLog:5
&gt; +        WebKit 1: Scrollbar uiStateTransitionProgress requires tracking the mouse all the 
&gt; +        time

Is there a way to title this bug in terms of the incorrect behavior that users will see without this patch?

&gt; Source/WebCore/page/EventHandler.h:199
&gt; +    void mouseMoved(NSEvent *, bool onlyUpdateScrollbars = false);

Optional boolean parameters make me sad. They make refactoring (e.g., adding a new required argument before the optional boolean) hard, because so many types can be implicitly converted to bool. Would it cause lots of code churn to make the boolean non-optional?

Alternatively, perhaps it would be more appropriate to have a different public member function to handle this case. The fact that we update scrollbars via a fake mouseMoved event seems like an implementation detail.

&gt; Source/WebKit/mac/ChangeLog:12
&gt; +        Opt into a more-efficient code path when we know that only scrollbar updates will 
&gt; +        have any effect. 

This is confusingly worded. I think you mean &quot;…when we know that mouse movements won&apos;t affect anything other than scrollbars&quot;, or something like that.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:1609
&gt; +        // Lion when legacy scrollbars are enabled, WebKit receives mouse events all the time. If it is one

&quot;Lion&quot; should probably be &quot;Lion and newer&quot;.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3374
&gt; +    NSArray *trackingAreas = [self trackingAreas];
&gt; +    NSUInteger count = [trackingAreas count];
&gt; +    ASSERT(count &lt;= 1);
&gt; +
&gt; +    // Remove any tracking areas. These are only currently used to track legacy scrollbars
&gt; +    // when the window is not key.
&gt; +    for (NSUInteger i = 0; i &lt; count; ++i)
&gt; +        [self removeTrackingArea:[trackingAreas objectAtIndex:i]];

Maybe it would be simpler to store the tracking area in an ivar so that we can remove it directly, rather than removing all tracking areas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533469</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-10 16:30:17 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 121756 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121756&amp;action=review
&gt; 
&gt; I have a few comments, but I&apos;m going to let someone who&apos;s more knowledgeable about WebHTMLView give the official r+.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; +        WebKit 1: Scrollbar uiStateTransitionProgress requires tracking the mouse all the 
&gt; &gt; +        time
&gt; 
&gt; Is there a way to title this bug in terms of the incorrect behavior that users will see without this patch?
&gt; 

Not at this time, unfortunately.

&gt; &gt; Source/WebCore/page/EventHandler.h:199
&gt; &gt; +    void mouseMoved(NSEvent *, bool onlyUpdateScrollbars = false);
&gt; 
&gt; Optional boolean parameters make me sad. They make refactoring (e.g., adding a new required argument before the optional boolean) hard, because so many types can be implicitly converted to bool. Would it cause lots of code churn to make the boolean non-optional?
&gt; 

It actually doesn&apos;t seem like it would be a huge amount of churn to make the parameter non-optional, so I will post a new patch to do just that.

&gt; Alternatively, perhaps it would be more appropriate to have a different public member function to handle this case. The fact that we update scrollbars via a fake mouseMoved event seems like an implementation detail.
&gt; 

That is true. I feel like we considered a different function entirely when I first added the parameter to the platform-independent mouseMoved(), but I can&apos;t remember why we decided not to do it that way. 

&gt; &gt; Source/WebKit/mac/ChangeLog:12
&gt; &gt; +        Opt into a more-efficient code path when we know that only scrollbar updates will 
&gt; &gt; +        have any effect. 
&gt; 
&gt; This is confusingly worded. I think you mean &quot;…when we know that mouse movements won&apos;t affect anything other than scrollbars&quot;, or something like that.
&gt; 

Will fix.

&gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:1609
&gt; &gt; +        // Lion when legacy scrollbars are enabled, WebKit receives mouse events all the time. If it is one
&gt; 
&gt; &quot;Lion&quot; should probably be &quot;Lion and newer&quot;.
&gt; 

Good point, will fix.

&gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3374
&gt; &gt; +    NSArray *trackingAreas = [self trackingAreas];
&gt; &gt; +    NSUInteger count = [trackingAreas count];
&gt; &gt; +    ASSERT(count &lt;= 1);
&gt; &gt; +
&gt; &gt; +    // Remove any tracking areas. These are only currently used to track legacy scrollbars
&gt; &gt; +    // when the window is not key.
&gt; &gt; +    for (NSUInteger i = 0; i &lt; count; ++i)
&gt; &gt; +        [self removeTrackingArea:[trackingAreas objectAtIndex:i]];
&gt; 
&gt; Maybe it would be simpler to store the tracking area in an ivar so that we can remove it directly, rather than removing all tracking areas?

That seems like a good idea as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534220</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-11 13:42:27 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/page/EventHandler.h:199
&gt; &gt; &gt; +    void mouseMoved(NSEvent *, bool onlyUpdateScrollbars = false);
&gt; &gt; 
&gt; &gt; Optional boolean parameters make me sad. They make refactoring (e.g., adding a new required argument before the optional boolean) hard, because so many types can be implicitly converted to bool. Would it cause lots of code churn to make the boolean non-optional?
&gt; &gt; 
&gt; 
&gt; It actually doesn&apos;t seem like it would be a huge amount of churn to make the parameter non-optional, so I will post a new patch to do just that.
&gt; 
&gt; &gt; Alternatively, perhaps it would be more appropriate to have a different public member function to handle this case. The fact that we update scrollbars via a fake mouseMoved event seems like an implementation detail.
&gt; &gt; 

I&apos;ve come all the way around, and I now think that it&apos;s more appropriate to have a different public member function. There isn&apos;t a huge quantity of churn to make the parameter non-optional, but adding it just makes so little sense in the places where it needs to be added that it really highlights the need for a separate function entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534303</commentid>
    <comment_count>5</comment_count>
      <attachid>122104</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-11 15:07:14 -0800</bug_when>
    <thetext>Created attachment 122104
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534314</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-11 15:14:06 -0800</bug_when>
    <thetext>Attachment 122104 did not pass style-queue:

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

Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1211:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 9 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>534333</commentid>
    <comment_count>7</comment_count>
      <attachid>122104</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-11 15:27:33 -0800</bug_when>
    <thetext>Comment on attachment 122104
New patch

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

r=me, but I think there are some things that need to be improved after check-in, if not before

&gt; Source/WebCore/page/EventHandler.cpp:1585
&gt; +    HitTestResult hoveredNode = HitTestResult(LayoutPoint());

There’s no reason to include the part after the equal sign. The default constructor does the same thing.

&gt; Source/WebCore/page/EventHandler.cpp:1586
&gt; +    return handleMouseMoveEvent(event, &amp;hoveredNode, true);

A boolean is not good when you are passing a constant value. This kind of situation leads us to use enums or refactor so function can be separate.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1211
&gt; +            if (performFullHitTest)
&gt; +                return frame-&gt;eventHandler()-&gt;mouseMoved(platformMouseEvent);
&gt; +            else
&gt; +                return frame-&gt;eventHandler()-&gt;passMouseMovedEventToScrollbars(platformMouseEvent);

We normally don’t do else after return.

The name “perform full hit test” doesn’t seem to express the entire difference here between “pass event to everything” and “pass event to scrollbars”.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:1553
&gt; +static bool mouseButtonIsPressedForEvent(NSEvent *event)

I think this is not quite the right name. After all, the mouse button is not pressed for a mouse up event. It’s more that this event is “part of a click or drag”. Sorry, I don’t have a great name to suggest.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:1617
&gt; +            // If it is one of those cases where the page is not active and the mouse is not pressed, then we can
&gt; +            // fire a more efficient scrollbars-only version of the event.

The issue is not just one of efficiency, so I think the comment is misleading in this regard.

There are things we do not want to do when the mouse passes over the window and it’s not frontmost. For example, we don’t want to dispatch DOM events.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3415
&gt; +        // Legacy style scrollbars have design details that rely on tracking the mouse all the time.
&gt; +        // It&apos;s easiest to do this with a tracking area, which we will remove when the window is key
&gt; +        // again.
&gt; +        _private-&gt;trackingAreaForNonKeyWindow = [[NSTrackingArea alloc] initWithRect:[self frame]
&gt; +                                                                    options:NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways
&gt; +                                                                      owner:self
&gt; +                                                                   userInfo:nil];

I believe [self frame] is wrong for the rectangle. I think we want [self bounds], based on the documentation in NSTrackingArea. The code says that the rectangle is in the view’s coordinate system, and bounds is the rectangle of a view in its own coordinate system.

Better not to try to line the colons up. I am guessing that Xcode tried to do this automatically.

Why add the tracking area only when non-key, and keep creating and destroying it each time? Does the tracking area do any harm when the window is key?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534378</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-11 16:21:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 122104 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122104&amp;action=review
&gt; 
&gt; r=me, but I think there are some things that need to be improved after check-in, if not before
&gt; 

Thank you!

&gt; &gt; Source/WebCore/page/EventHandler.cpp:1585
&gt; &gt; +    HitTestResult hoveredNode = HitTestResult(LayoutPoint());
&gt; 
&gt; There’s no reason to include the part after the equal sign. The default constructor does the same thing.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:1586
&gt; &gt; +    return handleMouseMoveEvent(event, &amp;hoveredNode, true);
&gt; 
&gt; A boolean is not good when you are passing a constant value. This kind of situation leads us to use enums or refactor so function can be separate.
&gt; 

I&apos;m not sure which is better -- an enum or a separate function. I&apos;m leaning toward an enum because there really would be a lot of duplicated lines of code if it was totally separate. I will try to think of a good enum name.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1211
&gt; &gt; +            if (performFullHitTest)
&gt; &gt; +                return frame-&gt;eventHandler()-&gt;mouseMoved(platformMouseEvent);
&gt; &gt; +            else
&gt; &gt; +                return frame-&gt;eventHandler()-&gt;passMouseMovedEventToScrollbars(platformMouseEvent);
&gt; 
&gt; We normally don’t do else after return.
&gt; 

Ah, good catch. Style bot didn&apos;t like that either. Fixed.

&gt; The name “perform full hit test” doesn’t seem to express the entire difference here between “pass event to everything” and “pass event to scrollbars”.
&gt; 

True. I switched it back to the old variable name which tracked the opposite state -- onlyUpdateScrollbars.

&gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:1553
&gt; &gt; +static bool mouseButtonIsPressedForEvent(NSEvent *event)
&gt; 
&gt; I think this is not quite the right name. After all, the mouse button is not pressed for a mouse up event. It’s more that this event is “part of a click or drag”. Sorry, I don’t have a great name to suggest.
&gt; 

I changed it to mouseEventIsPartOfClickOrDrag() which is a bit clunky, but at least more accurate.

&gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:1617
&gt; &gt; +            // If it is one of those cases where the page is not active and the mouse is not pressed, then we can
&gt; &gt; +            // fire a more efficient scrollbars-only version of the event.
&gt; 
&gt; The issue is not just one of efficiency, so I think the comment is misleading in this regard.
&gt; 
&gt; There are things we do not want to do when the mouse passes over the window and it’s not frontmost. For example, we don’t want to dispatch DOM events.
&gt; 

Good point. I improved the comment.

&gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:3415
&gt; &gt; +        // Legacy style scrollbars have design details that rely on tracking the mouse all the time.
&gt; &gt; +        // It&apos;s easiest to do this with a tracking area, which we will remove when the window is key
&gt; &gt; +        // again.
&gt; &gt; +        _private-&gt;trackingAreaForNonKeyWindow = [[NSTrackingArea alloc] initWithRect:[self frame]
&gt; &gt; +                                                                    options:NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways
&gt; &gt; +                                                                      owner:self
&gt; &gt; +                                                                   userInfo:nil];
&gt; 
&gt; I believe [self frame] is wrong for the rectangle. I think we want [self bounds], based on the documentation in NSTrackingArea. The code says that the rectangle is in the view’s coordinate system, and bounds is the rectangle of a view in its own coordinate system.
&gt; 

Fixed.

&gt; Better not to try to line the colons up. I am guessing that Xcode tried to do this automatically.
&gt; 

Fixed.

&gt; Why add the tracking area only when non-key, and keep creating and destroying it each time? Does the tracking area do any harm when the window is key?

I am concerned about getting multiple messages from AppKit through both the tracking area and our mouse moved observers. I don&apos;t know for sure that AppKit would make that mistake of sending us the message through both mechanisms, but I also don&apos;t know a good way to test it since it is so tricky to debug event code. Let me know if you have any good ideas for testing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534437</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-11 17:19:51 -0800</bug_when>
    <thetext>Darin and I discussed this in person and decided that handleMouseMoveEvent() should be refactored in a future patch so that it doesn&apos;t have the onlyUpdateScrollbars parameter at all. All of that work should be moved to the new passMouseMovedEventToScrollbars().

This patch is committed with http://trac.webkit.org/changeset/104773</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121756</attachid>
            <date>2012-01-09 16:30:16 -0800</date>
            <delta_ts>2012-01-11 15:07:14 -0800</delta_ts>
            <desc>Patch </desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>8477</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDUwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAxLTA5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzU5MDQKKyAgICAgICAgV2ViS2l0IDE6IFNjcm9sbGJhciB1aVN0
YXRlVHJhbnNpdGlvblByb2dyZXNzIHJlcXVpcmVzIHRyYWNraW5nIHRoZSBtb3VzZSBhbGwgdGhl
IAorICAgICAgICB0aW1lCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzEwNDk4ODE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZSB2ZXJzaW9uIG9mIG1vdXNlTW92ZWQoKSB0aGF0IHRha2VzIGFu
IE5TRXZlbnQgYXMgYSBwYXJhbWV0ZXIgbXVzdCBub3cgYWxzbyAKKyAgICAgICAgYWNjZXB0IGEg
Ym9vbGVhbiBwYXJhbWV0ZXIgZm9yIHNjcm9sbGJhci1vbmx5IHVwZGF0ZXMgbXVjaCBsaWtlIHRo
ZSBjcm9zcy1wbGF0Zm9ybSAKKyAgICAgICAgdmVyc2lvbiBvZiBtb3VzZU1vdmVkKCkuCisgICAg
ICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAg
ICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorCiAyMDEyLTAxLTA5ICBKb3NodWEgQmVsbCAgPGpz
YmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBUaHJvdyBleGNlcHRpb24g
aWYgSURCQ3Vyc29yLmNvbnRpbnVlKCkgY2FsbGVkIHdpdGggbG93ZXIga2V5IHRoYW4gY3VycmVu
dApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEwNDQ2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAg
X19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzdfTlNSZWN0UDhOUwogX19aTjdXZWJDb3JlMTF3
cml0ZVRvRmlsZUVpUEtjaQogX19aTjdXZWJDb3JlMTJDaHJvbWVDbGllbnQyM3BhaW50Q3VzdG9t
T3ZlcmhhbmdBcmVhRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RVM1X1M1Xwog
X19aTjdXZWJDb3JlMTJFZGl0aW5nU3R5bGVEMUV2Ci1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjEwbW91c2VNb3ZlZEVQN05TRXZlbnQKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTBtb3Vz
ZU1vdmVkRVA3TlNFdmVudGIKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTBtb3VzZU1vdmVk
RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFYgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIx
MHdoZWVsRXZlbnRFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjEybW91c2VE
cmFnZ2VkRVA3TlNFdmVudApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZp
c2lvbiAxMDQ0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgIHZvaWQgbW91c2VEb3du
KE5TRXZlbnQgKik7CiAgICAgdm9pZCBtb3VzZURyYWdnZWQoTlNFdmVudCAqKTsKICAgICB2b2lk
IG1vdXNlVXAoTlNFdmVudCAqKTsKLSAgICB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCAqKTsKKyAg
ICB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCAqLCBib29sIG9ubHlVcGRhdGVTY3JvbGxiYXJzID0g
ZmFsc2UpOwogICAgIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsKICAgICBib29sIHdoZWVsRXZl
bnQoTlNFdmVudCAqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQkocmV2aXNpb24gMTA0NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsNyArNTgwLDcgQEAgdm9p
ZCBFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJXaQogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZlbnQg
KmV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoTlNFdmVudCAqZXZlbnQsIGJv
b2wgb25seVVwZGF0ZVNjcm9sbGJhcnMpCiB7CiAgICAgLy8gUmVqZWN0IGEgbW91c2UgbW92ZWQg
aWYgdGhlIGJ1dHRvbiBpcyBkb3duIC0gc2NyZXdzIHVwIHRyYWNraW5nIGR1cmluZyBhdXRvc2Ny
b2xsCiAgICAgLy8gVGhlc2UgaGFwcGVuIGJlY2F1c2UgV2ViS2l0IHNvbWV0aW1lcyBoYXMgdG8g
ZmFrZSB1cCBtb3ZlZCBldmVudHMuCkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6Om1vdXNlTW92ZWQoTlNFdmVudCAqZQogICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCk7Ci0gICAgbW91c2VN
b3ZlZChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkpOworICAgIG1vdXNlTW92ZWQoY3VycmVu
dFBsYXRmb3JtTW91c2VFdmVudCgpLCBvbmx5VXBkYXRlU2Nyb2xsYmFycyk7CiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
MTA0NTA2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTItMDEtMDkgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkw
NAorICAgICAgICBXZWJLaXQgMTogU2Nyb2xsYmFyIHVpU3RhdGVUcmFuc2l0aW9uUHJvZ3Jlc3Mg
cmVxdWlyZXMgdHJhY2tpbmcgdGhlIG1vdXNlIGFsbCB0aGUgCisgICAgICAgIHRpbWUKKyAgICAg
ICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA0OTg4MTY+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3B0IGlu
dG8gYSBtb3JlLWVmZmljaWVudCBjb2RlIHBhdGggd2hlbiB3ZSBrbm93IHRoYXQgb25seSBzY3Jv
bGxiYXIgdXBkYXRlcyB3aWxsIAorICAgICAgICBoYXZlIGFueSBlZmZlY3QuIAorICAgICAgICAq
IFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChtb3VzZUJ1dHRvbklzUHJlc3NlZEZv
ckV2ZW50KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVu
dDpdKToKKworICAgICAgICBNYWtlIHN1cmUgbm90IHRvIHJlbW92ZSB0aGUgbW91c2Ugb2JzZXJ2
ZXIgd2hlbiB0aGVyZSBhcmUgbGVnYWN5IHNjcm9sbGJhcnMuCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IHJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcl0pOgorCisgICAgICAgIFNldCB1cCBhIHRyYWNr
aW5nIGFyZWEgd2hlbiB0aGUgd2luZG93IGlzIG5vdCBrZXkgdG8gZW5zdXJlIHRoYXQgdGhlIFdl
YlZpZXcgZ2V0cyAKKyAgICAgICAgdGhlIHJlbGV2YW50IGV2ZW50cy4gUmVtb3ZlIGl0IHdoZW4g
dGhlIHdpbmRvdyBpcyBrZXkgYWdhaW4gc28gdGhhdCB3ZSByZWx5IG9uIHRoZSAKKyAgICAgICAg
ZXhpc3RpbmcgbWVjaGFuaXNtLgorICAgICAgICAoLVtXZWJIVE1MVmlldyB3aW5kb3dEaWRCZWNv
bWVLZXk6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHdpbmRvd0RpZFJlc2lnbktleTpdKToK
KwogMjAxMi0wMS0wNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNaXRpZ2F0ZSBzY3JvbGxiYXIgZGlmZmVyZW5jZXMgd2hlbiBydW5uaW5nIHBpeGVs
IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJl
dmlzaW9uIDEwNDQ2MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE1NDUsNiArMTU0NSwyNCBAQCAtIChOU1N0cmluZyAqKXZp
ZXc6KE5TVmlldyAqKXZpZXcgc3RyaW5nCiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPnRvb2xUaXAg
Y29weV0gYXV0b3JlbGVhc2VdOwogfQogCitzdGF0aWMgYm9vbCBtb3VzZUJ1dHRvbklzUHJlc3Nl
ZEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7
CisgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3duOgorICAgICAgICBjYXNlIE5TTGVmdE1vdXNl
VXA6CisgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgorICAgICAgICBjYXNlIE5TUmln
aHRNb3VzZURvd246CisgICAgICAgIGNhc2UgTlNSaWdodE1vdXNlVXA6CisgICAgICAgIGNhc2Ug
TlNSaWdodE1vdXNlRHJhZ2dlZDoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgorICAg
ICAgICBjYXNlIE5TT3RoZXJNb3VzZVVwOgorICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURyYWdn
ZWQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIC0gKHZvaWQpX3VwZGF0ZU1vdXNlb3Zlcldp
dGhFdmVudDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgaWYgKF9wcml2YXRlLT5jbG9zZWQpCkBA
IC0xNTg2LDggKzE2MDQsMTQgQEAgLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihO
U0V2ZQogICAgIGxhc3RIaXRWaWV3ID0gdmlldzsKIAogICAgIGlmICh2aWV3KSB7CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBmdWxsLCBub3JtYWwgaGl0IHRlc3QgZHVyaW5nIHRoaXMgbW91
c2UgZXZlbnQgaWYgdGhlIHBhZ2UgaXMgYWN0aXZlIG9yIGlmIGEgbW91c2UKKyAgICAgICAgLy8g
YnV0dG9uIGlzIGN1cnJlbnRseSBwcmVzc2VkLiBJdCBpcyBwb3NzaWJsZSB0aGF0IG5laXRoZXIg
b2YgdGhvc2UgdGhpbmdzIHdpbGwgYmUgdHJ1ZSBzaW5jZSBvbgorICAgICAgICAvLyBMaW9uIHdo
ZW4gbGVnYWN5IHNjcm9sbGJhcnMgYXJlIGVuYWJsZWQsIFdlYktpdCByZWNlaXZlcyBtb3VzZSBl
dmVudHMgYWxsIHRoZSB0aW1lLiBJZiBpdCBpcyBvbmUKKyAgICAgICAgLy8gb2YgdGhvc2UgY2Fz
ZXMgd2hlcmUgdGhlIHBhZ2UgaXMgbm90IGFjdGl2ZSBhbmQgdGhlIG1vdXNlIGlzIG5vdCBwcmVz
c2VkLCB0aGVuIHdlIGNhbiBmaXJlIGEgbW9yZQorICAgICAgICAvLyBlZmZpY2llbnQgc2Nyb2xs
YmFycy1vbmx5IHZlcnNpb24gb2YgdGhlIGV2ZW50LgorICAgICAgICBib29sIG9ubHlVcGRhdGVT
Y3JvbGxiYXJzID0gIShbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gfHwgbW91c2VCdXR0b25J
c1ByZXNzZWRGb3JFdmVudChldmVudCkpOwogICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3ZpZXcgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPm1vdXNlTW92ZWQoZXZlbnQsIG9ubHlVcGRhdGVTY3JvbGxiYXJzKTsKIAogICAgICAg
ICBbdmlldyByZWxlYXNlXTsKICAgICB9CkBAIC0yODAwLDYgKzI4MjQsMTIgQEAgLSAodm9pZCly
ZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXIKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKKyNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgLy8gTGVnYWN5IHNjcm9sbGJh
cnMgcmVxdWlyZSB0cmFja2luZyB0aGUgbW91c2UgYXQgYWxsIHRpbWVzLgorICAgIGlmIChXS1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeSkKKyAgICAg
ICAgcmV0dXJuOworI2VuZGlmCisKICAgICBbW3NlbGYgX3dlYlZpZXddIF9tb3VzZURpZE1vdmVP
dmVyRWxlbWVudDpuaWwgbW9kaWZpZXJGbGFnczowXTsKICAgICBbc2VsZiBfcmVtb3ZlTW91c2VN
b3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKIH0KQEAgLTMzMzMsNiArMzM2MywxNyBAQCAt
ICh2b2lkKXdpbmRvd0RpZEJlY29tZUtleTooTlNOb3RpZmljYXRpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgTlNB
cnJheSAqdHJhY2tpbmdBcmVhcyA9IFtzZWxmIHRyYWNraW5nQXJlYXNdOworICAgIE5TVUludGVn
ZXIgY291bnQgPSBbdHJhY2tpbmdBcmVhcyBjb3VudF07CisgICAgQVNTRVJUKGNvdW50IDw9IDEp
OworCisgICAgLy8gUmVtb3ZlIGFueSB0cmFja2luZyBhcmVhcy4gVGhlc2UgYXJlIG9ubHkgY3Vy
cmVudGx5IHVzZWQgdG8gdHJhY2sgbGVnYWN5IHNjcm9sbGJhcnMKKyAgICAvLyB3aGVuIHRoZSB3
aW5kb3cgaXMgbm90IGtleS4KKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICBbc2VsZiByZW1vdmVUcmFja2luZ0FyZWE6W3RyYWNraW5nQXJlYXMgb2Jq
ZWN0QXRJbmRleDppXV07CisjZW5kaWYKKwogICAgIE5TV2luZG93ICprZXlXaW5kb3cgPSBbbm90
aWZpY2F0aW9uIG9iamVjdF07CiAKICAgICBpZiAoa2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10p
IHsKQEAgLTMzNTcsNiArMzM5OCwyMCBAQCAtICh2b2lkKXdpbmRvd0RpZFJlc2lnbktleTooTlNO
b3RpZmljYXRpCiAgICAgICAgIFtzZWxmIF91cGRhdGVTZWN1cmVJbnB1dFN0YXRlXTsKICAgICAg
ICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8g
bW92ZUxlZnQ6Tk9dOwogICAgIH0KKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKKyAgICBpZiAoV0tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVy
U3R5bGVMZWdhY3kpIHsKKyAgICAgICAgLy8gTGVnYWN5IHN0eWxlIHNjcm9sbGJhcnMgaGF2ZSBk
ZXNpZ24gZGV0YWlscyB0aGF0IHJlbHkgb24gdHJhY2tpbmcgdGhlIG1vdXNlIGFsbCB0aGUgdGlt
ZS4KKyAgICAgICAgLy8gSXQncyBlYXNpZXN0IHRvIGRvIHRoaXMgd2l0aCBhIHRyYWNraW5nIGFy
ZWEsIHdoaWNoIHdlIHdpbGwgcmVtb3ZlIHdoZW4gdGhlIHdpbmRvdyBpcyBrZXkKKyAgICAgICAg
Ly8gYWdhaW4uCisgICAgICAgIE5TVHJhY2tpbmdBcmVhICp0cmFja2luZ0FyZWEgPSBbW05TVHJh
Y2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJlY3Q6W3NlbGYgZnJhbWVdCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnM6TlNUcmFja2luZ01vdXNlTW92ZWQgfCBOU1RyYWNraW5nTW91c2VFbnRlcmVkQW5kRXhp
dGVkIHwgTlNUcmFja2luZ0luVmlzaWJsZVJlY3QgfCBOU1RyYWNraW5nQWN0aXZlQWx3YXlzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3duZXI6c2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgICAgICAg
IFtzZWxmIGFkZFRyYWNraW5nQXJlYTp0cmFja2luZ0FyZWFdOworICAgICAgICBbdHJhY2tpbmdB
cmVhIHJlbGVhc2VdOworICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKXdpbmRvd1dpbGxPcmRl
ck9uU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122104</attachid>
            <date>2012-01-11 15:07:14 -0800</date>
            <delta_ts>2012-01-11 15:27:33 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>16294</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDc0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAxLTExICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzU5MDQKKyAgICAgICAgV2ViS2l0IDE6IFNjcm9sbGJhciB1aVN0
YXRlVHJhbnNpdGlvblByb2dyZXNzIHJlcXVpcmVzIHRyYWNraW5nIHRoZSBtb3VzZSBhbGwgCisg
ICAgICAgIHRoZSB0aW1lCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzEwNDk4ODE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZ2V0cyByaWQgb2YgdGhlIG9wdGlvbmFsIHBhcmFt
ZXRlciBjYWxsZWQgb25seVVwZGF0ZVNjcm9sbGJhcnMgZm9yIAorICAgICAgICBtb3VzZU1vdmVk
KCkgYW5kIGluc3RlYWQgbW92ZXMgdGhhdCBmdW5jdGlvbmFsaXR5IGludG8gaXRzIG93biBmdW5j
dGlvbiAKKyAgICAgICAgY2FsbGVkIHBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoKS4K
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxiYXJz
KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01v
dXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyk6CisKIDIwMTItMDEtMTEgIEFkYW0gVHJlYXQgIDxh
dHJlYXRAcmltLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwODgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMDQ2NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjI1
LDcgKzIyNSw3IEBAIF9fWk43V2ViQ29yZTExd3JpdGVUb0ZpbGVFaVBLY2kKIF9fWk43V2ViQ29y
ZTEyQ2hyb21lQ2xpZW50MjNwYWludEN1c3RvbU92ZXJoYW5nQXJlYUVQTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU183SW50UmVjdEVTNV9TNV8KIF9fWk43V2ViQ29yZTEyRWRpdGluZ1N0eWxlRDFF
dgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxMG1vdXNlTW92ZWRFUDdOU0V2ZW50Ci1fX1pO
N1dlYkNvcmUxMkV2ZW50SGFuZGxlcjEwbW91c2VNb3ZlZEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2
ZW50RWIKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTBtb3VzZU1vdmVkRVJLTlNfMThQbGF0
Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjEwd2hlZWxFdmVudEVQ
N05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTJtb3VzZURyYWdnZWRFUDdOU0V2
ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0Y3VycmVudE5TRXZlbnRFdgpAQCAtMjM3
LDYgKzIzNyw4IEBAIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWwKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBs
YXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3Vz
ZVJlbGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIyNGxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9sbExvZ2ljYWxE
aXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCitfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjMxcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFyc0VQN05TRXZlbnQK
K19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMzFwYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxi
YXJzRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjdtb3VzZVVwRVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXI4a2V5RXZlbnRF
UDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjhrZXlFdmVudEVSS05TXzIxUGxh
dGZvcm1LZXlib2FyZEV2ZW50RQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAkocmV2aXNpb24gMTA0NjQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU3LDEzICsxNTU3LDEwIEBAIHN0YXRpYyBSZW5kZXJM
YXllciogbGF5ZXJGb3JOb2RlKE5vZGUqIG4KICAgICByZXR1cm4gbGF5ZXI7CiB9CiAKLWJvb2wg
RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQs
IGJvb2wgb25seVVwZGF0ZVNjcm9sbGJhcnMpCitib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3Zl
ZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIEhpdFRlc3RSZXN1bHQg
aG92ZXJlZE5vZGUgPSBIaXRUZXN0UmVzdWx0KExheW91dFBvaW50KCkpOwotICAgIGJvb2wgcmVz
dWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVkTm9kZSwgb25seVVwZGF0
ZVNjcm9sbGJhcnMpOwotCi0gICAgaWYgKG9ubHlVcGRhdGVTY3JvbGxiYXJzKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZl
bnQsICZob3ZlcmVkTm9kZSk7CiAKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwog
ICAgIGlmICghcGFnZSkKQEAgLTE1ODMsNiArMTU4MCwxMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6
bW91c2VNb3ZlZChjb25zdCBQbGF0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBIaXRUZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0
VGVzdFJlc3VsdChMYXlvdXRQb2ludCgpKTsKKyAgICByZXR1cm4gaGFuZGxlTW91c2VNb3ZlRXZl
bnQoZXZlbnQsICZob3ZlcmVkTm9kZSwgdHJ1ZSk7Cit9CisKIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQs
IEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlLCBib29sIG9ubHlVcGRhdGVTY3JvbGxiYXJzKQog
ewogICAgIC8vIGluIFJhZGFyIDM3MDM3Njggd2Ugc2F3IGZyZXF1ZW50IGNyYXNoZXMgYXBwYXJl
bnRseSBkdWUgdG8gdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlz
aW9uIDEwNDY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0OCw3ICsxNDgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB0YWJzVG9MaW5r
cyhLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgYm9vbCB0YWJzVG9BbGxGb3JtQ29udHJvbHMo
S2V5Ym9hcmRFdmVudCopIGNvbnN0OwogCi0gICAgYm9vbCBtb3VzZU1vdmVkKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYsIGJvb2wgb25seVVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZSk7CisgICAg
Ym9vbCBtb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIGJvb2wgcGFz
c01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsK
IAogICAgIHZvaWQgbG9zdE1vdXNlQ2FwdHVyZSgpOwogCkBAIC0yMDAsNiArMjAxLDggQEAgcHVi
bGljOgogICAgIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsKICAgICBib29sIHdoZWVsRXZlbnQo
TlNFdmVudCAqKTsKIAorICAgIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhO
U0V2ZW50ICopOworCiAgICAgdm9pZCBzZW5kRmFrZUV2ZW50c0FmdGVyV2lkZ2V0VHJhY2tpbmco
TlNFdmVudCAqaW5pdGlhdGluZ0V2ZW50KTsKIAogICAgIHZvaWQgc2V0QWN0aXZhdGlvbkV2ZW50
TnVtYmVyKGludCBudW0pIHsgbV9hY3RpdmF0aW9uRXZlbnROdW1iZXIgPSBudW07IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDEw
NDY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5MywxOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VN
b3ZlZChOU0V2ZW50ICplCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAordm9p
ZCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoTlNFdmVudCAq
ZXZlbnQpCit7CisgICAgLy8gUmVqZWN0IGEgbW91c2UgbW92ZWQgaWYgdGhlIGJ1dHRvbiBpcyBk
b3duIC0gc2NyZXdzIHVwIHRyYWNraW5nIGR1cmluZyBhdXRvc2Nyb2xsCisgICAgLy8gVGhlc2Ug
aGFwcGVuIGJlY2F1c2UgV2ViS2l0IHNvbWV0aW1lcyBoYXMgdG8gZmFrZSB1cCBtb3ZlZCBldmVu
dHMuCisgICAgaWYgKCFtX2ZyYW1lLT52aWV3KCkgfHwgbV9tb3VzZVByZXNzZWQgfHwgbV9zZW5k
aW5nRXZlbnRUb1N1YnZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCk7CisgICAg
cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50
KCkpOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKIHN0YXRpYyBib29sIGZy
YW1lSGFzUGxhdGZvcm1XaWRnZXQoRnJhbWUqIGZyYW1lKQogewogICAgIGlmIChGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEw
NDc0OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIxIEBACisyMDEyLTAxLTExICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5MDQKKyAg
ICAgICAgV2ViS2l0IDE6IFNjcm9sbGJhciB1aVN0YXRlVHJhbnNpdGlvblByb2dyZXNzIHJlcXVp
cmVzIHRyYWNraW5nIHRoZSBtb3VzZSBhbGwgCisgICAgICAgIHRoZSB0aW1lCisgICAgICAgIC1h
bmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNDk4ODE2PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Z2V0cyByaWQgb2YgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciBjYWxsZWQgb25seVVwZGF0ZVNjcm9s
bGJhcnMgZm9yIAorICAgICAgICBXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoKSBh
bmQgaW5zdGVhZCBtb3ZlcyB0aGF0IGZ1bmN0aW9uYWxpdHkgaW50byAKKyAgICAgICAgaXRzIG93
biBmdW5jdGlvbiBjYWxsZWQgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycygpLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Om1vdXNlRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjptb3VzZUV2ZW50U3luY0ZvclRlc3RpbmcpOgor
CiAyMDEyLTAxLTExICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBXaW5DYWlybyBidWlsZCBjb3JyZWN0aW9uLgpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTA0NjQ5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgzLDcgKzExODMsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50
KGNvbnN0CiAgICAgcmV0dXJuIGhhbmRsZWQ7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZU1vdXNl
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCwgUGFnZSogcGFnZSwgYm9vbCBv
bmx5VXBkYXRlU2Nyb2xsYmFycykKK3N0YXRpYyBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYgbW91c2VFdmVudCwgUGFnZSogcGFnZSwgYm9vbCBwZXJmb3JtRnVsbEhp
dFRlc3QpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZS0+dmlldygpKQpAQCAtMTIwNSw3ICsxMjA1LDEwIEBAIHN0YXRpYyBib29sIGhhbmRs
ZU1vdXNlRXZlbnQoY29uc3QgV2ViTW8KICAgICAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3Vz
ZVJlbGVhc2VkOgogICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKICAgICAgICAgY2FzZSBQ
bGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOgotICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+bW91c2VNb3ZlZChwbGF0Zm9ybU1vdXNlRXZlbnQsIG9ubHlVcGRhdGVTY3Jv
bGxiYXJzKTsKKyAgICAgICAgICAgIGlmIChwZXJmb3JtRnVsbEhpdFRlc3QpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChwbGF0Zm9ybU1v
dXNlRXZlbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMocGxhdGZv
cm1Nb3VzZUV2ZW50KTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIzNSw4ICsxMjM4LDgg
QEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRQogICAgICAgICAvLyBM
aW9uIHdoZW4gbGVnYWN5IHNjcm9sbGJhcnMgYXJlIGVuYWJsZWQsIFdlYktpdCByZWNlaXZlcyBt
b3VzZSBldmVudHMgYWxsIHRoZSB0aW1lLiBJZiBpdCBpcyBvbmUgCiAgICAgICAgIC8vIG9mIHRo
b3NlIGNhc2VzIHdoZXJlIHRoZSBwYWdlIGlzIG5vdCBhY3RpdmUgYW5kIHRoZSBtb3VzZSBpcyBu
b3QgcHJlc3NlZCwgdGhlbiB3ZSBjYW4gZmlyZSBhIG1vcmUKICAgICAgICAgLy8gZWZmaWNpZW50
IHNjcm9sbGJhcnMtb25seSB2ZXJzaW9uIG9mIHRoZSBldmVudC4KLSAgICAgICAgYm9vbCBvbmx5
VXBkYXRlU2Nyb2xsYmFycyA9ICEobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUo
KSB8fCAobW91c2VFdmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbikpOwot
ICAgICAgICBoYW5kbGVkID0gaGFuZGxlTW91c2VFdmVudChtb3VzZUV2ZW50LCBtX3BhZ2UuZ2V0
KCksIG9ubHlVcGRhdGVTY3JvbGxiYXJzKTsKKyAgICAgICAgYm9vbCBwZXJmb3JtRnVsbEhpdFRl
c3QgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpIHx8IChtb3VzZUV2ZW50
LmJ1dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKTsKKyAgICAgICAgaGFuZGxlZCA9
IGhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCwgbV9wYWdlLmdldCgpLCBwZXJmb3JtRnVsbEhp
dFRlc3QpOwogICAgIH0KIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVj
ZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90Pihtb3VzZUV2ZW50LnR5cGUoKSksIGhhbmRs
ZWQpKTsKQEAgLTEyNjAsOCArMTI2Myw4IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudFN5bmNG
b3JUZXN0aW5nKGMKICAgICAgICAgLy8gTGlvbiB3aGVuIGxlZ2FjeSBzY3JvbGxiYXJzIGFyZSBl
bmFibGVkLCBXZWJLaXQgcmVjZWl2ZXMgbW91c2UgZXZlbnRzIGFsbCB0aGUgdGltZS4gSWYgaXQg
aXMgb25lIAogICAgICAgICAvLyBvZiB0aG9zZSBjYXNlcyB3aGVyZSB0aGUgcGFnZSBpcyBub3Qg
YWN0aXZlIGFuZCB0aGUgbW91c2UgaXMgbm90IHByZXNzZWQsIHRoZW4gd2UgY2FuIGZpcmUgYSBt
b3JlCiAgICAgICAgIC8vIGVmZmljaWVudCBzY3JvbGxiYXJzLW9ubHkgdmVyc2lvbiBvZiB0aGUg
ZXZlbnQuCi0gICAgICAgIGJvb2wgb25seVVwZGF0ZVNjcm9sbGJhcnMgPSAhKG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCkgfHwgKG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gV2Vi
TW91c2VFdmVudDo6Tm9CdXR0b24pKTsKLSAgICAgICAgaGFuZGxlZCA9IGhhbmRsZU1vdXNlRXZl
bnQobW91c2VFdmVudCwgbV9wYWdlLmdldCgpLCBvbmx5VXBkYXRlU2Nyb2xsYmFycyk7CisgICAg
ICAgIGJvb2wgcGVyZm9ybUZ1bGxIaXRUZXN0ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
aXNBY3RpdmUoKSB8fCAobW91c2VFdmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50OjpOb0J1
dHRvbik7CisgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQsIG1f
cGFnZS5nZXQoKSwgcGVyZm9ybUZ1bGxIaXRUZXN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEwNDc0OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAxLTExICBCZXRoIERha2lu
ICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzU5MDQKKyAgICAgICAgV2ViS2l0IDE6IFNjcm9sbGJhciB1aVN0YXRl
VHJhbnNpdGlvblByb2dyZXNzIHJlcXVpcmVzIHRyYWNraW5nIHRoZSBtb3VzZSBhbGwgCisgICAg
ICAgIHRoZSB0aW1lCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzEwNDk4ODE2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5ldyBpdmFyIHRyYWNraW5nQXJlYUZvck5vbktleVdpbmRvdyBzdG9yZXMg
b3VyIE5TVHJhY2tpbmdBcmVhIHdoZW5ldmVyIHdlIAorICAgICAgICBoYXZlIG9uZS4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlld1ByaXZh
dGUgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJIVE1MVmlld1ByaXZhdGUgY2xlYXJdKToKKwor
ICAgICAgICBXaGVuIHdlIGtub3cgdGhhdCBtb3VzZSBtb3ZlbWVudHMgd29uJ3QgYWZmZWN0IGFu
eXRoaW5nIG90aGVyIHRoYW4gCisgICAgICAgIHNjcm9sbGJhcnMsIGNhbGwgb3VyIG5ldyBmdW5j
dGlvbiBwYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxiYXJzKCksIAorICAgICAgICBvdGhlcndp
c2Ugd2UnbGwgY2FsbCB0aGUgb2xkIG1vdXNlTW92ZWQoKS4KKyAgICAgICAgKG1vdXNlQnV0dG9u
SXNQcmVzc2VkRm9yRXZlbnQpOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlTW91c2Vv
dmVyV2l0aEV2ZW50Ol0pOgorCisgICAgICAgIE1ha2Ugc3VyZSBub3QgdG8gcmVtb3ZlIHRoZSBt
b3VzZSBvYnNlcnZlciB3aGVuIHRoZXJlIGFyZSBsZWdhY3kgc2Nyb2xsYmFycy4KKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyXSk6CisKKyAgICAgICAgU2V0
IHVwIGEgdHJhY2tpbmcgYXJlYSB3aGVuIHRoZSB3aW5kb3cgaXMgbm90IGtleSB0byBlbnN1cmUg
dGhhdCB0aGUgV2ViVmlldyAKKyAgICAgICAgZ2V0cyB0aGUgcmVsZXZhbnQgZXZlbnRzLiBSZW1v
dmUgaXQgd2hlbiB0aGUgd2luZG93IGlzIGtleSBhZ2FpbiBzbyB0aGF0IHdlIAorICAgICAgICBy
ZWx5IG9uIHRoZSBleGlzdGluZyBtZWNoYW5pc20uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHdp
bmRvd0RpZEJlY29tZUtleTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgd2luZG93RGlkUmVz
aWduS2V5Ol0pOgorCiAyMDEyLTAxLTEwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFkZSAtW1dlYkhpc3RvcnlJdGVtIGNvcHlXaXRoWm9uZTpdIGFsbG9jYXRl
IGFuIG9iamVjdCBvZiB0aGUgc2FtZSBjbGFzcyBhcyB0aGUgcmVjZWl2ZXIuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDEwNDY0OSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUyMSw2ICs1MjEsOCBAQCBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3UHJpdmF0ZSA6IE5TT2Jq
ZWN0CiAKICAgICBTRUwgc2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yOwogCisgICAgTlNU
cmFja2luZ0FyZWEgKnRyYWNraW5nQXJlYUZvck5vbktleVdpbmRvdzsKKwogI2lmbmRlZiBOREVC
VUcKICAgICBCT09MIGVudW1lcmF0aW5nU3Vidmlld3M7CiAjZW5kaWYKQEAgLTU4NCw2ICs1ODYs
NyBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbY29tcGxldGlvbkNvbnRyb2xsZXIgcmVsZWFzZV07
CiAgICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07CiAgICAgW2hpZ2hsaWdodGVycyByZWxlYXNlXTsK
KyAgICBbdHJhY2tpbmdBcmVhRm9yTm9uS2V5V2luZG93IHJlbGVhc2VdOwogICAgIGlmIChwcm9t
aXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKICAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CiAKQEAgLTYwOSw2ICs2MTIs
NyBAQCAtICh2b2lkKWNsZWFyCiAgICAgW2NvbXBsZXRpb25Db250cm9sbGVyIHJlbGVhc2VdOwog
ICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwogICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07Cisg
ICAgW3RyYWNraW5nQXJlYUZvck5vbktleVdpbmRvdyByZWxlYXNlXTsKICAgICBpZiAocHJvbWlz
ZWREcmFnVElGRkRhdGFTb3VyY2UpCiAgICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNl
LT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwogCkBAIC02MTksNiArNjIzLDcg
QEAgLSAodm9pZCljbGVhcgogICAgIGNvbXBsZXRpb25Db250cm9sbGVyID0gbmlsOwogICAgIGRh
dGFTb3VyY2UgPSBuaWw7CiAgICAgaGlnaGxpZ2h0ZXJzID0gbmlsOworICAgIHRyYWNraW5nQXJl
YUZvck5vbktleVdpbmRvdyA9IG5pbDsKICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9
IDA7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xNTQ1LDYgKzE1NTAs
MjQgQEAgLSAoTlNTdHJpbmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZwogICAgIHJldHVy
biBbW19wcml2YXRlLT50b29sVGlwIGNvcHldIGF1dG9yZWxlYXNlXTsKIH0KIAorc3RhdGljIGJv
b2wgbW91c2VCdXR0b25Jc1ByZXNzZWRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKK3sKKyAgICBz
d2l0Y2ggKFtldmVudCB0eXBlXSkgeworICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKKyAg
ICAgICAgY2FzZSBOU0xlZnRNb3VzZVVwOgorICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dl
ZDoKKyAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgorICAgICAgICBjYXNlIE5TUmlnaHRN
b3VzZVVwOgorICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6CisgICAgICAgIGNhc2Ug
TlNPdGhlck1vdXNlRG93bjoKKyAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAg
Y2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiAtICh2
b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIGlm
IChfcHJpdmF0ZS0+Y2xvc2VkKQpAQCAtMTU4Niw4ICsxNjA5LDE3IEBAIC0gKHZvaWQpX3VwZGF0
ZU1vdXNlb3ZlcldpdGhFdmVudDooTlNFdmUKICAgICBsYXN0SGl0VmlldyA9IHZpZXc7CiAKICAg
ICBpZiAodmlldykgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3ZpZXcg
X2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1v
dmVkKGV2ZW50KTsKKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFt2aWV3IF9m
cmFtZV0pKSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgZnVsbCwgbm9ybWFsIGhp
dCB0ZXN0IGR1cmluZyB0aGlzIG1vdXNlIGV2ZW50IGlmIHRoZSBwYWdlIGlzIGFjdGl2ZSBvciBp
ZiBhIG1vdXNlCisgICAgICAgICAgICAvLyBidXR0b24gaXMgY3VycmVudGx5IHByZXNzZWQuIEl0
IGlzIHBvc3NpYmxlIHRoYXQgbmVpdGhlciBvZiB0aG9zZSB0aGluZ3Mgd2lsbCBiZSB0cnVlIG9u
IExpb24gYW5kCisgICAgICAgICAgICAvLyBuZXdlciB3aGVuIGxlZ2FjeSBzY3JvbGxiYXJzIGFy
ZSBlbmFibGVkLCBiZWNhdXNlIHRoZW4gV2ViS2l0IHJlY2VpdmVzIG1vdXNlIGV2ZW50cyBhbGwg
dGhlIHRpbWUuIAorICAgICAgICAgICAgLy8gSWYgaXQgaXMgb25lIG9mIHRob3NlIGNhc2VzIHdo
ZXJlIHRoZSBwYWdlIGlzIG5vdCBhY3RpdmUgYW5kIHRoZSBtb3VzZSBpcyBub3QgcHJlc3NlZCwg
dGhlbiB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGZpcmUgYSBtb3JlIGVmZmljaWVudCBzY3JvbGxi
YXJzLW9ubHkgdmVyc2lvbiBvZiB0aGUgZXZlbnQuCisgICAgICAgICAgICBpZiAoW1tzZWxmIHdp
bmRvd10gaXNLZXlXaW5kb3ddIHx8IG1vdXNlQnV0dG9uSXNQcmVzc2VkRm9yRXZlbnQoZXZlbnQp
KQorICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQo
ZXZlbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoZXZlbnQpOworICAg
ICAgICB9CiAKICAgICAgICAgW3ZpZXcgcmVsZWFzZV07CiAgICAgfQpAQCAtMjgwMCw2ICsyODMy
LDEyIEBAIC0gKHZvaWQpcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyCiAgICAgICAgIHJldHVybjsK
ICNlbmRpZgogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIC8v
IExlZ2FjeSBzY3JvbGxiYXJzIHJlcXVpcmUgdHJhY2tpbmcgdGhlIG1vdXNlIGF0IGFsbCB0aW1l
cy4KKyAgICBpZiAoV0tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVyU3R5
bGVMZWdhY3kpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgW1tzZWxmIF93ZWJWaWV3
XSBfbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6bmlsIG1vZGlmaWVyRmxhZ3M6MF07CiAgICAgW3Nl
bGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07CiB9CkBAIC0zMzMz
LDYgKzMzNzEsMTQgQEAgLSAodm9pZCl3aW5kb3dEaWRCZWNvbWVLZXk6KE5TTm90aWZpY2F0aQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorICAgIGlmIChfcHJpdmF0ZS0+dHJhY2tpbmdBcmVhRm9yTm9uS2V5V2luZG93KSB7
CisgICAgICAgIFtzZWxmIHJlbW92ZVRyYWNraW5nQXJlYTpfcHJpdmF0ZS0+dHJhY2tpbmdBcmVh
Rm9yTm9uS2V5V2luZG93XTsKKyAgICAgICAgW19wcml2YXRlLT50cmFja2luZ0FyZWFGb3JOb25L
ZXlXaW5kb3cgcmVsZWFzZV07CisgICAgICAgIF9wcml2YXRlLT50cmFja2luZ0FyZWFGb3JOb25L
ZXlXaW5kb3cgPSBuaWw7CisgICAgfQorI2VuZGlmCisKICAgICBOU1dpbmRvdyAqa2V5V2luZG93
ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOwogCiAgICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3
aW5kb3ddKSB7CkBAIC0zMzU3LDYgKzM0MDMsMTkgQEAgLSAodm9pZCl3aW5kb3dEaWRSZXNpZ25L
ZXk6KE5TTm90aWZpY2F0aQogICAgICAgICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07
CiAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hh
bmdlOk5PIG1vdmVMZWZ0Ok5PXTsKICAgICB9CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCisgICAgaWYgKFdLUmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgPT0gTlNT
Y3JvbGxlclN0eWxlTGVnYWN5KSB7CisgICAgICAgIC8vIExlZ2FjeSBzdHlsZSBzY3JvbGxiYXJz
IGhhdmUgZGVzaWduIGRldGFpbHMgdGhhdCByZWx5IG9uIHRyYWNraW5nIHRoZSBtb3VzZSBhbGwg
dGhlIHRpbWUuCisgICAgICAgIC8vIEl0J3MgZWFzaWVzdCB0byBkbyB0aGlzIHdpdGggYSB0cmFj
a2luZyBhcmVhLCB3aGljaCB3ZSB3aWxsIHJlbW92ZSB3aGVuIHRoZSB3aW5kb3cgaXMga2V5Cisg
ICAgICAgIC8vIGFnYWluLgorICAgICAgICBfcHJpdmF0ZS0+dHJhY2tpbmdBcmVhRm9yTm9uS2V5
V2luZG93ID0gW1tOU1RyYWNraW5nQXJlYSBhbGxvY10gaW5pdFdpdGhSZWN0OltzZWxmIGZyYW1l
XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zOk5TVHJhY2tpbmdNb3VzZU1vdmVkIHwgTlNUcmFja2luZ01v
dXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdJblZpc2libGVSZWN0IHwgTlNUcmFja2lu
Z0FjdGl2ZUFsd2F5cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyOnNlbGYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5m
bzpuaWxdOworICAgICAgICBbc2VsZiBhZGRUcmFja2luZ0FyZWE6X3ByaXZhdGUtPnRyYWNraW5n
QXJlYUZvck5vbktleVdpbmRvd107CisgICAgfQorI2VuZGlmCiB9CiAKIC0gKHZvaWQpd2luZG93
V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCg==
</data>
<flag name="review"
          id="122810"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>