<?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>76275</bug_id>
          
          <creation_ts>2012-01-13 07:49:23 -0800</creation_ts>
          <short_desc>[Qt] [WK2] WebView should use Flickable instead of QScroller to handle positioning</short_desc>
          <delta_ts>2012-02-09 06:47:49 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77111</dependson>
    
    <dependson>77122</dependson>
          <blocked>74403</blocked>
    
    <blocked>76276</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andras Becsi">abecsi</reporter>
          <assigned_to name="Andras Becsi">abecsi</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>maheshk</cc>
    
    <cc>menard</cc>
    
    <cc>mtutunik</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>535674</commentid>
    <comment_count>0</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-13 07:49:23 -0800</bug_when>
    <thetext>The current WebView implementation uses QScroller to manage pan gestures, but other similar items in QML (ListView, GridView) all use Flickable as their base class.
Since we want the same behaviour as those items and want to drop the QWidgets dependency of QScroller (and soon QScroller is going away from Qt5) we need to change WebView and let Flickable handle the input. 
Since we do not want to depend on private API of the qtdeclarative module we cannot use inheritance, instead we have to dynamically instantiate Flickable and redirect events to the internal Flickable instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538021</commentid>
    <comment_count>1</comment_count>
      <attachid>122970</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-18 11:18:27 -0800</bug_when>
    <thetext>Created attachment 122970
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538032</commentid>
    <comment_count>2</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-18 11:35:29 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=122970) [details]
&gt; proposed patch

The API can be used the following way to place additional items on the WebView:

    WebView {
        id: webView
        experimental.page.y: 100

        experimental.flickableContent: [
            Rectangle {
                id: topItem
                height: 100
                width: webView.width
                x: webView.experimental.contentX
                color: &quot;red&quot;
                Text {
                    text: &quot;&lt;b&gt;&lt;i&gt;topItem&lt;/i&gt;&lt;/b&gt;&quot;
                    font.pointSize: 24
                    color: &quot;white&quot;
                    anchors {
                        horizontalCenter: parent.horizontalCenter
                        verticalCenter: parent.verticalCenter
                    }
                }
                anchors {
                    bottom: webView.experimental.page.top
                }
            }
        ]
        experimental.contentWidth: experimental.page.width
        experimental.contentHeight: experimental.page.height + topItem.height
...
    } //WebView

The contentItem is sized to the page by default until the user binds contentWidth and contentHeight.

I a follow-up patch I could add a search engine toolbar to MiniBrowser for example to demonstrate the usage.
The exposed Flickable API subset can of course be extended later as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538034</commentid>
    <comment_count>3</comment_count>
      <attachid>122970</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-18 11:37:21 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

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

i need to look at this in detail tomorrow

&gt; Source/WebKit2/ChangeLog:20
&gt; +        The current WebView implementation uses QScroller to manage positioning but other similar
&gt; +        items in QML (ListView, GridView) all use Flickable as their base class.
&gt; +        Since QScroller will be dropped from Qt5 this patch removes the QScroller code
&gt; +        and redirects pan gesures to a dynamically created internal Flickable instance (flickProvider)
&gt; +        which handles the positioning.
&gt; +        Since this implementation only uses public QML API it does not depend on declarative-private
&gt; +        and propagates a small subset of the Flickable API as the public API of the WebView.
&gt; +        This minimalistic API is accessible via the experimental extension and makes it possible
&gt; +        in QML to add additional items (such as toolbars, scroll indicators and floating menus)
&gt; +        aroud the page and use anchoring and binding to position them on the flickable contentItem
&gt; +        of the WebView.
&gt; +        After this change QtWebKit2 does no longer depend on QtWidgets and this dependency can be
&gt; +        removed in a follow-up patch.

Could use some shorter sentences and some newlines.. very hard to read. Also has spelling errors, like gesures

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:216
&gt; +    Q_D(const QQuickWebView);
&gt; +    ASSERT(!d-&gt;flickProvider.isNull());
&gt; +    return d-&gt;flickProvider-&gt;property(&quot;contentX&quot;).value&lt;qreal&gt;();

Seems like some template could be used here.... so much similar code!

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:269
&gt; +    component.setData(&quot;import QtQuick 2.0\nFlickable {}&quot;, QUrl());

ieck

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:957
&gt; +    return d-&gt;flickProvider-&gt;property(&quot;flickableData&quot;).value&lt; QDeclarativeListProperty&lt;QObject&gt; &gt;();

the first space is not needed

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:975
&gt; +    Q_D(QQuickWebView);
&gt; +    d-&gt;useDefaultContentWidth = false;

what is default content width? or what is this for? why would I override?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:234
&gt; +    Q_PROPERTY(QQuickItem *contentItem READ contentItem CONSTANT)

style

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:80
&gt; -        emit engine-&gt;contentResumeRequested();
&gt; -
&gt;          // Make sure that tiles all around the viewport will be requested.
&gt;          emit engine-&gt;viewportTrajectoryVectorChanged(QPointF());
&gt; +
&gt; +        emit engine-&gt;contentResumeRequested();

Please explain this change in the changelog, or as a comment here

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:353
&gt; +    if (cssScale == boundedCSSScale) {
&gt; +        // Let the flickable move the content back into valid boundaries if the scale is valid.

That could be explained better.

// Our current scale value is valid, and we thus let the flickable enforce a valid position.

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:354
&gt; +        m_viewport-&gt;returnToBounds();

I don&apos;t like that name :-) Is that common in flickable?

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:381
&gt; +    // Flickable currently does not handle touch events directly, so we need to construct mouse events.

WTF! Can&apos;t you fix that is flickable?

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:457
&gt; +    // Immediately stop kinetic scrolling and if the view is out of bounds
&gt; +    // move it back inside valid bounds immediately as well.
&gt; +    m_viewport-&gt;returnToBounds();

Does this actually do that... ie, no animations?

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:478
&gt; -    // Stopping the scroller immediately stops kinetic scrolling and if the view is out of bounds it
&gt; -    // is moved inside valid bounds immediately as well. This is the behavior that we want.
&gt; -    scroller()-&gt;stop();
&gt; +    interruptScrollAnimation();

why is the comment gone? why is the comment not needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538036</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-18 11:39:00 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=122970) [details] [details]
&gt; &gt; proposed patch
&gt; 
&gt; The API can be used the following way to place additional items on the WebView:

Is this similar to other uses of flickable? or is this your api? Do you have an example on how to use this with a normal flickable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538074</commentid>
    <comment_count>5</comment_count>
      <attachid>122970</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-01-18 12:30:38 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

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

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:246
&gt; -    m_content-&gt;setPos(-boundPosition(endPosRange.topLeft(), newPos, endPosRange.bottomRight()));
&gt; +    QPointF newPosition = -boundPosition(endPosRange.topLeft(), newPos, endPosRange.bottomRight());
&gt; +    m_viewport-&gt;setContentX(newPosition.x());
&gt; +    m_viewport-&gt;setContentY(newPosition.y());

Can the new position still be set with just one call for clarity?

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:468
&gt; -    scroller()-&gt;handleInput(QScroller::InputPress,  viewportTouchPoint, eventTimestampMillis);
&gt; +    handleInput(QEvent::TouchBegin, viewportTouchPoint, eventTimestampMillis);

Considering handleInput just converts touch-events into mouse-events, is this really needed? Could flickable be instructed more directly, and these functions be removed completely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538558</commentid>
    <comment_count>6</comment_count>
      <attachid>122970</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2012-01-19 01:55:19 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

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

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:382
&gt; +    switch (eventType) {

not a full review, jus a quick comment: Samuel has added touch-&gt;mouse mocking in Qt itself, which is enabled by default, so this is probably not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538565</commentid>
    <comment_count>7</comment_count>
      <attachid>122970</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-19 02:12:09 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:151
&gt; +void QQuickWebView::returnToBounds()
&gt; +{
&gt; +    Q_D(QQuickWebView);
&gt; +    ASSERT(!d-&gt;flickProvider.isNull());
&gt; +    QMetaObject::invokeMethod(d-&gt;flickProvider.data(), &quot;returnToBounds&quot;, Qt::DirectConnection);
&gt; +}

If this is animating, how does the interaction engine know? It needs to.

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:450
&gt; +    return m_viewport-&gt;isFlicking();

IS this true when it is bouncing back? should it be?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538567</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-19 02:20:02 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=122970) [details] [details]
&gt; &gt; proposed patch
&gt; 
&gt; The API can be used the following way to place additional items on the WebView:
&gt; 
&gt;     WebView {
&gt;         id: webView
&gt;         experimental.page.y: 100
&gt; 
&gt;         experimental.flickableContent: [

Is this a standard way of doing it? Why is it better to use this than just attach something to the page? the API seems so separate.

Why is it inherent flickable if I dont do things like x:webView.experimental.contentX ? Wouldn&apos;t a name like experimental.overlay not make more sense?


&gt;             Rectangle {
&gt;                 id: topItem
&gt;                 height: 100
&gt;                 width: webView.width
&gt;                 x: webView.experimental.contentX

Can&apos;t we use experimental.page.x ? or is page like the viewport inside our view? ieck.

&gt;                 color: &quot;red&quot;
&gt;                 Text {
&gt;                     text: &quot;&lt;b&gt;&lt;i&gt;topItem&lt;/i&gt;&lt;/b&gt;&quot;
&gt;                     font.pointSize: 24
&gt;                     color: &quot;white&quot;
&gt;                     anchors {
&gt;                         horizontalCenter: parent.horizontalCenter
&gt;                         verticalCenter: parent.verticalCenter
&gt;                     }
&gt;                 }
&gt;                 anchors {
&gt;                     bottom: webView.experimental.page.top
&gt;                 }
&gt;             }
&gt;         ]
&gt;         experimental.contentWidth: experimental.page.width
&gt;         experimental.contentHeight: experimental.page.height + topItem.height
&gt; ...
&gt;     } //WebView
&gt; 
&gt; The contentItem is sized to the page by default until the user binds contentWidth and contentHeight.

Can you explain this better? I dont get it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538575</commentid>
    <comment_count>9</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-19 02:51:44 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 122970 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122970&amp;action=review
Comment on the quesitons

&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:354
&gt; &gt; +        m_viewport-&gt;returnToBounds();
&gt; 
&gt; I don&apos;t like that name :-) Is that common in flickable?

Yes, this is how flickable calls it :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:381
&gt; &gt; +    // Flickable currently does not handle touch events directly, so we need to construct mouse events.
&gt; 
&gt; WTF! Can&apos;t you fix that is flickable?

The normal usecase for flickable would be to use a mousearea but we just need flickable as an engine. However as torarne said the touch-&gt; mouse mocking is already in Qt, so if we have that hash we can omit this part and pass the touch event directly. I have to check.

&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:457
&gt; &gt; +    // Immediately stop kinetic scrolling and if the view is out of bounds
&gt; &gt; +    // move it back inside valid bounds immediately as well.
&gt; &gt; +    m_viewport-&gt;returnToBounds();
&gt; 
&gt; Does this actually do that... ie, no animations?
You are right, this animates, and currently I see no way to actually move the content back immediately, except using our setItemRectVisible, and patching qquickflickable to make cancelFlick invocable. 

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:478
&gt; &gt; -    // Stopping the scroller immediately stops kinetic scrolling and if the view is out of bounds it
&gt; &gt; -    // is moved inside valid bounds immediately as well. This is the behavior that we want.
&gt; &gt; -    scroller()-&gt;stop();
&gt; &gt; +    interruptScrollAnimation();
&gt; 
&gt; why is the comment gone? why is the comment not needed
interruptScrollAnimation and panGestureCancelled did exactly the same thing, and they even had the exact same comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538579</commentid>
    <comment_count>10</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-19 03:00:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; Created an attachment (id=122970) [details] [details] [details]
&gt; &gt; &gt; proposed patch
&gt; &gt; 
&gt; &gt; The API can be used the following way to place additional items on the WebView:
&gt; 
&gt; Is this similar to other uses of flickable? or is this your api? Do you have an example on how to use this with a normal flickable?

The API is a subset of the Flickable QML API, as you can see in the patch. 
The only difference is that we need to put everything into experimental, which hinders us from using the DefaultProperty to hide the list syntax and automatically parent the items to the contentItem of the Flickable.

We could add the default property to the experimental object, but I think in the current state being explicit here is better than hiding the actual logic.
To simplify my above example a bit:

experimental {
    flickableContent: [
     ...
    ]
}

would also do the trick, and this way the additional experimental cruft can be omitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538580</commentid>
    <comment_count>11</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-19 03:05:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 122970 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122970&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:246
&gt; &gt; -    m_content-&gt;setPos(-boundPosition(endPosRange.topLeft(), newPos, endPosRange.bottomRight()));
&gt; &gt; +    QPointF newPosition = -boundPosition(endPosRange.topLeft(), newPos, endPosRange.bottomRight());
&gt; &gt; +    m_viewport-&gt;setContentX(newPosition.x());
&gt; &gt; +    m_viewport-&gt;setContentY(newPosition.y());
&gt; 
&gt; Can the new position still be set with just one call for clarity?

Unfortunately it can not be set with one call because these Flickable functions do more than just positioning, they also reset the state of the Flickable.
I could introduce a wrapper but it would still need to call these two functions on the Flickable and would thus only add a third function call.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:468
&gt; &gt; -    scroller()-&gt;handleInput(QScroller::InputPress,  viewportTouchPoint, eventTimestampMillis);
&gt; &gt; +    handleInput(QEvent::TouchBegin, viewportTouchPoint, eventTimestampMillis);
&gt; 
&gt; Considering handleInput just converts touch-events into mouse-events, is this really needed? Could flickable be instructed more directly, and these functions be removed completely?

See torarne&apos;s comment. We can probably probably drop this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538581</commentid>
    <comment_count>12</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-19 03:11:14 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 122970 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122970&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:151
&gt; &gt; +void QQuickWebView::returnToBounds()
&gt; &gt; +{
&gt; &gt; +    Q_D(QQuickWebView);
&gt; &gt; +    ASSERT(!d-&gt;flickProvider.isNull());
&gt; &gt; +    QMetaObject::invokeMethod(d-&gt;flickProvider.data(), &quot;returnToBounds&quot;, Qt::DirectConnection);
&gt; &gt; +}
&gt; 
&gt; If this is animating, how does the interaction engine know? It needs to.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:450
&gt; &gt; +    return m_viewport-&gt;isFlicking();
&gt; 
&gt; IS this true when it is bouncing back? should it be?

I believe it is true, since it is emitted by QQuickFlickable::movementEnding which is called if the timeline gets inactive, so at the end of the animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538589</commentid>
    <comment_count>13</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-19 03:25:43 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; Created an attachment (id=122970) [details] [details] [details]
&gt; &gt; &gt; proposed patch
&gt; &gt; 
&gt; &gt; The API can be used the following way to place additional items on the WebView:
&gt; &gt; 
&gt; &gt;     WebView {
&gt; &gt;         id: webView
&gt; &gt;         experimental.page.y: 100
&gt; &gt; 
&gt; &gt;         experimental.flickableContent: [
&gt; 
&gt; Is this a standard way of doing it? Why is it better to use this than just attach something to the page? the API seems so separate.
&gt; 
&gt; Why is it inherent flickable if I dont do things like x:webView.experimental.contentX ? Wouldn&apos;t a name like experimental.overlay not make more sense?
I do not understand this question.

&gt; 
&gt; 
&gt; &gt;             Rectangle {
&gt; &gt;                 id: topItem
&gt; &gt;                 height: 100
&gt; &gt;                 width: webView.width
&gt; &gt;                 x: webView.experimental.contentX
&gt; 
&gt; Can&apos;t we use experimental.page.x ? or is page like the viewport inside our view? ieck.
No, we cannot. Flickable has a contentItem and all the items put into the flickable are the children of this contentItem, which is positioned according to the input. So page.x would be the position of the page on the contentItem and not the position of the contentItem.

Flickable::contentX  in turn is just -contentItem-&gt;x(), so we no longer need to invert coordinates, as we did with QScroller.
 
&gt; &gt; The contentItem is sized to the page by default until the user binds contentWidth and contentHeight.
&gt; 
&gt; Can you explain this better? I dont get it.

In Flickable you have to set contentWidth and contentHeight in QML else you won&apos;t be able to pan the content.
The decision for the WebView was to resize the contentItem automatically to the page size (this is useDefaultContentWidth and useDefaultContentHeight) so we have the old behaviour without changing the MiniBrowser implementation.
But if the user places additional items around the page with experimental.flickableContent then he needs to make sure he also sets the contentWidth and contentHeight accordingly.

This is the:
        experimental.contentWidth: experimental.page.width
        experimental.contentHeight: experimental.page.height + topItem.height

part in my example. After this we do not use the default size any more, instead we use the bindings set by the user to size the contentItem. Flickable uses the contentItem to calculate the allowed panning boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538601</commentid>
    <comment_count>14</comment_count>
      <attachid>122970</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-01-19 03:51:44 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:246
&gt;&gt;&gt; +    m_viewport-&gt;setContentY(newPosition.y());
&gt;&gt; 
&gt;&gt; Can the new position still be set with just one call for clarity?
&gt; 
&gt; Unfortunately it can not be set with one call because these Flickable functions do more than just positioning, they also reset the state of the Flickable.
&gt; I could introduce a wrapper but it would still need to call these two functions on the Flickable and would thus only add a third function call.

I think what Allan meant was whether we could wrap these two calls in one method (e.g. setContentPosition(QPointF)) instead of directly wrapping the calls to Flickable&apos;s setContentX and setContentY. 
But there might be a reason to keep those separate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538617</commentid>
    <comment_count>15</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-19 04:22:58 -0800</bug_when>
    <thetext>&gt; Why is it inherent flickable if I dont do things like x:webView.experimental.contentX ? Wouldn&apos;t a name like experimental.overlay not make more sense?
&gt; I do not understand this question.
But let me try to answer it nonetheless

x:webView.experimental.contentX

is needed to always position that toolBox inside the view, also if a pinch gesture is ongoing, but let it move vertically with the page.
We cannot anchor to the view, because the view is not a sibling nor the direct parent of the item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538976</commentid>
    <comment_count>16</comment_count>
      <attachid>122970</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-19 13:23:55 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:270
&gt; +    flickProvider.reset(qobject_cast&lt;QQuickItem*&gt;(component.create()));

Does this have to be a QScopedPointer when we also have the parent items delete children?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540760</commentid>
    <comment_count>17</comment_count>
      <attachid>122970</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-23 12:55:46 -0800</bug_when>
    <thetext>Comment on attachment 122970
proposed patch

There are plenty of good comments in the review that justify another iteration of this patch. Taking it out of the review queue :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542268</commentid>
    <comment_count>18</comment_count>
      <attachid>123940</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-25 07:56:41 -0800</bug_when>
    <thetext>Created attachment 123940
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542279</commentid>
    <comment_count>19</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-25 08:08:55 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=123940) [details]
&gt; proposed patch

This change needs the QQuickCanvas fix which is already staged, an enabled touch-&gt;mouse mocking, and also needs a public invokable cancelFlick method on QQuickFlickable, which I&apos;m going to push ASAP, so it can hopefully show up in the Friday hashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542610</commentid>
    <comment_count>20</comment_count>
      <attachid>123940</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-25 14:09:50 -0800</bug_when>
    <thetext>Comment on attachment 123940
proposed patch

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

&gt; Source/WebKit2/ChangeLog:28
&gt; +
&gt; +

double newline

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:138
&gt; +template&lt;typename T&gt; T QQuickWebViewPrivate::readFlickableProperty(const char* name) const

I believe this is normally written as two lines.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:295
&gt; +    component.setData(&quot;import QtQuick 2.0\nFlickable {}&quot;, QUrl());

comment?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1027
&gt; +QDeclarativeListProperty&lt;QObject&gt; QQuickWebViewExperimental::flickableContent()

Is this the name used by the rest of QML or something you invented?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:115
&gt; +
&gt; +    void returnToBounds();
&gt; +    void cancelFlick();

// Implements Flickable API ?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h:88
&gt; +    template&lt;typename T&gt; T readFlickableProperty(const char* name) const;
&gt; +    void writeFlickableProperty(const char* name, const QVariant&amp; value);

I guess you could declare those two as inline free functions (maybe in an anonymous namespace) and avoid cluttering the private with them. Donno if that is a good idea or not :-)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h:174
&gt; +    // These make sure that the contentItem is sized to the page
&gt; +    // if the user did not add other flickable items in QML.
&gt; +    // If the user adds items in QML he has to make sure to
&gt; +    // also bind the contentWidth and contentHeight accordingly.

Is this in accordance with normal QML flickable behaviour? You could add the answer to the comment :)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h:176
&gt; +    bool usePageWidthAsContentWidth;
&gt; +    bool usePageHeightAsContentHeight;

The name makes me thing &quot;oh when wouldn&apos;t I use that&quot;? So maybe we could call them useRawPageWidth...

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:372
&gt; +    // Reset the velocity samples of the flickable.

That is a cryptic comment for someone not familiar with the implementation

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:422
&gt; +    // The pan gesture recognizer sends the current TouchUpdate event
&gt; +    // when it recognized a pan gesture.
&gt; +    // Construct a TouchBegin event out of the received event for the flickable.

a little consistency in when to break lines, please :-) At least in the same group

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:503
&gt; +        // Sending the event to the flickProvider will stop the kinetic scrolling.

...animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543038</commentid>
    <comment_count>21</comment_count>
      <attachid>123940</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-26 03:56:13 -0800</bug_when>
    <thetext>Comment on attachment 123940
proposed patch

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

Let&apos;s do another round with comments from me and Kenneth :)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:148
&gt; +template&lt;typename T&gt; T QQuickWebViewPrivate::readFlickableProperty(const char* name) const
&gt; +{
&gt; +    ASSERT(flickProvider);
&gt; +    return flickProvider-&gt;property(name).value&lt;T&gt;();
&gt; +}
&gt; +
&gt; +void QQuickWebViewPrivate::writeFlickableProperty(const char* name, const QVariant&amp; value)
&gt; +{
&gt; +    ASSERT(flickProvider);
&gt; +    flickProvider-&gt;setProperty(name, value);
&gt; +}

I think the Qt naming conventions here would suggest

    T flickableProperty(const char* name) const

and

    void setFlickableProperty(const char* name, const QVariant&amp; value)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:150
&gt; +void QQuickWebView::handleInput(QInputEvent *event)

I suggest to rename this method. The name is too generic for what it does, i.e. a keyboard event is input (it&apos;s a QInputEvent), but this function doesn&apos;t handle it but just forwards it to the flickable. 

I don&apos;t like that this is a &quot;public&quot; method in QQuickWebView, but I guess that&apos;s easier than storing the private in the touch interaction engine for the moment.

I suggest to rename it to something more specific, such as handleTouchFlickEvent(QTouchEvent*); (yes, take a touch event, very specifically)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:154
&gt; +    qApp-&gt;notify(d-&gt;flickProvider, event);

I think the correct way of writing this would be

    QCoreApplication::sendEvent(d-&gt;flickProvider, event);

It is functionally equivalent, but it doesn&apos;t require the instance itself and it&apos;s the pattern that is more common instead of calling notify directly.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:161
&gt; +    QMetaObject::invokeMethod(d-&gt;flickProvider, &quot;returnToBounds&quot;, Qt::DirectConnection);

Perhaps it would be worth it to resolve the QMetaMethod after flick provider creation and therefore avoid a string method lookup for every invocation.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:294
&gt; +    QDeclarativeEngine engine(webView);
&gt; +    QDeclarativeComponent component(&amp;engine, webView);

Ugh, creating a separate engine and then reparenting the object out of it is ugly.

Could you try this instead?

QDeclarativeEngine* engine = qmlEngine(webView);

I _think_ the engine will be available already at that point.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:295
&gt;&gt; +    component.setData(&quot;import QtQuick 2.0\nFlickable {}&quot;, QUrl());
&gt; 
&gt; comment?

As well as QByteArrayLiteral(&quot;import QtQuick...&quot;) please :)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1083
&gt; +qreal QQuickWebViewExperimental::contentY() const
&gt; +{
&gt; +    Q_Q(const QQuickWebView);
&gt; +    return q-&gt;contentY();
&gt; +}

Instead of QQuickWebViewExperimental::contentY() calling QQuickWebView::contentY() which then calls QQuickWebViewPrivate::readFlickableProperty() I think it would be better
to eliminate the QQuickWebView::contentY() indirection.

The QQuickWebView::contentY() function - and the other methods like that - are only called from one place, QQuickWebViewExperimental. The QQuickWebView::contentY() function also
does _not_ represent public API of any sort, so I think it&apos;s easier to get rid of it and just have

qreal QQuickWebViewExperimental::contentY() const
{
    return d-&gt;flickableProperty&lt;qreal&gt;(&quot;contentY&quot;);
}

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:237
&gt; +    Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged)
&gt; +    Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged)
&gt; +    Q_PROPERTY(qreal contentX READ contentX WRITE setContentX NOTIFY contentXChanged)
&gt; +    Q_PROPERTY(qreal contentY READ contentY WRITE setContentY NOTIFY contentYChanged)
&gt; +    Q_PROPERTY(QQuickItem* contentItem READ contentItem CONSTANT)
&gt; +    Q_PROPERTY(QDeclarativeListProperty&lt;QObject&gt; flickableContent READ flickableContent)

I would be nice to have a comment here saying that the set of these properties are essentially &quot;QML Flickable&quot; API.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h:88
&gt;&gt; +    void writeFlickableProperty(const char* name, const QVariant&amp; value);
&gt; 
&gt; I guess you could declare those two as inline free functions (maybe in an anonymous namespace) and avoid cluttering the private with them. Donno if that is a good idea or not :-)

I would also prefer the template methods to be inline. Out-of-line template methods do not really work, but in this case they &quot;do&quot; because it&apos;s only used in one compilation unit.

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h:111
&gt; -    void scrollStateChanged(QScroller::State);
&gt; +    void contentMovingChanged();

I admit that I liked the term scrollStateChanged over contentMovingChanged. But that&apos;s just me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543071</commentid>
    <comment_count>22</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2012-01-26 05:10:56 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h:176
&gt; &gt; +    bool usePageWidthAsContentWidth;
&gt; &gt; +    bool usePageHeightAsContentHeight;
&gt; 
&gt; The name makes me thing &quot;oh when wouldn&apos;t I use that&quot;? So maybe we could call them useRawPageWidth...

Changing it to &quot;raw&quot; does not remove the &quot;when do I use that&quot; question. And it adds &quot;what does raw imply?&quot;, so IMHO it&apos;s a worse name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544002</commentid>
    <comment_count>23</comment_count>
      <attachid>124299</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-27 05:58:58 -0800</bug_when>
    <thetext>Created attachment 124299
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544013</commentid>
    <comment_count>24</comment_count>
      <attachid>124299</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-27 06:13:26 -0800</bug_when>
    <thetext>Comment on attachment 124299
proposed patch

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

much better

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:114
&gt; +    // Internal Flickable API used by the interaction engine

Dont hit me :-) but guess what is wrong with that line.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h:176
&gt; +    bool usePageWidthAsContentWidth;
&gt; +    bool usePageHeightAsContentHeight;

What about something like &quot;contentWidthIsOverridden&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544028</commentid>
    <comment_count>25</comment_count>
      <attachid>124306</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-27 06:39:18 -0800</bug_when>
    <thetext>Created attachment 124306
rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544211</commentid>
    <comment_count>26</comment_count>
      <attachid>124306</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-27 11:28:11 -0800</bug_when>
    <thetext>Comment on attachment 124306
rebased patch

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

This patch is pending on a qtdeclarative patch not being in our hashes yet. It could be resolved beginning of next week.

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:427
&gt; +    m_viewport-&gt;handleTouchFlickEvent(&amp;touchBegin);

I realized that the timestamp is not set on this touch begin event. I&apos;m going to fix this next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550060</commentid>
    <comment_count>27</comment_count>
      <attachid>125663</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-06 09:28:15 -0800</bug_when>
    <thetext>Created attachment 125663
proposed patch v2

Refactored the previous patch and moved the glue code into its separate class not to pollute the qquickwebview.cpp.
This depends on the componentComplete patch and most probably won&apos;t apply without it to trunk.

Kenneth, Simon could you take another look?
Compared to the r+-ed patch - apart from the separation of the QtFlickProvider - in this patch all the methods and properties are resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550897</commentid>
    <comment_count>28</comment_count>
      <attachid>125663</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-07 05:36:35 -0800</bug_when>
    <thetext>Comment on attachment 125663
proposed patch v2

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

Mostly stylistic feedback, overall looks good to me. The only part that I think might be wrong is the passing of the QTouchEvent to ignore() it, but I might be missing something :)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:517
&gt; +    QObject::connect(flickProvider, SIGNAL(contentWidthChanged()), q-&gt;experimental(), SIGNAL(contentWidthChanged()), Qt::DirectConnection);
&gt; +    QObject::connect(flickProvider, SIGNAL(contentHeightChanged()), q-&gt;experimental(), SIGNAL(contentHeightChanged()), Qt::DirectConnection);
&gt; +    QObject::connect(flickProvider, SIGNAL(contentXChanged()), q-&gt;experimental(), SIGNAL(contentXChanged()), Qt::DirectConnection);
&gt; +    QObject::connect(flickProvider, SIGNAL(contentYChanged()), q-&gt;experimental(), SIGNAL(contentYChanged()), Qt::DirectConnection);

Minor thing: I suggest to get the d-&gt;experimental() pointer once instead of calling it for every connect() :)

Is the Qt::DirectConnection necessary?

&gt; Source/WebKit2/UIProcess/qt/QtFlickProvider.cpp:144
&gt; +    event-&gt;ignore();

I don&apos;t understand this part.

In the &quot;best&quot; case we receive a native touch even in QtWebPageEventHandler::touchEvent(QTouchEvent* event), which will create a NativeWebTouchEvent.
The NativeWebTouchEven will create a _copy_ of the QTouchEvent and provide a const QTouchEvent* via the nativeEvent() accessor. AFAICS that pointer is
passed all the way through here - the constness being casted away in the meantime - and then we call ignore() on the event. But that even is just a copy
that the NativeWebTouchEvent has and I don&apos;t think we do anything with the accepted/ignored result. In fact judging from the code in QtWebPageEventHandler
it seems we always accept touch events:


void QtWebPageEventHandler::touchEvent(QTouchEvent* event)
{
#if ENABLE(TOUCH_EVENTS)
    QTransform fromItemTransform = m_webPage-&gt;transformFromItem();
    m_webPageProxy-&gt;handleTouchEvent(NativeWebTouchEvent(event, fromItemTransform));
    event-&gt;accept();
#else
    ASSERT_NOT_REACHED();
    event-&gt;ignore();
#endif
}

(And with &quot;best&quot; case I mean if the page doesn&apos;t have any event listeners for touch. If it does we even more so operate on a copy of the original Qt touch event
as part of the asynchronous handling)

&gt; Source/WebKit2/UIProcess/qt/QtFlickProvider.cpp:198
&gt; +    return flickableProperty&lt;bool&gt;(m_flickable, m_moving);

This is a matter of taste, but now that you have the QMetaMethod I&apos;d personally just use the API directly there:

    return m_moving.read(m_flickable).value&lt;bool&gt;();

The line is about the same length, but now you don&apos;t need the helper functions anymore because you&apos;ve already resolved
the property and you&apos;re nicely encapsulating the flickable in QtFlickProvider (a very nice move, btw!)

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h:27
&gt; +#include &lt;QtGui/QTouchEvent&gt;

This is just me being picky, but I suggest that for new code we use #include &lt;Classname&gt; instead of #include &lt;Module/Classname&gt;. The Module part is only needed in header files that are part of the public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551070</commentid>
    <comment_count>29</comment_count>
      <attachid>125865</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-07 09:51:06 -0800</bug_when>
    <thetext>Created attachment 125865
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551312</commentid>
    <comment_count>30</comment_count>
      <attachid>125865</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-07 13:29:39 -0800</bug_when>
    <thetext>Comment on attachment 125865
proposed patch

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

&gt; Source/WebKit2/UIProcess/qt/QtFlickProvider.cpp:91
&gt; +    m_returnToBounds = resolveMetaMethod(m_flickable, &quot;returnToBounds()&quot;);
&gt; +    m_cancelFlick = resolveMetaMethod(m_flickable, &quot;cancelFlick()&quot;);

I would like these to be called something like m_returnToBoundFn or so m_returnToBoundMethod or so, to make it a bit more clear in the rest of the code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551955</commentid>
    <comment_count>31</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-08 03:04:19 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 125865 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125865&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtFlickProvider.cpp:91
&gt; &gt; +    m_returnToBounds = resolveMetaMethod(m_flickable, &quot;returnToBounds()&quot;);
&gt; &gt; +    m_cancelFlick = resolveMetaMethod(m_flickable, &quot;cancelFlick()&quot;);
&gt; 
&gt; I would like these to be called something like m_returnToBoundFn or so m_returnToBoundMethod or so, to make it a bit more clear in the rest of the code

I agree, the Method suffix is needed for these. Can fix that when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551975</commentid>
    <comment_count>32</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-08 03:35:56 -0800</bug_when>
    <thetext>You didnt answer this question from Simon:

Is the Qt::DirectConnection necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552001</commentid>
    <comment_count>33</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-08 04:07:24 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; You didnt answer this question from Simon:
&gt; 
&gt; Is the Qt::DirectConnection necessary?

I believe I answered it in the patch ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553113</commentid>
    <comment_count>34</comment_count>
      <attachid>125865</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-09 06:35:17 -0800</bug_when>
    <thetext>Comment on attachment 125865
proposed patch

Committed in http://trac.webkit.org/changeset/107232.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553121</commentid>
    <comment_count>35</comment_count>
      <attachid>125865</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-09 06:41:33 -0800</bug_when>
    <thetext>Comment on attachment 125865
proposed patch

The minimum required Qt5 hash for trunk is 11bdb40bfda68291b9767b7908a2ab7dc3b75786 after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553128</commentid>
    <comment_count>36</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-09 06:47:49 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 125865 [details])
&gt; The minimum required Qt5 hash for trunk is 11bdb40bfda68291b9767b7908a2ab7dc3b75786 after this change.
The correct hash is of course 63d681ee575c28c972f709af4a1c2b35e03064d8 for Qt5 :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122970</attachid>
            <date>2012-01-18 11:18:27 -0800</date>
            <delta_ts>2012-01-25 07:56:41 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Qt-WK2-WebView-should-use-Flickable-instead-of-QScro.patch</filename>
            <type>text/plain</type>
            <size>37965</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSA2MGQwNDEyNDM5YmJkZDk0NjU4ZjJlOGIxNTY4YmFkN2VhMjEzNTZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFdlZCwgMTggSmFuIDIwMTIgMjA6MTQ6NDEgKzAxMDAKU3ViamVjdDogW1BBVENIXSBb
UXRdIFtXSzJdIFdlYlZpZXcgc2hvdWxkIHVzZSBGbGlja2FibGUgaW5zdGVhZCBvZiBRU2Nyb2xs
ZXIKIHRvIGhhbmRsZSBwb3NpdGlvbmluZwoKLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODAgKysrKysrKysKIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgIHwgICAyNSArKy0KIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgIHwgIDIwNSArKysrKysr
KysrKysrKysrKysrLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3AuaCAgfCAgIDQ2ICsrKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcF9wLmggICB8ICAgIDUgKwogLi4uL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0
X3FxdWlja3dlYnZpZXcuY3BwICAgfCAgICA0ICstCiAuLi4vVUlQcm9jZXNzL3F0L1F0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAgICB8ICAxOTIgKysrKysrKysrLS0tLS0tLS0tLQogLi4u
L1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCAgICAgfCAgIDE0ICst
CiA4IGZpbGVzIGNoYW5nZWQsIDQ1MiBpbnNlcnRpb25zKCspLCAxMTkgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IGY5M2QyYzIuLjliZjgzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBA
QAorMjAxMi0wMS0xOCAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KKwor
ICAgICAgICBbUXRdIFtXSzJdIFdlYlZpZXcgc2hvdWxkIHVzZSBGbGlja2FibGUgaW5zdGVhZCBv
ZiBRU2Nyb2xsZXIgdG8gaGFuZGxlIHBvc2l0aW9uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IFdlYlZpZXcgaW1wbGVtZW50YXRp
b24gdXNlcyBRU2Nyb2xsZXIgdG8gbWFuYWdlIHBvc2l0aW9uaW5nIGJ1dCBvdGhlciBzaW1pbGFy
CisgICAgICAgIGl0ZW1zIGluIFFNTCAoTGlzdFZpZXcsIEdyaWRWaWV3KSBhbGwgdXNlIEZsaWNr
YWJsZSBhcyB0aGVpciBiYXNlIGNsYXNzLgorICAgICAgICBTaW5jZSBRU2Nyb2xsZXIgd2lsbCBi
ZSBkcm9wcGVkIGZyb20gUXQ1IHRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgUVNjcm9sbGVyIGNvZGUK
KyAgICAgICAgYW5kIHJlZGlyZWN0cyBwYW4gZ2VzdXJlcyB0byBhIGR5bmFtaWNhbGx5IGNyZWF0
ZWQgaW50ZXJuYWwgRmxpY2thYmxlIGluc3RhbmNlIChmbGlja1Byb3ZpZGVyKQorICAgICAgICB3
aGljaCBoYW5kbGVzIHRoZSBwb3NpdGlvbmluZy4KKyAgICAgICAgU2luY2UgdGhpcyBpbXBsZW1l
bnRhdGlvbiBvbmx5IHVzZXMgcHVibGljIFFNTCBBUEkgaXQgZG9lcyBub3QgZGVwZW5kIG9uIGRl
Y2xhcmF0aXZlLXByaXZhdGUKKyAgICAgICAgYW5kIHByb3BhZ2F0ZXMgYSBzbWFsbCBzdWJzZXQg
b2YgdGhlIEZsaWNrYWJsZSBBUEkgYXMgdGhlIHB1YmxpYyBBUEkgb2YgdGhlIFdlYlZpZXcuCisg
ICAgICAgIFRoaXMgbWluaW1hbGlzdGljIEFQSSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgZXhwZXJp
bWVudGFsIGV4dGVuc2lvbiBhbmQgbWFrZXMgaXQgcG9zc2libGUKKyAgICAgICAgaW4gUU1MIHRv
IGFkZCBhZGRpdGlvbmFsIGl0ZW1zIChzdWNoIGFzIHRvb2xiYXJzLCBzY3JvbGwgaW5kaWNhdG9y
cyBhbmQgZmxvYXRpbmcgbWVudXMpCisgICAgICAgIGFyb3VkIHRoZSBwYWdlIGFuZCB1c2UgYW5j
aG9yaW5nIGFuZCBiaW5kaW5nIHRvIHBvc2l0aW9uIHRoZW0gb24gdGhlIGZsaWNrYWJsZSBjb250
ZW50SXRlbQorICAgICAgICBvZiB0aGUgV2ViVmlldy4KKyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFu
Z2UgUXRXZWJLaXQyIGRvZXMgbm8gbG9uZ2VyIGRlcGVuZCBvbiBRdFdpZGdldHMgYW5kIHRoaXMg
ZGVwZW5kZW5jeSBjYW4gYmUKKyAgICAgICAgcmVtb3ZlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAg
IChRUXVpY2tXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViUGFn
ZVByaXZhdGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFRdWlja1dlYlBh
Z2U6OnRyYW5zZm9ybVRvSXRlbSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3
UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpoYW5kbGVJbnB1dCk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3Ojpjb250ZW50SXRlbSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpy
ZXR1cm5Ub0JvdW5kcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojppc01vdmluZyk6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3Ojppc0RyYWdnaW5nKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6
OmlzRmxpY2tpbmcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6dXBkYXRlQ29udGVudFNpemUp
OgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudFdpZHRoKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OnNldENvbnRlbnRXaWR0aCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpjb250
ZW50SGVpZ2h0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnNldENvbnRlbnRIZWlnaHQpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudFgpOgorICAgICAgICAoUVF1aWNrV2ViVmll
dzo6c2V0Q29udGVudFgpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudFkpOgorICAg
ICAgICAoUVF1aWNrV2ViVmlldzo6c2V0Q29udGVudFkpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d1ByaXZhdGU6OmluaXRpYWxpemVUb3VjaCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0
ZTo6aW5pdGlhbGl6ZUZsaWNrYWJsZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6
OmZsaWNrYWJsZUNvbnRlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
Y29udGVudEl0ZW0pOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVu
dFdpZHRoKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRX
aWR0aCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50SGVpZ2h0
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRIZWlnaHQp
OgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFgpOgorICAgICAg
ICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudFgpOgorICAgICAgICAoUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFkpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudFkpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6UVF1
aWNrV2ViVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3Au
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKHRzdF9RUXVpY2tXZWJWaWV3OjpzY3JvbGxSZXF1ZXN0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6flZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXIpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjb250ZW50TW92aW5nQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6d2hlZWxFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZW5zdXJlQ29udGVu
dFdpdGhpblZpZXdwb3J0Qm91bmRhcnkpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OmhhbmRsZUlucHV0KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktp
dDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1
cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVuZGVkKToK
KyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1
cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpzY2FsZUNvbnRlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUuaDoKKwogMjAxMi0wMS0xOCAgQ2FybG9zIEdhcm5hY2hvICA8Y2Fy
bG9zZ0Bnbm9tZS5vcmc+CiAKICAgICAgICAgW0dUS10gTGlzdGVuIHRvIEdES19TQ1JPTExfTUFT
SwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5j
cHAKaW5kZXggYThjMTcxOC4uYjdkNjc3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC01NSwxMSArNTUsMTUgQEAgdm9pZCBR
UXVpY2tXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwg
Y29uc3QgUVJlY3RGJiBvbGQKIHsKICAgICBRUXVpY2tJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3
R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKIAotICAgIGlmICghZC0+dXNlVHJhZGl0aW9uYWxEZXNr
dG9wQmVoYXZpb3VyKQorICAgIGlmIChuZXdHZW9tZXRyeS5pc0VtcHR5KCkgfHwgbmV3R2VvbWV0
cnkuc2l6ZSgpID09IG9sZEdlb21ldHJ5LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXplKCkpCi0gICAgICAgIGQt
PnNldERyYXdpbmdBcmVhU2l6ZShuZXdHZW9tZXRyeS5zaXplKCkudG9TaXplKCkpOworICAgIGlm
ICghZC0+dXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKSB7CisgICAgICAgIGQtPnZpZXdw
b3J0SXRlbS0+dXBkYXRlQ29udGVudFNpemUobmV3R2VvbWV0cnkuc2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGQtPnNldERyYXdpbmdBcmVhU2l6ZShuZXdHZW9tZXRyeS5z
aXplKCkudG9TaXplKCkpOwogfQogCiBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFn
ZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogcSwgUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKQpA
QCAtMTA5LDcgKzExMyw3IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KCkKICAgICB0cmFuc2Zvcm0uc2NhbGUoY29udGVudFNjYWxlLCBjb250ZW50
U2NhbGUpOwogCiAgICAgZmxvYXQgb3BhY2l0eSA9IGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KHEp
OwotICAgIFFSZWN0RiBjbGlwUmVjdCA9IHEtPnBhcmVudEl0ZW0oKS0+bWFwUmVjdFRvU2NlbmUo
cS0+cGFyZW50SXRlbSgpLT5ib3VuZGluZ1JlY3QoKSk7CisgICAgUVJlY3RGIGNsaXBSZWN0ID0g
dmlld3BvcnRJdGVtLT5tYXBSZWN0VG9TY2VuZSh2aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgp
KTsKIAogICAgIGlmICghY2xpcFJlY3QuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
ODAsNyArMjg0LDE4IEBAIFFUcmFuc2Zvcm0gUVF1aWNrV2ViUGFnZTo6dHJhbnNmb3JtRnJvbUl0
ZW0oKSBjb25zdAogCiBRVHJhbnNmb3JtIFFRdWlja1dlYlBhZ2U6OnRyYW5zZm9ybVRvSXRlbSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFFUcmFuc2Zvcm0oZC0+Y29udGVudFNjYWxlLCAwLCAwLCAw
LCBkLT5jb250ZW50U2NhbGUsIDAsIHgoKSwgeSgpLCAxKTsKKyAgICBxcmVhbCB4UG9zID0geCgp
OworICAgIHFyZWFsIHlQb3MgPSB5KCk7CisKKyAgICBpZiAoIWQtPnVzZVRyYWRpdGlvbmFsRGVz
a3RvcEJlaGF2aW91cikgeworICAgICAgICAvLyBGbGlja2FibGUgbW92ZXMgaXRzIGNvbnRlbnRJ
dGVtIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0IHBvc2l0aW9uIGludG8gYWNjb3VudCwKKyAgICAg
ICAgLy8gYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGRpc3BsYWNlbWVudCBvZiB0aGUgcGFnZSBv
biB0aGUgY29udGVudEl0ZW0KKyAgICAgICAgLy8gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIFFNTCBp
dGVtcy4KKyAgICAgICAgeFBvcyArPSBwYXJlbnRJdGVtKCktPngoKTsKKyAgICAgICAgeVBvcyAr
PSBwYXJlbnRJdGVtKCktPnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUVRyYW5zZm9ybShkLT5j
b250ZW50U2NhbGUsIDAsIDAsIDAsIGQtPmNvbnRlbnRTY2FsZSwgMCwgeFBvcywgeVBvcywgMSk7
CiB9CiAKIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggZDNk
YWM1ZC4uYmNmZjU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXcuY3BwCkBAIC00NCwyMCArNDQsMjYgQEAKICNpbmNsdWRlICJxd2Vidmll
d3BvcnRpbmZvX3AuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJl
YWRpbmcuaD4KKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UURlY2xhcmF0aXZl
Q29tcG9uZW50PgogI2luY2x1ZGUgPFFEZWNsYXJhdGl2ZUVuZ2luZT4KICNpbmNsdWRlIDxRRmls
ZURpYWxvZz4KICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0NhbnZhcz4KICNpbmNsdWRlIDxXS09w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFR
dWlja1dlYlZpZXdQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogICAgIDogcV9wdHIo
dmlld3BvcnQpCisgICAgLCBmbGlja1Byb3ZpZGVyKDApCiAgICAgLCBhbGVydERpYWxvZygwKQog
ICAgICwgY29uZmlybURpYWxvZygwKQogICAgICwgcHJvbXB0RGlhbG9nKDApCiAgICAgLCBhdXRo
ZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwgaXRlbVNlbGVjdG9yKDApCiAgICAgLCBwb3N0VHJh
bnNpdGlvblN0YXRlKGFkb3B0UHRyKG5ldyBQb3N0VHJhbnNpdGlvblN0YXRlKHRoaXMpKSkKKyAg
ICAsIHVzZURlZmF1bHRDb250ZW50V2lkdGgodHJ1ZSkKKyAgICAsIHVzZURlZmF1bHRDb250ZW50
SGVpZ2h0KHRydWUpCiAgICAgLCBpc1RyYW5zaXRpb25pbmdUb05ld1BhZ2UoZmFsc2UpCiAgICAg
LCBwYWdlSXNTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxl
ZChmYWxzZSkKQEAgLTEyMyw2ICsxMjksMTE0IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6
OmRpc2FibGVNb3VzZUV2ZW50cygpCiAgICAgcS0+c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFsc2Up
OwogfQogCit2b2lkIFFRdWlja1dlYlZpZXc6OmhhbmRsZUlucHV0KFFJbnB1dEV2ZW50ICpldmVu
dCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKCFkLT5mbGlja1Byb3Zp
ZGVyLmlzTnVsbCgpKTsKKyAgICBRQXBwbGljYXRpb246OnNlbmRFdmVudChkLT5mbGlja1Byb3Zp
ZGVyLmRhdGEoKSwgZXZlbnQpOworfQorCitRUXVpY2tJdGVtKiBRUXVpY2tXZWJWaWV3Ojpjb250
ZW50SXRlbSgpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVCghZC0+Zmxp
Y2tQcm92aWRlci5pc051bGwoKSk7CisgICAgcmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPnByb3Bl
cnR5KCJjb250ZW50SXRlbSIpLnZhbHVlPFFRdWlja0l0ZW0qPigpOworfQorCit2b2lkIFFRdWlj
a1dlYlZpZXc6OnJldHVyblRvQm91bmRzKCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7Cisg
ICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICBRTWV0YU9iamVjdDo6
aW52b2tlTWV0aG9kKGQtPmZsaWNrUHJvdmlkZXIuZGF0YSgpLCAicmV0dXJuVG9Cb3VuZHMiLCBR
dDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK2Jvb2wgUVF1aWNrV2ViVmlldzo6aXNNb3Zpbmco
KSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoIWQt
PmZsaWNrUHJvdmlkZXIuaXNOdWxsKCkpOworICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5w
cm9wZXJ0eSgibW92aW5nIikudmFsdWU8Ym9vbD4oKTsKK30KKworYm9vbCBRUXVpY2tXZWJWaWV3
Ojppc0RyYWdnaW5nKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Cisg
ICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gZC0+Zmxp
Y2tQcm92aWRlci0+cHJvcGVydHkoImRyYWdnaW5nIikudmFsdWU8Ym9vbD4oKTsKK30KKworYm9v
bCBRUXVpY2tXZWJWaWV3Ojppc0ZsaWNraW5nKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1
aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAg
ICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+cHJvcGVydHkoImZsaWNraW5nIikudmFsdWU8Ym9v
bD4oKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3Ojp1cGRhdGVDb250ZW50U2l6ZShjb25zdCBR
U2l6ZUYmIHNpemUpCit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VS
VCghZC0+ZmxpY2tQcm92aWRlci5pc051bGwoKSk7CisgICAgaWYgKGQtPnVzZURlZmF1bHRDb250
ZW50V2lkdGgpCisgICAgICAgIHNldENvbnRlbnRXaWR0aChzaXplLndpZHRoKCkpOworICAgIGlm
IChkLT51c2VEZWZhdWx0Q29udGVudEhlaWdodCkKKyAgICAgICAgc2V0Q29udGVudEhlaWdodChz
aXplLmhlaWdodCgpKTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlldzo6Y29udGVudFdpZHRoKCkg
Y29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKCFkLT5m
bGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+cHJv
cGVydHkoImNvbnRlbnRXaWR0aCIpLnZhbHVlPHFyZWFsPigpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXc6OnNldENvbnRlbnRXaWR0aChxcmVhbCB3aWR0aCkKK3sKKyAgICBRX0QoUVF1aWNrV2Vi
Vmlldyk7CisgICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICBkLT5m
bGlja1Byb3ZpZGVyLT5zZXRQcm9wZXJ0eSgiY29udGVudFdpZHRoIiwgd2lkdGgpOworfQorCitx
cmVhbCBRUXVpY2tXZWJWaWV3Ojpjb250ZW50SGVpZ2h0KCkgY29uc3QKK3sKKyAgICBRX0QoY29u
c3QgUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgp
KTsKKyAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+cHJvcGVydHkoImNvbnRlbnRIZWlnaHQi
KS52YWx1ZTxxcmVhbD4oKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50SGVp
Z2h0KHFyZWFsIGhlaWdodCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJU
KCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICBkLT5mbGlja1Byb3ZpZGVyLT5zZXRQ
cm9wZXJ0eSgiY29udGVudEhlaWdodCIsIGhlaWdodCk7Cit9CisKK3FyZWFsIFFRdWlja1dlYlZp
ZXc6OmNvbnRlbnRYKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Cisg
ICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gZC0+Zmxp
Y2tQcm92aWRlci0+cHJvcGVydHkoImNvbnRlbnRYIikudmFsdWU8cXJlYWw+KCk7Cit9CisKK3Zv
aWQgUVF1aWNrV2ViVmlldzo6c2V0Q29udGVudFgocXJlYWwgeCkKK3sKKyAgICBRX0QoUVF1aWNr
V2ViVmlldyk7CisgICAgQVNTRVJUKCFkLT5mbGlja1Byb3ZpZGVyLmlzTnVsbCgpKTsKKyAgICBk
LT5mbGlja1Byb3ZpZGVyLT5zZXRQcm9wZXJ0eSgiY29udGVudFgiLCB4KTsKK30KKworcXJlYWwg
UVF1aWNrV2ViVmlldzo6Y29udGVudFkoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tX
ZWJWaWV3KTsKKyAgICBBU1NFUlQoIWQtPmZsaWNrUHJvdmlkZXIuaXNOdWxsKCkpOworICAgIHJl
dHVybiBkLT5mbGlja1Byb3ZpZGVyLT5wcm9wZXJ0eSgiY29udGVudFkiKS52YWx1ZTxxcmVhbD4o
KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50WShxcmVhbCB5KQoreworICAg
IFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoIWQtPmZsaWNrUHJvdmlkZXIuaXNOdWxs
KCkpOworICAgIGQtPmZsaWNrUHJvdmlkZXItPnNldFByb3BlcnR5KCJjb250ZW50WSIsIHkpOwor
fQorCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplRGVza3RvcChRUXVpY2tX
ZWJWaWV3KiB2aWV3cG9ydCkKIHsKICAgICBpZiAoaW50ZXJhY3Rpb25FbmdpbmUpIHsKQEAgLTEz
Nyw2ICsyNTEsOCBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplRGVza3Rv
cChRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKIAogdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
aW5pdGlhbGl6ZVRvdWNoKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogeworICAgIGluaXRpYWxp
emVGbGlja2FibGUodmlld3BvcnQpOworCiAgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7
CiAgICAgcGFnZVZpZXctPmQtPmV2ZW50SGFuZGxlci0+c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZShpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCkpOwogICAgIGRpc2FibGVNb3VzZUV2ZW50cygp
OwpAQCAtMTQ2LDYgKzI2MiwyNiBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFs
aXplVG91Y2goUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiAgICAgdXBkYXRlVmlld3BvcnRTaXpl
KCk7CiB9CiAKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVGbGlja2FibGUo
UVF1aWNrV2ViVmlldyogd2ViVmlldykKK3sKKyAgICBRRGVjbGFyYXRpdmVFbmdpbmUgZW5naW5l
KHdlYlZpZXcpOworICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCBjb21wb25lbnQoJmVuZ2luZSwg
d2ViVmlldyk7CisgICAgY29tcG9uZW50LnNldERhdGEoImltcG9ydCBRdFF1aWNrIDIuMFxuRmxp
Y2thYmxlIHt9IiwgUVVybCgpKTsKKyAgICBmbGlja1Byb3ZpZGVyLnJlc2V0KHFvYmplY3RfY2Fz
dDxRUXVpY2tJdGVtKj4oY29tcG9uZW50LmNyZWF0ZSgpKSk7CisKKyAgICBBU1NFUlQoIWZsaWNr
UHJvdmlkZXIuaXNOdWxsKCkpOworCisgICAgZmxpY2tQcm92aWRlci0+c2V0UGFyZW50SXRlbSh3
ZWJWaWV3KTsKKyAgICBwYWdlVmlldy0+c2V0UGFyZW50SXRlbSh3ZWJWaWV3LT5jb250ZW50SXRl
bSgpKTsKKworICAgIC8vIFByb3BhZ2F0ZSBmbGlja2FibGUgc2lnbmFscy4KKyAgICBRT2JqZWN0
Ojpjb25uZWN0KGZsaWNrUHJvdmlkZXIuZGF0YSgpLCBTSUdOQUwobW92aW5nQ2hhbmdlZCgpKSwg
d2ViVmlldywgU0lHTkFMKG1vdmluZ0NoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsK
KyAgICBRT2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJvdmlkZXIuZGF0YSgpLCBTSUdOQUwoY29udGVu
dFdpZHRoQ2hhbmdlZCgpKSwgd2ViVmlldy0+bV9leHBlcmltZW50YWwsIFNJR05BTChjb250ZW50
V2lkdGhDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29u
bmVjdChmbGlja1Byb3ZpZGVyLmRhdGEoKSwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCkp
LCB3ZWJWaWV3LT5tX2V4cGVyaW1lbnRhbCwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCkp
LCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3Zp
ZGVyLmRhdGEoKSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgd2ViVmlldy0+bV9leHBlcmlt
ZW50YWwsIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsK
KyAgICBRT2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJvdmlkZXIuZGF0YSgpLCBTSUdOQUwoY29udGVu
dFlDaGFuZ2VkKCkpLCB3ZWJWaWV3LT5tX2V4cGVyaW1lbnRhbCwgU0lHTkFMKGNvbnRlbnRZQ2hh
bmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQorCiB2b2lkIFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpsb2FkRGlkQ29tbWl0KCkKIHsKICAgICAvLyBEdWUgdG8gZW50ZXJpbmcgcHJvdmlz
aW9uYWwgbG9hZCBiZWZvcmUgY29tbWl0dGluZywgd2UKQEAgLTMyNSw2ICs0NjEsOSBAQCB2b2lk
IFFRdWlja1dlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogICAgIGlmICh2aWV3
cG9ydFNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBmbGlja1Byb3ZpZGVy
LT5zZXRXaWR0aCh2aWV3cG9ydFNpemUud2lkdGgoKSk7CisgICAgZmxpY2tQcm92aWRlci0+c2V0
SGVpZ2h0KHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisKICAgICAvLyBMZXQgdGhlIFdlYlByb2Nl
c3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKICAgICAvLyBpdCBj
YW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgogICAgIHdlYlBhZ2VQcm94eS0+c2V0
Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7CkBAIC04MTEsNiArOTUwLDcxIEBAIFFRdWlja1dl
YlBhZ2UqIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnBhZ2UoKQogICAgIHJldHVybiBxX3B0
ci0+cGFnZSgpOwogfQogCitRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbDo6ZmxpY2thYmxlQ29udGVudCgpCit7CisgICAgUV9EKFFRdWlj
a1dlYlZpZXcpOworICAgIEFTU0VSVCghZC0+ZmxpY2tQcm92aWRlci5pc051bGwoKSk7CisgICAg
cmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPnByb3BlcnR5KCJmbGlja2FibGVEYXRhIikudmFsdWU8
IFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiA+KCk7Cit9CisKK1FRdWlja0l0ZW0q
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRJdGVtKCkKK3sKKyAgICBRX1EoUVF1
aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIHEtPmNvbnRlbnRJdGVtKCk7Cit9CisKK3FyZWFsIFFR
dWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRXaWR0aCgpIGNvbnN0Cit7CisgICAgUV9R
KGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBxLT5jb250ZW50V2lkdGgoKTsKK30K
Kwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50V2lkdGgocXJlYWwg
d2lkdGgpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnVzZURlZmF1bHRDb250
ZW50V2lkdGggPSBmYWxzZTsKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgcS0+c2V0Q29u
dGVudFdpZHRoKHdpZHRoKTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
Y29udGVudEhlaWdodCgpIGNvbnN0Cit7CisgICAgUV9RKGNvbnN0IFFRdWlja1dlYlZpZXcpOwor
ICAgIHJldHVybiBxLT5jb250ZW50SGVpZ2h0KCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4
cGVyaW1lbnRhbDo6c2V0Q29udGVudEhlaWdodChxcmVhbCBoZWlnaHQpCit7CisgICAgUV9EKFFR
dWlja1dlYlZpZXcpOworICAgIGQtPnVzZURlZmF1bHRDb250ZW50SGVpZ2h0ID0gZmFsc2U7Cisg
ICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIHEtPnNldENvbnRlbnRIZWlnaHQoaGVpZ2h0KTsK
K30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFgoKSBjb25zdAor
eworICAgIFFfUShjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gcS0+Y29udGVudFgo
KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WChxcmVh
bCB4KQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBxLT5zZXRDb250ZW50WCh4KTsK
K30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFkoKSBjb25zdAor
eworICAgIFFfUShjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gcS0+Y29udGVudFko
KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WShxcmVh
bCB5KQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBxLT5zZXRDb250ZW50WSh5KTsK
K30KKwogUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCiAg
ICAgOiBRUXVpY2tJdGVtKHBhcmVudCkKICAgICAsIGRfcHRyKG5ldyBRUXVpY2tXZWJWaWV3UHJp
dmF0ZSh0aGlzKSkKQEAgLTgxOCw3ICsxMDIyLDYgQEAgUVF1aWNrV2ViVmlldzo6UVF1aWNrV2Vi
VmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCiB7CiAgICAgUV9EKFFRdWlja1dlYlZpZXcpOwogICAg
IGQtPmluaXRpYWxpemUoKTsKLSAgICBkLT5pbml0aWFsaXplVG91Y2godGhpcyk7CiB9CiAKIFFR
dWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgUVF1aWNrSXRlbSogcGFyZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggMTU1ZTk2
MC4uY2YzY2E3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXdfcC5oCkBAIC0xMDcsNiArMTA3LDI2IEBAIHB1YmxpYzoKIAogICAgIFFRdWlj
a1dlYlBhZ2UqIHBhZ2UoKTsKIAorICAgIHZvaWQgaGFuZGxlSW5wdXQoUUlucHV0RXZlbnQqIGV2
ZW50KTsKKworICAgIFFRdWlja0l0ZW0qIGNvbnRlbnRJdGVtKCk7CisKKyAgICB2b2lkIHJldHVy
blRvQm91bmRzKCk7CisKKyAgICBib29sIGlzTW92aW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc0Ry
YWdnaW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc0ZsaWNraW5nKCkgY29uc3Q7CisKKyAgICB2b2lk
IHVwZGF0ZUNvbnRlbnRTaXplKGNvbnN0IFFTaXplRiYpOworICAgIHFyZWFsIGNvbnRlbnRXaWR0
aCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFdpZHRoKHFyZWFsKTsKKyAgICBxcmVhbCBj
b250ZW50SGVpZ2h0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50SGVpZ2h0KHFyZWFsKTsK
KyAgICBxcmVhbCBjb250ZW50WCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFgocXJlYWwp
OworICAgIHFyZWFsIGNvbnRlbnRZKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50WShxcmVh
bCk7CisKICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKiBleHBlcmltZW50YWwoKSBjb25z
dDsKICAgICBzdGF0aWMgUVF1aWNrV2ViVmlld0F0dGFjaGVkKiBxbWxBdHRhY2hlZFByb3BlcnRp
ZXMoUU9iamVjdCopOwogCkBAIC0xMjIsNiArMTQyLDcgQEAgcHVibGljIFFfU0xPVFM6CiAgICAg
dm9pZCByZWxvYWQoKTsKIAogUV9TSUdOQUxTOgorICAgIHZvaWQgbW92aW5nQ2hhbmdlZCgpOwog
ICAgIHZvaWQgdGl0bGVDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKICAgICB2b2lkIGxv
YWRTdGFydGVkKCk7CiAgICAgdm9pZCBsb2FkU3VjY2VlZGVkKCk7CkBAIC0yMDMsNyArMjI0LDE2
IEBAIFFNTF9ERUNMQVJFX1RZUEVJTkZPKFFRdWlja1dlYlZpZXcsIFFNTF9IQVNfQVRUQUNIRURf
UFJPUEVSVElFUykKIAogY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbCA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAorCiAgICAgUV9QUk9QRVJUWShR
UXVpY2tXZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSBDT05TVEFOVCBGSU5BTCkKKworICAgIFFfUFJP
UEVSVFkocXJlYWwgY29udGVudFdpZHRoIFJFQUQgY29udGVudFdpZHRoIFdSSVRFIHNldENvbnRl
bnRXaWR0aCBOT1RJRlkgY29udGVudFdpZHRoQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKHFyZWFs
IGNvbnRlbnRIZWlnaHQgUkVBRCBjb250ZW50SGVpZ2h0IFdSSVRFIHNldENvbnRlbnRIZWlnaHQg
Tk9USUZZIGNvbnRlbnRIZWlnaHRDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVu
dFggUkVBRCBjb250ZW50WCBXUklURSBzZXRDb250ZW50WCBOT1RJRlkgY29udGVudFhDaGFuZ2Vk
KQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFkgUkVBRCBjb250ZW50WSBXUklURSBzZXRD
b250ZW50WSBOT1RJRlkgY29udGVudFlDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVF1aWNrSXRl
bSAqY29udGVudEl0ZW0gUkVBRCBjb250ZW50SXRlbSBDT05TVEFOVCkKKyAgICBRX1BST1BFUlRZ
KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBmbGlja2FibGVDb250ZW50IFJFQUQg
ZmxpY2thYmxlQ29udGVudCkKKwogICAgIFFfUFJPUEVSVFkoUVdlYk5hdmlnYXRpb25IaXN0b3J5
KiBuYXZpZ2F0aW9uSGlzdG9yeSBSRUFEIG5hdmlnYXRpb25IaXN0b3J5IENPTlNUQU5UIEZJTkFM
KQogICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlQ29tcG9uZW50KiBhbGVydERpYWxvZyBSRUFE
IGFsZXJ0RGlhbG9nIFdSSVRFIHNldEFsZXJ0RGlhbG9nIE5PVElGWSBhbGVydERpYWxvZ0NoYW5n
ZWQpCiAgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVDb21wb25lbnQqIGNvbmZpcm1EaWFsb2cg
UkVBRCBjb25maXJtRGlhbG9nIFdSSVRFIHNldENvbmZpcm1EaWFsb2cgTk9USUZZIGNvbmZpcm1E
aWFsb2dDaGFuZ2VkKQpAQCAtMjQ3LDkgKzI3NywyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGlu
dCBzY2hlbWVEZWxlZ2F0ZXNfQ291bnQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1Vy
bFNjaGVtZURlbGVnYXRlPiopOwogICAgIHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRlc19DbGVh
cihRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+Kik7CiAg
ICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBzY2hl
bWVEZWxlZ2F0ZXMoKTsKKyAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gZmxp
Y2thYmxlQ29udGVudCgpOwogICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVy
KFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPik7CiAgICAgdm9p
ZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVwbHkqKTsKIAorICAg
IFFRdWlja0l0ZW0qIGNvbnRlbnRJdGVtKCk7CisKKyAgICBxcmVhbCBjb250ZW50V2lkdGgoKSBj
b25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRXaWR0aChxcmVhbCk7CisgICAgcXJlYWwgY29udGVu
dEhlaWdodCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudEhlaWdodChxcmVhbCk7CisgICAg
cXJlYWwgY29udGVudFgoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRYKHFyZWFsKTsKKyAg
ICBxcmVhbCBjb250ZW50WSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFkocXJlYWwpOwor
CiBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIHNldFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2
aW91cihib29sIGVuYWJsZSk7CiAgICAgdm9pZCBnb0JhY2tUbyhpbnQgaW5kZXgpOwpAQCAtMjU3
LDYgKzI5OSwxMCBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0
IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgorICAgIHZvaWQgY29udGVudFdpZHRoQ2hhbmdlZCgp
OworICAgIHZvaWQgY29udGVudEhlaWdodENoYW5nZWQoKTsKKyAgICB2b2lkIGNvbnRlbnRYQ2hh
bmdlZCgpOworICAgIHZvaWQgY29udGVudFlDaGFuZ2VkKCk7CiAgICAgdm9pZCBhbGVydERpYWxv
Z0NoYW5nZWQoKTsKICAgICB2b2lkIGNvbmZpcm1EaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBw
cm9tcHREaWFsb2dDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggZThlNmJmNy4uYTUyNDY1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3Au
aApAQCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemUoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSAwLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwKTsK
IAorICAgIHZvaWQgaW5pdGlhbGl6ZUZsaWNrYWJsZShRUXVpY2tXZWJWaWV3Kik7CiAgICAgdm9p
ZCBpbml0aWFsaXplVG91Y2goUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOwogICAgIHZvaWQgZW5hYmxl
TW91c2VFdmVudHMoKTsKQEAgLTE0OSw2ICsxNTAsOCBAQCBwcml2YXRlOgogCiAgICAgUVF1aWNr
V2ViVmlldyogcV9wdHI7CiAKKyAgICBRU2NvcGVkUG9pbnRlcjxRUXVpY2tJdGVtPiBmbGlja1By
b3ZpZGVyOworCiAgICAgUURlY2xhcmF0aXZlQ29tcG9uZW50KiBhbGVydERpYWxvZzsKICAgICBR
RGVjbGFyYXRpdmVDb21wb25lbnQqIGNvbmZpcm1EaWFsb2c7CiAgICAgUURlY2xhcmF0aXZlQ29t
cG9uZW50KiBwcm9tcHREaWFsb2c7CkBAIC0xNjAsNiArMTYzLDggQEAgcHJpdmF0ZToKICAgICBR
RmlsZURpYWxvZyogZmlsZURpYWxvZzsKICAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVm
IG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwogCisgICAgYm9vbCB1c2VEZWZhdWx0Q29udGVudFdp
ZHRoOworICAgIGJvb2wgdXNlRGVmYXVsdENvbnRlbnRIZWlnaHQ7CiAgICAgYm9vbCBpc1RyYW5z
aXRpb25pbmdUb05ld1BhZ2U7CiAgICAgYm9vbCBwYWdlSXNTdXNwZW5kZWQ7CiAgICAgYm9vbCBt
X25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0
X3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDFkMTRkMTguLmU2ZjRlOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1
aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0
cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMzI4LDggKzMyOCw4IEBA
IHZvaWQgdHN0X1FRdWlja1dlYlZpZXc6OnNjcm9sbFJlcXVlc3QoKQogICAgIC8vIENPTVBBUkUg
d2l0aCB0aGUgcG9zaXRpb24gcmVxdWVzdGVkIGluIHRoZSBodG1sCiAgICAgLy8gVXNlIHFSb3Vu
ZCBhcyB0aGF0IGlzIGFsc28gdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwb3NpdGlvbgogICAg
IC8vIGluIFdlYktpdC4KLSAgICBpbnQgeSA9IC1xUm91bmQoNTAgKiB3ZWJWaWV3KCktPnBhZ2Uo
KS0+Y29udGVudFNjYWxlKCkpOwotICAgIFFWRVJJRlkod2ViVmlldygpLT5wYWdlKCktPnBvcygp
LnkoKSA9PSB5KTsKKyAgICBpbnQgeSA9IHFSb3VuZCg1MCAqIHdlYlZpZXcoKS0+cGFnZSgpLT5j
b250ZW50U2NhbGUoKSk7CisgICAgUVZFUklGWSh3ZWJWaWV3KCktPmNvbnRlbnRZKCkgPT0geSk7
CiB9CiAKIFFUV0VCS0lUX0FQSV9URVNUX01BSU4odHN0X1FRdWlja1dlYlZpZXcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUuY3BwCmluZGV4IGQxMmViMGIuLjcxZDUwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUu
Y3BwCkBAIC0yNiw5ICsyNiw2IEBACiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5j
bHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSA8UVBvaW50Rj4KLSNpbmNsdWRlIDxR
U2Nyb2xsRXZlbnQ+Ci0jaW5jbHVkZSA8UVNjcm9sbFByZXBhcmVFdmVudD4KLSNpbmNsdWRlIDxR
U2Nyb2xsZXJQcm9wZXJ0aWVzPgogI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAjaW5jbHVkZSA8UVdo
ZWVsRXZlbnQ+CiAjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CkBAIC03NywxMCArNzQs
MTAgQEAgcHVibGljOgogICAgICAgICBpZiAoLS0oZW5naW5lLT5tX3N1c3BlbmRDb3VudCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZW1pdCBlbmdpbmUtPmNvbnRlbnRSZXN1bWVS
ZXF1ZXN0ZWQoKTsKLQogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhbGwgYXJvdW5k
IHRoZSB2aWV3cG9ydCB3aWxsIGJlIHJlcXVlc3RlZC4KICAgICAgICAgZW1pdCBlbmdpbmUtPnZp
ZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoUVBvaW50RigpKTsKKworICAgICAgICBlbWl0
IGVuZ2luZS0+Y29udGVudFJlc3VtZVJlcXVlc3RlZCgpOwogICAgIH0KIAogcHJpdmF0ZToKQEAg
LTExNCw0MSArMTExLDI0IEBAIGlubGluZSBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjppdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJiBjc3NSZWN0CiAgICAgcmV0dXJuIGl0
ZW1SZWN0OwogfQogCi1RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZShjb25zdCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCwgUVF1aWNrV2ViUGFn
ZSogY29udGVudCkKK1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBjb250
ZW50KQogICAgIDogbV92aWV3cG9ydCh2aWV3cG9ydCkKICAgICAsIG1fY29udGVudChjb250ZW50
KQogICAgICwgbV9zdXNwZW5kQ291bnQoMCkKKyAgICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZh
bHNlKQogICAgICwgbV9zY2FsZUFuaW1hdGlvbihuZXcgU2NhbGVBbmltYXRpb24odGhpcykpCiAg
ICAgLCBtX3BpbmNoU3RhcnRTY2FsZSgtMSkKIHsKICAgICByZXNldCgpOwogCi0gICAgUVNjcm9s
bGVyUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gc2Nyb2xsZXIoKS0+c2Nyb2xsZXJQcm9wZXJ0aWVz
KCk7Ci0KLSAgICAvLyBUaGUgUXRQYW5HZXN0dXJlUmVjb2duaXplciBpcyByZXNwb25zaWJsZSBm
b3IgcmVjb2duaXppbmcgdGhlIGdlc3R1cmUKLSAgICAvLyB0aHVzIHdlIG5lZWQgdG8gZGlzYWJs
ZSB0aGUgZHJhZyBzdGFydCBkaXN0YW5jZS4KLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJp
YyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpEcmFnU3RhcnREaXN0YW5jZSwgMC4wKTsKLQotICAgIC8v
IFNldCBzb21lIGRlZmF1bHQgUVNjcm9sbGVyIGNvbnN0cmFpbnMgdG8gbWltaWMgdGhlIHBoeXNp
Y3MgZW5naW5lIG9mIHRoZSBOOSBicm93c2VyLgotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0
cmljKFFTY3JvbGxlclByb3BlcnRpZXM6OkF4aXNMb2NrVGhyZXNob2xkLCAwLjY2KTsKLSAgICBw
cm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpTY3JvbGxpbmdD
dXJ2ZSwgUUVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6T3V0RXhwbykpOwotICAgIHByb3BlcnRp
ZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6OkRlY2VsZXJhdGlvbkZhY3Rv
ciwgMC4wNSk7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVy
dGllczo6TWF4aW11bVZlbG9jaXR5LCAwLjYzNSk7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxN
ZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6T3ZlcnNob290RHJhZ1Jlc2lzdGFuY2VGYWN0b3Is
IDAuMzMpOwotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRp
ZXM6Ok92ZXJzaG9vdFNjcm9sbERpc3RhbmNlRmFjdG9yLCAwLjMzKTsKLQotICAgIHNjcm9sbGVy
KCktPnNldFNjcm9sbGVyUHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKLQotICAgIGNvbm5lY3QobV9j
b250ZW50LCBTSUdOQUwod2lkdGhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKGl0ZW1TaXplQ2hhbmdl
ZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9jb250ZW50LCBTSUdO
QUwoaGVpZ2h0Q2hhbmdlZCgpKSwgdGhpcywgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpE
aXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKHdpZHRoQ2hh
bmdlZCgpKSwgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsK
KyAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKGhlaWdodENoYW5nZWQoKSksIFNMT1QoaXRl
bVNpemVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3Zp
ZXdwb3J0LCBTSUdOQUwobW92aW5nQ2hhbmdlZCgpKSwgU0xPVChjb250ZW50TW92aW5nQ2hhbmdl
ZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwogCiAgICAgY29ubmVjdChtX3NjYWxlQW5pbWF0
aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCiAgICAgICAgICAgICBTTE9UKHNj
YWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJlY3RDb25uZWN0aW9u
KTsKICAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQoUUFi
c3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAogICAg
ICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRp
b246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpEaXJlY3RDb25uZWN0
aW9uKTsKLQotICAgIGNvbm5lY3Qoc2Nyb2xsZXIoKSwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRU2Ny
b2xsZXI6OlN0YXRlKSksCi0gICAgICAgICAgICBTTE9UKHNjcm9sbFN0YXRlQ2hhbmdlZChRU2Ny
b2xsZXI6OlN0YXRlKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKIH0KIAogUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp+UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkKQEAgLTE3NSwx
MyArMTU1LDE5IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRJdGVtUmVj
dFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKIHsKICAgICBWaWV3cG9ydFVwZGF0ZURl
ZmVycmVyIGd1YXJkKHRoaXMpOwogCisgICAgaWYgKGl0ZW1SZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgcXJlYWwgaXRlbVNjYWxlID0gbV92aWV3cG9ydC0+d2lkdGgoKSAv
IGl0ZW1SZWN0LndpZHRoKCk7CiAKICAgICBtX2NvbnRlbnQtPnNldENvbnRlbnRTY2FsZShpdGVt
U2NhbGUpOwogCi0gICAgLy8gV2UgbmVlZCB0byBhbmltYXRlIHRoZSBjb250ZW50IGJ1dCB0aGUg
cG9zaXRpb24gcmVwcmVzZW50cyB0aGUgdmlld3BvcnQgaGVuY2Ugd2UgbmVlZCB0byBpbnZlcnQg
dGhlIHBvc2l0aW9uIGhlcmUuCi0gICAgLy8gVG8gYW5pbWF0ZSB0aGUgcG9zaXRpb24gdG9nZXRo
ZXIgd2l0aCB0aGUgc2NhbGUgd2UgbXVsdGlwbHkgdGhlIHBvc2l0aW9uIHdpdGggdGhlIGN1cnJl
bnQgc2NhbGU7Ci0gICAgbV9jb250ZW50LT5zZXRQb3MoLSBpdGVtUmVjdC50b3BMZWZ0KCkgKiBp
dGVtU2NhbGUpOworICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGgg
dGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxl
CisgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50IG9u
IHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1zKS4K
KyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fY29udGVudC0+cG9zKCkgKyAoaXRlbVJlY3QudG9w
TGVmdCgpICogaXRlbVNjYWxlKSk7CisKKyAgICBtX3ZpZXdwb3J0LT5zZXRDb250ZW50WChuZXdQ
b3NpdGlvbi54KCkpOworICAgIG1fdmlld3BvcnQtPnNldENvbnRlbnRZKG5ld1Bvc2l0aW9uLnko
KSk7CiB9CiAKIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXRlSXRlbVJl
Y3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCkBAIC0yMDAsNiArMTg2LDE0IEBAIGJv
b2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXRlSXRlbVJlY3RWaXNpYmxlKGNv
bnN0IFFSZWN0RiYgaXRlbVJlY3QpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpjb250ZW50TW92aW5nQ2hhbmdlZCgpCit7CisgICAgaWYg
KG1fdmlld3BvcnQtPmlzTW92aW5nKCkgJiYgIW1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIpCisgICAg
ICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVE
ZWZlcnJlcih0aGlzKSk7CisgICAgZWxzZQorICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVy
LmNsZWFyKCk7Cit9CisKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFu
aW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBR
QWJzdHJhY3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKIHsKICAgICBzd2l0Y2ggKG5l
d1N0YXRlKSB7CkBAIC0yMTUsNjAgKzIwOSw2IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246CiAg
ICAgfQogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsU3RhdGVD
aGFuZ2VkKFFTY3JvbGxlcjo6U3RhdGUgbmV3U3RhdGUpCi17Ci0gICAgc3dpdGNoIChuZXdTdGF0
ZSkgewotICAgIGNhc2UgUVNjcm9sbGVyOjpJbmFjdGl2ZToKLSAgICAgICAgLy8gRklYTUU6IFFT
Y3JvbGxlciBnZXRzIHdoZW4gZXZlbiB3aGVuIHRhcHBpbmcgd2hpbGUgaXQgaXMgc2Nyb2xsaW5n
LgotICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUVNjcm9sbGVyOjpQcmVzc2VkOgotICAgIGNhc2UgUVNjcm9sbGVyOjpEcmFn
Z2luZzoKLSAgICBjYXNlIFFTY3JvbGxlcjo6U2Nyb2xsaW5nOgotICAgICAgICBpZiAobV9zY3Jv
bGxVcGRhdGVEZWZlcnJlcikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3Njcm9sbFVw
ZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcykp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLWJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpldmVudChRRXZlbnQqIGV2ZW50
KQotewotICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpTY3Jv
bGxQcmVwYXJlOiB7Ci0gICAgICAgIFFTY3JvbGxQcmVwYXJlRXZlbnQqIHByZXBhcmVFdmVudCA9
IHN0YXRpY19jYXN0PFFTY3JvbGxQcmVwYXJlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIGNvbnN0
IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0LT5ib3VuZGluZ1JlY3QoKTsKLSAgICAg
ICAgY29uc3QgUVJlY3RGIGNvbnRlbnRSZWN0ID0gbV92aWV3cG9ydC0+bWFwUmVjdEZyb21JdGVt
KG1fY29udGVudCwgbV9jb250ZW50LT5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIGNvbnN0IFFS
ZWN0RiBwb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvckl0ZW1BdFNjYWxlKG1fY29udGVudC0+
Y29udGVudFNjYWxlKCkpOwotICAgICAgICBwcmVwYXJlRXZlbnQtPnNldENvbnRlbnRQb3NSYW5n
ZShwb3NSYW5nZSk7Ci0gICAgICAgIHByZXBhcmVFdmVudC0+c2V0Vmlld3BvcnRTaXplKHZpZXdw
b3J0UmVjdC5zaXplKCkpOwotCi0gICAgICAgIC8vIEFzIHdlIHdhbnQgdG8gcHVzaCB0aGUgY29u
dGVudHMgYW5kIG5vdCBhY3R1YWxseSBzY3JvbGwgaXQsIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSBw
b3NpdGlvbnMgaGVyZS4KLSAgICAgICAgcHJlcGFyZUV2ZW50LT5zZXRDb250ZW50UG9zKC1jb250
ZW50UmVjdC50b3BMZWZ0KCkpOwotICAgICAgICBwcmVwYXJlRXZlbnQtPmFjY2VwdCgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBRRXZlbnQ6OlNjcm9sbDogewotICAg
ICAgICBRU2Nyb2xsRXZlbnQqIHNjcm9sbEV2ZW50ID0gc3RhdGljX2Nhc3Q8UVNjcm9sbEV2ZW50
Kj4oZXZlbnQpOwotICAgICAgICBRUG9pbnRGIG5ld1BvcyA9IC1zY3JvbGxFdmVudC0+Y29udGVu
dFBvcygpIC0gc2Nyb2xsRXZlbnQtPm92ZXJzaG9vdERpc3RhbmNlKCk7Ci0gICAgICAgIGlmICht
X2NvbnRlbnQtPnBvcygpICE9IG5ld1BvcykgewotICAgICAgICAgICAgUVBvaW50RiBjdXJyZW50
UG9zSW5DU1NDb29yZGluYXRlcyA9IG1fdmlld3BvcnQtPm1hcFRvV2ViQ29udGVudChtX2NvbnRl
bnQtPnBvcygpKTsKLSAgICAgICAgICAgIFFQb2ludEYgbmV3UG9zSW5DU1NDb29yZGluYXRlcyA9
IG1fdmlld3BvcnQtPm1hcFRvV2ViQ29udGVudChuZXdQb3MpOwotCi0gICAgICAgICAgICAvLyBU
aGlzIG11c3QgYmUgZW1pdHRlZCBiZWZvcmUgdmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQgc28gdGhh
dCB0aGUgd2ViIHByb2Nlc3Mga25vd3Mgd2hlcmUgdG8gbG9vayBmb3IgdGlsZXMuCi0gICAgICAg
ICAgICBlbWl0IHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY3VycmVudFBvc0luQ1NT
Q29vcmRpbmF0ZXMgLSBuZXdQb3NJbkNTU0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgIG1fY29u
dGVudC0+c2V0UG9zKG5ld1Bvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gUU9i
amVjdDo6ZXZlbnQoZXZlbnQpOwotfQotCiBzdGF0aWMgaW5saW5lIFFQb2ludEYgYm91bmRQb3Np
dGlvbihjb25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
Y29uc3QgUVBvaW50RiYgbWF4UG9zaXRpb24pCiB7CiAgICAgcmV0dXJuIFFQb2ludEYocUJvdW5k
KG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQb3NpdGlvbi54KCkpLApAQCAtMzAx
LDcgKzI0MSw5IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVlbEV2ZW50
KFFXaGVlbEV2ZW50KiBldikKICAgICAgICAgbmV3UG9zLnJ5KCkgKz0gZGVsdGE7CiAKICAgICBR
UmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JJdGVtQXRTY2FsZShtX2NvbnRl
bnQtPmNvbnRlbnRTY2FsZSgpKTsKLSAgICBtX2NvbnRlbnQtPnNldFBvcygtYm91bmRQb3NpdGlv
bihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIG5ld1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQo
KSkpOworICAgIFFQb2ludEYgbmV3UG9zaXRpb24gPSAtYm91bmRQb3NpdGlvbihlbmRQb3NSYW5n
ZS50b3BMZWZ0KCksIG5ld1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisgICAgbV92
aWV3cG9ydC0+c2V0Q29udGVudFgobmV3UG9zaXRpb24ueCgpKTsKKyAgICBtX3ZpZXdwb3J0LT5z
ZXRDb250ZW50WShuZXdQb3NpdGlvbi55KCkpOwogfQogCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGFnZVBvc2l0aW9uUmVxdWVzdChjb25zdCBRUG9pbnQmIHBhZ2VQb3NpdGlv
bikKQEAgLTQwNCw3ICszNDYsMTYgQEAgYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OmVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5kYXJ5KGJvb2wgaW1tZWQKICAgICBpZiAo
c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgfHwgc2NhbGVBbmltYXRpb25BY3RpdmUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNjYWxlRnJv
bUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShjdXJyZW50Q1NTU2NhbGUoKSkpOworICAgIHFyZWFs
IGNzc1NjYWxlID0gY3VycmVudENTU1NjYWxlKCk7CisgICAgcXJlYWwgYm91bmRlZENTU1NjYWxl
ID0gaW5uZXJCb3VuZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOworCisgICAgaWYgKGNzc1NjYWxlID09
IGJvdW5kZWRDU1NTY2FsZSkgeworICAgICAgICAvLyBMZXQgdGhlIGZsaWNrYWJsZSBtb3ZlIHRo
ZSBjb250ZW50IGJhY2sgaW50byB2YWxpZCBib3VuZGFyaWVzIGlmIHRoZSBzY2FsZSBpcyB2YWxp
ZC4KKyAgICAgICAgbV92aWV3cG9ydC0+cmV0dXJuVG9Cb3VuZHMoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNjYWxlRnJvbUNT
Uyhib3VuZGVkQ1NTU2NhbGUpOwogCiAgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1f
dmlld3BvcnQtPmJvdW5kaW5nUmVjdCgpOwogICAgIFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0g
dmlld3BvcnRSZWN0LmNlbnRlcigpOwpAQCAtNDIzLDE0ICszNzQsNTEgQEAgYm9vbCBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OmVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5kYXJ5
KGJvb2wgaW1tZWQKICAgICByZXR1cm4gIWFuaW1hdGVJdGVtUmVjdFZpc2libGUoZW5kVmlzaWJs
ZUNvbnRlbnRSZWN0KTsKIH0KIAordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Omhh
bmRsZUlucHV0KFFFdmVudDo6VHlwZSBldmVudFR5cGUsIGNvbnN0IFFQb2ludEYmIHZpZXdwb3J0
UG9zaXRpb24sIHF1aW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKKworICAgIC8vIEZsaWNrYWJsZSBjdXJyZW50bHkg
ZG9lcyBub3QgaGFuZGxlIHRvdWNoIGV2ZW50cyBkaXJlY3RseSwgc28gd2UgbmVlZCB0byBjb25z
dHJ1Y3QgbW91c2UgZXZlbnRzLgorICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CisgICAgY2FzZSBR
RXZlbnQ6OlRvdWNoQmVnaW46IHsKKyAgICAgICAgUU1vdXNlRXZlbnQgZXZlbnQoUUV2ZW50OjpN
b3VzZUJ1dHRvblByZXNzLCB2aWV3cG9ydFBvc2l0aW9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb0J1
dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOworICAgICAgICBldmVudC5zZXRUaW1lc3RhbXAodWxvbmco
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpKTsKKyAgICAgICAgbV92aWV3cG9ydC0+aGFuZGxlSW5wdXQo
JmV2ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVw
ZGF0ZTogeworICAgICAgICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlTW92ZSwgdmll
d3BvcnRQb3NpdGlvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVy
KTsKKyAgICAgICAgZXZlbnQuc2V0VGltZXN0YW1wKHVsb25nKGV2ZW50VGltZXN0YW1wTWlsbGlz
KSk7CisKKyAgICAgICAgZW1pdCB2aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKG1fbGFz
dFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzIC0gdmlld3BvcnRQb3NpdGlvbik7CisK
KyAgICAgICAgbV92aWV3cG9ydC0+aGFuZGxlSW5wdXQoJmV2ZW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUUV2ZW50OjpUb3VjaEVuZDogeworICAgICAgICBRTW91c2VFdmVu
dCBldmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSwgdmlld3BvcnRQb3NpdGlvbiwgUXQ6
Ok5vQnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKKyAgICAgICAgZXZlbnQu
c2V0VGltZXN0YW1wKHVsb25nKGV2ZW50VGltZXN0YW1wTWlsbGlzKSk7CisgICAgICAgIG1fdmll
d3BvcnQtPmhhbmRsZUlucHV0KCZldmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB2aWV3
cG9ydFBvc2l0aW9uOworfQorCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cmVz
ZXQoKQogewogICAgIEFTU0VSVCghbV9zdXNwZW5kQ291bnQpOwogCiAgICAgbV9oYWRVc2VySW50
ZXJhY3Rpb24gPSBmYWxzZTsKIAotICAgIHNjcm9sbGVyKCktPnN0b3AoKTsKICAgICBtX3NjYWxl
QW5pbWF0aW9uLT5zdG9wKCk7CisgICAgbV92aWV3cG9ydC0+cmV0dXJuVG9Cb3VuZHMoKTsKKyAg
ICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKKyAgICBtX3Njcm9sbFVwZGF0ZURlZmVy
cmVyLmNsZWFyKCk7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphcHBs
eUNvbnN0cmFpbnRzKGNvbnN0IENvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKQEAgLTQ1OSw0NCAr
NDQ3LDQwIEBAIHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Y3VycmVudENTU1Nj
YWxlKCkKIAogYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1hdGlv
bkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgUVNjcm9sbGVyKiBzY3JvbGxlciA9IGNvbnN0X2Nhc3Q8
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKj4odGhpcyktPnNjcm9sbGVyKCk7Ci0gICAgcmV0
dXJuIHNjcm9sbGVyLT5zdGF0ZSgpID09IFFTY3JvbGxlcjo6U2Nyb2xsaW5nOworICAgIHJldHVy
biBtX3ZpZXdwb3J0LT5pc0ZsaWNraW5nKCk7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjppbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24oKQogewotICAgIC8vIFN0b3BwaW5n
IHRoZSBzY3JvbGxlciBpbW1lZGlhdGVseSBzdG9wcyBraW5ldGljIHNjcm9sbGluZyBhbmQgaWYg
dGhlIHZpZXcgaXMgb3V0IG9mIGJvdW5kcyBpdAotICAgIC8vIGlzIG1vdmVkIGluc2lkZSB2YWxp
ZCBib3VuZHMgaW1tZWRpYXRlbHkgYXMgd2VsbC4gVGhpcyBpcyB0aGUgYmVoYXZpb3IgdGhhdCB3
ZSB3YW50LgotICAgIHNjcm9sbGVyKCktPnN0b3AoKTsKKyAgICAvLyBJbW1lZGlhdGVseSBzdG9w
IGtpbmV0aWMgc2Nyb2xsaW5nIGFuZCBpZiB0aGUgdmlldyBpcyBvdXQgb2YgYm91bmRzCisgICAg
Ly8gbW92ZSBpdCBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMgaW1tZWRpYXRlbHkgYXMgd2VsbC4K
KyAgICBtX3ZpZXdwb3J0LT5yZXR1cm5Ub0JvdW5kcygpOwogfQogCiBib29sIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgUVNjcm9s
bGVyKiBzY3JvbGxlciA9IGNvbnN0X2Nhc3Q8UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKj4o
dGhpcyktPnNjcm9sbGVyKCk7Ci0gICAgcmV0dXJuIHNjcm9sbGVyLT5zdGF0ZSgpID09IFFTY3Jv
bGxlcjo6UHJlc3NlZCB8fCBzY3JvbGxlci0+c3RhdGUoKSA9PSBRU2Nyb2xsZXI6OkRyYWdnaW5n
OworICAgIHJldHVybiBtX3ZpZXdwb3J0LT5pc0RyYWdnaW5nKCk7CiB9CiAKIHZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiAg
dmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAg
bV9oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwotICAgIHNjcm9sbGVyKCktPmhhbmRsZUlucHV0
KFFTY3JvbGxlcjo6SW5wdXRQcmVzcywgIHZpZXdwb3J0VG91Y2hQb2ludCwgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpOworICAgIGhhbmRsZUlucHV0KFFFdmVudDo6VG91Y2hCZWdpbiwgdmlld3BvcnRU
b3VjaFBvaW50LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiAg
dmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7Ci0gICAg
c2Nyb2xsZXIoKS0+aGFuZGxlSW5wdXQoUVNjcm9sbGVyOjpJbnB1dE1vdmUsICB2aWV3cG9ydFRv
dWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBoYW5kbGVJbnB1dChRRXZlbnQ6
OlRvdWNoVXBkYXRlLCB2aWV3cG9ydFRvdWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
IH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVDYW5jZWxs
ZWQoKQogewotICAgIC8vIFN0b3BwaW5nIHRoZSBzY3JvbGxlciBpbW1lZGlhdGVseSBzdG9wcyBr
aW5ldGljIHNjcm9sbGluZyBhbmQgaWYgdGhlIHZpZXcgaXMgb3V0IG9mIGJvdW5kcyBpdAotICAg
IC8vIGlzIG1vdmVkIGluc2lkZSB2YWxpZCBib3VuZHMgaW1tZWRpYXRlbHkgYXMgd2VsbC4gVGhp
cyBpcyB0aGUgYmVoYXZpb3IgdGhhdCB3ZSB3YW50LgotICAgIHNjcm9sbGVyKCktPnN0b3AoKTsK
KyAgICBpbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24oKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRU
b3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7Ci0gICAgc2Nyb2xsZXIo
KS0+aGFuZGxlSW5wdXQoUVNjcm9sbGVyOjpJbnB1dFJlbGVhc2UsICB2aWV3cG9ydFRvdWNoUG9p
bnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBoYW5kbGVJbnB1dChRRXZlbnQ6OlRvdWNo
RW5kLCB2aWV3cG9ydFRvdWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKIH0KIAogYm9v
bCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29u
c3QKQEAgLTU1Miw3ICs1MzYsOCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaAogICAgIGNvbnN0
IFFQb2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMg
LSBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKICAgICBtX2xhc3RQaW5j
aENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzOwogCi0gICAgbV9jb250ZW50LT5zZXRQb3MobV9jb250ZW50LT5wb3MoKSArIHBvc2l0
aW9uRGlmZik7CisgICAgbV92aWV3cG9ydC0+c2V0Q29udGVudFgobV92aWV3cG9ydC0+Y29udGVu
dFgoKSAtIHBvc2l0aW9uRGlmZi54KCkpOworICAgIG1fdmlld3BvcnQtPnNldENvbnRlbnRZKG1f
dmlld3BvcnQtPmNvbnRlbnRZKCkgLSBwb3NpdGlvbkRpZmYueSgpKTsKIH0KIAogdm9pZCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUVuZGVkKCkKQEAgLTU4Myw3ICs1
NjgsMTAgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQ29udGVudChj
b25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW4KICAgICBRUG9pbnRGIG9sZFBpbmNoQ2Vu
dGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NT
Q29vcmRpbmF0ZXMpOwogICAgIG1fY29udGVudC0+c2V0Q29udGVudFNjYWxlKGl0ZW1TY2FsZUZy
b21DU1MoY3NzU2NhbGUpKTsKICAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9
IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwot
ICAgIG1fY29udGVudC0+c2V0UG9zKG1fY29udGVudC0+cG9zKCkgLSAobmV3UGluY2hDZW50ZXJP
blZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7CisKKyAgICBRUG9pbnRGIG5l
d1Bvc2l0aW9uKG1fdmlld3BvcnQtPmNvbnRlbnRJdGVtKCktPnBvcygpIC0gKG5ld1BpbmNoQ2Vu
dGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOworICAgIG1fdmlld3Bv
cnQtPnNldENvbnRlbnRYKC1uZXdQb3NpdGlvbi54KCkpOworICAgIG1fdmlld3BvcnQtPnNldENv
bnRlbnRZKC1uZXdQb3NpdGlvbi55KCkpOwogfQogCiAjaW5jbHVkZSAibW9jX1F0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgKaW5kZXggMTc5MGM3Mi4uODdj
ZGYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaApAQCAtMjMsOCArMjMsOCBAQAogI2RlZmluZSBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmVfaAogCiAjaW5jbHVkZSAiT3duUHRyLmgiCi0jaW5jbHVk
ZSA8UVNjcm9sbGVyPgogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdENv
cmUvUUV2ZW50PgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgogI2luY2x1ZGUgPFF0Q29yZS9R
UmVjdEY+CiAjaW5jbHVkZSA8UXRDb3JlL1FWYXJpYW50PgpAQCAtNDYsNyArNDYsNyBAQCBjbGFz
cyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9P
QkpFQ1QKIAogcHVibGljOgotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShjb25zdCBR
UXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOworICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZShRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOwogICAgIH5RdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUoKTsKIAogICAgIHN0cnVjdCBDb25zdHJhaW50cyB7CkBAIC02Nyw4
ICs2Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgUVNpemUgbGF5b3V0U2l6ZTsKICAgICB9OwogCi0g
ICAgYm9vbCBldmVudChRRXZlbnQqKTsKLQogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGFw
cGx5Q29uc3RyYWludHMoY29uc3QgQ29uc3RyYWludHMmKTsKIApAQCAtMTExLDcgKzEwOSw3IEBA
IHByaXZhdGUgUV9TTE9UUzoKICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgb2YgY29udGVudCB0
aGF0IGFyZSBub3QgZHJpdmVuIGJ5IHVzLCBsaWtlIHRoZSBwYWdlIHJlc2l6aW5nIGl0c2VsZi4K
ICAgICB2b2lkIGl0ZW1TaXplQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBzY3JvbGxTdGF0ZUNoYW5n
ZWQoUVNjcm9sbGVyOjpTdGF0ZSk7CisgICAgdm9pZCBjb250ZW50TW92aW5nQ2hhbmdlZCgpOwog
ICAgIHZvaWQgc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpT
dGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSk7CiAgICAgdm9pZCBzY2FsZUFuaW1hdGlv
blZhbHVlQ2hhbmdlZChRVmFyaWFudCB2YWx1ZSkgeyBzZXRJdGVtUmVjdFZpc2libGUodmFsdWUu
dG9SZWN0RigpKTsgfQogCkBAIC0xMzEsMTEgKzEyOSw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzLCBxcmVh
bCBjc3NTY2FsZSk7CiAKLSAgICAvLyBBcyBsb25nIGFzIHRoZSBvYmplY3QgZXhpc3RzIHRoaXMg
ZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIFFTY3JvbGxlciBpbnN0YW5jZS4K
LSAgICBRU2Nyb2xsZXIqIHNjcm9sbGVyKCkgeyByZXR1cm4gUVNjcm9sbGVyOjpzY3JvbGxlcih0
aGlzKTsgfQotCisgICAgdm9pZCBoYW5kbGVJbnB1dChRRXZlbnQ6OlR5cGUgZXZlbnRUeXBlLCBj
b25zdCBRUG9pbnRGJiB2aWV3cG9ydFBvc2l0aW9uLCBxdWludDY0IGV2ZW50VGltZXN0YW1wTWls
bGlzKTsKIAotICAgIGNvbnN0IFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnQ7CisgICAg
UVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydDsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25z
dCBtX2NvbnRlbnQ7CiAKICAgICBDb25zdHJhaW50cyBtX2NvbnN0cmFpbnRzOwotLSAKMS43Ljgu
MwoK
</data>
<flag name="review"
          id="123906"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123940</attachid>
            <date>2012-01-25 07:56:41 -0800</date>
            <delta_ts>2012-01-27 05:58:58 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Qt-WK2-WebView-should-use-Flickable-instead-of-QScro.patch</filename>
            <type>text/plain</type>
            <size>42873</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSBjYWUwOWZhNmY5MTdkOGIzMjU1NTNlNDFmMGY4MDg2NjkwYzk3MzZjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFdlZCwgMjUgSmFuIDIwMTIgMTU6NTM6NDAgKzAxMDAKU3ViamVjdDogW1BBVENIXSBb
UXRdW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJsZSBpbnN0ZWFkIG9mIFFTY3JvbGxl
cgogdG8gaGFuZGxlIHBvc2l0aW9uaW5nCgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5MyArKysrKysrKwogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCAgfCAgIDI1ICsrLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCAgfCAgMjIxICsrKysrKysr
KysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXdfcC5oICB8ICAgNDcgKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3BfcC5oICAgfCAgIDEyICsKIC4uLi9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9x
cXVpY2t3ZWJ2aWV3LmNwcCAgIHwgICAgNCArLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1
cmVSZWNvZ25pemVyLmNwcCAgICAgICAgfCAgICA4ICstCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oICB8ICAgIDIgKy0KIC4uLi9VSVByb2Nlc3MvcXQv
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCAgIHwgIDE3NCArKysrKystLS0tLS0tLS0t
CiAuLi4vVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oICAgICB8ICAg
MjEgKy0tCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cCB8ICAgMTAgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDQ3OCBpbnNlcnRpb25zKCspLCAxMzkgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI3MDg0YWMuLmJmOTFhMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw5NiBAQAorMjAxMi0wMS0yNSAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5v
a2lhLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJs
ZSBpbnN0ZWFkIG9mIFFTY3JvbGxlciB0byBoYW5kbGUgcG9zaXRpb25pbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQgV2ViVmlldyBp
bXBsZW1lbnRhdGlvbiB1c2VzIFFTY3JvbGxlciB0byBtYW5hZ2UgcG9zaXRpb25pbmcgYnV0IG90
aGVyIHNpbWlsYXIKKyAgICAgICAgaXRlbXMgaW4gUU1MIChpZS4gTGlzdFZpZXcsIEdyaWRWaWV3
KSB1c2UgRmxpY2thYmxlIGFzIHRoZWlyIGJhc2UgY2xhc3MuCisgICAgICAgIFNpbmNlIFFTY3Jv
bGxlciB3aWxsIGJlIGRyb3BwZWQgZnJvbSBRdDUgdGhpcyBwYXRjaCByZW1vdmVzIHRoZSBRU2Ny
b2xsZXIgY29kZQorICAgICAgICBhbmQgcmVkaXJlY3RzIHBhbiBnZXN0dXJlcyB0byBhIGR5bmFt
aWNhbGx5IGNyZWF0ZWQgaW50ZXJuYWwgRmxpY2thYmxlIGluc3RhbmNlIChmbGlja1Byb3ZpZGVy
KQorICAgICAgICB3aGljaCBoYW5kbGVzIHRoZSBwb3NpdGlvbmluZy4KKworICAgICAgICBUaGlz
IGltcGxlbWVudGF0aW9uIG9ubHkgdXNlcyBwdWJsaWMgUU1MIEFQSSBhbmQgZG9lcyBub3QgZGVw
ZW5kIG9uIGRlY2xhcmF0aXZlLXByaXZhdGUuCisgICAgICAgIEl0IHByb3BhZ2F0ZXMgYSBzbWFs
bCBzdWJzZXQgb2YgdGhlIEZsaWNrYWJsZSBBUEkgYXMgdGhlIHB1YmxpYyBBUEkgb2YgdGhlIFdl
YlZpZXcuCisgICAgICAgIFRoaXMgbWluaW1hbGlzdGljIEFQSSBpcyBhY2Nlc3NpYmxlIHZpYSB0
aGUgZXhwZXJpbWVudGFsIGV4dGVuc2lvbiBhbmQgbWFrZXMgaXQgcG9zc2libGUKKyAgICAgICAg
aW4gUU1MIHRvIHBsYWNlIGFkZGl0aW9uYWwgaXRlbXMgKHN1Y2ggYXMgdG9vbGJhcnMsIHNjcm9s
bCBpbmRpY2F0b3JzIGFuZCBmbG9hdGluZyBtZW51cykKKyAgICAgICAgYXJvdWQgdGhlIHBhZ2Uu
CisgICAgICAgIFRoZXNlIGl0ZW1zIGNhbiB1c2UgYW5jaG9yaW5nIGFuZCBiaW5kaW5nIGZvciBw
b3NpdGlvbmluZyBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZGVwZW5kcyBob3dldmVyIG9uIHRoZSBhdXRvbWF0aWMgdG91Y2gtPm1vdXNlIGV2ZW50
IHN5bnRoZXRpemF0aW9uIG9mIFF0NS4KKyAgICAgICAgVGhlIHRvdWNoIGV2ZW50cyBzZW50IHRv
IHRoZSBmbGlja1Byb3ZpZGVyIGFyZSB0cmFuc2xhdGVkIHRvIG1vdXNlIGV2ZW50cyBhdXRvbWF0
aWNhbGx5CisgICAgICAgIGFzIGxvbmcgYXMgdGhlIEZsaWNrYWJsZSBkb2VzIG5vdCBoYW5kbGUg
dG91Y2ggZXZlbnRzIGRpcmVjdGx5LgorCisgICAgICAgIEFmdGVyIHRoaXMgY2hhbmdlIFF0V2Vi
S2l0MiBkb2VzIG5vIGxvbmdlciBkZXBlbmQgb24gUXRXaWRnZXRzIGFuZCB0aGlzIGRlcGVuZGVu
Y3kgY2FuIGJlCisgICAgICAgIHJlbW92ZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisKKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVp
Y2tXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZh
dGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnRy
YW5zZm9ybVRvSXRlbSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0
ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cmVhZEZsaWNrYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjp3cml0ZUZsaWNrYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmhhbmRsZUlucHV0KToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OnJldHVyblRvQm91bmRzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNhbmNl
bEZsaWNrKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNvbnRlbnRJdGVtKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXc6OmlzTW92aW5nKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmlzRHJh
Z2dpbmcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aXNGbGlja2luZyk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3Ojpjb250ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6c2V0
Q29udGVudFdpZHRoKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNvbnRlbnRIZWlnaHQpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlldzo6c2V0Q29udGVudEhlaWdodCk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3Ojpjb250ZW50WCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50
WCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpjb250ZW50WSk6CisgICAgICAgIChRUXVpY2tX
ZWJWaWV3OjpzZXRDb250ZW50WSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpjb250ZW50UG9z
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnNldENvbnRlbnRQb3MpOgorICAgICAgICAoUVF1
aWNrV2ViVmlldzo6dXBkYXRlQ29udGVudFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1By
aXZhdGU6OmluaXRpYWxpemVUb3VjaCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
aW5pdGlhbGl6ZUZsaWNrYWJsZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6dXBk
YXRlVG91Y2hWaWV3cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRh
bDo6ZmxpY2thYmxlQ29udGVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
Ojpjb250ZW50SXRlbSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250
ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVu
dFdpZHRoKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRIZWln
aHQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudEhlaWdo
dCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50WCk6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WCk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50WSk6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXdfcF9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2
aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHRzdF9RUXVpY2tXZWJWaWV3Ojpz
Y3JvbGxSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29n
bml6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnNldEl0ZW1SZWN0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6Y29udGVudE1vdmluZ0NoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OndoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnJlc2V0KToKKyAgICAgICAgKFdl
YktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphcHBseUNvbnN0cmFpbnRzKToKKyAg
ICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxBbmltYXRp
b25BY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCk6
CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVy
ZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpw
aW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpzY2FsZUNvbnRlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
ZG9uZVdpdGhUb3VjaEV2ZW50KToKKwogMjAxMi0wMS0yNCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAg
PHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV0syXSBGaW5kQ29udHJvbGxlciBzaG91
bGQgbm90IGFzc3VtZSB0aGF0IHBvcnRzIGRvIG5vdCB3YW50IHRvIGhpZ2hsaWdodCB0ZXh0IG1h
dGNoZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2UuY3BwCmluZGV4IGE4YzE3MTguLmI3ZDY3NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAtNTUsMTEgKzU1LDE1IEBAIHZv
aWQgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0
cnksIGNvbnN0IFFSZWN0RiYgb2xkCiB7CiAgICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2Vk
KG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRyeSk7CiAKLSAgICBpZiAoIWQtPnVzZVRyYWRpdGlvbmFs
RGVza3RvcEJlaGF2aW91cikKKyAgICBpZiAobmV3R2VvbWV0cnkuaXNFbXB0eSgpIHx8IG5ld0dl
b21ldHJ5LnNpemUoKSA9PSBvbGRHZW9tZXRyeS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpKQotICAgICAg
ICBkLT5zZXREcmF3aW5nQXJlYVNpemUobmV3R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsKKyAg
ICBpZiAoIWQtPnVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikgeworICAgICAgICBkLT52
aWV3cG9ydEl0ZW0tPnVwZGF0ZUNvbnRlbnRTaXplKG5ld0dlb21ldHJ5LnNpemUoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkLT5zZXREcmF3aW5nQXJlYVNpemUobmV3R2VvbWV0
cnkuc2l6ZSgpLnRvU2l6ZSgpKTsKIH0KIAogUVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlja1dl
YlBhZ2VQcml2YXRlKFFRdWlja1dlYlBhZ2UqIHEsIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRl
bSkKQEAgLTEwOSw3ICsxMTMsNyBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRv
Q3VycmVudEdMQ29udGV4dCgpCiAgICAgdHJhbnNmb3JtLnNjYWxlKGNvbnRlbnRTY2FsZSwgY29u
dGVudFNjYWxlKTsKIAogICAgIGZsb2F0IG9wYWNpdHkgPSBjb21wdXRlRWZmZWN0aXZlT3BhY2l0
eShxKTsKLSAgICBRUmVjdEYgY2xpcFJlY3QgPSBxLT5wYXJlbnRJdGVtKCktPm1hcFJlY3RUb1Nj
ZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91bmRpbmdSZWN0KCkpOworICAgIFFSZWN0RiBjbGlwUmVj
dCA9IHZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvU2NlbmUodmlld3BvcnRJdGVtLT5ib3VuZGluZ1Jl
Y3QoKSk7CiAKICAgICBpZiAoIWNsaXBSZWN0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjgwLDcgKzI4NCwxOCBAQCBRVHJhbnNmb3JtIFFRdWlja1dlYlBhZ2U6OnRyYW5zZm9ybUZy
b21JdGVtKCkgY29uc3QKIAogUVRyYW5zZm9ybSBRUXVpY2tXZWJQYWdlOjp0cmFuc2Zvcm1Ub0l0
ZW0oKSBjb25zdAogewotICAgIHJldHVybiBRVHJhbnNmb3JtKGQtPmNvbnRlbnRTY2FsZSwgMCwg
MCwgMCwgZC0+Y29udGVudFNjYWxlLCAwLCB4KCksIHkoKSwgMSk7CisgICAgcXJlYWwgeFBvcyA9
IHgoKTsKKyAgICBxcmVhbCB5UG9zID0geSgpOworCisgICAgaWYgKCFkLT51c2VUcmFkaXRpb25h
bERlc2t0b3BCZWhhdmlvdXIpIHsKKyAgICAgICAgLy8gRmxpY2thYmxlIG1vdmVzIGl0cyBjb250
ZW50SXRlbSBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdCBwb3NpdGlvbiBpbnRvIGFjY291bnQsCisg
ICAgICAgIC8vIGFzIHdlbGwgYXMgdGhlIHBvdGVudGlhbCBkaXNwbGFjZW1lbnQgb2YgdGhlIHBh
Z2Ugb24gdGhlIGNvbnRlbnRJdGVtCisgICAgICAgIC8vIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBR
TUwgaXRlbXMuCisgICAgICAgIHhQb3MgKz0gcGFyZW50SXRlbSgpLT54KCk7CisgICAgICAgIHlQ
b3MgKz0gcGFyZW50SXRlbSgpLT55KCk7CisgICAgfQorCisgICAgcmV0dXJuIFFUcmFuc2Zvcm0o
ZC0+Y29udGVudFNjYWxlLCAwLCAwLCAwLCBkLT5jb250ZW50U2NhbGUsIDAsIHhQb3MsIHlQb3Ms
IDEpOwogfQogCiB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4
IGVhODU0NDIuLjhhMmRhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtNDUsMTggKzQ1LDIxIEBACiAjaW5jbHVkZSAicXdl
YnZpZXdwb3J0aW5mb19wLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8UURlY2xhcmF0aXZlQ29tcG9uZW50PgogI2luY2x1ZGUg
PFFEZWNsYXJhdGl2ZUVuZ2luZT4KICNpbmNsdWRlIDxRRmlsZURpYWxvZz4KICNpbmNsdWRlIDxR
dFF1aWNrL1FRdWlja0NhbnZhcz4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V0tPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiAg
ICAgOiBxX3B0cih2aWV3cG9ydCkKKyAgICAsIGZsaWNrUHJvdmlkZXIoMCkKICAgICAsIGFsZXJ0
RGlhbG9nKDApCiAgICAgLCBjb25maXJtRGlhbG9nKDApCiAgICAgLCBwcm9tcHREaWFsb2coMCkK
QEAgLTY0LDYgKzY3LDggQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2
YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogICAgICwgY2VydGlmaWNhdGVWZXJpZmljYXRp
b25EaWFsb2coMCkKICAgICAsIGl0ZW1TZWxlY3RvcigwKQogICAgICwgcG9zdFRyYW5zaXRpb25T
dGF0ZShhZG9wdFB0cihuZXcgUG9zdFRyYW5zaXRpb25TdGF0ZSh0aGlzKSkpCisgICAgLCB1c2VQ
YWdlV2lkdGhBc0NvbnRlbnRXaWR0aCh0cnVlKQorICAgICwgdXNlUGFnZUhlaWdodEFzQ29udGVu
dEhlaWdodCh0cnVlKQogICAgICwgaXNUcmFuc2l0aW9uaW5nVG9OZXdQYWdlKGZhbHNlKQogICAg
ICwgcGFnZUlzU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJs
ZWQoZmFsc2UpCkBAIC0xMzAsNiArMTM1LDEzMyBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRl
OjpkaXNhYmxlTW91c2VFdmVudHMoKQogICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKGZhbHNl
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cmVh
ZEZsaWNrYWJsZVByb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGZsaWNrUHJvdmlkZXIpOworICAgIHJldHVybiBmbGlja1Byb3ZpZGVyLT5wcm9wZXJ0eShuYW1l
KS52YWx1ZTxUPigpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjp3cml0ZUZsaWNr
YWJsZVByb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQoZmxpY2tQcm92aWRlcik7CisgICAgZmxpY2tQcm92aWRlci0+c2V0UHJvcGVy
dHkobmFtZSwgdmFsdWUpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OmhhbmRsZUlucHV0KFFJ
bnB1dEV2ZW50ICpldmVudCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJU
KGQtPmZsaWNrUHJvdmlkZXIpOworICAgIHFBcHAtPm5vdGlmeShkLT5mbGlja1Byb3ZpZGVyLCBl
dmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6cmV0dXJuVG9Cb3VuZHMoKQoreworICAg
IFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7CisgICAg
UU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChkLT5mbGlja1Byb3ZpZGVyLCAicmV0dXJuVG9Cb3Vu
ZHMiLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6Y2Fu
Y2VsRmxpY2soKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+Zmxp
Y2tQcm92aWRlcik7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChkLT5mbGlja1Byb3Zp
ZGVyLCAiY2FuY2VsRmxpY2siLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK1FRdWlja0l0
ZW0qIFFRdWlja1dlYlZpZXc6OmNvbnRlbnRJdGVtKCkKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNr
V2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnJlYWRGbGlja2FibGVQcm9wZXJ0eTxRUXVpY2tJdGVt
Kj4oImNvbnRlbnRJdGVtIik7Cit9CisKK2Jvb2wgUVF1aWNrV2ViVmlldzo6aXNNb3ZpbmcoKSBj
b25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cmVh
ZEZsaWNrYWJsZVByb3BlcnR5PGJvb2w+KCJtb3ZpbmciKTsKK30KKworYm9vbCBRUXVpY2tXZWJW
aWV3Ojppc0RyYWdnaW5nKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7
CisgICAgcmV0dXJuIGQtPnJlYWRGbGlja2FibGVQcm9wZXJ0eTxib29sPigiZHJhZ2dpbmciKTsK
K30KKworYm9vbCBRUXVpY2tXZWJWaWV3Ojppc0ZsaWNraW5nKCkgY29uc3QKK3sKKyAgICBRX0Qo
Y29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnJlYWRGbGlja2FibGVQcm9wZXJ0
eTxib29sPigiZmxpY2tpbmciKTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlldzo6Y29udGVudFdp
ZHRoKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJu
IGQtPnJlYWRGbGlja2FibGVQcm9wZXJ0eTxxcmVhbD4oImNvbnRlbnRXaWR0aCIpOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXc6OnNldENvbnRlbnRXaWR0aChxcmVhbCB3aWR0aCkKK3sKKyAgICBR
X0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+d3JpdGVGbGlja2FibGVQcm9wZXJ0eSgiY29udGVu
dFdpZHRoIiwgd2lkdGgpOworfQorCitxcmVhbCBRUXVpY2tXZWJWaWV3Ojpjb250ZW50SGVpZ2h0
KCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQt
PnJlYWRGbGlja2FibGVQcm9wZXJ0eTxxcmVhbD4oImNvbnRlbnRIZWlnaHQiKTsKK30KKwordm9p
ZCBRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50SGVpZ2h0KHFyZWFsIGhlaWdodCkKK3sKKyAgICBR
X0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+d3JpdGVGbGlja2FibGVQcm9wZXJ0eSgiY29udGVu
dEhlaWdodCIsIGhlaWdodCk7Cit9CisKK3FyZWFsIFFRdWlja1dlYlZpZXc6OmNvbnRlbnRYKCkg
Y29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnJl
YWRGbGlja2FibGVQcm9wZXJ0eTxxcmVhbD4oImNvbnRlbnRYIik7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViVmlldzo6c2V0Q29udGVudFgocXJlYWwgeCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7
CisgICAgZC0+d3JpdGVGbGlja2FibGVQcm9wZXJ0eSgiY29udGVudFgiLCB4KTsKK30KKworcXJl
YWwgUVF1aWNrV2ViVmlldzo6Y29udGVudFkoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVp
Y2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cmVhZEZsaWNrYWJsZVByb3BlcnR5PHFyZWFsPigi
Y29udGVudFkiKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50WShxcmVhbCB5
KQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT53cml0ZUZsaWNrYWJsZVByb3Bl
cnR5KCJjb250ZW50WSIsIHkpOworfQorCitRUG9pbnRGIFFRdWlja1dlYlZpZXc6OmNvbnRlbnRQ
b3MoKSBjb25zdAoreworICAgIHJldHVybiBRUG9pbnRGKGNvbnRlbnRYKCksIGNvbnRlbnRZKCkp
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OnNldENvbnRlbnRQb3MoY29uc3QgUVBvaW50RiYg
cG9zKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT53cml0ZUZsaWNrYWJsZVBy
b3BlcnR5KCJjb250ZW50WCIsIHBvcy54KCkpOworICAgIGQtPndyaXRlRmxpY2thYmxlUHJvcGVy
dHkoImNvbnRlbnRZIiwgcG9zLnkoKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6dXBkYXRl
Q29udGVudFNpemUoY29uc3QgUVNpemVGJiBzaXplKQoreworICAgIFFfRChjb25zdCBRUXVpY2tX
ZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7CisgICAgaWYgKGQtPnVzZVBh
Z2VXaWR0aEFzQ29udGVudFdpZHRoKQorICAgICAgICBzZXRDb250ZW50V2lkdGgoc2l6ZS53aWR0
aCgpKTsKKyAgICBpZiAoZC0+dXNlUGFnZUhlaWdodEFzQ29udGVudEhlaWdodCkKKyAgICAgICAg
c2V0Q29udGVudEhlaWdodChzaXplLmhlaWdodCgpKTsKK30KKwogdm9pZCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6aW5pdGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiB7CiAg
ICAgaWYgKGludGVyYWN0aW9uRW5naW5lKSB7CkBAIC0xNDUsNiArMjc3LDggQEAgdm9pZCBRUXVp
Y2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3Bv
cnQpCiAKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVUb3VjaChRUXVpY2tX
ZWJWaWV3KiB2aWV3cG9ydCkKIHsKKyAgICBpbml0aWFsaXplRmxpY2thYmxlKHZpZXdwb3J0KTsK
KwogICAgIGludGVyYWN0aW9uRW5naW5lLnJlc2V0KG5ldyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUodmlld3BvcnQsIHBhZ2VWaWV3LmRhdGEoKSkpOwogICAgIHBhZ2VWaWV3LT5kLT5ldmVu
dEhhbmRsZXItPnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoaW50ZXJhY3Rpb25FbmdpbmUu
ZGF0YSgpKTsKICAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKQEAgLTE1NCw2ICsyODgsMjYgQEAg
dm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKFFRdWlja1dlYlZpZXcq
IHZpZXdwb3J0KQogICAgIHVwZGF0ZVRvdWNoVmlld3BvcnRTaXplKCk7CiB9CiAKK3ZvaWQgUVF1
aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVGbGlja2FibGUoUVF1aWNrV2ViVmlldyogd2Vi
VmlldykKK3sKKyAgICBRRGVjbGFyYXRpdmVFbmdpbmUgZW5naW5lKHdlYlZpZXcpOworICAgIFFE
ZWNsYXJhdGl2ZUNvbXBvbmVudCBjb21wb25lbnQoJmVuZ2luZSwgd2ViVmlldyk7CisgICAgY29t
cG9uZW50LnNldERhdGEoImltcG9ydCBRdFF1aWNrIDIuMFxuRmxpY2thYmxlIHt9IiwgUVVybCgp
KTsKKyAgICBmbGlja1Byb3ZpZGVyID0gcW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihjb21wb25l
bnQuY3JlYXRlKCkpOworCisgICAgQVNTRVJUKGZsaWNrUHJvdmlkZXIpOworCisgICAgZmxpY2tQ
cm92aWRlci0+c2V0UGFyZW50SXRlbSh3ZWJWaWV3KTsKKyAgICBwYWdlVmlldy0+c2V0UGFyZW50
SXRlbSh3ZWJWaWV3LT5jb250ZW50SXRlbSgpKTsKKworICAgIC8vIFByb3BhZ2F0ZSBmbGlja2Fi
bGUgc2lnbmFscy4KKyAgICBRT2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJvdmlkZXIsIFNJR05BTCht
b3ZpbmdDaGFuZ2VkKCkpLCB3ZWJWaWV3LCBTSUdOQUwobW92aW5nQ2hhbmdlZCgpKSwgUXQ6OkRp
cmVjdENvbm5lY3Rpb24pOworICAgIFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwgU0lH
TkFMKGNvbnRlbnRXaWR0aENoYW5nZWQoKSksIHdlYlZpZXctPm1fZXhwZXJpbWVudGFsLCBTSUdO
QUwoY29udGVudFdpZHRoQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIFFP
YmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2Vk
KCkpLCB3ZWJWaWV3LT5tX2V4cGVyaW1lbnRhbCwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2Vk
KCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1By
b3ZpZGVyLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCB3ZWJWaWV3LT5tX2V4cGVyaW1lbnRh
bCwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAg
IFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgp
KSwgd2ViVmlldy0+bV9leHBlcmltZW50YWwsIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFF0
OjpEaXJlY3RDb25uZWN0aW9uKTsKK30KKwogdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bG9h
ZERpZENvbW1pdCgpCiB7CiAgICAgLy8gRHVlIHRvIGVudGVyaW5nIHByb3Zpc2lvbmFsIGxvYWQg
YmVmb3JlIGNvbW1pdHRpbmcsIHdlCkBAIC0zNDUsNiArNDk5LDkgQEAgdm9pZCBRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6dXBkYXRlVG91Y2hWaWV3cG9ydFNpemUoKQogICAgIGlmICh2aWV3cG9ydFNp
emUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBmbGlja1Byb3ZpZGVyLT5zZXRX
aWR0aCh2aWV3cG9ydFNpemUud2lkdGgoKSk7CisgICAgZmxpY2tQcm92aWRlci0+c2V0SGVpZ2h0
KHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisKICAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25v
dyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKICAgICAvLyBpdCBjYW4gcmVz
aXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgogICAgIHdlYlBhZ2VQcm94eS0+c2V0Vmlld3Bv
cnRTaXplKHZpZXdwb3J0U2l6ZSk7CkBAIC04NjcsNiArMTAyNCw3MCBAQCBRUXVpY2tXZWJQYWdl
KiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpwYWdlKCkKICAgICByZXR1cm4gcV9wdHItPnBh
Z2UoKTsKIH0KIAorUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IFFRdWlja1dlYlZp
ZXdFeHBlcmltZW50YWw6OmZsaWNrYWJsZUNvbnRlbnQoKQoreworICAgIFFfRChjb25zdCBRUXVp
Y2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cmVhZEZsaWNrYWJsZVByb3BlcnR5PFFEZWNsYXJh
dGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiA+KCJmbGlja2FibGVEYXRhIik7Cit9CisKK1FRdWlj
a0l0ZW0qIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRJdGVtKCkKK3sKKyAgICBR
X1EoUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIHEtPmNvbnRlbnRJdGVtKCk7Cit9CisKK3Fy
ZWFsIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgUV9RKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBxLT5jb250ZW50V2lkdGgo
KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50V2lkdGgo
cXJlYWwgd2lkdGgpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnVzZVBhZ2VX
aWR0aEFzQ29udGVudFdpZHRoID0gZmFsc2U7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAg
IHEtPnNldENvbnRlbnRXaWR0aCh3aWR0aCk7Cit9CisKK3FyZWFsIFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWw6OmNvbnRlbnRIZWlnaHQoKSBjb25zdAoreworICAgIFFfUShjb25zdCBRUXVpY2tX
ZWJWaWV3KTsKKyAgICByZXR1cm4gcS0+Y29udGVudEhlaWdodCgpOworfQorCit2b2lkIFFRdWlj
a1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRIZWlnaHQocXJlYWwgaGVpZ2h0KQorewor
ICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT51c2VQYWdlSGVpZ2h0QXNDb250ZW50SGVp
Z2h0ID0gZmFsc2U7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIHEtPnNldENvbnRlbnRI
ZWlnaHQoaGVpZ2h0KTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29u
dGVudFgoKSBjb25zdAoreworICAgIFFfUShjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1
cm4gcS0+Y29udGVudFgoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
ZXRDb250ZW50WChxcmVhbCB4KQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBxLT5z
ZXRDb250ZW50WCh4KTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29u
dGVudFkoKSBjb25zdAoreworICAgIFFfUShjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1
cm4gcS0+Y29udGVudFkoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
ZXRDb250ZW50WShxcmVhbCB5KQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBxLT5z
ZXRDb250ZW50WSh5KTsKK30KKwogUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyhRUXVpY2tJ
dGVtKiBwYXJlbnQpCiAgICAgOiBRUXVpY2tJdGVtKHBhcmVudCkKICAgICAsIGRfcHRyKG5ldyBR
UXVpY2tXZWJWaWV3UHJpdmF0ZSh0aGlzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDQ1YThkZjIuLmQxNzY3ODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApA
QCAtMTA3LDYgKzEwNywyOSBAQCBwdWJsaWM6CiAKICAgICBRUXVpY2tXZWJQYWdlKiBwYWdlKCk7
CiAKKyAgICB2b2lkIGhhbmRsZUlucHV0KFFJbnB1dEV2ZW50KiBldmVudCk7CisKKyAgICBRUXVp
Y2tJdGVtKiBjb250ZW50SXRlbSgpOworCisgICAgdm9pZCByZXR1cm5Ub0JvdW5kcygpOworICAg
IHZvaWQgY2FuY2VsRmxpY2soKTsKKworICAgIGJvb2wgaXNNb3ZpbmcoKSBjb25zdDsKKyAgICBi
b29sIGlzRHJhZ2dpbmcoKSBjb25zdDsKKyAgICBib29sIGlzRmxpY2tpbmcoKSBjb25zdDsKKwor
ICAgIHZvaWQgdXBkYXRlQ29udGVudFNpemUoY29uc3QgUVNpemVGJik7CisgICAgcXJlYWwgY29u
dGVudFdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50V2lkdGgocXJlYWwpOworICAg
IHFyZWFsIGNvbnRlbnRIZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRIZWlnaHQo
cXJlYWwpOworICAgIHFyZWFsIGNvbnRlbnRYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50
WChxcmVhbCk7CisgICAgcXJlYWwgY29udGVudFkoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRl
bnRZKHFyZWFsKTsKKyAgICBRUG9pbnRGIGNvbnRlbnRQb3MoKSBjb25zdDsKKyAgICB2b2lkIHNl
dENvbnRlbnRQb3MoY29uc3QgUVBvaW50RiYpOworCiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbCogZXhwZXJpbWVudGFsKCkgY29uc3Q7CiAgICAgc3RhdGljIFFRdWlja1dlYlZpZXdBdHRh
Y2hlZCogcW1sQXR0YWNoZWRQcm9wZXJ0aWVzKFFPYmplY3QqKTsKIApAQCAtMTIyLDYgKzE0NSw3
IEBAIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgcmVsb2FkKCk7CiAKIFFfU0lHTkFMUzoKKyAg
ICB2b2lkIG1vdmluZ0NoYW5nZWQoKTsKICAgICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3Ry
aW5nJiB0aXRsZSk7CiAgICAgdm9pZCBsb2FkU3RhcnRlZCgpOwogICAgIHZvaWQgbG9hZFN1Y2Nl
ZWRlZCgpOwpAQCAtMjA0LDYgKzIyOCwxNCBAQCBRTUxfREVDTEFSRV9UWVBFSU5GTyhRUXVpY2tX
ZWJWaWV3LCBRTUxfSEFTX0FUVEFDSEVEX1BST1BFUlRJRVMpCiBjbGFzcyBRV0VCS0lUX0VYUE9S
VCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JK
RUNUCiAgICAgUV9QUk9QRVJUWShRUXVpY2tXZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSBDT05TVEFO
VCBGSU5BTCkKKworICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFdpZHRoIFJFQUQgY29udGVu
dFdpZHRoIFdSSVRFIHNldENvbnRlbnRXaWR0aCBOT1RJRlkgY29udGVudFdpZHRoQ2hhbmdlZCkK
KyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRIZWlnaHQgUkVBRCBjb250ZW50SGVpZ2h0IFdS
SVRFIHNldENvbnRlbnRIZWlnaHQgTk9USUZZIGNvbnRlbnRIZWlnaHRDaGFuZ2VkKQorICAgIFFf
UFJPUEVSVFkocXJlYWwgY29udGVudFggUkVBRCBjb250ZW50WCBXUklURSBzZXRDb250ZW50WCBO
T1RJRlkgY29udGVudFhDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFkgUkVB
RCBjb250ZW50WSBXUklURSBzZXRDb250ZW50WSBOT1RJRlkgY29udGVudFlDaGFuZ2VkKQorICAg
IFFfUFJPUEVSVFkoUVF1aWNrSXRlbSogY29udGVudEl0ZW0gUkVBRCBjb250ZW50SXRlbSBDT05T
VEFOVCkKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBm
bGlja2FibGVDb250ZW50IFJFQUQgZmxpY2thYmxlQ29udGVudCkKKwogICAgIFFfUFJPUEVSVFko
UVdlYk5hdmlnYXRpb25IaXN0b3J5KiBuYXZpZ2F0aW9uSGlzdG9yeSBSRUFEIG5hdmlnYXRpb25I
aXN0b3J5IENPTlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlQ29tcG9u
ZW50KiBhbGVydERpYWxvZyBSRUFEIGFsZXJ0RGlhbG9nIFdSSVRFIHNldEFsZXJ0RGlhbG9nIE5P
VElGWSBhbGVydERpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVDb21w
b25lbnQqIGNvbmZpcm1EaWFsb2cgUkVBRCBjb25maXJtRGlhbG9nIFdSSVRFIHNldENvbmZpcm1E
aWFsb2cgTk9USUZZIGNvbmZpcm1EaWFsb2dDaGFuZ2VkKQpAQCAtMjUwLDkgKzI4MiwyMCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGludCBzY2hlbWVEZWxlZ2F0ZXNfQ291bnQoUURlY2xhcmF0aXZl
TGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiopOwogICAgIHN0YXRpYyB2b2lk
IHNjaGVtZURlbGVnYXRlc19DbGVhcihRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJs
U2NoZW1lRGVsZWdhdGU+Kik7CiAgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1Vy
bFNjaGVtZURlbGVnYXRlPiBzY2hlbWVEZWxlZ2F0ZXMoKTsKKyAgICBRRGVjbGFyYXRpdmVMaXN0
UHJvcGVydHk8UU9iamVjdD4gZmxpY2thYmxlQ29udGVudCgpOwogICAgIHZvaWQgaW52b2tlQXBw
bGljYXRpb25TY2hlbWVIYW5kbGVyKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRl
ZE5ldHdvcmtSZXF1ZXN0RGF0YT4pOwogICAgIHZvaWQgc2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVw
bHkoUVF1aWNrTmV0d29ya1JlcGx5Kik7CiAKKyAgICBRUXVpY2tJdGVtKiBjb250ZW50SXRlbSgp
OworICAgIHFyZWFsIGNvbnRlbnRXaWR0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFdp
ZHRoKHFyZWFsKTsKKyAgICBxcmVhbCBjb250ZW50SGVpZ2h0KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRDb250ZW50SGVpZ2h0KHFyZWFsKTsKKyAgICBxcmVhbCBjb250ZW50WCgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29udGVudFgocXJlYWwpOworICAgIHFyZWFsIGNvbnRlbnRZKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRDb250ZW50WShxcmVhbCk7CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQg
c2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGJvb2wgZW5hYmxlKTsKICAgICB2b2lk
IGdvQmFja1RvKGludCBpbmRleCk7CkBAIC0yNjAsNiArMzAzLDEwIEBAIHB1YmxpYyBRX1NMT1RT
OgogICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgUVN0cmluZyYpOwogCiBRX1NJR05BTFM6Cisg
ICAgdm9pZCBjb250ZW50V2lkdGhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50SGVpZ2h0Q2hh
bmdlZCgpOworICAgIHZvaWQgY29udGVudFhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50WUNo
YW5nZWQoKTsKICAgICB2b2lkIGFsZXJ0RGlhbG9nQ2hhbmdlZCgpOwogICAgIHZvaWQgY29uZmly
bURpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIHByb21wdERpYWxvZ0NoYW5nZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApp
bmRleCBkYzgyMzAxLi5iZmM3YmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IDAsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDApOwogCisgICAgdm9pZCBpbml0aWFsaXplRmxpY2th
YmxlKFFRdWlja1dlYlZpZXcqKTsKICAgICB2b2lkIGluaXRpYWxpemVUb3VjaChRUXVpY2tXZWJW
aWV3KiB2aWV3cG9ydCk7CiAgICAgdm9pZCBpbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3
KiB2aWV3cG9ydCk7CiAgICAgdm9pZCBlbmFibGVNb3VzZUV2ZW50cygpOwpAQCAtODMsNiArODQs
OSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVZpc2libGVDb250ZW50UmVjdEFuZFNjYWxl
KCk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHJlYWRGbGlja2FibGVQcm9wZXJ0eShj
b25zdCBjaGFyKiBuYW1lKSBjb25zdDsKKyAgICB2b2lkIHdyaXRlRmxpY2thYmxlUHJvcGVydHko
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlKTsKKwogICAgIHZvaWQgX3Ff
c3VzcGVuZCgpOwogICAgIHZvaWQgX3FfcmVzdW1lKCk7CiAgICAgdm9pZCBfcV92aWV3cG9ydFRy
YWplY3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKTsKQEAgLTE1MCw2ICsxNTQsNyBA
QCBwcml2YXRlOgogICAgIFFTY29wZWRQb2ludGVyPFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZT4gaW50ZXJhY3Rpb25FbmdpbmU7CiAKICAgICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKKyAgICBR
UXVpY2tJdGVtKiBmbGlja1Byb3ZpZGVyOwogCiAgICAgUURlY2xhcmF0aXZlQ29tcG9uZW50KiBh
bGVydERpYWxvZzsKICAgICBRRGVjbGFyYXRpdmVDb21wb25lbnQqIGNvbmZpcm1EaWFsb2c7CkBA
IC0xNjMsNiArMTY4LDEzIEBAIHByaXZhdGU6CiAgICAgUUZpbGVEaWFsb2cqIGZpbGVEaWFsb2c7
CiAgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cjsKIAorICAgIC8vIFRoZXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb250ZW50SXRlbSBpcyBzaXpl
ZCB0byB0aGUgcGFnZQorICAgIC8vIGlmIHRoZSB1c2VyIGRpZCBub3QgYWRkIG90aGVyIGZsaWNr
YWJsZSBpdGVtcyBpbiBRTUwuCisgICAgLy8gSWYgdGhlIHVzZXIgYWRkcyBpdGVtcyBpbiBRTUwg
aGUgaGFzIHRvIG1ha2Ugc3VyZSB0bworICAgIC8vIGFsc28gYmluZCB0aGUgY29udGVudFdpZHRo
IGFuZCBjb250ZW50SGVpZ2h0IGFjY29yZGluZ2x5LgorICAgIGJvb2wgdXNlUGFnZVdpZHRoQXND
b250ZW50V2lkdGg7CisgICAgYm9vbCB1c2VQYWdlSGVpZ2h0QXNDb250ZW50SGVpZ2h0OworCiAg
ICAgYm9vbCBpc1RyYW5zaXRpb25pbmdUb05ld1BhZ2U7CiAgICAgYm9vbCBwYWdlSXNTdXNwZW5k
ZWQ7CiAgICAgYm9vbCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1
aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Fx
dWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDFkMTRkMTguLmU2ZjRlOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNr
d2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAt
MzI4LDggKzMyOCw4IEBAIHZvaWQgdHN0X1FRdWlja1dlYlZpZXc6OnNjcm9sbFJlcXVlc3QoKQog
ICAgIC8vIENPTVBBUkUgd2l0aCB0aGUgcG9zaXRpb24gcmVxdWVzdGVkIGluIHRoZSBodG1sCiAg
ICAgLy8gVXNlIHFSb3VuZCBhcyB0aGF0IGlzIGFsc28gdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRo
ZSBwb3NpdGlvbgogICAgIC8vIGluIFdlYktpdC4KLSAgICBpbnQgeSA9IC1xUm91bmQoNTAgKiB3
ZWJWaWV3KCktPnBhZ2UoKS0+Y29udGVudFNjYWxlKCkpOwotICAgIFFWRVJJRlkod2ViVmlldygp
LT5wYWdlKCktPnBvcygpLnkoKSA9PSB5KTsKKyAgICBpbnQgeSA9IHFSb3VuZCg1MCAqIHdlYlZp
ZXcoKS0+cGFnZSgpLT5jb250ZW50U2NhbGUoKSk7CisgICAgUVZFUklGWSh3ZWJWaWV3KCktPmNv
bnRlbnRZKCkgPT0geSk7CiB9CiAKIFFUV0VCS0lUX0FQSV9URVNUX01BSU4odHN0X1FRdWlja1dl
YlZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0
dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0
dXJlUmVjb2duaXplci5jcHAKaW5kZXggNmY5M2M5My4uNjY2MjNlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcApA
QCAtMzcsNyArMzcsNyBAQCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpRdFBhbkdlc3R1cmVSZWNv
Z25pemVyKFF0V2ViUGFnZUV2ZW50SGFuZGxlciogZXZlbnRIYW5kbAogICAgIHJlc2V0KCk7CiB9
CiAKLWJvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2
ZW50KiBldmVudCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQorYm9vbCBRdFBhbkdlc3R1
cmVSZWNvZ25pemVyOjpyZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQogewogICAg
IGlmICghaW50ZXJhY3Rpb25FbmdpbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzMs
MTYgKzczLDE2IEBAIGJvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0
IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0IGV2ZW50VGltCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0g
ICAgICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlU3RhcnRlZCh0b3VjaFBv
aW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgICAgICAgICBpbnRlcmFjdGlv
bkVuZ2luZSgpLT5wYW5HZXN0dXJlU3RhcnRlZChldmVudCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCk7Ci0gICAgICAgIGludGVyYWN0
aW9uRW5naW5lKCktPnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoUG9pbnQucG9zKCksIGV2
ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2Vz
dHVyZVJlcXVlc3RVcGRhdGUoZXZlbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgogICAgICAgICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJl
UmVjb2duaXplZCkgewotICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVy
ZUVuZGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAgICAg
ICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVFbmRlZChldmVudCk7CiAgICAgICAg
ICAgICByZXNldCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5o
CmluZGV4IDUzMjUwN2UuLmNmMDk0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtNDIsNyArNDIsNyBAQCBjb25z
dCBxcmVhbCBwYW5uaW5nSW5pdGlhbFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCA9IDUuOwogY2xh
c3MgUXRQYW5HZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyBRdEdlc3R1cmVSZWNvZ25pemVyIHsK
IHB1YmxpYzoKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0V2ViUGFnZUV2ZW50SGFuZGxl
ciopOwotICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiwgcWludDY0IGV2ZW50
VGltZXN0YW1wTWlsbGlzKTsKKyAgICBib29sIHJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCop
OwogICAgIHZvaWQgcmVzZXQoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKaW5k
ZXggODdjYjlkYi4uYWNkZTQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKQEAgLTI2LDkgKzI2
LDYgQEAKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3X3AuaCIKICNpbmNsdWRlIDxRUG9pbnRGPgotI2luY2x1ZGUgPFFTY3JvbGxFdmVudD4KLSNp
bmNsdWRlIDxRU2Nyb2xsUHJlcGFyZUV2ZW50PgotI2luY2x1ZGUgPFFTY3JvbGxlclByb3BlcnRp
ZXM+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KICNpbmNsdWRlIDxRV2hlZWxFdmVudD4KICNpbmNs
dWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KQEAgLTExNCw0MSArMTExLDI0IEBAIGlubGluZSBR
UmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppdGVtUmVjdEZyb21DU1MoY29uc3Qg
UVJlY3RGJiBjc3NSZWN0CiAgICAgcmV0dXJuIGl0ZW1SZWN0OwogfQogCi1RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShjb25zdCBRUXVpY2tX
ZWJWaWV3KiB2aWV3cG9ydCwgUVF1aWNrV2ViUGFnZSogY29udGVudCkKK1F0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFFRdWlja1dlYlZpZXcq
IHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBjb250ZW50KQogICAgIDogbV92aWV3cG9ydCh2aWV3
cG9ydCkKICAgICAsIG1fY29udGVudChjb250ZW50KQogICAgICwgbV9zdXNwZW5kQ291bnQoMCkK
KyAgICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZhbHNlKQogICAgICwgbV9zY2FsZUFuaW1hdGlv
bihuZXcgU2NhbGVBbmltYXRpb24odGhpcykpCiAgICAgLCBtX3BpbmNoU3RhcnRTY2FsZSgtMSkK
IHsKICAgICByZXNldCgpOwogCi0gICAgUVNjcm9sbGVyUHJvcGVydGllcyBwcm9wZXJ0aWVzID0g
c2Nyb2xsZXIoKS0+c2Nyb2xsZXJQcm9wZXJ0aWVzKCk7Ci0KLSAgICAvLyBUaGUgUXRQYW5HZXN0
dXJlUmVjb2duaXplciBpcyByZXNwb25zaWJsZSBmb3IgcmVjb2duaXppbmcgdGhlIGdlc3R1cmUK
LSAgICAvLyB0aHVzIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgZHJhZyBzdGFydCBkaXN0YW5jZS4K
LSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpEcmFn
U3RhcnREaXN0YW5jZSwgMC4wKTsKLQotICAgIC8vIFNldCBzb21lIGRlZmF1bHQgUVNjcm9sbGVy
IGNvbnN0cmFpbnMgdG8gbWltaWMgdGhlIHBoeXNpY3MgZW5naW5lIG9mIHRoZSBOOSBicm93c2Vy
LgotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6OkF4
aXNMb2NrVGhyZXNob2xkLCAwLjY2KTsKLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhR
U2Nyb2xsZXJQcm9wZXJ0aWVzOjpTY3JvbGxpbmdDdXJ2ZSwgUUVhc2luZ0N1cnZlKFFFYXNpbmdD
dXJ2ZTo6T3V0RXhwbykpOwotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxl
clByb3BlcnRpZXM6OkRlY2VsZXJhdGlvbkZhY3RvciwgMC4wNSk7Ci0gICAgcHJvcGVydGllcy5z
ZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6TWF4aW11bVZlbG9jaXR5LCAwLjYz
NSk7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6
T3ZlcnNob290RHJhZ1Jlc2lzdGFuY2VGYWN0b3IsIDAuMzMpOwotICAgIHByb3BlcnRpZXMuc2V0
U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6Ok92ZXJzaG9vdFNjcm9sbERpc3RhbmNl
RmFjdG9yLCAwLjMzKTsKLQotICAgIHNjcm9sbGVyKCktPnNldFNjcm9sbGVyUHJvcGVydGllcyhw
cm9wZXJ0aWVzKTsKLQotICAgIGNvbm5lY3QobV9jb250ZW50LCBTSUdOQUwod2lkdGhDaGFuZ2Vk
KCkpLCB0aGlzLCBTTE9UKGl0ZW1TaXplQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24p
OwotICAgIGNvbm5lY3QobV9jb250ZW50LCBTSUdOQUwoaGVpZ2h0Q2hhbmdlZCgpKSwgdGhpcywg
U0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25u
ZWN0KG1fY29udGVudCwgU0lHTkFMKHdpZHRoQ2hhbmdlZCgpKSwgU0xPVChpdGVtU2l6ZUNoYW5n
ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fY29udGVudCwgU0lH
TkFMKGhlaWdodENoYW5nZWQoKSksIFNMT1QoaXRlbVNpemVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0
Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3ZpZXdwb3J0LCBTSUdOQUwobW92aW5nQ2hhbmdl
ZCgpKSwgU0xPVChjb250ZW50TW92aW5nQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24p
OwogCiAgICAgY29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFW
YXJpYW50KSksCiAgICAgICAgICAgICBTTE9UKHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFW
YXJpYW50KSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKICAgICBjb25uZWN0KG1fc2NhbGVBbmlt
YXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFi
c3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAogICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlv
blN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRp
b246OlN0YXRlKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLQotICAgIGNvbm5lY3Qoc2Nyb2xs
ZXIoKSwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRU2Nyb2xsZXI6OlN0YXRlKSksCi0gICAgICAgICAg
ICBTTE9UKHNjcm9sbFN0YXRlQ2hhbmdlZChRU2Nyb2xsZXI6OlN0YXRlKSksIFF0OjpEaXJlY3RD
b25uZWN0aW9uKTsKIH0KIAogUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp+UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKCkKQEAgLTE4Miw5ICsxNjIsMTEgQEAgdm9pZCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1S
ZWN0KQogCiAgICAgbV9jb250ZW50LT5zZXRDb250ZW50U2NhbGUoaXRlbVNjYWxlKTsKIAotICAg
IC8vIFdlIG5lZWQgdG8gYW5pbWF0ZSB0aGUgY29udGVudCBidXQgdGhlIHBvc2l0aW9uIHJlcHJl
c2VudHMgdGhlIHZpZXdwb3J0IGhlbmNlIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSBwb3NpdGlvbiBo
ZXJlLgotICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIHNj
YWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxlOwotICAg
IG1fY29udGVudC0+c2V0UG9zKC0gaXRlbVJlY3QudG9wTGVmdCgpICogaXRlbVNjYWxlKTsKKyAg
ICAvLyBUbyBhbmltYXRlIHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBt
dWx0aXBseSB0aGUgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2FsZQorICAgIC8vIGFuZCBh
ZGQgaXQgdG8gdGhlIHBhZ2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxl
IGNvbnRlbnRJdGVtIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCisgICAgUVBvaW50RiBu
ZXdQb3NpdGlvbihtX2NvbnRlbnQtPnBvcygpICsgKGl0ZW1SZWN0LnRvcExlZnQoKSAqIGl0ZW1T
Y2FsZSkpOworCisgICAgbV92aWV3cG9ydC0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7CiB9
CiAKIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXRlSXRlbVJlY3RWaXNp
YmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCkBAIC0yMDMsNiArMTg1LDE0IEBAIGJvb2wgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXRlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFS
ZWN0RiYgaXRlbVJlY3QpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpjb250ZW50TW92aW5nQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fdmll
d3BvcnQtPmlzTW92aW5nKCkgJiYgIW1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIpCisgICAgICAgIG1f
c2Nyb2xsVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cih0aGlzKSk7CisgICAgZWxzZQorICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFy
KCk7Cit9CisKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlv
blN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKIHsKICAgICBzd2l0Y2ggKG5ld1N0YXRl
KSB7CkBAIC0yMTgsNjAgKzIwOCw2IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246CiAgICAgfQog
fQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsU3RhdGVDaGFuZ2Vk
KFFTY3JvbGxlcjo6U3RhdGUgbmV3U3RhdGUpCi17Ci0gICAgc3dpdGNoIChuZXdTdGF0ZSkgewot
ICAgIGNhc2UgUVNjcm9sbGVyOjpJbmFjdGl2ZToKLSAgICAgICAgLy8gRklYTUU6IFFTY3JvbGxl
ciBnZXRzIHdoZW4gZXZlbiB3aGVuIHRhcHBpbmcgd2hpbGUgaXQgaXMgc2Nyb2xsaW5nLgotICAg
ICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUVNjcm9sbGVyOjpQcmVzc2VkOgotICAgIGNhc2UgUVNjcm9sbGVyOjpEcmFnZ2luZzoK
LSAgICBjYXNlIFFTY3JvbGxlcjo6U2Nyb2xsaW5nOgotICAgICAgICBpZiAobV9zY3JvbGxVcGRh
dGVEZWZlcnJlcikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3Njcm9sbFVwZGF0ZURl
ZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcykpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJv
b2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpldmVudChRRXZlbnQqIGV2ZW50KQotewot
ICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpTY3JvbGxQcmVw
YXJlOiB7Ci0gICAgICAgIFFTY3JvbGxQcmVwYXJlRXZlbnQqIHByZXBhcmVFdmVudCA9IHN0YXRp
Y19jYXN0PFFTY3JvbGxQcmVwYXJlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIGNvbnN0IFFSZWN0
RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0LT5ib3VuZGluZ1JlY3QoKTsKLSAgICAgICAgY29u
c3QgUVJlY3RGIGNvbnRlbnRSZWN0ID0gbV92aWV3cG9ydC0+bWFwUmVjdEZyb21JdGVtKG1fY29u
dGVudCwgbV9jb250ZW50LT5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIGNvbnN0IFFSZWN0RiBw
b3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvckl0ZW1BdFNjYWxlKG1fY29udGVudC0+Y29udGVu
dFNjYWxlKCkpOwotICAgICAgICBwcmVwYXJlRXZlbnQtPnNldENvbnRlbnRQb3NSYW5nZShwb3NS
YW5nZSk7Ci0gICAgICAgIHByZXBhcmVFdmVudC0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0UmVj
dC5zaXplKCkpOwotCi0gICAgICAgIC8vIEFzIHdlIHdhbnQgdG8gcHVzaCB0aGUgY29udGVudHMg
YW5kIG5vdCBhY3R1YWxseSBzY3JvbGwgaXQsIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSBwb3NpdGlv
bnMgaGVyZS4KLSAgICAgICAgcHJlcGFyZUV2ZW50LT5zZXRDb250ZW50UG9zKC1jb250ZW50UmVj
dC50b3BMZWZ0KCkpOwotICAgICAgICBwcmVwYXJlRXZlbnQtPmFjY2VwdCgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBRRXZlbnQ6OlNjcm9sbDogewotICAgICAgICBR
U2Nyb2xsRXZlbnQqIHNjcm9sbEV2ZW50ID0gc3RhdGljX2Nhc3Q8UVNjcm9sbEV2ZW50Kj4oZXZl
bnQpOwotICAgICAgICBRUG9pbnRGIG5ld1BvcyA9IC1zY3JvbGxFdmVudC0+Y29udGVudFBvcygp
IC0gc2Nyb2xsRXZlbnQtPm92ZXJzaG9vdERpc3RhbmNlKCk7Ci0gICAgICAgIGlmIChtX2NvbnRl
bnQtPnBvcygpICE9IG5ld1BvcykgewotICAgICAgICAgICAgUVBvaW50RiBjdXJyZW50UG9zSW5D
U1NDb29yZGluYXRlcyA9IG1fdmlld3BvcnQtPm1hcFRvV2ViQ29udGVudChtX2NvbnRlbnQtPnBv
cygpKTsKLSAgICAgICAgICAgIFFQb2ludEYgbmV3UG9zSW5DU1NDb29yZGluYXRlcyA9IG1fdmll
d3BvcnQtPm1hcFRvV2ViQ29udGVudChuZXdQb3MpOwotCi0gICAgICAgICAgICAvLyBUaGlzIG11
c3QgYmUgZW1pdHRlZCBiZWZvcmUgdmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQgc28gdGhhdCB0aGUg
d2ViIHByb2Nlc3Mga25vd3Mgd2hlcmUgdG8gbG9vayBmb3IgdGlsZXMuCi0gICAgICAgICAgICBl
bWl0IHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY3VycmVudFBvc0luQ1NTQ29vcmRp
bmF0ZXMgLSBuZXdQb3NJbkNTU0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgIG1fY29udGVudC0+
c2V0UG9zKG5ld1Bvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gUU9iamVjdDo6
ZXZlbnQoZXZlbnQpOwotfQotCiBzdGF0aWMgaW5saW5lIFFQb2ludEYgYm91bmRQb3NpdGlvbihj
b25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgY29uc3Qg
UVBvaW50RiYgbWF4UG9zaXRpb24pCiB7CiAgICAgcmV0dXJuIFFQb2ludEYocUJvdW5kKG1pblBv
c2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQb3NpdGlvbi54KCkpLApAQCAtMzA0LDcgKzI0
MCw4IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVlbEV2ZW50KFFXaGVl
bEV2ZW50KiBldikKICAgICAgICAgbmV3UG9zLnJ5KCkgKz0gZGVsdGE7CiAKICAgICBRUmVjdEYg
ZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JJdGVtQXRTY2FsZShtX2NvbnRlbnQtPmNv
bnRlbnRTY2FsZSgpKTsKLSAgICBtX2NvbnRlbnQtPnNldFBvcygtYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIG5ld1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSkpOwor
ICAgIFFQb2ludEYgbmV3UG9zaXRpb24gPSAtYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BM
ZWZ0KCksIG5ld1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisgICAgbV92aWV3cG9y
dC0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpwYWdlUG9zaXRpb25SZXF1ZXN0KGNvbnN0IFFQb2ludCYgcGFnZVBvc2l0
aW9uKQpAQCAtNDMyLDggKzM2OSwxMiBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6cmVzZXQoKQogCiAgICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKIAotICAgIHNj
cm9sbGVyKCktPnN0b3AoKTsKKyAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxlcyBvZiB0
aGUgZmxpY2thYmxlLgorICAgIG1fdmlld3BvcnQtPmNhbmNlbEZsaWNrKCk7CisKICAgICBtX3Nj
YWxlQW5pbWF0aW9uLT5zdG9wKCk7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7
CisgICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwogfQogCiB2b2lkIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBDb25zdHJhaW50cyYg
Y29uc3RyYWludHMpCkBAIC00NTAsNyArMzkxLDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgQ29uc3RyYWludHMmIGNvbnN0cmFpbnQK
ICAgICAgICAgbV9jb250ZW50LT5zZXRDb250ZW50U2NhbGUoaXRlbVNjYWxlRnJvbUNTUyhpbml0
aWFsU2NhbGUpKTsKICAgICB9CiAKLSAgICAvLyBJZiB0aGUgd2ViIGFwcCBjaGFuZ2VzIHN1Y2Nl
c3NpdmVseSBjaGFuZ2VzIHRoZSB2aWV3cG9ydCBvbiBwdXJwb3NlCisgICAgLy8gSWYgdGhlIHdl
YiBhcHAgc3VjY2Vzc2l2ZWx5IGNoYW5nZXMgdGhlIHZpZXdwb3J0IG9uIHB1cnBvc2UKICAgICAv
LyBpdCB3YW50cyB0byBiZSBpbiBjb250cm9sIGFuZCB3ZSBzaG91bGQgZGlzYWJsZSBhbmltYXRp
b25zLgogICAgIGVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5kYXJ5KC8qIGltbWVkaWF0
ZSAqLyB0cnVlKTsKIH0KQEAgLTQ2Miw0NCArNDAzLDYyIEBAIHFyZWFsIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y3VycmVudENTU1NjYWxlKCkKIAogYm9vbCBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgUVNjcm9s
bGVyKiBzY3JvbGxlciA9IGNvbnN0X2Nhc3Q8UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKj4o
dGhpcyktPnNjcm9sbGVyKCk7Ci0gICAgcmV0dXJuIHNjcm9sbGVyLT5zdGF0ZSgpID09IFFTY3Jv
bGxlcjo6U2Nyb2xsaW5nOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
aW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBTdG9wcGluZyB0aGUgc2Nyb2xs
ZXIgaW1tZWRpYXRlbHkgc3RvcHMga2luZXRpYyBzY3JvbGxpbmcgYW5kIGlmIHRoZSB2aWV3IGlz
IG91dCBvZiBib3VuZHMgaXQKLSAgICAvLyBpcyBtb3ZlZCBpbnNpZGUgdmFsaWQgYm91bmRzIGlt
bWVkaWF0ZWx5IGFzIHdlbGwuIFRoaXMgaXMgdGhlIGJlaGF2aW9yIHRoYXQgd2Ugd2FudC4KLSAg
ICBzY3JvbGxlcigpLT5zdG9wKCk7CisgICAgcmV0dXJuIG1fdmlld3BvcnQtPmlzRmxpY2tpbmco
KTsKIH0KIAogYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVBY3Rp
dmUoKSBjb25zdAogewotICAgIFFTY3JvbGxlciogc2Nyb2xsZXIgPSBjb25zdF9jYXN0PFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSo+KHRoaXMpLT5zY3JvbGxlcigpOwotICAgIHJldHVybiBz
Y3JvbGxlci0+c3RhdGUoKSA9PSBRU2Nyb2xsZXI6OlByZXNzZWQgfHwgc2Nyb2xsZXItPnN0YXRl
KCkgPT0gUVNjcm9sbGVyOjpEcmFnZ2luZzsKKyAgICByZXR1cm4gbV92aWV3cG9ydC0+aXNEcmFn
Z2luZygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVy
ZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwgcWludDY0IGV2ZW50
VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdl
c3R1cmVTdGFydGVkKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKICAgICBtX2hhZFVzZXJJ
bnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc2Nyb2xsZXIoKS0+aGFuZGxlSW5wdXQoUVNjcm9sbGVy
OjpJbnB1dFByZXNzLCAgdmlld3BvcnRUb3VjaFBvaW50LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CisKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRlKTsKKwor
ICAgIC8vIFRoZSBwYW4gZ2VzdHVyZSByZWNvZ25pemVyIHNlbmRzIHRoZSBjdXJyZW50IFRvdWNo
VXBkYXRlIGV2ZW50CisgICAgLy8gd2hlbiBpdCByZWNvZ25pemVkIGEgcGFuIGdlc3R1cmUuCisg
ICAgLy8gQ29uc3RydWN0IGEgVG91Y2hCZWdpbiBldmVudCBvdXQgb2YgdGhlIHJlY2VpdmVkIGV2
ZW50IGZvciB0aGUgZmxpY2thYmxlLgorICAgIFFUb3VjaEV2ZW50IHRvdWNoQmVnaW4oUUV2ZW50
OjpUb3VjaEJlZ2luLAorICAgICAgICAgICAgICAgIGV2ZW50LT5kZXZpY2UoKSwKKyAgICAgICAg
ICAgICAgICBldmVudC0+bW9kaWZpZXJzKCksCisgICAgICAgICAgICAgICAgZXZlbnQtPnRvdWNo
UG9pbnRTdGF0ZXMoKSwKKyAgICAgICAgICAgICAgICBldmVudC0+dG91Y2hQb2ludHMoKSk7CisK
KyAgICBtX3ZpZXdwb3J0LT5oYW5kbGVJbnB1dCgmdG91Y2hCZWdpbik7CisgICAgbV9sYXN0UGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91Y2hQb2ludHMoKS5maXJz
dCgpLnBvcygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2Vz
dHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwgcWlu
dDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsK
LSAgICBzY3JvbGxlcigpLT5oYW5kbGVJbnB1dChRU2Nyb2xsZXI6OklucHV0TW92ZSwgIHZpZXdw
b3J0VG91Y2hQb2ludCwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIEFTU0VSVChldmVudC0+
dHlwZSgpID09IFFFdmVudDo6VG91Y2hVcGRhdGUpOworCisgICAgUVBvaW50RiB2aWV3cG9ydFBv
c2l0aW9uID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKS5wb3MoKTsKKworICAgIGVtaXQg
dmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChtX2xhc3RQaW5jaENlbnRlckluVmlld3Bv
cnRDb29yZGluYXRlcyAtIHZpZXdwb3J0UG9zaXRpb24pOworCisgICAgbV92aWV3cG9ydC0+aGFu
ZGxlSW5wdXQoY29uc3RfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KSk7CisgICAgbV9sYXN0UGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB2aWV3cG9ydFBvc2l0aW9uOwogfQogCiB2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCgpCiB7
Ci0gICAgLy8gU3RvcHBpbmcgdGhlIHNjcm9sbGVyIGltbWVkaWF0ZWx5IHN0b3BzIGtpbmV0aWMg
c2Nyb2xsaW5nIGFuZCBpZiB0aGUgdmlldyBpcyBvdXQgb2YgYm91bmRzIGl0Ci0gICAgLy8gaXMg
bW92ZWQgaW5zaWRlIHZhbGlkIGJvdW5kcyBpbW1lZGlhdGVseSBhcyB3ZWxsLiBUaGlzIGlzIHRo
ZSBiZWhhdmlvciB0aGF0IHdlIHdhbnQuCi0gICAgc2Nyb2xsZXIoKS0+c3RvcCgpOworICAgIC8v
IFJlc2V0IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBmbGlja2FibGUuCisgICAgLy8gVGhp
cyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29nbml6ZXIgaWYgd2UgaGF2ZSBhIHJl
Y29nbml6ZWQKKyAgICAvLyBwYW4gZ2VzdHVyZSBhbmQgcmVjZWl2ZSBhIHRvdWNoIGV2ZW50IHdp
dGggbXVsdGlwbGUgdG91Y2ggcG9pbnRzCisgICAgLy8gKGllLiB0cmFuc2l0aW9uIHRvIGEgcGlu
Y2ggZ2VzdHVyZSkgYXMgaXQgZG9lcyBub3QgbW92ZSB0aGUgY29udGVudAorICAgIC8vIGJhY2sg
aW5zaWRlIHZhbGlkIGJvdW5kcy4KKyAgICAvLyBXaGVuIHRoZSBwaW5jaCBnZXN0dXJlIGVuZHMs
IHRoZSBjb250ZW50IGlzIHBvc2l0aW9uZWQgYW5kIHNjYWxlZAorICAgIC8vIGJhY2sgdG8gdmFs
aWQgYm91bmRhcmllcy4KKyAgICBtX3ZpZXdwb3J0LT5jYW5jZWxGbGljaygpOwogfQogCi12b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2lu
dEYmICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3Zv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVRv
dWNoRXZlbnQqIGV2ZW50KQogewotICAgIHNjcm9sbGVyKCktPmhhbmRsZUlucHV0KFFTY3JvbGxl
cjo6SW5wdXRSZWxlYXNlLCAgdmlld3BvcnRUb3VjaFBvaW50LCBldmVudFRpbWVzdGFtcE1pbGxp
cyk7CisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaEVuZCk7CisgICAg
bV92aWV3cG9ydC0+aGFuZGxlSW5wdXQoY29uc3RfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KSk7
CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91
Y2hQb2ludHMoKS5maXJzdCgpLnBvcygpOwogfQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6c2NhbGVBbmltYXRpb25BY3RpdmUoKSBjb25zdApAQCAtNTU1LDcgKzUxNCw3IEBA
IHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBk
YXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoCiAgICAgY29uc3QgUVBvaW50RiBwb3NpdGlvbkRpZmYg
PSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyAtIG1fbGFzdFBpbmNoQ2VudGVySW5W
aWV3cG9ydENvb3JkaW5hdGVzOwogICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CiAKLSAgICBtX2NvbnRl
bnQtPnNldFBvcyhtX2NvbnRlbnQtPnBvcygpICsgcG9zaXRpb25EaWZmKTsKKyAgICBtX3ZpZXdw
b3J0LT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnQtPmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlm
Zik7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVF
bmRlZCgpCkBAIC01ODYsNyArNTQ1LDggQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU6OnNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW4KICAgICBR
UG9pbnRGIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJD
b250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwogICAgIG1fY29udGVudC0+c2V0Q29udGVu
dFNjYWxlKGl0ZW1TY2FsZUZyb21DU1MoY3NzU2NhbGUpKTsKICAgICBRUG9pbnRGIG5ld1BpbmNo
Q2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNlbnRlcklu
Q1NTQ29vcmRpbmF0ZXMpOwotICAgIG1fY29udGVudC0+c2V0UG9zKG1fY29udGVudC0+cG9zKCkg
LSAobmV3UGluY2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7
CisKKyAgICBtX3ZpZXdwb3J0LT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnQtPmNvbnRlbnRQb3Mo
KSArIChuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQp
KTsKIH0KIAogI2luY2x1ZGUgIm1vY19RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZS5oCmluZGV4IDE3OTBjNzIuLmVjYTg4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LmgKQEAgLTIzLDggKzIzLDggQEAKICNkZWZpbmUgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
X2gKIAogI2luY2x1ZGUgIk93blB0ci5oIgotI2luY2x1ZGUgPFFTY3JvbGxlcj4KICNpbmNsdWRl
ICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXRHdWkvUVRvdWNoRXZlbnQ+CiAjaW5jbHVk
ZSA8UXRDb3JlL1FPYmplY3Q+CiAjaW5jbHVkZSA8UXRDb3JlL1FSZWN0Rj4KICNpbmNsdWRlIDxR
dENvcmUvUVZhcmlhbnQ+CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZSA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6Ci0g
ICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGNvbnN0IFFRdWlja1dlYlZpZXcqLCBRUXVp
Y2tXZWJQYWdlKik7CisgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFFRdWlja1dlYlZp
ZXcqLCBRUXVpY2tXZWJQYWdlKik7CiAgICAgflF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgp
OwogCiAgICAgc3RydWN0IENvbnN0cmFpbnRzIHsKQEAgLTY3LDggKzY3LDYgQEAgcHVibGljOgog
ICAgICAgICBRU2l6ZSBsYXlvdXRTaXplOwogICAgIH07CiAKLSAgICBib29sIGV2ZW50KFFFdmVu
dCopOwotCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgYXBwbHlDb25zdHJhaW50cyhjb25z
dCBDb25zdHJhaW50cyYpOwogCkBAIC03OSwxMyArNzcsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
cGFnZVBvc2l0aW9uUmVxdWVzdChjb25zdCBRUG9pbnQmIHBvcyk7CiAKICAgICBib29sIHNjcm9s
bEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgaW50ZXJydXB0U2Nyb2xsQW5pbWF0
aW9uKCk7CiAKICAgICBib29sIHBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHBh
bkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2
NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlUmVxdWVzdFVwZGF0
ZShjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQq
KTsKKyAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50Kik7
CiAgICAgdm9pZCBwYW5HZXN0dXJlQ2FuY2VsbGVkKCk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlRW5k
ZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwgcWludDY0IGV2ZW50VGltZXN0
YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChjb25zdCBRVG91Y2hFdmVudCop
OwogCiAgICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwogICAgIHZvaWQgaW50
ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKQEAgLTExMSw3ICsxMDgsNyBAQCBwcml2YXRlIFFfU0xP
VFM6CiAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIG9mIGNvbnRlbnQgdGhhdCBhcmUgbm90IGRy
aXZlbiBieSB1cywgbGlrZSB0aGUgcGFnZSByZXNpemluZyBpdHNlbGYuCiAgICAgdm9pZCBpdGVt
U2l6ZUNoYW5nZWQoKTsKIAotICAgIHZvaWQgc2Nyb2xsU3RhdGVDaGFuZ2VkKFFTY3JvbGxlcjo6
U3RhdGUpOworICAgIHZvaWQgY29udGVudE1vdmluZ0NoYW5nZWQoKTsKICAgICB2b2lkIHNjYWxl
QW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFj
dEFuaW1hdGlvbjo6U3RhdGUpOwogICAgIHZvaWQgc2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQo
UVZhcmlhbnQgdmFsdWUpIHsgc2V0SXRlbVJlY3RWaXNpYmxlKHZhbHVlLnRvUmVjdEYoKSk7IH0K
IApAQCAtMTMxLDExICsxMjgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzY2FsZUNvbnRlbnQo
Y29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRlcywgcXJlYWwgY3NzU2NhbGUpOwog
Ci0gICAgLy8gQXMgbG9uZyBhcyB0aGUgb2JqZWN0IGV4aXN0cyB0aGlzIGZ1bmN0aW9uIHdpbGwg
YWx3YXlzIHJldHVybiB0aGUgc2FtZSBRU2Nyb2xsZXIgaW5zdGFuY2UuCi0gICAgUVNjcm9sbGVy
KiBzY3JvbGxlcigpIHsgcmV0dXJuIFFTY3JvbGxlcjo6c2Nyb2xsZXIodGhpcyk7IH0KLQotCi0g
ICAgY29uc3QgUVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydDsKKyAgICBRUXVpY2tXZWJW
aWV3KiBjb25zdCBtX3ZpZXdwb3J0OwogICAgIFFRdWlja1dlYlBhZ2UqIGNvbnN0IG1fY29udGVu
dDsKIAogICAgIENvbnN0cmFpbnRzIG1fY29uc3RyYWludHM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IGY1NTdl
ZTkuLjUzOGY2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC01MDAsOCArNTAwLDcgQEAgdm9pZCBRdFdlYlBh
Z2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2
ZW50JiBldmVudCwKICAgICAgICAgLy8gVGhlIGludGVyYWN0aW9uIGVuZ2luZSBtaWdodCBzdGls
bCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBhbmltYXRpb24KICAg
ICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpvb20gb3IgdGhlIGJvdW5jZSBiYWNrIGVm
ZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcKICAgICAgICAgLy8gd2hl
cmUgYXMgaXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5pbWF0aW9uLgotICAgICAgICBpZiAo
bV9pbnRlcmFjdGlvbkVuZ2luZS0+c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgICAg
ICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24oKTsKKyAgICAg
ICAgLy8gU2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIGZsaWNrUHJvdmlkZXIgd2lsbCBzdG9wIHRo
ZSBraW5ldGljIHNjcm9sbGluZy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBRRXZlbnQ6OlRv
dWNoVXBkYXRlOgogICAgICAgICAvLyBUaGUgc2NhbGUgYW5pbWF0aW9uIGNhbiBvbmx5IGJlIGlu
dGVycnVwdGVkIGJ5IGEgcGluY2ggZ2VzdHVyZSwgd2hpY2ggd2lsbCB0aGVuIHRha2Ugb3Zlci4K
QEAgLTUxNywxNSArNTE2LDE0IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0
aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQsCiAgICAgaWYgKG1f
aW50ZXJhY3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVzdGFtcCBmcm9tIHNlY29uZCB0byBt
aWxsaXNlY29uZC4KLSAgICBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMgPSBzdGF0aWNfY2Fz
dDxxaW50NjQ+KGV2ZW50LnRpbWVzdGFtcCgpICogMTAwMCk7Ci0gICAgbV9wYW5HZXN0dXJlUmVj
b2duaXplci5yZWNvZ25pemUoZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBtX3Bhbkdl
c3R1cmVSZWNvZ25pemVyLnJlY29nbml6ZShldik7CiAgICAgbV9waW5jaEdlc3R1cmVSZWNvZ25p
emVyLnJlY29nbml6ZShldik7CiAKICAgICBpZiAobV9wYW5HZXN0dXJlUmVjb2duaXplci5pc1Jl
Y29nbml6ZWQoKSB8fCBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkpCiAg
ICAgICAgIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIucmVzZXQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgY29uc3QgUVRvdWNoRXZlbnQqIGV2ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKyAgICAgICAg
Ly8gQ29udmVydCB0aGUgZXZlbnQgdGltZXN0YW1wIGZyb20gc2Vjb25kIHRvIG1pbGxpc2Vjb25k
LgorICAgICAgICBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMgPSBzdGF0aWNfY2FzdDxxaW50
NjQ+KGV2ZW50LnRpbWVzdGFtcCgpICogMTAwMCk7CiAgICAgICAgIG1fdGFwR2VzdHVyZVJlY29n
bml6ZXIucmVjb2duaXplKGV2LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgfQogfQotLSAK
MS43LjguMwoK
</data>
<flag name="review"
          id="125087"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124299</attachid>
            <date>2012-01-27 05:58:58 -0800</date>
            <delta_ts>2012-01-27 06:39:18 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Qt-WK2-WebView-should-use-Flickable-instead-of-QScro.patch</filename>
            <type>text/plain</type>
            <size>42698</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSA0M2JlYzcyZDlkYzdhODcwZmQwNzNkYmY0MTZlYTQ1MmIzZmNjNDc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IEZyaSwgMjcgSmFuIDIwMTIgMTQ6NDA6MjAgKzAxMDAKU3ViamVjdDogW1BBVENIXSBb
UXRdW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJsZSBpbnN0ZWFkIG9mIFFTY3JvbGxl
cgogdG8gaGFuZGxlIHBvc2l0aW9uaW5nCgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5MiArKysrKysrKysKIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgIHwgICAyNSArKy0KIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgIHwgIDE5OSArKysrKysr
KysrKysrKysrKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3AuaCAgfCAgIDQwICsrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wX3AuaCAgIHwgICAxMiArKwogLi4uL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0
X3FxdWlja3dlYnZpZXcuY3BwICAgfCAgICAyICstCiAuLi4vVUlQcm9jZXNzL3F0L1F0UGFuR2Vz
dHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAgIDggKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmggIHwgICAgMiArLQogLi4uL1VJUHJvY2Vzcy9x
dC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwICAgfCAgMTcyICsrKysrKystLS0tLS0t
LS0tLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCAgICAg
fCAgIDIxICstLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxl
ci5jcHAgfCAgIDEwICstCiAxMSBmaWxlcyBjaGFuZ2VkLCA0NDUgaW5zZXJ0aW9ucygrKSwgMTM4
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3NTc2MzRjLi4xMjc2NDIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsOTUgQEAKKzIwMTItMDEtMjcgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNz
aUBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIFdlYlZpZXcgc2hvdWxkIHVzZSBGbGlj
a2FibGUgaW5zdGVhZCBvZiBRU2Nyb2xsZXIgdG8gaGFuZGxlIHBvc2l0aW9uaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI3NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IFdlYlZp
ZXcgaW1wbGVtZW50YXRpb24gdXNlcyBRU2Nyb2xsZXIgdG8gbWFuYWdlIHBvc2l0aW9uaW5nIGJ1
dCBvdGhlciBzaW1pbGFyCisgICAgICAgIGl0ZW1zIGluIFFNTCAoaWUuIExpc3RWaWV3LCBHcmlk
VmlldykgdXNlIEZsaWNrYWJsZSBhcyB0aGVpciBiYXNlIGNsYXNzLgorICAgICAgICBTaW5jZSBR
U2Nyb2xsZXIgd2lsbCBiZSBkcm9wcGVkIGZyb20gUXQ1IHRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
UVNjcm9sbGVyIGNvZGUKKyAgICAgICAgYW5kIHJlZGlyZWN0cyBwYW4gZ2VzdHVyZXMgdG8gYSBk
eW5hbWljYWxseSBjcmVhdGVkIGludGVybmFsIEZsaWNrYWJsZSBpbnN0YW5jZSAoZmxpY2tQcm92
aWRlcikKKyAgICAgICAgd2hpY2ggaGFuZGxlcyB0aGUgcG9zaXRpb25pbmcuCisKKyAgICAgICAg
VGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHVzZXMgcHVibGljIFFNTCBBUEkgYW5kIGRvZXMgbm90
IGRlcGVuZCBvbiBkZWNsYXJhdGl2ZS1wcml2YXRlLgorICAgICAgICBJdCBwcm9wYWdhdGVzIGEg
c21hbGwgc3Vic2V0IG9mIHRoZSBGbGlja2FibGUgQVBJIGFzIHRoZSBwdWJsaWMgQVBJIG9mIHRo
ZSBXZWJWaWV3LgorICAgICAgICBUaGlzIG1pbmltYWxpc3RpYyBBUEkgaXMgYWNjZXNzaWJsZSB2
aWEgdGhlIGV4cGVyaW1lbnRhbCBleHRlbnNpb24gYW5kIG1ha2VzIGl0IHBvc3NpYmxlCisgICAg
ICAgIGluIFFNTCB0byBwbGFjZSBhZGRpdGlvbmFsIGl0ZW1zIChzdWNoIGFzIHRvb2xiYXJzLCBz
Y3JvbGwgaW5kaWNhdG9ycyBhbmQgZmxvYXRpbmcgbWVudXMpCisgICAgICAgIGFyb3VkIHRoZSBw
YWdlLgorICAgICAgICBUaGVzZSBpdGVtcyBjYW4gdXNlIGFuY2hvcmluZyBhbmQgYmluZGluZyBm
b3IgcG9zaXRpb25pbmcgb24gdGhlIGZsaWNrYWJsZSBjb250ZW50SXRlbS4KKworICAgICAgICBU
aGlzIHBhdGNoIGRlcGVuZHMgaG93ZXZlciBvbiB0aGUgYXV0b21hdGljIHRvdWNoLT5tb3VzZSBl
dmVudCBzeW50aGV0aXphdGlvbiBvZiBRdDUuCisgICAgICAgIFRoZSB0b3VjaCBldmVudHMgc2Vu
dCB0byB0aGUgZmxpY2tQcm92aWRlciBhcmUgdHJhbnNsYXRlZCB0byBtb3VzZSBldmVudHMgYXV0
b21hdGljYWxseQorICAgICAgICBhcyBsb25nIGFzIHRoZSBGbGlja2FibGUgZG9lcyBub3QgaGFu
ZGxlIHRvdWNoIGV2ZW50cyBkaXJlY3RseS4KKworICAgICAgICBBZnRlciB0aGlzIGNoYW5nZSBR
dFdlYktpdDIgZG9lcyBubyBsb25nZXIgZGVwZW5kIG9uIFF0V2lkZ2V0cyBhbmQgdGhpcyBkZXBl
bmRlbmN5IGNhbiBiZQorICAgICAgICByZW1vdmVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFR
dWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJp
dmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6
dHJhbnNmb3JtVG9JdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2
YXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpyZWFkRmxpY2thYmxlUHJvcGVy
dHkpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OndyaXRlRmxpY2thYmxlUHJvcGVy
dHkpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aGFuZGxlSW5wdXQpOgorICAgICAgICAoUVF1
aWNrV2ViVmlldzo6cmV0dXJuVG9Cb3VuZHMpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y2Fu
Y2VsRmxpY2spOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudEl0ZW0pOgorICAgICAg
ICAoUVF1aWNrV2ViVmlldzo6aXNNb3ZpbmcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aXNE
cmFnZ2luZyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojppc0ZsaWNraW5nKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXc6OmNvbnRlbnRXaWR0aCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpz
ZXRDb250ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudEhlaWdodCk6
CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50SGVpZ2h0KToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXc6OmNvbnRlbnRYKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnNldENvbnRl
bnRYKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNvbnRlbnRZKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OnNldENvbnRlbnRZKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNvbnRlbnRQ
b3MpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6c2V0Q29udGVudFBvcyk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3Ojp1cGRhdGVDb250ZW50U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
Ojppbml0aWFsaXplRmxpY2thYmxlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjp1
cGRhdGVUb3VjaFZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjpmbGlja2FibGVDb250ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OmNvbnRlbnRJdGVtKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNv
bnRlbnRXaWR0aCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250
ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudEhl
aWdodCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50SGVp
Z2h0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRYKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRYKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRZKToKKyAgICAgICAgKFFRdWlja1dl
YlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRZKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dl
YnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAodHN0X1FRdWlja1dlYlZpZXc6
OnNjcm9sbFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVj
b2duaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpjb250ZW50TW92aW5nQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6d2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cmVzZXQpOgorICAgICAgICAo
V2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFwcGx5Q29uc3RyYWludHMpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1h
dGlvbkFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6cGFuR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0
dXJlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQ29udGVudCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVy
Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgorCiAyMDEyLTAxLTI3ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlLWNyZWF0aW5nIFFRdWlj
a1dlYlZpZXcgc3RhcnRzIG5ldyB3ZWIgcHJvY2VzcyBldmVyeSB0aW1lCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBhOGMxNzE4
Li5iN2Q2Nzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZS5jcHAKQEAgLTU1LDExICs1NSwxNSBAQCB2b2lkIFFRdWlja1dlYlBhZ2U6Omdl
b21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9s
ZAogewogICAgIFFRdWlja0l0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2Vv
bWV0cnkpOwogCi0gICAgaWYgKCFkLT51c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpCisg
ICAgaWYgKG5ld0dlb21ldHJ5LmlzRW1wdHkoKSB8fCBuZXdHZW9tZXRyeS5zaXplKCkgPT0gb2xk
R2VvbWV0cnkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobmV3R2VvbWV0cnku
c2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAgICAgZC0+c2V0RHJhd2luZ0FyZWFT
aXplKG5ld0dlb21ldHJ5LnNpemUoKS50b1NpemUoKSk7CisgICAgaWYgKCFkLT51c2VUcmFkaXRp
b25hbERlc2t0b3BCZWhhdmlvdXIpIHsKKyAgICAgICAgZC0+dmlld3BvcnRJdGVtLT51cGRhdGVD
b250ZW50U2l6ZShuZXdHZW9tZXRyeS5zaXplKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZC0+c2V0RHJhd2luZ0FyZWFTaXplKG5ld0dlb21ldHJ5LnNpemUoKS50b1NpemUoKSk7
CiB9CiAKIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpRUXVpY2tXZWJQYWdlUHJpdmF0ZShRUXVpY2tX
ZWJQYWdlKiBxLCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0pCkBAIC0xMDksNyArMTEzLDcg
QEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKQog
ICAgIHRyYW5zZm9ybS5zY2FsZShjb250ZW50U2NhbGUsIGNvbnRlbnRTY2FsZSk7CiAKICAgICBm
bG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkocSk7Ci0gICAgUVJlY3RGIGNs
aXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBSZWN0VG9TY2VuZShxLT5wYXJlbnRJdGVtKCkt
PmJvdW5kaW5nUmVjdCgpKTsKKyAgICBRUmVjdEYgY2xpcFJlY3QgPSB2aWV3cG9ydEl0ZW0tPm1h
cFJlY3RUb1NjZW5lKHZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkpOwogCiAgICAgaWYgKCFj
bGlwUmVjdC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MCw3ICsyODQsMTggQEAg
UVRyYW5zZm9ybSBRUXVpY2tXZWJQYWdlOjp0cmFuc2Zvcm1Gcm9tSXRlbSgpIGNvbnN0CiAKIFFU
cmFuc2Zvcm0gUVF1aWNrV2ViUGFnZTo6dHJhbnNmb3JtVG9JdGVtKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gUVRyYW5zZm9ybShkLT5jb250ZW50U2NhbGUsIDAsIDAsIDAsIGQtPmNvbnRlbnRTY2Fs
ZSwgMCwgeCgpLCB5KCksIDEpOworICAgIHFyZWFsIHhQb3MgPSB4KCk7CisgICAgcXJlYWwgeVBv
cyA9IHkoKTsKKworICAgIGlmICghZC0+dXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKSB7
CisgICAgICAgIC8vIEZsaWNrYWJsZSBtb3ZlcyBpdHMgY29udGVudEl0ZW0gc28gd2UgbmVlZCB0
byB0YWtlIHRoYXQgcG9zaXRpb24gaW50byBhY2NvdW50LAorICAgICAgICAvLyBhcyB3ZWxsIGFz
IHRoZSBwb3RlbnRpYWwgZGlzcGxhY2VtZW50IG9mIHRoZSBwYWdlIG9uIHRoZSBjb250ZW50SXRl
bQorICAgICAgICAvLyBiZWNhdXNlIG9mIGFkZGl0aW9uYWwgUU1MIGl0ZW1zLgorICAgICAgICB4
UG9zICs9IHBhcmVudEl0ZW0oKS0+eCgpOworICAgICAgICB5UG9zICs9IHBhcmVudEl0ZW0oKS0+
eSgpOworICAgIH0KKworICAgIHJldHVybiBRVHJhbnNmb3JtKGQtPmNvbnRlbnRTY2FsZSwgMCwg
MCwgMCwgZC0+Y29udGVudFNjYWxlLCAwLCB4UG9zLCB5UG9zLCAxKTsKIH0KIAogdm9pZCBRUXVp
Y2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA2MTg4NDFjLi4zYWQ1ODhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHAKQEAgLTQ1LDE4ICs0NSw0MCBAQAogI2luY2x1ZGUgInF3ZWJ2aWV3cG9ydGluZm9fcC5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1
ZGUgPFFEZWNsYXJhdGl2ZUNvbXBvbmVudD4KICNpbmNsdWRlIDxRRGVjbGFyYXRpdmVFbmdpbmU+
CiAjaW5jbHVkZSA8UUZpbGVEaWFsb2c+CiAjaW5jbHVkZSA8UXRRdWljay9RUXVpY2tDYW52YXM+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2luY2x1ZGUgPFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2lubGluZSBUIGZsaWNrYWJsZVByb3BlcnR5KGNvbnN0IFFPYmplY3QqIG9iaiwgY29uc3Qg
Y2hhciogbmFtZSkKK3sKKyAgICBBU1NFUlQob2JqKTsKKyAgICBBU1NFUlQob2JqLT5tZXRhT2Jq
ZWN0KCktPmluZGV4T2ZQcm9wZXJ0eShuYW1lKSAhPSAtMSk7CisgICAgcmV0dXJuIG9iai0+cHJv
cGVydHkobmFtZSkudmFsdWU8VD4oKTsKK30KKworaW5saW5lIHZvaWQgc2V0RmxpY2thYmxlUHJv
cGVydHkoUU9iamVjdCogb2JqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBRVmFyaWFudCYgdmFs
dWUpCit7CisgICAgQVNTRVJUKG9iaik7CisgICAgQVNTRVJUKG9iai0+bWV0YU9iamVjdCgpLT5p
bmRleE9mUHJvcGVydHkobmFtZSkgIT0gLTEpOworICAgIG9iai0+c2V0UHJvcGVydHkobmFtZSwg
dmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZQorCiBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1
aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiAgICAgOiBxX3B0cih2
aWV3cG9ydCkKKyAgICAsIGZsaWNrUHJvdmlkZXIoMCkKICAgICAsIGFsZXJ0RGlhbG9nKDApCiAg
ICAgLCBjb25maXJtRGlhbG9nKDApCiAgICAgLCBwcm9tcHREaWFsb2coMCkKQEAgLTY0LDYgKzg2
LDggQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKFFRdWlja1dl
YlZpZXcqIHZpZXdwb3J0KQogICAgICwgY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2coMCkK
ICAgICAsIGl0ZW1TZWxlY3RvcigwKQogICAgICwgcG9zdFRyYW5zaXRpb25TdGF0ZShhZG9wdFB0
cihuZXcgUG9zdFRyYW5zaXRpb25TdGF0ZSh0aGlzKSkpCisgICAgLCB1c2VQYWdlV2lkdGhBc0Nv
bnRlbnRXaWR0aCh0cnVlKQorICAgICwgdXNlUGFnZUhlaWdodEFzQ29udGVudEhlaWdodCh0cnVl
KQogICAgICwgaXNUcmFuc2l0aW9uaW5nVG9OZXdQYWdlKGZhbHNlKQogICAgICwgcGFnZUlzU3Vz
cGVuZGVkKGZhbHNlKQogICAgICwgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoZmFsc2UpCkBA
IC0xMzAsNiArMTU0LDczIEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpc2FibGVNb3Vz
ZUV2ZW50cygpCiAgICAgcS0+c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFsc2UpOwogfQogCit2b2lk
IFFRdWlja1dlYlZpZXc6OmhhbmRsZVRvdWNoRmxpY2tFdmVudChRVG91Y2hFdmVudCogZXZlbnQp
Cit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRF
dmVudChkLT5mbGlja1Byb3ZpZGVyLCBldmVudCk7Cit9CisKK1FRdWlja0l0ZW0qIFFRdWlja1dl
YlZpZXc6OmNvbnRlbnRJdGVtKCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgcmV0
dXJuIGZsaWNrYWJsZVByb3BlcnR5PFFRdWlja0l0ZW0qPihkLT5mbGlja1Byb3ZpZGVyLCAiY29u
dGVudEl0ZW0iKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3OjpyZXR1cm5Ub0JvdW5kcygpCit7
CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnJldHVyblRvQm91bmRzLmludm9rZShk
LT5mbGlja1Byb3ZpZGVyLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViVmlldzo6Y2FuY2VsRmxpY2soKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBk
LT5jYW5jZWxGbGljay5pbnZva2UoZC0+ZmxpY2tQcm92aWRlciwgUXQ6OkRpcmVjdENvbm5lY3Rp
b24pOworfQorCitib29sIFFRdWlja1dlYlZpZXc6OmlzTW92aW5nKCkgY29uc3QKK3sKKyAgICBR
X0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGZsaWNrYWJsZVByb3BlcnR5PGJv
b2w+KGQtPmZsaWNrUHJvdmlkZXIsICJtb3ZpbmciKTsKK30KKworYm9vbCBRUXVpY2tXZWJWaWV3
Ojppc0RyYWdnaW5nKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Cisg
ICAgcmV0dXJuIGZsaWNrYWJsZVByb3BlcnR5PGJvb2w+KGQtPmZsaWNrUHJvdmlkZXIsICJkcmFn
Z2luZyIpOworfQorCitib29sIFFRdWlja1dlYlZpZXc6OmlzRmxpY2tpbmcoKSBjb25zdAorewor
ICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVy
dHk8Ym9vbD4oZC0+ZmxpY2tQcm92aWRlciwgImZsaWNraW5nIik7Cit9CisKK1FQb2ludEYgUVF1
aWNrV2ViVmlldzo6Y29udGVudFBvcygpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dl
YlZpZXcpOworICAgIHFyZWFsIHggPSBmbGlja2FibGVQcm9wZXJ0eTxxcmVhbD4oZC0+ZmxpY2tQ
cm92aWRlciwgImNvbnRlbnRYIik7CisgICAgcXJlYWwgeSA9IGZsaWNrYWJsZVByb3BlcnR5PHFy
ZWFsPihkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFkiKTsKKyAgICByZXR1cm4gUVBvaW50Rih4
LCB5KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50UG9zKGNvbnN0IFFQb2lu
dEYmIHBvcykKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgc2V0RmxpY2thYmxlUHJv
cGVydHkoZC0+ZmxpY2tQcm92aWRlciwgImNvbnRlbnRYIiwgcG9zLngoKSk7CisgICAgc2V0Rmxp
Y2thYmxlUHJvcGVydHkoZC0+ZmxpY2tQcm92aWRlciwgImNvbnRlbnRZIiwgcG9zLnkoKSk7Cit9
CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6dXBkYXRlQ29udGVudFNpemUoY29uc3QgUVNpemVGJiBz
aXplKQoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+Zmxp
Y2tQcm92aWRlcik7CisgICAgaWYgKGQtPnVzZVBhZ2VXaWR0aEFzQ29udGVudFdpZHRoKQorICAg
ICAgICBzZXRGbGlja2FibGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFdpZHRo
Iiwgc2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoZC0+dXNlUGFnZUhlaWdodEFzQ29udGVudEhlaWdo
dCkKKyAgICAgICAgc2V0RmxpY2thYmxlUHJvcGVydHkoZC0+ZmxpY2tQcm92aWRlciwgImNvbnRl
bnRIZWlnaHQiLCBzaXplLmhlaWdodCgpKTsKK30KKwogdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0
ZTo6aW5pdGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiB7CiAgICAgaWYg
KGludGVyYWN0aW9uRW5naW5lKSB7CkBAIC0xNDUsNiArMjM2LDggQEAgdm9pZCBRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiAK
IHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVUb3VjaChRUXVpY2tXZWJWaWV3
KiB2aWV3cG9ydCkKIHsKKyAgICBpbml0aWFsaXplRmxpY2thYmxlKHZpZXdwb3J0KTsKKwogICAg
IGludGVyYWN0aW9uRW5naW5lLnJlc2V0KG5ldyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUo
dmlld3BvcnQsIHBhZ2VWaWV3LmRhdGEoKSkpOwogICAgIHBhZ2VWaWV3LT5kLT5ldmVudEhhbmRs
ZXItPnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgp
KTsKICAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKQEAgLTE1NCw2ICsyNDcsNDcgQEAgdm9pZCBR
UXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKFFRdWlja1dlYlZpZXcqIHZpZXdw
b3J0KQogICAgIHVwZGF0ZVRvdWNoVmlld3BvcnRTaXplKCk7CiB9CiAKK3ZvaWQgUVF1aWNrV2Vi
Vmlld1ByaXZhdGU6OmluaXRpYWxpemVGbGlja2FibGUoUVF1aWNrV2ViVmlldyogd2ViVmlldykK
K3sKKyAgICBRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2luZSA9IHFtbEVuZ2luZSh3ZWJWaWV3KTsK
KyAgICBRRGVjbGFyYXRpdmVDb250ZXh0KiBjb250ZXh0ID0gcW1sQ29udGV4dCh3ZWJWaWV3KTsK
KworICAgIEFTU0VSVChlbmdpbmUpOworICAgIEFTU0VSVChjb250ZXh0KTsKKworICAgIFFEZWNs
YXJhdGl2ZUNvbXBvbmVudCBjb21wb25lbnQoZW5naW5lLCB3ZWJWaWV3KTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgaW50ZXJuYWwgRmxpY2thYmxlIGluc3RhbmNlIGR5bmFtaWNhbGx5LgorICAgIC8v
IFdlIG9ubHkgdXNlIHB1YmxpYyBRTUwgQVBJIHNvIHRoYXQgd2UgZG8gbm90IGRlcGVuZAorICAg
IC8vIG9uIHByaXZhdGUgQVBJIG9mIHRoZSBRdERlY2xhcmF0aXZlIG1vZHVsZS4KKyAgICBjb21w
b25lbnQuc2V0RGF0YShRQnl0ZUFycmF5TGl0ZXJhbCgiaW1wb3J0IFF0UXVpY2sgMi4wXG5GbGlj
a2FibGUge30iKSwgUVVybCgpKTsKKyAgICBmbGlja1Byb3ZpZGVyID0gcW9iamVjdF9jYXN0PFFR
dWlja0l0ZW0qPihjb21wb25lbnQuY3JlYXRlKGNvbnRleHQpKTsKKworICAgIEFTU0VSVChmbGlj
a1Byb3ZpZGVyKTsKKworICAgIC8vIFNldCB0aGUgd2ViVmlldyBhcyB0aGUgcGFyZW50IG9mIHRo
ZSBmbGlja1Byb3ZpZGVyIGFuZCByZXBhcmVudAorICAgIC8vIHRoZSBwYWdlIHNvIGl0IGlzIHBs
YWNlZCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtLgorICAgIGZsaWNrUHJvdmlkZXItPnNl
dFBhcmVudEl0ZW0od2ViVmlldyk7CisgICAgcGFnZVZpZXctPnNldFBhcmVudEl0ZW0od2ViVmll
dy0+Y29udGVudEl0ZW0oKSk7CisKKyAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9iamVjdCA9
IGZsaWNrUHJvdmlkZXItPm1ldGFPYmplY3QoKTsKKworICAgIGludCBtZXRob2RJbmRleCA9IG1l
dGFPYmplY3QtPmluZGV4T2ZNZXRob2QoInJldHVyblRvQm91bmRzKCkiKTsKKyAgICBBU1NFUlQo
bWV0aG9kSW5kZXggIT0gLTEpOworICAgIHJldHVyblRvQm91bmRzID0gbWV0YU9iamVjdC0+bWV0
aG9kKG1ldGhvZEluZGV4KTsKKworICAgIG1ldGhvZEluZGV4ID0gbWV0YU9iamVjdC0+aW5kZXhP
Zk1ldGhvZCgiY2FuY2VsRmxpY2soKSIpOworICAgIEFTU0VSVChtZXRob2RJbmRleCAhPSAtMSk7
CisgICAgY2FuY2VsRmxpY2sgPSBtZXRhT2JqZWN0LT5tZXRob2QobWV0aG9kSW5kZXgpOworCisg
ICAgLy8gUHJvcGFnYXRlIGZsaWNrYWJsZSBzaWduYWxzLgorICAgIFFPYmplY3Q6OmNvbm5lY3Qo
ZmxpY2tQcm92aWRlciwgU0lHTkFMKG1vdmluZ0NoYW5nZWQoKSksIHdlYlZpZXcsIFNJR05BTCht
b3ZpbmdDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29u
bmVjdChmbGlja1Byb3ZpZGVyLCBTSUdOQUwoY29udGVudFdpZHRoQ2hhbmdlZCgpKSwgd2ViVmll
dy0+bV9leHBlcmltZW50YWwsIFNJR05BTChjb250ZW50V2lkdGhDaGFuZ2VkKCkpLCBRdDo6RGly
ZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBTSUdO
QUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIHdlYlZpZXctPm1fZXhwZXJpbWVudGFsLCBTSUdO
QUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBR
T2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJvdmlkZXIsIFNJR05BTChjb250ZW50WENoYW5nZWQoKSks
IHdlYlZpZXctPm1fZXhwZXJpbWVudGFsLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBRdDo6
RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBT
SUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCB3ZWJWaWV3LT5tX2V4cGVyaW1lbnRhbCwgU0lHTkFM
KGNvbnRlbnRZQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQorCiB2b2lkIFFR
dWlja1dlYlZpZXdQcml2YXRlOjpsb2FkRGlkQ29tbWl0KCkKIHsKICAgICAvLyBEdWUgdG8gZW50
ZXJpbmcgcHJvdmlzaW9uYWwgbG9hZCBiZWZvcmUgY29tbWl0dGluZywgd2UKQEAgLTM0NSw2ICs0
NzksOSBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjp1cGRhdGVUb3VjaFZpZXdwb3J0U2l6
ZSgpCiAgICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGZsaWNrUHJvdmlkZXItPnNldFdpZHRoKHZpZXdwb3J0U2l6ZS53aWR0aCgpKTsKKyAgICBm
bGlja1Byb3ZpZGVyLT5zZXRIZWlnaHQodmlld3BvcnRTaXplLmhlaWdodCgpKTsKKwogICAgIC8v
IExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28g
dGhhdAogICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCiAgICAg
d2ViUGFnZVByb3h5LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKQEAgLTg1OSw2ICs5
OTYsNjggQEAgUVF1aWNrV2ViUGFnZSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6cGFnZSgp
CiAgICAgcmV0dXJuIHFfcHRyLT5wYWdlKCk7CiB9CiAKK1FEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0
eTxRT2JqZWN0PiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmbGlja2FibGVEYXRhKCkKK3sK
KyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGZsaWNrYWJsZVByb3Bl
cnR5PFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiA+KGQtPmZsaWNrUHJvdmlkZXIs
ICJmbGlja2FibGVEYXRhIik7Cit9CisKK1FRdWlja0l0ZW0qIFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWw6OmNvbnRlbnRJdGVtKCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgcmV0
dXJuIGZsaWNrYWJsZVByb3BlcnR5PFFRdWlja0l0ZW0qPihkLT5mbGlja1Byb3ZpZGVyLCAiY29u
dGVudEl0ZW0iKTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVu
dFdpZHRoKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0
dXJuIGZsaWNrYWJsZVByb3BlcnR5PHFyZWFsPihkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFdp
ZHRoIik7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudFdp
ZHRoKHFyZWFsIHdpZHRoKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT51c2VQ
YWdlV2lkdGhBc0NvbnRlbnRXaWR0aCA9IGZhbHNlOworICAgIHNldEZsaWNrYWJsZVByb3BlcnR5
KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50V2lkdGgiLCB3aWR0aCk7Cit9CisKK3FyZWFsIFFR
dWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRIZWlnaHQoKSBjb25zdAoreworICAgIFFf
RChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8cXJl
YWw+KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50SGVpZ2h0Iik7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudEhlaWdodChxcmVhbCBoZWlnaHQpCit7Cisg
ICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnVzZVBhZ2VIZWlnaHRBc0NvbnRlbnRIZWln
aHQgPSBmYWxzZTsKKyAgICBzZXRGbGlja2FibGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAi
Y29udGVudEhlaWdodCIsIGhlaWdodCk7Cit9CisKK3FyZWFsIFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWw6OmNvbnRlbnRYKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7
CisgICAgcmV0dXJuIGZsaWNrYWJsZVByb3BlcnR5PHFyZWFsPihkLT5mbGlja1Byb3ZpZGVyLCAi
Y29udGVudFgiKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250
ZW50WChxcmVhbCB4KQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBzZXRGbGlja2Fi
bGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFgiLCB4KTsKK30KKworcXJlYWwg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFkoKSBjb25zdAoreworICAgIFFfRChj
b25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8cXJlYWw+
KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50WSIpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWw6OnNldENvbnRlbnRZKHFyZWFsIHkpCit7CisgICAgUV9EKFFRdWlja1dlYlZp
ZXcpOworICAgIHNldEZsaWNrYWJsZVByb3BlcnR5KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50
WSIsIHkpOworfQorCiBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBh
cmVudCkKICAgICA6IFFRdWlja0l0ZW0ocGFyZW50KQogICAgICwgZF9wdHIobmV3IFFRdWlja1dl
YlZpZXdQcml2YXRlKHRoaXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggM2M3MDE3OS4uOGMzZTA4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC0xMDcs
NiArMTA3LDIxIEBAIHB1YmxpYzoKIAogICAgIFFRdWlja1dlYlBhZ2UqIHBhZ2UoKTsKIAorICAg
IHZvaWQgaGFuZGxlVG91Y2hGbGlja0V2ZW50KFFUb3VjaEV2ZW50Kik7CisKKyAgICBRUXVpY2tJ
dGVtKiBjb250ZW50SXRlbSgpOworCisgICAgLy8gSW50ZXJuYWwgRmxpY2thYmxlIEFQSSB1c2Vk
IGJ5IHRoZSBpbnRlcmFjdGlvbiBlbmdpbmUKKyAgICB2b2lkIHJldHVyblRvQm91bmRzKCk7Cisg
ICAgdm9pZCBjYW5jZWxGbGljaygpOworICAgIGJvb2wgaXNNb3ZpbmcoKSBjb25zdDsKKyAgICBi
b29sIGlzRHJhZ2dpbmcoKSBjb25zdDsKKyAgICBib29sIGlzRmxpY2tpbmcoKSBjb25zdDsKKyAg
ICBRUG9pbnRGIGNvbnRlbnRQb3MoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRQb3MoY29u
c3QgUVBvaW50RiYpOworCisgICAgdm9pZCB1cGRhdGVDb250ZW50U2l6ZShjb25zdCBRU2l6ZUYm
KTsKKwogICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIGV4cGVyaW1lbnRhbCgpIGNvbnN0
OwogICAgIHN0YXRpYyBRUXVpY2tXZWJWaWV3QXR0YWNoZWQqIHFtbEF0dGFjaGVkUHJvcGVydGll
cyhRT2JqZWN0Kik7CiAKQEAgLTEyMiw2ICsxMzcsNyBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2
b2lkIHJlbG9hZCgpOwogCiBRX1NJR05BTFM6CisgICAgdm9pZCBtb3ZpbmdDaGFuZ2VkKCk7CiAg
ICAgdm9pZCB0aXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYgdGl0bGUpOwogICAgIHZvaWQgbG9h
ZFN0YXJ0ZWQoKTsKICAgICB2b2lkIGxvYWRTdWNjZWVkZWQoKTsKQEAgLTIwNCw2ICsyMjAsMTUg
QEAgUU1MX0RFQ0xBUkVfVFlQRUlORk8oUVF1aWNrV2ViVmlldywgUU1MX0hBU19BVFRBQ0hFRF9Q
Uk9QRVJUSUVTKQogY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRh
bCA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogICAgIFFfUFJPUEVSVFkoUVF1aWNr
V2ViUGFnZSogcGFnZSBSRUFEIHBhZ2UgQ09OU1RBTlQgRklOQUwpCisKKyAgICAvLyBRTUwgRmxp
Y2thYmxlIEFQSQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFdpZHRoIFJFQUQgY29udGVu
dFdpZHRoIFdSSVRFIHNldENvbnRlbnRXaWR0aCBOT1RJRlkgY29udGVudFdpZHRoQ2hhbmdlZCkK
KyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRIZWlnaHQgUkVBRCBjb250ZW50SGVpZ2h0IFdS
SVRFIHNldENvbnRlbnRIZWlnaHQgTk9USUZZIGNvbnRlbnRIZWlnaHRDaGFuZ2VkKQorICAgIFFf
UFJPUEVSVFkocXJlYWwgY29udGVudFggUkVBRCBjb250ZW50WCBXUklURSBzZXRDb250ZW50WCBO
T1RJRlkgY29udGVudFhDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFkgUkVB
RCBjb250ZW50WSBXUklURSBzZXRDb250ZW50WSBOT1RJRlkgY29udGVudFlDaGFuZ2VkKQorICAg
IFFfUFJPUEVSVFkoUVF1aWNrSXRlbSogY29udGVudEl0ZW0gUkVBRCBjb250ZW50SXRlbSBDT05T
VEFOVCkKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBm
bGlja2FibGVEYXRhIFJFQUQgZmxpY2thYmxlRGF0YSkKKwogICAgIFFfUFJPUEVSVFkoUVdlYk5h
dmlnYXRpb25IaXN0b3J5KiBuYXZpZ2F0aW9uSGlzdG9yeSBSRUFEIG5hdmlnYXRpb25IaXN0b3J5
IENPTlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlQ29tcG9uZW50KiBh
bGVydERpYWxvZyBSRUFEIGFsZXJ0RGlhbG9nIFdSSVRFIHNldEFsZXJ0RGlhbG9nIE5PVElGWSBh
bGVydERpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVDb21wb25lbnQq
IGNvbmZpcm1EaWFsb2cgUkVBRCBjb25maXJtRGlhbG9nIFdSSVRFIHNldENvbmZpcm1EaWFsb2cg
Tk9USUZZIGNvbmZpcm1EaWFsb2dDaGFuZ2VkKQpAQCAtMjUwLDkgKzI3NSwyMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGludCBzY2hlbWVEZWxlZ2F0ZXNfQ291bnQoUURlY2xhcmF0aXZlTGlzdFBy
b3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiopOwogICAgIHN0YXRpYyB2b2lkIHNjaGVt
ZURlbGVnYXRlc19DbGVhcihRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1l
RGVsZWdhdGU+Kik7CiAgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVt
ZURlbGVnYXRlPiBzY2hlbWVEZWxlZ2F0ZXMoKTsKKyAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVy
dHk8UU9iamVjdD4gZmxpY2thYmxlRGF0YSgpOwogICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25T
Y2hlbWVIYW5kbGVyKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtS
ZXF1ZXN0RGF0YT4pOwogICAgIHZvaWQgc2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoUVF1aWNr
TmV0d29ya1JlcGx5Kik7CiAKKyAgICBRUXVpY2tJdGVtKiBjb250ZW50SXRlbSgpOworICAgIHFy
ZWFsIGNvbnRlbnRXaWR0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFdpZHRoKHFyZWFs
KTsKKyAgICBxcmVhbCBjb250ZW50SGVpZ2h0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50
SGVpZ2h0KHFyZWFsKTsKKyAgICBxcmVhbCBjb250ZW50WCgpIGNvbnN0OworICAgIHZvaWQgc2V0
Q29udGVudFgocXJlYWwpOworICAgIHFyZWFsIGNvbnRlbnRZKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRDb250ZW50WShxcmVhbCk7CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgc2V0VXNlVHJh
ZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGdvQmFja1Rv
KGludCBpbmRleCk7CkBAIC0yNjAsNiArMjk2LDEwIEBAIHB1YmxpYyBRX1NMT1RTOgogICAgIHZv
aWQgcG9zdE1lc3NhZ2UoY29uc3QgUVN0cmluZyYpOwogCiBRX1NJR05BTFM6CisgICAgdm9pZCBj
b250ZW50V2lkdGhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50SGVpZ2h0Q2hhbmdlZCgpOwor
ICAgIHZvaWQgY29udGVudFhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50WUNoYW5nZWQoKTsK
ICAgICB2b2lkIGFsZXJ0RGlhbG9nQ2hhbmdlZCgpOwogICAgIHZvaWQgY29uZmlybURpYWxvZ0No
YW5nZWQoKTsKICAgICB2b2lkIHByb21wdERpYWxvZ0NoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAppbmRleCBkYzgy
MzAxLi41ZDdkYjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgaW5pdGlhbGl6ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IDAsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZiA9IDApOwogCisgICAgdm9pZCBpbml0aWFsaXplRmxpY2thYmxlKFFRdWlj
a1dlYlZpZXcqKTsKICAgICB2b2lkIGluaXRpYWxpemVUb3VjaChRUXVpY2tXZWJWaWV3KiB2aWV3
cG9ydCk7CiAgICAgdm9pZCBpbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3KiB2aWV3cG9y
dCk7CiAgICAgdm9pZCBlbmFibGVNb3VzZUV2ZW50cygpOwpAQCAtMTUwLDYgKzE1MSw5IEBAIHBy
aXZhdGU6CiAgICAgUVNjb3BlZFBvaW50ZXI8UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lPiBp
bnRlcmFjdGlvbkVuZ2luZTsKIAogICAgIFFRdWlja1dlYlZpZXcqIHFfcHRyOworICAgIFFRdWlj
a0l0ZW0qIGZsaWNrUHJvdmlkZXI7CisgICAgUU1ldGFNZXRob2QgcmV0dXJuVG9Cb3VuZHM7Cisg
ICAgUU1ldGFNZXRob2QgY2FuY2VsRmxpY2s7CiAKICAgICBRRGVjbGFyYXRpdmVDb21wb25lbnQq
IGFsZXJ0RGlhbG9nOwogICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogY29uZmlybURpYWxvZzsK
QEAgLTE2Myw2ICsxNjcsMTQgQEAgcHJpdmF0ZToKICAgICBRRmlsZURpYWxvZyogZmlsZURpYWxv
ZzsKICAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIG9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyOwogCisgICAgLy8gVGhlc2UgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnRJdGVtIGlzIHNp
emVkIHRvIHRoZSBwYWdlCisgICAgLy8gaWYgdGhlIHVzZXIgZGlkIG5vdCBhZGQgb3RoZXIgZmxp
Y2thYmxlIGl0ZW1zIGluIFFNTC4KKyAgICAvLyBJZiB0aGUgdXNlciBhZGRzIGl0ZW1zIGluIFFN
TCBoZSBoYXMgdG8gbWFrZSBzdXJlIHRvCisgICAgLy8gYWxzbyBiaW5kIHRoZSBjb250ZW50V2lk
dGggYW5kIGNvbnRlbnRIZWlnaHQgYWNjb3JkaW5nbHkuCisgICAgLy8gVGhpcyBpcyBpbiBhY2Nv
cmRhbmNlIHdpdGggbm9ybWFsIFFNTCBGbGlja2FibGUgYmVoYXZpb3VyLgorICAgIGJvb2wgdXNl
UGFnZVdpZHRoQXNDb250ZW50V2lkdGg7CisgICAgYm9vbCB1c2VQYWdlSGVpZ2h0QXNDb250ZW50
SGVpZ2h0OworCiAgICAgYm9vbCBpc1RyYW5zaXRpb25pbmdUb05ld1BhZ2U7CiAgICAgYm9vbCBw
YWdlSXNTdXNwZW5kZWQ7CiAgICAgYm9vbCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vi
dmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDFkMTRk
MTguLjE1ZjI0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2
aWV3LmNwcApAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgdHN0X1FRdWlja1dlYlZpZXc6OnNjcm9s
bFJlcXVlc3QoKQogICAgIC8vIFVzZSBxUm91bmQgYXMgdGhhdCBpcyBhbHNvIHVzZWQgd2hlbiBj
YWxjdWxhdGluZyB0aGUgcG9zaXRpb24KICAgICAvLyBpbiBXZWJLaXQuCiAgICAgaW50IHkgPSAt
cVJvdW5kKDUwICogd2ViVmlldygpLT5wYWdlKCktPmNvbnRlbnRTY2FsZSgpKTsKLSAgICBRVkVS
SUZZKHdlYlZpZXcoKS0+cGFnZSgpLT5wb3MoKS55KCkgPT0geSk7CisgICAgUVZFUklGWSh3ZWJW
aWV3KCktPmNvbnRlbnRJdGVtKCktPnkoKSA9PSB5KTsKIH0KIAogUVRXRUJLSVRfQVBJX1RFU1Rf
TUFJTih0c3RfUVF1aWNrV2ViVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA2ZjkzYzkzLi42NjYyM2Vj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVj
b2duaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVy
ZVJlY29nbml6ZXIuY3BwCkBAIC0zNyw3ICszNyw3IEBAIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6
OlF0UGFuR2VzdHVyZVJlY29nbml6ZXIoUXRXZWJQYWdlRXZlbnRIYW5kbGVyKiBldmVudEhhbmRs
CiAgICAgcmVzZXQoKTsKIH0KIAotYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25p
emUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
Citib29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVu
dCogZXZlbnQpCiB7CiAgICAgaWYgKCFpbnRlcmFjdGlvbkVuZ2luZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC03MywxNiArNzMsMTYgQEAgYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVy
OjpyZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW0KICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fc3RhdGUgPSBHZXN0
dXJlUmVjb2duaXplZDsKLSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1
cmVTdGFydGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAg
ICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVTdGFydGVkKGV2ZW50KTsKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKTsK
LSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUodG91
Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgICAgICBpbnRlcmFjdGlv
bkVuZ2luZSgpLT5wYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShldmVudCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIFFFdmVudDo6VG91Y2hFbmQ6CiAgICAgICAgIGlmICht
X3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKSB7Ci0gICAgICAgICAgICBpbnRlcmFjdGlvbkVu
Z2luZSgpLT5wYW5HZXN0dXJlRW5kZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBN
aWxsaXMpOworICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZUVuZGVk
KGV2ZW50KTsKICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFu
R2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdl
c3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNTMyNTA3ZS4uY2YwOTRiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oCkBAIC00
Miw3ICs0Miw3IEBAIGNvbnN0IHFyZWFsIHBhbm5pbmdJbml0aWFsVHJpZ2dlckRpc3RhbmNlVGhy
ZXNob2xkID0gNS47CiBjbGFzcyBRdFBhbkdlc3R1cmVSZWNvZ25pemVyIDogcHVibGljIFF0R2Vz
dHVyZVJlY29nbml6ZXIgewogcHVibGljOgogICAgIFF0UGFuR2VzdHVyZVJlY29nbml6ZXIoUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyKik7Ci0gICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZl
bnQqLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIGJvb2wgcmVjb2duaXplKGNv
bnN0IFFUb3VjaEV2ZW50Kik7CiAgICAgdm9pZCByZXNldCgpOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lLmNwcAppbmRleCA4N2NiOWRiLi40ZGE2MzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LmNwcApAQCAtMjYsOSArMjYsNiBAQAogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgogI2lu
Y2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUgPFFQb2ludEY+Ci0jaW5jbHVkZSA8
UVNjcm9sbEV2ZW50PgotI2luY2x1ZGUgPFFTY3JvbGxQcmVwYXJlRXZlbnQ+Ci0jaW5jbHVkZSA8
UVNjcm9sbGVyUHJvcGVydGllcz4KICNpbmNsdWRlIDxRVHJhbnNmb3JtPgogI2luY2x1ZGUgPFFX
aGVlbEV2ZW50PgogI2luY2x1ZGUgPFF0UXVpY2svcXF1aWNraXRlbS5oPgpAQCAtMTE0LDQxICsx
MTEsMjQgQEAgaW5saW5lIFFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0ZW1S
ZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3QKICAgICByZXR1cm4gaXRlbVJlY3Q7CiB9
CiAKLVF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKGNvbnN0IFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBjb250ZW50
KQorUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUoUVF1aWNrV2ViVmlldyogdmlld3BvcnQsIFFRdWlja1dlYlBhZ2UqIGNvbnRlbnQpCiAgICAg
OiBtX3ZpZXdwb3J0KHZpZXdwb3J0KQogICAgICwgbV9jb250ZW50KGNvbnRlbnQpCiAgICAgLCBt
X3N1c3BlbmRDb3VudCgwKQorICAgICwgbV9oYWRVc2VySW50ZXJhY3Rpb24oZmFsc2UpCiAgICAg
LCBtX3NjYWxlQW5pbWF0aW9uKG5ldyBTY2FsZUFuaW1hdGlvbih0aGlzKSkKICAgICAsIG1fcGlu
Y2hTdGFydFNjYWxlKC0xKQogewogICAgIHJlc2V0KCk7CiAKLSAgICBRU2Nyb2xsZXJQcm9wZXJ0
aWVzIHByb3BlcnRpZXMgPSBzY3JvbGxlcigpLT5zY3JvbGxlclByb3BlcnRpZXMoKTsKLQotICAg
IC8vIFRoZSBRdFBhbkdlc3R1cmVSZWNvZ25pemVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWNvZ25p
emluZyB0aGUgZ2VzdHVyZQotICAgIC8vIHRodXMgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSBkcmFn
IHN0YXJ0IGRpc3RhbmNlLgotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxl
clByb3BlcnRpZXM6OkRyYWdTdGFydERpc3RhbmNlLCAwLjApOwotCi0gICAgLy8gU2V0IHNvbWUg
ZGVmYXVsdCBRU2Nyb2xsZXIgY29uc3RyYWlucyB0byBtaW1pYyB0aGUgcGh5c2ljcyBlbmdpbmUg
b2YgdGhlIE45IGJyb3dzZXIuCi0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9s
bGVyUHJvcGVydGllczo6QXhpc0xvY2tUaHJlc2hvbGQsIDAuNjYpOwotICAgIHByb3BlcnRpZXMu
c2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6OlNjcm9sbGluZ0N1cnZlLCBRRWFz
aW5nQ3VydmUoUUVhc2luZ0N1cnZlOjpPdXRFeHBvKSk7Ci0gICAgcHJvcGVydGllcy5zZXRTY3Jv
bGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6RGVjZWxlcmF0aW9uRmFjdG9yLCAwLjA1KTsK
LSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpNYXhp
bXVtVmVsb2NpdHksIDAuNjM1KTsKLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Ny
b2xsZXJQcm9wZXJ0aWVzOjpPdmVyc2hvb3REcmFnUmVzaXN0YW5jZUZhY3RvciwgMC4zMyk7Ci0g
ICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6T3ZlcnNo
b290U2Nyb2xsRGlzdGFuY2VGYWN0b3IsIDAuMzMpOwotCi0gICAgc2Nyb2xsZXIoKS0+c2V0U2Ny
b2xsZXJQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOwotCi0gICAgY29ubmVjdChtX2NvbnRlbnQsIFNJ
R05BTCh3aWR0aENoYW5nZWQoKSksIHRoaXMsIFNMT1QoaXRlbVNpemVDaGFuZ2VkKCkpLCBRdDo6
RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX2NvbnRlbnQsIFNJR05BTChoZWlnaHRD
aGFuZ2VkKCkpLCB0aGlzLCBTTE9UKGl0ZW1TaXplQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5l
Y3Rpb24pOworICAgIGNvbm5lY3QobV9jb250ZW50LCBTSUdOQUwod2lkdGhDaGFuZ2VkKCkpLCBT
TE9UKGl0ZW1TaXplQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIGNvbm5l
Y3QobV9jb250ZW50LCBTSUdOQUwoaGVpZ2h0Q2hhbmdlZCgpKSwgU0xPVChpdGVtU2l6ZUNoYW5n
ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fdmlld3BvcnQsIFNJ
R05BTChtb3ZpbmdDaGFuZ2VkKCkpLCBTTE9UKHNjcm9sbFN0YXRlQ2hhbmdlZCgpKSwgUXQ6OkRp
cmVjdENvbm5lY3Rpb24pOwogCiAgICAgY29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwo
dmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCiAgICAgICAgICAgICBTTE9UKHNjYWxlQW5pbWF0aW9u
VmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKICAgICBjb25u
ZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0
aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAogICAgICAgICAgICAgU0xP
VChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBR
QWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLQotICAg
IGNvbm5lY3Qoc2Nyb2xsZXIoKSwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRU2Nyb2xsZXI6OlN0YXRl
KSksCi0gICAgICAgICAgICBTTE9UKHNjcm9sbFN0YXRlQ2hhbmdlZChRU2Nyb2xsZXI6OlN0YXRl
KSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKIH0KIAogUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjp+UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkKQEAgLTE4Miw5ICsxNjIsMTEgQEAg
dm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0ZW1SZWN0VmlzaWJsZShjb25z
dCBRUmVjdEYmIGl0ZW1SZWN0KQogCiAgICAgbV9jb250ZW50LT5zZXRDb250ZW50U2NhbGUoaXRl
bVNjYWxlKTsKIAotICAgIC8vIFdlIG5lZWQgdG8gYW5pbWF0ZSB0aGUgY29udGVudCBidXQgdGhl
IHBvc2l0aW9uIHJlcHJlc2VudHMgdGhlIHZpZXdwb3J0IGhlbmNlIHdlIG5lZWQgdG8gaW52ZXJ0
IHRoZSBwb3NpdGlvbiBoZXJlLgotICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0
aGVyIHdpdGggdGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJy
ZW50IHNjYWxlOwotICAgIG1fY29udGVudC0+c2V0UG9zKC0gaXRlbVJlY3QudG9wTGVmdCgpICog
aXRlbVNjYWxlKTsKKyAgICAvLyBUbyBhbmltYXRlIHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRo
IHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2Fs
ZQorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBhZ2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBv
biB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcyku
CisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX2NvbnRlbnQtPnBvcygpICsgKGl0ZW1SZWN0LnRv
cExlZnQoKSAqIGl0ZW1TY2FsZSkpOworCisgICAgbV92aWV3cG9ydC0+c2V0Q29udGVudFBvcyhu
ZXdQb3NpdGlvbik7CiB9CiAKIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmlt
YXRlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCkBAIC0yMDMsNiArMTg1
LDE0IEBAIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXRlSXRlbVJlY3RW
aXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Zv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxTdGF0ZUNoYW5nZWQoKQorewor
ICAgIGlmIChtX3ZpZXdwb3J0LT5pc01vdmluZygpICYmICFtX3Njcm9sbFVwZGF0ZURlZmVycmVy
KQorICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXIodGhpcykpOworICAgIGVsc2UKKyAgICAgICAgbV9zY3JvbGxVcGRhdGVE
ZWZlcnJlci5jbGVhcigpOworfQorCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdT
dGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSAvKm9sZFN0YXRlKi8pCiB7CiAgICAgc3dp
dGNoIChuZXdTdGF0ZSkgewpAQCAtMjE4LDYwICsyMDgsNiBAQCB2b2lkIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0
aW9uOgogICAgIH0KIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9s
bFN0YXRlQ2hhbmdlZChRU2Nyb2xsZXI6OlN0YXRlIG5ld1N0YXRlKQotewotICAgIHN3aXRjaCAo
bmV3U3RhdGUpIHsKLSAgICBjYXNlIFFTY3JvbGxlcjo6SW5hY3RpdmU6Ci0gICAgICAgIC8vIEZJ
WE1FOiBRU2Nyb2xsZXIgZ2V0cyB3aGVuIGV2ZW4gd2hlbiB0YXBwaW5nIHdoaWxlIGl0IGlzIHNj
cm9sbGluZy4KLSAgICAgICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFFTY3JvbGxlcjo6UHJlc3NlZDoKLSAgICBjYXNlIFFTY3JvbGxl
cjo6RHJhZ2dpbmc6Ci0gICAgY2FzZSBRU2Nyb2xsZXI6OlNjcm9sbGluZzoKLSAgICAgICAgaWYg
KG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9z
Y3JvbGxVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVy
KHRoaXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi1ib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZXZlbnQoUUV2ZW50
KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsKLSAgICBjYXNlIFFFdmVu
dDo6U2Nyb2xsUHJlcGFyZTogewotICAgICAgICBRU2Nyb2xsUHJlcGFyZUV2ZW50KiBwcmVwYXJl
RXZlbnQgPSBzdGF0aWNfY2FzdDxRU2Nyb2xsUHJlcGFyZUV2ZW50Kj4oZXZlbnQpOwotICAgICAg
ICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydC0+Ym91bmRpbmdSZWN0KCk7
Ci0gICAgICAgIGNvbnN0IFFSZWN0RiBjb250ZW50UmVjdCA9IG1fdmlld3BvcnQtPm1hcFJlY3RG
cm9tSXRlbShtX2NvbnRlbnQsIG1fY29udGVudC0+Ym91bmRpbmdSZWN0KCkpOwotICAgICAgICBj
b25zdCBRUmVjdEYgcG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JJdGVtQXRTY2FsZShtX2Nv
bnRlbnQtPmNvbnRlbnRTY2FsZSgpKTsKLSAgICAgICAgcHJlcGFyZUV2ZW50LT5zZXRDb250ZW50
UG9zUmFuZ2UocG9zUmFuZ2UpOwotICAgICAgICBwcmVwYXJlRXZlbnQtPnNldFZpZXdwb3J0U2l6
ZSh2aWV3cG9ydFJlY3Quc2l6ZSgpKTsKLQotICAgICAgICAvLyBBcyB3ZSB3YW50IHRvIHB1c2gg
dGhlIGNvbnRlbnRzIGFuZCBub3QgYWN0dWFsbHkgc2Nyb2xsIGl0LCB3ZSBuZWVkIHRvIGludmVy
dCB0aGUgcG9zaXRpb25zIGhlcmUuCi0gICAgICAgIHByZXBhcmVFdmVudC0+c2V0Q29udGVudFBv
cygtY29udGVudFJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgcHJlcGFyZUV2ZW50LT5hY2NlcHQo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgUUV2ZW50OjpTY3JvbGw6
IHsKLSAgICAgICAgUVNjcm9sbEV2ZW50KiBzY3JvbGxFdmVudCA9IHN0YXRpY19jYXN0PFFTY3Jv
bGxFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgUVBvaW50RiBuZXdQb3MgPSAtc2Nyb2xsRXZlbnQt
PmNvbnRlbnRQb3MoKSAtIHNjcm9sbEV2ZW50LT5vdmVyc2hvb3REaXN0YW5jZSgpOwotICAgICAg
ICBpZiAobV9jb250ZW50LT5wb3MoKSAhPSBuZXdQb3MpIHsKLSAgICAgICAgICAgIFFQb2ludEYg
Y3VycmVudFBvc0luQ1NTQ29vcmRpbmF0ZXMgPSBtX3ZpZXdwb3J0LT5tYXBUb1dlYkNvbnRlbnQo
bV9jb250ZW50LT5wb3MoKSk7Ci0gICAgICAgICAgICBRUG9pbnRGIG5ld1Bvc0luQ1NTQ29vcmRp
bmF0ZXMgPSBtX3ZpZXdwb3J0LT5tYXBUb1dlYkNvbnRlbnQobmV3UG9zKTsKLQotICAgICAgICAg
ICAgLy8gVGhpcyBtdXN0IGJlIGVtaXR0ZWQgYmVmb3JlIHZpZXdwb3J0VXBkYXRlUmVxdWVzdGVk
IHNvIHRoYXQgdGhlIHdlYiBwcm9jZXNzIGtub3dzIHdoZXJlIHRvIGxvb2sgZm9yIHRpbGVzLgot
ICAgICAgICAgICAgZW1pdCB2aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKGN1cnJlbnRQ
b3NJbkNTU0Nvb3JkaW5hdGVzIC0gbmV3UG9zSW5DU1NDb29yZGluYXRlcyk7Ci0gICAgICAgICAg
ICBtX2NvbnRlbnQtPnNldFBvcyhuZXdQb3MpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIFFPYmplY3Q6OmV2ZW50KGV2ZW50KTsKLX0KLQogc3RhdGljIGlubGluZSBRUG9pbnRGIGJv
dW5kUG9zaXRpb24oY29uc3QgUVBvaW50RiBtaW5Qb3NpdGlvbiwgY29uc3QgUVBvaW50RiYgcG9z
aXRpb24sIGNvbnN0IFFQb2ludEYmIG1heFBvc2l0aW9uKQogewogICAgIHJldHVybiBRUG9pbnRG
KHFCb3VuZChtaW5Qb3NpdGlvbi54KCksIHBvc2l0aW9uLngoKSwgbWF4UG9zaXRpb24ueCgpKSwK
QEAgLTMwNCw3ICsyNDAsOCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6d2hl
ZWxFdmVudChRV2hlZWxFdmVudCogZXYpCiAgICAgICAgIG5ld1Bvcy5yeSgpICs9IGRlbHRhOwog
CiAgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9ySXRlbUF0U2NhbGUo
bV9jb250ZW50LT5jb250ZW50U2NhbGUoKSk7Ci0gICAgbV9jb250ZW50LT5zZXRQb3MoLWJvdW5k
UG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBuZXdQb3MsIGVuZFBvc1JhbmdlLmJvdHRv
bVJpZ2h0KCkpKTsKKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uID0gLWJvdW5kUG9zaXRpb24oZW5k
UG9zUmFuZ2UudG9wTGVmdCgpLCBuZXdQb3MsIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwor
ICAgIG1fdmlld3BvcnQtPnNldENvbnRlbnRQb3MobmV3UG9zaXRpb24pOwogfQogCiB2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZVBvc2l0aW9uUmVxdWVzdChjb25zdCBRUG9p
bnQmIHBhZ2VQb3NpdGlvbikKQEAgLTQzMiw4ICszNjksMTAgQEAgdm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnJlc2V0KCkKIAogICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gZmFs
c2U7CiAKLSAgICBzY3JvbGxlcigpLT5zdG9wKCk7CisgICAgbV92aWV3cG9ydC0+Y2FuY2VsRmxp
Y2soKTsKICAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7CisgICAgbV9zY2FsZVVwZGF0ZURl
ZmVycmVyLmNsZWFyKCk7CisgICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwogfQog
CiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6YXBwbHlDb25zdHJhaW50cyhjb25z
dCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCkBAIC00NTAsNyArMzg5LDcgQEAgdm9pZCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgQ29uc3RyYWlu
dHMmIGNvbnN0cmFpbnQKICAgICAgICAgbV9jb250ZW50LT5zZXRDb250ZW50U2NhbGUoaXRlbVNj
YWxlRnJvbUNTUyhpbml0aWFsU2NhbGUpKTsKICAgICB9CiAKLSAgICAvLyBJZiB0aGUgd2ViIGFw
cCBjaGFuZ2VzIHN1Y2Nlc3NpdmVseSBjaGFuZ2VzIHRoZSB2aWV3cG9ydCBvbiBwdXJwb3NlCisg
ICAgLy8gSWYgdGhlIHdlYiBhcHAgc3VjY2Vzc2l2ZWx5IGNoYW5nZXMgdGhlIHZpZXdwb3J0IG9u
IHB1cnBvc2UKICAgICAvLyBpdCB3YW50cyB0byBiZSBpbiBjb250cm9sIGFuZCB3ZSBzaG91bGQg
ZGlzYWJsZSBhbmltYXRpb25zLgogICAgIGVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5k
YXJ5KC8qIGltbWVkaWF0ZSAqLyB0cnVlKTsKIH0KQEAgLTQ2Miw0NCArNDAxLDYyIEBAIHFyZWFs
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Y3VycmVudENTU1NjYWxlKCkKIAogYm9vbCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0
CiB7Ci0gICAgUVNjcm9sbGVyKiBzY3JvbGxlciA9IGNvbnN0X2Nhc3Q8UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKj4odGhpcyktPnNjcm9sbGVyKCk7Ci0gICAgcmV0dXJuIHNjcm9sbGVyLT5z
dGF0ZSgpID09IFFTY3JvbGxlcjo6U2Nyb2xsaW5nOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6aW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBTdG9w
cGluZyB0aGUgc2Nyb2xsZXIgaW1tZWRpYXRlbHkgc3RvcHMga2luZXRpYyBzY3JvbGxpbmcgYW5k
IGlmIHRoZSB2aWV3IGlzIG91dCBvZiBib3VuZHMgaXQKLSAgICAvLyBpcyBtb3ZlZCBpbnNpZGUg
dmFsaWQgYm91bmRzIGltbWVkaWF0ZWx5IGFzIHdlbGwuIFRoaXMgaXMgdGhlIGJlaGF2aW9yIHRo
YXQgd2Ugd2FudC4KLSAgICBzY3JvbGxlcigpLT5zdG9wKCk7CisgICAgcmV0dXJuIG1fdmlld3Bv
cnQtPmlzRmxpY2tpbmcoKTsKIH0KIAogYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAogewotICAgIFFTY3JvbGxlciogc2Nyb2xsZXIgPSBj
b25zdF9jYXN0PFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSo+KHRoaXMpLT5zY3JvbGxlcigp
OwotICAgIHJldHVybiBzY3JvbGxlci0+c3RhdGUoKSA9PSBRU2Nyb2xsZXI6OlByZXNzZWQgfHwg
c2Nyb2xsZXItPnN0YXRlKCkgPT0gUVNjcm9sbGVyOjpEcmFnZ2luZzsKKyAgICByZXR1cm4gbV92
aWV3cG9ydC0+aXNEcmFnZ2luZygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2lu
dCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsK
ICAgICBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc2Nyb2xsZXIoKS0+aGFuZGxl
SW5wdXQoUVNjcm9sbGVyOjpJbnB1dFByZXNzLCAgdmlld3BvcnRUb3VjaFBvaW50LCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CisKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRv
dWNoVXBkYXRlKTsKKworICAgIC8vIFRoZSBwYW4gZ2VzdHVyZSByZWNvZ25pemVyIHNlbmRzIHRo
ZSBjdXJyZW50IFRvdWNoVXBkYXRlIGV2ZW50IHdoZW4gaXQKKyAgICAvLyByZWNvZ25pemVkIGEg
cGFuIGdlc3R1cmUuCisgICAgLy8gQ29uc3RydWN0IGEgVG91Y2hCZWdpbiBldmVudCBvdXQgb2Yg
dGhlIHJlY2VpdmVkIGV2ZW50IGZvciB0aGUgZmxpY2thYmxlLgorICAgIFFUb3VjaEV2ZW50IHRv
dWNoQmVnaW4oUUV2ZW50OjpUb3VjaEJlZ2luLAorICAgICAgICAgICAgICAgIGV2ZW50LT5kZXZp
Y2UoKSwKKyAgICAgICAgICAgICAgICBldmVudC0+bW9kaWZpZXJzKCksCisgICAgICAgICAgICAg
ICAgZXZlbnQtPnRvdWNoUG9pbnRTdGF0ZXMoKSwKKyAgICAgICAgICAgICAgICBldmVudC0+dG91
Y2hQb2ludHMoKSk7CisKKyAgICBtX3ZpZXdwb3J0LT5oYW5kbGVUb3VjaEZsaWNrRXZlbnQoJnRv
dWNoQmVnaW4pOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0g
ZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKS5wb3MoKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYm
ICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3ZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRVG91Y2hFdmVudCogZXZlbnQpCiB7Ci0gICAgc2Nyb2xsZXIoKS0+aGFuZGxlSW5wdXQoUVNj
cm9sbGVyOjpJbnB1dE1vdmUsICB2aWV3cG9ydFRvdWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWls
bGlzKTsKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRlKTsK
KworICAgIFFQb2ludEYgdmlld3BvcnRQb3NpdGlvbiA9IGV2ZW50LT50b3VjaFBvaW50cygpLmZp
cnN0KCkucG9zKCk7CisKKyAgICBlbWl0IHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQo
bV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgLSB2aWV3cG9ydFBvc2l0aW9u
KTsKKworICAgIG1fdmlld3BvcnQtPmhhbmRsZVRvdWNoRmxpY2tFdmVudChjb25zdF9jYXN0PFFU
b3VjaEV2ZW50Kj4oZXZlbnQpKTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29y
ZGluYXRlcyA9IHZpZXdwb3J0UG9zaXRpb247CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKIHsKLSAgICAvLyBTdG9wcGluZyB0aGUg
c2Nyb2xsZXIgaW1tZWRpYXRlbHkgc3RvcHMga2luZXRpYyBzY3JvbGxpbmcgYW5kIGlmIHRoZSB2
aWV3IGlzIG91dCBvZiBib3VuZHMgaXQKLSAgICAvLyBpcyBtb3ZlZCBpbnNpZGUgdmFsaWQgYm91
bmRzIGltbWVkaWF0ZWx5IGFzIHdlbGwuIFRoaXMgaXMgdGhlIGJlaGF2aW9yIHRoYXQgd2Ugd2Fu
dC4KLSAgICBzY3JvbGxlcigpLT5zdG9wKCk7CisgICAgLy8gUmVzZXQgdGhlIHZlbG9jaXR5IHNh
bXBsZXMgb2YgdGhlIGZsaWNrYWJsZS4KKyAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSB0aGUgcmVjb2duaXplciBpZiB3ZSBoYXZlIGEgcmVjb2duaXplZAorICAgIC8vIHBhbiBn
ZXN0dXJlIGFuZCByZWNlaXZlIGEgdG91Y2ggZXZlbnQgd2l0aCBtdWx0aXBsZSB0b3VjaCBwb2lu
dHMKKyAgICAvLyAoaWUuIHRyYW5zaXRpb24gdG8gYSBwaW5jaCBnZXN0dXJlKSBhcyBpdCBkb2Vz
IG5vdCBtb3ZlIHRoZSBjb250ZW50CisgICAgLy8gYmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgor
ICAgIC8vIFdoZW4gdGhlIHBpbmNoIGdlc3R1cmUgZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRp
b25lZCBhbmQgc2NhbGVkCisgICAgLy8gYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgorICAgIG1f
dmlld3BvcnQtPmNhbmNlbEZsaWNrKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2lu
dCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCiB7Ci0g
ICAgc2Nyb2xsZXIoKS0+aGFuZGxlSW5wdXQoUVNjcm9sbGVyOjpJbnB1dFJlbGVhc2UsICB2aWV3
cG9ydFRvdWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBBU1NFUlQoZXZlbnQt
PnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoRW5kKTsKKyAgICBtX3ZpZXdwb3J0LT5oYW5kbGVUb3Vj
aEZsaWNrRXZlbnQoY29uc3RfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KSk7CisgICAgbV9sYXN0
UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91Y2hQb2ludHMoKS5m
aXJzdCgpLnBvcygpOwogfQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nh
bGVBbmltYXRpb25BY3RpdmUoKSBjb25zdApAQCAtNTU1LDcgKzUxMiw3IEBAIHZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQ
b2ludEYmIHBpbmNoCiAgICAgY29uc3QgUVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyAtIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzOwogICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CiAKLSAgICBtX2NvbnRlbnQtPnNldFBvcyht
X2NvbnRlbnQtPnBvcygpICsgcG9zaXRpb25EaWZmKTsKKyAgICBtX3ZpZXdwb3J0LT5zZXRDb250
ZW50UG9zKG1fdmlld3BvcnQtPmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7CiB9CiAKIHZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVFbmRlZCgpCkBAIC01
ODYsNyArNTQzLDggQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQ29u
dGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW4KICAgICBRUG9pbnRGIG9sZFBp
bmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNlbnRl
ckluQ1NTQ29vcmRpbmF0ZXMpOwogICAgIG1fY29udGVudC0+c2V0Q29udGVudFNjYWxlKGl0ZW1T
Y2FsZUZyb21DU1MoY3NzU2NhbGUpKTsKICAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3
cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0
ZXMpOwotICAgIG1fY29udGVudC0+c2V0UG9zKG1fY29udGVudC0+cG9zKCkgLSAobmV3UGluY2hD
ZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7CisKKyAgICBtX3Zp
ZXdwb3J0LT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnQtPmNvbnRlbnRQb3MoKSArIChuZXdQaW5j
aENlbnRlck9uVmlld3BvcnQgLSBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKIH0KIAogI2lu
Y2x1ZGUgIm1vY19RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZS5oCmluZGV4IDE3OTBjNzIuLjRlODA2MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgKQEAgLTIzLDgg
KzIzLDggQEAKICNkZWZpbmUgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gKIAogI2luY2x1
ZGUgIk93blB0ci5oIgotI2luY2x1ZGUgPFFTY3JvbGxlcj4KICNpbmNsdWRlICJxd2Via2l0Z2xv
YmFsLmgiCisjaW5jbHVkZSA8UXRHdWkvUVRvdWNoRXZlbnQ+CiAjaW5jbHVkZSA8UXRDb3JlL1FP
YmplY3Q+CiAjaW5jbHVkZSA8UXRDb3JlL1FSZWN0Rj4KICNpbmNsdWRlIDxRdENvcmUvUVZhcmlh
bnQ+CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSA6
IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6Ci0gICAgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKGNvbnN0IFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7
CisgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFFRdWlja1dlYlZpZXcqLCBRUXVpY2tX
ZWJQYWdlKik7CiAgICAgflF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpOwogCiAgICAgc3Ry
dWN0IENvbnN0cmFpbnRzIHsKQEAgLTY3LDggKzY3LDYgQEAgcHVibGljOgogICAgICAgICBRU2l6
ZSBsYXlvdXRTaXplOwogICAgIH07CiAKLSAgICBib29sIGV2ZW50KFFFdmVudCopOwotCiAgICAg
dm9pZCByZXNldCgpOwogICAgIHZvaWQgYXBwbHlDb25zdHJhaW50cyhjb25zdCBDb25zdHJhaW50
cyYpOwogCkBAIC03OSwxMyArNzcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcGFnZVBvc2l0aW9u
UmVxdWVzdChjb25zdCBRUG9pbnQmIHBvcyk7CiAKICAgICBib29sIHNjcm9sbEFuaW1hdGlvbkFj
dGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgaW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCk7CiAKICAg
ICBib29sIHBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHBhbkdlc3R1cmVTdGFy
dGVkKGNvbnN0IFFQb2ludEYmICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVz
dGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9p
bnRGJiAgdmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwor
ICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQqKTsKKyAgICB2b2lk
IHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50Kik7CiAgICAgdm9pZCBw
YW5HZXN0dXJlQ2FuY2VsbGVkKCk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBv
aW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
KyAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChjb25zdCBRVG91Y2hFdmVudCopOwogCiAgICAgYm9v
bCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwogICAgIHZvaWQgaW50ZXJydXB0U2NhbGVB
bmltYXRpb24oKTsKQEAgLTExMSw3ICsxMDgsNyBAQCBwcml2YXRlIFFfU0xPVFM6CiAgICAgLy8g
UmVzcG9uZCB0byBjaGFuZ2VzIG9mIGNvbnRlbnQgdGhhdCBhcmUgbm90IGRyaXZlbiBieSB1cywg
bGlrZSB0aGUgcGFnZSByZXNpemluZyBpdHNlbGYuCiAgICAgdm9pZCBpdGVtU2l6ZUNoYW5nZWQo
KTsKIAotICAgIHZvaWQgc2Nyb2xsU3RhdGVDaGFuZ2VkKFFTY3JvbGxlcjo6U3RhdGUpOworICAg
IHZvaWQgc2Nyb2xsU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0YXRl
Q2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0
YXRlKTsKICAgICB2b2lkIHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVl
KSB7IHNldEl0ZW1SZWN0VmlzaWJsZSh2YWx1ZS50b1JlY3RGKCkpOyB9CiAKQEAgLTEzMSwxMSAr
MTI4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYm
IGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKTsKIAotICAgIC8vIEFzIGxv
bmcgYXMgdGhlIG9iamVjdCBleGlzdHMgdGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4g
dGhlIHNhbWUgUVNjcm9sbGVyIGluc3RhbmNlLgotICAgIFFTY3JvbGxlciogc2Nyb2xsZXIoKSB7
IHJldHVybiBRU2Nyb2xsZXI6OnNjcm9sbGVyKHRoaXMpOyB9Ci0KLQotICAgIGNvbnN0IFFRdWlj
a1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnQ7CisgICAgUVF1aWNrV2ViVmlldyogY29uc3QgbV92
aWV3cG9ydDsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBtX2NvbnRlbnQ7CiAKICAgICBDb25z
dHJhaW50cyBtX2NvbnN0cmFpbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAppbmRleCAwOWY4OTYwLi5kMTA1Y2Y3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmNwcApAQCAtNTA2LDggKzUwNiw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVy
Ojpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQsCiAg
ICAgICAgIC8vIFRoZSBpbnRlcmFjdGlvbiBlbmdpbmUgbWlnaHQgc3RpbGwgYmUgYW5pbWF0aW5n
IGtpbmV0aWMgc2Nyb2xsaW5nIG9yIGEgc2NhbGUgYW5pbWF0aW9uCiAgICAgICAgIC8vIHN1Y2gg
YXMgZG91YmxlLXRhcCB0byB6b29tIG9yIHRoZSBib3VuY2UgYmFjayBlZmZlY3QuIEEgdG91Y2gg
c3RvcHMgdGhlIGtpbmV0aWMgc2Nyb2xsaW5nCiAgICAgICAgIC8vIHdoZXJlIGFzIGl0IGRvZXMg
bm90IHN0b3AgdGhlIHNjYWxlIGFuaW1hdGlvbi4KLSAgICAgICAgaWYgKG1faW50ZXJhY3Rpb25F
bmdpbmUtPnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICAgICAgbV9pbnRlcmFjdGlv
bkVuZ2luZS0+aW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCk7CisgICAgICAgIC8vIFNlbmRpbmcg
dGhlIGV2ZW50IHRvIHRoZSBmbGlja1Byb3ZpZGVyIHdpbGwgc3RvcCB0aGUga2luZXRpYyBzY3Jv
bGxpbmcgYW5pbWF0aW9uLgogICAgICAgICBicmVhazsKICAgICBjYXNlIFFFdmVudDo6VG91Y2hV
cGRhdGU6CiAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmltYXRpb24gY2FuIG9ubHkgYmUgaW50ZXJy
dXB0ZWQgYnkgYSBwaW5jaCBnZXN0dXJlLCB3aGljaCB3aWxsIHRoZW4gdGFrZSBvdmVyLgpAQCAt
NTIzLDE1ICs1MjIsMTQgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91
Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwKICAgICBpZiAobV9pbnRl
cmFjdGlvbkVuZ2luZS0+c2NhbGVBbmltYXRpb25BY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gQ29udmVydCB0aGUgZXZlbnQgdGltZXN0YW1wIGZyb20gc2Vjb25kIHRvIG1pbGxp
c2Vjb25kLgotICAgIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyA9IHN0YXRpY19jYXN0PHFp
bnQ2ND4oZXZlbnQudGltZXN0YW1wKCkgKiAxMDAwKTsKLSAgICBtX3Bhbkdlc3R1cmVSZWNvZ25p
emVyLnJlY29nbml6ZShldiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIG1fcGFuR2VzdHVy
ZVJlY29nbml6ZXIucmVjb2duaXplKGV2KTsKICAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIu
cmVjb2duaXplKGV2KTsKIAogICAgIGlmIChtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2du
aXplZCgpIHx8IG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6ZWQoKSkKICAgICAg
ICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwogICAgIGVsc2UgewotICAgICAgICBj
b25zdCBRVG91Y2hFdmVudCogZXYgPSBldmVudC5uYXRpdmVFdmVudCgpOworICAgICAgICAvLyBD
b252ZXJ0IHRoZSBldmVudCB0aW1lc3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCisg
ICAgICAgIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyA9IHN0YXRpY19jYXN0PHFpbnQ2ND4o
ZXZlbnQudGltZXN0YW1wKCkgKiAxMDAwKTsKICAgICAgICAgbV90YXBHZXN0dXJlUmVjb2duaXpl
ci5yZWNvZ25pemUoZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKICAgICB9CiB9Ci0tIAoxLjcu
OC4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124306</attachid>
            <date>2012-01-27 06:39:18 -0800</date>
            <delta_ts>2012-02-06 09:28:15 -0800</delta_ts>
            <desc>rebased patch</desc>
            <filename>0001-Qt-WK2-WebView-should-use-Flickable-instead-of-QScro.patch</filename>
            <type>text/plain</type>
            <size>42676</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSBhODU0NWE5MmY2MzlmYTNhNjIyODY5ZGQ5N2ZlOWM3ZGNjMjc3NWRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IEZyaSwgMjcgSmFuIDIwMTIgMTU6MzY6MjAgKzAxMDAKU3ViamVjdDogW1BBVENIXSBb
UXRdW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJsZSBpbnN0ZWFkIG9mIFFTY3JvbGxl
cgogdG8gaGFuZGxlIHBvc2l0aW9uaW5nCgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5MiArKysrKysrKysKIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgIHwgICAyNSArKy0KIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgIHwgIDE5OSArKysrKysr
KysrKysrKysrKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3AuaCAgfCAgIDQwICsrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wX3AuaCAgIHwgICAxMiArKwogLi4uL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0
X3FxdWlja3dlYnZpZXcuY3BwICAgfCAgICAyICstCiAuLi4vVUlQcm9jZXNzL3F0L1F0UGFuR2Vz
dHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAgIDggKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmggIHwgICAgMiArLQogLi4uL1VJUHJvY2Vzcy9x
dC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwICAgfCAgMTcyICsrKysrKystLS0tLS0t
LS0tLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCAgICAg
fCAgIDIxICstLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxl
ci5jcHAgfCAgIDEwICstCiAxMSBmaWxlcyBjaGFuZ2VkLCA0NDUgaW5zZXJ0aW9ucygrKSwgMTM4
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5YTZmZmI0Li44NzVhZDllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsOTUgQEAKKzIwMTItMDEtMjcgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNz
aUBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIFdlYlZpZXcgc2hvdWxkIHVzZSBGbGlj
a2FibGUgaW5zdGVhZCBvZiBRU2Nyb2xsZXIgdG8gaGFuZGxlIHBvc2l0aW9uaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI3NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IFdlYlZp
ZXcgaW1wbGVtZW50YXRpb24gdXNlcyBRU2Nyb2xsZXIgdG8gbWFuYWdlIHBvc2l0aW9uaW5nIGJ1
dCBvdGhlciBzaW1pbGFyCisgICAgICAgIGl0ZW1zIGluIFFNTCAoaWUuIExpc3RWaWV3LCBHcmlk
VmlldykgdXNlIEZsaWNrYWJsZSBhcyB0aGVpciBiYXNlIGNsYXNzLgorICAgICAgICBTaW5jZSBR
U2Nyb2xsZXIgd2lsbCBiZSBkcm9wcGVkIGZyb20gUXQ1IHRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
UVNjcm9sbGVyIGNvZGUKKyAgICAgICAgYW5kIHJlZGlyZWN0cyBwYW4gZ2VzdHVyZXMgdG8gYSBk
eW5hbWljYWxseSBjcmVhdGVkIGludGVybmFsIEZsaWNrYWJsZSBpbnN0YW5jZSAoZmxpY2tQcm92
aWRlcikKKyAgICAgICAgd2hpY2ggaGFuZGxlcyB0aGUgcG9zaXRpb25pbmcuCisKKyAgICAgICAg
VGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHVzZXMgcHVibGljIFFNTCBBUEkgYW5kIGRvZXMgbm90
IGRlcGVuZCBvbiBkZWNsYXJhdGl2ZS1wcml2YXRlLgorICAgICAgICBJdCBwcm9wYWdhdGVzIGEg
c21hbGwgc3Vic2V0IG9mIHRoZSBGbGlja2FibGUgQVBJIGFzIHRoZSBwdWJsaWMgQVBJIG9mIHRo
ZSBXZWJWaWV3LgorICAgICAgICBUaGlzIG1pbmltYWxpc3RpYyBBUEkgaXMgYWNjZXNzaWJsZSB2
aWEgdGhlIGV4cGVyaW1lbnRhbCBleHRlbnNpb24gYW5kIG1ha2VzIGl0IHBvc3NpYmxlCisgICAg
ICAgIGluIFFNTCB0byBwbGFjZSBhZGRpdGlvbmFsIGl0ZW1zIChzdWNoIGFzIHRvb2xiYXJzLCBz
Y3JvbGwgaW5kaWNhdG9ycyBhbmQgZmxvYXRpbmcgbWVudXMpCisgICAgICAgIGFyb3VkIHRoZSBw
YWdlLgorICAgICAgICBUaGVzZSBpdGVtcyBjYW4gdXNlIGFuY2hvcmluZyBhbmQgYmluZGluZyBm
b3IgcG9zaXRpb25pbmcgb24gdGhlIGZsaWNrYWJsZSBjb250ZW50SXRlbS4KKworICAgICAgICBU
aGlzIHBhdGNoIGRlcGVuZHMgaG93ZXZlciBvbiB0aGUgYXV0b21hdGljIHRvdWNoLT5tb3VzZSBl
dmVudCBzeW50aGV0aXphdGlvbiBvZiBRdDUuCisgICAgICAgIFRoZSB0b3VjaCBldmVudHMgc2Vu
dCB0byB0aGUgZmxpY2tQcm92aWRlciBhcmUgdHJhbnNsYXRlZCB0byBtb3VzZSBldmVudHMgYXV0
b21hdGljYWxseQorICAgICAgICBhcyBsb25nIGFzIHRoZSBGbGlja2FibGUgZG9lcyBub3QgaGFu
ZGxlIHRvdWNoIGV2ZW50cyBkaXJlY3RseS4KKworICAgICAgICBBZnRlciB0aGlzIGNoYW5nZSBR
dFdlYktpdDIgZG9lcyBubyBsb25nZXIgZGVwZW5kIG9uIFF0V2lkZ2V0cyBhbmQgdGhpcyBkZXBl
bmRlbmN5IGNhbiBiZQorICAgICAgICByZW1vdmVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFR
dWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJp
dmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6
dHJhbnNmb3JtVG9JdGVtKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2
YXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpyZWFkRmxpY2thYmxlUHJvcGVy
dHkpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OndyaXRlRmxpY2thYmxlUHJvcGVy
dHkpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aGFuZGxlSW5wdXQpOgorICAgICAgICAoUVF1
aWNrV2ViVmlldzo6cmV0dXJuVG9Cb3VuZHMpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y2Fu
Y2VsRmxpY2spOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudEl0ZW0pOgorICAgICAg
ICAoUVF1aWNrV2ViVmlldzo6aXNNb3ZpbmcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aXNE
cmFnZ2luZyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojppc0ZsaWNraW5nKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXc6OmNvbnRlbnRXaWR0aCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpz
ZXRDb250ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudEhlaWdodCk6
CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpzZXRDb250ZW50SGVpZ2h0KToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXc6OmNvbnRlbnRYKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnNldENvbnRl
bnRYKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNvbnRlbnRZKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OnNldENvbnRlbnRZKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmNvbnRlbnRQ
b3MpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6c2V0Q29udGVudFBvcyk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3Ojp1cGRhdGVDb250ZW50U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
Ojppbml0aWFsaXplRmxpY2thYmxlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjp1
cGRhdGVUb3VjaFZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjpmbGlja2FibGVDb250ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OmNvbnRlbnRJdGVtKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNv
bnRlbnRXaWR0aCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250
ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudEhl
aWdodCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50SGVp
Z2h0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRYKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRYKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRZKToKKyAgICAgICAgKFFRdWlja1dl
YlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRZKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dl
YnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAodHN0X1FRdWlja1dlYlZpZXc6
OnNjcm9sbFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVj
b2duaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpjb250ZW50TW92aW5nQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6d2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cmVzZXQpOgorICAgICAgICAo
V2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFwcGx5Q29uc3RyYWludHMpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1h
dGlvbkFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6cGFuR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0
dXJlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQ29udGVudCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVy
Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgorCiAyMDEyLTAxLTI3ICBLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIEZhZGUgb3V0IHRh
cCBoaWdobGlnaHRpbmcgd2hlbiBzdGFydGluZyB0byBwYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IDY5NzZmODcuLmZkOTY0
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlLmNwcApAQCAtNTUsMTEgKzU1LDE1IEBAIHZvaWQgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlD
aGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkCiB7CiAg
ICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRyeSk7
CiAKLSAgICBpZiAoIWQtPnVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikKKyAgICBpZiAo
bmV3R2VvbWV0cnkuaXNFbXB0eSgpIHx8IG5ld0dlb21ldHJ5LnNpemUoKSA9PSBvbGRHZW9tZXRy
eS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkg
IT0gb2xkR2VvbWV0cnkuc2l6ZSgpKQotICAgICAgICBkLT5zZXREcmF3aW5nQXJlYVNpemUobmV3
R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsKKyAgICBpZiAoIWQtPnVzZVRyYWRpdGlvbmFsRGVz
a3RvcEJlaGF2aW91cikgeworICAgICAgICBkLT52aWV3cG9ydEl0ZW0tPnVwZGF0ZUNvbnRlbnRT
aXplKG5ld0dlb21ldHJ5LnNpemUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
LT5zZXREcmF3aW5nQXJlYVNpemUobmV3R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsKIH0KIAog
UVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlja1dlYlBhZ2VQcml2YXRlKFFRdWlja1dlYlBhZ2Uq
IHEsIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSkKQEAgLTExNSw3ICsxMTksNyBAQCB2b2lk
IFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCiAgICAgdHJh
bnNmb3JtLnNjYWxlKGNvbnRlbnRTY2FsZSwgY29udGVudFNjYWxlKTsKIAogICAgIGZsb2F0IG9w
YWNpdHkgPSBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKLSAgICBRUmVjdEYgY2xpcFJlY3Qg
PSBxLT5wYXJlbnRJdGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91bmRp
bmdSZWN0KCkpOworICAgIFFSZWN0RiBjbGlwUmVjdCA9IHZpZXdwb3J0SXRlbS0+bWFwUmVjdFRv
U2NlbmUodmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7CiAKICAgICBpZiAoIWNsaXBSZWN0
LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg2LDcgKzI5MCwxOCBAQCBRVHJhbnNm
b3JtIFFRdWlja1dlYlBhZ2U6OnRyYW5zZm9ybUZyb21JdGVtKCkgY29uc3QKIAogUVRyYW5zZm9y
bSBRUXVpY2tXZWJQYWdlOjp0cmFuc2Zvcm1Ub0l0ZW0oKSBjb25zdAogewotICAgIHJldHVybiBR
VHJhbnNmb3JtKGQtPmNvbnRlbnRTY2FsZSwgMCwgMCwgMCwgZC0+Y29udGVudFNjYWxlLCAwLCB4
KCksIHkoKSwgMSk7CisgICAgcXJlYWwgeFBvcyA9IHgoKTsKKyAgICBxcmVhbCB5UG9zID0geSgp
OworCisgICAgaWYgKCFkLT51c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpIHsKKyAgICAg
ICAgLy8gRmxpY2thYmxlIG1vdmVzIGl0cyBjb250ZW50SXRlbSBzbyB3ZSBuZWVkIHRvIHRha2Ug
dGhhdCBwb3NpdGlvbiBpbnRvIGFjY291bnQsCisgICAgICAgIC8vIGFzIHdlbGwgYXMgdGhlIHBv
dGVudGlhbCBkaXNwbGFjZW1lbnQgb2YgdGhlIHBhZ2Ugb24gdGhlIGNvbnRlbnRJdGVtCisgICAg
ICAgIC8vIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBRTUwgaXRlbXMuCisgICAgICAgIHhQb3MgKz0g
cGFyZW50SXRlbSgpLT54KCk7CisgICAgICAgIHlQb3MgKz0gcGFyZW50SXRlbSgpLT55KCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFFUcmFuc2Zvcm0oZC0+Y29udGVudFNjYWxlLCAwLCAwLCAwLCBk
LT5jb250ZW50U2NhbGUsIDAsIHhQb3MsIHlQb3MsIDEpOwogfQogCiB2b2lkIFFRdWlja1dlYlBh
Z2VQcml2YXRlOjp1cGRhdGVTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDI1ZmM3ZDkuLjg0OTk2MDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAt
NDUsMTggKzQ1LDQwIEBACiAjaW5jbHVkZSAicXdlYnZpZXdwb3J0aW5mb19wLmgiCiAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8UURl
Y2xhcmF0aXZlQ29tcG9uZW50PgogI2luY2x1ZGUgPFFEZWNsYXJhdGl2ZUVuZ2luZT4KICNpbmNs
dWRlIDxRRmlsZURpYWxvZz4KICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0NhbnZhcz4KICNpbmNs
dWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAj
aW5jbHVkZSA8V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5s
aW5lIFQgZmxpY2thYmxlUHJvcGVydHkoY29uc3QgUU9iamVjdCogb2JqLCBjb25zdCBjaGFyKiBu
YW1lKQoreworICAgIEFTU0VSVChvYmopOworICAgIEFTU0VSVChvYmotPm1ldGFPYmplY3QoKS0+
aW5kZXhPZlByb3BlcnR5KG5hbWUpICE9IC0xKTsKKyAgICByZXR1cm4gb2JqLT5wcm9wZXJ0eShu
YW1lKS52YWx1ZTxUPigpOworfQorCitpbmxpbmUgdm9pZCBzZXRGbGlja2FibGVQcm9wZXJ0eShR
T2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQob2JqKTsKKyAgICBBU1NFUlQob2JqLT5tZXRhT2JqZWN0KCktPmluZGV4T2ZQ
cm9wZXJ0eShuYW1lKSAhPSAtMSk7CisgICAgb2JqLT5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlCisKIFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJW
aWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKICAgICA6IHFfcHRyKHZpZXdwb3J0
KQorICAgICwgZmxpY2tQcm92aWRlcigwKQogICAgICwgYWxlcnREaWFsb2coMCkKICAgICAsIGNv
bmZpcm1EaWFsb2coMCkKICAgICAsIHByb21wdERpYWxvZygwKQpAQCAtNjQsNiArODYsOCBAQCBR
UXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2ViVmlldyog
dmlld3BvcnQpCiAgICAgLCBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZygwKQogICAgICwg
aXRlbVNlbGVjdG9yKDApCiAgICAgLCBwb3N0VHJhbnNpdGlvblN0YXRlKGFkb3B0UHRyKG5ldyBQ
b3N0VHJhbnNpdGlvblN0YXRlKHRoaXMpKSkKKyAgICAsIHVzZXJEaWRPdmVycmlkZUNvbnRlbnRX
aWR0aChmYWxzZSkKKyAgICAsIHVzZXJEaWRPdmVycmlkZUNvbnRlbnRIZWlnaHQoZmFsc2UpCiAg
ICAgLCBpc1RyYW5zaXRpb25pbmdUb05ld1BhZ2UoZmFsc2UpCiAgICAgLCBwYWdlSXNTdXNwZW5k
ZWQoZmFsc2UpCiAgICAgLCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZChmYWxzZSkKQEAgLTEz
MSw2ICsxNTUsNzMgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNlRXZl
bnRzKCkKICAgICBxLT5zZXRBY2NlcHRIb3ZlckV2ZW50cyhmYWxzZSk7CiB9CiAKK3ZvaWQgUVF1
aWNrV2ViVmlldzo6aGFuZGxlVG91Y2hGbGlja0V2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkKK3sK
KyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgUUNvcmVBcHBsaWNhdGlvbjo6c2VuZEV2ZW50
KGQtPmZsaWNrUHJvdmlkZXIsIGV2ZW50KTsKK30KKworUVF1aWNrSXRlbSogUVF1aWNrV2ViVmll
dzo6Y29udGVudEl0ZW0oKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4g
ZmxpY2thYmxlUHJvcGVydHk8UVF1aWNrSXRlbSo+KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50
SXRlbSIpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OnJldHVyblRvQm91bmRzKCkKK3sKKyAg
ICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+cmV0dXJuVG9Cb3VuZHMuaW52b2tlKGQtPmZs
aWNrUHJvdmlkZXIsIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKK30KKwordm9pZCBRUXVpY2tXZWJW
aWV3OjpjYW5jZWxGbGljaygpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPmNh
bmNlbEZsaWNrLmludm9rZShkLT5mbGlja1Byb3ZpZGVyLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7
Cit9CisKK2Jvb2wgUVF1aWNrV2ViVmlldzo6aXNNb3ZpbmcoKSBjb25zdAoreworICAgIFFfRChj
b25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8Ym9vbD4o
ZC0+ZmxpY2tQcm92aWRlciwgIm1vdmluZyIpOworfQorCitib29sIFFRdWlja1dlYlZpZXc6Omlz
RHJhZ2dpbmcoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBy
ZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8Ym9vbD4oZC0+ZmxpY2tQcm92aWRlciwgImRyYWdnaW5n
Iik7Cit9CisKK2Jvb2wgUVF1aWNrV2ViVmlldzo6aXNGbGlja2luZygpIGNvbnN0Cit7CisgICAg
UV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBmbGlja2FibGVQcm9wZXJ0eTxi
b29sPihkLT5mbGlja1Byb3ZpZGVyLCAiZmxpY2tpbmciKTsKK30KKworUVBvaW50RiBRUXVpY2tX
ZWJWaWV3Ojpjb250ZW50UG9zKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmll
dyk7CisgICAgcXJlYWwgeCA9IGZsaWNrYWJsZVByb3BlcnR5PHFyZWFsPihkLT5mbGlja1Byb3Zp
ZGVyLCAiY29udGVudFgiKTsKKyAgICBxcmVhbCB5ID0gZmxpY2thYmxlUHJvcGVydHk8cXJlYWw+
KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50WSIpOworICAgIHJldHVybiBRUG9pbnRGKHgsIHkp
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OnNldENvbnRlbnRQb3MoY29uc3QgUVBvaW50RiYg
cG9zKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBzZXRGbGlja2FibGVQcm9wZXJ0
eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFgiLCBwb3MueCgpKTsKKyAgICBzZXRGbGlja2Fi
bGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFkiLCBwb3MueSgpKTsKK30KKwor
dm9pZCBRUXVpY2tXZWJWaWV3Ojp1cGRhdGVDb250ZW50U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUp
Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVChkLT5mbGlja1By
b3ZpZGVyKTsKKyAgICBpZiAoIWQtPnVzZXJEaWRPdmVycmlkZUNvbnRlbnRXaWR0aCkKKyAgICAg
ICAgc2V0RmxpY2thYmxlUHJvcGVydHkoZC0+ZmxpY2tQcm92aWRlciwgImNvbnRlbnRXaWR0aCIs
IHNpemUud2lkdGgoKSk7CisgICAgaWYgKCFkLT51c2VyRGlkT3ZlcnJpZGVDb250ZW50SGVpZ2h0
KQorICAgICAgICBzZXRGbGlja2FibGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVu
dEhlaWdodCIsIHNpemUuaGVpZ2h0KCkpOworfQorCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRl
Ojppbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKIHsKICAgICBpZiAo
aW50ZXJhY3Rpb25FbmdpbmUpIHsKQEAgLTE0Niw2ICsyMzcsOCBAQCB2b2lkIFFRdWlja1dlYlZp
ZXdQcml2YXRlOjppbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKIAog
dm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKFFRdWlja1dlYlZpZXcq
IHZpZXdwb3J0KQogeworICAgIGluaXRpYWxpemVGbGlja2FibGUodmlld3BvcnQpOworCiAgICAg
aW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSh2
aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7CiAgICAgcGFnZVZpZXctPmQtPmV2ZW50SGFuZGxl
ci0+c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCkp
OwogICAgIGRpc2FibGVNb3VzZUV2ZW50cygpOwpAQCAtMTY5LDYgKzI2Miw0NyBAQCB2b2lkIFFR
dWlja1dlYlZpZXdQcml2YXRlOjpzZXROZWVkc0Rpc3BsYXkoKQogICAgIHEtPnBhZ2UoKS0+dXBk
YXRlKCk7CiB9CiAKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVGbGlja2Fi
bGUoUVF1aWNrV2ViVmlldyogd2ViVmlldykKK3sKKyAgICBRRGVjbGFyYXRpdmVFbmdpbmUqIGVu
Z2luZSA9IHFtbEVuZ2luZSh3ZWJWaWV3KTsKKyAgICBRRGVjbGFyYXRpdmVDb250ZXh0KiBjb250
ZXh0ID0gcW1sQ29udGV4dCh3ZWJWaWV3KTsKKworICAgIEFTU0VSVChlbmdpbmUpOworICAgIEFT
U0VSVChjb250ZXh0KTsKKworICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCBjb21wb25lbnQoZW5n
aW5lLCB3ZWJWaWV3KTsKKworICAgIC8vIENyZWF0ZSB0aGUgaW50ZXJuYWwgRmxpY2thYmxlIGlu
c3RhbmNlIGR5bmFtaWNhbGx5LgorICAgIC8vIFdlIG9ubHkgdXNlIHB1YmxpYyBRTUwgQVBJIHNv
IHRoYXQgd2UgZG8gbm90IGRlcGVuZAorICAgIC8vIG9uIHByaXZhdGUgQVBJIG9mIHRoZSBRdERl
Y2xhcmF0aXZlIG1vZHVsZS4KKyAgICBjb21wb25lbnQuc2V0RGF0YShRQnl0ZUFycmF5TGl0ZXJh
bCgiaW1wb3J0IFF0UXVpY2sgMi4wXG5GbGlja2FibGUge30iKSwgUVVybCgpKTsKKyAgICBmbGlj
a1Byb3ZpZGVyID0gcW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihjb21wb25lbnQuY3JlYXRlKGNv
bnRleHQpKTsKKworICAgIEFTU0VSVChmbGlja1Byb3ZpZGVyKTsKKworICAgIC8vIFNldCB0aGUg
d2ViVmlldyBhcyB0aGUgcGFyZW50IG9mIHRoZSBmbGlja1Byb3ZpZGVyIGFuZCByZXBhcmVudAor
ICAgIC8vIHRoZSBwYWdlIHNvIGl0IGlzIHBsYWNlZCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJ
dGVtLgorICAgIGZsaWNrUHJvdmlkZXItPnNldFBhcmVudEl0ZW0od2ViVmlldyk7CisgICAgcGFn
ZVZpZXctPnNldFBhcmVudEl0ZW0od2ViVmlldy0+Y29udGVudEl0ZW0oKSk7CisKKyAgICBjb25z
dCBRTWV0YU9iamVjdCogbWV0YU9iamVjdCA9IGZsaWNrUHJvdmlkZXItPm1ldGFPYmplY3QoKTsK
KworICAgIGludCBtZXRob2RJbmRleCA9IG1ldGFPYmplY3QtPmluZGV4T2ZNZXRob2QoInJldHVy
blRvQm91bmRzKCkiKTsKKyAgICBBU1NFUlQobWV0aG9kSW5kZXggIT0gLTEpOworICAgIHJldHVy
blRvQm91bmRzID0gbWV0YU9iamVjdC0+bWV0aG9kKG1ldGhvZEluZGV4KTsKKworICAgIG1ldGhv
ZEluZGV4ID0gbWV0YU9iamVjdC0+aW5kZXhPZk1ldGhvZCgiY2FuY2VsRmxpY2soKSIpOworICAg
IEFTU0VSVChtZXRob2RJbmRleCAhPSAtMSk7CisgICAgY2FuY2VsRmxpY2sgPSBtZXRhT2JqZWN0
LT5tZXRob2QobWV0aG9kSW5kZXgpOworCisgICAgLy8gUHJvcGFnYXRlIGZsaWNrYWJsZSBzaWdu
YWxzLgorICAgIFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwgU0lHTkFMKG1vdmluZ0No
YW5nZWQoKSksIHdlYlZpZXcsIFNJR05BTChtb3ZpbmdDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29u
bmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBTSUdOQUwoY29u
dGVudFdpZHRoQ2hhbmdlZCgpKSwgd2ViVmlldy0+bV9leHBlcmltZW50YWwsIFNJR05BTChjb250
ZW50V2lkdGhDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6
Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBTSUdOQUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIHdl
YlZpZXctPm1fZXhwZXJpbWVudGFsLCBTSUdOQUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIFF0
OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJvdmlkZXIs
IFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIHdlYlZpZXctPm1fZXhwZXJpbWVudGFsLCBTSUdO
QUwoY29udGVudFhDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVj
dDo6Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCB3ZWJW
aWV3LT5tX2V4cGVyaW1lbnRhbCwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgUXQ6OkRpcmVj
dENvbm5lY3Rpb24pOworfQorCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpsb2FkRGlkQ29t
bWl0KCkKIHsKICAgICAvLyBEdWUgdG8gZW50ZXJpbmcgcHJvdmlzaW9uYWwgbG9hZCBiZWZvcmUg
Y29tbWl0dGluZywgd2UKQEAgLTM2MCw2ICs0OTQsOSBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjp1cGRhdGVUb3VjaFZpZXdwb3J0U2l6ZSgpCiAgICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGZsaWNrUHJvdmlkZXItPnNldFdpZHRoKHZp
ZXdwb3J0U2l6ZS53aWR0aCgpKTsKKyAgICBmbGlja1Byb3ZpZGVyLT5zZXRIZWlnaHQodmlld3Bv
cnRTaXplLmhlaWdodCgpKTsKKwogICAgIC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0
IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAogICAgIC8vIGl0IGNhbiByZXNpemUgdGhl
IGNvbnRlbnQgYWNjb3JkaW5nbHkuCiAgICAgd2ViUGFnZVByb3h5LT5zZXRWaWV3cG9ydFNpemUo
dmlld3BvcnRTaXplKTsKQEAgLTg4Niw2ICsxMDIzLDY4IEBAIFFRdWlja1dlYlBhZ2UqIFFRdWlj
a1dlYlZpZXdFeHBlcmltZW50YWw6OnBhZ2UoKQogICAgIHJldHVybiBxX3B0ci0+cGFnZSgpOwog
fQogCitRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6ZmxpY2thYmxlRGF0YSgpCit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcp
OworICAgIHJldHVybiBmbGlja2FibGVQcm9wZXJ0eTxRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8
UU9iamVjdD4gPihkLT5mbGlja1Byb3ZpZGVyLCAiZmxpY2thYmxlRGF0YSIpOworfQorCitRUXVp
Y2tJdGVtKiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50SXRlbSgpCit7CisgICAg
UV9EKFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBmbGlja2FibGVQcm9wZXJ0eTxRUXVpY2tJ
dGVtKj4oZC0+ZmxpY2tQcm92aWRlciwgImNvbnRlbnRJdGVtIik7Cit9CisKK3FyZWFsIFFRdWlj
a1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRXaWR0aCgpIGNvbnN0Cit7CisgICAgUV9EKGNv
bnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBmbGlja2FibGVQcm9wZXJ0eTxxcmVhbD4o
ZC0+ZmxpY2tQcm92aWRlciwgImNvbnRlbnRXaWR0aCIpOworfQorCit2b2lkIFFRdWlja1dlYlZp
ZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRXaWR0aChxcmVhbCB3aWR0aCkKK3sKKyAgICBRX0Qo
UVF1aWNrV2ViVmlldyk7CisgICAgZC0+dXNlckRpZE92ZXJyaWRlQ29udGVudFdpZHRoID0gdHJ1
ZTsKKyAgICBzZXRGbGlja2FibGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFdp
ZHRoIiwgd2lkdGgpOworfQorCitxcmVhbCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250
ZW50SGVpZ2h0KCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAg
cmV0dXJuIGZsaWNrYWJsZVByb3BlcnR5PHFyZWFsPihkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVu
dEhlaWdodCIpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRl
bnRIZWlnaHQocXJlYWwgaGVpZ2h0KQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBk
LT51c2VyRGlkT3ZlcnJpZGVDb250ZW50SGVpZ2h0ID0gdHJ1ZTsKKyAgICBzZXRGbGlja2FibGVQ
cm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudEhlaWdodCIsIGhlaWdodCk7Cit9CisK
K3FyZWFsIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRYKCkgY29uc3QKK3sKKyAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGZsaWNrYWJsZVByb3BlcnR5
PHFyZWFsPihkLT5mbGlja1Byb3ZpZGVyLCAiY29udGVudFgiKTsKK30KKwordm9pZCBRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WChxcmVhbCB4KQoreworICAgIFFfRChRUXVp
Y2tXZWJWaWV3KTsKKyAgICBzZXRGbGlja2FibGVQcm9wZXJ0eShkLT5mbGlja1Byb3ZpZGVyLCAi
Y29udGVudFgiLCB4KTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29u
dGVudFkoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1
cm4gZmxpY2thYmxlUHJvcGVydHk8cXJlYWw+KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50WSIp
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRZKHFyZWFs
IHkpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIHNldEZsaWNrYWJsZVByb3BlcnR5
KGQtPmZsaWNrUHJvdmlkZXIsICJjb250ZW50WSIsIHkpOworfQorCiBRUXVpY2tXZWJWaWV3OjpR
UXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKICAgICA6IFFRdWlja0l0ZW0ocGFyZW50
KQogICAgICwgZF9wdHIobmV3IFFRdWlja1dlYlZpZXdQcml2YXRlKHRoaXMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggZDVh
NGZhMS4uZTI2ZWZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXdfcC5oCkBAIC0xMDcsNiArMTA3LDIxIEBAIHB1YmxpYzoKIAogICAgIFFR
dWlja1dlYlBhZ2UqIHBhZ2UoKTsKIAorICAgIHZvaWQgaGFuZGxlVG91Y2hGbGlja0V2ZW50KFFU
b3VjaEV2ZW50Kik7CisKKyAgICBRUXVpY2tJdGVtKiBjb250ZW50SXRlbSgpOworCisgICAgLy8g
SW50ZXJuYWwgRmxpY2thYmxlIEFQSSB1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbiBlbmdpbmUuCisg
ICAgdm9pZCByZXR1cm5Ub0JvdW5kcygpOworICAgIHZvaWQgY2FuY2VsRmxpY2soKTsKKyAgICBi
b29sIGlzTW92aW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc0RyYWdnaW5nKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0ZsaWNraW5nKCkgY29uc3Q7CisgICAgUVBvaW50RiBjb250ZW50UG9zKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRDb250ZW50UG9zKGNvbnN0IFFQb2ludEYmKTsKKworICAgIHZvaWQgdXBk
YXRlQ29udGVudFNpemUoY29uc3QgUVNpemVGJik7CisKICAgICBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsKiBleHBlcmltZW50YWwoKSBjb25zdDsKICAgICBzdGF0aWMgUVF1aWNrV2ViVmlld0F0
dGFjaGVkKiBxbWxBdHRhY2hlZFByb3BlcnRpZXMoUU9iamVjdCopOwogCkBAIC0xMjIsNiArMTM3
LDcgQEAgcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCByZWxvYWQoKTsKIAogUV9TSUdOQUxTOgor
ICAgIHZvaWQgbW92aW5nQ2hhbmdlZCgpOwogICAgIHZvaWQgdGl0bGVDaGFuZ2VkKGNvbnN0IFFT
dHJpbmcmIHRpdGxlKTsKICAgICB2b2lkIGxvYWRTdGFydGVkKCk7CiAgICAgdm9pZCBsb2FkU3Vj
Y2VlZGVkKCk7CkBAIC0yMDQsNiArMjIwLDE1IEBAIFFNTF9ERUNMQVJFX1RZUEVJTkZPKFFRdWlj
a1dlYlZpZXcsIFFNTF9IQVNfQVRUQUNIRURfUFJPUEVSVElFUykKIGNsYXNzIFFXRUJLSVRfRVhQ
T1JUIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9P
QkpFQ1QKICAgICBRX1BST1BFUlRZKFFRdWlja1dlYlBhZ2UqIHBhZ2UgUkVBRCBwYWdlIENPTlNU
QU5UIEZJTkFMKQorCisgICAgLy8gUU1MIEZsaWNrYWJsZSBBUEkuCisgICAgUV9QUk9QRVJUWShx
cmVhbCBjb250ZW50V2lkdGggUkVBRCBjb250ZW50V2lkdGggV1JJVEUgc2V0Q29udGVudFdpZHRo
IE5PVElGWSBjb250ZW50V2lkdGhDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVu
dEhlaWdodCBSRUFEIGNvbnRlbnRIZWlnaHQgV1JJVEUgc2V0Q29udGVudEhlaWdodCBOT1RJRlkg
Y29udGVudEhlaWdodENoYW5nZWQpCisgICAgUV9QUk9QRVJUWShxcmVhbCBjb250ZW50WCBSRUFE
IGNvbnRlbnRYIFdSSVRFIHNldENvbnRlbnRYIE5PVElGWSBjb250ZW50WENoYW5nZWQpCisgICAg
UV9QUk9QRVJUWShxcmVhbCBjb250ZW50WSBSRUFEIGNvbnRlbnRZIFdSSVRFIHNldENvbnRlbnRZ
IE5PVElGWSBjb250ZW50WUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRUXVpY2tJdGVtKiBjb250
ZW50SXRlbSBSRUFEIGNvbnRlbnRJdGVtIENPTlNUQU5UKQorICAgIFFfUFJPUEVSVFkoUURlY2xh
cmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGZsaWNrYWJsZURhdGEgUkVBRCBmbGlja2FibGVE
YXRhKQorCiAgICAgUV9QUk9QRVJUWShRV2ViTmF2aWdhdGlvbkhpc3RvcnkqIG5hdmlnYXRpb25I
aXN0b3J5IFJFQUQgbmF2aWdhdGlvbkhpc3RvcnkgQ09OU1RBTlQgRklOQUwpCiAgICAgUV9QUk9Q
RVJUWShRRGVjbGFyYXRpdmVDb21wb25lbnQqIGFsZXJ0RGlhbG9nIFJFQUQgYWxlcnREaWFsb2cg
V1JJVEUgc2V0QWxlcnREaWFsb2cgTk9USUZZIGFsZXJ0RGlhbG9nQ2hhbmdlZCkKICAgICBRX1BS
T1BFUlRZKFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogY29uZmlybURpYWxvZyBSRUFEIGNvbmZpcm1E
aWFsb2cgV1JJVEUgc2V0Q29uZmlybURpYWxvZyBOT1RJRlkgY29uZmlybURpYWxvZ0NoYW5nZWQp
CkBAIC0yNTEsOSArMjc2LDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHNjaGVtZURlbGVn
YXRlc19Db3VudChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdh
dGU+Kik7CiAgICAgc3RhdGljIHZvaWQgc2NoZW1lRGVsZWdhdGVzX0NsZWFyKFFEZWNsYXJhdGl2
ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qKTsKICAgICBRRGVjbGFyYXRp
dmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+IHNjaGVtZURlbGVnYXRlcygp
OworICAgIFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBmbGlja2FibGVEYXRhKCk7
CiAgICAgdm9pZCBpbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIoV1RGOjpQYXNzUmVmUHRy
PFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPik7CiAgICAgdm9pZCBzZW5k
QXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVwbHkqKTsKIAorICAgIFFRdWlj
a0l0ZW0qIGNvbnRlbnRJdGVtKCk7CisgICAgcXJlYWwgY29udGVudFdpZHRoKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRDb250ZW50V2lkdGgocXJlYWwpOworICAgIHFyZWFsIGNvbnRlbnRIZWlnaHQo
KSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRIZWlnaHQocXJlYWwpOworICAgIHFyZWFsIGNv
bnRlbnRYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50WChxcmVhbCk7CisgICAgcXJlYWwg
Y29udGVudFkoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRZKHFyZWFsKTsKKwogICAgIC8v
IEMrKyBvbmx5CiAgICAgYm9vbCByZW5kZXJUb09mZnNjcmVlbkJ1ZmZlcigpIGNvbnN0OwogICAg
IHZvaWQgc2V0UmVuZGVyVG9PZmZzY3JlZW5CdWZmZXIoYm9vbCBlbmFibGUpOwpAQCAtMjY0LDYg
KzMwMCwxMCBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFFT
dHJpbmcmKTsKIAogUV9TSUdOQUxTOgorICAgIHZvaWQgY29udGVudFdpZHRoQ2hhbmdlZCgpOwor
ICAgIHZvaWQgY29udGVudEhlaWdodENoYW5nZWQoKTsKKyAgICB2b2lkIGNvbnRlbnRYQ2hhbmdl
ZCgpOworICAgIHZvaWQgY29udGVudFlDaGFuZ2VkKCk7CiAgICAgdm9pZCBhbGVydERpYWxvZ0No
YW5nZWQoKTsKICAgICB2b2lkIGNvbmZpcm1EaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBwcm9t
cHREaWFsb2dDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggOWYyODE3MC4uMTZlMDM4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApA
QCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemUoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYgPSAwLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwKTsKIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZUZsaWNrYWJsZShRUXVpY2tXZWJWaWV3Kik7CiAgICAgdm9pZCBp
bml0aWFsaXplVG91Y2goUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOwogICAgIHZvaWQgaW5pdGlh
bGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOwogICAgIHZvaWQgZW5hYmxlTW91
c2VFdmVudHMoKTsKQEAgLTE1NCw2ICsxNTUsOSBAQCBwcml2YXRlOgogICAgIFFTY29wZWRQb2lu
dGVyPFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZT4gaW50ZXJhY3Rpb25FbmdpbmU7CiAKICAg
ICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKKyAgICBRUXVpY2tJdGVtKiBmbGlja1Byb3ZpZGVyOwor
ICAgIFFNZXRhTWV0aG9kIHJldHVyblRvQm91bmRzOworICAgIFFNZXRhTWV0aG9kIGNhbmNlbEZs
aWNrOwogCiAgICAgUURlY2xhcmF0aXZlQ29tcG9uZW50KiBhbGVydERpYWxvZzsKICAgICBRRGVj
bGFyYXRpdmVDb21wb25lbnQqIGNvbmZpcm1EaWFsb2c7CkBAIC0xNjcsNiArMTcxLDE0IEBAIHBy
aXZhdGU6CiAgICAgUUZpbGVEaWFsb2cqIGZpbGVEaWFsb2c7CiAgICAgV0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclJlZiBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKIAorICAgIC8vIFRoZXNlIG1h
a2Ugc3VyZSB0aGF0IHRoZSBjb250ZW50SXRlbSBpcyBzaXplZCB0byB0aGUgcGFnZQorICAgIC8v
IGlmIHRoZSB1c2VyIGRpZCBub3QgYWRkIG90aGVyIGZsaWNrYWJsZSBpdGVtcyBpbiBRTUwuCisg
ICAgLy8gSWYgdGhlIHVzZXIgYWRkcyBpdGVtcyBpbiBRTUwgaGUgaGFzIHRvIG1ha2Ugc3VyZSB0
bworICAgIC8vIGFsc28gYmluZCB0aGUgY29udGVudFdpZHRoIGFuZCBjb250ZW50SGVpZ2h0IGFj
Y29yZGluZ2x5LgorICAgIC8vIFRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIG5vcm1hbCBRTUwg
RmxpY2thYmxlIGJlaGF2aW91ci4KKyAgICBib29sIHVzZXJEaWRPdmVycmlkZUNvbnRlbnRXaWR0
aDsKKyAgICBib29sIHVzZXJEaWRPdmVycmlkZUNvbnRlbnRIZWlnaHQ7CisKICAgICBib29sIGlz
VHJhbnNpdGlvbmluZ1RvTmV3UGFnZTsKICAgICBib29sIHBhZ2VJc1N1c3BlbmRlZDsKICAgICBi
b29sIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmll
dy90c3RfcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggMWQxNGQxOC4uMTVmMjRmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3Rz
dF9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCkBAIC0zMjksNyArMzI5
LDcgQEAgdm9pZCB0c3RfUVF1aWNrV2ViVmlldzo6c2Nyb2xsUmVxdWVzdCgpCiAgICAgLy8gVXNl
IHFSb3VuZCBhcyB0aGF0IGlzIGFsc28gdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwb3NpdGlv
bgogICAgIC8vIGluIFdlYktpdC4KICAgICBpbnQgeSA9IC1xUm91bmQoNTAgKiB3ZWJWaWV3KCkt
PnBhZ2UoKS0+Y29udGVudFNjYWxlKCkpOwotICAgIFFWRVJJRlkod2ViVmlldygpLT5wYWdlKCkt
PnBvcygpLnkoKSA9PSB5KTsKKyAgICBRVkVSSUZZKHdlYlZpZXcoKS0+Y29udGVudEl0ZW0oKS0+
eSgpID09IHkpOwogfQogCiBRVFdFQktJVF9BUElfVEVTVF9NQUlOKHRzdF9RUXVpY2tXZWJWaWV3
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuY3BwCmluZGV4IDZmOTNjOTMuLjY2NjIzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTM3
LDcgKzM3LDcgQEAgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6UXRQYW5HZXN0dXJlUmVjb2duaXpl
cihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGwKICAgICByZXNldCgpOwogfQogCi1i
b29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCog
ZXZlbnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK2Jvb2wgUXRQYW5HZXN0dXJlUmVj
b2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAo
IWludGVyYWN0aW9uRW5naW5lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDE2ICs3
MywxNiBAQCBib29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91
Y2hFdmVudCogZXZlbnQsIHFpbnQ2NCBldmVudFRpbQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgbV9zdGF0ZSA9IEdlc3R1cmVSZWNvZ25pemVkOwotICAgICAg
ICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVN0YXJ0ZWQodG91Y2hQb2ludC5w
b3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgICAgICAgICAgaW50ZXJhY3Rpb25Fbmdp
bmUoKS0+cGFuR2VzdHVyZVN0YXJ0ZWQoZXZlbnQpOwogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKG1fc3RhdGUgPT0gR2VzdHVyZVJlY29nbml6ZWQpOwotICAgICAgICBpbnRlcmFjdGlvbkVu
Z2luZSgpLT5wYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaFBvaW50LnBvcygpLCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CisgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVS
ZXF1ZXN0VXBkYXRlKGV2ZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNh
c2UgUUV2ZW50OjpUb3VjaEVuZDoKICAgICAgICAgaWYgKG1fc3RhdGUgPT0gR2VzdHVyZVJlY29n
bml6ZWQpIHsKLSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVFbmRl
ZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgICAgICAgICBp
bnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlRW5kZWQoZXZlbnQpOwogICAgICAgICAgICAg
cmVzZXQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaAppbmRl
eCA1MzI1MDdlLi5jZjA5NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTQyLDcgKzQyLDcgQEAgY29uc3QgcXJl
YWwgcGFubmluZ0luaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQgPSA1LjsKIGNsYXNzIFF0
UGFuR2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMgUXRHZXN0dXJlUmVjb2duaXplciB7CiBwdWJs
aWM6CiAgICAgUXRQYW5HZXN0dXJlUmVjb2duaXplcihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqKTsK
LSAgICBib29sIHJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCosIHFpbnQ2NCBldmVudFRpbWVz
dGFtcE1pbGxpcyk7CisgICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqKTsKICAg
ICB2b2lkIHJlc2V0KCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCmluZGV4IDg3
Y2I5ZGIuLjRkYTYzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCkBAIC0yNiw5ICsyNiw2IEBA
CiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19w
LmgiCiAjaW5jbHVkZSA8UVBvaW50Rj4KLSNpbmNsdWRlIDxRU2Nyb2xsRXZlbnQ+Ci0jaW5jbHVk
ZSA8UVNjcm9sbFByZXBhcmVFdmVudD4KLSNpbmNsdWRlIDxRU2Nyb2xsZXJQcm9wZXJ0aWVzPgog
I2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAjaW5jbHVkZSA8UVdoZWVsRXZlbnQ+CiAjaW5jbHVkZSA8
UXRRdWljay9xcXVpY2tpdGVtLmg+CkBAIC0xMTQsNDEgKzExMSwyNCBAQCBpbmxpbmUgUVJlY3RG
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aXRlbVJlY3RGcm9tQ1NTKGNvbnN0IFFSZWN0
RiYgY3NzUmVjdAogICAgIHJldHVybiBpdGVtUmVjdDsKIH0KIAotUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoY29uc3QgUVF1aWNrV2ViVmll
dyogdmlld3BvcnQsIFFRdWlja1dlYlBhZ2UqIGNvbnRlbnQpCitRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRUXVpY2tXZWJWaWV3KiB2aWV3
cG9ydCwgUVF1aWNrV2ViUGFnZSogY29udGVudCkKICAgICA6IG1fdmlld3BvcnQodmlld3BvcnQp
CiAgICAgLCBtX2NvbnRlbnQoY29udGVudCkKICAgICAsIG1fc3VzcGVuZENvdW50KDApCisgICAg
LCBtX2hhZFVzZXJJbnRlcmFjdGlvbihmYWxzZSkKICAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3
IFNjYWxlQW5pbWF0aW9uKHRoaXMpKQogICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCiB7CiAg
ICAgcmVzZXQoKTsKIAotICAgIFFTY3JvbGxlclByb3BlcnRpZXMgcHJvcGVydGllcyA9IHNjcm9s
bGVyKCktPnNjcm9sbGVyUHJvcGVydGllcygpOwotCi0gICAgLy8gVGhlIFF0UGFuR2VzdHVyZVJl
Y29nbml6ZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlY29nbml6aW5nIHRoZSBnZXN0dXJlCi0gICAg
Ly8gdGh1cyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIGRyYWcgc3RhcnQgZGlzdGFuY2UuCi0gICAg
cHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6RHJhZ1N0YXJ0
RGlzdGFuY2UsIDAuMCk7Ci0KLSAgICAvLyBTZXQgc29tZSBkZWZhdWx0IFFTY3JvbGxlciBjb25z
dHJhaW5zIHRvIG1pbWljIHRoZSBwaHlzaWNzIGVuZ2luZSBvZiB0aGUgTjkgYnJvd3Nlci4KLSAg
ICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpBeGlzTG9j
a1RocmVzaG9sZCwgMC42Nik7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9s
bGVyUHJvcGVydGllczo6U2Nyb2xsaW5nQ3VydmUsIFFFYXNpbmdDdXJ2ZShRRWFzaW5nQ3VydmU6
Ok91dEV4cG8pKTsKLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9w
ZXJ0aWVzOjpEZWNlbGVyYXRpb25GYWN0b3IsIDAuMDUpOwotICAgIHByb3BlcnRpZXMuc2V0U2Ny
b2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6Ok1heGltdW1WZWxvY2l0eSwgMC42MzUpOwot
ICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6Ok92ZXJz
aG9vdERyYWdSZXNpc3RhbmNlRmFjdG9yLCAwLjMzKTsKLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9s
bE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpPdmVyc2hvb3RTY3JvbGxEaXN0YW5jZUZhY3Rv
ciwgMC4zMyk7Ci0KLSAgICBzY3JvbGxlcigpLT5zZXRTY3JvbGxlclByb3BlcnRpZXMocHJvcGVy
dGllcyk7Ci0KLSAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKHdpZHRoQ2hhbmdlZCgpKSwg
dGhpcywgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAg
ICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKGhlaWdodENoYW5nZWQoKSksIHRoaXMsIFNMT1Qo
aXRlbVNpemVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdCht
X2NvbnRlbnQsIFNJR05BTCh3aWR0aENoYW5nZWQoKSksIFNMT1QoaXRlbVNpemVDaGFuZ2VkKCkp
LCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX2NvbnRlbnQsIFNJR05BTCho
ZWlnaHRDaGFuZ2VkKCkpLCBTTE9UKGl0ZW1TaXplQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5l
Y3Rpb24pOworICAgIGNvbm5lY3QobV92aWV3cG9ydCwgU0lHTkFMKG1vdmluZ0NoYW5nZWQoKSks
IFNMT1Qoc2Nyb2xsU3RhdGVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CiAKICAg
ICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTCh2YWx1ZUNoYW5nZWQoUVZhcmlhbnQp
KSwKICAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQp
KSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwogICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwg
U0lHTkFMKHN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RB
bmltYXRpb246OlN0YXRlKSksCiAgICAgICAgICAgICBTTE9UKHNjYWxlQW5pbWF0aW9uU3RhdGVD
aGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3Rh
dGUpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotCi0gICAgY29ubmVjdChzY3JvbGxlcigpLCBT
SUdOQUwoc3RhdGVDaGFuZ2VkKFFTY3JvbGxlcjo6U3RhdGUpKSwKLSAgICAgICAgICAgIFNMT1Qo
c2Nyb2xsU3RhdGVDaGFuZ2VkKFFTY3JvbGxlcjo6U3RhdGUpKSwgUXQ6OkRpcmVjdENvbm5lY3Rp
b24pOwogfQogCiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6On5RdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUoKQpAQCAtMTgyLDkgKzE2MiwxMSBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCiAK
ICAgICBtX2NvbnRlbnQtPnNldENvbnRlbnRTY2FsZShpdGVtU2NhbGUpOwogCi0gICAgLy8gV2Ug
bmVlZCB0byBhbmltYXRlIHRoZSBjb250ZW50IGJ1dCB0aGUgcG9zaXRpb24gcmVwcmVzZW50cyB0
aGUgdmlld3BvcnQgaGVuY2Ugd2UgbmVlZCB0byBpbnZlcnQgdGhlIHBvc2l0aW9uIGhlcmUuCi0g
ICAgLy8gVG8gYW5pbWF0ZSB0aGUgcG9zaXRpb24gdG9nZXRoZXIgd2l0aCB0aGUgc2NhbGUgd2Ug
bXVsdGlwbHkgdGhlIHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgc2NhbGU7Ci0gICAgbV9jb250
ZW50LT5zZXRQb3MoLSBpdGVtUmVjdC50b3BMZWZ0KCkgKiBpdGVtU2NhbGUpOworICAgIC8vIFRv
IGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIHNjYWxlIHdlIG11bHRpcGx5
IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxlCisgICAgLy8gYW5kIGFkZCBpdCB0
byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50IG9uIHRoZSBmbGlja2FibGUgY29udGVu
dEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1zKS4KKyAgICBRUG9pbnRGIG5ld1Bvc2l0
aW9uKG1fY29udGVudC0+cG9zKCkgKyAoaXRlbVJlY3QudG9wTGVmdCgpICogaXRlbVNjYWxlKSk7
CisKKyAgICBtX3ZpZXdwb3J0LT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKIH0KIAogYm9v
bCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFuaW1hdGVJdGVtUmVjdFZpc2libGUoY29u
c3QgUVJlY3RGJiBpdGVtUmVjdCkKQEAgLTIwMyw2ICsxODUsMTQgQEAgYm9vbCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OmFuaW1hdGVJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBp
dGVtUmVjdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnNjcm9sbFN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fdmlld3BvcnQtPmlz
TW92aW5nKCkgJiYgIW1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIpCisgICAgICAgIG1fc2Nyb2xsVXBk
YXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzKSk7
CisgICAgZWxzZQorICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Cit9CisK
IHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hh
bmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRp
b246OlN0YXRlIC8qb2xkU3RhdGUqLykKIHsKICAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7CkBAIC0y
MTgsNjAgKzIwOCw2IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFu
aW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246CiAgICAgfQogfQogCi12b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsU3RhdGVDaGFuZ2VkKFFTY3JvbGxl
cjo6U3RhdGUgbmV3U3RhdGUpCi17Ci0gICAgc3dpdGNoIChuZXdTdGF0ZSkgewotICAgIGNhc2Ug
UVNjcm9sbGVyOjpJbmFjdGl2ZToKLSAgICAgICAgLy8gRklYTUU6IFFTY3JvbGxlciBnZXRzIHdo
ZW4gZXZlbiB3aGVuIHRhcHBpbmcgd2hpbGUgaXQgaXMgc2Nyb2xsaW5nLgotICAgICAgICBtX3Nj
cm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUVNj
cm9sbGVyOjpQcmVzc2VkOgotICAgIGNhc2UgUVNjcm9sbGVyOjpEcmFnZ2luZzoKLSAgICBjYXNl
IFFTY3JvbGxlcjo6U2Nyb2xsaW5nOgotICAgICAgICBpZiAobV9zY3JvbGxVcGRhdGVEZWZlcnJl
cikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyID0g
YWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcykpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpldmVudChRRXZlbnQqIGV2ZW50KQotewotICAgIHN3aXRj
aCAoZXZlbnQtPnR5cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpTY3JvbGxQcmVwYXJlOiB7Ci0g
ICAgICAgIFFTY3JvbGxQcmVwYXJlRXZlbnQqIHByZXBhcmVFdmVudCA9IHN0YXRpY19jYXN0PFFT
Y3JvbGxQcmVwYXJlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9y
dFJlY3QgPSBtX3ZpZXdwb3J0LT5ib3VuZGluZ1JlY3QoKTsKLSAgICAgICAgY29uc3QgUVJlY3RG
IGNvbnRlbnRSZWN0ID0gbV92aWV3cG9ydC0+bWFwUmVjdEZyb21JdGVtKG1fY29udGVudCwgbV9j
b250ZW50LT5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIGNvbnN0IFFSZWN0RiBwb3NSYW5nZSA9
IGNvbXB1dGVQb3NSYW5nZUZvckl0ZW1BdFNjYWxlKG1fY29udGVudC0+Y29udGVudFNjYWxlKCkp
OwotICAgICAgICBwcmVwYXJlRXZlbnQtPnNldENvbnRlbnRQb3NSYW5nZShwb3NSYW5nZSk7Ci0g
ICAgICAgIHByZXBhcmVFdmVudC0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0UmVjdC5zaXplKCkp
OwotCi0gICAgICAgIC8vIEFzIHdlIHdhbnQgdG8gcHVzaCB0aGUgY29udGVudHMgYW5kIG5vdCBh
Y3R1YWxseSBzY3JvbGwgaXQsIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSBwb3NpdGlvbnMgaGVyZS4K
LSAgICAgICAgcHJlcGFyZUV2ZW50LT5zZXRDb250ZW50UG9zKC1jb250ZW50UmVjdC50b3BMZWZ0
KCkpOwotICAgICAgICBwcmVwYXJlRXZlbnQtPmFjY2VwdCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgY2FzZSBRRXZlbnQ6OlNjcm9sbDogewotICAgICAgICBRU2Nyb2xsRXZl
bnQqIHNjcm9sbEV2ZW50ID0gc3RhdGljX2Nhc3Q8UVNjcm9sbEV2ZW50Kj4oZXZlbnQpOwotICAg
ICAgICBRUG9pbnRGIG5ld1BvcyA9IC1zY3JvbGxFdmVudC0+Y29udGVudFBvcygpIC0gc2Nyb2xs
RXZlbnQtPm92ZXJzaG9vdERpc3RhbmNlKCk7Ci0gICAgICAgIGlmIChtX2NvbnRlbnQtPnBvcygp
ICE9IG5ld1BvcykgewotICAgICAgICAgICAgUVBvaW50RiBjdXJyZW50UG9zSW5DU1NDb29yZGlu
YXRlcyA9IG1fdmlld3BvcnQtPm1hcFRvV2ViQ29udGVudChtX2NvbnRlbnQtPnBvcygpKTsKLSAg
ICAgICAgICAgIFFQb2ludEYgbmV3UG9zSW5DU1NDb29yZGluYXRlcyA9IG1fdmlld3BvcnQtPm1h
cFRvV2ViQ29udGVudChuZXdQb3MpOwotCi0gICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUgZW1p
dHRlZCBiZWZvcmUgdmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQgc28gdGhhdCB0aGUgd2ViIHByb2Nl
c3Mga25vd3Mgd2hlcmUgdG8gbG9vayBmb3IgdGlsZXMuCi0gICAgICAgICAgICBlbWl0IHZpZXdw
b3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY3VycmVudFBvc0luQ1NTQ29vcmRpbmF0ZXMgLSBu
ZXdQb3NJbkNTU0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgIG1fY29udGVudC0+c2V0UG9zKG5l
d1Bvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gUU9iamVjdDo6ZXZlbnQoZXZl
bnQpOwotfQotCiBzdGF0aWMgaW5saW5lIFFQb2ludEYgYm91bmRQb3NpdGlvbihjb25zdCBRUG9p
bnRGIG1pblBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgY29uc3QgUVBvaW50RiYg
bWF4UG9zaXRpb24pCiB7CiAgICAgcmV0dXJuIFFQb2ludEYocUJvdW5kKG1pblBvc2l0aW9uLngo
KSwgcG9zaXRpb24ueCgpLCBtYXhQb3NpdGlvbi54KCkpLApAQCAtMzA0LDcgKzI0MCw4IEBAIHZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBl
dikKICAgICAgICAgbmV3UG9zLnJ5KCkgKz0gZGVsdGE7CiAKICAgICBRUmVjdEYgZW5kUG9zUmFu
Z2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JJdGVtQXRTY2FsZShtX2NvbnRlbnQtPmNvbnRlbnRTY2Fs
ZSgpKTsKLSAgICBtX2NvbnRlbnQtPnNldFBvcygtYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50
b3BMZWZ0KCksIG5ld1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSkpOworICAgIFFQb2lu
dEYgbmV3UG9zaXRpb24gPSAtYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIG5l
d1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisgICAgbV92aWV3cG9ydC0+c2V0Q29u
dGVudFBvcyhuZXdQb3NpdGlvbik7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjpwYWdlUG9zaXRpb25SZXF1ZXN0KGNvbnN0IFFQb2ludCYgcGFnZVBvc2l0aW9uKQpAQCAt
NDMyLDggKzM2OSwxMCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cmVzZXQo
KQogCiAgICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKIAotICAgIHNjcm9sbGVyKCkt
PnN0b3AoKTsKKyAgICBtX3ZpZXdwb3J0LT5jYW5jZWxGbGljaygpOwogICAgIG1fc2NhbGVBbmlt
YXRpb24tPnN0b3AoKTsKKyAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKKyAgICBt
X3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IENvbnN0cmFpbnRzJiBjb25zdHJh
aW50cykKQEAgLTQ1MCw3ICszODksNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludAogICAgICAg
ICBtX2NvbnRlbnQtPnNldENvbnRlbnRTY2FsZShpdGVtU2NhbGVGcm9tQ1NTKGluaXRpYWxTY2Fs
ZSkpOwogICAgIH0KIAotICAgIC8vIElmIHRoZSB3ZWIgYXBwIGNoYW5nZXMgc3VjY2Vzc2l2ZWx5
IGNoYW5nZXMgdGhlIHZpZXdwb3J0IG9uIHB1cnBvc2UKKyAgICAvLyBJZiB0aGUgd2ViIGFwcCBz
dWNjZXNzaXZlbHkgY2hhbmdlcyB0aGUgdmlld3BvcnQgb24gcHVycG9zZQogICAgIC8vIGl0IHdh
bnRzIHRvIGJlIGluIGNvbnRyb2wgYW5kIHdlIHNob3VsZCBkaXNhYmxlIGFuaW1hdGlvbnMuCiAg
ICAgZW5zdXJlQ29udGVudFdpdGhpblZpZXdwb3J0Qm91bmRhcnkoLyogaW1tZWRpYXRlICovIHRy
dWUpOwogfQpAQCAtNDYyLDQ0ICs0MDEsNjIgQEAgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpjdXJyZW50Q1NTU2NhbGUoKQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICBRU2Nyb2xsZXIqIHNj
cm9sbGVyID0gY29uc3RfY2FzdDxRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqPih0aGlzKS0+
c2Nyb2xsZXIoKTsKLSAgICByZXR1cm4gc2Nyb2xsZXItPnN0YXRlKCkgPT0gUVNjcm9sbGVyOjpT
Y3JvbGxpbmc7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppbnRlcnJ1
cHRTY3JvbGxBbmltYXRpb24oKQotewotICAgIC8vIFN0b3BwaW5nIHRoZSBzY3JvbGxlciBpbW1l
ZGlhdGVseSBzdG9wcyBraW5ldGljIHNjcm9sbGluZyBhbmQgaWYgdGhlIHZpZXcgaXMgb3V0IG9m
IGJvdW5kcyBpdAotICAgIC8vIGlzIG1vdmVkIGluc2lkZSB2YWxpZCBib3VuZHMgaW1tZWRpYXRl
bHkgYXMgd2VsbC4gVGhpcyBpcyB0aGUgYmVoYXZpb3IgdGhhdCB3ZSB3YW50LgotICAgIHNjcm9s
bGVyKCktPnN0b3AoKTsKKyAgICByZXR1cm4gbV92aWV3cG9ydC0+aXNGbGlja2luZygpOwogfQog
CiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUFjdGl2ZSgpIGNv
bnN0CiB7Ci0gICAgUVNjcm9sbGVyKiBzY3JvbGxlciA9IGNvbnN0X2Nhc3Q8UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKj4odGhpcyktPnNjcm9sbGVyKCk7Ci0gICAgcmV0dXJuIHNjcm9sbGVy
LT5zdGF0ZSgpID09IFFTY3JvbGxlcjo6UHJlc3NlZCB8fCBzY3JvbGxlci0+c3RhdGUoKSA9PSBR
U2Nyb2xsZXI6OkRyYWdnaW5nOworICAgIHJldHVybiBtX3ZpZXdwb3J0LT5pc0RyYWdnaW5nKCk7
CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRl
ZChjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVN0
YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQogewogICAgIG1faGFkVXNlckludGVyYWN0
aW9uID0gdHJ1ZTsKLSAgICBzY3JvbGxlcigpLT5oYW5kbGVJbnB1dChRU2Nyb2xsZXI6OklucHV0
UHJlc3MsICB2aWV3cG9ydFRvdWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKworICAg
IEFTU0VSVChldmVudC0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hVcGRhdGUpOworCisgICAgLy8g
VGhlIHBhbiBnZXN0dXJlIHJlY29nbml6ZXIgc2VuZHMgdGhlIGN1cnJlbnQgVG91Y2hVcGRhdGUg
ZXZlbnQgd2hlbiBpdAorICAgIC8vIHJlY29nbml6ZWQgYSBwYW4gZ2VzdHVyZS4KKyAgICAvLyBD
b25zdHJ1Y3QgYSBUb3VjaEJlZ2luIGV2ZW50IG91dCBvZiB0aGUgcmVjZWl2ZWQgZXZlbnQgZm9y
IHRoZSBmbGlja2FibGUuCisgICAgUVRvdWNoRXZlbnQgdG91Y2hCZWdpbihRRXZlbnQ6OlRvdWNo
QmVnaW4sCisgICAgICAgICAgICAgICAgZXZlbnQtPmRldmljZSgpLAorICAgICAgICAgICAgICAg
IGV2ZW50LT5tb2RpZmllcnMoKSwKKyAgICAgICAgICAgICAgICBldmVudC0+dG91Y2hQb2ludFN0
YXRlcygpLAorICAgICAgICAgICAgICAgIGV2ZW50LT50b3VjaFBvaW50cygpKTsKKworICAgIG1f
dmlld3BvcnQtPmhhbmRsZVRvdWNoRmxpY2tFdmVudCgmdG91Y2hCZWdpbik7CisgICAgbV9sYXN0
UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91Y2hQb2ludHMoKS5m
aXJzdCgpLnBvcygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFu
R2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwg
cWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkK
IHsKLSAgICBzY3JvbGxlcigpLT5oYW5kbGVJbnB1dChRU2Nyb2xsZXI6OklucHV0TW92ZSwgIHZp
ZXdwb3J0VG91Y2hQb2ludCwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIEFTU0VSVChldmVu
dC0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hVcGRhdGUpOworCisgICAgUVBvaW50RiB2aWV3cG9y
dFBvc2l0aW9uID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKS5wb3MoKTsKKworICAgIGVt
aXQgdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChtX2xhc3RQaW5jaENlbnRlckluVmll
d3BvcnRDb29yZGluYXRlcyAtIHZpZXdwb3J0UG9zaXRpb24pOworCisgICAgbV92aWV3cG9ydC0+
aGFuZGxlVG91Y2hGbGlja0V2ZW50KGNvbnN0X2Nhc3Q8UVRvdWNoRXZlbnQqPihldmVudCkpOwor
ICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdmlld3BvcnRQb3Np
dGlvbjsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVD
YW5jZWxsZWQoKQogewotICAgIC8vIFN0b3BwaW5nIHRoZSBzY3JvbGxlciBpbW1lZGlhdGVseSBz
dG9wcyBraW5ldGljIHNjcm9sbGluZyBhbmQgaWYgdGhlIHZpZXcgaXMgb3V0IG9mIGJvdW5kcyBp
dAotICAgIC8vIGlzIG1vdmVkIGluc2lkZSB2YWxpZCBib3VuZHMgaW1tZWRpYXRlbHkgYXMgd2Vs
bC4gVGhpcyBpcyB0aGUgYmVoYXZpb3IgdGhhdCB3ZSB3YW50LgotICAgIHNjcm9sbGVyKCktPnN0
b3AoKTsKKyAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxlcyBvZiB0aGUgZmxpY2thYmxl
LgorICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSByZWNvZ25pemVyIGlm
IHdlIGhhdmUgYSByZWNvZ25pemVkCisgICAgLy8gcGFuIGdlc3R1cmUgYW5kIHJlY2VpdmUgYSB0
b3VjaCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50cworICAgIC8vIChpZS4gdHJhbnNp
dGlvbiB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMgbm90IG1vdmUgdGhlIGNvbnRlbnQK
KyAgICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCisgICAgLy8gV2hlbiB0aGUgcGluY2gg
Z2VzdHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlvbmVkIGFuZCBzY2FsZWQKKyAgICAv
LyBiYWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCisgICAgbV92aWV3cG9ydC0+Y2FuY2VsRmxpY2so
KTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVFbmRl
ZChjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVu
ZGVkKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKLSAgICBzY3JvbGxlcigpLT5oYW5kbGVJ
bnB1dChRU2Nyb2xsZXI6OklucHV0UmVsZWFzZSwgIHZpZXdwb3J0VG91Y2hQb2ludCwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IFFFdmVudDo6VG91
Y2hFbmQpOworICAgIG1fdmlld3BvcnQtPmhhbmRsZVRvdWNoRmxpY2tFdmVudChjb25zdF9jYXN0
PFFUb3VjaEV2ZW50Kj4oZXZlbnQpKTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcyA9IGV2ZW50LT50b3VjaFBvaW50cygpLmZpcnN0KCkucG9zKCk7CiB9CiAKIGJv
b2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNv
bnN0CkBAIC01NTUsNyArNTEyLDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2gKICAgICBjb25z
dCBRUG9pbnRGIHBvc2l0aW9uRGlmZiA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVz
IC0gbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CiAgICAgbV9sYXN0UGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29y
ZGluYXRlczsKIAotICAgIG1fY29udGVudC0+c2V0UG9zKG1fY29udGVudC0+cG9zKCkgKyBwb3Np
dGlvbkRpZmYpOworICAgIG1fdmlld3BvcnQtPnNldENvbnRlbnRQb3MobV92aWV3cG9ydC0+Y29u
dGVudFBvcygpIC0gcG9zaXRpb25EaWZmKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBpbmNoR2VzdHVyZUVuZGVkKCkKQEAgLTU4Niw3ICs1NDMsOCBAQCB2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNl
bnRlckluQ1NTQ29vcmRpbgogICAgIFFQb2ludEYgb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0ID0g
bV92aWV3cG9ydC0+bWFwRnJvbVdlYkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRlcyk7CiAg
ICAgbV9jb250ZW50LT5zZXRDb250ZW50U2NhbGUoaXRlbVNjYWxlRnJvbUNTUyhjc3NTY2FsZSkp
OwogICAgIFFQb2ludEYgbmV3UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydC0+bWFw
RnJvbVdlYkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRlcyk7Ci0gICAgbV9jb250ZW50LT5z
ZXRQb3MobV9jb250ZW50LT5wb3MoKSAtIChuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBvbGRQ
aW5jaENlbnRlck9uVmlld3BvcnQpKTsKKworICAgIG1fdmlld3BvcnQtPnNldENvbnRlbnRQb3Mo
bV92aWV3cG9ydC0+Y29udGVudFBvcygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9s
ZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOwogfQogCiAjaW5jbHVkZSAibW9jX1F0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgKaW5kZXggMTc5MGM3Mi4uNGU4
MDYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaApAQCAtMjMsOCArMjMsOCBAQAogI2RlZmluZSBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmVfaAogCiAjaW5jbHVkZSAiT3duUHRyLmgiCi0jaW5jbHVk
ZSA8UVNjcm9sbGVyPgogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdEd1
aS9RVG91Y2hFdmVudD4KICNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KICNpbmNsdWRlIDxRdENv
cmUvUVJlY3RGPgogI2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFudD4KQEAgLTQ2LDcgKzQ2LDcgQEAg
Y2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lIDogcHVibGljIFFPYmplY3QgewogICAg
IFFfT0JKRUNUCiAKIHB1YmxpYzoKLSAgICBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoY29u
c3QgUVF1aWNrV2ViVmlldyosIFFRdWlja1dlYlBhZ2UqKTsKKyAgICBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUoUVF1aWNrV2ViVmlldyosIFFRdWlja1dlYlBhZ2UqKTsKICAgICB+UXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lKCk7CiAKICAgICBzdHJ1Y3QgQ29uc3RyYWludHMgewpAQCAt
NjcsOCArNjcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFFTaXplIGxheW91dFNpemU7CiAgICAgfTsK
IAotICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7Ci0KICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9p
ZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IENvbnN0cmFpbnRzJik7CiAKQEAgLTc5LDEzICs3Nywx
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWdlUG9zaXRpb25SZXF1ZXN0KGNvbnN0IFFQb2ludCYg
cG9zKTsKIAogICAgIGJvb2wgc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBpbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24oKTsKIAogICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2
ZSgpIGNvbnN0OwotICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgIHZp
ZXdwb3J0VG91Y2hQb2ludCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2b2lk
IHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmICB2aWV3cG9ydFRvdWNoUG9p
bnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlU3Rh
cnRlZChjb25zdCBRVG91Y2hFdmVudCopOworICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRh
dGUoY29uc3QgUVRvdWNoRXZlbnQqKTsKICAgICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxsZWQoKTsK
LSAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBv
aW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZUVu
ZGVkKGNvbnN0IFFUb3VjaEV2ZW50Kik7CiAKICAgICBib29sIHNjYWxlQW5pbWF0aW9uQWN0aXZl
KCkgY29uc3Q7CiAgICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpOwpAQCAtMTExLDcg
KzEwOCw3IEBAIHByaXZhdGUgUV9TTE9UUzoKICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgb2Yg
Y29udGVudCB0aGF0IGFyZSBub3QgZHJpdmVuIGJ5IHVzLCBsaWtlIHRoZSBwYWdlIHJlc2l6aW5n
IGl0c2VsZi4KICAgICB2b2lkIGl0ZW1TaXplQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBzY3JvbGxT
dGF0ZUNoYW5nZWQoUVNjcm9sbGVyOjpTdGF0ZSk7CisgICAgdm9pZCBzY3JvbGxTdGF0ZUNoYW5n
ZWQoKTsKICAgICB2b2lkIHNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1h
dGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpOwogICAgIHZvaWQgc2NhbGVB
bmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUpIHsgc2V0SXRlbVJlY3RWaXNpYmxl
KHZhbHVlLnRvUmVjdEYoKSk7IH0KIApAQCAtMTMxLDExICsxMjgsNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBzY2FsZUNvbnRlbnQoY29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRl
cywgcXJlYWwgY3NzU2NhbGUpOwogCi0gICAgLy8gQXMgbG9uZyBhcyB0aGUgb2JqZWN0IGV4aXN0
cyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBRU2Nyb2xsZXIgaW5z
dGFuY2UuCi0gICAgUVNjcm9sbGVyKiBzY3JvbGxlcigpIHsgcmV0dXJuIFFTY3JvbGxlcjo6c2Ny
b2xsZXIodGhpcyk7IH0KLQotCi0gICAgY29uc3QgUVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3
cG9ydDsKKyAgICBRUXVpY2tXZWJWaWV3KiBjb25zdCBtX3ZpZXdwb3J0OwogICAgIFFRdWlja1dl
YlBhZ2UqIGNvbnN0IG1fY29udGVudDsKIAogICAgIENvbnN0cmFpbnRzIG1fY29uc3RyYWludHM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwCmluZGV4IDA5Zjg5NjAuLmQxMDVjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC01MDYsOCAr
NTA2LDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVudChj
b25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwKICAgICAgICAgLy8gVGhlIGludGVyYWN0
aW9uIGVuZ2luZSBtaWdodCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcgb3Ig
YSBzY2FsZSBhbmltYXRpb24KICAgICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpvb20g
b3IgdGhlIGJvdW5jZSBiYWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBzY3Jv
bGxpbmcKICAgICAgICAgLy8gd2hlcmUgYXMgaXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5p
bWF0aW9uLgotICAgICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+c2Nyb2xsQW5pbWF0aW9u
QWN0aXZlKCkpCi0gICAgICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRTY3Jv
bGxBbmltYXRpb24oKTsKKyAgICAgICAgLy8gU2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIGZsaWNr
UHJvdmlkZXIgd2lsbCBzdG9wIHRoZSBraW5ldGljIHNjcm9sbGluZyBhbmltYXRpb24uCiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKICAgICAgICAgLy8gVGhl
IHNjYWxlIGFuaW1hdGlvbiBjYW4gb25seSBiZSBpbnRlcnJ1cHRlZCBieSBhIHBpbmNoIGdlc3R1
cmUsIHdoaWNoIHdpbGwgdGhlbiB0YWtlIG92ZXIuCkBAIC01MjMsMTUgKzUyMiwxNCBAQCB2b2lk
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdl
YlRvdWNoRXZlbnQmIGV2ZW50LAogICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2FsZUFu
aW1hdGlvbkFjdGl2ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDb252ZXJ0IHRoZSBl
dmVudCB0aW1lc3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCi0gICAgcWludDY0IGV2
ZW50VGltZXN0YW1wTWlsbGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAo
KSAqIDEwMDApOwotICAgIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2LCBldmVu
dFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUo
ZXYpOwogICAgIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYpOwogCiAgICAg
aWYgKG1fcGFuR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkgfHwgbV9waW5jaEdlc3R1
cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQogICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25p
emVyLnJlc2V0KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFFUb3VjaEV2ZW50KiBldiA9
IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7CisgICAgICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVz
dGFtcCBmcm9tIHNlY29uZCB0byBtaWxsaXNlY29uZC4KKyAgICAgICAgcWludDY0IGV2ZW50VGlt
ZXN0YW1wTWlsbGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAqIDEw
MDApOwogICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlY29nbml6ZShldiwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOwogICAgIH0KIH0KLS0gCjEuNy44LjMKCg==
</data>
<flag name="review"
          id="125531"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125663</attachid>
            <date>2012-02-06 09:28:15 -0800</date>
            <delta_ts>2012-02-07 09:51:06 -0800</delta_ts>
            <desc>proposed patch v2</desc>
            <filename>0001-Qt-WK2-WebView-should-use-Flickable-instead-of-QScro.patch</filename>
            <type>text/plain</type>
            <size>52665</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSA1OWFiNTBmNzkyMjdjN2RiYzhiODI0Mzc2YmQ1ODVhYjYyZTRlNjA5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IE1vbiwgNiBGZWIgMjAxMiAxODoxODoxOSArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIFtR
dF0gW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJsZSBpbnN0ZWFkIG9mIFFTY3JvbGxl
cgogdG8gaGFuZGxlIHBvc2l0aW9uaW5nCgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNyArKysrKysrKysKIFNvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwICB8ICAgIDYgKy0KIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgIHwgIDEzMyArKysr
KysrKysrKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19w
LmggIHwgICAyOCArKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wX3AuaCAgIHwgICAxMCArCiAuLi4vcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNr
d2Vidmlldy5jcHAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZs
aWNrUHJvdmlkZXIuY3BwICAgIHwgIDI0OSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5oICAgICAgfCAgIDk4ICsrKysrKysr
CiAuLi4vVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAg
IDggKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgg
IHwgICAgMiArLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUu
Y3BwICAgfCAgMTc1ICsrKysrKy0tLS0tLS0tLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUuaCAgICAgfCAgIDI0ICstCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCB8ICAgMTAgKy0KIDE0IGZpbGVzIGNoYW5nZWQs
IDcxOSBpbnNlcnRpb25zKCspLCAxMzcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmgK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggNjNiYTI1NC4uYTZiYTM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
MCBAQAorMjAxMi0wMi0wNiAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4K
KworICAgICAgICBbUXRdW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJsZSBpbnN0ZWFk
IG9mIFFTY3JvbGxlciB0byBoYW5kbGUgcG9zaXRpb25pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQgV2ViVmlldyBpbXBsZW1lbnRh
dGlvbiB1c2VzIFFTY3JvbGxlciB0byBtYW5hZ2UgcG9zaXRpb25pbmcgYnV0IG90aGVyIHNpbWls
YXIKKyAgICAgICAgaXRlbXMgaW4gUU1MIChpZS4gTGlzdFZpZXcsIEdyaWRWaWV3KSB1c2UgRmxp
Y2thYmxlIGFzIHRoZWlyIGJhc2UgY2xhc3MuCisgICAgICAgIFNpbmNlIFFTY3JvbGxlciB3aWxs
IGJlIGRyb3BwZWQgZnJvbSBRdDUgdGhpcyBwYXRjaCByZW1vdmVzIHRoZSBRU2Nyb2xsZXIgY29k
ZQorICAgICAgICBhbmQgcmVkaXJlY3RzIHBhbiBnZXN0dXJlcyB0byBhIGR5bmFtaWNhbGx5IGNy
ZWF0ZWQgaW50ZXJuYWwgRmxpY2thYmxlIGluc3RhbmNlIChmbGlja1Byb3ZpZGVyKQorICAgICAg
ICB3aGljaCBoYW5kbGVzIHRoZSBwb3NpdGlvbmluZy4KKworICAgICAgICBUaGlzIGltcGxlbWVu
dGF0aW9uIG9ubHkgdXNlcyBwdWJsaWMgUU1MIEFQSSBhbmQgZG9lcyBub3QgZGVwZW5kIG9uIGRl
Y2xhcmF0aXZlLXByaXZhdGUuCisgICAgICAgIEl0IHByb3BhZ2F0ZXMgYSBzbWFsbCBzdWJzZXQg
b2YgdGhlIEZsaWNrYWJsZSBBUEkgYXMgdGhlIHB1YmxpYyBBUEkgb2YgdGhlIFdlYlZpZXcuCisg
ICAgICAgIFRoaXMgbWluaW1hbGlzdGljIEFQSSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgZXhwZXJp
bWVudGFsIGV4dGVuc2lvbiBhbmQgbWFrZXMgaXQgcG9zc2libGUKKyAgICAgICAgaW4gUU1MIHRv
IHBsYWNlIGFkZGl0aW9uYWwgaXRlbXMgKHN1Y2ggYXMgdG9vbGJhcnMsIHNjcm9sbCBpbmRpY2F0
b3JzIGFuZCBmbG9hdGluZyBtZW51cykKKyAgICAgICAgYXJvdWQgdGhlIHBhZ2UuCisgICAgICAg
IFRoZXNlIGl0ZW1zIGNhbiB1c2UgYW5jaG9yaW5nIGFuZCBiaW5kaW5nIGZvciBwb3NpdGlvbmlu
ZyBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkZXBl
bmRzIGhvd2V2ZXIgb24gdGhlIGF1dG9tYXRpYyB0b3VjaC0+bW91c2UgZXZlbnQgc3ludGhldGl6
YXRpb24gb2YgUXQ1LgorICAgICAgICBUaGUgdG91Y2ggZXZlbnRzIHNlbnQgdG8gdGhlIGZsaWNr
UHJvdmlkZXIgYXJlIHRyYW5zbGF0ZWQgdG8gbW91c2UgZXZlbnRzIGF1dG9tYXRpY2FsbHkKKyAg
ICAgICAgYXMgbG9uZyBhcyB0aGUgRmxpY2thYmxlIGRvZXMgbm90IGhhbmRsZSB0b3VjaCBldmVu
dHMgZGlyZWN0bHkuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFuZ2UgUXRXZWJLaXQyIGRvZXMg
bm8gbG9uZ2VyIGRlcGVuZCBvbiBRdFdpZGdldHMgYW5kIHRoaXMgZGVwZW5kZW5jeSBjYW4gYmUK
KyAgICAgICAgcmVtb3ZlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAg
ICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6Cisg
ICAgICAgIChRUXVpY2tXZWJQYWdlOjp0cmFuc2Zvcm1Ub0l0ZW0pOgorICAgICAgICAoUVF1aWNr
V2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNr
V2ViVmlld1ByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnBhZ2VJdGVt
UG9zKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpwYWdlSXRlbVBv
cyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6dXBkYXRlQ29udGVu
dHNTaXplKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBv
bmVudENvbXBsZXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1
cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
ZmxpY2thYmxlRGF0YSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250
ZW50SXRlbSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50V2lk
dGgpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudFdpZHRo
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRIZWlnaHQpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudEhlaWdodCk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50WCk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WCk6CisgICAgICAgIChRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50WSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsOjpzZXRDb250ZW50WSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpwYWdlSXRl
bVBvcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojp1cGRhdGVDb250ZW50c1NpemUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAoUVF1aWNrV2ViVmll
d1ByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnVwZGF0ZUNvbnRlbnRz
U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKHRzdF9RUXVpY2tXZWJWaWV3OjpzY3JvbGxSZXF1ZXN0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChR
dEZsaWNrUHJvdmlkZXI6OlF0RmxpY2tQcm92aWRlcik6CisgICAgICAgIChRdEZsaWNrUHJvdmlk
ZXI6OmhhbmRsZVRvdWNoRmxpY2tFdmVudCk6CisgICAgICAgIChRdEZsaWNrUHJvdmlkZXI6OmNv
bnRlbnRJdGVtKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6ZmxpY2thYmxlRGF0YSk6Cisg
ICAgICAgIChRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRQb3MpOgorICAgICAgICAoUXRGbGlja1By
b3ZpZGVyOjpzZXRDb250ZW50UG9zKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6dmlld3Bv
cnRTaXplKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6c2V0Vmlld3BvcnRTaXplKToKKyAg
ICAgICAgKFF0RmxpY2tQcm92aWRlcjo6cmV0dXJuVG9Cb3VuZHMpOgorICAgICAgICAoUXRGbGlj
a1Byb3ZpZGVyOjpjYW5jZWxGbGljayk6CisgICAgICAgIChRdEZsaWNrUHJvdmlkZXI6OmlzTW92
aW5nKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6aXNEcmFnZ2luZyk6CisgICAgICAgIChR
dEZsaWNrUHJvdmlkZXI6OmlzRmxpY2tpbmcpOgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVyOjpj
b250ZW50V2lkdGgpOgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50V2lkdGgp
OgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50SGVpZ2h0KToKKyAgICAgICAgKFF0
RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudEhlaWdodCk6CisgICAgICAgIChRdEZsaWNrUHJvdmlk
ZXI6OmNvbnRlbnRYKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudFgpOgor
ICAgICAgICAoUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50WSk6CisgICAgICAgIChRdEZsaWNrUHJv
dmlkZXI6OnNldENvbnRlbnRZKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRGbGlja1Byb3Zp
ZGVyLmg6IEFkZGVkLgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVyKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0
UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKFF0UGFuR2VzdHVyZVJlY29nbml6
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3
aGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
YXBwbHlDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQWN0aXZlKToKKyAgICAgICAgKFdlYktp
dDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVJlcXVl
c3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVDYW5jZWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmg6CisgICAg
ICAgIChRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpkb25lV2l0aFRvdWNoRXZlbnQpOgorCiAyMDEyLTAyLTAzICBBbmRyYXMgQmVjc2kgIDxh
bmRyYXMuYmVjc2lAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBBZGQgdGhlIGNvbXBv
bmVudENvbXBsZXRlIG1ldGhvZCB0byBXZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA0MzI2YTRhLi5j
ZWRlNGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI2Niw2ICsyNjYsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlUG9saWN5Q2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VVSUNs
aWVudC5oIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0V2ViVW5kb0NvbnRyb2xsZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmggXApAQCAtNTk0LDYgKzU5NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VQb2xpY3lDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAg
XAorICAgIFVJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dl
YkNvbnRleHRNZW51UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0UXQu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2UuY3BwCmluZGV4IDIyYzY3MDMuLjgzYmQwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAtOTcsNyArOTcsNyBAQCB2b2lk
IFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCiAgICAgdHJh
bnNmb3JtLnNjYWxlKGNvbnRlbnRzU2NhbGUsIGNvbnRlbnRzU2NhbGUpOwogCiAgICAgZmxvYXQg
b3BhY2l0eSA9IGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KHEpOwotICAgIFFSZWN0RiBjbGlwUmVj
dCA9IHEtPnBhcmVudEl0ZW0oKS0+bWFwUmVjdFRvU2NlbmUocS0+cGFyZW50SXRlbSgpLT5ib3Vu
ZGluZ1JlY3QoKSk7CisgICAgUVJlY3RGIGNsaXBSZWN0ID0gdmlld3BvcnRJdGVtLT5tYXBSZWN0
VG9TY2VuZSh2aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKIAogICAgIGlmICghY2xpcFJl
Y3QuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDIsMTMgKzI0MiwxNSBAQCBRVHJh
bnNmb3JtIFFRdWlja1dlYlBhZ2U6OnRyYW5zZm9ybUZyb21JdGVtKCkgY29uc3QKIAogUVRyYW5z
Zm9ybSBRUXVpY2tXZWJQYWdlOjp0cmFuc2Zvcm1Ub0l0ZW0oKSBjb25zdAogewotICAgIHJldHVy
biBRVHJhbnNmb3JtKGQtPmNvbnRlbnRzU2NhbGUsIDAsIDAsIDAsIGQtPmNvbnRlbnRzU2NhbGUs
IDAsIHgoKSwgeSgpLCAxKTsKKyAgICBRUG9pbnRGIHBvcyA9IGQtPnZpZXdwb3J0SXRlbS0+cGFn
ZUl0ZW1Qb3MoKTsKKyAgICByZXR1cm4gUVRyYW5zZm9ybShkLT5jb250ZW50c1NjYWxlLCAwLCAw
LCAwLCBkLT5jb250ZW50c1NjYWxlLCAwLCBwb3MueCgpLCBwb3MueSgpLCAxKTsKIH0KIAogdm9p
ZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiB7CiAgICAgUVNpemVGIHNjYWxl
ZFNpemUgPSBjb250ZW50c1NpemUgKiBjb250ZW50c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2Nh
bGVkU2l6ZSk7CisgICAgdmlld3BvcnRJdGVtLT51cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6
ZSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnJlc2V0UGFpbnROb2RlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmlu
ZGV4IDdlYTZkMzQuLjIwODY2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvSW50UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRl
IDxXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC02NiwxMiArNjcsMTUgQEAgc3RhdGljIFFRdWlja1dlYlZpZXdQcml2YXRlKiBj
cmVhdGVQcml2YXRlT2JqZWN0KFFRdWlja1dlYlZpZXcqIHB1YmxpY09iamVjdCkKIAogUVF1aWNr
V2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdw
b3J0KQogICAgIDogcV9wdHIodmlld3BvcnQpCisgICAgLCBmbGlja1Byb3ZpZGVyKDApCiAgICAg
LCBhbGVydERpYWxvZygwKQogICAgICwgY29uZmlybURpYWxvZygwKQogICAgICwgcHJvbXB0RGlh
bG9nKDApCiAgICAgLCBhdXRoZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwgY2VydGlmaWNhdGVW
ZXJpZmljYXRpb25EaWFsb2coMCkKICAgICAsIGl0ZW1TZWxlY3RvcigwKQorICAgICwgdXNlckRp
ZE92ZXJyaWRlQ29udGVudFdpZHRoKGZhbHNlKQorICAgICwgdXNlckRpZE92ZXJyaWRlQ29udGVu
dEhlaWdodChmYWxzZSkKICAgICAsIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKGZhbHNlKQog
ICAgICwgbV9yZW5kZXJUb09mZnNjcmVlbkJ1ZmZlcihmYWxzZSkKIHsKQEAgLTEzMSw2ICsxMzUs
MTIgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNlRXZlbnRzKCkKICAg
ICBxLT5zZXRBY2NlcHRIb3ZlckV2ZW50cyhmYWxzZSk7CiB9CiAKK1FQb2ludEYgUVF1aWNrV2Vi
Vmlld1ByaXZhdGU6OnBhZ2VJdGVtUG9zKCkKK3sKKyAgICBBU1NFUlQocGFnZVZpZXcpOworICAg
IHJldHVybiBwYWdlVmlldy0+cG9zKCk7Cit9CisKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6
OmxvYWREaWRTdWNjZWVkKCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7CkBAIC00NjgsMTAg
KzQ3OCw0NSBAQCB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjppbml0aWFsaXpl
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcgogICAgIHdlYlBhZ2VQcm94eS0+c2V0
VXNlRml4ZWRMYXlvdXQodHJ1ZSk7CiB9CiAKK1FQb2ludEYgUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6OnBhZ2VJdGVtUG9zKCkKK3sKKyAgICAvLyBGbGlja2FibGUgbW92ZXMgaXRzIGNv
bnRlbnRJdGVtIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0IHBvc2l0aW9uIGludG8gYWNjb3VudCwK
KyAgICAvLyBhcyB3ZWxsIGFzIHRoZSBwb3RlbnRpYWwgZGlzcGxhY2VtZW50IG9mIHRoZSBwYWdl
IG9uIHRoZSBjb250ZW50SXRlbSBiZWNhdXNlCisgICAgLy8gb2YgYWRkaXRpb25hbCBRTUwgaXRl
bXMuCisgICAgcXJlYWwgeFBvcyA9IGZsaWNrUHJvdmlkZXItPmNvbnRlbnRJdGVtKCktPngoKSAr
IHBhZ2VWaWV3LT54KCk7CisgICAgcXJlYWwgeVBvcyA9IGZsaWNrUHJvdmlkZXItPmNvbnRlbnRJ
dGVtKCktPnkoKSArIHBhZ2VWaWV3LT55KCk7CisgICAgcmV0dXJuIFFQb2ludEYoeFBvcywgeVBv
cyk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZUNvbnRl
bnRzU2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCit7CisgICAgQVNTRVJUKGZsaWNrUHJvdmlkZXIp
OworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnRJdGVtIGlzIHNpemVkIHRvIHRo
ZSBwYWdlCisgICAgLy8gaWYgdGhlIHVzZXIgZGlkIG5vdCBhZGQgb3RoZXIgZmxpY2thYmxlIGl0
ZW1zIGluIFFNTC4KKyAgICAvLyBJZiB0aGUgdXNlciBhZGRzIGl0ZW1zIGluIFFNTCBoZSBoYXMg
dG8gbWFrZSBzdXJlIHRvCisgICAgLy8gYWxzbyBiaW5kIHRoZSBjb250ZW50V2lkdGggYW5kIGNv
bnRlbnRIZWlnaHQgYWNjb3JkaW5nbHkuCisgICAgLy8gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdp
dGggbm9ybWFsIFFNTCBGbGlja2FibGUgYmVoYXZpb3VyLgorICAgIGlmICghdXNlckRpZE92ZXJy
aWRlQ29udGVudFdpZHRoKQorICAgICAgICBmbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50V2lkdGgo
c2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoIXVzZXJEaWRPdmVycmlkZUNvbnRlbnRIZWlnaHQpCisg
ICAgICAgIGZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7Cit9
CisKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxl
dGUoKQogewogICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKLSAgICBpbnRlcmFjdGlvbkVuZ2luZS5y
ZXNldChuZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHEsIHBhZ2VWaWV3LmRhdGEoKSkp
OworCisgICAgQVNTRVJUKCFmbGlja1Byb3ZpZGVyKTsKKyAgICBmbGlja1Byb3ZpZGVyID0gbmV3
IFF0RmxpY2tQcm92aWRlcihxLCBwYWdlVmlldy5kYXRhKCkpOworCisgICAgLy8gUHJvcGFnYXRl
IGZsaWNrYWJsZSBzaWduYWxzLgorICAgIFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwg
U0lHTkFMKGNvbnRlbnRXaWR0aENoYW5nZWQoKSksIHEtPmV4cGVyaW1lbnRhbCgpLCBTSUdOQUwo
Y29udGVudFdpZHRoQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIFFPYmpl
Y3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCkp
LCBxLT5leHBlcmltZW50YWwoKSwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCkpLCBRdDo6
RGlyZWN0Q29ubmVjdGlvbik7CisgICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBT
SUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBxLT5leHBlcmltZW50YWwoKSwgU0lHTkFMKGNvbnRl
bnRYQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIFFPYmplY3Q6OmNvbm5l
Y3QoZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgcS0+ZXhwZXJpbWVu
dGFsKCksIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsK
KworICAgIGludGVyYWN0aW9uRW5naW5lLnJlc2V0KG5ldyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUocSwgcGFnZVZpZXcuZGF0YSgpLCBmbGlja1Byb3ZpZGVyKSk7CiAgICAgcGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGludGVyYWN0aW9u
RW5naW5lLmRhdGEoKSk7CiAKICAgICBRT2JqZWN0Ojpjb25uZWN0KGludGVyYWN0aW9uRW5naW5l
LmRhdGEoKSwgU0lHTkFMKGNvbnRlbnRTdXNwZW5kUmVxdWVzdGVkKCkpLCBxLCBTTE9UKF9xX3N1
c3BlbmQoKSkpOwpAQCAtNTMzLDYgKzU3OCw4IEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiAgICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0Vt
cHR5KCkgfHwgIWludGVyYWN0aW9uRW5naW5lKQogICAgICAgICByZXR1cm47CiAKKyAgICBmbGlj
a1Byb3ZpZGVyLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKKwogICAgIC8vIExldCB0
aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAog
ICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCiAgICAgd2ViUGFn
ZVByb3h5LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKQEAgLTkxMCw2ICs5NTcsNzgg
QEAgUVF1aWNrV2ViUGFnZSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6cGFnZSgpCiAgICAg
cmV0dXJuIHFfcHRyLT5wYWdlKCk7CiB9CiAKK1FEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2Jq
ZWN0PiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmbGlja2FibGVEYXRhKCkKK3sKKyAgICBR
X0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOwor
ICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5mbGlja2FibGVEYXRhKCk7Cit9CisKK1FRdWlj
a0l0ZW0qIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRJdGVtKCkKK3sKKyAgICBR
X0QoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOworICAgIHJl
dHVybiBkLT5mbGlja1Byb3ZpZGVyLT5jb250ZW50SXRlbSgpOworfQorCitxcmVhbCBRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50V2lkdGgoKSBjb25zdAoreworICAgIFFfRChjb25z
dCBRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7CisgICAgcmV0
dXJuIGQtPmZsaWNrUHJvdmlkZXItPmNvbnRlbnRXaWR0aCgpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRXaWR0aChxcmVhbCB3aWR0aCkKK3sKKyAgICBR
X0QoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOworICAgIGQt
PnVzZXJEaWRPdmVycmlkZUNvbnRlbnRXaWR0aCA9IHRydWU7CisgICAgZC0+ZmxpY2tQcm92aWRl
ci0+c2V0Q29udGVudFdpZHRoKHdpZHRoKTsKK30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6Y29udGVudEhlaWdodCgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dl
YlZpZXcpOworICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsKKyAgICByZXR1cm4gZC0+Zmxp
Y2tQcm92aWRlci0+Y29udGVudEhlaWdodCgpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWw6OnNldENvbnRlbnRIZWlnaHQocXJlYWwgaGVpZ2h0KQoreworICAgIFFfRChRUXVp
Y2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7CisgICAgZC0+dXNlckRp
ZE92ZXJyaWRlQ29udGVudEhlaWdodCA9IHRydWU7CisgICAgZC0+ZmxpY2tQcm92aWRlci0+c2V0
Q29udGVudEhlaWdodChoZWlnaHQpOworfQorCitxcmVhbCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjpjb250ZW50WCgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwor
ICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsKKyAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRl
ci0+Y29udGVudFgoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRD
b250ZW50WChxcmVhbCB4KQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQo
ZC0+ZmxpY2tQcm92aWRlcik7CisgICAgZC0+ZmxpY2tQcm92aWRlci0+c2V0Q29udGVudFgoeCk7
Cit9CisKK3FyZWFsIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRZKCkgY29uc3QK
K3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNrUHJv
dmlkZXIpOworICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5jb250ZW50WSgpOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRZKHFyZWFsIHkpCit7Cisg
ICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsKKyAg
ICBkLT5mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50WSh5KTsKK30KKwogUVF1aWNrV2ViVmlldzo6
UVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCiAgICAgOiBRUXVpY2tJdGVtKHBhcmVu
dCkKICAgICAsIGRfcHRyKGNyZWF0ZVByaXZhdGVPYmplY3QodGhpcykpCkBAIC0xMjU2LDQgKzEz
NzUsMTYgQEAgdm9pZCBRUXVpY2tXZWJWaWV3Ojpsb2FkSHRtbChjb25zdCBRU3RyaW5nJiBodG1s
LCBjb25zdCBRVXJsJiBiYXNlVXJsKQogICAgIGQtPndlYlBhZ2VQcm94eS0+bG9hZEhUTUxTdHJp
bmcoaHRtbCwgYmFzZVVybC50b1N0cmluZygpKTsKIH0KIAorUVBvaW50RiBRUXVpY2tXZWJWaWV3
OjpwYWdlSXRlbVBvcygpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBk
LT5wYWdlSXRlbVBvcygpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OnVwZGF0ZUNvbnRlbnRz
U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAg
IGQtPnVwZGF0ZUNvbnRlbnRzU2l6ZShzaXplKTsKK30KKwogI2luY2x1ZGUgIm1vY19xcXVpY2t3
ZWJ2aWV3X3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wLmgKaW5kZXggM2U0ODdlMS4uOWVhMGUzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC0xMTIsNiArMTEy
LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOyAv
LyBPbmx5IG5lZWRlZCBieSBXVFIuCiAKKyAgICAvLyBJbnRlcm5hbCBBUEkgdXNlZCBieSBXZWJQ
YWdlLgorICAgIHZvaWQgdXBkYXRlQ29udGVudHNTaXplKGNvbnN0IFFTaXplRiYpOworICAgIFFQ
b2ludEYgcGFnZUl0ZW1Qb3MoKTsKKwogcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBsb2FkKGNv
bnN0IFFVcmwmKTsKICAgICB2b2lkIGxvYWRIdG1sKGNvbnN0IFFTdHJpbmcmIGh0bWwsIGNvbnN0
IFFVcmwmIGJhc2VVcmwgPSBRVXJsKCkpOwpAQCAtMjA1LDYgKzIwOSwxNSBAQCBRTUxfREVDTEFS
RV9UWVBFSU5GTyhRUXVpY2tXZWJWaWV3LCBRTUxfSEFTX0FUVEFDSEVEX1BST1BFUlRJRVMpCiBj
bGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFP
YmplY3QgewogICAgIFFfT0JKRUNUCiAgICAgUV9QUk9QRVJUWShRUXVpY2tXZWJQYWdlKiBwYWdl
IFJFQUQgcGFnZSBDT05TVEFOVCBGSU5BTCkKKworICAgIC8vIFFNTCBGbGlja2FibGUgQVBJLgor
ICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFdpZHRoIFJFQUQgY29udGVudFdpZHRoIFdSSVRF
IHNldENvbnRlbnRXaWR0aCBOT1RJRlkgY29udGVudFdpZHRoQ2hhbmdlZCkKKyAgICBRX1BST1BF
UlRZKHFyZWFsIGNvbnRlbnRIZWlnaHQgUkVBRCBjb250ZW50SGVpZ2h0IFdSSVRFIHNldENvbnRl
bnRIZWlnaHQgTk9USUZZIGNvbnRlbnRIZWlnaHRDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJl
YWwgY29udGVudFggUkVBRCBjb250ZW50WCBXUklURSBzZXRDb250ZW50WCBOT1RJRlkgY29udGVu
dFhDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudFkgUkVBRCBjb250ZW50WSBX
UklURSBzZXRDb250ZW50WSBOT1RJRlkgY29udGVudFlDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFko
UVF1aWNrSXRlbSogY29udGVudEl0ZW0gUkVBRCBjb250ZW50SXRlbSBDT05TVEFOVCkKKyAgICBR
X1BST1BFUlRZKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBmbGlja2FibGVEYXRh
IFJFQUQgZmxpY2thYmxlRGF0YSkKKwogICAgIFFfUFJPUEVSVFkoUVdlYk5hdmlnYXRpb25IaXN0
b3J5KiBuYXZpZ2F0aW9uSGlzdG9yeSBSRUFEIG5hdmlnYXRpb25IaXN0b3J5IENPTlNUQU5UIEZJ
TkFMKQogICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlQ29tcG9uZW50KiBhbGVydERpYWxvZyBS
RUFEIGFsZXJ0RGlhbG9nIFdSSVRFIHNldEFsZXJ0RGlhbG9nIE5PVElGWSBhbGVydERpYWxvZ0No
YW5nZWQpCiAgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVDb21wb25lbnQqIGNvbmZpcm1EaWFs
b2cgUkVBRCBjb25maXJtRGlhbG9nIFdSSVRFIHNldENvbmZpcm1EaWFsb2cgTk9USUZZIGNvbmZp
cm1EaWFsb2dDaGFuZ2VkKQpAQCAtMjQ5LDkgKzI2MiwyMCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGludCBzY2hlbWVEZWxlZ2F0ZXNfQ291bnQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlj
a1VybFNjaGVtZURlbGVnYXRlPiopOwogICAgIHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRlc19D
bGVhcihRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+Kik7
CiAgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBz
Y2hlbWVEZWxlZ2F0ZXMoKTsKKyAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4g
ZmxpY2thYmxlRGF0YSgpOwogICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVy
KFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4p
OwogICAgIHZvaWQgc2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoUVF1aWNrTmV0d29ya1JlcGx5
Kik7CiAKKyAgICBRUXVpY2tJdGVtKiBjb250ZW50SXRlbSgpOworICAgIHFyZWFsIGNvbnRlbnRX
aWR0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFdpZHRoKHFyZWFsKTsKKyAgICBxcmVh
bCBjb250ZW50SGVpZ2h0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50SGVpZ2h0KHFyZWFs
KTsKKyAgICBxcmVhbCBjb250ZW50WCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFgocXJl
YWwpOworICAgIHFyZWFsIGNvbnRlbnRZKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50WShx
cmVhbCk7CisKICAgICAvLyBDKysgb25seQogICAgIGJvb2wgcmVuZGVyVG9PZmZzY3JlZW5CdWZm
ZXIoKSBjb25zdDsKICAgICB2b2lkIHNldFJlbmRlclRvT2Zmc2NyZWVuQnVmZmVyKGJvb2wgZW5h
YmxlKTsKQEAgLTI2NCw2ICsyODgsMTAgQEAgcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBRU3RyaW5nJik7CiAKIFFfU0lHTkFMUzoKKyAgICB2b2lkIGNvbnRlbnRX
aWR0aENoYW5nZWQoKTsKKyAgICB2b2lkIGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCk7CisgICAgdm9p
ZCBjb250ZW50WENoYW5nZWQoKTsKKyAgICB2b2lkIGNvbnRlbnRZQ2hhbmdlZCgpOwogICAgIHZv
aWQgYWxlcnREaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBjb25maXJtRGlhbG9nQ2hhbmdlZCgp
OwogICAgIHZvaWQgcHJvbXB0RGlhbG9nQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCmluZGV4IDllMjdjZTMuLjUx
MjdkMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcF9wLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgcXF1aWNrd2Vidmlld19w
X3BfaAogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIlF0RmxpY2tQ
cm92aWRlci5oIgogI2luY2x1ZGUgIlF0UGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZS5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUxvYWRDbGllbnQuaCIK
QEAgLTY4LDYgKzY5LDkgQEAgcHVibGljOgogICAgIHZvaWQgZW5hYmxlTW91c2VFdmVudHMoKTsK
ICAgICB2b2lkIGRpc2FibGVNb3VzZUV2ZW50cygpOwogCisgICAgdmlydHVhbCBRUG9pbnRGIHBh
Z2VJdGVtUG9zKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZShjb25zdCBR
U2l6ZUYmKSB7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkU3VjY2VlZCgpOwogICAgIHZp
cnR1YWwgdm9pZCBvbkNvbXBvbmVudENvbXBsZXRlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxv
YWREaWRDb21taXQoKSB7IH0KQEAgLTEzMyw2ICsxMzcsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBR
U2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJQYWdlPiBwYWdlVmlldzsKICAgICBRUXVpY2tXZWJWaWV3
KiBxX3B0cjsKKyAgICBRdEZsaWNrUHJvdmlkZXIqIGZsaWNrUHJvdmlkZXI7CiAKICAgICBRRGVj
bGFyYXRpdmVDb21wb25lbnQqIGFsZXJ0RGlhbG9nOwogICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVu
dCogY29uZmlybURpYWxvZzsKQEAgLTE0NSw2ICsxNTAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUUZp
bGVEaWFsb2cqIGZpbGVEaWFsb2c7CiAgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBv
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKIAorICAgIGJvb2wgdXNlckRpZE92ZXJyaWRlQ29udGVu
dFdpZHRoOworICAgIGJvb2wgdXNlckRpZE92ZXJyaWRlQ29udGVudEhlaWdodDsKICAgICBib29s
IG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkOwogICAgIGJvb2wgbV9yZW5kZXJUb09mZnNjcmVl
bkJ1ZmZlcjsKICAgICBRVXJsIG1faWNvblVSTDsKQEAgLTE2Niw2ICsxNzMsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGUoKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IDAsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZiA9IDApOwogCisgICAgdmlydHVhbCBRUG9pbnRGIHBhZ2VJdGVt
UG9zKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZShjb25zdCBRU2l6ZUYm
KTsKKwogICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkU3VjY2VlZCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBvbkNvbXBvbmVudENvbXBsZXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGxvYWREaWRDb21taXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1
aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCmluZGV4
IGRiM2Y5YzkuLjU3MmU5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVp
Y2t3ZWJ2aWV3LmNwcApAQCAtMzUyLDggKzM1Miw4IEBAIHZvaWQgdHN0X1FRdWlja1dlYlZpZXc6
OnNjcm9sbFJlcXVlc3QoKQogICAgIC8vIENPTVBBUkUgd2l0aCB0aGUgcG9zaXRpb24gcmVxdWVz
dGVkIGluIHRoZSBodG1sCiAgICAgLy8gVXNlIHFSb3VuZCBhcyB0aGF0IGlzIGFsc28gdXNlZCB3
aGVuIGNhbGN1bGF0aW5nIHRoZSBwb3NpdGlvbgogICAgIC8vIGluIFdlYktpdC4KLSAgICBpbnQg
eSA9IC1xUm91bmQoNTAgKiB3ZWJWaWV3KCktPnBhZ2UoKS0+Y29udGVudHNTY2FsZSgpKTsKLSAg
ICBRVkVSSUZZKHdlYlZpZXcoKS0+cGFnZSgpLT5wb3MoKS55KCkgPT0geSk7CisgICAgaW50IHkg
PSBxUm91bmQoNTAgKiB3ZWJWaWV3KCktPnBhZ2UoKS0+Y29udGVudHNTY2FsZSgpKTsKKyAgICBR
VkVSSUZZKHdlYlZpZXcoKS0+ZXhwZXJpbWVudGFsKCktPmNvbnRlbnRZKCkgPT0geSk7CiB9CiAK
IFFUV0VCS0lUX0FQSV9URVNUX01BSU4odHN0X1FRdWlja1dlYlZpZXcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQwMzVlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcApAQCAtMCwwICsxLDI0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdEZsaWNr
UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgorI2luY2x1ZGUgInFx
dWlja3dlYnZpZXdfcC5oIgorCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRl
IDxRRGVjbGFyYXRpdmVFbmdpbmU+CisjaW5jbHVkZSA8UURlY2xhcmF0aXZlSW5jdWJhdG9yPgor
I2luY2x1ZGUgPFFQb2ludEY+CisjaW5jbHVkZSA8UVF1aWNrSXRlbT4KKyNpbmNsdWRlIDxRVG91
Y2hFdmVudD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpY2thYmxlUHJvcGVydHkoUU9iamVjdCog
ZmxpY2thYmxlLCBRTWV0YVByb3BlcnR5IHByb3BlcnR5KQoreworICAgIEFTU0VSVChmbGlja2Fi
bGUpOworICAgIEFTU0VSVChwcm9wZXJ0eS5pc1ZhbGlkKCkpOworCisgICAgUVZhcmlhbnQgZGF0
YSA9IHByb3BlcnR5LnJlYWQoZmxpY2thYmxlKTsKKyAgICBBU1NFUlQoZGF0YS5jYW5Db252ZXJ0
PFQ+KCkpOworCisgICAgcmV0dXJuIGRhdGEudmFsdWU8VD4oKTsKK30KKworaW5saW5lIHZvaWQg
c2V0RmxpY2thYmxlUHJvcGVydHkoUU9iamVjdCogZmxpY2thYmxlLCBRTWV0YVByb3BlcnR5IHBy
b3BlcnR5LCBjb25zdCBRVmFyaWFudCYgdmFsdWUpCit7CisgICAgQVNTRVJUKGZsaWNrYWJsZSk7
CisgICAgQVNTRVJUKHByb3BlcnR5LmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKHZhbHVlLmlzVmFs
aWQoKSk7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBwcm9wZXJ0eS53cml0ZShmbGlja2FibGUsIHZh
bHVlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworfQorCitpbmxpbmUg
UU1ldGFNZXRob2QgcmVzb2x2ZU1ldGFNZXRob2QoUU9iamVjdCogZmxpY2thYmxlLCBjb25zdCBj
aGFyKiBuYW1lKQoreworICAgIEFTU0VSVChmbGlja2FibGUpOworCisgICAgY29uc3QgUU1ldGFP
YmplY3QqIG1ldGFPYmplY3QgPSBmbGlja2FibGUtPm1ldGFPYmplY3QoKTsKKyAgICBBU1NFUlQo
bWV0YU9iamVjdCk7CisKKyAgICBpbnQgbWV0aG9kSW5kZXggPSBtZXRhT2JqZWN0LT5pbmRleE9m
TWV0aG9kKG5hbWUpOworICAgIEFTU0VSVChtZXRob2RJbmRleCAhPSAtMSk7CisKKyAgICByZXR1
cm4gbWV0YU9iamVjdC0+bWV0aG9kKG1ldGhvZEluZGV4KTsKK30KKworaW5saW5lIFFNZXRhUHJv
cGVydHkgcmVzb2x2ZU1ldGFQcm9wZXJ0eShRT2JqZWN0KiBmbGlja2FibGUsIGNvbnN0IGNoYXIq
IG5hbWUpCit7CisgICAgQVNTRVJUKGZsaWNrYWJsZSk7CisKKyAgICBjb25zdCBRTWV0YU9iamVj
dCogbWV0YU9iamVjdCA9IGZsaWNrYWJsZS0+bWV0YU9iamVjdCgpOworICAgIEFTU0VSVChtZXRh
T2JqZWN0KTsKKworICAgIGludCBwcm9wZXJ0eUluZGV4ID0gbWV0YU9iamVjdC0+aW5kZXhPZlBy
b3BlcnR5KG5hbWUpOworICAgIEFTU0VSVChwcm9wZXJ0eUluZGV4ICE9IC0xKTsKKworICAgIHJl
dHVybiBtZXRhT2JqZWN0LT5wcm9wZXJ0eShwcm9wZXJ0eUluZGV4KTsKK30KKworfSAvLyBuYW1l
c3BhY2UKKworUXRGbGlja1Byb3ZpZGVyOjpRdEZsaWNrUHJvdmlkZXIoUVF1aWNrV2ViVmlldyog
dmlld0l0ZW0sIFFRdWlja1dlYlBhZ2UqIHBhZ2VJdGVtKQorICAgIDogUU9iamVjdCh2aWV3SXRl
bSkKK3sKKyAgICBBU1NFUlQodmlld0l0ZW0pOworICAgIEFTU0VSVChwYWdlSXRlbSk7CisKKyAg
ICBRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2luZSA9IHFtbEVuZ2luZSh2aWV3SXRlbSk7CisgICAg
UURlY2xhcmF0aXZlQ29udGV4dCogY29udGV4dCA9IHFtbENvbnRleHQodmlld0l0ZW0pOworCisg
ICAgQVNTRVJUKGVuZ2luZSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgUURlY2xhcmF0
aXZlQ29tcG9uZW50IGNvbXBvbmVudChlbmdpbmUsIHZpZXdJdGVtKTsKKworICAgIC8vIENyZWF0
ZSB0aGUgaW50ZXJuYWwgRmxpY2thYmxlIGluc3RhbmNlIGR5bmFtaWNhbGx5LgorICAgIC8vIFdl
IG9ubHkgdXNlIHB1YmxpYyBRTUwgQVBJIHNvIHRoYXQgd2UgZG8gbm90IGRlcGVuZAorICAgIC8v
IG9uIHByaXZhdGUgQVBJIG9mIHRoZSBRdERlY2xhcmF0aXZlIG1vZHVsZS4KKyAgICBjb21wb25l
bnQuc2V0RGF0YShRQnl0ZUFycmF5TGl0ZXJhbCgiaW1wb3J0IFF0UXVpY2sgMi4wXG5GbGlja2Fi
bGUge30iKSwgUVVybCgpKTsKKworICAgIG1fZmxpY2thYmxlID0gcW9iamVjdF9jYXN0PFFRdWlj
a0l0ZW0qPihjb21wb25lbnQuY3JlYXRlKGNvbnRleHQpKTsKKworICAgIFFNZXRhUHJvcGVydHkg
Y29udGVudCA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50SXRlbSIp
OworICAgIG1fY29udGVudEl0ZW0gPSBmbGlja2FibGVQcm9wZXJ0eTxRUXVpY2tJdGVtKj4obV9m
bGlja2FibGUsIGNvbnRlbnQpOworICAgIEFTU0VSVChtX2NvbnRlbnRJdGVtKTsKKworICAgIC8v
IFJlc292ZSBtZXRhIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgb2YgdGhlIEZsaWNrYWJsZSBpbnN0
YW5jZS4KKyAgICBtX3JldHVyblRvQm91bmRzID0gcmVzb2x2ZU1ldGFNZXRob2QobV9mbGlja2Fi
bGUsICJyZXR1cm5Ub0JvdW5kcygpIik7CisgICAgbV9jYW5jZWxGbGljayA9IHJlc29sdmVNZXRh
TWV0aG9kKG1fZmxpY2thYmxlLCAiY2FuY2VsRmxpY2soKSIpOworCisgICAgbV9jb250ZW50V2lk
dGggPSByZXNvbHZlTWV0YVByb3BlcnR5KG1fZmxpY2thYmxlLCAiY29udGVudFdpZHRoIik7Cisg
ICAgbV9jb250ZW50SGVpZ2h0ID0gcmVzb2x2ZU1ldGFQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgImNv
bnRlbnRIZWlnaHQiKTsKKyAgICBtX2NvbnRlbnRYID0gcmVzb2x2ZU1ldGFQcm9wZXJ0eShtX2Zs
aWNrYWJsZSwgImNvbnRlbnRYIik7CisgICAgbV9jb250ZW50WSA9IHJlc29sdmVNZXRhUHJvcGVy
dHkobV9mbGlja2FibGUsICJjb250ZW50WSIpOworICAgIG1fbW92aW5nID0gcmVzb2x2ZU1ldGFQ
cm9wZXJ0eShtX2ZsaWNrYWJsZSwgIm1vdmluZyIpOworICAgIG1fZHJhZ2dpbmcgPSByZXNvbHZl
TWV0YVByb3BlcnR5KG1fZmxpY2thYmxlLCAiZHJhZ2dpbmciKTsKKyAgICBtX2ZsaWNraW5nID0g
cmVzb2x2ZU1ldGFQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgImZsaWNraW5nIik7CisKKyAgICBtX2Zs
aWNrYWJsZURhdGEgPSByZXNvbHZlTWV0YVByb3BlcnR5KG1fZmxpY2thYmxlLCAiZmxpY2thYmxl
RGF0YSIpOworCisgICAgLy8gU2V0IHRoZSB2aWV3SXRlbSBhcyB0aGUgcGFyZW50IG9mIHRoZSBm
bGlja2FibGVJbnN0YW5jZQorICAgIC8vIGFuZCByZXBhcmVudCB0aGUgcGFnZSBzbyBpdCBpcyBw
bGFjZWQgb24gdGhlIGZsaWNrYWJsZSBjb250ZW50SXRlbS4KKyAgICBtX2ZsaWNrYWJsZS0+c2V0
UGFyZW50SXRlbSh2aWV3SXRlbSk7CisgICAgcGFnZUl0ZW0tPnNldFBhcmVudEl0ZW0obV9jb250
ZW50SXRlbSk7CisKKyAgICAvLyBQcm9wYWdhdGUgZmxpY2thYmxlIHNpZ25hbHMuCisgICAgY29u
bmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKG1vdmluZ0NoYW5nZWQoKSksIFNJR05BTChtb3ZpbmdD
aGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX2ZsaWNrYWJs
ZSwgU0lHTkFMKGZsaWNraW5nQ2hhbmdlZCgpKSwgU0lHTkFMKGZsaWNraW5nQ2hhbmdlZCgpKSwg
UXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QobV9mbGlja2FibGUsIFNJR05BTChk
cmFnZ2luZ0NoYW5nZWQoKSksIFNJR05BTChkcmFnZ2luZ0NoYW5nZWQoKSksIFF0OjpEaXJlY3RD
b25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdOQUwoY29udGVudFdpZHRo
Q2hhbmdlZCgpKSwgU0lHTkFMKGNvbnRlbnRXaWR0aENoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25u
ZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdOQUwoY29udGVudEhlaWdodENo
YW5nZWQoKSksIFNJR05BTChjb250ZW50SGVpZ2h0Q2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5l
Y3Rpb24pOworICAgIGNvbm5lY3QobV9mbGlja2FibGUsIFNJR05BTChjb250ZW50WENoYW5nZWQo
KSksIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAg
ICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCBTSUdOQUwo
Y29udGVudFlDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgUXRG
bGlja1Byb3ZpZGVyOjpoYW5kbGVUb3VjaEZsaWNrRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQor
eworICAgIC8vIElnbm9yZSB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgcG90ZW50aWFsIGF1dG9tYXRp
YyB0b3VjaC0+bW91c2Ugc3ludGhlc2l6aW5nIG9mIFF0IHdvcmsgY29ycmVjdGx5LgorICAgIGV2
ZW50LT5pZ25vcmUoKTsKKyAgICBRQ29yZUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQobV9mbGlja2Fi
bGUsIGV2ZW50KTsKK30KKworUVF1aWNrSXRlbSogUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50SXRl
bSgpCit7CisgICAgQVNTRVJUKG1fY29udGVudEl0ZW0pOworICAgIHJldHVybiBtX2NvbnRlbnRJ
dGVtOworfQorCitRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gUXRGbGlja1Byb3Zp
ZGVyOjpmbGlja2FibGVEYXRhKCkKK3sKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8UURl
Y2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+ID4obV9mbGlja2FibGUsIG1fZmxpY2thYmxl
RGF0YSk7Cit9CisKK1FQb2ludEYgUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50UG9zKCkgY29uc3QK
K3sKKyAgICBxcmVhbCB4ID0gZmxpY2thYmxlUHJvcGVydHk8cXJlYWw+KG1fZmxpY2thYmxlLCBt
X2NvbnRlbnRYKTsKKyAgICBxcmVhbCB5ID0gZmxpY2thYmxlUHJvcGVydHk8cXJlYWw+KG1fZmxp
Y2thYmxlLCBtX2NvbnRlbnRZKTsKKyAgICByZXR1cm4gUVBvaW50Rih4LCB5KTsKK30KK3ZvaWQg
UXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50UG9zKGNvbnN0IFFQb2ludEYmIHBvcykKK3sKKyAg
ICBzZXRGbGlja2FibGVQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgbV9jb250ZW50WCwgcG9zLngoKSk7
CisgICAgc2V0RmxpY2thYmxlUHJvcGVydHkobV9mbGlja2FibGUsIG1fY29udGVudFksIHBvcy55
KCkpOworfQorCitRU2l6ZUYgUXRGbGlja1Byb3ZpZGVyOjp2aWV3cG9ydFNpemUoKSBjb25zdAor
eworICAgIHFyZWFsIHdpZHRoID0gbV9mbGlja2FibGUtPndpZHRoKCk7CisgICAgcXJlYWwgaGVp
Z2h0ID0gbV9mbGlja2FibGUtPmhlaWdodCgpOworCisgICAgcmV0dXJuIFFTaXplRih3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBRdEZsaWNrUHJvdmlkZXI6OnNldFZpZXdwb3J0U2l6ZShjb25z
dCBRU2l6ZUYmIHNpemUpCit7CisgICAgQVNTRVJUKHNpemUuaXNWYWxpZCgpKTsKKyAgICBtX2Zs
aWNrYWJsZS0+c2V0V2lkdGgoc2l6ZS53aWR0aCgpKTsKKyAgICBtX2ZsaWNrYWJsZS0+c2V0SGVp
Z2h0KHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIFF0RmxpY2tQcm92aWRlcjo6cmV0dXJuVG9C
b3VuZHMoKQoreworICAgIG1fcmV0dXJuVG9Cb3VuZHMuaW52b2tlKG1fZmxpY2thYmxlLCBRdDo6
RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgUXRGbGlja1Byb3ZpZGVyOjpjYW5jZWxGbGlj
aygpCit7CisgICAgbV9jYW5jZWxGbGljay5pbnZva2UobV9mbGlja2FibGUsIFF0OjpEaXJlY3RD
b25uZWN0aW9uKTsKK30KKworYm9vbCBRdEZsaWNrUHJvdmlkZXI6OmlzTW92aW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8Ym9vbD4obV9mbGlja2FibGUsIG1fbW92
aW5nKTsKK30KKworYm9vbCBRdEZsaWNrUHJvdmlkZXI6OmlzRHJhZ2dpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBmbGlja2FibGVQcm9wZXJ0eTxib29sPihtX2ZsaWNrYWJsZSwgbV9kcmFnZ2lu
Zyk7Cit9CisKK2Jvb2wgUXRGbGlja1Byb3ZpZGVyOjppc0ZsaWNraW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8Ym9vbD4obV9mbGlja2FibGUsIG1fZmxpY2tpbmcp
OworfQorCitxcmVhbCBRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZsaWNrYWJsZVByb3BlcnR5PHFyZWFsPihtX2ZsaWNrYWJsZSwgbV9jb250ZW50
V2lkdGgpOworfQorCit2b2lkIFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudFdpZHRoKHFyZWFs
IHdpZHRoKQoreworICAgIHNldEZsaWNrYWJsZVByb3BlcnR5KG1fZmxpY2thYmxlLCBtX2NvbnRl
bnRXaWR0aCwgd2lkdGgpOworfQorCitxcmVhbCBRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRIZWln
aHQoKSBjb25zdAoreworICAgIHJldHVybiBmbGlja2FibGVQcm9wZXJ0eTxxcmVhbD4obV9mbGlj
a2FibGUsIG1fY29udGVudEhlaWdodCk7Cit9CisKK3ZvaWQgUXRGbGlja1Byb3ZpZGVyOjpzZXRD
b250ZW50SGVpZ2h0KHFyZWFsIGhlaWdodCkKK3sKKyAgICBzZXRGbGlja2FibGVQcm9wZXJ0eSht
X2ZsaWNrYWJsZSwgbV9jb250ZW50SGVpZ2h0LCBoZWlnaHQpOworfQorCitxcmVhbCBRdEZsaWNr
UHJvdmlkZXI6OmNvbnRlbnRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVy
dHk8cXJlYWw+KG1fZmxpY2thYmxlLCBtX2NvbnRlbnRYKTsKK30KKwordm9pZCBRdEZsaWNrUHJv
dmlkZXI6OnNldENvbnRlbnRYKHFyZWFsIHgpCit7CisgICAgc2V0RmxpY2thYmxlUHJvcGVydHko
bV9mbGlja2FibGUsIG1fY29udGVudFgsIHgpOworfQorCitxcmVhbCBRdEZsaWNrUHJvdmlkZXI6
OmNvbnRlbnRZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmxpY2thYmxlUHJvcGVydHk8cXJlYWw+
KG1fZmxpY2thYmxlLCBtX2NvbnRlbnRZKTsKK30KKwordm9pZCBRdEZsaWNrUHJvdmlkZXI6OnNl
dENvbnRlbnRZKHFyZWFsIHkpCit7CisgICAgc2V0RmxpY2thYmxlUHJvcGVydHkobV9mbGlja2Fi
bGUsIG1fY29udGVudFksIHkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0RmxpY2tQcm92aWRlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
RmxpY2tQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OTA1
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlj
a1Byb3ZpZGVyLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
UXRGbGlja1Byb3ZpZGVyX2gKKyNkZWZpbmUgUXRGbGlja1Byb3ZpZGVyX2gKKworI2luY2x1ZGUg
PFFNZXRhTWV0aG9kPgorI2luY2x1ZGUgPFFNZXRhUHJvcGVydHk+CisjaW5jbHVkZSA8UU9iamVj
dD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWxpc3QuaD4KKworUVRfQkVH
SU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnRGOworY2xhc3MgUVNpemVGOworY2xhc3MgUVF1aWNr
SXRlbTsKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBRUXVpY2tXZWJWaWV3OworY2xhc3Mg
UVRvdWNoRXZlbnQ7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFF0RmxpY2tQcm92aWRlciA6
IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFF0RmxpY2tQcm92
aWRlcihRUXVpY2tXZWJWaWV3KiB2aWV3SXRlbSwgUVF1aWNrV2ViUGFnZSogcGFnZUl0ZW0pOwor
CisgICAgdm9pZCBoYW5kbGVUb3VjaEZsaWNrRXZlbnQoUVRvdWNoRXZlbnQqKTsKKworICAgIFFR
dWlja0l0ZW0qIGNvbnRlbnRJdGVtKCk7CisgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFP
YmplY3Q+IGZsaWNrYWJsZURhdGEoKTsKKworICAgIFFQb2ludEYgY29udGVudFBvcygpIGNvbnN0
OworICAgIHZvaWQgc2V0Q29udGVudFBvcyhjb25zdCBRUG9pbnRGJik7CisKKyAgICBRU2l6ZUYg
dmlld3BvcnRTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgUVNp
emVGJik7CisKKyAgICB2b2lkIHJldHVyblRvQm91bmRzKCk7CisgICAgdm9pZCBjYW5jZWxGbGlj
aygpOworCisgICAgYm9vbCBpc01vdmluZygpIGNvbnN0OworICAgIGJvb2wgaXNEcmFnZ2luZygp
IGNvbnN0OworICAgIGJvb2wgaXNGbGlja2luZygpIGNvbnN0OworCisgICAgcXJlYWwgY29udGVu
dFdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50V2lkdGgocXJlYWwpOworICAgIHFy
ZWFsIGNvbnRlbnRIZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRIZWlnaHQocXJl
YWwpOworICAgIHFyZWFsIGNvbnRlbnRYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50WChx
cmVhbCk7CisgICAgcXJlYWwgY29udGVudFkoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRZ
KHFyZWFsKTsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgY29udGVudFdpZHRoQ2hhbmdlZCgpOwor
ICAgIHZvaWQgY29udGVudEhlaWdodENoYW5nZWQoKTsKKyAgICB2b2lkIGNvbnRlbnRYQ2hhbmdl
ZCgpOworICAgIHZvaWQgY29udGVudFlDaGFuZ2VkKCk7CisgICAgdm9pZCBtb3ZpbmdDaGFuZ2Vk
KCk7CisgICAgdm9pZCBmbGlja2luZ0NoYW5nZWQoKTsKKyAgICB2b2lkIGRyYWdnaW5nQ2hhbmdl
ZCgpOworCitwcml2YXRlOgorICAgIFFNZXRhTWV0aG9kIG1fcmV0dXJuVG9Cb3VuZHM7CisgICAg
UU1ldGFNZXRob2QgbV9jYW5jZWxGbGljazsKKworICAgIFFNZXRhUHJvcGVydHkgbV9jb250ZW50
V2lkdGg7CisgICAgUU1ldGFQcm9wZXJ0eSBtX2NvbnRlbnRIZWlnaHQ7CisgICAgUU1ldGFQcm9w
ZXJ0eSBtX2NvbnRlbnRYOworICAgIFFNZXRhUHJvcGVydHkgbV9jb250ZW50WTsKKworICAgIFFN
ZXRhUHJvcGVydHkgbV9tb3Zpbmc7CisgICAgUU1ldGFQcm9wZXJ0eSBtX2RyYWdnaW5nOworICAg
IFFNZXRhUHJvcGVydHkgbV9mbGlja2luZzsKKworICAgIFFNZXRhUHJvcGVydHkgbV9mbGlja2Fi
bGVEYXRhOworCisgICAgUVF1aWNrSXRlbSogbV9jb250ZW50SXRlbTsKKyAgICBRUXVpY2tJdGVt
KiBtX2ZsaWNrYWJsZTsKK307CisKKyNlbmRpZiAvLyBRdEZsaWNrUHJvdmlkZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIu
Y3BwCmluZGV4IDZmOTNjOTMuLjY2NjIzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTM3LDcgKzM3LDcg
QEAgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6UXRQYW5HZXN0dXJlUmVjb2duaXplcihRdFdlYlBh
Z2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGwKICAgICByZXNldCgpOwogfQogCi1ib29sIFF0UGFu
R2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQsIHFp
bnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK2Jvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6
cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIWludGVyYWN0
aW9uRW5naW5lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDE2ICs3MywxNiBAQCBi
b29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCog
ZXZlbnQsIHFpbnQ2NCBldmVudFRpbQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgbV9zdGF0ZSA9IEdlc3R1cmVSZWNvZ25pemVkOwotICAgICAgICAgICAgaW50
ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVN0YXJ0ZWQodG91Y2hQb2ludC5wb3MoKSwgZXZl
bnRUaW1lc3RhbXBNaWxsaXMpOworICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFu
R2VzdHVyZVN0YXJ0ZWQoZXZlbnQpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG1fc3Rh
dGUgPT0gR2VzdHVyZVJlY29nbml6ZWQpOwotICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5w
YW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1p
bGxpcyk7CisgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVSZXF1ZXN0VXBk
YXRlKGV2ZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgUUV2ZW50
OjpUb3VjaEVuZDoKICAgICAgICAgaWYgKG1fc3RhdGUgPT0gR2VzdHVyZVJlY29nbml6ZWQpIHsK
LSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVFbmRlZCh0b3VjaFBv
aW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgICAgICAgICBpbnRlcmFjdGlv
bkVuZ2luZSgpLT5wYW5HZXN0dXJlRW5kZWQoZXZlbnQpOwogICAgICAgICAgICAgcmVzZXQoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCA1MzI1MDdl
Li5jZjA5NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5H
ZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBh
bkdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTQyLDcgKzQyLDcgQEAgY29uc3QgcXJlYWwgcGFubmlu
Z0luaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQgPSA1LjsKIGNsYXNzIFF0UGFuR2VzdHVy
ZVJlY29nbml6ZXIgOiBwdWJsaWMgUXRHZXN0dXJlUmVjb2duaXplciB7CiBwdWJsaWM6CiAgICAg
UXRQYW5HZXN0dXJlUmVjb2duaXplcihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqKTsKLSAgICBib29s
IHJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCosIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxp
cyk7CisgICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqKTsKICAgICB2b2lkIHJl
c2V0KCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCmluZGV4IDYyNDAwZmEuLjA3
ZDA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCkBAIC0yMywxMiArMjMsMTAgQEAKICNpbmNs
dWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKIAogI2luY2x1ZGUgIlBhc3NPd25Q
dHIuaCIKKyNpbmNsdWRlICJRdEZsaWNrUHJvdmlkZXIuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJw
YWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNsdWRlIDxRUG9pbnRG
PgotI2luY2x1ZGUgPFFTY3JvbGxFdmVudD4KLSNpbmNsdWRlIDxRU2Nyb2xsUHJlcGFyZUV2ZW50
PgotI2luY2x1ZGUgPFFTY3JvbGxlclByb3BlcnRpZXM+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4K
ICNpbmNsdWRlIDxRV2hlZWxFdmVudD4KICNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4K
QEAgLTExNCw0MSArMTEyLDI1IEBAIGlubGluZSBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjppdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJiBjc3NSZWN0CiAgICAgcmV0dXJu
IGl0ZW1SZWN0OwogfQogCi1RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZShjb25zdCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCwgUVF1aWNrV2Vi
UGFnZSogY29udGVudCkKK1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBj
b250ZW50LCBRdEZsaWNrUHJvdmlkZXIqIGZsaWNrUHJvdmlkZXIpCiAgICAgOiBtX3ZpZXdwb3J0
KHZpZXdwb3J0KQogICAgICwgbV9jb250ZW50KGNvbnRlbnQpCisgICAgLCBtX2ZsaWNrUHJvdmlk
ZXIoZmxpY2tQcm92aWRlcikKICAgICAsIG1fc3VzcGVuZENvdW50KDApCisgICAgLCBtX2hhZFVz
ZXJJbnRlcmFjdGlvbihmYWxzZSkKICAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3IFNjYWxlQW5p
bWF0aW9uKHRoaXMpKQogICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCiB7CiAgICAgcmVzZXQo
KTsKIAotICAgIFFTY3JvbGxlclByb3BlcnRpZXMgcHJvcGVydGllcyA9IHNjcm9sbGVyKCktPnNj
cm9sbGVyUHJvcGVydGllcygpOwotCi0gICAgLy8gVGhlIFF0UGFuR2VzdHVyZVJlY29nbml6ZXIg
aXMgcmVzcG9uc2libGUgZm9yIHJlY29nbml6aW5nIHRoZSBnZXN0dXJlCi0gICAgLy8gdGh1cyB3
ZSBuZWVkIHRvIGRpc2FibGUgdGhlIGRyYWcgc3RhcnQgZGlzdGFuY2UuCi0gICAgcHJvcGVydGll
cy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGllczo6RHJhZ1N0YXJ0RGlzdGFuY2Us
IDAuMCk7Ci0KLSAgICAvLyBTZXQgc29tZSBkZWZhdWx0IFFTY3JvbGxlciBjb25zdHJhaW5zIHRv
IG1pbWljIHRoZSBwaHlzaWNzIGVuZ2luZSBvZiB0aGUgTjkgYnJvd3Nlci4KLSAgICBwcm9wZXJ0
aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpBeGlzTG9ja1RocmVzaG9s
ZCwgMC42Nik7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVy
dGllczo6U2Nyb2xsaW5nQ3VydmUsIFFFYXNpbmdDdXJ2ZShRRWFzaW5nQ3VydmU6Ok91dEV4cG8p
KTsKLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpE
ZWNlbGVyYXRpb25GYWN0b3IsIDAuMDUpOwotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmlj
KFFTY3JvbGxlclByb3BlcnRpZXM6Ok1heGltdW1WZWxvY2l0eSwgMC42MzUpOwotICAgIHByb3Bl
cnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6Ok92ZXJzaG9vdERyYWdS
ZXNpc3RhbmNlRmFjdG9yLCAwLjMzKTsKLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhR
U2Nyb2xsZXJQcm9wZXJ0aWVzOjpPdmVyc2hvb3RTY3JvbGxEaXN0YW5jZUZhY3RvciwgMC4zMyk7
Ci0KLSAgICBzY3JvbGxlcigpLT5zZXRTY3JvbGxlclByb3BlcnRpZXMocHJvcGVydGllcyk7Ci0K
LSAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKHdpZHRoQ2hhbmdlZCgpKSwgdGhpcywgU0xP
VChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0
KG1fY29udGVudCwgU0lHTkFMKGhlaWdodENoYW5nZWQoKSksIHRoaXMsIFNMT1QoaXRlbVNpemVD
aGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX2NvbnRlbnQs
IFNJR05BTCh3aWR0aENoYW5nZWQoKSksIFNMT1QoaXRlbVNpemVDaGFuZ2VkKCkpLCBRdDo6RGly
ZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX2NvbnRlbnQsIFNJR05BTChoZWlnaHRDaGFu
Z2VkKCkpLCBTTE9UKGl0ZW1TaXplQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwor
ICAgIGNvbm5lY3QobV9mbGlja1Byb3ZpZGVyLCBTSUdOQUwobW92aW5nQ2hhbmdlZCgpKSwgU0xP
VChzY3JvbGxTdGF0ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKIAogICAgIGNv
bm5lY3QobV9zY2FsZUFuaW1hdGlvbiwgU0lHTkFMKHZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLAog
ICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLCBR
dDo6RGlyZWN0Q29ubmVjdGlvbik7CiAgICAgY29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdO
QUwoc3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1h
dGlvbjo6U3RhdGUpKSwKICAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5n
ZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkp
LCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0KLSAgICBjb25uZWN0KHNjcm9sbGVyKCksIFNJR05B
TChzdGF0ZUNoYW5nZWQoUVNjcm9sbGVyOjpTdGF0ZSkpLAotICAgICAgICAgICAgU0xPVChzY3Jv
bGxTdGF0ZUNoYW5nZWQoUVNjcm9sbGVyOjpTdGF0ZSkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7
CiB9CiAKIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6flF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZSgpCkBAIC0xODIsOSArMTY0LDExIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpzZXRJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKIAogICAg
IG1fY29udGVudC0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGUpOwogCi0gICAgLy8gV2UgbmVl
ZCB0byBhbmltYXRlIHRoZSBjb250ZW50IGJ1dCB0aGUgcG9zaXRpb24gcmVwcmVzZW50cyB0aGUg
dmlld3BvcnQgaGVuY2Ugd2UgbmVlZCB0byBpbnZlcnQgdGhlIHBvc2l0aW9uIGhlcmUuCi0gICAg
Ly8gVG8gYW5pbWF0ZSB0aGUgcG9zaXRpb24gdG9nZXRoZXIgd2l0aCB0aGUgc2NhbGUgd2UgbXVs
dGlwbHkgdGhlIHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgc2NhbGU7Ci0gICAgbV9jb250ZW50
LT5zZXRQb3MoLSBpdGVtUmVjdC50b3BMZWZ0KCkgKiBpdGVtU2NhbGUpOworICAgIC8vIFRvIGFu
aW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIHNjYWxlIHdlIG11bHRpcGx5IHRo
ZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxlCisgICAgLy8gYW5kIGFkZCBpdCB0byB0
aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50IG9uIHRoZSBmbGlja2FibGUgY29udGVudEl0
ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1zKS4KKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9u
KG1fY29udGVudC0+cG9zKCkgKyAoaXRlbVJlY3QudG9wTGVmdCgpICogaXRlbVNjYWxlKSk7CisK
KyAgICBtX2ZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRQb3MobmV3UG9zaXRpb24pOwogfQogCiBi
b29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6YW5pbWF0ZUl0ZW1SZWN0VmlzaWJsZShj
b25zdCBRUmVjdEYmIGl0ZW1SZWN0KQpAQCAtMjAzLDYgKzE4NywxNCBAQCBib29sIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6YW5pbWF0ZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYm
IGl0ZW1SZWN0KQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6c2Nyb2xsU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9mbGlja1Byb3Zp
ZGVyLT5pc01vdmluZygpICYmICFtX3Njcm9sbFVwZGF0ZURlZmVycmVyKQorICAgICAgICBtX3Nj
cm9sbFVwZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIo
dGhpcykpOworICAgIGVsc2UKKyAgICAgICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigp
OworfQorCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25T
dGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0
QW5pbWF0aW9uOjpTdGF0ZSAvKm9sZFN0YXRlKi8pCiB7CiAgICAgc3dpdGNoIChuZXdTdGF0ZSkg
ewpAQCAtMjE4LDYwICsyMTAsNiBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOgogICAgIH0KIH0K
IAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbFN0YXRlQ2hhbmdlZChR
U2Nyb2xsZXI6OlN0YXRlIG5ld1N0YXRlKQotewotICAgIHN3aXRjaCAobmV3U3RhdGUpIHsKLSAg
ICBjYXNlIFFTY3JvbGxlcjo6SW5hY3RpdmU6Ci0gICAgICAgIC8vIEZJWE1FOiBRU2Nyb2xsZXIg
Z2V0cyB3aGVuIGV2ZW4gd2hlbiB0YXBwaW5nIHdoaWxlIGl0IGlzIHNjcm9sbGluZy4KLSAgICAg
ICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFFTY3JvbGxlcjo6UHJlc3NlZDoKLSAgICBjYXNlIFFTY3JvbGxlcjo6RHJhZ2dpbmc6Ci0g
ICAgY2FzZSBRU2Nyb2xsZXI6OlNjcm9sbGluZzoKLSAgICAgICAgaWYgKG1fc2Nyb2xsVXBkYXRl
RGVmZXJyZXIpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zY3JvbGxVcGRhdGVEZWZl
cnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29s
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZXZlbnQoUUV2ZW50KiBldmVudCkKLXsKLSAg
ICBzd2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsKLSAgICBjYXNlIFFFdmVudDo6U2Nyb2xsUHJlcGFy
ZTogewotICAgICAgICBRU2Nyb2xsUHJlcGFyZUV2ZW50KiBwcmVwYXJlRXZlbnQgPSBzdGF0aWNf
Y2FzdDxRU2Nyb2xsUHJlcGFyZUV2ZW50Kj4oZXZlbnQpOwotICAgICAgICBjb25zdCBRUmVjdEYg
dmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydC0+Ym91bmRpbmdSZWN0KCk7Ci0gICAgICAgIGNvbnN0
IFFSZWN0RiBjb250ZW50UmVjdCA9IG1fdmlld3BvcnQtPm1hcFJlY3RGcm9tSXRlbShtX2NvbnRl
bnQsIG1fY29udGVudC0+Ym91bmRpbmdSZWN0KCkpOwotICAgICAgICBjb25zdCBRUmVjdEYgcG9z
UmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JJdGVtQXRTY2FsZShtX2NvbnRlbnQtPmNvbnRlbnRz
U2NhbGUoKSk7Ci0gICAgICAgIHByZXBhcmVFdmVudC0+c2V0Q29udGVudFBvc1JhbmdlKHBvc1Jh
bmdlKTsKLSAgICAgICAgcHJlcGFyZUV2ZW50LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRSZWN0
LnNpemUoKSk7Ci0KLSAgICAgICAgLy8gQXMgd2Ugd2FudCB0byBwdXNoIHRoZSBjb250ZW50cyBh
bmQgbm90IGFjdHVhbGx5IHNjcm9sbCBpdCwgd2UgbmVlZCB0byBpbnZlcnQgdGhlIHBvc2l0aW9u
cyBoZXJlLgotICAgICAgICBwcmVwYXJlRXZlbnQtPnNldENvbnRlbnRQb3MoLWNvbnRlbnRSZWN0
LnRvcExlZnQoKSk7Ci0gICAgICAgIHByZXBhcmVFdmVudC0+YWNjZXB0KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIFFFdmVudDo6U2Nyb2xsOiB7Ci0gICAgICAgIFFT
Y3JvbGxFdmVudCogc2Nyb2xsRXZlbnQgPSBzdGF0aWNfY2FzdDxRU2Nyb2xsRXZlbnQqPihldmVu
dCk7Ci0gICAgICAgIFFQb2ludEYgbmV3UG9zID0gLXNjcm9sbEV2ZW50LT5jb250ZW50UG9zKCkg
LSBzY3JvbGxFdmVudC0+b3ZlcnNob290RGlzdGFuY2UoKTsKLSAgICAgICAgaWYgKG1fY29udGVu
dC0+cG9zKCkgIT0gbmV3UG9zKSB7Ci0gICAgICAgICAgICBRUG9pbnRGIGN1cnJlbnRQb3NJbkNT
U0Nvb3JkaW5hdGVzID0gbV92aWV3cG9ydC0+bWFwVG9XZWJDb250ZW50KG1fY29udGVudC0+cG9z
KCkpOwotICAgICAgICAgICAgUVBvaW50RiBuZXdQb3NJbkNTU0Nvb3JkaW5hdGVzID0gbV92aWV3
cG9ydC0+bWFwVG9XZWJDb250ZW50KG5ld1Bvcyk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgbXVz
dCBiZSBlbWl0dGVkIGJlZm9yZSB2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZCBzbyB0aGF0IHRoZSB3
ZWIgcHJvY2VzcyBrbm93cyB3aGVyZSB0byBsb29rIGZvciB0aWxlcy4KLSAgICAgICAgICAgIGVt
aXQgdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjdXJyZW50UG9zSW5DU1NDb29yZGlu
YXRlcyAtIG5ld1Bvc0luQ1NTQ29vcmRpbmF0ZXMpOwotICAgICAgICAgICAgbV9jb250ZW50LT5z
ZXRQb3MobmV3UG9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBRT2JqZWN0Ojpl
dmVudChldmVudCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgUVBvaW50RiBib3VuZFBvc2l0aW9uKGNv
bnN0IFFQb2ludEYgbWluUG9zaXRpb24sIGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBjb25zdCBR
UG9pbnRGJiBtYXhQb3NpdGlvbikKIHsKICAgICByZXR1cm4gUVBvaW50RihxQm91bmQobWluUG9z
aXRpb24ueCgpLCBwb3NpdGlvbi54KCksIG1heFBvc2l0aW9uLngoKSksCkBAIC0zMDQsNyArMjQy
LDggQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OndoZWVsRXZlbnQoUVdoZWVs
RXZlbnQqIGV2KQogICAgICAgICBuZXdQb3MucnkoKSArPSBkZWx0YTsKIAogICAgIFFSZWN0RiBl
bmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvckl0ZW1BdFNjYWxlKG1fY29udGVudC0+Y29u
dGVudHNTY2FsZSgpKTsKLSAgICBtX2NvbnRlbnQtPnNldFBvcygtYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIG5ld1BvcywgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSkpOwor
CisgICAgbV9mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50UG9zKC1ib3VuZFBvc2l0aW9uKGVuZFBv
c1JhbmdlLnRvcExlZnQoKSwgbmV3UG9zLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKSk7CiAK
ICAgICBlbWl0IHZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlQ2hhbmdlZCgpOwogfQpAQCAtNDM0
LDggKzM3MywxMCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cmVzZXQoKQog
CiAgICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKIAotICAgIHNjcm9sbGVyKCktPnN0
b3AoKTsKKyAgICBtX2ZsaWNrUHJvdmlkZXItPmNhbmNlbEZsaWNrKCk7CiAgICAgbV9zY2FsZUFu
aW1hdGlvbi0+c3RvcCgpOworICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOworICAg
IG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgQ29uc3RyYWludHMmIGNvbnN0
cmFpbnRzKQpAQCAtNDUyLDcgKzM5Myw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IENvbnN0cmFpbnRzJiBjb25zdHJhaW50CiAgICAg
ICAgIG1fY29udGVudC0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGVGcm9tQ1NTKGluaXRpYWxT
Y2FsZSkpOwogICAgIH0KIAotICAgIC8vIElmIHRoZSB3ZWIgYXBwIGNoYW5nZXMgc3VjY2Vzc2l2
ZWx5IGNoYW5nZXMgdGhlIHZpZXdwb3J0IG9uIHB1cnBvc2UKKyAgICAvLyBJZiB0aGUgd2ViIGFw
cCBzdWNjZXNzaXZlbHkgY2hhbmdlcyB0aGUgdmlld3BvcnQgb24gcHVycG9zZQogICAgIC8vIGl0
IHdhbnRzIHRvIGJlIGluIGNvbnRyb2wgYW5kIHdlIHNob3VsZCBkaXNhYmxlIGFuaW1hdGlvbnMu
CiAgICAgZW5zdXJlQ29udGVudFdpdGhpblZpZXdwb3J0Qm91bmRhcnkoLyogaW1tZWRpYXRlICov
IHRydWUpOwogfQpAQCAtNDY0LDQ0ICs0MDUsNjMgQEAgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpjdXJyZW50Q1NTU2NhbGUoKQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICBRU2Nyb2xsZXIq
IHNjcm9sbGVyID0gY29uc3RfY2FzdDxRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqPih0aGlz
KS0+c2Nyb2xsZXIoKTsKLSAgICByZXR1cm4gc2Nyb2xsZXItPnN0YXRlKCkgPT0gUVNjcm9sbGVy
OjpTY3JvbGxpbmc7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppbnRl
cnJ1cHRTY3JvbGxBbmltYXRpb24oKQotewotICAgIC8vIFN0b3BwaW5nIHRoZSBzY3JvbGxlciBp
bW1lZGlhdGVseSBzdG9wcyBraW5ldGljIHNjcm9sbGluZyBhbmQgaWYgdGhlIHZpZXcgaXMgb3V0
IG9mIGJvdW5kcyBpdAotICAgIC8vIGlzIG1vdmVkIGluc2lkZSB2YWxpZCBib3VuZHMgaW1tZWRp
YXRlbHkgYXMgd2VsbC4gVGhpcyBpcyB0aGUgYmVoYXZpb3IgdGhhdCB3ZSB3YW50LgotICAgIHNj
cm9sbGVyKCktPnN0b3AoKTsKKyAgICByZXR1cm4gbV9mbGlja1Byb3ZpZGVyLT5pc0ZsaWNraW5n
KCk7CiB9CiAKIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQWN0
aXZlKCkgY29uc3QKIHsKLSAgICBRU2Nyb2xsZXIqIHNjcm9sbGVyID0gY29uc3RfY2FzdDxRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqPih0aGlzKS0+c2Nyb2xsZXIoKTsKLSAgICByZXR1cm4g
c2Nyb2xsZXItPnN0YXRlKCkgPT0gUVNjcm9sbGVyOjpQcmVzc2VkIHx8IHNjcm9sbGVyLT5zdGF0
ZSgpID09IFFTY3JvbGxlcjo6RHJhZ2dpbmc7CisgICAgcmV0dXJuIG1fZmxpY2tQcm92aWRlci0+
aXNEcmFnZ2luZygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFu
R2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKICAgICBtX2hh
ZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc2Nyb2xsZXIoKS0+aGFuZGxlSW5wdXQoUVNj
cm9sbGVyOjpJbnB1dFByZXNzLCAgdmlld3BvcnRUb3VjaFBvaW50LCBldmVudFRpbWVzdGFtcE1p
bGxpcyk7CisKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRl
KTsKKworICAgIC8vIFRoZSBwYW4gZ2VzdHVyZSByZWNvZ25pemVyIHNlbmRzIHRoZSBjdXJyZW50
IFRvdWNoVXBkYXRlIGV2ZW50IHdoZW4gaXQKKyAgICAvLyByZWNvZ25pemVkIGEgcGFuIGdlc3R1
cmUuCisgICAgLy8gQ29uc3RydWN0IGEgVG91Y2hCZWdpbiBldmVudCBvdXQgb2YgdGhlIHJlY2Vp
dmVkIGV2ZW50IGZvciB0aGUgZmxpY2thYmxlLgorICAgIFFUb3VjaEV2ZW50IHRvdWNoQmVnaW4o
UUV2ZW50OjpUb3VjaEJlZ2luLAorICAgICAgICAgICAgICAgIGV2ZW50LT5kZXZpY2UoKSwKKyAg
ICAgICAgICAgICAgICBldmVudC0+bW9kaWZpZXJzKCksCisgICAgICAgICAgICAgICAgZXZlbnQt
PnRvdWNoUG9pbnRTdGF0ZXMoKSwKKyAgICAgICAgICAgICAgICBldmVudC0+dG91Y2hQb2ludHMo
KSk7CisKKyAgICB0b3VjaEJlZ2luLnNldFRpbWVzdGFtcChldmVudC0+dGltZXN0YW1wKCkpOwor
ICAgIG1fZmxpY2tQcm92aWRlci0+aGFuZGxlVG91Y2hGbGlja0V2ZW50KCZ0b3VjaEJlZ2luKTsK
KyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IGV2ZW50LT50b3Vj
aFBvaW50cygpLmZpcnN0KCkucG9zKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRU
b3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit2b2lkIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVRvdWNoRXZl
bnQqIGV2ZW50KQogewotICAgIHNjcm9sbGVyKCktPmhhbmRsZUlucHV0KFFTY3JvbGxlcjo6SW5w
dXRNb3ZlLCAgdmlld3BvcnRUb3VjaFBvaW50LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAg
QVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaFVwZGF0ZSk7CisKKyAgICBRUG9p
bnRGIHZpZXdwb3J0UG9zaXRpb24gPSBldmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgpLnBvcygp
OworCisgICAgZW1pdCB2aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKG1fbGFzdFBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzIC0gdmlld3BvcnRQb3NpdGlvbik7CisKKyAgICBt
X2ZsaWNrUHJvdmlkZXItPmhhbmRsZVRvdWNoRmxpY2tFdmVudChjb25zdF9jYXN0PFFUb3VjaEV2
ZW50Kj4oZXZlbnQpKTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRl
cyA9IHZpZXdwb3J0UG9zaXRpb247CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKIHsKLSAgICAvLyBTdG9wcGluZyB0aGUgc2Nyb2xs
ZXIgaW1tZWRpYXRlbHkgc3RvcHMga2luZXRpYyBzY3JvbGxpbmcgYW5kIGlmIHRoZSB2aWV3IGlz
IG91dCBvZiBib3VuZHMgaXQKLSAgICAvLyBpcyBtb3ZlZCBpbnNpZGUgdmFsaWQgYm91bmRzIGlt
bWVkaWF0ZWx5IGFzIHdlbGwuIFRoaXMgaXMgdGhlIGJlaGF2aW9yIHRoYXQgd2Ugd2FudC4KLSAg
ICBzY3JvbGxlcigpLT5zdG9wKCk7CisgICAgLy8gUmVzZXQgdGhlIHZlbG9jaXR5IHNhbXBsZXMg
b2YgdGhlIGZsaWNrYWJsZS4KKyAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0
aGUgcmVjb2duaXplciBpZiB3ZSBoYXZlIGEgcmVjb2duaXplZAorICAgIC8vIHBhbiBnZXN0dXJl
IGFuZCByZWNlaXZlIGEgdG91Y2ggZXZlbnQgd2l0aCBtdWx0aXBsZSB0b3VjaCBwb2ludHMKKyAg
ICAvLyAoaWUuIHRyYW5zaXRpb24gdG8gYSBwaW5jaCBnZXN0dXJlKSBhcyBpdCBkb2VzIG5vdCBt
b3ZlIHRoZSBjb250ZW50CisgICAgLy8gYmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgorICAgIC8v
IFdoZW4gdGhlIHBpbmNoIGdlc3R1cmUgZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRpb25lZCBh
bmQgc2NhbGVkCisgICAgLy8gYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgorICAgIG1fZmxpY2tQ
cm92aWRlci0+Y2FuY2VsRmxpY2soKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50
LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKLSAg
ICBzY3JvbGxlcigpLT5oYW5kbGVJbnB1dChRU2Nyb2xsZXI6OklucHV0UmVsZWFzZSwgIHZpZXdw
b3J0VG91Y2hQb2ludCwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIEFTU0VSVChldmVudC0+
dHlwZSgpID09IFFFdmVudDo6VG91Y2hFbmQpOworICAgIG1fZmxpY2tQcm92aWRlci0+aGFuZGxl
VG91Y2hGbGlja0V2ZW50KGNvbnN0X2Nhc3Q8UVRvdWNoRXZlbnQqPihldmVudCkpOworICAgIG1f
bGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gZXZlbnQtPnRvdWNoUG9pbnRz
KCkuZmlyc3QoKS5wb3MoKTsKIH0KIAogYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKQEAgLTU1Nyw3ICs1MTcsNyBAQCB2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRUG9pbnRGJiBwaW5jaAogICAgIGNvbnN0IFFQb2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgLSBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlczsKICAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9
IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwogCi0gICAgbV9jb250ZW50LT5zZXRQ
b3MobV9jb250ZW50LT5wb3MoKSArIHBvc2l0aW9uRGlmZik7CisgICAgbV9mbGlja1Byb3ZpZGVy
LT5zZXRDb250ZW50UG9zKG1fZmxpY2tQcm92aWRlci0+Y29udGVudFBvcygpIC0gcG9zaXRpb25E
aWZmKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVy
ZUVuZGVkKCkKQEAgLTU4OCw3ICs1NDgsOCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbgogICAg
IFFQb2ludEYgb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydC0+bWFwRnJvbVdl
YkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRlcyk7CiAgICAgbV9jb250ZW50LT5zZXRDb250
ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MoY3NzU2NhbGUpKTsKICAgICBRUG9pbnRGIG5ld1Bp
bmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNlbnRl
ckluQ1NTQ29vcmRpbmF0ZXMpOwotICAgIG1fY29udGVudC0+c2V0UG9zKG1fY29udGVudC0+cG9z
KCkgLSAobmV3UGluY2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0
KSk7CisKKyAgICBtX2ZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRQb3MobV9mbGlja1Byb3ZpZGVy
LT5jb250ZW50UG9zKCkgKyAobmV3UGluY2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50
ZXJPblZpZXdwb3J0KSk7CiB9CiAKICNpbmNsdWRlICJtb2NfUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaAppbmRleCBhNGI2OTkwLi5mMzY4YjQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZS5oCkBAIC0yMyw4ICsyMyw4IEBACiAjZGVmaW5lIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZV9oCiAKICNpbmNsdWRlICJPd25QdHIuaCIKLSNpbmNsdWRlIDxRU2Nyb2xs
ZXI+CiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0R3VpL1FUb3VjaEV2
ZW50PgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgogI2luY2x1ZGUgPFF0Q29yZS9RUmVjdEY+
CiAjaW5jbHVkZSA8UXRDb3JlL1FWYXJpYW50PgpAQCAtMzMsNiArMzMsNyBAQAogUVRfQkVHSU5f
TkFNRVNQQUNFCiBjbGFzcyBRUG9pbnRGOwogY2xhc3MgUVF1aWNrSXRlbTsKK2NsYXNzIFF0Rmxp
Y2tQcm92aWRlcjsKIGNsYXNzIFFRdWlja1dlYlBhZ2U7CiBjbGFzcyBRUXVpY2tXZWJWaWV3Owog
Y2xhc3MgUVdoZWVsRXZlbnQ7CkBAIC00Niw3ICs0Nyw3IEBAIGNsYXNzIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZSA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6
Ci0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGNvbnN0IFFRdWlja1dlYlZpZXcqLCBR
UXVpY2tXZWJQYWdlKik7CisgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFFRdWlja1dl
YlZpZXcqLCBRUXVpY2tXZWJQYWdlKiwgUXRGbGlja1Byb3ZpZGVyKik7CiAgICAgflF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSgpOwogCiAgICAgc3RydWN0IENvbnN0cmFpbnRzIHsKQEAgLTY3
LDggKzY4LDYgQEAgcHVibGljOgogICAgICAgICBRU2l6ZSBsYXlvdXRTaXplOwogICAgIH07CiAK
LSAgICBib29sIGV2ZW50KFFFdmVudCopOwotCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQg
YXBwbHlDb25zdHJhaW50cyhjb25zdCBDb25zdHJhaW50cyYpOwogCkBAIC03OSwxMyArNzgsMTIg
QEAgcHVibGljOgogICAgIHZvaWQgcGFnZVBvc2l0aW9uUmVxdWVzdChjb25zdCBRUG9pbnQmIHBv
cyk7CiAKICAgICBib29sIHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQg
aW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCk7CiAKICAgICBib29sIHBhbkdlc3R1cmVBY3RpdmUo
KSBjb25zdDsKLSAgICB2b2lkIHBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmICB2aWV3
cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBw
YW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50
LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0
ZWQoY29uc3QgUVRvdWNoRXZlbnQqKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRl
KGNvbnN0IFFUb3VjaEV2ZW50Kik7CiAgICAgdm9pZCBwYW5HZXN0dXJlQ2FuY2VsbGVkKCk7Ci0g
ICAgdm9pZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2lu
dCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVFbmRl
ZChjb25zdCBRVG91Y2hFdmVudCopOwogCiAgICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgp
IGNvbnN0OwogICAgIHZvaWQgaW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKQEAgLTExMiw3ICsx
MTAsNyBAQCBwcml2YXRlIFFfU0xPVFM6CiAgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIG9mIGNv
bnRlbnQgdGhhdCBhcmUgbm90IGRyaXZlbiBieSB1cywgbGlrZSB0aGUgcGFnZSByZXNpemluZyBp
dHNlbGYuCiAgICAgdm9pZCBpdGVtU2l6ZUNoYW5nZWQoKTsKIAotICAgIHZvaWQgc2Nyb2xsU3Rh
dGVDaGFuZ2VkKFFTY3JvbGxlcjo6U3RhdGUpOworICAgIHZvaWQgc2Nyb2xsU3RhdGVDaGFuZ2Vk
KCk7CiAgICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRp
b246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKTsKICAgICB2b2lkIHNjYWxlQW5p
bWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVlKSB7IHNldEl0ZW1SZWN0VmlzaWJsZSh2
YWx1ZS50b1JlY3RGKCkpOyB9CiAKQEAgLTEzMiwxMyArMTMwLDExIEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVz
LCBxcmVhbCBjc3NTY2FsZSk7CiAKLSAgICAvLyBBcyBsb25nIGFzIHRoZSBvYmplY3QgZXhpc3Rz
IHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIFFTY3JvbGxlciBpbnN0
YW5jZS4KLSAgICBRU2Nyb2xsZXIqIHNjcm9sbGVyKCkgeyByZXR1cm4gUVNjcm9sbGVyOjpzY3Jv
bGxlcih0aGlzKTsgfQotCi0KLSAgICBjb25zdCBRUXVpY2tXZWJWaWV3KiBjb25zdCBtX3ZpZXdw
b3J0OworICAgIFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnQ7CiAgICAgUVF1aWNrV2Vi
UGFnZSogY29uc3QgbV9jb250ZW50OwogCisgICAgUXRGbGlja1Byb3ZpZGVyKiBjb25zdCBtX2Zs
aWNrUHJvdmlkZXI7CisKICAgICBDb25zdHJhaW50cyBtX2NvbnN0cmFpbnRzOwogCiAgICAgaW50
IG1fc3VzcGVuZENvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhMDc5Njc4Li5mZWJhODJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVy
LmNwcApAQCAtNTA3LDggKzUwNyw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25l
V2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQsCiAgICAgICAg
IC8vIFRoZSBpbnRlcmFjdGlvbiBlbmdpbmUgbWlnaHQgc3RpbGwgYmUgYW5pbWF0aW5nIGtpbmV0
aWMgc2Nyb2xsaW5nIG9yIGEgc2NhbGUgYW5pbWF0aW9uCiAgICAgICAgIC8vIHN1Y2ggYXMgZG91
YmxlLXRhcCB0byB6b29tIG9yIHRoZSBib3VuY2UgYmFjayBlZmZlY3QuIEEgdG91Y2ggc3RvcHMg
dGhlIGtpbmV0aWMgc2Nyb2xsaW5nCiAgICAgICAgIC8vIHdoZXJlIGFzIGl0IGRvZXMgbm90IHN0
b3AgdGhlIHNjYWxlIGFuaW1hdGlvbi4KLSAgICAgICAgaWYgKG1faW50ZXJhY3Rpb25FbmdpbmUt
PnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICAgICAgbV9pbnRlcmFjdGlvbkVuZ2lu
ZS0+aW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCk7CisgICAgICAgIC8vIFNlbmRpbmcgdGhlIGV2
ZW50IHRvIHRoZSBmbGlja1Byb3ZpZGVyIHdpbGwgc3RvcCB0aGUga2luZXRpYyBzY3JvbGxpbmcg
YW5pbWF0aW9uLgogICAgICAgICBicmVhazsKICAgICBjYXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6
CiAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmltYXRpb24gY2FuIG9ubHkgYmUgaW50ZXJydXB0ZWQg
YnkgYSBwaW5jaCBnZXN0dXJlLCB3aGljaCB3aWxsIHRoZW4gdGFrZSBvdmVyLgpAQCAtNTI0LDE1
ICs1MjMsMTQgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVu
dChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwKICAgICBpZiAobV9pbnRlcmFjdGlv
bkVuZ2luZS0+c2NhbGVBbmltYXRpb25BY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gQ29udmVydCB0aGUgZXZlbnQgdGltZXN0YW1wIGZyb20gc2Vjb25kIHRvIG1pbGxpc2Vjb25k
LgotICAgIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyA9IHN0YXRpY19jYXN0PHFpbnQ2ND4o
ZXZlbnQudGltZXN0YW1wKCkgKiAxMDAwKTsKLSAgICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnJl
Y29nbml6ZShldiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIG1fcGFuR2VzdHVyZVJlY29n
bml6ZXIucmVjb2duaXplKGV2KTsKICAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIucmVjb2du
aXplKGV2KTsKIAogICAgIGlmIChtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgp
IHx8IG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6ZWQoKSkKICAgICAgICAgbV90
YXBHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwogICAgIGVsc2UgewotICAgICAgICBjb25zdCBR
VG91Y2hFdmVudCogZXYgPSBldmVudC5uYXRpdmVFdmVudCgpOworICAgICAgICAvLyBDb252ZXJ0
IHRoZSBldmVudCB0aW1lc3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCisgICAgICAg
IHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyA9IHN0YXRpY19jYXN0PHFpbnQ2ND4oZXZlbnQu
dGltZXN0YW1wKCkgKiAxMDAwKTsKICAgICAgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5yZWNv
Z25pemUoZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKICAgICB9CiB9Ci0tIAoxLjcuOQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125865</attachid>
            <date>2012-02-07 09:51:06 -0800</date>
            <delta_ts>2012-02-09 06:41:33 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0002-Qt-WK2-WebView-should-use-Flickable-instead-of-QScro.patch</filename>
            <type>text/plain</type>
            <size>51785</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAyNzMwNmU2NDBmYjgzYTljNTk2ZGNhMDU5MzVjODdkYjU2ODVhMzZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFR1ZSwgNyBGZWIgMjAxMiAxNzozODoxNyArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIFtR
dF0gW1dLMl0gV2ViVmlldyBzaG91bGQgdXNlIEZsaWNrYWJsZSBpbnN0ZWFkIG9mIFFTY3JvbGxl
cgogdG8gaGFuZGxlIHBvc2l0aW9uaW5nCgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNyArKysrKysrKysrCiBTb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCAgfCAgICA2ICstCiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwICB8ICAxMzQgKysr
KysrKysrKysrLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3AuaCAgfCAgIDI4ICsrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3BfcC5oICAgfCAgIDEwICsKIC4uLi9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVp
Y2t3ZWJ2aWV3LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
RmxpY2tQcm92aWRlci5jcHAgICAgfCAgMjI0ICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmggICAgICB8ICAgOTggKysrKysr
KysrCiAuLi4vVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8
ICAgIDggKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVy
LmggIHwgICAgMiArLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUuY3BwICAgfCAgMTc1ICsrKysrKy0tLS0tLS0tLS0KIC4uLi9VSVByb2Nlc3MvcXQvUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lLmggICAgIHwgICAyNCArLS0KIC4uLi9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIHwgICAxMCArLQogMTQgZmlsZXMgY2hh
bmdlZCwgNjk1IGluc2VydGlvbnMoKyksIDEzNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlk
ZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA2YTNlNzE4Li4xMzllNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTEwIEBACisyMDEyLTAyLTA3ICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEu
Y29tPgorCisgICAgICAgIFtRdF1bV0syXSBXZWJWaWV3IHNob3VsZCB1c2UgRmxpY2thYmxlIGlu
c3RlYWQgb2YgUVNjcm9sbGVyIHRvIGhhbmRsZSBwb3NpdGlvbmluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyNzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3VycmVudCBXZWJWaWV3IGltcGxl
bWVudGF0aW9uIHVzZXMgUVNjcm9sbGVyIHRvIG1hbmFnZSBwb3NpdGlvbmluZyBidXQgb3RoZXIg
c2ltaWxhcgorICAgICAgICBpdGVtcyBpbiBRTUwgKGllLiBMaXN0VmlldywgR3JpZFZpZXcpIHVz
ZSBGbGlja2FibGUgYXMgdGhlaXIgYmFzZSBjbGFzcy4KKyAgICAgICAgU2luY2UgUVNjcm9sbGVy
IHdpbGwgYmUgZHJvcHBlZCBmcm9tIFF0NSB0aGlzIHBhdGNoIHJlbW92ZXMgdGhlIFFTY3JvbGxl
ciBjb2RlCisgICAgICAgIGFuZCByZWRpcmVjdHMgcGFuIGdlc3R1cmVzIHRvIGEgZHluYW1pY2Fs
bHkgY3JlYXRlZCBpbnRlcm5hbCBGbGlja2FibGUgaW5zdGFuY2UgKGZsaWNrUHJvdmlkZXIpCisg
ICAgICAgIHdoaWNoIGhhbmRsZXMgdGhlIHBvc2l0aW9uaW5nLgorCisgICAgICAgIFRoaXMgaW1w
bGVtZW50YXRpb24gb25seSB1c2VzIHB1YmxpYyBRTUwgQVBJIGFuZCBkb2VzIG5vdCBkZXBlbmQg
b24gZGVjbGFyYXRpdmUtcHJpdmF0ZS4KKyAgICAgICAgSXQgcHJvcGFnYXRlcyBhIHNtYWxsIHN1
YnNldCBvZiB0aGUgRmxpY2thYmxlIEFQSSBhcyB0aGUgcHVibGljIEFQSSBvZiB0aGUgV2ViVmll
dy4KKyAgICAgICAgVGhpcyBtaW5pbWFsaXN0aWMgQVBJIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBl
eHBlcmltZW50YWwgZXh0ZW5zaW9uIGFuZCBtYWtlcyBpdCBwb3NzaWJsZQorICAgICAgICBpbiBR
TUwgdG8gcGxhY2UgYWRkaXRpb25hbCBpdGVtcyAoc3VjaCBhcyB0b29sYmFycywgc2Nyb2xsIGlu
ZGljYXRvcnMgYW5kIGZsb2F0aW5nIG1lbnVzKQorICAgICAgICBhcm91ZCB0aGUgcGFnZS4KKyAg
ICAgICAgVGhlc2UgaXRlbXMgY2FuIHVzZSBhbmNob3JpbmcgYW5kIGJpbmRpbmcgZm9yIHBvc2l0
aW9uaW5nIG9uIHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0uCisKKyAgICAgICAgVGhlIHBhdGNo
IGRlcGVuZHMgaG93ZXZlciBvbiB0aGUgYXV0b21hdGljIHRvdWNoLT5tb3VzZSBldmVudCBzeW50
aGV0aXphdGlvbiBvZiBRdDUuCisgICAgICAgIFRoZSB0b3VjaCBldmVudHMgc2VudCB0byB0aGUg
ZmxpY2tQcm92aWRlciBhcmUgdHJhbnNsYXRlZCB0byBtb3VzZSBldmVudHMgYXV0b21hdGljYWxs
eQorICAgICAgICBhcyBsb25nIGFzIHRoZSBGbGlja2FibGUgZG9lcyBub3QgaGFuZGxlIHRvdWNo
IGV2ZW50cyBkaXJlY3RseS4KKworICAgICAgICBBZnRlciB0aGlzIGNoYW5nZSBRdFdlYktpdDIg
ZG9lcyBubyBsb25nZXIgZGVwZW5kIG9uIFF0V2lkZ2V0cyBhbmQgdGhpcyBkZXBlbmRlbmN5IGNh
biBiZQorICAgICAgICByZW1vdmVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgICog
VGFyZ2V0LnByaTogQWRkZWQgUXRGbGlja1Byb3ZpZGVyIHNvdXJjZS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6
OnRyYW5zZm9ybVRvSXRlbSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRl
U2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cGFnZUl0ZW1Qb3MpOgorICAgICAgICAoUVF1aWNr
V2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VJdGVtUG9zKToKKyAgICAgICAgKFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVDb250ZW50c1NpemUpOgorICAgICAgICAoUVF1
aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUpOgorICAgICAg
ICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmbGlja2FibGVEYXRhKToKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRJdGVtKToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRXaWR0aCk6CisgICAgICAgIChRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50V2lkdGgpOgorICAgICAgICAoUVF1aWNrV2Vi
Vmlld0V4cGVyaW1lbnRhbDo6Y29udGVudEhlaWdodCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
RXhwZXJpbWVudGFsOjpzZXRDb250ZW50SGVpZ2h0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWw6OmNvbnRlbnRYKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OnNldENvbnRlbnRYKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNv
bnRlbnRZKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRZ
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnBhZ2VJdGVtUG9zKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OnVwZGF0ZUNvbnRlbnRzU2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXdfcF9wLmg6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlQ29udGVudHNTaXplKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXdGbGlja2FibGVQcml2YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAodHN0X1FR
dWlja1dlYlZpZXc6OnNjcm9sbFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdEZs
aWNrUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6UXRGbGlj
a1Byb3ZpZGVyKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6aGFuZGxlVG91Y2hGbGlja0V2
ZW50KToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6Y29udGVudEl0ZW0pOgorICAgICAgICAo
UXRGbGlja1Byb3ZpZGVyOjpmbGlja2FibGVEYXRhKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRl
cjo6Y29udGVudFBvcyk6CisgICAgICAgIChRdEZsaWNrUHJvdmlkZXI6OnNldENvbnRlbnRQb3Mp
OgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVyOjp2aWV3cG9ydFNpemUpOgorICAgICAgICAoUXRG
bGlja1Byb3ZpZGVyOjpzZXRWaWV3cG9ydFNpemUpOgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVy
OjpyZXR1cm5Ub0JvdW5kcyk6CisgICAgICAgIChRdEZsaWNrUHJvdmlkZXI6OmNhbmNlbEZsaWNr
KToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6aXNNb3ZpbmcpOgorICAgICAgICAoUXRGbGlj
a1Byb3ZpZGVyOjppc0RyYWdnaW5nKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6aXNGbGlj
a2luZyk6CisgICAgICAgIChRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRXaWR0aCk6CisgICAgICAg
IChRdEZsaWNrUHJvdmlkZXI6OnNldENvbnRlbnRXaWR0aCk6CisgICAgICAgIChRdEZsaWNrUHJv
dmlkZXI6OmNvbnRlbnRIZWlnaHQpOgorICAgICAgICAoUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250
ZW50SGVpZ2h0KToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6Y29udGVudFgpOgorICAgICAg
ICAoUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50WCk6CisgICAgICAgIChRdEZsaWNrUHJvdmlk
ZXI6OmNvbnRlbnRZKToKKyAgICAgICAgKFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudFkpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuaDogQWRkZWQuCisgICAgICAg
IChRdEZsaWNrUHJvdmlkZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVS
ZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6
cmVjb2duaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXpl
ci5oOgorICAgICAgICAoUXRQYW5HZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRJdGVt
UmVjdFZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU6OnNjcm9sbFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OndoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnJlc2V0KToKKyAgICAgICAgKFdl
YktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphcHBseUNvbnN0cmFpbnRzKToKKyAg
ICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxBbmltYXRp
b25BY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCk6
CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVy
ZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpw
aW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpzY2FsZUNvbnRlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaDoKKyAgICAgICAgKFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVu
dCk6CisKIDIwMTItMDItMDcgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBu
b2tpYS5jb20+CiAKICAgICAgICAgRW5jb2RlIHJhZGl1cywgZm9yY2UgYW5kIHJvdGF0aW9uQW5n
bGUgaW4gV2ViUGxhdGZvcm1Ub3VjaFBvaW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggNDMyNmE0YS4uY2Vk
ZTRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yNjYsNiArMjY2LDcgQEAgSEVBREVSUyArPSBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVBvbGljeUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGll
bnQuaCBcCisgICAgVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5oIFwKICAgICBVSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggXAogICAgIFVJUHJvY2Vzcy9xdC9R
dFdlYlVuZG9Db250cm9sbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFz
ZUNsaWVudC5oIFwKQEAgLTU5NCw2ICs1OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nl
c3MvcXQvUXRXZWJQYWdlUG9saWN5Q2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVVJQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwIFwK
KyAgICBVSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJD
b250ZXh0TWVudVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcAppbmRleCAyMmM2NzAzLi44M2JkMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBR
UXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKQogICAgIHRyYW5z
Zm9ybS5zY2FsZShjb250ZW50c1NjYWxlLCBjb250ZW50c1NjYWxlKTsKIAogICAgIGZsb2F0IG9w
YWNpdHkgPSBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKLSAgICBRUmVjdEYgY2xpcFJlY3Qg
PSBxLT5wYXJlbnRJdGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91bmRp
bmdSZWN0KCkpOworICAgIFFSZWN0RiBjbGlwUmVjdCA9IHZpZXdwb3J0SXRlbS0+bWFwUmVjdFRv
U2NlbmUodmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7CiAKICAgICBpZiAoIWNsaXBSZWN0
LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQyLDEzICsyNDIsMTUgQEAgUVRyYW5z
Zm9ybSBRUXVpY2tXZWJQYWdlOjp0cmFuc2Zvcm1Gcm9tSXRlbSgpIGNvbnN0CiAKIFFUcmFuc2Zv
cm0gUVF1aWNrV2ViUGFnZTo6dHJhbnNmb3JtVG9JdGVtKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
UVRyYW5zZm9ybShkLT5jb250ZW50c1NjYWxlLCAwLCAwLCAwLCBkLT5jb250ZW50c1NjYWxlLCAw
LCB4KCksIHkoKSwgMSk7CisgICAgUVBvaW50RiBwb3MgPSBkLT52aWV3cG9ydEl0ZW0tPnBhZ2VJ
dGVtUG9zKCk7CisgICAgcmV0dXJuIFFUcmFuc2Zvcm0oZC0+Y29udGVudHNTY2FsZSwgMCwgMCwg
MCwgZC0+Y29udGVudHNTY2FsZSwgMCwgcG9zLngoKSwgcG9zLnkoKSwgMSk7CiB9CiAKIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogewogICAgIFFTaXplRiBzY2FsZWRT
aXplID0gY29udGVudHNTaXplICogY29udGVudHNTY2FsZTsKICAgICBxLT5zZXRTaXplKHNjYWxl
ZFNpemUpOworICAgIHZpZXdwb3J0SXRlbS0+dXBkYXRlQ29udGVudHNTaXplKHNjYWxlZFNpemUp
OwogfQogCiB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpyZXNldFBhaW50Tm9kZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRl
eCA3ZWE2ZDM0Li42OWI4ZDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0ludFBvaW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNjYsMTIgKzY3LDE1IEBAIHN0YXRpYyBRUXVpY2tXZWJWaWV3UHJpdmF0ZSogY3Jl
YXRlUHJpdmF0ZU9iamVjdChRUXVpY2tXZWJWaWV3KiBwdWJsaWNPYmplY3QpCiAKIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9y
dCkKICAgICA6IHFfcHRyKHZpZXdwb3J0KQorICAgICwgZmxpY2tQcm92aWRlcigwKQogICAgICwg
YWxlcnREaWFsb2coMCkKICAgICAsIGNvbmZpcm1EaWFsb2coMCkKICAgICAsIHByb21wdERpYWxv
ZygwKQogICAgICwgYXV0aGVudGljYXRpb25EaWFsb2coMCkKICAgICAsIGNlcnRpZmljYXRlVmVy
aWZpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBpdGVtU2VsZWN0b3IoMCkKKyAgICAsIHVzZXJEaWRP
dmVycmlkZUNvbnRlbnRXaWR0aChmYWxzZSkKKyAgICAsIHVzZXJEaWRPdmVycmlkZUNvbnRlbnRI
ZWlnaHQoZmFsc2UpCiAgICAgLCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZChmYWxzZSkKICAg
ICAsIG1fcmVuZGVyVG9PZmZzY3JlZW5CdWZmZXIoZmFsc2UpCiB7CkBAIC0xMzEsNiArMTM1LDEy
IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpc2FibGVNb3VzZUV2ZW50cygpCiAgICAg
cS0+c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFsc2UpOwogfQogCitRUG9pbnRGIFFRdWlja1dlYlZp
ZXdQcml2YXRlOjpwYWdlSXRlbVBvcygpCit7CisgICAgQVNTRVJUKHBhZ2VWaWV3KTsKKyAgICBy
ZXR1cm4gcGFnZVZpZXctPnBvcygpOworfQorCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjps
b2FkRGlkU3VjY2VlZCgpCiB7CiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwpAQCAtNDY4LDEwICs0
NzgsNDYgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6aW5pdGlhbGl6ZShX
S0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3IKICAgICB3ZWJQYWdlUHJveHktPnNldFVz
ZUZpeGVkTGF5b3V0KHRydWUpOwogfQogCitRUG9pbnRGIFFRdWlja1dlYlZpZXdGbGlja2FibGVQ
cml2YXRlOjpwYWdlSXRlbVBvcygpCit7CisgICAgLy8gRmxpY2thYmxlIG1vdmVzIGl0cyBjb250
ZW50SXRlbSBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdCBwb3NpdGlvbiBpbnRvIGFjY291bnQsCisg
ICAgLy8gYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGRpc3BsYWNlbWVudCBvZiB0aGUgcGFnZSBv
biB0aGUgY29udGVudEl0ZW0gYmVjYXVzZQorICAgIC8vIG9mIGFkZGl0aW9uYWwgUU1MIGl0ZW1z
LgorICAgIHFyZWFsIHhQb3MgPSBmbGlja1Byb3ZpZGVyLT5jb250ZW50SXRlbSgpLT54KCkgKyBw
YWdlVmlldy0+eCgpOworICAgIHFyZWFsIHlQb3MgPSBmbGlja1Byb3ZpZGVyLT5jb250ZW50SXRl
bSgpLT55KCkgKyBwYWdlVmlldy0+eSgpOworICAgIHJldHVybiBRUG9pbnRGKHhQb3MsIHlQb3Mp
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVDb250ZW50
c1NpemUoY29uc3QgUVNpemVGJiBzaXplKQoreworICAgIEFTU0VSVChmbGlja1Byb3ZpZGVyKTsK
KworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb250ZW50SXRlbSBpcyBzaXplZCB0byB0aGUg
cGFnZQorICAgIC8vIGlmIHRoZSB1c2VyIGRpZCBub3QgYWRkIG90aGVyIGZsaWNrYWJsZSBpdGVt
cyBpbiBRTUwuCisgICAgLy8gSWYgdGhlIHVzZXIgYWRkcyBpdGVtcyBpbiBRTUwgaGUgaGFzIHRv
IG1ha2Ugc3VyZSB0bworICAgIC8vIGFsc28gYmluZCB0aGUgY29udGVudFdpZHRoIGFuZCBjb250
ZW50SGVpZ2h0IGFjY29yZGluZ2x5LgorICAgIC8vIFRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRo
IG5vcm1hbCBRTUwgRmxpY2thYmxlIGJlaGF2aW91ci4KKyAgICBpZiAoIXVzZXJEaWRPdmVycmlk
ZUNvbnRlbnRXaWR0aCkKKyAgICAgICAgZmxpY2tQcm92aWRlci0+c2V0Q29udGVudFdpZHRoKHNp
emUud2lkdGgoKSk7CisgICAgaWYgKCF1c2VyRGlkT3ZlcnJpZGVDb250ZW50SGVpZ2h0KQorICAg
ICAgICBmbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworfQor
CiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRl
KCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0gICAgaW50ZXJhY3Rpb25FbmdpbmUucmVz
ZXQobmV3IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShxLCBwYWdlVmlldy5kYXRhKCkpKTsK
KworICAgIEFTU0VSVCghZmxpY2tQcm92aWRlcik7CisgICAgZmxpY2tQcm92aWRlciA9IG5ldyBR
dEZsaWNrUHJvdmlkZXIocSwgcGFnZVZpZXcuZGF0YSgpKTsKKworICAgIC8vIFByb3BhZ2F0ZSBm
bGlja2FibGUgc2lnbmFscy4KKyAgICBjb25zdCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKiBl
eHBlcmltZW50YWwgPSBxLT5leHBlcmltZW50YWwoKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KGZs
aWNrUHJvdmlkZXIsIFNJR05BTChjb250ZW50V2lkdGhDaGFuZ2VkKCkpLCBleHBlcmltZW50YWws
IFNJR05BTChjb250ZW50V2lkdGhDaGFuZ2VkKCkpKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KGZs
aWNrUHJvdmlkZXIsIFNJR05BTChjb250ZW50SGVpZ2h0Q2hhbmdlZCgpKSwgZXhwZXJpbWVudGFs
LCBTSUdOQUwoY29udGVudEhlaWdodENoYW5nZWQoKSkpOworICAgIFFPYmplY3Q6OmNvbm5lY3Qo
ZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgZXhwZXJpbWVudGFsLCBT
SUdOQUwoY29udGVudFhDaGFuZ2VkKCkpKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJv
dmlkZXIsIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIGV4cGVyaW1lbnRhbCwgU0lHTkFMKGNv
bnRlbnRZQ2hhbmdlZCgpKSk7CisKKyAgICBpbnRlcmFjdGlvbkVuZ2luZS5yZXNldChuZXcgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHEsIHBhZ2VWaWV3LmRhdGEoKSwgZmxpY2tQcm92aWRl
cikpOwogICAgIHBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+c2V0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZShpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCkpOwogCiAgICAgUU9iamVjdDo6Y29ubmVj
dChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTChjb250ZW50U3VzcGVuZFJlcXVlc3Rl
ZCgpKSwgcSwgU0xPVChfcV9zdXNwZW5kKCkpKTsKQEAgLTUzMyw2ICs1NzksOCBAQCB2b2lkIFFR
dWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogICAgIGlm
ICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpIHx8ICFpbnRlcmFjdGlvbkVuZ2luZSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgZmxpY2tQcm92aWRlci0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6
ZSk7CisKICAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdw
b3J0IHNpemUsIHNvIHRoYXQKICAgICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29y
ZGluZ2x5LgogICAgIHdlYlBhZ2VQcm94eS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7
CkBAIC05MTAsNiArOTU4LDc4IEBAIFFRdWlja1dlYlBhZ2UqIFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWw6OnBhZ2UoKQogICAgIHJldHVybiBxX3B0ci0+cGFnZSgpOwogfQogCitRRGVjbGFyYXRp
dmVMaXN0UHJvcGVydHk8UU9iamVjdD4gUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6ZmxpY2th
YmxlRGF0YSgpCit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVChk
LT5mbGlja1Byb3ZpZGVyKTsKKyAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+ZmxpY2thYmxl
RGF0YSgpOworfQorCitRUXVpY2tJdGVtKiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250
ZW50SXRlbSgpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVChkLT5mbGlj
a1Byb3ZpZGVyKTsKKyAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+Y29udGVudEl0ZW0oKTsK
K30KKworcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFdpZHRoKCkgY29u
c3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNr
UHJvdmlkZXIpOworICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5jb250ZW50V2lkdGgoKTsK
K30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50V2lkdGgocXJl
YWwgd2lkdGgpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVChkLT5mbGlj
a1Byb3ZpZGVyKTsKKyAgICBkLT51c2VyRGlkT3ZlcnJpZGVDb250ZW50V2lkdGggPSB0cnVlOwor
ICAgIGQtPmZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRXaWR0aCh3aWR0aCk7Cit9CisKK3FyZWFs
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRIZWlnaHQoKSBjb25zdAoreworICAg
IFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7
CisgICAgcmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPmNvbnRlbnRIZWlnaHQoKTsKK30KKwordm9p
ZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZW50SGVpZ2h0KHFyZWFsIGhlaWdo
dCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlk
ZXIpOworICAgIGQtPnVzZXJEaWRPdmVycmlkZUNvbnRlbnRIZWlnaHQgPSB0cnVlOworICAgIGQt
PmZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRIZWlnaHQoaGVpZ2h0KTsKK30KKworcXJlYWwgUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudFgoKSBjb25zdAoreworICAgIFFfRChjb25z
dCBRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7CisgICAgcmV0
dXJuIGQtPmZsaWNrUHJvdmlkZXItPmNvbnRlbnRYKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudFgocXJlYWwgeCkKK3sKKyAgICBRX0QoUVF1aWNrV2Vi
Vmlldyk7CisgICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOworICAgIGQtPmZsaWNrUHJvdmlk
ZXItPnNldENvbnRlbnRYKHgpOworfQorCitxcmVhbCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
Ojpjb250ZW50WSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAg
IEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsKKyAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+
Y29udGVudFkoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250
ZW50WShxcmVhbCB5KQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBBU1NFUlQoZC0+
ZmxpY2tQcm92aWRlcik7CisgICAgZC0+ZmxpY2tQcm92aWRlci0+c2V0Q29udGVudFkoeSk7Cit9
CisKIFFRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50KQogICAg
IDogUVF1aWNrSXRlbShwYXJlbnQpCiAgICAgLCBkX3B0cihjcmVhdGVQcml2YXRlT2JqZWN0KHRo
aXMpKQpAQCAtMTI1Niw0ICsxMzc2LDE2IEBAIHZvaWQgUVF1aWNrV2ViVmlldzo6bG9hZEh0bWwo
Y29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYgYmFzZVVybCkKICAgICBkLT53ZWJQYWdl
UHJveHktPmxvYWRIVE1MU3RyaW5nKGh0bWwsIGJhc2VVcmwudG9TdHJpbmcoKSk7CiB9CiAKK1FQ
b2ludEYgUVF1aWNrV2ViVmlldzo6cGFnZUl0ZW1Qb3MoKQoreworICAgIFFfRChRUXVpY2tXZWJW
aWV3KTsKKyAgICByZXR1cm4gZC0+cGFnZUl0ZW1Qb3MoKTsKK30KKwordm9pZCBRUXVpY2tXZWJW
aWV3Ojp1cGRhdGVDb250ZW50c1NpemUoY29uc3QgUVNpemVGJiBzaXplKQoreworICAgIFFfRChR
UXVpY2tXZWJWaWV3KTsKKyAgICBkLT51cGRhdGVDb250ZW50c1NpemUoc2l6ZSk7Cit9CisKICNp
bmNsdWRlICJtb2NfcXF1aWNrd2Vidmlld19wLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDY5ZjFjZDguLjEzMjY4Y2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3AuaApAQCAtMTE2LDYgKzExNiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemUoKTsgLy8gT25seSBuZWVkZWQgYnkgV1RSLgogCisgICAgLy8gSW50ZXJu
YWwgQVBJIHVzZWQgYnkgV2ViUGFnZS4KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZShjb25z
dCBRU2l6ZUYmKTsKKyAgICBRUG9pbnRGIHBhZ2VJdGVtUG9zKCk7CisKIHB1YmxpYyBRX1NMT1RT
OgogICAgIHZvaWQgbG9hZChjb25zdCBRVXJsJik7CiAgICAgdm9pZCBsb2FkSHRtbChjb25zdCBR
U3RyaW5nJiBodG1sLCBjb25zdCBRVXJsJiBiYXNlVXJsID0gUVVybCgpKTsKQEAgLTIwOSw2ICsy
MTMsMTUgQEAgUU1MX0RFQ0xBUkVfVFlQRUlORk8oUVF1aWNrV2ViVmlldywgUU1MX0hBU19BVFRB
Q0hFRF9QUk9QRVJUSUVTKQogY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbCA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogICAgIFFfUFJPUEVSVFko
UVF1aWNrV2ViUGFnZSogcGFnZSBSRUFEIHBhZ2UgQ09OU1RBTlQgRklOQUwpCisKKyAgICAvLyBR
TUwgRmxpY2thYmxlIEFQSS4KKyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRXaWR0aCBSRUFE
IGNvbnRlbnRXaWR0aCBXUklURSBzZXRDb250ZW50V2lkdGggTk9USUZZIGNvbnRlbnRXaWR0aENo
YW5nZWQpCisgICAgUV9QUk9QRVJUWShxcmVhbCBjb250ZW50SGVpZ2h0IFJFQUQgY29udGVudEhl
aWdodCBXUklURSBzZXRDb250ZW50SGVpZ2h0IE5PVElGWSBjb250ZW50SGVpZ2h0Q2hhbmdlZCkK
KyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRYIFJFQUQgY29udGVudFggV1JJVEUgc2V0Q29u
dGVudFggTk9USUZZIGNvbnRlbnRYQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRl
bnRZIFJFQUQgY29udGVudFkgV1JJVEUgc2V0Q29udGVudFkgTk9USUZZIGNvbnRlbnRZQ2hhbmdl
ZCkKKyAgICBRX1BST1BFUlRZKFFRdWlja0l0ZW0qIGNvbnRlbnRJdGVtIFJFQUQgY29udGVudEl0
ZW0gQ09OU1RBTlQpCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9i
amVjdD4gZmxpY2thYmxlRGF0YSBSRUFEIGZsaWNrYWJsZURhdGEpCisKICAgICBRX1BST1BFUlRZ
KFFXZWJOYXZpZ2F0aW9uSGlzdG9yeSogbmF2aWdhdGlvbkhpc3RvcnkgUkVBRCBuYXZpZ2F0aW9u
SGlzdG9yeSBDT05TVEFOVCBGSU5BTCkKICAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUNvbXBv
bmVudCogYWxlcnREaWFsb2cgUkVBRCBhbGVydERpYWxvZyBXUklURSBzZXRBbGVydERpYWxvZyBO
T1RJRlkgYWxlcnREaWFsb2dDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlQ29t
cG9uZW50KiBjb25maXJtRGlhbG9nIFJFQUQgY29uZmlybURpYWxvZyBXUklURSBzZXRDb25maXJt
RGlhbG9nIE5PVElGWSBjb25maXJtRGlhbG9nQ2hhbmdlZCkKQEAgLTI1Myw5ICsyNjYsMjAgQEAg
cHVibGljOgogICAgIHN0YXRpYyBpbnQgc2NoZW1lRGVsZWdhdGVzX0NvdW50KFFEZWNsYXJhdGl2
ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qKTsKICAgICBzdGF0aWMgdm9p
ZCBzY2hlbWVEZWxlZ2F0ZXNfQ2xlYXIoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1Vy
bFNjaGVtZURlbGVnYXRlPiopOwogICAgIFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tV
cmxTY2hlbWVEZWxlZ2F0ZT4gc2NoZW1lRGVsZWdhdGVzKCk7CisgICAgUURlY2xhcmF0aXZlTGlz
dFByb3BlcnR5PFFPYmplY3Q+IGZsaWNrYWJsZURhdGEoKTsKICAgICB2b2lkIGludm9rZUFwcGxp
Y2F0aW9uU2NoZW1lSGFuZGxlcihXVEY6OlBhc3NSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWRO
ZXR3b3JrUmVxdWVzdERhdGE+KTsKICAgICB2b2lkIHNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5
KFFRdWlja05ldHdvcmtSZXBseSopOwogCisgICAgUVF1aWNrSXRlbSogY29udGVudEl0ZW0oKTsK
KyAgICBxcmVhbCBjb250ZW50V2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRXaWR0
aChxcmVhbCk7CisgICAgcXJlYWwgY29udGVudEhlaWdodCgpIGNvbnN0OworICAgIHZvaWQgc2V0
Q29udGVudEhlaWdodChxcmVhbCk7CisgICAgcXJlYWwgY29udGVudFgoKSBjb25zdDsKKyAgICB2
b2lkIHNldENvbnRlbnRYKHFyZWFsKTsKKyAgICBxcmVhbCBjb250ZW50WSgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29udGVudFkocXJlYWwpOworCiAgICAgLy8gQysrIG9ubHkKICAgICBib29sIHJl
bmRlclRvT2Zmc2NyZWVuQnVmZmVyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZW5kZXJUb09mZnNj
cmVlbkJ1ZmZlcihib29sIGVuYWJsZSk7CkBAIC0yNjgsNiArMjkyLDEwIEBAIHB1YmxpYyBRX1NM
T1RTOgogICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgUVN0cmluZyYpOwogCiBRX1NJR05BTFM6
CisgICAgdm9pZCBjb250ZW50V2lkdGhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50SGVpZ2h0
Q2hhbmdlZCgpOworICAgIHZvaWQgY29udGVudFhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50
WUNoYW5nZWQoKTsKICAgICB2b2lkIGFsZXJ0RGlhbG9nQ2hhbmdlZCgpOwogICAgIHZvaWQgY29u
ZmlybURpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIHByb21wdERpYWxvZ0NoYW5nZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19w
X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3Au
aAppbmRleCA5ZTI3Y2UzLi41MTI3ZDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVm
aW5lIHFxdWlja3dlYnZpZXdfcF9wX2gKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIK
KyNpbmNsdWRlICJRdEZsaWNrUHJvdmlkZXIuaCIKICNpbmNsdWRlICJRdFBhZ2VDbGllbnQuaCIK
ICNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKICNpbmNsdWRlICJRdFdl
YlBhZ2VMb2FkQ2xpZW50LmgiCkBAIC02OCw2ICs2OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGVu
YWJsZU1vdXNlRXZlbnRzKCk7CiAgICAgdm9pZCBkaXNhYmxlTW91c2VFdmVudHMoKTsKIAorICAg
IHZpcnR1YWwgUVBvaW50RiBwYWdlSXRlbVBvcygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
b250ZW50c1NpemUoY29uc3QgUVNpemVGJikgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgbG9hZERp
ZFN1Y2NlZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wb25lbnRDb21wbGV0ZSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkQ29tbWl0KCkgeyB9CkBAIC0xMzMsNiArMTM3LDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgUVNjb3BlZFBvaW50ZXI8UVF1aWNrV2ViUGFnZT4gcGFnZVZpZXc7
CiAgICAgUVF1aWNrV2ViVmlldyogcV9wdHI7CisgICAgUXRGbGlja1Byb3ZpZGVyKiBmbGlja1By
b3ZpZGVyOwogCiAgICAgUURlY2xhcmF0aXZlQ29tcG9uZW50KiBhbGVydERpYWxvZzsKICAgICBR
RGVjbGFyYXRpdmVDb21wb25lbnQqIGNvbmZpcm1EaWFsb2c7CkBAIC0xNDUsNiArMTUwLDggQEAg
cHJvdGVjdGVkOgogICAgIFFGaWxlRGlhbG9nKiBmaWxlRGlhbG9nOwogICAgIFdLT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJSZWYgb3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiAKKyAgICBib29sIHVz
ZXJEaWRPdmVycmlkZUNvbnRlbnRXaWR0aDsKKyAgICBib29sIHVzZXJEaWRPdmVycmlkZUNvbnRl
bnRIZWlnaHQ7CiAgICAgYm9vbCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsKICAgICBib29s
IG1fcmVuZGVyVG9PZmZzY3JlZW5CdWZmZXI7CiAgICAgUVVybCBtX2ljb25VUkw7CkBAIC0xNjYs
NiArMTczLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflFRdWlja1dlYlZpZXdGbGlja2FibGVQ
cml2YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYgPSAwLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwKTsKIAorICAgIHZpcnR1
YWwgUVBvaW50RiBwYWdlSXRlbVBvcygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
c1NpemUoY29uc3QgUVNpemVGJik7CisKICAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZFN1Y2NlZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wb25lbnRDb21wbGV0ZSgpOwogICAgIHZpcnR1YWwg
dm9pZCBsb2FkRGlkQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVp
Y2t3ZWJ2aWV3LmNwcAppbmRleCBkYjNmOWM5Li41NzJlOWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dl
YnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1
aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAKQEAgLTM1Miw4ICszNTIsOCBAQCB2b2lk
IHRzdF9RUXVpY2tXZWJWaWV3OjpzY3JvbGxSZXF1ZXN0KCkKICAgICAvLyBDT01QQVJFIHdpdGgg
dGhlIHBvc2l0aW9uIHJlcXVlc3RlZCBpbiB0aGUgaHRtbAogICAgIC8vIFVzZSBxUm91bmQgYXMg
dGhhdCBpcyBhbHNvIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgcG9zaXRpb24KICAgICAvLyBp
biBXZWJLaXQuCi0gICAgaW50IHkgPSAtcVJvdW5kKDUwICogd2ViVmlldygpLT5wYWdlKCktPmNv
bnRlbnRzU2NhbGUoKSk7Ci0gICAgUVZFUklGWSh3ZWJWaWV3KCktPnBhZ2UoKS0+cG9zKCkueSgp
ID09IHkpOworICAgIGludCB5ID0gcVJvdW5kKDUwICogd2ViVmlldygpLT5wYWdlKCktPmNvbnRl
bnRzU2NhbGUoKSk7CisgICAgUVZFUklGWSh3ZWJWaWV3KCktPmV4cGVyaW1lbnRhbCgpLT5jb250
ZW50WSgpID09IHkpOwogfQogCiBRVFdFQktJVF9BUElfVEVTVF9NQUlOKHRzdF9RUXVpY2tXZWJW
aWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92
aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgzN2E0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAK
QEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUXRGbGlja1Byb3ZpZGVyLmgiCisKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdl
X3AuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKKworI2luY2x1ZGUgPFFDb3JlQXBw
bGljYXRpb24+CisjaW5jbHVkZSA8UURlY2xhcmF0aXZlRW5naW5lPgorI2luY2x1ZGUgPFFQb2lu
dEY+CisjaW5jbHVkZSA8UVF1aWNrSXRlbT4KKyNpbmNsdWRlIDxRVG91Y2hFdmVudD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgeworCitpbmxpbmUgUU1ldGFNZXRo
b2QgcmVzb2x2ZU1ldGFNZXRob2QoUU9iamVjdCogZmxpY2thYmxlLCBjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIEFTU0VSVChmbGlja2FibGUpOworCisgICAgY29uc3QgUU1ldGFPYmplY3QqIG1l
dGFPYmplY3QgPSBmbGlja2FibGUtPm1ldGFPYmplY3QoKTsKKyAgICBBU1NFUlQobWV0YU9iamVj
dCk7CisKKyAgICBpbnQgbWV0aG9kSW5kZXggPSBtZXRhT2JqZWN0LT5pbmRleE9mTWV0aG9kKG5h
bWUpOworICAgIEFTU0VSVChtZXRob2RJbmRleCAhPSAtMSk7CisKKyAgICByZXR1cm4gbWV0YU9i
amVjdC0+bWV0aG9kKG1ldGhvZEluZGV4KTsKK30KKworaW5saW5lIFFNZXRhUHJvcGVydHkgcmVz
b2x2ZU1ldGFQcm9wZXJ0eShRT2JqZWN0KiBmbGlja2FibGUsIGNvbnN0IGNoYXIqIG5hbWUpCit7
CisgICAgQVNTRVJUKGZsaWNrYWJsZSk7CisKKyAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9i
amVjdCA9IGZsaWNrYWJsZS0+bWV0YU9iamVjdCgpOworICAgIEFTU0VSVChtZXRhT2JqZWN0KTsK
KworICAgIGludCBwcm9wZXJ0eUluZGV4ID0gbWV0YU9iamVjdC0+aW5kZXhPZlByb3BlcnR5KG5h
bWUpOworICAgIEFTU0VSVChwcm9wZXJ0eUluZGV4ICE9IC0xKTsKKworICAgIHJldHVybiBtZXRh
T2JqZWN0LT5wcm9wZXJ0eShwcm9wZXJ0eUluZGV4KTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
UXRGbGlja1Byb3ZpZGVyOjpRdEZsaWNrUHJvdmlkZXIoUVF1aWNrV2ViVmlldyogdmlld0l0ZW0s
IFFRdWlja1dlYlBhZ2UqIHBhZ2VJdGVtKQorICAgIDogUU9iamVjdCh2aWV3SXRlbSkKK3sKKyAg
ICBBU1NFUlQodmlld0l0ZW0pOworICAgIEFTU0VSVChwYWdlSXRlbSk7CisKKyAgICBRRGVjbGFy
YXRpdmVFbmdpbmUqIGVuZ2luZSA9IHFtbEVuZ2luZSh2aWV3SXRlbSk7CisgICAgUURlY2xhcmF0
aXZlQ29udGV4dCogY29udGV4dCA9IHFtbENvbnRleHQodmlld0l0ZW0pOworCisgICAgQVNTRVJU
KGVuZ2luZSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgUURlY2xhcmF0aXZlQ29tcG9u
ZW50IGNvbXBvbmVudChlbmdpbmUsIHZpZXdJdGVtKTsKKworICAgIC8vIENyZWF0ZSB0aGUgaW50
ZXJuYWwgRmxpY2thYmxlIGluc3RhbmNlIGR5bmFtaWNhbGx5LgorICAgIC8vIFdlIG9ubHkgdXNl
IHB1YmxpYyBRTUwgQVBJIHNvIHRoYXQgd2UgZG8gbm90IGRlcGVuZAorICAgIC8vIG9uIHByaXZh
dGUgQVBJIG9mIHRoZSBRdERlY2xhcmF0aXZlIG1vZHVsZS4KKyAgICBjb21wb25lbnQuc2V0RGF0
YShRQnl0ZUFycmF5TGl0ZXJhbCgiaW1wb3J0IFF0UXVpY2sgMi4wXG5GbGlja2FibGUge30iKSwg
UVVybCgpKTsKKworICAgIG1fZmxpY2thYmxlID0gcW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihj
b21wb25lbnQuY3JlYXRlKGNvbnRleHQpKTsKKworICAgIFFNZXRhUHJvcGVydHkgY29udGVudCA9
IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50SXRlbSIpOworICAgIG1f
Y29udGVudEl0ZW0gPSBjb250ZW50LnJlYWQobV9mbGlja2FibGUpLnZhbHVlPFFRdWlja0l0ZW0q
PigpOworICAgIEFTU0VSVChtX2NvbnRlbnRJdGVtKTsKKworICAgIC8vIFJlc29sdmUgbWV0YSBt
ZXRob2RzIGFuZCBwcm9wZXJ0aWVzIG9mIHRoZSBGbGlja2FibGUgaW5zdGFuY2UuCisgICAgbV9y
ZXR1cm5Ub0JvdW5kcyA9IHJlc29sdmVNZXRhTWV0aG9kKG1fZmxpY2thYmxlLCAicmV0dXJuVG9C
b3VuZHMoKSIpOworICAgIG1fY2FuY2VsRmxpY2sgPSByZXNvbHZlTWV0YU1ldGhvZChtX2ZsaWNr
YWJsZSwgImNhbmNlbEZsaWNrKCkiKTsKKworICAgIG1fY29udGVudFdpZHRoID0gcmVzb2x2ZU1l
dGFQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgImNvbnRlbnRXaWR0aCIpOworICAgIG1fY29udGVudEhl
aWdodCA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50SGVpZ2h0Iik7
CisgICAgbV9jb250ZW50WCA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250
ZW50WCIpOworICAgIG1fY29udGVudFkgPSByZXNvbHZlTWV0YVByb3BlcnR5KG1fZmxpY2thYmxl
LCAiY29udGVudFkiKTsKKyAgICBtX21vdmluZyA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlj
a2FibGUsICJtb3ZpbmciKTsKKyAgICBtX2RyYWdnaW5nID0gcmVzb2x2ZU1ldGFQcm9wZXJ0eSht
X2ZsaWNrYWJsZSwgImRyYWdnaW5nIik7CisgICAgbV9mbGlja2luZyA9IHJlc29sdmVNZXRhUHJv
cGVydHkobV9mbGlja2FibGUsICJmbGlja2luZyIpOworCisgICAgbV9mbGlja2FibGVEYXRhID0g
cmVzb2x2ZU1ldGFQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgImZsaWNrYWJsZURhdGEiKTsKKworICAg
IC8vIFNldCB0aGUgdmlld0l0ZW0gYXMgdGhlIHBhcmVudCBvZiB0aGUgZmxpY2thYmxlIGluc3Rh
bmNlCisgICAgLy8gYW5kIHJlcGFyZW50IHRoZSBwYWdlIHNvIGl0IGlzIHBsYWNlZCBvbiB0aGUg
ZmxpY2thYmxlIGNvbnRlbnRJdGVtLgorICAgIG1fZmxpY2thYmxlLT5zZXRQYXJlbnRJdGVtKHZp
ZXdJdGVtKTsKKyAgICBwYWdlSXRlbS0+c2V0UGFyZW50SXRlbShtX2NvbnRlbnRJdGVtKTsKKwor
ICAgIC8vIFByb3BhZ2F0ZSBmbGlja2FibGUgc2lnbmFscy4KKyAgICBjb25uZWN0KG1fZmxpY2th
YmxlLCBTSUdOQUwobW92aW5nQ2hhbmdlZCgpKSwgU0lHTkFMKG1vdmluZ0NoYW5nZWQoKSksIFF0
OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdOQUwoZmxp
Y2tpbmdDaGFuZ2VkKCkpLCBTSUdOQUwoZmxpY2tpbmdDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29u
bmVjdGlvbik7CisgICAgY29ubmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKGRyYWdnaW5nQ2hhbmdl
ZCgpKSwgU0lHTkFMKGRyYWdnaW5nQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwor
ICAgIGNvbm5lY3QobV9mbGlja2FibGUsIFNJR05BTChjb250ZW50V2lkdGhDaGFuZ2VkKCkpLCBT
SUdOQUwoY29udGVudFdpZHRoQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAg
IGNvbm5lY3QobV9mbGlja2FibGUsIFNJR05BTChjb250ZW50SGVpZ2h0Q2hhbmdlZCgpKSwgU0lH
TkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAg
Y29ubmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgU0lHTkFMKGNv
bnRlbnRYQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QobV9m
bGlja2FibGUsIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFNJR05BTChjb250ZW50WUNoYW5n
ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKK30KKwordm9pZCBRdEZsaWNrUHJvdmlkZXI6
OmhhbmRsZVRvdWNoRmxpY2tFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCit7CisgICAgUUNvcmVB
cHBsaWNhdGlvbjo6c2VuZEV2ZW50KG1fZmxpY2thYmxlLCBldmVudCk7Cit9CisKK1FRdWlja0l0
ZW0qIFF0RmxpY2tQcm92aWRlcjo6Y29udGVudEl0ZW0oKQoreworICAgIEFTU0VSVChtX2NvbnRl
bnRJdGVtKTsKKyAgICByZXR1cm4gbV9jb250ZW50SXRlbTsKK30KKworUURlY2xhcmF0aXZlTGlz
dFByb3BlcnR5PFFPYmplY3Q+IFF0RmxpY2tQcm92aWRlcjo6ZmxpY2thYmxlRGF0YSgpCit7Cisg
ICAgcmV0dXJuIG1fZmxpY2thYmxlRGF0YS5yZWFkKG1fZmxpY2thYmxlKS52YWx1ZTxRRGVjbGFy
YXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gPigpOworfQorCitRUG9pbnRGIFF0RmxpY2tQcm92
aWRlcjo6Y29udGVudFBvcygpIGNvbnN0Cit7CisgICAgcXJlYWwgeCA9IG1fY29udGVudFgucmVh
ZChtX2ZsaWNrYWJsZSkudmFsdWU8cXJlYWw+KCk7CisgICAgcXJlYWwgeSA9IG1fY29udGVudFku
cmVhZChtX2ZsaWNrYWJsZSkudmFsdWU8cXJlYWw+KCk7CisgICAgcmV0dXJuIFFQb2ludEYoeCwg
eSk7Cit9Cit2b2lkIFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudFBvcyhjb25zdCBRUG9pbnRG
JiBwb3MpCit7CisgICAgbV9jb250ZW50WC53cml0ZShtX2ZsaWNrYWJsZSwgcG9zLngoKSk7Cisg
ICAgbV9jb250ZW50WS53cml0ZShtX2ZsaWNrYWJsZSwgcG9zLnkoKSk7Cit9CisKK1FTaXplRiBR
dEZsaWNrUHJvdmlkZXI6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgcXJlYWwgd2lkdGgg
PSBtX2ZsaWNrYWJsZS0+d2lkdGgoKTsKKyAgICBxcmVhbCBoZWlnaHQgPSBtX2ZsaWNrYWJsZS0+
aGVpZ2h0KCk7CisKKyAgICByZXR1cm4gUVNpemVGKHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lk
IFF0RmxpY2tQcm92aWRlcjo6c2V0Vmlld3BvcnRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKK3sK
KyAgICBBU1NFUlQoc2l6ZS5pc1ZhbGlkKCkpOworICAgIG1fZmxpY2thYmxlLT5zZXRXaWR0aChz
aXplLndpZHRoKCkpOworICAgIG1fZmxpY2thYmxlLT5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7
Cit9CisKK3ZvaWQgUXRGbGlja1Byb3ZpZGVyOjpyZXR1cm5Ub0JvdW5kcygpCit7CisgICAgbV9y
ZXR1cm5Ub0JvdW5kcy5pbnZva2UobV9mbGlja2FibGUsIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsK
K30KKwordm9pZCBRdEZsaWNrUHJvdmlkZXI6OmNhbmNlbEZsaWNrKCkKK3sKKyAgICBtX2NhbmNl
bEZsaWNrLmludm9rZShtX2ZsaWNrYWJsZSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQorCiti
b29sIFF0RmxpY2tQcm92aWRlcjo6aXNNb3ZpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX21v
dmluZy5yZWFkKG1fZmxpY2thYmxlKS52YWx1ZTxib29sPigpOworfQorCitib29sIFF0RmxpY2tQ
cm92aWRlcjo6aXNEcmFnZ2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHJhZ2dpbmcucmVh
ZChtX2ZsaWNrYWJsZSkudmFsdWU8Ym9vbD4oKTsKK30KKworYm9vbCBRdEZsaWNrUHJvdmlkZXI6
OmlzRmxpY2tpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZsaWNraW5nLnJlYWQobV9mbGlj
a2FibGUpLnZhbHVlPGJvb2w+KCk7Cit9CisKK3FyZWFsIFF0RmxpY2tQcm92aWRlcjo6Y29udGVu
dFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50V2lkdGgucmVhZChtX2ZsaWNr
YWJsZSkudmFsdWU8cXJlYWw+KCk7Cit9CisKK3ZvaWQgUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250
ZW50V2lkdGgocXJlYWwgd2lkdGgpCit7CisgICAgbV9jb250ZW50V2lkdGgud3JpdGUobV9mbGlj
a2FibGUsIHdpZHRoKTsKK30KKworcXJlYWwgUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50SGVpZ2h0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50SGVpZ2h0LnJlYWQobV9mbGlja2FibGUp
LnZhbHVlPHFyZWFsPigpOworfQorCit2b2lkIFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudEhl
aWdodChxcmVhbCBoZWlnaHQpCit7CisgICAgbV9jb250ZW50SGVpZ2h0LndyaXRlKG1fZmxpY2th
YmxlLCBoZWlnaHQpOworfQorCitxcmVhbCBRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRYKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50WC5yZWFkKG1fZmxpY2thYmxlKS52YWx1ZTxxcmVh
bD4oKTsKK30KKwordm9pZCBRdEZsaWNrUHJvdmlkZXI6OnNldENvbnRlbnRYKHFyZWFsIHgpCit7
CisgICAgbV9jb250ZW50WC53cml0ZShtX2ZsaWNrYWJsZSwgeCk7Cit9CisKK3FyZWFsIFF0Rmxp
Y2tQcm92aWRlcjo6Y29udGVudFkoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRZLnJl
YWQobV9mbGlja2FibGUpLnZhbHVlPHFyZWFsPigpOworfQorCit2b2lkIFF0RmxpY2tQcm92aWRl
cjo6c2V0Q29udGVudFkocXJlYWwgeSkKK3sKKyAgICBtX2NvbnRlbnRZLndyaXRlKG1fZmxpY2th
YmxlLCB5KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZs
aWNrUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlk
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWUwNzNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5o
CkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFF0RmxpY2tQcm92
aWRlcl9oCisjZGVmaW5lIFF0RmxpY2tQcm92aWRlcl9oCisKKyNpbmNsdWRlIDxRRGVjbGFyYXRp
dmVMaXN0UHJvcGVydHk+CisjaW5jbHVkZSA8UU1ldGFNZXRob2Q+CisjaW5jbHVkZSA8UU1ldGFQ
cm9wZXJ0eT4KKyNpbmNsdWRlIDxRT2JqZWN0PgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNz
IFFQb2ludEY7CitjbGFzcyBRU2l6ZUY7CitjbGFzcyBRUXVpY2tJdGVtOworY2xhc3MgUVF1aWNr
V2ViUGFnZTsKK2NsYXNzIFFRdWlja1dlYlZpZXc7CitjbGFzcyBRVG91Y2hFdmVudDsKK1FUX0VO
RF9OQU1FU1BBQ0UKKworY2xhc3MgUXRGbGlja1Byb3ZpZGVyIDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUXRGbGlja1Byb3ZpZGVyKFFRdWlja1dlYlZpZXcq
IHZpZXdJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRlbSk7CisKKyAgICB2b2lkIGhhbmRsZVRv
dWNoRmxpY2tFdmVudChRVG91Y2hFdmVudCopOworCisgICAgUVF1aWNrSXRlbSogY29udGVudEl0
ZW0oKTsKKyAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gZmxpY2thYmxlRGF0
YSgpOworCisgICAgUVBvaW50RiBjb250ZW50UG9zKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250
ZW50UG9zKGNvbnN0IFFQb2ludEYmKTsKKworICAgIFFTaXplRiB2aWV3cG9ydFNpemUoKSBjb25z
dDsKKyAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBRU2l6ZUYmKTsKKworICAgIHZvaWQg
cmV0dXJuVG9Cb3VuZHMoKTsKKyAgICB2b2lkIGNhbmNlbEZsaWNrKCk7CisKKyAgICBib29sIGlz
TW92aW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc0RyYWdnaW5nKCkgY29uc3Q7CisgICAgYm9vbCBp
c0ZsaWNraW5nKCkgY29uc3Q7CisKKyAgICBxcmVhbCBjb250ZW50V2lkdGgoKSBjb25zdDsKKyAg
ICB2b2lkIHNldENvbnRlbnRXaWR0aChxcmVhbCk7CisgICAgcXJlYWwgY29udGVudEhlaWdodCgp
IGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudEhlaWdodChxcmVhbCk7CisgICAgcXJlYWwgY29u
dGVudFgoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRYKHFyZWFsKTsKKyAgICBxcmVhbCBj
b250ZW50WSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFkocXJlYWwpOworCitRX1NJR05B
TFM6CisgICAgdm9pZCBjb250ZW50V2lkdGhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50SGVp
Z2h0Q2hhbmdlZCgpOworICAgIHZvaWQgY29udGVudFhDaGFuZ2VkKCk7CisgICAgdm9pZCBjb250
ZW50WUNoYW5nZWQoKTsKKyAgICB2b2lkIG1vdmluZ0NoYW5nZWQoKTsKKyAgICB2b2lkIGZsaWNr
aW5nQ2hhbmdlZCgpOworICAgIHZvaWQgZHJhZ2dpbmdDaGFuZ2VkKCk7CisKK3ByaXZhdGU6Cisg
ICAgUU1ldGFNZXRob2QgbV9yZXR1cm5Ub0JvdW5kczsKKyAgICBRTWV0YU1ldGhvZCBtX2NhbmNl
bEZsaWNrOworCisgICAgUU1ldGFQcm9wZXJ0eSBtX2NvbnRlbnRXaWR0aDsKKyAgICBRTWV0YVBy
b3BlcnR5IG1fY29udGVudEhlaWdodDsKKyAgICBRTWV0YVByb3BlcnR5IG1fY29udGVudFg7Cisg
ICAgUU1ldGFQcm9wZXJ0eSBtX2NvbnRlbnRZOworCisgICAgUU1ldGFQcm9wZXJ0eSBtX21vdmlu
ZzsKKyAgICBRTWV0YVByb3BlcnR5IG1fZHJhZ2dpbmc7CisgICAgUU1ldGFQcm9wZXJ0eSBtX2Zs
aWNraW5nOworCisgICAgUU1ldGFQcm9wZXJ0eSBtX2ZsaWNrYWJsZURhdGE7CisKKyAgICBRUXVp
Y2tJdGVtKiBtX2NvbnRlbnRJdGVtOworICAgIFFRdWlja0l0ZW0qIG1fZmxpY2thYmxlOworfTsK
KworI2VuZGlmIC8vIFF0RmxpY2tQcm92aWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXggNmY5M2M5My4u
NjY2MjNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2Vz
dHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBh
bkdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMzcsNyArMzcsNyBAQCBRdFBhbkdlc3R1cmVSZWNv
Z25pemVyOjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0V2ViUGFnZUV2ZW50SGFuZGxlciogZXZl
bnRIYW5kbAogICAgIHJlc2V0KCk7CiB9CiAKLWJvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6
cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0IGV2ZW50VGltZXN0YW1w
TWlsbGlzKQorYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUoY29uc3QgUVRv
dWNoRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghaW50ZXJhY3Rpb25FbmdpbmUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNzMsMTYgKzczLDE2IEBAIGJvb2wgUXRQYW5HZXN0dXJlUmVj
b2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0IGV2ZW50
VGltCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3N0YXRl
ID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0gICAgICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5w
YW5HZXN0dXJlU3RhcnRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CisgICAgICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlU3RhcnRlZChldmVu
dCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2du
aXplZCk7Ci0gICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVSZXF1ZXN0VXBk
YXRlKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgaW50
ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoZXZlbnQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgogICAgICAg
ICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkgewotICAgICAgICAgICAgaW50ZXJh
Y3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZUVuZGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGlt
ZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1
cmVFbmRlZChldmVudCk7CiAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRQYW5HZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDUzMjUwN2UuLmNmMDk0YjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIu
aApAQCAtNDIsNyArNDIsNyBAQCBjb25zdCBxcmVhbCBwYW5uaW5nSW5pdGlhbFRyaWdnZXJEaXN0
YW5jZVRocmVzaG9sZCA9IDUuOwogY2xhc3MgUXRQYW5HZXN0dXJlUmVjb2duaXplciA6IHB1Ymxp
YyBRdEdlc3R1cmVSZWNvZ25pemVyIHsKIHB1YmxpYzoKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25p
emVyKFF0V2ViUGFnZUV2ZW50SGFuZGxlciopOwotICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFU
b3VjaEV2ZW50KiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBib29sIHJlY29n
bml6ZShjb25zdCBRVG91Y2hFdmVudCopOwogICAgIHZvaWQgcmVzZXQoKTsKIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5jcHAKaW5kZXggNjI0MDBmYS4uMDdkMDc1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZS5jcHAKQEAgLTIzLDEyICsyMywxMCBAQAogI2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZS5oIgogCiAjaW5jbHVkZSAiUGFzc093blB0ci5oIgorI2luY2x1ZGUgIlF0
RmxpY2tQcm92aWRlci5oIgogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgogI2luY2x1ZGUg
InFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUgPFFQb2ludEY+Ci0jaW5jbHVkZSA8UVNjcm9s
bEV2ZW50PgotI2luY2x1ZGUgPFFTY3JvbGxQcmVwYXJlRXZlbnQ+Ci0jaW5jbHVkZSA8UVNjcm9s
bGVyUHJvcGVydGllcz4KICNpbmNsdWRlIDxRVHJhbnNmb3JtPgogI2luY2x1ZGUgPFFXaGVlbEV2
ZW50PgogI2luY2x1ZGUgPFF0UXVpY2svcXF1aWNraXRlbS5oPgpAQCAtMTE0LDQxICsxMTIsMjUg
QEAgaW5saW5lIFFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0ZW1SZWN0RnJv
bUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3QKICAgICByZXR1cm4gaXRlbVJlY3Q7CiB9CiAKLVF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGNv
bnN0IFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBjb250ZW50KQorUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUVF1
aWNrV2ViVmlldyogdmlld3BvcnQsIFFRdWlja1dlYlBhZ2UqIGNvbnRlbnQsIFF0RmxpY2tQcm92
aWRlciogZmxpY2tQcm92aWRlcikKICAgICA6IG1fdmlld3BvcnQodmlld3BvcnQpCiAgICAgLCBt
X2NvbnRlbnQoY29udGVudCkKKyAgICAsIG1fZmxpY2tQcm92aWRlcihmbGlja1Byb3ZpZGVyKQog
ICAgICwgbV9zdXNwZW5kQ291bnQoMCkKKyAgICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZhbHNl
KQogICAgICwgbV9zY2FsZUFuaW1hdGlvbihuZXcgU2NhbGVBbmltYXRpb24odGhpcykpCiAgICAg
LCBtX3BpbmNoU3RhcnRTY2FsZSgtMSkKIHsKICAgICByZXNldCgpOwogCi0gICAgUVNjcm9sbGVy
UHJvcGVydGllcyBwcm9wZXJ0aWVzID0gc2Nyb2xsZXIoKS0+c2Nyb2xsZXJQcm9wZXJ0aWVzKCk7
Ci0KLSAgICAvLyBUaGUgUXRQYW5HZXN0dXJlUmVjb2duaXplciBpcyByZXNwb25zaWJsZSBmb3Ig
cmVjb2duaXppbmcgdGhlIGdlc3R1cmUKLSAgICAvLyB0aHVzIHdlIG5lZWQgdG8gZGlzYWJsZSB0
aGUgZHJhZyBzdGFydCBkaXN0YW5jZS4KLSAgICBwcm9wZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhR
U2Nyb2xsZXJQcm9wZXJ0aWVzOjpEcmFnU3RhcnREaXN0YW5jZSwgMC4wKTsKLQotICAgIC8vIFNl
dCBzb21lIGRlZmF1bHQgUVNjcm9sbGVyIGNvbnN0cmFpbnMgdG8gbWltaWMgdGhlIHBoeXNpY3Mg
ZW5naW5lIG9mIHRoZSBOOSBicm93c2VyLgotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmlj
KFFTY3JvbGxlclByb3BlcnRpZXM6OkF4aXNMb2NrVGhyZXNob2xkLCAwLjY2KTsKLSAgICBwcm9w
ZXJ0aWVzLnNldFNjcm9sbE1ldHJpYyhRU2Nyb2xsZXJQcm9wZXJ0aWVzOjpTY3JvbGxpbmdDdXJ2
ZSwgUUVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6T3V0RXhwbykpOwotICAgIHByb3BlcnRpZXMu
c2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6OkRlY2VsZXJhdGlvbkZhY3Rvciwg
MC4wNSk7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRyaWMoUVNjcm9sbGVyUHJvcGVydGll
czo6TWF4aW11bVZlbG9jaXR5LCAwLjYzNSk7Ci0gICAgcHJvcGVydGllcy5zZXRTY3JvbGxNZXRy
aWMoUVNjcm9sbGVyUHJvcGVydGllczo6T3ZlcnNob290RHJhZ1Jlc2lzdGFuY2VGYWN0b3IsIDAu
MzMpOwotICAgIHByb3BlcnRpZXMuc2V0U2Nyb2xsTWV0cmljKFFTY3JvbGxlclByb3BlcnRpZXM6
Ok92ZXJzaG9vdFNjcm9sbERpc3RhbmNlRmFjdG9yLCAwLjMzKTsKLQotICAgIHNjcm9sbGVyKCkt
PnNldFNjcm9sbGVyUHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKLQotICAgIGNvbm5lY3QobV9jb250
ZW50LCBTSUdOQUwod2lkdGhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKGl0ZW1TaXplQ2hhbmdlZCgp
KSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9jb250ZW50LCBTSUdOQUwo
aGVpZ2h0Q2hhbmdlZCgpKSwgdGhpcywgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJl
Y3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKHdpZHRoQ2hhbmdl
ZCgpKSwgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAg
ICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKGhlaWdodENoYW5nZWQoKSksIFNMT1QoaXRlbVNp
emVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX2ZsaWNr
UHJvdmlkZXIsIFNJR05BTChtb3ZpbmdDaGFuZ2VkKCkpLCBTTE9UKHNjcm9sbFN0YXRlQ2hhbmdl
ZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwogCiAgICAgY29ubmVjdChtX3NjYWxlQW5pbWF0
aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCiAgICAgICAgICAgICBTTE9UKHNj
YWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJlY3RDb25uZWN0aW9u
KTsKICAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQoUUFi
c3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAogICAg
ICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRp
b246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpEaXJlY3RDb25uZWN0
aW9uKTsKLQotICAgIGNvbm5lY3Qoc2Nyb2xsZXIoKSwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRU2Ny
b2xsZXI6OlN0YXRlKSksCi0gICAgICAgICAgICBTTE9UKHNjcm9sbFN0YXRlQ2hhbmdlZChRU2Ny
b2xsZXI6OlN0YXRlKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKIH0KIAogUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp+UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkKQEAgLTE4Miw5
ICsxNjQsMTEgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0ZW1SZWN0
VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQogCiAgICAgbV9jb250ZW50LT5zZXRDb250
ZW50c1NjYWxlKGl0ZW1TY2FsZSk7CiAKLSAgICAvLyBXZSBuZWVkIHRvIGFuaW1hdGUgdGhlIGNv
bnRlbnQgYnV0IHRoZSBwb3NpdGlvbiByZXByZXNlbnRzIHRoZSB2aWV3cG9ydCBoZW5jZSB3ZSBu
ZWVkIHRvIGludmVydCB0aGUgcG9zaXRpb24gaGVyZS4KLSAgICAvLyBUbyBhbmltYXRlIHRoZSBw
b3NpdGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9zaXRpb24g
d2l0aCB0aGUgY3VycmVudCBzY2FsZTsKLSAgICBtX2NvbnRlbnQtPnNldFBvcygtIGl0ZW1SZWN0
LnRvcExlZnQoKSAqIGl0ZW1TY2FsZSk7CisgICAgLy8gVG8gYW5pbWF0ZSB0aGUgcG9zaXRpb24g
dG9nZXRoZXIgd2l0aCB0aGUgc2NhbGUgd2UgbXVsdGlwbHkgdGhlIHBvc2l0aW9uIHdpdGggdGhl
IGN1cnJlbnQgc2NhbGUKKyAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBwYWdlIHBvc2l0aW9uIChk
aXNwbGFjZW1lbnQgb24gdGhlIGZsaWNrYWJsZSBjb250ZW50SXRlbSBiZWNhdXNlIG9mIGFkZGl0
aW9uYWwgaXRlbXMpLgorICAgIFFQb2ludEYgbmV3UG9zaXRpb24obV9jb250ZW50LT5wb3MoKSAr
IChpdGVtUmVjdC50b3BMZWZ0KCkgKiBpdGVtU2NhbGUpKTsKKworICAgIG1fZmxpY2tQcm92aWRl
ci0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7CiB9CiAKIGJvb2wgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjphbmltYXRlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJl
Y3QpCkBAIC0yMDMsNiArMTg3LDE0IEBAIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjphbmltYXRlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxT
dGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2ZsaWNrUHJvdmlkZXItPmlzTW92aW5nKCkgJiYg
IW1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIpCisgICAgICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIg
PSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzKSk7CisgICAgZWxzZQor
ICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Cit9CisKIHZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIC8q
b2xkU3RhdGUqLykKIHsKICAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7CkBAIC0yMTgsNjAgKzIxMCw2
IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlvblN0YXRl
Q2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246CiAgICAgfQogfQogCi12b2lkIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsU3RhdGVDaGFuZ2VkKFFTY3JvbGxlcjo6U3RhdGUgbmV3
U3RhdGUpCi17Ci0gICAgc3dpdGNoIChuZXdTdGF0ZSkgewotICAgIGNhc2UgUVNjcm9sbGVyOjpJ
bmFjdGl2ZToKLSAgICAgICAgLy8gRklYTUU6IFFTY3JvbGxlciBnZXRzIHdoZW4gZXZlbiB3aGVu
IHRhcHBpbmcgd2hpbGUgaXQgaXMgc2Nyb2xsaW5nLgotICAgICAgICBtX3Njcm9sbFVwZGF0ZURl
ZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUVNjcm9sbGVyOjpQcmVz
c2VkOgotICAgIGNhc2UgUVNjcm9sbGVyOjpEcmFnZ2luZzoKLSAgICBjYXNlIFFTY3JvbGxlcjo6
U2Nyb2xsaW5nOgotICAgICAgICBpZiAobV9zY3JvbGxVcGRhdGVEZWZlcnJlcikKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3
IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcykpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpldmVudChRRXZlbnQqIGV2ZW50KQotewotICAgIHN3aXRjaCAoZXZlbnQtPnR5
cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpTY3JvbGxQcmVwYXJlOiB7Ci0gICAgICAgIFFTY3Jv
bGxQcmVwYXJlRXZlbnQqIHByZXBhcmVFdmVudCA9IHN0YXRpY19jYXN0PFFTY3JvbGxQcmVwYXJl
RXZlbnQqPihldmVudCk7Ci0gICAgICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3Zp
ZXdwb3J0LT5ib3VuZGluZ1JlY3QoKTsKLSAgICAgICAgY29uc3QgUVJlY3RGIGNvbnRlbnRSZWN0
ID0gbV92aWV3cG9ydC0+bWFwUmVjdEZyb21JdGVtKG1fY29udGVudCwgbV9jb250ZW50LT5ib3Vu
ZGluZ1JlY3QoKSk7Ci0gICAgICAgIGNvbnN0IFFSZWN0RiBwb3NSYW5nZSA9IGNvbXB1dGVQb3NS
YW5nZUZvckl0ZW1BdFNjYWxlKG1fY29udGVudC0+Y29udGVudHNTY2FsZSgpKTsKLSAgICAgICAg
cHJlcGFyZUV2ZW50LT5zZXRDb250ZW50UG9zUmFuZ2UocG9zUmFuZ2UpOwotICAgICAgICBwcmVw
YXJlRXZlbnQtPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFJlY3Quc2l6ZSgpKTsKLQotICAgICAg
ICAvLyBBcyB3ZSB3YW50IHRvIHB1c2ggdGhlIGNvbnRlbnRzIGFuZCBub3QgYWN0dWFsbHkgc2Ny
b2xsIGl0LCB3ZSBuZWVkIHRvIGludmVydCB0aGUgcG9zaXRpb25zIGhlcmUuCi0gICAgICAgIHBy
ZXBhcmVFdmVudC0+c2V0Q29udGVudFBvcygtY29udGVudFJlY3QudG9wTGVmdCgpKTsKLSAgICAg
ICAgcHJlcGFyZUV2ZW50LT5hY2NlcHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGNhc2UgUUV2ZW50OjpTY3JvbGw6IHsKLSAgICAgICAgUVNjcm9sbEV2ZW50KiBzY3JvbGxF
dmVudCA9IHN0YXRpY19jYXN0PFFTY3JvbGxFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgUVBvaW50
RiBuZXdQb3MgPSAtc2Nyb2xsRXZlbnQtPmNvbnRlbnRQb3MoKSAtIHNjcm9sbEV2ZW50LT5vdmVy
c2hvb3REaXN0YW5jZSgpOwotICAgICAgICBpZiAobV9jb250ZW50LT5wb3MoKSAhPSBuZXdQb3Mp
IHsKLSAgICAgICAgICAgIFFQb2ludEYgY3VycmVudFBvc0luQ1NTQ29vcmRpbmF0ZXMgPSBtX3Zp
ZXdwb3J0LT5tYXBUb1dlYkNvbnRlbnQobV9jb250ZW50LT5wb3MoKSk7Ci0gICAgICAgICAgICBR
UG9pbnRGIG5ld1Bvc0luQ1NTQ29vcmRpbmF0ZXMgPSBtX3ZpZXdwb3J0LT5tYXBUb1dlYkNvbnRl
bnQobmV3UG9zKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGVtaXR0ZWQgYmVmb3Jl
IHZpZXdwb3J0VXBkYXRlUmVxdWVzdGVkIHNvIHRoYXQgdGhlIHdlYiBwcm9jZXNzIGtub3dzIHdo
ZXJlIHRvIGxvb2sgZm9yIHRpbGVzLgotICAgICAgICAgICAgZW1pdCB2aWV3cG9ydFRyYWplY3Rv
cnlWZWN0b3JDaGFuZ2VkKGN1cnJlbnRQb3NJbkNTU0Nvb3JkaW5hdGVzIC0gbmV3UG9zSW5DU1ND
b29yZGluYXRlcyk7Ci0gICAgICAgICAgICBtX2NvbnRlbnQtPnNldFBvcyhuZXdQb3MpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50KGV2ZW50KTsKLX0KLQog
c3RhdGljIGlubGluZSBRUG9pbnRGIGJvdW5kUG9zaXRpb24oY29uc3QgUVBvaW50RiBtaW5Qb3Np
dGlvbiwgY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIGNvbnN0IFFQb2ludEYmIG1heFBvc2l0aW9u
KQogewogICAgIHJldHVybiBRUG9pbnRGKHFCb3VuZChtaW5Qb3NpdGlvbi54KCksIHBvc2l0aW9u
LngoKSwgbWF4UG9zaXRpb24ueCgpKSwKQEAgLTMwNCw3ICsyNDIsOCBAQCB2b2lkIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6d2hlZWxFdmVudChRV2hlZWxFdmVudCogZXYpCiAgICAgICAg
IG5ld1Bvcy5yeSgpICs9IGRlbHRhOwogCiAgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0
ZVBvc1JhbmdlRm9ySXRlbUF0U2NhbGUobV9jb250ZW50LT5jb250ZW50c1NjYWxlKCkpOwotICAg
IG1fY29udGVudC0+c2V0UG9zKC1ib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwg
bmV3UG9zLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKSk7CisKKyAgICBtX2ZsaWNrUHJvdmlk
ZXItPnNldENvbnRlbnRQb3MoLWJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBu
ZXdQb3MsIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpKTsKIAogICAgIGVtaXQgdmlzaWJsZUNv
bnRlbnRSZWN0QW5kU2NhbGVDaGFuZ2VkKCk7CiB9CkBAIC00MzQsOCArMzczLDEwIEBAIHZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpyZXNldCgpCiAKICAgICBtX2hhZFVzZXJJbnRl
cmFjdGlvbiA9IGZhbHNlOwogCi0gICAgc2Nyb2xsZXIoKS0+c3RvcCgpOworICAgIG1fZmxpY2tQ
cm92aWRlci0+Y2FuY2VsRmxpY2soKTsKICAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7Cisg
ICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7CisgICAgbV9zY3JvbGxVcGRhdGVEZWZl
cnJlci5jbGVhcigpOwogfQogCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6YXBw
bHlDb25zdHJhaW50cyhjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCkBAIC00NTIsNyAr
MzkzLDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFwcGx5Q29uc3RyYWlu
dHMoY29uc3QgQ29uc3RyYWludHMmIGNvbnN0cmFpbnQKICAgICAgICAgbV9jb250ZW50LT5zZXRD
b250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MoaW5pdGlhbFNjYWxlKSk7CiAgICAgfQogCi0g
ICAgLy8gSWYgdGhlIHdlYiBhcHAgY2hhbmdlcyBzdWNjZXNzaXZlbHkgY2hhbmdlcyB0aGUgdmll
d3BvcnQgb24gcHVycG9zZQorICAgIC8vIElmIHRoZSB3ZWIgYXBwIHN1Y2Nlc3NpdmVseSBjaGFu
Z2VzIHRoZSB2aWV3cG9ydCBvbiBwdXJwb3NlCiAgICAgLy8gaXQgd2FudHMgdG8gYmUgaW4gY29u
dHJvbCBhbmQgd2Ugc2hvdWxkIGRpc2FibGUgYW5pbWF0aW9ucy4KICAgICBlbnN1cmVDb250ZW50
V2l0aGluVmlld3BvcnRCb3VuZGFyeSgvKiBpbW1lZGlhdGUgKi8gdHJ1ZSk7CiB9CkBAIC00NjQs
NDQgKzQwNSw2MyBAQCBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmN1cnJlbnRD
U1NTY2FsZSgpCiAKIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxBbmlt
YXRpb25BY3RpdmUoKSBjb25zdAogewotICAgIFFTY3JvbGxlciogc2Nyb2xsZXIgPSBjb25zdF9j
YXN0PFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSo+KHRoaXMpLT5zY3JvbGxlcigpOwotICAg
IHJldHVybiBzY3JvbGxlci0+c3RhdGUoKSA9PSBRU2Nyb2xsZXI6OlNjcm9sbGluZzsKLX0KLQot
dm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmludGVycnVwdFNjcm9sbEFuaW1hdGlv
bigpCi17Ci0gICAgLy8gU3RvcHBpbmcgdGhlIHNjcm9sbGVyIGltbWVkaWF0ZWx5IHN0b3BzIGtp
bmV0aWMgc2Nyb2xsaW5nIGFuZCBpZiB0aGUgdmlldyBpcyBvdXQgb2YgYm91bmRzIGl0Ci0gICAg
Ly8gaXMgbW92ZWQgaW5zaWRlIHZhbGlkIGJvdW5kcyBpbW1lZGlhdGVseSBhcyB3ZWxsLiBUaGlz
IGlzIHRoZSBiZWhhdmlvciB0aGF0IHdlIHdhbnQuCi0gICAgc2Nyb2xsZXIoKS0+c3RvcCgpOwor
ICAgIHJldHVybiBtX2ZsaWNrUHJvdmlkZXItPmlzRmxpY2tpbmcoKTsKIH0KIAogYm9vbCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAogewotICAg
IFFTY3JvbGxlciogc2Nyb2xsZXIgPSBjb25zdF9jYXN0PFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZSo+KHRoaXMpLT5zY3JvbGxlcigpOwotICAgIHJldHVybiBzY3JvbGxlci0+c3RhdGUoKSA9
PSBRU2Nyb2xsZXI6OlByZXNzZWQgfHwgc2Nyb2xsZXItPnN0YXRlKCkgPT0gUVNjcm9sbGVyOjpE
cmFnZ2luZzsKKyAgICByZXR1cm4gbV9mbGlja1Byb3ZpZGVyLT5pc0RyYWdnaW5nKCk7CiB9CiAK
LXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRlZChjb25z
dCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxs
aXMpCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQo
Y29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQogewogICAgIG1faGFkVXNlckludGVyYWN0aW9uID0g
dHJ1ZTsKLSAgICBzY3JvbGxlcigpLT5oYW5kbGVJbnB1dChRU2Nyb2xsZXI6OklucHV0UHJlc3Ms
ICB2aWV3cG9ydFRvdWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKworICAgIEFTU0VS
VChldmVudC0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hVcGRhdGUpOworCisgICAgLy8gVGhlIHBh
biBnZXN0dXJlIHJlY29nbml6ZXIgc2VuZHMgdGhlIGN1cnJlbnQgVG91Y2hVcGRhdGUgZXZlbnQg
d2hlbiBpdAorICAgIC8vIHJlY29nbml6ZWQgYSBwYW4gZ2VzdHVyZS4KKyAgICAvLyBDb25zdHJ1
Y3QgYSBUb3VjaEJlZ2luIGV2ZW50IG91dCBvZiB0aGUgcmVjZWl2ZWQgZXZlbnQgZm9yIHRoZSBm
bGlja2FibGUuCisgICAgUVRvdWNoRXZlbnQgdG91Y2hCZWdpbihRRXZlbnQ6OlRvdWNoQmVnaW4s
CisgICAgICAgICAgICAgICAgZXZlbnQtPmRldmljZSgpLAorICAgICAgICAgICAgICAgIGV2ZW50
LT5tb2RpZmllcnMoKSwKKyAgICAgICAgICAgICAgICBldmVudC0+dG91Y2hQb2ludFN0YXRlcygp
LAorICAgICAgICAgICAgICAgIGV2ZW50LT50b3VjaFBvaW50cygpKTsKKworICAgIHRvdWNoQmVn
aW4uc2V0VGltZXN0YW1wKGV2ZW50LT50aW1lc3RhbXAoKSk7CisgICAgbV9mbGlja1Byb3ZpZGVy
LT5oYW5kbGVUb3VjaEZsaWNrRXZlbnQoJnRvdWNoQmVnaW4pOworICAgIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKS5w
b3MoKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVS
ZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBl
dmVudFRpbWVzdGFtcE1pbGxpcykKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpw
YW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCiB7Ci0gICAg
c2Nyb2xsZXIoKS0+aGFuZGxlSW5wdXQoUVNjcm9sbGVyOjpJbnB1dE1vdmUsICB2aWV3cG9ydFRv
dWNoUG9pbnQsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUo
KSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRlKTsKKworICAgIFFQb2ludEYgdmlld3BvcnRQb3NpdGlv
biA9IGV2ZW50LT50b3VjaFBvaW50cygpLmZpcnN0KCkucG9zKCk7CisKKyAgICBlbWl0IHZpZXdw
b3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQobV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXMgLSB2aWV3cG9ydFBvc2l0aW9uKTsKKworICAgIG1fZmxpY2tQcm92aWRlci0+aGFu
ZGxlVG91Y2hGbGlja0V2ZW50KGNvbnN0X2Nhc3Q8UVRvdWNoRXZlbnQqPihldmVudCkpOworICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdmlld3BvcnRQb3NpdGlv
bjsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVDYW5j
ZWxsZWQoKQogewotICAgIC8vIFN0b3BwaW5nIHRoZSBzY3JvbGxlciBpbW1lZGlhdGVseSBzdG9w
cyBraW5ldGljIHNjcm9sbGluZyBhbmQgaWYgdGhlIHZpZXcgaXMgb3V0IG9mIGJvdW5kcyBpdAot
ICAgIC8vIGlzIG1vdmVkIGluc2lkZSB2YWxpZCBib3VuZHMgaW1tZWRpYXRlbHkgYXMgd2VsbC4g
VGhpcyBpcyB0aGUgYmVoYXZpb3IgdGhhdCB3ZSB3YW50LgotICAgIHNjcm9sbGVyKCktPnN0b3Ao
KTsKKyAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxlcyBvZiB0aGUgZmxpY2thYmxlLgor
ICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSByZWNvZ25pemVyIGlmIHdl
IGhhdmUgYSByZWNvZ25pemVkCisgICAgLy8gcGFuIGdlc3R1cmUgYW5kIHJlY2VpdmUgYSB0b3Vj
aCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50cworICAgIC8vIChpZS4gdHJhbnNpdGlv
biB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMgbm90IG1vdmUgdGhlIGNvbnRlbnQKKyAg
ICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCisgICAgLy8gV2hlbiB0aGUgcGluY2ggZ2Vz
dHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlvbmVkIGFuZCBzY2FsZWQKKyAgICAvLyBi
YWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCisgICAgbV9mbGlja1Byb3ZpZGVyLT5jYW5jZWxGbGlj
aygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVu
ZGVkKGNvbnN0IFFQb2ludEYmICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVz
dGFtcE1pbGxpcykKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJl
RW5kZWQoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQogewotICAgIHNjcm9sbGVyKCktPmhhbmRs
ZUlucHV0KFFTY3JvbGxlcjo6SW5wdXRSZWxlYXNlLCAgdmlld3BvcnRUb3VjaFBvaW50LCBldmVu
dFRpbWVzdGFtcE1pbGxpcyk7CisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpU
b3VjaEVuZCk7CisgICAgbV9mbGlja1Byb3ZpZGVyLT5oYW5kbGVUb3VjaEZsaWNrRXZlbnQoY29u
c3RfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KSk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgpLnBvcygpOwog
fQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25BY3Rp
dmUoKSBjb25zdApAQCAtNTU3LDcgKzUxNyw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoCiAg
ICAgY29uc3QgUVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29y
ZGluYXRlcyAtIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwogICAgIG1f
bGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXM7CiAKLSAgICBtX2NvbnRlbnQtPnNldFBvcyhtX2NvbnRlbnQtPnBvcygp
ICsgcG9zaXRpb25EaWZmKTsKKyAgICBtX2ZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRQb3MobV9m
bGlja1Byb3ZpZGVyLT5jb250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYpOwogfQogCiB2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlRW5kZWQoKQpAQCAtNTg4LDcg
KzU0OCw4IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUNvbnRlbnQo
Y29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluCiAgICAgUVBvaW50RiBvbGRQaW5jaENl
bnRlck9uVmlld3BvcnQgPSBtX3ZpZXdwb3J0LT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNT
U0Nvb3JkaW5hdGVzKTsKICAgICBtX2NvbnRlbnQtPnNldENvbnRlbnRzU2NhbGUoaXRlbVNjYWxl
RnJvbUNTUyhjc3NTY2FsZSkpOwogICAgIFFQb2ludEYgbmV3UGluY2hDZW50ZXJPblZpZXdwb3J0
ID0gbV92aWV3cG9ydC0+bWFwRnJvbVdlYkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRlcyk7
Ci0gICAgbV9jb250ZW50LT5zZXRQb3MobV9jb250ZW50LT5wb3MoKSAtIChuZXdQaW5jaENlbnRl
ck9uVmlld3BvcnQgLSBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKKworICAgIG1fZmxpY2tQ
cm92aWRlci0+c2V0Q29udGVudFBvcyhtX2ZsaWNrUHJvdmlkZXItPmNvbnRlbnRQb3MoKSArIChu
ZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKIH0K
IAogI2luY2x1ZGUgIm1vY19RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZS5oCmluZGV4IGE0YjY5OTAuLmZkOWQ4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgKQEAg
LTIzLDggKzIzLDggQEAKICNkZWZpbmUgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gKIAog
I2luY2x1ZGUgIk93blB0ci5oIgotI2luY2x1ZGUgPFFTY3JvbGxlcj4KICNpbmNsdWRlICJxd2Vi
a2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CiAjaW5jbHVkZSA8UXRDb3JlL1FP
YmplY3Q+CiAjaW5jbHVkZSA8UXRDb3JlL1FSZWN0Rj4KICNpbmNsdWRlIDxRdENvcmUvUVZhcmlh
bnQ+CkBAIC0zMyw2ICszMyw3IEBACiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFQb2ludEY7
CiBjbGFzcyBRUXVpY2tJdGVtOworY2xhc3MgUXRGbGlja1Byb3ZpZGVyOwogY2xhc3MgUVF1aWNr
V2ViUGFnZTsKIGNsYXNzIFFRdWlja1dlYlZpZXc7CiBjbGFzcyBRV2hlZWxFdmVudDsKQEAgLTQ2
LDcgKzQ3LDcgQEAgY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lIDogcHVibGljIFFP
YmplY3QgewogICAgIFFfT0JKRUNUCiAKIHB1YmxpYzoKLSAgICBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUoY29uc3QgUVF1aWNrV2ViVmlldyosIFFRdWlja1dlYlBhZ2UqKTsKKyAgICBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUVF1aWNrV2ViVmlldyosIFFRdWlja1dlYlBhZ2UqLCBR
dEZsaWNrUHJvdmlkZXIqKTsKICAgICB+UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCk7CiAK
ICAgICBzdHJ1Y3QgQ29uc3RyYWludHMgewpAQCAtNjcsOCArNjgsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFFTaXplIGxheW91dFNpemU7CiAgICAgfTsKIAotICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7
Ci0KICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IENv
bnN0cmFpbnRzJik7CiAKQEAgLTc5LDEzICs3OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWdl
UG9zaXRpb25SZXF1ZXN0KGNvbnN0IFFQb2ludCYgcG9zKTsKIAogICAgIGJvb2wgc2Nyb2xsQW5p
bWF0aW9uQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBpbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24o
KTsKIAogICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgcGFuR2Vz
dHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgIHZpZXdwb3J0VG91Y2hQb2ludCwgcWludDY0IGV2
ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNv
bnN0IFFQb2ludEYmICB2aWV3cG9ydFRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1p
bGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRVG91Y2hFdmVudCopOwor
ICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVRvdWNoRXZlbnQqKTsKICAg
ICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChj
b25zdCBRUG9pbnRGJiAgdmlld3BvcnRUb3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBN
aWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFUb3VjaEV2ZW50Kik7CiAK
ICAgICBib29sIHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBpbnRlcnJ1
cHRTY2FsZUFuaW1hdGlvbigpOwpAQCAtMTEyLDcgKzExMCw3IEBAIHByaXZhdGUgUV9TTE9UUzoK
ICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgb2YgY29udGVudCB0aGF0IGFyZSBub3QgZHJpdmVu
IGJ5IHVzLCBsaWtlIHRoZSBwYWdlIHJlc2l6aW5nIGl0c2VsZi4KICAgICB2b2lkIGl0ZW1TaXpl
Q2hhbmdlZCgpOwogCi0gICAgdm9pZCBzY3JvbGxTdGF0ZUNoYW5nZWQoUVNjcm9sbGVyOjpTdGF0
ZSk7CisgICAgdm9pZCBzY3JvbGxTdGF0ZUNoYW5nZWQoKTsKICAgICB2b2lkIHNjYWxlQW5pbWF0
aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1h
dGlvbjo6U3RhdGUpOwogICAgIHZvaWQgc2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlh
bnQgdmFsdWUpIHsgc2V0SXRlbVJlY3RWaXNpYmxlKHZhbHVlLnRvUmVjdEYoKSk7IH0KIApAQCAt
MTMyLDEzICsxMzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2NhbGVDb250ZW50KGNvbnN0
IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKTsKIAotICAg
IC8vIEFzIGxvbmcgYXMgdGhlIG9iamVjdCBleGlzdHMgdGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5
cyByZXR1cm4gdGhlIHNhbWUgUVNjcm9sbGVyIGluc3RhbmNlLgotICAgIFFTY3JvbGxlciogc2Ny
b2xsZXIoKSB7IHJldHVybiBRU2Nyb2xsZXI6OnNjcm9sbGVyKHRoaXMpOyB9Ci0KLQotICAgIGNv
bnN0IFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnQ7CisgICAgUVF1aWNrV2ViVmlldyog
Y29uc3QgbV92aWV3cG9ydDsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBtX2NvbnRlbnQ7CiAK
KyAgICBRdEZsaWNrUHJvdmlkZXIqIGNvbnN0IG1fZmxpY2tQcm92aWRlcjsKKwogICAgIENvbnN0
cmFpbnRzIG1fY29uc3RyYWludHM7CiAKICAgICBpbnQgbV9zdXNwZW5kQ291bnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3Bw
CmluZGV4IGEwNzk2NzguLmZlYmE4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC01MDcsOCArNTA3LDcgQEAg
dm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRp
dmVXZWJUb3VjaEV2ZW50JiBldmVudCwKICAgICAgICAgLy8gVGhlIGludGVyYWN0aW9uIGVuZ2lu
ZSBtaWdodCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBh
bmltYXRpb24KICAgICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpvb20gb3IgdGhlIGJv
dW5jZSBiYWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcKICAg
ICAgICAgLy8gd2hlcmUgYXMgaXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5pbWF0aW9uLgot
ICAgICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkp
Ci0gICAgICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRTY3JvbGxBbmltYXRp
b24oKTsKKyAgICAgICAgLy8gU2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIGZsaWNrUHJvdmlkZXIg
d2lsbCBzdG9wIHRoZSBraW5ldGljIHNjcm9sbGluZyBhbmltYXRpb24uCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKICAgICAgICAgLy8gVGhlIHNjYWxlIGFu
aW1hdGlvbiBjYW4gb25seSBiZSBpbnRlcnJ1cHRlZCBieSBhIHBpbmNoIGdlc3R1cmUsIHdoaWNo
IHdpbGwgdGhlbiB0YWtlIG92ZXIuCkBAIC01MjQsMTUgKzUyMywxNCBAQCB2b2lkIFF0V2ViUGFn
ZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZl
bnQmIGV2ZW50LAogICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2FsZUFuaW1hdGlvbkFj
dGl2ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDb252ZXJ0IHRoZSBldmVudCB0aW1l
c3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCi0gICAgcWludDY0IGV2ZW50VGltZXN0
YW1wTWlsbGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAqIDEwMDAp
OwotICAgIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2LCBldmVudFRpbWVzdGFt
cE1pbGxpcyk7CisgICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYpOwogICAg
IG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYpOwogCiAgICAgaWYgKG1fcGFu
R2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkgfHwgbV9waW5jaEdlc3R1cmVSZWNvZ25p
emVyLmlzUmVjb2duaXplZCgpKQogICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFFUb3VjaEV2ZW50KiBldiA9IGV2ZW50Lm5h
dGl2ZUV2ZW50KCk7CisgICAgICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVzdGFtcCBmcm9t
IHNlY29uZCB0byBtaWxsaXNlY29uZC4KKyAgICAgICAgcWludDY0IGV2ZW50VGltZXN0YW1wTWls
bGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAqIDEwMDApOwogICAg
ICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlY29nbml6ZShldiwgZXZlbnRUaW1lc3RhbXBN
aWxsaXMpOwogICAgIH0KIH0KLS0gCjEuNy45Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>