<?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>63950</bug_id>
          
          <creation_ts>2011-07-05 12:46:57 -0700</creation_ts>
          <short_desc>[Qt][WK2] Split Qt API into two different web views (touch and desktop)</short_desc>
          <delta_ts>2011-07-10 10:15:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</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, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>abecsi</cc>
    
    <cc>ademar</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>pierre.rossi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>432371</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-05 12:46:57 -0700</bug_when>
    <thetext>As discussed on webkit-qt, we&apos;re throwing out QGraphicsWKView/QWKPage and introducing QTouchWebView &amp; QDesktopWebView.
We&apos;ll be starting with something fairly minimal, and build them up incrementally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432384</commentid>
    <comment_count>1</comment_count>
      <attachid>99738</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-05 13:33:31 -0700</bug_when>
    <thetext>Created attachment 99738
Proposed patch (let&apos;s start somewhere)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432385</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 13:36:15 -0700</bug_when>
    <thetext>Attachment 99738 did not pass style-queue:

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

Last 3072 characters of output:
tespace/braces] [4]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h:50:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h:50:  The parameter name &quot;dropAction&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/qt/qwebpageproxy.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/qt/qwebpageproxy.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/qt/qwebpageproxy.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/qt/qwebpageproxy.cpp:435:  More than one command on the same line  [whitespace/newline] [4]
Source/WebKit2/UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:23:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:43:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:70:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:49:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:57:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:60:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:61:  The parameter name &quot;painter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:61:  The parameter name &quot;option&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:61:  The parameter name &quot;widget&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:40:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 56 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432387</commentid>
    <comment_count>3</comment_count>
      <attachid>99738</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-05 13:50:19 -0700</bug_when>
    <thetext>Comment on attachment 99738
Proposed patch (let&apos;s start somewhere)

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

&gt; Tools/MiniBrowser/qt/BrowserWindow.cpp:345
&gt;  void BrowserWindow::toggleDisableJavaScript(bool enable)
&gt;  {
&gt; +#if 0
&gt; +    // FIXME
&gt;      page()-&gt;preferences()-&gt;setAttribute(QWKPreferences::JavascriptEnabled, !enable);
&gt; +#endif
&gt;  }
&gt;  
&gt;  void BrowserWindow::toggleAutoLoadImages(bool enable)
&gt;  {
&gt; +#if 0
&gt; +    // FIXME
&gt;      page()-&gt;preferences()-&gt;setAttribute(QWKPreferences::AutoLoadImages, !enable);
&gt; +#endif
&gt;  }

We should probably remove those actions entirely. We will probably not add them back as public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432393</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-05 13:57:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 99738 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99738&amp;action=review
&gt; 
&gt; &gt; Tools/MiniBrowser/qt/BrowserWindow.cpp:345
&gt; &gt;  void BrowserWindow::toggleDisableJavaScript(bool enable)
&gt; &gt;  {
&gt; &gt; +#if 0
&gt; &gt; +    // FIXME
&gt; &gt;      page()-&gt;preferences()-&gt;setAttribute(QWKPreferences::JavascriptEnabled, !enable);
&gt; &gt; +#endif
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  void BrowserWindow::toggleAutoLoadImages(bool enable)
&gt; &gt;  {
&gt; &gt; +#if 0
&gt; &gt; +    // FIXME
&gt; &gt;      page()-&gt;preferences()-&gt;setAttribute(QWKPreferences::AutoLoadImages, !enable);
&gt; &gt; +#endif
&gt; &gt;  }
&gt; 
&gt; We should probably remove those actions entirely. We will probably not add them back as public API.

Fair point. Let&apos;s collect more feedback before we reiterate though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432451</commentid>
    <comment_count>5</comment_count>
      <attachid>99738</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-07-05 15:52:14 -0700</bug_when>
    <thetext>Comment on attachment 99738
Proposed patch (let&apos;s start somewhere)

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

That is one heck of a patch :-)

Some mostly minor nitpicks that you can take into consideration

Did you guys make a meta bug for all issues? things missing to me added that we currently have on trunk? hook up AC etc?

It looks good, so let&apos;s get it in and work on it from there.

&gt; Source/WebKit2/ChangeLog:37
&gt; +        (QDesktopWebViewPrivate::contentSizeChanged):
&gt; +        (QDesktopWebViewPrivate::isActive):
&gt; +        (QDesktopWebViewPrivate::hasFocus):
&gt; +        (QDesktopWebViewPrivate::isVisible):
&gt; +        (QDesktopWebViewPrivate::startDrag):

This is a huge refac, I am not sure how valuable these method names &quot;(QDesktopWebViewPrivate::startDrag):&quot; are. I suggest just leaving the file names

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:31
&gt; +    , page(this, contextRef ? new QWKContext(contextRef) : defaultWKContext(), pageGroupRef)

I think we need to find out how to handle page groups properly at some point. He had issue with regard to that in webkit1 for ages.

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:36
&gt; +void QDesktopWebViewPrivate::setViewNeedsDisplay(const QRect&amp; invalidatedRect)

I like these to be called Area... like invalidatedArea. I can better understand that visually

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:47
&gt; +{ }

Is this the right style?

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:98
&gt; +#ifndef QT_NO_CURSOR

Didn&apos;t we want to get rid of these compile flags in Qt5? Maybe now is the time... the more ways to compile this, the more slightly incompatible varieties we will have and more to maintain as well.

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:110
&gt; +void QDesktopWebViewPrivate::loadDidSucceed()

no loadDidFail?

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:193
&gt; +void QDesktopWebView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

Why wrong * style here?

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:198
&gt; +bool QDesktopWebView::event(QEvent* e)

resizeEvent(QGraphicsSceneResizeEvent* event) uses event. Here we are using e, and from our branch I remember ev :-) maybe it is time to settle. Personally I opt for ev - it is short, and event might be used locally.

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:205
&gt; +WKPageRef QDesktopWebView::pageRef() const

Maybe we want to get rid of these? Isnt the C api already declared failure?

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:57
&gt;&gt; +    void urlChanged(const QUrl &amp;url);
&gt; 
&gt; The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

URL api would probably be nice to rethink  - it seems there were some issues in webkit1.

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:67
&gt; +    WKPageRef pageRef() const;

OK it is private... It might be possible to create a free function instead? Does it make sense?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:59
&gt; +QUrl QTouchWebPage::url() const

what about originalUrl? rethink url api? integration with security origin makes sense?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:69
&gt; +class FriendlyWidget : public QWidget

A small comment for why we need this would be nice

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:78
&gt; +        // find the view which has the focus:

:-P that is not a proper sentence :-) now please don&apos;t shoot me!

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:87
&gt; +        QList&lt;QGraphicsView*&gt; views = scene()-&gt;views();
&gt; +        const int viewCount = views.count();
&gt; +        QGraphicsView* focusedView = 0;
&gt; +        for (int i = 0; i &lt; viewCount; ++i) {
&gt; +            if (views[i]-&gt;hasFocus()) {
&gt; +                focusedView = views[i];
&gt; +                break;
&gt; +            }
&gt; +        }

This looks like code that I have seem in many places before (not necessarily in this patch)... refactor out?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:91
&gt; +            FriendlyWidget* friendlyWindow = static_cast&lt;FriendlyWidget*&gt;(window);

Lets create a toFriendlyWidget and add an ASSERT in it. Better to do that now that later

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:111
&gt; +bool QTouchWebPage::event(QEvent* e)

e!

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:129
&gt; +void QTouchWebPage::timerEvent(QTimerEvent *event)

event!

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:146
&gt; +    , m_isChangingScale(false)

I guess we will end up with a m_isChangingPosition as well... maybe isSuspended?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:183
&gt; +        m_scaleCommitTimer.start(0.1, q);

constants for these ?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:2
&gt; +#ifndef qtouchwebpage_h
&gt; +#define qtouchwebpage_h

misses copyright header

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:32
&gt; +    // FIXME: should not be public
&gt; +    virtual QRectF visibleRect() const;

Can this be fixed already? or what is blocking it?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:42
&gt; +    virtual void timerEvent(QTimerEvent *);

style

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:45
&gt; +    Q_SLOT void focusNextPrevChildCallback(bool next);

Any way to make this use Q_SLOTS?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:50
&gt; +    Q_PRIVATE_SLOT(d, void onScaleChanged())

void is supposed to be there?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:36
&gt; +    static QTouchWebPagePrivate* getPageViewPrivate(QTouchWebPage* view) { return view-&gt;d; }

That is very verbose. QTouchWebPagePrivate::obtainFrom(QTouchWebPage*) would suffice

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebview_p.h:37
&gt; +    QScopedPointer&lt;QTouchWebPage&gt; pageView;

What is the advantage of QScopedPointer instead of OwnPtr? I find it confusing to know when to use one of the other. Cant we stick with OwnPtr?

&gt; Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:26
&gt; +class tst_CommonViewTests : public QObject {

Great! I love tests!

&gt; Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:24
&gt; +WebViewAbstraction::WebViewAbstraction()

interesting test

&gt; Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:48
&gt; +    m_touchWebViewWindow.show();
&gt; +    m_desktopWebViewWindow.show();
&gt; +    QTest::qWaitForWindowShown(&amp;m_desktopWebViewWindow);

At some point it would be nice to test how we are sending events such as window.onblur/onfocus. Things that require a view implementation and might not be so easy to test with the layout tests

&gt; Source/WebKit2/UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:27
&gt; +    Q_OBJECT
&gt; +private slots:

I would add a newline between these

&gt; Source/WebKit2/UIProcess/API/qt/tests/testwindow.h:29
&gt; +/* TestWindow: Utility class to work ignore QGraphicsView details. */

I dont understand that english

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:55
&gt; +        // TODO

Use FIXME: I only search for FIXME:&apos;s ... we better all use the same

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.h:48
&gt; +void qt_wk_didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef, WKSameDocumentNavigationType, WKTypeRef, const void* clientInfo);
&gt; +
&gt; +// ui client

I wonder if we should split these in separate files... anyway, not now

&gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:71
&gt; +{
&gt; +    // We ignore the viewport definition on the Desktop.
&gt; +}

I wonder how long :-)

&gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:73
&gt; +bool QDesktopWebPageProxy::handleEvent(QEvent* e)

ev?

&gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:102
&gt; +    // For some reason mouse press results in mouse hover (which is

FIXME? or NOTE?

&gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:124
&gt; +    m_webPageProxy-&gt;handleMouseEvent(NativeWebMouseEvent(e, 1));

maybe add a /* mouse clicks */ infront of the 1

&gt; Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.cpp:33
&gt; +    // FIXME: add proper handling of viewport.
&gt; +    setResizesToContentsUsingLayoutSize(QSize(980, 980));

:-) I would love that

&gt; Source/WebKit2/UIProcess/qt/qwebpageproxy.h:21
&gt; +#ifndef qwebpageproxy_h

I still believe should should be called QtWebPageProxy. Why? SomethingQt.cpp is the Qt specific implementation of a Something.h. QSomething is a public Qt class. QtSomething is a Qt only specific class. As this is already in /qt/ maybe it should have no prefix at all?

Apart from this I dislike the mixture of Qt and WebCore types in this class... like when I add a method, should I return QRect or IntRect... this is going to confuse people

&gt; Source/WebKit2/UIProcess/qt/qwkcontext.cpp:87
&gt; +void QWKContext::setIconDatabasePath(const QString&amp; path)
&gt; +{
&gt; +    // FIXME: There is currently no way to disable the icon database once it&apos;s enabled.

Maybe such an api is too specialized anyway? I guess we need to do some handling of this by default and only let browsers change things

&gt; Source/WebKit2/UIProcess/qt/qwkcontext.h:38
&gt; +    // Bridge from the C API
&gt; +    QWKContext(WKContextRef contextRef, QObject* parent = 0);

Maybe we dont want that

&gt; Source/WebKit2/UIProcess/qt/qwkcontext.h:41
&gt; +    QIcon iconForPageURL(const QUrl&amp;) const;

URL? Url? inconsistent

&gt; Source/WebKit2/UIProcess/qt/touchviewinterface.cpp:21
&gt; +#include &quot;touchviewinterface.h&quot;

This is not a public header... why lowercase it - it is very unlike the rest of webkit

&gt; Source/WebKit2/UIProcess/qt/viewinterface.cpp:37
&gt; +        qWarning(&quot;Cannot support multiple views&quot;);

Multiple views are not supported. qFatal ?

&gt; Tools/MiniBrowser/qt/BrowserWindow.cpp:41
&gt; +// FIXME

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432474</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-05 16:39:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 99738 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99738&amp;action=review
&gt; 
&gt; Did you guys make a meta bug for all issues? things missing to me added that we currently have on trunk? hook up AC etc?

Good idea, I&apos;ll make it happen!

&gt; This is a huge refac, I am not sure how valuable these method names &quot;(QDesktopWebViewPrivate::startDrag):&quot; are. I suggest just leaving the file names

Fair point.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:31
&gt; &gt; +    , page(this, contextRef ? new QWKContext(contextRef) : defaultWKContext(), pageGroupRef)
&gt; 
&gt; I think we need to find out how to handle page groups properly at some point. He had issue with regard to that in webkit1 for ages.

While I do agree, this logic is carried over from the old WK2 API, and needed for WTR to work properly.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:36
&gt; &gt; +void QDesktopWebViewPrivate::setViewNeedsDisplay(const QRect&amp; invalidatedRect)
&gt; 
&gt; I like these to be called Area... like invalidatedArea. I can better understand that visually

I can live with that.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:47
&gt; &gt; +{ }
&gt; 
&gt; Is this the right style?

Doubtful. Will tweak.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:98
&gt; &gt; +#ifndef QT_NO_CURSOR
&gt; 
&gt; Didn&apos;t we want to get rid of these compile flags in Qt5? Maybe now is the time... the more ways to compile this, the more slightly incompatible varieties we will have and more to maintain as well.

I recall us discussing that last month.. not a bad idea IMO. Let&apos;s do it.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:110
&gt; &gt; +void QDesktopWebViewPrivate::loadDidSucceed()
&gt; 
&gt; no loadDidFail?

It&apos;s coming in a following patch. We were debating how to represent the error condition, and decided it would be better do do as a separate patch.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:193
&gt; &gt; +void QDesktopWebView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
&gt; 
&gt; Why wrong * style here?

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:198
&gt; &gt; +bool QDesktopWebView::event(QEvent* e)
&gt; 
&gt; resizeEvent(QGraphicsSceneResizeEvent* event) uses event. Here we are using e, and from our branch I remember ev :-) maybe it is time to settle. Personally I opt for ev - it is short, and event might be used locally.

Personally I dislike &apos;event&apos; because it shadows event(). &apos;ev&apos; feels like an abbreviation which WebKit doesn&apos;t use, but I&apos;m not too fussed about this. :)

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:205
&gt; &gt; +WKPageRef QDesktopWebView::pageRef() const
&gt; 
&gt; Maybe we want to get rid of these? Isnt the C api already declared failure?

I&apos;m not entirely sure. This is needed for WTR right now. We need to find a better solution either way, since we don&apos;t want to expose WK2 C types in our public headers.

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:57
&gt; &gt;&gt; +    void urlChanged(const QUrl &amp;url);
&gt; &gt; 
&gt; &gt; The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; URL api would probably be nice to rethink  - it seems there were some issues in webkit1.

Indeed. Follow-up material though.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h:67
&gt; &gt; +    WKPageRef pageRef() const;
&gt; 
&gt; OK it is private... It might be possible to create a free function instead? Does it make sense?

Maybe. Follow-up material.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:59
&gt; &gt; +QUrl QTouchWebPage::url() const
&gt; 
&gt; what about originalUrl? rethink url api? integration with security origin makes sense?

Let&apos;s rethink. Follow-up material.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:69
&gt; &gt; +class FriendlyWidget : public QWidget
&gt; 
&gt; A small comment for why we need this would be nice

Sure.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:78
&gt; &gt; +        // find the view which has the focus:
&gt; 
&gt; :-P that is not a proper sentence :-) now please don&apos;t shoot me!

Don&apos;t be such a Kenneth! :D

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:87
&gt; &gt; +        QList&lt;QGraphicsView*&gt; views = scene()-&gt;views();
&gt; &gt; +        const int viewCount = views.count();
&gt; &gt; +        QGraphicsView* focusedView = 0;
&gt; &gt; +        for (int i = 0; i &lt; viewCount; ++i) {
&gt; &gt; +            if (views[i]-&gt;hasFocus()) {
&gt; &gt; +                focusedView = views[i];
&gt; &gt; +                break;
&gt; &gt; +            }
&gt; &gt; +        }
&gt; 
&gt; This looks like code that I have seem in many places before (not necessarily in this patch)... refactor out?

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:91
&gt; &gt; +            FriendlyWidget* friendlyWindow = static_cast&lt;FriendlyWidget*&gt;(window);
&gt; 
&gt; Lets create a toFriendlyWidget and add an ASSERT in it. Better to do that now that later

Sure.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:111
&gt; &gt; +bool QTouchWebPage::event(QEvent* e)
&gt; 
&gt; e!

ev!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:129
&gt; &gt; +void QTouchWebPage::timerEvent(QTimerEvent *event)
&gt; 
&gt; event!

ev!!!!1111

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:146
&gt; &gt; +    , m_isChangingScale(false)
&gt; 
&gt; I guess we will end up with a m_isChangingPosition as well... maybe isSuspended?

I imagine this will change a lot with upstreaming of the WK2/mobile branch.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:183
&gt; &gt; +        m_scaleCommitTimer.start(0.1, q);
&gt; 
&gt; constants for these ?

Good point, will do.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:2
&gt; &gt; +#ifndef qtouchwebpage_h
&gt; &gt; +#define qtouchwebpage_h
&gt; 
&gt; misses copyright header

Oops!

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:32
&gt; &gt; +    // FIXME: should not be public
&gt; &gt; +    virtual QRectF visibleRect() const;
&gt; 
&gt; Can this be fixed already? or what is blocking it?

Not sure. Carried over verbatim.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebview_p.h:37
&gt; &gt; +    QScopedPointer&lt;QTouchWebPage&gt; pageView;
&gt; 
&gt; What is the advantage of QScopedPointer instead of OwnPtr? I find it confusing to know when to use one of the other. Cant we stick with OwnPtr?

I tend to agree. Benjamin?

&gt; &gt; Source/WebKit2/UIProcess/API/qt/tests/testwindow.h:29
&gt; &gt; +/* TestWindow: Utility class to work ignore QGraphicsView details. */
&gt; 
&gt; I dont understand that english

I&apos;ll danishize it for you.

&gt; &gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:55
&gt; &gt; +        // TODO
&gt; 
&gt; Use FIXME: I only search for FIXME:&apos;s ... we better all use the same

Yep.

&gt; &gt; Source/WebKit2/UIProcess/qt/ClientImpl.h:48
&gt; &gt; +void qt_wk_didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef, WKSameDocumentNavigationType, WKTypeRef, const void* clientInfo);
&gt; &gt; +
&gt; &gt; +// ui client
&gt; 
&gt; I wonder if we should split these in separate files... anyway, not now

Probably. Not now.

&gt; &gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:71
&gt; &gt; +{
&gt; &gt; +    // We ignore the viewport definition on the Desktop.
&gt; &gt; +}
&gt; 
&gt; I wonder how long :-)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:73
&gt; &gt; +bool QDesktopWebPageProxy::handleEvent(QEvent* e)
&gt; 
&gt; ev?

ev!

&gt; &gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:102
&gt; &gt; +    // For some reason mouse press results in mouse hover (which is
&gt; 
&gt; FIXME? or NOTE?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:124
&gt; &gt; +    m_webPageProxy-&gt;handleMouseEvent(NativeWebMouseEvent(e, 1));
&gt; 
&gt; maybe add a /* mouse clicks */ infront of the 1

Good idea.

&gt; &gt; Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.cpp:33
&gt; &gt; +    // FIXME: add proper handling of viewport.
&gt; &gt; +    setResizesToContentsUsingLayoutSize(QSize(980, 980));
&gt; 
&gt; :-) I would love that

It&apos;s coming!

&gt; &gt; Source/WebKit2/UIProcess/qt/qwebpageproxy.h:21
&gt; &gt; +#ifndef qwebpageproxy_h
&gt; 
&gt; I still believe should should be called QtWebPageProxy. Why? SomethingQt.cpp is the Qt specific implementation of a Something.h. QSomething is a public Qt class. QtSomething is a Qt only specific class. As this is already in /qt/ maybe it should have no prefix at all?

QtWebPageProxy works for me. I always disliked &quot;QNetworkReplyHandler&quot; too.

&gt; Apart from this I dislike the mixture of Qt and WebCore types in this class... like when I add a method, should I return QRect or IntRect... this is going to confuse people

Mmh. Yes. Given that it&apos;s a WebKit::PageClient subclass, we can&apos;t really avoid using WebCore types. Maybe we should use them wholesale. Follow-up material.

&gt; &gt; Source/WebKit2/UIProcess/qt/qwkcontext.cpp:87
&gt; &gt; +void QWKContext::setIconDatabasePath(const QString&amp; path)
&gt; &gt; +{
&gt; &gt; +    // FIXME: There is currently no way to disable the icon database once it&apos;s enabled.
&gt; 
&gt; Maybe such an api is too specialized anyway? I guess we need to do some handling of this by default and only let browsers change things

Aye. Hopefully we can do this nicely behind the scenes. Definitely follow-up material.

&gt; &gt; Source/WebKit2/UIProcess/qt/qwkcontext.h:38
&gt; &gt; +    // Bridge from the C API
&gt; &gt; +    QWKContext(WKContextRef contextRef, QObject* parent = 0);
&gt; 
&gt; Maybe we dont want that

Probably not.

&gt; &gt; Source/WebKit2/UIProcess/qt/qwkcontext.h:41
&gt; &gt; +    QIcon iconForPageURL(const QUrl&amp;) const;
&gt; 
&gt; URL? Url? inconsistent

True. Carried over from existing QWKContext implementation. And follow-up material. :)

&gt; &gt; Source/WebKit2/UIProcess/qt/touchviewinterface.cpp:21
&gt; &gt; +#include &quot;touchviewinterface.h&quot;
&gt; 
&gt; This is not a public header... why lowercase it - it is very unlike the rest of webkit

Good catch. Will tweak!

&gt; &gt; Source/WebKit2/UIProcess/qt/viewinterface.cpp:37
&gt; &gt; +        qWarning(&quot;Cannot support multiple views&quot;);
&gt; 
&gt; Multiple views are not supported. qFatal ?

Not sure... Let&apos;s discuss it separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432644</commentid>
    <comment_count>7</comment_count>
      <attachid>99738</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-07-05 23:45:10 -0700</bug_when>
    <thetext>Comment on attachment 99738
Proposed patch (let&apos;s start somewhere)

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

I think the concept is good. I suggest to fix the style issues (style ews bot reports some valid ones) and add the missing file before landing this...

&gt; Source/WebKit2/UIProcess/qt/touchviewinterface.h:30
&gt; +
&gt; +class TouchViewInterface : public ViewInterface
&gt; +{

Class names that don&apos;t have the Q prefix should be in a namespace. I&apos;d pick WebKit :)

&gt; Source/WebKit2/WebKit2.pro:248
&gt; +    UIProcess/qt/viewinterface.h \

I doubt this patch builds, because it seems that viewinterface.h is missing. Shows that the ews bots don&apos;t build qt-wk2 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432791</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-06 08:23:02 -0700</bug_when>
    <thetext>Committed r90458: &lt;http://trac.webkit.org/changeset/90458&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434524</commentid>
    <comment_count>9</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2011-07-09 13:26:44 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r90458: &lt;http://trac.webkit.org/changeset/90458&gt;

This patch reverted http://trac.webkit.org/changeset/90095 .
Was that intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434573</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-10 10:15:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Committed r90458: &lt;http://trac.webkit.org/changeset/90458&gt;
&gt; 
&gt; This patch reverted http://trac.webkit.org/changeset/90095 .
&gt; Was that intentional?

Nope. For some reason, 90095 was not on git. Let&apos;s fix that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99738</attachid>
            <date>2011-07-05 13:33:31 -0700</date>
            <delta_ts>2011-07-05 23:45:10 -0700</delta_ts>
            <desc>Proposed patch (let&apos;s start somewhere)</desc>
            <filename>bug-63950.diff</filename>
            <type>text/plain</type>
            <size>318089</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYTllNTE3Li4wOGJhZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzc5
IEBACisyMDExLTA3LTA1ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAg
ICAgICBbUXRdW1dLMl0gU3BsaXQgUXQgQVBJIGludG8gdHdvIGRpZmZlcmVudCB3ZWIgdmlld3Mg
KHRvdWNoIGFuZCBkZXNrdG9wKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjM5NTAKKworICAgICAgICBDby1hdXRob3JlZCB3aXRoIEJlbmphbWluIFBv
dWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdGhlIFFHcmFwaGljc1dLVmlldy9RV0tQYWdl
IG1lc3Mgd2l0aCBRRGVza3RvcFdlYlZpZXcgYW5kIFFUb3VjaFdlYlZpZXcuCisKKyAgICAgICAg
UURlc2t0b3BXZWJWaWV3IGlzIGEgdHJhZGl0aW9uYWwgd2ViIHZpZXcsIHNpbWlsYXIgdG8gUUdy
YXBoaWNzV2ViVmlldy4gSXQgd2lsbAorICAgICAgICB3aWxsIGhhdmUgdGhlIGV4cGVjdGVkICJk
ZXNrdG9wIiBiZWhhdmlvciBmb3IgdGhpbmdzIGxpa2Ugc3ViZnJhbWVzIGFuZAorICAgICAgICBm
aXhlZC1wb3NpdGlvbiBlbGVtZW50cy4KKworICAgICAgICBRVG91Y2hXZWJWaWV3IGlzIGludGVu
ZGVkIGZvciB1c2Ugb24gdG91Y2ggZGV2aWNlcywgYW5kIHdpbGwgbWFuYWdlIHRoZSB2aWV3cG9y
dCwKKyAgICAgICAgZ2VzdHVyZXMsIHRpbGVkIHJlbmRlcmluZywgYW5kIG90aGVyIHRoaW5ncyB0
aGF0IHRoZSB1c2VyIHNob3VsZCBuZXZlciBoYXZlIHRvCisgICAgICAgIHdvcnJ5IGFib3V0LiBJ
dCB3aWxsIHVzZSAicmVzaXplIHRvIGNvbnRlbnRzIiBhbmQgZnJhbWUgZmxhdHRlbmluZyBieSBk
ZWZhdWx0LgorCisgICAgICAgIEFQSS13aXNlLCB0aGUgYmlnZ2VzdCBkaWZmZXJlbmNlIGJldHdl
ZW4gdGhlIHR3byBpcyB0aGF0IFFUb3VjaFdlYlZpZXcgaXMgcmVhbGx5CisgICAgICAgIGEgdmll
d3BvcnQgdGhhdCBjb250YWlucyBhIFFUb3VjaFdlYlBhZ2UuIFRoZXNlIGFyZSBkZWNvdXBsZWQg
Zm9yIGZsZXhpYmlsaXR5IGluCisgICAgICAgIFVJIGRlc2lnbi4gVGhpcyBkZWNvdXBsaW5nIGlz
IG5vdCBuZWNlc3NhcnkgZm9yIHRoZSBkZXNrdG9wIHVzZS1jYXNlLCBhbmQgc28KKyAgICAgICAg
UURlc2t0b3BXZWJWaWV3IGlzIHRoZSBvbmx5IGNsYXNzIHdlIG5lZWQuCisKKyAgICAgICAgTXVj
aCBvZiB0aGUgUXQvV2ViS2l0MiBBUEkgaGFzIGJlZW4gcmVtb3ZlZCAoc25hcHNob3RzLCBoaXN0
b3J5LCBwcmVmZXJlbmNlcy4uKQorICAgICAgICBidXQgd2lsbCBiZSByZS1hZGRlZCBpbmNyZW1l
bnRhbGx5IGluIGEgd2F5IHRoYXQgZml0cyB0aGUgbmV3IEFQSSB2aXNpb24uCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cWRlc2t0b3B3ZWJ2aWV3LmNwcDogQWRkZWQuCisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2
YXRlOjpRRGVza3RvcFdlYlZpZXdQcml2YXRlKToKKyAgICAgICAgKFFEZXNrdG9wV2ViVmlld1By
aXZhdGU6OnNldFZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6ZHJhd2luZ0FyZWFTaXplKToKKyAgICAgICAgKFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6
OmNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpp
c0FjdGl2ZSk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpoYXNGb2N1cyk6Cisg
ICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjppc1Zpc2libGUpOgorICAgICAgICAoUURl
c2t0b3BXZWJWaWV3UHJpdmF0ZTo6c3RhcnREcmFnKToKKyAgICAgICAgKFFEZXNrdG9wV2ViVmll
d1ByaXZhdGU6OmRpZENoYW5nZVVybCk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRl
OjpkaWRDaGFuZ2VUaXRsZSk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRD
aGFuZ2VUb29sVGlwKToKKyAgICAgICAgKFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5n
ZVN0YXR1c1RleHQpOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdl
Q3Vyc29yKToKKyAgICAgICAgKFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmxvYWREaWRCZWdpbik6
CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpsb2FkRGlkU3VjY2VlZCk6CisgICAg
ICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MpOgorICAg
ICAgICAoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAg
KFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmhpZGVDb250ZXh0TWVudSk6CisgICAgICAgIChRRGVz
a3RvcFdlYlZpZXc6OlFEZXNrdG9wV2ViVmlldyk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXc6
OmluaXQpOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3Ojp+UURlc2t0b3BXZWJWaWV3KToKKyAg
ICAgICAgKFFEZXNrdG9wV2ViVmlldzo6bG9hZCk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXc6
OnVybCk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXc6OnRpdGxlKToKKyAgICAgICAgKFFEZXNr
dG9wV2ViVmlldzo6cmVzaXplRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3OjpwYWlu
dCk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXc6OmV2ZW50KToKKyAgICAgICAgKFFEZXNrdG9w
V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdl
YnZpZXcuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZp
ZXdfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3drdmll
dy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZ3JhcGhpY3N3a3Zp
ZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OlFUb3VjaFdlYlBhZ2UpOgorICAg
ICAgICAoUVRvdWNoV2ViUGFnZTo6flFUb3VjaFdlYlBhZ2UpOgorICAgICAgICAoUVRvdWNoV2Vi
UGFnZTo6cGFpbnQpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZTo6bG9hZCk6CisgICAgICAgIChR
VG91Y2hXZWJQYWdlOjp1cmwpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZTo6dGl0bGUpOgorICAg
ICAgICAoUVRvdWNoV2ViUGFnZTo6Zm9jdXNOZXh0UHJldkNoaWxkQ2FsbGJhY2spOgorICAgICAg
ICAoUVRvdWNoV2ViUGFnZTo6Zm9jdXNOZXh0UHJldkNoaWxkKToKKyAgICAgICAgKFFUb3VjaFdl
YlBhZ2U6OmV2ZW50KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OnRpbWVyRXZlbnQpOgorICAg
ICAgICAoUVRvdWNoV2ViUGFnZTo6cmVzaXplRXZlbnQpOgorICAgICAgICAoUVRvdWNoV2ViUGFn
ZVByaXZhdGU6OlFUb3VjaFdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6
OnZpc2libGVSZWN0KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpwcmVwYXJlU2Nh
bGVDaGFuZ2UpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6OmNvbW1pdFNjYWxlQ2hh
bmdlKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpvblNjYWxlQ2hhbmdlZCk6Cisg
ICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6c2V0UGFnZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvcXRvdWNod2VicGFnZV9wLmg6IEFkZGVkLgorICAgICAgICAoUVRvdWNoV2ViUGFnZVBy
aXZhdGU6OmdldFBhZ2VWaWV3UHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJ2aWV3LmNwcDogQWRkZWQuCisgICAgICAgIChRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6
UVRvdWNoV2ViVmlld1ByaXZhdGUpOgorICAgICAgICAoUVRvdWNoV2ViVmlldzo6UVRvdWNoV2Vi
Vmlldyk6CisgICAgICAgIChRVG91Y2hXZWJWaWV3Ojp+UVRvdWNoV2ViVmlldyk6CisgICAgICAg
IChRVG91Y2hXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnZpZXcuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2
aWV3X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy9jb21tb252
aWV3dGVzdHMucHJvOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2Nv
bW1vbnZpZXd0ZXN0cy90c3RfY29tbW9udmlld3Rlc3RzLmNwcDogQWRkZWQuCisgICAgICAgICh0
c3RfQ29tbW9uVmlld1Rlc3RzOjppbml0KToKKyAgICAgICAgKHRzdF9Db21tb25WaWV3VGVzdHM6
OmNsZWFudXApOgorICAgICAgICAodHN0X0NvbW1vblZpZXdUZXN0czo6YmFzZVVybCk6CisgICAg
ICAgICh0c3RfQ29tbW9uVmlld1Rlc3RzOjpsb2FkRW1wdHlVcmwpOgorICAgICAgICAodHN0X0Nv
bW1vblZpZXdUZXN0czo6bG9hZEVtcHR5UGFnZVZpZXdWaXNpYmxlKToKKyAgICAgICAgKHRzdF9D
b21tb25WaWV3VGVzdHM6OmxvYWRFbXB0eVBhZ2VWaWV3SGlkZGVuKToKKyAgICAgICAgKHRzdF9D
b21tb25WaWV3VGVzdHM6OnNob3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
Y29tbW9udmlld3Rlc3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViVmlld0Fic3RyYWN0aW9uOjpXZWJWaWV3QWJzdHJhY3Rpb24pOgorICAgICAgICAoV2ViVmll
d0Fic3RyYWN0aW9uOjpzaG93KToKKyAgICAgICAgKFdlYlZpZXdBYnN0cmFjdGlvbjo6aGlkZSk6
CisgICAgICAgIChXZWJWaWV3QWJzdHJhY3Rpb246OmxvYWQpOgorICAgICAgICAoV2ViVmlld0Fi
c3RyYWN0aW9uOjp1cmwpOgorICAgICAgICAoV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZpZXdM
b2FkU3RhcnRlZCk6CisgICAgICAgIChXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0b3BWaWV3TG9h
ZFN0YXJ0ZWQpOgorICAgICAgICAoV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZpZXdMb2FkU3Vj
Y2VlZGVkKToKKyAgICAgICAgKFdlYlZpZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFZpZXdMb2FkU3Vj
Y2VlZGVkKToKKyAgICAgICAgKFdlYlZpZXdBYnN0cmFjdGlvbjo6dG91Y2hXZWJWaWV3KToKKyAg
ICAgICAgKFdlYlZpZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFdlYlZpZXcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F3a3Bh
Z2UvdHN0X3F3a3BhZ2UuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRt
bC9hLmh0bTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2h0bWwv
Yi5odG06IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9odG1sL2Mu
aHRtOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9kLmh0
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vi
dmlldy9xZGVza3RvcHdlYnZpZXcucHJvOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xZ3JhcGhpY3N3a3ZpZXcvcWdyYXBoaWNzd2t2aWV3LnByby4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRl
c2t0b3B3ZWJ2aWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcXdrcGFnZS90c3RfcXdrcGFnZS5jcHAuCisgICAgICAgICh0c3RfUURlc2t0
b3BXZWJWaWV3Ojppbml0KToKKyAgICAgICAgKHRzdF9RRGVza3RvcFdlYlZpZXc6OmNsZWFudXAp
OgorICAgICAgICAodHN0X1FEZXNrdG9wV2ViVmlldzo6d2ViVmlldyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xZ3JhcGhpY3N3a3ZpZXcvdHN0X3FncmFwaGljc3drdmlldy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2
aWV3L3F0b3VjaHdlYnZpZXcucHJvOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xd2toaXN0b3J5L3F3a2hpc3RvcnkucHJvLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXRvdWNod2Vidmlldy90c3RfcXRvdWNod2Vidmlldy5jcHA6
IEFkZGVkLgorICAgICAgICAodHN0X1FUb3VjaFdlYlZpZXc6OnRzdF9RVG91Y2hXZWJWaWV3KToK
KyAgICAgICAgKHRzdF9RVG91Y2hXZWJWaWV3Ojppbml0KToKKyAgICAgICAgKHRzdF9RVG91Y2hX
ZWJWaWV3OjpjbGVhbnVwKToKKyAgICAgICAgKHRzdF9RVG91Y2hXZWJWaWV3Ojp3ZWJWaWV3KToK
KyAgICAgICAgKHRzdF9RVG91Y2hXZWJWaWV3OjphY2Nlc3NQYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3F3a2hpc3RvcnkvdHN0X3F3a2hpc3RvcnkuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXdrcGFnZS9xd2twYWdlLnBybzog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnBybzoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3R3aW5kb3cuaDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2luZG93OjpUZXN0V2luZG93KToKKyAgICAgICAgKFRlc3RXaW5kb3c6OnJlc2l6
ZUV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9DbGllbnRJbXBsLmNwcC4KKyAgICAgICAgKHRvUVdLQ29udGV4dCk6
CisgICAgICAgICh0b1FXZWJQYWdlUHJveHkpOgorICAgICAgICAobG9hZEZpbmlzaGVkKToKKyAg
ICAgICAgKHF0X3drX2RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOgorICAgICAgICAo
cXRfd2tfZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUp
OgorICAgICAgICAocXRfd2tfZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1l
KToKKyAgICAgICAgKHF0X3drX2RpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChxdF93
a19kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSk6CisgICAgICAgIChxdF93a19kaWRGaW5p
c2hMb2FkRm9yRnJhbWUpOgorICAgICAgICAocXRfd2tfZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JG
cmFtZSk6CisgICAgICAgIChxdF93a19kaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAgICAg
IChxdF93a19kaWRGaXJzdExheW91dEZvckZyYW1lKToKKyAgICAgICAgKHF0X3drX2RpZFJlbW92
ZUZyYW1lRnJvbUhpZXJhcmNoeSk6CisgICAgICAgIChxdF93a19kaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JGcmFtZSk6CisgICAgICAgIChxdF93a19kaWRTdGFydFByb2dyZXNzKToK
KyAgICAgICAgKHF0X3drX2RpZENoYW5nZVByb2dyZXNzKToKKyAgICAgICAgKHF0X3drX2RpZEZp
bmlzaFByb2dyZXNzKToKKyAgICAgICAgKHF0X3drX2RpZEJlY29tZVVucmVzcG9uc2l2ZSk6Cisg
ICAgICAgIChxdF93a19kaWRCZWNvbWVSZXNwb25zaXZlKToKKyAgICAgICAgKHF0X3drX2NyZWF0
ZU5ld1BhZ2UpOgorICAgICAgICAocXRfd2tfc2hvd1BhZ2UpOgorICAgICAgICAocXRfd2tfY2xv
c2UpOgorICAgICAgICAocXRfd2tfdGFrZUZvY3VzKToKKyAgICAgICAgKHF0X3drX3J1bkphdmFT
Y3JpcHRBbGVydCk6CisgICAgICAgIChxdF93a19zZXRTdGF0dXNUZXh0KToKKyAgICAgICAgKHF0
X3drX2RpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSk6CisgICAgICAgIChxdF93a19k
aWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChxdF93a19kaWRSZW1vdmVBbGxJY29u
cyk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvQ2xpZW50SW1wbC5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dl
YkNvbnRleHRNZW51UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OndlYkFjdGlvbkZvckNv
bnRleHRNZW51QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eVF0
OjpXZWJDb250ZXh0TWVudVByb3h5UXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVu
dVByb3h5UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlR
dDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94
eVF0OjpoaWRlQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVBy
b3h5UXQ6OmNyZWF0ZUNvbnRleHRNZW51KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2ViQ29u
dGV4dE1lbnVQcm94eVF0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L3FkZXNrdG9wd2VicGFn
ZXByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0aW9uKToK
KyAgICAgICAgKFFEZXNrdG9wV2ViUGFnZVByb3h5OjpRRGVza3RvcFdlYlBhZ2VQcm94eSk6Cisg
ICAgICAgIChRRGVza3RvcFdlYlBhZ2VQcm94eTo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSk6Cisg
ICAgICAgIChRRGVza3RvcFdlYlBhZ2VQcm94eTo6cGFpbnRDb250ZW50KToKKyAgICAgICAgKFFE
ZXNrdG9wV2ViUGFnZVByb3h5OjpzZXRWaWV3cG9ydEFyZ3VtZW50cyk6CisgICAgICAgIChRRGVz
a3RvcFdlYlBhZ2VQcm94eTo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJQYWdl
UHJveHk6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFFEZXNrdG9wV2ViUGFnZVBy
b3h5OjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJQYWdlUHJv
eHk6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFFEZXNrdG9wV2ViUGFnZVBy
b3h5OjpoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJQ
YWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJQYWdlUHJv
eHk6OmhhbmRsZUhvdmVyTW92ZUV2ZW50KToKKyAgICAgICAgKFFEZXNrdG9wV2ViUGFnZVByb3h5
OjpoYW5kbGVEcmFnRW50ZXJFdmVudCk6CisgICAgICAgIChRRGVza3RvcFdlYlBhZ2VQcm94eTo6
aGFuZGxlRHJhZ0xlYXZlRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJQYWdlUHJveHk6Omhh
bmRsZURyYWdNb3ZlRXZlbnQpOgorICAgICAgICAoUURlc2t0b3BXZWJQYWdlUHJveHk6OmhhbmRs
ZURyb3BFdmVudCk6CisgICAgICAgIChRRGVza3RvcFdlYlBhZ2VQcm94eTo6dGltZXJFdmVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L3FkZXNrdG9wd2VicGFnZXByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFFUb3VjaFdlYlBhZ2VQcm94eTo6UVRvdWNoV2ViUGFnZVByb3h5KToKKyAgICAgICAg
KFFUb3VjaFdlYlBhZ2VQcm94eTo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIChR
VG91Y2hXZWJQYWdlUHJveHk6OnBhaW50Q29udGVudCk6CisgICAgICAgIChRVG91Y2hXZWJQYWdl
UHJveHk6OnNldFZpZXdwb3J0QXJndW1lbnRzKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2VQcm94
eTo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByb3h5Ojp0b3VjaEV2ZW50
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAoUVRvdWNoV2ViUGFnZVByb3h5Ojp0b3VjaFZpZXdJbnRlcmZhY2UpOgorICAgICAg
ICAoUVRvdWNoV2ViUGFnZVByb3h5OjpwYWdlVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L3F3ZWJwYWdlcHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKGRlZmF1bHRXS0NvbnRleHQpOgor
ICAgICAgICAoY29udGV4dE1lbnVBY3Rpb25Gb3JXZWJBY3Rpb24pOgorICAgICAgICAoZHJhZ09w
ZXJhdGlvblRvRHJvcEFjdGlvbnMpOgorICAgICAgICAoZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlv
bik6CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpRV2ViUGFnZVByb3h5KToKKyAgICAgICAgKFFX
ZWJQYWdlUHJveHk6OmluaXQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6flFXZWJQYWdlUHJv
eHkpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoUVdl
YlBhZ2VQcm94eTo6aGFuZGxlS2V5UHJlc3NFdmVudCk6CisgICAgICAgIChRV2ViUGFnZVByb3h5
OjpoYW5kbGVLZXlSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6aGFuZGxl
Rm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmhhbmRsZUZvY3VzT3V0RXZl
bnQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFFXZWJQ
YWdlUHJveHk6OnNldFZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6
ZGlzcGxheVZpZXcpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6c2Nyb2xsVmlldyk6CisgICAg
ICAgIChRV2ViUGFnZVByb3h5Ojp2aWV3U2l6ZSk6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojpp
c1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6aXNWaWV3Rm9jdXNl
ZCk6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFFX
ZWJQYWdlUHJveHk6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6
OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmRpZENoYW5n
ZUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojp0b29sVGlwQ2hhbmdlZCk6
CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kKToKKyAgICAgICAg
KFFXZWJQYWdlUHJveHk6OmNsZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFFXZWJQYWdl
UHJveHk6OmNhblVuZG9SZWRvKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmV4ZWN1dGVVbmRv
UmVkbyk6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZSk6Cisg
ICAgICAgIChRV2ViUGFnZVByb3h5OjpzY3JlZW5Ub1dpbmRvdyk6CisgICAgICAgIChRV2ViUGFn
ZVByb3h5Ojp3aW5kb3dUb1NjcmVlbik6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojpjb252ZXJ0
VG9Vc2VyU3BhY2UpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6c2VsZWN0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojpkb25lV2l0aEtleUV2ZW50KToKKyAgICAgICAgKFFX
ZWJQYWdlUHJveHk6OmNyZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKFFXZWJQYWdlUHJv
eHk6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6c2V0
RmluZEluZGljYXRvcik6CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9y
TWFpbkZyYW1lKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExvYWRpbmdEYXRh
Rm9yQ3VzdG9tUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6Zmxhc2hC
YWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OnBhZ2VSZWYpOgor
ICAgICAgICAoUVdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlVXJsKToKKyAgICAgICAgKFFXZWJQYWdl
UHJveHk6OmRpZENoYW5nZVRpdGxlKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmRpZENoYW5n
ZVN0YXR1c1RleHQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6c2hvd0NvbnRleHRNZW51KToK
KyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmhpZGVDb250ZXh0TWVudSk6CisgICAgICAgIChRV2Vi
UGFnZVByb3h5Ojpsb2FkRGlkQmVnaW4pOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6bG9hZERp
ZFN1Y2NlZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlTG9hZFByb2dyZXNz
KToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OnBhaW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJv
eHk6OnVwZGF0ZUFjdGlvbik6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojp1cGRhdGVOYXZpZ2F0
aW9uQWN0aW9ucyk6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojp3ZWJBY3Rpb25UcmlnZ2VyZWQp
OgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6ZGlkUmVsYXVuY2hQcm9jZXNzKToKKyAgICAgICAg
KFFXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChRV2ViUGFnZVByb3h5
OjpzZXRBY3R1YWxWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6
OnByZWZlcmVuY2VzKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OnNldENyZWF0ZU5ld1BhZ2VG
dW5jdGlvbik6CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpzZXRDdXN0b21Vc2VyQWdlbnQpOgor
ICAgICAgICAoUVdlYlBhZ2VQcm94eTo6Y3VzdG9tVXNlckFnZW50KToKKyAgICAgICAgKFFXZWJQ
YWdlUHJveHk6OmxvYWQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6dXJsKToKKyAgICAgICAg
KFFXZWJQYWdlUHJveHk6OnRpdGxlKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OnNldERyYXdp
bmdBcmVhU2l6ZSk6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojp0ZXh0Wm9vbUZhY3Rvcik6Cisg
ICAgICAgIChRV2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9vbUZhY3Rvcik6CisgICAgICAgIChRV2Vi
UGFnZVByb3h5OjpwYWdlWm9vbUZhY3Rvcik6CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpzZXRQ
YWdlWm9vbUZhY3Rvcik6CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpzZXRQYWdlQW5kVGV4dFpv
b21GYWN0b3JzKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6Omhpc3RvcnkpOgorICAgICAgICAo
UVdlYlBhZ2VQcm94eTo6c2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUpOgorICAg
ICAgICAoUVdlYlBhZ2VQcm94eTo6dHJpZ2dlckFjdGlvbik6CisgICAgICAgIChRV2ViUGFnZVBy
b3h5OjphY3Rpb24pOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6ZmluZFpvb21hYmxlQXJlYUZv
clBvaW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OmRpZEZpbmRab29tYWJsZUFyZWEpOgor
ICAgICAgICAoUVdlYlBhZ2VQcm94eTo6c3RhcnREcmFnKToKKyAgICAgICAgKFFXZWJQYWdlUHJv
eHk6OnZpZXdwb3J0VmlzaWJsZVJlY3QpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6aXNDb25u
ZWN0ZWRUb0VuZ2luZSk6CisgICAgICAgIChRV2ViUGFnZVByb3h5OjpzZXRQYWdlSXNWaXNpYmxl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvcXdlYnBhZ2Vwcm94eS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaC4KKyAgICAgICAgKFFX
ZWJQYWdlUHJveHk6OnBhZ2VDbG9zZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcm94eTo6Y3VzdG9t
UmVwcmVzZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6OnNldEN1
c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6CisgICAgICAgIChRV2ViUGFnZVByb3h5Ojpk
aWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFFXZWJQYWdlUHJveHk6
OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFFXZWJQYWdlUHJv
eHk6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24pOgorICAgICAgICAo
UVdlYlBhZ2VQcm94eTo6dXNlclNwYWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoUVdlYlBhZ2VQ
cm94eTo6Y3JlYXRlTmV3UGFnZUZ1bmN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvcXdr
Y29udGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3F3a2NvbnRleHQuY3BwLgorICAgICAgICAoaW5pdGlhbGl6ZVBsYXRmb3JtU3RyYXRlZ2llc0lm
TmVlZGVkKToKKyAgICAgICAgKFFXS0NvbnRleHRQcml2YXRlOjpRV0tDb250ZXh0UHJpdmF0ZSk6
CisgICAgICAgIChRV0tDb250ZXh0UHJpdmF0ZTo6flFXS0NvbnRleHRQcml2YXRlKToKKyAgICAg
ICAgKFFXS0NvbnRleHQ6OlFXS0NvbnRleHQpOgorICAgICAgICAoUVdLQ29udGV4dDo6flFXS0Nv
bnRleHQpOgorICAgICAgICAoUVdLQ29udGV4dDo6c2V0SWNvbkRhdGFiYXNlUGF0aCk6CisgICAg
ICAgIChRV0tDb250ZXh0OjppY29uRm9yUGFnZVVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L3F3a2NvbnRleHQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXdrY29udGV4dC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9xd2tjb250ZXh0X3AuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrY29udGV4dF9w
LmguCisgICAgICAgICogVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2toaXN0b3J5LmNwcC4KKyAgICAgICAg
KFFXS0hpc3RvcnlJdGVtUHJpdmF0ZTo6UVdLSGlzdG9yeUl0ZW1Qcml2YXRlKToKKyAgICAgICAg
KFFXS0hpc3RvcnlJdGVtUHJpdmF0ZTo6flFXS0hpc3RvcnlJdGVtUHJpdmF0ZSk6CisgICAgICAg
IChRV0tIaXN0b3J5SXRlbTo6UVdLSGlzdG9yeUl0ZW0pOgorICAgICAgICAoUVdLSGlzdG9yeUl0
ZW06OlFXS0hpc3RvcnlJdGVtOjpvcGVyYXRvcj0pOgorICAgICAgICAoUVdLSGlzdG9yeUl0ZW06
On5RV0tIaXN0b3J5SXRlbSk6CisgICAgICAgIChRV0tIaXN0b3J5SXRlbTo6dGl0bGUpOgorICAg
ICAgICAoUVdLSGlzdG9yeUl0ZW06OnVybCk6CisgICAgICAgIChRV0tIaXN0b3J5UHJpdmF0ZTo6
UVdLSGlzdG9yeVByaXZhdGUpOgorICAgICAgICAoUVdLSGlzdG9yeVByaXZhdGU6OmNyZWF0ZUhp
c3RvcnkpOgorICAgICAgICAoUVdLSGlzdG9yeVByaXZhdGU6On5RV0tIaXN0b3J5UHJpdmF0ZSk6
CisgICAgICAgIChRV0tIaXN0b3J5OjpRV0tIaXN0b3J5KToKKyAgICAgICAgKFFXS0hpc3Rvcnk6
On5RV0tIaXN0b3J5KToKKyAgICAgICAgKFFXS0hpc3Rvcnk6OmJhY2tMaXN0Q291bnQpOgorICAg
ICAgICAoUVdLSGlzdG9yeTo6Zm9yd2FyZExpc3RDb3VudCk6CisgICAgICAgIChRV0tIaXN0b3J5
Ojpjb3VudCk6CisgICAgICAgIChRV0tIaXN0b3J5OjpjdXJyZW50SXRlbSk6CisgICAgICAgIChR
V0tIaXN0b3J5OjpiYWNrSXRlbSk6CisgICAgICAgIChRV0tIaXN0b3J5Ojpmb3J3YXJkSXRlbSk6
CisgICAgICAgIChRV0tIaXN0b3J5OjppdGVtQXQpOgorICAgICAgICAoUVdLSGlzdG9yeTo6Z29U
b0l0ZW1BdCk6CisgICAgICAgIChRV0tIaXN0b3J5OjpiYWNrSXRlbXMpOgorICAgICAgICAoUVdL
SGlzdG9yeTo6Zm9yd2FyZEl0ZW1zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvcXdraGlzdG9y
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2toaXN0
b3J5LmguCisgICAgICAgICogVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnlfcC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2toaXN0b3J5X3AuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twcmVmZXJlbmNlcy5jcHAuCisgICAgICAgIChR
V0tQcmVmZXJlbmNlc1ByaXZhdGU6OmNyZWF0ZVByZWZlcmVuY2VzKToKKyAgICAgICAgKFFXS1By
ZWZlcmVuY2VzUHJpdmF0ZTo6Y3JlYXRlU2hhcmVkUHJlZmVyZW5jZXMpOgorICAgICAgICAoUVdL
UHJlZmVyZW5jZXM6OnNoYXJlZFByZWZlcmVuY2VzKToKKyAgICAgICAgKFFXS1ByZWZlcmVuY2Vz
OjpRV0tQcmVmZXJlbmNlcyk6CisgICAgICAgIChRV0tQcmVmZXJlbmNlczo6flFXS1ByZWZlcmVu
Y2VzKToKKyAgICAgICAgKFFXS1ByZWZlcmVuY2VzOjpzZXRGb250RmFtaWx5KToKKyAgICAgICAg
KFFXS1ByZWZlcmVuY2VzOjpmb250RmFtaWx5KToKKyAgICAgICAgKFFXS1ByZWZlcmVuY2VzOjp0
ZXN0QXR0cmlidXRlKToKKyAgICAgICAgKFFXS1ByZWZlcmVuY2VzOjpzZXRBdHRyaWJ1dGUpOgor
ICAgICAgICAoUVdLUHJlZmVyZW5jZXM6OnNldEZvbnRTaXplKToKKyAgICAgICAgKFFXS1ByZWZl
cmVuY2VzOjpmb250U2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L3F3a3ByZWZlcmVuY2Vz
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3ByZWZl
cmVuY2VzLmguCisgICAgICAgICogVUlQcm9jZXNzL3F0L3F3a3ByZWZlcmVuY2VzX3AuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcHJlZmVyZW5jZXNf
cC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC90b3VjaHZpZXdpbnRlcmZhY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRvdWNoVmlld0ludGVyZmFjZTo6VG91Y2hWaWV3SW50ZXJmYWNlKToKKyAg
ICAgICAgKFRvdWNoVmlld0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAgICAg
IChUb3VjaFZpZXdJbnRlcmZhY2U6OmRyYXdpbmdBcmVhU2l6ZSk6CisgICAgICAgIChUb3VjaFZp
ZXdJbnRlcmZhY2U6OmNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChUb3VjaFZpZXdJbnRl
cmZhY2U6OmlzQWN0aXZlKToKKyAgICAgICAgKFRvdWNoVmlld0ludGVyZmFjZTo6aGFzRm9jdXMp
OgorICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNlOjppc1Zpc2libGUpOgorICAgICAgICAoVG91
Y2hWaWV3SW50ZXJmYWNlOjpzdGFydERyYWcpOgorICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNl
OjpkaWRDaGFuZ2VVcmwpOgorICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VU
aXRsZSk6CisgICAgICAgIChUb3VjaFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVRvb2xUaXApOgor
ICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VTdGF0dXNUZXh0KToKKyAgICAg
ICAgKFRvdWNoVmlld0ludGVyZmFjZTo6ZGlkQ2hhbmdlQ3Vyc29yKToKKyAgICAgICAgKFRvdWNo
Vmlld0ludGVyZmFjZTo6bG9hZERpZEJlZ2luKToKKyAgICAgICAgKFRvdWNoVmlld0ludGVyZmFj
ZTo6bG9hZERpZFN1Y2NlZWQpOgorICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRDaGFu
Z2VMb2FkUHJvZ3Jlc3MpOgorICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNlOjpzaG93Q29udGV4
dE1lbnUpOgorICAgICAgICAoVG91Y2hWaWV3SW50ZXJmYWNlOjpoaWRlQ29udGV4dE1lbnUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC90b3VjaHZpZXdpbnRlcmZhY2UuaDogQWRkZWQuCisgICAg
ICAgIChUb3VjaFZpZXdJbnRlcmZhY2U6OnBhZ2VWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvdmlld2ludGVyZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoVmlld0ludGVyZmFjZTo6b3du
ZXJXaWRnZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC92aWV3aW50ZXJmYWNlLmg6IEFkZGVk
LgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYktpdDJBUEkucHJpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorCiAyMDExLTA3LTA1ICBW
c2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IFNob3cgY29udGVudCBmb3IgcGx1Z2luIHJlcXVlc3RzIGluIG5ldHdvcmsgcGFuZWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L0NsaWVudEltcGwu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9DbGllbnRJbXBsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY4MDdmNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L0NsaWVudEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjA4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDbGllbnRJbXBsLmgiCi0KLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0j
aW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgotI2luY2x1ZGUg
IldLVVJMUXQuaCIKLSNpbmNsdWRlIDxxd2tjb250ZXh0Lmg+Ci0jaW5jbHVkZSA8cXdrcGFnZS5o
PgotI2luY2x1ZGUgPHF3a3BhZ2VfcC5oPgotI2luY2x1ZGUgPFdLRnJhbWUuaD4KLSNpbmNsdWRl
IDxXS1R5cGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotc3RhdGljIFFXS0NvbnRl
eHQqIHRvUVdLQ29udGV4dChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIGlmIChjbGll
bnRJbmZvKQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRV0tDb250ZXh0Kj4oY29u
c3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMg
UVdLUGFnZSogdG9RV0tQYWdlKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgaWYgKGNs
aWVudEluZm8pCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFFXS1BhZ2UqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxvYWRGaW5pc2hlZChXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
LCBib29sIG9rKQotewotICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGVtaXQgdG9RV0tQYWdlKGNsaWVudEluZm8pLT5sb2FkRmluaXNoZWQo
b2spOwotICAgIFFXS1BhZ2VQcml2YXRlOjpnZXQodG9RV0tQYWdlKGNsaWVudEluZm8pKS0+dXBk
YXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKLX0KLQotdm9pZCBxdF93a19kaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVS
ZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1l
SXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1pdCB0b1FXS1BhZ2Uo
Y2xpZW50SW5mbyktPmxvYWRTdGFydGVkKCk7Ci0gICAgUVdLUGFnZVByaXZhdGU6OmdldCh0b1FX
S1BhZ2UoY2xpZW50SW5mbykpLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwotfQotCi12b2lk
IHF0X3drX2RpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci19Ci0KLXZvaWQgcXRfd2tfZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1l
LCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgbG9hZEZpbmlzaGVkKGZyYW1lLCBjbGllbnRJbmZvLCBmYWxzZSk7Ci19
Ci0KLXZvaWQgcXRfd2tfZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0Zy
YW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm47
Ci0gICAgV2ViRnJhbWVQcm94eSogd2tmcmFtZSA9IHRvSW1wbChmcmFtZSk7Ci0gICAgUVN0cmlu
ZyB1cmxTdHIod2tmcmFtZS0+dXJsKCkpOwotICAgIFFVcmwgcVVybCA9IHVybFN0cjsKLSAgICBl
bWl0IHRvUVdLUGFnZShjbGllbnRJbmZvKS0+dXJsQ2hhbmdlZChxVXJsKTsKLSAgICBRV0tQYWdl
UHJpdmF0ZTo6Z2V0KHRvUVdLUGFnZShjbGllbnRJbmZvKSktPnVwZGF0ZU5hdmlnYXRpb25BY3Rp
b25zKCk7Ci19Ci0KLXZvaWQgcXRfd2tfZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tQ
YWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IChidWcgIzQ0OTM0
KQotfQotCi12b2lkIHF0X3drX2RpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQotewotICAgIGxvYWRGaW5pc2hlZChmcmFtZSwgY2xpZW50SW5mbywgdHJ1ZSk7Ci19Ci0K
LXZvaWQgcXRfd2tfZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIGxvYWRGaW5pc2hlZChmcmFtZSwgY2xpZW50
SW5mbywgZmFsc2UpOwotfQotCi12b2lkIHF0X3drX2RpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdL
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBl
UmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIGlmICghV0tGcmFt
ZUlzTWFpbkZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFFTdHJpbmcgcVRpdGxl
ID0gV0tTdHJpbmdDb3B5UVN0cmluZyh0aXRsZSk7Ci0gICAgZW1pdCB0b1FXS1BhZ2UoY2xpZW50
SW5mbyktPnRpdGxlQ2hhbmdlZChxVGl0bGUpOwotfQotCi12b2lkIHF0X3drX2RpZEZpcnN0TGF5
b3V0Rm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBpZiAoIVdLRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBlbWl0IHRvUVdLUGFnZShjbGll
bnRJbmZvKS0+aW5pdGlhbExheW91dENvbXBsZXRlZCgpOwotfQotCi12b2lkIHF0X3drX2RpZFJl
bW92ZUZyYW1lRnJvbUhpZXJhcmNoeShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgKGJ1ZyAjNDY0MzIpCi19Ci0KLXZvaWQgcXRfd2tfZGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJh
bWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBp
ZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBG
SVhNRTogZW1pdCB0b1dLVmlldyhjbGllbnRJbmZvKS0+aW5pdGlhbExheW91dENvbXBsZXRlZCgp
OwotfQotCi12b2lkIHF0X3drX2RpZFN0YXJ0UHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgZW1pdCB0b1FXS1BhZ2UoY2xpZW50SW5mbyktPmxv
YWRQcm9ncmVzcygwKTsKLX0KLQotdm9pZCBxdF93a19kaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VS
ZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBlbWl0IHRvUVdLUGFnZShj
bGllbnRJbmZvKS0+bG9hZFByb2dyZXNzKFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2Up
ICogMTAwKTsKLX0KLQotdm9pZCBxdF93a19kaWRGaW5pc2hQcm9ncmVzcyhXS1BhZ2VSZWYgcGFn
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBlbWl0IHRvUVdLUGFnZShjbGllbnRJ
bmZvKS0+bG9hZFByb2dyZXNzKDEwMCk7Ci19Ci0KLXZvaWQgcXRfd2tfZGlkQmVjb21lVW5yZXNw
b25zaXZlKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotfQotCi12
b2lkIHF0X3drX2RpZEJlY29tZVJlc3BvbnNpdmUoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCi17Ci19Ci0KLVdLUGFnZVJlZiBxdF93a19jcmVhdGVOZXdQYWdlKFdLUGFn
ZVJlZiBwYWdlLCBXS0RpY3Rpb25hcnlSZWYgZmVhdHVyZXMsIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24gbW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgUVdLUGFnZSogd2tQYWdlID0gdG9RV0tQYWdlKGNsaWVudEluZm8pOwot
ICAgIFFXS1BhZ2VQcml2YXRlKiBkID0gUVdLUGFnZVByaXZhdGU6OmdldCh3a1BhZ2UpOwotICAg
IFFXS1BhZ2U6OkNyZWF0ZU5ld1BhZ2VGbiBjcmVhdGVOZXdQYWdlRm4gPSBkLT5jcmVhdGVOZXdQ
YWdlRm47Ci0KLSAgICBpZiAoIWNyZWF0ZU5ld1BhZ2VGbikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoUVdLUGFnZSogbmV3UGFnZSA9IGNyZWF0ZU5ld1BhZ2VGbih3a1BhZ2UpKSB7Ci0g
ICAgICAgIFdLUmV0YWluKG5ld1BhZ2UtPnBhZ2VSZWYoKSk7Ci0gICAgICAgIHJldHVybiBuZXdQ
YWdlLT5wYWdlUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcXRfd2tf
c2hvd1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci19Ci0K
LXZvaWQgcXRfd2tfY2xvc2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgZW1pdCB0b1FXS1BhZ2UoY2xpZW50SW5mbyktPndpbmRvd0Nsb3NlUmVxdWVzdGVk
KCk7Ci19Ci0KLXZvaWQgcXRfd2tfdGFrZUZvY3VzKFdLUGFnZVJlZiBwYWdlLCBXS0ZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKLXsKLSAgICBlbWl0IHRv
UVdLUGFnZShjbGllbnRJbmZvKS0+Zm9jdXNOZXh0UHJldkNoaWxkKGRpcmVjdGlvbiA9PSBrV0tG
b2N1c0RpcmVjdGlvbkZvcndhcmQpOwotfQotCi12b2lkIHF0X3drX3J1bkphdmFTY3JpcHRBbGVy
dChXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgYWxlcnRUZXh0LCBXS0ZyYW1lUmVmIGZyYW1l
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotfQotCi12b2lkIHF0X3drX3NldFN0YXR1c1Rl
eHQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRleHQsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCi17Ci0gICAgUVN0cmluZyBxVGV4dCA9IFdLU3RyaW5nQ29weVFTdHJpbmcodGV4dCk7Ci0g
ICAgZW1pdCB0b1FXS1BhZ2UoY2xpZW50SW5mbyktPnN0YXR1c0Jhck1lc3NhZ2UocVRleHQpOwot
fQotCi12b2lkIHF0X3drX2RpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShXS1BhZ2VS
ZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0
eXBlLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAg
V2ViRnJhbWVQcm94eSogd2tmcmFtZSA9IHRvSW1wbChmcmFtZSk7Ci0gICAgUVN0cmluZyB1cmxT
dHIod2tmcmFtZS0+dXJsKCkpOwotICAgIFFVcmwgcVVybCA9IHVybFN0cjsKLSAgICBlbWl0IHRv
UVdLUGFnZShjbGllbnRJbmZvKS0+dXJsQ2hhbmdlZChxVXJsKTsKLSAgICBRV0tQYWdlUHJpdmF0
ZTo6Z2V0KHRvUVdLUGFnZShjbGllbnRJbmZvKSktPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7
Ci19Ci0KLXZvaWQgcXRfd2tfZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VS
ZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQotewotICAgIFFVcmwgcVVybCA9IFdLVVJMQ29weVFVcmwocGFnZVVSTCk7Ci0gICAgZW1pdCB0
b1FXS0NvbnRleHQoY2xpZW50SW5mbyktPmljb25DaGFuZ2VkRm9yUGFnZVVSTChxVXJsKTsKLX0K
LQotdm9pZCBxdF93a19kaWRSZW1vdmVBbGxJY29ucyhXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0
YWJhc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L0NsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvQ2xpZW50SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjMmRiMzVhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
Q2xpZW50SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2lmbmRlZiBEZWZhdWx0Q2xpZW50Q2FsbGJhY2tzUXRfaAotI2RlZmluZSBEZWZh
dWx0Q2xpZW50Q2FsbGJhY2tzUXRfaAotCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vLyBsb2FkZXIgY2xp
ZW50Ci12b2lkIHF0X3drX2RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVm
LCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdm9pZCBx
dF93a19kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShX
S1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
Ci12b2lkIHF0X3drX2RpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1Bh
Z2VSZWYsIFdLRnJhbWVSZWYsIFdLRXJyb3JSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci12b2lkIHF0X3drX2RpZENvbW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdL
RnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIHF0X3dr
X2RpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tU
eXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQgcXRfd2tfZGlkRmluaXNoTG9h
ZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKLXZvaWQgcXRfd2tfZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1Bh
Z2VSZWYsIFdLRnJhbWVSZWYsIFdLRXJyb3JSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci12b2lkIHF0X3drX2RpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLUGFnZVJlZiwg
V0tTdHJpbmdSZWYgdGl0bGUsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci12b2lkIHF0X3drX2RpZEZpcnN0TGF5b3V0Rm9yRnJhbWUoV0tQYWdlUmVmLCBX
S0ZyYW1lUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdm9pZCBxdF93
a19kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJh
bWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIHF0X3drX2Rp
ZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIHF0X3drX2RpZFN0YXJ0UHJvZ3Jlc3Mo
V0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQgcXRfd2tfZGlkQ2hhbmdl
UHJvZ3Jlc3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQgcXRfd2tf
ZGlkRmluaXNoUHJvZ3Jlc3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXZv
aWQgcXRfd2tfZGlkQmVjb21lVW5yZXNwb25zaXZlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci12b2lkIHF0X3drX2RpZEJlY29tZVJlc3BvbnNpdmUoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQgcXRfd2tfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlv
bkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9u
VHlwZSwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLQotLy8gdWkgY2xpZW50
Ci1XS1BhZ2VSZWYgcXRfd2tfY3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYgcGFnZSwgV0tEaWN0aW9u
YXJ5UmVmIGZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNl
QnV0dG9uIG1vdXNlQnV0dG9uLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXZvaWQgcXRfd2tf
c2hvd1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdm9pZCBx
dF93a19jbG9zZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci12b2lk
IHF0X3drX3Rha2VGb2N1cyhXS1BhZ2VSZWYgcGFnZSwgV0tGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdm9pZCBxdF93a19ydW5KYXZhU2NyaXB0QWxl
cnQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJlZiBmcmFt
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIHF0X3drX3NldFN0YXR1c1RleHQoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRleHQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwot
Ci0vLyBJY29uRGF0YWJhc2UgY2xpZW50Lgotdm9pZCBxdF93a19kaWRDaGFuZ2VJY29uRm9yUGFn
ZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Owotdm9pZCBxdF93a19kaWRSZW1vdmVBbGxJY29ucyhXS0ljb25EYXRhYmFzZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNl
bmRpZiAvKiBEZWZhdWx0Q2xpZW50Q2FsbGJhY2tzUXRfaCAqLwotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAppbmRleCA1N2E1NDU4Li4wZmQ2ZjAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3LmgKQEAgLTIwLDEwICsyMCw4IEBACiAjaWZu
ZGVmIFdLVmlld19oCiAjZGVmaW5lIFdLVmlld19oCiAKLSNpbmNsdWRlIDxXZWJLaXQyL3FncmFw
aGljc3drdmlldy5oPgotI2luY2x1ZGUgPFdlYktpdDIvcXdrY29udGV4dC5oPgotI2luY2x1ZGUg
PFdlYktpdDIvcXdraGlzdG9yeS5oPgotI2luY2x1ZGUgPFdlYktpdDIvcXdrcGFnZS5oPgotI2lu
Y2x1ZGUgPFdlYktpdDIvcXdrcHJlZmVyZW5jZXMuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL3FkZXNr
dG9wd2Vidmlldy5oPgorI2luY2x1ZGUgPFdlYktpdDIvcXRvdWNod2Vidmlldy5oPgorI2luY2x1
ZGUgPFdlYktpdDIvcXRvdWNod2VicGFnZS5oPgogCiAjZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNmNmVjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcu
Y3BwCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgInFkZXNr
dG9wd2Vidmlldy5oIgorI2luY2x1ZGUgInFkZXNrdG9wd2Vidmlld19wLmgiCisjaW5jbHVkZSAi
cXdrY29udGV4dC5oIgorCisjaW5jbHVkZSA8UUN1cnNvcj4KKyNpbmNsdWRlIDxRR3JhcGhpY3NT
Y2VuZVJlc2l6ZUV2ZW50PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbT4KKwor
UURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6UURlc2t0b3BXZWJWaWV3UHJpdmF0ZShRRGVza3RvcFdl
YlZpZXcqIHEsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCisgICAgOiBxKHEpCisgICAgLCBwYWdlKHRoaXMsIGNvbnRleHRSZWYgPyBuZXcgUVdL
Q29udGV4dChjb250ZXh0UmVmKSA6IGRlZmF1bHRXS0NvbnRleHQoKSwgcGFnZUdyb3VwUmVmKQor
eworfQorCisKK3ZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6c2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBRUmVjdCYgaW52YWxpZGF0ZWRSZWN0KQoreworICAgIHEtPnVwZGF0ZShpbnZhbGlk
YXRlZFJlY3QpOworfQorCitRU2l6ZSBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkcmF3aW5nQXJl
YVNpemUoKQoreworICAgIHJldHVybiBxLT5zaXplKCkudG9TaXplKCk7Cit9CisKK3ZvaWQgUURl
c2t0b3BXZWJWaWV3UHJpdmF0ZTo6Y29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplJikKK3sg
fQorCitib29sIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmlzQWN0aXZlKCkKK3sKKyAgICByZXR1
cm4gcS0+aXNBY3RpdmUoKTsKK30KKworYm9vbCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpoYXNG
b2N1cygpCit7CisgICAgcmV0dXJuIHEtPmhhc0ZvY3VzKCk7Cit9CisKK2Jvb2wgUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZTo6aXNWaXNpYmxlKCkKK3sKKyAgICByZXR1cm4gcS0+aXNWaXNpYmxlKCk7
Cit9CisKK3ZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6c3RhcnREcmFnKFF0OjpEcm9wQWN0
aW9ucyBzdXBwb3J0ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1hZ2UsIFFNaW1l
RGF0YSogZGF0YSwgUVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3NpdGlv
biwgUXQ6OkRyb3BBY3Rpb24qIGRyb3BBY3Rpb24pCit7CisgICAgUVdpZGdldCogd2lkZ2V0ID0g
Vmlld0ludGVyZmFjZTo6b3duZXJXaWRnZXQocSk7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAg
IHJldHVybjsKKworICAgIFFEcmFnKiBkcmFnID0gbmV3IFFEcmFnKHdpZGdldCk7CisgICAgZHJh
Zy0+c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShkcmFnSW1hZ2UpKTsKKyAgICBkcmFnLT5z
ZXRNaW1lRGF0YShkYXRhKTsKKyAgICAqZHJvcEFjdGlvbiA9IGRyYWctPmV4ZWMoc3VwcG9ydGVk
RHJvcEFjdGlvbnMpOworICAgICpnbG9iYWxQb3NpdGlvbiA9IFFDdXJzb3I6OnBvcygpOworICAg
ICpjbGllbnRQb3NpdGlvbiA9IHdpZGdldC0+bWFwRnJvbUdsb2JhbCgqZ2xvYmFsUG9zaXRpb24p
OworfQorCit2b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVVybChjb25zdCBR
VXJsJiB1cmwpCit7CisgICAgZW1pdCBxLT51cmxDaGFuZ2VkKHVybCk7Cit9CisKK3ZvaWQgUURl
c2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlVGl0bGUoY29uc3QgUVN0cmluZyYgbmV3VGl0
bGUpCit7CisgICAgZW1pdCBxLT50aXRsZUNoYW5nZWQobmV3VGl0bGUpOworfQorCit2b2lkIFFE
ZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0cmluZyYgbmV3
VG9vbFRpcCkKK3sKKyAgICBxLT5zZXRUb29sVGlwKG5ld1Rvb2xUaXApOworfQorCit2b2lkIFFE
ZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYg
bmV3TWVzc2FnZSkKK3sKKyAgICBlbWl0IHEtPnN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2VkKG5ld01l
c3NhZ2UpOworfQorCisjaWZuZGVmIFFUX05PX0NVUlNPUgordm9pZCBRRGVza3RvcFdlYlZpZXdQ
cml2YXRlOjpkaWRDaGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYgbmV3Q3Vyc29yKQoreworICAg
IHEtPnNldEN1cnNvcihuZXdDdXJzb3IpOworfQorI2VuZGlmCisKK3ZvaWQgUURlc2t0b3BXZWJW
aWV3UHJpdmF0ZTo6bG9hZERpZEJlZ2luKCkKK3sKKyAgICBlbWl0IHEtPmxvYWRTdGFydGVkKCk7
Cit9CisKK3ZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6bG9hZERpZFN1Y2NlZWQoKQorewor
ICAgIGVtaXQgcS0+bG9hZFN1Y2NlZWRlZCgpOworfQorCit2b2lkIFFEZXNrdG9wV2ViVmlld1By
aXZhdGU6OmRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQgcGVyY2VudGFnZUxvYWRlZCkKK3sKKyAg
ICBlbWl0IHEtPmxvYWRQcm9ncmVzcyhwZXJjZW50YWdlTG9hZGVkKTsKK30KKwordm9pZCBRRGVz
a3RvcFdlYlZpZXdQcml2YXRlOjpzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+
IG1lbnUpCit7CisgICAgLy8gUmVtb3ZlIHRoZSBhY3RpdmUgbWVudSBpbiBjYXNlIHRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHR3aWNlLgorICAgIGlmIChhY3RpdmVNZW51KQorICAgICAgICBhY3Rp
dmVNZW51LT5oaWRlKCk7CisKKyAgICBpZiAobWVudS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBWaWV3SW50ZXJmYWNlOjpvd25lcldpZGdldChx
KTsKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYWN0aXZlTWVudSA9
IG1lbnU7CisKKyAgICBtZW51LT5zZXRQYXJlbnQod2lkZ2V0LCBtZW51LT53aW5kb3dGbGFncygp
KTsKKyAgICBtZW51LT5leGVjKHdpZGdldC0+bWFwVG9HbG9iYWwobWVudS0+cG9zKCkpKTsKKyAg
ICAvLyBUaGUgbGFzdCBmdW5jdGlvbiB0byBnZXQgb3V0IG9mIGV4ZWMoKSBjbGVhciB0aGUgbG9j
YWwgY29weS4KKyAgICBpZiAoYWN0aXZlTWVudSA9PSBtZW51KQorICAgICAgICBhY3RpdmVNZW51
LmNsZWFyKCk7Cit9CisKK3ZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6aGlkZUNvbnRleHRN
ZW51KCkKK3sKKyAgICBpZiAoYWN0aXZlTWVudSkKKyAgICAgICAgYWN0aXZlTWVudS0+aGlkZSgp
OworfQorCitRRGVza3RvcFdlYlZpZXc6OlFEZXNrdG9wV2ViVmlldygpCisgICAgOiBkKG5ldyBR
RGVza3RvcFdlYlZpZXdQcml2YXRlKHRoaXMpKQoreworICAgIGluaXQoKTsKK30KKworUURlc2t0
b3BXZWJWaWV3OjpRRGVza3RvcFdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKKyAgICA6IGQobmV3IFFEZXNrdG9wV2ViVmlld1ByaXZh
dGUodGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSkKK3sKKyAgICBpbml0KCk7Cit9CisK
K3ZvaWQgUURlc2t0b3BXZWJWaWV3Ojppbml0KCkKK3sKKyAgICBzZXRGb2N1c1BvbGljeShRdDo6
U3Ryb25nRm9jdXMpOworICAgIHNldEFjY2VwdEhvdmVyRXZlbnRzKHRydWUpOworICAgIHNldEFj
Y2VwdERyb3BzKHRydWUpOworfQorCitRRGVza3RvcFdlYlZpZXc6On5RRGVza3RvcFdlYlZpZXco
KQoreworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFEZXNrdG9wV2ViVmlldzo6bG9hZChjb25z
dCBRVXJsICZ1cmwpCit7CisgICAgZC0+cGFnZS5sb2FkKHVybCk7Cit9CisKK1FVcmwgUURlc2t0
b3BXZWJWaWV3Ojp1cmwoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wYWdlLnVybCgpOworfQor
CitRU3RyaW5nIFFEZXNrdG9wV2ViVmlldzo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBk
LT5wYWdlLnRpdGxlKCk7Cit9CisKK3ZvaWQgUURlc2t0b3BXZWJWaWV3OjpyZXNpemVFdmVudChR
R3JhcGhpY3NTY2VuZVJlc2l6ZUV2ZW50KiBldmVudCkKK3sKKyAgICBkLT5wYWdlLnNldERyYXdp
bmdBcmVhU2l6ZShldmVudC0+bmV3U2l6ZSgpLnRvU2l6ZSgpKTsKKyAgICBRR3JhcGhpY3NXaWRn
ZXQ6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRRGVza3RvcFdlYlZpZXc6OnBhaW50
KFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0gKm9wdGlv
biwgUVdpZGdldCAqd2lkZ2V0KQoreworICAgIGQtPnBhZ2UucGFpbnQocGFpbnRlciwgb3B0aW9u
LT5leHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOworfQorCitib29sIFFEZXNrdG9wV2ViVmll
dzo6ZXZlbnQoUUV2ZW50KiBlKQoreworICAgIGlmIChkLT5wYWdlLmhhbmRsZUV2ZW50KGUpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUUdyYXBoaWNzV2lkZ2V0OjpldmVudChl
KTsKK30KKworV0tQYWdlUmVmIFFEZXNrdG9wV2ViVmlldzo6cGFnZVJlZigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGQtPnBhZ2UucGFnZVJlZigpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTBhZDA0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgcWRlc2t0b3B3ZWJ2aWV3X2gKKyNkZWZpbmUgcWRlc2t0b3B3
ZWJ2aWV3X2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgorCisjaW5jbHVkZSA8UUdyYXBoaWNzV2lkZ2V0PgorI2luY2x1ZGUgPFFVcmw+
CisKK2NsYXNzIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU7CisKK25hbWVzcGFjZSBXVFIgeworICAg
IGNsYXNzIFdlYlZpZXc7Cit9CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFEZXNrdG9wV2ViVmll
dyA6IHB1YmxpYyBRR3JhcGhpY3NXaWRnZXQgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJU
WShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUgTk9USUZZIHRpdGxlQ2hhbmdlZCkKKyAgICBRX1BS
T1BFUlRZKFFVcmwgdXJsIFJFQUQgdXJsIE5PVElGWSB1cmxDaGFuZ2VkKQorCitwdWJsaWM6Cisg
ICAgUURlc2t0b3BXZWJWaWV3KCk7CisgICAgflFEZXNrdG9wV2ViVmlldygpOworCisgICAgUVVy
bCB1cmwoKSBjb25zdDsKKyAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NM
T1RTOgorICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCAmdXJsKTsKKworUV9TSUdOQUxTOgorICAg
IHZvaWQgdGl0bGVDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIHN0YXR1
c0Jhck1lc3NhZ2VDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9h
ZFN0YXJ0ZWQoKTsKKyAgICB2b2lkIGxvYWRTdWNjZWVkZWQoKTsKKyAgICB2b2lkIGxvYWRQcm9n
cmVzcyhpbnQgcHJvZ3Jlc3MpOworICAgIHZvaWQgdXJsQ2hhbmdlZChjb25zdCBRVXJsICZ1cmwp
OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXNpemVFdmVudChRR3JhcGhpY3NTY2VuZVJlc2l6
ZUV2ZW50ICpldmVudCk7CisgICAgdm9pZCBwYWludChRUGFpbnRlciAqcGFpbnRlciwgY29uc3Qg
UVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtICpvcHRpb24sIFFXaWRnZXQgKndpZGdldCk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisKK3ByaXZhdGU6CisgICAgUURlc2t0b3BX
ZWJWaWV3KFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYpOworICAgIFdLUGFnZVJlZiBwYWdl
UmVmKCkgY29uc3Q7CisKKyAgICB2b2lkIGluaXQoKTsKKworICAgIGZyaWVuZCBjbGFzcyBXVFI6
OldlYlZpZXc7CisgICAgZnJpZW5kIGNsYXNzIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU7CisgICAg
UURlc2t0b3BXZWJWaWV3UHJpdmF0ZSAqZDsKK307CisjZW5kaWYgLyogcWRlc2t0b3B3ZWJ2aWV3
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0
b3B3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3
ZWJ2aWV3X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg0ZjAxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3Rv
cHdlYnZpZXdfcC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IHFkZXNrdG9wd2Vidmlld19wX2gKKyNkZWZpbmUgcWRlc2t0b3B3ZWJ2aWV3X3BfaAorCisjaW5j
bHVkZSAicWRlc2t0b3B3ZWJwYWdlcHJveHkuaCIKKyNpbmNsdWRlICJ2aWV3aW50ZXJmYWNlLmgi
CisKK2NsYXNzIFFEZXNrdG9wV2ViVmlldzsKKworY2xhc3MgUURlc2t0b3BXZWJWaWV3UHJpdmF0
ZSA6IHB1YmxpYyBWaWV3SW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZShRRGVza3RvcFdlYlZpZXcqLCBXS0NvbnRleHRSZWYgPSAwLCBXS1BhZ2VHcm91cFJl
ZiA9IDApOworCisgICAgc3RhdGljIFFEZXNrdG9wV2ViVmlldyogY3JlYXRlVmlld1dpdGhQYWdl
R3JvdXAoV0tQYWdlR3JvdXBSZWYpOworCisgICAgUURlc2t0b3BXZWJWaWV3KiBxOworICAgIFFE
ZXNrdG9wV2ViUGFnZVByb3h5IHBhZ2U7CisKK3ByaXZhdGU6CisgICAgLyogSW1wbGVtZW50YXRp
b24gb2YgVmlld0ludGVyZmFjZSAqLworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNw
bGF5KGNvbnN0IFFSZWN0Jik7CisKKyAgICB2aXJ0dWFsIFFTaXplIGRyYXdpbmdBcmVhU2l6ZSgp
OworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpOworICAgIHZpcnR1YWwgYm9vbCBoYXNGb2N1cygp
OworICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFy
dERyYWcoUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rpb25zLCBjb25zdCBRSW1hZ2Um
IGRyYWdJbWFnZSwgUU1pbWVEYXRhKiBkYXRhLCBRUG9pbnQqIGNsaWVudFBvc2l0aW9uLCBRUG9p
bnQqIGdsb2JhbFBvc2l0aW9uLCBRdDo6RHJvcEFjdGlvbiogZHJvcEFjdGlvbik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlVGl0bGUoY29uc3QgUVN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VUb29sVGlwKGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU3Rh
dHVzVGV4dChjb25zdCBRU3RyaW5nJik7CisjaWZuZGVmIFFUX05PX0NVUlNPUgorICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYpOworI2VuZGlmCisgICAgdmly
dHVhbCB2b2lkIGxvYWREaWRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkU3VjY2Vl
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50KTsKKworICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7CisKKyAgICBRU2hhcmVkUG9pbnRlcjxR
TWVudT4gYWN0aXZlTWVudTsKK307CisKKyNlbmRpZiAvKiBxZGVza3RvcHdlYnZpZXdfcF9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3dr
dmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3drdmll
dy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNTkxZDAuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZ3JhcGhpY3N3a3ZpZXcuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicWdyYXBoaWNzd2t2aWV3LmgiCi0KLSNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiUnVuTG9vcC5oIgotI2luY2x1ZGUgIlRpbGVkRHJhd2luZ0Fy
ZWFQcm94eS5oIgotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgInF3a3BhZ2UuaCIK
LSNpbmNsdWRlICJxd2twYWdlX3AuaCIKLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVk
ZSA8UUN1cnNvcj4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+Ci0jaW5jbHVk
ZSA8UUdyYXBoaWNzVmlldz4KLSNpbmNsdWRlIDxRTWVudT4KLSNpbmNsdWRlIDxRUGFpbnRlcj4K
LSNpbmNsdWRlIDxRU2Nyb2xsQmFyPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRl
bT4KLSNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPFF0RGVidWc+Ci0jaW5jbHVkZSA8V2ViS2l0
Mi9XS1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1zdHJ1Y3QgUUdyYXBoaWNzV0tWaWV3UHJpdmF0ZSB7Ci0gICAgUUdy
YXBoaWNzV0tWaWV3UHJpdmF0ZShRR3JhcGhpY3NXS1ZpZXcqIHZpZXcpOwotICAgIFdLUGFnZVJl
ZiBwYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gcGFnZS0+cGFnZVJlZigpOyB9Ci0KLSAgICB2b2lk
IG9uVG9vbFRpcENoYW5nZWQoY29uc3QgUVN0cmluZyYpOwotICAgIHZvaWQgb25TY2FsZUNoYW5n
ZWQoKTsKLSAgICB2b2lkIGNvbW1pdFNjYWxlKCk7Ci0KLSAgICBRR3JhcGhpY3NXS1ZpZXcqIHE7
Ci0gICAgUVdLUGFnZSogcGFnZTsKLSAgICBRU2hhcmVkUG9pbnRlcjxRTWVudT4gYWN0aXZlTWVu
dTsKLSAgICBSdW5Mb29wOjpUaW1lcjxRR3JhcGhpY3NXS1ZpZXdQcml2YXRlPiBtX3NjYWxlQ29t
bWl0VGltZXI7Ci0gICAgYm9vbCBtX2lzQ2hhbmdpbmdTY2FsZTsKLX07Ci0KLVFHcmFwaGljc1dL
Vmlldzo6UUdyYXBoaWNzV0tWaWV3KFFXS0NvbnRleHQqIGNvbnRleHQsIEJhY2tpbmdTdG9yZVR5
cGUgYmFja2luZ1N0b3JlVHlwZSwgUUdyYXBoaWNzSXRlbSogcGFyZW50KQotICAgIDogUUdyYXBo
aWNzV2lkZ2V0KHBhcmVudCkKLSAgICAsIGQobmV3IFFHcmFwaGljc1dLVmlld1ByaXZhdGUodGhp
cykpCi17Ci0gICAgZC0+cGFnZSA9IG5ldyBRV0tQYWdlKGNvbnRleHQpOwotICAgIGluaXQoYmFj
a2luZ1N0b3JlVHlwZSk7Ci19Ci0KLVFHcmFwaGljc1dLVmlldzo6UUdyYXBoaWNzV0tWaWV3KFFX
S0NvbnRleHQqIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgQmFja2luZ1N0
b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlLCBRR3JhcGhpY3NJdGVtKiBwYXJlbnQpCi0gICAgOiBR
R3JhcGhpY3NXaWRnZXQocGFyZW50KQotICAgICwgZChuZXcgUUdyYXBoaWNzV0tWaWV3UHJpdmF0
ZSh0aGlzKSkKLXsKLSAgICBkLT5wYWdlID0gbmV3IFFXS1BhZ2UoY29udGV4dCwgcGFnZUdyb3Vw
UmVmKTsKLSAgICBpbml0KGJhY2tpbmdTdG9yZVR5cGUpOwotfQotCi12b2lkIFFHcmFwaGljc1dL
Vmlldzo6aW5pdChCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCi17Ci0gICAgc2V0
Rm9jdXNQb2xpY3koUXQ6OlN0cm9uZ0ZvY3VzKTsKLSAgICBzZXRBY2NlcHRIb3ZlckV2ZW50cyh0
cnVlKTsKLSAgICBzZXRBY2NlcHREcm9wcyh0cnVlKTsKLQotI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQotICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IFRpbGVkKQotICAgICAgICBj
b25uZWN0KHRoaXMsIFNJR05BTChzY2FsZUNoYW5nZWQoKSksIHRoaXMsIFNMT1Qob25TY2FsZUNo
YW5nZWQoKSkpOwotI2VuZGlmCi0KLSAgICBkLT5wYWdlLT5kLT5pbml0KHRoaXMsIGJhY2tpbmdT
dG9yZVR5cGUpOwotICAgIGNvbm5lY3QoZC0+cGFnZSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3Ry
aW5nKSksIHRoaXMsIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpKTsKLSAgICBjb25uZWN0
KGQtPnBhZ2UsIFNJR05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0lHTkFMKGxvYWRTdGFydGVk
KCkpKTsKLSAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpLCB0
aGlzLCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSk7Ci0gICAgY29ubmVjdChkLT5wYWdlLCBT
SUdOQUwobG9hZFByb2dyZXNzKGludCkpLCB0aGlzLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkp
KTsKLSAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChpbml0aWFsTGF5b3V0Q29tcGxldGVkKCkp
LCB0aGlzLCBTSUdOQUwoaW5pdGlhbExheW91dENvbXBsZXRlZCgpKSk7Ci0gICAgY29ubmVjdChk
LT5wYWdlLCBTSUdOQUwodXJsQ2hhbmdlZChjb25zdCBRVXJsJikpLCB0aGlzLCBTSUdOQUwodXJs
Q2hhbmdlZChjb25zdCBRVXJsJikpKTsKLSAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChjdXJz
b3JDaGFuZ2VkKGNvbnN0IFFDdXJzb3ImKSksIHRoaXMsIFNMT1QodXBkYXRlQ3Vyc29yKGNvbnN0
IFFDdXJzb3ImKSkpOwotICAgIGNvbm5lY3QoZC0+cGFnZSwgU0lHTkFMKGZvY3VzTmV4dFByZXZD
aGlsZChib29sKSksIHRoaXMsIFNMT1QoZm9jdXNOZXh0UHJldkNoaWxkQ2FsbGJhY2soYm9vbCkp
KTsKLSAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBv
aW50ZXI8UU1lbnU+KSksIHRoaXMsIFNMT1Qoc2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVy
PFFNZW51PikpKTsKLSAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTCh0b29sVGlwQ2hhbmdlZChR
U3RyaW5nKSksIHRoaXMsIFNMT1Qob25Ub29sVGlwQ2hhbmdlZChRU3RyaW5nKSkpOwotfQotCi1R
R3JhcGhpY3NXS1ZpZXc6On5RR3JhcGhpY3NXS1ZpZXcoKQotewotICAgIGRlbGV0ZSBkLT5wYWdl
OwotICAgIGRlbGV0ZSBkOwotfQotCi1RV0tQYWdlKiBRR3JhcGhpY3NXS1ZpZXc6OnBhZ2UoKSBj
b25zdAotewotICAgIHJldHVybiBkLT5wYWdlOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6
cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSog
b3B0aW9uLCBRV2lkZ2V0KikKLXsKLSAgICBwYWdlKCktPmQtPnBhaW50KHBhaW50ZXIsIG9wdGlv
bi0+ZXhwb3NlZFJlY3QudG9BbGlnbmVkUmVjdCgpKTsKLX0KLQotdm9pZCBRR3JhcGhpY3NXS1Zp
ZXc6OnNldEdlb21ldHJ5KGNvbnN0IFFSZWN0RiYgcmVjdCkKLXsKLSAgICBRU2l6ZUYgb2xkU2l6
ZSA9IGdlb21ldHJ5KCkuc2l6ZSgpOwotICAgIFFHcmFwaGljc1dpZGdldDo6c2V0R2VvbWV0cnko
cmVjdCk7Ci0gICAgaWYgKGdlb21ldHJ5KCkuc2l6ZSgpID09IG9sZFNpemUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIE5PVEU6IGNhbGwgZ2VvbWV0cnkoKSBhcyBzZXRHZW9tZXRyeSBlbnN1
cmVzIHRoYXQKLSAgICAvLyB0aGUgZ2VvbWV0cnkgaXMgd2l0aGluIGxlZ2FsIGJvdW5kcyAobWlu
aW11bVNpemUsIG1heGltdW1TaXplKQotICAgIHBhZ2UoKS0+c2V0Vmlld3BvcnRTaXplKGdlb21l
dHJ5KCkuc2l6ZSgpLnRvU2l6ZSgpKTsKLX0KLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6OmxvYWQo
Y29uc3QgUVVybCYgdXJsKQotewotICAgIHBhZ2UoKS0+bG9hZCh1cmwpOwotfQotCi12b2lkIFFH
cmFwaGljc1dLVmlldzo6c2V0VXJsKGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBwYWdlKCktPnNl
dFVybCh1cmwpOwotfQotCi1RVXJsIFFHcmFwaGljc1dLVmlldzo6dXJsKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcGFnZSgpLT51cmwoKTsKLX0KLQotUVN0cmluZyBRR3JhcGhpY3NXS1ZpZXc6OnRp
dGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLT50aXRsZSgpOwotfQotCi12b2lkIFFH
cmFwaGljc1dLVmlldzo6dHJpZ2dlclBhZ2VBY3Rpb24oUVdLUGFnZTo6V2ViQWN0aW9uIGFjdGlv
biwgYm9vbCBjaGVja2VkKQotewotICAgIHBhZ2UoKS0+dHJpZ2dlckFjdGlvbihhY3Rpb24sIGNo
ZWNrZWQpOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6YmFjaygpCi17Ci0gICAgcGFnZSgp
LT50cmlnZ2VyQWN0aW9uKFFXS1BhZ2U6OkJhY2spOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmll
dzo6Zm9yd2FyZCgpCi17Ci0gICAgcGFnZSgpLT50cmlnZ2VyQWN0aW9uKFFXS1BhZ2U6OkZvcndh
cmQpOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6cmVsb2FkKCkKLXsKLSAgICBwYWdlKCkt
PnRyaWdnZXJBY3Rpb24oUVdLUGFnZTo6UmVsb2FkKTsKLX0KLQotdm9pZCBRR3JhcGhpY3NXS1Zp
ZXc6OnN0b3AoKQotewotICAgIHBhZ2UoKS0+dHJpZ2dlckFjdGlvbihRV0tQYWdlOjpTdG9wKTsK
LX0KLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6OnVwZGF0ZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBj
dXJzb3IpCi17Ci0gICAgc2V0Q3Vyc29yKGN1cnNvcik7Ci19Ci0KLWNsYXNzIEZyaWVuZGx5V2lk
Z2V0IDogcHVibGljIFFXaWRnZXQKLXsKLXB1YmxpYzoKLSAgICBib29sIGZvY3VzTmV4dFByZXZD
aGlsZChib29sIG5leHQpOwotfTsKLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6OmZvY3VzTmV4dFBy
ZXZDaGlsZENhbGxiYWNrKGJvb2wgbmV4dCkKLXsKLSAgICBpZiAoaGFzRm9jdXMoKSkgewotICAg
ICAgICAvLyBmaW5kIHRoZSB2aWV3IHdoaWNoIGhhcyB0aGUgZm9jdXM6Ci0gICAgICAgIFFMaXN0
PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHNjZW5lKCktPnZpZXdzKCk7Ci0gICAgICAgIGNvbnN0
IGludCB2aWV3Q291bnQgPSB2aWV3cy5jb3VudCgpOwotICAgICAgICBRR3JhcGhpY3NWaWV3KiBm
b2N1c2VkVmlldyA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0NvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIGlmICh2aWV3c1tpXS0+aGFzRm9jdXMoKSkgewotICAgICAgICAg
ICAgICAgIGZvY3VzZWRWaWV3ID0gdmlld3NbaV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm9jdXNlZFZpZXcpIHsKLSAg
ICAgICAgICAgIFFXaWRnZXQqIHdpbmRvdyA9IGZvY3VzZWRWaWV3LT53aW5kb3coKTsKLSAgICAg
ICAgICAgIEZyaWVuZGx5V2lkZ2V0KiBmcmllbmRseVdpbmRvdyA9IHN0YXRpY19jYXN0PEZyaWVu
ZGx5V2lkZ2V0Kj4od2luZG93KTsKLSAgICAgICAgICAgIGZyaWVuZGx5V2luZG93LT5mb2N1c05l
eHRQcmV2Q2hpbGQobmV4dCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8qISBccmVpbXAKLSov
Ci1ib29sIFFHcmFwaGljc1dLVmlldzo6Zm9jdXNOZXh0UHJldkNoaWxkKGJvb2wgbmV4dCkKLXsK
LSAgICBRS2V5RXZlbnQgZXYoUUV2ZW50OjpLZXlQcmVzcywgUXQ6OktleV9UYWIsIFF0OjpLZXli
b2FyZE1vZGlmaWVycyhuZXh0ID8gUXQ6Ok5vTW9kaWZpZXIgOiBRdDo6U2hpZnRNb2RpZmllcikp
OwotICAgIHBhZ2UoKS0+ZC0+a2V5UHJlc3NFdmVudCgmZXYpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi0vKiEgXHJlaW1wCi0qLwotUVZhcmlhbnQgUUdyYXBoaWNzV0tWaWV3OjppdGVtQ2hhbmdl
KEdyYXBoaWNzSXRlbUNoYW5nZSBjaGFuZ2UsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKLXsKLSAg
ICAvLyBIZXJlIHNvIHRoYXQgaXQgY2FuIGJlIHJlaW1wbGVtZW50ZWQgd2l0aG91dCBicmVha2lu
ZyBBQkkuCi0gICAgcmV0dXJuIFFHcmFwaGljc1dpZGdldDo6aXRlbUNoYW5nZShjaGFuZ2UsIHZh
bHVlKTsKLX0KLQotLyohIFxyZWltcAotKi8KLWJvb2wgUUdyYXBoaWNzV0tWaWV3OjpldmVudChR
RXZlbnQqIGV2ZW50KQotewotICAgIFFFdmVudDo6VHlwZSBldmVudFR5cGUgPSBldmVudC0+dHlw
ZSgpOwotICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVn
aW46Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVw
ZGF0ZToKLSAgICAgICAgdG91Y2hFdmVudChzdGF0aWNfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgUUV2ZW50OjpTaG93OgotICAgICAg
ICBwYWdlKCktPmQtPnBhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFBhZ2VJc1Zpc2libGUodHJ1ZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpIaWRlOgotICAgICAgICBwYWdlKCkt
PmQtPnBhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFBhZ2VJc1Zpc2libGUoZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBI
ZXJlIHNvIHRoYXQgaXQgY2FuIGJlIHJlaW1wbGVtZW50ZWQgd2l0aG91dCBicmVha2luZyBBQkku
Ci0gICAgcmV0dXJuIFFHcmFwaGljc1dpZGdldDo6ZXZlbnQoZXZlbnQpOwotfQotCi0vKiEgXHJl
aW1wCi0qLwotUVNpemVGIFFHcmFwaGljc1dLVmlldzo6c2l6ZUhpbnQoUXQ6OlNpemVIaW50IHdo
aWNoLCBjb25zdCBRU2l6ZUYmIGNvbnN0cmFpbnQpIGNvbnN0Ci17Ci0gICAgaWYgKHdoaWNoID09
IFF0OjpQcmVmZXJyZWRTaXplKQotICAgICAgICByZXR1cm4gUVNpemVGKDgwMCwgNjAwKTsKLSAg
ICByZXR1cm4gUUdyYXBoaWNzV2lkZ2V0OjpzaXplSGludCh3aGljaCwgY29uc3RyYWludCk7Ci19
Ci0KLS8qISBccmVpbXAKLSovCi1RVmFyaWFudCBRR3JhcGhpY3NXS1ZpZXc6OmlucHV0TWV0aG9k
UXVlcnkoUXQ6OklucHV0TWV0aG9kUXVlcnkgcXVlcnkpIGNvbnN0Ci17Ci0gICAgLy8gaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIFFWYXJpYW50KCk7Ci19Ci0KLS8qISBccmVpbXAKLSovCi12b2lkIFFH
cmFwaGljc1dLVmlldzo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQotewotICAgIHBhZ2Uo
KS0+ZC0+a2V5UHJlc3NFdmVudChldik7Ci19Ci0KLS8qISBccmVpbXAKLSovCi12b2lkIFFHcmFw
aGljc1dLVmlldzo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCogZXYpCi17Ci0gICAgcGFnZSgp
LT5kLT5rZXlSZWxlYXNlRXZlbnQoZXYpOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6aG92
ZXJNb3ZlRXZlbnQoUUdyYXBoaWNzU2NlbmVIb3ZlckV2ZW50KiBldikKLXsKLSAgICBRR3JhcGhp
Y3NTY2VuZU1vdXNlRXZlbnQgbWUoUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VNb3ZlKTsKLSAg
ICBtZS5zZXRQb3MoZXYtPnBvcygpKTsKLSAgICBtZS5zZXRTY3JlZW5Qb3MoZXYtPnNjcmVlblBv
cygpKTsKLQotICAgIHBhZ2UoKS0+ZC0+bW91c2VNb3ZlRXZlbnQoJm1lKTsKLQotICAgIGlmICgh
ZXYtPmlzQWNjZXB0ZWQoKSkKLSAgICAgICAgUUdyYXBoaWNzSXRlbTo6aG92ZXJNb3ZlRXZlbnQo
ZXYpOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6bW91c2VNb3ZlRXZlbnQoUUdyYXBoaWNz
U2NlbmVNb3VzZUV2ZW50KiBldikKLXsKLSAgICBwYWdlKCktPmQtPm1vdXNlTW92ZUV2ZW50KGV2
KTsKLSAgICBpZiAoIWV2LT5pc0FjY2VwdGVkKCkpCi0gICAgICAgIFFHcmFwaGljc0l0ZW06Om1v
dXNlTW92ZUV2ZW50KGV2KTsKLX0KLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6Om1vdXNlUHJlc3NF
dmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2KQotewotICAgIHBhZ2UoKS0+ZC0+bW91
c2VQcmVzc0V2ZW50KGV2KTsKLSAgICBpZiAoIWV2LT5pc0FjY2VwdGVkKCkpCi0gICAgICAgIFFH
cmFwaGljc0l0ZW06Om1vdXNlUHJlc3NFdmVudChldik7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV0tW
aWV3Ojptb3VzZVJlbGVhc2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2KQotewot
ICAgIHBhZ2UoKS0+ZC0+bW91c2VSZWxlYXNlRXZlbnQoZXYpOwotICAgIGlmICghZXYtPmlzQWNj
ZXB0ZWQoKSkKLSAgICAgICAgUUdyYXBoaWNzSXRlbTo6bW91c2VSZWxlYXNlRXZlbnQoZXYpOwot
fQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6bW91c2VEb3VibGVDbGlja0V2ZW50KFFHcmFwaGlj
c1NjZW5lTW91c2VFdmVudCogZXYpCi17Ci0gICAgcGFnZSgpLT5kLT5tb3VzZURvdWJsZUNsaWNr
RXZlbnQoZXYpOwotICAgIGlmICghZXYtPmlzQWNjZXB0ZWQoKSkKLSAgICAgICAgUUdyYXBoaWNz
SXRlbTo6bW91c2VSZWxlYXNlRXZlbnQoZXYpOwotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6
d2hlZWxFdmVudChRR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQqIGV2KQotewotICAgIHBhZ2UoKS0+
ZC0+d2hlZWxFdmVudChldik7Ci0gICAgaWYgKCFldi0+aXNBY2NlcHRlZCgpKQotICAgICAgICBR
R3JhcGhpY3NJdGVtOjp3aGVlbEV2ZW50KGV2KTsKLX0KLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6
OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2KQotewotICAgIHBhZ2UoKS0+ZC0+dG91Y2hFdmVu
dChldik7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV0tWaWV3OjpkcmFnRW50ZXJFdmVudChRR3JhcGhp
Y3NTY2VuZURyYWdEcm9wRXZlbnQqIGV2KQotewotI2lmbmRlZiBRVF9OT19EUkFHQU5ERFJPUAot
ICAgIGlmIChkLT5wYWdlKQotICAgICAgICBkLT5wYWdlLT5kLT5kcmFnRW50ZXJFdmVudChldik7
Ci0jZWxzZQotICAgIFFfVU5VU0VEKGV2KTsKLSNlbmRpZgotfQotCi12b2lkIFFHcmFwaGljc1dL
Vmlldzo6ZHJhZ0xlYXZlRXZlbnQoUUdyYXBoaWNzU2NlbmVEcmFnRHJvcEV2ZW50KiBldikKLXsK
LSNpZm5kZWYgUVRfTk9fRFJBR0FORERST1AKLSAgICBpZiAoZC0+cGFnZSkgewotICAgICAgICBj
b25zdCBib29sIGFjY2VwdGVkID0gZXYtPmlzQWNjZXB0ZWQoKTsKLSAgICAgICAgZC0+cGFnZS0+
ZC0+ZHJhZ0xlYXZlRXZlbnQoZXYpOwotICAgICAgICBldi0+c2V0QWNjZXB0ZWQoYWNjZXB0ZWQp
OwotICAgIH0KLQotICAgIGlmICghZXYtPmlzQWNjZXB0ZWQoKSkKLSAgICAgICAgUUdyYXBoaWNz
V2lkZ2V0OjpkcmFnTGVhdmVFdmVudChldik7Ci0jZWxzZQotICAgIFFfVU5VU0VEKGV2KTsKLSNl
bmRpZgotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6ZHJhZ01vdmVFdmVudChRR3JhcGhpY3NT
Y2VuZURyYWdEcm9wRXZlbnQqIGV2KQotewotI2lmbmRlZiBRVF9OT19EUkFHQU5ERFJPUAotICAg
IGlmIChkLT5wYWdlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgYWNjZXB0ZWQgPSBldi0+aXNBY2Nl
cHRlZCgpOwotICAgICAgICBkLT5wYWdlLT5kLT5kcmFnTW92ZUV2ZW50KGV2KTsKLSAgICAgICAg
ZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICB9Ci0KLSAgICBpZiAoIWV2LT5pc0FjY2Vw
dGVkKCkpCi0gICAgICAgIFFHcmFwaGljc1dpZGdldDo6ZHJhZ01vdmVFdmVudChldik7Ci0jZWxz
ZQotICAgIFFfVU5VU0VEKGV2KTsKLSNlbmRpZgotfQotCi12b2lkIFFHcmFwaGljc1dLVmlldzo6
ZHJvcEV2ZW50KFFHcmFwaGljc1NjZW5lRHJhZ0Ryb3BFdmVudCogZXYpCi17Ci0jaWZuZGVmIFFU
X05PX0RSQUdBTkREUk9QCi0gICAgaWYgKGQtPnBhZ2UpIHsKLSAgICAgICAgY29uc3QgYm9vbCBh
Y2NlcHRlZCA9IGV2LT5pc0FjY2VwdGVkKCk7Ci0gICAgICAgIGQtPnBhZ2UtPmQtPmRyb3BFdmVu
dChldik7Ci0gICAgICAgIGV2LT5zZXRBY2NlcHRlZChhY2NlcHRlZCk7Ci0gICAgfQotCi0gICAg
aWYgKCFldi0+aXNBY2NlcHRlZCgpKQotICAgICAgICBRR3JhcGhpY3NXaWRnZXQ6OmRyb3BFdmVu
dChldik7Ci0jZWxzZQotICAgIFFfVU5VU0VEKGV2KTsKLSNlbmRpZgotfQotCi12b2lkIFFHcmFw
aGljc1dLVmlldzo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50KikKLXsKLSAgICBwYWdlKCktPmQt
PnBhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBX
ZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV0tW
aWV3Ojpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikKLXsKLSAgICBwYWdlKCktPmQtPnBhZ2Ut
PnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdl
UHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci19Ci0KLQotLyohCi0gICAgVGhpcyBzbG90IGlz
IGNhbGxlZCB3aGVuIHRoZSBlbmdpbmUgcmVxdWlyZSBhIGNvbnRleHQgc2Vuc2l0aXZlIG1lbnUg
dG8gYmUgZGlzcGxheWVkLgotCi0gICAgVGhlIFxhIG1lbnUgcGFzc2VkIGFzIGEgcGFyYW1ldGVy
IGlzIHRoZSBtZW51IHRvIGJlIGRpc3BsYXllZC4gSXQgaXMgcG9wdWxhdGVkIHdpdGggdGhlCi0g
ICAgYWN0aW9ucyBwb3NzaWJsZSBmb3IgaXRzIGN1cnJlbnQgcG9zaXRpb24uIFRoZSBtZW51IGlz
IGVtcHR5IGlmIHRoZXJlIGlzIG5vIGFjdGlvbiBmb3IgdGhlIHBvc2l0aW9uLgotKi8KLXZvaWQg
UUdyYXBoaWNzV0tWaWV3OjpzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+IG1l
bnUpCi17Ci0gICAgLy8gUmVtb3ZlIHRoZSBhY3RpdmUgbWVudSBpbiBjYXNlIHRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIHR3aWNlLgotICAgIGlmIChkLT5hY3RpdmVNZW51KQotICAgICAgICBkLT5h
Y3RpdmVNZW51LT5oaWRlKCk7Ci0KLSAgICBpZiAobWVudS0+aXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkLT5hY3RpdmVNZW51ID0gbWVudTsKLQotICAgIFFXaWRnZXQqIHZpZXcg
PSAwOwotICAgIGlmIChRR3JhcGhpY3NTY2VuZSogbXlTY2VuZSA9IHNjZW5lKCkpIHsKLSAgICAg
ICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0gbXlTY2VuZS0+dmlld3MoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZpZXdzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAodmlld3MuYXQoaSkgPT0gUUFwcGxpY2F0aW9uOjpmb2N1c1dpZGdldCgp
KSB7Ci0gICAgICAgICAgICAgICAgdmlldyA9IHZpZXdzLmF0KGkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghdmlldykKLSAg
ICAgICAgICAgIHZpZXcgPSB2aWV3cy52YWx1ZSgwLCAwKTsKLSAgICB9Ci0gICAgaWYgKHZpZXcp
Ci0gICAgICAgIG1lbnUtPnNldFBhcmVudCh2aWV3LCBtZW51LT53aW5kb3dGbGFncygpKTsKLSAg
ICBtZW51LT5leGVjKHZpZXctPm1hcFRvR2xvYmFsKG1lbnUtPnBvcygpKSk7Ci0gICAgaWYgKGQt
PmFjdGl2ZU1lbnUgPT0gbWVudSkKLSAgICAgICAgZC0+YWN0aXZlTWVudS5jbGVhcigpOwotfQot
Ci12b2lkIFFHcmFwaGljc1dLVmlldzo6dGFrZVNuYXBzaG90KGNvbnN0IFFTaXplJiBzaXplLCBj
b25zdCBRUmVjdCYgY29udGVudHNSZWN0KQotewotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQotICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kLT5wYWdl
LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChkcmF3aW5nQXJlYS0+dHlwZSgpICE9IERyYXdpbmdB
cmVhVHlwZVRpbGVkKQotICAgICAgICByZXR1cm47Ci0gICAgVGlsZWREcmF3aW5nQXJlYVByb3h5
KiB0aWxlZERyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8VGlsZWREcmF3aW5nQXJlYVByb3h5Kj4o
ZHJhd2luZ0FyZWEpOwotICAgIHRpbGVkRHJhd2luZ0FyZWEtPnRha2VTbmFwc2hvdChzaXplLCBj
b250ZW50c1JlY3QpOwotI2VuZGlmCi19Ci0KLVFHcmFwaGljc1dLVmlld1ByaXZhdGU6OlFHcmFw
aGljc1dLVmlld1ByaXZhdGUoUUdyYXBoaWNzV0tWaWV3KiB2aWV3KQotICAgIDogcSh2aWV3KQot
ICAgICwgYWN0aXZlTWVudSgwKQotICAgICwgbV9zY2FsZUNvbW1pdFRpbWVyKFJ1bkxvb3A6OmN1
cnJlbnQoKSwgdGhpcywgJlFHcmFwaGljc1dLVmlld1ByaXZhdGU6OmNvbW1pdFNjYWxlKQotICAg
ICwgbV9pc0NoYW5naW5nU2NhbGUoZmFsc2UpCi17Ci19Ci0KLVFSZWN0RiBRR3JhcGhpY3NXS1Zp
ZXc6OnZpc2libGVSZWN0KCkgY29uc3QKLXsKLSAgICBpZiAoIXNjZW5lKCkpCi0gICAgICAgIHJl
dHVybiBRUmVjdEYoKTsKLQotICAgIFFMaXN0PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHNjZW5l
KCktPnZpZXdzKCk7Ci0gICAgaWYgKHZpZXdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFFS
ZWN0RigpOwotCi0gICAgUUdyYXBoaWNzVmlldyogZ3JhcGhpY3NWaWV3ID0gdmlld3MuYXQoMCk7
Ci0gICAgaW50IHhPZmZzZXQgPSBncmFwaGljc1ZpZXctPmhvcml6b250YWxTY3JvbGxCYXIoKS0+
dmFsdWUoKTsKLSAgICBpbnQgeU9mZnNldCA9IGdyYXBoaWNzVmlldy0+dmVydGljYWxTY3JvbGxC
YXIoKS0+dmFsdWUoKTsKLSAgICByZXR1cm4gbWFwUmVjdEZyb21TY2VuZShRUmVjdEYoUVBvaW50
Rih4T2Zmc2V0LCB5T2Zmc2V0KSwgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgpLT5zaXplKCkpKTsK
LX0KLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6OnByZXBhcmVTY2FsZUNoYW5nZSgpCi17Ci0jaWYg
RU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgQVNTRVJUKCFkLT5tX2lzQ2hhbmdpbmdT
Y2FsZSk7Ci0gICAgZC0+bV9pc0NoYW5naW5nU2NhbGUgPSB0cnVlOwotICAgIGQtPm1fc2NhbGVD
b21taXRUaW1lci5zdG9wKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBRR3JhcGhpY3NXS1ZpZXc6OmNv
bW1pdFNjYWxlQ2hhbmdlKCkKLXsKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAg
ICBBU1NFUlQoZC0+bV9pc0NoYW5naW5nU2NhbGUpOwotICAgIGQtPm1faXNDaGFuZ2luZ1NjYWxl
ID0gZmFsc2U7Ci0gICAgZC0+Y29tbWl0U2NhbGUoKTsKLSNlbmRpZgotfQotCi12b2lkIFFHcmFw
aGljc1dLVmlld1ByaXZhdGU6Om9uU2NhbGVDaGFuZ2VkKCkKLXsKLSNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIW1faXNDaGFuZ2luZ1NjYWxlKQotICAgICAgICBtX3Nj
YWxlQ29tbWl0VGltZXIuc3RhcnRPbmVTaG90KDAuMSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBRR3Jh
cGhpY3NXS1ZpZXdQcml2YXRlOjpvblRvb2xUaXBDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIHRvb2xU
aXApCi17Ci0gICAgcS0+c2V0VG9vbFRpcCh0b29sVGlwKTsKLX0KLQotdm9pZCBRR3JhcGhpY3NX
S1ZpZXdQcml2YXRlOjpjb21taXRTY2FsZSgpCi17Ci0jaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCi0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBwYWdlLT5kLT5wYWdl
LT5kcmF3aW5nQXJlYSgpOwotICAgIGZsb2F0IG5ld1NjYWxlID0gcS0+c2NhbGUoKTsKLSAgICBp
ZiAoZHJhd2luZ0FyZWEtPnR5cGUoKSA9PSBEcmF3aW5nQXJlYVR5cGVUaWxlZCkgewotICAgICAg
ICBUaWxlZERyYXdpbmdBcmVhUHJveHkqIHRpbGVkRHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxU
aWxlZERyYXdpbmdBcmVhUHJveHkqPihkcmF3aW5nQXJlYSk7Ci0gICAgICAgIGlmICh0aWxlZERy
YXdpbmdBcmVhLT5jb250ZW50c1NjYWxlKCkgPT0gbmV3U2NhbGUpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRpbGVkRHJhd2luZ0FyZWEtPnNldENvbnRlbnRzU2NhbGUobmV3U2NhbGUp
OwotICAgIH0KLSNlbmRpZgotfQotCi0jaW5jbHVkZSAibW9jX3FncmFwaGljc3drdmlldy5jcHAi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3dr
dmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZ3JhcGhpY3N3a3ZpZXcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk5ZTAxZi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3drdmlldy5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSNpZm5kZWYgcWdyYXBoaWNzd2t2aWV3X2gKLSNkZWZp
bmUgcWdyYXBoaWNzd2t2aWV3X2gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLQotI2lu
Y2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0jaW5jbHVkZSA8UUdyYXBoaWNzV2lkZ2V0PgotI2lu
Y2x1ZGUgInF3a3BhZ2UuaCIKLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRQ3Vyc29yOwot
UVRfRU5EX05BTUVTUEFDRQotCi1jbGFzcyBRV0tDb250ZXh0OwotY2xhc3MgUUdyYXBoaWNzV0tW
aWV3UHJpdmF0ZTsKLW5hbWVzcGFjZSBXVFIgewotY2xhc3MgV2ViVmlldzsKLX07Ci0KLWNsYXNz
IFFXRUJLSVRfRVhQT1JUIFFHcmFwaGljc1dLVmlldyA6IHB1YmxpYyBRR3JhcGhpY3NXaWRnZXQg
ewotICAgIFFfT0JKRUNUCi0gICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUp
Ci0gICAgUV9QUk9QRVJUWShRVXJsIHVybCBSRUFEIHVybCBXUklURSBzZXRVcmwpCi0KLXB1Ymxp
YzoKLSAgICBlbnVtIEJhY2tpbmdTdG9yZVR5cGUgeyBTaW1wbGUsIFRpbGVkIH07Ci0gICAgUUdy
YXBoaWNzV0tWaWV3KFFXS0NvbnRleHQqIGNvbnRleHQsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2lu
Z1N0b3JlVHlwZSA9IFNpbXBsZSwgUUdyYXBoaWNzSXRlbSogcGFyZW50ID0gMCk7Ci0KLSAgICB2
aXJ0dWFsIH5RR3JhcGhpY3NXS1ZpZXcoKTsKLQotICAgIFFXS1BhZ2UqIHBhZ2UoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBRUmVjdEYmKTsKLQotICAgIHZv
aWQgbG9hZChjb25zdCBRVXJsJik7Ci0gICAgdm9pZCBzZXRVcmwoY29uc3QgUVVybCYpOwotICAg
IFFVcmwgdXJsKCkgY29uc3Q7Ci0KLSAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHRyaWdnZXJQYWdlQWN0aW9uKFFXS1BhZ2U6OldlYkFjdGlvbiBhY3Rpb24sIGJvb2wgY2hl
Y2tlZCA9IGZhbHNlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChRUGFpbnRlciosIGNvbnN0
IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSosIFFXaWRnZXQqKTsKLSAgICB2aXJ0dWFsIFFWYXJp
YW50IGl0ZW1DaGFuZ2UoR3JhcGhpY3NJdGVtQ2hhbmdlLCBjb25zdCBRVmFyaWFudCYpOwotICAg
IHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQqKTsKLSAgICB2aXJ0dWFsIFFTaXplRiBzaXplSGlu
dChRdDo6U2l6ZUhpbnQsIGNvbnN0IFFTaXplRiYpIGNvbnN0OwotICAgIHZpcnR1YWwgUVZhcmlh
bnQgaW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSkgY29uc3Q7Ci0KLSAgICB2
b2lkIHRha2VTbmFwc2hvdChjb25zdCBRU2l6ZSYgc2l6ZSwgY29uc3QgUVJlY3QmIGRvY3VtZW50
UmVjdCk7Ci0KLSAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBwdWJsaWMKLSAgICB2aXJ0dWFs
IFFSZWN0RiB2aXNpYmxlUmVjdCgpIGNvbnN0OwotCi0gICAgdm9pZCBwcmVwYXJlU2NhbGVDaGFu
Z2UoKTsKLSAgICB2b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7Ci0KLXB1YmxpYzoKLSAgICBRX1NJ
R05BTCB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJiB0aXRsZSk7Ci0gICAgUV9TSUdO
QUwgdm9pZCBsb2FkU3RhcnRlZCgpOwotICAgIFFfU0lHTkFMIHZvaWQgbG9hZEZpbmlzaGVkKGJv
b2wgb2spOwotICAgIFFfU0lHTkFMIHZvaWQgbG9hZFByb2dyZXNzKGludCBwcm9ncmVzcyk7Ci0g
ICAgUV9TSUdOQUwgdm9pZCBpbml0aWFsTGF5b3V0Q29tcGxldGVkKCk7Ci0gICAgUV9TSUdOQUwg
dm9pZCB1cmxDaGFuZ2VkKGNvbnN0IFFVcmwmKTsKLSAgICBRX1NJR05BTCB2b2lkIHNuYXBzaG90
VGFrZW4oY29uc3QgUUltYWdlJik7Ci0KLXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgYmFjaygp
OwotICAgIHZvaWQgZm9yd2FyZCgpOwotICAgIHZvaWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBzdG9w
KCk7Ci0gICAgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KTsKLQot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOwot
ICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIG1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCopOwotICAgIHZp
cnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Kik7Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVu
dCopOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoUUdyYXBoaWNzU2Nl
bmVNb3VzZUV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHdoZWVsRXZlbnQoUUdyYXBoaWNzU2Nl
bmVXaGVlbEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQq
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50ZXJFdmVudChRR3JhcGhpY3NTY2VuZURyYWdE
cm9wRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQoUUdyYXBoaWNzU2Nl
bmVEcmFnRHJvcEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYWdNb3ZlRXZlbnQoUUdyYXBo
aWNzU2NlbmVEcmFnRHJvcEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyb3BFdmVudChRR3Jh
cGhpY3NTY2VuZURyYWdEcm9wRXZlbnQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBob3Zlck1vdmVF
dmVudChRR3JhcGhpY3NTY2VuZUhvdmVyRXZlbnQqKTsKLQotICAgIFFfU0xPVCB2b2lkIHVwZGF0
ZUN1cnNvcihjb25zdCBRQ3Vyc29yJik7Ci0gICAgUV9TTE9UIHZvaWQgZm9jdXNOZXh0UHJldkNo
aWxkQ2FsbGJhY2soYm9vbCBuZXh0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBmb2N1c05leHRQcmV2
Q2hpbGQoYm9vbCBuZXh0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KFFGb2N1c0V2
ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsKLQot
cHJpdmF0ZToKLSAgICBRR3JhcGhpY3NXS1ZpZXcoUVdLQ29udGV4dCosIFdLUGFnZUdyb3VwUmVm
LCBCYWNraW5nU3RvcmVUeXBlID0gU2ltcGxlLCBRR3JhcGhpY3NJdGVtKiBwYXJlbnQgPSAwKTsK
LSAgICB2b2lkIGluaXQoQmFja2luZ1N0b3JlVHlwZSk7Ci0KLSAgICBRX1BSSVZBVEVfU0xPVChk
LCB2b2lkIG9uU2NhbGVDaGFuZ2VkKCkpCi0gICAgUV9QUklWQVRFX1NMT1QoZCwgdm9pZCBvblRv
b2xUaXBDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmKSkKLQotICAgIFFHcmFwaGljc1dLVmlld1ByaXZh
dGUqIGQ7Ci0gICAgZnJpZW5kIGNsYXNzIFFHcmFwaGljc1dLVmlld1ByaXZhdGU7Ci0gICAgZnJp
ZW5kIGNsYXNzIFRpbGVkRHJhd2luZ0FyZWFQcm94eTsKLSAgICBmcmllbmQgY2xhc3MgV1RSOjpX
ZWJWaWV3OwotfTsKLQotI2VuZGlmIC8qIHFncmFwaGljc3drdmlld19oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjM1MTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcApAQCAtMCwwICsx
LDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJxdG91Y2h3ZWJwYWdl
LmgiCisjaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXRvdWNod2VicGFn
ZXByb3h5LmgiCisKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUdyYXBoaWNz
U2NlbmVNb3VzZUV2ZW50PgorI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+CisjaW5jbHVkZSA8UVBh
aW50ZXI+CisjaW5jbHVkZSA8UVNjcm9sbEJhcj4KKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25HcmFw
aGljc0l0ZW0+CisjaW5jbHVkZSA8UVVybD4KKyNpbmNsdWRlIDxRdERlYnVnPgorCitRVG91Y2hX
ZWJQYWdlOjpRVG91Y2hXZWJQYWdlKFFHcmFwaGljc0l0ZW0qIHBhcmVudCkKKyAgICA6IFFHcmFw
aGljc1dpZGdldChwYXJlbnQpCisgICAgLCBkKG5ldyBRVG91Y2hXZWJQYWdlUHJpdmF0ZSh0aGlz
KSkKK3sKKyAgICBzZXRGb2N1c1BvbGljeShRdDo6VGFiRm9jdXMpOworICAgIHNldEFjY2VwdFRv
dWNoRXZlbnRzKHRydWUpOworCisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc2NhbGVDaGFuZ2Vk
KCkpLCB0aGlzLCBTTE9UKG9uU2NhbGVDaGFuZ2VkKCkpKTsKK30KKworUVRvdWNoV2ViUGFnZTo6
flFUb3VjaFdlYlBhZ2UoKQoreworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFUb3VjaFdlYlBh
Z2U6OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0
ZW0qIG9wdGlvbiwgUVdpZGdldCopCit7CisgICAgZC0+cGFnZS0+cGFpbnQocGFpbnRlciwgb3B0
aW9uLT5leHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOworfQorCit2b2lkIFFUb3VjaFdlYlBh
Z2U6OmxvYWQoY29uc3QgUVVybCYgdXJsKQoreworICAgIGQtPnBhZ2UtPmxvYWQodXJsKTsKK30K
KworUVVybCBRVG91Y2hXZWJQYWdlOjp1cmwoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wYWdl
LT51cmwoKTsKK30KKworUVN0cmluZyBRVG91Y2hXZWJQYWdlOjp0aXRsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGQtPnBhZ2UtPnRpdGxlKCk7Cit9CisKK2NsYXNzIEZyaWVuZGx5V2lkZ2V0IDog
cHVibGljIFFXaWRnZXQKK3sKK3B1YmxpYzoKKyAgICBib29sIGZvY3VzTmV4dFByZXZDaGlsZChi
b29sIG5leHQpOworfTsKKwordm9pZCBRVG91Y2hXZWJQYWdlOjpmb2N1c05leHRQcmV2Q2hpbGRD
YWxsYmFjayhib29sIG5leHQpCit7CisgICAgaWYgKGhhc0ZvY3VzKCkpIHsKKyAgICAgICAgLy8g
ZmluZCB0aGUgdmlldyB3aGljaCBoYXMgdGhlIGZvY3VzOgorICAgICAgICBRTGlzdDxRR3JhcGhp
Y3NWaWV3Kj4gdmlld3MgPSBzY2VuZSgpLT52aWV3cygpOworICAgICAgICBjb25zdCBpbnQgdmll
d0NvdW50ID0gdmlld3MuY291bnQoKTsKKyAgICAgICAgUUdyYXBoaWNzVmlldyogZm9jdXNlZFZp
ZXcgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdDb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAodmlld3NbaV0tPmhhc0ZvY3VzKCkpIHsKKyAgICAgICAgICAgICAgICBm
b2N1c2VkVmlldyA9IHZpZXdzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvY3VzZWRWaWV3KSB7CisgICAgICAgICAg
ICBRV2lkZ2V0KiB3aW5kb3cgPSBmb2N1c2VkVmlldy0+d2luZG93KCk7CisgICAgICAgICAgICBG
cmllbmRseVdpZGdldCogZnJpZW5kbHlXaW5kb3cgPSBzdGF0aWNfY2FzdDxGcmllbmRseVdpZGdl
dCo+KHdpbmRvdyk7CisgICAgICAgICAgICBmcmllbmRseVdpbmRvdy0+Zm9jdXNOZXh0UHJldkNo
aWxkKG5leHQpOworICAgICAgICB9CisgICAgfQorfQorCisvKiEgXHJlaW1wCisqLworYm9vbCBR
VG91Y2hXZWJQYWdlOjpmb2N1c05leHRQcmV2Q2hpbGQoYm9vbCBuZXh0KQoreworI2lmIDAKKyAg
ICAvLyBGSVhNRTogS2V5IGV2ZW50IGlzIGhhbmRsZWQgYnkgdGhlIFFXZWJQYWdlUHJveHkgc3Vi
Y2xhc3MuCisgICAgUUtleUV2ZW50IGV2KFFFdmVudDo6S2V5UHJlc3MsIFF0OjpLZXlfVGFiLCBR
dDo6S2V5Ym9hcmRNb2RpZmllcnMobmV4dCA/IFF0OjpOb01vZGlmaWVyIDogUXQ6OlNoaWZ0TW9k
aWZpZXIpKTsKKyAgICBkLT5wYWdlLmtleVByZXNzRXZlbnQoJmV2KTsKKyNlbmRpZgorICAgIHJl
dHVybiB0cnVlOworfQorCisvKiEgXHJlaW1wCisqLworYm9vbCBRVG91Y2hXZWJQYWdlOjpldmVu
dChRRXZlbnQqIGUpCit7CisgICAgc3dpdGNoIChlLT50eXBlKCkpIHsKKyAgICBjYXNlIFFFdmVu
dDo6U2hvdzoKKyAgICAgICAgZC0+cGFnZS0+c2V0UGFnZUlzVmlzaWJsZSh0cnVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBRRXZlbnQ6OkhpZGU6CisgICAgICAgIGQtPnBhZ2UtPnNldFBh
Z2VJc1Zpc2libGUoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoZC0+cGFnZS0+aGFuZGxlRXZlbnQoZSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBRR3JhcGhpY3NXaWRnZXQ6OmV2ZW50KGUpOwor
fQorCit2b2lkIFFUb3VjaFdlYlBhZ2U6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKmV2ZW50KQor
eworICAgIGlmIChldmVudC0+dGltZXJJZCgpID09IGQtPm1fc2NhbGVDb21taXRUaW1lci50aW1l
cklkKCkpIHsKKyAgICAgICAgZC0+Y29tbWl0U2NhbGVDaGFuZ2UoKTsKKyAgICAgICAgZC0+bV9z
Y2FsZUNvbW1pdFRpbWVyLnN0b3AoKTsKKyAgICB9Cit9CisKK3ZvaWQgUVRvdWNoV2ViUGFnZTo6
cmVzaXplRXZlbnQoUUdyYXBoaWNzU2NlbmVSZXNpemVFdmVudCAqZXZlbnQpCit7CisgICAgZC0+
cGFnZS0+c2V0RHJhd2luZ0FyZWFTaXplKGV2ZW50LT5uZXdTaXplKCkudG9TaXplKCkpOworICAg
IFFHcmFwaGljc1dpZGdldDo6cmVzaXplRXZlbnQoZXZlbnQpOworfQorCitRVG91Y2hXZWJQYWdl
UHJpdmF0ZTo6UVRvdWNoV2ViUGFnZVByaXZhdGUoUVRvdWNoV2ViUGFnZSogdmlldykKKyAgICA6
IHEodmlldykKKyAgICAsIHBhZ2UoMCkKKyAgICAsIG1faXNDaGFuZ2luZ1NjYWxlKGZhbHNlKQor
eworfQorCitRUmVjdEYgUVRvdWNoV2ViUGFnZTo6dmlzaWJsZVJlY3QoKSBjb25zdAoreworICAg
IGlmICghc2NlbmUoKSkKKyAgICAgICAgcmV0dXJuIFFSZWN0RigpOworCisgICAgUUxpc3Q8UUdy
YXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUoKS0+dmlld3MoKTsKKyAgICBpZiAodmlld3MuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gUVJlY3RGKCk7CisKKyAgICBRR3JhcGhpY3NWaWV3KiBn
cmFwaGljc1ZpZXcgPSB2aWV3cy5hdCgwKTsKKyAgICBpbnQgeE9mZnNldCA9IGdyYXBoaWNzVmll
dy0+aG9yaXpvbnRhbFNjcm9sbEJhcigpLT52YWx1ZSgpOworICAgIGludCB5T2Zmc2V0ID0gZ3Jh
cGhpY3NWaWV3LT52ZXJ0aWNhbFNjcm9sbEJhcigpLT52YWx1ZSgpOworICAgIHJldHVybiBtYXBS
ZWN0RnJvbVNjZW5lKFFSZWN0RihRUG9pbnRGKHhPZmZzZXQsIHlPZmZzZXQpLCBncmFwaGljc1Zp
ZXctPnZpZXdwb3J0KCktPnNpemUoKSkpOworfQorCit2b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRl
OjpwcmVwYXJlU2NhbGVDaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0NoYW5naW5nU2NhbGUp
OworICAgIG1faXNDaGFuZ2luZ1NjYWxlID0gdHJ1ZTsKKyAgICBtX3NjYWxlQ29tbWl0VGltZXIu
c3RvcCgpOworfQorCit2b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpjb21taXRTY2FsZUNoYW5n
ZSgpCit7CisgICAgQVNTRVJUKG1faXNDaGFuZ2luZ1NjYWxlKTsKKyAgICBtX2lzQ2hhbmdpbmdT
Y2FsZSA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBhZGQgd2VicGFnZSBzdXBwb3J0IHdoZW4gdGhl
IHZpZXcgaGFzIGl0cyBwcm9wZXIgV0tQYWdlIHN1YmNsYXNzLgorfQorCit2b2lkIFFUb3VjaFdl
YlBhZ2VQcml2YXRlOjpvblNjYWxlQ2hhbmdlZCgpCit7CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCisgICAgaWYgKCFtX2lzQ2hhbmdpbmdTY2FsZSkKKyAgICAgICAgbV9zY2FsZUNv
bW1pdFRpbWVyLnN0YXJ0KDAuMSwgcSk7CisjZW5kaWYKK30KKwordm9pZCBRVG91Y2hXZWJQYWdl
UHJpdmF0ZTo6c2V0UGFnZShRVG91Y2hXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgQVNTRVJU
KCF0aGlzLT5wYWdlKTsKKyAgICBBU1NFUlQocGFnZSk7CisgICAgdGhpcy0+cGFnZSA9IHBhZ2U7
CisgICAgUU9iamVjdDo6Y29ubmVjdChwYWdlLCBTSUdOQUwoZm9jdXNOZXh0UHJldkNoaWxkKGJv
b2wpKSwgcSwgU0xPVChmb2N1c05leHRQcmV2Q2hpbGRDYWxsYmFjayhib29sKSkpOworfQorCisj
aW5jbHVkZSAibW9jX3F0b3VjaHdlYnBhZ2UuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44OTJmZDRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBxdG91
Y2h3ZWJwYWdlX2gKKyNkZWZpbmUgcXRvdWNod2VicGFnZV9oCisKKyNpbmNsdWRlICJxd2Via2l0
Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRR3JhcGhpY3NXaWRnZXQ+CisjaW5jbHVkZSA8UVNoYXJl
ZFBvaW50ZXI+CisKK2NsYXNzIFFXS0NvbnRleHQ7CitjbGFzcyBRVG91Y2hXZWJQYWdlUHJpdmF0
ZTsKK2NsYXNzIFFUb3VjaFdlYlBhZ2VQcm94eTsKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVRv
dWNoV2ViUGFnZSA6IHB1YmxpYyBRR3JhcGhpY3NXaWRnZXQgeworICAgIFFfT0JKRUNUCisgICAg
UV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUgTk9USUZZIHRpdGxlQ2hhbmdlZCkK
KyAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQgdXJsIE5PVElGWSB1cmxDaGFuZ2VkKQorCitw
dWJsaWM6CisgICAgUVRvdWNoV2ViUGFnZShRR3JhcGhpY3NJdGVtKiBwYXJlbnQgPSAwKTsKKwor
ICAgIHZpcnR1YWwgflFUb3VjaFdlYlBhZ2UoKTsKKworICAgIHZvaWQgbG9hZChjb25zdCBRVXJs
Jik7CisgICAgUV9JTlZPS0FCTEUgUVVybCB1cmwoKSBjb25zdDsKKworICAgIFFfSU5WT0tBQkxF
IFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludChRUGFpbnRl
ciosIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSosIFFXaWRnZXQqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisKKyAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBw
dWJsaWMKKyAgICB2aXJ0dWFsIFFSZWN0RiB2aXNpYmxlUmVjdCgpIGNvbnN0OworCitRX1NJR05B
TFM6CisgICAgdm9pZCB1cmxDaGFuZ2VkKGNvbnN0IFFVcmwmKTsKKyAgICB2b2lkIHRpdGxlQ2hh
bmdlZChjb25zdCBRU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCBsb2FkU3RhcnRlZCgpOworICAg
IHZvaWQgbG9hZFN1Y2NlZWRlZCgpOworICAgIHZvaWQgbG9hZFByb2dyZXNzKGludCBwcm9ncmVz
cyk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVu
dCAqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplRXZlbnQoUUdyYXBoaWNzU2NlbmVSZXNpemVF
dmVudCAqZXZlbnQpOworCisgICAgUV9TTE9UIHZvaWQgZm9jdXNOZXh0UHJldkNoaWxkQ2FsbGJh
Y2soYm9vbCBuZXh0KTsKKworICAgIHZpcnR1YWwgYm9vbCBmb2N1c05leHRQcmV2Q2hpbGQoYm9v
bCBuZXh0KTsKKworcHJpdmF0ZToKKyAgICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIG9uU2NhbGVD
aGFuZ2VkKCkpCisKKyAgICBRVG91Y2hXZWJQYWdlUHJpdmF0ZSogZDsKKyAgICBmcmllbmQgY2xh
c3MgUVRvdWNoV2ViUGFnZVByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFRvdWNoVmlld0ludGVy
ZmFjZTsKKyAgICBmcmllbmQgY2xhc3MgVGlsZWREcmF3aW5nQXJlYVByb3h5OworfTsKKworI2Vu
ZGlmIC8qIHF0b3VjaHdlYnBhZ2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTlhMThkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgcXRvdWNod2VicGFnZV9wX2gKKyNkZWZpbmUgcXRvdWNod2VicGFnZV9w
X2gKKworI2luY2x1ZGUgPFFNZW51PgorI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgorI2luY2x1ZGUg
InF0b3VjaHdlYnBhZ2UuaCIKKworY2xhc3MgUVRvdWNoV2ViUGFnZTsKK2NsYXNzIFFTdHJpbmc7
CitjbGFzcyBRVG91Y2hXZWJQYWdlUHJveHk7CisKK2NsYXNzIFFUb3VjaFdlYlBhZ2VQcml2YXRl
IHsKK3B1YmxpYzoKKyAgICBRVG91Y2hXZWJQYWdlUHJpdmF0ZShRVG91Y2hXZWJQYWdlKiB2aWV3
KTsKKworICAgIHN0YXRpYyBRVG91Y2hXZWJQYWdlUHJpdmF0ZSogZ2V0UGFnZVZpZXdQcml2YXRl
KFFUb3VjaFdlYlBhZ2UqIHZpZXcpIHsgcmV0dXJuIHZpZXctPmQ7IH0KKworICAgIHZvaWQgc2V0
UGFnZShRVG91Y2hXZWJQYWdlUHJveHkqKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNv
bnN0IFFTaXplRiYgc2l6ZSk7CisKKyAgICB2b2lkIHByZXBhcmVTY2FsZUNoYW5nZSgpOworICAg
IHZvaWQgY29tbWl0U2NhbGVDaGFuZ2UoKTsKKyAgICB2b2lkIG9uU2NhbGVDaGFuZ2VkKCk7CisK
KyAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBxOworICAgIFFUb3VjaFdlYlBhZ2VQcm94eSogcGFn
ZTsKKyAgICBRQmFzaWNUaW1lciBtX3NjYWxlQ29tbWl0VGltZXI7CisgICAgYm9vbCBtX2lzQ2hh
bmdpbmdTY2FsZTsKK307CisKKyNlbmRpZiAvKiBxdG91Y2h3ZWJwYWdlX3BfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExNmU3MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3Lmgi
CisjaW5jbHVkZSAicXRvdWNod2Vidmlld19wLmgiCisKKyNpbmNsdWRlICJ0b3VjaHZpZXdpbnRl
cmZhY2UuaCIKKyNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxd2VicGFn
ZXByb3h5LmgiCisjaW5jbHVkZSA8cWdyYXBoaWNzc2NlbmVldmVudC5oPgorCitRVG91Y2hXZWJW
aWV3UHJpdmF0ZTo6UVRvdWNoV2ViVmlld1ByaXZhdGUoUVRvdWNoV2ViVmlldyogcSkKKyAgICA6
IHEocSkKKyAgICAsIHBhZ2VWaWV3KG5ldyBRVG91Y2hXZWJQYWdlKHEpKQorICAgICwgdmlld0lu
dGVyZmFjZShxLCBwYWdlVmlldy5kYXRhKCkpCisgICAgLCBwYWdlKCZ2aWV3SW50ZXJmYWNlLCBk
ZWZhdWx0V0tDb250ZXh0KCkpCit7CisgICAgUVRvdWNoV2ViUGFnZVByaXZhdGUqIGNvbnN0IHBh
Z2VWaWV3UHJpdmF0ZSA9IFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpnZXRQYWdlVmlld1ByaXZhdGUo
cGFnZVZpZXcuZGF0YSgpKTsKKyAgICBwYWdlVmlld1ByaXZhdGUtPnNldFBhZ2UoJnBhZ2UpOwor
fQorCitRVG91Y2hXZWJWaWV3OjpRVG91Y2hXZWJWaWV3KCkKKyAgICA6IGQobmV3IFFUb3VjaFdl
YlZpZXdQcml2YXRlKHRoaXMpKQoreworICAgIHNldEZsYWdzKFFHcmFwaGljc0l0ZW06Okl0ZW1D
bGlwc0NoaWxkcmVuVG9TaGFwZSk7Cit9CisKK1FUb3VjaFdlYlZpZXc6On5RVG91Y2hXZWJWaWV3
KCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworUVRvdWNoV2ViUGFnZSogUVRvdWNoV2ViVmlldzo6
cGFnZSgpCit7CisgICAgcmV0dXJuIGQtPnBhZ2VWaWV3LmRhdGEoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzMGYzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5oCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHF0b3VjaHdlYnZpZXdfaAorI2RlZmluZSBxdG91
Y2h3ZWJ2aWV3X2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUgPFFH
cmFwaGljc1dpZGdldD4KKworY2xhc3MgUVRvdWNoV2ViUGFnZTsKK2NsYXNzIFFUb3VjaFdlYlZp
ZXdQcml2YXRlOworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRVG91Y2hXZWJWaWV3IDogcHVibGlj
IFFHcmFwaGljc1dpZGdldAoreworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRVG91Y2hX
ZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSkKKworcHVibGljOgorICAgIFFUb3VjaFdlYlZpZXcoKTsK
KyAgICB+UVRvdWNoV2ViVmlldygpOworCisgICAgUVRvdWNoV2ViUGFnZSAqcGFnZSgpOworCitw
cml2YXRlOgorICAgIFFUb3VjaFdlYlZpZXdQcml2YXRlICpkOworfTsKKworI2VuZGlmIC8qIHF0
b3VjaHdlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2Vidmlld19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFi
MzE5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2Vidmlld19wLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgcXRvdWNod2Vidmlld19wX2gKKyNkZWZpbmUgcXRvdWNod2Vidmlld19wX2gKKworI2lu
Y2x1ZGUgPFFTY29wZWRQb2ludGVyPgorI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2Vwcm94eS5oIgor
I2luY2x1ZGUgInRvdWNodmlld2ludGVyZmFjZS5oIgorCitjbGFzcyBRVG91Y2hXZWJQYWdlOwor
Y2xhc3MgUVRvdWNoV2ViVmlldzsKKworY2xhc3MgUVRvdWNoV2ViVmlld1ByaXZhdGUKK3sKK3B1
YmxpYzoKKyAgICBRVG91Y2hXZWJWaWV3UHJpdmF0ZShRVG91Y2hXZWJWaWV3KiBxKTsKKworICAg
IFFUb3VjaFdlYlZpZXcqIGNvbnN0IHE7CisgICAgUVNjb3BlZFBvaW50ZXI8UVRvdWNoV2ViUGFn
ZT4gcGFnZVZpZXc7CisgICAgVG91Y2hWaWV3SW50ZXJmYWNlIHZpZXdJbnRlcmZhY2U7CisgICAg
UVRvdWNoV2ViUGFnZVByb3h5IHBhZ2U7Cit9OworCisjZW5kaWYgLyogcXRvdWNod2Vidmlld19w
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrY29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a2NvbnRleHQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTZiNmM4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrY29udGV4dC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJxd2tjb250ZXh0LmgiCi0jaW5jbHVkZSAicXdrY29udGV4dF9wLmgiCi0K
LSNpbmNsdWRlICJDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPFFQaXhtYXA+Ci0jaW5j
bHVkZSA8UVVybD4KLSNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVBsYXRm
b3JtU3RyYXRlZ2llc0lmTmVlZGVkKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOwotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjppbml0aWFsaXplKCk7Ci0gICAgaW5pdGlhbGl6ZWQgPSB0cnVl
OwotfQotCi1RV0tDb250ZXh0UHJpdmF0ZTo6UVdLQ29udGV4dFByaXZhdGUoUVdLQ29udGV4dCog
cXEsIFdlYkNvbnRleHQqIHdlYkNvbnRleHQpCi0gICAgOiBxKHFxKQotewotICAgIGlmICghd2Vi
Q29udGV4dCkKLSAgICAgICAgY29udGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJpbmcoKSk7
Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0ID0gd2ViQ29udGV4dDsKLQotICAgIGluaXRpYWxp
emVQbGF0Zm9ybVN0cmF0ZWdpZXNJZk5lZWRlZCgpOwotCi0gICAgV0tJY29uRGF0YWJhc2VDbGll
bnQgaWNvbkRhdGFiYXNlQ2xpZW50ID0gewotICAgICAgICAwLCAgICAgIC8vIHZlcnNpb24KLSAg
ICAgICAgcXEsICAgICAvLyBjbGllbnRJbmZvCi0gICAgICAgIHF0X3drX2RpZENoYW5nZUljb25G
b3JQYWdlVVJMLAotICAgICAgICBxdF93a19kaWRSZW1vdmVBbGxJY29ucwotICAgIH07Ci0KLSAg
ICBXS0ljb25EYXRhYmFzZVNldEljb25EYXRhYmFzZUNsaWVudCh0b0FQSShjb250ZXh0LT5pY29u
RGF0YWJhc2UoKSksICZpY29uRGF0YWJhc2VDbGllbnQpOwotfQotCi1RV0tDb250ZXh0UHJpdmF0
ZTo6flFXS0NvbnRleHRQcml2YXRlKCkKLXsgfQotCi1RV0tDb250ZXh0OjpRV0tDb250ZXh0KFFP
YmplY3QqIHBhcmVudCkKLSAgICA6IFFPYmplY3QocGFyZW50KQotICAgICwgZChuZXcgUVdLQ29u
dGV4dFByaXZhdGUodGhpcykpCi17IH0KLQotUVdLQ29udGV4dDo6UVdLQ29udGV4dChXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiwgUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQp
Ci0gICAgLCBkKG5ldyBRV0tDb250ZXh0UHJpdmF0ZSh0aGlzLCB0b0ltcGwoY29udGV4dFJlZikp
KQoteyB9Ci0KLVFXS0NvbnRleHQ6On5RV0tDb250ZXh0KCkKLXsKLSAgICBkZWxldGUgZDsKLX0K
LQotdm9pZCBRV0tDb250ZXh0OjpzZXRJY29uRGF0YWJhc2VQYXRoKGNvbnN0IFFTdHJpbmcmIHBh
dGgpCi17Ci0gICAgLy8gRklYTUU6IFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZGlzYWJs
ZSB0aGUgaWNvbiBkYXRhYmFzZSBvbmNlIGl0J3MgZW5hYmxlZC4KLSAgICBRRmlsZUluZm8gaW5m
byhwYXRoKTsKLSAgICBpZiAoaW5mby5pc0RpcigpICYmIGluZm8uaXNXcml0YWJsZSgpKSB7Ci0g
ICAgICAgIFFTdHJpbmcgZGF0YWJhc2VQYXRoID0gcGF0aCArIFFEaXI6OnNlcGFyYXRvcigpICsg
UVN0cmluZyhXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkp
OwotICAgICAgICBkLT5jb250ZXh0LT5zZXRJY29uRGF0YWJhc2VQYXRoKGRhdGFiYXNlUGF0aCk7
Ci0gICAgfQotfQotCi1RSWNvbiBRV0tDb250ZXh0OjppY29uRm9yUGFnZVVSTChjb25zdCBRVXJs
JiBwYWdlVVJMKSBjb25zdAotewotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1hZ2UgPSBk
LT5jb250ZXh0LT5pY29uRGF0YWJhc2UoKS0+aW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwudG9TdHJp
bmcoKSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIFFJY29uKCk7Ci0KLSAgICBR
UGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBRSWNvbigpOwotCi0gICAg
cmV0dXJuIFFJY29uKCpuYXRpdmVJbWFnZSk7Ci19Ci0KLSNpbmNsdWRlICJtb2NfcXdrY29udGV4
dC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a2Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrY29udGV4dC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWE1MTAyLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrY29udGV4dC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBxd2tjb250ZXh0X2gK
LSNkZWZpbmUgcXdrY29udGV4dF9oCi0KLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5j
bHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dC5oPgotCi1jbGFzcyBR
SWNvbjsKLWNsYXNzIFFVcmw7Ci1jbGFzcyBRV0tDb250ZXh0UHJpdmF0ZTsKLQotY2xhc3MgUVdF
QktJVF9FWFBPUlQgUVdLQ29udGV4dCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAot
cHVibGljOgotICAgIFFXS0NvbnRleHQoUU9iamVjdCogcGFyZW50ID0gMCk7Ci0gICAgdmlydHVh
bCB+UVdLQ29udGV4dCgpOwotCi0gICAgLy8gQnJpZGdlIGZyb20gdGhlIEMgQVBJCi0gICAgUVdL
Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgUU9iamVjdCogcGFyZW50ID0gMCk7Ci0K
LSAgICB2b2lkIHNldEljb25EYXRhYmFzZVBhdGgoY29uc3QgUVN0cmluZyYpOwotICAgIFFJY29u
IGljb25Gb3JQYWdlVVJMKGNvbnN0IFFVcmwmKSBjb25zdDsKLQotcHVibGljOgotICAgIFFfU0lH
TkFMIHZvaWQgaWNvbkNoYW5nZWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwmKTsKLQotcHJpdmF0ZToK
LSAgICBRV0tDb250ZXh0UHJpdmF0ZSogZDsKLQotICAgIGZyaWVuZCBjbGFzcyBRV0tQYWdlUHJp
dmF0ZTsKLX07Ci0KLSNlbmRpZiAvKiBxd2tjb250ZXh0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrY29udGV4dF9wLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a2NvbnRleHRfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1YWJmOTc5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdrY29udGV4dF9wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgot
ICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0KLSNpZm5kZWYgcXdrY29udGV4dF9wX2gKLSNkZWZpbmUgcXdrY29u
dGV4dF9wX2gKLQotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLWNsYXNzIFFXS0NvbnRleHRQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBRV0tDb250ZXh0
UHJpdmF0ZShRV0tDb250ZXh0KiwgV2ViS2l0OjpXZWJDb250ZXh0KiA9IDApOwotICAgIH5RV0tD
b250ZXh0UHJpdmF0ZSgpOwotCi0gICAgUVdLQ29udGV4dCogcTsKLQotICAgIFJlZlB0cjxXZWJL
aXQ6OldlYkNvbnRleHQ+IGNvbnRleHQ7Ci19OwotCi0jZW5kaWYgLyogcWtjb250ZXh0X3BfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2toaXN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdraGlzdG9yeS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMDE2ZmIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2toaXN0b3J5LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEp1aGEgU2F2b2xhaW5l
biAoanVoYS5zYXZvbGFpbmVuQHdlZWdvLmZpKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgInF3a2hpc3RvcnkuaCIKLQotI2luY2x1ZGUgPFFTaGFyZWREYXRhPgotI2luY2x1ZGUgPFFT
dHJpbmc+Ci0jaW5jbHVkZSA8UVVybD4KLSNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKLSNpbmNs
dWRlICJxd2twYWdlX3AuaCIKLSNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKLSNpbmNs
dWRlIDxXZWJLaXQyL1dLQXJyYXkuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+
Ci0jaW5jbHVkZSAiV0tCYWNrRm9yd2FyZExpc3QuaCIKLSNpbmNsdWRlICJXS1N0cmluZ1F0Lmgi
Ci0jaW5jbHVkZSAiV0tVUkwuaCIKLSNpbmNsdWRlICJXS1VSTFF0LmgiCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLVFXS0hpc3RvcnlJdGVtUHJpdmF0ZTo6UVdLSGlzdG9yeUl0ZW1Qcml2
YXRlKFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBsaXN0SXRlbSkKLSAgICA6IG1fYmFja0Zvcndh
cmRMaXN0SXRlbShsaXN0SXRlbSkKLXsKLX0KLQotUVdLSGlzdG9yeUl0ZW1Qcml2YXRlOjp+UVdL
SGlzdG9yeUl0ZW1Qcml2YXRlKCkKLXsKLX0KLQotUVdLSGlzdG9yeUl0ZW06OlFXS0hpc3RvcnlJ
dGVtKGNvbnN0IFFXS0hpc3RvcnlJdGVtJiBvdGhlcikKLSAgICA6IGQob3RoZXIuZCkgCi17Ci19
Ci0KLVFXS0hpc3RvcnlJdGVtJiBRV0tIaXN0b3J5SXRlbTo6UVdLSGlzdG9yeUl0ZW06Om9wZXJh
dG9yPShjb25zdCBRV0tIaXN0b3J5SXRlbSYgb3RoZXIpIAoteyAKLSAgICBkID0gb3RoZXIuZDsK
LSAgICByZXR1cm4gKnRoaXM7IAotfQotCi1RV0tIaXN0b3J5SXRlbTo6UVdLSGlzdG9yeUl0ZW0o
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pCi0gICAgOiBkKG5ldyBRV0tIaXN0b3J5SXRl
bVByaXZhdGUoaXRlbSkpCi17Ci19Ci0KLVFXS0hpc3RvcnlJdGVtOjp+UVdLSGlzdG9yeUl0ZW0o
KQotewotfQotCi1RU3RyaW5nIFFXS0hpc3RvcnlJdGVtOjp0aXRsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFkLT5tX2JhY2tGb3J3YXJkTGlzdEl0ZW0pCi0gICAgICAgIHJldHVybiBRU3RyaW5nKCk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpdGxlID0gV0tCYWNrRm9yd2FyZExpc3RJ
dGVtQ29weVRpdGxlKGQtPm1fYmFja0ZvcndhcmRMaXN0SXRlbS5nZXQoKSk7Ci0gICAgcmV0dXJu
IFdLU3RyaW5nQ29weVFTdHJpbmcodGl0bGUuZ2V0KCkpOwotfQotCi1RVXJsIFFXS0hpc3RvcnlJ
dGVtOjp1cmwoKSBjb25zdAotewotICAgIGlmICghZC0+bV9iYWNrRm9yd2FyZExpc3RJdGVtKQot
ICAgICAgICByZXR1cm4gUVVybCgpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VVJMKGQtPm1fYmFja0ZvcndhcmRMaXN0SXRlbS5nZXQo
KSk7Ci0gICAgcmV0dXJuIFdLVVJMQ29weVFVcmwodXJsLmdldCgpKTsKLX0KLQotUVdLSGlzdG9y
eVByaXZhdGU6OlFXS0hpc3RvcnlQcml2YXRlKFFXS1BhZ2UqIHBhZ2UsIFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0KiBsaXN0KQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2JhY2tGb3J3
YXJkTGlzdChsaXN0KQotewotfQotCi1RV0tIaXN0b3J5KiBRV0tIaXN0b3J5UHJpdmF0ZTo6Y3Jl
YXRlSGlzdG9yeShRV0tQYWdlKiBwYWdlLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdCogbGlz
dCkKLXsKLSAgICBRV0tIaXN0b3J5KiBoaXN0b3J5ID0gbmV3IFFXS0hpc3RvcnkoKTsKLSAgICBo
aXN0b3J5LT5kID0gbmV3IFFXS0hpc3RvcnlQcml2YXRlKHBhZ2UsIGxpc3QpOwotICAgIHJldHVy
biBoaXN0b3J5OwotfQotCi1RV0tIaXN0b3J5UHJpdmF0ZTo6flFXS0hpc3RvcnlQcml2YXRlKCkK
LXsKLX0KLQotUVdLSGlzdG9yeTo6UVdLSGlzdG9yeSgpCi17Ci19Ci0KLVFXS0hpc3Rvcnk6On5R
V0tIaXN0b3J5KCkKLXsKLSAgICBkZWxldGUgZDsKLX0KLQotaW50IFFXS0hpc3Rvcnk6OmJhY2tM
aXN0Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tM
aXN0Q291bnQodG9BUEkoZC0+bV9iYWNrRm9yd2FyZExpc3QpKTsKLX0KLQotaW50IFFXS0hpc3Rv
cnk6OmZvcndhcmRMaXN0Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBXS0JhY2tGb3J3YXJk
TGlzdEdldEZvcndhcmRMaXN0Q291bnQodG9BUEkoZC0+bV9iYWNrRm9yd2FyZExpc3QpKTsKLX0K
LQotaW50IFFXS0hpc3Rvcnk6OmNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYmFja0xpc3RD
b3VudCgpICsgZm9yd2FyZExpc3RDb3VudCgpOwotfQotCi1RV0tIaXN0b3J5SXRlbSBRV0tIaXN0
b3J5OjpjdXJyZW50SXRlbSgpIGNvbnN0Ci17Ci0gICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2Fy
ZExpc3RJdGVtUmVmPiBpdGVtUmVmID0gV0tCYWNrRm9yd2FyZExpc3RHZXRDdXJyZW50SXRlbSh0
b0FQSShkLT5tX2JhY2tGb3J3YXJkTGlzdCkpOwotICAgIFFXS0hpc3RvcnlJdGVtIGl0ZW0oaXRl
bVJlZi5nZXQoKSk7Ci0gICAgcmV0dXJuIGl0ZW07Ci19Ci0KLVFXS0hpc3RvcnlJdGVtIFFXS0hp
c3Rvcnk6OmJhY2tJdGVtKCkgY29uc3QKLXsKLSAgICBXS1JldGFpblB0cjxXS0JhY2tGb3J3YXJk
TGlzdEl0ZW1SZWY+IGl0ZW1SZWYgPSBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tJdGVtKHRvQVBJ
KGQtPm1fYmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgUVdLSGlzdG9yeUl0ZW0gaXRlbShpdGVtUmVm
LmdldCgpKTsKLSAgICByZXR1cm4gaXRlbTsKLX0KLQotUVdLSGlzdG9yeUl0ZW0gUVdLSGlzdG9y
eTo6Zm9yd2FyZEl0ZW0oKSBjb25zdAotewotICAgIFdLUmV0YWluUHRyPFdLQmFja0ZvcndhcmRM
aXN0SXRlbVJlZj4gaXRlbVJlZiA9IFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZEl0ZW0odG9B
UEkoZC0+bV9iYWNrRm9yd2FyZExpc3QpKTsKLSAgICBRV0tIaXN0b3J5SXRlbSBpdGVtKGl0ZW1S
ZWYuZ2V0KCkpOwotICAgIHJldHVybiBpdGVtOwotfQotCi1RV0tIaXN0b3J5SXRlbSBRV0tIaXN0
b3J5OjppdGVtQXQoaW50IGluZGV4KSBjb25zdAotewotICAgIFdLUmV0YWluUHRyPFdLQmFja0Zv
cndhcmRMaXN0SXRlbVJlZj4gaXRlbVJlZiA9IFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5k
ZXgodG9BUEkoZC0+bV9iYWNrRm9yd2FyZExpc3QpLCBpbmRleCk7Ci0gICAgUVdLSGlzdG9yeUl0
ZW0gaXRlbShpdGVtUmVmLmdldCgpKTsKLSAgICByZXR1cm4gaXRlbTsKLX0KLQotdm9pZCBRV0tI
aXN0b3J5Ojpnb1RvSXRlbUF0KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBXS1JldGFpblB0cjxX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+IGl0ZW1SZWYgPSBXS0JhY2tGb3J3YXJkTGlzdEdldEl0
ZW1BdEluZGV4KHRvQVBJKGQtPm1fYmFja0ZvcndhcmRMaXN0KSwgaW5kZXgpOwotICAgIGlmIChp
dGVtUmVmICYmIGQtPm1fcGFnZSkgewotICAgICAgICBRV0tIaXN0b3J5SXRlbSBpdGVtKGl0ZW1S
ZWYuZ2V0KCkpOwotICAgICAgICBXS1BhZ2VHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShkLT5tX3Bh
Z2UtPnBhZ2VSZWYoKSwgaXRlbS5kLT5tX2JhY2tGb3J3YXJkTGlzdEl0ZW0uZ2V0KCkpOwotICAg
IH0KLX0KLQotUUxpc3Q8UVdLSGlzdG9yeUl0ZW0+IFFXS0hpc3Rvcnk6OmJhY2tJdGVtcyhpbnQg
bWF4SXRlbXMpIGNvbnN0Ci17Ci0gICAgV0tBcnJheVJlZiBhcnJheVJlZiA9IFdLQmFja0Zvcndh
cmRMaXN0Q29weUJhY2tMaXN0V2l0aExpbWl0KHRvQVBJKGQtPm1fYmFja0ZvcndhcmRMaXN0KSwg
bWF4SXRlbXMpOwotICAgIGludCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXlSZWYpOwotICAg
IFFMaXN0PFFXS0hpc3RvcnlJdGVtPiBpdGVtTGlzdDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBXS1R5cGVSZWYgd2tIaXN0b3J5SXRlbSA9IFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChhcnJheVJlZiwgaSk7Ci0gICAgICAgIFdLQmFja0ZvcndhcmRMaXN0SXRl
bVJlZiBpdGVtUmVmID0gc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPih3a0hp
c3RvcnlJdGVtKTsKLSAgICAgICAgUVdLSGlzdG9yeUl0ZW0gaXRlbShpdGVtUmVmKTsKLSAgICAg
ICAgaXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwotICAgIH0KLSAgICByZXR1cm4gaXRlbUxpc3Q7Ci19
Ci0KLVFMaXN0PFFXS0hpc3RvcnlJdGVtPiBRV0tIaXN0b3J5Ojpmb3J3YXJkSXRlbXMoaW50IG1h
eEl0ZW1zKSBjb25zdAotewotICAgIFdLQXJyYXlSZWYgYXJyYXlSZWYgPSBXS0JhY2tGb3J3YXJk
TGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdCh0b0FQSShkLT5tX2JhY2tGb3J3YXJkTGlzdCks
IG1heEl0ZW1zKTsKLSAgICBpbnQgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGFycmF5UmVmKTsKLSAg
ICBRTGlzdDxRV0tIaXN0b3J5SXRlbT4gaXRlbUxpc3Q7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgV0tUeXBlUmVmIHdrSGlzdG9yeUl0ZW0gPSBXS0FycmF5
R2V0SXRlbUF0SW5kZXgoYXJyYXlSZWYsIGkpOwotICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1SZWYgaXRlbVJlZiA9IHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4od2tI
aXN0b3J5SXRlbSk7Ci0gICAgICAgIFFXS0hpc3RvcnlJdGVtIGl0ZW0oaXRlbVJlZik7Ci0gICAg
ICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVtKTsKLSAgICB9Ci0gICAgcmV0dXJuIGl0ZW1MaXN0Owot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a2hpc3Rv
cnkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdraGlzdG9yeS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTM3MzVjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdraGlzdG9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBKdWhhIFNhdm9sYWluZW4gKGp1
aGEuc2F2b2xhaW5lbkB3ZWVnby5maSkKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZm5kZWYgcXdraGlzdG9yeV9oCi0jZGVmaW5lIHF3
a2hpc3RvcnlfaAotCi0jaW5jbHVkZSAiV2ViS2l0Mi9XS0JhY2tGb3J3YXJkTGlzdEl0ZW0uaCIK
LSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRl
IDxRU2hhcmVkRGF0YT4KLQotY2xhc3MgUVdLSGlzdG9yeVByaXZhdGU7Ci1jbGFzcyBRV0tIaXN0
b3J5SXRlbVByaXZhdGU7Ci1jbGFzcyBRVXJsOwotY2xhc3MgUVN0cmluZzsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1jbGFzcyBXZWJCYWNrRm9yd2FyZExpc3Q7Ci19Ci0KLWNsYXNzIFFXRUJLSVRf
RVhQT1JUIFFXS0hpc3RvcnlJdGVtIHsKLXB1YmxpYzoKLSAgICBRV0tIaXN0b3J5SXRlbShjb25z
dCBRV0tIaXN0b3J5SXRlbSYgb3RoZXIpOwotICAgIFFXS0hpc3RvcnlJdGVtICZvcGVyYXRvcj0o
Y29uc3QgUVdLSGlzdG9yeUl0ZW0mIG90aGVyKTsKLQotICAgIH5RV0tIaXN0b3J5SXRlbSgpOwot
ICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKLSAgICBRVXJsIHVybCgpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIFFXS0hpc3RvcnlJdGVtKFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZik7Ci0KLSAg
ICBRRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPFFXS0hpc3RvcnlJdGVtUHJpdmF0ZT4gZDsK
LQotICAgIGZyaWVuZCBjbGFzcyBRV0tIaXN0b3J5OwotICAgIGZyaWVuZCBjbGFzcyBRV0tIaXN0
b3J5SXRlbVByaXZhdGU7Ci19OwotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV0tIaXN0b3J5IDog
cHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgaW50IGJhY2tMaXN0
Q291bnQoKSBjb25zdDsKLSAgICBpbnQgZm9yd2FyZExpc3RDb3VudCgpIGNvbnN0OwotICAgIGlu
dCBjb3VudCgpIGNvbnN0OwotICAgIFFXS0hpc3RvcnlJdGVtIGN1cnJlbnRJdGVtKCkgY29uc3Q7
Ci0gICAgUVdLSGlzdG9yeUl0ZW0gYmFja0l0ZW0oKSBjb25zdDsKLSAgICBRV0tIaXN0b3J5SXRl
bSBmb3J3YXJkSXRlbSgpIGNvbnN0OwotICAgIFFXS0hpc3RvcnlJdGVtIGl0ZW1BdChpbnQgaW5k
ZXgpIGNvbnN0OwotICAgIHZvaWQgZ29Ub0l0ZW1BdChpbnQgaW5kZXgpIGNvbnN0OwotICAgIFFM
aXN0PFFXS0hpc3RvcnlJdGVtPiBiYWNrSXRlbXMoaW50IG1heEl0ZW1zKSBjb25zdDsKLSAgICBR
TGlzdDxRV0tIaXN0b3J5SXRlbT4gZm9yd2FyZEl0ZW1zKGludCBtYXhJdGVtcykgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgUVdLSGlzdG9yeSgpOwotICAgIH5RV0tIaXN0b3J5KCk7Ci0KLSAgICBR
V0tIaXN0b3J5UHJpdmF0ZSogZDsKLSAgICBmcmllbmQgY2xhc3MgUVdLSGlzdG9yeVByaXZhdGU7
Ci0gICAgZnJpZW5kIGNsYXNzIFFXS1BhZ2VQcml2YXRlOwotfTsKLSNlbmRpZiAvKiBxd2toaXN0
b3J5X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdr
aGlzdG9yeV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a2hpc3Rvcnlf
cC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODhhYzBiLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdraGlzdG9yeV9wLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEp1aGEgU2F2
b2xhaW5lbiAoanVoYS5zYXZvbGFpbmVuQHdlZWdvLmZpKQotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBxd2toaXN0b3J5X3Bf
aAotI2RlZmluZSBxd2toaXN0b3J5X3BfaAotCi0jaW5jbHVkZSA8UVNoYXJlZERhdGE+Ci0jaW5j
bHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0jaW5j
bHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwotfQotCi1j
bGFzcyBRV0tIaXN0b3J5OwotY2xhc3MgUVdLUGFnZTsKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQg
UVdLSGlzdG9yeUl0ZW1Qcml2YXRlIDogcHVibGljIFFTaGFyZWREYXRhIHsKLXB1YmxpYzoKLSAg
ICAgICB+UVdLSGlzdG9yeUl0ZW1Qcml2YXRlKCk7Ci1wcml2YXRlOgotICAgIFFXS0hpc3RvcnlJ
dGVtUHJpdmF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgbGlzdEl0ZW0pOwotICAgIFdLUmV0
YWluUHRyPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4gbV9iYWNrRm9yd2FyZExpc3RJdGVtOwot
Ci0gICAgZnJpZW5kIGNsYXNzIFFXS0hpc3Rvcnk7Ci0gICAgZnJpZW5kIGNsYXNzIFFXS0hpc3Rv
cnlJdGVtOwotfTsKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdLSGlzdG9yeVByaXZhdGUgewot
cHVibGljOgotICAgIHN0YXRpYyBRV0tIaXN0b3J5KiBjcmVhdGVIaXN0b3J5KFFXS1BhZ2UqLCBX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdCopOwotCi1wcml2YXRlOgotICAgIFFXS0hpc3RvcnlQ
cml2YXRlKFFXS1BhZ2UqLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdCopOwotICAgIH5RV0tI
aXN0b3J5UHJpdmF0ZSgpOwotCi0gICAgUVdLUGFnZSogbV9wYWdlOwotICAgIFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0KiBtX2JhY2tGb3J3YXJkTGlzdDsKLQotICAgIGZyaWVuZCBjbGFzcyBR
V0tIaXN0b3J5OwotfTsKLQotI2VuZGlmIC8qIHF3a2hpc3RvcnlfcF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNWE1ZGRmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3a3BhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInF3a3BhZ2UuaCIK
LSNpbmNsdWRlICJxd2twYWdlX3AuaCIKLQotI2luY2x1ZGUgInF3a3ByZWZlcmVuY2VzX3AuaCIK
LQotI2luY2x1ZGUgIkNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAicWdyYXBoaWNzd2t2aWV3Lmgi
Ci0jaW5jbHVkZSAicXdrY29udGV4dC5oIgotI2luY2x1ZGUgInF3a2NvbnRleHRfcC5oIgotI2lu
Y2x1ZGUgInF3a2hpc3RvcnkuaCIKLSNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKLSNpbmNsdWRl
ICJGaW5kSW5kaWNhdG9yLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2
ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiVGlsZWREcmF3aW5n
QXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvbnRl
eHRNZW51UHJveHlRdC5oIgotI2luY2x1ZGUgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKLSNpbmNs
dWRlICJXZWJFdmVudEZhY3RvcnlRdC5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5UXQu
aCIKLSNpbmNsdWRlICJXZWJVbmRvQ29tbWFuZFF0LmgiCi0jaW5jbHVkZSAiV0tTdHJpbmdRdC5o
IgotI2luY2x1ZGUgIldLVVJMUXQuaCIKLSNpbmNsdWRlIDxRQWN0aW9uPgotI2luY2x1ZGUgPFFB
cHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+Ci0jaW5jbHVk
ZSA8UVN0eWxlPgotI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgotI2luY2x1ZGUgPFFVbmRvU3RhY2s+
Ci0jaW5jbHVkZSA8UXREZWJ1Zz4KLSNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tGcmFtZS5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tQ
YWdlR3JvdXAuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIFdlYkNv
cmU6OkNvbnRleHRNZW51QWN0aW9uIGNvbnRleHRNZW51QWN0aW9uRm9yV2ViQWN0aW9uKFFXS1Bh
Z2U6OldlYkFjdGlvbiBhY3Rpb24pCi17Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNl
IFFXS1BhZ2U6Ok9wZW5MaW5rOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtVGFnT3Blbkxpbms7Ci0gICAgY2FzZSBRV0tQYWdlOjpPcGVuTGlua0luTmV3V2luZG93Ogot
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdzsKLSAgICBjYXNlIFFXS1BhZ2U6OkNvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOwotICAg
IGNhc2UgUVdLUGFnZTo6T3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIHJldHVybiBXZWJD
b3JlOjpDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzsKLSAgICBjYXNlIFFX
S1BhZ2U6OkN1dDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0N1
dDsKLSAgICBjYXNlIFFXS1BhZ2U6OkNvcHk6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpDb250
ZXh0TWVudUl0ZW1UYWdDb3B5OwotICAgIGNhc2UgUVdLUGFnZTo6UGFzdGU6Ci0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdQYXN0ZTsKLSAgICBjYXNlIFFXS1BhZ2U6
OlNlbGVjdEFsbDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Nl
bGVjdEFsbDsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ05vQWN0
aW9uOwotfQotCi1zdGF0aWMgaW5saW5lIERyYWdPcGVyYXRpb24gZHJvcEFjdGlvblRvRHJhZ09w
ZXJhdGlvbihRdDo6RHJvcEFjdGlvbnMgYWN0aW9ucykKLXsKLSAgICB1bnNpZ25lZCByZXN1bHQg
PSAwOwotICAgIGlmIChhY3Rpb25zICYgUXQ6OkNvcHlBY3Rpb24pCi0gICAgICAgIHJlc3VsdCB8
PSBEcmFnT3BlcmF0aW9uQ29weTsKLSAgICBpZiAoYWN0aW9ucyAmIFF0OjpNb3ZlQWN0aW9uKQot
ICAgICAgICByZXN1bHQgfD0gKERyYWdPcGVyYXRpb25Nb3ZlIHwgRHJhZ09wZXJhdGlvbkdlbmVy
aWMpOwotICAgIGlmIChhY3Rpb25zICYgUXQ6OkxpbmtBY3Rpb24pCi0gICAgICAgIHJlc3VsdCB8
PSBEcmFnT3BlcmF0aW9uTGluazsKLSAgICBpZiAocmVzdWx0ID09IChEcmFnT3BlcmF0aW9uQ29w
eSB8IERyYWdPcGVyYXRpb25Nb3ZlIHwgRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0
aW9uTGluaykpCi0gICAgICAgIHJlc3VsdCA9IERyYWdPcGVyYXRpb25FdmVyeTsKLSAgICByZXR1
cm4gKERyYWdPcGVyYXRpb24pcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFF0OjpEcm9wQWN0
aW9uIGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24odW5zaWduZWQgZHJhZ09wZXJhdGlvbikKLXsK
LSAgICBRdDo6RHJvcEFjdGlvbiByZXN1bHQgPSBRdDo6SWdub3JlQWN0aW9uOwotICAgIGlmIChk
cmFnT3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAgICAgIHJlc3VsdCA9IFF0OjpD
b3B5QWN0aW9uOwotICAgIGVsc2UgaWYgKGRyYWdPcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uTW92
ZSkKLSAgICAgICAgcmVzdWx0ID0gUXQ6Ok1vdmVBY3Rpb247Ci0gICAgZWxzZSBpZiAoZHJhZ09w
ZXJhdGlvbiAmIERyYWdPcGVyYXRpb25HZW5lcmljKQotICAgICAgICByZXN1bHQgPSBRdDo6TW92
ZUFjdGlvbjsKLSAgICBlbHNlIGlmIChkcmFnT3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkxpbmsp
Ci0gICAgICAgIHJlc3VsdCA9IFF0OjpMaW5rQWN0aW9uOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgUXQ6OkRyb3BBY3Rpb25zIGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rp
b25zKHVuc2lnbmVkIGRyYWdPcGVyYXRpb25zKQotewotICAgIFF0OjpEcm9wQWN0aW9ucyByZXN1
bHQgPSBRdDo6SWdub3JlQWN0aW9uOwotICAgIGlmIChkcmFnT3BlcmF0aW9ucyAmIERyYWdPcGVy
YXRpb25Db3B5KQotICAgICAgICByZXN1bHQgfD0gUXQ6OkNvcHlBY3Rpb247Ci0gICAgaWYgKGRy
YWdPcGVyYXRpb25zICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIHJlc3VsdCB8PSBRdDo6
TW92ZUFjdGlvbjsKLSAgICBpZiAoZHJhZ09wZXJhdGlvbnMgJiBEcmFnT3BlcmF0aW9uR2VuZXJp
YykKLSAgICAgICAgcmVzdWx0IHw9IFF0OjpNb3ZlQWN0aW9uOwotICAgIGlmIChkcmFnT3BlcmF0
aW9ucyAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICByZXN1bHQgfD0gUXQ6OkxpbmtBY3Rp
b247Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUVdLUGFnZVByaXZhdGU6OlFXS1BhZ2VQcml2
YXRlKFFXS1BhZ2UqIHFxLCBRV0tDb250ZXh0KiBjLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYpCi0gICAgOiBxKHFxKQotICAgICwgdmlldygwKQotICAgICwgY29udGV4dChjKQotICAgICwg
cHJlZmVyZW5jZXMoMCkKLSAgICAsIGNyZWF0ZU5ld1BhZ2VGbigwKQotICAgICwgYmFja2luZ1N0
b3JlVHlwZShRR3JhcGhpY3NXS1ZpZXc6OlNpbXBsZSkKLSAgICAsIGlzQ29ubmVjdGVkVG9Fbmdp
bmUodHJ1ZSkKLSNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCi0gICAgLCB1bmRvU3RhY2soYWRvcHRQ
dHIobmV3IFFVbmRvU3RhY2socXEpKSkKLSNlbmRpZgotewotICAgIG1lbXNldChhY3Rpb25zLCAw
LCBzaXplb2YoYWN0aW9ucykpOwotICAgIHBhZ2UgPSBjb250ZXh0LT5kLT5jb250ZXh0LT5jcmVh
dGVXZWJQYWdlKHRoaXMsIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKLSAgICBoaXN0b3J5ID0gUVdL
SGlzdG9yeVByaXZhdGU6OmNyZWF0ZUhpc3RvcnkocSwgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkp
OwotfQotCi1RV0tQYWdlUHJpdmF0ZTo6flFXS1BhZ2VQcml2YXRlKCkKLXsKLSAgICBwYWdlLT5j
bG9zZSgpOwotICAgIGRlbGV0ZSBoaXN0b3J5OwotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpp
bml0KFFHcmFwaGljc0l0ZW0qIHZpZXcsIFFHcmFwaGljc1dLVmlldzo6QmFja2luZ1N0b3JlVHlw
ZSBiYWNraW5nU3RvcmVUeXBlKQotewotICAgIHRoaXMtPnZpZXcgPSB2aWV3OwotICAgIHRoaXMt
PmJhY2tpbmdTdG9yZVR5cGUgPSBiYWNraW5nU3RvcmVUeXBlOwotICAgIHBhZ2UtPmluaXRpYWxp
emVXZWJQYWdlKCk7Ci19Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6OnNldEN1cnNvcihjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKLXsKLSNpZm5kZWYgUVRfTk9fQ1VSU09SCi0gICAgZW1p
dCBxLT5jdXJzb3JDaGFuZ2VkKCpjdXJzb3IucGxhdGZvcm1DdXJzb3IoKSk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6c2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgVmlld3Bv
cnRBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgdmlld3BvcnRBcmd1bWVudHMgPSBhcmdzOwotICAg
IGVtaXQgcS0+dmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKTsKLX0KLQotUGFzc093blB0cjxEcmF3
aW5nQXJlYVByb3h5PiBRV0tQYWdlUHJpdmF0ZTo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCi17
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhdm9pZCB0aGlzIGNhc3QgYnkgZGVjb3VwbGluZyB0
aGUgdmlldyBmcm9tIHRoZSBwYWdlLgotICAgIFFHcmFwaGljc1dLVmlldyogd2tWaWV3ID0gc3Rh
dGljX2Nhc3Q8UUdyYXBoaWNzV0tWaWV3Kj4odmlldyk7Ci0KLSNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKLSAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBRR3JhcGhpY3NXS1ZpZXc6
OlRpbGVkKQotICAgICAgICByZXR1cm4gVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUod2tW
aWV3LCBwYWdlLmdldCgpKTsKLSNlbmRpZgotICAgIHJldHVybiBEcmF3aW5nQXJlYVByb3h5SW1w
bDo6Y3JlYXRlKHBhZ2UuZ2V0KCkpOwotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgdmlldy0+
dXBkYXRlKFFSZWN0KHJlY3QpKTsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6ZGlzcGxheVZp
ZXcoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgUVdLUGFnZVByaXZh
dGU6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCi19Ci0KLVdlYkNvcmU6OkludFNpemUgUVdLUGFnZVByaXZhdGU6OnZpZXdTaXplKCkKLXsK
LSAgICByZXR1cm4gdmlldyA/IFdlYkNvcmU6OkludFNpemUodmlldy0+Ym91bmRpbmdSZWN0KCku
c2l6ZSgpLnRvU2l6ZSgpKSA6IFdlYkNvcmU6OkludFNpemUoKTsKLX0KLQotYm9vbCBRV0tQYWdl
UHJpdmF0ZTo6aXNWaWV3V2luZG93QWN0aXZlKCkKLXsKLSAgICByZXR1cm4gdmlldyAmJiB2aWV3
LT5pc0FjdGl2ZSgpOwotfQotCi1ib29sIFFXS1BhZ2VQcml2YXRlOjppc1ZpZXdGb2N1c2VkKCkK
LXsKLSAgICByZXR1cm4gdmlldyAmJiB2aWV3LT5oYXNGb2N1cygpOwotfQotCi1ib29sIFFXS1Bh
Z2VQcml2YXRlOjppc1ZpZXdWaXNpYmxlKCkKLXsKLSAgICByZXR1cm4gdmlldyAmJiB2aWV3LT5p
c1Zpc2libGUoKTsKLX0KLQotYm9vbCBRV0tQYWdlUHJpdmF0ZTo6aXNWaWV3SW5XaW5kb3coKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UVdLUGFnZVByaXZhdGU6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBR
V0tQYWdlUHJpdmF0ZTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpwYWdlRGlkUmVx
dWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgZW1pdCBxLT5zY3JvbGxS
ZXF1ZXN0ZWQocG9pbnQueCgpLCBwb2ludC55KCkpOwotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRl
OjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBl
bWl0IHEtPmNvbnRlbnRzU2l6ZUNoYW5nZWQoUVNpemUobmV3U2l6ZSkpOwotfQotCi12b2lkIFFX
S1BhZ2VQcml2YXRlOjp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG5ld1Rvb2x0aXApCi17Ci0gICAgZW1pdCBxLT50b29sVGlwQ2hhbmdlZChRU3RyaW5nKG5ld1Rv
b2x0aXApKTsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQ
YXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmQsIFdlYlBhZ2VQcm94eTo6VW5k
b09yUmVkbyB1bmRvT3JSZWRvKQotewotI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKLSAgICBpZiAo
dW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pIHsKLSAgICAgICAgY29uc3QgV2ViVW5k
b0NvbW1hbmRRdCogd2ViVW5kb0NvbW1hbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJVbmRvQ29t
bWFuZFF0Kj4odW5kb1N0YWNrLT5jb21tYW5kKHVuZG9TdGFjay0+aW5kZXgoKSkpOwotICAgICAg
ICBpZiAod2ViVW5kb0NvbW1hbmQgJiYgd2ViVW5kb0NvbW1hbmQtPmluVW5kb1JlZG8oKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdW5kb1N0YWNrLT5wdXNoKG5ldyBXZWJVbmRvQ29t
bWFuZFF0KGNvbW1hbmQpKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0
ZTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQotewotI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKLSAg
ICB1bmRvU3RhY2stPmNsZWFyKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBRV0tQYWdlUHJpdmF0ZTo6
Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCi17Ci0jaWZk
ZWYgUVRfTk9fVU5ET1NUQUNLCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICBpZiAodW5k
b09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pCi0gICAgICAgIHJldHVybiB1bmRvU3RhY2st
PmNhblVuZG8oKTsKLSAgICByZXR1cm4gdW5kb1N0YWNrLT5jYW5SZWRvKCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5k
b09yUmVkbyB1bmRvT3JSZWRvKQotewotI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKLSAgICBpZiAo
dW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pCi0gICAgICAgIHVuZG9TdGFjay0+dW5k
bygpOwotICAgIGVsc2UKLSAgICAgICAgdW5kb1N0YWNrLT5yZWRvKCk7Ci0jZW5kaWYKLX0KLQot
RmxvYXRSZWN0IFFXS1BhZ2VQcml2YXRlOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFFXS1BhZ2VQ
cml2YXRlOjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0
dXJuIHBvaW50OwotfQotCi1JbnRSZWN0IFFXS1BhZ2VQcml2YXRlOjp3aW5kb3dUb1NjcmVlbihj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiByZWN0OwotfQotCi1GbG9hdFJlY3Qg
UVdLUGFnZVByaXZhdGU6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6OnNlbGVjdGlv
bkNoYW5nZWQoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKLXsKLX0KLQotdm9pZCBRV0tQYWdlUHJp
dmF0ZTo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCkKLXsKLX0KLQotUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUVdLUGFnZVByaXZhdGU6
OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopCi17Ci0gICAgcmV0dXJuIFdlYlBv
cHVwTWVudVByb3h5UXQ6OmNyZWF0ZSgpOwotfQotCi1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51
UHJveHk+IFFXS1BhZ2VQcml2YXRlOjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94
eSopCi17Ci0gICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKHEpOwotfQot
Ci12b2lkIFFXS1BhZ2VQcml2YXRlOjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZElu
ZGljYXRvcj4sIGJvb2wgZmFkZU91dCkKLXsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6ZGlk
Q29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKQotewot
fQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmKQotewotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpmbGFzaEJh
Y2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1RV2lkZ2V0KiBRV0tQYWdlUHJpdmF0ZTo6b3duZXJXaWRnZXQoKQot
ewotICAgIGlmICghdmlldyB8fCAhdmlldy0+c2NlbmUoKSB8fCB2aWV3LT5zY2VuZSgpLT52aWV3
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRTGlzdDxRR3JhcGhpY3NW
aWV3Kj4gdmlld3MgPSB2aWV3LT5zY2VuZSgpLT52aWV3cygpOwotICAgIGlmICh2aWV3cy5zaXpl
KCkgPiAxKQotICAgICAgICBxV2FybmluZygiQ2Fubm90IHN1cHBvcnQgbXVsdGlwbGUgdmlld3Mi
KTsKLQotICAgIHJldHVybiB2aWV3cy5hdCgwKTsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6
cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIFFSZWN0IGFyZWEpCi17Ci0gICAgaWYgKHBhZ2UtPmlz
VmFsaWQoKSAmJiBwYWdlLT5kcmF3aW5nQXJlYSgpKSB7Ci0gICAgICAgIGlmIChwYWdlLT5kcmF3
aW5nQXJlYSgpLT50eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlSW1wbCkgewotICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSB1bnBhaW50ZWQgcmVnaW9uPwotICAgICAg
ICAgICAgV2ViS2l0OjpSZWdpb24gdW5wYWludGVkUmVnaW9uOwotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihwYWdlLT5kcmF3aW5nQXJlYSgpKS0+cGFpbnQo
cGFpbnRlciwgYXJlYSwgdW5wYWludGVkUmVnaW9uKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBwYWdlLT5kcmF3aW5nQXJlYSgpLT5wYWludChJbnRSZWN0KGFyZWEpLCBwYWludGVyKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QoYXJlYSwgUXQ6OndoaXRlKTsK
LX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQot
ewotICAgIHBhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChl
dikpOwotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjprZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50
KiBldikKLXsKLSAgICBwYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQoZXYpKTsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6bW91c2VNb3ZlRXZlbnQoUUdy
YXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldikKLXsKLSAgICAvLyBGb3Igc29tZSByZWFzb24gbW91
c2UgcHJlc3MgcmVzdWx0cyBpbiBtb3VzZSBob3ZlciAod2hpY2ggaXMKLSAgICAvLyBjb252ZXJ0
ZWQgdG8gbW91c2UgbW92ZSBmb3IgV2ViS2l0KS4gV2UgaWdub3JlIHRoZXNlIGhvdmVyCi0gICAg
Ly8gZXZlbnRzIGJ5IGNvbXBhcmluZyBsYXN0UG9zIHdpdGggbmV3UG9zLgotICAgIC8vIE5PVEU6
IGxhc3RQb3MgZnJvbSB0aGUgZXZlbnQgYWx3YXlzIGNvbWVzIGVtcHR5LCBzbyB3ZSB3b3JrCi0g
ICAgLy8gYXJvdW5kIHRoYXQgaGVyZS4KLSAgICBzdGF0aWMgUVBvaW50RiBsYXN0UG9zID0gUVBv
aW50RigpOwotICAgIGlmIChsYXN0UG9zID09IGV2LT5wb3MoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGxhc3RQb3MgPSBldi0+cG9zKCk7Ci0KLSAgICBwYWdlLT5oYW5kbGVNb3VzZUV2ZW50KE5h
dGl2ZVdlYk1vdXNlRXZlbnQoZXYsIDApKTsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6bW91
c2VQcmVzc0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXYpCi17Ci0gICAgaWYgKHRy
aXBsZUNsaWNrVGltZXIuaXNBY3RpdmUoKSAmJiAoZXYtPnBvcygpIC0gdHJpcGxlQ2xpY2spLm1h
bmhhdHRhbkxlbmd0aCgpIDwgUUFwcGxpY2F0aW9uOjpzdGFydERyYWdEaXN0YW5jZSgpKSB7Ci0g
ICAgICAgIHBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChldiwgMykp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGFnZS0+aGFuZGxlTW91c2VFdmVudChO
YXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAxKSk7Ci19Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6Om1v
dXNlUmVsZWFzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXYpCi17Ci0gICAgcGFn
ZS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAwKSk7Ci19Ci0KLXZv
aWQgUVdLUGFnZVByaXZhdGU6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NTY2VuZU1v
dXNlRXZlbnQqIGV2KQotewotICAgIHBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91
c2VFdmVudChldiwgMikpOwotCi0gICAgdHJpcGxlQ2xpY2tUaW1lci5zdGFydChRQXBwbGljYXRp
b246OmRvdWJsZUNsaWNrSW50ZXJ2YWwoKSwgcSk7Ci0gICAgdHJpcGxlQ2xpY2sgPSBldi0+cG9z
KCkudG9Qb2ludCgpOwotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjp3aGVlbEV2ZW50KFFHcmFw
aGljc1NjZW5lV2hlZWxFdmVudCogZXYpCi17Ci0gICAgcGFnZS0+aGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KGV2KSk7Ci19Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6OnVwZGF0
ZUFjdGlvbihRV0tQYWdlOjpXZWJBY3Rpb24gYWN0aW9uKQotewotI2lmZGVmIFFUX05PX0FDVElP
TgotICAgIFFfVU5VU0VEKGFjdGlvbikKLSNlbHNlCi0gICAgUUFjdGlvbiogYSA9IGFjdGlvbnNb
YWN0aW9uXTsKLSAgICBpZiAoIWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxXZWJL
aXQ6OldlYkZyYW1lUHJveHk+IG1haW5GcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOwotICAgIGlm
ICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGVuYWJsZWQgPSBhLT5p
c0VuYWJsZWQoKTsKLSAgICBib29sIGNoZWNrZWQgPSBhLT5pc0NoZWNrZWQoKTsKLQotICAgIHN3
aXRjaCAoYWN0aW9uKSB7Ci0gICAgY2FzZSBRV0tQYWdlOjpCYWNrOgotICAgICAgICBlbmFibGVk
ID0gcGFnZS0+Y2FuR29CYWNrKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUVdLUGFnZTo6
Rm9yd2FyZDoKLSAgICAgICAgZW5hYmxlZCA9IHBhZ2UtPmNhbkdvRm9yd2FyZCgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFFXS1BhZ2U6OlN0b3A6Ci0gICAgICAgIGVuYWJsZWQgPSAhKFdl
YkZyYW1lUHJveHk6OkxvYWRTdGF0ZUZpbmlzaGVkID09IG1haW5GcmFtZS0+bG9hZFN0YXRlKCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFXS1BhZ2U6OlJlbG9hZDoKLSAgICAgICAgZW5h
YmxlZCA9IChXZWJGcmFtZVByb3h5OjpMb2FkU3RhdGVGaW5pc2hlZCA9PSBtYWluRnJhbWUtPmxv
YWRTdGF0ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgYS0+c2V0RW5hYmxlZChlbmFibGVkKTsKLQotICAgIGlmIChhLT5pc0No
ZWNrYWJsZSgpKQotICAgICAgICBhLT5zZXRDaGVja2VkKGNoZWNrZWQpOwotI2VuZGlmIC8vIFFU
X05PX0FDVElPTgotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjp1cGRhdGVOYXZpZ2F0aW9uQWN0
aW9ucygpCi17Ci0gICAgdXBkYXRlQWN0aW9uKFFXS1BhZ2U6OkJhY2spOwotICAgIHVwZGF0ZUFj
dGlvbihRV0tQYWdlOjpGb3J3YXJkKTsKLSAgICB1cGRhdGVBY3Rpb24oUVdLUGFnZTo6U3RvcCk7
Ci0gICAgdXBkYXRlQWN0aW9uKFFXS1BhZ2U6OlJlbG9hZCk7Ci19Ci0KLSNpZm5kZWYgUVRfTk9f
QUNUSU9OCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpfcV93ZWJBY3Rpb25UcmlnZ2VyZWQoYm9vbCBj
aGVja2VkKQotewotICAgIFFBY3Rpb24qIGEgPSBxb2JqZWN0X2Nhc3Q8UUFjdGlvbio+KHEtPnNl
bmRlcigpKTsKLSAgICBpZiAoIWEpCi0gICAgICAgIHJldHVybjsKLSAgICBRV0tQYWdlOjpXZWJB
Y3Rpb24gYWN0aW9uID0gc3RhdGljX2Nhc3Q8UVdLUGFnZTo6V2ViQWN0aW9uPihhLT5kYXRhKCku
dG9JbnQoKSk7Ci0gICAgcS0+dHJpZ2dlckFjdGlvbihhY3Rpb24sIGNoZWNrZWQpOwotfQotI2Vu
ZGlmIC8vIFFUX05PX0FDVElPTgotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjp0b3VjaEV2ZW50KFFU
b3VjaEV2ZW50KiBldmVudCkKLXsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIFdlYlRv
dWNoRXZlbnQgdG91Y2hFdmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViVG91Y2hFdmVu
dChldmVudCk7Ci0gICAgcGFnZS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKLSNlbHNl
Ci0gICAgZXZlbnQtPmlnbm9yZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6
OmRyYWdFbnRlckV2ZW50KFFHcmFwaGljc1NjZW5lRHJhZ0Ryb3BFdmVudCogZXYpCi17Ci0jaWZu
ZGVmIFFUX05PX0RSQUdBTkREUk9QCi0gICAgcGFnZS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7Ci0g
ICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZXYtPm1pbWVEYXRhKCksIGV2LT5wb3MoKS50b1BvaW50KCks
IFFDdXJzb3I6OnBvcygpLCBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGV2LT5wb3NzaWJsZUFj
dGlvbnMoKSkpOwotICAgIHBhZ2UtPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSk7Ci0gICAgZXYtPmFj
Y2VwdFByb3Bvc2VkQWN0aW9uKCk7Ci0jZWxzZQotICAgIFFfVU5VU0VEKGV2KQotI2VuZGlmCi19
Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6OmRyYWdMZWF2ZUV2ZW50KFFHcmFwaGljc1NjZW5lRHJh
Z0Ryb3BFdmVudCogZXYpCi17Ci0jaWZuZGVmIFFUX05PX0RSQUdBTkREUk9QCi0gICAgRHJhZ0Rh
dGEgZHJhZ0RhdGEoMCwgSW50UG9pbnQoKSwgUUN1cnNvcjo6cG9zKCksIERyYWdPcGVyYXRpb25O
b25lKTsKLSAgICBwYWdlLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7Ci0gICAgcGFnZS0+cmVzZXRE
cmFnT3BlcmF0aW9uKCk7Ci0jZWxzZQotICAgIFFfVU5VU0VEKGV2KQotI2VuZGlmCi19Ci0KLXZv
aWQgUVdLUGFnZVByaXZhdGU6OmRyYWdNb3ZlRXZlbnQoUUdyYXBoaWNzU2NlbmVEcmFnRHJvcEV2
ZW50KiBldikKLXsKLSNpZm5kZWYgUVRfTk9fRFJBR0FORERST1AKLSAgICBEcmFnRGF0YSBkcmFn
RGF0YShldi0+bWltZURhdGEoKSwgZXYtPnBvcygpLnRvUG9pbnQoKSwgUUN1cnNvcjo6cG9zKCks
IGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZXYtPnBvc3NpYmxlQWN0aW9ucygpKSk7Ci0gICAg
cGFnZS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKLSAgICBldi0+c2V0RHJvcEFjdGlvbihkcmFn
T3BlcmF0aW9uVG9Ecm9wQWN0aW9uKHBhZ2UtPmRyYWdPcGVyYXRpb24oKSkpOwotICAgIGlmIChw
YWdlLT5kcmFnT3BlcmF0aW9uKCkgIT0gRHJhZ09wZXJhdGlvbk5vbmUpCi0gICAgICAgIGV2LT5h
Y2NlcHQoKTsKLSNlbHNlCi0gICAgUV9VTlVTRUQoZXYpCi0jZW5kaWYKLX0KLQotdm9pZCBRV0tQ
YWdlUHJpdmF0ZTo6ZHJvcEV2ZW50KFFHcmFwaGljc1NjZW5lRHJhZ0Ryb3BFdmVudCogZXYpCi17
Ci0jaWZuZGVmIFFUX05PX0RSQUdBTkREUk9QCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZXYtPm1p
bWVEYXRhKCksIGV2LT5wb3MoKS50b1BvaW50KCksIFFDdXJzb3I6OnBvcygpLCBkcm9wQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKGV2LT5wb3NzaWJsZUFjdGlvbnMoKSkpOwotICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgcGFnZS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhLCBT
dHJpbmcoKSwgaGFuZGxlKTsKLSAgICBldi0+c2V0RHJvcEFjdGlvbihkcmFnT3BlcmF0aW9uVG9E
cm9wQWN0aW9uKHBhZ2UtPmRyYWdPcGVyYXRpb24oKSkpOwotICAgIGV2LT5hY2NlcHQoKTsKLSNl
bHNlCi0gICAgUV9VTlVTRUQoZXYpCi0jZW5kaWYKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6
ZGlkUmVsYXVuY2hQcm9jZXNzKCkKLXsKLSAgICBRR3JhcGhpY3NXS1ZpZXcqIHdrVmlldyA9IHN0
YXRpY19jYXN0PFFHcmFwaGljc1dLVmlldyo+KHZpZXcpOwotICAgIGlmICh3a1ZpZXcpCi0gICAg
ICAgIHEtPnNldFZpZXdwb3J0U2l6ZSh3a1ZpZXctPnNpemUoKS50b1NpemUoKSk7Ci0KLSAgICBp
c0Nvbm5lY3RlZFRvRW5naW5lID0gdHJ1ZTsKLSAgICBlbWl0IHEtPmVuZ2luZUNvbm5lY3Rpb25D
aGFuZ2VkKHRydWUpOwotfQotCi12b2lkIFFXS1BhZ2VQcml2YXRlOjpwcm9jZXNzRGlkQ3Jhc2go
KQotewotICAgIGlzQ29ubmVjdGVkVG9FbmdpbmUgPSBmYWxzZTsKLSAgICBlbWl0IHEtPmVuZ2lu
ZUNvbm5lY3Rpb25DaGFuZ2VkKGZhbHNlKTsKLX0KLQotUVdLUGFnZTo6UVdLUGFnZShRV0tDb250
ZXh0KiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi0gICAgOiBkKG5ldyBR
V0tQYWdlUHJpdmF0ZSh0aGlzLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYpKQotewotICAgIGluaXQo
KTsKLX0KLQotUVdLUGFnZTo6UVdLUGFnZShRV0tDb250ZXh0KiBjb250ZXh0KQotICAgIDogZChu
ZXcgUVdLUGFnZVByaXZhdGUodGhpcywgY29udGV4dCkpCi17Ci0gICAgaW5pdCgpOwotfQotCi12
b2lkIFFXS1BhZ2U6OmluaXQoKQotewotICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkQ2xpZW50
ID0gewotICAgICAgICAwLCAgICAgIC8qIHZlcnNpb24gKi8KLSAgICAgICAgdGhpcywgICAvKiBj
bGllbnRJbmZvICovCi0gICAgICAgIHF0X3drX2RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUsCi0gICAgICAgIHF0X3drX2RpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lLAotICAgICAgICBxdF93a19kaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVy
cm9yRm9yRnJhbWUsCi0gICAgICAgIHF0X3drX2RpZENvbW1pdExvYWRGb3JGcmFtZSwKLSAgICAg
ICAgcXRfd2tfZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUsCi0gICAgICAgIHF0X3drX2Rp
ZEZpbmlzaExvYWRGb3JGcmFtZSwKLSAgICAgICAgcXRfd2tfZGlkRmFpbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSwKLSAgICAgICAgcXRfd2tfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1l
LAotICAgICAgICBxdF93a19kaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSwKLSAgICAgICAgcXRfd2tf
ZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSwKLSAgICAgICAgcXRfd2tfZGlkRmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0Rm9yRnJhbWUsCi0gICAgICAgIHF0X3drX2RpZFJlbW92ZUZyYW1lRnJvbUhp
ZXJhcmNoeSwKLSAgICAgICAgMCwgLyogZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1l
ICovCi0gICAgICAgIDAsIC8qIGRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lICovCi0gICAg
ICAgIDAsIC8qIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VJbkZyYW1lICov
Ci0gICAgICAgIDAsIC8qIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUg
Ki8KLSAgICAgICAgcXRfd2tfZGlkU3RhcnRQcm9ncmVzcywKLSAgICAgICAgcXRfd2tfZGlkQ2hh
bmdlUHJvZ3Jlc3MsCi0gICAgICAgIHF0X3drX2RpZEZpbmlzaFByb2dyZXNzLAotICAgICAgICBx
dF93a19kaWRCZWNvbWVVbnJlc3BvbnNpdmUsCi0gICAgICAgIHF0X3drX2RpZEJlY29tZVJlc3Bv
bnNpdmUsCi0gICAgICAgIDAsICAvKiBwcm9jZXNzRGlkQ3Jhc2ggKi8KLSAgICAgICAgMCwgIC8q
IGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCAqLwotICAgICAgICAwLCAgLyogc2hvdWxkR29Ub0Jh
Y2tGb3J3YXJkTGlzdEl0ZW0gKi8KLSAgICAgICAgMCAgIC8qIGRpZEZhaWxUb0luaXRpYWxpemVQ
bHVnaW4gKi8KLSAgICB9OwotICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQocGFnZVJlZigp
LCAmbG9hZENsaWVudCk7Ci0KLSAgICBXS1BhZ2VVSUNsaWVudCB1aUNsaWVudCA9IHsKLSAgICAg
ICAgMCwgICAgICAvKiB2ZXJzaW9uICovCi0gICAgICAgIHRoaXMsICAgLyogY2xpZW50SW5mbyAq
LwotICAgICAgICBxdF93a19jcmVhdGVOZXdQYWdlLAotICAgICAgICBxdF93a19zaG93UGFnZSwK
LSAgICAgICAgcXRfd2tfY2xvc2UsCi0gICAgICAgIHF0X3drX3Rha2VGb2N1cywKLSAgICAgICAg
MCwgIC8qIGZvY3VzICovCi0gICAgICAgIDAsICAvKiB1bmZvY3VzICovCi0gICAgICAgIHF0X3dr
X3J1bkphdmFTY3JpcHRBbGVydCwKLSAgICAgICAgMCwgIC8qIHJ1bkphdmFTY3JpcHRDb25maXJt
ICovCi0gICAgICAgIDAsICAvKiBydW5KYXZhU2NyaXB0UHJvbXB0ICovCi0gICAgICAgIHF0X3dr
X3NldFN0YXR1c1RleHQsCi0gICAgICAgIDAsICAvKiBtb3VzZURpZE1vdmVPdmVyRWxlbWVudCAq
LwotICAgICAgICAwLCAgLyogbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQgKi8KLSAgICAgICAg
MCwgIC8qIGRpZE5vdEhhbmRsZUtleUV2ZW50ICovCi0gICAgICAgIDAsICAvKiBkaWROb3RIYW5k
bGVXaGVlbEV2ZW50ICovCi0gICAgICAgIDAsICAvKiB0b29sYmFyc0FyZVZpc2libGUgKi8KLSAg
ICAgICAgMCwgIC8qIHNldFRvb2xiYXJzQXJlVmlzaWJsZSAqLwotICAgICAgICAwLCAgLyogbWVu
dUJhcklzVmlzaWJsZSAqLwotICAgICAgICAwLCAgLyogc2V0TWVudUJhcklzVmlzaWJsZSAqLwot
ICAgICAgICAwLCAgLyogc3RhdHVzQmFySXNWaXNpYmxlICovCi0gICAgICAgIDAsICAvKiBzZXRT
dGF0dXNCYXJJc1Zpc2libGUgKi8KLSAgICAgICAgMCwgIC8qIGlzUmVzaXphYmxlICovCi0gICAg
ICAgIDAsICAvKiBzZXRJc1Jlc2l6YWJsZSAqLwotICAgICAgICAwLCAgLyogZ2V0V2luZG93RnJh
bWUgKi8KLSAgICAgICAgMCwgIC8qIHNldFdpbmRvd0ZyYW1lICovCi0gICAgICAgIDAsICAvKiBy
dW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwgKi8KLSAgICAgICAgMCwgIC8qIGRpZERyYXcgKi8K
LSAgICAgICAgMCwgIC8qIHBhZ2VEaWRTY3JvbGwgKi8KLSAgICAgICAgMCwgIC8qIGV4Y2VlZGVk
RGF0YWJhc2VRdW90YSAqLwotICAgICAgICAwLCAgLyogcnVuT3BlblBhbmVsICovCi0gICAgICAg
IDAsICAvKiBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ICovCi0g
ICAgICAgIDAsICAvKiBoZWFkZXJIZWlnaHQgKi8KLSAgICAgICAgMCwgIC8qIGZvb3RlckhlaWdo
dCAqLwotICAgICAgICAwLCAgLyogZHJhd0hlYWRlciAqLwotICAgICAgICAwLCAgLyogZHJhd0Zv
b3RlciAqLwotICAgICAgICAwLCAgLyogcHJpbnRGcmFtZSAqLwotICAgICAgICAwLCAgLyogcnVu
TW9kYWwgKi8KLSAgICAgICAgMCwgIC8qIGRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFt
ZSAqLwotICAgICAgICAwLCAgLyogc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlciAqLwot
ICAgICAgICAwLCAgLyogc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCAqLwotICAgIH07Ci0gICAg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KHBhZ2VSZWYoKSwgJnVpQ2xpZW50KTsKLX0KLQotUVdLUGFn
ZTo6flFXS1BhZ2UoKQotewotICAgIGRlbGV0ZSBkOwotfQotCi1RV0tQYWdlOjpWaWV3cG9ydEF0
dHJpYnV0ZXM6OlZpZXdwb3J0QXR0cmlidXRlcygpCi0gICAgOiBkKDApCi0gICAgLCBtX2luaXRp
YWxTY2FsZUZhY3RvcigtMS4wKQotICAgICwgbV9taW5pbXVtU2NhbGVGYWN0b3IoLTEuMCkKLSAg
ICAsIG1fbWF4aW11bVNjYWxlRmFjdG9yKC0xLjApCi0gICAgLCBtX2RldmljZVBpeGVsUmF0aW8o
LTEuMCkKLSAgICAsIG1faXNVc2VyU2NhbGFibGUodHJ1ZSkKLSAgICAsIG1faXNWYWxpZChmYWxz
ZSkKLXsKLQotfQotCi1RV0tQYWdlOjpWaWV3cG9ydEF0dHJpYnV0ZXM6OlZpZXdwb3J0QXR0cmli
dXRlcyhjb25zdCBRV0tQYWdlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIG90aGVyKQotICAgIDogZChv
dGhlci5kKQotICAgICwgbV9pbml0aWFsU2NhbGVGYWN0b3Iob3RoZXIubV9pbml0aWFsU2NhbGVG
YWN0b3IpCi0gICAgLCBtX21pbmltdW1TY2FsZUZhY3RvcihvdGhlci5tX21pbmltdW1TY2FsZUZh
Y3RvcikKLSAgICAsIG1fbWF4aW11bVNjYWxlRmFjdG9yKG90aGVyLm1fbWF4aW11bVNjYWxlRmFj
dG9yKQotICAgICwgbV9kZXZpY2VQaXhlbFJhdGlvKG90aGVyLm1fZGV2aWNlUGl4ZWxSYXRpbykK
LSAgICAsIG1faXNVc2VyU2NhbGFibGUob3RoZXIubV9pc1VzZXJTY2FsYWJsZSkKLSAgICAsIG1f
aXNWYWxpZChvdGhlci5tX2lzVmFsaWQpCi0gICAgLCBtX3NpemUob3RoZXIubV9zaXplKQotewot
Ci19Ci0KLVFXS1BhZ2U6OlZpZXdwb3J0QXR0cmlidXRlczo6flZpZXdwb3J0QXR0cmlidXRlcygp
Ci17Ci0KLX0KLQotUVdLUGFnZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiBRV0tQYWdlOjpWaWV3cG9y
dEF0dHJpYnV0ZXM6Om9wZXJhdG9yPShjb25zdCBRV0tQYWdlOjpWaWV3cG9ydEF0dHJpYnV0ZXMm
IG90aGVyKQotewotICAgIGlmICh0aGlzICE9ICZvdGhlcikgewotICAgICAgICBkID0gb3RoZXIu
ZDsKLSAgICAgICAgbV9pbml0aWFsU2NhbGVGYWN0b3IgPSBvdGhlci5tX2luaXRpYWxTY2FsZUZh
Y3RvcjsKLSAgICAgICAgbV9taW5pbXVtU2NhbGVGYWN0b3IgPSBvdGhlci5tX21pbmltdW1TY2Fs
ZUZhY3RvcjsKLSAgICAgICAgbV9tYXhpbXVtU2NhbGVGYWN0b3IgPSBvdGhlci5tX21heGltdW1T
Y2FsZUZhY3RvcjsKLSAgICAgICAgbV9kZXZpY2VQaXhlbFJhdGlvID0gb3RoZXIubV9kZXZpY2VQ
aXhlbFJhdGlvOwotICAgICAgICBtX2lzVXNlclNjYWxhYmxlID0gb3RoZXIubV9pc1VzZXJTY2Fs
YWJsZTsKLSAgICAgICAgbV9pc1ZhbGlkID0gb3RoZXIubV9pc1ZhbGlkOwotICAgICAgICBtX3Np
emUgPSBvdGhlci5tX3NpemU7Ci0gICAgfQotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1RV0tQ
YWdlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgUVdLUGFnZTo6dmlld3BvcnRBdHRyaWJ1dGVzRm9yU2l6
ZShjb25zdCBRU2l6ZSYgYXZhaWxhYmxlU2l6ZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgaW50IGRl
c2t0b3BXaWR0aCA9IDk4MDsKLSAgICBzdGF0aWMgaW50IGRldmljZURQSSA9IDE2MDsKLQotICAg
IFZpZXdwb3J0QXR0cmlidXRlcyByZXN1bHQ7Ci0KLSAgICAgaWYgKGF2YWlsYWJsZVNpemUuaXNF
bXB0eSgpKQotICAgICAgICAgcmV0dXJuIHJlc3VsdDsgLy8gUmV0dXJucyBhbiBpbnZhbGlkIGlu
c3RhbmNlLgotCi0gICAgLy8gRklYTUU6IEFkZCBhIHdheSB0byBnZXQgdGhlc2UgZGF0YSB2aWEg
dGhlIHBsYXRmb3JtIHBsdWdpbiBhbmQgZmFsbCBiYWNrCi0gICAgLy8gdG8gdGhlIHNpemUgb2Yg
dGhlIHZpZXcuCi0gICAgaW50IGRldmljZVdpZHRoID0gNDgwOwotICAgIGludCBkZXZpY2VIZWln
aHQgPSA4NjQ7Ci0KLSAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgY29uZiA9IFdlYkNv
cmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMoZC0+dmlld3BvcnRBcmd1bWVudHMsIGRlc2t0
b3BXaWR0aCwgZGV2aWNlV2lkdGgsIGRldmljZUhlaWdodCwgZGV2aWNlRFBJLCBhdmFpbGFibGVT
aXplKTsKLQotICAgIHJlc3VsdC5tX2lzVmFsaWQgPSB0cnVlOwotICAgIHJlc3VsdC5tX3NpemUg
PSBjb25mLmxheW91dFNpemU7Ci0gICAgcmVzdWx0Lm1faW5pdGlhbFNjYWxlRmFjdG9yID0gY29u
Zi5pbml0aWFsU2NhbGU7Ci0gICAgcmVzdWx0Lm1fbWluaW11bVNjYWxlRmFjdG9yID0gY29uZi5t
aW5pbXVtU2NhbGU7Ci0gICAgcmVzdWx0Lm1fbWF4aW11bVNjYWxlRmFjdG9yID0gY29uZi5tYXhp
bXVtU2NhbGU7Ci0gICAgcmVzdWx0Lm1fZGV2aWNlUGl4ZWxSYXRpbyA9IGNvbmYuZGV2aWNlUGl4
ZWxSYXRpbzsKLSAgICByZXN1bHQubV9pc1VzZXJTY2FsYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+
KGNvbmYudXNlclNjYWxhYmxlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUVdL
UGFnZTo6c2V0QWN0dWFsVmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBRUmVjdCYgcmVjdCkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBkLT5wYWdlLT5zZXRB
Y3R1YWxWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBRV0tQYWdl
Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldikKLXsKLSAgICBpbnQgdGltZXJJZCA9IGV2LT50
aW1lcklkKCk7Ci0gICAgaWYgKHRpbWVySWQgPT0gZC0+dHJpcGxlQ2xpY2tUaW1lci50aW1lcklk
KCkpCi0gICAgICAgIGQtPnRyaXBsZUNsaWNrVGltZXIuc3RvcCgpOwotICAgIGVsc2UKLSAgICAg
ICAgUU9iamVjdDo6dGltZXJFdmVudChldik7Ci19Ci0KLVdLUGFnZVJlZiBRV0tQYWdlOjpwYWdl
UmVmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdG9BUEkoZC0+cGFnZS5nZXQoKSk7Ci19Ci0KLVFX
S0NvbnRleHQqIFFXS1BhZ2U6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBkLT5jb250
ZXh0OwotfQotCi1RV0tQcmVmZXJlbmNlcyogUVdLUGFnZTo6cHJlZmVyZW5jZXMoKSBjb25zdAot
ewotICAgIGlmICghZC0+cHJlZmVyZW5jZXMpIHsKLSAgICAgICAgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmID0gV0tQYWdlR2V0UGFnZUdyb3VwKHBhZ2VSZWYoKSk7Ci0gICAgICAgIGQtPnBy
ZWZlcmVuY2VzID0gUVdLUHJlZmVyZW5jZXNQcml2YXRlOjpjcmVhdGVQcmVmZXJlbmNlcyhwYWdl
R3JvdXBSZWYpOwotICAgIH0KLQotICAgIHJldHVybiBkLT5wcmVmZXJlbmNlczsKLX0KLQotdm9p
ZCBRV0tQYWdlOjpzZXRDcmVhdGVOZXdQYWdlRnVuY3Rpb24oQ3JlYXRlTmV3UGFnZUZuIGZ1bmN0
aW9uKQotewotICAgIGQtPmNyZWF0ZU5ld1BhZ2VGbiA9IGZ1bmN0aW9uOwotfQotCi12b2lkIFFX
S1BhZ2U6OnNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1c2VyQWdlbnQpCi17Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVXNlckFnZW50KFdLU3RyaW5nQ3JlYXRlV2l0
aFFTdHJpbmcodXNlckFnZW50KSk7Ci0gICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KHBhZ2VS
ZWYoKSwgd2tVc2VyQWdlbnQuZ2V0KCkpOwotfQotCi1RU3RyaW5nIFFXS1BhZ2U6OmN1c3RvbVVz
ZXJBZ2VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoV0tQYWdl
Q29weUN1c3RvbVVzZXJBZ2VudChwYWdlUmVmKCkpKTsKLX0KLQotdm9pZCBRV0tQYWdlOjpsb2Fk
KGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2t1cmwoV0tV
UkxDcmVhdGVXaXRoUVVybCh1cmwpKTsKLSAgICBXS1BhZ2VMb2FkVVJMKHBhZ2VSZWYoKSwgd2t1
cmwuZ2V0KCkpOwotfQotCi12b2lkIFFXS1BhZ2U6OnNldFVybChjb25zdCBRVXJsJiB1cmwpCi17
Ci0gICAgbG9hZCh1cmwpOwotfQotCi1RVXJsIFFXS1BhZ2U6OnVybCgpIGNvbnN0Ci17Ci0gICAg
V0tSZXRhaW5QdHI8V0tGcmFtZVJlZj4gZnJhbWUgPSBXS1BhZ2VHZXRNYWluRnJhbWUocGFnZVJl
ZigpKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gUVVybCgpOwotICAgIHJldHVy
biBXS1VSTENvcHlRVXJsKFdLRnJhbWVDb3B5VVJMKGZyYW1lLmdldCgpKSk7Ci19Ci0KLVFTdHJp
bmcgUVdLUGFnZTo6dGl0bGUoKSBjb25zdAotewotICAgIHJldHVybiBXS1N0cmluZ0NvcHlRU3Ry
aW5nKFdLUGFnZUNvcHlUaXRsZShwYWdlUmVmKCkpKTsKLX0KLQotdm9pZCBRV0tQYWdlOjpzZXRW
aWV3cG9ydFNpemUoY29uc3QgUVNpemUmIHNpemUpCi17Ci0gICAgaWYgKGQtPnBhZ2UtPmRyYXdp
bmdBcmVhKCkpCi0gICAgICAgIGQtPnBhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6
ZShzaXplKSwgSW50U2l6ZSgpKTsKLX0KLQotcXJlYWwgUVdLUGFnZTo6dGV4dFpvb21GYWN0b3Io
KSBjb25zdAotewotICAgIHJldHVybiBXS1BhZ2VHZXRUZXh0Wm9vbUZhY3RvcihwYWdlUmVmKCkp
OwotfQotCi12b2lkIFFXS1BhZ2U6OnNldFRleHRab29tRmFjdG9yKHFyZWFsIHpvb21GYWN0b3Ip
Ci17Ci0gICAgV0tQYWdlU2V0VGV4dFpvb21GYWN0b3IocGFnZVJlZigpLCB6b29tRmFjdG9yKTsK
LX0KLQotcXJlYWwgUVdLUGFnZTo6cGFnZVpvb21GYWN0b3IoKSBjb25zdAotewotICAgIHJldHVy
biBXS1BhZ2VHZXRQYWdlWm9vbUZhY3RvcihwYWdlUmVmKCkpOwotfQotCi12b2lkIFFXS1BhZ2U6
OnNldFBhZ2Vab29tRmFjdG9yKHFyZWFsIHpvb21GYWN0b3IpCi17Ci0gICAgV0tQYWdlU2V0UGFn
ZVpvb21GYWN0b3IocGFnZVJlZigpLCB6b29tRmFjdG9yKTsKLX0KLQotdm9pZCBRV0tQYWdlOjpz
ZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHFyZWFsIHBhZ2Vab29tRmFjdG9yLCBxcmVhbCB0ZXh0
Wm9vbUZhY3RvcikKLXsKLSAgICBXS1BhZ2VTZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHBhZ2VS
ZWYoKSwgcGFnZVpvb21GYWN0b3IsIHRleHRab29tRmFjdG9yKTsKLX0KLQotUVdLSGlzdG9yeSog
UVdLUGFnZTo6aGlzdG9yeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmhpc3Rvcnk7Ci19Ci0K
LXZvaWQgUVdLUGFnZTo6c2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUoY29uc3Qg
UVNpemUmIHRhcmdldExheW91dFNpemUpCi17Ci0jaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCi0gICAgZC0+cGFnZS0+c2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUodGFy
Z2V0TGF5b3V0U2l6ZSk7Ci0jZW5kaWYKLX0KLQotI2lmbmRlZiBRVF9OT19BQ1RJT04KLXZvaWQg
UVdLUGFnZTo6dHJpZ2dlckFjdGlvbihXZWJBY3Rpb24gd2ViQWN0aW9uLCBib29sKQotewotICAg
IHN3aXRjaCAod2ViQWN0aW9uKSB7Ci0gICAgY2FzZSBCYWNrOgotICAgICAgICBkLT5wYWdlLT5n
b0JhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9yd2FyZDoKLSAgICAgICAgZC0+
cGFnZS0+Z29Gb3J3YXJkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0b3A6Ci0gICAg
ICAgIGQtPnBhZ2UtPnN0b3BMb2FkaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFJl
bG9hZDoKLSAgICAgICAgZC0+cGFnZS0+cmVsb2FkKC8qIHJlbG9hZEZyb21PcmlnaW4gKi8gdHJ1
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBRQWN0aW9uKiBxdEFjdGlvbiA9IGFjdGlvbih3ZWJBY3Rpb24pOwotICAgIFdlYktp
dDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSBtZW51SXRlbURhdGEoQWN0aW9uVHlwZSwgY29udGV4
dE1lbnVBY3Rpb25Gb3JXZWJBY3Rpb24od2ViQWN0aW9uKSwgcXRBY3Rpb24tPnRleHQoKSwgcXRB
Y3Rpb24tPmlzRW5hYmxlZCgpLCBxdEFjdGlvbi0+aXNDaGVja2VkKCkpOwotICAgIGQtPnBhZ2Ut
PmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKG1lbnVJdGVtRGF0YSk7Ci19Ci0jZW5kaWYgLy8gUVRf
Tk9fQUNUSU9OCi0KLSNpZm5kZWYgUVRfTk9fQUNUSU9OCi1RQWN0aW9uKiBRV0tQYWdlOjphY3Rp
b24oV2ViQWN0aW9uIGFjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoYWN0aW9uID09IFFXS1BhZ2U6
Ok5vV2ViQWN0aW9uIHx8IGFjdGlvbiA+PSBXZWJBY3Rpb25Db3VudCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBpZiAoZC0+YWN0aW9uc1thY3Rpb25dKQotICAgICAgICByZXR1cm4gZC0+YWN0
aW9uc1thY3Rpb25dOwotCi0gICAgUVN0cmluZyB0ZXh0OwotICAgIFFJY29uIGljb247Ci0gICAg
UVN0eWxlKiBzdHlsZSA9IHFvYmplY3RfY2FzdDxRQXBwbGljYXRpb24qPihRQ29yZUFwcGxpY2F0
aW9uOjppbnN0YW5jZSgpKS0+c3R5bGUoKTsKLSAgICBib29sIGNoZWNrYWJsZSA9IGZhbHNlOwot
Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIE9wZW5MaW5rOgotICAgICAgICB0ZXh0
ID0gY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICB0ZXh0ID0gY29udGV4dE1lbnVJdGVtVGFn
T3BlbkxpbmtJbk5ld1dpbmRvdygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcHlMaW5r
VG9DbGlwYm9hcmQ6Ci0gICAgICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1Rv
Q2xpcGJvYXJkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgT3BlbkltYWdlSW5OZXdXaW5k
b3c6Ci0gICAgICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRv
dygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJhY2s6Ci0gICAgICAgIHRleHQgPSBjb250
ZXh0TWVudUl0ZW1UYWdHb0JhY2soKTsKLSAgICAgICAgaWNvbiA9IHN0eWxlLT5zdGFuZGFyZElj
b24oUVN0eWxlOjpTUF9BcnJvd0JhY2spOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvcndh
cmQ6Ci0gICAgICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKTsKLSAgICAg
ICAgaWNvbiA9IHN0eWxlLT5zdGFuZGFyZEljb24oUVN0eWxlOjpTUF9BcnJvd0ZvcndhcmQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0b3A6Ci0gICAgICAgIHRleHQgPSBjb250ZXh0TWVu
dUl0ZW1UYWdTdG9wKCk7Ci0gICAgICAgIGljb24gPSBzdHlsZS0+c3RhbmRhcmRJY29uKFFTdHls
ZTo6U1BfQnJvd3NlclN0b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlbG9hZDoKLSAg
ICAgICAgdGV4dCA9IGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpOwotICAgICAgICBpY29uID0g
c3R5bGUtPnN0YW5kYXJkSWNvbihRU3R5bGU6OlNQX0Jyb3dzZXJSZWxvYWQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEN1dDoKLSAgICAgICAgdGV4dCA9IGNvbnRleHRNZW51SXRlbVRhZ0N1
dCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcHk6Ci0gICAgICAgIHRleHQgPSBjb250
ZXh0TWVudUl0ZW1UYWdDb3B5KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFzdGU6Ci0g
ICAgICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNlbGVjdEFsbDoKLSAgICAgICAgdGV4dCA9IGNvbnRleHRNZW51SXRlbVRhZ1Nl
bGVjdEFsbCgpOwotICAgICAgICBicmVhazsKLSNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCi0gICAg
Y2FzZSBVbmRvOiB7Ci0gICAgICAgIFFBY3Rpb24qIHVuZG9BY3Rpb24gPSBkLT51bmRvU3RhY2st
PmNyZWF0ZVVuZG9BY3Rpb24oZC0+cSk7Ci0gICAgICAgIGQtPmFjdGlvbnNbYWN0aW9uXSA9IHVu
ZG9BY3Rpb247Ci0gICAgICAgIHJldHVybiB1bmRvQWN0aW9uOwotICAgIH0KLSAgICBjYXNlIFJl
ZG86IHsKLSAgICAgICAgUUFjdGlvbiogcmVkb0FjdGlvbiA9IGQtPnVuZG9TdGFjay0+Y3JlYXRl
UmVkb0FjdGlvbihkLT5xKTsKLSAgICAgICAgZC0+YWN0aW9uc1thY3Rpb25dID0gcmVkb0FjdGlv
bjsKLSAgICAgICAgcmV0dXJuIHJlZG9BY3Rpb247Ci0gICAgfQotI2VuZGlmCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICh0
ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRQWN0aW9uKiBhID0gbmV3
IFFBY3Rpb24oZC0+cSk7Ci0gICAgYS0+c2V0VGV4dCh0ZXh0KTsKLSAgICBhLT5zZXREYXRhKGFj
dGlvbik7Ci0gICAgYS0+c2V0Q2hlY2thYmxlKGNoZWNrYWJsZSk7Ci0gICAgYS0+c2V0SWNvbihp
Y29uKTsKLQotICAgIGNvbm5lY3QoYSwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIHRoaXMsIFNM
T1QoX3Ffd2ViQWN0aW9uVHJpZ2dlcmVkKGJvb2wpKSk7Ci0KLSAgICBkLT5hY3Rpb25zW2FjdGlv
bl0gPSBhOwotICAgIGQtPnVwZGF0ZUFjdGlvbihhY3Rpb24pOwotICAgIHJldHVybiBhOwotfQot
I2VuZGlmIC8vIFFUX05PX0FDVElPTgotCi12b2lkIFFXS1BhZ2U6OmZpbmRab29tYWJsZUFyZWFG
b3JQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQotewotICAgIGQtPnBhZ2UtPmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludChwb2ludCk7Ci19Ci0KLXZvaWQgUVdLUGFnZVByaXZhdGU6OmRpZEZpbmRa
b29tYWJsZUFyZWEoY29uc3QgSW50UmVjdCYgYXJlYSkKLXsKLSAgICBlbWl0IHEtPnpvb21hYmxl
QXJlYUZvdW5kKFFSZWN0KGFyZWEpKTsKLX0KLQotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6c3RhcnRE
cmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiBkcmFnRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGRyYWdJbWFnZSkKLXsKLSAgICBRV2lkZ2V0KiB3aWRnZXQgPSBvd25lcldpZGdl
dCgpOwotICAgIGlmICghd2lkZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBRRHJhZyogZHJh
ZyA9IG5ldyBRRHJhZyh3aWRnZXQpOwotICAgIGlmIChkcmFnSW1hZ2UpCi0gICAgICAgIGRyYWct
PnNldFBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoZHJhZ0ltYWdlLT5jcmVhdGVRSW1hZ2UoKSkp
OwotICAgIGVsc2UgaWYgKGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpICYmIGRyYWdEYXRhLnBsYXRm
b3JtRGF0YSgpLT5oYXNJbWFnZSgpKQotICAgICAgICBkcmFnLT5zZXRQaXhtYXAocXZhcmlhbnRf
Y2FzdDxRUGl4bWFwPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKS0+aW1hZ2VEYXRhKCkpKTsKLSAg
ICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb25NYXNrID0gZHJhZ0RhdGEuZHJhZ2dpbmdTb3Vy
Y2VPcGVyYXRpb25NYXNrKCk7Ci0gICAgZHJhZy0+c2V0TWltZURhdGEoY29uc3RfY2FzdDxRTWlt
ZURhdGEqPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSkpOwotICAgIFF0OjpEcm9wQWN0aW9uIGFj
dHVhbERyb3BBY3Rpb24gPSBkcmFnLT5leGVjKGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb25zKGRy
YWdPcGVyYXRpb25NYXNrKSk7Ci0KLSAgICBwYWdlLT5kcmFnRW5kZWQod2lkZ2V0LT5tYXBGcm9t
R2xvYmFsKFFDdXJzb3I6OnBvcygpKSwgUUN1cnNvcjo6cG9zKCksIGRyb3BBY3Rpb25Ub0RyYWdP
cGVyYXRpb24oYWN0dWFsRHJvcEFjdGlvbikpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IFFXS1Bh
Z2VQcml2YXRlOjp2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QKLXsKLSAgICBRR3JhcGhpY3NX
S1ZpZXcqIHdrVmlldyA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1dLVmlldyo+KHZpZXcpOwotICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh3a1ZpZXctPnZpc2libGVSZWN0KCkp
KTsKLX0KLQotYm9vbCBRV0tQYWdlOjppc0Nvbm5lY3RlZFRvRW5naW5lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZC0+aXNDb25uZWN0ZWRUb0VuZ2luZTsKLX0KLQotI2luY2x1ZGUgIm1vY19xd2tw
YWdlLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdr
cGFnZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTcxNzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEg
KzAsMCBAQAotI2lmbmRlZiBxd2twYWdlX2gKLSNkZWZpbmUgcXdrcGFnZV9oCi0KLSNpbmNsdWRl
ICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UUFjdGlvbj4KLSNpbmNsdWRlIDxRTWVudT4K
LSNpbmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPFFQb2ludD4KLSNpbmNsdWRlIDxRUmVjdD4K
LSNpbmNsdWRlIDxRU2l6ZT4KLSNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPFdlYktpdDIvV0tC
YXNlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KLQotY2xhc3MgUUN1cnNvcjsKLWNs
YXNzIFFHcmFwaGljc0l0ZW07Ci1jbGFzcyBRV0tDb250ZXh0OwotY2xhc3MgUVdLR3JhcGhpY3NX
aWRnZXQ7Ci1jbGFzcyBRV0tQcmVmZXJlbmNlczsKLWNsYXNzIFFXS1BhZ2VQcml2YXRlOwotY2xh
c3MgUXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOwotY2xhc3MgUVdLSGlzdG9yeTsKLQotY2xh
c3MgUVdFQktJVF9FWFBPUlQgUVdLUGFnZSA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVD
VAotICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlKQotICAgIFFfUFJPUEVS
VFkoUVVybCB1cmwgUkVBRCB1cmwgV1JJVEUgc2V0VXJsKQotCi1wdWJsaWM6Ci0gICAgZW51bSBX
ZWJBY3Rpb24gewotICAgICAgICBOb1dlYkFjdGlvbiA9IC0gMSwKLQotICAgICAgICBPcGVuTGlu
aywKLSAgICAgICAgT3BlbkxpbmtJbk5ld1dpbmRvdywKLSAgICAgICAgQ29weUxpbmtUb0NsaXBi
b2FyZCwKLSAgICAgICAgT3BlbkltYWdlSW5OZXdXaW5kb3csCi0KLSAgICAgICAgQmFjaywKLSAg
ICAgICAgRm9yd2FyZCwKLSAgICAgICAgU3RvcCwKLSAgICAgICAgUmVsb2FkLAotCi0gICAgICAg
IEN1dCwKLSAgICAgICAgQ29weSwKLSAgICAgICAgUGFzdGUsCi0gICAgICAgIFNlbGVjdEFsbCwK
LQotICAgICAgICBVbmRvLAotICAgICAgICBSZWRvLAotCi0gICAgICAgIFdlYkFjdGlvbkNvdW50
Ci0gICAgfTsKLQotICAgIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFZpZXdwb3J0QXR0cmlidXRlcyB7
Ci0gICAgcHVibGljOgotICAgICAgICBWaWV3cG9ydEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgVmll
d3BvcnRBdHRyaWJ1dGVzKGNvbnN0IFFXS1BhZ2U6OlZpZXdwb3J0QXR0cmlidXRlcyYgb3RoZXIp
OwotCi0gICAgICAgIH5WaWV3cG9ydEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICBRV0tQYWdlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMmIG9wZXJhdG9yPShjb25zdCBRV0tQYWdlOjpWaWV3cG9ydEF0dHJp
YnV0ZXMmIG90aGVyKTsKLQotICAgICAgICBpbmxpbmUgcXJlYWwgaW5pdGlhbFNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsU2NhbGVGYWN0b3I7IH07Ci0gICAgICAgIGlubGlu
ZSBxcmVhbCBtaW5pbXVtU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1TY2Fs
ZUZhY3RvcjsgfTsKLSAgICAgICAgaW5saW5lIHFyZWFsIG1heGltdW1TY2FsZUZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4aW11bVNjYWxlRmFjdG9yOyB9OwotICAgICAgICBpbmxpbmUgcXJl
YWwgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlUGl4ZWxSYXRpbzsg
fTsKLSAgICAgICAgaW5saW5lIGJvb2wgaXNVc2VyU2NhbGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2lzVXNlclNjYWxhYmxlOyB9OwotICAgICAgICBpbmxpbmUgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1ZhbGlkOyB9OwotICAgICAgICBpbmxpbmUgUVNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFFTaGFyZWREYXRh
UG9pbnRlcjxRdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGU+IGQ7Ci0gICAgICAgIHFyZWFsIG1f
aW5pdGlhbFNjYWxlRmFjdG9yOwotICAgICAgICBxcmVhbCBtX21pbmltdW1TY2FsZUZhY3RvcjsK
LSAgICAgICAgcXJlYWwgbV9tYXhpbXVtU2NhbGVGYWN0b3I7Ci0gICAgICAgIHFyZWFsIG1fZGV2
aWNlUGl4ZWxSYXRpbzsKLSAgICAgICAgYm9vbCBtX2lzVXNlclNjYWxhYmxlOwotICAgICAgICBi
b29sIG1faXNWYWxpZDsKLSAgICAgICAgUVNpemUgbV9zaXplOwotCi0gICAgICAgIGZyaWVuZCBj
bGFzcyBRV0tQYWdlOwotICAgIH07Ci0KLSAgICBRV0tQYWdlKFFXS0NvbnRleHQqKTsKLSAgICB2
aXJ0dWFsIH5RV0tQYWdlKCk7Ci0KLSAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0OwotCi0g
ICAgUVdLUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGxvYWQo
Y29uc3QgUVVybCYgdXJsKTsKLSAgICB2b2lkIHNldFVybChjb25zdCBRVXJsJiB1cmwpOwotICAg
IFFVcmwgdXJsKCkgY29uc3Q7Ci0KLSAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBRU2l6ZSYpOwotICAgIFZpZXdwb3J0QXR0cmlidXRl
cyB2aWV3cG9ydEF0dHJpYnV0ZXNGb3JTaXplKGNvbnN0IFFTaXplJiBhdmFpbGFibGVTaXplKSBj
b25zdDsKLQotICAgIHZvaWQgc2V0QWN0dWFsVmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBRUmVj
dCYgcmVjdCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlv
dXRTaXplKGNvbnN0IFFTaXplJiB0YXJnZXRMYXlvdXRTaXplKTsKLQotICAgIFFBY3Rpb24qIGFj
dGlvbihXZWJBY3Rpb24gYWN0aW9uKSBjb25zdDsKLSAgICB2b2lkIHRyaWdnZXJBY3Rpb24oV2Vi
QWN0aW9uIGFjdGlvbiwgYm9vbCBjaGVja2VkID0gZmFsc2UpOwotCi0gICAgdHlwZWRlZiBRV0tQ
YWdlKiAoKkNyZWF0ZU5ld1BhZ2VGbikoUVdLUGFnZSopOwotICAgIHZvaWQgc2V0Q3JlYXRlTmV3
UGFnZUZ1bmN0aW9uKENyZWF0ZU5ld1BhZ2VGbiBmdW5jdGlvbik7Ci0KLSAgICB2b2lkIHNldEN1
c3RvbVVzZXJBZ2VudChjb25zdCBRU3RyaW5nJik7Ci0gICAgUVN0cmluZyBjdXN0b21Vc2VyQWdl
bnQoKSBjb25zdDsKLQotICAgIHFyZWFsIHRleHRab29tRmFjdG9yKCkgY29uc3Q7Ci0gICAgcXJl
YWwgcGFnZVpvb21GYWN0b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldFRleHRab29tRmFjdG9yKHFy
ZWFsIHpvb21GYWN0b3IpOwotICAgIHZvaWQgc2V0UGFnZVpvb21GYWN0b3IocXJlYWwgem9vbUZh
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHFyZWFsIHBhZ2Vab29t
RmFjdG9yLCBxcmVhbCB0ZXh0Wm9vbUZhY3Rvcik7Ci0KLSAgICBRV0tIaXN0b3J5KiBoaXN0b3J5
KCkgY29uc3Q7Ci0gICAgUVdLQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCBm
aW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgUVBvaW50Jik7Ci0KLSAgICBib29sIGlzQ29u
bmVjdGVkVG9FbmdpbmUoKSBjb25zdDsKLQotcHVibGljOgotICAgIFFfU0lHTkFMIHZvaWQgc3Rh
dHVzQmFyTWVzc2FnZShjb25zdCBRU3RyaW5nJik7Ci0gICAgUV9TSUdOQUwgdm9pZCB0b29sVGlw
Q2hhbmdlZChjb25zdCBRU3RyaW5nJik7Ci0gICAgUV9TSUdOQUwgdm9pZCB0aXRsZUNoYW5nZWQo
Y29uc3QgUVN0cmluZyYpOwotICAgIFFfU0lHTkFMIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKLSAgICBR
X1NJR05BTCB2b2lkIGxvYWRGaW5pc2hlZChib29sIG9rKTsKLSAgICBRX1NJR05BTCB2b2lkIGxv
YWRQcm9ncmVzcyhpbnQgcHJvZ3Jlc3MpOwotICAgIFFfU0lHTkFMIHZvaWQgaW5pdGlhbExheW91
dENvbXBsZXRlZCgpOwotICAgIFFfU0lHTkFMIHZvaWQgdXJsQ2hhbmdlZChjb25zdCBRVXJsJik7
Ci0gICAgUV9TSUdOQUwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJik7Ci0g
ICAgUV9TSUdOQUwgdm9pZCBzY3JvbGxSZXF1ZXN0ZWQoaW50IGR4LCBpbnQgZHkpOwotICAgIFFf
U0lHTkFMIHZvaWQgY3Vyc29yQ2hhbmdlZChjb25zdCBRQ3Vyc29yJik7Ci0gICAgUV9TSUdOQUwg
dm9pZCB2aWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpOwotICAgIFFfU0lHTkFMIHZvaWQgd2luZG93
Q2xvc2VSZXF1ZXN0ZWQoKTsKLSAgICBRX1NJR05BTCB2b2lkIHpvb21hYmxlQXJlYUZvdW5kKGNv
bnN0IFFSZWN0Jik7Ci0gICAgUV9TSUdOQUwgdm9pZCBmb2N1c05leHRQcmV2Q2hpbGQoYm9vbCk7
Ci0gICAgUV9TSUdOQUwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+
KTsKLSAgICBRX1NJR05BTCB2b2lkIGVuZ2luZUNvbm5lY3Rpb25DaGFuZ2VkKGJvb2wgY29ubmVj
dGVkKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCopOwot
Ci1wcml2YXRlOgotICAgIFFXS1BhZ2UoUVdLQ29udGV4dCosIFdLUGFnZUdyb3VwUmVmKTsKLSAg
ICB2b2lkIGluaXQoKTsKLSNpZm5kZWYgUVRfTk9fQUNUSU9OCi0gICAgUV9QUklWQVRFX1NMT1Qo
ZCwgdm9pZCBfcV93ZWJBY3Rpb25UcmlnZ2VyZWQoYm9vbCBjaGVja2VkKSk7Ci0jZW5kaWYKLSAg
ICBRV0tQYWdlUHJpdmF0ZSogZDsKLQotICAgIGZyaWVuZCBjbGFzcyBRR3JhcGhpY3NXS1ZpZXc7
Ci0gICAgZnJpZW5kIGNsYXNzIFFHcmFwaGljc1dLVmlld1ByaXZhdGU7Ci0gICAgZnJpZW5kIGNs
YXNzIFFXS1BhZ2VQcml2YXRlOwotfTsKLQotI2VuZGlmIC8qIHF3a3BhZ2VfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdhMzE3YzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2twYWdlX3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxd2twYWdlX3BfaAotI2RlZmluZSBxd2twYWdlX3Bf
aAotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0
bWFwLmgiCi0jaW5jbHVkZSAicXdrcGFnZS5oIgotI2luY2x1ZGUgInFncmFwaGljc3drdmlldy5o
IgotI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8UUJhc2ljVGltZXI+Ci0jaW5jbHVkZSA8UUdyYXBoaWNzVmlldz4KLSNpbmNs
dWRlIDxRS2V5RXZlbnQ+Ci0KLWNsYXNzIFFHcmFwaGljc1dLVmlldzsKLWNsYXNzIFFVbmRvU3Rh
Y2s7Ci1jbGFzcyBRV0tQcmVmZXJlbmNlczsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQot
Y2xhc3MgUVdLUGFnZVByaXZhdGUgOiBXZWJLaXQ6OlBhZ2VDbGllbnQgewotcHVibGljOgotICAg
IFFXS1BhZ2VQcml2YXRlKFFXS1BhZ2UqLCBRV0tDb250ZXh0KiwgV0tQYWdlR3JvdXBSZWYgPSAw
KTsKLSAgICB+UVdLUGFnZVByaXZhdGUoKTsKLQotICAgIHN0YXRpYyBRV0tQYWdlUHJpdmF0ZSog
Z2V0KFFXS1BhZ2UqIHBhZ2UpIHsgcmV0dXJuIHBhZ2UtPmQ7IH0KLQotICAgIHZvaWQgaW5pdChR
R3JhcGhpY3NJdGVtKiwgUUdyYXBoaWNzV0tWaWV3OjpCYWNraW5nU3RvcmVUeXBlKTsKLQotICAg
IC8vIFBhZ2VDbGllbnQKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViS2l0OjpEcmF3aW5nQXJl
YVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZp
ZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwbGF5VmlldygpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9m
ZnNldCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmll
d0ZvY3VzZWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3VmlzaWJsZSgpOwotICAgIHZpcnR1
YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNv
bnN0IExheWVyVHJlZUNvbnRleHQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCk7Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFnZUNsb3NlZCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFBy
b2Nlc3MoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6
Vmlld3BvcnRBcmd1bWVudHMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29u
c3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5
PiwgV2ViS2l0OjpXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFsbEVkaXRDb21tYW5kcygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8o
V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dp
bmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlv
bkNoYW5nZWQoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYktpdDo6
V2ViUGFnZVByb3h5Kik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViQ29udGV4
dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJLaXQ6OldlYlBhZ2VQcm94eSop
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxXZWJLaXQ6
OkZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbik7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24o
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZSYpOwotICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rv
cigpIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRp
b25ab29tRmFjdG9yKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9s
bGJhcnNGb3JNYWluRnJhbWUoKSBjb25zdCB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJh
Y2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiB1cGRhdGVS
ZWN0cyk7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9u
KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgeyB9
Ci0gICAgdmlydHVhbCBmbG9hdCB1c2VyU3BhY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJu
IDE7IH0KLQotICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIFFSZWN0KTsKLQotICAg
IHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKLSAgICB2b2lkIGtleVJlbGVhc2VFdmVu
dChRS2V5RXZlbnQqKTsKLSAgICB2b2lkIG1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91
c2VFdmVudCopOwotICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VF
dmVudCopOwotICAgIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2
ZW50Kik7Ci0gICAgdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3Vz
ZUV2ZW50Kik7Ci0gICAgdm9pZCB3aGVlbEV2ZW50KFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCop
OwotCi0gICAgdm9pZCBkcmFnRW50ZXJFdmVudChRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQq
KTsKLSAgICB2b2lkIGRyYWdMZWF2ZUV2ZW50KFFHcmFwaGljc1NjZW5lRHJhZ0Ryb3BFdmVudCop
OwotICAgIHZvaWQgZHJhZ01vdmVFdmVudChRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQqKTsK
LSAgICB2b2lkIGRyb3BFdmVudChRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQqKTsKLQotICAg
IHZvaWQgdXBkYXRlQWN0aW9uKFFXS1BhZ2U6OldlYkFjdGlvbiBhY3Rpb24pOwotICAgIHZvaWQg
dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKLSAgICB2b2lkIHVwZGF0ZUVkaXRvckFjdGlvbnMo
KTsKLQotICAgIFFXaWRnZXQqIG93bmVyV2lkZ2V0KCk7Ci0KLSAgICB2b2lkIF9xX3dlYkFjdGlv
blRyaWdnZXJlZChib29sIGNoZWNrZWQpOwotCi0gICAgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2
ZW50Kik7Ci0KLSAgICBRV0tQYWdlKiBxOwotCi0gICAgUUdyYXBoaWNzSXRlbSogdmlldzsKLSAg
ICBRV0tDb250ZXh0KiBjb250ZXh0OwotICAgIFFXS0hpc3RvcnkqIGhpc3Rvcnk7Ci0KLSAgICBR
QWN0aW9uKiBhY3Rpb25zW1FXS1BhZ2U6OldlYkFjdGlvbkNvdW50XTsKLSAgICBRV0tQcmVmZXJl
bmNlcyogcHJlZmVyZW5jZXM7Ci0KLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IHBh
Z2U7Ci0KLSAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsK
LQotICAgIFFXS1BhZ2U6OkNyZWF0ZU5ld1BhZ2VGbiBjcmVhdGVOZXdQYWdlRm47Ci0KLSAgICBR
UG9pbnQgdHJpcGxlQ2xpY2s7Ci0gICAgUUJhc2ljVGltZXIgdHJpcGxlQ2xpY2tUaW1lcjsKLSAg
ICBRR3JhcGhpY3NXS1ZpZXc6OkJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZTsKLQot
ICAgIGJvb2wgaXNDb25uZWN0ZWRUb0VuZ2luZTsKLQotI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sK
LSAgICBPd25QdHI8UVVuZG9TdGFjaz4gdW5kb1N0YWNrOwotI2VuZGlmCi19OwotCi1jbGFzcyBR
dFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgewotcHVibGlj
OgotICAgIFF0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZShRV0tQYWdlOjpWaWV3cG9ydEF0dHJp
YnV0ZXMqIHFxKQotICAgICAgICA6IHEocXEpCi0gICAgeyB9Ci0KLSAgICBRV0tQYWdlOjpWaWV3
cG9ydEF0dHJpYnV0ZXMqIHE7Ci19OwotCi0KLSNlbmRpZiAvKiBxa3BhZ2VfcF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3ByZWZlcmVuY2VzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcHJlZmVyZW5jZXMuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjU0YzAwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcHJlZmVyZW5jZXMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJxd2twcmVmZXJlbmNlcy5oIgotCi0jaW5jbHVkZSAiV0tQYWdlR3Jv
dXAuaCIKLSNpbmNsdWRlICJXS1ByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV0tTdHJpbmdRdC5o
IgotI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCi0jaW5jbHVkZSAicXdrcHJlZmVyZW5jZXNfcC5o
IgotCi0KLVFXS1ByZWZlcmVuY2VzKiBRV0tQcmVmZXJlbmNlc1ByaXZhdGU6OmNyZWF0ZVByZWZl
cmVuY2VzKFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLXsKLSAgICBRV0tQcmVmZXJlbmNl
cyogcHJlZnMgPSBuZXcgUVdLUHJlZmVyZW5jZXM7Ci0gICAgcHJlZnMtPmQtPnJlZiA9IFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXMocGFnZUdyb3VwUmVmKTsKLSAgICByZXR1cm4gcHJlZnM7Ci19
Ci0KLVFXS1ByZWZlcmVuY2VzKiBRV0tQcmVmZXJlbmNlc1ByaXZhdGU6OmNyZWF0ZVNoYXJlZFBy
ZWZlcmVuY2VzKCkKLXsKLSAgICBRV0tQcmVmZXJlbmNlcyogcHJlZnMgPSBuZXcgUVdLUHJlZmVy
ZW5jZXM7Ci0gICAgcHJlZnMtPmQtPnJlZiA9IFdLUHJlZmVyZW5jZXNDcmVhdGUoKTsKLSAgICBy
ZXR1cm4gcHJlZnM7Ci19Ci0KLVFXS1ByZWZlcmVuY2VzKiBRV0tQcmVmZXJlbmNlczo6c2hhcmVk
UHJlZmVyZW5jZXMoKQotewotICAgIHN0YXRpYyBRV0tQcmVmZXJlbmNlcyogaW5zdGFuY2UgPSAw
OwotCi0gICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAgaW5zdGFuY2UgPSBRV0tQcmVmZXJlbmNl
c1ByaXZhdGU6OmNyZWF0ZVNoYXJlZFByZWZlcmVuY2VzKCk7Ci0gICAgcmV0dXJuIGluc3RhbmNl
OwotfQotCi1RV0tQcmVmZXJlbmNlczo6UVdLUHJlZmVyZW5jZXMoKQotICAgIDogZChuZXcgUVdL
UHJlZmVyZW5jZXNQcml2YXRlKQotewotfQotCi1RV0tQcmVmZXJlbmNlczo6flFXS1ByZWZlcmVu
Y2VzKCkKLXsKLSAgICBkZWxldGUgZDsKLX0KLQotdm9pZCBRV0tQcmVmZXJlbmNlczo6c2V0Rm9u
dEZhbWlseShGb250RmFtaWx5IHdoaWNoLCBjb25zdCBRU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAg
c3dpdGNoICh3aGljaCkgewotICAgIGNhc2UgU3RhbmRhcmRGb250OgotICAgICAgICBXS1ByZWZl
cmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KGQtPnJlZiwgV0tTdHJpbmdDcmVhdGVXaXRoUVN0
cmluZyhmYW1pbHkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaXhlZEZvbnQ6Ci0gICAg
ICAgIFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkoZC0+cmVmLCBXS1N0cmluZ0NyZWF0
ZVdpdGhRU3RyaW5nKGZhbWlseSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlcmlmRm9u
dDoKLSAgICAgICAgV0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShkLT5yZWYsIFdLU3Ry
aW5nQ3JlYXRlV2l0aFFTdHJpbmcoZmFtaWx5KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
U2Fuc1NlcmlmRm9udDoKLSAgICAgICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1p
bHkoZC0+cmVmLCBXS1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKGZhbWlseSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEN1cnNpdmVGb250OgotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vy
c2l2ZUZvbnRGYW1pbHkoZC0+cmVmLCBXS1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKGZhbWlseSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZhbnRhc3lGb250OgotICAgICAgICBXS1ByZWZl
cmVuY2VzU2V0RmFudGFzeUZvbnRGYW1pbHkoZC0+cmVmLCBXS1N0cmluZ0NyZWF0ZVdpdGhRU3Ry
aW5nKGZhbWlseSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLVFTdHJpbmcgUVdLUHJlZmVyZW5jZXM6OmZvbnRGYW1pbHkoRm9udEZh
bWlseSB3aGljaCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHdoaWNoKSB7Ci0gICAgY2FzZSBTdGFu
ZGFyZEZvbnQ6IHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN0cmluZ1JlZihB
ZG9wdFdLLCBXS1ByZWZlcmVuY2VzQ29weVN0YW5kYXJkRm9udEZhbWlseShkLT5yZWYpKTsKLSAg
ICAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoc3RyaW5nUmVmLmdldCgpKTsKLSAgICB9
Ci0gICAgY2FzZSBGaXhlZEZvbnQ6IHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN0cmluZ1JlZihBZG9wdFdLLCBXS1ByZWZlcmVuY2VzQ29weUZpeGVkRm9udEZhbWlseShkLT5y
ZWYpKTsKLSAgICAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoc3RyaW5nUmVmLmdldCgp
KTsKLSAgICB9Ci0gICAgY2FzZSBTZXJpZkZvbnQ6IHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN0cmluZ1JlZihBZG9wdFdLLCBXS1ByZWZlcmVuY2VzQ29weVNlcmlmRm9udEZh
bWlseShkLT5yZWYpKTsKLSAgICAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoc3RyaW5n
UmVmLmdldCgpKTsKLSAgICB9Ci0gICAgY2FzZSBTYW5zU2VyaWZGb250OiB7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdHJpbmdSZWYoQWRvcHRXSywgV0tQcmVmZXJlbmNlc0Nv
cHlTYW5zU2VyaWZGb250RmFtaWx5KGQtPnJlZikpOwotICAgICAgICByZXR1cm4gV0tTdHJpbmdD
b3B5UVN0cmluZyhzdHJpbmdSZWYuZ2V0KCkpOwotICAgIH0KLSAgICBjYXNlIEN1cnNpdmVGb250
OiB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdHJpbmdSZWYoQWRvcHRXSywg
V0tQcmVmZXJlbmNlc0NvcHlDdXJzaXZlRm9udEZhbWlseShkLT5yZWYpKTsKLSAgICAgICAgcmV0
dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoc3RyaW5nUmVmLmdldCgpKTsKLSAgICB9Ci0gICAgY2Fz
ZSBGYW50YXN5Rm9udDogewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3RyaW5n
UmVmKEFkb3B0V0ssIFdLUHJlZmVyZW5jZXNDb3B5RmFudGFzeUZvbnRGYW1pbHkoZC0+cmVmKSk7
Ci0gICAgICAgIHJldHVybiBXS1N0cmluZ0NvcHlRU3RyaW5nKHN0cmluZ1JlZi5nZXQoKSk7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBRU3RyaW5nKCk7Ci0gICAgfQotfQot
Ci1ib29sIFFXS1ByZWZlcmVuY2VzOjp0ZXN0QXR0cmlidXRlKFdlYkF0dHJpYnV0ZSBhdHRyKSBj
b25zdAotewotICAgIHN3aXRjaCAoYXR0cikgewotICAgIGNhc2UgQXV0b0xvYWRJbWFnZXM6Ci0g
ICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGQt
PnJlZik7Ci0gICAgY2FzZSBKYXZhc2NyaXB0RW5hYmxlZDoKLSAgICAgICAgcmV0dXJuIFdLUHJl
ZmVyZW5jZXNHZXRKYXZhU2NyaXB0RW5hYmxlZChkLT5yZWYpOwotICAgIGNhc2UgUGx1Z2luc0Vu
YWJsZWQ6Ci0gICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0UGx1Z2luc0VuYWJsZWQoZC0+
cmVmKTsKLSAgICBjYXNlIE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZDoKLSAgICAg
ICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJs
ZWQoZC0+cmVmKTsKLSAgICBjYXNlIExvY2FsU3RvcmFnZUVuYWJsZWQ6Ci0gICAgICAgIHJldHVy
biBXS1ByZWZlcmVuY2VzR2V0TG9jYWxTdG9yYWdlRW5hYmxlZChkLT5yZWYpOwotICAgIGNhc2Ug
WFNTQXVkaXRpbmdFbmFibGVkOgotICAgICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldFhTU0F1
ZGl0b3JFbmFibGVkKGQtPnJlZik7Ci0gICAgY2FzZSBGcmFtZUZsYXR0ZW5pbmdFbmFibGVkOgot
ICAgICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZC0+
cmVmKTsKLSAgICBjYXNlIFByaXZhdGVCcm93c2luZ0VuYWJsZWQ6Ci0gICAgICAgIHJldHVybiBX
S1ByZWZlcmVuY2VzR2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChkLT5yZWYpOwotICAgIGNhc2Ug
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZDoKLSAgICAgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKGQtPnJlZik7Ci0gICAgY2FzZSBEbnNQcmVmZXRjaEVuYWJs
ZWQ6Ci0gICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVk
KGQtPnJlZik7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgUVdLUHJlZmVyZW5jZXM6OnNl
dEF0dHJpYnV0ZShXZWJBdHRyaWJ1dGUgYXR0ciwgYm9vbCBvbikKLXsKLSAgICBzd2l0Y2ggKGF0
dHIpIHsKLSAgICBjYXNlIEF1dG9Mb2FkSW1hZ2VzOgotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGQtPnJlZiwgb24pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEphdmFzY3JpcHRFbmFibGVkOgotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNj
cmlwdEVuYWJsZWQoZC0+cmVmLCBvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGx1Z2lu
c0VuYWJsZWQ6Ci0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRQbHVnaW5zRW5hYmxlZChkLT5yZWYs
IG9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQ6Ci0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25D
YWNoZUVuYWJsZWQoZC0+cmVmLCBvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9jYWxT
dG9yYWdlRW5hYmxlZDoKLSAgICAgICAgV0tQcmVmZXJlbmNlc1NldExvY2FsU3RvcmFnZUVuYWJs
ZWQoZC0+cmVmLCBvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWFNTQXVkaXRpbmdFbmFi
bGVkOgotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0WFNTQXVkaXRvckVuYWJsZWQoZC0+cmVmLCBv
bik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnJhbWVGbGF0dGVuaW5nRW5hYmxlZDoKLSAg
ICAgICAgV0tQcmVmZXJlbmNlc1NldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZC0+cmVmLCBvbik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDoKLSAgICAg
ICAgV0tQcmVmZXJlbmNlc1NldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZC0+cmVmLCBvbik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRGV2ZWxvcGVyRXh0cmFzRW5hYmxlZDoKLSAgICAgICAg
V0tQcmVmZXJlbmNlc1NldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZC0+cmVmLCBvbik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRG5zUHJlZmV0Y2hFbmFibGVkOgotICAgICAgICBXS1ByZWZl
cmVuY2VzU2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGQtPnJlZiwgb24pOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUVdLUHJlZmVyZW5jZXM6OnNldEZvbnRTaXplKEZvbnRTaXplIHR5cGUsIGludCBz
aXplKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTWluaW11bUZvbnRTaXplOgot
ICAgICAgICAgV0tQcmVmZXJlbmNlc1NldE1pbmltdW1Gb250U2l6ZShkLT5yZWYsIHNpemUpOwot
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEZWZhdWx0Rm9udFNpemU6Ci0gICAgICAgICBXS1By
ZWZlcmVuY2VzU2V0RGVmYXVsdEZvbnRTaXplKGQtPnJlZiwgc2l6ZSk7Ci0gICAgICAgICBicmVh
azsKLSAgICBjYXNlIERlZmF1bHRGaXhlZEZvbnRTaXplOgotICAgICAgICAgV0tQcmVmZXJlbmNl
c1NldERlZmF1bHRGaXhlZEZvbnRTaXplKGQtPnJlZiwgc2l6ZSk7Ci0gICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0K
LWludCBRV0tQcmVmZXJlbmNlczo6Zm9udFNpemUoRm9udFNpemUgdHlwZSkgY29uc3QKLXsKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE1pbmltdW1Gb250U2l6ZToKLSAgICAgICAgIHJl
dHVybiBXS1ByZWZlcmVuY2VzR2V0TWluaW11bUZvbnRTaXplKGQtPnJlZik7Ci0gICAgY2FzZSBE
ZWZhdWx0Rm9udFNpemU6Ci0gICAgICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldERlZmF1bHRG
b250U2l6ZShkLT5yZWYpOwotICAgIGNhc2UgRGVmYXVsdEZpeGVkRm9udFNpemU6Ci0gICAgICAg
ICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldERlZmF1bHRGaXhlZEZvbnRTaXplKGQtPnJlZik7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXdrcHJlZmVyZW5jZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXdrcHJlZmVyZW5jZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIyMjkw
Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3ByZWZl
cmVuY2VzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIFFXS1BSRUZFUkVOQ0VTX0gKLSNkZWZpbmUgUVdLUFJFRkVSRU5DRVNfSAot
Ci0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotCi1jbGFzcyBRV0tQYWdlOwotY2xhc3MgUVdL
UHJlZmVyZW5jZXNQcml2YXRlOwotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV0tQcmVmZXJlbmNl
cyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBGb250RmFtaWx5IHsKLSAgICAgICAgU3RhbmRhcmRGb250
LAotICAgICAgICBGaXhlZEZvbnQsCi0gICAgICAgIFNlcmlmRm9udCwKLSAgICAgICAgU2Fuc1Nl
cmlmRm9udCwKLSAgICAgICAgQ3Vyc2l2ZUZvbnQsCi0gICAgICAgIEZhbnRhc3lGb250Ci0gICAg
fTsKLQotICAgIGVudW0gV2ViQXR0cmlidXRlIHsKLSAgICAgICAgQXV0b0xvYWRJbWFnZXMsCi0g
ICAgICAgIEphdmFzY3JpcHRFbmFibGVkLAotICAgICAgICBQbHVnaW5zRW5hYmxlZCwKLSAgICAg
ICAgT2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLAotICAgICAgICBMb2NhbFN0b3Jh
Z2VFbmFibGVkLAotICAgICAgICBYU1NBdWRpdGluZ0VuYWJsZWQsCi0gICAgICAgIEZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQsCi0gICAgICAgIFByaXZhdGVCcm93c2luZ0VuYWJsZWQsCi0gICAgICAg
IERldmVsb3BlckV4dHJhc0VuYWJsZWQsCi0gICAgICAgIERuc1ByZWZldGNoRW5hYmxlZAotICAg
IH07Ci0KLSAgICBlbnVtIEZvbnRTaXplIHsKLSAgICAgICAgTWluaW11bUZvbnRTaXplLAotICAg
ICAgICBEZWZhdWx0Rm9udFNpemUsCi0gICAgICAgIERlZmF1bHRGaXhlZEZvbnRTaXplCi0gICAg
fTsKLQotICAgIHN0YXRpYyBRV0tQcmVmZXJlbmNlcyogc2hhcmVkUHJlZmVyZW5jZXMoKTsKLQot
ICAgIHZvaWQgc2V0Rm9udEZhbWlseShGb250RmFtaWx5IHdoaWNoLCBjb25zdCBRU3RyaW5nJiBm
YW1pbHkpOwotICAgIFFTdHJpbmcgZm9udEZhbWlseShGb250RmFtaWx5IHdoaWNoKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0QXR0cmlidXRlKFdlYkF0dHJpYnV0ZSBhdHRyLCBib29sIG9uKTsKLSAg
ICBib29sIHRlc3RBdHRyaWJ1dGUoV2ViQXR0cmlidXRlIGF0dHIpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRGb250U2l6ZShGb250U2l6ZSB0eXBlLCBpbnQgc2l6ZSk7Ci0gICAgaW50IGZvbnRTaXpl
KEZvbnRTaXplIHR5cGUpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFFfRElTQUJMRV9DT1BZKFFX
S1ByZWZlcmVuY2VzKQotCi0gICAgUVdLUHJlZmVyZW5jZXMoKTsKLSAgICB+UVdLUHJlZmVyZW5j
ZXMoKTsKLQotICAgIFFXS1ByZWZlcmVuY2VzUHJpdmF0ZSAqZDsKLQotICAgIGZyaWVuZCBjbGFz
cyBRV0tQYWdlOwotICAgIGZyaWVuZCBjbGFzcyBRV0tQcmVmZXJlbmNlc1ByaXZhdGU7Ci19Owot
Ci0jZW5kaWYgLy8gUVdLUFJFRkVSRU5DRVNfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xd2twcmVmZXJlbmNlc19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F3a3ByZWZlcmVuY2VzX3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggN2ZlMjM4OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3a3ByZWZlcmVuY2VzX3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJXS1ByZWZlcmVuY2VzLmgiCi0KLWNsYXNzIFFX
S1ByZWZlcmVuY2VzUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFFXS1ByZWZlcmVuY2Vz
KiBjcmVhdGVQcmVmZXJlbmNlcyhXS1BhZ2VHcm91cFJlZik7Ci0gICAgc3RhdGljIFFXS1ByZWZl
cmVuY2VzKiBjcmVhdGVTaGFyZWRQcmVmZXJlbmNlcygpOwotCi0gICAgV0tQcmVmZXJlbmNlc1Jl
ZiByZWY7Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9jb21tb252aWV3dGVzdHMvY29tbW9udmlld3Rlc3RzLnBybyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy5w
cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkN2MyMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmll
d3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy5wcm8KQEAgLTAsMCArMSwzIEBACitpbmNsdWRlKC4uL3Rl
c3RzLnByaSkKK0hFQURFUlMgKz0gd2Vidmlld2Fic3RyYWN0aW9uLmgKK1NPVVJDRVMgKz0gd2Vi
dmlld2Fic3RyYWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvdHN0X2NvbW1vbnZpZXd0ZXN0cy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy90c3Rf
Y29tbW9udmlld3Rlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
YTU0Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9jb21tb252aWV3dGVzdHMvdHN0X2NvbW1vbnZpZXd0ZXN0cy5jcHAKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPFFTY29wZWRQb2ludGVyPgor
I2luY2x1ZGUgPFFTaWduYWxTcHk+CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKyNpbmNsdWRl
ICJ3ZWJ2aWV3YWJzdHJhY3Rpb24uaCIKKyNpbmNsdWRlICIuLi91dGlsLmgiCisKK2NsYXNzIHRz
dF9Db21tb25WaWV3VGVzdHMgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3ByaXZh
dGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBjbGVhbnVwKCk7CisKKyAgICB2
b2lkIGJhc2VVcmwoKTsKKyAgICB2b2lkIGxvYWRFbXB0eVVybCgpOworICAgIHZvaWQgbG9hZEVt
cHR5UGFnZVZpZXdWaXNpYmxlKCk7CisgICAgdm9pZCBsb2FkRW1wdHlQYWdlVmlld0hpZGRlbigp
OworCisgICAgdm9pZCBzaG93KCk7Citwcml2YXRlOgorICAgIFFTY29wZWRQb2ludGVyPFdlYlZp
ZXdBYnN0cmFjdGlvbj4gdmlld0Fic3RyYWN0aW9uOworfTsKKwordm9pZCB0c3RfQ29tbW9uVmll
d1Rlc3RzOjppbml0KCkKK3sKKyAgICB2aWV3QWJzdHJhY3Rpb24ucmVzZXQobmV3IFdlYlZpZXdB
YnN0cmFjdGlvbik7Cit9CisKK3ZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6Y2xlYW51cCgpCit7
CisgICAgdmlld0Fic3RyYWN0aW9uLnJlc2V0KCk7Cit9CisKK3ZvaWQgdHN0X0NvbW1vblZpZXdU
ZXN0czo6YmFzZVVybCgpCit7CisgICAgLy8gVGVzdCB0aGUgdXJsIGlzIGluIGEgd2VsbCBkZWZp
bmVkIHN0YXRlIHdoZW4gaW5zdGFuY2lhdGluZyB0aGUgdmlldywgYnV0IGJlZm9yZSBsb2FkaW5n
IGFueXRoaW5nLgorICAgIFFVcmwgdXJsOworICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51
cmwodXJsKSk7CisgICAgUVZFUklGWSh1cmwuaXNFbXB0eSgpKTsKK30KKwordm9pZCB0c3RfQ29t
bW9uVmlld1Rlc3RzOjpsb2FkRW1wdHlVcmwoKQoreworICAgIHZpZXdBYnN0cmFjdGlvbi0+bG9h
ZChRVXJsKCkpOworICAgIHZpZXdBYnN0cmFjdGlvbi0+bG9hZChRVXJsKFFMYXRpbjFTdHJpbmco
IiIpKSk7Cit9CisKK3ZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6bG9hZEVtcHR5UGFnZVZpZXdW
aXNpYmxlKCkKK3sKKyAgICB2aWV3QWJzdHJhY3Rpb24tPnNob3coKTsKKyAgICBsb2FkRW1wdHlQ
YWdlVmlld0hpZGRlbigpOworfQorCit2b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmxvYWRFbXB0
eVBhZ2VWaWV3SGlkZGVuKCkKK3sKKyAgICBRU2lnbmFsU3B5IGxvYWRTdGFydGVkU3B5KHZpZXdB
YnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3RhcnRlZCgpKSk7CisKKyAgICB2aWV3QWJz
dHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5nKFRFU1RTX1NP
VVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7CisgICAgUVZFUklGWSh3YWl0Rm9y
U2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7
CisKKyAgICBRQ09NUEFSRShsb2FkU3RhcnRlZFNweS5zaXplKCksIDEpOworfQorCit2b2lkIHRz
dF9Db21tb25WaWV3VGVzdHM6OnNob3coKQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBjcmFz
aC4KKyAgICB2aWV3QWJzdHJhY3Rpb24tPnNob3coKTsKKyAgICBRVGVzdDo6cVdhaXQoMjAwKTsK
KyAgICB2aWV3QWJzdHJhY3Rpb24tPmhpZGUoKTsKK30KKworUVRFU1RfTUFJTih0c3RfQ29tbW9u
Vmlld1Rlc3RzKQorCisjaW5jbHVkZSAidHN0X2NvbW1vbnZpZXd0ZXN0cy5tb2MiCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rl
c3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZWEwODIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2
aWV3YWJzdHJhY3Rpb24uY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEZXNrdG9wV2lkZ2V0PgorI2lu
Y2x1ZGUgIndlYnZpZXdhYnN0cmFjdGlvbi5oIgorCitXZWJWaWV3QWJzdHJhY3Rpb246OldlYlZp
ZXdBYnN0cmFjdGlvbigpCisgICAgOiBtX3RvdWNoV2ViVmlld1dpbmRvdyhuZXcgUVRvdWNoV2Vi
VmlldykKKyAgICAsIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cobmV3IFFEZXNrdG9wV2ViVmlldykK
K3sKKyAgICBRRGVza3RvcFdpZGdldCogY29uc3QgZGVza3RvcFdpZGdldCA9IFFBcHBsaWNhdGlv
bjo6ZGVza3RvcCgpOworICAgIGNvbnN0IFFSZWN0IG1haW5TY3JlZW5HZW9tZXRyeSA9IGRlc2t0
b3BXaWRnZXQtPmF2YWlsYWJsZUdlb21ldHJ5KCk7CisKKyAgICBRUmVjdCBzY3JlZW5IYWxmKG1h
aW5TY3JlZW5HZW9tZXRyeS50b3BMZWZ0KCksIFFTaXplKG1haW5TY3JlZW5HZW9tZXRyeS53aWR0
aCgpIC8gMiwgbWFpblNjcmVlbkdlb21ldHJ5LmhlaWdodCgpKSk7CisgICAgbV90b3VjaFdlYlZp
ZXdXaW5kb3cuc2V0R2VvbWV0cnkoc2NyZWVuSGFsZik7CisgICAgbV90b3VjaFdlYlZpZXdXaW5k
b3cuc2V0V2luZG93VGl0bGUoUUxhdGluMVN0cmluZygiVG91Y2hXZWJWaWV3IikpOworICAgIGNv
bm5lY3QodG91Y2hXZWJWaWV3KCktPnBhZ2UoKSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCB0aGlz
LCBTTE9UKHRvdWNoVmlld0xvYWRTdGFydGVkKCkpKTsKKyAgICBjb25uZWN0KHRvdWNoV2ViVmll
dygpLT5wYWdlKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpLCB0aGlzLCBTTE9UKHRvdWNoVmll
d0xvYWRTdWNjZWVkZWQoKSkpOworCisgICAgc2NyZWVuSGFsZi5tb3ZlTGVmdChzY3JlZW5IYWxm
LnJpZ2h0KCkpOworICAgIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cuc2V0R2VvbWV0cnkoc2NyZWVu
SGFsZik7CisgICAgbV9kZXNrdG9wV2ViVmlld1dpbmRvdy5zZXRXaW5kb3dUaXRsZShRTGF0aW4x
U3RyaW5nKCJEZXNrdG9wV2ViVmlldyIpKTsKKyAgICBjb25uZWN0KGRlc2t0b3BXZWJWaWV3KCks
IFNJR05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChkZXNrdG9wVmlld0xvYWRTdGFydGVk
KCkpKTsKKyAgICBjb25uZWN0KGRlc2t0b3BXZWJWaWV3KCksIFNJR05BTChsb2FkU3VjY2VlZGVk
KCkpLCB0aGlzLCBTTE9UKGRlc2t0b3BWaWV3TG9hZFN1Y2NlZWRlZCgpKSk7Cit9CisKK3ZvaWQg
V2ViVmlld0Fic3RyYWN0aW9uOjpzaG93KCkKK3sKKyAgICBtX3RvdWNoV2ViVmlld1dpbmRvdy5z
aG93KCk7CisgICAgbV9kZXNrdG9wV2ViVmlld1dpbmRvdy5zaG93KCk7CisgICAgUVRlc3Q6OnFX
YWl0Rm9yV2luZG93U2hvd24oJm1fZGVza3RvcFdlYlZpZXdXaW5kb3cpOworfQorCit2b2lkIFdl
YlZpZXdBYnN0cmFjdGlvbjo6aGlkZSgpCit7CisgICAgbV90b3VjaFdlYlZpZXdXaW5kb3cuaGlk
ZSgpOworICAgIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cuaGlkZSgpOworfQorCit2b2lkIFdlYlZp
ZXdBYnN0cmFjdGlvbjo6bG9hZChjb25zdCBRVXJsJiB1cmwpCit7CisgICAgdG91Y2hXZWJWaWV3
KCktPnBhZ2UoKS0+bG9hZCh1cmwpOworICAgIGRlc2t0b3BXZWJWaWV3KCktPmxvYWQodXJsKTsK
K30KKworYm9vbCBXZWJWaWV3QWJzdHJhY3Rpb246OnVybChRVXJsJiB1cmwpIGNvbnN0Cit7Cisg
ICAgY29uc3QgUVVybCB0b3VjaFZpZXdVcmwgPSB0b3VjaFdlYlZpZXcoKS0+cGFnZSgpLT51cmwo
KTsKKyAgICBjb25zdCBRVXJsIGRlc2t0b3BWaWV3VXJsID0gZGVza3RvcFdlYlZpZXcoKS0+dXJs
KCk7CisKKyAgICBpZiAodG91Y2hWaWV3VXJsICE9IGRlc2t0b3BWaWV3VXJsKSB7CisgICAgICAg
IHFXYXJuaW5nKCkgPDwgIldlYlZpZXdBYnN0cmFjdGlvbjo6dXJsKCk6IHRoZSBVUkxzIGFyZSBu
b3QgZXF1YWxzLiI7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIlFUb3VjaFZpZXcncyB1cmwgPSAi
IDw8IHRvdWNoVmlld1VybDsKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAiUURlc2t0b3BWaWV3J3Mg
dXJsID0gIiA8PCBkZXNrdG9wVmlld1VybDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHVybCA9IHRvdWNoVmlld1VybDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBX
ZWJWaWV3QWJzdHJhY3Rpb246OnRvdWNoVmlld0xvYWRTdGFydGVkKCkKK3sKKyAgICBtX3RvdWNo
Vmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3RhcnRlZCgpKV0rKzsKKyAgICBpZiAobV90
b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN0YXJ0ZWQoKSldID09IG1fZGVza3Rv
cFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN0YXJ0ZWQoKSldKQorICAgICAgICBlbWl0
IGxvYWRTdGFydGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjpkZXNrdG9wVmll
d0xvYWRTdGFydGVkKCkKK3sKKyAgICBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFM
KGxvYWRTdGFydGVkKCkpXSsrOworICAgIGlmIChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJ
R05BTChsb2FkU3RhcnRlZCgpKV0gPT0gbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05B
TChsb2FkU3RhcnRlZCgpKV0pCisgICAgICAgIGVtaXQgbG9hZFN0YXJ0ZWQoKTsKK30KKwordm9p
ZCBXZWJWaWV3QWJzdHJhY3Rpb246OnRvdWNoVmlld0xvYWRTdWNjZWVkZWQoKQoreworICAgIG1f
dG91Y2hWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSldKys7CisgICAg
aWYgKG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSldID09
IG1fZGVza3RvcFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKV0pCisg
ICAgICAgIGVtaXQgbG9hZFN1Y2NlZWRlZCgpOworfQorCit2b2lkIFdlYlZpZXdBYnN0cmFjdGlv
bjo6ZGVza3RvcFZpZXdMb2FkU3VjY2VlZGVkKCkKK3sKKyAgICBtX2Rlc2t0b3BWaWV3U2lnbmFs
c0NvdW50ZXJbU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSldKys7CisgICAgaWYgKG1fdG91Y2hWaWV3
U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSldID09IG1fZGVza3RvcFZpZXdT
aWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKV0pCisgICAgICAgIGVtaXQgbG9h
ZFN1Y2NlZWRlZCgpOworfQorCitRVG91Y2hXZWJWaWV3KiBXZWJWaWV3QWJzdHJhY3Rpb246OnRv
dWNoV2ViVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFFUb3VjaFdlYlZp
ZXcqPihtX3RvdWNoV2ViVmlld1dpbmRvdy53ZWJWaWV3LmRhdGEoKSk7Cit9CisKK1FEZXNrdG9w
V2ViVmlldyogV2ViVmlld0Fic3RyYWN0aW9uOjpkZXNrdG9wV2ViVmlldygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFFEZXNrdG9wV2ViVmlldyo+KG1fZGVza3RvcFdlYlZpZXdX
aW5kb3cud2ViVmlldy5kYXRhKCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3Rz
L3dlYnZpZXdhYnN0cmFjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjA1OGVmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uaApAQCAtMCwwICsx
LDY0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHdlYnZpZXdhYnN0cmFjdGlvbl9o
CisjZGVmaW5lIHdlYnZpZXdhYnN0cmFjdGlvbl9oCisKKyNpbmNsdWRlIDxRSGFzaD4KKyNpbmNs
dWRlIDxRVXJsPgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisjaW5jbHVkZSA8cXRvdWNod2Vi
cGFnZS5oPgorI2luY2x1ZGUgPHF0b3VjaHdlYnZpZXcuaD4KKyNpbmNsdWRlIDxxZGVza3RvcHdl
YnZpZXcuaD4KKyNpbmNsdWRlICIuLi90ZXN0d2luZG93LmgiCisKK2NsYXNzIFdlYlZpZXdBYnN0
cmFjdGlvbiA6IHB1YmxpYyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBX
ZWJWaWV3QWJzdHJhY3Rpb24oKTsKKworICAgIHZvaWQgc2hvdygpOworICAgIHZvaWQgaGlkZSgp
OworCisgICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwmKTsKKyAgICBib29sIHVybChRVXJsJikgY29u
c3Q7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGxvYWRTdGFydGVkKCk7CisgICAgdm9pZCBsb2Fk
U3VjY2VlZGVkKCk7CisKK3ByaXZhdGUgUV9TTE9UUzoKKyAgICB2b2lkIHRvdWNoVmlld0xvYWRT
dGFydGVkKCk7CisgICAgdm9pZCBkZXNrdG9wVmlld0xvYWRTdGFydGVkKCk7CisgICAgdm9pZCB0
b3VjaFZpZXdMb2FkU3VjY2VlZGVkKCk7CisgICAgdm9pZCBkZXNrdG9wVmlld0xvYWRTdWNjZWVk
ZWQoKTsKKworcHJpdmF0ZToKKyAgICBRVG91Y2hXZWJWaWV3KiB0b3VjaFdlYlZpZXcoKSBjb25z
dDsKKyAgICBRRGVza3RvcFdlYlZpZXcqIGRlc2t0b3BXZWJWaWV3KCkgY29uc3Q7CisKKyAgICBU
ZXN0V2luZG93IG1fdG91Y2hXZWJWaWV3V2luZG93OworICAgIFFIYXNoPGNvbnN0IGNoYXIgKiwg
dW5zaWduZWQgaW50PiBtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyOworCisgICAgVGVzdFdpbmRv
dyBtX2Rlc2t0b3BXZWJWaWV3V2luZG93OworICAgIFFIYXNoPGNvbnN0IGNoYXIgKiwgdW5zaWdu
ZWQgaW50PiBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXI7Cit9OworCisjZW5kaWYgLyogd2Vi
dmlld2Fic3RyYWN0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvaHRtbC9hLmh0bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvaHRtbC9hLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5NGQx
MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2h0
bWwvYS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+PHRp
dGxlPmFUaXRsZTwvdGl0bGU+PC9oZWFkPgotPGJvZHk+VGVzdEEgUGFnZTwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRt
bC9iLmh0bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9iLmh0
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc3ZGZmOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2h0bWwvYi5odG0KKysrIC9kZXYv
bnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+PHRpdGxlPmJUaXRsZTwvdGl0bGU+
PC9oZWFkPgotPGJvZHk+VGVzdEIgUGFnZTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9jLmh0bSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9jLmh0bQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDM2NTg4MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL2h0bWwvYy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAg
QEAKLTxodG1sPgotPGhlYWQ+PHRpdGxlPmNUaXRsZTwvdGl0bGU+PC9oZWFkPgotPGJvZHk+VGVz
dEMgUGFnZTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9kLmh0bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvaHRtbC9kLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVl
Y2Q0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L2h0bWwvZC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+
PHRpdGxlPmRUaXRsZTwvdGl0bGU+PC9oZWFkPgotPGJvZHk+VGVzdEQgUGFnZTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cWRlc2t0b3B3ZWJ2aWV3L3FkZXNrdG9wd2Vidmlldy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy9xZGVza3RvcHdlYnZpZXcucHJvCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OWM3ZjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmll
dy9xZGVza3RvcHdlYnZpZXcucHJvCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoLi4vdGVzdHMucHJp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xZGVz
a3RvcHdlYnZpZXcvdHN0X3FkZXNrdG9wd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njk2ZjQxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xZGVza3RvcHdl
YnZpZXcvdHN0X3FkZXNrdG9wd2Vidmlldy5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2luY2x1ZGUgPFFTY29wZWRQb2ludGVyPgorI2luY2x1ZGUgPFF0VGVzdC9R
dFRlc3Q+CisjaW5jbHVkZSA8cWRlc2t0b3B3ZWJ2aWV3Lmg+CisjaW5jbHVkZSAiLi4vdGVzdHdp
bmRvdy5oIgorCitjbGFzcyB0c3RfUURlc2t0b3BXZWJWaWV3IDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQg
Y2xlYW51cCgpOworCitwcml2YXRlOgorICAgIGlubGluZSBRRGVza3RvcFdlYlZpZXcqIHdlYlZp
ZXcoKSBjb25zdDsKKyAgICBRU2NvcGVkUG9pbnRlcjxUZXN0V2luZG93PiBtX3dpbmRvdzsKK307
CisKK3ZvaWQgdHN0X1FEZXNrdG9wV2ViVmlldzo6aW5pdCgpCit7CisgICAgbV93aW5kb3cucmVz
ZXQobmV3IFRlc3RXaW5kb3cobmV3IFFEZXNrdG9wV2ViVmlldygpKSk7Cit9CisKK3ZvaWQgdHN0
X1FEZXNrdG9wV2ViVmlldzo6Y2xlYW51cCgpCit7CisgICAgbV93aW5kb3cucmVzZXQoKTsKK30K
KworaW5saW5lIFFEZXNrdG9wV2ViVmlldyogdHN0X1FEZXNrdG9wV2ViVmlldzo6d2ViVmlldygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFFEZXNrdG9wV2ViVmlldyo+KG1fd2lu
ZG93LT53ZWJWaWV3LmRhdGEoKSk7Cit9CisKK1FURVNUX01BSU4odHN0X1FEZXNrdG9wV2ViVmll
dykKKworI2luY2x1ZGUgInRzdF9xZGVza3RvcHdlYnZpZXcubW9jIgorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FncmFwaGljc3drdmlldy9xZ3Jh
cGhpY3N3a3ZpZXcucHJvIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
Z3JhcGhpY3N3a3ZpZXcvcWdyYXBoaWNzd2t2aWV3LnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTk5YzdmNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FncmFwaGljc3drdmlldy9xZ3JhcGhpY3N3a3ZpZXcucHJvCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotaW5jbHVkZSguLi90ZXN0cy5wcmkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FncmFwaGljc3drdmlldy90c3Rf
cWdyYXBoaWNzd2t2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcWdyYXBoaWNzd2t2aWV3L3RzdF9xZ3JhcGhpY3N3a3ZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Y2I3MjYzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcWdyYXBoaWNzd2t2aWV3L3RzdF9xZ3JhcGhpY3N3a3ZpZXcu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICIuLi91dGlsLmgiCi0jaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmU+Ci0jaW5jbHVk
ZSA8UUdyYXBoaWNzVmlldz4KLSNpbmNsdWRlIDxRUmVzaXplRXZlbnQ+Ci0jaW5jbHVkZSA8UVNp
Z25hbFNweT4KLSNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgotI2luY2x1ZGUgPHFncmFwaGljc3dr
dmlldy5oPgotI2luY2x1ZGUgPHF3a2NvbnRleHQuaD4KLQotY2xhc3MgVmlldzsKLQotY2xhc3Mg
dHN0X1FHcmFwaGljc1dLVmlldyA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotCi1w
cml2YXRlIHNsb3RzOgotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgY2xlYW51cCgpOwotCi0g
ICAgdm9pZCBsb2FkRW1wdHlVcmwoKTsKLSAgICB2b2lkIGxvYWRFbXB0eVBhZ2UoKTsKLQotcHJp
dmF0ZToKLSAgICBWaWV3KiBtX3ZpZXc7Ci19OwotCi1jbGFzcyBWaWV3IDogcHVibGljIFFHcmFw
aGljc1ZpZXcgewotcHVibGljOgotICAgIFZpZXcoKTsKLSAgICBRR3JhcGhpY3NXS1ZpZXcqIG1f
d2ViVmlldzsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgcmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50
Kik7Ci19OwotCi1WaWV3OjpWaWV3KCkKLXsKLSAgICBRR3JhcGhpY3NTY2VuZSogY29uc3Qgc2Nl
bmUgPSBuZXcgUUdyYXBoaWNzU2NlbmUodGhpcyk7Ci0gICAgc2V0U2NlbmUoc2NlbmUpOwotCi0g
ICAgUVdLQ29udGV4dCogY29udGV4dCA9IG5ldyBRV0tDb250ZXh0KHRoaXMpOwotICAgIG1fd2Vi
VmlldyA9IG5ldyBRR3JhcGhpY3NXS1ZpZXcoY29udGV4dCk7Ci0gICAgc2NlbmUtPmFkZEl0ZW0o
bV93ZWJWaWV3KTsKLX0KLQotdm9pZCBWaWV3OjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGV2
ZW50KQotewotICAgIFFHcmFwaGljc1ZpZXc6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKLSAgICBRUmVj
dEYgcmVjdChRUG9pbnQoMCwgMCksIGV2ZW50LT5zaXplKCkpOwotICAgIG1fd2ViVmlldy0+c2V0
R2VvbWV0cnkocmVjdCk7Ci0gICAgc2NlbmUoKS0+c2V0U2NlbmVSZWN0KHJlY3QpOwotfQotCi12
b2lkIHRzdF9RR3JhcGhpY3NXS1ZpZXc6OmluaXQoKQotewotICAgIG1fdmlldyA9IG5ldyBWaWV3
OwotfQotCi12b2lkIHRzdF9RR3JhcGhpY3NXS1ZpZXc6OmNsZWFudXAoKQotewotICAgIGRlbGV0
ZSBtX3ZpZXc7Ci0gICAgbV92aWV3ID0gMDsKLX0KLQotdm9pZCB0c3RfUUdyYXBoaWNzV0tWaWV3
Ojpsb2FkRW1wdHlQYWdlKCkKLXsKLSAgICBtX3ZpZXctPnNob3coKTsKLQotICAgIG1fdmlldy0+
bV93ZWJWaWV3LT4gbG9hZChRVXJsOjpmcm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmcoVEVTVFNf
U09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpKTsKLSAgICBRVkVSSUZZKHdhaXRG
b3JTaWduYWwobV92aWV3LT5tX3dlYlZpZXcsIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpKSk7
Ci19Ci0KLXZvaWQgdHN0X1FHcmFwaGljc1dLVmlldzo6bG9hZEVtcHR5VXJsKCkKLXsKLSAgICAv
LyBUaGF0IHNob3VsZCBub3QgY3Jhc2guCi0gICAgbV92aWV3LT5zaG93KCk7Ci0gICAgbV92aWV3
LT5tX3dlYlZpZXctPmxvYWQoUVVybCgpKTsKLSAgICBRVkVSSUZZKCF3YWl0Rm9yU2lnbmFsKG1f
dmlldy0+bV93ZWJWaWV3LT5wYWdlKCksIFNJR05BTChlbmdpbmVDb25uZWN0aW9uQ2hhbmdlZChi
b29sKSksIDUwKSk7Ci0KLSAgICBtX3ZpZXctPm1fd2ViVmlldy0+bG9hZChRVXJsKFFMYXRpbjFT
dHJpbmcoIiIpKSk7Ci0gICAgUVZFUklGWSghd2FpdEZvclNpZ25hbChtX3ZpZXctPm1fd2ViVmll
dy0+cGFnZSgpLCBTSUdOQUwoZW5naW5lQ29ubmVjdGlvbkNoYW5nZWQoYm9vbCkpLCA1MCkpOwot
fQotCi1RVEVTVF9NQUlOKHRzdF9RR3JhcGhpY3NXS1ZpZXcpCi0KLSNpbmNsdWRlICJ0c3RfcWdy
YXBoaWNzd2t2aWV3Lm1vYyIKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3L3F0b3VjaHdlYnZpZXcucHJvIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3L3F0b3VjaHdlYnZpZXcu
cHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OWM3ZjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdl
YnZpZXcvcXRvdWNod2Vidmlldy5wcm8KQEAgLTAsMCArMSBAQAoraW5jbHVkZSguLi90ZXN0cy5w
cmkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0
b3VjaHdlYnZpZXcvdHN0X3F0b3VjaHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3L3RzdF9xdG91Y2h3ZWJ2aWV3LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTMyZWNjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3L3Rz
dF9xdG91Y2h3ZWJ2aWV3LmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKyNpbmNsdWRlIDxxdG91Y2h3ZWJwYWdlLmg+Cisj
aW5jbHVkZSA8cXRvdWNod2Vidmlldy5oPgorI2luY2x1ZGUgIi4uL3Rlc3R3aW5kb3cuaCIKKwor
UV9ERUNMQVJFX01FVEFUWVBFKFFUb3VjaFdlYlBhZ2UqKTsKKworY2xhc3MgdHN0X1FUb3VjaFdl
YlZpZXcgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB0c3Rf
UVRvdWNoV2ViVmlldygpOworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2
b2lkIGNsZWFudXAoKTsKKworICAgIHZvaWQgYWNjZXNzUGFnZSgpOworCitwcml2YXRlOgorICAg
IGlubGluZSBRVG91Y2hXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3Q7CisgICAgUVNjb3BlZFBvaW50
ZXI8VGVzdFdpbmRvdz4gbV93aW5kb3c7Cit9OworCit0c3RfUVRvdWNoV2ViVmlldzo6dHN0X1FU
b3VjaFdlYlZpZXcoKQoreworICAgIHFSZWdpc3Rlck1ldGFUeXBlPFFUb3VjaFdlYlBhZ2UqPigi
UVRvdWNoV2ViUGFnZSoiKTsKK30KKwordm9pZCB0c3RfUVRvdWNoV2ViVmlldzo6aW5pdCgpCit7
CisgICAgbV93aW5kb3cucmVzZXQobmV3IFRlc3RXaW5kb3cobmV3IFFUb3VjaFdlYlZpZXcpKTsK
K30KKwordm9pZCB0c3RfUVRvdWNoV2ViVmlldzo6Y2xlYW51cCgpCit7CisgICAgbV93aW5kb3cu
cmVzZXQoKTsKK30KKworaW5saW5lIFFUb3VjaFdlYlZpZXcqIHRzdF9RVG91Y2hXZWJWaWV3Ojp3
ZWJWaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UVRvdWNoV2ViVmlldyo+
KG1fd2luZG93LT53ZWJWaWV3LmRhdGEoKSk7Cit9CisKK3ZvaWQgdHN0X1FUb3VjaFdlYlZpZXc6
OmFjY2Vzc1BhZ2UoKQoreworICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IHBhZ2VEaXJlY3RBY2Nl
c3MgPSB3ZWJWaWV3KCktPnBhZ2UoKTsKKworICAgIFFWYXJpYW50IHBhZ2VQcm9wZXJ0eVZhbHVl
ID0gd2ViVmlldygpLT5wcm9wZXJ0eSgicGFnZSIpOworICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0
IHBhZ2VQcm9wZXJ0eUFjY2VzcyA9IHBhZ2VQcm9wZXJ0eVZhbHVlLnZhbHVlPFFUb3VjaFdlYlBh
Z2UqPigpOworICAgIFFDT01QQVJFKHBhZ2VQcm9wZXJ0eUFjY2VzcywgcGFnZURpcmVjdEFjY2Vz
cyk7Cit9CisKK1FURVNUX01BSU4odHN0X1FUb3VjaFdlYlZpZXcpCisKKyNpbmNsdWRlICJ0c3Rf
cXRvdWNod2Vidmlldy5tb2MiCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcXdraGlzdG9yeS9xd2toaXN0b3J5LnBybyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXdraGlzdG9yeS9xd2toaXN0b3J5LnBybwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5YzdmNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F3a2hpc3RvcnkvcXdraGlzdG9yeS5wcm8KKysr
IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1pbmNsdWRlKC4uL3Rlc3RzLnByaSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXdraGlzdG9yeS90c3Rf
cXdraGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F3
a2hpc3RvcnkvdHN0X3F3a2hpc3RvcnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxY2EzODc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcXdraGlzdG9yeS90c3RfcXdraGlzdG9yeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MjMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNs
dWRlIDxRU2NvcGVkUG9pbnRlcj4KLSNpbmNsdWRlIDxRU2lnbmFsU3B5PgotI2luY2x1ZGUgPFF0
R3VpL1FHcmFwaGljc1NjZW5lPgotI2luY2x1ZGUgPFF0R3VpL1FHcmFwaGljc1ZpZXc+Ci0jaW5j
bHVkZSA8UXRUZXN0L1F0VGVzdD4KLSNpbmNsdWRlIDxxZ3JhcGhpY3N3a3ZpZXcuaD4KLSNpbmNs
dWRlIDxxd2tjb250ZXh0Lmg+Ci0jaW5jbHVkZSA8cXdraGlzdG9yeS5oPgotI2luY2x1ZGUgPHF3
a3BhZ2UuaD4KLQotI2RlZmluZSBURVNUX0hJU1RPUllfQUNUSU9OX1JBTkdFIDEwCi0KLWNsYXNz
IFRlc3RIaXN0b3J5SXRlbSB7Ci1wdWJsaWM6Ci0gICAgVGVzdEhpc3RvcnlJdGVtKGNvbnN0IFFT
dHJpbmcmIHRpdGxlLCBjb25zdCBRU3RyaW5nJiBmaWxlbmFtZSk7Ci0KLSAgICBRU3RyaW5nIHRp
dGxlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3RpdGxlOwotICAgIH0KLQotICAg
IFFVcmwgdXJsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3VybDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgUVN0cmluZyBtX3RpdGxlOwotICAgIFFVcmwgbV91cmw7Ci19OwotCi1U
ZXN0SGlzdG9yeUl0ZW06OlRlc3RIaXN0b3J5SXRlbShjb25zdCBRU3RyaW5nJiB0aXRsZSwgY29u
c3QgUVN0cmluZyYgZmlsZW5hbWUpCi0gICAgOiBtX3RpdGxlKHRpdGxlKQotewotICAgIGlmICgh
ZmlsZW5hbWUuaXNFbXB0eSgpKQotICAgICAgICBtX3VybCA9IFFVcmw6OmZyb21Mb2NhbEZpbGUo
UUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSKSArIFFMYXRpbjFTdHJpbmcoIi9odG1sLyIp
ICsgZmlsZW5hbWUpOwotfQotCi1jbGFzcyB0c3RfUVdLSGlzdG9yeSA6IHB1YmxpYyBRT2JqZWN0
IHsKLSAgICBRX09CSkVDVAotICAgIAotcHJpdmF0ZSBzbG90czoKLSAgICB2b2lkIGluaXRUZXN0
Q2FzZSgpOwotICAgIHZvaWQgaGlzdG9yeUZvcndhcmRCYWNrVGVzdF9kYXRhKCk7Ci0gICAgdm9p
ZCBoaXN0b3J5Rm9yd2FyZEJhY2tUZXN0KCk7Ci0gICAgCi1wcml2YXRlOgotICAgIFFTY29wZWRQ
b2ludGVyPFFHcmFwaGljc1ZpZXc+IG1fZ3JhcGhpY3NWaWV3OwotICAgIFFTY29wZWRQb2ludGVy
PFFXS0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBRU2NvcGVkUG9pbnRlcjxRR3JhcGhpY3NXS1Zp
ZXc+IG1fd2ViVmlldzsKLQotICAgIFFXS1BhZ2UqIG1fcGFnZTsKLSAgICBRV0tIaXN0b3J5KiBt
X2hpc3Rvcnk7Ci0KLSAgICAvLyBFbnVtZXJhdGUgVGVzdEhpc3RvcnlBY3Rpb25zIHN0YXJ0aW5n
IGF0IDEwIHNvIHRoYXQgb3RoZXIgaW50ZWdlcnMKLSAgICAvLyBjYW4gYmUgdXNlZCBhdCB3aWxs
IHRvIHRlc3QgcmFuZG9tIGFjY2VzcwotICAgIGVudW0gVGVzdEhpc3RvcnlBY3Rpb25zIHsKLSAg
ICAgICAgVGVzdE5vbmUgPSBURVNUX0hJU1RPUllfQUNUSU9OX1JBTkdFLAotICAgICAgICBUZXN0
TG9hZCwKLSAgICAgICAgVGVzdEJhY2ssCi0gICAgICAgIFRlc3RGd2QKLSAgICB9OwotCi0gICAg
UVNjb3BlZFBvaW50ZXI8VGVzdEhpc3RvcnlJdGVtPiBtX3Rlc3RJdGVtQmxhbms7Ci0gICAgUVNj
b3BlZFBvaW50ZXI8VGVzdEhpc3RvcnlJdGVtPiBtX3Rlc3RJdGVtQTsKLSAgICBRU2NvcGVkUG9p
bnRlcjxUZXN0SGlzdG9yeUl0ZW0+IG1fdGVzdEl0ZW1COwotICAgIFFTY29wZWRQb2ludGVyPFRl
c3RIaXN0b3J5SXRlbT4gbV90ZXN0SXRlbUM7Ci0gICAgUVNjb3BlZFBvaW50ZXI8VGVzdEhpc3Rv
cnlJdGVtPiBtX3Rlc3RJdGVtRDsKLX07Ci0KLXZvaWQgdHN0X1FXS0hpc3Rvcnk6OmluaXRUZXN0
Q2FzZSgpCi17ICAgCi0gICAgUUdyYXBoaWNzU2NlbmUqIGNvbnN0IHNjZW5lID0gbmV3IFFHcmFw
aGljc1NjZW5lKHRoaXMpOwotCi0gICAgbV9ncmFwaGljc1ZpZXcucmVzZXQobmV3IFFHcmFwaGlj
c1ZpZXcoc2NlbmUpKTsKLQotICAgIG1fY29udGV4dC5yZXNldChuZXcgUVdLQ29udGV4dCh0aGlz
KSk7Ci0gICAgbV93ZWJWaWV3LnJlc2V0KG5ldyBRR3JhcGhpY3NXS1ZpZXcobV9jb250ZXh0LmRh
dGEoKSkpOwotICAgIHNjZW5lLT5hZGRJdGVtKG1fd2ViVmlldy5kYXRhKCkpOwotCi0gICAgbV90
ZXN0SXRlbUJsYW5rLnJlc2V0KG5ldyBUZXN0SGlzdG9yeUl0ZW0oUVN0cmluZygpLCBRU3RyaW5n
KCkpKTsKLSAgICBtX3Rlc3RJdGVtQS5yZXNldChuZXcgVGVzdEhpc3RvcnlJdGVtKFFMYXRpbjFT
dHJpbmcoImFUaXRsZSIpLCBRTGF0aW4xU3RyaW5nKCJhLmh0bSIpKSk7Ci0gICAgbV90ZXN0SXRl
bUIucmVzZXQobmV3IFRlc3RIaXN0b3J5SXRlbShRTGF0aW4xU3RyaW5nKCJiVGl0bGUiKSwgUUxh
dGluMVN0cmluZygiYi5odG0iKSkpOwotICAgIG1fdGVzdEl0ZW1DLnJlc2V0KG5ldyBUZXN0SGlz
dG9yeUl0ZW0oUUxhdGluMVN0cmluZygiY1RpdGxlIiksIFFMYXRpbjFTdHJpbmcoImMuaHRtIikp
KTsKLSAgICBtX3Rlc3RJdGVtRC5yZXNldChuZXcgVGVzdEhpc3RvcnlJdGVtKFFMYXRpbjFTdHJp
bmcoImRUaXRsZSIpLCBRTGF0aW4xU3RyaW5nKCJkLmh0bSIpKSk7Ci0KLSAgICBtX3BhZ2UgPSBt
X3dlYlZpZXctPnBhZ2UoKTsKLSAgICBtX2hpc3RvcnkgPSBtX3BhZ2UtPmhpc3RvcnkoKTsKLX0K
LQotUV9ERUNMQVJFX01FVEFUWVBFKFRlc3RIaXN0b3J5SXRlbSopCi1RX0RFQ0xBUkVfTUVUQVRZ
UEUoUUxpc3Q8VGVzdEhpc3RvcnlJdGVtKj4pCi0KLXZvaWQgdHN0X1FXS0hpc3Rvcnk6Omhpc3Rv
cnlGb3J3YXJkQmFja1Rlc3RfZGF0YSgpCi17Ci0gICAgUVRlc3Q6OmFkZENvbHVtbjxpbnQ+KCJj
b21tYW5kIik7Ci0gICAgUVRlc3Q6OmFkZENvbHVtbjxRTGlzdDxUZXN0SGlzdG9yeUl0ZW0qPiA+
KCJleHBlY3RlZEJhY2tMaXN0Iik7Ci0gICAgUVRlc3Q6OmFkZENvbHVtbjxUZXN0SGlzdG9yeUl0
ZW0qPigidGVzdEl0ZW0iKTsKLSAgICBRVGVzdDo6YWRkQ29sdW1uPFFMaXN0PFRlc3RIaXN0b3J5
SXRlbSo+ID4oImV4cGVjdGVkRm9yd2FyZExpc3QiKTsKLSAgICBRVGVzdDo6YWRkQ29sdW1uPGJv
b2w+KCJ3YWl0Iik7Ci0KLSAgICBRTGlzdDxUZXN0SGlzdG9yeUl0ZW0qPiBleHBlY3RlZEJhY2tM
aXN0OwotICAgIFFMaXN0PFRlc3RIaXN0b3J5SXRlbSo+IGV4cGVjdGVkRm9yd2FyZExpc3Q7Ci0K
LSAgICAvLyBUZXN0IHRoZSBpbml0aWFsIHN0YXRlIHdpdGggZW1wdHkgZm9yd2FyZCBhbmQgYmFj
ayBsaXN0cy4KLSAgICBRVGVzdDo6bmV3Um93KCJbXSAoKSBbXSIpIDw8Ci0gICAgICAgIGludChU
ZXN0Tm9uZSkgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtQmxhbmsuZGF0YSgpIDw8
IGV4cGVjdGVkRm9yd2FyZExpc3QgPDwgZmFsc2U7Ci0KLSAgICAvLyBUZXN0IGxvYWRpbmcgYSBm
ZXcgaXRlbXMgYW5kIGNoZWNrIHRoYXQgdGhleSBhcHBlYXIgaW4gdGhlIGJhY2sgbGlzdC4KLSAg
ICBRVGVzdDo6bmV3Um93KCJbXSAoYSkgW10iKSA8PAotICAgICAgICBpbnQoVGVzdExvYWQpIDw8
IGV4cGVjdGVkQmFja0xpc3QgPDwgbV90ZXN0SXRlbUEuZGF0YSgpIDw8IGV4cGVjdGVkRm9yd2Fy
ZExpc3QgPDwgdHJ1ZTsKLQotICAgIGV4cGVjdGVkQmFja0xpc3QgPDwgbV90ZXN0SXRlbUEuZGF0
YSgpOwotICAgIFFUZXN0OjpuZXdSb3coIlthXSAoYikgW10iKSA8PAotICAgICAgICBpbnQoVGVz
dExvYWQpIDw8IGV4cGVjdGVkQmFja0xpc3QgPDwgbV90ZXN0SXRlbUIuZGF0YSgpIDw8IGV4cGVj
dGVkRm9yd2FyZExpc3QgPDwgdHJ1ZTsKLQotICAgIGV4cGVjdGVkQmFja0xpc3QgPDwgbV90ZXN0
SXRlbUIuZGF0YSgpOwotICAgIFFUZXN0OjpuZXdSb3coIlthIGJdIChjKSBbXSIpIDw8Ci0gICAg
ICAgIGludChUZXN0TG9hZCkgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtQy5kYXRh
KCkgPDwgZXhwZWN0ZWRGb3J3YXJkTGlzdCA8PCB0cnVlOwotCi0gICAgZXhwZWN0ZWRCYWNrTGlz
dCA8PCBtX3Rlc3RJdGVtQy5kYXRhKCk7Ci0gICAgUVRlc3Q6Om5ld1JvdygiW2EgYiBjXSAoZCkg
W10iKSA8PAotICAgICAgICBpbnQoVGVzdExvYWQpIDw8IGV4cGVjdGVkQmFja0xpc3QgPDwgbV90
ZXN0SXRlbUQuZGF0YSgpIDw8IGV4cGVjdGVkRm9yd2FyZExpc3QgPDwgdHJ1ZTsKLSAgICAKLSAg
ICAvLyBHbyBiYWNrIGFuZCB2ZXJpZnkgdGhhdCBpdGVtcyBub3cgYXBwZWFyIGluIHRoZSBmb3J3
YXJkIGxpc3QuCi0gICAgZXhwZWN0ZWRGb3J3YXJkTGlzdCA8PCBtX3Rlc3RJdGVtRC5kYXRhKCk7
Ci0gICAgUVRlc3Q6Om5ld1JvdygiW2EgYl0gKGMpIFtkXSIpIDw8Ci0gICAgICAgIGludChUZXN0
QmFjaykgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8PCBleHBlY3RlZEJhY2tMaXN0LnRha2VMYXN0KCkg
PDwgZXhwZWN0ZWRGb3J3YXJkTGlzdCA8PCB0cnVlOwotCi0gICAgZXhwZWN0ZWRGb3J3YXJkTGlz
dC5wcmVwZW5kKG1fdGVzdEl0ZW1DLmRhdGEoKSk7Ci0gICAgUVRlc3Q6Om5ld1JvdygiW2FdIChi
KSBbYyBkXSIpIDw8Ci0gICAgICAgIGludChUZXN0QmFjaykgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8
PCBleHBlY3RlZEJhY2tMaXN0LnRha2VMYXN0KCkgPDwgZXhwZWN0ZWRGb3J3YXJkTGlzdCA8PCB0
cnVlOwotCi0gICAgZXhwZWN0ZWRGb3J3YXJkTGlzdC5wcmVwZW5kKG1fdGVzdEl0ZW1CLmRhdGEo
KSk7Ci0gICAgUVRlc3Q6Om5ld1JvdygiKGEpIFtiIGMgZF0iKSA8PAotICAgICAgICBpbnQoVGVz
dEJhY2spIDw8IGV4cGVjdGVkQmFja0xpc3QgPDwgZXhwZWN0ZWRCYWNrTGlzdC50YWtlTGFzdCgp
IDw8IGV4cGVjdGVkRm9yd2FyZExpc3QgPDwgdHJ1ZTsKLQotICAgIC8vIFRlc3QgcmFuZG9tIGFj
Y2VzcyBhbmQgcmVsYXRlZCBlZGdlIGNhc2VzCi0gICAgUVRlc3Q6Om5ld1JvdygicmFuZG9tIChh
KSBbYiBjIGRdIikgPDwKLSAgICAgICAgMCA8PCBleHBlY3RlZEJhY2tMaXN0IDw8IG1fdGVzdEl0
ZW1BLmRhdGEoKSA8PCBleHBlY3RlZEZvcndhcmRMaXN0IDw8IHRydWU7Ci0gICAgZXhwZWN0ZWRC
YWNrTGlzdCA8PCBtX3Rlc3RJdGVtQS5kYXRhKCkgPDwgZXhwZWN0ZWRGb3J3YXJkTGlzdC50YWtl
Rmlyc3QoKTsKLSAgICBRVGVzdDo6bmV3Um93KCJyYW5kb20gW2EgYl0gKGMpIFtkXSIpIDw8Ci0g
ICAgICAgIDIgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8PCBleHBlY3RlZEZvcndhcmRMaXN0LnRha2VG
aXJzdCgpIDw8IGV4cGVjdGVkRm9yd2FyZExpc3QgPDwgdHJ1ZTsKLQotICAgIFFUZXN0OjpuZXdS
b3coInJhbmRvbSBbYSBiXSAoYykgW2RdIikgPDwKLSAgICAgICAgMiA8PCBleHBlY3RlZEJhY2tM
aXN0IDw8IG1fdGVzdEl0ZW1DLmRhdGEoKSA8PCBleHBlY3RlZEZvcndhcmRMaXN0IDw8IGZhbHNl
OwotCi0gICAgZXhwZWN0ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtQy5kYXRhKCk7Ci0gICAgUVRl
c3Q6Om5ld1JvdygicmFuZG9tIFthIGIgY10gKGQpIikgPDwKLSAgICAgICAgMSA8PCBleHBlY3Rl
ZEJhY2tMaXN0IDw8IGV4cGVjdGVkRm9yd2FyZExpc3QudGFrZUZpcnN0KCkgPDwgZXhwZWN0ZWRG
b3J3YXJkTGlzdCA8PCB0cnVlOwotCi0gICAgUVRlc3Q6Om5ld1JvdygicmFuZG9tIFthIGIgY10g
KGQpIikgPDwKLSAgICAgICAgMSA8PCBleHBlY3RlZEJhY2tMaXN0IDw8IG1fdGVzdEl0ZW1ELmRh
dGEoKSA8PCBleHBlY3RlZEZvcndhcmRMaXN0IDw8IGZhbHNlOwotCi0gICAgZXhwZWN0ZWRGb3J3
YXJkTGlzdCA8PCBtX3Rlc3RJdGVtQi5kYXRhKCkgPDwgbV90ZXN0SXRlbUMuZGF0YSgpIDw8IG1f
dGVzdEl0ZW1ELmRhdGEoKTsKLSAgICBleHBlY3RlZEJhY2tMaXN0LmNsZWFyKCk7Ci0gICAgUVRl
c3Q6Om5ld1JvdygicmFuZG9tIChhKSBbYiBjIGRdIikgPDwKLSAgICAgICAgLTMgPDwgZXhwZWN0
ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtQS5kYXRhKCkgPDwgZXhwZWN0ZWRGb3J3YXJkTGlzdCA8
PCB0cnVlOwotCi0gICAgUVRlc3Q6Om5ld1JvdygicmFuZG9tIChhKSBbYiBjIGRdIikgPDwKLSAg
ICAgICAgLTEgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtQS5kYXRhKCkgPDwgZXhw
ZWN0ZWRGb3J3YXJkTGlzdCA8PCBmYWxzZTsKLQotICAgIC8vICJCcmFuY2giIHRoZSBmb3J3YXJk
IGxpc3QgYXdheSBmcm9tIHdoZXJlIGl0IHdhcyBieSBsb2FkaW5nIGEgbmV3IGl0ZW0uIEZvcndh
cmQgbGlzdAotICAgIC8vIGlzIG5vdyBjbGVhcmVkLCBiYWNrIGxpc3Qgc2hvdWxkIGJlIGFzIGV4
cGVjdGVkLgotICAgIGV4cGVjdGVkQmFja0xpc3QuY2xlYXIoKTsKLSAgICBleHBlY3RlZEZvcndh
cmRMaXN0LmNsZWFyKCk7Ci0gICAgZXhwZWN0ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtQS5kYXRh
KCk7Ci0gICAgUVRlc3Q6Om5ld1JvdygiW2FdIChkKSBbXSIpIDw8Ci0gICAgICAgIGludChUZXN0
TG9hZCkgPDwgZXhwZWN0ZWRCYWNrTGlzdCA8PCBtX3Rlc3RJdGVtRC5kYXRhKCkgPDwgZXhwZWN0
ZWRGb3J3YXJkTGlzdCA8PCB0cnVlOwotCi0gICAgLy8gQXR0ZW1wdCB0byBnbyBmb3J3YXJkIHdp
dGggbm90aGluZyBpbiB0aGUgZm9yd2FyZCBsaXN0LiBBc2sgdGhlIHRlc3Qgbm90IHRvIHdhaXQg
Zm9yIHRoZSBsb2FkCi0gICAgLy8gKHlvdSB3b24ndCBnZXQgaXQpLgotICAgIFFUZXN0OjpuZXdS
b3coIlthXSAoZCkgW10iKSA8PAotICAgICAgICBpbnQoVGVzdEZ3ZCkgPDwgZXhwZWN0ZWRCYWNr
TGlzdCA8PCBtX3Rlc3RJdGVtRC5kYXRhKCkgPDwgZXhwZWN0ZWRGb3J3YXJkTGlzdCA8PCBmYWxz
ZTsKLQotICAgIGV4cGVjdGVkRm9yd2FyZExpc3QgPDwgbV90ZXN0SXRlbUQuZGF0YSgpOwotICAg
IFFUZXN0OjpuZXdSb3coIltdIChhKSBbZF0iKSA8PAotICAgICAgICBpbnQoVGVzdEJhY2spIDw8
IGV4cGVjdGVkQmFja0xpc3QgPDwgZXhwZWN0ZWRCYWNrTGlzdC50YWtlTGFzdCgpIDw8IGV4cGVj
dGVkRm9yd2FyZExpc3QgPDwgdHJ1ZTsKLQotICAgIC8vIEF0dGVtcHQgdG8gZ28gYmFja3dhcmRz
IHdpdGggbm90aGluZyBpbiB0aGUgYmFjayBsaXN0LiBBc2sgdGhlIHRlc3Qgbm90IHRvIHdhaXQg
Zm9yIHRoZSBsb2FkCi0gICAgLy8gKHlvdSB3b24ndCBnZXQgaXQpLgotICAgIFFUZXN0OjpuZXdS
b3coIltdIChhKSBbZF0iKSA8PAotICAgICAgICBpbnQoVGVzdEJhY2spIDw8IGV4cGVjdGVkQmFj
a0xpc3QgPDwgbV90ZXN0SXRlbUEuZGF0YSgpIDw8IGV4cGVjdGVkRm9yd2FyZExpc3QgPDwgZmFs
c2U7Ci19Ci0KLXZvaWQgdHN0X1FXS0hpc3Rvcnk6Omhpc3RvcnlGb3J3YXJkQmFja1Rlc3QoKQot
ewotICAgIFFGRVRDSChpbnQsIGNvbW1hbmQpOwotICAgIFFGRVRDSChRTGlzdDxUZXN0SGlzdG9y
eUl0ZW0qPiwgZXhwZWN0ZWRCYWNrTGlzdCk7Ci0gICAgUUZFVENIKFRlc3RIaXN0b3J5SXRlbSos
IHRlc3RJdGVtKTsKLSAgICBRRkVUQ0goUUxpc3Q8VGVzdEhpc3RvcnlJdGVtKj4sIGV4cGVjdGVk
Rm9yd2FyZExpc3QpOwotICAgIFFGRVRDSChib29sLCB3YWl0KTsKLQotICAgIHN3aXRjaCAoY29t
bWFuZCkgewotICAgIGNhc2UgVGVzdE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGVz
dExvYWQ6Ci0gICAgICAgIG1fcGFnZS0+bG9hZCh0ZXN0SXRlbS0+dXJsKCkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRlc3RCYWNrOgotICAgICAgICBtX3BhZ2UtPnRyaWdnZXJBY3Rpb24o
UVdLUGFnZTo6QmFjayk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGVzdEZ3ZDoKLSAgICAg
ICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKFFXS1BhZ2U6OkZvcndhcmQpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBhbGxvdyB0ZXN0IGRhdGEgdG8gcGFzcyBpbiBp
bmRpY2VzIGJldHdlZW4gZGVmaW5lZCBlbnVtIHJhbmdlCi0gICAgICAgIGlmICgoY29tbWFuZCA+
IC1URVNUX0hJU1RPUllfQUNUSU9OX1JBTkdFKSAmJiAoY29tbWFuZCA8IFRFU1RfSElTVE9SWV9B
Q1RJT05fUkFOR0UpKQotICAgICAgICAgICAgbV9oaXN0b3J5LT5nb1RvSXRlbUF0KGNvbW1hbmQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBRRkFJTCgidW5kZWZpbmVkIHRlc3QgY2FzZSBh
Y3Rpb24iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIFFTaWduYWxTcHkgc3B5
KG1fcGFnZSwgU0lHTkFMKGxvYWRGaW5pc2hlZChib29sKSkpOwotICAgIGlmICh3YWl0KSB7Ci0g
ICAgICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbChtX3BhZ2UsIFNJR05BTChsb2FkRmluaXNoZWQo
Ym9vbCkpKSk7Ci0gICAgICAgIFFDT01QQVJFKHNweS5jb3VudCgpLCAxKTsKLSAgICAgICAgUUxp
c3Q8UVZhcmlhbnQ+IGFyZ3VtZW50cyA9IHNweS50YWtlRmlyc3QoKTsKLSAgICAgICAgUVZFUklG
WTIoYXJndW1lbnRzLmF0KDApLnRvQm9vbCgpLCAiQ291bGQgTm90IExvYWQ6IFFXS1BhZ2UgbG9h
ZEZpbmlzaGVkIHNpZ25hbCByZXR1cm5lZCBmYWxzZSIpOwotICAgIH0gZWxzZQotICAgICAgICBR
Q09NUEFSRShzcHkuY291bnQoKSwgMCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmb3J3YXJk
LCBiYWNrLCBhbmQgb3ZlcmFsbCBoaXN0b3J5IGl0ZW0gY291bnRzIG1hdGNoIHRoZSBleHBlY3Rl
ZCBkYXRhLgotICAgIFFDT01QQVJFKG1faGlzdG9yeS0+YmFja0xpc3RDb3VudCgpLCBleHBlY3Rl
ZEJhY2tMaXN0LmNvdW50KCkpOwotICAgIFFDT01QQVJFKG1faGlzdG9yeS0+Zm9yd2FyZExpc3RD
b3VudCgpLCBleHBlY3RlZEZvcndhcmRMaXN0LmNvdW50KCkpOwotICAgIFFDT01QQVJFKG1faGlz
dG9yeS0+Y291bnQoKSwgZXhwZWN0ZWRCYWNrTGlzdC5jb3VudCgpICsgZXhwZWN0ZWRGb3J3YXJk
TGlzdC5jb3VudCgpKTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgaXRlbSBtYXRj
aGVzIHdoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgdGhlIGN1cnJlbnQgaXRlbS4KLSAgICBRV0tIaXN0
b3J5SXRlbSBjdXJyZW50SXRlbSA9IG1faGlzdG9yeS0+Y3VycmVudEl0ZW0oKTsKLSAgICBRQ09N
UEFSRSh0ZXN0SXRlbS0+dGl0bGUoKSwgY3VycmVudEl0ZW0udGl0bGUoKSk7Ci0gICAgUUNPTVBB
UkUodGVzdEl0ZW0tPnVybCgpLCBjdXJyZW50SXRlbS51cmwoKSk7Ci0KLSAgICAvLyBDaGVjayB0
aGF0IHRpdGxlLCB1cmwgZnJvbSB0aGUgYmFjayBsaXN0IG1hdGNoIGV4cGVjdGVkLgotICAgIC8v
IENoZWNrIHRoYXQgdGl0bGUsIHVybCB1c2luZyBpdGVtQXQgQVBJIG1hdGNoIGV4cGVjdGVkLgot
ICAgIFFMaXN0PFFXS0hpc3RvcnlJdGVtPiBibGlzdCA9IG1faGlzdG9yeS0+YmFja0l0ZW1zKDEw
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkQmFja0xpc3QuY291bnQoKTsgaSsr
KSB7Ci0gICAgICAgIC8vIENvbXBhcmUgYmFja0l0ZW1zIGFuZCBpdGVtQXQgQVBJcwotICAgICAg
ICAvLyAobm90ZSBpdGVtQXQgaXMgY29udGludW91cyB3aXRoIGl0ZW1BdCgwKSA9PSBjdXJyZW50
SXRlbSkKLSAgICAgICAgUUNPTVBBUkUoZXhwZWN0ZWRCYWNrTGlzdC5hdChpKS0+dGl0bGUoKSwK
LSAgICAgICAgICAgICAgICAgYmxpc3QuYXQoaSkudGl0bGUoKSk7Ci0gICAgICAgIFFDT01QQVJF
KGV4cGVjdGVkQmFja0xpc3QuYXQoaSktPnVybCgpLAotICAgICAgICAgICAgICAgICBibGlzdC5h
dChpKS51cmwoKSk7Ci0gICAgICAgIFFDT01QQVJFKGV4cGVjdGVkQmFja0xpc3QuYXQoaSktPnRp
dGxlKCksCi0gICAgICAgICAgICAgICAgIG1faGlzdG9yeS0+aXRlbUF0KGktZXhwZWN0ZWRCYWNr
TGlzdC5jb3VudCgpKS50aXRsZSgpKTsKLSAgICAgICAgUUNPTVBBUkUoZXhwZWN0ZWRCYWNrTGlz
dC5hdChpKS0+dXJsKCksCi0gICAgICAgICAgICAgICAgIG1faGlzdG9yeS0+aXRlbUF0KGktZXhw
ZWN0ZWRCYWNrTGlzdC5jb3VudCgpKS51cmwoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdGhh
dCB0aXRsZSwgdXJsIGZyb20gdGhlIGZvcndhcmQgbGlzdCBtYXRjaCBleHBlY3RlZC4KLSAgICAv
LyBDaGVjayB0aGF0IHRpdGxlLCB1cmwgdXNpbmcgaXRlbUF0IEFQSSBtYXRjaCBleHBlY3RlZC4K
LSAgICBRTGlzdDxRV0tIaXN0b3J5SXRlbT4gZmxpc3QgPSBtX2hpc3RvcnktPmZvcndhcmRJdGVt
cygxMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZEZvcndhcmRMaXN0LmNvdW50
KCk7IGkrKykgewotICAgICAgICAvLyBDb21wYXJlIGZvcndhcmRJdGVtcyBhbmQgaXRlbUF0IEFQ
SXMKLSAgICAgICAgLy8gKG5vdGUgaXRlbUF0IGlzIGNvbnRpbnVvdXMgd2l0aCBpdGVtQXQoMCkg
PT0gY3VycmVudEl0ZW0pCi0gICAgICAgIFFDT01QQVJFKGV4cGVjdGVkRm9yd2FyZExpc3QuYXQo
aSktPnRpdGxlKCksCi0gICAgICAgICAgICAgICAgIGZsaXN0LmF0KGkpLnRpdGxlKCkpOwotICAg
ICAgICBRQ09NUEFSRShleHBlY3RlZEZvcndhcmRMaXN0LmF0KGkpLT51cmwoKSwKLSAgICAgICAg
ICAgICAgICAgZmxpc3QuYXQoaSkudXJsKCkpOwotICAgICAgICBRQ09NUEFSRShleHBlY3RlZEZv
cndhcmRMaXN0LmF0KGkpLT50aXRsZSgpLAotICAgICAgICAgICAgICAgICBtX2hpc3RvcnktPml0
ZW1BdChpKzEpLnRpdGxlKCkpOwotICAgICAgICBRQ09NUEFSRShleHBlY3RlZEZvcndhcmRMaXN0
LmF0KGkpLT51cmwoKSwKLSAgICAgICAgICAgICAgICAgbV9oaXN0b3J5LT5pdGVtQXQoaSsxKS51
cmwoKSk7Ci0gICAgfQotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGJhY2tJdGVtIEFQSSBnaXZl
cyBleHBlY3RlZCB0aXRsZSBhbmQgVVJMIG9yIHRoYXQgdGhleSBnaXZlIGVtcHR5L2JsYW5rIGl0
ZW1zIHdoZW4KLSAgICAvLyB0aGUgYmFjayBsaXN0IGlzIGVtcHR5Ci0gICAgUVdLSGlzdG9yeUl0
ZW0gYmFja0l0ZW0gPSBtX2hpc3RvcnktPmJhY2tJdGVtKCk7Ci0gICAgaWYgKCFleHBlY3RlZEJh
Y2tMaXN0LmNvdW50KCkpIHsKLSAgICAgICAgUUNPTVBBUkUoYmFja0l0ZW0udGl0bGUoKSwgUVN0
cmluZygpKTsKLSAgICAgICAgUUNPTVBBUkUoYmFja0l0ZW0udXJsKCksIFFVcmwoKSk7Ci0gICAg
ICAgIFFDT01QQVJFKG1fdGVzdEl0ZW1CbGFuay0+dGl0bGUoKSwKLSAgICAgICAgICAgICAgICAg
bV9oaXN0b3J5LT5pdGVtQXQoLTEpLnRpdGxlKCkpOwotICAgICAgICBRQ09NUEFSRShtX3Rlc3RJ
dGVtQmxhbmstPnVybCgpLAotICAgICAgICAgICAgICAgICBtX2hpc3RvcnktPml0ZW1BdCgtMSku
dXJsKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFFDT01QQVJFKGV4cGVjdGVkQmFja0xpc3Qu
YXQoZXhwZWN0ZWRCYWNrTGlzdC5jb3VudCgpIC0gMSktPnRpdGxlKCksCi0gICAgICAgICAgICAg
ICAgIGJhY2tJdGVtLnRpdGxlKCkpOwotICAgICAgICBRQ09NUEFSRShleHBlY3RlZEJhY2tMaXN0
LmF0KGV4cGVjdGVkQmFja0xpc3QuY291bnQoKSAtIDEpLT51cmwoKSwKLSAgICAgICAgICAgICAg
ICAgYmFja0l0ZW0udXJsKCkpOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBmb3J3
YXJkSXRlbSBBUEkgZ2l2ZXMgZXhwZWN0ZWQgdGl0bGUgYW5kIFVSTCBvciB0aGF0IHRoZXkgZ2l2
ZSBlbXB0eS9ibGFuayBpdGVtcyB3aGVuCi0gICAgLy8gdGhlIGZvcndhcmQgbGlzdCBpcyBlbXB0
eQotICAgIFFXS0hpc3RvcnlJdGVtIGZvcndhcmRJdGVtID0gbV9oaXN0b3J5LT5mb3J3YXJkSXRl
bSgpOwotICAgIGlmICghZXhwZWN0ZWRGb3J3YXJkTGlzdC5jb3VudCgpKSB7Ci0gICAgICAgIFFD
T01QQVJFKGZvcndhcmRJdGVtLnRpdGxlKCksIFFTdHJpbmcoKSk7Ci0gICAgICAgIFFDT01QQVJF
KGZvcndhcmRJdGVtLnVybCgpLCBRVXJsKCkpOwotICAgICAgICBRQ09NUEFSRShtX3Rlc3RJdGVt
QmxhbmstPnRpdGxlKCksCi0gICAgICAgICAgICAgICAgIG1faGlzdG9yeS0+aXRlbUF0KDEpLnRp
dGxlKCkpOwotICAgICAgICBRQ09NUEFSRShtX3Rlc3RJdGVtQmxhbmstPnVybCgpLAotICAgICAg
ICAgICAgICAgICBtX2hpc3RvcnktPml0ZW1BdCgxKS51cmwoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUUNPTVBBUkUoZXhwZWN0ZWRGb3J3YXJkTGlzdC5hdCgwKS0+dGl0bGUoKSwKLSAgICAg
ICAgICAgICAgICAgZm9yd2FyZEl0ZW0udGl0bGUoKSk7Ci0gICAgICAgIFFDT01QQVJFKGV4cGVj
dGVkRm9yd2FyZExpc3QuYXQoMCktPnVybCgpLAotICAgICAgICAgICAgICAgICBmb3J3YXJkSXRl
bS51cmwoKSk7Ci0gICAgfQotfQotCi1RVEVTVF9NQUlOKHRzdF9RV0tIaXN0b3J5KQotCi0jaW5j
bHVkZSAidHN0X3F3a2hpc3RvcnkubW9jIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xd2twYWdlL3F3a3BhZ2UucHJvIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xd2twYWdlL3F3a3BhZ2UucHJvCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlOTljN2Y0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXdrcGFnZS9xd2twYWdlLnBybworKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLWluY2x1ZGUoLi4vdGVzdHMucHJpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xd2twYWdlL3RzdF9xd2twYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXdrcGFnZS90c3RfcXdrcGFnZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZmNhYzIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xd2twYWdlL3RzdF9xd2twYWdl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4KLSNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgotI2lu
Y2x1ZGUgPHF3a2NvbnRleHQuaD4KLSNpbmNsdWRlIDxxd2twYWdlLmg+Ci0KLWNsYXNzIHRzdF9R
V0tQYWdlIDogcHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi0KLXByaXZhdGUgc2xvdHM6
Ci0gICAgdm9pZCBpbml0KCk7Ci0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB2b2lkIGxvYWRF
bXB0eVVybCgpOwotCi1wcml2YXRlOgotICAgIFFTY29wZWRQb2ludGVyPFFXS0NvbnRleHQ+IG1f
Y29udGV4dDsKLSAgICBRU2NvcGVkUG9pbnRlcjxRV0tQYWdlPiBtX3BhZ2U7Ci19OwotCi12b2lk
IHRzdF9RV0tQYWdlOjppbml0KCkKLXsKLSAgICBtX2NvbnRleHQucmVzZXQobmV3IFFXS0NvbnRl
eHQpOwotICAgIG1fcGFnZS5yZXNldChuZXcgUVdLUGFnZShtX2NvbnRleHQuZGF0YSgpKSk7Ci19
Ci0KLXZvaWQgdHN0X1FXS1BhZ2U6OmNsZWFudXAoKQotewotICAgIG1fcGFnZS5yZXNldCgpOwot
ICAgIG1fY29udGV4dC5yZXNldCgpOwotfQotCi12b2lkIHRzdF9RV0tQYWdlOjpsb2FkRW1wdHlV
cmwoKQotewotICAgIG1fcGFnZS0+bG9hZChRVXJsKCkpOwotICAgIG1fcGFnZS0+bG9hZChRVXJs
KFFMYXRpbjFTdHJpbmcoIiIpKSk7Ci19Ci0KLVFURVNUX01BSU4odHN0X1FXS1BhZ2UpCi0KLSNp
bmNsdWRlICJ0c3RfcXdrcGFnZS5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvdGVzdHMucHJvCmluZGV4IDUzZDc1ZTYuLmZhYjhkZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHMucHJvCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHMucHJvCkBAIC0xLDIgKzEs
MiBAQAogVEVNUExBVEUgPSBzdWJkaXJzCi1TVUJESVJTID0gcWdyYXBoaWNzd2t2aWV3IHF3a3Bh
Z2UgcXdraGlzdG9yeQorU1VCRElSUyA9IHF0b3VjaHdlYnZpZXcgcWRlc2t0b3B3ZWJ2aWV3IGNv
bW1vbnZpZXd0ZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy90ZXN0d2luZG93LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3Rlc3R3aW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjBl
OTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy90ZXN0d2luZG93LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2lmbmRlZiB0ZXN0d2luZG93X2gKKyNkZWZpbmUgdGVzdHdpbmRvd19oCisKKyNpbmNsdWRlIDxR
R3JhcGhpY3NTY2VuZT4KKyNpbmNsdWRlIDxRR3JhcGhpY3NWaWV3PgorI2luY2x1ZGUgPFFHcmFw
aGljc1dpZGdldD4KKyNpbmNsdWRlIDxRUmVzaXplRXZlbnQ+CisjaW5jbHVkZSA8UVNjb3BlZFBv
aW50ZXI+CisKKy8qIFRlc3RXaW5kb3c6IFV0aWxpdHkgY2xhc3MgdG8gd29yayBpZ25vcmUgUUdy
YXBoaWNzVmlldyBkZXRhaWxzLiAqLworY2xhc3MgVGVzdFdpbmRvdyA6IHB1YmxpYyBRR3JhcGhp
Y3NWaWV3IHsKK3B1YmxpYzoKKyAgICBpbmxpbmUgVGVzdFdpbmRvdyhRR3JhcGhpY3NXaWRnZXQq
IHdlYlZpZXcpOworICAgIFFTY29wZWRQb2ludGVyPFFHcmFwaGljc1dpZGdldD53ZWJWaWV3Owor
Citwcm90ZWN0ZWQ6CisgICAgaW5saW5lIHZvaWQgcmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50Kik7
Cit9OworCitpbmxpbmUgVGVzdFdpbmRvdzo6VGVzdFdpbmRvdyhRR3JhcGhpY3NXaWRnZXQqIHdl
YlZpZXcpCisgICAgOiB3ZWJWaWV3KHdlYlZpZXcpCit7CisgICAgUV9BU1NFUlQod2ViVmlldyk7
CisgICAgc2V0RnJhbWVTdHlsZShRRnJhbWU6Ok5vRnJhbWUgfCBRRnJhbWU6OlBsYWluKTsKKwor
ICAgIFFHcmFwaGljc1NjZW5lKiBjb25zdCBzY2VuZSA9IG5ldyBRR3JhcGhpY3NTY2VuZSh0aGlz
KTsKKyAgICBzZXRTY2VuZShzY2VuZSk7CisgICAgc2NlbmUtPmFkZEl0ZW0od2ViVmlldyk7Cit9
CisKK2lubGluZSB2b2lkIFRlc3RXaW5kb3c6OnJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCogZXZl
bnQpCit7CisgICAgUUdyYXBoaWNzVmlldzo6cmVzaXplRXZlbnQoZXZlbnQpOworICAgIFFSZWN0
RiByZWN0KFFQb2ludCgwLCAwKSwgZXZlbnQtPnNpemUoKSk7CisgICAgd2ViVmlldy0+c2V0R2Vv
bWV0cnkocmVjdCk7CisgICAgc2NlbmUoKS0+c2V0U2NlbmVSZWN0KHJlY3QpOworfQorCisjZW5k
aWYgLyogdGVzdHdpbmRvd19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
aWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IDdhNjczMTIuLjgyMzg4ZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCkBA
IC0xNzQsMTIgKzE3NCw2IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRLZWVwQW5k
Q292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgRmxvYXRTaXplJiBrZWVwCiAgICAgc3RhcnRUaWxl
Q3JlYXRpb25UaW1lcigpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGFrZVNu
YXBzaG90KGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkK
LXsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgcGFnZS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6VGFrZVNuYXBzaG90KHNpemUsIGNv
bnRlbnRzUmVjdCksIHBhZ2UtPnBhZ2VJRCgpKTsKLX0KLQogdm9pZCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudHNEaXJ0eVJlY3QpCiB7CiAg
ICAgSW50UmVjdCBkaXJ0eVJlY3QobWFwRnJvbUNvbnRlbnRzKGNvbnRlbnRzRGlydHlSZWN0KSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgK
aW5kZXggYzFiZTZhZS4uZWYyMWNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtNDQsNyArNDQsNyBAQAogY2xhc3MgV0tWaWV3
OwogI2VuZGlmCiAjZWxpZiBQTEFURk9STShRVCkKLWNsYXNzIFFHcmFwaGljc1dLVmlldzsKK2Ns
YXNzIFFUb3VjaFdlYlBhZ2U7CiAjaW5jbHVkZSA8UUltYWdlPgogI2VuZGlmCiAKQEAgLTU5LDcg
KzU5LDcgQEAgdHlwZWRlZiBXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3OwogY2xhc3MgV2ViVmlldzsK
IHR5cGVkZWYgV2ViVmlldyBQbGF0Zm9ybVdlYlZpZXc7CiAjZWxpZiBQTEFURk9STShRVCkKLXR5
cGVkZWYgUUdyYXBoaWNzV0tWaWV3IFBsYXRmb3JtV2ViVmlldzsKK3R5cGVkZWYgUVRvdWNoV2Vi
UGFnZSBQbGF0Zm9ybVdlYlZpZXc7CiAjZW5kaWYKIAogY2xhc3MgVGlsZWREcmF3aW5nQXJlYVBy
b3h5IDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewpAQCAtNzIsOCArNzIsNiBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2Fs
ZTsgfQogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHRha2VT
bmFwc2hvdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjb250ZW50c1JlY3QpOwotCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hDb21wb3NpdGluZ0NvbnRleHQodWludDMyX3QgLyogY29u
dGV4dElEICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0
KCkgeyB9CkBAIC0xMDcsOCArMTA1LDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRSZWN0
IHdlYlZpZXdWaXNpYmxlUmVjdCgpOwogICAgIHZvaWQgdXBkYXRlV2ViVmlldyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsKIAotICAgIHZvaWQgc25hcHNob3RU
YWtlbihTaGFyZWFibGVCaXRtYXAqKTsKLQogICAgIC8vIERyYXdpbmdBcmVhUHJveHkKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBsYXRmb3JtRHJhd2lu
Z0NvbnRleHQpOwogICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaAppbmRl
eCA4MTU2NzAwLi4xYTFjOTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgKQEAgLTU0LDcgKzU0LDggQEAgdHlwZWRlZiBX
S1ZpZXcgUGxhdGZvcm1XZWJWaWV3OwogY2xhc3MgV2ViVmlldzsKIHR5cGVkZWYgV2ViVmlldyBQ
bGF0Zm9ybVdlYlZpZXc7CiAjZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUUdyYXBoaWNzV0tW
aWV3IFBsYXRmb3JtV2ViVmlldzsKKy8vIEZJWE1FOiBXZSBuZWVkIHRvIGludmVzdGlnYXRlIGhv
dyB0byBhYnN0cmFjdCBRRGVza3RvcFdlYlZpZXcvUVRvdWNoV2ViVmlldyBoZXJlLgordHlwZWRl
ZiBRT2JqZWN0IFBsYXRmb3JtV2ViVmlldzsKICNlbGlmIFBMQVRGT1JNKEdUSykKIGNsYXNzIFdl
YlZpZXc7CiB0eXBlZGVmIFdlYlZpZXcgUGxhdGZvcm1XZWJWaWV3OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNkNWQzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvQ2xpZW50SW1wbC5jcHAKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGllbnRJbXBsLmgiCisKKyNpbmNs
dWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAi
V0tTdHJpbmdRdC5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKKyNpbmNsdWRlIDxxd2tjb250ZXh0
Lmg+CisjaW5jbHVkZSA8cXdlYnBhZ2Vwcm94eS5oPgorI2luY2x1ZGUgPFdLRnJhbWUuaD4KKyNp
bmNsdWRlIDxXS1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIFFX
S0NvbnRleHQqIHRvUVdLQ29udGV4dChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlm
IChjbGllbnRJbmZvKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRV0tDb250ZXh0
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgUVdlYlBhZ2VQcm94eSogdG9RV2ViUGFnZVByb3h5KGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgaWYgKGNsaWVudEluZm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFFXZWJQYWdlUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRGaW5pc2hlZChXS0ZyYW1lUmVmIGZyYW1l
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvLCBib29sIG9rKQoreworICAgIGlmICghV0tGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvaykKKyAgICAgICAg
dG9RV2ViUGFnZVByb3h5KGNsaWVudEluZm8pLT5sb2FkRGlkU3VjY2VlZCgpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBUT0RPCisgICAgfQorICAgIHRvUVdlYlBhZ2VQcm94eShjbGllbnRJbmZv
KS0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKK30KKwordm9pZCBxdF93a19kaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFX
S0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisgICAgdG9RV2ViUGFn
ZVByb3h5KGNsaWVudEluZm8pLT5sb2FkRGlkQmVnaW4oKTsKKyAgICB0b1FXZWJQYWdlUHJveHko
Y2xpZW50SW5mbyktPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7Cit9CisKK3ZvaWQgcXRfd2tf
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdl
UmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKK30KKwordm9pZCBxdF93a19kaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
V2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRXJy
b3JSZWYgZXJyb3IsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICBsb2FkRmluaXNoZWQoZnJhbWUsIGNsaWVudEluZm8sIGZhbHNlKTsKK30KKwordm9p
ZCBxdF93a19kaWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYg
ZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBX
ZWJGcmFtZVByb3h5KiB3a2ZyYW1lID0gdG9JbXBsKGZyYW1lKTsKKyAgICBRU3RyaW5nIHVybFN0
cih3a2ZyYW1lLT51cmwoKSk7CisgICAgUVVybCBxVXJsID0gdXJsU3RyOworICAgIHRvUVdlYlBh
Z2VQcm94eShjbGllbnRJbmZvKS0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKKyAgICB0b1FX
ZWJQYWdlUHJveHkoY2xpZW50SW5mbyktPmRpZENoYW5nZVVybChxVXJsKTsKK30KKwordm9pZCBx
dF93a19kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFt
ZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgKGJ1ZyAjNDQ5MzQpCit9CisKK3ZvaWQgcXRfd2tf
ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgbG9hZEZp
bmlzaGVkKGZyYW1lLCBjbGllbnRJbmZvLCB0cnVlKTsKK30KKwordm9pZCBxdF93a19kaWRGYWls
TG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgbG9hZEZpbmlzaGVkKGZyYW1lLCBjbGllbnRJbmZvLCBmYWxzZSk7Cit9CisK
K3ZvaWQgcXRfd2tfZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLU3Ry
aW5nUmVmIHRpdGxlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUp
KQorICAgICAgICByZXR1cm47CisgICAgUVN0cmluZyBxVGl0bGUgPSBXS1N0cmluZ0NvcHlRU3Ry
aW5nKHRpdGxlKTsKKyAgICB0b1FXZWJQYWdlUHJveHkoY2xpZW50SW5mbyktPmRpZENoYW5nZVRp
dGxlKHFUaXRsZSk7Cit9CisKK3ZvaWQgcXRfd2tfZGlkRmlyc3RMYXlvdXRGb3JGcmFtZShXS1Bh
Z2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworfQorCit2b2lkIHF0X3drX2RpZFJlbW92ZUZyYW1lRnJvbUhp
ZXJhcmNoeShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJE
YXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
KGJ1ZyAjNDY0MzIpCit9CisKK3ZvaWQgcXRfd2tfZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKK30KKwordm9pZCBxdF93a19kaWRT
dGFydFByb2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIHRvUVdlYlBhZ2VQcm94eShjbGllbnRJbmZvKS0+ZGlkQ2hhbmdlTG9hZFByb2dyZXNzKDAp
OworfQorCit2b2lkIHF0X3drX2RpZENoYW5nZVByb2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvUVdlYlBhZ2VQcm94eShjbGllbnRJbmZvKS0+
ZGlkQ2hhbmdlTG9hZFByb2dyZXNzKFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpICog
MTAwKTsKK30KKwordm9pZCBxdF93a19kaWRGaW5pc2hQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1FXZWJQYWdlUHJveHkoY2xpZW50SW5m
byktPmRpZENoYW5nZUxvYWRQcm9ncmVzcygxMDApOworfQorCit2b2lkIHF0X3drX2RpZEJlY29t
ZVVucmVzcG9uc2l2ZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
K30KKwordm9pZCBxdF93a19kaWRCZWNvbWVSZXNwb25zaXZlKFdLUGFnZVJlZiBwYWdlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworfQorCitXS1BhZ2VSZWYgcXRfd2tfY3JlYXRlTmV3UGFn
ZShXS1BhZ2VSZWYgcGFnZSwgV0tEaWN0aW9uYXJ5UmVmIGZlYXR1cmVzLCBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIFFXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvUVdlYlBhZ2VQ
cm94eShjbGllbnRJbmZvKTsKKyAgICBRV2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlRm4gY3Jl
YXRlTmV3UGFnZUZuID0gd2tQYWdlLT5jcmVhdGVOZXdQYWdlRnVuY3Rpb24oKTsKKworICAgIGlm
ICghY3JlYXRlTmV3UGFnZUZuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChRV2ViUGFn
ZVByb3h5KiBuZXdQYWdlID0gY3JlYXRlTmV3UGFnZUZuKHdrUGFnZSkpIHsKKyAgICAgICAgV0tS
ZXRhaW4obmV3UGFnZS0+cGFnZVJlZigpKTsKKyAgICAgICAgcmV0dXJuIG5ld1BhZ2UtPnBhZ2VS
ZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBxdF93a19zaG93UGFnZShX
S1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKK30KKwordm9pZCBxdF93
a19jbG9zZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBl
bWl0IHRvUVdlYlBhZ2VQcm94eShjbGllbnRJbmZvKS0+d2luZG93Q2xvc2VSZXF1ZXN0ZWQoKTsK
K30KKwordm9pZCBxdF93a190YWtlRm9jdXMoV0tQYWdlUmVmIHBhZ2UsIFdLRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIGVtaXQgdG9RV2Vi
UGFnZVByb3h5KGNsaWVudEluZm8pLT5mb2N1c05leHRQcmV2Q2hpbGQoZGlyZWN0aW9uID09IGtX
S0ZvY3VzRGlyZWN0aW9uRm9yd2FyZCk7Cit9CisKK3ZvaWQgcXRfd2tfcnVuSmF2YVNjcmlwdEFs
ZXJ0KFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYgZnJh
bWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cit9CisKK3ZvaWQgcXRfd2tfc2V0U3RhdHVz
VGV4dChXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHRleHQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
Cit7CisgICAgUVN0cmluZyBxVGV4dCA9IFdLU3RyaW5nQ29weVFTdHJpbmcodGV4dCk7CisgICAg
dG9RV2ViUGFnZVByb3h5KGNsaWVudEluZm8pLT5kaWRDaGFuZ2VTdGF0dXNUZXh0KHFUZXh0KTsK
K30KKwordm9pZCBxdF93a19kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tQYWdl
UmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUg
dHlwZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IFdlYkZyYW1lUHJveHkqIHdrZnJhbWUgPSB0b0ltcGwoZnJhbWUpOworICAgIFFTdHJpbmcgdXJs
U3RyKHdrZnJhbWUtPnVybCgpKTsKKyAgICBRVXJsIHFVcmwgPSB1cmxTdHI7CisgICAgdG9RV2Vi
UGFnZVByb3h5KGNsaWVudEluZm8pLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIHRv
UVdlYlBhZ2VQcm94eShjbGllbnRJbmZvKS0+ZGlkQ2hhbmdlVXJsKHFVcmwpOworfQorCit2b2lk
IHF0X3drX2RpZENoYW5nZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRh
YmFzZSwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBR
VXJsIHFVcmwgPSBXS1VSTENvcHlRVXJsKHBhZ2VVUkwpOworICAgIGVtaXQgdG9RV0tDb250ZXh0
KGNsaWVudEluZm8pLT5pY29uQ2hhbmdlZEZvclBhZ2VVUkwocVVybCk7Cit9CisKK3ZvaWQgcXRf
d2tfZGlkUmVtb3ZlQWxsSWNvbnMoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0NsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGll
bnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYjM1YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgK
QEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBEZWZhdWx0Q2xp
ZW50Q2FsbGJhY2tzUXRfaAorI2RlZmluZSBEZWZhdWx0Q2xpZW50Q2FsbGJhY2tzUXRfaAorCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCisvLyBsb2FkZXIgY2xpZW50Cit2b2lkIHF0X3drX2RpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBxdF93a19kaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlw
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZEZhaWxQcm92aXNp
b25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLRXJyb3JS
ZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZENv
bW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZEZpbmlzaERvY3VtZW50TG9hZEZvckZy
YW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKK3ZvaWQgcXRfd2tfZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFt
ZVJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgcXRfd2tfZGlk
RmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLRXJyb3JS
ZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZFJl
Y2VpdmVUaXRsZUZvckZyYW1lKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLRnJhbWVS
ZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZEZp
cnN0TGF5b3V0Rm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBxdF93a19kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShX
S1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
Cit2b2lkIHF0X3drX2RpZFN0YXJ0UHJvZ3Jlc3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKK3ZvaWQgcXRfd2tfZGlkQ2hhbmdlUHJvZ3Jlc3MoV0tQYWdlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgcXRfd2tfZGlkRmluaXNoUHJvZ3Jlc3MoV0tQYWdlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgcXRfd2tfZGlkQmVjb21lVW5yZXNwb25z
aXZlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX2RpZEJl
Y29tZVJlc3BvbnNpdmUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQg
cXRfd2tfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFt
ZVJlZiwgV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSwgV0tUeXBlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKworLy8gdWkgY2xpZW50CitXS1BhZ2VSZWYgcXRfd2tfY3JlYXRlTmV3
UGFnZShXS1BhZ2VSZWYgcGFnZSwgV0tEaWN0aW9uYXJ5UmVmIGZlYXR1cmVzLCBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBjb25zdCB2
b2lkICpjbGllbnRJbmZvKTsKK3ZvaWQgcXRfd2tfc2hvd1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwordm9pZCBxdF93a19jbG9zZShXS1BhZ2VSZWYgcGFnZSwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit2b2lkIHF0X3drX3Rha2VGb2N1cyhXS1BhZ2VSZWYg
cGFnZSwgV0tGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
Owordm9pZCBxdF93a19ydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
Cit2b2lkIHF0X3drX3NldFN0YXR1c1RleHQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRl
eHQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOworCisvLyBJY29uRGF0YWJhc2UgY2xpZW50Lgor
dm9pZCBxdF93a19kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tV
UkxSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBxdF93a19kaWRSZW1vdmVBbGxJ
Y29ucyhXS0ljb25EYXRhYmFzZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBEZWZhdWx0Q2xpZW50Q2FsbGJh
Y2tzUXRfaCAqLworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGls
ZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Rp
bGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcAppbmRleCBiYzE1Mzc4Li45NTQ4Zjc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJv
eHlRdC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKIAotI2luY2x1ZGUgInFncmFwaGljc3drdmlldy5oIgorI2lu
Y2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAg
LTU3LDEyICs1Nyw3IEBAIEludFJlY3QgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp3ZWJWaWV3Vmlz
aWJsZVJlY3QoKQogCiBXZWJQYWdlUHJveHkqIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFnZSgp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChtX3dlYlZpZXctPnBhZ2UoKS0+cGFnZVJlZigpKTsKLX0K
LQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNuYXBzaG90VGFrZW4oU2hhcmVhYmxlQml0
bWFwKiBiaXRtYXApCi17Ci0gICAgZW1pdCBtX3dlYlZpZXctPnNuYXBzaG90VGFrZW4oYml0bWFw
LT5jcmVhdGVRSW1hZ2UoKSk7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAKaW5kZXggMTEzM2MyZi4uYTZhY2Y0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlR
dC5jcHAKQEAgLTMxLDUxICszMSw1MSBAQAogI2luY2x1ZGUgPE93blB0ci5oPgogI2luY2x1ZGUg
PFdlYkNvbnRleHRNZW51SXRlbURhdGEuaD4KICNpbmNsdWRlIDxxbWVudS5oPgotI2luY2x1ZGUg
PHF3a3BhZ2UuaD4KKyNpbmNsdWRlIDxxd2VicGFnZXByb3h5Lmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIFFXS1BhZ2U6OldlYkFj
dGlvbiB3ZWJBY3Rpb25Gb3JDb250ZXh0TWVudUFjdGlvbihXZWJDb3JlOjpDb250ZXh0TWVudUFj
dGlvbiBhY3Rpb24pCitzdGF0aWMgUVdlYlBhZ2VQcm94eTo6V2ViQWN0aW9uIHdlYkFjdGlvbkZv
ckNvbnRleHRNZW51QWN0aW9uKFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKIHsK
ICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVt
VGFnT3Blbkxpbms6Ci0gICAgICAgIHJldHVybiBRV0tQYWdlOjpPcGVuTGluazsKKyAgICAgICAg
cmV0dXJuIFFXZWJQYWdlUHJveHk6Ok9wZW5MaW5rOwogICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4
dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgcmV0dXJuIFFXS1BhZ2U6
Ok9wZW5MaW5rSW5OZXdXaW5kb3c7CisgICAgICAgIHJldHVybiBRV2ViUGFnZVByb3h5OjpPcGVu
TGlua0luTmV3V2luZG93OwogICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29w
eUxpbmtUb0NsaXBib2FyZDoKLSAgICAgICAgcmV0dXJuIFFXS1BhZ2U6OkNvcHlMaW5rVG9DbGlw
Ym9hcmQ7CisgICAgICAgIHJldHVybiBRV2ViUGFnZVByb3h5OjpDb3B5TGlua1RvQ2xpcGJvYXJk
OwogICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5k
b3c6Ci0gICAgICAgIHJldHVybiBRV0tQYWdlOjpPcGVuSW1hZ2VJbk5ld1dpbmRvdzsKKyAgICAg
ICAgcmV0dXJuIFFXZWJQYWdlUHJveHk6Ok9wZW5JbWFnZUluTmV3V2luZG93OwogICAgIGNhc2Ug
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgotICAgICAgICByZXR1cm4gUVdLUGFn
ZTo6QmFjazsKKyAgICAgICAgcmV0dXJuIFFXZWJQYWdlUHJveHk6OkJhY2s7CiAgICAgY2FzZSBX
ZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBRV0tQ
YWdlOjpGb3J3YXJkOworICAgICAgICByZXR1cm4gUVdlYlBhZ2VQcm94eTo6Rm9yd2FyZDsKICAg
ICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgIHJldHVybiBR
V0tQYWdlOjpTdG9wOworICAgICAgICByZXR1cm4gUVdlYlBhZ2VQcm94eTo6U3RvcDsKICAgICBj
YXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgcmV0dXJuIFFX
S1BhZ2U6OlJlbG9hZDsKKyAgICAgICAgcmV0dXJuIFFXZWJQYWdlUHJveHk6OlJlbG9hZDsKICAg
ICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0N1dDoKLSAgICAgICAgcmV0dXJuIFFX
S1BhZ2U6OkN1dDsKKyAgICAgICAgcmV0dXJuIFFXZWJQYWdlUHJveHk6OkN1dDsKICAgICBjYXNl
IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0NvcHk6Ci0gICAgICAgIHJldHVybiBRV0tQYWdl
OjpDb3B5OworICAgICAgICByZXR1cm4gUVdlYlBhZ2VQcm94eTo6Q29weTsKICAgICBjYXNlIFdl
YkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgotICAgICAgICByZXR1cm4gUVdLUGFnZTo6
UGFzdGU7CisgICAgICAgIHJldHVybiBRV2ViUGFnZVByb3h5OjpQYXN0ZTsKICAgICBjYXNlIFdl
YkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKLSAgICAgICAgcmV0dXJuIFFXS1Bh
Z2U6OlNlbGVjdEFsbDsKKyAgICAgICAgcmV0dXJuIFFXZWJQYWdlUHJveHk6OlNlbGVjdEFsbDsK
ICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIFFXS1BhZ2U6
Ok5vV2ViQWN0aW9uOworICAgIHJldHVybiBRV2ViUGFnZVByb3h5OjpOb1dlYkFjdGlvbjsKIH0K
IAotV2ViQ29udGV4dE1lbnVQcm94eVF0OjpXZWJDb250ZXh0TWVudVByb3h5UXQoUVdLUGFnZSog
cGFnZSkKK1dlYkNvbnRleHRNZW51UHJveHlRdDo6V2ViQ29udGV4dE1lbnVQcm94eVF0KFFXZWJQ
YWdlUHJveHkqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKIHsKIH0KIAotUGFzc1JlZlB0cjxX
ZWJDb250ZXh0TWVudVByb3h5UXQ+IFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKFFXS1Bh
Z2UqIHBhZ2UpCitQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gV2ViQ29udGV4dE1l
bnVQcm94eVF0OjpjcmVhdGUoUVdlYlBhZ2VQcm94eSogcGFnZSkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJveHlRdChwYWdlKSk7CiB9CkBAIC04NywxNyArODcs
MTggQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5UXQ6OnNob3dDb250ZXh0TWVudShjb25zdCBJ
bnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZlY3QKIAogICAgIE93blB0cjxRTWVudT4gbWVudSA9
IGNyZWF0ZUNvbnRleHRNZW51KGl0ZW1zKTsKIAotICAgIC8vIFdlIHNlbmQgdGhlIHNpZ25hbCwg
ZXZlbiB3aXRoIG5vIGl0ZW1zLCBiZWNhdXNlIHRoZSBjbGllbnQgc2hvdWxkIGJlIGFibGUgdG8g
c2hvdyBjdXN0b20gaXRlbXMKLSAgICAvLyBldmVuIGlmIFdlYktpdCBoYXMgbm90aGluZyB0byBz
aG93LgorICAgIC8vIFdlIGNhbGwgc2hvd0NvbnRleHRNZW51KCksIGV2ZW4gd2l0aCBubyBpdGVt
cywgYmVjYXVzZSB0aGUgY2xpZW50IHNob3VsZCBiZSBhYmxlIHRvIHNob3cgY3VzdG9tIGl0ZW1z
CisgICAgLy8gaWYgV2ViS2l0IGhhcyBub3RoaW5nIHRvIHNob3cuCiAgICAgaWYgKCFtZW51KQog
ICAgICAgICBtZW51ID0gYWRvcHRQdHIobmV3IFFNZW51KTsKIAogICAgIG1lbnUtPm1vdmUocG9z
aXRpb24pOwotICAgIGVtaXQgbV9wYWdlLT5zaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8
UU1lbnU+KG1lbnUubGVha1B0cigpKSk7CisgICAgbV9wYWdlLT5zaG93Q29udGV4dE1lbnUoUVNo
YXJlZFBvaW50ZXI8UU1lbnU+KG1lbnUubGVha1B0cigpKSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4
dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4dE1lbnUoKQogeworICAgIG1fcGFnZS0+aGlkZUNvbnRl
eHRNZW51KCk7CiB9CiAKIFBhc3NPd25QdHI8UU1lbnU+IFdlYkNvbnRleHRNZW51UHJveHlRdDo6
Y3JlYXRlQ29udGV4dE1lbnUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBp
dGVtcykgY29uc3QKQEAgLTEwOCw3ICsxMDksNyBAQCBQYXNzT3duUHRyPFFNZW51PiBXZWJDb250
ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZUNvbnRleHRNZW51KGNvbnN0IFZlY3RvcjxXZWJDb250ZQog
ICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6Q2hl
Y2thYmxlQWN0aW9uVHlwZTogLyogZmFsbCB0aHJvdWdoICovCiAgICAgICAgIGNhc2UgV2ViQ29y
ZTo6QWN0aW9uVHlwZTogewotICAgICAgICAgICAgUVdLUGFnZTo6V2ViQWN0aW9uIGFjdGlvbiA9
IHdlYkFjdGlvbkZvckNvbnRleHRNZW51QWN0aW9uKGl0ZW0uYWN0aW9uKCkpOworICAgICAgICAg
ICAgUVdlYlBhZ2VQcm94eTo6V2ViQWN0aW9uIGFjdGlvbiA9IHdlYkFjdGlvbkZvckNvbnRleHRN
ZW51QWN0aW9uKGl0ZW0uYWN0aW9uKCkpOwogICAgICAgICAgICAgUUFjdGlvbiogcXRBY3Rpb24g
PSBtX3BhZ2UtPmFjdGlvbihhY3Rpb24pOwogICAgICAgICAgICAgaWYgKHF0QWN0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgcXRBY3Rpb24tPnNldEVuYWJsZWQoaXRlbS5lbmFibGVkKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlR
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5o
CmluZGV4IDYwZDgzYTUuLmNiYmJhZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmgKQEAgLTMxLDI0ICszMSwyNCBAQAogI2lu
Y2x1ZGUgPFBhc3NPd25QdHIuaD4KIAogY2xhc3MgUU1lbnU7Ci1jbGFzcyBRV0tQYWdlOworY2xh
c3MgUVdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYkNvbnRleHRNZW51SXRlbURhdGE7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJDb250ZXh0TWVudVByb3h5UXQgOiBwdWJsaWMgV2Vi
Q29udGV4dE1lbnVQcm94eSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eVF0PiBjcmVhdGUoUVdLUGFnZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFFXZWJQYWdlUHJveHkqKTsKIAogcHJpdmF0
ZToKLSAgICBXZWJDb250ZXh0TWVudVByb3h5UXQoUVdLUGFnZSopOworICAgIFdlYkNvbnRleHRN
ZW51UHJveHlRdChRV2ViUGFnZVByb3h5Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRl
eHRNZW51KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRN
ZW51SXRlbURhdGE+Jik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpOwogCiAg
ICAgUGFzc093blB0cjxRTWVudT4gY3JlYXRlQ29udGV4dE1lbnUoY29uc3QgVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbURhdGE+JiBpdGVtcykgY29uc3Q7CiAKLSAgICBRV0tQYWdlKiBjb25zdCBt
X3BhZ2U7CisgICAgUVdlYlBhZ2VQcm94eSogY29uc3QgbV9wYWdlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcWRl
c2t0b3B3ZWJwYWdlcHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3FkZXNr
dG9wd2VicGFnZXByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
MGYxNWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3Fk
ZXNrdG9wd2VicGFnZXByb3h5LmNwcApAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFkZXNr
dG9wd2VicGFnZXByb3h5LmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKKyNp
bmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxF
dmVudC5oIgorI2luY2x1ZGUgPFJlZ2lvbi5oPgorI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNp
bmNsdWRlIDxRRXZlbnQ+CisjaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVEcmFnRHJvcEV2ZW50Pgor
I2luY2x1ZGUgPFFHcmFwaGljc1dpZGdldD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
c3RhdGljIGlubGluZSBRdDo6RHJvcEFjdGlvbiBkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0aW9uKHVu
c2lnbmVkIGRyYWdPcGVyYXRpb24pCit7CisgICAgUXQ6OkRyb3BBY3Rpb24gcmVzdWx0ID0gUXQ6
Oklnbm9yZUFjdGlvbjsKKyAgICBpZiAoZHJhZ09wZXJhdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5
KQorICAgICAgICByZXN1bHQgPSBRdDo6Q29weUFjdGlvbjsKKyAgICBlbHNlIGlmIChkcmFnT3Bl
cmF0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAgICAgIHJlc3VsdCA9IFF0OjpNb3ZlQWN0
aW9uOworICAgIGVsc2UgaWYgKGRyYWdPcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uR2VuZXJpYykK
KyAgICAgICAgcmVzdWx0ID0gUXQ6Ok1vdmVBY3Rpb247CisgICAgZWxzZSBpZiAoZHJhZ09wZXJh
dGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQorICAgICAgICByZXN1bHQgPSBRdDo6TGlua0FjdGlv
bjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRRGVza3RvcFdlYlBhZ2VQcm94eTo6UURlc2t0
b3BXZWJQYWdlUHJveHkoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZSogdmlld0ludGVyZmFjZSwgUVdL
Q29udGV4dCogY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKQorICAgIDogUVdlYlBh
Z2VQcm94eSh2aWV3SW50ZXJmYWNlLCBjb250ZXh0LCBwYWdlR3JvdXApCit7CisgICAgaW5pdCgp
OworfQorCitQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFFEZXNrdG9wV2ViUGFnZVByb3h5
OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKK3sKKyAgICByZXR1cm4gRHJhd2luZ0FyZWFQcm94
eUltcGw6OmNyZWF0ZShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7Cit9CisKK3ZvaWQgUURlc2t0b3BX
ZWJQYWdlUHJveHk6OnBhaW50Q29udGVudChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3Qm
IGFyZWEpCit7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSB1bnBhaW50ZWQg
cmVnaW9uPworICAgIFdlYktpdDo6UmVnaW9uIHVucGFpbnRlZFJlZ2lvbjsKKyAgICBzdGF0aWNf
Y2FzdDxEcmF3aW5nQXJlYVByb3h5SW1wbCo+KG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgp
KS0+cGFpbnQocGFpbnRlciwgYXJlYSwgdW5wYWludGVkUmVnaW9uKTsKK30KKwordm9pZCBRRGVz
a3RvcFdlYlBhZ2VQcm94eTo6c2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBcmd1bWVudHMmKQoreworICAgIC8vIFdlIGlnbm9yZSB0aGUgdmlld3BvcnQgZGVmaW5p
dGlvbiBvbiB0aGUgRGVza3RvcC4KK30KKworYm9vbCBRRGVza3RvcFdlYlBhZ2VQcm94eTo6aGFu
ZGxlRXZlbnQoUUV2ZW50KiBlKQoreworICAgIHN3aXRjaCAoZS0+dHlwZSgpKSB7CisgICAgY2Fz
ZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZU1vdmU6CisgICAgICAgIHJldHVybiBoYW5kbGVN
b3VzZU1vdmVFdmVudChyZWludGVycHJldF9jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+
KGUpKTsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlUHJlc3M6CisgICAgICAg
IHJldHVybiBoYW5kbGVNb3VzZVByZXNzRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRR3JhcGhpY3NT
Y2VuZU1vdXNlRXZlbnQqPihlKSk7CisgICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3Vz
ZVJlbGVhc2U6CisgICAgICAgIHJldHVybiBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChyZWludGVy
cHJldF9jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGUpKTsKKyAgICBjYXNlIFFFdmVu
dDo6R3JhcGhpY3NTY2VuZU1vdXNlRG91YmxlQ2xpY2s6CisgICAgICAgIHJldHVybiBoYW5kbGVN
b3VzZURvdWJsZUNsaWNrRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNl
RXZlbnQqPihlKSk7CisgICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVXaGVlbDoKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZVdoZWVsRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRR3JhcGhpY3NTY2Vu
ZVdoZWVsRXZlbnQqPihlKSk7CisgICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVIb3Zlck1v
dmU6CisgICAgICAgIHJldHVybiBoYW5kbGVIb3Zlck1vdmVFdmVudChyZWludGVycHJldF9jYXN0
PFFHcmFwaGljc1NjZW5lSG92ZXJFdmVudCo+KGUpKTsKKyAgICBjYXNlIFFFdmVudDo6RHJhZ0Vu
dGVyOgorICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0VudGVyRXZlbnQocmVpbnRlcnByZXRfY2Fz
dDxRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQqPihlKSk7CisgICAgY2FzZSBRRXZlbnQ6OkRy
YWdMZWF2ZToKKyAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdMZWF2ZUV2ZW50KHJlaW50ZXJwcmV0
X2Nhc3Q8UUdyYXBoaWNzU2NlbmVEcmFnRHJvcEV2ZW50Kj4oZSkpOworICAgIGNhc2UgUUV2ZW50
OjpEcmFnTW92ZToKKyAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdNb3ZlRXZlbnQocmVpbnRlcnBy
ZXRfY2FzdDxRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQqPihlKSk7CisgICAgY2FzZSBRRXZl
bnQ6OkRyb3A6CisgICAgICAgIHJldHVybiBoYW5kbGVEcm9wRXZlbnQocmVpbnRlcnByZXRfY2Fz
dDxRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQqPihlKSk7CisgICAgfQorICAgIHJldHVybiBR
V2ViUGFnZVByb3h5OjpoYW5kbGVFdmVudChlKTsKK30KKworYm9vbCBRRGVza3RvcFdlYlBhZ2VQ
cm94eTo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBlKQor
eworICAgIC8vIEZvciBzb21lIHJlYXNvbiBtb3VzZSBwcmVzcyByZXN1bHRzIGluIG1vdXNlIGhv
dmVyICh3aGljaCBpcworICAgIC8vIGNvbnZlcnRlZCB0byBtb3VzZSBtb3ZlIGZvciBXZWJLaXQp
LiBXZSBpZ25vcmUgdGhlc2UgaG92ZXIKKyAgICAvLyBldmVudHMgYnkgY29tcGFyaW5nIGxhc3RQ
b3Mgd2l0aCBuZXdQb3MuCisgICAgLy8gTk9URTogbGFzdFBvcyBmcm9tIHRoZSBldmVudCBhbHdh
eXMgY29tZXMgZW1wdHksIHNvIHdlIHdvcmsKKyAgICAvLyBhcm91bmQgdGhhdCBoZXJlLgorICAg
IHN0YXRpYyBRUG9pbnRGIGxhc3RQb3MgPSBRUG9pbnRGKCk7CisgICAgaWYgKGxhc3RQb3MgPT0g
ZS0+cG9zKCkpCisgICAgICAgIHJldHVybiBlLT5pc0FjY2VwdGVkKCk7CisgICAgbGFzdFBvcyA9
IGUtPnBvcygpOworCisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZl
V2ViTW91c2VFdmVudChlLCAwKSk7CisKKyAgICByZXR1cm4gZS0+aXNBY2NlcHRlZCgpOworfQor
Citib29sIFFEZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoUUdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50KiBlKQoreworICAgIGlmIChtX3RyaXBsZUNsaWNrVGltZXIuaXNB
Y3RpdmUoKSAmJiAoZS0+cG9zKCkgLSBtX3RyaXBsZUNsaWNrKS5tYW5oYXR0YW5MZW5ndGgoKSA8
IFFBcHBsaWNhdGlvbjo6c3RhcnREcmFnRGlzdGFuY2UoKSkgeworICAgICAgICBtX3dlYlBhZ2VQ
cm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGUsIDMpKTsKKyAgICAg
ICAgcmV0dXJuIGUtPmlzQWNjZXB0ZWQoKTsKKyAgICB9CisKKyAgICBtX3dlYlBhZ2VQcm94eS0+
aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGUsIDEpKTsKKyAgICByZXR1cm4g
ZS0+aXNBY2NlcHRlZCgpOworfQorCitib29sIFFEZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGUpCit7CisgICAgbV93
ZWJQYWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChlLCAwKSk7
CisgICAgcmV0dXJuIGUtPmlzQWNjZXB0ZWQoKTsKK30KKworYm9vbCBRRGVza3RvcFdlYlBhZ2VQ
cm94eTo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVu
dCogZSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJN
b3VzZUV2ZW50KGUsIDIpKTsKKworICAgIG1fdHJpcGxlQ2xpY2tUaW1lci5zdGFydChRQXBwbGlj
YXRpb246OmRvdWJsZUNsaWNrSW50ZXJ2YWwoKSwgdGhpcyk7CisgICAgbV90cmlwbGVDbGljayA9
IGUtPnBvcygpLnRvUG9pbnQoKTsKKyAgICByZXR1cm4gZS0+aXNBY2NlcHRlZCgpOworfQorCiti
b29sIFFEZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KFFHcmFwaGljc1NjZW5l
V2hlZWxFdmVudCogZSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KGUpKTsKKyAgICByZXR1cm4gZS0+aXNBY2NlcHRlZCgpOworfQor
Citib29sIFFEZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVIb3Zlck1vdmVFdmVudChRR3JhcGhp
Y3NTY2VuZUhvdmVyRXZlbnQqIGUpCit7CisgICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50IG1l
KFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlTW92ZSk7CisgICAgbWUuc2V0UG9zKGUtPnBvcygp
KTsKKyAgICBtZS5zZXRTY3JlZW5Qb3MoZS0+c2NyZWVuUG9zKCkpOworICAgIG1lLnNldEFjY2Vw
dGVkKGUtPmlzQWNjZXB0ZWQoKSk7CisKKyAgICByZXR1cm4gaGFuZGxlTW91c2VNb3ZlRXZlbnQo
Jm1lKTsKK30KKworYm9vbCBRRGVza3RvcFdlYlBhZ2VQcm94eTo6aGFuZGxlRHJhZ0VudGVyRXZl
bnQoUUdyYXBoaWNzU2NlbmVEcmFnRHJvcEV2ZW50KiBlKQoreworICAgIG1fd2ViUGFnZVByb3h5
LT5yZXNldERyYWdPcGVyYXRpb24oKTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCB1c2UgUUN1
cnNvcjo6cG9zKCkKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShlLT5taW1lRGF0YSgpLCBlLT5wb3Mo
KS50b1BvaW50KCksIFFDdXJzb3I6OnBvcygpLCBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGUt
PnBvc3NpYmxlQWN0aW9ucygpKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYWdFbnRlcmVkKCZk
cmFnRGF0YSk7CisgICAgZS0+YWNjZXB0UHJvcG9zZWRBY3Rpb24oKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBRRGVza3RvcFdlYlBhZ2VQcm94eTo6aGFuZGxlRHJhZ0xlYXZlRXZlbnQo
UUdyYXBoaWNzU2NlbmVEcmFnRHJvcEV2ZW50KiBlKQoreworICAgIGJvb2wgYWNjZXB0ZWQgPSBl
LT5pc0FjY2VwdGVkKCk7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCB1c2UgUUN1cnNvcjo6
cG9zKCkKKyAgICBEcmFnRGF0YSBkcmFnRGF0YSgwLCBJbnRQb2ludCgpLCBRQ3Vyc29yOjpwb3Mo
KSwgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgIG1fd2ViUGFnZVByb3h5LT5kcmFnRXhpdGVkKCZk
cmFnRGF0YSk7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc2V0RHJhZ09wZXJhdGlvbigpOworCisg
ICAgZS0+c2V0QWNjZXB0ZWQoYWNjZXB0ZWQpOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKwor
Ym9vbCBRRGVza3RvcFdlYlBhZ2VQcm94eTo6aGFuZGxlRHJhZ01vdmVFdmVudChRR3JhcGhpY3NT
Y2VuZURyYWdEcm9wRXZlbnQqIGUpCit7CisgICAgYm9vbCBhY2NlcHRlZCA9IGUtPmlzQWNjZXB0
ZWQoKTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBRQ3Vyc29yOjpwb3MoKQorICAg
IERyYWdEYXRhIGRyYWdEYXRhKGUtPm1pbWVEYXRhKCksIGUtPnBvcygpLnRvUG9pbnQoKSwgUUN1
cnNvcjo6cG9zKCksIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZS0+cG9zc2libGVBY3Rpb25z
KCkpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICBl
LT5zZXREcm9wQWN0aW9uKGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24obV93ZWJQYWdlUHJveHkt
PmRyYWdPcGVyYXRpb24oKSkpOworICAgIGlmIChtX3dlYlBhZ2VQcm94eS0+ZHJhZ09wZXJhdGlv
bigpICE9IERyYWdPcGVyYXRpb25Ob25lKQorICAgICAgICBlLT5hY2NlcHQoKTsKKworICAgIGUt
PnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisKK2Jvb2wg
UURlc2t0b3BXZWJQYWdlUHJveHk6OmhhbmRsZURyb3BFdmVudChRR3JhcGhpY3NTY2VuZURyYWdE
cm9wRXZlbnQqIGUpCit7CisgICAgYm9vbCBhY2NlcHRlZCA9IGUtPmlzQWNjZXB0ZWQoKTsKKwor
ICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBRQ3Vyc29yOjpwb3MoKQorICAgIERyYWdEYXRh
IGRyYWdEYXRhKGUtPm1pbWVEYXRhKCksIGUtPnBvcygpLnRvUG9pbnQoKSwgUUN1cnNvcjo6cG9z
KCksIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZS0+cG9zc2libGVBY3Rpb25zKCkpKTsKKyAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIG1fd2ViUGFnZVByb3h5LT5w
ZXJmb3JtRHJhZygmZHJhZ0RhdGEsIFN0cmluZygpLCBoYW5kbGUpOworICAgIGUtPnNldERyb3BB
Y3Rpb24oZHJhZ09wZXJhdGlvblRvRHJvcEFjdGlvbihtX3dlYlBhZ2VQcm94eS0+ZHJhZ09wZXJh
dGlvbigpKSk7CisgICAgZS0+YWNjZXB0KCk7CisKKyAgICBlLT5zZXRBY2NlcHRlZChhY2NlcHRl
ZCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCit2b2lkIFFEZXNrdG9wV2ViUGFnZVByb3h5
Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBlKQoreworICAgIGludCB0aW1lcklkID0gZS0+dGlt
ZXJJZCgpOworICAgIGlmICh0aW1lcklkID09IG1fdHJpcGxlQ2xpY2tUaW1lci50aW1lcklkKCkp
CisgICAgICAgIG1fdHJpcGxlQ2xpY2tUaW1lci5zdG9wKCk7CisgICAgZWxzZQorICAgICAgICBR
T2JqZWN0Ojp0aW1lckV2ZW50KGUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L3FkZXNrdG9wd2VicGFnZXByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvcWRlc2t0b3B3ZWJwYWdlcHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMGJmMDJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L3FkZXNrdG9wd2VicGFnZXByb3h5LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgcWRlc2t0b3B3ZWJwYWdlcHJveHlfaAorI2RlZmluZSBx
ZGVza3RvcHdlYnBhZ2Vwcm94eV9oCisKKyNpbmNsdWRlICJxd2VicGFnZXByb3h5LmgiCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K2NsYXNzIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK2NsYXNzIFFEZXNrdG9wV2ViUGFnZVByb3h5IDogcHVibGljIFFXZWJQYWdlUHJveHkKK3sK
K3B1YmxpYzoKKyAgICBRRGVza3RvcFdlYlBhZ2VQcm94eShRRGVza3RvcFdlYlZpZXdQcml2YXRl
KiwgUVdLQ29udGV4dCosIFdLUGFnZUdyb3VwUmVmID0gMCk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoUUV2ZW50Kik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHBhaW50Q29udGVu
dChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIGFyZWEpOworCitwcml2YXRlOgorICAg
IC8qIFBhZ2VDbGllbnQgb3ZlcnJpZGVzLiAqLworICAgIHZpcnR1YWwgUGFzc093blB0cjxEcmF3
aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCopOworCisgICAgYm9v
bCBoYW5kbGVNb3VzZU1vdmVFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqKTsKKyAgICBi
b29sIGhhbmRsZU1vdXNlUHJlc3NFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqKTsKKyAg
ICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCop
OworICAgIGJvb2wgaGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KFFHcmFwaGljc1NjZW5lTW91
c2VFdmVudCopOworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChRR3JhcGhpY3NTY2VuZVdoZWVs
RXZlbnQqKTsKKyAgICBib29sIGhhbmRsZUhvdmVyTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lSG92
ZXJFdmVudCopOworICAgIGJvb2wgaGFuZGxlRHJhZ0VudGVyRXZlbnQoUUdyYXBoaWNzU2NlbmVE
cmFnRHJvcEV2ZW50Kik7CisgICAgYm9vbCBoYW5kbGVEcmFnTGVhdmVFdmVudChRR3JhcGhpY3NT
Y2VuZURyYWdEcm9wRXZlbnQqKTsKKyAgICBib29sIGhhbmRsZURyYWdNb3ZlRXZlbnQoUUdyYXBo
aWNzU2NlbmVEcmFnRHJvcEV2ZW50Kik7CisgICAgYm9vbCBoYW5kbGVEcm9wRXZlbnQoUUdyYXBo
aWNzU2NlbmVEcmFnRHJvcEV2ZW50Kik7CisKKyAgICBRUG9pbnQgbV90cmlwbGVDbGljazsKKyAg
ICBRQmFzaWNUaW1lciBtX3RyaXBsZUNsaWNrVGltZXI7Cit9OworCisjZW5kaWYgLyogcWRlc2t0
b3B3ZWJwYWdlcHJveHlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
cXRvdWNod2VicGFnZXByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zYTUwNzAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlcHJveHkuaCIKKyNpbmNsdWRlIDxUaWxl
ZERyYXdpbmdBcmVhUHJveHkuaD4KKyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2Vi
RXZlbnRGYWN0b3J5UXQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1FUb3VjaFdl
YlBhZ2VQcm94eTo6UVRvdWNoV2ViUGFnZVByb3h5KFRvdWNoVmlld0ludGVyZmFjZSogdmlld0lu
dGVyZmFjZSwgUVdLQ29udGV4dCogY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
KQorICAgIDogUVdlYlBhZ2VQcm94eSh2aWV3SW50ZXJmYWNlLCBjb250ZXh0LCBwYWdlR3JvdXBS
ZWYpCit7CisgICAgaW5pdCgpOworICAgIC8vIEZJWE1FOiBhZGQgcHJvcGVyIGhhbmRsaW5nIG9m
IHZpZXdwb3J0LgorICAgIHNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRTaXplKFFTaXpl
KDk4MCwgOTgwKSk7Cit9CisKK1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUVRvdWNoV2Vi
UGFnZVByb3h5OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKK3sKKyAgICByZXR1cm4gVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpjcmVhdGUocGFnZVZpZXcoKSwgbV93ZWJQYWdlUHJveHkuZ2V0KCkp
OworfQorCit2b2lkIFFUb3VjaFdlYlBhZ2VQcm94eTo6cGFpbnRDb250ZW50KFFQYWludGVyKiBw
YWludGVyLCBjb25zdCBRUmVjdCYgYXJlYSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhd2lu
Z0FyZWEoKS0+cGFpbnQoSW50UmVjdChhcmVhKSwgcGFpbnRlcik7Cit9CisKK3ZvaWQgUVRvdWNo
V2ViUGFnZVByb3h5OjpzZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBtX3ZpZXdwb3J0QXJndW1lbnRzID0gYXJnczsKKyAg
ICAvLyBGSVhNRTogd2UgbXVzdCB0ZWxsIG91ciBWaWV3cyB0byByZWFjdCB0byB0aGUgbmV3IHZp
ZXdwb3J0IHBhcmFtZXRlcnMuCit9CisKK2Jvb2wgUVRvdWNoV2ViUGFnZVByb3h5OjpoYW5kbGVF
dmVudChRRXZlbnQqIGV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUoKSkgeworICAg
IGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgorICAgIGNhc2UgUUV2ZW50OjpUb3VjaEVuZDoKKyAg
ICBjYXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6CisgICAgICAgIHRvdWNoRXZlbnQoc3RhdGljX2Nh
c3Q8UVRvdWNoRXZlbnQqPihldmVudCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIFFXZWJQYWdlUHJveHk6OmhhbmRsZUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBR
VG91Y2hXZWJQYWdlUHJveHk6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQoreworI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViVG91Y2hFdmVudCB0b3VjaEV2ZW50ID0gV2Vi
RXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJUb3VjaEV2ZW50KGV2ZW50KTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKKyNlbHNlCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgZXZlbnQtPmlnbm9yZSgpOworI2VuZGlmCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4M2M0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxdG91Y2h3ZWJwYWdlcHJveHlf
aAorI2RlZmluZSBxdG91Y2h3ZWJwYWdlcHJveHlfaAorCisjaW5jbHVkZSAicXdlYnBhZ2Vwcm94
eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKKyNpbmNsdWRlICJ0b3VjaHZpZXdp
bnRlcmZhY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworY2xhc3MgUVRvdWNoV2Vi
UGFnZVByb3h5IDogcHVibGljIFFXZWJQYWdlUHJveHkKK3sKK3B1YmxpYzoKKyAgICBRVG91Y2hX
ZWJQYWdlUHJveHkoVG91Y2hWaWV3SW50ZXJmYWNlKiwgUVdLQ29udGV4dCosIFdLUGFnZUdyb3Vw
UmVmID0gMCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoUUV2ZW50Kik7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50KFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRUmVjdCYgYXJlYSk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMmKTsKKworICAgIFRvdWNoVmlld0ludGVyZmFjZSogdG91Y2hWaWV3SW50ZXJmYWNlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VG91Y2hWaWV3SW50ZXJmYWNlKj4obV92aWV3SW50ZXJm
YWNlKTsgfQorICAgIFFUb3VjaFdlYlBhZ2UqIHBhZ2VWaWV3KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8UVRvdWNoV2ViUGFnZSo+KHRvdWNoVmlld0ludGVyZmFjZSgpLT5wYWdlVmlldygp
KTsgfQorCisgICAgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CisKKyAgICBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyBtX3ZpZXdwb3J0QXJndW1lbnRzOworfTsKKworI2VuZGlmIC8q
IHF0b3VjaHdlYnBhZ2Vwcm94eV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvcXdlYnBhZ2Vwcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
cXdlYnBhZ2Vwcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEz
YzJmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2Vi
cGFnZXByb3h5LmNwcApAQCAtMCwwICsxLDgxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxd2VicGFnZXByb3h5LmgiCisKKyNpbmNs
dWRlICJxd2twcmVmZXJlbmNlc19wLmgiCisKKyNpbmNsdWRlICJDbGllbnRJbXBsLmgiCisjaW5j
bHVkZSAicXdrY29udGV4dC5oIgorI2luY2x1ZGUgInF3a2NvbnRleHRfcC5oIgorI2luY2x1ZGUg
InF3a2hpc3RvcnkuaCIKKyNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKKyNpbmNsdWRlICJ2aWV3
aW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgorI2luY2x1ZGUgIkxvY2Fs
aXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lbnVQcm94eVF0LmgiCisjaW5jbHVkZSAiV2ViRWRpdENvbW1hbmRQcm94
eS5oIgorI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeVF0LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBN
ZW51UHJveHlRdC5oIgorI2luY2x1ZGUgIldlYlVuZG9Db21tYW5kUXQuaCIKKyNpbmNsdWRlICJX
S1N0cmluZ1F0LmgiCisjaW5jbHVkZSAiV0tVUkxRdC5oIgorI2luY2x1ZGUgPFFBY3Rpb24+Cisj
aW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lTW91c2VFdmVu
dD4KKyNpbmNsdWRlIDxRU3R5bGU+CisjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CisjaW5jbHVkZSA8
UVVuZG9TdGFjaz4KKyNpbmNsdWRlIDxRdERlYnVnPgorI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29y
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUg
PFdlYktpdDIvV0tGcmFtZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KKyNp
bmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUVdLQ29udGV4dCogZGVmYXVsdFdLQ29udGV4
dCgpCit7CisgICAgc3RhdGljIFFXS0NvbnRleHQqIGRlZmF1bHRDb250ZXh0ID0gbmV3IFFXS0Nv
bnRleHQoKTsKKyAgICByZXR1cm4gZGVmYXVsdENvbnRleHQ7Cit9CisKK3N0YXRpYyBXZWJDb3Jl
OjpDb250ZXh0TWVudUFjdGlvbiBjb250ZXh0TWVudUFjdGlvbkZvcldlYkFjdGlvbihRV2ViUGFn
ZVByb3h5OjpXZWJBY3Rpb24gYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAg
Y2FzZSBRV2ViUGFnZVByb3h5OjpPcGVuTGluazoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNv
bnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOworICAgIGNhc2UgUVdlYlBhZ2VQcm94eTo6T3Blbkxp
bmtJbk5ld1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3c7CisgICAgY2FzZSBRV2ViUGFnZVByb3h5OjpDb3B5TGlua1Rv
Q2xpcGJvYXJkOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29w
eUxpbmtUb0NsaXBib2FyZDsKKyAgICBjYXNlIFFXZWJQYWdlUHJveHk6Ok9wZW5JbWFnZUluTmV3
V2luZG93OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3Blbklt
YWdlSW5OZXdXaW5kb3c7CisgICAgY2FzZSBRV2ViUGFnZVByb3h5OjpDdXQ6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdDdXQ7CisgICAgY2FzZSBRV2ViUGFnZVBy
b3h5OjpDb3B5OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29w
eTsKKyAgICBjYXNlIFFXZWJQYWdlUHJveHk6OlBhc3RlOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnUGFzdGU7CisgICAgY2FzZSBRV2ViUGFnZVByb3h5OjpTZWxl
Y3RBbGw6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RB
bGw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjsK
K30KKworc3RhdGljIGlubGluZSBRdDo6RHJvcEFjdGlvbnMgZHJhZ09wZXJhdGlvblRvRHJvcEFj
dGlvbnModW5zaWduZWQgZHJhZ09wZXJhdGlvbnMpCit7CisgICAgUXQ6OkRyb3BBY3Rpb25zIHJl
c3VsdCA9IFF0OjpJZ25vcmVBY3Rpb247CisgICAgaWYgKGRyYWdPcGVyYXRpb25zICYgRHJhZ09w
ZXJhdGlvbkNvcHkpCisgICAgICAgIHJlc3VsdCB8PSBRdDo6Q29weUFjdGlvbjsKKyAgICBpZiAo
ZHJhZ09wZXJhdGlvbnMgJiBEcmFnT3BlcmF0aW9uTW92ZSkKKyAgICAgICAgcmVzdWx0IHw9IFF0
OjpNb3ZlQWN0aW9uOworICAgIGlmIChkcmFnT3BlcmF0aW9ucyAmIERyYWdPcGVyYXRpb25HZW5l
cmljKQorICAgICAgICByZXN1bHQgfD0gUXQ6Ok1vdmVBY3Rpb247CisgICAgaWYgKGRyYWdPcGVy
YXRpb25zICYgRHJhZ09wZXJhdGlvbkxpbmspCisgICAgICAgIHJlc3VsdCB8PSBRdDo6TGlua0Fj
dGlvbjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIGRy
b3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oUXQ6OkRyb3BBY3Rpb25zIGFjdGlvbnMpCit7CisgICAg
dW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBpZiAoYWN0aW9ucyAmIFF0OjpDb3B5QWN0aW9uKQor
ICAgICAgICByZXN1bHQgfD0gRHJhZ09wZXJhdGlvbkNvcHk7CisgICAgaWYgKGFjdGlvbnMgJiBR
dDo6TW92ZUFjdGlvbikKKyAgICAgICAgcmVzdWx0IHw9IChEcmFnT3BlcmF0aW9uTW92ZSB8IERy
YWdPcGVyYXRpb25HZW5lcmljKTsKKyAgICBpZiAoYWN0aW9ucyAmIFF0OjpMaW5rQWN0aW9uKQor
ICAgICAgICByZXN1bHQgfD0gRHJhZ09wZXJhdGlvbkxpbms7CisgICAgaWYgKHJlc3VsdCA9PSAo
RHJhZ09wZXJhdGlvbkNvcHkgfCBEcmFnT3BlcmF0aW9uTW92ZSB8IERyYWdPcGVyYXRpb25HZW5l
cmljIHwgRHJhZ09wZXJhdGlvbkxpbmspKQorICAgICAgICByZXN1bHQgPSBEcmFnT3BlcmF0aW9u
RXZlcnk7CisgICAgcmV0dXJuIChEcmFnT3BlcmF0aW9uKXJlc3VsdDsKK30KKworUVdlYlBhZ2VQ
cm94eTo6UVdlYlBhZ2VQcm94eShWaWV3SW50ZXJmYWNlKiB2aWV3SW50ZXJmYWNlLCBRV0tDb250
ZXh0KiBjLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCisgICAgOiBtX3ZpZXdJbnRlcmZh
Y2Uodmlld0ludGVyZmFjZSkKKyAgICAsIG1fY29udGV4dChjKQorICAgICwgbV9wcmVmZXJlbmNl
cygwKQorICAgICwgbV9jcmVhdGVOZXdQYWdlRm4oMCkKKyAgICAsIG1faXNDb25uZWN0ZWRUb0Vu
Z2luZSh0cnVlKQorI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICAsIG1fdW5kb1N0YWNrKGFk
b3B0UHRyKG5ldyBRVW5kb1N0YWNrKHRoaXMpKSkKKyNlbmRpZgoreworICAgIEFTU0VSVCh2aWV3
SW50ZXJmYWNlKTsKKyAgICBtZW1zZXQobV9hY3Rpb25zLCAwLCBzaXplb2YobV9hY3Rpb25zKSk7
CisgICAgbV93ZWJQYWdlUHJveHkgPSBtX2NvbnRleHQtPmQtPmNvbnRleHQtPmNyZWF0ZVdlYlBh
Z2UodGhpcywgdG9JbXBsKHBhZ2VHcm91cFJlZikpOworICAgIG1faGlzdG9yeSA9IFFXS0hpc3Rv
cnlQcml2YXRlOjpjcmVhdGVIaXN0b3J5KHRoaXMsIG1fd2ViUGFnZVByb3h5LT5iYWNrRm9yd2Fy
ZExpc3QoKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6aW5pdCgpCit7CisgICAgbV93ZWJQ
YWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgV0tQYWdlTG9hZGVyQ2xpZW50IGxv
YWRDbGllbnQgPSB7CisgICAgICAgIDAsICAgICAgLyogdmVyc2lvbiAqLworICAgICAgICB0aGlz
LCAgIC8qIGNsaWVudEluZm8gKi8KKyAgICAgICAgcXRfd2tfZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSwKKyAgICAgICAgcXRfd2tfZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUsCisgICAgICAgIHF0X3drX2RpZEZhaWxQcm92aXNpb25hbExv
YWRXaXRoRXJyb3JGb3JGcmFtZSwKKyAgICAgICAgcXRfd2tfZGlkQ29tbWl0TG9hZEZvckZyYW1l
LAorICAgICAgICBxdF93a19kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSwKKyAgICAgICAg
cXRfd2tfZGlkRmluaXNoTG9hZEZvckZyYW1lLAorICAgICAgICBxdF93a19kaWRGYWlsTG9hZFdp
dGhFcnJvckZvckZyYW1lLAorICAgICAgICBxdF93a19kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9u
Rm9yRnJhbWUsCisgICAgICAgIHF0X3drX2RpZFJlY2VpdmVUaXRsZUZvckZyYW1lLAorICAgICAg
ICBxdF93a19kaWRGaXJzdExheW91dEZvckZyYW1lLAorICAgICAgICBxdF93a19kaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSwKKyAgICAgICAgcXRfd2tfZGlkUmVtb3ZlRnJh
bWVGcm9tSGllcmFyY2h5LAorICAgICAgICAwLCAvKiBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50
Rm9yRnJhbWUgKi8KKyAgICAgICAgMCwgLyogZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUg
Ki8KKyAgICAgICAgMCwgLyogY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUlu
RnJhbWUgKi8KKyAgICAgICAgMCwgLyogZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
SW5GcmFtZSAqLworICAgICAgICBxdF93a19kaWRTdGFydFByb2dyZXNzLAorICAgICAgICBxdF93
a19kaWRDaGFuZ2VQcm9ncmVzcywKKyAgICAgICAgcXRfd2tfZGlkRmluaXNoUHJvZ3Jlc3MsCisg
ICAgICAgIHF0X3drX2RpZEJlY29tZVVucmVzcG9uc2l2ZSwKKyAgICAgICAgcXRfd2tfZGlkQmVj
b21lUmVzcG9uc2l2ZSwKKyAgICAgICAgMCwgIC8qIHByb2Nlc3NEaWRDcmFzaCAqLworICAgICAg
ICAwLCAgLyogZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0ICovCisgICAgICAgIDAsICAvKiBzaG91
bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbSAqLworICAgICAgICAwICAgLyogZGlkRmFpbFRvSW5p
dGlhbGl6ZVBsdWdpbiAqLworICAgIH07CisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChw
YWdlUmVmKCksICZsb2FkQ2xpZW50KTsKKworICAgIFdLUGFnZVVJQ2xpZW50IHVpQ2xpZW50ID0g
eworICAgICAgICAwLCAgICAgIC8qIHZlcnNpb24gKi8KKyAgICAgICAgdGhpcywgICAvKiBjbGll
bnRJbmZvICovCisgICAgICAgIHF0X3drX2NyZWF0ZU5ld1BhZ2UsCisgICAgICAgIHF0X3drX3No
b3dQYWdlLAorICAgICAgICBxdF93a19jbG9zZSwKKyAgICAgICAgcXRfd2tfdGFrZUZvY3VzLAor
ICAgICAgICAwLCAgLyogZm9jdXMgKi8KKyAgICAgICAgMCwgIC8qIHVuZm9jdXMgKi8KKyAgICAg
ICAgcXRfd2tfcnVuSmF2YVNjcmlwdEFsZXJ0LAorICAgICAgICAwLCAgLyogcnVuSmF2YVNjcmlw
dENvbmZpcm0gKi8KKyAgICAgICAgMCwgIC8qIHJ1bkphdmFTY3JpcHRQcm9tcHQgKi8KKyAgICAg
ICAgcXRfd2tfc2V0U3RhdHVzVGV4dCwKKyAgICAgICAgMCwgIC8qIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50ICovCisgICAgICAgIDAsICAvKiBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZCAqLwor
ICAgICAgICAwLCAgLyogZGlkTm90SGFuZGxlS2V5RXZlbnQgKi8KKyAgICAgICAgMCwgIC8qIGRp
ZE5vdEhhbmRsZVdoZWVsRXZlbnQgKi8KKyAgICAgICAgMCwgIC8qIHRvb2xiYXJzQXJlVmlzaWJs
ZSAqLworICAgICAgICAwLCAgLyogc2V0VG9vbGJhcnNBcmVWaXNpYmxlICovCisgICAgICAgIDAs
ICAvKiBtZW51QmFySXNWaXNpYmxlICovCisgICAgICAgIDAsICAvKiBzZXRNZW51QmFySXNWaXNp
YmxlICovCisgICAgICAgIDAsICAvKiBzdGF0dXNCYXJJc1Zpc2libGUgKi8KKyAgICAgICAgMCwg
IC8qIHNldFN0YXR1c0JhcklzVmlzaWJsZSAqLworICAgICAgICAwLCAgLyogaXNSZXNpemFibGUg
Ki8KKyAgICAgICAgMCwgIC8qIHNldElzUmVzaXphYmxlICovCisgICAgICAgIDAsICAvKiBnZXRX
aW5kb3dGcmFtZSAqLworICAgICAgICAwLCAgLyogc2V0V2luZG93RnJhbWUgKi8KKyAgICAgICAg
MCwgIC8qIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCAqLworICAgICAgICAwLCAgLyogZGlk
RHJhdyAqLworICAgICAgICAwLCAgLyogcGFnZURpZFNjcm9sbCAqLworICAgICAgICAwLCAgLyog
ZXhjZWVkZWREYXRhYmFzZVF1b3RhICovCisgICAgICAgIDAsICAvKiBydW5PcGVuUGFuZWwgKi8K
KyAgICAgICAgMCwgIC8qIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QgKi8KKyAgICAgICAgMCwgIC8qIGhlYWRlckhlaWdodCAqLworICAgICAgICAwLCAgLyogZm9v
dGVySGVpZ2h0ICovCisgICAgICAgIDAsICAvKiBkcmF3SGVhZGVyICovCisgICAgICAgIDAsICAv
KiBkcmF3Rm9vdGVyICovCisgICAgICAgIDAsICAvKiBwcmludEZyYW1lICovCisgICAgICAgIDAs
ICAvKiBydW5Nb2RhbCAqLworICAgICAgICAwLCAgLyogZGlkQ29tcGxldGVSdWJiZXJCYW5kRm9y
TWFpbkZyYW1lICovCisgICAgICAgIDAsICAvKiBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9s
ZGVyICovCisgICAgICAgIDAsICAvKiBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0ICovCisgICAg
fTsKKyAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkp
LCAmdWlDbGllbnQpOworfQorCitRV2ViUGFnZVByb3h5Ojp+UVdlYlBhZ2VQcm94eSgpCit7Cisg
ICAgbV93ZWJQYWdlUHJveHktPmNsb3NlKCk7CisgICAgZGVsZXRlIG1faGlzdG9yeTsKK30KKwor
Ym9vbCBRV2ViUGFnZVByb3h5OjpoYW5kbGVFdmVudChRRXZlbnQqIGUpCit7CisgICAgc3dpdGNo
IChlLT50eXBlKCkpIHsKKyAgICBjYXNlIFFFdmVudDo6S2V5UHJlc3M6CisgICAgICAgIHJldHVy
biBoYW5kbGVLZXlQcmVzc0V2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8UUtleUV2ZW50Kj4oZSkpOwor
ICAgIGNhc2UgUUV2ZW50OjpLZXlSZWxlYXNlOgorICAgICAgICByZXR1cm4gaGFuZGxlS2V5UmVs
ZWFzZUV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8UUtleUV2ZW50Kj4oZSkpOworICAgIGNhc2UgUUV2
ZW50OjpGb2N1c0luOgorICAgICAgICByZXR1cm4gaGFuZGxlRm9jdXNJbkV2ZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8UUZvY3VzRXZlbnQqPihlKSk7CisgICAgY2FzZSBRRXZlbnQ6OkZvY3VzT3V0Ogor
ICAgICAgICByZXR1cm4gaGFuZGxlRm9jdXNPdXRFdmVudChyZWludGVycHJldF9jYXN0PFFGb2N1
c0V2ZW50Kj4oZSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBNb3ZlIGFsbCBjb21tb24gZXZl
bnQgaGFuZGxpbmcgaGVyZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUVdlYlBhZ2VQ
cm94eTo6aGFuZGxlS2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGUpCit7CisgICAgbV93ZWJQYWdl
UHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChlKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUVdlYlBhZ2VQcm94eTo6aGFuZGxlS2V5UmVsZWFz
ZUV2ZW50KFFLZXlFdmVudCogZSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9h
cmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBRV2ViUGFnZVByb3h5OjpoYW5kbGVGb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqIGUp
Cit7CisgICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6
OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUVdlYlBhZ2VQcm94eTo6aGFuZGxlRm9jdXNPdXRFdmVu
dChRRm9jdXNFdmVudCogZSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+dmlld1N0YXRlRGlkQ2hh
bmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRv
d0lzQWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBRV2ViUGFnZVByb3h5Ojpz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7CisjaWZuZGVmIFFUX05P
X0NVUlNPUgorICAgIG1fdmlld0ludGVyZmFjZS0+ZGlkQ2hhbmdlQ3Vyc29yKCpjdXJzb3IucGxh
dGZvcm1DdXJzb3IoKSk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZVByb3h5OjpzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV92aWV3
SW50ZXJmYWNlLT5zZXRWaWV3TmVlZHNEaXNwbGF5KFFSZWN0KHJlY3QpKTsKK30KKwordm9pZCBR
V2ViUGFnZVByb3h5OjpkaXNwbGF5VmlldygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
K30KKwordm9pZCBRV2ViUGFnZVByb3h5OjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitXZWJDb3JlOjpJbnRTaXplIFFXZWJQYWdl
UHJveHk6OnZpZXdTaXplKCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZShtX3ZpZXdJ
bnRlcmZhY2UtPmRyYXdpbmdBcmVhU2l6ZSgpKTsKK30KKworYm9vbCBRV2ViUGFnZVByb3h5Ojpp
c1ZpZXdXaW5kb3dBY3RpdmUoKQoreworICAgIHJldHVybiBtX3ZpZXdJbnRlcmZhY2UtPmlzQWN0
aXZlKCk7Cit9CisKK2Jvb2wgUVdlYlBhZ2VQcm94eTo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAg
cmV0dXJuIG1fdmlld0ludGVyZmFjZS0+aGFzRm9jdXMoKTsKK30KKworYm9vbCBRV2ViUGFnZVBy
b3h5Ojppc1ZpZXdWaXNpYmxlKCkKK3sKKyAgICByZXR1cm4gbV92aWV3SW50ZXJmYWNlLT5pc1Zp
c2libGUoKTsKK30KKworYm9vbCBRV2ViUGFnZVByb3h5Ojppc1ZpZXdJbldpbmRvdygpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBRV2Vi
UGFnZVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgUVdlYlBh
Z2VQcm94eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50LgorfQorCit2b2lkIFFXZWJQYWdlUHJveHk6OnBhZ2VEaWRSZXF1ZXN0U2Ny
b2xsKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBlbWl0IHNjcm9sbFJlcXVlc3RlZChw
b2ludC54KCksIHBvaW50LnkoKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdl
Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgbV92aWV3SW50ZXJm
YWNlLT5jb250ZW50U2l6ZUNoYW5nZWQoUVNpemUobmV3U2l6ZSkpOworfQorCit2b2lkIFFXZWJQ
YWdlUHJveHk6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3
VG9vbHRpcCkKK3sKKyAgICBtX3ZpZXdJbnRlcmZhY2UtPmRpZENoYW5nZVRvb2xUaXAoUVN0cmlu
ZyhuZXdUb29sdGlwKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0Q29t
bWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmQsIFdlYlBhZ2VQcm94
eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAg
ICBpZiAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pIHsKKyAgICAgICAgY29uc3Qg
V2ViVW5kb0NvbW1hbmRRdCogd2ViVW5kb0NvbW1hbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJV
bmRvQ29tbWFuZFF0Kj4obV91bmRvU3RhY2stPmNvbW1hbmQobV91bmRvU3RhY2stPmluZGV4KCkp
KTsKKyAgICAgICAgaWYgKHdlYlVuZG9Db21tYW5kICYmIHdlYlVuZG9Db21tYW5kLT5pblVuZG9S
ZWRvKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fdW5kb1N0YWNrLT5wdXNoKG5l
dyBXZWJVbmRvQ29tbWFuZFF0KGNvbW1hbmQpKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBR
V2ViUGFnZVByb3h5OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisjaWZuZGVmIFFUX05PX1VO
RE9TVEFDSworICAgIG1fdW5kb1N0YWNrLT5jbGVhcigpOworI2VuZGlmCit9CisKK2Jvb2wgUVdl
YlBhZ2VQcm94eTo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJl
ZG8pCit7CisjaWZkZWYgUVRfTk9fVU5ET1NUQUNLCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UK
KyAgICBpZiAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pCisgICAgICAgIHJldHVy
biBtX3VuZG9TdGFjay0+Y2FuVW5kbygpOworICAgIHJldHVybiBtX3VuZG9TdGFjay0+Y2FuUmVk
bygpOworI2VuZGlmCit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVVuZG9SZWRvKFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworI2lmbmRlZiBRVF9OT19VTkRP
U1RBQ0sKKyAgICBpZiAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pCisgICAgICAg
IG1fdW5kb1N0YWNrLT51bmRvKCk7CisgICAgZWxzZQorICAgICAgICBtX3VuZG9TdGFjay0+cmVk
bygpOworI2VuZGlmCit9CisKK0Zsb2F0UmVjdCBRV2ViUGFnZVByb3h5Ojpjb252ZXJ0VG9EZXZp
Y2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
K0ludFBvaW50IFFXZWJQYWdlUHJveHk6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBw
b2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFJlY3QgUVdlYlBhZ2VQcm94eTo6
d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcmVjdDsK
K30KKworRmxvYXRSZWN0IFFXZWJQYWdlUHJveHk6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQ
cm94eTo6c2VsZWN0aW9uQ2hhbmdlZChib29sLCBib29sLCBib29sLCBib29sKQoreworfQorCit2
b2lkIFFXZWJQYWdlUHJveHk6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIGJvb2wpCit7Cit9CisKK1Bhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFFX
ZWJQYWdlUHJveHk6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAg
cmV0dXJuIFdlYlBvcHVwTWVudVByb3h5UXQ6OmNyZWF0ZSgpOworfQorCitQYXNzUmVmUHRyPFdl
YkNvbnRleHRNZW51UHJveHk+IFFXZWJQYWdlUHJveHk6OmNyZWF0ZUNvbnRleHRNZW51UHJveHko
V2ViUGFnZVByb3h5KikKK3sKKyAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVh
dGUodGhpcyk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6c2V0RmluZEluZGljYXRvcihQYXNz
UmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpCit7Cit9CisKK3ZvaWQgUVdlYlBh
Z2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2Vu
dGF0aW9uKQoreworfQorCit2b2lkIFFXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExvYWRpbmdEYXRh
Rm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
Y29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpCit7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94
eTo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV0tQYWdlUmVmIFFXZWJQYWdlUHJveHk6OnBhZ2VS
ZWYoKSBjb25zdAoreworICAgIHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7Owor
fQorCit2b2lkIFFXZWJQYWdlUHJveHk6OmRpZENoYW5nZVVybChjb25zdCBRVXJsJiB1cmwpCit7
CisgICAgbV92aWV3SW50ZXJmYWNlLT5kaWRDaGFuZ2VVcmwodXJsKTsKK30KKwordm9pZCBRV2Vi
UGFnZVByb3h5OjpkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJiBuZXdUaXRsZSkKK3sKKyAg
ICBtX3ZpZXdJbnRlcmZhY2UtPmRpZENoYW5nZVRpdGxlKG5ld1RpdGxlKTsKK30KKwordm9pZCBR
V2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmIHRleHQpCit7
CisgICAgbV92aWV3SW50ZXJmYWNlLT5kaWRDaGFuZ2VTdGF0dXNUZXh0KHRleHQpOworfQorCit2
b2lkIFFXZWJQYWdlUHJveHk6OnNob3dDb250ZXh0TWVudShRU2hhcmVkUG9pbnRlcjxRTWVudT4g
bWVudSkKK3sKKyAgICBtX3ZpZXdJbnRlcmZhY2UtPnNob3dDb250ZXh0TWVudShtZW51KTsKK30K
Kwordm9pZCBRV2ViUGFnZVByb3h5OjpoaWRlQ29udGV4dE1lbnUoKQoreworICAgIG1fdmlld0lu
dGVyZmFjZS0+aGlkZUNvbnRleHRNZW51KCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6bG9h
ZERpZEJlZ2luKCkKK3sKKyAgICBtX3ZpZXdJbnRlcmZhY2UtPmxvYWREaWRCZWdpbigpOworfQor
Cit2b2lkIFFXZWJQYWdlUHJveHk6OmxvYWREaWRTdWNjZWVkKCkKK3sKKyAgICBtX3ZpZXdJbnRl
cmZhY2UtPmxvYWREaWRTdWNjZWVkKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6ZGlkQ2hh
bmdlTG9hZFByb2dyZXNzKGludCBuZXdMb2FkUHJvZ3Jlc3MpCit7CisgICAgbV92aWV3SW50ZXJm
YWNlLT5kaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MobmV3TG9hZFByb2dyZXNzKTsKK30KKwordm9pZCBR
V2ViUGFnZVByb3h5OjpwYWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QgYXJlYSkKK3sKKyAg
ICBBU1NFUlQobV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpOworICAgIGlmIChtX3dlYlBh
Z2VQcm94eS0+aXNWYWxpZCgpKQorICAgICAgICBwYWludENvbnRlbnQocGFpbnRlciwgYXJlYSk7
CisgICAgZWxzZQorICAgICAgICBwYWludGVyLT5maWxsUmVjdChhcmVhLCBRdDo6d2hpdGUpOwor
fQorCit2b2lkIFFXZWJQYWdlUHJveHk6OnVwZGF0ZUFjdGlvbihRV2ViUGFnZVByb3h5OjpXZWJB
Y3Rpb24gYWN0aW9uKQoreworI2lmZGVmIFFUX05PX0FDVElPTgorICAgIFFfVU5VU0VEKGFjdGlv
bikKKyNlbHNlCisgICAgUUFjdGlvbiogYSA9IG1fYWN0aW9uc1thY3Rpb25dOworICAgIGlmICgh
YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWVQcm94eT4g
bWFpbkZyYW1lID0gbV93ZWJQYWdlUHJveHktPm1haW5GcmFtZSgpOworICAgIGlmICghbWFpbkZy
YW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGVuYWJsZWQgPSBhLT5pc0VuYWJsZWQo
KTsKKyAgICBib29sIGNoZWNrZWQgPSBhLT5pc0NoZWNrZWQoKTsKKworICAgIHN3aXRjaCAoYWN0
aW9uKSB7CisgICAgY2FzZSBRV2ViUGFnZVByb3h5OjpCYWNrOgorICAgICAgICBlbmFibGVkID0g
bV93ZWJQYWdlUHJveHktPmNhbkdvQmFjaygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFX
ZWJQYWdlUHJveHk6OkZvcndhcmQ6CisgICAgICAgIGVuYWJsZWQgPSBtX3dlYlBhZ2VQcm94eS0+
Y2FuR29Gb3J3YXJkKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUVdlYlBhZ2VQcm94eTo6
U3RvcDoKKyAgICAgICAgZW5hYmxlZCA9ICEoV2ViRnJhbWVQcm94eTo6TG9hZFN0YXRlRmluaXNo
ZWQgPT0gbWFpbkZyYW1lLT5sb2FkU3RhdGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UVdlYlBhZ2VQcm94eTo6UmVsb2FkOgorICAgICAgICBlbmFibGVkID0gKFdlYkZyYW1lUHJveHk6
OkxvYWRTdGF0ZUZpbmlzaGVkID09IG1haW5GcmFtZS0+bG9hZFN0YXRlKCkpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhLT5zZXRF
bmFibGVkKGVuYWJsZWQpOworCisgICAgaWYgKGEtPmlzQ2hlY2thYmxlKCkpCisgICAgICAgIGEt
PnNldENoZWNrZWQoY2hlY2tlZCk7CisjZW5kaWYgLy8gUVRfTk9fQUNUSU9OCit9CisKK3ZvaWQg
UVdlYlBhZ2VQcm94eTo6dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKQoreworICAgIHVwZGF0ZUFj
dGlvbihRV2ViUGFnZVByb3h5OjpCYWNrKTsKKyAgICB1cGRhdGVBY3Rpb24oUVdlYlBhZ2VQcm94
eTo6Rm9yd2FyZCk7CisgICAgdXBkYXRlQWN0aW9uKFFXZWJQYWdlUHJveHk6OlN0b3ApOworICAg
IHVwZGF0ZUFjdGlvbihRV2ViUGFnZVByb3h5OjpSZWxvYWQpOworfQorCisjaWZuZGVmIFFUX05P
X0FDVElPTgordm9pZCBRV2ViUGFnZVByb3h5Ojp3ZWJBY3Rpb25UcmlnZ2VyZWQoYm9vbCBjaGVj
a2VkKQoreworICAgIFFBY3Rpb24qIGEgPSBxb2JqZWN0X2Nhc3Q8UUFjdGlvbio+KHNlbmRlcigp
KTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybjsKKyAgICBRV2ViUGFnZVByb3h5OjpXZWJB
Y3Rpb24gYWN0aW9uID0gc3RhdGljX2Nhc3Q8UVdlYlBhZ2VQcm94eTo6V2ViQWN0aW9uPihhLT5k
YXRhKCkudG9JbnQoKSk7CisgICAgdHJpZ2dlckFjdGlvbihhY3Rpb24sIGNoZWNrZWQpOworfQor
I2VuZGlmIC8vIFFUX05PX0FDVElPTgorCit2b2lkIFFXZWJQYWdlUHJveHk6OmRpZFJlbGF1bmNo
UHJvY2VzcygpCit7CisgICAgc2V0RHJhd2luZ0FyZWFTaXplKG1fdmlld0ludGVyZmFjZS0+ZHJh
d2luZ0FyZWFTaXplKCkpOworCisgICAgbV9pc0Nvbm5lY3RlZFRvRW5naW5lID0gdHJ1ZTsKK30K
Kwordm9pZCBRV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkQ3Jhc2goKQoreworICAgIG1faXNDb25u
ZWN0ZWRUb0VuZ2luZSA9IGZhbHNlOworfQorCit2b2lkIFFXZWJQYWdlUHJveHk6OnNldEFjdHVh
bFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgUVJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgbV93
ZWJQYWdlUHJveHktPnNldEFjdHVhbFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKworUVdL
UHJlZmVyZW5jZXMqIFFXZWJQYWdlUHJveHk6OnByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcHJlZmVyZW5jZXMpIHsKKyAgICAgICAgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
ID0gV0tQYWdlR2V0UGFnZUdyb3VwKHBhZ2VSZWYoKSk7CisgICAgICAgIG1fcHJlZmVyZW5jZXMg
PSBRV0tQcmVmZXJlbmNlc1ByaXZhdGU6OmNyZWF0ZVByZWZlcmVuY2VzKHBhZ2VHcm91cFJlZik7
CisgICAgfQorCisgICAgcmV0dXJuIG1fcHJlZmVyZW5jZXM7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQ
cm94eTo6c2V0Q3JlYXRlTmV3UGFnZUZ1bmN0aW9uKENyZWF0ZU5ld1BhZ2VGbiBmdW5jdGlvbikK
K3sKKyAgICBtX2NyZWF0ZU5ld1BhZ2VGbiA9IGZ1bmN0aW9uOworfQorCit2b2lkIFFXZWJQYWdl
UHJveHk6OnNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1c2VyQWdlbnQpCit7Cisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVXNlckFnZW50KFdLU3RyaW5nQ3JlYXRlV2l0
aFFTdHJpbmcodXNlckFnZW50KSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KHBhZ2VS
ZWYoKSwgd2tVc2VyQWdlbnQuZ2V0KCkpOworfQorCitRU3RyaW5nIFFXZWJQYWdlUHJveHk6OmN1
c3RvbVVzZXJBZ2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmco
V0tQYWdlQ29weUN1c3RvbVVzZXJBZ2VudChwYWdlUmVmKCkpKTsKK30KKwordm9pZCBRV2ViUGFn
ZVByb3h5Ojpsb2FkKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gd2t1cmwoV0tVUkxDcmVhdGVXaXRoUVVybCh1cmwpKTsKKyAgICBXS1BhZ2VMb2FkVVJMKHBh
Z2VSZWYoKSwgd2t1cmwuZ2V0KCkpOworfQorCitRVXJsIFFXZWJQYWdlUHJveHk6OnVybCgpIGNv
bnN0Cit7CisgICAgV0tSZXRhaW5QdHI8V0tGcmFtZVJlZj4gZnJhbWUgPSBXS1BhZ2VHZXRNYWlu
RnJhbWUocGFnZVJlZigpKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gUVVybCgp
OworICAgIHJldHVybiBXS1VSTENvcHlRVXJsKFdLRnJhbWVDb3B5VVJMKGZyYW1lLmdldCgpKSk7
Cit9CisKK1FTdHJpbmcgUVdlYlBhZ2VQcm94eTo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVy
biBXS1N0cmluZ0NvcHlRU3RyaW5nKFdLUGFnZUNvcHlUaXRsZSh0b0FQSShtX3dlYlBhZ2VQcm94
eS5nZXQoKSkpKTsKK30KKwordm9pZCBRV2ViUGFnZVByb3h5OjpzZXREcmF3aW5nQXJlYVNpemUo
Y29uc3QgUVNpemUmIHNpemUpCit7CisgICAgQVNTRVJUKG1fd2ViUGFnZVByb3h5LT5kcmF3aW5n
QXJlYSgpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJbnRT
aXplKHNpemUpLCBJbnRTaXplKCkpOworfQorCitxcmVhbCBRV2ViUGFnZVByb3h5Ojp0ZXh0Wm9v
bUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdLUGFnZUdldFRleHRab29tRmFjdG9yKHBh
Z2VSZWYoKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6c2V0VGV4dFpvb21GYWN0b3IocXJl
YWwgem9vbUZhY3RvcikKK3sKKyAgICBXS1BhZ2VTZXRUZXh0Wm9vbUZhY3RvcihwYWdlUmVmKCks
IHpvb21GYWN0b3IpOworfQorCitxcmVhbCBRV2ViUGFnZVByb3h5OjpwYWdlWm9vbUZhY3Rvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKHBhZ2VSZWYoKSk7
Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3IocXJlYWwgem9vbUZh
Y3RvcikKK3sKKyAgICBXS1BhZ2VTZXRQYWdlWm9vbUZhY3RvcihwYWdlUmVmKCksIHpvb21GYWN0
b3IpOworfQorCit2b2lkIFFXZWJQYWdlUHJveHk6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMo
cXJlYWwgcGFnZVpvb21GYWN0b3IsIHFyZWFsIHRleHRab29tRmFjdG9yKQoreworICAgIFdLUGFn
ZVNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMocGFnZVJlZigpLCBwYWdlWm9vbUZhY3RvciwgdGV4
dFpvb21GYWN0b3IpOworfQorCitRV0tIaXN0b3J5KiBRV2ViUGFnZVByb3h5OjpoaXN0b3J5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9oaXN0b3J5OworfQorCit2b2lkIFFXZWJQYWdlUHJveHk6
OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRTaXplKGNvbnN0IFFTaXplJiB0YXJnZXRM
YXlvdXRTaXplKQoreworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIG1fd2Vi
UGFnZVByb3h5LT5zZXRSZXNpemVzVG9Db250ZW50c1VzaW5nTGF5b3V0U2l6ZSh0YXJnZXRMYXlv
dXRTaXplKTsKKyNlbmRpZgorfQorCisjaWZuZGVmIFFUX05PX0FDVElPTgordm9pZCBRV2ViUGFn
ZVByb3h5Ojp0cmlnZ2VyQWN0aW9uKFdlYkFjdGlvbiB3ZWJBY3Rpb24sIGJvb2wpCit7CisgICAg
c3dpdGNoICh3ZWJBY3Rpb24pIHsKKyAgICBjYXNlIEJhY2s6CisgICAgICAgIG1fd2ViUGFnZVBy
b3h5LT5nb0JhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRm9yd2FyZDoKKyAgICAg
ICAgbV93ZWJQYWdlUHJveHktPmdvRm9yd2FyZCgpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTdG9wOgorICAgICAgICBtX3dlYlBhZ2VQcm94eS0+c3RvcExvYWRpbmcoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUmVsb2FkOgorICAgICAgICBtX3dlYlBhZ2VQcm94eS0+cmVsb2Fk
KC8qIHJlbG9hZEZyb21PcmlnaW4gKi8gdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBRQWN0aW9uKiBxdEFjdGlvbiA9IGFj
dGlvbih3ZWJBY3Rpb24pOworICAgIFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSBtZW51
SXRlbURhdGEoQWN0aW9uVHlwZSwgY29udGV4dE1lbnVBY3Rpb25Gb3JXZWJBY3Rpb24od2ViQWN0
aW9uKSwgcXRBY3Rpb24tPnRleHQoKSwgcXRBY3Rpb24tPmlzRW5hYmxlZCgpLCBxdEFjdGlvbi0+
aXNDaGVja2VkKCkpOworICAgIG1fd2ViUGFnZVByb3h5LT5jb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZChtZW51SXRlbURhdGEpOworfQorI2VuZGlmIC8vIFFUX05PX0FDVElPTgorCisjaWZuZGVmIFFU
X05PX0FDVElPTgorUUFjdGlvbiogUVdlYlBhZ2VQcm94eTo6YWN0aW9uKFdlYkFjdGlvbiBhY3Rp
b24pIGNvbnN0Cit7CisgICAgaWYgKGFjdGlvbiA9PSBRV2ViUGFnZVByb3h5OjpOb1dlYkFjdGlv
biB8fCBhY3Rpb24gPj0gV2ViQWN0aW9uQ291bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKG1fYWN0aW9uc1thY3Rpb25dKQorICAgICAgICByZXR1cm4gbV9hY3Rpb25zW2FjdGlvbl07
CisKKyAgICBRU3RyaW5nIHRleHQ7CisgICAgUUljb24gaWNvbjsKKyAgICBRU3R5bGUqIHN0eWxl
ID0gcW9iamVjdF9jYXN0PFFBcHBsaWNhdGlvbio+KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNl
KCkpLT5zdHlsZSgpOworICAgIGJvb2wgY2hlY2thYmxlID0gZmFsc2U7CisgICAgUVdlYlBhZ2VQ
cm94eSogbXV0YWJsZVNlbGYgPSBjb25zdF9jYXN0PFFXZWJQYWdlUHJveHkqPih0aGlzKTsKKwor
ICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBPcGVuTGluazoKKyAgICAgICAgdGV4dCA9
IGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
T3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAgdGV4dCA9IGNvbnRleHRNZW51SXRlbVRhZ09w
ZW5MaW5rSW5OZXdXaW5kb3coKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3B5TGlua1Rv
Q2xpcGJvYXJkOgorICAgICAgICB0ZXh0ID0gY29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0Ns
aXBib2FyZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9wZW5JbWFnZUluTmV3V2luZG93
OgorICAgICAgICB0ZXh0ID0gY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3co
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCYWNrOgorICAgICAgICB0ZXh0ID0gY29udGV4
dE1lbnVJdGVtVGFnR29CYWNrKCk7CisgICAgICAgIGljb24gPSBzdHlsZS0+c3RhbmRhcmRJY29u
KFFTdHlsZTo6U1BfQXJyb3dCYWNrKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb3J3YXJk
OgorICAgICAgICB0ZXh0ID0gY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCk7CisgICAgICAg
IGljb24gPSBzdHlsZS0+c3RhbmRhcmRJY29uKFFTdHlsZTo6U1BfQXJyb3dGb3J3YXJkKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTdG9wOgorICAgICAgICB0ZXh0ID0gY29udGV4dE1lbnVJ
dGVtVGFnU3RvcCgpOworICAgICAgICBpY29uID0gc3R5bGUtPnN0YW5kYXJkSWNvbihRU3R5bGU6
OlNQX0Jyb3dzZXJTdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWxvYWQ6CisgICAg
ICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKTsKKyAgICAgICAgaWNvbiA9IHN0
eWxlLT5zdGFuZGFyZEljb24oUVN0eWxlOjpTUF9Ccm93c2VyUmVsb2FkKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDdXQ6CisgICAgICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdDdXQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3B5OgorICAgICAgICB0ZXh0ID0gY29udGV4
dE1lbnVJdGVtVGFnQ29weSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhc3RlOgorICAg
ICAgICB0ZXh0ID0gY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTZWxlY3RBbGw6CisgICAgICAgIHRleHQgPSBjb250ZXh0TWVudUl0ZW1UYWdTZWxl
Y3RBbGwoKTsKKyAgICAgICAgYnJlYWs7CisjaWZuZGVmIFFUX05PX1VORE9TVEFDSworICAgIGNh
c2UgVW5kbzogeworICAgICAgICBRQWN0aW9uKiB1bmRvQWN0aW9uID0gbV91bmRvU3RhY2stPmNy
ZWF0ZVVuZG9BY3Rpb24obXV0YWJsZVNlbGYpOworICAgICAgICBtX2FjdGlvbnNbYWN0aW9uXSA9
IHVuZG9BY3Rpb247CisgICAgICAgIHJldHVybiB1bmRvQWN0aW9uOworICAgIH0KKyAgICBjYXNl
IFJlZG86IHsKKyAgICAgICAgUUFjdGlvbiogcmVkb0FjdGlvbiA9IG1fdW5kb1N0YWNrLT5jcmVh
dGVSZWRvQWN0aW9uKG11dGFibGVTZWxmKTsKKyAgICAgICAgbV9hY3Rpb25zW2FjdGlvbl0gPSBy
ZWRvQWN0aW9uOworICAgICAgICByZXR1cm4gcmVkb0FjdGlvbjsKKyAgICB9CisjZW5kaWYKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKHRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFBY3Rpb24q
IGEgPSBuZXcgUUFjdGlvbihtdXRhYmxlU2VsZik7CisgICAgYS0+c2V0VGV4dCh0ZXh0KTsKKyAg
ICBhLT5zZXREYXRhKGFjdGlvbik7CisgICAgYS0+c2V0Q2hlY2thYmxlKGNoZWNrYWJsZSk7Cisg
ICAgYS0+c2V0SWNvbihpY29uKTsKKworICAgIGNvbm5lY3QoYSwgU0lHTkFMKHRyaWdnZXJlZChi
b29sKSksIHRoaXMsIFNMT1Qod2ViQWN0aW9uVHJpZ2dlcmVkKGJvb2wpKSk7CisKKyAgICBtX2Fj
dGlvbnNbYWN0aW9uXSA9IGE7CisgICAgbXV0YWJsZVNlbGYtPnVwZGF0ZUFjdGlvbihhY3Rpb24p
OworICAgIHJldHVybiBhOworfQorI2VuZGlmIC8vIFFUX05PX0FDVElPTgorCit2b2lkIFFXZWJQ
YWdlUHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQor
eworICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9pbnQpOwor
fQorCit2b2lkIFFXZWJQYWdlUHJveHk6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgSW50UmVj
dCYgYXJlYSkKK3sKKyAgICBlbWl0IHpvb21hYmxlQXJlYUZvdW5kKFFSZWN0KGFyZWEpKTsKK30K
Kwordm9pZCBRV2ViUGFnZVByb3h5OjpzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
IGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKQoreworICAg
IFFJbWFnZSBkcmFnUUltYWdlOworICAgIGlmIChkcmFnSW1hZ2UpCisgICAgICAgIGRyYWdRSW1h
Z2UgPSBkcmFnSW1hZ2UtPmNyZWF0ZVFJbWFnZSgpOworICAgIGVsc2UgaWYgKGRyYWdEYXRhLnBs
YXRmb3JtRGF0YSgpICYmIGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpLT5oYXNJbWFnZSgpKQorICAg
ICAgICBkcmFnUUltYWdlID0gcXZhcmlhbnRfY2FzdDxRSW1hZ2U+KGRyYWdEYXRhLnBsYXRmb3Jt
RGF0YSgpLT5pbWFnZURhdGEoKSk7CisKKworICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlv
bk1hc2sgPSBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKTsKKyAgICBRTWlt
ZURhdGEqIG1pbWVEYXRhID0gY29uc3RfY2FzdDxRTWltZURhdGEqPihkcmFnRGF0YS5wbGF0Zm9y
bURhdGEoKSk7CisgICAgUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rpb25zID0gZHJh
Z09wZXJhdGlvblRvRHJvcEFjdGlvbnMoZHJhZ09wZXJhdGlvbk1hc2spOworCisgICAgUVBvaW50
IGNsaWVudFBvc2l0aW9uOworICAgIFFQb2ludCBnbG9iYWxQb3NpdGlvbjsKKyAgICBRdDo6RHJv
cEFjdGlvbiBhY3R1YWxEcm9wQWN0aW9uOworCisgICAgbV92aWV3SW50ZXJmYWNlLT5zdGFydERy
YWcoc3VwcG9ydGVkRHJvcEFjdGlvbnMsIGRyYWdRSW1hZ2UsIG1pbWVEYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZjbGllbnRQb3NpdGlvbiwgJmdsb2JhbFBvc2l0aW9uLCAm
YWN0dWFsRHJvcEFjdGlvbik7CisKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ0VuZGVkKGNsaWVu
dFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihhY3R1
YWxEcm9wQWN0aW9uKSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgUVdlYlBhZ2VQcm94eTo6dmll
d3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRPRE8KKyAgICByZXR1
cm4gSW50UmVjdCgpOworfQorCitib29sIFFXZWJQYWdlUHJveHk6OmlzQ29ubmVjdGVkVG9Fbmdp
bmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzQ29ubmVjdGVkVG9FbmdpbmU7Cit9CisKK3Zv
aWQgUVdlYlBhZ2VQcm94eTo6c2V0UGFnZUlzVmlzaWJsZShib29sIGlzVmlzaWJsZSkKK3sKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+c2V0UGFnZUlzVmlzaWJsZShpc1Zpc2li
bGUpOworfQorCisjaW5jbHVkZSAibW9jX3F3ZWJwYWdlcHJveHkuY3BwIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F3ZWJwYWdlcHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9xd2VicGFnZXByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTg3OTFmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9xd2VicGFnZXByb3h5LmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIHF3ZWJwYWdlcHJveHlfaAorI2RlZmluZSBxd2VicGFnZXBy
b3h5X2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4
dC5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKKyNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDxRQmFzaWNUaW1lcj4KKyNp
bmNsdWRlIDxRR3JhcGhpY3NWaWV3PgorI2luY2x1ZGUgPFFLZXlFdmVudD4KKyNpbmNsdWRlIDxR
TWVudT4KKyNpbmNsdWRlIDxRU2hhcmVkUG9pbnRlcj4KKworY2xhc3MgUVVuZG9TdGFjazsKK2Ns
YXNzIFFXS0NvbnRleHQ7CitjbGFzcyBRV0tIaXN0b3J5OworY2xhc3MgUVdLUHJlZmVyZW5jZXM7
CitjbGFzcyBWaWV3SW50ZXJmYWNlOworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitRV0tD
b250ZXh0ICpkZWZhdWx0V0tDb250ZXh0KCk7CisKK1dlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJv
cEFjdGlvblRvRHJhZ09wZXJhdGlvbihRdDo6RHJvcEFjdGlvbnMgYWN0aW9ucyk7CisKKy8vIEZJ
WE1FOiBuZWVkcyBmb2N1cyBpbi9vdXQsIHdpbmRvdyBhY3RpdmF0aW9uLCBzdXBwb3J0IHRocm91
Z2ggdmlld1N0YXRlRGlkQ2hhbmdlKCkuCitjbGFzcyBRV2ViUGFnZVByb3h5IDogcHVibGljIFFP
YmplY3QsIFdlYktpdDo6UGFnZUNsaWVudCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAg
IC8vIEZJWE1FOiBBZGQgYSBuaWNlIEFQSSBmb3IgdmlldyBjcmVhdGlvbi4KKyAgICB0eXBlZGVm
IFFXZWJQYWdlUHJveHkqICgqQ3JlYXRlTmV3UGFnZUZuKShRV2ViUGFnZVByb3h5Kik7CisKKyAg
ICBlbnVtIFdlYkFjdGlvbiB7CisgICAgICAgIE5vV2ViQWN0aW9uID0gLSAxLAorCisgICAgICAg
IE9wZW5MaW5rLAorICAgICAgICBPcGVuTGlua0luTmV3V2luZG93LAorICAgICAgICBDb3B5TGlu
a1RvQ2xpcGJvYXJkLAorICAgICAgICBPcGVuSW1hZ2VJbk5ld1dpbmRvdywKKworICAgICAgICBC
YWNrLAorICAgICAgICBGb3J3YXJkLAorICAgICAgICBTdG9wLAorICAgICAgICBSZWxvYWQsCisK
KyAgICAgICAgQ3V0LAorICAgICAgICBDb3B5LAorICAgICAgICBQYXN0ZSwKKyAgICAgICAgU2Vs
ZWN0QWxsLAorCisgICAgICAgIFVuZG8sCisgICAgICAgIFJlZG8sCisKKyAgICAgICAgV2ViQWN0
aW9uQ291bnQKKyAgICB9OworCisgICAgUVdlYlBhZ2VQcm94eShWaWV3SW50ZXJmYWNlKiB2aWV3
SW50ZXJmYWNlLCBRV0tDb250ZXh0KiwgV0tQYWdlR3JvdXBSZWYgPSAwKTsKKyAgICB+UVdlYlBh
Z2VQcm94eSgpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFFFdmVudCopOworCisg
ICAgLy8gUGFnZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworCisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCk7CisgICAgdmlydHVhbCBib29sIGlzVmll
d1dpbmRvd0FjdGl2ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7CisgICAg
dmlydHVhbCBib29sIGlzVmlld1Zpc2libGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5X
aW5kb3coKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFs
IHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250
ZXh0Jik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
OworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZv
aWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9z
ZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0Rh
dGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisgICAgdmlydHVhbCB2
b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYktp
dDo6V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYktpdDo6V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRv
VXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgV2Vi
S2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOworICAg
IHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQ
b3B1cE1lbnVQcm94eShXZWJLaXQ6OldlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHko
V2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNh
dG9yKFBhc3NSZWZQdHI8V2ViS2l0OjpGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9t
UmVwcmVzZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZv
ckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNv
bnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21S
ZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKSB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKCkgY29uc3QgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOworICAgIHZpcnR1YWwgdm9pZCBmaW5kU3RyaW5n
SW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWdu
ZWQgbWF4TWF0Y2hDb3VudCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hl
c0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2ln
bmVkIG1heE1hdGNoQ291bnQpIHsgfQorICAgIHZpcnR1YWwgZmxvYXQgdXNlclNwYWNlU2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CisKKyAgICB2b2lkIGRpZENoYW5nZVVybChjb25z
dCBRVXJsJik7CisgICAgdm9pZCBkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJik7CisgICAg
dm9pZCBkaWRDaGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2b2lkIHNob3dD
b250ZXh0TWVudShRU2hhcmVkUG9pbnRlcjxRTWVudT4pOworICAgIHZvaWQgaGlkZUNvbnRleHRN
ZW51KCk7CisKKyAgICB2b2lkIGxvYWREaWRCZWdpbigpOworICAgIHZvaWQgbG9hZERpZFN1Y2Nl
ZWQoKTsKKyAgICB2b2lkIGRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQpOworCisgICAgdm9pZCBw
YWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QpOworCisgICAgdm9pZCB1cGRhdGVBY3Rpb24o
UVdlYlBhZ2VQcm94eTo6V2ViQWN0aW9uIGFjdGlvbik7CisgICAgdm9pZCB1cGRhdGVOYXZpZ2F0
aW9uQWN0aW9ucygpOworICAgIHZvaWQgdXBkYXRlRWRpdG9yQWN0aW9ucygpOworCisgICAgV0tQ
YWdlUmVmIHBhZ2VSZWYoKSBjb25zdDsKKworICAgIHZvaWQgbG9hZChjb25zdCBRVXJsJiB1cmwp
OworICAgIFFVcmwgdXJsKCkgY29uc3Q7CisKKyAgICBDcmVhdGVOZXdQYWdlRm4gY3JlYXRlTmV3
UGFnZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jcmVhdGVOZXdQYWdlRm47IH0KKworICAg
IHZvaWQgc2V0RHJhd2luZ0FyZWFTaXplKGNvbnN0IFFTaXplJik7CisKKyAgICBRV0tQcmVmZXJl
bmNlcyogcHJlZmVyZW5jZXMoKSBjb25zdDsKKworICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsK
KworICAgIHZvaWQgc2V0QWN0dWFsVmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBRUmVjdCYgcmVj
dCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRTaXpl
KGNvbnN0IFFTaXplJiB0YXJnZXRMYXlvdXRTaXplKTsKKworICAgIFFBY3Rpb24qIGFjdGlvbihX
ZWJBY3Rpb24gYWN0aW9uKSBjb25zdDsKKyAgICB2b2lkIHRyaWdnZXJBY3Rpb24oV2ViQWN0aW9u
IGFjdGlvbiwgYm9vbCBjaGVja2VkID0gZmFsc2UpOworICAgIHZvaWQgc2V0Q3JlYXRlTmV3UGFn
ZUZ1bmN0aW9uKENyZWF0ZU5ld1BhZ2VGbiBmdW5jdGlvbik7CisKKyAgICB2b2lkIHNldEN1c3Rv
bVVzZXJBZ2VudChjb25zdCBRU3RyaW5nJik7CisgICAgUVN0cmluZyBjdXN0b21Vc2VyQWdlbnQo
KSBjb25zdDsKKworICAgIHFyZWFsIHRleHRab29tRmFjdG9yKCkgY29uc3Q7CisgICAgcXJlYWwg
cGFnZVpvb21GYWN0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNldFRleHRab29tRmFjdG9yKHFyZWFs
IHpvb21GYWN0b3IpOworICAgIHZvaWQgc2V0UGFnZVpvb21GYWN0b3IocXJlYWwgem9vbUZhY3Rv
cik7CisgICAgdm9pZCBzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHFyZWFsIHBhZ2Vab29tRmFj
dG9yLCBxcmVhbCB0ZXh0Wm9vbUZhY3Rvcik7CisKKyAgICBRV0tIaXN0b3J5KiBoaXN0b3J5KCkg
Y29uc3Q7CisKKyAgICB2b2lkIGZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQm
KTsKKworICAgIGJvb2wgaXNDb25uZWN0ZWRUb0VuZ2luZSgpIGNvbnN0OworCisgICAgdm9pZCBz
ZXRQYWdlSXNWaXNpYmxlKGJvb2wpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHdlYkFj
dGlvblRyaWdnZXJlZChib29sIGNoZWNrZWQpOworCitwdWJsaWM6CisgICAgUV9TSUdOQUwgdm9p
ZCBzY3JvbGxSZXF1ZXN0ZWQoaW50IGR4LCBpbnQgZHkpOworICAgIFFfU0lHTkFMIHZvaWQgd2lu
ZG93Q2xvc2VSZXF1ZXN0ZWQoKTsKKyAgICBRX1NJR05BTCB2b2lkIHpvb21hYmxlQXJlYUZvdW5k
KGNvbnN0IFFSZWN0Jik7CisgICAgUV9TSUdOQUwgdm9pZCBmb2N1c05leHRQcmV2Q2hpbGQoYm9v
bCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGluaXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiBhcmVhKSA9IDA7Cisg
ICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKKyAgICBWaWV3
SW50ZXJmYWNlKiBjb25zdCBtX3ZpZXdJbnRlcmZhY2U7CisKK3ByaXZhdGU6CisgICAgYm9vbCBo
YW5kbGVLZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOworICAgIGJvb2wgaGFuZGxlS2V5UmVsZWFz
ZUV2ZW50KFFLZXlFdmVudCopOworICAgIGJvb2wgaGFuZGxlRm9jdXNJbkV2ZW50KFFGb2N1c0V2
ZW50Kik7CisgICAgYm9vbCBoYW5kbGVGb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7CisKKyAg
ICBRV0tDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgUVdLSGlzdG9yeSogbV9oaXN0b3J5OworCisg
ICAgbXV0YWJsZSBRQWN0aW9uKiBtX2FjdGlvbnNbUVdlYlBhZ2VQcm94eTo6V2ViQWN0aW9uQ291
bnRdOworICAgIG11dGFibGUgUVdLUHJlZmVyZW5jZXMqIG1fcHJlZmVyZW5jZXM7CisKKyAgICBD
cmVhdGVOZXdQYWdlRm4gbV9jcmVhdGVOZXdQYWdlRm47CisKKyAgICBib29sIG1faXNDb25uZWN0
ZWRUb0VuZ2luZTsKKworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBPd25QdHI8UVVuZG9T
dGFjaz4gbV91bmRvU3RhY2s7CisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBxd2VicGFnZXByb3h5
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2tjb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2tjb250ZXh0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZiNmM4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F3a2NvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTA4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF3
a2NvbnRleHQuaCIKKyNpbmNsdWRlICJxd2tjb250ZXh0X3AuaCIKKworI2luY2x1ZGUgIkNsaWVu
dEltcGwuaCIKKyNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgor
I2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRVXJsPgorI2lu
Y2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oIgorI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXplUGxhdGZvcm1TdHJhdGVnaWVzSWZO
ZWVkZWQoKQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYg
KGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmluaXRpYWxpemUoKTsKKyAgICBpbml0aWFsaXplZCA9IHRydWU7Cit9CisKK1FXS0NvbnRl
eHRQcml2YXRlOjpRV0tDb250ZXh0UHJpdmF0ZShRV0tDb250ZXh0KiBxcSwgV2ViQ29udGV4dCog
d2ViQ29udGV4dCkKKyAgICA6IHEocXEpCit7CisgICAgaWYgKCF3ZWJDb250ZXh0KQorICAgICAg
ICBjb250ZXh0ID0gV2ViQ29udGV4dDo6Y3JlYXRlKFN0cmluZygpKTsKKyAgICBlbHNlCisgICAg
ICAgIGNvbnRleHQgPSB3ZWJDb250ZXh0OworCisgICAgaW5pdGlhbGl6ZVBsYXRmb3JtU3RyYXRl
Z2llc0lmTmVlZGVkKCk7CisKKyAgICBXS0ljb25EYXRhYmFzZUNsaWVudCBpY29uRGF0YWJhc2VD
bGllbnQgPSB7CisgICAgICAgIDAsICAgICAgLy8gdmVyc2lvbgorICAgICAgICBxcSwgICAgIC8v
IGNsaWVudEluZm8KKyAgICAgICAgcXRfd2tfZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwsCisgICAg
ICAgIHF0X3drX2RpZFJlbW92ZUFsbEljb25zCisgICAgfTsKKworICAgIFdLSWNvbkRhdGFiYXNl
U2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKGNvbnRleHQtPmljb25EYXRhYmFzZSgpKSwgJmlj
b25EYXRhYmFzZUNsaWVudCk7Cit9CisKK1FXS0NvbnRleHRQcml2YXRlOjp+UVdLQ29udGV4dFBy
aXZhdGUoKQoreyB9CisKK1FXS0NvbnRleHQ6OlFXS0NvbnRleHQoUU9iamVjdCogcGFyZW50KQor
ICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBkKG5ldyBRV0tDb250ZXh0UHJpdmF0ZSh0aGlz
KSkKK3sgfQorCitRV0tDb250ZXh0OjpRV0tDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
LCBRT2JqZWN0KiBwYXJlbnQpCisgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAgICAsIGQobmV3IFFX
S0NvbnRleHRQcml2YXRlKHRoaXMsIHRvSW1wbChjb250ZXh0UmVmKSkpCit7IH0KKworUVdLQ29u
dGV4dDo6flFXS0NvbnRleHQoKQoreworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFXS0NvbnRl
eHQ6OnNldEljb25EYXRhYmFzZVBhdGgoY29uc3QgUVN0cmluZyYgcGF0aCkKK3sKKyAgICAvLyBG
SVhNRTogVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBkaXNhYmxlIHRoZSBpY29uIGRhdGFi
YXNlIG9uY2UgaXQncyBlbmFibGVkLgorICAgIFFGaWxlSW5mbyBpbmZvKHBhdGgpOworICAgIGlm
IChpbmZvLmlzRGlyKCkgJiYgaW5mby5pc1dyaXRhYmxlKCkpIHsKKyAgICAgICAgUVN0cmluZyBk
YXRhYmFzZVBhdGggPSBwYXRoICsgUURpcjo6c2VwYXJhdG9yKCkgKyBRU3RyaW5nKFdlYkNvcmU6
Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKSk7CisgICAgICAgIGQtPmNv
bnRleHQtPnNldEljb25EYXRhYmFzZVBhdGgoZGF0YWJhc2VQYXRoKTsKKyAgICB9Cit9CisKK1FJ
Y29uIFFXS0NvbnRleHQ6Omljb25Gb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHBhZ2VVUkwpIGNvbnN0
Cit7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBpbWFnZSA9IGQtPmNvbnRleHQtPmljb25E
YXRhYmFzZSgpLT5pbWFnZUZvclBhZ2VVUkwocGFnZVVSTC50b1N0cmluZygpKTsKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gUUljb24oKTsKKworICAgIFFQaXhtYXAqIG5hdGl2ZUlt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFuYXRp
dmVJbWFnZSkKKyAgICAgICAgcmV0dXJuIFFJY29uKCk7CisKKyAgICByZXR1cm4gUUljb24oKm5h
dGl2ZUltYWdlKTsKK30KKworI2luY2x1ZGUgIm1vY19xd2tjb250ZXh0LmNwcCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2tjb250ZXh0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvcXdrY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmMzMzAzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvcXdrY29udGV4dC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgcXdrY29udGV4dF9oCisjZGVmaW5lIHF3a2NvbnRleHRfaAorCisjaW5jbHVk
ZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8V2ViS2l0
Mi9XS0NvbnRleHQuaD4KKworY2xhc3MgUUljb247CitjbGFzcyBRVXJsOworY2xhc3MgUVdLQ29u
dGV4dFByaXZhdGU7CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXS0NvbnRleHQgOiBwdWJsaWMg
UU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV0tDb250ZXh0KFFPYmplY3Qq
IHBhcmVudCA9IDApOworICAgIHZpcnR1YWwgflFXS0NvbnRleHQoKTsKKworICAgIC8vIEJyaWRn
ZSBmcm9tIHRoZSBDIEFQSQorICAgIFFXS0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFFPYmplY3QqIHBhcmVudCA9IDApOworCisgICAgdm9pZCBzZXRJY29uRGF0YWJhc2VQYXRoKGNv
bnN0IFFTdHJpbmcmKTsKKyAgICBRSWNvbiBpY29uRm9yUGFnZVVSTChjb25zdCBRVXJsJikgY29u
c3Q7CisKK3B1YmxpYzoKKyAgICBRX1NJR05BTCB2b2lkIGljb25DaGFuZ2VkRm9yUGFnZVVSTChj
b25zdCBRVXJsJik7CisKK3ByaXZhdGU6CisgICAgUVdLQ29udGV4dFByaXZhdGUqIGQ7CisKKyAg
ICBmcmllbmQgY2xhc3MgUVdlYlBhZ2VQcm94eTsKK307CisKKyNlbmRpZiAvKiBxd2tjb250ZXh0
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2tjb250ZXh0
X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2tjb250ZXh0X3AuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWJmOTc5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F3a2NvbnRleHRfcC5oCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKworI2lmbmRlZiBxd2tjb250ZXh0X3BfaAorI2RlZmlu
ZSBxd2tjb250ZXh0X3BfaAorCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworY2xhc3MgUVdLQ29udGV4dFByaXZhdGUgeworcHVibGljOgorICAgIFFX
S0NvbnRleHRQcml2YXRlKFFXS0NvbnRleHQqLCBXZWJLaXQ6OldlYkNvbnRleHQqID0gMCk7Cisg
ICAgflFXS0NvbnRleHRQcml2YXRlKCk7CisKKyAgICBRV0tDb250ZXh0KiBxOworCisgICAgUmVm
UHRyPFdlYktpdDo6V2ViQ29udGV4dD4gY29udGV4dDsKK307CisKKyNlbmRpZiAvKiBxa2NvbnRl
eHRfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdraGlz
dG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdraGlzdG9yeS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2MDQ5NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2toaXN0b3J5LmNwcApAQCAtMCwwICsx
LDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKdWhhIFNhdm9sYWluZW4gKGp1aGEu
c2F2b2xhaW5lbkB3ZWVnby5maSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxd2to
aXN0b3J5LmgiCisKKyNpbmNsdWRlIDxRU2hhcmVkRGF0YT4KKyNpbmNsdWRlIDxRU3RyaW5nPgor
I2luY2x1ZGUgPFFVcmw+CisjaW5jbHVkZSAicXdlYnBhZ2Vwcm94eS5oIgorI2luY2x1ZGUgInF3
a2hpc3RvcnlfcC5oIgorI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUg
PFdlYktpdDIvV0tBcnJheS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKyNp
bmNsdWRlICJXS0JhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKKyNp
bmNsdWRlICJXS1VSTC5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworUVdLSGlzdG9yeUl0ZW1Qcml2YXRlOjpRV0tIaXN0b3J5SXRlbVByaXZhdGUo
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGxpc3RJdGVtKQorICAgIDogbV9iYWNrRm9yd2FyZExp
c3RJdGVtKGxpc3RJdGVtKQoreworfQorCitRV0tIaXN0b3J5SXRlbVByaXZhdGU6On5RV0tIaXN0
b3J5SXRlbVByaXZhdGUoKQoreworfQorCitRV0tIaXN0b3J5SXRlbTo6UVdLSGlzdG9yeUl0ZW0o
Y29uc3QgUVdLSGlzdG9yeUl0ZW0mIG90aGVyKQorICAgIDogZChvdGhlci5kKSAKK3sKK30KKwor
UVdLSGlzdG9yeUl0ZW0mIFFXS0hpc3RvcnlJdGVtOjpRV0tIaXN0b3J5SXRlbTo6b3BlcmF0b3I9
KGNvbnN0IFFXS0hpc3RvcnlJdGVtJiBvdGhlcikgCit7IAorICAgIGQgPSBvdGhlci5kOworICAg
IHJldHVybiAqdGhpczsgCit9CisKK1FXS0hpc3RvcnlJdGVtOjpRV0tIaXN0b3J5SXRlbShXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSkKKyAgICA6IGQobmV3IFFXS0hpc3RvcnlJdGVtUHJp
dmF0ZShpdGVtKSkKK3sKK30KKworUVdLSGlzdG9yeUl0ZW06On5RV0tIaXN0b3J5SXRlbSgpCit7
Cit9CisKK1FTdHJpbmcgUVdLSGlzdG9yeUl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICBpZiAo
IWQtPm1fYmFja0ZvcndhcmRMaXN0SXRlbSkKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGl0bGUgPSBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1D
b3B5VGl0bGUoZC0+bV9iYWNrRm9yd2FyZExpc3RJdGVtLmdldCgpKTsKKyAgICByZXR1cm4gV0tT
dHJpbmdDb3B5UVN0cmluZyh0aXRsZS5nZXQoKSk7Cit9CisKK1FVcmwgUVdLSGlzdG9yeUl0ZW06
OnVybCgpIGNvbnN0Cit7CisgICAgaWYgKCFkLT5tX2JhY2tGb3J3YXJkTGlzdEl0ZW0pCisgICAg
ICAgIHJldHVybiBRVXJsKCk7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IFdLQmFj
a0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwoZC0+bV9iYWNrRm9yd2FyZExpc3RJdGVtLmdldCgpKTsK
KyAgICByZXR1cm4gV0tVUkxDb3B5UVVybCh1cmwuZ2V0KCkpOworfQorCitRV0tIaXN0b3J5UHJp
dmF0ZTo6UVdLSGlzdG9yeVByaXZhdGUoUVdlYlBhZ2VQcm94eSogcGFnZSwgV2ViS2l0OjpXZWJC
YWNrRm9yd2FyZExpc3QqIGxpc3QpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fYmFja0Zv
cndhcmRMaXN0KGxpc3QpCit7Cit9CisKK1FXS0hpc3RvcnkqIFFXS0hpc3RvcnlQcml2YXRlOjpj
cmVhdGVIaXN0b3J5KFFXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYktpdDo6V2ViQmFja0ZvcndhcmRM
aXN0KiBsaXN0KQoreworICAgIFFXS0hpc3RvcnkqIGhpc3RvcnkgPSBuZXcgUVdLSGlzdG9yeSgp
OworICAgIGhpc3RvcnktPmQgPSBuZXcgUVdLSGlzdG9yeVByaXZhdGUocGFnZSwgbGlzdCk7Cisg
ICAgcmV0dXJuIGhpc3Rvcnk7Cit9CisKK1FXS0hpc3RvcnlQcml2YXRlOjp+UVdLSGlzdG9yeVBy
aXZhdGUoKQoreworfQorCitRV0tIaXN0b3J5OjpRV0tIaXN0b3J5KCkKK3sKK30KKworUVdLSGlz
dG9yeTo6flFXS0hpc3RvcnkoKQoreworICAgIGRlbGV0ZSBkOworfQorCitpbnQgUVdLSGlzdG9y
eTo6YmFja0xpc3RDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0
R2V0QmFja0xpc3RDb3VudCh0b0FQSShkLT5tX2JhY2tGb3J3YXJkTGlzdCkpOworfQorCitpbnQg
UVdLSGlzdG9yeTo6Zm9yd2FyZExpc3RDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdLQmFj
a0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudCh0b0FQSShkLT5tX2JhY2tGb3J3YXJkTGlz
dCkpOworfQorCitpbnQgUVdLSGlzdG9yeTo6Y291bnQoKSBjb25zdAoreworICAgIHJldHVybiBi
YWNrTGlzdENvdW50KCkgKyBmb3J3YXJkTGlzdENvdW50KCk7Cit9CisKK1FXS0hpc3RvcnlJdGVt
IFFXS0hpc3Rvcnk6OmN1cnJlbnRJdGVtKCkgY29uc3QKK3sKKyAgICBXS1JldGFpblB0cjxXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1SZWY+IGl0ZW1SZWYgPSBXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJl
bnRJdGVtKHRvQVBJKGQtPm1fYmFja0ZvcndhcmRMaXN0KSk7CisgICAgUVdLSGlzdG9yeUl0ZW0g
aXRlbShpdGVtUmVmLmdldCgpKTsKKyAgICByZXR1cm4gaXRlbTsKK30KKworUVdLSGlzdG9yeUl0
ZW0gUVdLSGlzdG9yeTo6YmFja0l0ZW0oKSBjb25zdAoreworICAgIFdLUmV0YWluUHRyPFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZj4gaXRlbVJlZiA9IFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0l0
ZW0odG9BUEkoZC0+bV9iYWNrRm9yd2FyZExpc3QpKTsKKyAgICBRV0tIaXN0b3J5SXRlbSBpdGVt
KGl0ZW1SZWYuZ2V0KCkpOworICAgIHJldHVybiBpdGVtOworfQorCitRV0tIaXN0b3J5SXRlbSBR
V0tIaXN0b3J5Ojpmb3J3YXJkSXRlbSgpIGNvbnN0Cit7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNr
Rm9yd2FyZExpc3RJdGVtUmVmPiBpdGVtUmVmID0gV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJk
SXRlbSh0b0FQSShkLT5tX2JhY2tGb3J3YXJkTGlzdCkpOworICAgIFFXS0hpc3RvcnlJdGVtIGl0
ZW0oaXRlbVJlZi5nZXQoKSk7CisgICAgcmV0dXJuIGl0ZW07Cit9CisKK1FXS0hpc3RvcnlJdGVt
IFFXS0hpc3Rvcnk6Oml0ZW1BdChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgV0tSZXRhaW5QdHI8
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPiBpdGVtUmVmID0gV0tCYWNrRm9yd2FyZExpc3RHZXRJ
dGVtQXRJbmRleCh0b0FQSShkLT5tX2JhY2tGb3J3YXJkTGlzdCksIGluZGV4KTsKKyAgICBRV0tI
aXN0b3J5SXRlbSBpdGVtKGl0ZW1SZWYuZ2V0KCkpOworICAgIHJldHVybiBpdGVtOworfQorCit2
b2lkIFFXS0hpc3Rvcnk6OmdvVG9JdGVtQXQoaW50IGluZGV4KSBjb25zdAoreworICAgIFdLUmV0
YWluUHRyPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4gaXRlbVJlZiA9IFdLQmFja0ZvcndhcmRM
aXN0R2V0SXRlbUF0SW5kZXgodG9BUEkoZC0+bV9iYWNrRm9yd2FyZExpc3QpLCBpbmRleCk7Cisg
ICAgaWYgKGl0ZW1SZWYgJiYgZC0+bV9wYWdlKSB7CisgICAgICAgIFFXS0hpc3RvcnlJdGVtIGl0
ZW0oaXRlbVJlZi5nZXQoKSk7CisgICAgICAgIFdLUGFnZUdvVG9CYWNrRm9yd2FyZExpc3RJdGVt
KGQtPm1fcGFnZS0+cGFnZVJlZigpLCBpdGVtLmQtPm1fYmFja0ZvcndhcmRMaXN0SXRlbS5nZXQo
KSk7CisgICAgfQorfQorCitRTGlzdDxRV0tIaXN0b3J5SXRlbT4gUVdLSGlzdG9yeTo6YmFja0l0
ZW1zKGludCBtYXhJdGVtcykgY29uc3QKK3sKKyAgICBXS0FycmF5UmVmIGFycmF5UmVmID0gV0tC
YWNrRm9yd2FyZExpc3RDb3B5QmFja0xpc3RXaXRoTGltaXQodG9BUEkoZC0+bV9iYWNrRm9yd2Fy
ZExpc3QpLCBtYXhJdGVtcyk7CisgICAgaW50IHNpemUgPSBXS0FycmF5R2V0U2l6ZShhcnJheVJl
Zik7CisgICAgUUxpc3Q8UVdLSGlzdG9yeUl0ZW0+IGl0ZW1MaXN0OworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFdLVHlwZVJlZiB3a0hpc3RvcnlJdGVtID0g
V0tBcnJheUdldEl0ZW1BdEluZGV4KGFycmF5UmVmLCBpKTsKKyAgICAgICAgV0tCYWNrRm9yd2Fy
ZExpc3RJdGVtUmVmIGl0ZW1SZWYgPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1S
ZWY+KHdrSGlzdG9yeUl0ZW0pOworICAgICAgICBRV0tIaXN0b3J5SXRlbSBpdGVtKGl0ZW1SZWYp
OworICAgICAgICBpdGVtTGlzdC5hcHBlbmQoaXRlbSk7CisgICAgfQorICAgIHJldHVybiBpdGVt
TGlzdDsKK30KKworUUxpc3Q8UVdLSGlzdG9yeUl0ZW0+IFFXS0hpc3Rvcnk6OmZvcndhcmRJdGVt
cyhpbnQgbWF4SXRlbXMpIGNvbnN0Cit7CisgICAgV0tBcnJheVJlZiBhcnJheVJlZiA9IFdLQmFj
a0ZvcndhcmRMaXN0Q29weUZvcndhcmRMaXN0V2l0aExpbWl0KHRvQVBJKGQtPm1fYmFja0Zvcndh
cmRMaXN0KSwgbWF4SXRlbXMpOworICAgIGludCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXlS
ZWYpOworICAgIFFMaXN0PFFXS0hpc3RvcnlJdGVtPiBpdGVtTGlzdDsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBXS1R5cGVSZWYgd2tIaXN0b3J5SXRlbSA9
IFdLQXJyYXlHZXRJdGVtQXRJbmRleChhcnJheVJlZiwgaSk7CisgICAgICAgIFdLQmFja0Zvcndh
cmRMaXN0SXRlbVJlZiBpdGVtUmVmID0gc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVt
UmVmPih3a0hpc3RvcnlJdGVtKTsKKyAgICAgICAgUVdLSGlzdG9yeUl0ZW0gaXRlbShpdGVtUmVm
KTsKKyAgICAgICAgaXRlbUxpc3QuYXBwZW5kKGl0ZW0pOworICAgIH0KKyAgICByZXR1cm4gaXRl
bUxpc3Q7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2to
aXN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdraGlzdG9yeS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOGY0ODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdraGlzdG9yeS5oCkBAIC0wLDAgKzEsODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVoYSBTYXZvbGFpbmVuIChqdWhhLnNhdm9s
YWluZW5Ad2VlZ28uZmkpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisqLworCisjaWZuZGVmIHF3a2hpc3RvcnlfaAorI2RlZmluZSBxd2toaXN0b3J5
X2gKKworI2luY2x1ZGUgIldlYktpdDIvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmgiCisjaW5jbHVk
ZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVNoYXJl
ZERhdGE+CisKK2NsYXNzIFFXS0hpc3RvcnlQcml2YXRlOworY2xhc3MgUVdLSGlzdG9yeUl0ZW1Q
cml2YXRlOworY2xhc3MgUVVybDsKK2NsYXNzIFFTdHJpbmc7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OworfQorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBR
V0tIaXN0b3J5SXRlbSB7CitwdWJsaWM6CisgICAgUVdLSGlzdG9yeUl0ZW0oY29uc3QgUVdLSGlz
dG9yeUl0ZW0mIG90aGVyKTsKKyAgICBRV0tIaXN0b3J5SXRlbSAmb3BlcmF0b3I9KGNvbnN0IFFX
S0hpc3RvcnlJdGVtJiBvdGhlcik7CisKKyAgICB+UVdLSGlzdG9yeUl0ZW0oKTsKKyAgICBRU3Ry
aW5nIHRpdGxlKCkgY29uc3Q7CisgICAgUVVybCB1cmwoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBRV0tIaXN0b3J5SXRlbShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCisgICAgUUV4cGxp
Y2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRV0tIaXN0b3J5SXRlbVByaXZhdGU+IGQ7CisKKyAgICBm
cmllbmQgY2xhc3MgUVdLSGlzdG9yeTsKKyAgICBmcmllbmQgY2xhc3MgUVdLSGlzdG9yeUl0ZW1Q
cml2YXRlOworfTsKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdLSGlzdG9yeSA6IHB1YmxpYyBR
T2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIGludCBiYWNrTGlzdENvdW50KCkg
Y29uc3Q7CisgICAgaW50IGZvcndhcmRMaXN0Q291bnQoKSBjb25zdDsKKyAgICBpbnQgY291bnQo
KSBjb25zdDsKKyAgICBRV0tIaXN0b3J5SXRlbSBjdXJyZW50SXRlbSgpIGNvbnN0OworICAgIFFX
S0hpc3RvcnlJdGVtIGJhY2tJdGVtKCkgY29uc3Q7CisgICAgUVdLSGlzdG9yeUl0ZW0gZm9yd2Fy
ZEl0ZW0oKSBjb25zdDsKKyAgICBRV0tIaXN0b3J5SXRlbSBpdGVtQXQoaW50IGluZGV4KSBjb25z
dDsKKyAgICB2b2lkIGdvVG9JdGVtQXQoaW50IGluZGV4KSBjb25zdDsKKyAgICBRTGlzdDxRV0tI
aXN0b3J5SXRlbT4gYmFja0l0ZW1zKGludCBtYXhJdGVtcykgY29uc3Q7CisgICAgUUxpc3Q8UVdL
SGlzdG9yeUl0ZW0+IGZvcndhcmRJdGVtcyhpbnQgbWF4SXRlbXMpIGNvbnN0OworCitwcml2YXRl
OgorICAgIFFXS0hpc3RvcnkoKTsKKyAgICB+UVdLSGlzdG9yeSgpOworCisgICAgUVdLSGlzdG9y
eVByaXZhdGUqIGQ7CisgICAgZnJpZW5kIGNsYXNzIFFXS0hpc3RvcnlQcml2YXRlOworICAgIGZy
aWVuZCBjbGFzcyBRV2ViUGFnZVByb3h5OworfTsKKyNlbmRpZiAvKiBxd2toaXN0b3J5X2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2toaXN0b3J5X3AuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2toaXN0b3J5X3AuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTYxMzVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnlfcC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVoYSBTYXZvbGFpbmVuIChqdWhhLnNhdm9sYWluZW5A
d2VlZ28uZmkpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisqLworCisjaWZuZGVmIHF3a2hpc3RvcnlfcF9oCisjZGVmaW5lIHF3a2hpc3RvcnlfcF9o
CisKKyNpbmNsdWRlIDxRU2hhcmVkRGF0YT4KKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJCYWNrRm9yd2FyZExpc3Q7Cit9CisKK2NsYXNzIFFXS0hpc3Rvcnk7CitjbGFzcyBR
V2ViUGFnZVByb3h5OworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV0tIaXN0b3J5SXRlbVByaXZh
dGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgeworcHVibGljOgorICAgICAgIH5RV0tIaXN0b3J5SXRl
bVByaXZhdGUoKTsKK3ByaXZhdGU6CisgICAgUVdLSGlzdG9yeUl0ZW1Qcml2YXRlKFdLQmFja0Zv
cndhcmRMaXN0SXRlbVJlZiBsaXN0SXRlbSk7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2Fy
ZExpc3RJdGVtUmVmPiBtX2JhY2tGb3J3YXJkTGlzdEl0ZW07CisKKyAgICBmcmllbmQgY2xhc3Mg
UVdLSGlzdG9yeTsKKyAgICBmcmllbmQgY2xhc3MgUVdLSGlzdG9yeUl0ZW07Cit9OworCitjbGFz
cyBRV0VCS0lUX0VYUE9SVCBRV0tIaXN0b3J5UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFFXS0hpc3RvcnkqIGNyZWF0ZUhpc3RvcnkoUVdlYlBhZ2VQcm94eSosIFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0Kik7CisKK3ByaXZhdGU6CisgICAgUVdLSGlzdG9yeVByaXZhdGUoUVdlYlBh
Z2VQcm94eSosIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0Kik7CisgICAgflFXS0hpc3RvcnlQ
cml2YXRlKCk7CisKKyAgICBRV2ViUGFnZVByb3h5KiBtX3BhZ2U7CisgICAgV2ViS2l0OjpXZWJC
YWNrRm9yd2FyZExpc3QqIG1fYmFja0ZvcndhcmRMaXN0OworCisgICAgZnJpZW5kIGNsYXNzIFFX
S0hpc3Rvcnk7Cit9OworCisjZW5kaWYgLyogcXdraGlzdG9yeV9wX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2twcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBmNTRjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuY3BwCkBAIC0wLDAgKzEsMjE5IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXdrcHJl
ZmVyZW5jZXMuaCIKKworI2luY2x1ZGUgIldLUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV0tQcmVm
ZXJlbmNlcy5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgorI2luY2x1ZGUgInF3a3ByZWZlcmVuY2VzX3AuaCIKKworCitRV0tQcmVmZXJlbmNlcyog
UVdLUHJlZmVyZW5jZXNQcml2YXRlOjpjcmVhdGVQcmVmZXJlbmNlcyhXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCit7CisgICAgUVdLUHJlZmVyZW5jZXMqIHByZWZzID0gbmV3IFFXS1ByZWZl
cmVuY2VzOworICAgIHByZWZzLT5kLT5yZWYgPSBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHBh
Z2VHcm91cFJlZik7CisgICAgcmV0dXJuIHByZWZzOworfQorCitRV0tQcmVmZXJlbmNlcyogUVdL
UHJlZmVyZW5jZXNQcml2YXRlOjpjcmVhdGVTaGFyZWRQcmVmZXJlbmNlcygpCit7CisgICAgUVdL
UHJlZmVyZW5jZXMqIHByZWZzID0gbmV3IFFXS1ByZWZlcmVuY2VzOworICAgIHByZWZzLT5kLT5y
ZWYgPSBXS1ByZWZlcmVuY2VzQ3JlYXRlKCk7CisgICAgcmV0dXJuIHByZWZzOworfQorCitRV0tQ
cmVmZXJlbmNlcyogUVdLUHJlZmVyZW5jZXM6OnNoYXJlZFByZWZlcmVuY2VzKCkKK3sKKyAgICBz
dGF0aWMgUVdLUHJlZmVyZW5jZXMqIGluc3RhbmNlID0gMDsKKworICAgIGlmICghaW5zdGFuY2Up
CisgICAgICAgIGluc3RhbmNlID0gUVdLUHJlZmVyZW5jZXNQcml2YXRlOjpjcmVhdGVTaGFyZWRQ
cmVmZXJlbmNlcygpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworUVdLUHJlZmVyZW5jZXM6
OlFXS1ByZWZlcmVuY2VzKCkKKyAgICA6IGQobmV3IFFXS1ByZWZlcmVuY2VzUHJpdmF0ZSkKK3sK
K30KKworUVdLUHJlZmVyZW5jZXM6On5RV0tQcmVmZXJlbmNlcygpCit7CisgICAgZGVsZXRlIGQ7
Cit9CisKK3ZvaWQgUVdLUHJlZmVyZW5jZXM6OnNldEZvbnRGYW1pbHkoRm9udEZhbWlseSB3aGlj
aCwgY29uc3QgUVN0cmluZyYgZmFtaWx5KQoreworICAgIHN3aXRjaCAod2hpY2gpIHsKKyAgICBj
YXNlIFN0YW5kYXJkRm9udDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldFN0YW5kYXJkRm9udEZh
bWlseShkLT5yZWYsIFdLU3RyaW5nQ3JlYXRlV2l0aFFTdHJpbmcoZmFtaWx5KSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRml4ZWRGb250OgorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0Rml4
ZWRGb250RmFtaWx5KGQtPnJlZiwgV0tTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhmYW1pbHkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXJpZkZvbnQ6CisgICAgICAgIFdLUHJlZmVyZW5j
ZXNTZXRTZXJpZkZvbnRGYW1pbHkoZC0+cmVmLCBXS1N0cmluZ0NyZWF0ZVdpdGhRU3RyaW5nKGZh
bWlseSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNhbnNTZXJpZkZvbnQ6CisgICAgICAg
IFdLUHJlZmVyZW5jZXNTZXRTYW5zU2VyaWZGb250RmFtaWx5KGQtPnJlZiwgV0tTdHJpbmdDcmVh
dGVXaXRoUVN0cmluZyhmYW1pbHkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzaXZl
Rm9udDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5KGQtPnJlZiwg
V0tTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhmYW1pbHkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGYW50YXN5Rm9udDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEZhbnRhc3lGb250RmFt
aWx5KGQtPnJlZiwgV0tTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhmYW1pbHkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitRU3RyaW5n
IFFXS1ByZWZlcmVuY2VzOjpmb250RmFtaWx5KEZvbnRGYW1pbHkgd2hpY2gpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh3aGljaCkgeworICAgIGNhc2UgU3RhbmRhcmRGb250OiB7CisgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdHJpbmdSZWYoQWRvcHRXSywgV0tQcmVmZXJlbmNlc0Nv
cHlTdGFuZGFyZEZvbnRGYW1pbHkoZC0+cmVmKSk7CisgICAgICAgIHJldHVybiBXS1N0cmluZ0Nv
cHlRU3RyaW5nKHN0cmluZ1JlZi5nZXQoKSk7CisgICAgfQorICAgIGNhc2UgRml4ZWRGb250OiB7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdHJpbmdSZWYoQWRvcHRXSywgV0tQ
cmVmZXJlbmNlc0NvcHlGaXhlZEZvbnRGYW1pbHkoZC0+cmVmKSk7CisgICAgICAgIHJldHVybiBX
S1N0cmluZ0NvcHlRU3RyaW5nKHN0cmluZ1JlZi5nZXQoKSk7CisgICAgfQorICAgIGNhc2UgU2Vy
aWZGb250OiB7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdHJpbmdSZWYoQWRv
cHRXSywgV0tQcmVmZXJlbmNlc0NvcHlTZXJpZkZvbnRGYW1pbHkoZC0+cmVmKSk7CisgICAgICAg
IHJldHVybiBXS1N0cmluZ0NvcHlRU3RyaW5nKHN0cmluZ1JlZi5nZXQoKSk7CisgICAgfQorICAg
IGNhc2UgU2Fuc1NlcmlmRm9udDogeworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3RyaW5nUmVmKEFkb3B0V0ssIFdLUHJlZmVyZW5jZXNDb3B5U2Fuc1NlcmlmRm9udEZhbWlseShk
LT5yZWYpKTsKKyAgICAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoc3RyaW5nUmVmLmdl
dCgpKTsKKyAgICB9CisgICAgY2FzZSBDdXJzaXZlRm9udDogeworICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3RyaW5nUmVmKEFkb3B0V0ssIFdLUHJlZmVyZW5jZXNDb3B5Q3Vyc2l2
ZUZvbnRGYW1pbHkoZC0+cmVmKSk7CisgICAgICAgIHJldHVybiBXS1N0cmluZ0NvcHlRU3RyaW5n
KHN0cmluZ1JlZi5nZXQoKSk7CisgICAgfQorICAgIGNhc2UgRmFudGFzeUZvbnQ6IHsKKyAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN0cmluZ1JlZihBZG9wdFdLLCBXS1ByZWZlcmVu
Y2VzQ29weUZhbnRhc3lGb250RmFtaWx5KGQtPnJlZikpOworICAgICAgICByZXR1cm4gV0tTdHJp
bmdDb3B5UVN0cmluZyhzdHJpbmdSZWYuZ2V0KCkpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0KK30KKworYm9vbCBRV0tQcmVmZXJlbmNlczo6
dGVzdEF0dHJpYnV0ZShXZWJBdHRyaWJ1dGUgYXR0cikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGF0
dHIpIHsKKyAgICBjYXNlIEF1dG9Mb2FkSW1hZ2VzOgorICAgICAgICByZXR1cm4gV0tQcmVmZXJl
bmNlc0dldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShkLT5yZWYpOworICAgIGNhc2UgSmF2YXNj
cmlwdEVuYWJsZWQ6CisgICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdEVu
YWJsZWQoZC0+cmVmKTsKKyAgICBjYXNlIFBsdWdpbnNFbmFibGVkOgorICAgICAgICByZXR1cm4g
V0tQcmVmZXJlbmNlc0dldFBsdWdpbnNFbmFibGVkKGQtPnJlZik7CisgICAgY2FzZSBPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQ6CisgICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2Vz
R2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGQtPnJlZik7CisgICAgY2FzZSBM
b2NhbFN0b3JhZ2VFbmFibGVkOgorICAgICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldExvY2Fs
U3RvcmFnZUVuYWJsZWQoZC0+cmVmKTsKKyAgICBjYXNlIFhTU0F1ZGl0aW5nRW5hYmxlZDoKKyAg
ICAgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRYU1NBdWRpdG9yRW5hYmxlZChkLT5yZWYpOwor
ICAgIGNhc2UgRnJhbWVGbGF0dGVuaW5nRW5hYmxlZDoKKyAgICAgICAgcmV0dXJuIFdLUHJlZmVy
ZW5jZXNHZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGQtPnJlZik7CisgICAgY2FzZSBQcml2YXRl
QnJvd3NpbmdFbmFibGVkOgorICAgICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQoZC0+cmVmKTsKKyAgICBjYXNlIERldmVsb3BlckV4dHJhc0VuYWJsZWQ6
CisgICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChk
LT5yZWYpOworICAgIGNhc2UgRG5zUHJlZmV0Y2hFbmFibGVkOgorICAgICAgICByZXR1cm4gV0tQ
cmVmZXJlbmNlc0dldEROU1ByZWZldGNoaW5nRW5hYmxlZChkLT5yZWYpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIFFXS1ByZWZlcmVuY2VzOjpzZXRBdHRyaWJ1dGUoV2ViQXR0cmlidXRl
IGF0dHIsIGJvb2wgb24pCit7CisgICAgc3dpdGNoIChhdHRyKSB7CisgICAgY2FzZSBBdXRvTG9h
ZEltYWdlczoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldExvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eShkLT5yZWYsIG9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKYXZhc2NyaXB0RW5hYmxl
ZDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRFbmFibGVkKGQtPnJlZiwgb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsdWdpbnNFbmFibGVkOgorICAgICAgICBXS1By
ZWZlcmVuY2VzU2V0UGx1Z2luc0VuYWJsZWQoZC0+cmVmLCBvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgT2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkOgorICAgICAgICBXS1By
ZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGQtPnJlZiwgb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvY2FsU3RvcmFnZUVuYWJsZWQ6CisgICAgICAg
IFdLUHJlZmVyZW5jZXNTZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGQtPnJlZiwgb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFhTU0F1ZGl0aW5nRW5hYmxlZDoKKyAgICAgICAgV0tQcmVmZXJl
bmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKGQtPnJlZiwgb24pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQ6CisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRG
cmFtZUZsYXR0ZW5pbmdFbmFibGVkKGQtPnJlZiwgb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFByaXZhdGVCcm93c2luZ0VuYWJsZWQ6CisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGQtPnJlZiwgb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IERldmVsb3BlckV4dHJhc0VuYWJsZWQ6CisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXREZXZlbG9w
ZXJFeHRyYXNFbmFibGVkKGQtPnJlZiwgb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERu
c1ByZWZldGNoRW5hYmxlZDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEROU1ByZWZldGNoaW5n
RW5hYmxlZChkLT5yZWYsIG9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFFXS1ByZWZlcmVuY2Vz
OjpzZXRGb250U2l6ZShGb250U2l6ZSB0eXBlLCBpbnQgc2l6ZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIE1pbmltdW1Gb250U2l6ZToKKyAgICAgICAgIFdLUHJlZmVyZW5jZXNT
ZXRNaW5pbXVtRm9udFNpemUoZC0+cmVmLCBzaXplKTsKKyAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGVmYXVsdEZvbnRTaXplOgorICAgICAgICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRGb250
U2l6ZShkLT5yZWYsIHNpemUpOworICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEZWZhdWx0Rml4
ZWRGb250U2l6ZToKKyAgICAgICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0Rml4ZWRGb250U2l6
ZShkLT5yZWYsIHNpemUpOworICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitpbnQgUVdLUHJlZmVyZW5jZXM6OmZv
bnRTaXplKEZvbnRTaXplIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBNaW5pbXVtRm9udFNpemU6CisgICAgICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldE1p
bmltdW1Gb250U2l6ZShkLT5yZWYpOworICAgIGNhc2UgRGVmYXVsdEZvbnRTaXplOgorICAgICAg
ICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXREZWZhdWx0Rm9udFNpemUoZC0+cmVmKTsKKyAgICBj
YXNlIERlZmF1bHRGaXhlZEZvbnRTaXplOgorICAgICAgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNH
ZXREZWZhdWx0Rml4ZWRGb250U2l6ZShkLT5yZWYpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xd2twcmVmZXJlbmNlcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjZkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuaApAQCAtMCwwICsxLDc5IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFFXS1BSRUZFUkVOQ0VTX0gKKyNkZWZpbmUg
UVdLUFJFRkVSRU5DRVNfSAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCitjbGFzcyBR
V0tQcmVmZXJlbmNlc1ByaXZhdGU7CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXS1ByZWZlcmVu
Y2VzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEZvbnRGYW1pbHkgeworICAgICAgICBTdGFuZGFyZEZv
bnQsCisgICAgICAgIEZpeGVkRm9udCwKKyAgICAgICAgU2VyaWZGb250LAorICAgICAgICBTYW5z
U2VyaWZGb250LAorICAgICAgICBDdXJzaXZlRm9udCwKKyAgICAgICAgRmFudGFzeUZvbnQKKyAg
ICB9OworCisgICAgZW51bSBXZWJBdHRyaWJ1dGUgeworICAgICAgICBBdXRvTG9hZEltYWdlcywK
KyAgICAgICAgSmF2YXNjcmlwdEVuYWJsZWQsCisgICAgICAgIFBsdWdpbnNFbmFibGVkLAorICAg
ICAgICBPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQsCisgICAgICAgIExvY2FsU3Rv
cmFnZUVuYWJsZWQsCisgICAgICAgIFhTU0F1ZGl0aW5nRW5hYmxlZCwKKyAgICAgICAgRnJhbWVG
bGF0dGVuaW5nRW5hYmxlZCwKKyAgICAgICAgUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwKKyAgICAg
ICAgRGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwKKyAgICAgICAgRG5zUHJlZmV0Y2hFbmFibGVkCisg
ICAgfTsKKworICAgIGVudW0gRm9udFNpemUgeworICAgICAgICBNaW5pbXVtRm9udFNpemUsCisg
ICAgICAgIERlZmF1bHRGb250U2l6ZSwKKyAgICAgICAgRGVmYXVsdEZpeGVkRm9udFNpemUKKyAg
ICB9OworCisgICAgc3RhdGljIFFXS1ByZWZlcmVuY2VzKiBzaGFyZWRQcmVmZXJlbmNlcygpOwor
CisgICAgdm9pZCBzZXRGb250RmFtaWx5KEZvbnRGYW1pbHkgd2hpY2gsIGNvbnN0IFFTdHJpbmcm
IGZhbWlseSk7CisgICAgUVN0cmluZyBmb250RmFtaWx5KEZvbnRGYW1pbHkgd2hpY2gpIGNvbnN0
OworCisgICAgdm9pZCBzZXRBdHRyaWJ1dGUoV2ViQXR0cmlidXRlIGF0dHIsIGJvb2wgb24pOwor
ICAgIGJvb2wgdGVzdEF0dHJpYnV0ZShXZWJBdHRyaWJ1dGUgYXR0cikgY29uc3Q7CisKKyAgICB2
b2lkIHNldEZvbnRTaXplKEZvbnRTaXplIHR5cGUsIGludCBzaXplKTsKKyAgICBpbnQgZm9udFNp
emUoRm9udFNpemUgdHlwZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUV9ESVNBQkxFX0NPUFko
UVdLUHJlZmVyZW5jZXMpCisKKyAgICBRV0tQcmVmZXJlbmNlcygpOworICAgIH5RV0tQcmVmZXJl
bmNlcygpOworCisgICAgUVdLUHJlZmVyZW5jZXNQcml2YXRlICpkOworCisgICAgZnJpZW5kIGNs
YXNzIFFXS1ByZWZlcmVuY2VzUHJpdmF0ZTsKK307CisKKyNlbmRpZiAvLyBRV0tQUkVGRVJFTkNF
U19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5j
ZXNfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F3a3ByZWZlcmVuY2VzX3AuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmUyMzg5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F3a3ByZWZlcmVuY2VzX3AuaApAQCAt
MCwwICsxLDI4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiV0tQcmVmZXJlbmNl
cy5oIgorCitjbGFzcyBRV0tQcmVmZXJlbmNlc1ByaXZhdGUgeworcHVibGljOgorICAgIHN0YXRp
YyBRV0tQcmVmZXJlbmNlcyogY3JlYXRlUHJlZmVyZW5jZXMoV0tQYWdlR3JvdXBSZWYpOworICAg
IHN0YXRpYyBRV0tQcmVmZXJlbmNlcyogY3JlYXRlU2hhcmVkUHJlZmVyZW5jZXMoKTsKKworICAg
IFdLUHJlZmVyZW5jZXNSZWYgcmVmOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC90b3VjaHZpZXdpbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L3RvdWNodmlld2ludGVyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjFmMTAyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC90b3VjaHZpZXdpbnRlcmZhY2UuY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgInRvdWNodmlld2ludGVyZmFjZS5oIgorI2luY2x1ZGUgInF0
b3VjaHdlYnBhZ2UuaCIKKyNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3LmgiCisKK1RvdWNoVmlld0lu
dGVyZmFjZTo6VG91Y2hWaWV3SW50ZXJmYWNlKFFUb3VjaFdlYlZpZXcqIHZpZXdwb3J0Vmlldywg
UVRvdWNoV2ViUGFnZSogcGFnZVZpZXcpCisgICAgOiBtX3ZpZXdwb3J0Vmlldyh2aWV3cG9ydFZp
ZXcpCisgICAgLCBtX3BhZ2VWaWV3KHBhZ2VWaWV3KQoreworICAgIFFfQVNTRVJUKG1fdmlld3Bv
cnRWaWV3KTsKKyAgICBRX0FTU0VSVChtX3BhZ2VWaWV3KTsKK30KKwordm9pZCBUb3VjaFZpZXdJ
bnRlcmZhY2U6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJlY3QmIGludmFsaWRhdGVkUmVj
dCkKK3sKKyAgICBtX3BhZ2VWaWV3LT51cGRhdGUoaW52YWxpZGF0ZWRSZWN0KTsKK30KKworUVNp
emUgVG91Y2hWaWV3SW50ZXJmYWNlOjpkcmF3aW5nQXJlYVNpemUoKQoreworICAgIHJldHVybiBt
X3BhZ2VWaWV3LT5zaXplKCkudG9TaXplKCk7Cit9CisKK3ZvaWQgVG91Y2hWaWV3SW50ZXJmYWNl
Ojpjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUpCit7CisgICAgbV9wYWdl
Vmlldy0+cmVzaXplKG5ld1NpemUpOworfQorCitib29sIFRvdWNoVmlld0ludGVyZmFjZTo6aXNB
Y3RpdmUoKQoreworICAgIHJldHVybiBtX3BhZ2VWaWV3LT5pc0FjdGl2ZSgpOworfQorCitib29s
IFRvdWNoVmlld0ludGVyZmFjZTo6aGFzRm9jdXMoKQoreworICAgIHJldHVybiBtX3BhZ2VWaWV3
LT5oYXNGb2N1cygpOworfQorCitib29sIFRvdWNoVmlld0ludGVyZmFjZTo6aXNWaXNpYmxlKCkK
K3sKKyAgICByZXR1cm4gbV92aWV3cG9ydFZpZXctPmlzVmlzaWJsZSgpICYmIG1fcGFnZVZpZXct
PmlzVmlzaWJsZSgpOworfQorCit2b2lkIFRvdWNoVmlld0ludGVyZmFjZTo6c3RhcnREcmFnKFF0
OjpEcm9wQWN0aW9ucyBzdXBwb3J0ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1h
Z2UsIFFNaW1lRGF0YSogZGF0YSwgUVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9i
YWxQb3NpdGlvbiwgUXQ6OkRyb3BBY3Rpb24qIGRyb3BBY3Rpb24pCit7CisgICAgLy8gUVRvdWNo
V2ViVmlldyBkb2VzIG5vdCBzdXBwb3J0IGRyYWcgYW5kIGRyb3AuCisgICAgUV9BU1NFUlQoZmFs
c2UpOworfQorCit2b2lkIFRvdWNoVmlld0ludGVyZmFjZTo6ZGlkQ2hhbmdlVXJsKGNvbnN0IFFV
cmwmIHVybCkKK3sKKyAgICBlbWl0IG1fcGFnZVZpZXctPnVybENoYW5nZWQodXJsKTsKK30KKwor
dm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVRpdGxlKGNvbnN0IFFTdHJpbmcmIG5l
d1RpdGxlKQoreworICAgIGVtaXQgbV9wYWdlVmlldy0+dGl0bGVDaGFuZ2VkKG5ld1RpdGxlKTsK
K30KKwordm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0
cmluZyYpCit7CisgICAgLy8gVGhlcmUgaXMgbm90IHlldCBhbnkgVUkgZGVmaW5lZCBmb3IgdGhl
IHRvb2x0aXBzIGZvciBtb2JpbGUgc28gd2UgaWdub3JlIHRoZSBjaGFuZ2UuCit9CisKK3ZvaWQg
VG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmKQor
eworICAgIC8vIFRoZXJlIGlzIG5vdCB5ZXQgYW55IFVJIGRlZmluZWQgZm9yIHN0YXR1cyB0ZXh0
IHNvIHdlIGlnbm9yZSB0aGUgY2FsbC4KK30KKworI2lmbmRlZiBRVF9OT19DVVJTT1IKK3ZvaWQg
VG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYpCit7Cisg
ICAgLy8gVGhlIGN1cnNvciBpcyBub3QgdmlzaWJsZSBvbiBtb2JpbGUsIGp1c3QgaWdub3JlIHRo
aXMgbWVzc2FnZS4KK30KKyNlbmRpZgorCit2b2lkIFRvdWNoVmlld0ludGVyZmFjZTo6bG9hZERp
ZEJlZ2luKCkKK3sKKyAgICBlbWl0IG1fcGFnZVZpZXctPmxvYWRTdGFydGVkKCk7Cit9CisKK3Zv
aWQgVG91Y2hWaWV3SW50ZXJmYWNlOjpsb2FkRGlkU3VjY2VlZCgpCit7CisgICAgZW1pdCBtX3Bh
Z2VWaWV3LT5sb2FkU3VjY2VlZGVkKCk7Cit9CisKK3ZvaWQgVG91Y2hWaWV3SW50ZXJmYWNlOjpk
aWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50IHBlcmNlbnRhZ2VMb2FkZWQpCit7CisgICAgZW1pdCBt
X3BhZ2VWaWV3LT5sb2FkUHJvZ3Jlc3MocGVyY2VudGFnZUxvYWRlZCk7Cit9CisKK3ZvaWQgVG91
Y2hWaWV3SW50ZXJmYWNlOjpzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KQor
eworICAgIC8vIFRPRE8KK30KKwordm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OmhpZGVDb250ZXh0
TWVudSgpCit7CisgICAgLy8gVE9ETworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L3RvdWNodmlld2ludGVyZmFjZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L3RvdWNodmlld2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmY4Nzc4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvdG91Y2h2aWV3aW50ZXJmYWNlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgdG91Y2h2aWV3aW50ZXJmYWNlX2gKKyNkZWZpbmUgdG91Y2h2aWV3aW50ZXJm
YWNlX2gKKworI2luY2x1ZGUgInZpZXdpbnRlcmZhY2UuaCIKKworY2xhc3MgUVRvdWNoV2ViUGFn
ZTsKK2NsYXNzIFFUb3VjaFdlYlZpZXc7CisKK2NsYXNzIFRvdWNoVmlld0ludGVyZmFjZSA6IHB1
YmxpYyBWaWV3SW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgVG91Y2hWaWV3SW50ZXJmYWNlKFFU
b3VjaFdlYlZpZXcqIHZpZXdwb3J0VmlldywgUVRvdWNoV2ViUGFnZSogcGFnZVZpZXcpOworICAg
IFFUb3VjaFdlYlBhZ2UqIHBhZ2VWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlVmlldzsgfQor
Citwcml2YXRlOgorICAgIC8qIEltcGxlbWVudGF0aW9uIG9mIFZpZXdJbnRlcmZhY2UgKi8KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOworCisgICAg
dmlydHVhbCBRU2l6ZSBkcmF3aW5nQXJlYVNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRm9jdXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaXNp
YmxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFF0OjpEcm9wQWN0aW9ucyBzdXBw
b3J0ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1hZ2UsIFFNaW1lRGF0YSogZGF0
YSwgUVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3NpdGlvbiwgUXQ6OkRy
b3BBY3Rpb24qIGRyb3BBY3Rpb24pOworCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVVybChj
b25zdCBRVXJsJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFFTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVG9vbFRpcChjb25zdCBRU3RyaW5nJik7
CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYpOwor
I2lmbmRlZiBRVF9OT19DVVJTT1IKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ3Vyc29yKGNv
bnN0IFFDdXJzb3ImKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkQmVnaW4oKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZFN1Y2NlZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlTG9hZFByb2dyZXNzKGludCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRN
ZW51KFFTaGFyZWRQb2ludGVyPFFNZW51Pik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0
TWVudSgpOworcHJpdmF0ZToKKyAgICBRVG91Y2hXZWJWaWV3KiBjb25zdCBtX3ZpZXdwb3J0Vmll
dzsKKyAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBtX3BhZ2VWaWV3OworfTsKKworI2VuZGlmIC8q
IHRvdWNodmlld2ludGVyZmFjZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvdmlld2ludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
dmlld2ludGVyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5
YjlhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC92aWV3
aW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgInZpZXdpbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgorI2luY2x1
ZGUgPFFHcmFwaGljc1ZpZXc+CisjaW5jbHVkZSA8UUdyYXBoaWNzV2lkZ2V0PgorI2luY2x1ZGUg
PFFXaWRnZXQ+CisjaW5jbHVkZSA8UXRDb3JlL1FSZWN0PgorI2luY2x1ZGUgPFF0Q29yZS9RU2l6
ZT4KKworUVdpZGdldCogVmlld0ludGVyZmFjZTo6b3duZXJXaWRnZXQoY29uc3QgUUdyYXBoaWNz
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+c2NlbmUoKSB8
fCB3aWRnZXQtPnNjZW5lKCktPnZpZXdzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFFMaXN0PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHdpZGdldC0+c2NlbmUoKS0+dmll
d3MoKTsKKyAgICBpZiAodmlld3Muc2l6ZSgpID4gMSkKKyAgICAgICAgcVdhcm5pbmcoIkNhbm5v
dCBzdXBwb3J0IG11bHRpcGxlIHZpZXdzIik7CisKKyAgICByZXR1cm4gdmlld3MuYXQoMCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvdmlld2ludGVyZmFjZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3ZpZXdpbnRlcmZhY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDAxMDFjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3ZpZXdpbnRlcmZhY2UuaApAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiB2aWV3aW50ZXJmYWNlX2gKKyNkZWZpbmUgdmll
d2ludGVyZmFjZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvUVNpemU+CisjaW5jbHVkZSA8UXRDb3Jl
L1FTaGFyZWRQb2ludGVyPgorI2luY2x1ZGUgPFFNZW51PgorCitjbGFzcyBRQ3Vyc29yOworY2xh
c3MgUUdyYXBoaWNzV2lkZ2V0OworY2xhc3MgUUltYWdlOworY2xhc3MgUU1pbWVEYXRhOworY2xh
c3MgUVBvaW50OworY2xhc3MgUVJlY3Q7CitjbGFzcyBRVXJsOworY2xhc3MgUVdpZGdldDsKKwor
Y2xhc3MgVmlld0ludGVyZmFjZQoreworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0JikgPSAwOworCisgICAgdmlydHVhbCBRU2l6ZSBkcmF3
aW5nQXJlYVNpemUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRTaXplQ2hhbmdlZChj
b25zdCBRU2l6ZSYpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzRm9jdXMoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmlzaWJs
ZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoUXQ6OkRyb3BBY3Rpb25zIHN1
cHBvcnRlZERyb3BBY3Rpb25zLCBjb25zdCBRSW1hZ2UmIGRyYWdJbWFnZSwgUU1pbWVEYXRhKiBk
YXRhLCBRUG9pbnQqIGNsaWVudFBvc2l0aW9uLCBRUG9pbnQqIGdsb2JhbFBvc2l0aW9uLCBRdDo6
RHJvcEFjdGlvbiogZHJvcEFjdGlvbikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5n
ZVVybChjb25zdCBRVXJsJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShj
b25zdCBRU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29sVGlwKGNv
bnN0IFFTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVN0YXR1c1RleHQo
Y29uc3QgUVN0cmluZyYpID0gMDsKKyNpZm5kZWYgUVRfTk9fQ1VSU09SCisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBRQ3Vyc29yJikgPSAwOworI2VuZGlmCisgICAgdmly
dHVhbCB2b2lkIGxvYWREaWRCZWdpbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZFN1
Y2NlZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8
UU1lbnU+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpID0gMDsKKwor
cHJvdGVjdGVkOgorICAgIC8qIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgaW1wbGVtZW50YXRp
b25zLiAqLworICAgIHN0YXRpYyBRV2lkZ2V0KiBvd25lcldpZGdldChjb25zdCBRR3JhcGhpY3NX
aWRnZXQqKTsKK307CisKKyNlbmRpZiAvKiB2aWV3aW50ZXJmYWNlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8K
aW5kZXggMzc0MDgxYy4uY2QyMzRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTIzNCw2ICsyMzQsMTgg
QEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJv
eHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5oIFwKICAgICBVSVBy
b2Nlc3MvV2ViVUlDbGllbnQuaCBcCisgICAgVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaCBcCisg
ICAgVUlQcm9jZXNzL3F0L3RvdWNodmlld2ludGVyZmFjZS5oIFwKKyAgICBVSVByb2Nlc3MvcXQv
cWRlc2t0b3B3ZWJwYWdlcHJveHkuaCBcCisgICAgVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vw
cm94eS5oIFwKKyAgICBVSVByb2Nlc3MvcXQvcXdlYnBhZ2Vwcm94eS5oIFwKKyAgICBVSVByb2Nl
c3MvcXQvcXdrY29udGV4dC5oIFwKKyAgICBVSVByb2Nlc3MvcXQvcXdrY29udGV4dF9wLmggXAor
ICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5LmggXAorICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0
b3J5X3AuaCBcCisgICAgVUlQcm9jZXNzL3F0L3F3a3ByZWZlcmVuY2VzLmggXAorICAgIFVJUHJv
Y2Vzcy9xdC9xd2twcmVmZXJlbmNlc19wLmggXAorICAgIFVJUHJvY2Vzcy9xdC92aWV3aW50ZXJm
YWNlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJVbmRvQ29tbWFuZFF0LmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYlBv
cHVwTWVudVByb3h5UXQuaCBcCkBAIC00NTEsNiArNDYzLDE1IEBAIFNPVVJDRVMgKz0gXAogICAg
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVu
dC5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBcCisgICAgVUlQcm9jZXNz
L3F0L3RvdWNodmlld2ludGVyZmFjZS5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9xZGVza3RvcHdl
YnBhZ2Vwcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuY3Bw
IFwKKyAgICBVSVByb2Nlc3MvcXQvcXdlYnBhZ2Vwcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9x
dC9xd2tjb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuY3BwIFwKKyAg
ICBVSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvdmll
d2ludGVyZmFjZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlR
dC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDJBUEkucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0MkFQSS5wcmkKaW5k
ZXggMTcwOTU0OS4uNjAxZGYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0MkFQ
SS5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0MkFQSS5wcmkKQEAgLTQ0LDEyICs0NCw5
IEBAIFdFQktJVDJfQVBJX1NPVVJDRVMgPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIFwKICAgICAkJFNPVVJDRV9E
SVIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9xdC9XS1N0cmluZ1F0LmNwcCBcCiAgICAgJCRT
T1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvcXQvV0tVUkxRdC5jcHAgXAotICAg
ICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvQ2xpZW50SW1wbC5jcHAgXAot
ICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWdyYXBoaWNzd2t2aWV3
LmNwcCBcCi0gICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2tjb250
ZXh0LmNwcCBcCi0gICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2to
aXN0b3J5LmNwcCBcCi0gICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2twYWdlLmNwcCBcCi0gICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2twcmVmZXJlbmNlcy5jcHAgXAorICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcCBcCisgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcCBcCisgICAgJCRTT1VSQ0VfRElSL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcCBcCiAgICAgJCRTT1VSQ0VfRElS
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAgXAog
ICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRl
bS5jcHAgXApAQCAtMTIyLDE1ICsxMTksMTIgQEAgV0VCS0lUMl9BUElfSEVBREVSUyArPSBcCiAg
ICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBc
CiAgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvcXQvV0tTdHJpbmdR
dC5oIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9xdC9XS1VS
TFF0LmggXAotICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvQ2xpZW50
SW1wbC5oIFwKLSAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFw
aGljc3drdmlldy5oIFwKLSAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3F3a2NvbnRleHQuaCBcCi0gICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2tjb250ZXh0X3AuaCBcCi0gICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xd2toaXN0b3J5LmggXAotICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdraGlzdG9yeV9wLmggXAotICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXdrcGFnZS5oIFwKLSAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3a3BhZ2VfcC5oIFwKLSAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3a3ByZWZlcmVuY2VzLmggXAorICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmggXAorICAgICQkU09VUkNFX0RJUi9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3X3AuaCBcCisgICAgJCRTT1VSQ0VfRElS
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmggXAorICAgICQkU09VUkNF
X0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmggXAorICAgICQk
U09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5oIFwKKyAg
ICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXdfcC5o
IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmggXAogICAgICQkU09VUkNFX0RJUi9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtLmggXAogICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IGU1MGRl
MmUuLjI2MzczNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKQEAgLTIwNCwyNSArMjA0LDYgQEAgdm9pZCBUaWxl
ZERyYXdpbmdBcmVhOjpyZXF1ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXIKICAgICB9CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dGFrZVNu
YXBzaG90KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRhcmdldFNpemUsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNvbnRlbnRzUmVjdCkKLXsKLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVk
KCk7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoY29udGVudHNSZWN0KTsKLSAgICByZWN0
LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+bWFpbkZyYW1l
KCktPmNvcmVGcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpKSk7Ci0KLSAgICBmbG9hdCB0
YXJnZXRTY2FsZSA9IGZsb2F0KHRhcmdldFNpemUud2lkdGgoKSkgLyByZWN0LndpZHRoKCk7Ci0g
ICAgSW50UmVjdCB0aWxlUmVjdChJbnRQb2ludChyZWN0LngoKSAqIHRhcmdldFNjYWxlLCByZWN0
LnkoKSAqIHRhcmdldFNjYWxlKSwgdGFyZ2V0U2l6ZSk7Ci0KLSAgICBVcGRhdGVJbmZvIHVwZGF0
ZUluZm87Ci0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gdGlsZVJlY3Q7Ci0gICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVT
aGFyZWFibGUodGlsZVJlY3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEp
OwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKLQot
ICAgIHBhaW50SW50b0JpdG1hcChiaXRtYXAuZ2V0KCksIHRpbGVSZWN0LCB0YXJnZXRTY2FsZSk7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpTbmFwc2hv
dFRha2VuKHVwZGF0ZUluZm8pKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZiAvLyBUSUxFRF9CQUNLSU5HX1NUT1JFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAppbmRleCAxN2U3MjJjLi4xZjkwMzJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5n
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdp
bmdBcmVhLmgKQEAgLTY0LDcgKzY0LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlk
VXBkYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFRpbGVVcGRhdGUoaW50IHRpbGVJRCk7
CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RUaWxlVXBkYXRlKGludCB0aWxlSUQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCwgZmxvYXQgc2NhbGUpOwotICAgIHZpcnR1YWwgdm9p
ZCB0YWtlU25hcHNob3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdGFyZ2V0U2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY29udGVudHNSZWN0KTsKIAogICAgIC8vIFBsYXRmb3JtIG92ZXJy
aWRlcwogICAgIHZvaWQgcGFpbnRJbnRvQml0bWFwKFNoYXJlYWJsZUJpdG1hcCosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHRpbGVSZWN0LCBmbG9hdCBzY2FsZSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWJjOGZjOC4uY2E4ZjJjZCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU0IEBACisyMDExLTA3LTA1ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbUXRdW1dLMl0gU3BsaXQgUXQgQVBJIGludG8gdHdvIGRpZmZlcmVudCB3ZWIgdmll
d3MgKHRvdWNoIGFuZCBkZXNrdG9wKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjM5NTAKKworICAgICAgICBDby1hdXRob3JlZCB3aXRoIEJlbmphbWlu
IFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgV1RSL1F0IHRvIHVzZSBRRGVza3RvcFdlYlZp
ZXcgYW5kIGZvcmNlIGEgODAweDYwMCB2aWV3cG9ydC4KKworICAgICAgICBUaGUgUXQgTWluaUJy
b3dzZXIgbm93IGRlZmF1bHRzIHRvIFFEZXNrdG9wV2ViVmlldyBidXQgY2FuIGJlIHN0YXJ0ZWQK
KyAgICAgICAgaW4gUVRvdWNoV2ViVmlldyBtb2RlIGJ5IHBhc3NpbmcgLXRvdWNoIG9uIHRoZSBj
b21tYW5kIGxpbmUuCisKKyAgICAgICAgQSBsb3Qgb2YgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBy
ZW1vdmVkIGFuZC9vciBkaXNhYmxlZCBmcm9tCisgICAgICAgIE1pbmlCcm93c2VyIHVudGlsIHdl
IHJlaW50cm9kdWNlIHRoZSBuZWNlc3NhcnkgQVBJJ3MuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci9xdC9Ccm93c2VyVmlldy5jcHA6CisgICAgICAgIChCcm93c2VyVmlldzo6QnJvd3NlclZpZXcp
OgorICAgICAgICAoQnJvd3NlclZpZXc6On5Ccm93c2VyVmlldyk6CisgICAgICAgIChCcm93c2Vy
Vmlldzo6bG9hZCk6CisgICAgICAgIChCcm93c2VyVmlldzo6dmlldyk6CisgICAgICAgIChCcm93
c2VyVmlldzo6dG91Y2hXZWJWaWV3KToKKyAgICAgICAgKEJyb3dzZXJWaWV3OjpkZXNrdG9wV2Vi
Vmlldyk6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuaDoKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcDoKKyAgICAgICAgKG5ld1BhZ2VGdW5j
dGlvbik6CisgICAgICAgIChCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KToKKyAgICAgICAg
KEJyb3dzZXJXaW5kb3c6OndlYlZpZXcpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6bmV3V2lu
ZG93KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OnNob3dVc2VyQWdlbnREaWFsb2cpOgorICAg
ICAgICAoQnJvd3NlcldpbmRvdzo6dG9nZ2xlRGlzYWJsZUphdmFTY3JpcHQpOgorICAgICAgICAo
QnJvd3NlcldpbmRvdzo6dG9nZ2xlQXV0b0xvYWRJbWFnZXMpOgorICAgICAgICAoQnJvd3Nlcldp
bmRvdzo6dXBkYXRlVXNlckFnZW50TGlzdCk6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvQnJv
d3NlcldpbmRvdy5oOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGlj
YXRpb24uY3BwOgorICAgICAgICAoTWluaUJyb3dzZXJBcHBsaWNhdGlvbjo6aGFuZGxlVXNlck9w
dGlvbnMpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24u
aDoKKyAgICAgICAgKFdpbmRvd09wdGlvbnM6OldpbmRvd09wdGlvbnMpOgorICAgICAgICAqIE1p
bmlCcm93c2VyL3F0L1VybExvYWRlci5jcHA6CisgICAgICAgIChVcmxMb2FkZXI6OlVybExvYWRl
cik6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcDoKKyAg
ICAgICAgKFdUUjo6V2ViVmlldzo6d2tWaWV3KToKKyAgICAgICAgKFdUUjo6V2ViVmlldzo6cGFn
ZVJlZik6CisgICAgICAgIChXVFI6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6Ondp
bmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFt
ZSk6CisKIDIwMTEtMDctMDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyVmlldy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9C
cm93c2VyVmlldy5jcHAKaW5kZXggN2Q2NDI2ZS4uNWIyYThlZCAxMDA2NDQKLS0tIGEvVG9vbHMv
TWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0
L0Jyb3dzZXJWaWV3LmNwcApAQCAtMjksMTIgKzI5LDE5IEBACiAjaW5jbHVkZSAiQnJvd3NlclZp
ZXcuaCIKIAogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgorI2luY2x1ZGUgPHFkZXNrdG9wd2Vi
dmlldy5oPgorI2luY2x1ZGUgPHF0b3VjaHdlYnZpZXcuaD4KKyNpbmNsdWRlIDxxdG91Y2h3ZWJw
YWdlLmg+CiAKLUJyb3dzZXJWaWV3OjpCcm93c2VyVmlldyhRR3JhcGhpY3NXS1ZpZXc6OkJhY2tp
bmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSwgUVdLQ29udGV4dCogY29udGV4dCwgUVdpZGdl
dCogcGFyZW50KQorQnJvd3NlclZpZXc6OkJyb3dzZXJWaWV3KGJvb2wgdXNlVG91Y2hXZWJWaWV3
LCBRV2lkZ2V0KiBwYXJlbnQpCiAgICAgOiBRR3JhcGhpY3NWaWV3KHBhcmVudCkKICAgICAsIG1f
aXRlbSgwKQogewotICAgIG1faXRlbSA9IG5ldyBRR3JhcGhpY3NXS1ZpZXcoY29udGV4dCwgYmFj
a2luZ1N0b3JlVHlwZSwgMCk7CisgICAgaWYgKHVzZVRvdWNoV2ViVmlldykKKyAgICAgICAgbV9p
dGVtID0gbmV3IFFUb3VjaFdlYlZpZXc7CisgICAgZWxzZQorICAgICAgICBtX2l0ZW0gPSBuZXcg
UURlc2t0b3BXZWJWaWV3OworCiAgICAgc2V0U2NlbmUobmV3IFFHcmFwaGljc1NjZW5lKHRoaXMp
KTsKICAgICBzY2VuZSgpLT5hZGRJdGVtKG1faXRlbSk7CiAKQEAgLTQzLDYgKzUwLDEyIEBAIEJy
b3dzZXJWaWV3OjpCcm93c2VyVmlldyhRR3JhcGhpY3NXS1ZpZXc6OkJhY2tpbmdTdG9yZVR5cGUg
YmFja2luZ1N0b3JlVHlwZSwgUVdLCiAgICAgc2V0VmVydGljYWxTY3JvbGxCYXJQb2xpY3koUXQ6
OlNjcm9sbEJhckFsd2F5c09mZik7CiB9CiAKK0Jyb3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcoKQor
eworICAgIGRlbGV0ZSBtX2l0ZW07CisgICAgbV9pdGVtID0gMDsKK30KKwogdm9pZCBCcm93c2Vy
Vmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50KiBldmVudCkKIHsKICAgICBRR3JhcGhpY3NW
aWV3OjpyZXNpemVFdmVudChldmVudCk7CkBAIC01MSwxMiArNjQsMjcgQEAgdm9pZCBCcm93c2Vy
Vmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50KiBldmVudCkKICAgICBzY2VuZSgpLT5zZXRT
Y2VuZVJlY3QocmVjdCk7CiB9CiAKLXZvaWQgQnJvd3NlclZpZXc6OmxvYWQoY29uc3QgUVN0cmlu
ZyYgdXJsKQordm9pZCBCcm93c2VyVmlldzo6bG9hZChjb25zdCBRU3RyaW5nJiB1cmxTdHJpbmcp
CiB7Ci0gICAgcmV0dXJuIG1faXRlbS0+bG9hZChRVXJsOjpmcm9tVXNlcklucHV0KHVybCkpOwor
ICAgIFFVcmwgdXJsKFFVcmw6OmZyb21Vc2VySW5wdXQodXJsU3RyaW5nKSk7CisKKyAgICBpZiAo
ZGVza3RvcFdlYlZpZXcoKSkKKyAgICAgICAgZGVza3RvcFdlYlZpZXcoKS0+bG9hZCh1cmwpOwor
ICAgIGVsc2UgaWYgKHRvdWNoV2ViVmlldygpKQorICAgICAgICB0b3VjaFdlYlZpZXcoKS0+cGFn
ZSgpLT5sb2FkKHVybCk7CiB9CiAKLVFHcmFwaGljc1dLVmlldyogQnJvd3NlclZpZXc6OnZpZXco
KSBjb25zdAorUUdyYXBoaWNzV2lkZ2V0KiBCcm93c2VyVmlldzo6dmlldygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faXRlbTsKIH0KKworUVRvdWNoV2ViVmlldyogQnJvd3NlclZpZXc6OnRvdWNo
V2ViVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHFvYmplY3RfY2FzdDxRVG91Y2hXZWJWaWV3
Kj4obV9pdGVtKTsKK30KKworUURlc2t0b3BXZWJWaWV3KiBCcm93c2VyVmlldzo6ZGVza3RvcFdl
YlZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBxb2JqZWN0X2Nhc3Q8UURlc2t0b3BXZWJWaWV3
Kj4obV9pdGVtKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJW
aWV3LmggYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyVmlldy5oCmluZGV4IDU5MzAwNmUu
LjYxNTQyYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJWaWV3LmgK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlclZpZXcuaApAQCAtMzAsMjQgKzMwLDI4
IEBACiAjZGVmaW5lIEJyb3dzZXJWaWV3X2gKIAogI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+Ci0j
aW5jbHVkZSAicWdyYXBoaWNzd2t2aWV3LmgiCi0jaW5jbHVkZSAicXdrY29udGV4dC5oIgorCitj
bGFzcyBRRGVza3RvcFdlYlZpZXc7CitjbGFzcyBRVG91Y2hXZWJWaWV3OwogCiBjbGFzcyBCcm93
c2VyVmlldyA6IHB1YmxpYyBRR3JhcGhpY3NWaWV3IHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6
Ci0gICAgQnJvd3NlclZpZXcoUUdyYXBoaWNzV0tWaWV3OjpCYWNraW5nU3RvcmVUeXBlLCBRV0tD
b250ZXh0KiwgUVdpZGdldCogcGFyZW50ID0gMCk7Ci0gICAgdmlydHVhbCB+QnJvd3NlclZpZXco
KSB7IGRlbGV0ZSBtX2l0ZW07IH0KKyAgICBCcm93c2VyVmlldyhib29sIHVzZVRvdWNoV2ViVmll
dywgUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+QnJvd3NlclZpZXcoKTsKIAog
ICAgIHZvaWQgbG9hZChjb25zdCBRU3RyaW5nJik7Ci0gICAgUUdyYXBoaWNzV0tWaWV3KiB2aWV3
KCkgY29uc3Q7CisgICAgUUdyYXBoaWNzV2lkZ2V0KiB2aWV3KCkgY29uc3Q7CisKKyAgICBRVG91
Y2hXZWJWaWV3KiB0b3VjaFdlYlZpZXcoKSBjb25zdDsKKyAgICBRRGVza3RvcFdlYlZpZXcqIGRl
c2t0b3BXZWJWaWV3KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVz
aXplRXZlbnQoUVJlc2l6ZUV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgUUdyYXBoaWNzV0tWaWV3
KiBtX2l0ZW07CisgICAgUUdyYXBoaWNzV2lkZ2V0KiBtX2l0ZW07CiB9OwogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKaW5kZXggYmEwY2UzNC4uYjNhMTBiNiAx
MDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKKysrIGIv
VG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKQEAgLTI5LDI1ICsyOSwyNiBA
QAogI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKIAogI2luY2x1ZGUgIlVybExvYWRlci5oIgot
I2luY2x1ZGUgInF3a3ByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3Lmgi
CisjaW5jbHVkZSAicXRvdWNod2Vidmlldy5oIgorI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIK
IAogI2lmIGRlZmluZWQoUVRfQ09ORklHVVJFRF9XSVRIX09QRU5HTCkKICNpbmNsdWRlIDxRR0xX
aWRnZXQ+CiAjZW5kaWYKIAorI2lmIDAKKy8vIEZJWE1FCiBzdGF0aWMgUVdLUGFnZSogbmV3UGFn
ZUZ1bmN0aW9uKFFXS1BhZ2UqIHBhZ2UpCiB7Ci0gICAgQnJvd3NlcldpbmRvdyogd2luZG93ID0g
bmV3IEJyb3dzZXJXaW5kb3cocGFnZS0+Y29udGV4dCgpKTsKKyAgICBCcm93c2VyV2luZG93KiB3
aW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdygpOwogICAgIHJldHVybiB3aW5kb3ctPnBhZ2UoKTsK
IH0KKyNlbmRpZgogCi1RVmVjdG9yPHFyZWFsPiBCcm93c2VyV2luZG93OjptX3pvb21MZXZlbHM7
Ci0KLUJyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3coUVdLQ29udGV4dCogY29udGV4dCwgV2lu
ZG93T3B0aW9ucyogb3B0aW9ucykKLSAgICA6IG1faXNab29tVGV4dE9ubHkoZmFsc2UpCi0gICAg
LCBtX2N1cnJlbnRab29tKDEpCi0gICAgLCBtX3VybExvYWRlcigwKQotICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCitCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFdpbmRvd09wdGlvbnMqIG9w
dGlvbnMpCisgICAgOiBtX3VybExvYWRlcigwKQorICAgICwgbV9icm93c2VyKDApCiB7CiAgICAg
aWYgKG9wdGlvbnMpCiAgICAgICAgIG1fd2luZG93T3B0aW9ucyA9ICpvcHRpb25zOwpAQCAtNTYs
MTAgKzU3LDcgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhRV0tDb250ZXh0KiBjb250
ZXh0LCBXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogICAgICAgICBtX3dpbmRvd09wdGlvbnMgPSB0
bXBPcHRpb25zOwogICAgIH0KIAotICAgIGlmIChtX3dpbmRvd09wdGlvbnMudXNlVGlsZWRCYWNr
aW5nU3RvcmUpCi0gICAgICAgIG1fYnJvd3NlciA9IG5ldyBCcm93c2VyVmlldyhRR3JhcGhpY3NX
S1ZpZXc6OlRpbGVkLCBjb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYnJvd3NlciA9IG5l
dyBCcm93c2VyVmlldyhRR3JhcGhpY3NXS1ZpZXc6OlNpbXBsZSwgY29udGV4dCk7CisgICAgbV9i
cm93c2VyID0gbmV3IEJyb3dzZXJWaWV3KG1fd2luZG93T3B0aW9ucy51c2VUb3VjaFdlYlZpZXcp
OwogCiAjaWYgZGVmaW5lZChRVF9DT05GSUdVUkVEX1dJVEhfT1BFTkdMKQogICAgIGlmIChtX3dp
bmRvd09wdGlvbnMudXNlUUdMV2lkZ2V0Vmlld3BvcnQpCkBAIC02OCwxMiArNjYsMTUgQEAgQnJv
d3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhRV0tDb250ZXh0KiBjb250ZXh0LCBXaW5kb3dPcHRp
b25zKiBvcHRpb25zKQogCiAgICAgc2V0QXR0cmlidXRlKFF0OjpXQV9EZWxldGVPbkNsb3NlKTsK
IAotICAgIGNvbm5lY3QobV9icm93c2VyLT52aWV3KCksIFNJR05BTChsb2FkUHJvZ3Jlc3MoaW50
KSksIFNMT1QobG9hZFByb2dyZXNzKGludCkpKTsKLSAgICBjb25uZWN0KG1fYnJvd3Nlci0+dmll
dygpLCBTSUdOQUwodGl0bGVDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmKSksIFNMT1Qoc2V0V2luZG93
VGl0bGUoY29uc3QgUVN0cmluZyYpKSk7Ci0gICAgY29ubmVjdChtX2Jyb3dzZXItPnZpZXcoKSwg
U0lHTkFMKHVybENoYW5nZWQoY29uc3QgUVVybCYpKSwgU0xPVCh1cmxDaGFuZ2VkKGNvbnN0IFFV
cmwmKSkpOworICAgIGNvbm5lY3Qod2ViVmlldygpLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkp
LCBTTE9UKGxvYWRQcm9ncmVzcyhpbnQpKSk7CisgICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05B
TCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLCBTTE9UKHNldFdpbmRvd1RpdGxlKFFTdHJpbmcpKSk7
CisgICAgY29ubmVjdCh3ZWJWaWV3KCksIFNJR05BTCh1cmxDaGFuZ2VkKFFVcmwpKSwgU0xPVCh1
cmxDaGFuZ2VkKFFVcmwpKSk7CiAKICAgICBpZiAobV93aW5kb3dPcHRpb25zLnByaW50TG9hZGVk
VXJscykKLSAgICAgICAgY29ubmVjdChwYWdlKCksIFNJR05BTCh1cmxDaGFuZ2VkKFFVcmwpKSwg
dGhpcywgU0xPVChwcmludFVSTChRVXJsKSkpOworICAgICAgICBjb25uZWN0KHdlYlZpZXcoKSwg
U0lHTkFMKHVybENoYW5nZWQoUVVybCkpLCB0aGlzLCBTTE9UKHByaW50VVJMKFFVcmwpKSk7CisK
KyAgICBpZiAoUURlc2t0b3BXZWJWaWV3KiBjb25zdCBkZXNrdG9wV2ViVmlldyA9IG1fYnJvd3Nl
ci0+ZGVza3RvcFdlYlZpZXcoKSkKKyAgICAgICAgY29ubmVjdChkZXNrdG9wV2ViVmlldywgU0lH
TkFMKHN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2VkKFFTdHJpbmcpKSwgc3RhdHVzQmFyKCksIFNMT1Qo
c2hvd01lc3NhZ2UoUVN0cmluZykpKTsKIAogICAgIHRoaXMtPnNldENlbnRyYWxXaWRnZXQobV9i
cm93c2VyKTsKICAgICBtX2Jyb3dzZXItPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsK
QEAgLTg0LDYgKzg1LDcgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhRV0tDb250ZXh0
KiBjb250ZXh0LCBXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogICAgIGZpbGVNZW51LT5hZGRTZXBh
cmF0b3IoKTsKICAgICBmaWxlTWVudS0+YWRkQWN0aW9uKCJRdWl0IiwgdGhpcywgU0xPVChjbG9z
ZSgpKSk7CiAKKyNpZiAwCiAgICAgUU1lbnUqIGVkaXRNZW51ID0gbWVudUJhcigpLT5hZGRNZW51
KCImRWRpdCIpOwogICAgIFFBY3Rpb24qIHVuZG8gPSBwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpV
bmRvKTsKICAgICB1bmRvLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUUtleVNlcXVlbmNlOjpV
bmRvKSk7CkBAIC05NywxOCArOTksOCBAQCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFFX
S0NvbnRleHQqIGNvbnRleHQsIFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCiAgICAgdmlld01lbnUt
PmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpTdG9wKSk7CiAgICAgdmlld01lbnUt
PmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpSZWxvYWQpKTsKICAgICB2aWV3TWVu
dS0+YWRkU2VwYXJhdG9yKCk7Ci0gICAgUUFjdGlvbiogem9vbUluID0gdmlld01lbnUtPmFkZEFj
dGlvbigiWm9vbSAmSW4iLCB0aGlzLCBTTE9UKHpvb21JbigpKSk7Ci0gICAgUUFjdGlvbiogem9v
bU91dCA9IHZpZXdNZW51LT5hZGRBY3Rpb24oIlpvb20gJk91dCIsIHRoaXMsIFNMT1Qoem9vbU91
dCgpKSk7Ci0gICAgUUFjdGlvbiogcmVzZXRab29tID0gdmlld01lbnUtPmFkZEFjdGlvbigiUmVz
ZXQgWm9vbSIsIHRoaXMsIFNMT1QocmVzZXRab29tKCkpKTsKLSAgICBRQWN0aW9uKiB6b29tVGV4
dCA9IHZpZXdNZW51LT5hZGRBY3Rpb24oIlpvb20gVGV4dCBPbmx5IiwgdGhpcywgU0xPVCh0b2dn
bGVab29tVGV4dE9ubHkoYm9vbCkpKTsKLSAgICB6b29tVGV4dC0+c2V0Q2hlY2thYmxlKHRydWUp
OwotICAgIHpvb21UZXh0LT5zZXRDaGVja2VkKGZhbHNlKTsKLSAgICB2aWV3TWVudS0+YWRkU2Vw
YXJhdG9yKCk7CiAgICAgdmlld01lbnUtPmFkZEFjdGlvbigiVGFrZSBTY3JlZW4gU2hvdC4uLiIs
IHRoaXMsIFNMT1Qoc2NyZWVuc2hvdCgpKSk7Ci0KLSAgICB6b29tSW4tPnNldFNob3J0Y3V0KFFL
ZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpLZXlfUGx1cykpOwotICAgIHpvb21PdXQtPnNldFNo
b3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpLZXlfTWludXMpKTsKLSAgICByZXNl
dFpvb20tPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpLZXlfMCkpOwor
I2VuZGlmCiAKICAgICBRTWVudSogd2luZG93TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJldp
bmRvdyIpOwogICAgIFFBY3Rpb24qIHRvZ2dsZUZ1bGxTY3JlZW4gPSB3aW5kb3dNZW51LT5hZGRB
Y3Rpb24oIlRvZ2dsZSBGdWxsU2NyZWVuIiwgdGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVu
TW9kZShib29sKSkpOwpAQCAtMTIxLDkgKzExMyw2IEBAIEJyb3dzZXJXaW5kb3c6OkJyb3dzZXJX
aW5kb3coUVdLQ29udGV4dCogY29udGV4dCwgV2luZG93T3B0aW9ucyogb3B0aW9ucykKICAgICBj
b25uZWN0KHRoaXMsIFNJR05BTChlbnRlcmVkRnVsbFNjcmVlbk1vZGUoYm9vbCkpLCB0aGlzLCBT
TE9UKHRvZ2dsZUZ1bGxTY3JlZW5Nb2RlKGJvb2wpKSk7CiAKICAgICBRTWVudSogdG9vbHNNZW51
ID0gbWVudUJhcigpLT5hZGRNZW51KCImRGV2ZWxvcCIpOwotICAgIFFBY3Rpb24qIHRvZ2dsZUZy
YW1lRmxhdHRlbmluZyA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgRnJhbWUgRmxhdHRl
bmluZyIsIHRoaXMsIFNMT1QodG9nZ2xlRnJhbWVGbGF0dGVuaW5nKGJvb2wpKSk7Ci0gICAgdG9n
Z2xlRnJhbWVGbGF0dGVuaW5nLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgdG9nZ2xlRnJhbWVG
bGF0dGVuaW5nLT5zZXRDaGVja2VkKGZhbHNlKTsKICNpZiBkZWZpbmVkKFFUX0NPTkZJR1VSRURf
V0lUSF9PUEVOR0wpCiAgICAgUUFjdGlvbiogdG9nZ2xlR0xWaWV3cG9ydCA9IHRvb2xzTWVudS0+
YWRkQWN0aW9uKCJUb2dnbGUgR0wgVmlld3BvcnQiLCB0aGlzLCBTTE9UKHRvZ2dsZUdMVmlld3Bv
cnQoYm9vbCkpKTsKICAgICB0b2dnbGVHTFZpZXdwb3J0LT5zZXRDaGVja2FibGUodHJ1ZSk7CkBA
IC0xNDksMTAgKzEzOCwxMiBAQCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFFXS0NvbnRl
eHQqIGNvbnRleHQsIFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCiAjaWYgZGVmaW5lZChRX09TX1NZ
TUJJQU4pCiAgICAgYmFyLT5zZXRJY29uU2l6ZShRU2l6ZSgxNiwgMTYpKTsKICNlbmRpZgorI2lm
IDAKICAgICBiYXItPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpCYWNrKSk7CiAg
ICAgYmFyLT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6Rm9yd2FyZCkpOwogICAg
IGJhci0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXS1BhZ2U6OlJlbG9hZCkpOwogICAgIGJh
ci0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXS1BhZ2U6OlN0b3ApKTsKKyNlbmRpZgogI2lm
IGRlZmluZWQoUV9PU19TWU1CSUFOKQogICAgIGFkZFRvb2xCYXJCcmVhaygpOwogICAgIGFkZFRv
b2xCYXIoIkxvY2F0aW9uIiktPmFkZFdpZGdldChtX2FkZHJlc3NCYXIpOwpAQCAtMTYzLDE0ICsx
NTQsMTAgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhRV0tDb250ZXh0KiBjb250ZXh0
LCBXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogICAgIFFTaG9ydGN1dCogc2VsZWN0QWRkcmVzc0Jh
ciA9IG5ldyBRU2hvcnRjdXQoUXQ6OkNUUkwgfCBRdDo6S2V5X0wsIHRoaXMpOwogICAgIGNvbm5l
Y3Qoc2VsZWN0QWRkcmVzc0JhciwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgdGhpcywgU0xPVChvcGVu
TG9jYXRpb24oKSkpOwogCisjaWYgMAorICAgIC8vIEZJWE1FCiAgICAgcGFnZSgpLT5zZXRDcmVh
dGVOZXdQYWdlRnVuY3Rpb24obmV3UGFnZUZ1bmN0aW9uKTsKLQotICAgIC8vIHRoZSB6b29tIHZh
bHVlcyBhcmUgY2hvc2VuIHRvIGJlIGxpa2UgaW4gTW96aWxsYSBGaXJlZm94IDMKLSAgICBpZiAo
IW1fem9vbUxldmVscy5jb3VudCgpKSB7Ci0gICAgICAgIG1fem9vbUxldmVscyA8PCAwLjMgPDwg
MC41IDw8IDAuNjcgPDwgMC44IDw8IDAuOTsKLSAgICAgICAgbV96b29tTGV2ZWxzIDw8IDE7Ci0g
ICAgICAgIG1fem9vbUxldmVscyA8PCAxLjEgPDwgMS4yIDw8IDEuMzMgPDwgMS41IDw8IDEuNyA8
PCAyIDw8IDIuNCA8PCAzOwotICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKG1fd2luZG93T3B0aW9u
cy5zdGFydE1heGltaXplZCkKICAgICAgICAgc2V0V2luZG93U3RhdGUod2luZG93U3RhdGUoKSB8
IFF0OjpXaW5kb3dNYXhpbWl6ZWQpOwpAQCAtMTg1LDIxICsxNzIsMTQgQEAgdm9pZCBCcm93c2Vy
V2luZG93Ojpsb2FkKGNvbnN0IFFTdHJpbmcmIHVybCkKICAgICBtX2Jyb3dzZXItPmxvYWQodXJs
KTsKIH0KIAotUVdLUGFnZSogQnJvd3NlcldpbmRvdzo6cGFnZSgpCitRT2JqZWN0KiBCcm93c2Vy
V2luZG93Ojp3ZWJWaWV3KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9icm93c2VyLT52aWV3KCkt
PnBhZ2UoKTsKKyAgICByZXR1cm4gbV9icm93c2VyLT50b3VjaFdlYlZpZXcoKSA/IHN0YXRpY19j
YXN0PFFPYmplY3QqPihtX2Jyb3dzZXItPnRvdWNoV2ViVmlldygpLT5wYWdlKCkpIDogc3RhdGlj
X2Nhc3Q8UU9iamVjdCo+KG1fYnJvd3Nlci0+ZGVza3RvcFdlYlZpZXcoKSk7CiB9CiAKIEJyb3dz
ZXJXaW5kb3cqIEJyb3dzZXJXaW5kb3c6Om5ld1dpbmRvdyhjb25zdCBRU3RyaW5nJiB1cmwpCiB7
Ci0gICAgQnJvd3NlcldpbmRvdyogd2luZG93OwotICAgIGlmIChtX3dpbmRvd09wdGlvbnMudXNl
U2VwYXJhdGVXZWJQcm9jZXNzUGVyV2luZG93KSB7Ci0gICAgICAgIFFXS0NvbnRleHQqIGNvbnRl
eHQgPSBuZXcgUVdLQ29udGV4dCgpOwotICAgICAgICB3aW5kb3cgPSBuZXcgQnJvd3NlcldpbmRv
dyhjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC0+c2V0UGFyZW50KHdpbmRvdyk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHdpbmRvdyA9IG5ldyBCcm93c2VyV2luZG93KG1fY29udGV4dCk7Ci0KKyAg
ICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdygpOwogICAgIHdpbmRv
dy0+bG9hZCh1cmwpOwogICAgIHJldHVybiB3aW5kb3c7CiB9CkBAIC0yODksNDcgKzI2OSw2IEBA
IHZvaWQgQnJvd3NlcldpbmRvdzo6c2NyZWVuc2hvdCgpCiAjZW5kaWYKIH0KIAotdm9pZCBCcm93
c2VyV2luZG93Ojp6b29tSW4oKQotewotICAgIGlmIChtX2lzWm9vbVRleHRPbmx5KQotICAgICAg
ICBtX2N1cnJlbnRab29tID0gcGFnZSgpLT50ZXh0Wm9vbUZhY3RvcigpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jdXJyZW50Wm9vbSA9IHBhZ2UoKS0+cGFnZVpvb21GYWN0b3IoKTsKLQotICAgIGlu
dCBpID0gbV96b29tTGV2ZWxzLmluZGV4T2YobV9jdXJyZW50Wm9vbSk7Ci0gICAgUV9BU1NFUlQo
aSA+PSAwKTsKLSAgICBpZiAoaSA8IG1fem9vbUxldmVscy5jb3VudCgpIC0gMSkKLSAgICAgICAg
bV9jdXJyZW50Wm9vbSA9IG1fem9vbUxldmVsc1tpICsgMV07Ci0KLSAgICBhcHBseVpvb20oKTsK
LX0KLQotdm9pZCBCcm93c2VyV2luZG93Ojp6b29tT3V0KCkKLXsKLSAgICBpZiAobV9pc1pvb21U
ZXh0T25seSkKLSAgICAgICAgbV9jdXJyZW50Wm9vbSA9IHBhZ2UoKS0+dGV4dFpvb21GYWN0b3Io
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudFpvb20gPSBwYWdlKCktPnBhZ2Vab29tRmFj
dG9yKCk7Ci0KLSAgICBpbnQgaSA9IG1fem9vbUxldmVscy5pbmRleE9mKG1fY3VycmVudFpvb20p
OwotICAgIFFfQVNTRVJUKGkgPj0gMCk7Ci0gICAgaWYgKGkgPiAwKQotICAgICAgICBtX2N1cnJl
bnRab29tID0gbV96b29tTGV2ZWxzW2kgLSAxXTsKLQotICAgIGFwcGx5Wm9vbSgpOwotfQotCi12
b2lkIEJyb3dzZXJXaW5kb3c6OnJlc2V0Wm9vbSgpCi17Ci0gICAgbV9jdXJyZW50Wm9vbSA9IDE7
Ci0gICAgYXBwbHlab29tKCk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6dG9nZ2xlWm9vbVRl
eHRPbmx5KGJvb2wgYikKLXsKLSAgICBtX2lzWm9vbVRleHRPbmx5ID0gYjsKLX0KLQogdm9pZCBC
cm93c2VyV2luZG93Ojp0b2dnbGVGdWxsU2NyZWVuTW9kZShib29sIGVuYWJsZSkKIHsKICAgICBi
b29sIGFscmVhZHlFbmFibGVkID0gd2luZG93U3RhdGUoKSAmIFF0OjpXaW5kb3dGdWxsU2NyZWVu
OwpAQCAtMzM3LDE0ICsyNzYsMTAgQEAgdm9pZCBCcm93c2VyV2luZG93Ojp0b2dnbGVGdWxsU2Ny
ZWVuTW9kZShib29sIGVuYWJsZSkKICAgICAgICAgc2V0V2luZG93U3RhdGUod2luZG93U3RhdGUo
KSBeIFF0OjpXaW5kb3dGdWxsU2NyZWVuKTsKIH0KIAotdm9pZCBCcm93c2VyV2luZG93Ojp0b2dn
bGVGcmFtZUZsYXR0ZW5pbmcoYm9vbCB0b2dnbGUpCi17Ci0gICAgcGFnZSgpLT5wcmVmZXJlbmNl
cygpLT5zZXRBdHRyaWJ1dGUoUVdLUHJlZmVyZW5jZXM6OkZyYW1lRmxhdHRlbmluZ0VuYWJsZWQs
IHRvZ2dsZSk7Ci19Ci0KLQogdm9pZCBCcm93c2VyV2luZG93OjpzaG93VXNlckFnZW50RGlhbG9n
KCkKIHsKKyNpZiAwCisgICAgLy8gRklYTUUKICAgICB1cGRhdGVVc2VyQWdlbnRMaXN0KCk7CiAK
ICAgICBRRGlhbG9nIGRpYWxvZyh0aGlzKTsKQEAgLTM3MCw2ICszMDUsNyBAQCB2b2lkIEJyb3dz
ZXJXaW5kb3c6OnNob3dVc2VyQWdlbnREaWFsb2coKQogCiAgICAgaWYgKGRpYWxvZy5leGVjKCkg
JiYgIWNvbWJvLT5jdXJyZW50VGV4dCgpLmlzRW1wdHkoKSkKICAgICAgICAgcGFnZSgpLT5zZXRD
dXN0b21Vc2VyQWdlbnQoY29tYm8tPmN1cnJlbnRUZXh0KCkpOworI2VuZGlmCiB9CiAKIHZvaWQg
QnJvd3NlcldpbmRvdzo6bG9hZFVSTExpc3RGcm9tRmlsZSgpCkBAIC0zOTQsMTYgKzMzMCwyNCBA
QCB2b2lkIEJyb3dzZXJXaW5kb3c6OnByaW50VVJMKGNvbnN0IFFVcmwmIHVybCkKIAogdm9pZCBC
cm93c2VyV2luZG93Ojp0b2dnbGVEaXNhYmxlSmF2YVNjcmlwdChib29sIGVuYWJsZSkKIHsKKyNp
ZiAwCisgICAgLy8gRklYTUUKICAgICBwYWdlKCktPnByZWZlcmVuY2VzKCktPnNldEF0dHJpYnV0
ZShRV0tQcmVmZXJlbmNlczo6SmF2YXNjcmlwdEVuYWJsZWQsICFlbmFibGUpOworI2VuZGlmCiB9
CiAKIHZvaWQgQnJvd3NlcldpbmRvdzo6dG9nZ2xlQXV0b0xvYWRJbWFnZXMoYm9vbCBlbmFibGUp
CiB7CisjaWYgMAorICAgIC8vIEZJWE1FCiAgICAgcGFnZSgpLT5wcmVmZXJlbmNlcygpLT5zZXRB
dHRyaWJ1dGUoUVdLUHJlZmVyZW5jZXM6OkF1dG9Mb2FkSW1hZ2VzLCAhZW5hYmxlKTsKKyNlbmRp
ZgogfQogCiB2b2lkIEJyb3dzZXJXaW5kb3c6OnVwZGF0ZVVzZXJBZ2VudExpc3QoKQogeworI2lm
IDAKKyAgICAvLyBGSVhNRQogICAgIFFGaWxlIGZpbGUoIjovdXNlcmFnZW50bGlzdC50eHQiKTsK
IAogICAgIGlmIChmaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSkpIHsKQEAgLTQxOSwxNCAr
MzYzLDcgQEAgdm9pZCBCcm93c2VyV2luZG93Ojp1cGRhdGVVc2VyQWdlbnRMaXN0KCkKICAgICBR
V0tQYWdlKiB3a1BhZ2UgPSBwYWdlKCk7CiAgICAgaWYgKCEod2tQYWdlLT5jdXN0b21Vc2VyQWdl
bnQoKS5pc0VtcHR5KCkgfHwgbV91c2VyQWdlbnRMaXN0LmNvbnRhaW5zKHdrUGFnZS0+Y3VzdG9t
VXNlckFnZW50KCkpKSkKICAgICAgICAgbV91c2VyQWdlbnRMaXN0IDw8IHdrUGFnZS0+Y3VzdG9t
VXNlckFnZW50KCk7Ci19Ci0KLXZvaWQgQnJvd3NlcldpbmRvdzo6YXBwbHlab29tKCkKLXsKLSAg
ICBpZiAobV9pc1pvb21UZXh0T25seSkKLSAgICAgICAgcGFnZSgpLT5zZXRUZXh0Wm9vbUZhY3Rv
cihtX2N1cnJlbnRab29tKTsKLSAgICBlbHNlCi0gICAgICAgIHBhZ2UoKS0+c2V0UGFnZVpvb21G
YWN0b3IobV9jdXJyZW50Wm9vbSk7CisjZW5kaWYKIH0KIAogQnJvd3NlcldpbmRvdzo6fkJyb3dz
ZXJXaW5kb3coKQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRv
dy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5oCmluZGV4IGZlYWVhYjAu
LjZjNDQyOGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cu
aAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmgKQEAgLTQxLDExICs0
MSwxMSBAQCBjbGFzcyBCcm93c2VyV2luZG93IDogcHVibGljIFFNYWluV2luZG93IHsKICAgICBR
X09CSkVDVAogCiBwdWJsaWM6Ci0gICAgQnJvd3NlcldpbmRvdyhRV0tDb250ZXh0KiwgV2luZG93
T3B0aW9ucyogPSAwKTsKKyAgICBCcm93c2VyV2luZG93KFdpbmRvd09wdGlvbnMqID0gMCk7CiAg
ICAgfkJyb3dzZXJXaW5kb3coKTsKICAgICB2b2lkIGxvYWQoY29uc3QgUVN0cmluZyYgdXJsKTsK
IAotICAgIFFXS1BhZ2UqIHBhZ2UoKTsKKyAgICBRT2JqZWN0KiB3ZWJWaWV3KCkgY29uc3Q7CiAK
IHB1YmxpYyBzbG90czoKICAgICBCcm93c2VyV2luZG93KiBuZXdXaW5kb3coY29uc3QgUVN0cmlu
ZyYgdXJsID0gImFib3V0OmJsYW5rIik7CkBAIC02MCwxNSArNjAsMTAgQEAgcHJvdGVjdGVkIHNs
b3RzOgogICAgIHZvaWQgdXJsQ2hhbmdlZChjb25zdCBRVXJsJik7CiAgICAgdm9pZCBvcGVuRmls
ZSgpOwogCi0gICAgdm9pZCB6b29tSW4oKTsKLSAgICB2b2lkIHpvb21PdXQoKTsKLSAgICB2b2lk
IHJlc2V0Wm9vbSgpOwotICAgIHZvaWQgdG9nZ2xlWm9vbVRleHRPbmx5KGJvb2wgb24pOwogICAg
IHZvaWQgc2NyZWVuc2hvdCgpOwogCiAgICAgdm9pZCB0b2dnbGVGdWxsU2NyZWVuTW9kZShib29s
IGVuYWJsZSk7CiAKLSAgICB2b2lkIHRvZ2dsZUZyYW1lRmxhdHRlbmluZyhib29sKTsKICAgICB2
b2lkIHNob3dVc2VyQWdlbnREaWFsb2coKTsKIAogICAgIHZvaWQgbG9hZFVSTExpc3RGcm9tRmls
ZSgpOwpAQCAtODIsMTQgKzc3LDcgQEAgcHJvdGVjdGVkIHNsb3RzOgogcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZVVzZXJBZ2VudExpc3QoKTsKIAotICAgIHZvaWQgYXBwbHlab29tKCk7Ci0KLSAg
ICBzdGF0aWMgUVZlY3RvcjxxcmVhbD4gbV96b29tTGV2ZWxzOwotICAgIGJvb2wgbV9pc1pvb21U
ZXh0T25seTsKLSAgICBxcmVhbCBtX2N1cnJlbnRab29tOwotCiAgICAgVXJsTG9hZGVyKiBtX3Vy
bExvYWRlcjsKLSAgICBRV0tDb250ZXh0KiBtX2NvbnRleHQ7CiAgICAgV2luZG93T3B0aW9ucyBt
X3dpbmRvd09wdGlvbnM7CiAgICAgQnJvd3NlclZpZXcqIG1fYnJvd3NlcjsKICAgICBRTGluZUVk
aXQqIG1fYWRkcmVzc0JhcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlC
cm93c2VyQXBwbGljYXRpb24uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJB
cHBsaWNhdGlvbi5jcHAKaW5kZXggMDIwNzA3ZC4uZWIyZDk0ZCAxMDA2NDQKLS0tIGEvVG9vbHMv
TWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAKQEAgLTU1LDEyICs1NSwxMiBA
QCB2b2lkIE1pbmlCcm93c2VyQXBwbGljYXRpb246OmhhbmRsZVVzZXJPcHRpb25zKCkKIAogICAg
IGlmIChhcmdzLmNvbnRhaW5zKCItaGVscCIpKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJVc2Fn
ZToiIDw8IHByb2dyYW1OYW1lLnRvTGF0aW4xKCkuZGF0YSgpCisgICAgICAgICAgICAgPDwgIlst
dG91Y2hdIgogICAgICAgICAgICAgIDw8ICJbLW1heGltaXplXSIKICAgICAgICAgICAgICA8PCAi
Wy1yIGxpc3RdIgogICAgICAgICAgICAgIDw8ICJbLXJvYm90LXRpbWVvdXQgc2Vjb25kc10iCiAg
ICAgICAgICAgICAgPDwgIlstcm9ib3QtZXh0cmEtdGltZSBzZWNvbmRzXSIKICAgICAgICAgICAg
ICA8PCAiWy1jaHVua2VkLWRyYXdpbmctYXJlYV0iCi0gICAgICAgICAgICAgPDwgICJbLXNlcGFy
YXRlLXdlYi1wcm9jZXNzLXBlci13aW5kb3ddIgogICAgICAgICAgICAgIDw8ICJbLXByaW50LWxv
YWRlZC11cmxzXSIKICNpZiBkZWZpbmVkKFFUX0NPTkZJR1VSRURfV0lUSF9PUEVOR0wpCiAgICAg
ICAgICAgICAgPDwgIlstZ2wtdmlld3BvcnRdIgpAQCAtNjksNiArNjksOSBAQCB2b2lkIE1pbmlC
cm93c2VyQXBwbGljYXRpb246OmhhbmRsZVVzZXJPcHRpb25zKCkKICAgICAgICAgYXBwUXVpdCgw
KTsKICAgICB9CiAKKyAgICBpZiAoYXJncy5jb250YWlucygiLXRvdWNoIikpCisgICAgICAgIG1f
d2luZG93T3B0aW9ucy51c2VUb3VjaFdlYlZpZXcgPSB0cnVlOworCiAgICAgaWYgKGFyZ3MuY29u
dGFpbnMoIi1tYXhpbWl6ZSIpKQogICAgICAgICBtX3dpbmRvd09wdGlvbnMuc3RhcnRNYXhpbWl6
ZWQgPSB0cnVlOwogCkBAIC05NSwxMiArOTgsNiBAQCB2b2lkIE1pbmlCcm93c2VyQXBwbGljYXRp
b246OmhhbmRsZVVzZXJPcHRpb25zKCkKICAgICBpZiAocm9ib3RFeHRyYVRpbWVJbmRleCAhPSAt
MSkKICAgICAgICAgbV9yb2JvdEV4dHJhVGltZVNlY29uZHMgPSB0YWtlT3B0aW9uVmFsdWUoJmFy
Z3MsIHJvYm90RXh0cmFUaW1lSW5kZXgpLnRvSW50KCk7CiAKLSAgICBpZiAoYXJncy5jb250YWlu
cygiLWNodW5rZWQtZHJhd2luZy1hcmVhIikpCi0gICAgICAgIG1fd2luZG93T3B0aW9ucy51c2VU
aWxlZEJhY2tpbmdTdG9yZSA9IGZhbHNlOwotCi0gICAgaWYgKGFyZ3MuY29udGFpbnMoIi1zZXBh
cmF0ZS13ZWItcHJvY2Vzcy1wZXItd2luZG93IikpCi0gICAgICAgIG1fd2luZG93T3B0aW9ucy51
c2VTZXBhcmF0ZVdlYlByb2Nlc3NQZXJXaW5kb3cgPSB0cnVlOwotCiAgICAgaWYgKGFyZ3MuY29u
dGFpbnMoIi1wcmludC1sb2FkZWQtdXJscyIpKQogICAgICAgICBtX3dpbmRvd09wdGlvbnMucHJp
bnRMb2FkZWRVcmxzID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQv
TWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dz
ZXJBcHBsaWNhdGlvbi5oCmluZGV4IGM2OGI4NTguLjRkYjQyNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uaAorKysgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgKQEAgLTM0LDkgKzM0LDggQEAKIAog
c3RydWN0IFdpbmRvd09wdGlvbnMgewogICAgIFdpbmRvd09wdGlvbnMoKQotICAgICAgICA6IHVz
ZVRpbGVkQmFja2luZ1N0b3JlKHRydWUpCi0gICAgICAgICwgdXNlU2VwYXJhdGVXZWJQcm9jZXNz
UGVyV2luZG93KGZhbHNlKQotICAgICAgICAsIHByaW50TG9hZGVkVXJscyhmYWxzZSkKKyAgICAg
ICAgOiBwcmludExvYWRlZFVybHMoZmFsc2UpCisgICAgICAgICwgdXNlVG91Y2hXZWJWaWV3KGZh
bHNlKQogI2lmIGRlZmluZWQoUV9PU19TWU1CSUFOKQogICAgICAgICAsIHN0YXJ0TWF4aW1pemVk
KHRydWUpCiAjZWxzZQpAQCAtNDgsOSArNDcsOCBAQCBzdHJ1Y3QgV2luZG93T3B0aW9ucyB7CiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgdXNlVGlsZWRCYWNraW5nU3RvcmU7Ci0gICAgYm9vbCB1
c2VTZXBhcmF0ZVdlYlByb2Nlc3NQZXJXaW5kb3c7CiAgICAgYm9vbCBwcmludExvYWRlZFVybHM7
CisgICAgYm9vbCB1c2VUb3VjaFdlYlZpZXc7CiAgICAgYm9vbCBzdGFydE1heGltaXplZDsKICNp
ZiBkZWZpbmVkKFFUX0NPTkZJR1VSRURfV0lUSF9PUEVOR0wpCiAgICAgYm9vbCB1c2VRR0xXaWRn
ZXRWaWV3cG9ydDsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5j
cHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9VcmxMb2FkZXIuY3BwCmluZGV4IDU0ODU0YzguLjk0
ZDk0ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHAKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvVXJsTG9hZGVyLmNwcApAQCAtNDEsMTMgKzQxLDEzIEBA
IFVybExvYWRlcjo6VXJsTG9hZGVyKEJyb3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5kb3csIGNvbnN0
IFFTdHJpbmcmIGlucHV0RmlsZU5hbWUsCiAgICAgbV9jaGVja0lmRmluaXNoZWRUaW1lci5zZXRT
aW5nbGVTaG90KHRydWUpOwogICAgIGNvbm5lY3QoJm1fY2hlY2tJZkZpbmlzaGVkVGltZXIsIFNJ
R05BTCh0aW1lb3V0KCkpLCB0aGlzLCBTTE9UKGNoZWNrSWZGaW5pc2hlZCgpKSk7CiAgICAgLy8g
bG9hZFN0YXJ0ZWQgYW5kIGxvYWRGaW5pc2hlZCBvbiBRV2ViUGFnZSBpcyBlbWl0dGVkIGZvciBl
YWNoIGZyYW1lL3N1Yi1mcmFtZQotICAgIGNvbm5lY3QobV9icm93c2VyV2luZG93LT5wYWdlKCks
IFNJR05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRTdGFydGVkKCkpKTsK
LSAgICBjb25uZWN0KG1fYnJvd3NlcldpbmRvdy0+cGFnZSgpLCBTSUdOQUwobG9hZEZpbmlzaGVk
KGJvb2wpKSwgdGhpcywgU0xPVChmcmFtZUxvYWRGaW5pc2hlZCgpKSk7CisgICAgY29ubmVjdCht
X2Jyb3dzZXJXaW5kb3ctPndlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCB0aGlzLCBT
TE9UKGZyYW1lTG9hZFN0YXJ0ZWQoKSkpOworICAgIGNvbm5lY3QobV9icm93c2VyV2luZG93LT53
ZWJWaWV3KCksIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpLCB0aGlzLCBTTE9UKGZyYW1lTG9h
ZEZpbmlzaGVkKCkpKTsKIAogICAgIGlmICh0aW1lb3V0U2Vjb25kcykgewogICAgICAgICBtX3Rp
bWVvdXRUaW1lci5zZXRJbnRlcnZhbCh0aW1lb3V0U2Vjb25kcyAqIDEwMDApOwogICAgICAgICBt
X3RpbWVvdXRUaW1lci5zZXRTaW5nbGVTaG90KHRydWUpOwotICAgICAgICBjb25uZWN0KG1fYnJv
d3NlcldpbmRvdy0+cGFnZSgpLCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSksICZtX3RpbWVvdXRUaW1l
ciwgU0xPVChzdGFydCgpKSk7CisgICAgICAgIGNvbm5lY3QobV9icm93c2VyV2luZG93LT53ZWJW
aWV3KCksIFNJR05BTChsb2FkU3RhcnRlZCgpKSwgJm1fdGltZW91dFRpbWVyLCBTTE9UKHN0YXJ0
KCkpKTsKICAgICAgICAgY29ubmVjdCgmbV90aW1lb3V0VGltZXIsIFNJR05BTCh0aW1lb3V0KCkp
LCB0aGlzLCBTTE9UKGxvYWROZXh0KCkpKTsKICAgICB9CiAgICAgaWYgKGV4dHJhVGltZVNlY29u
ZHMpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKaW5kZXggOGIzODkxMi4uMzRiY2UzZSAxMDA2NDQKLS0t
IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
cXQvbWFpbi5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJVcmxMb2FkZXIuaCIKICNp
bmNsdWRlIDxRTGF0aW4xU3RyaW5nPgogI2luY2x1ZGUgPFFSZWdFeHA+Ci0jaW5jbHVkZSA8cWdy
YXBoaWNzd2t2aWV3Lmg+CiAjaW5jbHVkZSA8UXRHdWk+CiAKIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKQEAgLTQwLDggKzM5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIE1pbmlCcm93c2VyQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAg
aWYgKGFwcC5pc1JvYm90aXplZCgpKSB7Ci0gICAgICAgIFFXS0NvbnRleHQqIGNvbnRleHQgPSBu
ZXcgUVdLQ29udGV4dDsKLSAgICAgICAgQnJvd3NlcldpbmRvdyogd2luZG93ID0gbmV3IEJyb3dz
ZXJXaW5kb3coY29udGV4dCwgJmFwcC5tX3dpbmRvd09wdGlvbnMpOworICAgICAgICBCcm93c2Vy
V2luZG93KiB3aW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdygmYXBwLm1fd2luZG93T3B0aW9ucyk7
CiAgICAgICAgIFVybExvYWRlciBsb2FkZXIod2luZG93LCBhcHAudXJscygpLmF0KDApLCBhcHAu
cm9ib3RUaW1lb3V0KCksIGFwcC5yb2JvdEV4dHJhVGltZSgpKTsKICAgICAgICAgbG9hZGVyLmxv
YWROZXh0KCk7CiAgICAgICAgIHdpbmRvdy0+c2hvdygpOwpAQCAtNTgsMTEgKzU2LDcgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgdXJscy5hcHBlbmQoImh0
dHA6Ly93d3cuZ29vZ2xlLmNvbSIpOwogICAgIH0KIAotICAgIFFXS0NvbnRleHQqIGNvbnRleHQg
PSBuZXcgUVdLQ29udGV4dDsKLSAgICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSBuZXcgQnJvd3Nl
cldpbmRvdyhjb250ZXh0LCAmYXBwLm1fd2luZG93T3B0aW9ucyk7Ci0gICAgaWYgKGFwcC5tX3dp
bmRvd09wdGlvbnMudXNlU2VwYXJhdGVXZWJQcm9jZXNzUGVyV2luZG93KQotICAgICAgICBjb250
ZXh0LT5zZXRQYXJlbnQod2luZG93KTsKLQorICAgIEJyb3dzZXJXaW5kb3cqIHdpbmRvdyA9IG5l
dyBCcm93c2VyV2luZG93KCZhcHAubV93aW5kb3dPcHRpb25zKTsKICAgICB3aW5kb3ctPmxvYWQo
dXJscy5hdCgwKSk7CiAKICAgICBmb3IgKGludCBpID0gMTsgaSA8IHVybHMuc2l6ZSgpOyArK2kp
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCmlu
ZGV4IDg1OTRkNDEuLmYwZTJlMGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
cXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQv
UGxhdGZvcm1XZWJWaWV3UXQuY3BwCkBAIC0yNyw4ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJxZ3JhcGhpY3N3
a3ZpZXcuaCIKLSNpbmNsdWRlICJxd2tjb250ZXh0LmgiCisjaW5jbHVkZSAicWRlc2t0b3B3ZWJ2
aWV3LmgiCiAjaW5jbHVkZSA8UXRHdWk+CiAKIG5hbWVzcGFjZSBXVFIgewpAQCAtMzcsMTggKzM2
LDIwIEBAIGNsYXNzIFdlYlZpZXcgOiBwdWJsaWMgUUdyYXBoaWNzVmlldyB7CiBwdWJsaWM6CiAg
ICAgV2ViVmlldyhXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmKTsKIAotICAgIFFHcmFwaGlj
c1dLVmlldyogd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtOyB9CisgICAgUURlc2t0b3BX
ZWJWaWV3KiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiBtX2l0ZW07IH0KKyAgICBXS1BhZ2VSZWYg
cGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS0+cGFnZVJlZigpOyB9CiAKICAgICB2aXJ0
dWFsIH5XZWJWaWV3KCkgeyBkZWxldGUgbV9pdGVtOyB9CiAKIHByaXZhdGU6Ci0gICAgUUdyYXBo
aWNzV0tWaWV3KiBtX2l0ZW07CisgICAgUURlc2t0b3BXZWJWaWV3KiBtX2l0ZW07CiB9OwogCiBX
ZWJWaWV3OjpXZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCiAgICAgOiBRR3JhcGhpY3NWaWV3KCkKLSAgICAsIG1faXRlbShuZXcgUUdy
YXBoaWNzV0tWaWV3KG5ldyBRV0tDb250ZXh0KGNvbnRleHRSZWYsIHRoaXMpLCBwYWdlR3JvdXBS
ZWYpKQorICAgICwgbV9pdGVtKG5ldyBRRGVza3RvcFdlYlZpZXcoY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmKSkKIHsKKyAgICBtX2l0ZW0tPnNldFByZWZlcnJlZFNpemUoODAwLCA2MDApOwogICAg
IHNldFNjZW5lKG5ldyBRR3JhcGhpY3NTY2VuZSh0aGlzKSk7CiAgICAgc2NlbmUoKS0+YWRkSXRl
bShtX2l0ZW0pOwogfQpAQCAtNzgsNyArNzksNyBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVz
aXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIAogV0tQYWdlUmVmIFBsYXRm
b3JtV2ViVmlldzo6cGFnZSgpCiB7Ci0gICAgcmV0dXJuIG1fdmlldy0+d2tWaWV3KCktPnBhZ2Uo
KS0+cGFnZVJlZigpOworICAgIHJldHVybiBtX3ZpZXctPnBhZ2VSZWYoKTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKQEAgLTg4LDE4ICs4OSwxOSBAQCB2b2lkIFBsYXRmb3Jt
V2ViVmlldzo6Zm9jdXMoKQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgp
CiB7Ci0gICAgUVJlY3Qgd2luZG93UmVjdCA9IG1fd2luZG93LT5nZW9tZXRyeSgpOworICAgIC8v
IEltcGxlbWVudC4KKwogICAgIFdLUmVjdCB3a0ZyYW1lOwotICAgIHdrRnJhbWUub3JpZ2luLngg
PSB3aW5kb3dSZWN0LngoKTsKLSAgICB3a0ZyYW1lLm9yaWdpbi55ID0gd2luZG93UmVjdC55KCk7
Ci0gICAgd2tGcmFtZS5zaXplLndpZHRoID0gd2luZG93UmVjdC5zaXplKCkud2lkdGgoKTsKLSAg
ICB3a0ZyYW1lLnNpemUuaGVpZ2h0ID0gd2luZG93UmVjdC5zaXplKCkuaGVpZ2h0KCk7CisgICAg
d2tGcmFtZS5vcmlnaW4ueCA9IDA7CisgICAgd2tGcmFtZS5vcmlnaW4ueSA9IDA7CisgICAgd2tG
cmFtZS5zaXplLndpZHRoID0gMDsKKyAgICB3a0ZyYW1lLnNpemUuaGVpZ2h0ID0gMDsKICAgICBy
ZXR1cm4gd2tGcmFtZTsKIH0KIAotdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1l
KFdLUmVjdCByZWN0KQordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVj
dCkKIHsKLSAgICBtX3dpbmRvdy0+c2V0R2VvbWV0cnkocmVjdC5vcmlnaW4ueCwgcmVjdC5vcmln
aW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KTsKKyAgICAvLyBJbXBsZW1l
bnQuCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>
<flag name="review"
          id="94279"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>