<?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>51249</bug_id>
          
          <creation_ts>2010-12-17 06:32:04 -0800</creation_ts>
          <short_desc>[Qt] Extend the Platform Plugin to support full screen video handler</short_desc>
          <delta_ts>2011-01-24 08:37:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>36663</dependson>
    
    <dependson>37591</dependson>
    
    <dependson>42087</dependson>
    
    <dependson>42897</dependson>
    
    <dependson>43702</dependson>
    
    <dependson>43923</dependson>
    
    <dependson>44013</dependson>
    
    <dependson>44343</dependson>
    
    <dependson>44370</dependson>
    
    <dependson>44577</dependson>
    
    <dependson>44743</dependson>
    
    <dependson>44985</dependson>
    
    <dependson>45263</dependson>
    
    <dependson>45264</dependson>
    
    <dependson>45306</dependson>
    
    <dependson>45694</dependson>
    
    <dependson>46777</dependson>
    
    <dependson>47073</dependson>
    
    <dependson>52521</dependson>
          <blocked>51543</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yi Shen">max.hong.shen</reporter>
          <assigned_to name="Yi Shen">max.hong.shen</assigned_to>
          <cc>ademar</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>hui_huang</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>nancy.piedra</cc>
    
    <cc>ossy</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>323744</commentid>
    <comment_count>0</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2010-12-17 06:32:04 -0800</bug_when>
    <thetext>By extending the platform plugin, the browser vendor can make their own fullscreen video player plugin for playing html5 video.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325581</commentid>
    <comment_count>1</comment_count>
      <attachid>77238</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2010-12-22 11:02:04 -0800</bug_when>
    <thetext>Created attachment 77238
first draft</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325593</commentid>
    <comment_count>2</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2010-12-22 11:20:13 -0800</bug_when>
    <thetext>The patch does three things, 
1) add a new interface, QFullscreenVideoHandler in qwebkitplatformplugin.h
2) add a simple example implementation for the new interface in example/platformplugin
3) add a default fullscreen video handler under webkit\qt\webcoresupport

Both 2) &amp; 3) are very basic implementation. There is no gui for the fullscreen video player, since the overlay (control) widget can&apos;t work well with the qvideowidget. (Qt::WA_TranslucentBackground doesn&apos;t behave as expected on linux for Qt 4.7.1, so the overlay widget fully covers the video widget) There is a Qt bug related this issue and I will go check whether it is gone be fixed in 4.7.2. 

To play or pause the fullscreen video, click space key. To exit fullscreen mode, double click your mouse.

All the suggestions are very very welcomed, especially the design of the new interface &amp; fullscreen class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328170</commentid>
    <comment_count>3</comment_count>
      <attachid>77238</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-12-31 08:05:49 -0800</bug_when>
    <thetext>Comment on attachment 77238
first draft

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

r- for some minor issues.

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:111
&gt; -    m_mediaPlayer-&gt;bind(m_videoItem);
&gt; +    m_mediaPlayer-&gt;setVideoOutput(m_videoItem);

Any explanation why it is changed? It&apos;s not so obvious looking at the patch.

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:592
&gt; +    m_mediaPlayer-&gt;setVideoOutput(static_cast&lt;QGraphicsVideoItem*&gt;(0));

What&apos;s with static cast a null pointer?

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:30
&gt; +#if defined ENABLE_VIDEO &amp;&amp; ENABLE_VIDEO

This is &quot;semi public&quot;, it can&apos;t contain compiler defines from WebKit.

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:121
&gt; +class QFullscreenVideoHandler : public QObject {

This is a new API, so it may require coordinated discussion with the Qt folks.

Also, I guess the convention is to use QWeb- prefix.

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:129
&gt; +    void closeFullscreen();

Does not follow the usual past-tense convention of Qt signal name.

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:148
&gt; +        FullscreenVideoPlayer,

Enum can&apos;t be dependent of compiler define, otherwise it may yield in same value having different meaning.

&gt; WebKit/qt/WebCoreSupport/FullscreenVideoQt.cpp:2
&gt; + * This file is part of the popup menu implementation for &lt;select&gt; elements in WebCore.

Probably not needed.

&gt; WebKit/qt/WebCoreSupport/QtFallbackFullscreenVideoHandler.cpp:3
&gt; + * Copyright (C) 2010 Girish Ramakrishnan &lt;girish@forwardbias.in&gt;
&gt; + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)

Is this a new file or inherited from old one?

&gt; WebKit/qt/WebCoreSupport/QtFallbackFullscreenVideoHandler.h:2
&gt; + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)

Was this worked on really back in 2009?

&gt; WebKit/qt/examples/platformplugin/WebPlugin.h:108
&gt; +    void spaceBtnPressed();

Don&apos;t shorten Button to Btn.

&gt; WebKit/qt/examples/platformplugin/platformplugin.pro:12
&gt; +    DEFINES += ENABLE_VIDEO=1

Shouldn&apos;t this block placed later on? Using this logic, there is no way to explicitly disable video support if the system has Qt Mobility Multimedia.

&gt; WebKit/qt/examples/platformplugin/qwebkitplatformplugin.h:95
&gt; +class QWebHapticFeedbackPlayer: public QObject
&gt;  {
&gt; +    Q_OBJECT
&gt;  public:
&gt; +    QWebHapticFeedbackPlayer() {}
&gt; +    virtual ~QWebHapticFeedbackPlayer() {}
&gt; +

Why is this change needed here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328559</commentid>
    <comment_count>4</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-03 07:14:45 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 77238 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77238&amp;action=review
&gt; 
&gt; r- for some minor issues.
&gt; 
&gt; &gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:111
&gt; &gt; -    m_mediaPlayer-&gt;bind(m_videoItem);
&gt; &gt; +    m_mediaPlayer-&gt;setVideoOutput(m_videoItem);
&gt; 
&gt; Any explanation why it is changed? It&apos;s not so obvious looking at the patch.
&gt; 
The setVideoOutput is a wrapper for the bind function.
void QMediaPlayer::setVideoOutput(QVideoWidget *output) {
    if (d-&gt;videoOutput)
        unbind(d-&gt;videoOutput);
    d-&gt;videoOutput = output;
    if (d-&gt;videoOutput)
        bind(d-&gt;videoOutput);
}
&gt; &gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:592
&gt; &gt; +    m_mediaPlayer-&gt;setVideoOutput(static_cast&lt;QGraphicsVideoItem*&gt;(0));
&gt; 
&gt; What&apos;s with static cast a null pointer?
It is because there are two setVideoOutput with different signature in the QMediaPlayer
void QMediaPlayer::setVideoOutput(QGraphicsVideoItem *output)
void QMediaPlayer::setVideoOutput(QVideoWidget *output)
&gt; 
&gt; &gt; WebKit/qt/Api/qwebkitplatformplugin.h:30
&gt; &gt; +#if defined ENABLE_VIDEO &amp;&amp; ENABLE_VIDEO
&gt; 
&gt; This is &quot;semi public&quot;, it can&apos;t contain compiler defines from WebKit.
&gt; 
Sorry, could you let me know how to handle this? 

Thank you so much for reviewing it. I will fix all other issues you point out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328996</commentid>
    <comment_count>5</comment_count>
      <attachid>77888</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-04 08:12:17 -0800</bug_when>
    <thetext>Created attachment 77888
updated with Ariya&apos;s suggestion

I got one error when running the check-webkit-style,
WebKit/qt/WebCoreSupport/FullscreenVideoQt.h:50:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

50    MediaPlayerPrivateQt* mediaPlayerForNode(Node* node = 0);

Seems it is a bug in the check-webkit-style script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328998</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-04 08:15:56 -0800</bug_when>
    <thetext>Simon, how similar is this to your work on the WebKit2 side? Can you comment on the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329742</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-05 13:12:24 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=77888) [details]
&gt; updated with Ariya&apos;s suggestion
&gt; 
&gt; I got one error when running the check-webkit-style,
&gt; WebKit/qt/WebCoreSupport/FullscreenVideoQt.h:50:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; 50    MediaPlayerPrivateQt* mediaPlayerForNode(Node* node = 0);
&gt; 
&gt; Seems it is a bug in the check-webkit-style script.

How so?

That api should be &quot;MediaPlayerPrivateQt* mediaPlayerForNode(Node* = 0);&quot; because the parameter name &quot;node&quot; adds no information (unless there is some exception for this directory for some reason).

The check is flagging code that fails this guideline  &quot;Leave meaningless variable names out of function declarations.&quot; -- http://webkit.org/coding/coding-style.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329780</commentid>
    <comment_count>8</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-05 14:05:54 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; Created an attachment (id=77888) [details] [details]
&gt; &gt; updated with Ariya&apos;s suggestion
&gt; &gt; 
&gt; &gt; I got one error when running the check-webkit-style,
&gt; &gt; WebKit/qt/WebCoreSupport/FullscreenVideoQt.h:50:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; 
&gt; &gt; 50    MediaPlayerPrivateQt* mediaPlayerForNode(Node* node = 0);
&gt; &gt; 
&gt; &gt; Seems it is a bug in the check-webkit-style script.
&gt; 
&gt; How so?
&gt; 
&gt; That api should be &quot;MediaPlayerPrivateQt* mediaPlayerForNode(Node* = 0);&quot; because the parameter name &quot;node&quot; adds no information (unless there is some exception for this directory for some reason).
&gt; 
&gt; The check is flagging code that fails this guideline  &quot;Leave meaningless variable names out of function declarations.&quot; -- http://webkit.org/coding/coding-style.html

Oh, thanks, I will correct it in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330775</commentid>
    <comment_count>9</comment_count>
      <attachid>78241</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-07 08:25:14 -0800</bug_when>
    <thetext>Created attachment 78241
fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330783</commentid>
    <comment_count>10</comment_count>
      <attachid>78241</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-01-07 08:44:53 -0800</bug_when>
    <thetext>Comment on attachment 78241
fix style

Needs ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331082</commentid>
    <comment_count>11</comment_count>
      <attachid>78286</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-07 15:59:29 -0800</bug_when>
    <thetext>Created attachment 78286
add change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331084</commentid>
    <comment_count>12</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-07 16:09:52 -0800</bug_when>
    <thetext>Also, I tried to run LayoutTests/media/media-fullscreen-inline.html for this patch, however, the test still failed for Qt (QtMediaPlayer), since the durationchange event gets fired twice when loading a video. (which is expected be fired once). So, this test is still skipped for Qt.

Following is log,

--- /tmp/layout-test-results/media/media-fullscreen-inline-expected.txt	2011-01-07 19:06:42.885423685 -0500
+++ /tmp/layout-test-results/media/media-fullscreen-inline-actual.txt	2011-01-07 19:06:42.885423685 -0500
@@ -17,6 +17,7 @@
 *** Creating &lt;video&gt; element with &quot;content/silence.mpg&quot; in the document, should NOT support fullscreen because it is an audio-only &lt;video&gt; element
 EVENT(loadstart)
 EVENT(durationchange)
+EVENT(durationchange)
 EVENT(canplaythrough)
 * event handler NOT triggered by a user gesture
 EXPECTED (mediaElement.webkitSupportsFullscreen == &apos;false&apos;) OK
@@ -30,6 +31,7 @@
 *** Creating &lt;video&gt; element with &quot;content/test.mp4&quot; in the document, should support fullscreen because it is a &lt;video&gt; element with video media
 EVENT(loadstart)
 EVENT(durationchange)
+EVENT(durationchange)
 EVENT(canplaythrough)
 * event handler NOT triggered by a user gesture
 EXPECTED (mediaElement.webkitSupportsFullscreen == &apos;true&apos;) OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331543</commentid>
    <comment_count>13</comment_count>
      <attachid>78286</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-10 01:46:49 -0800</bug_when>
    <thetext>Comment on attachment 78286
add change log

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

In general this looks pretty good to me actually, my nitpicking aside. Good work Yi :). I however think that at this point we should not have a default fullscreen playback widget in Qt, unless you have plans to also give it some controls, etc.

In other words: Given the scope and the future WebKit2 related work, I suggest that we support fullscreen playback if the platform plugin provides it,
otherwise we let bool ChromeClientQt::supportsFullscreenForNode(const Node* node) return false.

What do you think?

r- because of the nitpicks :), but I also think we should discuss having a default or not. Would also like to hear the opinion from the other CC&apos;ed folks :)

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:602
&gt; +    // FIXME a qtmobility bug, need to reset the size when restore the videoitem, otherwise the size is 0
&gt; +    nativeSizeChanged(QSize(m_oldNaturalSize));

Can you add a link to the bug report for qtmobility, so that we can remove this workaround once the bug is fixed upstream?

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h:111
&gt; +    QMediaPlayer* mediaPlayer() { return m_mediaPlayer; }

This function should be const. (as weird as it is :)

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:31
&gt; +#if defined ENABLE_VIDEO &amp;&amp; ENABLE_VIDEO

Some pre-processors don&apos;t like this syntax and would prefer #if defined(ENABLE_VIDEO) &amp;&amp; ENABLE_VIDEO

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:121
&gt; +#if defined ENABLE_VIDEO &amp;&amp; ENABLE_VIDEO

Same here :)

&gt; WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:708
&gt; +    if (platformMedia.type != PlatformMedia::QtMediaPlayerType) {
&gt; +        videoElement-&gt;exitFullscreen();
&gt; +        return;
&gt; +    }

I doubt the call to exitFullscreen() is going to work. Have you tried it? Otherwise I suggest to have an ASSERT() there (for debug builds) as well as a simple &quot;return&quot;.

&gt; WebKit/qt/WebCoreSupport/FullscreenVideoQt.cpp:90
&gt; +    Q_ASSERT(m_fullscreenVideoHandler);

Doesn&apos;t this ASSERT belong in the constructor? I mean, shouldn&apos;t we catch this (and similar errors other ASSERTs guard) in the constructor once?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331619</commentid>
    <comment_count>14</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-10 07:27:50 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 78286 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78286&amp;action=review
&gt; 
&gt; In general this looks pretty good to me actually, my nitpicking aside. Good work Yi :). I however think that at this point we should not have a default fullscreen playback widget in Qt, unless you have plans to also give it some controls, etc.
&gt; 
&gt; In other words: Given the scope and the future WebKit2 related work, I suggest that we support fullscreen playback if the platform plugin provides it,
&gt; otherwise we let bool ChromeClientQt::supportsFullscreenForNode(const Node* node) return false.
&gt; 
&gt; What do you think?
&gt; 
&gt; r- because of the nitpicks :), but I also think we should discuss having a default or not. Would also like to hear the opinion from the other CC&apos;ed folks :)

Thanks a lot Simon :) and I will fix all the issues you found for me.

For the default fullscreen playback widget, I do have a plan to add some controls for it as long as I can. However, it may take a while for me to figure out why the overlay widget doesn&apos;t work well with the video widget on Linux. 

My original thought is that we can provide a simple fullscreen playback widget, whose requiresFullscreenForVideoPlayback() always returns false, then we can add a fullscreen control button for the inline video. With the default fullscreen widget, user/tester can trigger the fullscreen mode even platform plugin doesn&apos;t provide one, either by 1) clicking the fullscreen control button on the inline video, or 2) calling the javascript code &quot;mediaElement.webkitEnterFullScreen()&quot;. If all above can work well, then we can focus on making the fullscreen widget works/looks better (e.g. add overlay controls)

But I will be with you, Simon :) If you think it is not the right time/place to put this default fullscreen widget, I can remove it from this patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331878</commentid>
    <comment_count>15</comment_count>
      <attachid>78440</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-10 13:12:56 -0800</bug_when>
    <thetext>Created attachment 78440
updated with Simon&apos;s suggestion (still has default fullscreen widget)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331879</commentid>
    <comment_count>16</comment_count>
      <attachid>78441</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-10 13:13:34 -0800</bug_when>
    <thetext>Created attachment 78441
updated with Simon&apos;s suggestion (removed default fullscreen widget)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331882</commentid>
    <comment_count>17</comment_count>
      <attachid>78441</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-10 13:20:26 -0800</bug_when>
    <thetext>Comment on attachment 78441
updated with Simon&apos;s suggestion (removed default fullscreen widget)

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

I will let Simon do the actual review, a few comments.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Make the MediaPlayerPrivateQt to support fullscreen player.

Bad English: remove the &quot;to&quot; :-)

Maybe this is better : Make MediaPlayerPrivateQt support a fullscreen player.

&gt; Source/WebCore/ChangeLog:10
&gt; +        No new tests because LayoutTests/media/media-fullscreen-inline.html is already existing.

exists.*

&gt; Source/WebCore/ChangeLog:11
&gt; +        However, this test failed for Qt (QtMediaPlayer) due to durationchange event gets double fired.

getting fired twice*

&gt; Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:601
&gt; +    // FIXME a qtmobility bug, need to reset the size when restore the videoitem, otherwise the size is 0

We usually add : after FIXME, ie. FIXME:

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:130
&gt; +    void fullscreenClosed();

What about leftFullscreen. ie, you enter/leave. Maybe Simon has some better ideas.

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:134
&gt; +    virtual void enterFullscreen(QMediaPlayer*) = 0;
&gt; +    virtual void exitFullscreen() = 0;

leaveFullscreen

&gt; WebKit/qt/examples/platformplugin/WebPlugin.h:126
&gt; +    void onPauseOrPlay();

onStateChange?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331885</commentid>
    <comment_count>18</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-10 13:23:37 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 78441 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78441&amp;action=review
&gt; 
&gt; I will let Simon do the actual review, a few comments.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Make the MediaPlayerPrivateQt to support fullscreen player.
&gt; 
&gt; Bad English: remove the &quot;to&quot; :-)
&gt; 
&gt; Maybe this is better : Make MediaPlayerPrivateQt support a fullscreen player.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        No new tests because LayoutTests/media/media-fullscreen-inline.html is already existing.
&gt; 
&gt; exists.*
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        However, this test failed for Qt (QtMediaPlayer) due to durationchange event gets double fired.
&gt; 
&gt; getting fired twice*
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:601
&gt; &gt; +    // FIXME a qtmobility bug, need to reset the size when restore the videoitem, otherwise the size is 0
&gt; 
&gt; We usually add : after FIXME, ie. FIXME:
&gt; 
&gt; &gt; WebKit/qt/Api/qwebkitplatformplugin.h:130
&gt; &gt; +    void fullscreenClosed();
&gt; 
&gt; What about leftFullscreen. ie, you enter/leave. Maybe Simon has some better ideas.
&gt; 
&gt; &gt; WebKit/qt/Api/qwebkitplatformplugin.h:134
&gt; &gt; +    virtual void enterFullscreen(QMediaPlayer*) = 0;
&gt; &gt; +    virtual void exitFullscreen() = 0;
&gt; 
&gt; leaveFullscreen
&gt; 
&gt; &gt; WebKit/qt/examples/platformplugin/WebPlugin.h:126
&gt; &gt; +    void onPauseOrPlay();
&gt; 
&gt; onStateChange?

Thanks Kenneth, I will fix them :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331908</commentid>
    <comment_count>19</comment_count>
      <attachid>78445</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-10 13:45:37 -0800</bug_when>
    <thetext>Created attachment 78445
updated with Kenneth&apos;s suggestion (removed default fullscreen widget)

I didn&apos;t change following function names, one reason is that in HTMLMeidaElement, it uses enterfullscreen/exitfullscreen. Simon, could you give some comments for these function name? Still, thank you, Kenneth :-)

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:130
&gt; +    void fullscreenClosed();

What about leftFullscreen. ie, you enter/leave. Maybe Simon has some better ideas.

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:134
&gt; +    virtual void enterFullscreen(QMediaPlayer*) = 0;
&gt; +    virtual void exitFullscreen() = 0;

leaveFullscreen</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333076</commentid>
    <comment_count>20</comment_count>
      <attachid>78445</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-12 07:29:03 -0800</bug_when>
    <thetext>Comment on attachment 78445
updated with Kenneth&apos;s suggestion (removed default fullscreen widget)

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

&gt; WebKit/qt/examples/platformplugin/WebPlugin.cpp:238
&gt; +FullscreenVideoHandler::FullscreenVideoHandler(): m_mediaPlayer(0), m_mediaWidget(0)

Coding style nitpick - this line should be split :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333082</commentid>
    <comment_count>21</comment_count>
      <attachid>78445</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-12 07:40:25 -0800</bug_when>
    <thetext>Comment on attachment 78445
updated with Kenneth&apos;s suggestion (removed default fullscreen widget)

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

&gt; WebKit/qt/Api/qwebkitplatformplugin.h:134
&gt; +    void fullscreenClosed();
&gt; +
&gt; +public Q_SLOTS:
&gt; +    virtual void enterFullscreen(QMediaPlayer*) = 0;
&gt; +    virtual void exitFullscreen() = 0;

I think the names are fine :)

&gt; WebKit/qt/examples/platformplugin/WebPlugin.cpp:234
&gt; +    if (ev-&gt;key() == Qt::Key_Space) {
&gt; +        emit spaceButtonPressed();
&gt; +        return;

I&apos;m not sure if this abstraction is really worth it. I&apos;d just pass the QMediaPlayer to FullscreenVideoWidget, so it can act on the player directly, instead of the signal/slot indirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333083</commentid>
    <comment_count>22</comment_count>
      <attachid>78691</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-12 07:40:55 -0800</bug_when>
    <thetext>Created attachment 78691
fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333084</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-12 07:43:24 -0800</bug_when>
    <thetext>In general this looks fine to me now. The only other change I would suggest is to fold the code of the FullscreenVideoQt class simply into ChromeClientQt. There&apos;s barely any logic in there, and the class name isn&apos;t that descriptive IMHO :)

If you want to be _really_ consistent with Qt, then the platform plugin API should also use Full_S_creen, instead of Full_s_creen.

I&apos;m not too particular about the latter, but I&apos;d really like to hear your (Yi) opinion about merging FullscreenVideoQt into ChromeClientQt.

Also I think QWebFullscreenVideoHandler* ChromeClientQt::createFullscreenVideoHandler() const can be folded into wherever it is called from, given that it&apos;s only one line of code and called only from one place.

Yi, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333088</commentid>
    <comment_count>24</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-12 07:59:47 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; In general this looks fine to me now. The only other change I would suggest is to fold the code of the FullscreenVideoQt class simply into ChromeClientQt. There&apos;s barely any logic in there, and the class name isn&apos;t that descriptive IMHO :)
&gt; 
&gt; If you want to be _really_ consistent with Qt, then the platform plugin API should also use Full_S_creen, instead of Full_s_creen.
&gt; 
&gt; I&apos;m not too particular about the latter, but I&apos;d really like to hear your (Yi) opinion about merging FullscreenVideoQt into ChromeClientQt.
&gt; 
&gt; Also I think QWebFullscreenVideoHandler* ChromeClientQt::createFullscreenVideoHandler() const can be folded into wherever it is called from, given that it&apos;s only one line of code and called only from one place.
&gt; 
&gt; Yi, what do you think?

Thanks for reviewing, Simon :) I can remove the fullscreenvideoQt class and also ChromeClientQt::createFullscreenVideoHandler(), since now there is no default fullscreen video widget ( I introduced this class and function to make the code be clear for different fullscreen video widget).

To be consistent with Qt, also I will rename QWebFullscreenVideoHandler to QWebFullScreenVideoHandler, as well as other Full_S_creen functions.

Will provide a new patch ASAP :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333131</commentid>
    <comment_count>25</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-12 10:04:43 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; In general this looks fine to me now. The only other change I would suggest is to fold the code of the FullscreenVideoQt class simply into ChromeClientQt. There&apos;s barely any logic in there, and the class name isn&apos;t that descriptive IMHO :)
&gt; &gt; 
&gt; &gt; If you want to be _really_ consistent with Qt, then the platform plugin API should also use Full_S_creen, instead of Full_s_creen.
&gt; &gt; 
&gt; &gt; I&apos;m not too particular about the latter, but I&apos;d really like to hear your (Yi) opinion about merging FullscreenVideoQt into ChromeClientQt.
&gt; &gt; 
&gt; &gt; Also I think QWebFullscreenVideoHandler* ChromeClientQt::createFullscreenVideoHandler() const can be folded into wherever it is called from, given that it&apos;s only one line of code and called only from one place.
&gt; &gt; 
&gt; &gt; Yi, what do you think?
&gt; 
&gt; Thanks for reviewing, Simon :) I can remove the fullscreenvideoQt class and also ChromeClientQt::createFullscreenVideoHandler(), since now there is no default fullscreen video widget ( I introduced this class and function to make the code be clear for different fullscreen video widget).
&gt; 
&gt; To be consistent with Qt, also I will rename QWebFullscreenVideoHandler to QWebFullScreenVideoHandler, as well as other Full_S_creen functions.
&gt; 
&gt; Will provide a new patch ASAP :)

(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; In general this looks fine to me now. The only other change I would suggest is to fold the code of the FullscreenVideoQt class simply into ChromeClientQt. There&apos;s barely any logic in there, and the class name isn&apos;t that descriptive IMHO :)
&gt; &gt; 
&gt; &gt; If you want to be _really_ consistent with Qt, then the platform plugin API should also use Full_S_creen, instead of Full_s_creen.
&gt; &gt; 
&gt; &gt; I&apos;m not too particular about the latter, but I&apos;d really like to hear your (Yi) opinion about merging FullscreenVideoQt into ChromeClientQt.
&gt; &gt; 
&gt; &gt; Also I think QWebFullscreenVideoHandler* ChromeClientQt::createFullscreenVideoHandler() const can be folded into wherever it is called from, given that it&apos;s only one line of code and called only from one place.
&gt; &gt; 
&gt; &gt; Yi, what do you think?
&gt; 
&gt; Thanks for reviewing, Simon :) I can remove the fullscreenvideoQt class and also ChromeClientQt::createFullscreenVideoHandler(), since now there is no default fullscreen video widget ( I introduced this class and function to make the code be clear for different fullscreen video widget).
&gt; 
&gt; To be consistent with Qt, also I will rename QWebFullscreenVideoHandler to QWebFullScreenVideoHandler, as well as other Full_S_creen functions.
&gt; 
&gt; Will provide a new patch ASAP :)

Simon, still there? I just remember there is another reason why I added this FullscreenVideoQt class, is because I need a QObject derived class to connect the signals from QWebFullscreenVideoHandler, while ChromeClientQt is NOT a QObject derived class. So either we keep the FullscreenVideoQt, or make ChromeClientQt to be QObject based. Please let me know your thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333272</commentid>
    <comment_count>26</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-12 13:58:41 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Simon, still there? I just remember there is another reason why I added this FullscreenVideoQt class, is because I need a QObject derived class to connect the signals from QWebFullscreenVideoHandler, while ChromeClientQt is NOT a QObject derived class. So either we keep the FullscreenVideoQt, or make ChromeClientQt to be QObject based. Please let me know your thoughts.

Oops, you&apos;re right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333273</commentid>
    <comment_count>27</comment_count>
      <attachid>78691</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-12 13:59:56 -0800</bug_when>
    <thetext>Comment on attachment 78691
fix style

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

r=me otherwise. Would be nice to fix the method folding before landing, but isn&apos;t super critical to me.

&gt; WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:670
&gt; +QWebFullscreenVideoHandler* ChromeClientQt::createFullscreenVideoHandler() const
&gt; +{
&gt; +    return m_platformPlugin.createFullscreenVideoHandler();
&gt; +}

I&apos;d say get rid of that method and do the one-liner in FullScreenVideoQt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333287</commentid>
    <comment_count>28</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-12 14:14:20 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 78691 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78691&amp;action=review
&gt; 
&gt; r=me otherwise. Would be nice to fix the method folding before landing, but isn&apos;t super critical to me.
&gt; 
&gt; &gt; WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:670
&gt; &gt; +QWebFullscreenVideoHandler* ChromeClientQt::createFullscreenVideoHandler() const
&gt; &gt; +{
&gt; &gt; +    return m_platformPlugin.createFullscreenVideoHandler();
&gt; &gt; +}
&gt; 
&gt; I&apos;d say get rid of that method and do the one-liner in FullScreenVideoQt.

Yes, I can fix it. I will submit a new patch which has following changes according your comments

1)
pass QMediaPlayer to FullScreenVideoWidget, so it can act on the player directly, instead of the signal/slot indirection.
&gt; WebKit/qt/examples/platformplugin/WebPlugin.cpp:234
&gt; +    if (ev-&gt;key() == Qt::Key_Space) {
&gt; +        emit spaceButtonPressed();
&gt; +        return;

2) use Full_S_creen, instead of Full_s_creen, e.g. FullScreenVideoQt, QWebFullScreenVideoHandler 

3) get rid of ChromeClientQt::createFullscreenVideoHandler()

Still building my patch and will submit once it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333350</commentid>
    <comment_count>29</comment_count>
      <attachid>78745</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-12 15:24:00 -0800</bug_when>
    <thetext>Created attachment 78745
updated with Simon&apos;s suggestion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333635</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 03:45:35 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 78745:

http/tests/xmlhttprequest/basic-auth.html bug 51613 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333636</commentid>
    <comment_count>31</comment_count>
      <attachid>78745</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 03:47:07 -0800</bug_when>
    <thetext>Comment on attachment 78745
updated with Simon&apos;s suggestion

Clearing flags on attachment: 78745

Committed r75708: &lt;http://trac.webkit.org/changeset/75708&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333637</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 03:47:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333675</commentid>
    <comment_count>33</comment_count>
    <who name="Nancy Piedra">nancy.piedra</who>
    <bug_when>2011-01-13 07:14:12 -0800</bug_when>
    <thetext>Before this can be cherry-picked to Webkit 2.2, some backporting needs to occur.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334942</commentid>
    <comment_count>34</comment_count>
      <attachid>79076</attachid>
    <who name="Nancy Piedra">nancy.piedra</who>
    <bug_when>2011-01-15 13:50:34 -0800</bug_when>
    <thetext>Created attachment 79076
This is a backport to Qt Webkit 2.2.

This attachment is a backport of the change to 51249 plus many changes of the relative Media components.

The following changesets were backported to get the media components more up-to-date:
64085
64884
64997
65170
65324
65494
65514
65758
65779
66023
66110
66311
66541
66895
66956
66961
68181
68526
68532
68682
68772
68774
68777
69291

In addition 52315 &amp; 52252 are also included in this patch because those had not yet be commited to qtwebkit 2.2 but are needed for the testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334945</commentid>
    <comment_count>35</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-01-15 14:37:55 -0800</bug_when>
    <thetext>Helder just told me this breaks at least Mac. I reopen until this is tested / reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334947</commentid>
    <comment_count>36</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-15 14:51:07 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Helder just told me this breaks at least Mac. I reopen until this is tested / reverted.

Hi, Benjamin Poulain &amp; Helder, what does it break, build or test? Could you give me more information about it? Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334950</commentid>
    <comment_count>37</comment_count>
      <attachid>79079</attachid>
    <who name="Nancy Piedra">nancy.piedra</who>
    <bug_when>2011-01-15 15:02:47 -0800</bug_when>
    <thetext>Created attachment 79079
Backport to webkit 2.2

There was a small mistake in the previous patch.  Submitted a 2nd patch for backporting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334951</commentid>
    <comment_count>38</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-01-15 15:05:21 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; Hi, Benjamin Poulain &amp; Helder, what does it break, build or test? Could you give me more information about it? Thanks

The patch actually breaks the build on all platform if mobility is not installed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334956</commentid>
    <comment_count>39</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-15 15:26:54 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #36)
&gt; &gt; Hi, Benjamin Poulain &amp; Helder, what does it break, build or test? Could you give me more information about it? Thanks
&gt; 
&gt; The patch actually breaks the build on all platform if mobility is not installed.

Thanks Benjamin. Nancy and I will test the build on Windows &amp; Linux without qtmobility installed. We will fix this issue today.(In reply to comment #38)
&gt; (In reply to comment #36)
&gt; &gt; Hi, Benjamin Poulain &amp; Helder, what does it break, build or test? Could you give me more information about it? Thanks
&gt; 
&gt; The patch actually breaks the build on all platform if mobility is not installed.

Thanks Benjamin. Nancy and I will test the build on Windows &amp; Linux without qtmobility installed. We will fix this issue today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334967</commentid>
    <comment_count>40</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-01-15 16:39:24 -0800</bug_when>
    <thetext>I reverted since this was annoying contributors and the fix is not trivial.
You can just submit the updated version here.

You guys should come on IRC, channel #qtwebkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335006</commentid>
    <comment_count>41</comment_count>
      <attachid>79090</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-15 20:41:46 -0800</bug_when>
    <thetext>Created attachment 79090
fix build issue

The build issue occurs if 1) QtMobility is not installed,and 2) Qt has phonon support. To fix it, I introduce a new flag named &apos;ENABLE_QT_MULTIMEDIA&apos; which is defined in Source/WebCore/features.pri. The code depends on QMediaPlayer only be compiled when ENABLE_QT_MULTIMEDIA is set to 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335049</commentid>
    <comment_count>42</comment_count>
      <attachid>79100</attachid>
    <who name="Nancy Piedra">nancy.piedra</who>
    <bug_when>2011-01-16 09:41:29 -0800</bug_when>
    <thetext>Created attachment 79100
Patch to backport to Qt Webkit 2.2

Attached Qt Webkit 2.2 backporting patch that includes Yi&apos;s latest changes to fix build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335328</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-17 07:57:38 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 79090:

inspector/debugger-pause-on-breakpoint.html bug 51320 (author: podivilov@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335330</commentid>
    <comment_count>44</comment_count>
      <attachid>79090</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-17 08:00:50 -0800</bug_when>
    <thetext>Comment on attachment 79090
fix build issue

Clearing flags on attachment: 79090

Committed r75944: &lt;http://trac.webkit.org/changeset/75944&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335331</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-17 08:00:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335342</commentid>
    <comment_count>46</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-01-17 08:23:16 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 79090 [details])
&gt; Clearing flags on attachment: 79090
&gt; 
&gt; Committed r75944: &lt;http://trac.webkit.org/changeset/75944&gt;

And a build fix landed in http://trac.webkit.org/changeset/75945
because of moving WebKit to Source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335553</commentid>
    <comment_count>47</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-01-17 15:23:49 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=79076) [details]
&gt; This is a backport to Qt Webkit 2.2.
&gt; 
&gt; This attachment is a backport of the change to 51249 plus many changes of the relative Media components.
&gt; 
&gt; The following changesets were backported to get the media components more up-to-date:
&gt; 64085
&gt; 64884
&gt; 64997
&gt; 65170
&gt; 65324
&gt; 65494
&gt; 65514
&gt; 65758
&gt; 65779
&gt; 66023
&gt; 66110
&gt; 66311
&gt; 66541
&gt; 66895
&gt; 66956
&gt; 66961
&gt; 68181
&gt; 68526
&gt; 68532
&gt; 68682
&gt; 68772
&gt; 68774
&gt; 68777
&gt; 69291

That&apos;s a *huge* patch. Please make an extra effort in providing a patch series in cases like that. Instead of a large patch, there should be a git branch and a set of bugzilla dependencies. I could even help with the backporting effort.

With splitted patches we can:
 - review it better;
 - understand clearly what has been backported/cherry-picked into each branch (there are several tools that parse the git logs and generate reports);
 - git bisect any regression;
 - easily revert a particular regression;
 - have proper release-notes.

Please have this in mind in the future.

Also, this patch is missing two files:

    WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp
    WebKit/qt/WebCoreSupport/FullScreenVideoQt.h

For now, as I know you need this change ASAP, I&apos;ve released a test branch with this patch integrated with all other changes from the previous week + the files copied from trunk. During the next days I&apos;ll split the patch and add the proper changelogs before pushing it to the official branch.

The branch is called &quot;qtwebkit-2.2-fullscreen-video&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336714</commentid>
    <comment_count>48</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-01-19 12:37:24 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=79076) [details]
&gt; This is a backport to Qt Webkit 2.2.
&gt; 
&gt; This attachment is a backport of the change to 51249 plus many changes of the relative Media components.
&gt; 

&lt;snip&gt;

This patch introduced a regression in one of the layout tests:

fast/dom/URL-attribute-reflection-pretty-diff.html is now failing:

-PASS testURLReflection(&apos;src&apos;, &apos;source&apos;) is &apos;non-empty URL&apos;
+FAIL testURLReflection(&apos;src&apos;, &apos;source&apos;) should be non-empty URL. Was URL.

To test it, you can either use the tessting VM (http://webkit.sed.hu/blog/20101028/qtwebkit-builder-and-tester-virtual-machine) or submit a branch to the bot: http://webkit.sed.hu/buildbot/builders/QtWebKit2.2-branch%20x86-32%20Linux%20Release

It would be nice to have this investigated/fixed before merging it into the official 2.2 branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336740</commentid>
    <comment_count>49</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-19 13:26:00 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #34)
&gt; &gt; Created an attachment (id=79076) [details] [details]
&gt; &gt; This is a backport to Qt Webkit 2.2.
&gt; &gt; 
&gt; &gt; This attachment is a backport of the change to 51249 plus many changes of the relative Media components.
&gt; &gt; 
&gt; 
&gt; &lt;snip&gt;
&gt; 
&gt; This patch introduced a regression in one of the layout tests:
&gt; 
&gt; fast/dom/URL-attribute-reflection-pretty-diff.html is now failing:
&gt; 
&gt; -PASS testURLReflection(&apos;src&apos;, &apos;source&apos;) is &apos;non-empty URL&apos;
&gt; +FAIL testURLReflection(&apos;src&apos;, &apos;source&apos;) should be non-empty URL. Was URL.
&gt; 
&gt; To test it, you can either use the tessting VM (http://webkit.sed.hu/blog/20101028/qtwebkit-builder-and-tester-virtual-machine) or submit a branch to the bot: http://webkit.sed.hu/buildbot/builders/QtWebKit2.2-branch%20x86-32%20Linux%20Release
&gt; 
&gt; It would be nice to have this investigated/fixed before merging it into the official 2.2 branch.

Hi Ademar, I will take a look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337507</commentid>
    <comment_count>50</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-01-20 12:29:39 -0800</bug_when>
    <thetext>(In reply to comment #47)

&lt;snip&gt;

&gt; That&apos;s a *huge* patch. Please make an extra effort in providing a patch series in cases like that. Instead of a large patch, there should be a git branch and a set of bugzilla dependencies.

I&apos;ve managed to cherry-pick the 25 individual patches, solving the conflicts along the way (it was easier than I though, actually). I&apos;ve pushed them to a test branch: qtwebkit-2.2-fullscreen-video-cherry-picks. It includes all Changelogs and testcases.

I also noticed that r65494 was missing in the original list, so I cherry-picked it as well.

Now we need to backport the original patch attached to this bug on top of that branch, as it doesn&apos;t apply cleanly. I&apos;ll work more on it tomorrow, but meanwhile I decided to push the branch and leave this note here as it may be useful to someone else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338005</commentid>
    <comment_count>51</comment_count>
    <who name="Nancy Piedra">nancy.piedra</who>
    <bug_when>2011-01-21 04:27:44 -0800</bug_when>
    <thetext>Thanks Ademar for all the help with the backporting!

I am in the process of testing this new branch.  I have already backported the original patch from Yi. 

I have found at least one merge problem in HTMLMediaElement::updatePlayState.  I am still testing so I will get back to you with the fix for that and any others if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338125</commentid>
    <comment_count>52</comment_count>
      <attachid>79756</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-01-21 10:03:45 -0800</bug_when>
    <thetext>Created attachment 79756
backport patch for the test branch

Ademar, you can use this to patch qtwebkit-2.2-fullscreen-video-cherry-picks branch. I have tested it on Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338316</commentid>
    <comment_count>53</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-01-21 13:56:13 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; Created an attachment (id=79756) [details]
&gt; backport patch for the test branch
&gt; 
&gt; Ademar, you can use this to patch qtwebkit-2.2-fullscreen-video-cherry-picks branch. I have tested it on Linux.

Please try to submit it in git format. It should be the original patch with conflicts resolved, not a new patch striped of changelogs, tests and examples. The best way to do that, IMO, is to cherry-pick the original patch that went into trunk, solve the conflicts, commit (in your local branch) and export it using git format-patch.

Anyway, I did that for you (your patch was missing the Changelogs and examples) and pushed it into the qtwebkit-2.2-fullscreen-video-cherry-picks branch. It should be reviewed and also tested for the regression (see Comment #48).

Hopefully we&apos;ll be able to push it into the official branch on Monday. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339011</commentid>
    <comment_count>54</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-01-24 07:46:58 -0800</bug_when>
    <thetext>Revision r75944 cherry-picked into qtwebkit-2.2 with commit 6ac72a2 &lt;http://gitorious.org/webkit/qtwebkit/commit/6ac72a2&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77238</attachid>
            <date>2010-12-22 11:02:04 -0800</date>
            <delta_ts>2011-01-04 08:12:17 -0800</delta_ts>
            <desc>first draft</desc>
            <filename>51249.patch</filename>
            <type>text/plain</type>
            <size>29500</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNzQ0ODEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjQ2LDggKzMyNDYsMTUgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVP
PTEpIHsKIAogICAgICAgICBQS0dDT05GSUcgKz0gZ2xpYi0yLjAgZ2lvLTIuMCBnc3RyZWFtZXIt
MC4xMCBnc3RyZWFtZXItYXBwLTAuMTAgZ3N0cmVhbWVyLWJhc2UtMC4xMCBnc3RyZWFtZXItaW50
ZXJmYWNlcy0wLjEwIGdzdHJlYW1lci1wYnV0aWxzLTAuMTAgZ3N0cmVhbWVyLXBsdWdpbnMtYmFz
ZS0wLjEwIGdzdHJlYW1lci12aWRlby0wLjEwCiAgICAgIH0gZWxzZTpjb250YWlucyhNT0JJTElU
WV9DT05GSUcsIG11bHRpbWVkaWEpIHsKLSAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCi0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgIEhFQURFUlMg
Kz0gXCAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1
bGxzY3JlZW5WaWRlb1F0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgKKworICAgICAgICBT
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVy
UHJpdmF0ZVF0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwIFwKKyAgICAgICAgICAgICQkUFdELy4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAK
IAogICAgICAgICBDT05GSUcgKj0gbW9iaWxpdHkKICAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGlt
ZWRpYQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAJKHJldmlzaW9uIDc0NDgxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOCw3ICsxMDgsNyBAQCBNZWRpYVBsYXllclByaXZhdGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRl
CiAgICAgLCBtX3F1ZXVlZFNlZWsoLTEpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1
dG8pCiB7Ci0gICAgbV9tZWRpYVBsYXllci0+YmluZChtX3ZpZGVvSXRlbSk7CisgICAgbV9tZWRp
YVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRlb0l0ZW0pOwogICAgIG1fdmlkZW9TY2VuZS0+
YWRkSXRlbShtX3ZpZGVvSXRlbSk7CiAKICAgICAvLyBTaWduYWwgSGFuZGxlcnMKQEAgLTU4Mywx
MCArNTgzLDI0IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om5hdHVyYWxTaXoKIAog
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVF0OjpuYXR1cmFsU2l6ZSgpIC0+ICVk
eCVkIChtX25hdHVyYWxTaXplKSIsCiAgICAgICAgICAgICBtX25hdHVyYWxTaXplLndpZHRoKCks
IG1fbmF0dXJhbFNpemUuaGVpZ2h0KCkpOwotCiAgICAgcmV0dXJuIG1fbmF0dXJhbFNpemU7CiB9
CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlbW92ZVZpZGVvSXRlbSgpCit7CisgICAg
bV9vbGROYXR1cmFsU2l6ZSA9IG1fbmF0dXJhbFNpemU7CisgICAgbV9tZWRpYVBsYXllci0+c2V0
VmlkZW9PdXRwdXQoc3RhdGljX2Nhc3Q8UUdyYXBoaWNzVmlkZW9JdGVtKj4oMCkpOworICAgIG1f
dmlkZW9TY2VuZS0+cmVtb3ZlSXRlbShtX3ZpZGVvSXRlbSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXQ6OnJlc3RvcmVWaWRlb0l0ZW0oKQoreworICAgIG1fbWVkaWFQbGF5ZXItPnNl
dFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKKyAgICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92
aWRlb0l0ZW0pOworICAgIC8vIEZJWE1FIGEgcXRtb2JpbGl0eSBidWcsIG5lZWQgdG8gcmVzZXQg
dGhlIHNpemUgd2hlbiByZXN0b3JlIHRoZSB2aWRlb2l0ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBp
cyAwCisgICAgbmF0aXZlU2l6ZUNoYW5nZWQoUVNpemUobV9vbGROYXR1cmFsU2l6ZSkpOworfQor
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUXQuaAkocmV2aXNpb24gNzQ0ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcg
KzkwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQpAQCAtMTA4LDYgKzEwOCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7CisgICAgUU1lZGlh
UGxheWVyKiBtZWRpYVBsYXllcigpIHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXI7IH0KKyAgICB2b2lk
IHJlbW92ZVZpZGVvSXRlbSgpOworICAgIHZvaWQgcmVzdG9yZVZpZGVvSXRlbSgpOworCiBwcml2
YXRlIHNsb3RzOgogICAgIHZvaWQgbWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVk
aWFTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcik7CkBA
IC0xNDIsNiArMTQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9jdXJyZW50U2l6ZTsK
ICAgICBJbnRTaXplIG1fbmF0dXJhbFNpemU7CisgICAgSW50U2l6ZSBtX29sZE5hdHVyYWxTaXpl
OwogICAgIGJvb2wgbV9pc1Zpc2libGU7CiAgICAgYm9vbCBtX2lzU2Vla2luZzsKICAgICBib29s
IG1fY29tcG9zaXRlZDsKSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAko
cmV2aXNpb24gNzQ0ODEpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogICogIFdhcm5pbmc6IFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJsaWMgUXRXZWJLaXQgQVBJ
CiAgKiAgYW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9yIGV2ZW4g
YmUgY29tcGxldGVseSByZW1vdmVkLgogKi8KLQogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVk
ZSA8UVVybD4KKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KKyNpbmNs
dWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAg
LTExNSw2ICsxMTcsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBh
ZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisj
aWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBRRnVsbHNjcmVl
blZpZGVvSGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIFFGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIH5RRnVsbHNjcmVl
blZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGNsb3Nl
RnVsbHNjcmVlbigpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgorCiBjbGFzcyBRV2ViS2l0UGxhdGZvcm1Q
bHVnaW4KIHsKIHB1YmxpYzoKQEAgLTEyNCwxMyArMTQzLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
TXVsdGlwbGVTZWxlY3Rpb25zLAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0
aWNzLAotICAgICAgICBUb3VjaEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24s
CisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCisgICAgICAgIEZ1bGxz
Y3JlZW5WaWRlb1BsYXllciwKKyNlbmRpZgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0ID0g
MDsKIH07CiAKLVFfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29t
Lm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjYiKTsKK1FfREVDTEFSRV9JTlRFUkZB
Q0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBs
dWdpbi8xLjciKTsKIAogI2VuZGlmIC8vIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICkluZGV4OiBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDc0
NDgxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTUgQEAKICNpbmNsdWRlIDxxdG9vbHRpcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAorI2lmIEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJGdWxs
c2NyZWVuVmlkZW9RdC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIgCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjaW5jbHVkZSAiUXRGYWxsYmFja0Z1bGxzY3JlZW5W
aWRlb0hhbmRsZXIuaCIKKyNlbmRpZiAKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIENo
cm9tZUNsaWVudFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzID0gZmFsc2U7CkBAIC04Myw2
ICs5Miw5IEBAIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNpdGVkTGlua3NDYWwKIENocm9t
ZUNsaWVudFF0OjpDaHJvbWVDbGllbnRRdChRV2ViUGFnZSogd2ViUGFnZSkKICAgICA6IG1fd2Vi
UGFnZSh3ZWJQYWdlKQogICAgICwgbV9ldmVudExvb3AoMCkKKyNpZiBFTkFCTEUoVklERU8pCisg
ICAgLCBtX2Z1bGxzY3JlZW5WaWRlbygwKQorI2VuZGlmCiB7CiAgICAgdG9vbEJhcnNWaXNpYmxl
ID0gc3RhdHVzQmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNpYmxlID0gdHJ1ZTsKIH0KQEAgLTkxLDYg
KzEwMywxMCBAQCBDaHJvbWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0KCkKIHsKICAgICBpZiAo
bV9ldmVudExvb3ApCiAgICAgICAgIG1fZXZlbnRMb29wLT5leGl0KCk7CisKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgZGVsZXRlIG1fZnVsbHNjcmVlblZpZGVvOworI2VuZGlmCiB9CiAKIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
NjUxLDYgKzY2Nyw2MiBAQCBJbnRSZWN0IENocm9tZUNsaWVudFF0Ojp2aXNpYmxlUmVjdEZvclRp
CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKK1FGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
KiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCit7CisgICAg
UUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIHJlc3VsdCA9IG1fcGxhdGZvcm1QbHVnaW4uY3JlYXRl
RnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKKyAgICByZXR1cm4gbmV3IFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyKCk7Cit9CisKK0Z1bGxzY3JlZW5WaWRlb1F0KiBDaHJvbWVDbGllbnRRdDo6ZnVsbHNjcmVl
blZpZGVvKCkKK3sKKyAgICBpZiAoIW1fZnVsbHNjcmVlblZpZGVvKQorICAgICAgICBtX2Z1bGxz
Y3JlZW5WaWRlbyA9IG5ldyBGdWxsc2NyZWVuVmlkZW9RdCh0aGlzKTsKKyAgICByZXR1cm4gbV9m
dWxsc2NyZWVuVmlkZW87Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50UXQ6OnN1cHBvcnRzRnVsbHNj
cmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6cmVx
dWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpCit7CisgICAgcmV0dXJuIGZ1bGxzY3Jl
ZW5WaWRlbygpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cit9CisKK3Zv
aWQgQ2hyb21lQ2xpZW50UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSk7CisKKyAg
ICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9F
bGVtZW50Kj4obm9kZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhID0gdmlkZW9F
bGVtZW50LT5wbGF0Zm9ybU1lZGlhKCk7CisKKyAgICBpZiAocGxhdGZvcm1NZWRpYS50eXBlICE9
IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKSB7CisgICAgICAgIHZpZGVvRWxlbWVu
dC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZ1bGxz
Y3JlZW5WaWRlbygpLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworfQorCit2b2lkIENo
cm9tZUNsaWVudFF0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBB
U1NFUlQobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSk7CisKKyAgICBIVE1M
VmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50
Kj4obm9kZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhID0gdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybU1lZGlhKCk7CisKKyAgICBpZiAocGxhdGZvcm1NZWRpYS50eXBlICE9IFBsYXRm
b3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBmdWxs
c2NyZWVuVmlkZW8oKS0+ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworfSAKKyNlbmRpZgor
CiBRV2ViU2VsZWN0TWV0aG9kKiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlU2VsZWN0UG9wdXAoKSBj
b25zdAogewogICAgIFFXZWJTZWxlY3RNZXRob2QqIHJlc3VsdCA9IG1fcGxhdGZvcm1QbHVnaW4u
Y3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA3NDQ4MSkKKysrIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKICAgICBj
bGFzcyBRdEFic3RyYWN0V2ViUG9wdXA7CiAgICAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzOwor
ICAgIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb1F0OwogCiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50UXQg
OiBwdWJsaWMgQ2hyb21lQ2xpZW50CiAgICAgewpAQCAtMTYzLDYgKzE2NCwxNSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMoYm9vbCkg
eyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBl
eGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworICAgICAgICBRRnVsbHNjcmVlblZpZGVv
SGFuZGxlciogY3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgICAgICBGdWxsc2Ny
ZWVuVmlkZW9RdCogZnVsbHNjcmVlblZpZGVvKCk7CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgRmlsZUNob29zZXIqKTsKIApAQCAtMTk2LDYgKzIwNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBtZW51QmFyVmlzaWJsZTsKICAgICAgICAgUUV2ZW50TG9vcCogbV9l
dmVudExvb3A7CiAKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1F0
KiBtX2Z1bGxzY3JlZW5WaWRlbzsKKyNlbmRpZgogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wVmlz
aXRlZExpbmtzQ2FsbGJhY2tzOwogCiAgICAgICAgIG11dGFibGUgUXRQbGF0Zm9ybVBsdWdpbiBt
X3BsYXRmb3JtUGx1Z2luOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3Jl
ZW5WaWRlb1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVs
bHNjcmVlblZpZGVvUXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlv
biBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBD
b3lwcmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvUXQuaCIK
KworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZVF0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oIgorCisjaW5jbHVkZSA8UUdyYXBoaWNzVmlkZW9JdGVtPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0Z1bGxzY3JlZW5WaWRlb1F0OjpGdWxsc2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRR
dCogY2hyb21lQ2xpZW50KQorICAgIDogbV9jaHJvbWVDbGllbnQoY2hyb21lQ2xpZW50KQorICAg
ICwgbV92aWRlb0VsZW1lbnQoMCkKK3sKKyAgICBRX0FTU0VSVChtX2Nocm9tZUNsaWVudCk7CisK
KyAgICBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIgPSBtX2Nocm9tZUNsaWVudC0+Y3JlYXRlRnVs
bHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIGNvbm5lY3QobV9mdWxsc2NyZWVuVmlkZW9IYW5k
bGVyLCBTSUdOQUwoY2xvc2VGdWxsc2NyZWVuKCkpLCB0aGlzLCBTTE9UKGFib3V0VG9DbG9zZSgp
KSk7Cit9CisKK0Z1bGxzY3JlZW5WaWRlb1F0Ojp+RnVsbHNjcmVlblZpZGVvUXQoKQoreworICAg
IGRlbGV0ZSBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZp
ZGVvUXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBRX0FTU0VS
VChub2RlKTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdCogbWVkaWFQbGF5ZXJRdCA9IG1lZGlh
UGxheWVyRm9yTm9kZShub2RlKTsKKyAgICBtZWRpYVBsYXllclF0LT5yZW1vdmVWaWRlb0l0ZW0o
KTsKKyAgICBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXItPmVudGVyRnVsbHNjcmVlbihtZWRpYVBs
YXllclF0LT5tZWRpYVBsYXllcigpKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6ZXhp
dEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgUV9BU1NFUlQobm9kZSk7Cisg
ICAgUV9VTlVTRUQobm9kZSk7CisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLT5leGl0RnVs
bHNjcmVlbigpOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllclF0ID0gbWVk
aWFQbGF5ZXJGb3JOb2RlKG5vZGUpOworICAgIG1lZGlhUGxheWVyUXQtPnJlc3RvcmVWaWRlb0l0
ZW0oKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6YWJvdXRUb0Nsb3NlKCkKK3sKKyAg
ICBRX0FTU0VSVChtX3ZpZGVvRWxlbWVudCk7CisgICAgbV92aWRlb0VsZW1lbnQtPmV4aXRGdWxs
c2NyZWVuKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBGdWxsc2NyZWVuVmlkZW9RdDo6
bWVkaWFQbGF5ZXIoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9FbGVtZW50KTsKKyAgICBQbGF0
Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSBtX3ZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVRdCo+KHBsYXRmb3Jt
TWVkaWEubWVkaWEucXRNZWRpYVBsYXllcik7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBG
dWxsc2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXJGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
UV9BU1NFUlQobm9kZSk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIG1fdmlkZW9FbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIHJldHVybiBtZWRpYVBs
YXllcigpOworfQorCitib29sIEZ1bGxzY3JlZW5WaWRlb1F0OjpyZXF1aXJlc0Z1bGxzY3JlZW5G
b3JWaWRlb1BsYXliYWNrKCkKK3sKKyAgICBRX0FTU0VSVChtX2Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIpOworICAgIHJldHVybiBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXItPnJlcXVpcmVzRnVsbHNj
cmVlbkZvclZpZGVvUGxheWJhY2soKTsKK30KKworfQorCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9RdF9oCisj
ZGVmaW5lIEZ1bGxzY3JlZW5WaWRlb1F0X2gKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK1FUX0JF
R0lOX05BTUVTUEFDRQorY2xhc3MgUUdyYXBoaWNzVmlkZW9JdGVtOworUVRfRU5EX05BTUVTUEFD
RQorCitjbGFzcyBRRnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDaHJvbWVDbGllbnRRdDsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFz
cyBOb2RlOworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXQ7CisKK2NsYXNzIEZ1bGxzY3JlZW5W
aWRlb1F0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRnVs
bHNjcmVlblZpZGVvUXQoQ2hyb21lQ2xpZW50UXQqIGNocm9tZUNsaWVudCk7CisgICAgfkZ1bGxz
Y3JlZW5WaWRlb1F0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9k
ZShOb2RlKiBub2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5v
ZGUqIG5vZGUpOworICAgIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygp
OworCitwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllcigpOwor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllckZvck5vZGUoTm9kZSogbm9kZSA9
IDApOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgYWJvdXRUb0Nsb3NlKCk7CisKK3ByaXZh
dGU6CisgICAgQ2hyb21lQ2xpZW50UXQqIG1fY2hyb21lQ2xpZW50OworICAgIEhUTUxWaWRlb0Vs
ZW1lbnQqIG1fdmlkZW9FbGVtZW50OworICAgIFFGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBtX2Z1
bGxzY3JlZW5WaWRlb0hhbmRsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVRdF9o
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRl
b0hhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdp
cmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hh
bmRsZXIuaCIKKworI2luY2x1ZGUgPFFFdmVudD4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CisjaW5j
bHVkZSA8UVZpZGVvV2lkZ2V0PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1F0RmFsbGJhY2tG
dWxsc2NyZWVuVmlkZW9XaWRnZXQ6OlF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKQor
ICAgIDpRV2lkZ2V0KDAsIFF0OjpUb29sIHwgUXQ6OkZyYW1lbGVzc1dpbmRvd0hpbnQpCit7Cisg
ICAgbV92aWRlb1dpZGdldCA9IG5ldyBRVmlkZW9XaWRnZXQodGhpcyk7CisgICAgbV92aWRlb1dp
ZGdldC0+c2V0RnVsbFNjcmVlbih0cnVlKTsKK30KKworYm9vbCBRdEZhbGxiYWNrRnVsbHNjcmVl
blZpZGVvV2lkZ2V0OjpldmVudChRRXZlbnQqIGV2KQoreworICAgIGlmIChldi0+dHlwZSgpID09
ICBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2spIHsKKyAgICAgICAgZW1pdCBjbG9zZUZ1bGxz
Y3JlZW4oKTsKKyAgICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9IAorICAgIHJldHVybiBRV2lkZ2V0OjpldmVudChldik7Cit9CisKK3ZvaWQgUXRGYWxsYmFj
a0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQorewor
ICAgIGlmIChldi0+a2V5KCkgPT0gUXQ6OktleV9TcGFjZSkgeworICAgICAgICBlbWl0IHNwYWNl
QnRuUHJlc3NlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitRdEZhbGxiYWNrRnVs
bHNjcmVlblZpZGVvSGFuZGxlcjo6UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQor
ICAgIDogUUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgICwgbV9tZWRpYVBsYXllcigwKQor
ICAgICwgbV9tZWRpYVdpZGdldCgwKQoreworfQorCitRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVv
SGFuZGxlcjo6flF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxl
dGUgbV9tZWRpYVdpZGdldDsKK30KKwordm9pZCBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcjo6ZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIFFfQVNT
RVJUKHBsYXllcik7CisgICAgbV9tZWRpYVBsYXllciA9IHBsYXllcjsKKworICAgIG1fbWVkaWFX
aWRnZXQgPSBuZXcgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAgIG1fbWVk
aWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fbWVkaWFXaWRnZXQtPnZpZGVvV2lkZ2V0KCkpOwor
CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoc3BhY2VCdG5QcmVzc2VkKCkpLCB0
aGlzLCBTTE9UKG9uUGF1c2VPclBsYXkoKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwg
U0lHTkFMKGNsb3NlRnVsbHNjcmVlbigpKSwgdGhpcywgU0lHTkFMKGNsb3NlRnVsbHNjcmVlbigp
KSk7CisgICAgbV9tZWRpYVdpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBRdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGRl
bGV0ZSBtX21lZGlhV2lkZ2V0OworICAgIG1fbWVkaWFQbGF5ZXIgPSAwOworICAgIG1fbWVkaWFX
aWRnZXQgPSAwOworfQorCit2b2lkIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpv
blBhdXNlT3JQbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVk
aWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1c2UoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKworfQorCkluZGV4
OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1
bGxzY3JlZW5WaWRlb0hhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUXRGYWxsYmFja0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXJfaAorI2RlZmluZSBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9y
bXBsdWdpbi5oIgorCisjaW5jbHVkZSA8UVdpZGdldD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitj
bGFzcyBRRXZlbnQ7CitjbGFzcyBRS2V5RXZlbnQ7CitjbGFzcyBRVmlkZW9XaWRnZXQ7CitRVF9F
TkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUXRGYWxsYmFja0Z1
bGxzY3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKTsKKyAgICB2aXJ0dWFs
IH5RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCkge30KKworICAgIFFWaWRlb1dpZGdl
dCogdmlkZW9XaWRnZXQoKSB7IHJldHVybiBtX3ZpZGVvV2lkZ2V0OyB9CisKK1FfU0lHTkFMUzoK
KyAgICB2b2lkIHNwYWNlQnRuUHJlc3NlZCgpOworICAgIHZvaWQgY2xvc2VGdWxsc2NyZWVuKCk7
CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGV2ZW50KFFFdmVudCogZXYpOworICAgIHZvaWQga2V5
UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KTsKKworcHJpdmF0ZToKKyAgICBRVmlkZW9XaWRnZXQq
IG1fdmlkZW9XaWRnZXQ7Cit9OworCitjbGFzcyBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFu
ZGxlciA6IHB1YmxpYyBRRnVsbHNjcmVlblZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QKK3B1
YmxpYzoKKyAgICBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIH5RdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworCisgICAgYm9vbCByZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworUV9TSUdO
QUxTOgorICAgIHZvaWQgY2xvc2VGdWxsc2NyZWVuKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAg
IHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKTsKKyAgICB2b2lkIGV4
aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBvblBhdXNlT3JQbGF5KCk7CisKK3ByaXZhdGU6Cisg
ICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFF0RmFsbGJhY2tGdWxsc2NyZWVu
VmlkZW9XaWRnZXQqIG1fbWVkaWFXaWRnZXQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBRdEZhbGxi
YWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcl9oCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCShyZXZpc2lvbiA3NDQ4MSkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDQgKzEyNywxMiBAQCBRV2ViVG91Y2hNb2RpZmllciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3Jl
CiAgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViVG91Y2hNb2RpZmllcio+KHAtPmNyZWF0
ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlRvdWNoSW50ZXJhY3Rpb24pKSA6IDA7
CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCitRRnVsbHNjcmVlblZpZGVvSGFuZGxlciogUXRQbGF0
Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCit7CisgICAgUVdlYktp
dFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2Fz
dDxRRnVsbHNjcmVlblZpZGVvSGFuZGxlcio+KHAtPmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxh
dGZvcm1QbHVnaW46OkZ1bGxzY3JlZW5WaWRlb1BsYXllcikpIDogMDsKK30KKyNlbmRpZgorCiB9
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgJKHJl
dmlzaW9uIDc0NDgxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQCBjbGFzcyBRV2ViTm90aWZpY2F0
aW9uUHJlc2VudGVyOwogY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyOwogY2xhc3MgUVdl
YlNlbGVjdERhdGE7CiBjbGFzcyBRV2ViVG91Y2hNb2RpZmllcjsKKyNpZiBFTkFCTEUoVklERU8p
CitjbGFzcyBRRnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQxLDYgKzQ0LDkgQEAgcHVibGljOgogICAgIFFXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogICAgIFFXZWJIYXB0aWNG
ZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIoKTsKICAgICBRV2ViVG91
Y2hNb2RpZmllciogY3JlYXRlVG91Y2hNb2RpZmllcigpOworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBRRnVsbHNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigp
OworI2VuZGlmCiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCkluZGV4
OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAko
cmV2aXNpb24gNzQ0ODEpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksOSBAQAogICovCiAjaW5jbHVk
ZSAiV2ViUGx1Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAjaW5jbHVkZSA8UUhCb3hMYXlv
dXQ+CisjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0PgogI2luY2x1
ZGUgPFFMaXN0V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KQEAgLTIwOCw2ICsyMTAs
NzUgQEAgTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVTZWxlY3RpbwogICAgIHJlc2l6
ZShzaXplKCkud2lkdGgoKSwgdmlzaWJsZUl0ZW1Db3VudCAqIGdNYWVtb0xpc3RJdGVtU2l6ZSk7
CiB9CiAKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KK0Z1bGxzY3Jl
ZW5WaWRlb1dpZGdldDo6RnVsbHNjcmVlblZpZGVvV2lkZ2V0KCkKKyAgICA6UVZpZGVvV2lkZ2V0
KCkKK3sKKyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworfQorCitib29sIEZ1bGxzY3JlZW5WaWRl
b1dpZGdldDo6ZXZlbnQoUUV2ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSAgUUV2
ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrKSB7CisgICAgICAgIGVtaXQgY2xvc2VGdWxsc2NyZWVu
KCk7CisgICAgICAgIGV2LT5hY2NlcHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAK
KyAgICByZXR1cm4gUVdpZGdldDo6ZXZlbnQoZXYpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRl
b1dpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQoreworICAgIGlmIChldi0+a2V5
KCkgPT0gUXQ6OktleV9TcGFjZSkgeworICAgICAgICBlbWl0IHNwYWNlQnRuUHJlc3NlZCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCitGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpGdWxs
c2NyZWVuVmlkZW9IYW5kbGVyKCk6IG1fbWVkaWFQbGF5ZXIoMCksIG1fbWVkaWFXaWRnZXQoMCkK
K3sKK30KKworRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6fkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIo
KQoreworICAgIGRlbGV0ZSBtX21lZGlhV2lkZ2V0OworfQorCitib29sIEZ1bGxzY3JlZW5WaWRl
b0hhbmRsZXI6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVy
RnVsbHNjcmVlbihRTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAgICBRX0FTU0VSVChwbGF5ZXIp
OworCisgICAgbV9tZWRpYVdpZGdldCA9IG5ldyBGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKTsKKyAg
ICBjb25uZWN0KG1fbWVkaWFXaWRnZXQsIFNJR05BTChzcGFjZUJ0blByZXNzZWQoKSksIHRoaXMs
IFNMT1Qob25QYXVzZU9yUGxheSgpKSk7CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdO
QUwoY2xvc2VGdWxsc2NyZWVuKCkpLCB0aGlzLCBTSUdOQUwoY2xvc2VGdWxsc2NyZWVuKCkpKTsK
KworICAgIG1fbWVkaWFQbGF5ZXIgPSBwbGF5ZXI7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vmlk
ZW9PdXRwdXQobV9tZWRpYVdpZGdldCk7CisgICAgbV9tZWRpYVdpZGdldC0+c2hvd0Z1bGxTY3Jl
ZW4oKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbHNjcmVlbigp
Cit7CisgICAgbV9tZWRpYVdpZGdldC0+aGlkZSgpOworICAgIGRlbGV0ZSBtX21lZGlhV2lkZ2V0
OworICAgIG1fbWVkaWFXaWRnZXQgPSAwOworICAgIG1fbWVkaWFQbGF5ZXIgPSAwOworfQorCit2
b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6Om9uUGF1c2VPclBsYXkoKQoreworICAgIGlmICht
X21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYVBs
YXllci0+cGxheSgpOworfQorI2VuZGlmCisKIGJvb2wgV2ViUGx1Z2luOjpzdXBwb3J0c0V4dGVu
c2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAogewogICAgIHN3aXRjaCAoZXh0ZW5zaW9u
KSB7CkBAIC0yMTksNiArMjkwLDEwIEBAIGJvb2wgV2ViUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lv
bihFeHRlbnMKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAgcmV0
dXJuIHRydWU7CisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCisgICAg
Y2FzZSBGdWxsc2NyZWVuVmlkZW9QbGF5ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlm
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTIzNSw2ICsz
MTAsMTAgQEAgUU9iamVjdCogV2ViUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24oRXh0ZQogI2VuZGlm
CiAgICAgY2FzZSBUb3VjaEludGVyYWN0aW9uOgogICAgICAgICByZXR1cm4gbmV3IFRvdWNoTW9k
aWZpZXIoKTsKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KKyAgICBj
YXNlIEZ1bGxzY3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0dXJuIG5ldyBGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBs
dWdpbi5oCShyZXZpc2lvbiA3NDQ4MSkKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBs
dWdpbi9XZWJQbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1
ZGUgIldlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgogCiAjaW5jbHVkZSA8UURpYWxvZz4KKyNp
ZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRVmlkZW9X
aWRnZXQ+CisjZW5kaWYKIAogY2xhc3MgUUxpc3RXaWRnZXRJdGVtOwogY2xhc3MgUUxpc3RXaWRn
ZXQ7CkBAIC05NCw2ICs5Nyw0MCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorI2lmIGRlZmluZWQg
RU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworY2xhc3MgRnVsbHNjcmVlblZpZGVvV2lkZ2V0
IDogcHVibGljIFFWaWRlb1dpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBGdWxs
c2NyZWVuVmlkZW9XaWRnZXQoKTsKKyAgICB2aXJ0dWFsIH5GdWxsc2NyZWVuVmlkZW9XaWRnZXQo
KSB7fQorCitRX1NJR05BTFM6CisgICAgdm9pZCBzcGFjZUJ0blByZXNzZWQoKTsKKyAgICB2b2lk
IGNsb3NlRnVsbHNjcmVlbigpOworCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBldmVudChRRXZlbnQq
IGV2KTsKKyAgICB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldik7Cit9OworCitjbGFz
cyBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsK
KyAgICB2aXJ0dWFsIH5GdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1aXJl
c0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgor
ICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKTsKKyAgICB2b2lk
IGV4aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBvblBhdXNlT3JQbGF5KCk7CisKK3ByaXZhdGU6
CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOyAvLyBub3Qgb3duZWQKKyAgICBGdWxs
c2NyZWVuVmlkZW9XaWRnZXQqIG1fbWVkaWFXaWRnZXQ7IC8vIG93bmVkCit9OworI2VuZGlmCisK
IGNsYXNzIFdlYlBsdWdpbiA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVdlYktpdFBsYXRmb3Jt
UGx1Z2luCiB7CiAgICAgUV9PQkpFQ1QKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L2V4YW1w
bGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwkocmV2aXNpb24gNzQ0ODEpCisr
KyBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsMTUgQEAgVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQo
cGxhdGZvcm1wbHVnaQogVEVNUExBVEUgPSBsaWIKIENPTkZJRyArPSBwbHVnaW4KIAorIyMgbG9h
ZCBtb2JpbGl0eWNvbmZpZyBpZiBtb2JpbGl0eSBpcyBhdmFpbGFibGUKK2xvYWQobW9iaWxpdHlj
b25maWcsIHRydWUpCisKK2NvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgewor
ICAgIENPTkZJRyArPSBtb2JpbGl0eQorICAgIE1PQklMSVRZICs9IG11bHRpbWVkaWEKKyAgICBE
RUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCit9CisKIERFU1RESVIgPSAkJFtRVF9JTlNUQUxMX1BM
VUdJTlNdL3dlYmtpdAogCiBTT1VSQ0VTICs9IFwKQEAgLTE1LDMgKzI0LDQgQEAgSEVBREVSUyAr
PSBcCiAgICAgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgKIAogIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9OT1RJRklDQVRJT05TPS4pOiBERUZJTkVTICs9IEVOQUJMRV9OT1RJRklDQVRJT05T
PTEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89Lik6IERFRklORVMgKz0gRU5BQkxF
X1ZJREVPPTEKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZv
cm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc0NDgxKQorKysgV2Vi
S2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogICogIFdhcm5pbmc6IFRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJsaWMgUXRXZWJLaXQgQVBJCiAg
KiAgYW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9yIGV2ZW4gYmUg
Y29tcGxldGVseSByZW1vdmVkLgogKi8KLQogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVkZSA8
UVVybD4KKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRl
IDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTg0
LDkgKzg2LDEzIEBAIFFfU0lHTkFMUzoKICAgICB2b2lkIG5vdGlmaWNhdGlvbkNsaWNrZWQoKTsK
IH07CiAKLWNsYXNzIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcgorY2xhc3MgUVdlYkhhcHRpY0Zl
ZWRiYWNrUGxheWVyOiBwdWJsaWMgUU9iamVjdAogeworICAgIFFfT0JKRUNUCiBwdWJsaWM6Cisg
ICAgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKCkge30KKyAgICB2aXJ0dWFsIH5RV2ViSGFwdGlj
RmVlZGJhY2tQbGF5ZXIoKSB7fQorCiAgICAgZW51bSBIYXB0aWNTdHJlbmd0aCB7CiAgICAgICAg
IE5vbmUsIFdlYWssIE1lZGl1bSwgU3Ryb25nCiAgICAgfTsKQEAgLTExMSw2ICsxMTcsMjMgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25z
dCBQYWRkaW5nRGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZCBFTkFCTEVf
VklERU8gJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBRRnVsbHNjcmVlblZpZGVvSGFuZGxlciA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIH5RRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIHt9
CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBj
b25zdCA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGNsb3NlRnVsbHNjcmVlbigpOworCitw
dWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBs
YXllciogcGxheWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKCkgPSAw
OworfTsKKyNlbmRpZgorCiBjbGFzcyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKIHB1YmxpYzoK
QEAgLTEyMCwxMyArMTQzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25z
LAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAgICAgICBUb3Vj
aEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisjaWYgZGVmaW5lZCBFTkFC
TEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1BsYXllciwK
KyNlbmRpZgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0
ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRl
RXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0ID0gMDsKIH07CiAKLVFfREVDTEFS
RV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5Q
bGF0Zm9ybVBsdWdpbi8xLjYiKTsKK1FfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3Jt
UGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjciKTsKIAogI2Vu
ZGlmIC8vIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICg==
</data>
<flag name="review"
          id="68301"
          type_id="1"
          status="-"
          setter="ariya.hidayat"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77888</attachid>
            <date>2011-01-04 08:12:17 -0800</date>
            <delta_ts>2011-01-07 08:25:14 -0800</delta_ts>
            <desc>updated with Ariya&apos;s suggestion</desc>
            <filename>51249-v1.patch</filename>
            <type>text/plain</type>
            <size>27979</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNzQ5NjcpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjQ1LDggKzMyNDUsMTUgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVP
PTEpIHsKIAogICAgICAgICBQS0dDT05GSUcgKz0gZ2xpYi0yLjAgZ2lvLTIuMCBnc3RyZWFtZXIt
MC4xMCBnc3RyZWFtZXItYXBwLTAuMTAgZ3N0cmVhbWVyLWJhc2UtMC4xMCBnc3RyZWFtZXItaW50
ZXJmYWNlcy0wLjEwIGdzdHJlYW1lci1wYnV0aWxzLTAuMTAgZ3N0cmVhbWVyLXBsdWdpbnMtYmFz
ZS0wLjEwIGdzdHJlYW1lci12aWRlby0wLjEwCiAgICAgIH0gZWxzZTpjb250YWlucyhNT0JJTElU
WV9DT05GSUcsIG11bHRpbWVkaWEpIHsKLSAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCi0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgIEhFQURFUlMg
Kz0gXCAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1
bGxzY3JlZW5WaWRlb1F0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgKKworICAgICAgICBT
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVy
UHJpdmF0ZVF0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwIFwKKyAgICAgICAgICAgICQkUFdELy4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAK
IAogICAgICAgICBDT05GSUcgKj0gbW9iaWxpdHkKICAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGlt
ZWRpYQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAJKHJldmlzaW9uIDc0OTY3KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOCw3ICsxMDgsNyBAQCBNZWRpYVBsYXllclByaXZhdGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRl
CiAgICAgLCBtX3F1ZXVlZFNlZWsoLTEpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1
dG8pCiB7Ci0gICAgbV9tZWRpYVBsYXllci0+YmluZChtX3ZpZGVvSXRlbSk7CisgICAgbV9tZWRp
YVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRlb0l0ZW0pOwogICAgIG1fdmlkZW9TY2VuZS0+
YWRkSXRlbShtX3ZpZGVvSXRlbSk7CiAKICAgICAvLyBTaWduYWwgSGFuZGxlcnMKQEAgLTU4Nyw2
ICs1ODcsMjEgQEAgSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRdDo6bmF0dXJhbFNpegogICAg
IHJldHVybiBtX25hdHVyYWxTaXplOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpy
ZW1vdmVWaWRlb0l0ZW0oKQoreworICAgIG1fb2xkTmF0dXJhbFNpemUgPSBtX25hdHVyYWxTaXpl
OworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KHN0YXRpY19jYXN0PFFHcmFwaGlj
c1ZpZGVvSXRlbSo+KDApKTsKKyAgICBtX3ZpZGVvU2NlbmUtPnJlbW92ZUl0ZW0obV92aWRlb0l0
ZW0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXN0b3JlVmlkZW9JdGVtKCkK
K3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChtX3ZpZGVvSXRlbSk7CisgICAg
bV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9JdGVtKTsKKyAgICAvLyBGSVhNRSBhIHF0bW9i
aWxpdHkgYnVnLCBuZWVkIHRvIHJlc2V0IHRoZSBzaXplIHdoZW4gcmVzdG9yZSB0aGUgdmlkZW9p
dGVtLCBvdGhlcndpc2UgdGhlIHNpemUgaXMgMAorICAgIG5hdGl2ZVNpemVDaGFuZ2VkKFFTaXpl
KG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDc0OTY3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKQEAgLTEwOCw2ICsxMDgsMTAg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSgpIGNvbnN0OworICAgIFFNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSB7IHJldHVybiBt
X21lZGlhUGxheWVyOyB9CisgICAgdm9pZCByZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lkIHJl
c3RvcmVWaWRlb0l0ZW0oKTsKKwogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVz
Q2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUVycm9y
KFFNZWRpYVBsYXllcjo6RXJyb3IpOwpAQCAtMTQyLDYgKzE0Niw3IEBAIHByaXZhdGU6CiAKICAg
ICBJbnRTaXplIG1fY3VycmVudFNpemU7CiAgICAgSW50U2l6ZSBtX25hdHVyYWxTaXplOworICAg
IEludFNpemUgbV9vbGROYXR1cmFsU2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwogICAgIGJv
b2wgbV9pc1NlZWtpbmc7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZWQ7CkluZGV4OiBXZWJLaXQvcXQv
QXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkv
cXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc0OTY3KQorKysgV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBA
QAogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQgRU5B
QkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRp
ZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQogewpAQCAtMTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRp
bmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07CiAKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAm
JiBFTkFCTEVfVklERU8KK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGlj
IFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRl
b0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkg
e30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygp
IGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbHNjcmVlbkNsb3NlZCgpOwor
CitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRp
YVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9IDA7Cit9
OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogcHVibGljOgpAQCAt
MTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25zLAogICAg
ICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAgICAgICBUb3VjaEludGVy
YWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAgIEZ1bGxzY3JlZW5WaWRl
b1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0
ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwpAQCAtMTMyLDcgKzE1Myw3IEBAIHB1YmxpYzoK
IH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxh
dGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNiIpOwor
UV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQu
V2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogUVRfRU5EX05BTUVTUEFDRQogCiAjZW5kaWYg
Ly8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2aXNpb24gNzQ5NjcpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3
NiwxNSBAQAogI2luY2x1ZGUgPHF0b29sdGlwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
CisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb1F0LmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIiAKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aCIKKyNpbmNsdWRlICJRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oIgorI2VuZGlm
IAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNp
dGVkTGlua3NDYWxsYmFja3MgPSBmYWxzZTsKQEAgLTgzLDYgKzkyLDkgQEAgYm9vbCBDaHJvbWVD
bGllbnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbAogQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVu
dFF0KFFXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBt
X2V2ZW50TG9vcCgwKQorI2lmIEVOQUJMRShWSURFTykKKyAgICAsIG1fZnVsbHNjcmVlblZpZGVv
KDApCisjZW5kaWYKIHsKICAgICB0b29sQmFyc1Zpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxlID0g
bWVudUJhclZpc2libGUgPSB0cnVlOwogfQpAQCAtOTEsNiArMTAzLDEwIEBAIENocm9tZUNsaWVu
dFF0Ojp+Q2hyb21lQ2xpZW50UXQoKQogewogICAgIGlmIChtX2V2ZW50TG9vcCkKICAgICAgICAg
bV9ldmVudExvb3AtPmV4aXQoKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBkZWxldGUgbV9m
dWxsc2NyZWVuVmlkZW87CisjZW5kaWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0V2lu
ZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC02NTEsNiArNjY3LDYzIEBAIEludFJl
Y3QgQ2hyb21lQ2xpZW50UXQ6OnZpc2libGVSZWN0Rm9yVGkKIH0KICNlbmRpZgogCisjaWYgRU5B
QkxFKFZJREVPKQorUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIENocm9tZUNsaWVudFF0Ojpj
cmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVv
SGFuZGxlciogcmVzdWx0ID0gbV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAg
IHJldHVybiBuZXcgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKK30KKworRnVs
bHNjcmVlblZpZGVvUXQqIENocm9tZUNsaWVudFF0OjpmdWxsc2NyZWVuVmlkZW8oKQoreworICAg
IGlmICghbV9mdWxsc2NyZWVuVmlkZW8pCisgICAgICAgIG1fZnVsbHNjcmVlblZpZGVvID0gbmV3
IEZ1bGxzY3JlZW5WaWRlb1F0KHRoaXMpOworICAgIHJldHVybiBtX2Z1bGxzY3JlZW5WaWRlbzsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25z
dCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6
cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpCit7CisgICAgcmV0dXJuIGZ1bGxz
Y3JlZW5WaWRlbygpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkK
K3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9U
YWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVk
aWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIGlmIChwbGF0Zm9ybU1l
ZGlhLnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpIHsKKyAgICAgICAg
dmlkZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZnVsbHNjcmVlblZpZGVvKCktPmVudGVyRnVsbHNjcmVlbkZvck5vZGUobm9kZSk7Cit9
CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRl
b1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOworCisgICAgaWYgKHBsYXRmb3Jt
TWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnVsbHNjcmVlblZpZGVvKCktPmV4aXRGdWxsc2NyZWVuRm9yTm9kZShu
b2RlKTsKK30gCisjZW5kaWYKKwogUVdlYlNlbGVjdE1ldGhvZCogQ2hyb21lQ2xpZW50UXQ6OmNy
ZWF0ZVNlbGVjdFBvcHVwKCkgY29uc3QKIHsKICAgICBRV2ViU2VsZWN0TWV0aG9kKiByZXN1bHQg
PSBtX3BsYXRmb3JtUGx1Z2luLmNyZWF0ZVNlbGVjdElucHV0TWV0aG9kKCk7CkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNzQ5NjcpCisr
KyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IEZyYW1l
TG9hZFJlcXVlc3Q7CiAgICAgY2xhc3MgUXRBYnN0cmFjdFdlYlBvcHVwOwogICAgIHN0cnVjdCBW
aWV3cG9ydEFyZ3VtZW50czsKKyAgICBjbGFzcyBGdWxsc2NyZWVuVmlkZW9RdDsKIAogICAgIGNs
YXNzIENocm9tZUNsaWVudFF0IDogcHVibGljIENocm9tZUNsaWVudAogICAgIHsKQEAgLTE2Myw2
ICsxNjQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgbmVl
ZFRvdWNoRXZlbnRzKGJvb2wpIHsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKKyAgICAg
ICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIGNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIoKTsKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUXQqIGZ1bGxzY3JlZW5WaWRlbygpOworI2Vu
ZGlmCisKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKik7CiAKQEAgLTE5NSw2ICsyMDUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc3RhdHVzQmFyVmlzaWJsZTsK
ICAgICAgICAgYm9vbCBtZW51QmFyVmlzaWJsZTsKICAgICAgICAgUUV2ZW50TG9vcCogbV9ldmVu
dExvb3A7CisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICBGdWxsc2NyZWVuVmlkZW9RdCogbV9m
dWxsc2NyZWVuVmlkZW87CisjZW5kaWYKIAogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wVmlzaXRl
ZExpbmtzQ2FsbGJhY2tzOwogCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbHNj
cmVlblZpZGVvUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
dWxsc2NyZWVuVmlkZW9RdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZ1bGxz
Y3JlZW5WaWRlb1F0LmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVRdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJxd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPFFHcmFwaGljc1ZpZGVvSXRlbT4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGdWxsc2NyZWVuVmlkZW9RdDo6RnVsbHNjcmVlblZpZGVv
UXQoQ2hyb21lQ2xpZW50UXQqIGNocm9tZUNsaWVudCkKKyAgICA6IG1fY2hyb21lQ2xpZW50KGNo
cm9tZUNsaWVudCkKKyAgICAsIG1fdmlkZW9FbGVtZW50KDApCit7CisgICAgUV9BU1NFUlQobV9j
aHJvbWVDbGllbnQpOworCisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyID0gbV9jaHJvbWVD
bGllbnQtPmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBjb25uZWN0KG1fZnVs
bHNjcmVlblZpZGVvSGFuZGxlciwgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNM
T1QoYWJvdXRUb0Nsb3NlKCkpKTsKK30KKworRnVsbHNjcmVlblZpZGVvUXQ6On5GdWxsc2NyZWVu
VmlkZW9RdCgpCit7CisgICAgZGVsZXRlIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKK30KKwor
dm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2Rl
KQoreworICAgIFFfQVNTRVJUKG5vZGUpOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRp
YVBsYXllclF0ID0gbWVkaWFQbGF5ZXJGb3JOb2RlKG5vZGUpOworICAgIG1lZGlhUGxheWVyUXQt
PnJlbW92ZVZpZGVvSXRlbSgpOworICAgIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlci0+ZW50ZXJG
dWxsc2NyZWVuKG1lZGlhUGxheWVyUXQtPm1lZGlhUGxheWVyKCkpOworfQorCit2b2lkIEZ1bGxz
Y3JlZW5WaWRlb1F0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBR
X0FTU0VSVChub2RlKTsKKyAgICBRX1VOVVNFRChub2RlKTsKKyAgICBtX2Z1bGxzY3JlZW5WaWRl
b0hhbmRsZXItPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1l
ZGlhUGxheWVyUXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5ZXJR
dC0+cmVzdG9yZVZpZGVvSXRlbSgpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb1F0OjphYm91
dFRvQ2xvc2UoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9FbGVtZW50KTsKKyAgICBtX3ZpZGVv
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlUXQqIEZ1
bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXllcigpCit7CisgICAgUV9BU1NFUlQobV92aWRlb0Vs
ZW1lbnQpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IG1fdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybU1lZGlhKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJp
dmF0ZVF0Kj4ocGxhdGZvcm1NZWRpYS5tZWRpYS5xdE1lZGlhUGxheWVyKTsKK30KKworTWVkaWFQ
bGF5ZXJQcml2YXRlUXQqIEZ1bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXllckZvck5vZGUoTm9k
ZSogbm9kZSkKK3sKKyAgICBRX0FTU0VSVChub2RlKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAg
bV92aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7Cisg
ICAgcmV0dXJuIG1lZGlhUGxheWVyKCk7Cit9CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvUXQ6OnJl
cXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKQoreworICAgIFFfQVNTRVJUKG1fZnVs
bHNjcmVlblZpZGVvSGFuZGxlcik7CisgICAgcmV0dXJuIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxl
ci0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworfQorCit9CisKSW5kZXg6
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEZ1bGxz
Y3JlZW5WaWRlb1F0X2gKKyNkZWZpbmUgRnVsbHNjcmVlblZpZGVvUXRfaAorCisjaW5jbHVkZSA8
UU9iamVjdD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07
CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudFF0OworY2xhc3MgSFRN
TFZpZGVvRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdDsK
KworY2xhc3MgRnVsbHNjcmVlblZpZGVvUXQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBGdWxsc2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCopOworICAg
IH5GdWxsc2NyZWVuVmlkZW9RdCgpOworCisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVl
bkZvck5vZGUoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUo
Tm9kZSopOworICAgIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOwor
Citwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllcigpOworICAg
IE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllckZvck5vZGUoTm9kZSogbm9kZSA9IDAp
OworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgYWJvdXRUb0Nsb3NlKCk7CisKK3ByaXZhdGU6
CisgICAgQ2hyb21lQ2xpZW50UXQqIG1fY2hyb21lQ2xpZW50OworICAgIEhUTUxWaWRlb0VsZW1l
bnQqIG1fdmlkZW9FbGVtZW50OworICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBtX2Z1
bGxzY3JlZW5WaWRlb0hhbmRsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVRdF9o
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRl
b0hhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oIgor
CisjaW5jbHVkZSA8UUV2ZW50PgorI2luY2x1ZGUgPFFLZXlFdmVudD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpRdEZhbGxiYWNrRnVs
bHNjcmVlblZpZGVvV2lkZ2V0KCkKKyAgICA6UVZpZGVvV2lkZ2V0KCkKK3sKKyAgICBzZXRGdWxs
U2NyZWVuKHRydWUpOworfQorCitib29sIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6
OmV2ZW50KFFFdmVudCogZXYpCit7CisgICAgaWYgKGV2LT50eXBlKCkgPT0gIFFFdmVudDo6TW91
c2VCdXR0b25EYmxDbGljaykgeworICAgICAgICBlbWl0IGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAg
ICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIHJl
dHVybiBRVmlkZW9XaWRnZXQ6OmV2ZW50KGV2KTsKK30KKwordm9pZCBRdEZhbGxiYWNrRnVsbHNj
cmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYpCit7CisgICAgaWYg
KGV2LT5rZXkoKSA9PSBRdDo6S2V5X1NwYWNlKSB7CisgICAgICAgIGVtaXQgc3BhY2VCdXR0b25Q
cmVzc2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1F0RmFsbGJhY2tGdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyOjpRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCisgICAg
OiBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCisgICAgLCBtX21lZGlhUGxheWVyKDApCisg
ICAgLCBtX21lZGlhV2lkZ2V0KDApCit7Cit9CisKK1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyOjp+UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIGRlbGV0
ZSBtX21lZGlhV2lkZ2V0OworfQorCit2b2lkIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyOjplbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgUV9BU1NF
UlQocGxheWVyKTsKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVyOworCisgICAgbV9tZWRpYVdp
ZGdldCA9IG5ldyBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgbV9tZWRp
YVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV9tZWRpYVdpZGdldCk7CisKKyAgICBjb25uZWN0KG1f
bWVkaWFXaWRnZXQsIFNJR05BTChzcGFjZUJ1dHRvblByZXNzZWQoKSksIHRoaXMsIFNMT1Qob25Q
YXVzZU9yUGxheSgpKSk7CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoZnVsbHNj
cmVlbkNsb3NlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSkpOworICAgIG1f
bWVkaWFXaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUXRGYWxsYmFja0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBkZWxldGUgbV9tZWRp
YVdpZGdldDsKKyAgICBtX21lZGlhUGxheWVyID0gMDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsK
K30KKwordm9pZCBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6b25QYXVzZU9yUGxh
eSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQ
bGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7CisgICAgZWxzZQor
ICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK30KKwpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRG
YWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyX2gKKyNkZWZpbmUgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXJfaAorCisj
aW5jbHVkZSAiUGxhdGZvcm0uaCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIK
KworI2luY2x1ZGUgPFFWaWRlb1dpZGdldD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBR
RXZlbnQ7CitjbGFzcyBRS2V5RXZlbnQ7CisKK1FUX0VORF9OQU1FU1BBQ0UKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0IDogcHVi
bGljIFFWaWRlb1dpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRdEZhbGxiYWNr
RnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgdmlydHVhbCB+UXRGYWxsYmFja0Z1bGxzY3Jl
ZW5WaWRlb1dpZGdldCgpIHt9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZ1bGxzY3JlZW5DbG9z
ZWQoKTsKKyAgICB2b2lkIHNwYWNlQnV0dG9uUHJlc3NlZCgpOworCitwcm90ZWN0ZWQ6CisgICAg
Ym9vbCBldmVudChRRXZlbnQqKTsKKyAgICB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7
Cit9OworCitjbGFzcyBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBR
V2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBR
dEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIH5RdEZhbGxiYWNrRnVsbHNj
cmVlblZpZGVvSGFuZGxlcigpOworCisgICAgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRl
b1BsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHVibGljIFFfU0xPVFM6Cisg
ICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKik7CisgICAgdm9pZCBleGl0RnVs
bHNjcmVlbigpOworICAgIHZvaWQgb25QYXVzZU9yUGxheSgpOworCitwcml2YXRlOgorICAgIFFN
ZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKKyAgICBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVv
V2lkZ2V0KiBtX21lZGlhV2lkZ2V0OworfTsKKworfQorCisjZW5kaWYgLy8gUXRGYWxsYmFja0Z1
bGxzY3JlZW5WaWRlb0hhbmRsZXJfaApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0
UGxhdGZvcm1QbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmNwcAkocmV2aXNpb24gNzQ5NjcpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw0
ICsxMjcsMTIgQEAgUVdlYlRvdWNoTW9kaWZpZXIqIFF0UGxhdGZvcm1QbHVnaW46OmNyZQogICAg
IHJldHVybiBwID8gc3RhdGljX2Nhc3Q8UVdlYlRvdWNoTW9kaWZpZXIqPihwLT5jcmVhdGVFeHRl
bnNpb24oUVdlYktpdFBsYXRmb3JtUGx1Z2luOjpUb3VjaEludGVyYWN0aW9uKSkgOiAwOwogfQog
CisjaWYgRU5BQkxFKFZJREVPKQorUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIFF0UGxhdGZv
cm1QbHVnaW46OmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIFFXZWJLaXRQ
bGF0Zm9ybVBsdWdpbiogcCA9IHBsdWdpbigpOworICAgIHJldHVybiBwID8gc3RhdGljX2Nhc3Q8
UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktpdFBs
YXRmb3JtUGx1Z2luOjpGdWxsc2NyZWVuVmlkZW9QbGF5ZXIpKSA6IDA7Cit9CisjZW5kaWYKKwog
fQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCShy
ZXZpc2lvbiA3NDk2NykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAgY2xhc3MgUVdlYk5vdGlmaWNh
dGlvblByZXNlbnRlcjsKIGNsYXNzIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcjsKIGNsYXNzIFFX
ZWJTZWxlY3REYXRhOwogY2xhc3MgUVdlYlRvdWNoTW9kaWZpZXI7CisjaWYgRU5BQkxFKFZJREVP
KQorY2xhc3MgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI7CisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00MSw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICBRV2ViTm90aWZpY2F0
aW9uUHJlc2VudGVyKiBjcmVhdGVOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKICAgICBRV2ViSGFw
dGljRmVlZGJhY2tQbGF5ZXIqIGNyZWF0ZUhhcHRpY0ZlZWRiYWNrUGxheWVyKCk7CiAgICAgUVdl
YlRvdWNoTW9kaWZpZXIqIGNyZWF0ZVRvdWNoTW9kaWZpZXIoKTsKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIGNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hh
bmRsZXIoKTsKKyNlbmRpZgogCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwbHVnaW4oKTsK
IApJbmRleDogV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdp
bi5jcHAJKHJldmlzaW9uIDc0OTY3KQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1
Z2luL1dlYlBsdWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDkgQEAKICAqLwog
I2luY2x1ZGUgIldlYlBsdWdpbi5oIgogCisjaW5jbHVkZSA8UUV2ZW50PgogI2luY2x1ZGUgPFFI
Qm94TGF5b3V0PgorI2luY2x1ZGUgPFFLZXlFdmVudD4KICNpbmNsdWRlIDxRTGlzdFdpZGdldD4K
ICNpbmNsdWRlIDxRTGlzdFdpZGdldEl0ZW0+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CkBAIC0yMDgs
NiArMjEwLDc1IEBAIE11bHRpcGxlU2VsZWN0aW9uUG9wdXA6Ok11bHRpcGxlU2VsZWN0aW8KICAg
ICByZXNpemUoc2l6ZSgpLndpZHRoKCksIHZpc2libGVJdGVtQ291bnQgKiBnTWFlbW9MaXN0SXRl
bVNpemUpOwogfQogCisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCitG
dWxsc2NyZWVuVmlkZW9XaWRnZXQ6OkZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpCisgICAgOlFWaWRl
b1dpZGdldCgpCit7CisgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKK30KKworYm9vbCBGdWxsc2Ny
ZWVuVmlkZW9XaWRnZXQ6OmV2ZW50KFFFdmVudCogZXYpCit7CisgICAgaWYgKGV2LT50eXBlKCkg
PT0gIFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaykgeworICAgICAgICBlbWl0IGZ1bGxzY3Jl
ZW5DbG9zZWQoKTsKKyAgICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IAorICAgIHJldHVybiBRV2lkZ2V0OjpldmVudChldik7Cit9CisKK3ZvaWQgRnVsbHNj
cmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYpCit7CisgICAgaWYg
KGV2LT5rZXkoKSA9PSBRdDo6S2V5X1NwYWNlKSB7CisgICAgICAgIGVtaXQgc3BhY2VCdXR0b25Q
cmVzc2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK0Z1bGxzY3JlZW5WaWRlb0hh
bmRsZXI6OkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTogbV9tZWRpYVBsYXllcigwKSwgbV9tZWRp
YVdpZGdldCgwKQoreworfQorCitGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjp+RnVsbHNjcmVlblZp
ZGVvSGFuZGxlcigpCit7CisgICAgZGVsZXRlIG1fbWVkaWFXaWRnZXQ7Cit9CisKK2Jvb2wgRnVs
bHNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcjo6ZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIFFfQVNT
RVJUKHBsYXllcik7CisKKyAgICBtX21lZGlhV2lkZ2V0ID0gbmV3IEZ1bGxzY3JlZW5WaWRlb1dp
ZGdldCgpOworICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwgU0lHTkFMKHNwYWNlQnV0dG9uUHJl
c3NlZCgpKSwgdGhpcywgU0xPVChvblBhdXNlT3JQbGF5KCkpKTsKKyAgICBjb25uZWN0KG1fbWVk
aWFXaWRnZXQsIFNJR05BTChmdWxsc2NyZWVuQ2xvc2VkKCkpLCB0aGlzLCBTSUdOQUwoZnVsbHNj
cmVlbkNsb3NlZCgpKSk7CisKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVyOworICAgIG1fbWVk
aWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fbWVkaWFXaWRnZXQpOworICAgIG1fbWVkaWFXaWRn
ZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6
ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIG1fbWVkaWFXaWRnZXQtPmhpZGUoKTsKKyAgICBkZWxl
dGUgbV9tZWRpYVdpZGdldDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsKKyAgICBtX21lZGlhUGxh
eWVyID0gMDsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpvblBhdXNlT3JQbGF5
KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVkaWFQbGF5ZXI6OlBs
YXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1c2UoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKyNlbmRpZgorCiBib29sIFdlYlBsdWdp
bjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKIHsKICAgICBz
d2l0Y2ggKGV4dGVuc2lvbikgewpAQCAtMjE5LDYgKzI5MCwxMCBAQCBib29sIFdlYlBsdWdpbjo6
c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zCiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rp
b246CiAgICAgICAgIHJldHVybiB0cnVlOworI2lmIGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVO
QUJMRV9WSURFTworICAgIGNhc2UgRnVsbHNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkBAIC0yMzUsNiArMzEwLDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5z
aW9uKEV4dGUKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAgcmV0
dXJuIG5ldyBUb3VjaE1vZGlmaWVyKCk7CisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5B
QkxFX1ZJREVPCisgICAgY2FzZSBGdWxsc2NyZWVuVmlkZW9QbGF5ZXI6CisgICAgICAgIHJldHVy
biBuZXcgRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3Jt
cGx1Z2luL1dlYlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0
Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAkocmV2aXNpb24gNzQ5NjcpCisrKyBXZWJLaXQvcXQvZXhh
bXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDkgQEAKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKIAogI2luY2x1
ZGUgPFFEaWFsb2c+CisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCisj
aW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorI2VuZGlmCiAKIGNsYXNzIFFMaXN0V2lkZ2V0SXRlbTsK
IGNsYXNzIFFMaXN0V2lkZ2V0OwpAQCAtOTQsNiArOTcsNDAgQEAgcHVibGljOgogICAgIH0KIH07
CiAKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KK2NsYXNzIEZ1bGxz
Y3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgdmlydHVhbCB+RnVsbHNj
cmVlblZpZGVvV2lkZ2V0KCkge30KKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbHNjcmVlbkNs
b3NlZCgpOworICAgIHZvaWQgc3BhY2VCdXR0b25QcmVzc2VkKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBib29sIGV2ZW50KFFFdmVudCopOworICAgIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQq
KTsKK307CisKK2NsYXNzIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRnVsbHNjcmVl
blZpZGVvSGFuZGxlcigpOworICAgIHZpcnR1YWwgfkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsK
KyAgICBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdDsKKwor
cHVibGljIFFfU0xPVFM6CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKik7
CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgb25QYXVzZU9yUGxheSgpOwor
Citwcml2YXRlOgorICAgIFFNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsgLy8gbm90IG93bmVk
CisgICAgRnVsbHNjcmVlblZpZGVvV2lkZ2V0KiBtX21lZGlhV2lkZ2V0OyAvLyBvd25lZAorfTsK
KyNlbmRpZgorCiBjbGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJL
aXRQbGF0Zm9ybVBsdWdpbgogewogICAgIFFfT0JKRUNUCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBs
ZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHJldmlzaW9u
IDc0OTY3KQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1
Z2luLnBybwkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDIwIEBAIFRBUkdFVCA9ICQkcXRMaWJy
YXJ5VGFyZ2V0KHBsYXRmb3JtcGx1Z2kKIFRFTVBMQVRFID0gbGliCiBDT05GSUcgKz0gcGx1Z2lu
CiAKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxhYmxlCitsb2Fk
KG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2UgcmVx
dWlyZSBRdE11bHRpbWVkaWEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89Likgewor
ICAgIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICBDT05G
SUcgKz0gbW9iaWxpdHkKKyAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQorICAgICAgICBE
RUZJTkVTIC09IEVOQUJMRV9WSURFTz0wCisgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVP
PTEKKyAgICB9Cit9CisKIERFU1RESVIgPSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNdL3dlYmtpdAog
CiBTT1VSQ0VTICs9IFwKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9x
d2Via2l0cGxhdGZvcm1wbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc0OTY3KQor
KysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxRT2JqZWN0
PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJ
REVPCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorI2VuZGlmCiAKIGNsYXNzIFFXZWJTZWxlY3RE
YXRhCiB7CkBAIC0xMTEsNiArMTE0LDIzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGhpdFRlc3RQYWRkaW5nRm9yVG91Y2goY29uc3QgUGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAw
OwogfTsKIAorI2lmIGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworY2xhc3Mg
UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmly
dHVhbCB+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgPSAwOworCitRX1NJR05B
TFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbigpID0gMDsKK307CisjZW5kaWYKKwogY2xhc3MgUVdl
YktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjAsMTMgKzE0MCwxNiBAQCBwdWJs
aWM6CiAgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKICAgICAgICAgTm90aWZpY2F0aW9ucywK
ICAgICAgICAgSGFwdGljcywKLSAgICAgICAgVG91Y2hJbnRlcmFjdGlvbgorICAgICAgICBUb3Vj
aEludGVyYWN0aW9uLAorICAgICAgICBGdWxsc2NyZWVuVmlkZW9QbGF5ZXIKICAgICB9OwogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0ZUV4dGVuc2lvbihFeHRlbnNpb24g
ZXh0ZW5zaW9uKSBjb25zdCA9IDA7CiB9OwogCi1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQ
bGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS42Iik7
CitRVF9CRUdJTl9OQU1FU1BBQ0UKK1FfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3Jt
UGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjciKTsKK1FUX0VO
RF9OQU1FU1BBQ0UKIAogI2VuZGlmIC8vIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78241</attachid>
            <date>2011-01-07 08:25:14 -0800</date>
            <delta_ts>2011-01-07 15:59:29 -0800</delta_ts>
            <desc>fix style</desc>
            <filename>51249-V1.1.patch</filename>
            <type>text/plain</type>
            <size>27930</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNzUyNDIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjUyLDggKzMyNTIsMTUgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVP
PTEpIHsKIAogICAgICAgICBQS0dDT05GSUcgKz0gZ2xpYi0yLjAgZ2lvLTIuMCBnc3RyZWFtZXIt
MC4xMCBnc3RyZWFtZXItYXBwLTAuMTAgZ3N0cmVhbWVyLWJhc2UtMC4xMCBnc3RyZWFtZXItaW50
ZXJmYWNlcy0wLjEwIGdzdHJlYW1lci1wYnV0aWxzLTAuMTAgZ3N0cmVhbWVyLXBsdWdpbnMtYmFz
ZS0wLjEwIGdzdHJlYW1lci12aWRlby0wLjEwCiAgICAgIH0gZWxzZTpjb250YWlucyhNT0JJTElU
WV9DT05GSUcsIG11bHRpbWVkaWEpIHsKLSAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCi0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgIEhFQURFUlMg
Kz0gXCAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1
bGxzY3JlZW5WaWRlb1F0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgKKworICAgICAgICBT
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVy
UHJpdmF0ZVF0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwIFwKKyAgICAgICAgICAgICQkUFdELy4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAK
IAogICAgICAgICBDT05GSUcgKj0gbW9iaWxpdHkKICAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGlt
ZWRpYQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAJKHJldmlzaW9uIDc1MjQyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOCw3ICsxMDgsNyBAQCBNZWRpYVBsYXllclByaXZhdGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRl
CiAgICAgLCBtX3F1ZXVlZFNlZWsoLTEpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1
dG8pCiB7Ci0gICAgbV9tZWRpYVBsYXllci0+YmluZChtX3ZpZGVvSXRlbSk7CisgICAgbV9tZWRp
YVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRlb0l0ZW0pOwogICAgIG1fdmlkZW9TY2VuZS0+
YWRkSXRlbShtX3ZpZGVvSXRlbSk7CiAKICAgICAvLyBTaWduYWwgSGFuZGxlcnMKQEAgLTU4Nyw2
ICs1ODcsMjEgQEAgSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRdDo6bmF0dXJhbFNpegogICAg
IHJldHVybiBtX25hdHVyYWxTaXplOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpy
ZW1vdmVWaWRlb0l0ZW0oKQoreworICAgIG1fb2xkTmF0dXJhbFNpemUgPSBtX25hdHVyYWxTaXpl
OworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KHN0YXRpY19jYXN0PFFHcmFwaGlj
c1ZpZGVvSXRlbSo+KDApKTsKKyAgICBtX3ZpZGVvU2NlbmUtPnJlbW92ZUl0ZW0obV92aWRlb0l0
ZW0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXN0b3JlVmlkZW9JdGVtKCkK
K3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChtX3ZpZGVvSXRlbSk7CisgICAg
bV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9JdGVtKTsKKyAgICAvLyBGSVhNRSBhIHF0bW9i
aWxpdHkgYnVnLCBuZWVkIHRvIHJlc2V0IHRoZSBzaXplIHdoZW4gcmVzdG9yZSB0aGUgdmlkZW9p
dGVtLCBvdGhlcndpc2UgdGhlIHNpemUgaXMgMAorICAgIG5hdGl2ZVNpemVDaGFuZ2VkKFFTaXpl
KG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDc1MjQy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKQEAgLTEwOCw2ICsxMDgsMTAg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSgpIGNvbnN0OworICAgIFFNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSB7IHJldHVybiBt
X21lZGlhUGxheWVyOyB9CisgICAgdm9pZCByZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lkIHJl
c3RvcmVWaWRlb0l0ZW0oKTsKKwogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVz
Q2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUVycm9y
KFFNZWRpYVBsYXllcjo6RXJyb3IpOwpAQCAtMTQyLDYgKzE0Niw3IEBAIHByaXZhdGU6CiAKICAg
ICBJbnRTaXplIG1fY3VycmVudFNpemU7CiAgICAgSW50U2l6ZSBtX25hdHVyYWxTaXplOworICAg
IEludFNpemUgbV9vbGROYXR1cmFsU2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwogICAgIGJv
b2wgbV9pc1NlZWtpbmc7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZWQ7CkluZGV4OiBXZWJLaXQvcXQv
QXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkv
cXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc1MjQyKQorKysgV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBA
QAogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQgRU5B
QkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRp
ZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQogewpAQCAtMTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRp
bmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07CiAKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAm
JiBFTkFCTEVfVklERU8KK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGlj
IFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRl
b0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkg
e30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygp
IGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbHNjcmVlbkNsb3NlZCgpOwor
CitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRp
YVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9IDA7Cit9
OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogcHVibGljOgpAQCAt
MTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25zLAogICAg
ICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAgICAgICBUb3VjaEludGVy
YWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAgIEZ1bGxzY3JlZW5WaWRl
b1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0
ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwpAQCAtMTMyLDcgKzE1Myw3IEBAIHB1YmxpYzoK
IH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxh
dGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNiIpOwor
UV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQu
V2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogUVRfRU5EX05BTUVTUEFDRQogCiAjZW5kaWYg
Ly8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2aXNpb24gNzUyNDIpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3
NiwxNSBAQAogI2luY2x1ZGUgPHF0b29sdGlwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
CisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb1F0LmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIiAKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aCIKKyNpbmNsdWRlICJRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oIgorI2VuZGlm
IAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNp
dGVkTGlua3NDYWxsYmFja3MgPSBmYWxzZTsKQEAgLTgzLDYgKzkyLDkgQEAgYm9vbCBDaHJvbWVD
bGllbnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbAogQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVu
dFF0KFFXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBt
X2V2ZW50TG9vcCgwKQorI2lmIEVOQUJMRShWSURFTykKKyAgICAsIG1fZnVsbHNjcmVlblZpZGVv
KDApCisjZW5kaWYKIHsKICAgICB0b29sQmFyc1Zpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxlID0g
bWVudUJhclZpc2libGUgPSB0cnVlOwogfQpAQCAtOTEsNiArMTAzLDEwIEBAIENocm9tZUNsaWVu
dFF0Ojp+Q2hyb21lQ2xpZW50UXQoKQogewogICAgIGlmIChtX2V2ZW50TG9vcCkKICAgICAgICAg
bV9ldmVudExvb3AtPmV4aXQoKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBkZWxldGUgbV9m
dWxsc2NyZWVuVmlkZW87CisjZW5kaWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0V2lu
ZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC02NTEsNiArNjY3LDYzIEBAIEludFJl
Y3QgQ2hyb21lQ2xpZW50UXQ6OnZpc2libGVSZWN0Rm9yVGkKIH0KICNlbmRpZgogCisjaWYgRU5B
QkxFKFZJREVPKQorUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIENocm9tZUNsaWVudFF0Ojpj
cmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVv
SGFuZGxlciogcmVzdWx0ID0gbV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAg
IHJldHVybiBuZXcgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKK30KKworRnVs
bHNjcmVlblZpZGVvUXQqIENocm9tZUNsaWVudFF0OjpmdWxsc2NyZWVuVmlkZW8oKQoreworICAg
IGlmICghbV9mdWxsc2NyZWVuVmlkZW8pCisgICAgICAgIG1fZnVsbHNjcmVlblZpZGVvID0gbmV3
IEZ1bGxzY3JlZW5WaWRlb1F0KHRoaXMpOworICAgIHJldHVybiBtX2Z1bGxzY3JlZW5WaWRlbzsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25z
dCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6
cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpCit7CisgICAgcmV0dXJuIGZ1bGxz
Y3JlZW5WaWRlbygpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkK
K3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9U
YWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVk
aWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIGlmIChwbGF0Zm9ybU1l
ZGlhLnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpIHsKKyAgICAgICAg
dmlkZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZnVsbHNjcmVlblZpZGVvKCktPmVudGVyRnVsbHNjcmVlbkZvck5vZGUobm9kZSk7Cit9
CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRl
b1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOworCisgICAgaWYgKHBsYXRmb3Jt
TWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnVsbHNjcmVlblZpZGVvKCktPmV4aXRGdWxsc2NyZWVuRm9yTm9kZShu
b2RlKTsKK30gCisjZW5kaWYKKwogUVdlYlNlbGVjdE1ldGhvZCogQ2hyb21lQ2xpZW50UXQ6OmNy
ZWF0ZVNlbGVjdFBvcHVwKCkgY29uc3QKIHsKICAgICBRV2ViU2VsZWN0TWV0aG9kKiByZXN1bHQg
PSBtX3BsYXRmb3JtUGx1Z2luLmNyZWF0ZVNlbGVjdElucHV0TWV0aG9kKCk7CkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNzUyNDIpCisr
KyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IEZyYW1l
TG9hZFJlcXVlc3Q7CiAgICAgY2xhc3MgUXRBYnN0cmFjdFdlYlBvcHVwOwogICAgIHN0cnVjdCBW
aWV3cG9ydEFyZ3VtZW50czsKKyAgICBjbGFzcyBGdWxsc2NyZWVuVmlkZW9RdDsKIAogICAgIGNs
YXNzIENocm9tZUNsaWVudFF0IDogcHVibGljIENocm9tZUNsaWVudAogICAgIHsKQEAgLTE2Myw2
ICsxNjQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgbmVl
ZFRvdWNoRXZlbnRzKGJvb2wpIHsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKKyAgICAg
ICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIGNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIoKTsKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUXQqIGZ1bGxzY3JlZW5WaWRlbygpOworI2Vu
ZGlmCisKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKik7CiAKQEAgLTE5NSw2ICsyMDUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc3RhdHVzQmFyVmlzaWJsZTsK
ICAgICAgICAgYm9vbCBtZW51QmFyVmlzaWJsZTsKICAgICAgICAgUUV2ZW50TG9vcCogbV9ldmVu
dExvb3A7CisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICBGdWxsc2NyZWVuVmlkZW9RdCogbV9m
dWxsc2NyZWVuVmlkZW87CisjZW5kaWYKIAogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wVmlzaXRl
ZExpbmtzQ2FsbGJhY2tzOwogCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbHNj
cmVlblZpZGVvUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
dWxsc2NyZWVuVmlkZW9RdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZ1bGxz
Y3JlZW5WaWRlb1F0LmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVRdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJxd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPFFHcmFwaGljc1ZpZGVvSXRlbT4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGdWxsc2NyZWVuVmlkZW9RdDo6RnVsbHNjcmVlblZpZGVv
UXQoQ2hyb21lQ2xpZW50UXQqIGNocm9tZUNsaWVudCkKKyAgICA6IG1fY2hyb21lQ2xpZW50KGNo
cm9tZUNsaWVudCkKKyAgICAsIG1fdmlkZW9FbGVtZW50KDApCit7CisgICAgUV9BU1NFUlQobV9j
aHJvbWVDbGllbnQpOworCisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyID0gbV9jaHJvbWVD
bGllbnQtPmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBjb25uZWN0KG1fZnVs
bHNjcmVlblZpZGVvSGFuZGxlciwgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNM
T1QoYWJvdXRUb0Nsb3NlKCkpKTsKK30KKworRnVsbHNjcmVlblZpZGVvUXQ6On5GdWxsc2NyZWVu
VmlkZW9RdCgpCit7CisgICAgZGVsZXRlIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKK30KKwor
dm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2Rl
KQoreworICAgIFFfQVNTRVJUKG5vZGUpOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRp
YVBsYXllclF0ID0gbWVkaWFQbGF5ZXJGb3JOb2RlKG5vZGUpOworICAgIG1lZGlhUGxheWVyUXQt
PnJlbW92ZVZpZGVvSXRlbSgpOworICAgIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlci0+ZW50ZXJG
dWxsc2NyZWVuKG1lZGlhUGxheWVyUXQtPm1lZGlhUGxheWVyKCkpOworfQorCit2b2lkIEZ1bGxz
Y3JlZW5WaWRlb1F0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBR
X0FTU0VSVChub2RlKTsKKyAgICBRX1VOVVNFRChub2RlKTsKKyAgICBtX2Z1bGxzY3JlZW5WaWRl
b0hhbmRsZXItPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1l
ZGlhUGxheWVyUXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5ZXJR
dC0+cmVzdG9yZVZpZGVvSXRlbSgpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb1F0OjphYm91
dFRvQ2xvc2UoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9FbGVtZW50KTsKKyAgICBtX3ZpZGVv
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlUXQqIEZ1
bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXllcigpCit7CisgICAgUV9BU1NFUlQobV92aWRlb0Vs
ZW1lbnQpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IG1fdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybU1lZGlhKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJp
dmF0ZVF0Kj4ocGxhdGZvcm1NZWRpYS5tZWRpYS5xdE1lZGlhUGxheWVyKTsKK30KKworTWVkaWFQ
bGF5ZXJQcml2YXRlUXQqIEZ1bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXllckZvck5vZGUoTm9k
ZSogbm9kZSkKK3sKKyAgICBRX0FTU0VSVChub2RlKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAg
bV92aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7Cisg
ICAgcmV0dXJuIG1lZGlhUGxheWVyKCk7Cit9CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvUXQ6OnJl
cXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKQoreworICAgIFFfQVNTRVJUKG1fZnVs
bHNjcmVlblZpZGVvSGFuZGxlcik7CisgICAgcmV0dXJuIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxl
ci0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworfQorCit9CisKSW5kZXg6
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEZ1bGxz
Y3JlZW5WaWRlb1F0X2gKKyNkZWZpbmUgRnVsbHNjcmVlblZpZGVvUXRfaAorCisjaW5jbHVkZSA8
UU9iamVjdD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07
CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudFF0OworY2xhc3MgSFRN
TFZpZGVvRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdDsK
KworY2xhc3MgRnVsbHNjcmVlblZpZGVvUXQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBGdWxsc2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCopOworICAg
IH5GdWxsc2NyZWVuVmlkZW9RdCgpOworCisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVl
bkZvck5vZGUoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUo
Tm9kZSopOworICAgIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOwor
Citwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllcigpOworICAg
IE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllckZvck5vZGUoTm9kZSogPSAwKTsKKwor
cHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGFib3V0VG9DbG9zZSgpOworCitwcml2YXRlOgorICAg
IENocm9tZUNsaWVudFF0KiBtX2Nocm9tZUNsaWVudDsKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBt
X3ZpZGVvRWxlbWVudDsKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogbV9mdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyOworfTsKKworfQorCisjZW5kaWYgLy8gUG9wdXBNZW51UXRfaApJbmRl
eDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFj
a0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuaCIKKworI2lu
Y2x1ZGUgPFFFdmVudD4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6UXRGYWxsYmFja0Z1bGxzY3Jl
ZW5WaWRlb1dpZGdldCgpCisgICAgOlFWaWRlb1dpZGdldCgpCit7CisgICAgc2V0RnVsbFNjcmVl
bih0cnVlKTsKK30KKworYm9vbCBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpldmVu
dChRRXZlbnQqIGV2KQoreworICAgIGlmIChldi0+dHlwZSgpID09ICBRRXZlbnQ6Ok1vdXNlQnV0
dG9uRGJsQ2xpY2spIHsKKyAgICAgICAgZW1pdCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisgICAgICAg
IGV2LT5hY2NlcHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICByZXR1cm4g
UVZpZGVvV2lkZ2V0OjpldmVudChldik7Cit9CisKK3ZvaWQgUXRGYWxsYmFja0Z1bGxzY3JlZW5W
aWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQoreworICAgIGlmIChldi0+
a2V5KCkgPT0gUXQ6OktleV9TcGFjZSkgeworICAgICAgICBlbWl0IHNwYWNlQnV0dG9uUHJlc3Nl
ZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitRdEZhbGxiYWNrRnVsbHNjcmVlblZp
ZGVvSGFuZGxlcjo6UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgIDogUVdl
YkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgICwgbV9tZWRpYVBsYXllcigwKQorICAgICwg
bV9tZWRpYVdpZGdldCgwKQoreworfQorCitRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxl
cjo6flF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxldGUgbV9t
ZWRpYVdpZGdldDsKK30KKwordm9pZCBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6
ZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIFFfQVNTRVJUKHBs
YXllcik7CisgICAgbV9tZWRpYVBsYXllciA9IHBsYXllcjsKKworICAgIG1fbWVkaWFXaWRnZXQg
PSBuZXcgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAgIG1fbWVkaWFQbGF5
ZXItPnNldFZpZGVvT3V0cHV0KG1fbWVkaWFXaWRnZXQpOworCisgICAgY29ubmVjdChtX21lZGlh
V2lkZ2V0LCBTSUdOQUwoc3BhY2VCdXR0b25QcmVzc2VkKCkpLCB0aGlzLCBTTE9UKG9uUGF1c2VP
clBsYXkoKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwgU0lHTkFMKGZ1bGxzY3JlZW5D
bG9zZWQoKSksIHRoaXMsIFNJR05BTChmdWxsc2NyZWVuQ2xvc2VkKCkpKTsKKyAgICBtX21lZGlh
V2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIFF0RmFsbGJhY2tGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyOjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgZGVsZXRlIG1fbWVkaWFXaWRn
ZXQ7CisgICAgbV9tZWRpYVBsYXllciA9IDA7CisgICAgbV9tZWRpYVdpZGdldCA9IDA7Cit9CisK
K3ZvaWQgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI6Om9uUGF1c2VPclBsYXkoKQor
eworICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWlu
Z1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgIGVsc2UKKyAgICAg
ICAgbV9tZWRpYVBsYXllci0+cGxheSgpOworfQorCit9CisKSW5kZXg6IFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFu
ZGxlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJh
Y2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxl
cl9oCisjZGVmaW5lIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtLmgiCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisKKyNp
bmNsdWRlIDxRVmlkZW9XaWRnZXQ+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUV2ZW50
OworY2xhc3MgUUtleUV2ZW50OworCitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBR
VmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUXRGYWxsYmFja0Z1bGxz
Y3JlZW5WaWRlb1dpZGdldCgpOworICAgIHZpcnR1YWwgflF0RmFsbGJhY2tGdWxsc2NyZWVuVmlk
ZW9XaWRnZXQoKSB7fQorCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7
CisgICAgdm9pZCBzcGFjZUJ1dHRvblByZXNzZWQoKTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wg
ZXZlbnQoUUV2ZW50Kik7CisgICAgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOworfTsK
KworY2xhc3MgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1
bGxzY3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUXRGYWxs
YmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICB+UXRGYWxsYmFja0Z1bGxzY3JlZW5W
aWRlb0hhbmRsZXIoKTsKKworICAgIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZv
aWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciopOworICAgIHZvaWQgZXhpdEZ1bGxzY3Jl
ZW4oKTsKKyAgICB2b2lkIG9uUGF1c2VPclBsYXkoKTsKKworcHJpdmF0ZToKKyAgICBRTWVkaWFQ
bGF5ZXIqIG1fbWVkaWFQbGF5ZXI7CisgICAgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdl
dCogbV9tZWRpYVdpZGdldDsKK307CisKK30KKworI2VuZGlmIC8vIFF0RmFsbGJhY2tGdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyX2gKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRm
b3JtUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQ
bGF0Zm9ybVBsdWdpbi5jcHAJKHJldmlzaW9uIDc1MjQyKQorKysgV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNCArMTI3
LDEyIEBAIFFXZWJUb3VjaE1vZGlmaWVyKiBRdFBsYXRmb3JtUGx1Z2luOjpjcmUKICAgICByZXR1
cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJUb3VjaE1vZGlmaWVyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9u
KFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6VG91Y2hJbnRlcmFjdGlvbikpIDogMDsKIH0KIAorI2lm
IEVOQUJMRShWSURFTykKK1FXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBRdFBsYXRmb3JtUGx1
Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViS2l0UGxhdGZv
cm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJG
dWxsc2NyZWVuVmlkZW9IYW5kbGVyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbjo6RnVsbHNjcmVlblZpZGVvUGxheWVyKSkgOiAwOworfQorI2VuZGlmCisKIH0KSW5k
ZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAkocmV2aXNp
b24gNzUyNDIpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBAIGNsYXNzIFFXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXI7CiBjbGFzcyBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXI7CiBjbGFzcyBRV2ViU2Vs
ZWN0RGF0YTsKIGNsYXNzIFFXZWJUb3VjaE1vZGlmaWVyOworI2lmIEVOQUJMRShWSURFTykKK2Ns
YXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDEsNiArNDQsOSBAQCBwdWJsaWM6CiAgICAgUVdlYk5vdGlmaWNhdGlvblBy
ZXNlbnRlciogY3JlYXRlTm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CiAgICAgUVdlYkhhcHRpY0Zl
ZWRiYWNrUGxheWVyKiBjcmVhdGVIYXB0aWNGZWVkYmFja1BsYXllcigpOwogICAgIFFXZWJUb3Vj
aE1vZGlmaWVyKiBjcmVhdGVUb3VjaE1vZGlmaWVyKCk7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
KCk7CisjZW5kaWYKIAogICAgIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiogcGx1Z2luKCk7CiAKSW5k
ZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3Bw
CShyZXZpc2lvbiA3NTI0MikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9X
ZWJQbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw5IEBACiAgKi8KICNpbmNs
dWRlICJXZWJQbHVnaW4uaCIKIAorI2luY2x1ZGUgPFFFdmVudD4KICNpbmNsdWRlIDxRSEJveExh
eW91dD4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRnZXQ+CiAjaW5j
bHVkZSA8UUxpc3RXaWRnZXRJdGVtPgogI2luY2x1ZGUgPFFQYWludGVyPgpAQCAtMjA4LDYgKzIx
MCw3NSBAQCBNdWx0aXBsZVNlbGVjdGlvblBvcHVwOjpNdWx0aXBsZVNlbGVjdGlvCiAgICAgcmVz
aXplKHNpemUoKS53aWR0aCgpLCB2aXNpYmxlSXRlbUNvdW50ICogZ01hZW1vTGlzdEl0ZW1TaXpl
KTsKIH0KIAorI2lmIGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworRnVsbHNj
cmVlblZpZGVvV2lkZ2V0OjpGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKQorICAgIDpRVmlkZW9XaWRn
ZXQoKQoreworICAgIHNldEZ1bGxTY3JlZW4odHJ1ZSk7Cit9CisKK2Jvb2wgRnVsbHNjcmVlblZp
ZGVvV2lkZ2V0OjpldmVudChRRXZlbnQqIGV2KQoreworICAgIGlmIChldi0+dHlwZSgpID09ICBR
RXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2spIHsKKyAgICAgICAgZW1pdCBmdWxsc2NyZWVuQ2xv
c2VkKCk7CisgICAgICAgIGV2LT5hY2NlcHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fSAKKyAgICByZXR1cm4gUVdpZGdldDo6ZXZlbnQoZXYpOworfQorCit2b2lkIEZ1bGxzY3JlZW5W
aWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQoreworICAgIGlmIChldi0+
a2V5KCkgPT0gUXQ6OktleV9TcGFjZSkgeworICAgICAgICBlbWl0IHNwYWNlQnV0dG9uUHJlc3Nl
ZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
OjpGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk6IG1fbWVkaWFQbGF5ZXIoMCksIG1fbWVkaWFXaWRn
ZXQoMCkKK3sKK30KKworRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6fkZ1bGxzY3JlZW5WaWRlb0hh
bmRsZXIoKQoreworICAgIGRlbGV0ZSBtX21lZGlhV2lkZ2V0OworfQorCitib29sIEZ1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6
OmVudGVyRnVsbHNjcmVlbihRTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAgICBRX0FTU0VSVChw
bGF5ZXIpOworCisgICAgbV9tZWRpYVdpZGdldCA9IG5ldyBGdWxsc2NyZWVuVmlkZW9XaWRnZXQo
KTsKKyAgICBjb25uZWN0KG1fbWVkaWFXaWRnZXQsIFNJR05BTChzcGFjZUJ1dHRvblByZXNzZWQo
KSksIHRoaXMsIFNMT1Qob25QYXVzZU9yUGxheSgpKSk7CisgICAgY29ubmVjdChtX21lZGlhV2lk
Z2V0LCBTSUdOQUwoZnVsbHNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxzY3JlZW5D
bG9zZWQoKSkpOworCisgICAgbV9tZWRpYVBsYXllciA9IHBsYXllcjsKKyAgICBtX21lZGlhUGxh
eWVyLT5zZXRWaWRlb091dHB1dChtX21lZGlhV2lkZ2V0KTsKKyAgICBtX21lZGlhV2lkZ2V0LT5z
aG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRG
dWxsc2NyZWVuKCkKK3sKKyAgICBtX21lZGlhV2lkZ2V0LT5oaWRlKCk7CisgICAgZGVsZXRlIG1f
bWVkaWFXaWRnZXQ7CisgICAgbV9tZWRpYVdpZGdldCA9IDA7CisgICAgbV9tZWRpYVBsYXllciA9
IDA7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6b25QYXVzZU9yUGxheSgpCit7
CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5n
U3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7CisgICAgZWxzZQorICAgICAg
ICBtX21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisjZW5kaWYKKwogYm9vbCBXZWJQbHVnaW46OnN1
cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChleHRlbnNpb24pIHsKQEAgLTIxOSw2ICsyOTAsMTAgQEAgYm9vbCBXZWJQbHVnaW46OnN1cHBv
cnRzRXh0ZW5zaW9uKEV4dGVucwogI2VuZGlmCiAgICAgY2FzZSBUb3VjaEludGVyYWN0aW9uOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVf
VklERU8KKyAgICBjYXNlIEZ1bGxzY3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMjM1LDYgKzMxMCwxMCBAQCBRT2JqZWN0KiBXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbihF
eHRlCiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246CiAgICAgICAgIHJldHVybiBu
ZXcgVG91Y2hNb2RpZmllcigpOworI2lmIGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9W
SURFTworICAgIGNhc2UgRnVsbHNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gbmV3
IEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdp
bi9XZWJQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmgJKHJldmlzaW9uIDc1MjQyKQorKysgV2ViS2l0L3F0L2V4YW1wbGVz
L3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw5
IEBACiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAKICNpbmNsdWRlIDxR
RGlhbG9nPgorI2lmIGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworI2luY2x1
ZGUgPFFWaWRlb1dpZGdldD4KKyNlbmRpZgogCiBjbGFzcyBRTGlzdFdpZGdldEl0ZW07CiBjbGFz
cyBRTGlzdFdpZGdldDsKQEAgLTk0LDYgKzk3LDQwIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCisj
aWYgZGVmaW5lZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBGdWxsc2NyZWVu
VmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAgIHZpcnR1YWwgfkZ1bGxzY3JlZW5W
aWRlb1dpZGdldCgpIHt9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZ1bGxzY3JlZW5DbG9zZWQo
KTsKKyAgICB2b2lkIHNwYWNlQnV0dG9uUHJlc3NlZCgpOworCitwcm90ZWN0ZWQ6CisgICAgYm9v
bCBldmVudChRRXZlbnQqKTsKKyAgICB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7Cit9
OworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFXZWJGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRl
b0hhbmRsZXIoKTsKKyAgICB2aXJ0dWFsIH5GdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAg
Ym9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3Q7CisKK3B1Ymxp
YyBRX1NMT1RTOgorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciopOworICAg
IHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIG9uUGF1c2VPclBsYXkoKTsKKworcHJp
dmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7IC8vIG5vdCBvd25lZAorICAg
IEZ1bGxzY3JlZW5WaWRlb1dpZGdldCogbV9tZWRpYVdpZGdldDsgLy8gb3duZWQKK307CisjZW5k
aWYKKwogY2xhc3MgV2ViUGx1Z2luIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViS2l0UGxh
dGZvcm1QbHVnaW4KIHsKICAgICBRX09CSkVDVApJbmRleDogV2ViS2l0L3F0L2V4YW1wbGVzL3Bs
YXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
ZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCShyZXZpc2lvbiA3NTI0
MikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMywyMCBAQCBUQVJHRVQgPSAkJHF0TGlicmFyeVRh
cmdldChwbGF0Zm9ybXBsdWdpCiBURU1QTEFURSA9IGxpYgogQ09ORklHICs9IHBsdWdpbgogCisj
IyBsb2FkIG1vYmlsaXR5Y29uZmlnIGlmIG1vYmlsaXR5IGlzIGF2YWlsYWJsZQorbG9hZChtb2Jp
bGl0eWNvbmZpZywgdHJ1ZSkKKworIyBIVE1MNSBNZWRpYSBTdXBwb3J0CisjIFdlIHJlcXVpcmUg
UXRNdWx0aW1lZGlhCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPS4pIHsKKyAgICBj
b250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEpIHsKKyAgICAgICAgQ09ORklHICs9
IG1vYmlsaXR5CisgICAgICAgIE1PQklMSVRZICs9IG11bHRpbWVkaWEKKyAgICAgICAgREVGSU5F
UyAtPSBFTkFCTEVfVklERU89MAorICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCisg
ICAgfQorfQorCiBERVNURElSID0gJCRbUVRfSU5TVEFMTF9QTFVHSU5TXS93ZWJraXQKIAogU09V
UkNFUyArPSBcCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRm
b3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCShyZXZpc2lvbiA3NTI0MikKKysrIFdl
YktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNp
bmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTwor
I2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQog
ewpAQCAtMTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRU
ZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07
CiAKKyNpZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KK2NsYXNzIFFXZWJG
dWxsc2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwg
flFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgor
ICAgIHZvaWQgZnVsbHNjcmVlbkNsb3NlZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQ
bGF0Zm9ybVBsdWdpbgogewogcHVibGljOgpAQCAtMTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgTXVsdGlwbGVTZWxlY3Rpb25zLAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAg
ICBIYXB0aWNzLAotICAgICAgICBUb3VjaEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJh
Y3Rpb24sCisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAw
OwpAQCAtMTMyLDcgKzE1Myw3IEBAIHB1YmxpYzoKIH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQot
UV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQu
V2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0
UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIp
OwogUVRfRU5EX05BTUVTUEFDRQogCiAjZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gK
</data>
<flag name="review"
          id="69523"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78286</attachid>
            <date>2011-01-07 15:59:29 -0800</date>
            <delta_ts>2011-01-10 13:12:56 -0800</delta_ts>
            <desc>add change log</desc>
            <filename>51249-v1.2.patch</filename>
            <type>text/plain</type>
            <size>33150</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMDcgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0g
RXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9ydCBmdWxsIHNjcmVlbiB2aWRlbyBo
YW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MTI0OQorCisgICAgICAgIE1ha2UgdGhlIE1lZGlhUGxheWVyUHJpdmF0ZVF0IHRvIHN1cHBvcnQg
ZnVsbHNjcmVlbiBwbGF5ZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgTGF5b3V0
VGVzdHMvbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1pbmxpbmUuaHRtbCBpcyBhbHJlYWR5IGV4aXN0
aW5nLgorICAgICAgICBIb3dldmVyLCB0aGlzIHRlc3QgZmFpbGVkIGZvciBRdCAoUXRNZWRpYVBs
YXllcikgZHVlIHRvIGR1cmF0aW9uY2hhbmdlIGV2ZW50IGdldHMgZG91YmxlIGZpcmVkLgorICAg
ICAgICBTbywgc3RpbGwgc2tpcCBpdCBmb3IgUXQuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6TWVkaWFQbGF5ZXJQcml2
YXRlUXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlbW92ZVZp
ZGVvSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6cmVzdG9y
ZVZpZGVvSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzdXBw
b3J0c0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6
Om1lZGlhUGxheWVyKToKKwogMjAxMS0wMS0wNyAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzUyNDIp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUyLDggKzMyNTIs
MTUgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKIAogICAgICAgICBQS0dD
T05GSUcgKz0gZ2xpYi0yLjAgZ2lvLTIuMCBnc3RyZWFtZXItMC4xMCBnc3RyZWFtZXItYXBwLTAu
MTAgZ3N0cmVhbWVyLWJhc2UtMC4xMCBnc3RyZWFtZXItaW50ZXJmYWNlcy0wLjEwIGdzdHJlYW1l
ci1wYnV0aWxzLTAuMTAgZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZS0wLjEwIGdzdHJlYW1lci12aWRl
by0wLjEwCiAgICAgIH0gZWxzZTpjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEp
IHsKLSAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclBy
aXZhdGVRdC5oCi0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgIEhFQURFUlMgKz0gXCAKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggXAorICAgICAgICAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmggXAor
ICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tG
dWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgKKworICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBcCisgICAg
ICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVv
UXQuY3BwIFwKKyAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
dEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAKIAogICAgICAgICBDT05GSUcgKj0g
bW9iaWxpdHkKICAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJ
KHJldmlzaW9uIDc1MjQyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBNZWRp
YVBsYXllclByaXZhdGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRlCiAgICAgLCBtX3F1ZXVlZFNlZWso
LTEpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1dG8pCiB7Ci0gICAgbV9tZWRpYVBs
YXllci0+YmluZChtX3ZpZGVvSXRlbSk7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRw
dXQobV92aWRlb0l0ZW0pOwogICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7
CiAKICAgICAvLyBTaWduYWwgSGFuZGxlcnMKQEAgLTU4Nyw2ICs1ODcsMjEgQEAgSW50U2l6ZSBN
ZWRpYVBsYXllclByaXZhdGVRdDo6bmF0dXJhbFNpegogICAgIHJldHVybiBtX25hdHVyYWxTaXpl
OwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZW1vdmVWaWRlb0l0ZW0oKQorewor
ICAgIG1fb2xkTmF0dXJhbFNpemUgPSBtX25hdHVyYWxTaXplOworICAgIG1fbWVkaWFQbGF5ZXIt
PnNldFZpZGVvT3V0cHV0KHN0YXRpY19jYXN0PFFHcmFwaGljc1ZpZGVvSXRlbSo+KDApKTsKKyAg
ICBtX3ZpZGVvU2NlbmUtPnJlbW92ZUl0ZW0obV92aWRlb0l0ZW0pOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpyZXN0b3JlVmlkZW9JdGVtKCkKK3sKKyAgICBtX21lZGlhUGxheWVy
LT5zZXRWaWRlb091dHB1dChtX3ZpZGVvSXRlbSk7CisgICAgbV92aWRlb1NjZW5lLT5hZGRJdGVt
KG1fdmlkZW9JdGVtKTsKKyAgICAvLyBGSVhNRSBhIHF0bW9iaWxpdHkgYnVnLCBuZWVkIHRvIHJl
c2V0IHRoZSBzaXplIHdoZW4gcmVzdG9yZSB0aGUgdmlkZW9pdGVtLCBvdGhlcndpc2UgdGhlIHNp
emUgaXMgMAorICAgIG5hdGl2ZVNpemVDaGFuZ2VkKFFTaXplKG1fb2xkTmF0dXJhbFNpemUpKTsK
K30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDc1MjQyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVT
RShURVhUVVJFX01BUFBFUikKQEAgLTEwOCw2ICsxMDgsMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
ICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworICAgIFFN
ZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSB7IHJldHVybiBtX21lZGlhUGxheWVyOyB9CisgICAg
dm9pZCByZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lkIHJlc3RvcmVWaWRlb0l0ZW0oKTsKKwog
cHJpdmF0ZSBzbG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6
Ok1lZGlhU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3Ip
OwpAQCAtMTQyLDYgKzE0Niw3IEBAIHByaXZhdGU6CiAKICAgICBJbnRTaXplIG1fY3VycmVudFNp
emU7CiAgICAgSW50U2l6ZSBtX25hdHVyYWxTaXplOworICAgIEludFNpemUgbV9vbGROYXR1cmFs
U2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwogICAgIGJvb2wgbV9pc1NlZWtpbmc7CiAgICAg
Ym9vbCBtX2NvbXBvc2l0ZWQ7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MjU0KQorKysgV2ViS2l0L3F0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDExLTAxLTA3ICBZaSBT
aGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbUXRdIEV4dGVuZCB0aGUgUGxhdGZvcm0gUGx1Z2luIHRvIHN1
cHBvcnQgZnVsbCBzY3JlZW4gdmlkZW8gaGFuZGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyNDkKKworICAgICAgICBBZGQgYSBuZXcgd2Via2l0
IHBsYXRmb3JtIHBsdWdpbiBpbnRlcmZhY2UgdG8gc3VwcG9ydCBmdWxsIHNjcmVlbiB2aWRlbyBo
YW5kbGVyLgorICAgICAgICBBbHNvLCBhIGRlZmF1bHQgZnVsbHNjcmVlbiB2aWRlbyBoYW5kbGVy
IGlzIGluY2x1ZGVkLgorCisgICAgICAgICogQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOgor
ICAgICAgICAoUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKToKKyAgICAgICAgKFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRR
dCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpmdWxsc2NyZWVuVmlk
ZW8pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnN1cHBvcnRzRnVsbHNjcmVl
bkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnJlcXVpcmVzRnVs
bHNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50
UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50UXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlk
ZW9RdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6OkZ1
bGxzY3JlZW5WaWRlb1F0KToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5WaWRlb1F0Ojp+
RnVsbHNjcmVlblZpZGVvUXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6
OmVudGVyRnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlblZp
ZGVvUXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2Ny
ZWVuVmlkZW9RdDo6YWJvdXRUb0Nsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5W
aWRlb1F0OjptZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9R
dDo6bWVkaWFQbGF5ZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5WaWRl
b1F0OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6OlFWaWRlb1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxi
YWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpRdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpRdEZhbGxiYWNrRnVsbHNj
cmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxiYWNrRnVsbHNjcmVl
blZpZGVvSGFuZGxlcjo6flF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXI6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlF0RmFsbGJhY2tGdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyOjpvblBhdXNlT3JQbGF5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6On5RdEZhbGxiYWNrRnVsbHNj
cmVlblZpZGVvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlF0RmFsbGJhY2tGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaDoKKyAgICAgICAgKiBleGFt
cGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwOgorICAgICAgICAoOlFWaWRlb1dpZGdl
dCk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmV2ZW50KToKKyAgICAgICAgKEZ1
bGxzY3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudCk6CisgICAgICAgIChGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyOjpGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKEZ1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXI6On5GdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2spOgor
ICAgICAgICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAg
ICAgKEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKEZ1
bGxzY3JlZW5WaWRlb0hhbmRsZXI6Om9uUGF1c2VPclBsYXkpOgorICAgICAgICAoV2ViUGx1Z2lu
OjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lv
bik6CisgICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmg6CisgICAg
ICAgIChGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6On5GdWxsc2NyZWVuVmlkZW9XaWRnZXQpOgorICAg
ICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybzoKKyAgICAg
ICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaDoKKyAg
ICAgICAgKFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpRV2ViRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcik6CisgICAgICAgIChRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6flFXZWJGdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyKToKKwogMjAxMS0wMS0wNyAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktp
dC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24gNzUyNDIpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw5IEBACiAKICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5l
ZCBFTkFCTEVfVklERU8gJiYgRU5BQkxFX1ZJREVPCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgor
I2VuZGlmCiAKIGNsYXNzIFFXZWJTZWxlY3REYXRhCiB7CkBAIC0xMTUsNiArMTE4LDIzIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhpdFRlc3RQYWRkaW5nRm9yVG91Y2goY29uc3Qg
UGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAwOwogfTsKIAorI2lmIGRlZmluZWQgRU5BQkxFX1ZJ
REVPICYmIEVOQUJMRV9WSURFTworY2xhc3MgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBw
dWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbHNjcmVl
blZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIoKSB7fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgY29uc3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2Vk
KCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4o
UU1lZGlhUGxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbigpID0g
MDsKK307CisjZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6
CkBAIC0xMjQsNyArMTQ0LDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMs
CiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNo
SW50ZXJhY3Rpb24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbHNjcmVl
blZpZGVvUGxheWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lv
bihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CkBAIC0xMzIsNyArMTUzLDcgQEAgcHVi
bGljOgogfTsKIAogUVRfQkVHSU5fTkFNRVNQQUNFCi1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJL
aXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS42
Iik7CitRX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tp
YS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CiBRVF9FTkRfTkFNRVNQQUNFCiAKICNl
bmRpZiAvLyBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA3NTI0MikKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDE1IEBACiAjaW5jbHVkZSA8cXRvb2x0aXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAKKyNpZiBFTkFCTEUoVklERU8pCisjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvUXQuaCIK
KyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiIAorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVRdC5oIgorI2luY2x1ZGUgIlF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmgiCisj
ZW5kaWYgCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBDaHJvbWVDbGllbnRRdDo6ZHVt
cFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyA9IGZhbHNlOwpAQCAtODMsNiArOTIsOSBAQCBib29sIENo
cm9tZUNsaWVudFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsCiBDaHJvbWVDbGllbnRRdDo6Q2hyb21l
Q2xpZW50UXQoUVdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKICAg
ICAsIG1fZXZlbnRMb29wKDApCisjaWYgRU5BQkxFKFZJREVPKQorICAgICwgbV9mdWxsc2NyZWVu
VmlkZW8oMCkKKyNlbmRpZgogewogICAgIHRvb2xCYXJzVmlzaWJsZSA9IHN0YXR1c0JhclZpc2li
bGUgPSBtZW51QmFyVmlzaWJsZSA9IHRydWU7CiB9CkBAIC05MSw2ICsxMDMsMTAgQEAgQ2hyb21l
Q2xpZW50UXQ6On5DaHJvbWVDbGllbnRRdCgpCiB7CiAgICAgaWYgKG1fZXZlbnRMb29wKQogICAg
ICAgICBtX2V2ZW50TG9vcC0+ZXhpdCgpOworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIGRlbGV0
ZSBtX2Z1bGxzY3JlZW5WaWRlbzsKKyNlbmRpZgogfQogCiB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTY1MSw2ICs2NjcsNjMgQEAg
SW50UmVjdCBDaHJvbWVDbGllbnRRdDo6dmlzaWJsZVJlY3RGb3JUaQogfQogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoVklERU8pCitRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogQ2hyb21lQ2xpZW50
UXQ6OmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIFFXZWJGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyKiByZXN1bHQgPSBtX3BsYXRmb3JtUGx1Z2luLmNyZWF0ZUZ1bGxzY3JlZW5W
aWRlb0hhbmRsZXIoKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgcmV0dXJuIG5ldyBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworfQor
CitGdWxsc2NyZWVuVmlkZW9RdCogQ2hyb21lQ2xpZW50UXQ6OmZ1bGxzY3JlZW5WaWRlbygpCit7
CisgICAgaWYgKCFtX2Z1bGxzY3JlZW5WaWRlbykKKyAgICAgICAgbV9mdWxsc2NyZWVuVmlkZW8g
PSBuZXcgRnVsbHNjcmVlblZpZGVvUXQodGhpcyk7CisgICAgcmV0dXJuIG1fZnVsbHNjcmVlblZp
ZGVvOworfQorCitib29sIENocm9tZUNsaWVudFF0OjpzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2Rl
KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIHJldHVybiBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpOworfQorCitib29sIENocm9tZUNsaWVu
dFF0OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkKK3sKKyAgICByZXR1cm4g
ZnVsbHNjcmVlblZpZGVvKCktPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBu
b2RlKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2
aWRlb1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZv
cm1NZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOworCisgICAgaWYgKHBsYXRm
b3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkgeworICAg
ICAgICB2aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBmdWxsc2NyZWVuVmlkZW8oKS0+ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShub2Rl
KTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnZpZGVvVGFnKSk7CisKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0
Zm9ybU1lZGlhID0gdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCk7CisKKyAgICBpZiAocGxh
dGZvcm1NZWRpYS50eXBlICE9IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmdWxsc2NyZWVuVmlkZW8oKS0+ZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlKG5vZGUpOworfSAKKyNlbmRpZgorCiBRV2ViU2VsZWN0TWV0aG9kKiBDaHJvbWVDbGllbnRR
dDo6Y3JlYXRlU2VsZWN0UG9wdXAoKSBjb25zdAogewogICAgIFFXZWJTZWxlY3RNZXRob2QqIHJl
c3VsdCA9IG1fcGxhdGZvcm1QbHVnaW4uY3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsKSW5kZXg6
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA3NTI0
MikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3Qg
RnJhbWVMb2FkUmVxdWVzdDsKICAgICBjbGFzcyBRdEFic3RyYWN0V2ViUG9wdXA7CiAgICAgc3Ry
dWN0IFZpZXdwb3J0QXJndW1lbnRzOworICAgIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb1F0OwogCiAg
ICAgY2xhc3MgQ2hyb21lQ2xpZW50UXQgOiBwdWJsaWMgQ2hyb21lQ2xpZW50CiAgICAgewpAQCAt
MTYzLDYgKzE2NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBuZWVkVG91Y2hFdmVudHMoYm9vbCkgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykK
KyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9k
ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOwor
ICAgICAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNjcmVlblZpZGVv
SGFuZGxlcigpOworICAgICAgICBGdWxsc2NyZWVuVmlkZW9RdCogZnVsbHNjcmVlblZpZGVvKCk7
CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFz
c1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZv
ckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKTsKIApAQCAtMTk1LDYg
KzIwNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBzdGF0dXNCYXJWaXNp
YmxlOwogICAgICAgICBib29sIG1lbnVCYXJWaXNpYmxlOwogICAgICAgICBRRXZlbnRMb29wKiBt
X2V2ZW50TG9vcDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1F0
KiBtX2Z1bGxzY3JlZW5WaWRlbzsKKyNlbmRpZgogCiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBW
aXNpdGVkTGlua3NDYWxsYmFja3M7CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
dWxsc2NyZWVuVmlkZW9RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RnVsbHNjcmVlblZpZGVvUXQuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
InF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8UUdyYXBoaWNzVmlkZW9JdGVt
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Z1bGxzY3JlZW5WaWRlb1F0OjpGdWxsc2NyZWVu
VmlkZW9RdChDaHJvbWVDbGllbnRRdCogY2hyb21lQ2xpZW50KQorICAgIDogbV9jaHJvbWVDbGll
bnQoY2hyb21lQ2xpZW50KQorICAgICwgbV92aWRlb0VsZW1lbnQoMCkKK3sKKyAgICBRX0FTU0VS
VChtX2Nocm9tZUNsaWVudCk7CisKKyAgICBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIgPSBtX2No
cm9tZUNsaWVudC0+Y3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIGNvbm5lY3Qo
bV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLCBTSUdOQUwoZnVsbHNjcmVlbkNsb3NlZCgpKSwgdGhp
cywgU0xPVChhYm91dFRvQ2xvc2UoKSkpOworfQorCitGdWxsc2NyZWVuVmlkZW9RdDo6fkZ1bGxz
Y3JlZW5WaWRlb1F0KCkKK3sKKyAgICBkZWxldGUgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyOwor
fQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb1F0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
IG5vZGUpCit7CisgICAgUV9BU1NFUlQobm9kZSk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQq
IG1lZGlhUGxheWVyUXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5
ZXJRdC0+cmVtb3ZlVmlkZW9JdGVtKCk7CisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLT5l
bnRlckZ1bGxzY3JlZW4obWVkaWFQbGF5ZXJRdC0+bWVkaWFQbGF5ZXIoKSk7Cit9CisKK3ZvaWQg
RnVsbHNjcmVlblZpZGVvUXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQorewor
ICAgIFFfQVNTRVJUKG5vZGUpOworICAgIFFfVU5VU0VEKG5vZGUpOworICAgIG1fZnVsbHNjcmVl
blZpZGVvSGFuZGxlci0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVR
dCogbWVkaWFQbGF5ZXJRdCA9IG1lZGlhUGxheWVyRm9yTm9kZShub2RlKTsKKyAgICBtZWRpYVBs
YXllclF0LT5yZXN0b3JlVmlkZW9JdGVtKCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvUXQ6
OmFib3V0VG9DbG9zZSgpCit7CisgICAgUV9BU1NFUlQobV92aWRlb0VsZW1lbnQpOworICAgIG1f
dmlkZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworfQorCitNZWRpYVBsYXllclByaXZhdGVR
dCogRnVsbHNjcmVlblZpZGVvUXQ6Om1lZGlhUGxheWVyKCkKK3sKKyAgICBRX0FTU0VSVChtX3Zp
ZGVvRWxlbWVudCk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhID0gbV92aWRlb0Vs
ZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5
ZXJQcml2YXRlUXQqPihwbGF0Zm9ybU1lZGlhLm1lZGlhLnF0TWVkaWFQbGF5ZXIpOworfQorCitN
ZWRpYVBsYXllclByaXZhdGVRdCogRnVsbHNjcmVlblZpZGVvUXQ6Om1lZGlhUGxheWVyRm9yTm9k
ZShOb2RlKiBub2RlKQoreworICAgIFFfQVNTRVJUKG5vZGUpOworICAgIGlmIChub2RlKQorICAg
ICAgICBtX3ZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2Rl
KTsKKyAgICByZXR1cm4gbWVkaWFQbGF5ZXIoKTsKK30KKworYm9vbCBGdWxsc2NyZWVuVmlkZW9R
dDo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpCit7CisgICAgUV9BU1NFUlQo
bV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyKTsKKyAgICByZXR1cm4gbV9mdWxsc2NyZWVuVmlkZW9I
YW5kbGVyLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cit9CisKK30KKwpJ
bmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
RnVsbHNjcmVlblZpZGVvUXRfaAorI2RlZmluZSBGdWxsc2NyZWVuVmlkZW9RdF9oCisKKyNpbmNs
dWRlIDxRT2JqZWN0PgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFHcmFwaGljc1ZpZGVv
SXRlbTsKK1FUX0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRs
ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2hyb21lQ2xpZW50UXQ7CitjbGFz
cyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3MgTm9kZTsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZVF0OworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9RdCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBR
X09CSkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb1F0KENocm9tZUNsaWVudFF0Kik7
CisgICAgfkZ1bGxzY3JlZW5WaWRlb1F0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9y
Tm9kZShOb2RlKik7CisgICAgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNr
KCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyKCk7
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyRm9yTm9kZShOb2RlKiA9IDAp
OworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgYWJvdXRUb0Nsb3NlKCk7CisKK3ByaXZhdGU6
CisgICAgQ2hyb21lQ2xpZW50UXQqIG1fY2hyb21lQ2xpZW50OworICAgIEhUTUxWaWRlb0VsZW1l
bnQqIG1fdmlkZW9FbGVtZW50OworICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBtX2Z1
bGxzY3JlZW5WaWRlb0hhbmRsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVRdF9o
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRl
b0hhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oIgor
CisjaW5jbHVkZSA8UUV2ZW50PgorI2luY2x1ZGUgPFFLZXlFdmVudD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpRdEZhbGxiYWNrRnVs
bHNjcmVlblZpZGVvV2lkZ2V0KCkKKyAgICA6UVZpZGVvV2lkZ2V0KCkKK3sKKyAgICBzZXRGdWxs
U2NyZWVuKHRydWUpOworfQorCitib29sIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6
OmV2ZW50KFFFdmVudCogZXYpCit7CisgICAgaWYgKGV2LT50eXBlKCkgPT0gIFFFdmVudDo6TW91
c2VCdXR0b25EYmxDbGljaykgeworICAgICAgICBlbWl0IGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAg
ICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIHJl
dHVybiBRVmlkZW9XaWRnZXQ6OmV2ZW50KGV2KTsKK30KKwordm9pZCBRdEZhbGxiYWNrRnVsbHNj
cmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYpCit7CisgICAgaWYg
KGV2LT5rZXkoKSA9PSBRdDo6S2V5X1NwYWNlKSB7CisgICAgICAgIGVtaXQgc3BhY2VCdXR0b25Q
cmVzc2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1F0RmFsbGJhY2tGdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyOjpRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCisgICAg
OiBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCisgICAgLCBtX21lZGlhUGxheWVyKDApCisg
ICAgLCBtX21lZGlhV2lkZ2V0KDApCit7Cit9CisKK1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyOjp+UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIGRlbGV0
ZSBtX21lZGlhV2lkZ2V0OworfQorCit2b2lkIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyOjplbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgUV9BU1NF
UlQocGxheWVyKTsKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVyOworCisgICAgbV9tZWRpYVdp
ZGdldCA9IG5ldyBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgbV9tZWRp
YVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV9tZWRpYVdpZGdldCk7CisKKyAgICBjb25uZWN0KG1f
bWVkaWFXaWRnZXQsIFNJR05BTChzcGFjZUJ1dHRvblByZXNzZWQoKSksIHRoaXMsIFNMT1Qob25Q
YXVzZU9yUGxheSgpKSk7CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoZnVsbHNj
cmVlbkNsb3NlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSkpOworICAgIG1f
bWVkaWFXaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUXRGYWxsYmFja0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBtX21lZGlhV2lkZ2V0
LT5oaWRlKCk7CisgICAgZGVsZXRlIG1fbWVkaWFXaWRnZXQ7CisgICAgbV9tZWRpYVBsYXllciA9
IDA7CisgICAgbV9tZWRpYVdpZGdldCA9IDA7Cit9CisKK3ZvaWQgUXRGYWxsYmFja0Z1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXI6Om9uUGF1c2VPclBsYXkoKQoreworICAgIGlmIChtX21lZGlhUGxheWVy
LT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX21lZGlh
UGxheWVyLT5wYXVzZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGxheSgp
OworfQorCit9CisKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrRnVs
bHNjcmVlblZpZGVvSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRl
ZiBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcl9oCisjZGVmaW5lIFF0RmFsbGJhY2tG
dWxsc2NyZWVuVmlkZW9IYW5kbGVyX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtLmgiCisjaW5jbHVk
ZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisKKyNpbmNsdWRlIDxRVmlkZW9XaWRnZXQ+CisK
K1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUV2ZW50OworY2xhc3MgUUtleUV2ZW50OworCitR
VF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUXRGYWxsYmFj
a0Z1bGxzY3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAg
IHZpcnR1YWwgflF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKSB7fQorCitRX1NJR05B
TFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisgICAgdm9pZCBzcGFjZUJ1dHRvblBy
ZXNzZWQoKTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisgICAgdm9p
ZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOworfTsKKworY2xhc3MgUXRGYWxsYmFja0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIoKTsKKyAgICB+UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKworICAgIGJv
b2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRp
YVBsYXllciopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIG9uUGF1c2VP
clBsYXkoKTsKKworcHJpdmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7Cisg
ICAgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCogbV9tZWRpYVdpZGdldDsKK307CisK
K30KKworI2VuZGlmIC8vIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyX2gKSW5kZXg6
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAJKHJldmlz
aW9uIDc1MjQyKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNCArMTI3LDEyIEBAIFFXZWJUb3VjaE1vZGlmaWVy
KiBRdFBsYXRmb3JtUGx1Z2luOjpjcmUKICAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJU
b3VjaE1vZGlmaWVyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6
VG91Y2hJbnRlcmFjdGlvbikpIDogMDsKIH0KIAorI2lmIEVOQUJMRShWSURFTykKK1FXZWJGdWxs
c2NyZWVuVmlkZW9IYW5kbGVyKiBRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsK
KyAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKj4o
cC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6RnVsbHNjcmVlblZpZGVv
UGxheWVyKSkgOiAwOworfQorI2VuZGlmCisKIH0KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAkocmV2aXNpb24gNzUyNDIpCisrKyBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw5IEBAIGNsYXNzIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBRV2ViSGFw
dGljRmVlZGJhY2tQbGF5ZXI7CiBjbGFzcyBRV2ViU2VsZWN0RGF0YTsKIGNsYXNzIFFXZWJUb3Vj
aE1vZGlmaWVyOworI2lmIEVOQUJMRShWSURFTykKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyOworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArNDQsOSBA
QCBwdWJsaWM6CiAgICAgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogY3JlYXRlTm90aWZpY2F0
aW9uUHJlc2VudGVyKCk7CiAgICAgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKiBjcmVhdGVIYXB0
aWNGZWVkYmFja1BsYXllcigpOwogICAgIFFXZWJUb3VjaE1vZGlmaWVyKiBjcmVhdGVUb3VjaE1v
ZGlmaWVyKCk7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyKiBjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKIAogICAgIFFXZWJL
aXRQbGF0Zm9ybVBsdWdpbiogcGx1Z2luKCk7CiAKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9w
bGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9leGFt
cGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCShyZXZpc2lvbiA3NTI0MikKKysrIFdl
YktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw3ICsxOSw5IEBACiAgKi8KICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKIAorI2lu
Y2x1ZGUgPFFFdmVudD4KICNpbmNsdWRlIDxRSEJveExheW91dD4KKyNpbmNsdWRlIDxRS2V5RXZl
bnQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRnZXQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRnZXRJdGVtPgog
I2luY2x1ZGUgPFFQYWludGVyPgpAQCAtMjA4LDYgKzIxMCw3NSBAQCBNdWx0aXBsZVNlbGVjdGlv
blBvcHVwOjpNdWx0aXBsZVNlbGVjdGlvCiAgICAgcmVzaXplKHNpemUoKS53aWR0aCgpLCB2aXNp
YmxlSXRlbUNvdW50ICogZ01hZW1vTGlzdEl0ZW1TaXplKTsKIH0KIAorI2lmIGRlZmluZWQgRU5B
QkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpGdWxsc2Ny
ZWVuVmlkZW9XaWRnZXQoKQorICAgIDpRVmlkZW9XaWRnZXQoKQoreworICAgIHNldEZ1bGxTY3Jl
ZW4odHJ1ZSk7Cit9CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpldmVudChRRXZlbnQq
IGV2KQoreworICAgIGlmIChldi0+dHlwZSgpID09ICBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xp
Y2spIHsKKyAgICAgICAgZW1pdCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisgICAgICAgIGV2LT5hY2Nl
cHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICByZXR1cm4gUVdpZGdldDo6
ZXZlbnQoZXYpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVu
dChRS2V5RXZlbnQqIGV2KQoreworICAgIGlmIChldi0+a2V5KCkgPT0gUXQ6OktleV9TcGFjZSkg
eworICAgICAgICBlbWl0IHNwYWNlQnV0dG9uUHJlc3NlZCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCitGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
KCk6IG1fbWVkaWFQbGF5ZXIoMCksIG1fbWVkaWFXaWRnZXQoMCkKK3sKK30KKworRnVsbHNjcmVl
blZpZGVvSGFuZGxlcjo6fkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIGRlbGV0ZSBt
X21lZGlhV2lkZ2V0OworfQorCitib29sIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbHNjcmVlbihRTWVkaWFQ
bGF5ZXIqIHBsYXllcikKK3sKKyAgICBRX0FTU0VSVChwbGF5ZXIpOworCisgICAgbV9tZWRpYVdp
ZGdldCA9IG5ldyBGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKTsKKyAgICBjb25uZWN0KG1fbWVkaWFX
aWRnZXQsIFNJR05BTChzcGFjZUJ1dHRvblByZXNzZWQoKSksIHRoaXMsIFNMT1Qob25QYXVzZU9y
UGxheSgpKSk7CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoZnVsbHNjcmVlbkNs
b3NlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSkpOworCisgICAgbV9tZWRp
YVBsYXllciA9IHBsYXllcjsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChtX21l
ZGlhV2lkZ2V0KTsKKyAgICBtX21lZGlhV2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQorCit2
b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBtX21l
ZGlhV2lkZ2V0LT5oaWRlKCk7CisgICAgZGVsZXRlIG1fbWVkaWFXaWRnZXQ7CisgICAgbV9tZWRp
YVdpZGdldCA9IDA7CisgICAgbV9tZWRpYVBsYXllciA9IDA7Cit9CisKK3ZvaWQgRnVsbHNjcmVl
blZpZGVvSGFuZGxlcjo6b25QYXVzZU9yUGxheSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXIt
PnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQ
bGF5ZXItPnBhdXNlKCk7CisgICAgZWxzZQorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7
Cit9CisjZW5kaWYKKwogYm9vbCBXZWJQbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lv
biBleHRlbnNpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNoIChleHRlbnNpb24pIHsKQEAgLTIxOSw2
ICsyOTAsMTAgQEAgYm9vbCBXZWJQbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVucwogI2Vu
ZGlmCiAgICAgY2FzZSBUb3VjaEludGVyYWN0aW9uOgogICAgICAgICByZXR1cm4gdHJ1ZTsKKyNp
ZiBkZWZpbmVkIEVOQUJMRV9WSURFTyAmJiBFTkFCTEVfVklERU8KKyAgICBjYXNlIEZ1bGxzY3Jl
ZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjM1LDYgKzMxMCwxMCBAQCBRT2Jq
ZWN0KiBXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbihFeHRlCiAjZW5kaWYKICAgICBjYXNlIFRv
dWNoSW50ZXJhY3Rpb246CiAgICAgICAgIHJldHVybiBuZXcgVG91Y2hNb2RpZmllcigpOworI2lm
IGRlZmluZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworICAgIGNhc2UgRnVsbHNjcmVl
blZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gbmV3IEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIo
KTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6
IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHJldmlz
aW9uIDc1MjQyKQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSAiV2ViTm90aWZp
Y2F0aW9uUHJlc2VudGVyLmgiCiAKICNpbmNsdWRlIDxRRGlhbG9nPgorI2lmIGRlZmluZWQgRU5B
QkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworI2luY2x1ZGUgPFFWaWRlb1dpZGdldD4KKyNlbmRp
ZgogCiBjbGFzcyBRTGlzdFdpZGdldEl0ZW07CiBjbGFzcyBRTGlzdFdpZGdldDsKQEAgLTk0LDYg
Kzk3LDQwIEBAIHB1YmxpYzoKICAgICB9CiB9OwogCisjaWYgZGVmaW5lZCBFTkFCTEVfVklERU8g
JiYgRU5BQkxFX1ZJREVPCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZp
ZGVvV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb1dp
ZGdldCgpOworICAgIHZpcnR1YWwgfkZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpIHt9CisKK1FfU0lH
TkFMUzoKKyAgICB2b2lkIGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAgICB2b2lkIHNwYWNlQnV0dG9u
UHJlc3NlZCgpOworCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBldmVudChRRXZlbnQqKTsKKyAgICB2
b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7Cit9OworCitjbGFzcyBGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyIDogcHVibGljIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIHsKKyAgICBRX09C
SkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICB2aXJ0dWFs
IH5GdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5G
b3JWaWRlb1BsYXliYWNrKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgZW50
ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsK
KyAgICB2b2lkIG9uUGF1c2VPclBsYXkoKTsKKworcHJpdmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIq
IG1fbWVkaWFQbGF5ZXI7IC8vIG5vdCBvd25lZAorICAgIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCog
bV9tZWRpYVdpZGdldDsgLy8gb3duZWQKK307CisjZW5kaWYKKwogY2xhc3MgV2ViUGx1Z2luIDog
cHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKICAgICBRX09C
SkVDVApJbmRleDogV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1
Z2luLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4v
cGxhdGZvcm1wbHVnaW4ucHJvCShyZXZpc2lvbiA3NTI0MikKKysrIFdlYktpdC9xdC9leGFtcGxl
cy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMs
NiArMywyMCBAQCBUQVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldChwbGF0Zm9ybXBsdWdpCiBURU1Q
TEFURSA9IGxpYgogQ09ORklHICs9IHBsdWdpbgogCisjIyBsb2FkIG1vYmlsaXR5Y29uZmlnIGlm
IG1vYmlsaXR5IGlzIGF2YWlsYWJsZQorbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKKworIyBI
VE1MNSBNZWRpYSBTdXBwb3J0CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhCishY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1ZJREVPPS4pIHsKKyAgICBjb250YWlucyhNT0JJTElUWV9DT05GSUcs
IG11bHRpbWVkaWEpIHsKKyAgICAgICAgQ09ORklHICs9IG1vYmlsaXR5CisgICAgICAgIE1PQklM
SVRZICs9IG11bHRpbWVkaWEKKyAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MAorICAg
ICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCisgICAgfQorfQorCiBERVNURElSID0gJCRb
UVRfSU5TVEFMTF9QTFVHSU5TXS93ZWJraXQKIAogU09VUkNFUyArPSBcCkluZGV4OiBXZWJLaXQv
cXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9y
bXBsdWdpbi5oCShyZXZpc2lvbiA3NTI0MikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsOSBAQAogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmlu
ZWQgRU5BQkxFX1ZJREVPICYmIEVOQUJMRV9WSURFTworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4K
KyNlbmRpZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQogewpAQCAtMTE1LDYgKzExOCwyMyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0
IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07CiAKKyNpZiBkZWZpbmVkIEVOQUJMRV9W
SURFTyAmJiBFTkFCTEVfVklERU8KK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkZ1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbHNjcmVlbkNsb3Nl
ZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVu
KFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9
IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogcHVibGlj
OgpAQCAtMTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25z
LAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAgICAgICBUb3Vj
aEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAgIEZ1bGxzY3Jl
ZW5WaWRlb1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNp
b24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwpAQCAtMTMyLDcgKzE1Myw3IEBAIHB1
YmxpYzoKIH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2Vi
S2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEu
NiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9r
aWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogUVRfRU5EX05BTUVTUEFDRQogCiAj
ZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gK
</data>
<flag name="review"
          id="69584"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78440</attachid>
            <date>2011-01-10 13:12:56 -0800</date>
            <delta_ts>2011-01-10 13:46:52 -0800</delta_ts>
            <desc>updated with Simon&apos;s suggestion (still has default fullscreen widget)</desc>
            <filename>51249-v1.3.patch</filename>
            <type>text/plain</type>
            <size>33425</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1Mzc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMTAgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIE1ha2UgdGhlIE1lZGlhUGxheWVy
UHJpdmF0ZVF0IHRvIHN1cHBvcnQgZnVsbHNjcmVlbiBwbGF5ZXIuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1pbmxpbmUu
aHRtbCBpcyBhbHJlYWR5IGV4aXN0aW5nLgorICAgICAgICBIb3dldmVyLCB0aGlzIHRlc3QgZmFp
bGVkIGZvciBRdCAoUXRNZWRpYVBsYXllcikgZHVlIHRvIGR1cmF0aW9uY2hhbmdlIGV2ZW50IGdl
dHMgZG91YmxlIGZpcmVkLgorICAgICAgICBTbywgc3RpbGwgc2tpcCBpdCBmb3IgUXQuCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRlUXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXQ6OnJlbW92ZVZpZGVvSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRdDo6cmVzdG9yZVZpZGVvSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om1lZGlhUGxheWVyKToKKwogMjAxMS0wMS0wOSAgVG9ueSBH
ZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzUzNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzI0OSw4ICsz
MjQ5LDE1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKICAgICAgICAg
UEtHQ09ORklHICs9IGdsaWItMi4wIGdpby0yLjAgZ3N0cmVhbWVyLTAuMTAgZ3N0cmVhbWVyLWFw
cC0wLjEwIGdzdHJlYW1lci1iYXNlLTAuMTAgZ3N0cmVhbWVyLWludGVyZmFjZXMtMC4xMCBnc3Ry
ZWFtZXItcGJ1dGlscy0wLjEwIGdzdHJlYW1lci1wbHVnaW5zLWJhc2UtMC4xMCBnc3RyZWFtZXIt
dmlkZW8tMC4xMAogICAgICB9IGVsc2U6Y29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBtdWx0aW1l
ZGlhKSB7Ci0gICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5
ZXJQcml2YXRlUXQuaAotICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAorICAgICAgICBIRUFERVJTICs9IFwgCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oIFwKKyAgICAgICAg
ICAgICQkUFdELy4uLy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9R
dC5oIFwKKyAgICAgICAgICAgICQkUFdELy4uLy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
dEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oCisKKyAgICAgICAgU09VUkNFUyArPSBc
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5j
cHAgXAorICAgICAgICAgICAgJCRQV0QvLi4vLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1
bGxzY3JlZW5WaWRlb1F0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC8uLi8uLi9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuY3BwCiAKICAg
ICAgICAgQ09ORklHICo9IG1vYmlsaXR5CiAgICAgICAgIE1PQklMSVRZICs9IG11bHRpbWVkaWEK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHJldmlzaW9uIDc1Mzc2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZQogICAgICwgbV9xdWV1ZWRTZWVrKC0xKQogICAgICwgbV9wcmVsb2Fk
KE1lZGlhUGxheWVyOjpBdXRvKQogewotICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQobV92aWRlb0l0
ZW0pOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKICAg
ICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogCiAgICAgLy8gU2lnbmFsIEhh
bmRsZXJzCkBAIC01ODcsNiArNTg3LDIyIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
Om5hdHVyYWxTaXoKICAgICByZXR1cm4gbV9uYXR1cmFsU2l6ZTsKIH0KIAordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdDo6cmVtb3ZlVmlkZW9JdGVtKCkKK3sKKyAgICBtX29sZE5hdHVyYWxTaXpl
ID0gbV9uYXR1cmFsU2l6ZTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChzdGF0
aWNfY2FzdDxRR3JhcGhpY3NWaWRlb0l0ZW0qPigwKSk7CisgICAgbV92aWRlb1NjZW5lLT5yZW1v
dmVJdGVtKG1fdmlkZW9JdGVtKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVz
dG9yZVZpZGVvSXRlbSgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92
aWRlb0l0ZW0pOworICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CisgICAg
Ly8gRklYTUUgYSBxdG1vYmlsaXR5IGJ1ZywgbmVlZCB0byByZXNldCB0aGUgc2l6ZSB3aGVuIHJl
c3RvcmUgdGhlIHZpZGVvaXRlbSwgb3RoZXJ3aXNlIHRoZSBzaXplIGlzIDAKKyAgICAvLyBodHRw
Oi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUTU9CSUxJVFktOTcxCisgICAgbmF0
aXZlU2l6ZUNoYW5nZWQoUVNpemUobV9vbGROYXR1cmFsU2l6ZSkpOworfQorCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiA3NTM3NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSKQpAQCAtMTA4LDYgKzEwOCwxMSBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7CisK
KyAgICBRTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVBs
YXllcjsgfQorICAgIHZvaWQgcmVtb3ZlVmlkZW9JdGVtKCk7CisgICAgdm9pZCByZXN0b3JlVmlk
ZW9JdGVtKCk7CisKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBtZWRpYVN0YXR1c0NoYW5nZWQo
UU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CiAgICAgdm9pZCBoYW5kbGVFcnJvcihRTWVkaWFQ
bGF5ZXI6OkVycm9yKTsKQEAgLTE0Miw2ICsxNDcsNyBAQCBwcml2YXRlOgogCiAgICAgSW50U2l6
ZSBtX2N1cnJlbnRTaXplOwogICAgIEludFNpemUgbV9uYXR1cmFsU2l6ZTsKKyAgICBJbnRTaXpl
IG1fb2xkTmF0dXJhbFNpemU7CiAgICAgYm9vbCBtX2lzVmlzaWJsZTsKICAgICBib29sIG1faXNT
ZWVraW5nOwogICAgIGJvb2wgbV9jb21wb3NpdGVkOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTM3NykKKysr
IFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MCBAQAorMjAx
MS0wMS0xMCAgWWkgU2hlbiAgPHlpLjQuc2hlbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBFeHRlbmQgdGhlIFBsYXRmb3Jt
IFBsdWdpbiB0byBzdXBwb3J0IGZ1bGwgc2NyZWVuIHZpZGVvIGhhbmRsZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMjQ5CisKKyAgICAgICAgQWRk
IGEgbmV3IHdlYmtpdCBwbGF0Zm9ybSBwbHVnaW4gaW50ZXJmYWNlIHRvIHN1cHBvcnQgZnVsbCBz
Y3JlZW4gdmlkZW8gaGFuZGxlci4KKyAgICAgICAgQWxzbywgYSBkZWZhdWx0IGZ1bGxzY3JlZW4g
dmlkZW8gaGFuZGxlciBpcyBpbmNsdWRlZC4KKworICAgICAgICAqIEFwaS9xd2Via2l0cGxhdGZv
cm1wbHVnaW4uaDoKKyAgICAgICAgKFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpRV2ViRnVs
bHNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgIChRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxl
cjo6flFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6
Q2hyb21lQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6On5DaHJv
bWVDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6Y3JlYXRlRnVs
bHNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6
ZnVsbHNjcmVlblZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpzdXBw
b3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0
OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnVsbHNjcmVlblZpZGVvUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3Jl
ZW5WaWRlb1F0OjpGdWxsc2NyZWVuVmlkZW9RdCk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2Ny
ZWVuVmlkZW9RdDo6fkZ1bGxzY3JlZW5WaWRlb1F0KToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxz
Y3JlZW5WaWRlb1F0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZ1bGxzY3JlZW5WaWRlb1F0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6OmFib3V0VG9DbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGdWxsc2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnVs
bHNjcmVlblZpZGVvUXQ6Om1lZGlhUGxheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpG
dWxsc2NyZWVuVmlkZW9RdDo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuaDogQWRkZWQuCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OjpRVmlkZW9XaWRnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6ZXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6UXRG
YWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UXRGYWxs
YmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI6On5RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxl
cjo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlF0RmFsbGJhY2tGdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpRdEZh
bGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6b25QYXVzZU9yUGxheSk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0Ojp+UXRG
YWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpRdEZhbGxi
YWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5
YmFjayk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmg6Cisg
ICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcDoKKyAgICAgICAg
KDpRVmlkZW9XaWRnZXQpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpldmVudCk6
CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmtleVByZXNzRXZlbnQpOgorICAgICAg
ICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6RnVsbHNjcmVlblZpZGVvSGFuZGxlcik6CisgICAg
ICAgIChGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjp+RnVsbHNjcmVlblZpZGVvSGFuZGxlcik6Cisg
ICAgICAgIChGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRl
b1BsYXliYWNrKToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbHNj
cmVlbik6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbHNjcmVlbik6
CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpvblBhdXNlT3JQbGF5KToKKyAgICAg
ICAgKFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoV2ViUGx1Z2luOjpj
cmVhdGVFeHRlbnNpb24pOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBs
dWdpbi5oOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvV2lkZ2V0Ojp+RnVsbHNjcmVlblZpZGVv
V2lkZ2V0KToKKyAgICAgICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdp
bi5wcm86CisgICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3Jt
cGx1Z2luLmg6CisgICAgICAgIChRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6UVdlYkZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6
On5RV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcik6CisKIDIwMTEtMDEtMDkgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI3NTMzNy4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1
Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4u
aAkocmV2aXNpb24gNzUzNzYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxRT2JqZWN0
PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9W
SURFTworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBRV2ViU2VsZWN0
RGF0YQogewpAQCAtMTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0g
MDsKIH07CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCitjbGFz
cyBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09C
SkVDVAorcHVibGljOgorICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2
aXJ0dWFsIH5RV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCBib29s
IHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7CisKK1FfU0lH
TkFMUzoKKyAgICB2b2lkIGZ1bGxzY3JlZW5DbG9zZWQoKTsKKworcHVibGljIFFfU0xPVFM6Cisg
ICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbihRTWVkaWFQbGF5ZXIqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgorCiBjbGFzcyBR
V2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKIHB1YmxpYzoKQEAgLTEyNCw3ICsxNDQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKICAgICAgICAgTm90aWZpY2F0aW9ucywK
ICAgICAgICAgSGFwdGljcywKLSAgICAgICAgVG91Y2hJbnRlcmFjdGlvbgorICAgICAgICBUb3Vj
aEludGVyYWN0aW9uLAorICAgICAgICBGdWxsc2NyZWVuVmlkZW9QbGF5ZXIKICAgICB9OwogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNv
bnN0ID0gMDsKQEAgLTEzMiw3ICsxNTMsNyBAQCBwdWJsaWM6CiB9OwogCiBRVF9CRUdJTl9OQU1F
U1BBQ0UKLVFfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5v
a2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjYiKTsKK1FfREVDTEFSRV9JTlRFUkZBQ0Uo
UVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdp
bi8xLjciKTsKIFFUX0VORF9OQU1FU1BBQ0UKIAogI2VuZGlmIC8vIFFXRUJLSVRQTEFURk9STVBM
VUdJTl9ICkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5j
cHAJKHJldmlzaW9uIDc1Mzc2KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTUgQEAKICNpbmNsdWRlIDxx
dG9vbHRpcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAorI2lmIEVOQUJMRShWSURFTykK
KyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9RdC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIgCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVu
dC5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjaW5jbHVkZSAiUXRGYWxs
YmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuaCIKKyNlbmRpZiAKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBib29sIENocm9tZUNsaWVudFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzID0g
ZmFsc2U7CkBAIC04Myw2ICs5Miw5IEBAIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNpdGVk
TGlua3NDYWwKIENocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRRdChRV2ViUGFnZSogd2ViUGFn
ZSkKICAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQogICAgICwgbV9ldmVudExvb3AoMCkKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgLCBtX2Z1bGxzY3JlZW5WaWRlbygwKQorI2VuZGlmCiB7CiAgICAg
dG9vbEJhcnNWaXNpYmxlID0gc3RhdHVzQmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNpYmxlID0gdHJ1
ZTsKIH0KQEAgLTkxLDYgKzEwMywxMCBAQCBDaHJvbWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0
KCkKIHsKICAgICBpZiAobV9ldmVudExvb3ApCiAgICAgICAgIG1fZXZlbnRMb29wLT5leGl0KCk7
CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZGVsZXRlIG1fZnVsbHNjcmVlblZpZGVvOworI2Vu
ZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQpAQCAtNjQ4LDYgKzY2NCw2MyBAQCBJbnRSZWN0IENocm9tZUNsaWVudFF0Ojp2
aXNpYmxlUmVjdEZvclRpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKK1FXZWJGdWxs
c2NyZWVuVmlkZW9IYW5kbGVyKiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlRnVsbHNjcmVlblZpZGVv
SGFuZGxlcigpCit7CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIHJlc3VsdCA9IG1f
cGxhdGZvcm1QbHVnaW4uY3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gbmV3IFF0RmFsbGJh
Y2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7Cit9CisKK0Z1bGxzY3JlZW5WaWRlb1F0KiBDaHJv
bWVDbGllbnRRdDo6ZnVsbHNjcmVlblZpZGVvKCkKK3sKKyAgICBpZiAoIW1fZnVsbHNjcmVlblZp
ZGVvKQorICAgICAgICBtX2Z1bGxzY3JlZW5WaWRlbyA9IG5ldyBGdWxsc2NyZWVuVmlkZW9RdCh0
aGlzKTsKKyAgICByZXR1cm4gbV9mdWxsc2NyZWVuVmlkZW87Cit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50UXQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAg
ICBBU1NFUlQobm9kZSk7CisgICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2
aWRlb1RhZyk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50UXQ6OnJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKQoreworICAgIHJldHVybiBmdWxsc2NyZWVuVmlkZW8oKS0+cmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworfQorCit2b2lkIENocm9tZUNsaWVudFF0
OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUg
JiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSk7CisKKyAgICBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4o
bm9kZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhID0gdmlkZW9FbGVtZW50LT5w
bGF0Zm9ybU1lZGlhKCk7CisKKyAgICBBU1NFUlQocGxhdGZvcm1NZWRpYS50eXBlID09IFBsYXRm
b3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKTsKKyAgICBpZiAocGxhdGZvcm1NZWRpYS50eXBl
ICE9IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKQorICAgICAgICByZXR1cm47CisK
KyAgICBmdWxsc2NyZWVuVmlkZW8oKS0+ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRRdDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUp
Cit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVv
VGFnKSk7CisKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1l
ZGlhID0gdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCk7CisKKyAgICBBU1NFUlQocGxhdGZv
cm1NZWRpYS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKTsKKyAgICBp
ZiAocGxhdGZvcm1NZWRpYS50eXBlICE9IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBl
KQorICAgICAgICByZXR1cm47CisKKyAgICBmdWxsc2NyZWVuVmlkZW8oKS0+ZXhpdEZ1bGxzY3Jl
ZW5Gb3JOb2RlKG5vZGUpOworfSAKKyNlbmRpZgorCiBRV2ViU2VsZWN0TWV0aG9kKiBDaHJvbWVD
bGllbnRRdDo6Y3JlYXRlU2VsZWN0UG9wdXAoKSBjb25zdAogewogICAgIFFXZWJTZWxlY3RNZXRo
b2QqIHJlc3VsdCA9IG1fcGxhdGZvcm1QbHVnaW4uY3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsK
SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lv
biA3NTM3NikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBz
dHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKICAgICBjbGFzcyBRdEFic3RyYWN0V2ViUG9wdXA7CiAg
ICAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzOworICAgIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb1F0
OwogCiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50UXQgOiBwdWJsaWMgQ2hyb21lQ2xpZW50CiAgICAg
ewpAQCAtMTYzLDYgKzE2NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMoYm9vbCkgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShW
SURFTykKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29u
c3QgTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShO
b2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSop
OworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFj
aygpOworICAgICAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNjcmVl
blZpZGVvSGFuZGxlcigpOworICAgICAgICBGdWxsc2NyZWVuVmlkZW9RdCogZnVsbHNjcmVlblZp
ZGVvKCk7CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1l
KiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hvb3Nl
SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKTsKIApAQCAt
MTk1LDYgKzIwNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBzdGF0dXNC
YXJWaXNpYmxlOwogICAgICAgICBib29sIG1lbnVCYXJWaXNpYmxlOwogICAgICAgICBRRXZlbnRM
b29wKiBtX2V2ZW50TG9vcDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIEZ1bGxzY3JlZW5W
aWRlb1F0KiBtX2Z1bGxzY3JlZW5WaWRlbzsKKyNlbmRpZgogCiAgICAgICAgIHN0YXRpYyBib29s
IGR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3M7CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRnVsbHNjcmVlblZpZGVvUXQuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgor
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8UUdyYXBoaWNzVmlk
ZW9JdGVtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Z1bGxzY3JlZW5WaWRlb1F0OjpGdWxs
c2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCogY2hyb21lQ2xpZW50KQorICAgIDogbV9jaHJv
bWVDbGllbnQoY2hyb21lQ2xpZW50KQorICAgICwgbV92aWRlb0VsZW1lbnQoMCkKK3sKKyAgICBR
X0FTU0VSVChtX2Nocm9tZUNsaWVudCk7CisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyID0g
bV9jaHJvbWVDbGllbnQtPmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBRX0FT
U0VSVChtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOworICAgIGNvbm5lY3QobV9mdWxsc2NyZWVu
VmlkZW9IYW5kbGVyLCBTSUdOQUwoZnVsbHNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0xPVChhYm91
dFRvQ2xvc2UoKSkpOworfQorCitGdWxsc2NyZWVuVmlkZW9RdDo6fkZ1bGxzY3JlZW5WaWRlb1F0
KCkKK3sKKyAgICBkZWxldGUgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyOworfQorCit2b2lkIEZ1
bGxzY3JlZW5WaWRlb1F0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7Cisg
ICAgUV9BU1NFUlQobm9kZSk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVy
UXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5ZXJRdC0+cmVtb3Zl
VmlkZW9JdGVtKCk7CisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLT5lbnRlckZ1bGxzY3Jl
ZW4obWVkaWFQbGF5ZXJRdC0+bWVkaWFQbGF5ZXIoKSk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZp
ZGVvUXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIFFfQVNTRVJU
KG5vZGUpOworICAgIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlci0+ZXhpdEZ1bGxzY3JlZW4oKTsK
KyAgICBNZWRpYVBsYXllclByaXZhdGVRdCogbWVkaWFQbGF5ZXJRdCA9IG1lZGlhUGxheWVyRm9y
Tm9kZShub2RlKTsKKyAgICBtZWRpYVBsYXllclF0LT5yZXN0b3JlVmlkZW9JdGVtKCk7Cit9CisK
K3ZvaWQgRnVsbHNjcmVlblZpZGVvUXQ6OmFib3V0VG9DbG9zZSgpCit7CisgICAgUV9BU1NFUlQo
bV92aWRlb0VsZW1lbnQpOworICAgIG1fdmlkZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOwor
fQorCitNZWRpYVBsYXllclByaXZhdGVRdCogRnVsbHNjcmVlblZpZGVvUXQ6Om1lZGlhUGxheWVy
KCkKK3sKKyAgICBRX0FTU0VSVChtX3ZpZGVvRWxlbWVudCk7CisgICAgUGxhdGZvcm1NZWRpYSBw
bGF0Zm9ybU1lZGlhID0gbV92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlUXQqPihwbGF0Zm9ybU1lZGlhLm1lZGlh
LnF0TWVkaWFQbGF5ZXIpOworfQorCitNZWRpYVBsYXllclByaXZhdGVRdCogRnVsbHNjcmVlblZp
ZGVvUXQ6Om1lZGlhUGxheWVyRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIFFfQVNTRVJUKG5v
ZGUpOworICAgIGlmIChub2RlKQorICAgICAgICBtX3ZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAgICByZXR1cm4gbWVkaWFQbGF5ZXIoKTsKK30K
KworYm9vbCBGdWxsc2NyZWVuVmlkZW9RdDo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpCit7CisgICAgcmV0dXJuIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlci0+cmVxdWlyZXNG
dWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworfQorCit9CisKSW5kZXg6IFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEZ1bGxzY3JlZW5WaWRlb1F0
X2gKKyNkZWZpbmUgRnVsbHNjcmVlblZpZGVvUXRfaAorCisjaW5jbHVkZSA8UU9iamVjdD4KKwor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07CitRVF9FTkRfTkFN
RVNQQUNFCisKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudFF0OworY2xhc3MgSFRNTFZpZGVvRWxlbWVu
dDsKK2NsYXNzIE5vZGU7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdDsKKworY2xhc3MgRnVs
bHNjcmVlblZpZGVvUXQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoK
KyAgICBGdWxsc2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCopOworICAgIH5GdWxsc2NyZWVu
VmlkZW9RdCgpOworCisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSopOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAg
IGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworCitwcml2YXRlOgor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllcigpOworICAgIE1lZGlhUGxheWVy
UHJpdmF0ZVF0KiBtZWRpYVBsYXllckZvck5vZGUoTm9kZSogPSAwKTsKKworcHJpdmF0ZSBzbG90
czoKKyAgICB2b2lkIGFib3V0VG9DbG9zZSgpOworCitwcml2YXRlOgorICAgIENocm9tZUNsaWVu
dFF0KiBtX2Nocm9tZUNsaWVudDsKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBtX3ZpZGVvRWxlbWVu
dDsKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogbV9mdWxsc2NyZWVuVmlkZW9IYW5k
bGVyOworfTsKKworfQorCisjZW5kaWYgLy8gUG9wdXBNZW51UXRfaApJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5W
aWRlb0hhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1F0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIuaCIKKworI2luY2x1ZGUgPFFFdmVu
dD4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUXRGYWxs
YmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdl
dCgpCisgICAgOlFWaWRlb1dpZGdldCgpCit7CisgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKK30K
KworYm9vbCBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjpldmVudChRRXZlbnQqIGV2
KQoreworICAgIGlmIChldi0+dHlwZSgpID09ICBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2sp
IHsKKyAgICAgICAgZW1pdCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisgICAgICAgIGV2LT5hY2NlcHQo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICByZXR1cm4gUVZpZGVvV2lkZ2V0
OjpldmVudChldik7Cit9CisKK3ZvaWQgUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6
a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQoreworICAgIGlmIChldi0+a2V5KCkgPT0gUXQ6
OktleV9TcGFjZSkgeworICAgICAgICBlbWl0IHNwYWNlQnV0dG9uUHJlc3NlZCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorfQorCitRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6
UXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgIDogUVdlYkZ1bGxzY3JlZW5W
aWRlb0hhbmRsZXIoKQorICAgICwgbV9tZWRpYVBsYXllcigwKQorICAgICwgbV9tZWRpYVdpZGdl
dCgwKQoreworfQorCitRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6flF0RmFsbGJh
Y2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsK
K30KKwordm9pZCBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsc2Ny
ZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIFFfQVNTRVJUKHBsYXllcik7CisgICAg
bV9tZWRpYVBsYXllciA9IHBsYXllcjsKKworICAgIG1fbWVkaWFXaWRnZXQgPSBuZXcgUXRGYWxs
YmFja0Z1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVv
T3V0cHV0KG1fbWVkaWFXaWRnZXQpOworCisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdO
QUwoc3BhY2VCdXR0b25QcmVzc2VkKCkpLCB0aGlzLCBTTE9UKG9uUGF1c2VPclBsYXkoKSkpOwor
ICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSksIHRo
aXMsIFNJR05BTChmdWxsc2NyZWVuQ2xvc2VkKCkpKTsKKyAgICBtX21lZGlhV2lkZ2V0LT5zaG93
RnVsbFNjcmVlbigpOworfQorCit2b2lkIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
OjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgbV9tZWRpYVdpZGdldC0+aGlkZSgpOworICAgIGRl
bGV0ZSBtX21lZGlhV2lkZ2V0OworICAgIG1fbWVkaWFQbGF5ZXIgPSAwOworICAgIG1fbWVkaWFX
aWRnZXQgPSAwOworfQorCit2b2lkIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpv
blBhdXNlT3JQbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVk
aWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1c2UoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKworfQorCkluZGV4
OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja0Z1
bGxzY3JlZW5WaWRlb0hhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUXRGYWxsYmFja0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXJfaAorI2RlZmluZSBRdEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9y
bXBsdWdpbi5oIgorCisjaW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorCitRVF9CRUdJTl9OQU1FU1BB
Q0UKK2NsYXNzIFFFdmVudDsKK2NsYXNzIFFLZXlFdmVudDsKKworUVRfRU5EX05BTUVTUEFDRQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9X
aWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAg
IFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9XaWRnZXQoKTsKKyAgICB2aXJ0dWFsIH5RdEZhbGxi
YWNrRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCkge30KKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVs
bHNjcmVlbkNsb3NlZCgpOworICAgIHZvaWQgc3BhY2VCdXR0b25QcmVzc2VkKCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBib29sIGV2ZW50KFFFdmVudCopOworICAgIHZvaWQga2V5UHJlc3NFdmVudChR
S2V5RXZlbnQqKTsKK307CisKK2NsYXNzIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
IDogcHVibGljIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIHsKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIFF0RmFsbGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgflF0RmFs
bGJhY2tGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisKKyAgICBib29sIHJlcXVpcmVzRnVsbHNj
cmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwdWJsaWMg
UV9TTE9UUzoKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbihRTWVkaWFQbGF5ZXIqKTsKKyAgICB2
b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBvblBhdXNlT3JQbGF5KCk7CisKK3ByaXZh
dGU6CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFF0RmFsbGJhY2tGdWxs
c2NyZWVuVmlkZW9XaWRnZXQqIG1fbWVkaWFXaWRnZXQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBR
dEZhbGxiYWNrRnVsbHNjcmVlblZpZGVvSGFuZGxlcl9oCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCShyZXZpc2lvbiA3NTM3NikKKysrIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI3LDQgKzEyNywxMiBAQCBRV2ViVG91Y2hNb2RpZmllciogUXRQbGF0Zm9ybVBsdWdp
bjo6Y3JlCiAgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViVG91Y2hNb2RpZmllcio+KHAt
PmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlRvdWNoSW50ZXJhY3Rpb24p
KSA6IDA7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCitRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxl
ciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCit7Cisg
ICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIHAgPyBz
dGF0aWNfY2FzdDxRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcio+KHAtPmNyZWF0ZUV4dGVuc2lv
bihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OkZ1bGxzY3JlZW5WaWRlb1BsYXllcikpIDogMDsKK30K
KyNlbmRpZgorCiB9CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3Jt
UGx1Z2luLmgJKHJldmlzaW9uIDc1Mzc2KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0
UGxhdGZvcm1QbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQCBjbGFzcyBR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVy
OwogY2xhc3MgUVdlYlNlbGVjdERhdGE7CiBjbGFzcyBRV2ViVG91Y2hNb2RpZmllcjsKKyNpZiBF
TkFCTEUoVklERU8pCitjbGFzcyBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzQ0LDkgQEAgcHVibGljOgogICAgIFFX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpOwog
ICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIo
KTsKICAgICBRV2ViVG91Y2hNb2RpZmllciogY3JlYXRlVG91Y2hNb2RpZmllcigpOworI2lmIEVO
QUJMRShWSURFTykKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNj
cmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4q
IHBsdWdpbigpOwogCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gNzUzNzYpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTks
OSBAQAogICovCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAj
aW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFM
aXN0V2lkZ2V0PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRl
cj4KQEAgLTIwOCw2ICsyMTAsNzUgQEAgTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVT
ZWxlY3RpbwogICAgIHJlc2l6ZShzaXplKCkud2lkdGgoKSwgdmlzaWJsZUl0ZW1Db3VudCAqIGdN
YWVtb0xpc3RJdGVtU2l6ZSk7CiB9CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5B
QkxFX1ZJREVPCitGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OkZ1bGxzY3JlZW5WaWRlb1dpZGdldCgp
CisgICAgOlFWaWRlb1dpZGdldCgpCit7CisgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKK30KKwor
Ym9vbCBGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmV2ZW50KFFFdmVudCogZXYpCit7CisgICAgaWYg
KGV2LT50eXBlKCkgPT0gIFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaykgeworICAgICAgICBl
bWl0IGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAgICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIHJldHVybiBRV2lkZ2V0OjpldmVudChldik7Cit9CisK
K3ZvaWQgRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYp
Cit7CisgICAgaWYgKGV2LT5rZXkoKSA9PSBRdDo6S2V5X1NwYWNlKSB7CisgICAgICAgIGVtaXQg
c3BhY2VCdXR0b25QcmVzc2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXI6OkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTogbV9tZWRpYVBsYXll
cigwKSwgbV9tZWRpYVdpZGdldCgwKQoreworfQorCitGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjp+
RnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCit7CisgICAgZGVsZXRlIG1fbWVkaWFXaWRnZXQ7Cit9
CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlk
ZW9QbGF5YmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnVsbHNj
cmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQor
eworICAgIFFfQVNTRVJUKHBsYXllcik7CisKKyAgICBtX21lZGlhV2lkZ2V0ID0gbmV3IEZ1bGxz
Y3JlZW5WaWRlb1dpZGdldCgpOworICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwgU0lHTkFMKHNw
YWNlQnV0dG9uUHJlc3NlZCgpKSwgdGhpcywgU0xPVChvblBhdXNlT3JQbGF5KCkpKTsKKyAgICBj
b25uZWN0KG1fbWVkaWFXaWRnZXQsIFNJR05BTChmdWxsc2NyZWVuQ2xvc2VkKCkpLCB0aGlzLCBT
SUdOQUwoZnVsbHNjcmVlbkNsb3NlZCgpKSk7CisKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVy
OworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fbWVkaWFXaWRnZXQpOworICAg
IG1fbWVkaWFXaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZp
ZGVvSGFuZGxlcjo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIG1fbWVkaWFXaWRnZXQtPmhpZGUo
KTsKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsKKyAg
ICBtX21lZGlhUGxheWVyID0gMDsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpv
blBhdXNlT3JQbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVk
aWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1c2UoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKyNlbmRpZgorCiBi
b29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGV4dGVuc2lvbikgewpAQCAtMjE5LDYgKzI5MCwxMCBAQCBib29s
IFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zCiAjZW5kaWYKICAgICBjYXNlIFRv
dWNoSW50ZXJhY3Rpb246CiAgICAgICAgIHJldHVybiB0cnVlOworI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBjYXNlIEZ1bGxzY3JlZW5WaWRlb1BsYXllcjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMjM1LDYgKzMxMCwxMCBAQCBRT2JqZWN0KiBXZWJQbHVnaW46
OmNyZWF0ZUV4dGVuc2lvbihFeHRlCiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246
CiAgICAgICAgIHJldHVybiBuZXcgVG91Y2hNb2RpZmllcigpOworI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBjYXNlIEZ1bGxzY3JlZW5WaWRlb1BsYXllcjoK
KyAgICAgICAgcmV0dXJuIG5ldyBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBXZWJLaXQvcXQvZXhh
bXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCShyZXZpc2lvbiA3NTM3NikKKysr
IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvblByZXNlbnRl
ci5oIgogCiAjaW5jbHVkZSA8UURpYWxvZz4KKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYg
RU5BQkxFX1ZJREVPCisjaW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorI2VuZGlmCiAKIGNsYXNzIFFM
aXN0V2lkZ2V0SXRlbTsKIGNsYXNzIFFMaXN0V2lkZ2V0OwpAQCAtOTQsNiArOTcsNDAgQEAgcHVi
bGljOgogICAgIH0KIH07CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJ
REVPCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsK
KyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAg
IHZpcnR1YWwgfkZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpIHt9CisKK1FfU0lHTkFMUzoKKyAgICB2
b2lkIGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAgICB2b2lkIHNwYWNlQnV0dG9uUHJlc3NlZCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBldmVudChRRXZlbnQqKTsKKyAgICB2b2lkIGtleVByZXNz
RXZlbnQoUUtleUV2ZW50Kik7Cit9OworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDog
cHVibGljIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICB2aXJ0dWFsIH5GdWxsc2NyZWVu
VmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVu
KFFNZWRpYVBsYXllciopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIG9u
UGF1c2VPclBsYXkoKTsKKworcHJpdmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5
ZXI7IC8vIG5vdCBvd25lZAorICAgIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCogbV9tZWRpYVdpZGdl
dDsgLy8gb3duZWQKK307CisjZW5kaWYKKwogY2xhc3MgV2ViUGx1Z2luIDogcHVibGljIFFPYmpl
Y3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKICAgICBRX09CSkVDVApJbmRleDog
V2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVn
aW4ucHJvCShyZXZpc2lvbiA3NTM3NikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBs
dWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMywyMCBAQCBU
QVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldChwbGF0Zm9ybXBsdWdpCiBURU1QTEFURSA9IGxpYgog
Q09ORklHICs9IHBsdWdpbgogCisjIyBsb2FkIG1vYmlsaXR5Y29uZmlnIGlmIG1vYmlsaXR5IGlz
IGF2YWlsYWJsZQorbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKKworIyBIVE1MNSBNZWRpYSBT
dXBwb3J0CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhCishY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1ZJREVPPS4pIHsKKyAgICBjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEp
IHsKKyAgICAgICAgQ09ORklHICs9IG1vYmlsaXR5CisgICAgICAgIE1PQklMSVRZICs9IG11bHRp
bWVkaWEKKyAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MAorICAgICAgICBERUZJTkVT
ICs9IEVOQUJMRV9WSURFTz0xCisgICAgfQorfQorCiBERVNURElSID0gJCRbUVRfSU5TVEFMTF9Q
TFVHSU5TXS93ZWJraXQKIAogU09VUkNFUyArPSBcCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCShy
ZXZpc2lvbiA3NTM3NikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiAj
aW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJ
REVPKSAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAog
Y2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGly
ZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVO
QUJMRV9WSURFTworY2xhc3MgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9i
amVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQor
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29u
c3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisKK3B1
YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxh
eWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbigpID0gMDsKK307Cisj
ZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjQs
NyArMTQ0LDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAgICAg
IE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJhY3Rp
b24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUGxh
eWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNp
b24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CkBAIC0xMzIsNyArMTUzLDcgQEAgcHVibGljOgogfTsK
IAogUVRfQkVHSU5fTkFNRVNQQUNFCi1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS42Iik7CitRX0RF
Q0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJL
aXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CiBRVF9FTkRfTkFNRVNQQUNFCiAKICNlbmRpZiAvLyBR
V0VCS0lUUExBVEZPUk1QTFVHSU5fSAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78441</attachid>
            <date>2011-01-10 13:13:34 -0800</date>
            <delta_ts>2011-01-10 13:45:37 -0800</delta_ts>
            <desc>updated with Simon&apos;s suggestion (removed default fullscreen widget)</desc>
            <filename>51249-v1.4.patch</filename>
            <type>text/plain</type>
            <size>27269</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDEzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMTAgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIE1ha2UgdGhlIE1lZGlhUGxheWVy
UHJpdmF0ZVF0IHRvIHN1cHBvcnQgZnVsbHNjcmVlbiBwbGF5ZXIuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1pbmxpbmUu
aHRtbCBpcyBhbHJlYWR5IGV4aXN0aW5nLgorICAgICAgICBIb3dldmVyLCB0aGlzIHRlc3QgZmFp
bGVkIGZvciBRdCAoUXRNZWRpYVBsYXllcikgZHVlIHRvIGR1cmF0aW9uY2hhbmdlIGV2ZW50IGdl
dHMgZG91YmxlIGZpcmVkLgorICAgICAgICBTbywgc3RpbGwgc2tpcCBpdCBmb3IgUXQuCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRlUXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXQ6OnJlbW92ZVZpZGVvSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRdDo6cmVzdG9yZVZpZGVvSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om1lZGlhUGxheWVyKToKKwogMjAxMS0wMS0xMCAgQmVuamFt
aW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDc1NDEyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTMyNDksOCArMzI0OSwxMyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89
MSkgewogCiAgICAgICAgIFBLR0NPTkZJRyArPSBnbGliLTIuMCBnaW8tMi4wIGdzdHJlYW1lci0w
LjEwIGdzdHJlYW1lci1hcHAtMC4xMCBnc3RyZWFtZXItYmFzZS0wLjEwIGdzdHJlYW1lci1pbnRl
cmZhY2VzLTAuMTAgZ3N0cmVhbWVyLXBidXRpbHMtMC4xMCBnc3RyZWFtZXItcGx1Z2lucy1iYXNl
LTAuMTAgZ3N0cmVhbWVyLXZpZGVvLTAuMTAKICAgICAgfSBlbHNlOmNvbnRhaW5zKE1PQklMSVRZ
X0NPTkZJRywgbXVsdGltZWRpYSkgewotICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKLSAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKKyAgICAgICAgSEVBREVSUyAr
PSBcIAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRl
UXQuaCBcCisgICAgICAgICAgICAkJFBXRC8uLi8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnVsbHNjcmVlblZpZGVvUXQuaAorCisgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwIFwKKyAgICAgICAg
ICAgICQkUFdELy4uLy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9R
dC5jcHAKIAogICAgICAgICBDT05GSUcgKj0gbW9iaWxpdHkKICAgICAgICAgTU9CSUxJVFkgKz0g
bXVsdGltZWRpYQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gNzU0MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6TWVkaWFQbGF5ZXJQcml2YXRlCiAgICAgLCBtX3F1ZXVlZFNlZWsoLTEpCiAgICAg
LCBtX3ByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1dG8pCiB7Ci0gICAgbV9tZWRpYVBsYXllci0+Ymlu
ZChtX3ZpZGVvSXRlbSk7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRl
b0l0ZW0pOwogICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CiAKICAgICAv
LyBTaWduYWwgSGFuZGxlcnMKQEAgLTU4Nyw2ICs1ODcsMjIgQEAgSW50U2l6ZSBNZWRpYVBsYXll
clByaXZhdGVRdDo6bmF0dXJhbFNpegogICAgIHJldHVybiBtX25hdHVyYWxTaXplOwogfQogCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZW1vdmVWaWRlb0l0ZW0oKQoreworICAgIG1fb2xk
TmF0dXJhbFNpemUgPSBtX25hdHVyYWxTaXplOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVv
T3V0cHV0KHN0YXRpY19jYXN0PFFHcmFwaGljc1ZpZGVvSXRlbSo+KDApKTsKKyAgICBtX3ZpZGVv
U2NlbmUtPnJlbW92ZUl0ZW0obV92aWRlb0l0ZW0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVF0OjpyZXN0b3JlVmlkZW9JdGVtKCkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRl
b091dHB1dChtX3ZpZGVvSXRlbSk7CisgICAgbV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9J
dGVtKTsKKyAgICAvLyBGSVhNRSBhIHF0bW9iaWxpdHkgYnVnLCBuZWVkIHRvIHJlc2V0IHRoZSBz
aXplIHdoZW4gcmVzdG9yZSB0aGUgdmlkZW9pdGVtLCBvdGhlcndpc2UgdGhlIHNpemUgaXMgMAor
ICAgIC8vIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRNT0JJTElUWS05
NzEKKyAgICBuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZShtX29sZE5hdHVyYWxTaXplKSk7Cit9CisK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXll
clByaXZhdGVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDc1NDEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzRnVsbHNj
cmVlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCkBAIC0xMDgsNiArMTA4LDExIEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEo
KSBjb25zdDsKKworICAgIFFNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX21lZGlhUGxheWVyOyB9CisgICAgdm9pZCByZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lk
IHJlc3RvcmVWaWRlb0l0ZW0oKTsKKwogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIG1lZGlhU3Rh
dHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUVy
cm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpOwpAQCAtMTQyLDYgKzE0Nyw3IEBAIHByaXZhdGU6CiAK
ICAgICBJbnRTaXplIG1fY3VycmVudFNpemU7CiAgICAgSW50U2l6ZSBtX25hdHVyYWxTaXplOwor
ICAgIEludFNpemUgbV9vbGROYXR1cmFsU2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwogICAg
IGJvb2wgbV9pc1NlZWtpbmc7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZWQ7CkluZGV4OiBXZWJLaXQv
cXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc1NDEzKQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDU4IEBACisyMDExLTAxLTEwICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEV4dGVuZCB0
aGUgUGxhdGZvcm0gUGx1Z2luIHRvIHN1cHBvcnQgZnVsbCBzY3JlZW4gdmlkZW8gaGFuZGxlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyNDkKKwor
ICAgICAgICBBZGQgYSBuZXcgd2Via2l0IHBsYXRmb3JtIHBsdWdpbiBpbnRlcmZhY2UgdG8gc3Vw
cG9ydCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyLgorCisgICAgICAgICogQXBpL3F3ZWJraXRw
bGF0Zm9ybXBsdWdpbi5oOgorICAgICAgICAoUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OlFX
ZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFFXZWJGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyOjp+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dFF0OjpDaHJvbWVDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6
fkNocm9tZUNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpjcmVh
dGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dFF0OjpmdWxsc2NyZWVuVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6
OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50UXQ6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnVs
bHNjcmVlblZpZGVvUXQ6OkZ1bGxzY3JlZW5WaWRlb1F0KToKKyAgICAgICAgKFdlYkNvcmU6OkZ1
bGxzY3JlZW5WaWRlb1F0Ojp+RnVsbHNjcmVlblZpZGVvUXQpOgorICAgICAgICAoV2ViQ29yZTo6
RnVsbHNjcmVlblZpZGVvUXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9RdDo6YWJvdXRUb0Nsb3NlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZ1bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpGdWxsc2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZ1bGxzY3JlZW5WaWRlb1F0OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNr
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5WaWRlb1F0Ojppc1ZhbGlkKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaDoKKyAgICAgICAgKiBleGFtcGxl
cy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwOgorICAgICAgICAoOlFWaWRlb1dpZGdldCk6
CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmV2ZW50KToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudCk6CisgICAgICAgIChGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyOjpGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKEZ1bGxzY3JlZW5W
aWRlb0hhbmRsZXI6On5GdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKEZ1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAg
ICAgICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAg
KEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXI6Om9uUGF1c2VPclBsYXkpOgorICAgICAgICAoV2ViUGx1Z2luOjpz
dXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6
CisgICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmg6CisgICAgICAg
IChGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6On5GdWxsc2NyZWVuVmlkZW9XaWRnZXQpOgorICAgICAg
ICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybzoKKyAgICAgICAg
KiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaDoKKyAgICAg
ICAgKFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxl
cik6CisgICAgICAgIChRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6flFXZWJGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyKToKKwogMjAxMS0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWlu
LnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCShy
ZXZpc2lvbiA3NTQxMikKKysrIFdlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDkgQEAKIAogI2luY2x1ZGUgPFFPYmplY3Q+CiAj
aW5jbHVkZSA8UVVybD4KKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVP
CisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorI2VuZGlmCiAKIGNsYXNzIFFXZWJTZWxlY3REYXRh
CiB7CkBAIC0xMTUsNiArMTE4LDIzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhp
dFRlc3RQYWRkaW5nRm9yVG91Y2goY29uc3QgUGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAwOwog
fTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK2NsYXNzIFFX
ZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1
YWwgflFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxT
OgorICAgIHZvaWQgZnVsbHNjcmVlbkNsb3NlZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2
aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJL
aXRQbGF0Zm9ybVBsdWdpbgogewogcHVibGljOgpAQCAtMTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25zLAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAg
ICAgICBIYXB0aWNzLAotICAgICAgICBUb3VjaEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50
ZXJhY3Rpb24sCisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1BsYXllcgogICAgIH07CiAKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Qg
PSAwOwpAQCAtMTMyLDcgKzE1Myw3IEBAIHB1YmxpYzoKIH07CiAKIFFUX0JFR0lOX05BTUVTUEFD
RQotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEu
UXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2Vi
S2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEu
NyIpOwogUVRfRU5EX05BTUVTUEFDRQogCiAjZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lO
X0gKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAko
cmV2aXNpb24gNzU0MTIpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwxNCBAQAogI2luY2x1ZGUgPHF0b29s
dGlwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCisjaWYgRU5BQkxFKFZJREVPKQorI2lu
Y2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb1F0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5o
IiAKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKyNlbmRpZiAKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBib29sIENocm9tZUNsaWVudFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJh
Y2tzID0gZmFsc2U7CkBAIC04Myw2ICs5MSw5IEBAIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBW
aXNpdGVkTGlua3NDYWwKIENocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRRdChRV2ViUGFnZSog
d2ViUGFnZSkKICAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQogICAgICwgbV9ldmVudExvb3AoMCkK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgLCBtX2Z1bGxzY3JlZW5WaWRlbygwKQorI2VuZGlmCiB7
CiAgICAgdG9vbEJhcnNWaXNpYmxlID0gc3RhdHVzQmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNpYmxl
ID0gdHJ1ZTsKIH0KQEAgLTkxLDYgKzEwMiwxMCBAQCBDaHJvbWVDbGllbnRRdDo6fkNocm9tZUNs
aWVudFF0KCkKIHsKICAgICBpZiAobV9ldmVudExvb3ApCiAgICAgICAgIG1fZXZlbnRMb29wLT5l
eGl0KCk7CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZGVsZXRlIG1fZnVsbHNjcmVlblZpZGVv
OworI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtNjQ4LDYgKzY2Myw1OSBAQCBJbnRSZWN0IENocm9tZUNsaWVu
dFF0Ojp2aXNpYmxlUmVjdEZvclRpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKK1FX
ZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlRnVsbHNjcmVl
blZpZGVvSGFuZGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbHVnaW4uY3Jl
YXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworfQorCitGdWxsc2NyZWVuVmlkZW9RdCogQ2hy
b21lQ2xpZW50UXQ6OmZ1bGxzY3JlZW5WaWRlbygpCit7CisgICAgaWYgKCFtX2Z1bGxzY3JlZW5W
aWRlbykKKyAgICAgICAgbV9mdWxsc2NyZWVuVmlkZW8gPSBuZXcgRnVsbHNjcmVlblZpZGVvUXQo
dGhpcyk7CisgICAgcmV0dXJuIG1fZnVsbHNjcmVlblZpZGVvOworfQorCitib29sIENocm9tZUNs
aWVudFF0OjpzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCit7Cisg
ICAgQVNTRVJUKG5vZGUpOworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dmlkZW9UYWcpICYmIGZ1bGxzY3JlZW5WaWRlbygpLT5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgQ2hy
b21lQ2xpZW50UXQ6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKQoreworICAg
IHJldHVybiBmdWxsc2NyZWVuVmlkZW8oKS0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpOworfQorCit2b2lkIENocm9tZUNsaWVudFF0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2Rl
KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnZpZGVvVGFnKSk7CisKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7CisgICAgUGxhdGZvcm1NZWRp
YSBwbGF0Zm9ybU1lZGlhID0gdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCk7CisKKyAgICBB
U1NFUlQocGxhdGZvcm1NZWRpYS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJU
eXBlKTsKKyAgICBpZiAocGxhdGZvcm1NZWRpYS50eXBlICE9IFBsYXRmb3JtTWVkaWE6OlF0TWVk
aWFQbGF5ZXJUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBmdWxsc2NyZWVuVmlkZW8oKS0+
ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6
ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYg
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSk7CisKKyAgICBIVE1MVmlkZW9F
bGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9k
ZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhID0gdmlkZW9FbGVtZW50LT5wbGF0
Zm9ybU1lZGlhKCk7CisKKyAgICBBU1NFUlQocGxhdGZvcm1NZWRpYS50eXBlID09IFBsYXRmb3Jt
TWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKTsKKyAgICBpZiAocGxhdGZvcm1NZWRpYS50eXBlICE9
IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmdWxsc2NyZWVuVmlkZW8oKS0+ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworfSAKKyNl
bmRpZgorCiBRV2ViU2VsZWN0TWV0aG9kKiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlU2VsZWN0UG9w
dXAoKSBjb25zdAogewogICAgIFFXZWJTZWxlY3RNZXRob2QqIHJlc3VsdCA9IG1fcGxhdGZvcm1Q
bHVnaW4uY3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA3NTQxMikKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsK
ICAgICBjbGFzcyBRdEFic3RyYWN0V2ViUG9wdXA7CiAgICAgc3RydWN0IFZpZXdwb3J0QXJndW1l
bnRzOworICAgIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb1F0OwogCiAgICAgY2xhc3MgQ2hyb21lQ2xp
ZW50UXQgOiBwdWJsaWMgQ2hyb21lQ2xpZW50CiAgICAgewpAQCAtMTYzLDYgKzE2NCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMo
Ym9vbCkgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworICAgICAgICBRV2ViRnVsbHNj
cmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIGNvbnN0Owor
ICAgICAgICBGdWxsc2NyZWVuVmlkZW9RdCogZnVsbHNjcmVlblZpZGVvKCk7CisjZW5kaWYKKwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxl
Q2hvb3Nlcj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKTsKIApAQCAtMTk1LDYgKzIwNSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBzdGF0dXNCYXJWaXNpYmxlOwogICAgICAg
ICBib29sIG1lbnVCYXJWaXNpYmxlOwogICAgICAgICBRRXZlbnRMb29wKiBtX2V2ZW50TG9vcDsK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1F0KiBtX2Z1bGxzY3Jl
ZW5WaWRlbzsKKyNlbmRpZgogCiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBWaXNpdGVkTGlua3ND
YWxsYmFja3M7CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlk
ZW9RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3Jl
ZW5WaWRlb1F0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
dWxsc2NyZWVuVmlkZW9RdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZ1bGxzY3JlZW5W
aWRlb1F0LmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJxd2Via2l0cGxh
dGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPFFHcmFwaGljc1ZpZGVvSXRlbT4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGdWxsc2NyZWVuVmlkZW9RdDo6RnVsbHNjcmVlblZpZGVvUXQoQ2hy
b21lQ2xpZW50UXQqIGNocm9tZUNsaWVudCkKKyAgICA6IG1fY2hyb21lQ2xpZW50KGNocm9tZUNs
aWVudCkKKyAgICAsIG1fdmlkZW9FbGVtZW50KDApCit7CisgICAgUV9BU1NFUlQobV9jaHJvbWVD
bGllbnQpOworICAgIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlciA9IG1fY2hyb21lQ2xpZW50LT5j
cmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisKKyAgICBpZiAobV9mdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyKQorICAgICAgICBjb25uZWN0KG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlciwgU0lH
TkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNMT1QoYWJvdXRUb0Nsb3NlKCkpKTsKK30K
KworRnVsbHNjcmVlblZpZGVvUXQ6On5GdWxsc2NyZWVuVmlkZW9RdCgpCit7CisgICAgZGVsZXRl
IG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6
ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIFFfQVNTRVJUKG5vZGUp
OworICAgIFFfQVNTRVJUKG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlcik7CisKKyAgICBpZiAoIW1f
ZnVsbHNjcmVlblZpZGVvSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQbGF5
ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyUXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7Cisg
ICAgbWVkaWFQbGF5ZXJRdC0+cmVtb3ZlVmlkZW9JdGVtKCk7CisgICAgbV9mdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyLT5lbnRlckZ1bGxzY3JlZW4obWVkaWFQbGF5ZXJRdC0+bWVkaWFQbGF5ZXIoKSk7
Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvUXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2Rl
KiBub2RlKQoreworICAgIFFfQVNTRVJUKG5vZGUpOworICAgIFFfQVNTRVJUKG1fZnVsbHNjcmVl
blZpZGVvSGFuZGxlcik7CisKKyAgICBpZiAoIW1fZnVsbHNjcmVlblZpZGVvSGFuZGxlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLT5leGl0RnVsbHNj
cmVlbigpOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllclF0ID0gbWVkaWFQ
bGF5ZXJGb3JOb2RlKG5vZGUpOworICAgIG1lZGlhUGxheWVyUXQtPnJlc3RvcmVWaWRlb0l0ZW0o
KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6YWJvdXRUb0Nsb3NlKCkKK3sKKyAgICBR
X0FTU0VSVChtX3ZpZGVvRWxlbWVudCk7CisgICAgbV92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2Ny
ZWVuKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBGdWxsc2NyZWVuVmlkZW9RdDo6bWVk
aWFQbGF5ZXIoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9FbGVtZW50KTsKKyAgICBQbGF0Zm9y
bU1lZGlhIHBsYXRmb3JtTWVkaWEgPSBtX3ZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVRdCo+KHBsYXRmb3JtTWVk
aWEubWVkaWEucXRNZWRpYVBsYXllcik7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBGdWxs
c2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXJGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgUV9B
U1NFUlQobm9kZSk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIG1fdmlkZW9FbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIHJldHVybiBtZWRpYVBsYXll
cigpOworfQorCitib29sIEZ1bGxzY3JlZW5WaWRlb1F0OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JW
aWRlb1BsYXliYWNrKCkKK3sKKyAgICByZXR1cm4gbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyID8g
bV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgOiBmYWxzZTsKK30KKworfQorCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnVsbHNjcmVlblZpZGVvUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnVsbHNjcmVlblZpZGVvUXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9RdF9oCisjZGVmaW5lIEZ1
bGxzY3JlZW5WaWRlb1F0X2gKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK1FUX0JFR0lOX05BTUVT
UEFDRQorY2xhc3MgUUdyYXBoaWNzVmlkZW9JdGVtOworUVRfRU5EX05BTUVTUEFDRQorCitjbGFz
cyBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDaHJvbWVDbGllbnRRdDsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBOb2Rl
OworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXQ7CisKK2NsYXNzIEZ1bGxzY3JlZW5WaWRlb1F0
IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRnVsbHNjcmVl
blZpZGVvUXQoQ2hyb21lQ2xpZW50UXQqKTsKKyAgICB+RnVsbHNjcmVlblZpZGVvUXQoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICBib29sIHJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
ICByZXR1cm4gbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyOyB9CisKK3ByaXZhdGU6CisgICAgTWVk
aWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRl
UXQqIG1lZGlhUGxheWVyRm9yTm9kZShOb2RlKiA9IDApOworCitwcml2YXRlIHNsb3RzOgorICAg
IHZvaWQgYWJvdXRUb0Nsb3NlKCk7CisKK3ByaXZhdGU6CisgICAgQ2hyb21lQ2xpZW50UXQqIG1f
Y2hyb21lQ2xpZW50OworICAgIEhUTUxWaWRlb0VsZW1lbnQqIG1fdmlkZW9FbGVtZW50OworICAg
IFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI7Cit9
OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVRdF9oCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCShyZXZpc2lvbiA3NTQxMikKKysrIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI3LDQgKzEyNywxMiBAQCBRV2ViVG91Y2hNb2RpZmllciogUXRQbGF0Zm9ybVBsdWdp
bjo6Y3JlCiAgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViVG91Y2hNb2RpZmllcio+KHAt
PmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlRvdWNoSW50ZXJhY3Rpb24p
KSA6IDA7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCitRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxl
ciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCit7Cisg
ICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIHAgPyBz
dGF0aWNfY2FzdDxRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcio+KHAtPmNyZWF0ZUV4dGVuc2lv
bihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OkZ1bGxzY3JlZW5WaWRlb1BsYXllcikpIDogMDsKK30K
KyNlbmRpZgorCiB9CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3Jt
UGx1Z2luLmgJKHJldmlzaW9uIDc1NDEyKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0
UGxhdGZvcm1QbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQCBjbGFzcyBR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVy
OwogY2xhc3MgUVdlYlNlbGVjdERhdGE7CiBjbGFzcyBRV2ViVG91Y2hNb2RpZmllcjsKKyNpZiBF
TkFCTEUoVklERU8pCitjbGFzcyBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzQ0LDkgQEAgcHVibGljOgogICAgIFFX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpOwog
ICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIo
KTsKICAgICBRV2ViVG91Y2hNb2RpZmllciogY3JlYXRlVG91Y2hNb2RpZmllcigpOworI2lmIEVO
QUJMRShWSURFTykKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbHNj
cmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4q
IHBsdWdpbigpOwogCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gNzU0MTIpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTks
OSBAQAogICovCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAj
aW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFM
aXN0V2lkZ2V0PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRl
cj4KQEAgLTIwOCw2ICsyMTAsNzUgQEAgTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVT
ZWxlY3RpbwogICAgIHJlc2l6ZShzaXplKCkud2lkdGgoKSwgdmlzaWJsZUl0ZW1Db3VudCAqIGdN
YWVtb0xpc3RJdGVtU2l6ZSk7CiB9CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5B
QkxFX1ZJREVPCitGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OkZ1bGxzY3JlZW5WaWRlb1dpZGdldCgp
CisgICAgOlFWaWRlb1dpZGdldCgpCit7CisgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKK30KKwor
Ym9vbCBGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmV2ZW50KFFFdmVudCogZXYpCit7CisgICAgaWYg
KGV2LT50eXBlKCkgPT0gIFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaykgeworICAgICAgICBl
bWl0IGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAgICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIHJldHVybiBRV2lkZ2V0OjpldmVudChldik7Cit9CisK
K3ZvaWQgRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYp
Cit7CisgICAgaWYgKGV2LT5rZXkoKSA9PSBRdDo6S2V5X1NwYWNlKSB7CisgICAgICAgIGVtaXQg
c3BhY2VCdXR0b25QcmVzc2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK0Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXI6OkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTogbV9tZWRpYVBsYXll
cigwKSwgbV9tZWRpYVdpZGdldCgwKQoreworfQorCitGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjp+
RnVsbHNjcmVlblZpZGVvSGFuZGxlcigpCit7CisgICAgZGVsZXRlIG1fbWVkaWFXaWRnZXQ7Cit9
CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlk
ZW9QbGF5YmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnVsbHNj
cmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsc2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQor
eworICAgIFFfQVNTRVJUKHBsYXllcik7CisKKyAgICBtX21lZGlhV2lkZ2V0ID0gbmV3IEZ1bGxz
Y3JlZW5WaWRlb1dpZGdldCgpOworICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwgU0lHTkFMKHNw
YWNlQnV0dG9uUHJlc3NlZCgpKSwgdGhpcywgU0xPVChvblBhdXNlT3JQbGF5KCkpKTsKKyAgICBj
b25uZWN0KG1fbWVkaWFXaWRnZXQsIFNJR05BTChmdWxsc2NyZWVuQ2xvc2VkKCkpLCB0aGlzLCBT
SUdOQUwoZnVsbHNjcmVlbkNsb3NlZCgpKSk7CisKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVy
OworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fbWVkaWFXaWRnZXQpOworICAg
IG1fbWVkaWFXaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZp
ZGVvSGFuZGxlcjo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIG1fbWVkaWFXaWRnZXQtPmhpZGUo
KTsKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsKKyAg
ICBtX21lZGlhUGxheWVyID0gMDsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpv
blBhdXNlT3JQbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVk
aWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1c2UoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKyNlbmRpZgorCiBi
b29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGV4dGVuc2lvbikgewpAQCAtMjE5LDYgKzI5MCwxMCBAQCBib29s
IFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zCiAjZW5kaWYKICAgICBjYXNlIFRv
dWNoSW50ZXJhY3Rpb246CiAgICAgICAgIHJldHVybiB0cnVlOworI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBjYXNlIEZ1bGxzY3JlZW5WaWRlb1BsYXllcjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMjM1LDYgKzMxMCwxMCBAQCBRT2JqZWN0KiBXZWJQbHVnaW46
OmNyZWF0ZUV4dGVuc2lvbihFeHRlCiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246
CiAgICAgICAgIHJldHVybiBuZXcgVG91Y2hNb2RpZmllcigpOworI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBjYXNlIEZ1bGxzY3JlZW5WaWRlb1BsYXllcjoK
KyAgICAgICAgcmV0dXJuIG5ldyBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBXZWJLaXQvcXQvZXhh
bXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCShyZXZpc2lvbiA3NTQxMikKKysr
IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvblByZXNlbnRl
ci5oIgogCiAjaW5jbHVkZSA8UURpYWxvZz4KKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYg
RU5BQkxFX1ZJREVPCisjaW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorI2VuZGlmCiAKIGNsYXNzIFFM
aXN0V2lkZ2V0SXRlbTsKIGNsYXNzIFFMaXN0V2lkZ2V0OwpAQCAtOTQsNiArOTcsNDAgQEAgcHVi
bGljOgogICAgIH0KIH07CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJ
REVPCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsK
KyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpOworICAg
IHZpcnR1YWwgfkZ1bGxzY3JlZW5WaWRlb1dpZGdldCgpIHt9CisKK1FfU0lHTkFMUzoKKyAgICB2
b2lkIGZ1bGxzY3JlZW5DbG9zZWQoKTsKKyAgICB2b2lkIHNwYWNlQnV0dG9uUHJlc3NlZCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBldmVudChRRXZlbnQqKTsKKyAgICB2b2lkIGtleVByZXNz
RXZlbnQoUUtleUV2ZW50Kik7Cit9OworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIDog
cHVibGljIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyIHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICB2aXJ0dWFsIH5GdWxsc2NyZWVu
VmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVu
KFFNZWRpYVBsYXllciopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIG9u
UGF1c2VPclBsYXkoKTsKKworcHJpdmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5
ZXI7IC8vIG5vdCBvd25lZAorICAgIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCogbV9tZWRpYVdpZGdl
dDsgLy8gb3duZWQKK307CisjZW5kaWYKKwogY2xhc3MgV2ViUGx1Z2luIDogcHVibGljIFFPYmpl
Y3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKICAgICBRX09CSkVDVApJbmRleDog
V2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVn
aW4ucHJvCShyZXZpc2lvbiA3NTQxMikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBs
dWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMywyMCBAQCBU
QVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldChwbGF0Zm9ybXBsdWdpCiBURU1QTEFURSA9IGxpYgog
Q09ORklHICs9IHBsdWdpbgogCisjIyBsb2FkIG1vYmlsaXR5Y29uZmlnIGlmIG1vYmlsaXR5IGlz
IGF2YWlsYWJsZQorbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKKworIyBIVE1MNSBNZWRpYSBT
dXBwb3J0CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhCishY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1ZJREVPPS4pIHsKKyAgICBjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEp
IHsKKyAgICAgICAgQ09ORklHICs9IG1vYmlsaXR5CisgICAgICAgIE1PQklMSVRZICs9IG11bHRp
bWVkaWEKKyAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MAorICAgICAgICBERUZJTkVT
ICs9IEVOQUJMRV9WSURFTz0xCisgICAgfQorfQorCiBERVNURElSID0gJCRbUVRfSU5TVEFMTF9Q
TFVHSU5TXS93ZWJraXQKIAogU09VUkNFUyArPSBcCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCShy
ZXZpc2lvbiA3NTQxMikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiAj
aW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJ
REVPKSAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAog
Y2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGly
ZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVO
QUJMRV9WSURFTworY2xhc3MgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9i
amVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQor
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29u
c3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisKK3B1
YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxh
eWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbigpID0gMDsKK307Cisj
ZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjQs
NyArMTQ0LDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAgICAg
IE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJhY3Rp
b24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUGxh
eWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNp
b24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CkBAIC0xMzIsNyArMTUzLDcgQEAgcHVibGljOgogfTsK
IAogUVRfQkVHSU5fTkFNRVNQQUNFCi1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS42Iik7CitRX0RF
Q0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJL
aXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CiBRVF9FTkRfTkFNRVNQQUNFCiAKICNlbmRpZiAvLyBR
V0VCS0lUUExBVEZPUk1QTFVHSU5fSAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78445</attachid>
            <date>2011-01-10 13:45:37 -0800</date>
            <delta_ts>2011-01-12 07:40:55 -0800</delta_ts>
            <desc>updated with Kenneth&apos;s suggestion (removed default fullscreen widget)</desc>
            <filename>51249-v1.4.1.patch</filename>
            <type>text/plain</type>
            <size>27262</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMTAgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIE1ha2UgTWVkaWFQbGF5ZXJQcml2
YXRlUXQgc3VwcG9ydCBhIGZ1bGxzY3JlZW4gcGxheWVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIExheW91dFRlc3RzL21lZGlhL21lZGlhLWZ1bGxzY3JlZW4taW5saW5lLmh0bWwg
YWxyZWFkeSBleGlzdHMuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgdGVzdCBmYWlsZWQgZm9yIFF0
IChRdE1lZGlhUGxheWVyKSBkdWUgdG8gZHVyYXRpb25jaGFuZ2UgZXZlbnQgZ2V0dGluZyBmaXJl
ZCB0d2ljZS4KKyAgICAgICAgU28sIHN0aWxsIHNraXAgaXQgZm9yIFF0LgorCisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVF0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVF0OjpyZW1vdmVWaWRlb0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OnJlc3RvcmVWaWRlb0l0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L01lZGlhUGxheWVyUHJpdmF0ZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRdDo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjptZWRpYVBsYXllcik6CisKIDIwMTEtMDEtMTAgIEJlbmphbWluIFBvdWxh
aW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3
NTQxMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjQ5LDggKzMyNDksMTMgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKIAog
ICAgICAgICBQS0dDT05GSUcgKz0gZ2xpYi0yLjAgZ2lvLTIuMCBnc3RyZWFtZXItMC4xMCBnc3Ry
ZWFtZXItYXBwLTAuMTAgZ3N0cmVhbWVyLWJhc2UtMC4xMCBnc3RyZWFtZXItaW50ZXJmYWNlcy0w
LjEwIGdzdHJlYW1lci1wYnV0aWxzLTAuMTAgZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZS0wLjEwIGdz
dHJlYW1lci12aWRlby0wLjEwCiAgICAgIH0gZWxzZTpjb250YWlucyhNT0JJTElUWV9DT05GSUcs
IG11bHRpbWVkaWEpIHsKLSAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5oCi0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgIEhFQURFUlMgKz0gXCAKKyAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggXAor
ICAgICAgICAgICAgJCRQV0QvLi4vLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3Jl
ZW5WaWRlb1F0LmgKKworICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBcCisgICAgICAgICAgICAkJFBX
RC8uLi8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwCiAK
ICAgICAgICAgQ09ORklHICo9IG1vYmlsaXR5CiAgICAgICAgIE1PQklMSVRZICs9IG11bHRpbWVk
aWEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVy
UHJpdmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHJldmlzaW9uIDc1NDEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
Ok1lZGlhUGxheWVyUHJpdmF0ZQogICAgICwgbV9xdWV1ZWRTZWVrKC0xKQogICAgICwgbV9wcmVs
b2FkKE1lZGlhUGxheWVyOjpBdXRvKQogewotICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQobV92aWRl
b0l0ZW0pOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsK
ICAgICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogCiAgICAgLy8gU2lnbmFs
IEhhbmRsZXJzCkBAIC01ODcsNiArNTg3LDIyIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRl
UXQ6Om5hdHVyYWxTaXoKICAgICByZXR1cm4gbV9uYXR1cmFsU2l6ZTsKIH0KIAordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdDo6cmVtb3ZlVmlkZW9JdGVtKCkKK3sKKyAgICBtX29sZE5hdHVyYWxT
aXplID0gbV9uYXR1cmFsU2l6ZTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChz
dGF0aWNfY2FzdDxRR3JhcGhpY3NWaWRlb0l0ZW0qPigwKSk7CisgICAgbV92aWRlb1NjZW5lLT5y
ZW1vdmVJdGVtKG1fdmlkZW9JdGVtKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6
cmVzdG9yZVZpZGVvSXRlbSgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQo
bV92aWRlb0l0ZW0pOworICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7Cisg
ICAgLy8gRklYTUU6IGEgcXRtb2JpbGl0eSBidWcsIG5lZWQgdG8gcmVzZXQgdGhlIHNpemUgd2hl
biByZXN0b3JlIHRoZSB2aWRlb2l0ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBpcyAwCisgICAgLy8g
aHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVE1PQklMSVRZLTk3MQorICAg
IG5hdGl2ZVNpemVDaGFuZ2VkKFFTaXplKG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
TWVkaWFQbGF5ZXJQcml2YXRlUXQuaAkocmV2aXNpb24gNzU0MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKQEAgLTEwOCw2ICsxMDgsMTEgQEAgcHVibGljOgog
I2VuZGlmCiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0
OworCisgICAgUU1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWVk
aWFQbGF5ZXI7IH0KKyAgICB2b2lkIHJlbW92ZVZpZGVvSXRlbSgpOworICAgIHZvaWQgcmVzdG9y
ZVZpZGVvSXRlbSgpOworCiBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgbWVkaWFTdGF0dXNDaGFu
Z2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlRXJyb3IoUU1l
ZGlhUGxheWVyOjpFcnJvcik7CkBAIC0xNDIsNiArMTQ3LDcgQEAgcHJpdmF0ZToKIAogICAgIElu
dFNpemUgbV9jdXJyZW50U2l6ZTsKICAgICBJbnRTaXplIG1fbmF0dXJhbFNpemU7CisgICAgSW50
U2l6ZSBtX29sZE5hdHVyYWxTaXplOwogICAgIGJvb2wgbV9pc1Zpc2libGU7CiAgICAgYm9vbCBt
X2lzU2Vla2luZzsKICAgICBib29sIG1fY29tcG9zaXRlZDsKSW5kZXg6IFdlYktpdC9xdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzU0Mjgp
CisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMDEtMTAgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0
Zm9ybSBQbHVnaW4gdG8gc3VwcG9ydCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAg
IEFkZCBhIG5ldyB3ZWJraXQgcGxhdGZvcm0gcGx1Z2luIGludGVyZmFjZSB0byBzdXBwb3J0IGZ1
bGwgc2NyZWVuIHZpZGVvIGhhbmRsZXIuCisKKyAgICAgICAgKiBBcGkvcXdlYmtpdHBsYXRmb3Jt
cGx1Z2luLmg6CisgICAgICAgIChRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6UVdlYkZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6
On5RV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OkNo
cm9tZUNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojp+Q2hyb21l
Q2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNyZWF0ZUZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmZ1
bGxzY3JlZW5WaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c3VwcG9y
dHNGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6
cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRRdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnRRdDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Z1
bGxzY3JlZW5WaWRlb1F0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVu
VmlkZW9RdDo6RnVsbHNjcmVlblZpZGVvUXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVl
blZpZGVvUXQ6On5GdWxsc2NyZWVuVmlkZW9RdCk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2Ny
ZWVuVmlkZW9RdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpG
dWxsc2NyZWVuVmlkZW9RdDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZ1bGxzY3JlZW5WaWRlb1F0OjphYm91dFRvQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RnVsbHNjcmVlblZpZGVvUXQ6Om1lZGlhUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxz
Y3JlZW5WaWRlb1F0OjptZWRpYVBsYXllckZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RnVs
bHNjcmVlblZpZGVvUXQ6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6OmlzVmFsaWQpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRQbGF0
Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbHNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRm
b3JtcGx1Z2luL1dlYlBsdWdpbi5jcHA6CisgICAgICAgICg6UVZpZGVvV2lkZ2V0KToKKyAgICAg
ICAgKEZ1bGxzY3JlZW5WaWRlb1dpZGdldDo6ZXZlbnQpOgorICAgICAgICAoRnVsbHNjcmVlblZp
ZGVvV2lkZ2V0OjprZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0hhbmRs
ZXI6OkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvSGFu
ZGxlcjo6fkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVv
SGFuZGxlcjo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChG
dWxsc2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoRnVsbHNj
cmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZp
ZGVvSGFuZGxlcjo6b25TdGF0ZUNoYW5nZSk6CisgICAgICAgIChXZWJQbHVnaW46OnN1cHBvcnRz
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKToKKyAgICAg
ICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaDoKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb1dpZGdldDo6fkZ1bGxzY3JlZW5WaWRlb1dpZGdldCk6CisgICAgICAgICogZXhh
bXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAgICAqIGV4YW1w
bGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOgorICAgICAgICAoUVdl
YkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAg
ICAgICAgKFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxzY3JlZW5WaWRlb0hh
bmRsZXIpOgorCiAyMDExLTAxLTEwICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFp
bkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9u
IDc1NDEyKQorKysgV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRl
IDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyNpbmNs
dWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAg
LTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBh
ZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisj
aWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworY2xhc3MgUVdlYkZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1Ymxp
YzoKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdl
YkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1
bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgPSAwOworCitRX1NJR05BTFM6CisgICAg
dm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwg
dm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBleGl0RnVsbHNjcmVlbigpID0gMDsKK307CisjZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRm
b3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjQsNyArMTQ0LDggQEAgcHVibGljOgogICAgICAg
ICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhh
cHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJhY3Rpb24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlv
biwKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUGxheWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CkBA
IC0xMzIsNyArMTUzLDcgQEAgcHVibGljOgogfTsKIAogUVRfQkVHSU5fTkFNRVNQQUNFCi1RX0RF
Q0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJL
aXQuUGxhdGZvcm1QbHVnaW4vMS42Iik7CitRX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0
Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CiBR
VF9FTkRfTkFNRVNQQUNFCiAKICNlbmRpZiAvLyBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSApJbmRl
eDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lv
biA3NTQxMikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDE0IEBACiAjaW5jbHVkZSA8cXRvb2x0aXAuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKKyNpZiBFTkFCTEUoVklERU8pCisjaW5jbHVkZSAi
RnVsbHNjcmVlblZpZGVvUXQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiIAorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVRdC5oIgorI2VuZGlmIAorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3MgPSBm
YWxzZTsKQEAgLTgzLDYgKzkxLDkgQEAgYm9vbCBDaHJvbWVDbGllbnRRdDo6ZHVtcFZpc2l0ZWRM
aW5rc0NhbAogQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVudFF0KFFXZWJQYWdlKiB3ZWJQYWdl
KQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2V2ZW50TG9vcCgwKQorI2lmIEVO
QUJMRShWSURFTykKKyAgICAsIG1fZnVsbHNjcmVlblZpZGVvKDApCisjZW5kaWYKIHsKICAgICB0
b29sQmFyc1Zpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxlID0gbWVudUJhclZpc2libGUgPSB0cnVl
OwogfQpAQCAtOTEsNiArMTAyLDEwIEBAIENocm9tZUNsaWVudFF0Ojp+Q2hyb21lQ2xpZW50UXQo
KQogewogICAgIGlmIChtX2V2ZW50TG9vcCkKICAgICAgICAgbV9ldmVudExvb3AtPmV4aXQoKTsK
KworI2lmIEVOQUJMRShWSURFTykKKyAgICBkZWxldGUgbV9mdWxsc2NyZWVuVmlkZW87CisjZW5k
aWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCkBAIC02NDgsNiArNjYzLDU5IEBAIEludFJlY3QgQ2hyb21lQ2xpZW50UXQ6OnZp
c2libGVSZWN0Rm9yVGkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorUVdlYkZ1bGxz
Y3JlZW5WaWRlb0hhbmRsZXIqIENocm9tZUNsaWVudFF0OjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxs
c2NyZWVuVmlkZW9IYW5kbGVyKCk7Cit9CisKK0Z1bGxzY3JlZW5WaWRlb1F0KiBDaHJvbWVDbGll
bnRRdDo6ZnVsbHNjcmVlblZpZGVvKCkKK3sKKyAgICBpZiAoIW1fZnVsbHNjcmVlblZpZGVvKQor
ICAgICAgICBtX2Z1bGxzY3JlZW5WaWRlbyA9IG5ldyBGdWxsc2NyZWVuVmlkZW9RdCh0aGlzKTsK
KyAgICByZXR1cm4gbV9mdWxsc2NyZWVuVmlkZW87Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50UXQ6
OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NF
UlQobm9kZSk7CisgICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1Rh
ZykgJiYgZnVsbHNjcmVlblZpZGVvKCktPmlzVmFsaWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGll
bnRRdDo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpCit7CisgICAgcmV0dXJu
IGZ1bGxzY3JlZW5WaWRlbygpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dmlkZW9UYWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRm
b3JtTWVkaWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIEFTU0VSVChw
bGF0Zm9ybU1lZGlhLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpOwor
ICAgIGlmIChwbGF0Zm9ybU1lZGlhLnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXll
clR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZ1bGxzY3JlZW5WaWRlbygpLT5lbnRlckZ1
bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworfQorCit2b2lkIENocm9tZUNsaWVudFF0OjpleGl0RnVs
bHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAg
ICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVk
aWEoKTsKKworICAgIEFTU0VSVChwbGF0Zm9ybU1lZGlhLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6
UXRNZWRpYVBsYXllclR5cGUpOworICAgIGlmIChwbGF0Zm9ybU1lZGlhLnR5cGUgIT0gUGxhdGZv
cm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZ1bGxz
Y3JlZW5WaWRlbygpLT5leGl0RnVsbHNjcmVlbkZvck5vZGUobm9kZSk7Cit9IAorI2VuZGlmCisK
IFFXZWJTZWxlY3RNZXRob2QqIENocm9tZUNsaWVudFF0OjpjcmVhdGVTZWxlY3RQb3B1cCgpIGNv
bnN0CiB7CiAgICAgUVdlYlNlbGVjdE1ldGhvZCogcmVzdWx0ID0gbV9wbGF0Zm9ybVBsdWdpbi5j
cmVhdGVTZWxlY3RJbnB1dE1ldGhvZCgpOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDc1NDEyKQorKysgV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAgIGNs
YXNzIFF0QWJzdHJhY3RXZWJQb3B1cDsKICAgICBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHM7Cisg
ICAgY2xhc3MgRnVsbHNjcmVlblZpZGVvUXQ7CiAKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdCA6
IHB1YmxpYyBDaHJvbWVDbGllbnQKICAgICB7CkBAIC0xNjMsNiArMTY0LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIG5lZWRUb3VjaEV2ZW50cyhib29sKSB7
IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7CisgICAgICAgIFFXZWJGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyKiBjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkgY29uc3Q7CisgICAgICAg
IEZ1bGxzY3JlZW5WaWRlb1F0KiBmdWxsc2NyZWVuVmlkZW8oKTsKKyNlbmRpZgorCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2Vy
Pik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCkBAIC0xOTUsNiArMjA1LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIHN0YXR1c0JhclZpc2libGU7CiAgICAgICAgIGJvb2wg
bWVudUJhclZpc2libGU7CiAgICAgICAgIFFFdmVudExvb3AqIG1fZXZlbnRMb29wOworI2lmIEVO
QUJMRShWSURFTykKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUXQqIG1fZnVsbHNjcmVlblZpZGVv
OworI2VuZGlmCiAKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNr
czsKIApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVv
UXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3Jl
ZW5WaWRlb1F0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvUXQu
aCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZVF0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oIgorCisjaW5jbHVkZSA8UUdyYXBoaWNzVmlkZW9JdGVtPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0Z1bGxzY3JlZW5WaWRlb1F0OjpGdWxsc2NyZWVuVmlkZW9RdChDaHJvbWVDbGll
bnRRdCogY2hyb21lQ2xpZW50KQorICAgIDogbV9jaHJvbWVDbGllbnQoY2hyb21lQ2xpZW50KQor
ICAgICwgbV92aWRlb0VsZW1lbnQoMCkKK3sKKyAgICBRX0FTU0VSVChtX2Nocm9tZUNsaWVudCk7
CisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyID0gbV9jaHJvbWVDbGllbnQtPmNyZWF0ZUZ1
bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXIpCisgICAgICAgIGNvbm5lY3QobV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyLCBTSUdOQUwoZnVs
bHNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0xPVChhYm91dFRvQ2xvc2UoKSkpOworfQorCitGdWxs
c2NyZWVuVmlkZW9RdDo6fkZ1bGxzY3JlZW5WaWRlb1F0KCkKK3sKKyAgICBkZWxldGUgbV9mdWxs
c2NyZWVuVmlkZW9IYW5kbGVyOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb1F0OjplbnRlckZ1
bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgUV9BU1NFUlQobm9kZSk7CisgICAg
UV9BU1NFUlQobV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyKTsKKworICAgIGlmICghbV9mdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVBsYXllclByaXZh
dGVRdCogbWVkaWFQbGF5ZXJRdCA9IG1lZGlhUGxheWVyRm9yTm9kZShub2RlKTsKKyAgICBtZWRp
YVBsYXllclF0LT5yZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRs
ZXItPmVudGVyRnVsbHNjcmVlbihtZWRpYVBsYXllclF0LT5tZWRpYVBsYXllcigpKTsKK30KKwor
dm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUp
Cit7CisgICAgUV9BU1NFUlQobm9kZSk7CisgICAgUV9BU1NFUlQobV9mdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKTsKKworICAgIGlmICghbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXItPmV4aXRGdWxsc2NyZWVuKCk7
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyUXQgPSBtZWRpYVBsYXllckZv
ck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5ZXJRdC0+cmVzdG9yZVZpZGVvSXRlbSgpOworfQor
Cit2b2lkIEZ1bGxzY3JlZW5WaWRlb1F0OjphYm91dFRvQ2xvc2UoKQoreworICAgIFFfQVNTRVJU
KG1fdmlkZW9FbGVtZW50KTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsK
K30KKworTWVkaWFQbGF5ZXJQcml2YXRlUXQqIEZ1bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXll
cigpCit7CisgICAgUV9BU1NFUlQobV92aWRlb0VsZW1lbnQpOworICAgIFBsYXRmb3JtTWVkaWEg
cGxhdGZvcm1NZWRpYSA9IG1fdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZVF0Kj4ocGxhdGZvcm1NZWRpYS5tZWRp
YS5xdE1lZGlhUGxheWVyKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlUXQqIEZ1bGxzY3JlZW5W
aWRlb1F0OjptZWRpYVBsYXllckZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBRX0FTU0VSVChu
b2RlKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7CisgICAgcmV0dXJuIG1lZGlhUGxheWVyKCk7Cit9
CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvUXQ6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxh
eWJhY2soKQoreworICAgIHJldHVybiBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIgPyBtX2Z1bGxz
Y3JlZW5WaWRlb0hhbmRsZXItPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSA6
IGZhbHNlOworfQorCit9CisKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2Ny
ZWVuVmlkZW9RdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxs
c2NyZWVuVmlkZW9RdC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Z1bGxzY3JlZW5WaWRlb1F0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIEZ1bGxzY3JlZW5WaWRlb1F0X2gKKyNkZWZpbmUgRnVsbHNjcmVl
blZpZGVvUXRfaAorCisjaW5jbHVkZSA8UU9iamVjdD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitj
bGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJG
dWxsc2NyZWVuVmlkZW9IYW5kbGVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENo
cm9tZUNsaWVudFF0OworY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFz
cyBNZWRpYVBsYXllclByaXZhdGVRdDsKKworY2xhc3MgRnVsbHNjcmVlblZpZGVvUXQgOiBwdWJs
aWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBGdWxsc2NyZWVuVmlkZW9R
dChDaHJvbWVDbGllbnRRdCopOworICAgIH5GdWxsc2NyZWVuVmlkZW9RdCgpOworCisgICAgdmly
dHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAgIHZpcnR1YWwgdm9p
ZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAgIGJvb2wgcmVxdWlyZXNGdWxsc2Ny
ZWVuRm9yVmlkZW9QbGF5YmFjaygpOworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgIHJldHVy
biBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI7IH0KKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXll
clByaXZhdGVRdCogbWVkaWFQbGF5ZXIoKTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdCogbWVk
aWFQbGF5ZXJGb3JOb2RlKE5vZGUqID0gMCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBh
Ym91dFRvQ2xvc2UoKTsKKworcHJpdmF0ZToKKyAgICBDaHJvbWVDbGllbnRRdCogbV9jaHJvbWVD
bGllbnQ7CisgICAgSFRNTFZpZGVvRWxlbWVudCogbV92aWRlb0VsZW1lbnQ7CisgICAgUVdlYkZ1
bGxzY3JlZW5WaWRlb0hhbmRsZXIqIG1fZnVsbHNjcmVlblZpZGVvSGFuZGxlcjsKK307CisKK30K
KworI2VuZGlmIC8vIFBvcHVwTWVudVF0X2gKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAJKHJldmlzaW9uIDc1NDEyKQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsNCArMTI3LDEyIEBAIFFXZWJUb3VjaE1vZGlmaWVyKiBRdFBsYXRmb3JtUGx1Z2luOjpjcmUK
ICAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJUb3VjaE1vZGlmaWVyKj4ocC0+Y3JlYXRl
RXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6VG91Y2hJbnRlcmFjdGlvbikpIDogMDsK
IH0KIAorI2lmIEVOQUJMRShWSURFTykKK1FXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBRdFBs
YXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2Vi
S2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gcCA/IHN0YXRpY19j
YXN0PFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJL
aXRQbGF0Zm9ybVBsdWdpbjo6RnVsbHNjcmVlblZpZGVvUGxheWVyKSkgOiAwOworfQorI2VuZGlm
CisKIH0KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
aAkocmV2aXNpb24gNzU0MTIpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9y
bVBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBAIGNsYXNzIFFXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXI7CiBjbGFz
cyBRV2ViU2VsZWN0RGF0YTsKIGNsYXNzIFFXZWJUb3VjaE1vZGlmaWVyOworI2lmIEVOQUJMRShW
SURFTykKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOworI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArNDQsOSBAQCBwdWJsaWM6CiAgICAgUVdlYk5vdGlm
aWNhdGlvblByZXNlbnRlciogY3JlYXRlTm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CiAgICAgUVdl
YkhhcHRpY0ZlZWRiYWNrUGxheWVyKiBjcmVhdGVIYXB0aWNGZWVkYmFja1BsYXllcigpOwogICAg
IFFXZWJUb3VjaE1vZGlmaWVyKiBjcmVhdGVUb3VjaE1vZGlmaWVyKCk7CisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyKCk7CisjZW5kaWYKIAogICAgIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiogcGx1Z2lu
KCk7CiAKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQ
bHVnaW4uY3BwCShyZXZpc2lvbiA3NTQxMikKKysrIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9XZWJQbHVnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw5IEBACiAg
Ki8KICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKIAorI2luY2x1ZGUgPFFFdmVudD4KICNpbmNsdWRl
IDxRSEJveExheW91dD4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRn
ZXQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRnZXRJdGVtPgogI2luY2x1ZGUgPFFQYWludGVyPgpAQCAt
MjA4LDYgKzIxMCw3NSBAQCBNdWx0aXBsZVNlbGVjdGlvblBvcHVwOjpNdWx0aXBsZVNlbGVjdGlv
CiAgICAgcmVzaXplKHNpemUoKS53aWR0aCgpLCB2aXNpYmxlSXRlbUNvdW50ICogZ01hZW1vTGlz
dEl0ZW1TaXplKTsKIH0KIAorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklE
RU8KK0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6RnVsbHNjcmVlblZpZGVvV2lkZ2V0KCkKKyAgICA6
UVZpZGVvV2lkZ2V0KCkKK3sKKyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworfQorCitib29sIEZ1
bGxzY3JlZW5WaWRlb1dpZGdldDo6ZXZlbnQoUUV2ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPnR5
cGUoKSA9PSAgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrKSB7CisgICAgICAgIGVtaXQgZnVs
bHNjcmVlbkNsb3NlZCgpOworICAgICAgICBldi0+YWNjZXB0KCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0gCisgICAgcmV0dXJuIFFXaWRnZXQ6OmV2ZW50KGV2KTsKK30KKwordm9pZCBG
dWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldikKK3sKKyAg
ICBpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfU3BhY2UpIHsKKyAgICAgICAgZW1pdCBzcGFjZUJ1
dHRvblByZXNzZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworRnVsbHNjcmVlblZp
ZGVvSGFuZGxlcjo6RnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOiBtX21lZGlhUGxheWVyKDApLCBt
X21lZGlhV2lkZ2V0KDApCit7Cit9CisKK0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI6On5GdWxsc2Ny
ZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKK30KKworYm9v
bCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyOjplbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAg
UV9BU1NFUlQocGxheWVyKTsKKworICAgIG1fbWVkaWFXaWRnZXQgPSBuZXcgRnVsbHNjcmVlblZp
ZGVvV2lkZ2V0KCk7CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoc3BhY2VCdXR0
b25QcmVzc2VkKCkpLCB0aGlzLCBTTE9UKG9uU3RhdGVDaGFuZ2UoKSkpOworICAgIGNvbm5lY3Qo
bV9tZWRpYVdpZGdldCwgU0lHTkFMKGZ1bGxzY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNJR05BTChm
dWxsc2NyZWVuQ2xvc2VkKCkpKTsKKworICAgIG1fbWVkaWFQbGF5ZXIgPSBwbGF5ZXI7CisgICAg
bV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV9tZWRpYVdpZGdldCk7CisgICAgbV9tZWRp
YVdpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyOjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgbV9tZWRpYVdpZGdldC0+aGlkZSgpOworICAg
IGRlbGV0ZSBtX21lZGlhV2lkZ2V0OworICAgIG1fbWVkaWFXaWRnZXQgPSAwOworICAgIG1fbWVk
aWFQbGF5ZXIgPSAwOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6Om9uU3RhdGVD
aGFuZ2UoKQoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgIGVs
c2UKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGxheSgpOworfQorI2VuZGlmCisKIGJvb2wgV2Vi
UGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAogewog
ICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CkBAIC0yMTksNiArMjkwLDEwIEBAIGJvb2wgV2ViUGx1
Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnMKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRl
cmFjdGlvbjoKICAgICAgICAgcmV0dXJuIHRydWU7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8p
ICYmIEVOQUJMRV9WSURFTworICAgIGNhc2UgRnVsbHNjcmVlblZpZGVvUGxheWVyOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC0yMzUsNiArMzEwLDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRl
RXh0ZW5zaW9uKEV4dGUKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAg
ICAgcmV0dXJuIG5ldyBUb3VjaE1vZGlmaWVyKCk7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8p
ICYmIEVOQUJMRV9WSURFTworICAgIGNhc2UgRnVsbHNjcmVlblZpZGVvUGxheWVyOgorICAgICAg
ICByZXR1cm4gbmV3IEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyNlbmRpZgogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9w
bGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBs
ZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHJldmlzaW9uIDc1NDEyKQorKysgV2ViS2l0
L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAK
ICNpbmNsdWRlIDxRRGlhbG9nPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVf
VklERU8KKyNpbmNsdWRlIDxRVmlkZW9XaWRnZXQ+CisjZW5kaWYKIAogY2xhc3MgUUxpc3RXaWRn
ZXRJdGVtOwogY2xhc3MgUUxpc3RXaWRnZXQ7CkBAIC05NCw2ICs5Nyw0MCBAQCBwdWJsaWM6CiAg
ICAgfQogfTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK2Ns
YXNzIEZ1bGxzY3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFf
T0JKRUNUCitwdWJsaWM6CisgICAgRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgdmlydHVh
bCB+RnVsbHNjcmVlblZpZGVvV2lkZ2V0KCkge30KKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVs
bHNjcmVlbkNsb3NlZCgpOworICAgIHZvaWQgc3BhY2VCdXR0b25QcmVzc2VkKCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBib29sIGV2ZW50KFFFdmVudCopOworICAgIHZvaWQga2V5UHJlc3NFdmVudChR
S2V5RXZlbnQqKTsKK307CisKK2NsYXNzIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMg
UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
RnVsbHNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIHZpcnR1YWwgfkZ1bGxzY3JlZW5WaWRlb0hh
bmRsZXIoKTsKKyAgICBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBj
b25zdDsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlh
UGxheWVyKik7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgb25TdGF0ZUNo
YW5nZSgpOworCitwcml2YXRlOgorICAgIFFNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsgLy8g
bm90IG93bmVkCisgICAgRnVsbHNjcmVlblZpZGVvV2lkZ2V0KiBtX21lZGlhV2lkZ2V0OyAvLyBv
d25lZAorfTsKKyNlbmRpZgorCiBjbGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVi
bGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogICAgIFFfT0JKRUNUCkluZGV4OiBXZWJLaXQv
cXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8J
KHJldmlzaW9uIDc1NDEyKQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3Bs
YXRmb3JtcGx1Z2luLnBybwkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDIwIEBAIFRBUkdFVCA9
ICQkcXRMaWJyYXJ5VGFyZ2V0KHBsYXRmb3JtcGx1Z2kKIFRFTVBMQVRFID0gbGliCiBDT05GSUcg
Kz0gcGx1Z2luCiAKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxh
YmxlCitsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQK
KyMgV2UgcmVxdWlyZSBRdE11bHRpbWVkaWEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklE
RU89LikgeworICAgIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAg
ICAgICBDT05GSUcgKz0gbW9iaWxpdHkKKyAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQor
ICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0wCisgICAgICAgIERFRklORVMgKz0gRU5B
QkxFX1ZJREVPPTEKKyAgICB9Cit9CisKIERFU1RESVIgPSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNd
L3dlYmtpdAogCiBTT1VSQ0VTICs9IFwKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
ZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9u
IDc1NDEyKQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0
Zm9ybXBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRl
IDxRT2JqZWN0PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYm
IEVOQUJMRV9WSURFTworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBR
V2ViU2VsZWN0RGF0YQogewpAQCAtMTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24p
IGNvbnN0ID0gMDsKIH07CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJ
REVPCitjbGFzcyBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsK
KyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkg
e30KKyAgICB2aXJ0dWFsIH5RV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7
CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZ1bGxzY3JlZW5DbG9zZWQoKTsKKworcHVibGljIFFf
U0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbihRTWVkaWFQbGF5ZXIqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgor
CiBjbGFzcyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKIHB1YmxpYzoKQEAgLTEyNCw3ICsxNDQs
OCBAQCBwdWJsaWM6CiAgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKICAgICAgICAgTm90aWZp
Y2F0aW9ucywKICAgICAgICAgSGFwdGljcywKLSAgICAgICAgVG91Y2hJbnRlcmFjdGlvbgorICAg
ICAgICBUb3VjaEludGVyYWN0aW9uLAorICAgICAgICBGdWxsc2NyZWVuVmlkZW9QbGF5ZXIKICAg
ICB9OwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRl
bnNpb24pIGNvbnN0ID0gMDsKQEAgLTEzMiw3ICsxNTMsNyBAQCBwdWJsaWM6CiB9OwogCiBRVF9C
RUdJTl9OQU1FU1BBQ0UKLVFfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2lu
LCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjYiKTsKK1FfREVDTEFSRV9J
TlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0
Zm9ybVBsdWdpbi8xLjciKTsKIFFUX0VORF9OQU1FU1BBQ0UKIAogI2VuZGlmIC8vIFFXRUJLSVRQ
TEFURk9STVBMVUdJTl9ICg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78691</attachid>
            <date>2011-01-12 07:40:55 -0800</date>
            <delta_ts>2011-01-12 15:24:00 -0800</delta_ts>
            <desc>fix style</desc>
            <filename>51249-v2.0.patch</filename>
            <type>text/plain</type>
            <size>27241</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjA4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMTIgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIE1ha2UgTWVkaWFQbGF5ZXJQcml2
YXRlUXQgc3VwcG9ydCBhIGZ1bGxzY3JlZW4gcGxheWVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIExheW91dFRlc3RzL21lZGlhL21lZGlhLWZ1bGxzY3JlZW4taW5saW5lLmh0bWwg
YWxyZWFkeSBleGlzdHMuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgdGVzdCBmYWlsZWQgZm9yIFF0
IChRdE1lZGlhUGxheWVyKSBkdWUgdG8gZHVyYXRpb25jaGFuZ2UgZXZlbnQgZ2V0dGluZyBmaXJl
ZCB0d2ljZS4KKyAgICAgICAgU28sIHN0aWxsIHNraXAgaXQgZm9yIFF0LgorCisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVF0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVF0OjpyZW1vdmVWaWRlb0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OnJlc3RvcmVWaWRlb0l0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L01lZGlhUGxheWVyUHJpdmF0ZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRdDo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjptZWRpYVBsYXllcik6CisKIDIwMTAtMTItMjkgIFl1cnkgU2VtaWtoYXRz
a3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NTYwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQ5LDggKzMyNDksMTMgQEAgY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKIAogICAgICAgICBQS0dDT05GSUcgKz0g
Z2xpYi0yLjAgZ2lvLTIuMCBnc3RyZWFtZXItMC4xMCBnc3RyZWFtZXItYXBwLTAuMTAgZ3N0cmVh
bWVyLWJhc2UtMC4xMCBnc3RyZWFtZXItaW50ZXJmYWNlcy0wLjEwIGdzdHJlYW1lci1wYnV0aWxz
LTAuMTAgZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZS0wLjEwIGdzdHJlYW1lci12aWRlby0wLjEwCiAg
ICAgIH0gZWxzZTpjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEpIHsKLSAgICAg
ICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
Ci0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2
YXRlUXQuY3BwCisgICAgICAgIEhFQURFUlMgKz0gXCAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggXAorICAgICAgICAgICAgJCRQV0QvLi4v
Li4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgKKworICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxh
eWVyUHJpdmF0ZVF0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC8uLi8uLi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwCiAKICAgICAgICAgQ09ORklHICo9IG1v
YmlsaXR5CiAgICAgICAgIE1PQklMSVRZICs9IG11bHRpbWVkaWEKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclBy
aXZhdGVRdC5jcHAJKHJldmlzaW9uIDc1NjA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsNyArMTA4LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZQog
ICAgICwgbV9xdWV1ZWRTZWVrKC0xKQogICAgICwgbV9wcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRv
KQogewotICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQobV92aWRlb0l0ZW0pOworICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKICAgICBtX3ZpZGVvU2NlbmUtPmFk
ZEl0ZW0obV92aWRlb0l0ZW0pOwogCiAgICAgLy8gU2lnbmFsIEhhbmRsZXJzCkBAIC01ODcsNiAr
NTg3LDIyIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om5hdHVyYWxTaXoKICAgICBy
ZXR1cm4gbV9uYXR1cmFsU2l6ZTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVt
b3ZlVmlkZW9JdGVtKCkKK3sKKyAgICBtX29sZE5hdHVyYWxTaXplID0gbV9uYXR1cmFsU2l6ZTsK
KyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChzdGF0aWNfY2FzdDxRR3JhcGhpY3NW
aWRlb0l0ZW0qPigwKSk7CisgICAgbV92aWRlb1NjZW5lLT5yZW1vdmVJdGVtKG1fdmlkZW9JdGVt
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVzdG9yZVZpZGVvSXRlbSgpCit7
CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRlb0l0ZW0pOworICAgIG1f
dmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CisgICAgLy8gRklYTUU6IGEgcXRtb2Jp
bGl0eSBidWcsIG5lZWQgdG8gcmVzZXQgdGhlIHNpemUgd2hlbiByZXN0b3JlIHRoZSB2aWRlb2l0
ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBpcyAwCisgICAgLy8gaHR0cDovL2J1Z3JlcG9ydHMucXQu
bm9raWEuY29tL2Jyb3dzZS9RVE1PQklMSVRZLTk3MQorICAgIG5hdGl2ZVNpemVDaGFuZ2VkKFFT
aXplKG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aAkocmV2aXNpb24gNzU2MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9NZWRpYVBsYXllclByaXZhdGVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01B
UFBFUikKQEAgLTEwOCw2ICsxMDgsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworCisgICAgUU1lZGlhUGxheWVy
KiBtZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXI7IH0KKyAgICB2b2lk
IHJlbW92ZVZpZGVvSXRlbSgpOworICAgIHZvaWQgcmVzdG9yZVZpZGVvSXRlbSgpOworCiBwcml2
YXRlIHNsb3RzOgogICAgIHZvaWQgbWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVk
aWFTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcik7CkBA
IC0xNDIsNiArMTQ3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9jdXJyZW50U2l6ZTsK
ICAgICBJbnRTaXplIG1fbmF0dXJhbFNpemU7CisgICAgSW50U2l6ZSBtX29sZE5hdHVyYWxTaXpl
OwogICAgIGJvb2wgbV9pc1Zpc2libGU7CiAgICAgYm9vbCBtX2lzU2Vla2luZzsKICAgICBib29s
IG1fY29tcG9zaXRlZDsKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzU2MDgpCisrKyBXZWJLaXQvcXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDEtMTIgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIEFkZCBhIG5ldyB3ZWJraXQgcGxh
dGZvcm0gcGx1Z2luIGludGVyZmFjZSB0byBzdXBwb3J0IGZ1bGwgc2NyZWVuIHZpZGVvIGhhbmRs
ZXIuCisKKyAgICAgICAgKiBBcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmg6CisgICAgICAgIChR
V2ViRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgor
ICAgICAgICAoUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6On5RV2ViRnVsbHNjcmVlblZpZGVv
SGFuZGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVudFF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojp+Q2hyb21lQ2xpZW50UXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmZ1bGxzY3JlZW5WaWRlbyk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cmVxdWlyZXNGdWxsc2NyZWVuRm9y
VmlkZW9QbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6ZXhp
dEZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9RdDo6RnVsbHNjcmVlblZp
ZGVvUXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6On5GdWxsc2NyZWVu
VmlkZW9RdCk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9RdDo6ZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9RdDo6ZXhp
dEZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5WaWRlb1F0
OjphYm91dFRvQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6Om1l
ZGlhUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBs
YXllckZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlblZpZGVvUXQ6OnJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Z1bGxzY3JlZW5WaWRlb1F0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVl
blZpZGVvUXQ6OmlzVmFsaWQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVs
bHNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9y
bVBsdWdpbi5oOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5j
cHA6CisgICAgICAgICg6UVZpZGVvV2lkZ2V0KToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb1dp
ZGdldDo6ZXZlbnQpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvV2lkZ2V0OjprZXlQcmVzc0V2
ZW50KToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6OkZ1bGxzY3JlZW5WaWRlb0hh
bmRsZXIpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6fkZ1bGxzY3JlZW5WaWRl
b0hhbmRsZXIpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxs
c2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9IYW5kbGVy
OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6ZXhp
dEZ1bGxzY3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6b25TdGF0ZUNo
YW5nZSk6CisgICAgICAgIChXZWJQbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKToKKyAgICAgICAgKiBleGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9XZWJQbHVnaW4uaDoKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb1dpZGdldDo6fkZ1
bGxzY3JlZW5WaWRlb1dpZGdldCk6CisgICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4v
cGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3
ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOgorICAgICAgICAoUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRs
ZXI6OlFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFFXZWJGdWxsc2NyZWVu
VmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIpOgorCiAyMDExLTAxLTEy
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByNzQzNDQuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmtpdHBs
YXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc1NjA4KQorKysgV2ViS2l0L3F0L0FwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5j
bHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVP
KSAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAogY2xh
c3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGlyZWN0
aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJM
RV9WSURFTworY2xhc3MgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVj
dCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbHNjcmVlblZpZGVvSGFuZGxl
cigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3Qg
PSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisKK3B1Ymxp
YyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVy
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbigpID0gMDsKK307CisjZW5k
aWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjQsNyAr
MTQ0LDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAgICAgIE5v
dGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJhY3Rpb24K
KyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbHNjcmVlblZpZGVvUGxheWVy
CiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24g
ZXh0ZW5zaW9uKSBjb25zdCA9IDA7CkBAIC0xMzIsNyArMTUzLDcgQEAgcHVibGljOgogfTsKIAog
UVRfQkVHSU5fTkFNRVNQQUNFCi1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBs
dWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS42Iik7CitRX0RFQ0xB
UkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQu
UGxhdGZvcm1QbHVnaW4vMS43Iik7CiBRVF9FTkRfTkFNRVNQQUNFCiAKICNlbmRpZiAvLyBRV0VC
S0lUUExBVEZPUk1QTFVHSU5fSApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA3NTYwOCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDE0IEBA
CiAjaW5jbHVkZSA8cXRvb2x0aXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKKyNpZiBF
TkFCTEUoVklERU8pCisjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvUXQuaCIKKyNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiIAorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdC5oIgorI2Vu
ZGlmIAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBW
aXNpdGVkTGlua3NDYWxsYmFja3MgPSBmYWxzZTsKQEAgLTgzLDYgKzkxLDkgQEAgYm9vbCBDaHJv
bWVDbGllbnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbAogQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNs
aWVudFF0KFFXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAg
LCBtX2V2ZW50TG9vcCgwKQorI2lmIEVOQUJMRShWSURFTykKKyAgICAsIG1fZnVsbHNjcmVlblZp
ZGVvKDApCisjZW5kaWYKIHsKICAgICB0b29sQmFyc1Zpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxl
ID0gbWVudUJhclZpc2libGUgPSB0cnVlOwogfQpAQCAtOTEsNiArMTAyLDEwIEBAIENocm9tZUNs
aWVudFF0Ojp+Q2hyb21lQ2xpZW50UXQoKQogewogICAgIGlmIChtX2V2ZW50TG9vcCkKICAgICAg
ICAgbV9ldmVudExvb3AtPmV4aXQoKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBkZWxldGUg
bV9mdWxsc2NyZWVuVmlkZW87CisjZW5kaWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0
V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC02NDgsNiArNjYzLDU5IEBAIElu
dFJlY3QgQ2hyb21lQ2xpZW50UXQ6OnZpc2libGVSZWN0Rm9yVGkKIH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKFZJREVPKQorUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIENocm9tZUNsaWVudFF0
OjpjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
bGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7Cit9CisKK0Z1bGxz
Y3JlZW5WaWRlb1F0KiBDaHJvbWVDbGllbnRRdDo6ZnVsbHNjcmVlblZpZGVvKCkKK3sKKyAgICBp
ZiAoIW1fZnVsbHNjcmVlblZpZGVvKQorICAgICAgICBtX2Z1bGxzY3JlZW5WaWRlbyA9IG5ldyBG
dWxsc2NyZWVuVmlkZW9RdCh0aGlzKTsKKyAgICByZXR1cm4gbV9mdWxsc2NyZWVuVmlkZW87Cit9
CisKK2Jvb2wgQ2hyb21lQ2xpZW50UXQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3Qg
Tm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgcmV0dXJuIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYgZnVsbHNjcmVlblZpZGVvKCktPmlzVmFsaWQo
KTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9Q
bGF5YmFjaygpCit7CisgICAgcmV0dXJuIGZ1bGxzY3JlZW5WaWRlbygpLT5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmVudGVy
RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsK
KyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3Jt
TWVkaWEoKTsKKworICAgIEFTU0VSVChwbGF0Zm9ybU1lZGlhLnR5cGUgPT0gUGxhdGZvcm1NZWRp
YTo6UXRNZWRpYVBsYXllclR5cGUpOworICAgIGlmIChwbGF0Zm9ybU1lZGlhLnR5cGUgIT0gUGxh
dGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZ1
bGxzY3JlZW5WaWRlbygpLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworfQorCit2b2lk
IENocm9tZUNsaWVudFF0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAg
ICBBU1NFUlQobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpKTsK
KworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxW
aWRlb0VsZW1lbnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSB2
aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIEFTU0VSVChwbGF0Zm9ybU1lZGlh
LnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpOworICAgIGlmIChwbGF0
Zm9ybU1lZGlhLnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZ1bGxzY3JlZW5WaWRlbygpLT5leGl0RnVsbHNjcmVlbkZvck5v
ZGUobm9kZSk7Cit9IAorI2VuZGlmCisKIFFXZWJTZWxlY3RNZXRob2QqIENocm9tZUNsaWVudFF0
OjpjcmVhdGVTZWxlY3RQb3B1cCgpIGNvbnN0CiB7CiAgICAgUVdlYlNlbGVjdE1ldGhvZCogcmVz
dWx0ID0gbV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVTZWxlY3RJbnB1dE1ldGhvZCgpOwpJbmRleDog
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDc1NjA4
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBG
cmFtZUxvYWRSZXF1ZXN0OwogICAgIGNsYXNzIFF0QWJzdHJhY3RXZWJQb3B1cDsKICAgICBzdHJ1
Y3QgVmlld3BvcnRBcmd1bWVudHM7CisgICAgY2xhc3MgRnVsbHNjcmVlblZpZGVvUXQ7CiAKICAg
ICBjbGFzcyBDaHJvbWVDbGllbnRRdCA6IHB1YmxpYyBDaHJvbWVDbGllbnQKICAgICB7CkBAIC0x
NjMsNiArMTY0LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lk
IG5lZWRUb3VjaEV2ZW50cyhib29sKSB7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQor
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2Rl
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cisg
ICAgICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyKCkgY29uc3Q7CisgICAgICAgIEZ1bGxzY3JlZW5WaWRlb1F0KiBmdWxsc2NyZWVuVmlk
ZW8oKTsKKyNlbmRpZgorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUq
LCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJ
Y29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCkBAIC0x
OTUsNiArMjA1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHN0YXR1c0Jh
clZpc2libGU7CiAgICAgICAgIGJvb2wgbWVudUJhclZpc2libGU7CiAgICAgICAgIFFFdmVudExv
b3AqIG1fZXZlbnRMb29wOworI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAgRnVsbHNjcmVlblZp
ZGVvUXQqIG1fZnVsbHNjcmVlblZpZGVvOworI2VuZGlmCiAKICAgICAgICAgc3RhdGljIGJvb2wg
ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrczsKIApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvUXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRnVsbHNjcmVlblZpZGVvUXQuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgor
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8UUdyYXBoaWNzVmlk
ZW9JdGVtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Z1bGxzY3JlZW5WaWRlb1F0OjpGdWxs
c2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCogY2hyb21lQ2xpZW50KQorICAgIDogbV9jaHJv
bWVDbGllbnQoY2hyb21lQ2xpZW50KQorICAgICwgbV92aWRlb0VsZW1lbnQoMCkKK3sKKyAgICBR
X0FTU0VSVChtX2Nocm9tZUNsaWVudCk7CisgICAgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyID0g
bV9jaHJvbWVDbGllbnQtPmNyZWF0ZUZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKworICAgIGlm
IChtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXIpCisgICAgICAgIGNvbm5lY3QobV9mdWxsc2NyZWVu
VmlkZW9IYW5kbGVyLCBTSUdOQUwoZnVsbHNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0xPVChhYm91
dFRvQ2xvc2UoKSkpOworfQorCitGdWxsc2NyZWVuVmlkZW9RdDo6fkZ1bGxzY3JlZW5WaWRlb1F0
KCkKK3sKKyAgICBkZWxldGUgbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyOworfQorCit2b2lkIEZ1
bGxzY3JlZW5WaWRlb1F0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7Cisg
ICAgUV9BU1NFUlQobm9kZSk7CisgICAgUV9BU1NFUlQobV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVy
KTsKKworICAgIGlmICghbV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdCogbWVkaWFQbGF5ZXJRdCA9IG1lZGlhUGxheWVy
Rm9yTm9kZShub2RlKTsKKyAgICBtZWRpYVBsYXllclF0LT5yZW1vdmVWaWRlb0l0ZW0oKTsKKyAg
ICBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXItPmVudGVyRnVsbHNjcmVlbihtZWRpYVBsYXllclF0
LT5tZWRpYVBsYXllcigpKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9RdDo6ZXhpdEZ1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgUV9BU1NFUlQobm9kZSk7CisgICAgUV9B
U1NFUlQobV9mdWxsc2NyZWVuVmlkZW9IYW5kbGVyKTsKKworICAgIGlmICghbV9mdWxsc2NyZWVu
VmlkZW9IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Z1bGxzY3JlZW5WaWRlb0hh
bmRsZXItPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlh
UGxheWVyUXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5ZXJRdC0+
cmVzdG9yZVZpZGVvSXRlbSgpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb1F0OjphYm91dFRv
Q2xvc2UoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9FbGVtZW50KTsKKyAgICBtX3ZpZGVvRWxl
bWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlUXQqIEZ1bGxz
Y3JlZW5WaWRlb1F0OjptZWRpYVBsYXllcigpCit7CisgICAgUV9BU1NFUlQobV92aWRlb0VsZW1l
bnQpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IG1fdmlkZW9FbGVtZW50LT5w
bGF0Zm9ybU1lZGlhKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0
ZVF0Kj4ocGxhdGZvcm1NZWRpYS5tZWRpYS5xdE1lZGlhUGxheWVyKTsKK30KKworTWVkaWFQbGF5
ZXJQcml2YXRlUXQqIEZ1bGxzY3JlZW5WaWRlb1F0OjptZWRpYVBsYXllckZvck5vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBRX0FTU0VSVChub2RlKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgbV92
aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7CisgICAg
cmV0dXJuIG1lZGlhUGxheWVyKCk7Cit9CisKK2Jvb2wgRnVsbHNjcmVlblZpZGVvUXQ6OnJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKQoreworICAgIHJldHVybiBtX2Z1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXIgPyBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXItPnJlcXVpcmVzRnVsbHNj
cmVlbkZvclZpZGVvUGxheWJhY2soKSA6IGZhbHNlOworfQorCit9CisKSW5kZXg6IFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9RdC5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb1F0LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEZ1bGxzY3JlZW5WaWRl
b1F0X2gKKyNkZWZpbmUgRnVsbHNjcmVlblZpZGVvUXRfaAorCisjaW5jbHVkZSA8UU9iamVjdD4K
KworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07CitRVF9FTkRf
TkFNRVNQQUNFCisKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudFF0OworY2xhc3MgSFRNTFZpZGVvRWxl
bWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdDsKKworY2xhc3Mg
RnVsbHNjcmVlblZpZGVvUXQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1Ymxp
YzoKKyAgICBGdWxsc2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCopOworICAgIH5GdWxsc2Ny
ZWVuVmlkZW9RdCgpOworCisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUo
Tm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOwor
ICAgIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgIHJldHVybiBtX2Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI7IH0KKwor
cHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdCogbWVkaWFQbGF5ZXIoKTsKKyAgICBN
ZWRpYVBsYXllclByaXZhdGVRdCogbWVkaWFQbGF5ZXJGb3JOb2RlKE5vZGUqID0gMCk7CisKK3By
aXZhdGUgc2xvdHM6CisgICAgdm9pZCBhYm91dFRvQ2xvc2UoKTsKKworcHJpdmF0ZToKKyAgICBD
aHJvbWVDbGllbnRRdCogbV9jaHJvbWVDbGllbnQ7CisgICAgSFRNTFZpZGVvRWxlbWVudCogbV92
aWRlb0VsZW1lbnQ7CisgICAgUVdlYkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIqIG1fZnVsbHNjcmVl
blZpZGVvSGFuZGxlcjsKK307CisKK30KKworI2VuZGlmIC8vIFBvcHVwTWVudVF0X2gKSW5kZXg6
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAJKHJldmlz
aW9uIDc1NjA4KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNCArMTI3LDEyIEBAIFFXZWJUb3VjaE1vZGlmaWVy
KiBRdFBsYXRmb3JtUGx1Z2luOjpjcmUKICAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJU
b3VjaE1vZGlmaWVyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6
VG91Y2hJbnRlcmFjdGlvbikpIDogMDsKIH0KIAorI2lmIEVOQUJMRShWSURFTykKK1FXZWJGdWxs
c2NyZWVuVmlkZW9IYW5kbGVyKiBRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsc2NyZWVuVmlk
ZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsK
KyAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKj4o
cC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6RnVsbHNjcmVlblZpZGVv
UGxheWVyKSkgOiAwOworfQorI2VuZGlmCisKIH0KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAkocmV2aXNpb24gNzU2MDgpCisrKyBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw5IEBAIGNsYXNzIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBRV2ViSGFw
dGljRmVlZGJhY2tQbGF5ZXI7CiBjbGFzcyBRV2ViU2VsZWN0RGF0YTsKIGNsYXNzIFFXZWJUb3Vj
aE1vZGlmaWVyOworI2lmIEVOQUJMRShWSURFTykKK2NsYXNzIFFXZWJGdWxsc2NyZWVuVmlkZW9I
YW5kbGVyOworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArNDQsOSBA
QCBwdWJsaWM6CiAgICAgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogY3JlYXRlTm90aWZpY2F0
aW9uUHJlc2VudGVyKCk7CiAgICAgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKiBjcmVhdGVIYXB0
aWNGZWVkYmFja1BsYXllcigpOwogICAgIFFXZWJUb3VjaE1vZGlmaWVyKiBjcmVhdGVUb3VjaE1v
ZGlmaWVyKCk7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyKiBjcmVhdGVGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKIAogICAgIFFXZWJL
aXRQbGF0Zm9ybVBsdWdpbiogcGx1Z2luKCk7CiAKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9w
bGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9leGFt
cGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCShyZXZpc2lvbiA3NTYwOCkKKysrIFdl
YktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw3ICsxOSw5IEBACiAgKi8KICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKIAorI2lu
Y2x1ZGUgPFFFdmVudD4KICNpbmNsdWRlIDxRSEJveExheW91dD4KKyNpbmNsdWRlIDxRS2V5RXZl
bnQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRnZXQ+CiAjaW5jbHVkZSA8UUxpc3RXaWRnZXRJdGVtPgog
I2luY2x1ZGUgPFFQYWludGVyPgpAQCAtMjA4LDYgKzIxMCw3NyBAQCBNdWx0aXBsZVNlbGVjdGlv
blBvcHVwOjpNdWx0aXBsZVNlbGVjdGlvCiAgICAgcmVzaXplKHNpemUoKS53aWR0aCgpLCB2aXNp
YmxlSXRlbUNvdW50ICogZ01hZW1vTGlzdEl0ZW1TaXplKTsKIH0KIAorI2lmIGRlZmluZWQoRU5B
QkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK0Z1bGxzY3JlZW5WaWRlb1dpZGdldDo6RnVsbHNj
cmVlblZpZGVvV2lkZ2V0KCkKKyAgICA6UVZpZGVvV2lkZ2V0KCkKK3sKKyAgICBzZXRGdWxsU2Ny
ZWVuKHRydWUpOworfQorCitib29sIEZ1bGxzY3JlZW5WaWRlb1dpZGdldDo6ZXZlbnQoUUV2ZW50
KiBldikKK3sKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSAgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENs
aWNrKSB7CisgICAgICAgIGVtaXQgZnVsbHNjcmVlbkNsb3NlZCgpOworICAgICAgICBldi0+YWNj
ZXB0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgcmV0dXJuIFFXaWRnZXQ6
OmV2ZW50KGV2KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9XaWRnZXQ6OmtleVByZXNzRXZl
bnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfU3BhY2Up
IHsKKyAgICAgICAgZW1pdCBzcGFjZUJ1dHRvblByZXNzZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworRnVsbHNjcmVlblZpZGVvSGFuZGxlcjo6RnVsbHNjcmVlblZpZGVvSGFuZGxl
cigpCisgICAgOiBtX21lZGlhUGxheWVyKDApCisgICAgLCBtX21lZGlhV2lkZ2V0KDApCit7Cit9
CisKK0Z1bGxzY3JlZW5WaWRlb0hhbmRsZXI6On5GdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sK
KyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKK30KKworYm9vbCBGdWxsc2NyZWVuVmlkZW9IYW5k
bGVyOjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxz
Y3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgUV9BU1NFUlQocGxheWVyKTsKKwor
ICAgIG1fbWVkaWFXaWRnZXQgPSBuZXcgRnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgY29u
bmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoc3BhY2VCdXR0b25QcmVzc2VkKCkpLCB0aGlzLCBT
TE9UKG9uU3RhdGVDaGFuZ2UoKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVdpZGdldCwgU0lHTkFM
KGZ1bGxzY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNJR05BTChmdWxsc2NyZWVuQ2xvc2VkKCkpKTsK
KworICAgIG1fbWVkaWFQbGF5ZXIgPSBwbGF5ZXI7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vmlk
ZW9PdXRwdXQobV9tZWRpYVdpZGdldCk7CisgICAgbV9tZWRpYVdpZGdldC0+c2hvd0Z1bGxTY3Jl
ZW4oKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbHNjcmVlbigp
Cit7CisgICAgbV9tZWRpYVdpZGdldC0+aGlkZSgpOworICAgIGRlbGV0ZSBtX21lZGlhV2lkZ2V0
OworICAgIG1fbWVkaWFXaWRnZXQgPSAwOworICAgIG1fbWVkaWFQbGF5ZXIgPSAwOworfQorCit2
b2lkIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXI6Om9uU3RhdGVDaGFuZ2UoKQoreworICAgIGlmICht
X21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpYVBs
YXllci0+cGxheSgpOworfQorI2VuZGlmCisKIGJvb2wgV2ViUGx1Z2luOjpzdXBwb3J0c0V4dGVu
c2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAogewogICAgIHN3aXRjaCAoZXh0ZW5zaW9u
KSB7CkBAIC0yMTksNiArMjkyLDEwIEBAIGJvb2wgV2ViUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lv
bihFeHRlbnMKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAgcmV0
dXJuIHRydWU7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworICAg
IGNhc2UgRnVsbHNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRp
ZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzUsNiAr
MzEyLDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGUKICNlbmRp
ZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAgcmV0dXJuIG5ldyBUb3VjaE1v
ZGlmaWVyKCk7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworICAg
IGNhc2UgRnVsbHNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gbmV3IEZ1bGxzY3Jl
ZW5WaWRlb0hhbmRsZXIoKTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVn
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmgJKHJldmlzaW9uIDc1NjA4KQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3Jt
cGx1Z2luL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5j
bHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAKICNpbmNsdWRlIDxRRGlhbG9nPgor
I2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRVmlk
ZW9XaWRnZXQ+CisjZW5kaWYKIAogY2xhc3MgUUxpc3RXaWRnZXRJdGVtOwogY2xhc3MgUUxpc3RX
aWRnZXQ7CkBAIC05NCw2ICs5Nyw0MCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorI2lmIGRlZmlu
ZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK2NsYXNzIEZ1bGxzY3JlZW5WaWRlb1dp
ZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
RnVsbHNjcmVlblZpZGVvV2lkZ2V0KCk7CisgICAgdmlydHVhbCB+RnVsbHNjcmVlblZpZGVvV2lk
Z2V0KCkge30KKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbHNjcmVlbkNsb3NlZCgpOworICAg
IHZvaWQgc3BhY2VCdXR0b25QcmVzc2VkKCk7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGV2ZW50
KFFFdmVudCopOworICAgIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKK307CisKK2Ns
YXNzIEZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxzY3JlZW5WaWRlb0hh
bmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRnVsbHNjcmVlblZpZGVvSGFuZGxl
cigpOworICAgIHZpcnR1YWwgfkZ1bGxzY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBib29sIHJl
cXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdDsKKworcHVibGljIFFfU0xP
VFM6CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oUU1lZGlhUGxheWVyKik7CisgICAgdm9pZCBl
eGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgb25TdGF0ZUNoYW5nZSgpOworCitwcml2YXRlOgor
ICAgIFFNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsgLy8gbm90IG93bmVkCisgICAgRnVsbHNj
cmVlblZpZGVvV2lkZ2V0KiBtX21lZGlhV2lkZ2V0OyAvLyBvd25lZAorfTsKKyNlbmRpZgorCiBj
bGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBs
dWdpbgogewogICAgIFFfT0JKRUNUCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9leGFtcGxl
cy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHJldmlzaW9uIDc1NjA4KQorKysg
V2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwkod29y
a2luZyBjb3B5KQpAQCAtMyw2ICszLDIwIEBAIFRBUkdFVCA9ICQkcXRMaWJyYXJ5VGFyZ2V0KHBs
YXRmb3JtcGx1Z2kKIFRFTVBMQVRFID0gbGliCiBDT05GSUcgKz0gcGx1Z2luCiAKKyMjIGxvYWQg
bW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxhYmxlCitsb2FkKG1vYmlsaXR5Y29u
ZmlnLCB0cnVlKQorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2UgcmVxdWlyZSBRdE11bHRp
bWVkaWEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89LikgeworICAgIGNvbnRhaW5z
KE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICBDT05GSUcgKz0gbW9iaWxp
dHkKKyAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQorICAgICAgICBERUZJTkVTIC09IEVO
QUJMRV9WSURFTz0wCisgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTEKKyAgICB9Cit9
CisKIERFU1RESVIgPSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNdL3dlYmtpdAogCiBTT1VSQ0VTICs9
IFwKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZv
cm1wbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc1NjA4KQorKysgV2ViS2l0L3F0
L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUg
PFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworI2luY2x1
ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQogewpAQCAt
MTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFk
ZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07CiAKKyNp
ZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBRV2ViRnVsbHNj
cmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIFFXZWJGdWxsc2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIH5RV2Vi
RnVsbHNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVs
bHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2
b2lkIGZ1bGxzY3JlZW5DbG9zZWQoKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2
b2lkIGVudGVyRnVsbHNjcmVlbihRTWVkaWFQbGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4aXRGdWxsc2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgorCiBjbGFzcyBRV2ViS2l0UGxhdGZv
cm1QbHVnaW4KIHsKIHB1YmxpYzoKQEAgLTEyNCw3ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAgICAg
IE11bHRpcGxlU2VsZWN0aW9ucywKICAgICAgICAgTm90aWZpY2F0aW9ucywKICAgICAgICAgSGFw
dGljcywKLSAgICAgICAgVG91Y2hJbnRlcmFjdGlvbgorICAgICAgICBUb3VjaEludGVyYWN0aW9u
LAorICAgICAgICBGdWxsc2NyZWVuVmlkZW9QbGF5ZXIKICAgICB9OwogCiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0ID0gMDsKQEAg
LTEzMiw3ICsxNTMsNyBAQCBwdWJsaWM6CiB9OwogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKLVFfREVD
TEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktp
dC5QbGF0Zm9ybVBsdWdpbi8xLjYiKTsKK1FfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRm
b3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjciKTsKIFFU
X0VORF9OQU1FU1BBQ0UKIAogI2VuZGlmIC8vIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICg==
</data>
<flag name="review"
          id="70047"
          type_id="1"
          status="+"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="70048"
          type_id="3"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78745</attachid>
            <date>2011-01-12 15:24:00 -0800</date>
            <delta_ts>2011-01-13 03:47:07 -0800</delta_ts>
            <desc>updated with Simon&apos;s suggestion</desc>
            <filename>51249-v2.1.patch</filename>
            <type>text/plain</type>
            <size>26823</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjM3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMTIgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIE1ha2UgTWVkaWFQbGF5ZXJQcml2
YXRlUXQgc3VwcG9ydCBhIGZ1bGxzY3JlZW4gcGxheWVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIExheW91dFRlc3RzL21lZGlhL21lZGlhLWZ1bGxzY3JlZW4taW5saW5lLmh0bWwg
YWxyZWFkeSBleGlzdHMuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgdGVzdCBmYWlsZWQgZm9yIFF0
IChRdE1lZGlhUGxheWVyKSBkdWUgdG8gZHVyYXRpb25jaGFuZ2UgZXZlbnQgZ2V0dGluZyBmaXJl
ZCB0d2ljZS4KKyAgICAgICAgU28sIHN0aWxsIHNraXAgaXQgZm9yIFF0LgorCisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVF0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVF0OjpyZW1vdmVWaWRlb0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OnJlc3RvcmVWaWRlb0l0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L01lZGlhUGxheWVyUHJpdmF0ZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRdDo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjptZWRpYVBsYXllcik6CisKIDIwMTEtMDEtMTIgIFN0ZXBoZW4gV2hpdGUg
IDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMg
Um9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzU2MzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzI0OSw4ICszMjQ5LDEzIEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKICAgICAgICAgUEtHQ09ORklH
ICs9IGdsaWItMi4wIGdpby0yLjAgZ3N0cmVhbWVyLTAuMTAgZ3N0cmVhbWVyLWFwcC0wLjEwIGdz
dHJlYW1lci1iYXNlLTAuMTAgZ3N0cmVhbWVyLWludGVyZmFjZXMtMC4xMCBnc3RyZWFtZXItcGJ1
dGlscy0wLjEwIGdzdHJlYW1lci1wbHVnaW5zLWJhc2UtMC4xMCBnc3RyZWFtZXItdmlkZW8tMC4x
MAogICAgICB9IGVsc2U6Y29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBtdWx0aW1lZGlhKSB7Ci0g
ICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRl
UXQuaAotICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVy
UHJpdmF0ZVF0LmNwcAorICAgICAgICBIRUFERVJTICs9IFwgCisgICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oIFwKKyAgICAgICAgICAgICQkUFdE
Ly4uLy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCisKKyAg
ICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAgXAorICAgICAgICAgICAgJCRQV0QvLi4vLi4vV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcAogCiAgICAgICAgIENPTkZJRyAq
PSBtb2JpbGl0eQogICAgICAgICBNT0JJTElUWSArPSBtdWx0aW1lZGlhCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5
ZXJQcml2YXRlUXQuY3BwCShyZXZpc2lvbiA3NTYzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDcgKzEwOCw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpNZWRpYVBsYXllclByaXZh
dGUKICAgICAsIG1fcXVldWVkU2VlaygtMSkKICAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6
QXV0bykKIHsKLSAgICBtX21lZGlhUGxheWVyLT5iaW5kKG1fdmlkZW9JdGVtKTsKKyAgICBtX21l
ZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChtX3ZpZGVvSXRlbSk7CiAgICAgbV92aWRlb1NjZW5l
LT5hZGRJdGVtKG1fdmlkZW9JdGVtKTsKIAogICAgIC8vIFNpZ25hbCBIYW5kbGVycwpAQCAtNTg3
LDYgKzU4NywyMiBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpuYXR1cmFsU2l6CiAg
ICAgcmV0dXJuIG1fbmF0dXJhbFNpemU7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
OnJlbW92ZVZpZGVvSXRlbSgpCit7CisgICAgbV9vbGROYXR1cmFsU2l6ZSA9IG1fbmF0dXJhbFNp
emU7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQoc3RhdGljX2Nhc3Q8UUdyYXBo
aWNzVmlkZW9JdGVtKj4oMCkpOworICAgIG1fdmlkZW9TY2VuZS0+cmVtb3ZlSXRlbShtX3ZpZGVv
SXRlbSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlc3RvcmVWaWRlb0l0ZW0o
KQoreworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKKyAg
ICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOworICAgIC8vIEZJWE1FOiBhIHF0
bW9iaWxpdHkgYnVnLCBuZWVkIHRvIHJlc2V0IHRoZSBzaXplIHdoZW4gcmVzdG9yZSB0aGUgdmlk
ZW9pdGVtLCBvdGhlcndpc2UgdGhlIHNpemUgaXMgMAorICAgIC8vIGh0dHA6Ly9idWdyZXBvcnRz
LnF0Lm5va2lhLmNvbS9icm93c2UvUVRNT0JJTElUWS05NzEKKyAgICBuYXRpdmVTaXplQ2hhbmdl
ZChRU2l6ZShtX29sZE5hdHVyYWxTaXplKSk7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmgJKHJldmlzaW9uIDc1NjMxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKIAotICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVYVFVS
RV9NQVBQRVIpCkBAIC0xMDgsNiArMTA4LDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmly
dHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKKworICAgIFFNZWRpYVBs
YXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUGxheWVyOyB9CisgICAg
dm9pZCByZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lkIHJlc3RvcmVWaWRlb0l0ZW0oKTsKKwog
cHJpdmF0ZSBzbG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6
Ok1lZGlhU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3Ip
OwpAQCAtMTQyLDYgKzE0Nyw3IEBAIHByaXZhdGU6CiAKICAgICBJbnRTaXplIG1fY3VycmVudFNp
emU7CiAgICAgSW50U2l6ZSBtX25hdHVyYWxTaXplOworICAgIEludFNpemUgbV9vbGROYXR1cmFs
U2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwogICAgIGJvb2wgbV9pc1NlZWtpbmc7CiAgICAg
Ym9vbCBtX2NvbXBvc2l0ZWQ7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjM3KQorKysgV2ViS2l0L3F0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDExLTAxLTEyICBZaSBT
aGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbUXRdIEV4dGVuZCB0aGUgUGxhdGZvcm0gUGx1Z2luIHRvIHN1
cHBvcnQgZnVsbCBzY3JlZW4gdmlkZW8gaGFuZGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyNDkKKworICAgICAgICBBZGQgYSBuZXcgd2Via2l0
IHBsYXRmb3JtIHBsdWdpbiBpbnRlcmZhY2UgdG8gc3VwcG9ydCBmdWxsIHNjcmVlbiB2aWRlbyBo
YW5kbGVyLgorCisgICAgICAgICogQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOgorICAgICAg
ICAoUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KToKKyAgICAgICAgKFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRRdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpmdWxsU2NyZWVuVmlkZW8pOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVv
UGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmVudGVyRnVsbHNj
cmVlbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmV4aXRGdWxs
c2NyZWVuRm9yTm9kZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RnVsbFNjcmVlblZpZGVvUXQ6OkZ1bGxTY3JlZW5WaWRlb1F0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxTY3JlZW5WaWRlb1F0Ojp+RnVsbFNjcmVlblZpZGVv
UXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbFNjcmVlblZpZGVvUXQ6OmVudGVyRnVsbFNjcmVl
bkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbFNjcmVlblZpZGVvUXQ6OmV4aXRGdWxs
U2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsU2NyZWVuVmlkZW9RdDo6YWJv
dXRUb0Nsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxTY3JlZW5WaWRlb1F0OjptZWRpYVBs
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpGdWxsU2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXJG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxTY3JlZW5WaWRlb1F0OjpyZXF1aXJlc0Z1
bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GdWxs
U2NyZWVuVmlkZW9RdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxTY3JlZW5WaWRl
b1F0Ojppc1ZhbGlkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uaDoKKyAgICAgICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwOgor
ICAgICAgICAoRnVsbFNjcmVlblZpZGVvV2lkZ2V0OjpGdWxsU2NyZWVuVmlkZW9XaWRnZXQpOgor
ICAgICAgICAoRnVsbFNjcmVlblZpZGVvV2lkZ2V0OjpldmVudCk6CisgICAgICAgIChGdWxsU2Ny
ZWVuVmlkZW9XaWRnZXQ6OmtleVByZXNzRXZlbnQpOgorICAgICAgICAoRnVsbFNjcmVlblZpZGVv
SGFuZGxlcjo6RnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgIChGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyOjp+RnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgIChGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKToKKyAgICAg
ICAgKEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbFNjcmVlbik6CisgICAgICAgIChG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNjcmVlbik6CisgICAgICAgIChXZWJQbHVn
aW46OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5z
aW9uKToKKyAgICAgICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaDoKKyAg
ICAgICAgKEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6fkZ1bGxTY3JlZW5WaWRlb1dpZGdldCk6Cisg
ICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAg
ICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOgor
ICAgICAgICAoUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyKToKKyAgICAgICAgKFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIpOgorCiAyMDExLTAxLTEyICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24g
NzU2MzEpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUg
PFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworI2luY2x1
ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQogewpAQCAt
MTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFk
ZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07CiAKKyNp
ZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIH5RV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVs
bFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2
b2lkIGZ1bGxTY3JlZW5DbG9zZWQoKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2
b2lkIGVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4aXRGdWxsU2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgorCiBjbGFzcyBRV2ViS2l0UGxhdGZv
cm1QbHVnaW4KIHsKIHB1YmxpYzoKQEAgLTEyNCw3ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAgICAg
IE11bHRpcGxlU2VsZWN0aW9ucywKICAgICAgICAgTm90aWZpY2F0aW9ucywKICAgICAgICAgSGFw
dGljcywKLSAgICAgICAgVG91Y2hJbnRlcmFjdGlvbgorICAgICAgICBUb3VjaEludGVyYWN0aW9u
LAorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIKICAgICB9OwogCiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0ID0gMDsKQEAg
LTEzMiw3ICsxNTMsNyBAQCBwdWJsaWM6CiB9OwogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKLVFfREVD
TEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktp
dC5QbGF0Zm9ybVBsdWdpbi8xLjYiKTsKK1FfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYktpdFBsYXRm
b3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdpbi8xLjciKTsKIFFU
X0VORF9OQU1FU1BBQ0UKIAogI2VuZGlmIC8vIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICkluZGV4
OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9u
IDc1NjMxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTQgQEAKICNpbmNsdWRlIDxxdG9vbHRpcC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAorI2lmIEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJG
dWxsU2NyZWVuVmlkZW9RdC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3MgPSBmYWxz
ZTsKQEAgLTgzLDYgKzkxLDkgQEAgYm9vbCBDaHJvbWVDbGllbnRRdDo6ZHVtcFZpc2l0ZWRMaW5r
c0NhbAogQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVudFF0KFFXZWJQYWdlKiB3ZWJQYWdlKQog
ICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2V2ZW50TG9vcCgwKQorI2lmIEVOQUJM
RShWSURFTykKKyAgICAsIG1fZnVsbFNjcmVlblZpZGVvKDApCisjZW5kaWYKIHsKICAgICB0b29s
QmFyc1Zpc2libGUgPSBzdGF0dXNCYXJWaXNpYmxlID0gbWVudUJhclZpc2libGUgPSB0cnVlOwog
fQpAQCAtOTEsNiArMTAyLDEwIEBAIENocm9tZUNsaWVudFF0Ojp+Q2hyb21lQ2xpZW50UXQoKQog
ewogICAgIGlmIChtX2V2ZW50TG9vcCkKICAgICAgICAgbV9ldmVudExvb3AtPmV4aXQoKTsKKwor
I2lmIEVOQUJMRShWSURFTykKKyAgICBkZWxldGUgbV9mdWxsU2NyZWVuVmlkZW87CisjZW5kaWYK
IH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCkBAIC02NDgsNiArNjYzLDU0IEBAIEludFJlY3QgQ2hyb21lQ2xpZW50UXQ6OnZpc2li
bGVSZWN0Rm9yVGkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorRnVsbFNjcmVlblZp
ZGVvUXQqIENocm9tZUNsaWVudFF0OjpmdWxsU2NyZWVuVmlkZW8oKQoreworICAgIGlmICghbV9m
dWxsU2NyZWVuVmlkZW8pCisgICAgICAgIG1fZnVsbFNjcmVlblZpZGVvID0gbmV3IEZ1bGxTY3Jl
ZW5WaWRlb1F0KHRoaXMpOworICAgIHJldHVybiBtX2Z1bGxTY3JlZW5WaWRlbzsKK30KKworYm9v
bCBDaHJvbWVDbGllbnRRdDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKiBu
b2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnZpZGVvVGFnKSAmJiBmdWxsU2NyZWVuVmlkZW8oKS0+aXNWYWxpZCgpOworfQor
Citib29sIENocm9tZUNsaWVudFF0OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNr
KCkKK3sKKyAgICByZXR1cm4gZnVsbFNjcmVlblZpZGVvKCktPnJlcXVpcmVzRnVsbFNjcmVlbkZv
clZpZGVvUGxheWJhY2soKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6ZW50ZXJGdWxsc2Ny
ZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBs
YXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgp
OworCisgICAgQVNTRVJUKHBsYXRmb3JtTWVkaWEudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRdE1l
ZGlhUGxheWVyVHlwZSk7CisgICAgaWYgKHBsYXRmb3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1l
ZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnVsbFNjcmVl
blZpZGVvKCktPmVudGVyRnVsbFNjcmVlbkZvck5vZGUobm9kZSk7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50UXQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpOworCisgICAg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxl
bWVudCo+KG5vZGUpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IHZpZGVvRWxl
bWVudC0+cGxhdGZvcm1NZWRpYSgpOworCisgICAgQVNTRVJUKHBsYXRmb3JtTWVkaWEudHlwZSA9
PSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSk7CisgICAgaWYgKHBsYXRmb3JtTWVk
aWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZnVsbFNjcmVlblZpZGVvKCktPmV4aXRGdWxsU2NyZWVuRm9yTm9kZShub2Rl
KTsKK30gCisjZW5kaWYKKwogUVdlYlNlbGVjdE1ldGhvZCogQ2hyb21lQ2xpZW50UXQ6OmNyZWF0
ZVNlbGVjdFBvcHVwKCkgY29uc3QKIHsKICAgICBRV2ViU2VsZWN0TWV0aG9kKiByZXN1bHQgPSBt
X3BsYXRmb3JtUGx1Z2luLmNyZWF0ZVNlbGVjdElucHV0TWV0aG9kKCk7CkluZGV4OiBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNzU2MzEpCisrKyBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IEZyYW1lTG9h
ZFJlcXVlc3Q7CiAgICAgY2xhc3MgUXRBYnN0cmFjdFdlYlBvcHVwOwogICAgIHN0cnVjdCBWaWV3
cG9ydEFyZ3VtZW50czsKKyAgICBjbGFzcyBGdWxsU2NyZWVuVmlkZW9RdDsKIAogICAgIGNsYXNz
IENocm9tZUNsaWVudFF0IDogcHVibGljIENocm9tZUNsaWVudAogICAgIHsKQEAgLTE2Miw2ICsx
NjMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMoYm9vbCkgeyB9CiAjZW5kaWYKKyAK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3Jl
ZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNj
cmVlbkZvck5vZGUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5G
b3JOb2RlKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKTsKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUXQqIGZ1bGxTY3JlZW5W
aWRlbygpOworI2VuZGlmCiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFt
ZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNob29z
ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKik7CkBAIC0x
OTYsNiArMjA1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtZW51QmFy
VmlzaWJsZTsKICAgICAgICAgUUV2ZW50TG9vcCogbV9ldmVudExvb3A7CiAKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1F0KiBtX2Z1bGxTY3JlZW5WaWRlbzsKKyNl
bmRpZgorCiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3M7CiAK
ICAgICAgICAgbXV0YWJsZSBRdFBsYXRmb3JtUGx1Z2luIG1fcGxhdGZvcm1QbHVnaW47CkluZGV4
OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdWxsU2NyZWVuVmlkZW9RdC5oIgorCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIK
KyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisK
KyNpbmNsdWRlIDxRR3JhcGhpY3NWaWRlb0l0ZW0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RnVsbFNjcmVlblZpZGVvUXQ6OkZ1bGxTY3JlZW5WaWRlb1F0KENocm9tZUNsaWVudFF0KiBjaHJv
bWVDbGllbnQpCisgICAgOiBtX2Nocm9tZUNsaWVudChjaHJvbWVDbGllbnQpCisgICAgLCBtX3Zp
ZGVvRWxlbWVudCgwKQoreworICAgIFFfQVNTRVJUKG1fY2hyb21lQ2xpZW50KTsKKyAgICBtX0Z1
bGxTY3JlZW5WaWRlb0hhbmRsZXIgPSBtX2Nocm9tZUNsaWVudC0+bV9wbGF0Zm9ybVBsdWdpbi5j
cmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisKKyAgICBpZiAobV9GdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKQorICAgICAgICBjb25uZWN0KG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlciwgU0lH
TkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNMT1QoYWJvdXRUb0Nsb3NlKCkpKTsKK30K
KworRnVsbFNjcmVlblZpZGVvUXQ6On5GdWxsU2NyZWVuVmlkZW9RdCgpCit7CisgICAgZGVsZXRl
IG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9RdDo6
ZW50ZXJGdWxsU2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIFFfQVNTRVJUKG5vZGUp
OworICAgIFFfQVNTRVJUKG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcik7CisKKyAgICBpZiAoIW1f
RnVsbFNjcmVlblZpZGVvSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQbGF5
ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyUXQgPSBtZWRpYVBsYXllckZvck5vZGUobm9kZSk7Cisg
ICAgbWVkaWFQbGF5ZXJRdC0+cmVtb3ZlVmlkZW9JdGVtKCk7CisgICAgbV9GdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyLT5lbnRlckZ1bGxTY3JlZW4obWVkaWFQbGF5ZXJRdC0+bWVkaWFQbGF5ZXIoKSk7
Cit9CisKK3ZvaWQgRnVsbFNjcmVlblZpZGVvUXQ6OmV4aXRGdWxsU2NyZWVuRm9yTm9kZShOb2Rl
KiBub2RlKQoreworICAgIFFfQVNTRVJUKG5vZGUpOworICAgIFFfQVNTRVJUKG1fRnVsbFNjcmVl
blZpZGVvSGFuZGxlcik7CisKKyAgICBpZiAoIW1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyLT5leGl0RnVsbFNj
cmVlbigpOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBtZWRpYVBsYXllclF0ID0gbWVkaWFQ
bGF5ZXJGb3JOb2RlKG5vZGUpOworICAgIG1lZGlhUGxheWVyUXQtPnJlc3RvcmVWaWRlb0l0ZW0o
KTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9RdDo6YWJvdXRUb0Nsb3NlKCkKK3sKKyAgICBR
X0FTU0VSVChtX3ZpZGVvRWxlbWVudCk7CisgICAgbV92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2Ny
ZWVuKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBGdWxsU2NyZWVuVmlkZW9RdDo6bWVk
aWFQbGF5ZXIoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9FbGVtZW50KTsKKyAgICBQbGF0Zm9y
bU1lZGlhIHBsYXRmb3JtTWVkaWEgPSBtX3ZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVRdCo+KHBsYXRmb3JtTWVk
aWEubWVkaWEucXRNZWRpYVBsYXllcik7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBGdWxs
U2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXJGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgUV9B
U1NFUlQobm9kZSk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIG1fdmlkZW9FbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIHJldHVybiBtZWRpYVBsYXll
cigpOworfQorCitib29sIEZ1bGxTY3JlZW5WaWRlb1F0OjpyZXF1aXJlc0Z1bGxTY3JlZW5Gb3JW
aWRlb1BsYXliYWNrKCkKK3sKKyAgICByZXR1cm4gbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyID8g
bV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyLT5yZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgOiBmYWxzZTsKK30KKworfQorCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnVsbFNjcmVlblZpZGVvUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnVsbFNjcmVlblZpZGVvUXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsU2NyZWVuVmlkZW9RdF9oCisjZGVmaW5lIEZ1
bGxTY3JlZW5WaWRlb1F0X2gKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK1FUX0JFR0lOX05BTUVT
UEFDRQorY2xhc3MgUUdyYXBoaWNzVmlkZW9JdGVtOworUVRfRU5EX05BTUVTUEFDRQorCitjbGFz
cyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDaHJvbWVDbGllbnRRdDsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBOb2Rl
OworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXQ7CisKK2NsYXNzIEZ1bGxTY3JlZW5WaWRlb1F0
IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRnVsbFNjcmVl
blZpZGVvUXQoQ2hyb21lQ2xpZW50UXQqKTsKKyAgICB+RnVsbFNjcmVlblZpZGVvUXQoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICBib29sIHJlcXVpcmVz
RnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
ICByZXR1cm4gbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyOyB9CisKK3ByaXZhdGU6CisgICAgTWVk
aWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRl
UXQqIG1lZGlhUGxheWVyRm9yTm9kZShOb2RlKiA9IDApOworCitwcml2YXRlIHNsb3RzOgorICAg
IHZvaWQgYWJvdXRUb0Nsb3NlKCk7CisKK3ByaXZhdGU6CisgICAgQ2hyb21lQ2xpZW50UXQqIG1f
Y2hyb21lQ2xpZW50OworICAgIEhUTUxWaWRlb0VsZW1lbnQqIG1fdmlkZW9FbGVtZW50OworICAg
IFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBtX0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXI7Cit9
OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVRdF9oCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCShyZXZpc2lvbiA3NTYzMSkKKysrIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI3LDQgKzEyNywxMiBAQCBRV2ViVG91Y2hNb2RpZmllciogUXRQbGF0Zm9ybVBsdWdp
bjo6Y3JlCiAgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViVG91Y2hNb2RpZmllcio+KHAt
PmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlRvdWNoSW50ZXJhY3Rpb24p
KSA6IDA7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCitRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxl
ciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCit7Cisg
ICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIHAgPyBz
dGF0aWNfY2FzdDxRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcio+KHAtPmNyZWF0ZUV4dGVuc2lv
bihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OkZ1bGxTY3JlZW5WaWRlb1BsYXllcikpIDogMDsKK30K
KyNlbmRpZgorCiB9CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3Jt
UGx1Z2luLmgJKHJldmlzaW9uIDc1NjMxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0
UGxhdGZvcm1QbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQCBjbGFzcyBR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVy
OwogY2xhc3MgUVdlYlNlbGVjdERhdGE7CiBjbGFzcyBRV2ViVG91Y2hNb2RpZmllcjsKKyNpZiBF
TkFCTEUoVklERU8pCitjbGFzcyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzQ0LDkgQEAgcHVibGljOgogICAgIFFX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpOwog
ICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIo
KTsKICAgICBRV2ViVG91Y2hNb2RpZmllciogY3JlYXRlVG91Y2hNb2RpZmllcigpOworI2lmIEVO
QUJMRShWSURFTykKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbFNj
cmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4q
IHBsdWdpbigpOwogCkluZGV4OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gNzU2MzEpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTks
OSBAQAogICovCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAj
aW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFM
aXN0V2lkZ2V0PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRl
cj4KQEAgLTIwOCw2ICsyMTAsNzEgQEAgTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVT
ZWxlY3RpbwogICAgIHJlc2l6ZShzaXplKCkud2lkdGgoKSwgdmlzaWJsZUl0ZW1Db3VudCAqIGdN
YWVtb0xpc3RJdGVtU2l6ZSk7CiB9CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5B
QkxFX1ZJREVPCitGdWxsU2NyZWVuVmlkZW9XaWRnZXQ6OkZ1bGxTY3JlZW5WaWRlb1dpZGdldChR
TWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IFFWaWRlb1dpZGdldCgpCisgICAgLCBtX21lZGlh
UGxheWVyKHBsYXllcikKK3sKKyAgICBRX0FTU0VSVChtX21lZGlhUGxheWVyKTsKKworICAgIHNl
dEZ1bGxTY3JlZW4odHJ1ZSk7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQodGhp
cyk7Cit9CisKK2Jvb2wgRnVsbFNjcmVlblZpZGVvV2lkZ2V0OjpldmVudChRRXZlbnQqIGV2KQor
eworICAgIGlmIChldi0+dHlwZSgpID09ICBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2spIHsK
KyAgICAgICAgZW1pdCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisgICAgICAgIGV2LT5hY2NlcHQoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICByZXR1cm4gUVdpZGdldDo6ZXZlbnQo
ZXYpOworfQorCit2b2lkIEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5
RXZlbnQqIGV2KQoreworICAgIGlmIChldi0+a2V5KCkgPT0gUXQ6OktleV9TcGFjZSkgeworICAg
ICAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdT
dGF0ZSkKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKKyAgICAgICAgZXYtPmFjY2VwdCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKKyAgICA6IG1fbWVkaWFXaWRnZXQoMCkKK3sKK30KKwor
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6fkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAg
IGRlbGV0ZSBtX21lZGlhV2lkZ2V0OworfQorCitib29sIEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbFNjcmVl
bihRTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAgICBRX0FTU0VSVChwbGF5ZXIpOworCisgICAg
bV9tZWRpYVdpZGdldCA9IG5ldyBGdWxsU2NyZWVuVmlkZW9XaWRnZXQocGxheWVyKTsKKyAgICBj
b25uZWN0KG1fbWVkaWFXaWRnZXQsIFNJR05BTChmdWxsU2NyZWVuQ2xvc2VkKCkpLCB0aGlzLCBT
SUdOQUwoZnVsbFNjcmVlbkNsb3NlZCgpKSk7CisgICAgbV9tZWRpYVdpZGdldC0+c2hvd0Z1bGxT
Y3JlZW4oKTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNjcmVl
bigpCit7CisgICAgbV9tZWRpYVdpZGdldC0+aGlkZSgpOworICAgIGRlbGV0ZSBtX21lZGlhV2lk
Z2V0OworICAgIG1fbWVkaWFXaWRnZXQgPSAwOworfQorI2VuZGlmCisKIGJvb2wgV2ViUGx1Z2lu
OjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAogewogICAgIHN3
aXRjaCAoZXh0ZW5zaW9uKSB7CkBAIC0yMTksNiArMjg2LDEwIEBAIGJvb2wgV2ViUGx1Z2luOjpz
dXBwb3J0c0V4dGVuc2lvbihFeHRlbnMKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlv
bjoKICAgICAgICAgcmV0dXJuIHRydWU7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVO
QUJMRV9WSURFTworICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkBAIC0yMzUsNiArMzA2LDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5z
aW9uKEV4dGUKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAgcmV0
dXJuIG5ldyBUb3VjaE1vZGlmaWVyKCk7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVO
QUJMRV9WSURFTworICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1
cm4gbmV3IEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9XZWJQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxh
dGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHJldmlzaW9uIDc1NjMxKQorKysgV2ViS2l0L3F0L2V4
YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw5IEBACiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAKICNpbmNs
dWRlIDxRRGlhbG9nPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8K
KyNpbmNsdWRlIDxRVmlkZW9XaWRnZXQ+CisjZW5kaWYKIAogY2xhc3MgUUxpc3RXaWRnZXRJdGVt
OwogY2xhc3MgUUxpc3RXaWRnZXQ7CkBAIC05NCw2ICs5Nyw0MCBAQCBwdWJsaWM6CiAgICAgfQog
fTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KK2NsYXNzIEZ1
bGxTY3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgRnVsbFNjcmVlblZpZGVvV2lkZ2V0KFFNZWRpYVBsYXllciopOworICAg
IHZpcnR1YWwgfkZ1bGxTY3JlZW5WaWRlb1dpZGdldCgpIHt9CisKK1FfU0lHTkFMUzoKKyAgICB2
b2lkIGZ1bGxTY3JlZW5DbG9zZWQoKTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgZXZlbnQoUUV2
ZW50Kik7CisgICAgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOworCitwcml2YXRlOgor
ICAgIFFNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsgLy8gbm90IG93bmVkCit9OworCitjbGFz
cyBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIo
KTsKKyAgICB2aXJ0dWFsIH5GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1
aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RT
OgorICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXllciopOworICAgIHZvaWQgZXhp
dEZ1bGxTY3JlZW4oKTsKKworcHJpdmF0ZToKKyAgICBGdWxsU2NyZWVuVmlkZW9XaWRnZXQqIG1f
bWVkaWFXaWRnZXQ7IC8vIG93bmVkCit9OworI2VuZGlmCisKIGNsYXNzIFdlYlBsdWdpbiA6IHB1
YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiAgICAgUV9PQkpF
Q1QKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdp
bi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3Bs
YXRmb3JtcGx1Z2luLnBybwkocmV2aXNpb24gNzU2MzEpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYg
KzMsMjAgQEAgVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQocGxhdGZvcm1wbHVnaQogVEVNUExB
VEUgPSBsaWIKIENPTkZJRyArPSBwbHVnaW4KIAorIyMgbG9hZCBtb2JpbGl0eWNvbmZpZyBpZiBt
b2JpbGl0eSBpcyBhdmFpbGFibGUKK2xvYWQobW9iaWxpdHljb25maWcsIHRydWUpCisKKyMgSFRN
TDUgTWVkaWEgU3VwcG9ydAorIyBXZSByZXF1aXJlIFF0TXVsdGltZWRpYQorIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9WSURFTz0uKSB7CisgICAgY29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBt
dWx0aW1lZGlhKSB7CisgICAgICAgIENPTkZJRyArPSBtb2JpbGl0eQorICAgICAgICBNT0JJTElU
WSArPSBtdWx0aW1lZGlhCisgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTAKKyAgICAg
ICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MQorICAgIH0KK30KKwogREVTVERJUiA9ICQkW1FU
X0lOU1RBTExfUExVR0lOU10vd2Via2l0CiAKIFNPVVJDRVMgKz0gXApJbmRleDogV2ViS2l0L3F0
L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1w
bHVnaW4uaAkocmV2aXNpb24gNzU2MzEpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDkgQEAKIAogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVkZSA8UVVybD4KKyNpZiBkZWZpbmVk
KEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgor
I2VuZGlmCiAKIGNsYXNzIFFXZWJTZWxlY3REYXRhCiB7CkBAIC0xMTUsNiArMTE4LDIzIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhpdFRlc3RQYWRkaW5nRm9yVG91Y2goY29uc3Qg
UGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAwOwogfTsKIAorI2lmIGRlZmluZWQoRU5BQkxFX1ZJ
REVPKSAmJiBFTkFCTEVfVklERU8KK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIDog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbFNjcmVlbkNsb3Nl
ZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVu
KFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSA9
IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogcHVibGlj
OgpAQCAtMTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25z
LAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAgICAgICBUb3Vj
aEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAgIEZ1bGxTY3Jl
ZW5WaWRlb1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNp
b24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwpAQCAtMTMyLDcgKzE1Myw3IEBAIHB1
YmxpYzoKIH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2Vi
S2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEu
NiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9r
aWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogUVRfRU5EX05BTUVTUEFDRQogCiAj
ZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>79076</attachid>
            <date>2011-01-15 13:50:34 -0800</date>
            <delta_ts>2011-01-15 15:02:47 -0800</delta_ts>
            <desc>This is a backport to Qt Webkit 2.2.</desc>
            <filename>videobackport.diff</filename>
            <type>application/octet-stream</type>
            <size>101641</size>
            <attacher name="Nancy Piedra">nancy.piedra</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IGMzN2UzMzMuLjY4MmI0NjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjcyLDYgKzI3Miw3IEBAIFNUWUxFU0hFRVRTX0VN
QkVEID0gXAogICAgICQkUFdEL2Nzcy92aWV3LXNvdXJjZS5jc3MgXAogICAgICQkUFdEL2Nzcy93
bWwuY3NzIFwKICAgICAkJFBXRC9jc3MvbWVkaWFDb250cm9scy5jc3MgXAorICAgICQkUFdEL2Nz
cy9tZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuLmNzcyBcCiAgICAgJCRQV0QvY3NzL21lZGlhQ29u
dHJvbHNRdC5jc3MgXAogICAgICQkUFdEL2Nzcy90aGVtZVF0Tm9MaXN0Ym94ZXMuY3NzIFwKICAg
ICAkJFBXRC9jc3MvdGhlbWVRdE1vYmlsZS5jc3MKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDllOTA0NDcuLjcwNWI2YzUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAt
MjU3NCw4ICsyNTc0LDEyIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKIAogICAgICAgICAhbGVz
c1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNik6Y29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBtdWx0
aW1lZGlhKSB7Ci0gICAgICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgKLSAgICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgICAgICBIRUFERVJTICs9
IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5oIFwKKyAgICAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnVsbFNjcmVlblZpZGVvUXQuaAorICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwIFwK
KyAgICAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNj
cmVlblZpZGVvUXQuY3BwCiAKICAgICAgICAgICAgIENPTkZJRyAqPSBtb2JpbGl0eQogICAgICAg
ICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvdGhl
bWVRdE1vYmlsZS5jc3MgYi9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNzcwppbmRleCA4YjBj
NTQ4Li4zMWQ1MDMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNzcwor
KysgYi9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNzcwpAQCAtMTEzLDMgKzExMyw4IEBAIGlu
cHV0W3R5cGU9InVybCJdOmFjdGl2ZSwKIHRleHRhcmVhOmFjdGl2ZSB7CiAgICAgYmFja2dyb3Vu
ZDogQnV0dG9uU2hhZG93OwogfQorCit2aWRlbyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzAw
MDAwMDsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGQ3ZDAyMjcuLjBiOTM0MzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAg
LTQwNyw2ICs0MDcsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBL
VVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAjZW5kaWYKICAgICAsIG1fd2Vh
a1JlZmVyZW5jZShEb2N1bWVudFdlYWtSZWZlcmVuY2U6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1f
aWRBdHRyaWJ1dGVOYW1lKGlkQXR0cikKKyAgICAsIG1fbG9hZEV2ZW50RGVsYXlDb3VudCgwKQog
ewogICAgIG1fZG9jdW1lbnQgPSB0aGlzOwogCkBAIC01MTA3LDQgKzUxMDgsMTMgQEAgSW5zcGVj
dG9yQ29udHJvbGxlciogRG9jdW1lbnQ6Omluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdAogfQog
I2VuZGlmCiAKK3ZvaWQgRG9jdW1lbnQ6OmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKSAg
Cit7ICAKKyAgICBBU1NFUlQobV9sb2FkRXZlbnREZWxheUNvdW50KTsgIAorICAgIC0tbV9sb2Fk
RXZlbnREZWxheUNvdW50OyAgCisKKyAgICBpZiAoZnJhbWUoKSAmJiAhbV9sb2FkRXZlbnREZWxh
eUNvdW50KSAgCisgICAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7ICAK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMGI1NTYxMS4uZWI0MmNlNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0xMDI1LDYgKzEwMjUsMTEgQEAgcHVibGljOgogCiAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9pZEF0dHJpYnV0ZU5h
bWU7IH0KIAorICAgIC8vIFVzZWQgdG8gYWxsb3cgZWxlbWVudCB0aGF0IGxvYWRzIGRhdGEgd2l0
aG91dCBnb2luZyB0aHJvdWdoIGEgRnJhbWVMb2FkZXIgdG8gZGVsYXkgdGhlICdsb2FkJyBldmVu
dC4KKyAgICB2b2lkIGluY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKSB7ICsrbV9sb2FkRXZl
bnREZWxheUNvdW50OyB9CisgICAgdm9pZCBkZWNyZW1lbnRMb2FkRXZlbnREZWxheUNvdW50KCk7
CisgICAgYm9vbCBpc0RlbGF5aW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sb2FkRXZl
bnREZWxheUNvdW50OyB9CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0
IEtVUkwmLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MKTsKIApAQCAtMTMwNiw2ICsxMzExLDgg
QEAgcHJpdmF0ZToKIAogICAgIFF1YWxpZmllZE5hbWUgbV9pZEF0dHJpYnV0ZU5hbWU7CiAKKyAg
ICBpbnQgbV9sb2FkRXZlbnREZWxheUNvdW50OworCiAgICAgVmlld3BvcnRBcmd1bWVudHMgbV92
aWV3cG9ydEFyZ3VtZW50czsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBm
NzVhOTkwLi45MTVkYWI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yOSwxNCAr
MjksMTQgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRy
aWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NIZWxwZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKICNp
bmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisjaW5j
bHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTQ5LDEyICs0OSwxMiBAQAog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTb3VyY2VFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKICNpbmNsdWRlICJNZWRpYURvY3VtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFFcnJvci5oIgog
I2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVk
ZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCkBAIC04MSw4ICs4MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDog
SFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisg
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIEFjdGl2ZURPTU9iamVj
dChkb2N1bWVudCwgdGhpcykKICAgICAsIG1fbG9hZFRpbWVyKHRoaXMsICZIVE1MTWVkaWFFbGVt
ZW50Ojpsb2FkVGltZXJGaXJlZCkKICAgICAsIG1fYXN5bmNFdmVudFRpbWVyKHRoaXMsICZIVE1M
TWVkaWFFbGVtZW50Ojphc3luY0V2ZW50VGltZXJGaXJlZCkKICAgICAsIG1fcHJvZ3Jlc3NFdmVu
dFRpbWVyKHRoaXMsICZIVE1MTWVkaWFFbGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCkK
QEAgLTEwOCwxMSArMTA5LDExIEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICNlbmRpZgogICAg
ICwgbV9yZXN0cmljdGlvbnMoTm9SZXN0cmljdGlvbnMpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQ
bGF5ZXI6OkF1dG8pCi0gICAgLCBtX3BsYXlpbmcoZmFsc2UpCisgICAgLCBtX2Rpc3BsYXlNb2Rl
KFVua25vd24pCiAgICAgLCBtX3Byb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKDApCisgICAg
LCBtX3BsYXlpbmcoZmFsc2UpCiAgICAgLCBtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydChm
YWxzZSkKLSAgICAsIG1fcHJvY2Vzc2luZ0xvYWQoZmFsc2UpCi0gICAgLCBtX2RlbGF5aW5nVGhl
TG9hZEV2ZW50KGZhbHNlKQorICAgICwgbV9zaG91bGREZWxheUxvYWRFdmVudChmYWxzZSkKICAg
ICAsIG1faGF2ZUZpcmVkTG9hZGVkRGF0YShmYWxzZSkKICAgICAsIG1faW5BY3RpdmVEb2N1bWVu
dCh0cnVlKQogICAgICwgbV9hdXRvcGxheWluZyh0cnVlKQpAQCAtMTMyLDE0ICsxMzMsMTUgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgICwgbV9sb2FkSW5pdGlhdGVkQnlVc2VyR2VzdHVy
ZShmYWxzZSkKICAgICAsIG1fY29tcGxldGVseUxvYWRlZChmYWxzZSkKIHsKLSAgICBkb2N1bWVu
dCgpLT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICBk
b2N1bWVudCgpLT5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKHRoaXMpOworICAgIGRv
Y3VtZW50LT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICBkb2N1bWVudC0+cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKIH0KIAog
SFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQoKQogewogICAgIGlmIChtX2lzV2Fp
dGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNl
KTsKICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJh
Y2tzKHRoaXMpOwogICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxi
YWNrcyh0aGlzKTsKIH0KQEAgLTE0OCw2ICsxNTAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRp
bE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcih0aGlzKTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlz
KTsKICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhp
cyk7CiAgICAgSFRNTEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CkBAIC0x
NTcsNiArMTYwLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCkKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAg
ICAgIGRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICBpZiAo
bV9yZWFkeVN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEpCisgICAgICAgIHNldFNob3VsZERlbGF5
TG9hZEV2ZW50KHRydWUpOwogICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3Rp
dmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwogICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yTWVkaWFW
b2x1bWVDYWxsYmFja3ModGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKQEAgLTMwNCw3ICszMDksNyBAQCBSZW5kZXJPYmplY3QqIEhUTUxNZWRpYUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRN
TEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgaWYgKCFzcmMoKS5pc0VtcHR5
KCkgJiYgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSkKKyAgICBpZiAoIWdldEF0dHJp
YnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkgJiYgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBU
WSkKICAgICAgICAgc2NoZWR1bGVMb2FkKCk7CiB9CiAKQEAgLTQzOCwxMSArNDQzLDYgQEAgUGFz
c1JlZlB0cjxNZWRpYUVycm9yPiBIVE1MTWVkaWFFbGVtZW50OjplcnJvcigpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZXJyb3I7CiB9CiAKLUtVUkwgSFRNTE1lZGlhRWxlbWVudDo6c3JjKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0cik7Ci19Ci0KIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIHNl
dEF0dHJpYnV0ZShzcmNBdHRyLCB1cmwpOwpAQCAtNDk5LDYgKzQ5OSw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQoKQogICAgIG1fc2VudFN0YWxsZWRFdmVudCA9IGZh
bHNlOwogICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IGZhbHNlOwogICAgIG1fY29tcGxldGVs
eUxvYWRlZCA9IGZhbHNlOworICAgIG1fZGlzcGxheU1vZGUgPSBVbmtub3duOwogCiAgICAgLy8g
MSAtIEFib3J0IGFueSBhbHJlYWR5LXJ1bm5pbmcgaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIHNl
bGVjdGlvbiBhbGdvcml0aG0gZm9yIHRoaXMgZWxlbWVudC4KICAgICBtX2N1cnJlbnRTb3VyY2VO
b2RlID0gMDsKQEAgLTUxNSw3ICs1MTYsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwcmVw
YXJlRm9yTG9hZCgpCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIG1f
cGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKICNlbHNlCi0gICAgY3JlYXRlTWVk
aWFQbGF5ZXJQcm94eSgpOworICAgIGlmIChtX3BsYXllcikKKyAgICAgICAgbV9wbGF5ZXItPmNh
bmNlbExvYWQoKTsKKyAgICBlbHNlCisgICAgICAgIGNyZWF0ZU1lZGlhUGxheWVyUHJveHkoKTsK
ICNlbmRpZgogCiAgICAgLy8gNCAtIElmIHRoZSBtZWRpYSBlbGVtZW50J3MgbmV0d29ya1N0YXRl
IGlzIG5vdCBzZXQgdG8gTkVUV09SS19FTVBUWSwgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHMKQEAg
LTUzNSwxMCArNTM5LDI1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQo
KQogICAgIG1fZXJyb3IgPSAwOwogICAgIG1fYXV0b3BsYXlpbmcgPSB0cnVlOwogCisgICAgLy8g
NyAtIEludm9rZSB0aGUgbWVkaWEgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0
aG0uCisKKyAgICAvLyA4IC0gTm90ZTogUGxheWJhY2sgb2YgYW55IHByZXZpb3VzbHkgcGxheWlu
ZyBtZWRpYSByZXNvdXJjZSBmb3IgdGhpcyBlbGVtZW50IHN0b3BzLgorCisgICAgLy8gVGhlIHJl
c291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0KKyAgICAvLyAxIC0gU2V0IHRoZSBuZXR3b3JrU3Rh
dGUgdG8gTkVUV09SS19OT19TT1VSQ0UKKyAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9f
U09VUkNFOworCisgICAgLy8gMiAtIEFzeW5jaHJvbm91c2x5IGF3YWl0IGEgc3RhYmxlIHN0YXRl
LgorCiAgICAgbV9wbGF5ZWRUaW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CiAgICAg
bV9sYXN0U2Vla1RpbWUgPSAwOwogICAgIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlID0gZmFsc2U7
CiAKKworICAgIC8vIFRoZSBzcGVjIGRvZXNuJ3Qgc2F5IHRvIGJsb2NrIHRoZSBsb2FkIGV2ZW50
IHVudGlsIHdlIGFjdHVhbGx5IHJ1biB0aGUgYXN5bmNocm9ub3VzIHNlY3Rpb24KKyAgICAvLyBh
bGdvcml0aG0sIGJ1dCBkbyBpdCBub3cgYmVjYXVzZSB3ZSB3b24ndCBzdGFydCB0aGF0IHVudGls
IGFmdGVyIHRoZSB0aW1lciBmaXJlcyBhbmQgdGhlIAorICAgIC8vIGV2ZW50IG1heSBoYXZlIGFs
cmVhZHkgZmlyZWQgYnkgdGhlbi4KKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudCh0cnVlKTsK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkSW50ZXJuYWwoKQpAQCAtNTUzLDExICs1
NzIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBTdGVwcyAxIC0gNiB3ZXJlIGRvbmUgaW4gcHJlcGFyZUZv
ckxvYWQKLQotICAgIC8vIDcgLSBJbnZva2UgdGhlIG1lZGlhIGVsZW1lbnQncyByZXNvdXJjZSBz
ZWxlY3Rpb24gYWxnb3JpdGhtLgogICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKLSAgICBtX3By
b2Nlc3NpbmdMb2FkID0gZmFsc2U7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0
TWVkaWFSZXNvdXJjZSgpCkBAIC01NjUsMTEgKzU4MCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAgICAgZW51bSBNb2RlIHsgYXR0cmlidXRlLCBjaGls
ZHJlbiB9OwogICAgIE1vZGUgbW9kZSA9IGF0dHJpYnV0ZTsKIAotICAgIC8vIDEgLSBTZXQgdGhl
IG5ldHdvcmtTdGF0ZSB0byBORVRXT1JLX05PX1NPVVJDRQotICAgIG1fbmV0d29ya1N0YXRlID0g
TkVUV09SS19OT19TT1VSQ0U7Ci0KLSAgICAvLyAyIC0gQXN5bmNocm9ub3VzbHkgYXdhaXQgYSBz
dGFibGUgc3RhdGUuCi0KICAgICAvLyAzIC0gLi4uIHRoZSBtZWRpYSBlbGVtZW50IGhhcyBuZWl0
aGVyIGEgc3JjIGF0dHJpYnV0ZSAuLi4KICAgICBpZiAoIWhhc0F0dHJpYnV0ZShzcmNBdHRyKSkg
ewogICAgICAgICAvLyAuLi4gbm9yIGEgc291cmNlIGVsZW1lbnQgY2hpbGQ6IC4uLgpAQCAtNTgx
LDE4ICs1OTEsMTkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNl
KCkKIAogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgIG1fbG9hZFN0YXRlID0gV2Fp
dGluZ0ZvclNvdXJjZTsKKyAgICAgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNl
KTsKIAogICAgICAgICAgICAgLy8gLi4uIHNldCB0aGUgbmV0d29ya1N0YXRlIHRvIE5FVFdPUktf
RU1QVFksIGFuZCBhYm9ydCB0aGVzZSBzdGVwcwogICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBORVRXT1JLX0VNUFRZOwotICAgICAgICAgICAgQVNTRVJUKCFtX2RlbGF5aW5nVGhlTG9hZEV2
ZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1vZGUgPSBj
aGlsZHJlbjsKICAgICB9CiAKLSAgICAvLyA0Ci0gICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9
IHRydWU7CisgICAgLy8gNCAtIFNldCB0aGUgbWVkaWEgZWxlbWVudCdzIGRlbGF5aW5nLXRoZS1s
b2FkLWV2ZW50IGZsYWcgdG8gdHJ1ZSAodGhpcyBkZWxheXMgdGhlIGxvYWQgZXZlbnQpLCAKKyAg
ICAvLyBhbmQgc2V0IGl0cyBuZXR3b3JrU3RhdGUgdG8gTkVUV09SS19MT0FESU5HLgorICAgIHNl
dFNob3VsZERlbGF5TG9hZEV2ZW50KHRydWUpOwogICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09S
S19MT0FESU5HOwogCiAgICAgLy8gNQpAQCAtNjcwLDExICs2ODEsOSBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBLVVJMJiBpbml0aWFsVVJMLCBDb250ZW50VHlw
ZSYgY29udGVudAogCiAgICAgbV9wbGF5ZXItPmxvYWQobV9jdXJyZW50U3JjLCBjb250ZW50VHlw
ZSk7CiAKLSAgICBpZiAoaXNWaWRlbygpICYmIG1fcGxheWVyLT5jYW5Mb2FkUG9zdGVyKCkpIHsK
LSAgICAgICAgS1VSTCBwb3N0ZXJVcmwgPSBwb3N0ZXIoKTsKLSAgICAgICAgaWYgKCFwb3N0ZXJV
cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9wbGF5ZXItPnNldFBvc3Rlcihwb3N0ZXJVcmwp
OwotICAgIH0KKyAgICAvLyBJZiB0aGVyZSBpcyBubyBwb3N0ZXIgdG8gZGlzcGxheSwgYWxsb3cg
dGhlIG1lZGlhIGVuZ2luZSB0byByZW5kZXIgdmlkZW8gZnJhbWVzIGFzIHNvb24gYXMKKyAgICAv
LyB0aGV5IGFyZSBhdmFpbGFibGUuCisgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAKICAgICBp
ZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
QEAgLTcxOCw3ICs3MjcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndhaXRGb3JTb3VyY2VD
aGFuZ2UoKQogICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7CiAKICAgICAv
LyA2LjE4IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxhZyB0
byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KLSAgICBtX2RlbGF5
aW5nVGhlTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFs
c2UpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om5vbmVTdXBwb3J0ZWQoKQpAQCAtNzQx
LDExICs3NTAsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpub25lU3VwcG9ydGVkKCkKICAg
ICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIAogICAgIC8vIDggLSBT
ZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBU
aGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2Fk
RXZlbnQgPSBmYWxzZTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAg
ICAvLyA5IC1BYm9ydCB0aGVzZSBzdGVwcy4gVW50aWwgdGhlIGxvYWQoKSBtZXRob2QgaXMgaW52
b2tlZCwgdGhlIGVsZW1lbnQgd29uJ3QgYXR0ZW1wdCB0byBsb2FkIGFub3RoZXIgcmVzb3VyY2Uu
CiAKLSAgICB1cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVt
ZW50KCk7CkBAIC03NjEsOCArNzcwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUVu
Z2luZUVycm9yKFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gZXJyKQogICAgIC8vIHNldCB0byBNRURJ
QV9FUlJfTkVUV09SSy9NRURJQV9FUlJfREVDT0RFLgogICAgIG1fZXJyb3IgPSBlcnI7CiAKLSAg
ICAvLyAzIC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJy
b3IgYXQgdGhlIG1lZGlhIGVsZW1lbnQsIGluCi0gICAgLy8gdGhlIGNvbnRleHQgb2YgdGhlIGZl
dGNoaW5nIHByb2Nlc3Mgc3RhcnRlZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoaXMgYWxnb3JpdGht
LgorICAgIC8vIDMgLSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBl
cnJvciBhdCB0aGUgbWVkaWEgZWxlbWVudC4KICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50KTsKIAogICAgIC8vIDQgLSBTZXQgdGhlIGVsZW1lbnQncyBuZXR3b3JrU3Rh
dGUgYXR0cmlidXRlIHRvIHRoZSBORVRXT1JLX0VNUFRZIHZhbHVlIGFuZCBxdWV1ZSBhCkBAIC03
NzEsNyArNzc5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUVuZ2luZUVycm9yKFBh
c3NSZWZQdHI8TWVkaWFFcnJvcj4gZXJyKQogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygp
LmVtcHRpZWRFdmVudCk7CiAKICAgICAvLyA1IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmct
dGhlLWxvYWQtZXZlbnQgZmxhZyB0byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9h
ZCBldmVudC4KLSAgICBtX2RlbGF5aW5nVGhlTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgc2V0U2hv
dWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCiAgICAgLy8gNiAtIEFib3J0IHRoZSBvdmVyYWxs
IHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAgbV9jdXJyZW50U291cmNlTm9kZSA9
IDA7CkBAIC04MzQsNyArODQyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgZWxzZSBpZiAo
c3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yICYmIG1fbG9hZFN0YXRlID09IExvYWRp
bmdGcm9tU3JjQXR0cikKICAgICAgICAgICAgIG5vbmVTdXBwb3J0ZWQoKTsKIAotICAgICAgICB1
cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgICAgICB1cGRhdGVEaXNwbGF5U3RhdGUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtODkyLDIyICs5MDAsMTcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9zZWVraW5nKSB7Ci0gICAgICAgIC8vIDQuOC4xMC4x
MCwgc3RlcCA4CisgICAgICAgIC8vIDQuOC4xMC45LCBzdGVwIDExCiAgICAgICAgIGlmICh3YXNQ
b3RlbnRpYWxseVBsYXlpbmcgJiYgbV9yZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVfREFUQSkKICAg
ICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndhaXRpbmdFdmVudCk7CiAKLSAg
ICAgICAgLy8gNC44LjEwLjEwLCBzdGVwIDkKLSAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IEhB
VkVfQ1VSUkVOVF9EQVRBKSB7Ci0gICAgICAgICAgICBpZiAob2xkU3RhdGUgPj0gSEFWRV9DVVJS
RU5UX0RBVEEpCi0gICAgICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuc2Vl
a2luZ0V2ZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDQuOC4xMC4xMCBz
dGVwIDEyICYgMTMuCisgICAgICAgIC8vIDQuOC4xMC4xMCBzdGVwIDE0ICYgMTUuCisgICAgICAg
IGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEpCiAgICAgICAgICAgICBmaW5p
c2hTZWVrKCk7Ci0gICAgICAgIH0KIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICh3YXNQb3Rl
bnRpYWxseVBsYXlpbmcgJiYgbV9yZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVfREFUQSkgewotICAg
ICAgICAgICAgLy8gNC44LjEwLjkKKyAgICAgICAgICAgIC8vIDQuOC4xMC44CiAgICAgICAgICAg
ICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CiAgICAgICAgICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS53YWl0aW5nRXZlbnQpOwogICAgICAgICB9CkBAIC05MTcsMjYgKzky
MCwxOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmR1
cmF0aW9uY2hhbmdlRXZlbnQpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5s
b2FkZWRtZXRhZGF0YUV2ZW50KTsKIAotI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURF
TykKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNWaWRlbygpKSB7Ci0g
ICAgICAgICAgICB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7
Ci0gICAgICAgIH0KLSNlbmRpZiAgICAgICAgCi0gICAgICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZl
bnQgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKICAg
ICB9CiAKLSAgICBib29sIHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gZmFsc2U7CisgICAgYm9v
bCBzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUgPSBmYWxzZTsKIAotICAgIC8vIDQuOC4xMC43IHNh
eXMgbG9hZGVkZGF0YSBpcyBzZW50IG9ubHkgd2hlbiB0aGUgbmV3IHN0YXRlICppcyogSEFWRV9D
VVJSRU5UX0RBVEE6ICJJZiB0aGUKLSAgICAvLyBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMgSEFW
RV9NRVRBREFUQSBhbmQgdGhlIG5ldyByZWFkeSBzdGF0ZSBpcyBIQVZFX0NVUlJFTlRfREFUQSIs
IAotICAgIC8vIGJ1dCB0aGUgZXZlbnQgdGFibGUgYXQgdGhlIGVuZCBvZiB0aGUgc3BlYyBzYXlz
IGl0IGlzIHNlbnQgd2hlbjogInJlYWR5U3RhdGUgbmV3bHkgCi0gICAgLy8gaW5jcmVhc2VkIHRv
IEhBVkVfQ1VSUkVOVF9EQVRBICBvciBncmVhdGVyIGZvciB0aGUgZmlyc3QgdGltZSIKLSAgICAv
LyBXZSBnbyB3aXRoIHRoZSBsYXRlciBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCB0byBjb3VudCBv
biBnZXR0aW5nIHRoaXMgZXZlbnQKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVO
VF9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEgJiYgIW1faGF2ZUZpcmVkTG9h
ZGVkRGF0YSkgewogICAgICAgICBtX2hhdmVGaXJlZExvYWRlZERhdGEgPSB0cnVlOwotICAgICAg
ICBzaG91bGRVcGRhdGVQb3N0ZXJJbWFnZSA9IHRydWU7CisgICAgICAgIHNob3VsZFVwZGF0ZURp
c3BsYXlTdGF0ZSA9IHRydWU7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxv
YWRlZGRhdGFFdmVudCk7CisgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsK
ICAgICB9CiAKICAgICBib29sIGlzUG90ZW50aWFsbHlQbGF5aW5nID0gcG90ZW50aWFsbHlQbGF5
aW5nKCk7CkBAIC05NDQsNyArOTM5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFk
eVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS5jYW5wbGF5RXZlbnQpOwogICAgICAgICBpZiAoaXNQb3RlbnRpYWxs
eVBsYXlpbmcpCiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5aW5n
RXZlbnQpOwotICAgICAgICBzaG91bGRVcGRhdGVQb3N0ZXJJbWFnZSA9IHRydWU7CisgICAgICAg
IHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1fcmVh
ZHlTdGF0ZSA9PSBIQVZFX0VOT1VHSF9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9FTk9VR0hfREFU
QSkgewpAQCAtOTYyLDExICs5NTcsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFk
eVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICAgICAgc2NoZWR1
bGVFdmVudChldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KTsKICAgICAgICAgfQogCi0gICAgICAg
IHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gdHJ1ZTsKKyAgICAgICAgc2hvdWxkVXBkYXRlRGlz
cGxheVN0YXRlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlUG9zdGVySW1h
Z2UpCi0gICAgICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CisgICAgaWYgKHNob3VsZFVwZGF0ZURp
c3BsYXlTdGF0ZSkKKyAgICAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAKICAgICB1cGRhdGVQ
bGF5U3RhdGUoKTsKIH0KQEAgLTEwMzMsMjcgKzEwMjgsMzggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWVrKGZsb2F0IHRpbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIC8vIEdldCB0aGUg
Y3VycmVudCB0aW1lIGJlZm9yZSBzZXR0aW5nIG1fc2Vla2luZywgbV9sYXN0U2Vla1RpbWUgaXMg
cmV0dXJuZWQgb25jZSBpdCBpcyBzZXQuCiAgICAgZmxvYXQgbm93ID0gY3VycmVudFRpbWUoKTsK
IAorICAgIC8vIDIgLSBJZiB0aGUgZWxlbWVudCdzIHNlZWtpbmcgSURMIGF0dHJpYnV0ZSBpcyB0
cnVlLCB0aGVuIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhpcyBhbGdvcml0aG0gaXMKKyAgICAvLyBh
bHJlYWR5IHJ1bm5pbmcuIEFib3J0IHRoYXQgb3RoZXIgaW5zdGFuY2Ugb2YgdGhlIGFsZ29yaXRo
bSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBzdGVwIHRoYXQKKyAgICAvLyBpdCBpcyBydW5uaW5n
IHRvIGNvbXBsZXRlLgorICAgIC8vIE5vdGhpbmcgc3BlY2lmaWMgdG8gYmUgZG9uZSBoZXJlLgor
CiAgICAgLy8gMyAtIFNldCB0aGUgc2Vla2luZyBJREwgYXR0cmlidXRlIHRvIHRydWUuCi0gICAg
Ly8gVGhlIGZsYWcgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIGVuZ2luZSB0ZWxscyBpcyB0aGUg
dGltZSBoYXMgYWN0dWFsbHkgY2hhbmdlZAorICAgIC8vIFRoZSBmbGFnIHdpbGwgYmUgY2xlYXJl
ZCB3aGVuIHRoZSBlbmdpbmUgdGVsbHMgdXMgdGhlIHRpbWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQu
CiAgICAgbV9zZWVraW5nID0gdHJ1ZTsKIAotICAgIC8vIDQgLSBRdWV1ZSBhIHRhc2sgdG8gZmly
ZSBhIHNpbXBsZSBldmVudCBuYW1lZCB0aW1ldXBkYXRlIGF0IHRoZSBlbGVtZW50LgotICAgIHNj
aGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsKLQotICAgIC8vIDYgLSBJZiB0aGUgbmV3IHBs
YXliYWNrIHBvc2l0aW9uIGlzIGxhdGVyIHRoYW4gdGhlIGVuZCBvZiB0aGUgbWVkaWEgcmVzb3Vy
Y2UsIHRoZW4gbGV0IGl0IGJlIHRoZSBlbmQgCisgICAgLy8gNSAtIElmIHRoZSBuZXcgcGxheWJh
Y2sgcG9zaXRpb24gaXMgbGF0ZXIgdGhhbiB0aGUgZW5kIG9mIHRoZSBtZWRpYSByZXNvdXJjZSwg
dGhlbiBsZXQgaXQgYmUgdGhlIGVuZCAKICAgICAvLyBvZiB0aGUgbWVkaWEgcmVzb3VyY2UgaW5z
dGVhZC4KICAgICB0aW1lID0gbWluKHRpbWUsIGR1cmF0aW9uKCkpOwogCi0gICAgLy8gNyAtIElm
IHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gaXMgbGVzcyB0aGFuIHRoZSBlYXJsaWVzdCBwb3Nz
aWJsZSBwb3NpdGlvbiwgbGV0IGl0IGJlIHRoYXQgcG9zaXRpb24gaW5zdGVhZC4KKyAgICAvLyA2
IC0gSWYgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gdGhlIGVhcmxpZXN0
IHBvc3NpYmxlIHBvc2l0aW9uLCBsZXQgaXQgYmUgdGhhdCBwb3NpdGlvbiBpbnN0ZWFkLgogICAg
IGZsb2F0IGVhcmxpZXN0VGltZSA9IG1fcGxheWVyLT5zdGFydFRpbWUoKTsKICAgICB0aW1lID0g
bWF4KHRpbWUsIGVhcmxpZXN0VGltZSk7CiAKLSAgICAvLyA4IC0gSWYgdGhlIChwb3NzaWJseSBu
b3cgY2hhbmdlZCkgbmV3IHBsYXliYWNrIHBvc2l0aW9uIGlzIG5vdCBpbiBvbmUgb2YgdGhlIHJh
bmdlcyBnaXZlbiBpbiB0aGUgCisgICAgLy8gNyAtIElmIHRoZSAocG9zc2libHkgbm93IGNoYW5n
ZWQpIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBub3QgaW4gb25lIG9mIHRoZSByYW5nZXMgZ2l2
ZW4gaW4gdGhlIAogICAgIC8vIHNlZWthYmxlIGF0dHJpYnV0ZSwgdGhlbiBsZXQgaXQgYmUgdGhl
IHBvc2l0aW9uIGluIG9uZSBvZiB0aGUgcmFuZ2VzIGdpdmVuIGluIHRoZSBzZWVrYWJsZSBhdHRy
aWJ1dGUgCiAgICAgLy8gdGhhdCBpcyB0aGUgbmVhcmVzdCB0byB0aGUgbmV3IHBsYXliYWNrIHBv
c2l0aW9uLiAuLi4gSWYgdGhlcmUgYXJlIG5vIHJhbmdlcyBnaXZlbiBpbiB0aGUgc2Vla2FibGUK
ICAgICAvLyBhdHRyaWJ1dGUgdGhlbiBzZXQgdGhlIHNlZWtpbmcgSURMIGF0dHJpYnV0ZSB0byBm
YWxzZSBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHNlZWth
YmxlUmFuZ2VzID0gc2Vla2FibGUoKTsKLSAgICBpZiAoIXNlZWthYmxlUmFuZ2VzLT5sZW5ndGgo
KSB8fCB0aW1lID09IG5vdykgeworICAgIC8vIFNob3J0IGNpcmN1aXQgc2Vla2luZyB0byB0aGUg
Y3VycmVudCB0aW1lIGJ5IGp1c3QgZmlyaW5nIHRoZSBldmVudHMgaWYgbm8gc2VlayBpcyByZXF1
aXJlZC4KKyAgICAvLyBEb24ndCBza2lwIGNhbGxpbmcgdGhlIG1lZGlhIGVuZ2luZSBpZiB3ZSBh
cmUgaW4gcG9zdGVyIG1vZGUgYmVjYXVzZSBhIHNlZWsgc2hvdWxkIGFsd2F5cyAKKyAgICAvLyBj
YW5jZWwgcG9zdGVyIGRpc3BsYXkuCisgICAgYm9vbCBub1NlZWtSZXF1aXJlZCA9ICFzZWVrYWJs
ZVJhbmdlcy0+bGVuZ3RoKCkgfHwgKHRpbWUgPT0gbm93ICYmIGRpc3BsYXlNb2RlKCkgIT0gUG9z
dGVyKTsKKyAgICBpZiAobm9TZWVrUmVxdWlyZWQpIHsKKyAgICAgICAgaWYgKHRpbWUgPT0gbm93
KSB7CisgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zZWVraW5nRXZlbnQp
OworICAgICAgICAgICAgc2NoZWR1bGVUaW1ldXBkYXRlRXZlbnQoZmFsc2UpOworICAgICAgICAg
ICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuc2Vla2VkRXZlbnQpOworICAgICAgICB9CiAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA2
NiwyMCArMTA3MiwyOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWsoZmxvYXQgdGltZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV9sYXN0U2Vla1RpbWUgPSB0aW1lOwogICAgIG1fc2Vu
dEVuZEV2ZW50ID0gZmFsc2U7CiAKLSAgICAvLyA5IC0gU2V0IHRoZSBjdXJyZW50IHBsYXliYWNr
IHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBuZXcgcGxheWJhY2sgcG9zaXRpb24KKyAgICAvLyA4IC0g
U2V0IHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBuZXcgcGxheWJh
Y2sgcG9zaXRpb24KICAgICBtX3BsYXllci0+c2Vlayh0aW1lKTsKIAotICAgIC8vIDEwLTE1IGFy
ZSBoYW5kbGVkLCBpZiBuZWNlc3NhcnksIHdoZW4gdGhlIGVuZ2luZSBzaWduYWxzIGEgcmVhZHlz
dGF0ZSBjaGFuZ2UuCisgICAgLy8gOSAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHNlZWtpbmcgYXQgdGhlIGVsZW1lbnQuCisgICAgc2NoZWR1bGVFdmVudChldmVu
dE5hbWVzKCkuc2Vla2luZ0V2ZW50KTsKKworICAgIC8vIDEwIC0gUXVldWUgYSB0YXNrIHRvIGZp
cmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgdGltZXVwZGF0ZSBhdCB0aGUgZWxlbWVudC4KKyAgICBz
Y2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CisKKyAgICAvLyAxMS0xNSBhcmUgaGFuZGxl
ZCwgaWYgbmVjZXNzYXJ5LCB3aGVuIHRoZSBlbmdpbmUgc2lnbmFscyBhIHJlYWR5c3RhdGUgY2hh
bmdlLgogCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZmluaXNoU2VlaygpCiB7Ci0gICAg
Ly8gNC44LjEwLjEwIFNlZWtpbmcgc3RlcCAxMgorICAgIC8vIDQuOC4xMC45IFNlZWtpbmcgc3Rl
cCAxNAogICAgIG1fc2Vla2luZyA9IGZhbHNlOwogCi0gICAgLy8gNC44LjEwLjEwIFNlZWtpbmcg
c3RlcCAxMworICAgIC8vIDQuOC4xMC45IFNlZWtpbmcgc3RlcCAxNQogICAgIHNjaGVkdWxlRXZl
bnQoZXZlbnROYW1lcygpLnNlZWtlZEV2ZW50KTsKKworICAgIHNldERpc3BsYXlNb2RlKFZpZGVv
KTsKIH0KIAogSFRNTE1lZGlhRWxlbWVudDo6UmVhZHlTdGF0ZSBIVE1MTWVkaWFFbGVtZW50Ojpy
ZWFkeVN0YXRlKCkgY29uc3QKQEAgLTE1MzgsOCArMTU1Miw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZChNZWRpYVBsYXllciopCiAgICAgLy8gbW92aWUg
dGltZS4KICAgICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CiAKLSAgICAvLyA0Ljgu
MTAuMTAgc3RlcCAxMiAmIDEzLiAgTmVlZGVkIGlmIG5vIFJlYWR5U3RhdGUgY2hhbmdlIGlzIGFz
c29jaWF0ZWQgd2l0aCB0aGUgc2Vlay4KLSAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VS
UkVOVF9EQVRBICYmIG1fc2Vla2luZykKKyAgICAvLyA0LjguMTAuOSBzdGVwIDE0ICYgMTUuICBO
ZWVkZWQgaWYgbm8gUmVhZHlTdGF0ZSBjaGFuZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWVr
LgorICAgIGlmIChtX3NlZWtpbmcgJiYgbV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRB
KQogICAgICAgICBmaW5pc2hTZWVrKCk7CiAgICAgCiAgICAgZmxvYXQgbm93ID0gY3VycmVudFRp
bWUoKTsKQEAgLTE1ODQsMTMgKzE1OTgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyRHVyYXRpb25DaGFuZ2VkKE1lZGlhUGxheWVyKikKIHsKICAgICBiZWdpblByb2Nlc3Np
bmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
ZHVyYXRpb25jaGFuZ2VFdmVudCk7Ci0jaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQotICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpLT5p
c1ZpZGVvKCkpCi0gICAgICAgICAgICB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT52aWRlb1Np
emVDaGFuZ2VkKCk7Ci0gICAgfQotI2VuZGlmICAgICAgICAKICAgICBlbmRQcm9jZXNzaW5nTWVk
aWFQbGF5ZXJDYWxsYmFjaygpOwogfQogCkBAIC0xNjAzLDYgKzE2MTIsMTkgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikKICAgICBl
bmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOwogfQogCit2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQorewor
ICAgIGlmICghbV9wbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGJlZ2luUHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2soKTsKKyAgICBpZiAobV9wbGF5ZXItPnBhdXNlZCgpKQorICAg
ICAgICBwYXVzZUludGVybmFsKCk7CisgICAgZWxzZQorICAgICAgICBwbGF5SW50ZXJuYWwoKTsK
KyAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOworfQorCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2F3VW5zdXBwb3J0ZWRUcmFja3MoTWVkaWFQbGF5ZXIq
KQogewogICAgIC8vIFRoZSBNZWRpYVBsYXllciBjYW1lIGFjcm9zcyBjb250ZW50IGl0IGNhbm5v
dCBjb21wbGV0ZWx5IGhhbmRsZS4KQEAgLTE2MTgsMjAgKzE2NDAsMTggQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllclNhd1Vuc3VwcG9ydGVkVHJhY2tzKE1lZGlhUGxheWVyKikK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZXBhaW50KE1lZGlhUGxheWVyKikK
IHsKICAgICBiZWdpblByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CisgICAgdXBkYXRl
RGlzcGxheVN0YXRlKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKIAotICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CiAgICAgZW5kUHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllclNpemVDaGFuZ2VkKE1lZGlhUGxheWVyKikKIHsKICAgICBiZWdpblByb2Nlc3NpbmdN
ZWRpYVBsYXllckNhbGxiYWNrKCk7Ci0jaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVmlkZW8oKSkKLSAgICAgICAg
dG9SZW5kZXJWaWRlbyhyZW5kZXJlcigpKS0+dmlkZW9TaXplQ2hhbmdlZCgpOwotI2VuZGlmICAg
ICAgICAKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJv
bUVsZW1lbnQoKTsKICAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOwogfQog
CkBAIC0xNzgxLDI0ICsxODAxLDM0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxh
eVN0YXRlKCkKICAgICAKICAgICBib29sIHNob3VsZEJlUGxheWluZyA9IHBvdGVudGlhbGx5UGxh
eWluZygpOwogICAgIGJvb2wgcGxheWVyUGF1c2VkID0gbV9wbGF5ZXItPnBhdXNlZCgpOwotICAg
IGlmIChzaG91bGRCZVBsYXlpbmcgJiYgcGxheWVyUGF1c2VkKSB7Ci0gICAgICAgIGlmICghbV9p
c0Z1bGxzY3JlZW4gJiYgaXNWaWRlbygpICYmIGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFn
ZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPnJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKSkKLSAgICAgICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwotICAgICAg
ICAvLyBTZXQgcmF0ZSBiZWZvcmUgY2FsbGluZyBwbGF5IGluIGNhc2UgdGhlIHJhdGUgd2FzIHNl
dCBiZWZvcmUgdGhlIG1lZGlhIGVuZ2luZSB3YXNuJ3Qgc2V0dXAuCi0gICAgICAgIC8vIFRoZSBt
ZWRpYSBlbmdpbmUgc2hvdWxkIGp1c3Qgc3Rhc2ggdGhlIHJhdGUgc2luY2UgaXQgaXNuJ3QgYWxy
ZWFkeSBwbGF5aW5nLgotICAgICAgICBtX3BsYXllci0+c2V0UmF0ZShtX3BsYXliYWNrUmF0ZSk7
Ci0gICAgICAgIG1fcGxheWVyLT5wbGF5KCk7CisgICAgaWYgKHNob3VsZEJlUGxheWluZykgewor
ICAgICAgICBzZXREaXNwbGF5TW9kZShWaWRlbyk7CisgICAgICAgIGlmIChwbGF5ZXJQYXVzZWQp
IHsKKyAgICAgICAgICAgIGlmICghbV9pc0Z1bGxzY3JlZW4gJiYgaXNWaWRlbygpICYmIGRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21l
KCktPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkKKyAgICAgICAgICAgICAg
ICBlbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2V0IHJh
dGUgYmVmb3JlIGNhbGxpbmcgcGxheSBpbiBjYXNlIHRoZSByYXRlIHdhcyBzZXQgYmVmb3JlIHRo
ZSBtZWRpYSBlbmdpbmUgd2FzIHNldHVwLgorICAgICAgICAgICAgLy8gVGhlIG1lZGlhIGVuZ2lu
ZSBzaG91bGQganVzdCBzdGFzaCB0aGUgcmF0ZSBzaW5jZSBpdCBpc24ndCBhbHJlYWR5IHBsYXlp
bmcuCisgICAgICAgICAgICBtX3BsYXllci0+c2V0UmF0ZShtX3BsYXliYWNrUmF0ZSk7CisgICAg
ICAgICAgICBtX3BsYXllci0+cGxheSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBz
dGFydFBsYXliYWNrUHJvZ3Jlc3NUaW1lcigpOwogICAgICAgICBtX3BsYXlpbmcgPSB0cnVlOwot
ICAgIH0gZWxzZSBpZiAoIXNob3VsZEJlUGxheWluZyAmJiAhcGxheWVyUGF1c2VkKSB7Ci0gICAg
ICAgIG1fcGxheWVyLT5wYXVzZSgpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoIXBsYXllclBhdXNlZCkKKyAgICAgICAgICAgIG1fcGxheWVyLT5wYXVzZSgpOworCiAgICAg
ICAgIG1fcGxheWJhY2tQcm9ncmVzc1RpbWVyLnN0b3AoKTsKICAgICAgICAgbV9wbGF5aW5nID0g
ZmFsc2U7CiAgICAgICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgICAgICBpZiAo
dGltZSA+IG1fbGFzdFNlZWtUaW1lKQogICAgICAgICAgICAgYWRkUGxheWVkUmFuZ2UobV9sYXN0
U2Vla1RpbWUsIHRpbWUpOwotICAgIH0gZWxzZSBpZiAoY291bGRQbGF5SWZFbm91Z2hEYXRhKCkg
JiYgcGxheWVyUGF1c2VkKQotICAgICAgICBtX3BsYXllci0+cHJlcGFyZVRvUGxheSgpOworICAg
ICAgICAgICAKKyAgICAgICAgaWYgKGNvdWxkUGxheUlmRW5vdWdoRGF0YSgpKQorICAgICAgICAg
ICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKHJlbmRl
cmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CkBAIC0xODI4
LDE3ICsxODU4LDE3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQo
KQogICAgIG1fcGxheWVyLmNsZWFyKCk7CiAjZW5kaWYKICAgICBzdG9wUGVyaW9kaWNUaW1lcnMo
KTsKKyAgICBtX2xvYWRTdGF0ZSA9IFdhaXRpbmdGb3JTb3VyY2U7CiAKICAgICAvLyAyIC0gU2V0
IHRoZSBlcnJvciBhdHRyaWJ1dGUgdG8gYSBuZXcgTWVkaWFFcnJvciBvYmplY3Qgd2hvc2UgY29k
ZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE1FRElBX0VSUl9BQk9SVEVELgogICAgIG1fZXJyb3IgPSBN
ZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQpOwogCi0gICAg
Ly8gMyAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0
IGF0IHRoZSBtZWRpYSBlbGVtZW50LCBpbiB0aGUgY29udGV4dAotICAgIC8vIG9mIHRoZSBmZXRj
aGluZyBwcm9jZXNzIHN0YXJ0ZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiB0aGlzIGFsZ29yaXRobS4K
KyAgICAvLyAzIC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgZXJy
b3IgYXQgdGhlIG1lZGlhIGVsZW1lbnQuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
YWJvcnRFdmVudCk7CiAKLSAgICAvLyA1IC0gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0
YXRlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSBlcXVhbCB0byBIQVZFX05PVEhJTkcsIHNldCB0aGUK
LSAgICAvLyBlbGVtZW50J3MgbmV0d29ya1N0YXRlIGF0dHJpYnV0ZSB0byB0aGUgTkVUV09SS19F
TVBUWSB2YWx1ZSBhbmQgcXVldWUgYSB0YXNrIHRvIGZpcmUgYQotICAgIC8vIHNpbXBsZSBldmVu
dCBjYWxsZWQgZW1wdGllZCBhdCB0aGUgZWxlbWVudC4gT3RoZXJ3aXNlLCBzZXQgc2V0IHRoZSBl
bGVtZW50J3MgbmV0d29ya1N0YXRlCisgICAgLy8gNCAtIElmIHRoZSBtZWRpYSBlbGVtZW50J3Mg
cmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgZXF1YWwgdG8gSEFWRV9OT1RISU5HLCBz
ZXQgdGhlIAorICAgIC8vIGVsZW1lbnQncyBuZXR3b3JrU3RhdGUgYXR0cmlidXRlIHRvIHRoZSBO
RVRXT1JLX0VNUFRZIHZhbHVlIGFuZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIAorICAgIC8vIHNp
bXBsZSBldmVudCBuYW1lZCBlbXB0aWVkIGF0IHRoZSBlbGVtZW50LiBPdGhlcndpc2UsIHNldCB0
aGUgZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSAKICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhlIE5FVFdP
UktfSURMRSB2YWx1ZS4KICAgICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfTk9USElORykgewog
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfRU1QVFk7CkBAIC0xODQ3LDE4ICsxODc3
LDI3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQoKQogICAgIGVs
c2UKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0lETEU7CiAKLSAgICAvLyA2IC0g
U2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxhZyB0byBmYWxzZS4g
VGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KLSAgICBtX2RlbGF5aW5nVGhlTG9h
ZEV2ZW50ID0gZmFsc2U7CisgICAgLy8gNSAtIFNldCB0aGUgZWxlbWVudCdzIGRlbGF5aW5nLXRo
ZS1sb2FkLWV2ZW50IGZsYWcgdG8gZmFsc2UuIFRoaXMgc3RvcHMgZGVsYXlpbmcgdGhlIGxvYWQg
ZXZlbnQuCisgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCi0gICAgLy8gNyAt
IEFib3J0IHRoZSBvdmVyYWxsIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgLy8g
NiAtIEFib3J0IHRoZSBvdmVyYWxsIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAg
bV9jdXJyZW50U291cmNlTm9kZSA9IDA7CiAKICAgICAvLyBSZXNldCBtX3JlYWR5U3RhdGUgc2lu
Y2UgbV9wbGF5ZXIgaXMgZ29uZS4KICAgICBtX3JlYWR5U3RhdGUgPSBIQVZFX05PVEhJTkc7CiB9
CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKQot
eworYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjYW5TdXNwZW5kKCkgY29uc3QgIAoreyAgCisgICAg
cmV0dXJuIHRydWU7ICAgCit9ICAKKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkgIAor
eyAgCisgICAgc3VzcGVuZCgpOyAgCit9ICAKKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdXNw
ZW5kKCkgewogICAgIGlmIChtX2lzRnVsbHNjcmVlbikKICAgICAgICAgZXhpdEZ1bGxzY3JlZW4o
KTsKIApAQCAtMTg3NSw3ICsxOTE0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpkb2N1bWVu
dFdpbGxCZWNvbWVJbmFjdGl2ZSgpCiAgICAgY2FuY2VsUGVuZGluZ0V2ZW50c0FuZENhbGxiYWNr
cygpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQWN0aXZl
KCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKIHsKICAgICBtX2luQWN0aXZlRG9j
dW1lbnQgPSB0cnVlOwogICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKQEAgLTE4OTMsNiAr
MTkzMiwxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQWN0aXZl
KCkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAorYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCAgCit7ICAKKyAgICAv
LyBSZXR1cm4gdHJ1ZSB3aGVuIHdlIGhhdmUgcGVuZGluZyBldmVudHMgc28gd2UgY2FuJ3QgZmly
ZSBldmVudHMgYWZ0ZXIgdGhlIEpTICAgCisgICAgLy8gb2JqZWN0IGdldHMgY29sbGVjdGVkLiAg
CisgICAgcmV0dXJuIG1fcGVuZGluZ0V2ZW50cy5zaXplKCk7ICAKK30gIAorCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkKIHsKICAgICB1cGRhdGVWb2x1bWUo
KTsKQEAgLTE5NjQsMTMgKzIwMTAsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpnZXRQbHVn
aW5Qcm94eVBhcmFtcyhLVVJMJiB1cmwsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcywgVmUKICAgICBG
cmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCkgOiAwOwogCiAgICAg
aWYgKGlzVmlkZW8oKSkgewotICAgICAgICBTdHJpbmcgcG9zdGVyID0gcG9zdGVyKCk7Ci0gICAg
ICAgIGlmICghcG9zdGVyLmlzRW1wdHkoKSAmJiBsb2FkZXIpIHsKLSAgICAgICAgICAgIEtVUkwg
cG9zdGVyVVJMID0gbG9hZGVyLT5jb21wbGV0ZVVSTChwb3N0ZXIpOwotICAgICAgICAgICAgaWYg
KHBvc3RlclVSTC5pc1ZhbGlkKCkgJiYgbG9hZGVyLT53aWxsTG9hZE1lZGlhRWxlbWVudFVSTChw
b3N0ZXJVUkwpKSB7Ci0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKCJfbWVkaWFfZWxlbWVu
dF9wb3N0ZXJfIik7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChwb3N0ZXJVUkwuc3Ry
aW5nKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBLVVJMIHBvc3RlclVSTCA9IGdldE5vbkVt
cHR5VVJMQXR0cmlidXRlKHBvc3RlckF0dHIpOworICAgICAgICBpZiAoIXBvc3RlclVSTC5pc0Vt
cHR5KCkgJiYgbG9hZGVyICYmIGxvYWRlci0+d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwocG9zdGVy
VVJMKSkgeworICAgICAgICAgICAgbmFtZXMuYXBwZW5kKCJfbWVkaWFfZWxlbWVudF9wb3N0ZXJf
Iik7CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHBvc3RlclVSTC5zdHJpbmcoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTIxMDYsNiArMjE0OSwyMCBAQCBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cmlidXRlKSBjb25zdAogICAgIHJldHVy
biBhdHRyaWJ1dGUtPm5hbWUoKSA9PSBzcmNBdHRyOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldFNob3VsZERlbGF5TG9hZEV2ZW50KGJvb2wgc2hvdWxkRGVsYXkpCit7CisgICAgaWYg
KG1fc2hvdWxkRGVsYXlMb2FkRXZlbnQgPT0gc2hvdWxkRGVsYXkpCisgICAgICAgIHJldHVybjsK
KworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNldFNob3VsZERlbGF5TG9hZEV2
ZW50KCVzKSIsIGJvb2xTdHJpbmcoc2hvdWxkRGVsYXkpKTsKKworICAgIG1fc2hvdWxkRGVsYXlM
b2FkRXZlbnQgPSBzaG91bGREZWxheTsKKyAgICBpZiAoc2hvdWxkRGVsYXkpCisgICAgICAgIGRv
Y3VtZW50KCktPmluY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKKyAgICBlbHNlCisgICAg
ICAgIGRvY3VtZW50KCktPmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKK30KKwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1MTYyOWUuLjhmZDhlZGEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShWSURF
TykKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKIApAQCAtNTEsNyArNTIsNyBAQCBjbGFzcyBXaWRnZXQ7CiAvLyBCdXQgaXQgY2Fu
J3QgYmUgdW50aWwgdGhlIENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBp
cyBmaXhlZCBzbyBpdAogLy8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRp
YVBsYXllckNsaWVudCB0byBhbiBIVE1MTWVkaWFFbGVtZW50LgogCi1jbGFzcyBIVE1MTWVkaWFF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJDbGllbnQsIHBy
aXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIsIHByaXZhdGUgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICBNZWRpYVBsYXllciogcGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXIuZ2V0KCk7IH0K
ICAgICAKQEAgLTY0LDcgKzY1LDYgQEAgcHVibGljOgogCiAgICAgLy8gRXZlbnR1YWxseSBvdmVy
bG9hZGVkIGluIEhUTUxWaWRlb0VsZW1lbnQKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07Ci0gICAgdmlydHVhbCBjb25zdCBLVVJM
IHBvc3RlcigpIGNvbnN0IHsgcmV0dXJuIEtVUkwoKTsgfQogCiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzU2F2ZSgpIGNvbnN0OwogICAgIApAQCAtODQsNyArODQsNiBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxNZWRpYUVycm9yPiBlcnJvcigpIGNvbnN0OwogCiAvLyBuZXR3b3JrIHN0YXRl
Ci0gICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsK
ICAgICBTdHJpbmcgY3VycmVudFNyYygpIGNvbnN0OwogCkBAIC0xODAsNiArMTc5LDEwIEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCisgICAgZW51
bSBEaXNwbGF5TW9kZSB7IFVua25vd24sIE5vbmUsIFBvc3RlciwgVmlkZW8gfTsKKyAgICBEaXNw
bGF5TW9kZSBkaXNwbGF5TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheU1vZGU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGlzcGxheU1vZGUoRGlzcGxheU1vZGUgbW9kZSkgeyBtX2Rpc3Bs
YXlNb2RlID0gbW9kZTsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKiBuZXdDaGlsZCk7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7CkBAIC0xOTQsMTAgKzE5NywxNSBA
QCBwcml2YXRlOgogICAgIGZsb2F0IGdldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGZsb2F0IHZhbHVlT25FcnJvcikgY29uc3Q7CiAgICAgdm9pZCBzZXRUaW1lT2Zm
c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBmbG9hdCB2YWx1ZSk7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzdXNwZW5kKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVBvc3RlckltYWdlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZURpc3BsYXlTdGF0ZSgpIHsgfQogICAgIAogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSk7CiAgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSk7CkBAIC0yMTAsNiArMjE4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgbWVkaWFQbGF5ZXJNdXRlQ2hhbmdlZChNZWRpYVBsYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBtZWRpYVBsYXllckR1cmF0aW9uQ2hhbmdlZChNZWRpYVBsYXllciopOwogICAgIHZp
cnR1YWwgdm9pZCBtZWRpYVBsYXllclJhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKik7CisgICAgdmly
dHVhbCB2b2lkIG1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTYXdVbnN1cHBvcnRlZFRyYWNrcyhNZWRpYVBs
YXllciopOwogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclJlcGFpbnQoTWVkaWFQbGF5ZXIq
KTsKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTaXplQ2hhbmdlZChNZWRpYVBsYXllciop
OwpAQCAtMjU2LDYgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXVzZUludGVybmFsKCk7
CiAKICAgICB2b2lkIHByZXBhcmVGb3JMb2FkKCk7CisgICAgdm9pZCBhbGxvd1ZpZGVvUmVuZGVy
aW5nKCk7CiAgICAgCiAgICAgYm9vbCBwcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2sgPiAwOyB9CiAgICAg
dm9pZCBiZWdpblByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCkgeyArK21fcHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2s7IH0KQEAgLTI3Nyw2ICsyODcsOCBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIG1lZGlhQ2FuU3RhcnQoKTsKIAorICAgIHZvaWQgc2V0U2hvdWxkRGVs
YXlMb2FkRXZlbnQoYm9vbCk7CisKICAgICAvLyBSZXN0cmljdGlvbnMgdG8gY2hhbmdlIGRlZmF1
bHQgYmVoYXZpb3JzLiBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgY29tcGlsZSB0aW1lIGNob2ljZSBh
dCB0aGUgbW9tZW50CiAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgbm8gYWNjZXNzb3IgZnVuY3Rp
b25zLgogICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbnMgewpAQCAtMzI4LDE2ICszNDAsMTYg
QEAgcHJpdmF0ZToKICAgICAKICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7CiAK
LSAgICBib29sIG1fcGxheWluZzsKKyAgICBEaXNwbGF5TW9kZSBtX2Rpc3BsYXlNb2RlOwogCiAg
ICAgLy8gQ291bnRlciBpbmNyZW1lbnRlZCB3aGlsZSBwcm9jZXNzaW5nIGEgY2FsbGJhY2sgZnJv
bSB0aGUgbWVkaWEgcGxheWVyLCBzbyB3ZSBjYW4gYXZvaWQKICAgICAvLyBjYWxsaW5nIHRoZSBt
ZWRpYSBlbmdpbmUgcmVjdXJzaXZlbHkuCiAgICAgaW50IG1fcHJvY2Vzc2luZ01lZGlhUGxheWVy
Q2FsbGJhY2s7CiAKLSAgICBib29sIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0OwotCi0g
ICAgYm9vbCBtX3Byb2Nlc3NpbmdMb2FkIDogMTsKLSAgICBib29sIG1fZGVsYXlpbmdUaGVMb2Fk
RXZlbnQgOiAxOworICAgIGJvb2wgbV9wbGF5aW5nIDogMTsKKyAgICBib29sIG1faXNXYWl0aW5n
VW50aWxNZWRpYUNhblN0YXJ0IDogMTsKKyAgICBib29sIG1fc2hvdWxkRGVsYXlMb2FkRXZlbnQg
OiAxOworICAgIGJvb2wgbV9pc1dhaXRpbmdUb0RlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQg
OiAxOwogICAgIGJvb2wgbV9oYXZlRmlyZWRMb2FkZWREYXRhIDogMTsKICAgICBib29sIG1faW5B
Y3RpdmVEb2N1bWVudCA6IDE7CiAgICAgYm9vbCBtX2F1dG9wbGF5aW5nIDogMTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwgYi9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaWRsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAppbmRleCAyYzgz
ZmVkLi45NmM5ODI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTUyLDkgKzUy
LDkgQEAgUGFzc1JlZlB0cjxIVE1MU291cmNlRWxlbWVudD4gSFRNTFNvdXJjZUVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhU
TUxTb3VyY2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgSFRNTFNvdXJj
ZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKK3ZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXAp
OwogICAgIGlmIChwYXJlbnROb2RlKCkgJiYgKHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShhdWRp
b1RhZykgfHwgIHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZSh2aWRlb1RhZykpKSB7CiAgICAgICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+
KHBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmIChtZWRpYS0+bmV0d29ya1N0YXRlKCkgPT0gSFRN
TE1lZGlhRWxlbWVudDo6TkVUV09SS19FTVBUWSkKQEAgLTYyLDExICs2Miw2IEBAIHZvaWQgSFRN
TFNvdXJjZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICB9CiB9CiAKLUtVUkwg
SFRNTFNvdXJjZUVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldE5vbkVtcHR5
VVJMQXR0cmlidXRlKHNyY0F0dHIpOwotfQotCiB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpzZXRT
cmMoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaCBiL1dlYkNvcmUv
aHRtbC9IVE1MU291cmNlRWxlbWVudC5oCmluZGV4IDZjY2E2NGUuLjdkNDlhM2UgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MU291cmNlRWxlbWVudC5oCkBAIC0zNyw3ICszNyw2IEBAIGNsYXNzIEhUTUxTb3VyY2VFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MU291cmNlRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogCi0gICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsK
ICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYp
OyAgICAKQEAgLTUzLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47
IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAKICAgICB2b2lkIGVycm9yRXZlbnRUaW1lckZpcmVk
KFRpbWVyPEhUTUxTb3VyY2VFbGVtZW50PiopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmlkbCBiL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5pZGwK
aW5kZXggZjcyMjlmMS4uNjFkYzRkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxTb3Vy
Y2VFbGVtZW50LmlkbAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaWRsCkBA
IC0yNSw3ICsyNSw3IEBACiAKIG1vZHVsZSBodG1sIHsKIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9
VklERU9dIEhUTUxTb3VyY2VFbGVtZW50IDogSFRNTEVsZW1lbnQgewotICAgIGF0dHJpYnV0ZSBb
UmVmbGVjdCxOb25FbXB0eSxVUkxdIERPTVN0cmluZyBzcmM7CisgICAgYXR0cmlidXRlIFtSZWZs
ZWN0LFVSTF0gRE9NU3RyaW5nIHNyYzsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyBtZWRpYTsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKaW5kZXggYTZmZGI1Zi4uYzk1ZDZlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxW
aWRlb0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApA
QCAtNDcsNyArNDcsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBpbmxpbmUgSFRN
TFZpZGVvRWxlbWVudDo6SFRNTFZpZGVvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBIVE1MTWVkaWFFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQotICAgICwgbV9zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoZmFsc2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUodmlkZW9UYWcpKTsKIH0KQEAgLTc0LDggKzczLDggQEAgdm9p
ZCBIVE1MVmlkZW9FbGVtZW50OjphdHRhY2goKQogICAgIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dGFj
aCgpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIHVwZGF0ZVBv
c3RlckltYWdlKCk7Ci0gICAgaWYgKG1fc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKSB7CisgICAg
dXBkYXRlRGlzcGxheVN0YXRlKCk7CisgICAgaWYgKHNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgp
KSB7CiAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlcikKICAgICAgICAgICAgIG1faW1hZ2VMb2Fk
ZXIuc2V0KG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwogICAgICAgICBtX2ltYWdlTG9hZGVy
LT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtOTEsOSArOTAsOCBAQCB2b2lkIEhUTUxWaWRlb0Vs
ZW1lbnQ6OmRldGFjaCgpCiB7CiAgICAgSFRNTE1lZGlhRWxlbWVudDo6ZGV0YWNoKCk7CiAgICAg
Ci0gICAgaWYgKCFtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSkKLSAgICAgICAgaWYgKG1faW1h
Z2VMb2FkZXIpCi0gICAgICAgICAgICBtX2ltYWdlTG9hZGVyLmNsZWFyKCk7CisgICAgaWYgKCFz
aG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKSAmJiBtX2ltYWdlTG9hZGVyKQorICAgICAgICBtX2lt
YWdlTG9hZGVyLmNsZWFyKCk7CiB9CiAKIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpAQCAtMTAxLDE4ICs5OSwyMSBAQCB2b2lkIEhU
TUxWaWRlb0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKIAogICAgIGlm
IChhdHRyTmFtZSA9PSBwb3N0ZXJBdHRyKSB7Ci0gICAgICAgIG1fcG9zdGVyVVJMID0gZ2V0Tm9u
RW1wdHlVUkxBdHRyaWJ1dGUocG9zdGVyQXR0cik7Ci0gICAgICAgIHVwZGF0ZVBvc3RlckltYWdl
KCk7Ci0gICAgICAgIGlmIChtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSkgeworICAgICAgICAv
LyBGb3JjZSBhIHBvc3RlciByZWNhbGMgYnkgc2V0dGluZyBtX2Rpc3BsYXlNb2RlIHRvIFVua25v
d24gZGlyZWN0bHkgYmVmb3JlIGNhbGxpbmcgdXBkYXRlRGlzcGxheVN0YXRlLgorICAgICAgICBI
VE1MTWVkaWFFbGVtZW50OjpzZXREaXNwbGF5TW9kZShVbmtub3duKTsKKyAgICAgICAgdXBkYXRl
RGlzcGxheVN0YXRlKCk7CiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAg
ICAgICBpZiAoc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkpIHsKICAgICAgICAgICAgIGlmICgh
bV9pbWFnZUxvYWRlcikKLSAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyLnNldChuZXcgSFRN
TEltYWdlTG9hZGVyKHRoaXMpKTsKKyAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gYWRv
cHRQdHIobmV3IEhUTUxJbWFnZUxvYWRlcih0aGlzKSk7CiAgICAgICAgICAgICBtX2ltYWdlTG9h
ZGVyLT51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJvcigpOwotI2Vsc2UKLSAg
ICAgICAgICAgIGlmIChwbGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBwbGF5ZXIoKS0+c2V0UG9z
dGVyKHBvc3RlcigpKTsKLSNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KG1faW1hZ2VMb2FkZXIpCisgICAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVhcigpOwor
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgdG9SZW5kZXJJbWFn
ZShyZW5kZXJlcigpKS0+c2V0Q2FjaGVkSW1hZ2UoMCk7IAogICAgICAgICB9CisjZW5kaWYKICAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0cikKICAgICAgICAgYWRkQ1NTTGVuZ3Ro
KGF0dHIsIENTU1Byb3BlcnR5V2lkdGgsIGF0dHItPnZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IGhlaWdodEF0dHIpCkBAIC0xNzMsMjAgKzE3NCw0MiBAQCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MVmlkZW9FbGVtZW50OjppbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25z
dAogICAgIHJldHVybiBwb3N0ZXJBdHRyOwogfQogCi12b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnVw
ZGF0ZVBvc3RlckltYWdlKCkKK3ZvaWQgSFRNTFZpZGVvRWxlbWVudDo6c2V0RGlzcGxheU1vZGUo
RGlzcGxheU1vZGUgbW9kZSkKIHsKLSNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8p
Ci0gICAgYm9vbCBvbGRTaG91bGRTaG93UG9zdGVySW1hZ2UgPSBtX3Nob3VsZERpc3BsYXlQb3N0
ZXJJbWFnZTsKLSNlbmRpZgorICAgIERpc3BsYXlNb2RlIG9sZE1vZGUgPSBkaXNwbGF5TW9kZSgp
OworICAgIEtVUkwgcG9zdGVyID0gZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUocG9zdGVyQXR0cik7
CisKKyAgICBpZiAoIXBvc3Rlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHBv
c3RlciBwYXRoLCBidXQgb25seSBzaG93IGl0IHVudGlsIHRoZSB1c2VyIHRyaWdnZXJzIGRpc3Bs
YXkgYnkgcGxheWluZyBvciBzZWVraW5nIGFuZCB0aGUKKyAgICAgICAgLy8gbWVkaWEgZW5naW5l
IGhhcyBzb21ldGhpbmcgdG8gZGlzcGxheS4KKyAgICAgICAgaWYgKG1vZGUgPT0gVmlkZW8pIHsK
KyAgICAgICAgICAgIGlmIChvbGRNb2RlICE9IFZpZGVvICYmIHBsYXllcigpKQorICAgICAgICAg
ICAgICAgIHBsYXllcigpLT5wcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgICAgICAgICBpZiAo
IWhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBtb2RlID0gUG9zdGVy
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChvbGRNb2RlICE9IFZpZGVvICYmIHBsYXllcigp
KQorICAgICAgICBwbGF5ZXIoKS0+cHJlcGFyZUZvclJlbmRlcmluZygpOwogCi0gICAgbV9zaG91
bGREaXNwbGF5UG9zdGVySW1hZ2UgPSAhcG9zdGVyKCkuaXNFbXB0eSgpICYmICFoYXNBdmFpbGFi
bGVWaWRlb0ZyYW1lKCk7CisgICAgSFRNTE1lZGlhRWxlbWVudDo6c2V0RGlzcGxheU1vZGUobW9k
ZSk7CisKKyAgICBpZiAocGxheWVyKCkgJiYgcGxheWVyKCktPmNhbkxvYWRQb3N0ZXIoKSkKKyAg
ICAgICAgcGxheWVyKCktPnNldFBvc3Rlcihwb3N0ZXIpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5f
UFJPWFlfRk9SX1ZJREVPKQotICAgIGlmIChyZW5kZXJlcigpICYmIG9sZFNob3VsZFNob3dQb3N0
ZXJJbWFnZSAhPSBtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSkKKyAgICBpZiAocmVuZGVyZXIo
KSAmJiBkaXNwbGF5TW9kZSgpICE9IG9sZE1vZGUpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUZyb21FbGVtZW50KCk7CiAjZW5kaWYKIH0KIAordm9pZCBIVE1MVmlkZW9FbGVtZW50Ojp1cGRh
dGVEaXNwbGF5U3RhdGUoKQoreworICAgIGlmIChnZXROb25FbXB0eVVSTEF0dHJpYnV0ZShwb3N0
ZXJBdHRyKS5pc0VtcHR5KCkpCisgICAgICAgIHNldERpc3BsYXlNb2RlKFZpZGVvKTsKKyAgICBl
bHNlIGlmIChkaXNwbGF5TW9kZSgpIDwgUG9zdGVyKQorICAgICAgICBzZXREaXNwbGF5TW9kZShQ
b3N0ZXIpOworfQorCiB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnBhaW50Q3VycmVudEZyYW1lSW5D
b250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
CiB7CiAgICAgTWVkaWFQbGF5ZXIqIHBsYXllciA9IEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXllcigp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaCBiL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKaW5kZXggYzI3OTYyZi4uYjcxYzJkNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TFZpZGVvRWxlbWVudC5oCkBAIC01NywxMSArNTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgd2Vi
a2l0RW50ZXJGdWxsU2NyZWVuKGJvb2wgaXNVc2VyR2VzdHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgd2Via2l0RW50ZXJGdWxsc2NyZWVuKGlzVXNlckdlc3R1cmUsIGVjKTsgfQogICAgIHZvaWQg
d2Via2l0RXhpdEZ1bGxTY3JlZW4oKSB7IHdlYmtpdEV4aXRGdWxsc2NyZWVuKCk7IH0KIAotICAg
IGJvb2wgc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRE
aXNwbGF5UG9zdGVySW1hZ2U7IH0KLQogICAgIC8vIFVzZWQgYnkgY2FudmFzIHRvIGdhaW4gcmF3
IHBpeGVsIGFjY2VzcwogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgYm9vbCBzaG91bGREaXNwbGF5UG9z
dGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBkaXNwbGF5TW9kZSgpID09IFBvc3RlcjsgfQorCiBw
cml2YXRlOgogICAgIEhUTUxWaWRlb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKQEAgLTgwLDEyICs4MCwxMyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5
U3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
IAorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNwbGF5TW9kZShEaXNwbGF5TW9kZSk7CisKICAgICBP
d25QdHI8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwogICAgIEtVUkwgbV9wb3N0ZXJV
Ukw7Ci0gICAgYm9vbCBtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZTsKIH07CiAKIH0gLy9uYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggNGZi
MDFjOC4uMjc3YmEzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTE3MSw2ICsxNzEsMTIgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3Rvcnkq
PiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CisjZWxpZiBQTEFURk9STShRVCkgIAorI2lmIFVTRShRVF9N
VUxUSU1FRElBKSAgCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsgIAorI2Vsc2UgIAorICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOyAgCisjZW5k
aWYgIAogI2VsaWYgIVBMQVRGT1JNKEdUSykKICAgICAgICAgLy8gRklYTUU6IGN1cnJlbnRseSBh
bGwgdGhlIE1lZGlhRW5naW5lcyBhcmUgbmFtZWQKICAgICAgICAgLy8gTWVkaWFQbGF5ZXJQcml2
YXRlLiBUaGlzIGNvZGUgd2lsbCBuZWVkIGFuIHVwZGF0ZSB3aGVuIGJ1ZwpAQCAtMTkyLDYgKzE5
OCwyNCBAQCBzdGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShDcmVhdGVNZWRpYUVuZ2luZVBsYXll
ciBjb25zdHJ1Y3RvciwgTWVkaWFFbmdpbmVTdXBwbwogICAgIGluc3RhbGxlZE1lZGlhRW5naW5l
cygpLmFwcGVuZChuZXcgTWVkaWFQbGF5ZXJGYWN0b3J5KGNvbnN0cnVjdG9yLCBnZXRTdXBwb3J0
ZWRUeXBlcywgc3VwcG9ydHNUeXBlKSk7CiB9CiAKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGFwcGxpY2F0aW9uT2N0ZXRTdHJlYW0oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgQXRvbWljU3RyaW5nLCBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtLCAoImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSIpKTsKKyAgICByZXR1cm4gYXBwbGljYXRpb25PY3RldFN0cmVhbTsKK30KKwor
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFBsYWluKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgdGV4dFBsYWluLCAoInRleHQvcGxhaW4iKSk7
CisgICAgcmV0dXJuIHRleHRQbGFpbjsKK30KKworc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
Y29kZWNzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
Y29kZWNzLCAoImNvZGVjcyIpKTsKKyAgICByZXR1cm4gY29kZWNzOworfQorCiBzdGF0aWMgTWVk
aWFQbGF5ZXJGYWN0b3J5KiBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyhjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQogewogICAgIFZlY3RvcjxNZWRpYVBs
YXllckZhY3RvcnkqPiYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOwpAQCAtMTk5
LDYgKzIyMywxNCBAQCBzdGF0aWMgTWVkaWFQbGF5ZXJGYWN0b3J5KiBjaG9vc2VCZXN0RW5naW5l
Rm9yVHlwZUFuZENvZGVjcyhjb25zdCBTdHJpbmcmIHR5cGUsCiAgICAgaWYgKGVuZ2luZXMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIC8vIDQuOC4xMC4zIE1JTUUgdHlwZXMg
LSBJbiB0aGUgYWJzZW5jZSBvZiBhIHNwZWNpZmljYXRpb24gdG8gdGhlIGNvbnRyYXJ5LCB0aGUg
TUlNRSB0eXBlICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIAorICAgIC8vIHdoZW4gdXNlZCB3
aXRoIHBhcmFtZXRlcnMsIGUuZy4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtjb2RlY3M9dGhl
b3JhIiwgaXMgYSB0eXBlIHRoYXQgdGhlIHVzZXIgYWdlbnQga25vd3MgCisgICAgLy8gaXQgY2Fu
bm90IHJlbmRlci4KKyAgICBpZiAodHlwZSA9PSBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtKCkpIHsK
KyAgICAgICAgaWYgKCFjb2RlY3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAogICAgIE1lZGlhUGxheWVyRmFjdG9yeSogZW5naW5lID0gMDsKICAgICBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRlZCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKIApAQCAtMjQ3LDExICsyNzksMTEgQEAgTWVkaWFQbGF5ZXI6On5NZWRpYVBsYXllcigp
CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IENvbnRl
bnRUeXBlJiBjb250ZW50VHlwZSkKIHsKLSAgICBTdHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlLnR5
cGUoKTsKLSAgICBTdHJpbmcgY29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKCJjb2RlY3Mi
KTsKKyAgICBTdHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKS5sb3dlcigpOworICAgIFN0
cmluZyB0eXBlQ29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKGNvZGVjcygpKTsKIAotICAg
IC8vIGlmIHdlIGRvbid0IGtub3cgdGhlIE1JTUUgdHlwZSwgc2VlIGlmIHRoZSBleHRlbnNpb24g
Y2FuIGhlbHAKLSAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtIiB8fCB0eXBlID09ICJ0ZXh0L3BsYWluIikgeworICAgIC8vIElmIHRoZSBN
SU1FIHR5cGUgaXMgbWlzc2luZyBvciBpcyBub3QgbWVhbmluZ2Z1bCwgdHJ5IHRvIGZpZ3VyZSBp
dCBvdXQgZnJvbSB0aGUgVVJMLgorICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09IGFw
cGxpY2F0aW9uT2N0ZXRTdHJlYW0oKSB8fCB0eXBlID09IHRleHRQbGFpbigpKSB7CiAgICAgICAg
IGludCBwb3MgPSB1cmwucmV2ZXJzZUZpbmQoJy4nKTsKICAgICAgICAgaWYgKHBvcyA+PSAwKSB7
CiAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gdXJsLnN1YnN0cmluZyhwb3MgKyAxKTsK
QEAgLTI2MywxNCArMjk1LDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkKIAogICAgIE1lZGlhUGxheWVy
RmFjdG9yeSogZW5naW5lID0gMDsKICAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKQotICAgICAgICBl
bmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOwor
ICAgICAgICBlbmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCB0
eXBlQ29kZWNzKTsKIAotICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGFuIGVuZ2luZSB0aGF0IGNs
YWltcyB0aGUgTUlNRSB0eXBlLCBqdXN0IHVzZSB0aGUgZmlyc3QgZW5naW5lCi0gICAgaWYgKCFl
bmdpbmUgJiYgIWluc3RhbGxlZE1lZGlhRW5naW5lcygpLmlzRW1wdHkoKSkKKyAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBhbiBlbmdpbmUgYW5kIG5vIE1JTUUgdHlwZSBpcyBzcGVjaWZpZWQsIGp1
c3QgdXNlIHRoZSBmaXJzdCBlbmdpbmUuICAKKyAgICBpZiAoIWVuZ2luZSAmJiAhaW5zdGFsbGVk
TWVkaWFFbmdpbmVzKCkuaXNFbXB0eSgpKSAgCiAgICAgICAgIGVuZ2luZSA9IGluc3RhbGxlZE1l
ZGlhRW5naW5lcygpWzBdOwogICAgIAotICAgIC8vIGRvbid0IGRlbGV0ZSBhbmQgcmVjcmVhdGUg
dGhlIHBsYXllciB1bmxlc3MgaXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBlbmdpbmUKLSAgICBp
ZiAoZW5naW5lICYmIG1fY3VycmVudE1lZGlhRW5naW5lICE9IGVuZ2luZSkgeworICAgIC8vIERv
bid0IGRlbGV0ZSBhbmQgcmVjcmVhdGUgdGhlIHBsYXllciB1bmxlc3MgaXQgY29tZXMgZnJvbSBh
IGRpZmZlcmVudCBlbmdpbmUgIAorICAgIGlmICghZW5naW5lKSB7ICAKKyAgICAgICAgbV9jdXJy
ZW50TWVkaWFFbmdpbmUgPSBlbmdpbmU7ICAKKyAgICAgICAgbV9wcml2YXRlLmNsZWFyKCk7ICAK
KyAgICB9IGVsc2UgaWYgKG1fY3VycmVudE1lZGlhRW5naW5lICE9IGVuZ2luZSkgeyAgCiAgICAg
ICAgIG1fY3VycmVudE1lZGlhRW5naW5lID0gZW5naW5lOwogICAgICAgICBtX3ByaXZhdGUuY2xl
YXIoKTsKICAgICAgICAgbV9wcml2YXRlLnNldChlbmdpbmUtPmNvbnN0cnVjdG9yKHRoaXMpKTsK
QEAgLTI5Miw2ICszMjcsMTEgQEAgYm9vbCBNZWRpYVBsYXllcjo6aGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzQXZhaWxhYmxlVmlkZW9GcmFt
ZSgpOwogfQogICAgIAordm9pZCBNZWRpYVBsYXllcjo6cHJlcGFyZUZvclJlbmRlcmluZygpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cHJlcGFyZUZvclJlbmRlcmluZygpOworfQorICAgIAog
Ym9vbCBNZWRpYVBsYXllcjo6Y2FuTG9hZFBvc3RlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Y2FuTG9hZFBvc3RlcigpOwpAQCAtNTIyLDE0ICs1NjIsMjAgQEAgdm9pZCBNZWRp
YVBsYXllcjo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBwLCBj
b25zdCBJbnRSZWN0JgogCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyOjpz
dXBwb3J0c1R5cGUoQ29udGVudFR5cGUgY29udGVudFR5cGUpCiB7Ci0gICAgU3RyaW5nIHR5cGUg
PSBjb250ZW50VHlwZS50eXBlKCk7Ci0gICAgU3RyaW5nIGNvZGVjcyA9IGNvbnRlbnRUeXBlLnBh
cmFtZXRlcigiY29kZWNzIik7Ci0gICAgTWVkaWFQbGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBjaG9v
c2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOworICAgIFN0cmluZyB0
eXBlID0gY29udGVudFR5cGUudHlwZSgpLmxvd2VyKCk7CisgICAgU3RyaW5nIHR5cGVDb2RlY3Mg
PSBjb250ZW50VHlwZS5wYXJhbWV0ZXIoY29kZWNzKCkpOworCisgICAgLy8gNC44LjEwLjMgTUlN
RSB0eXBlcyAtIFRoZSBjYW5QbGF5VHlwZSh0eXBlKSBtZXRob2QgbXVzdCByZXR1cm4gdGhlIGVt
cHR5IHN0cmluZyBpZiB0eXBlIGlzIGEgdHlwZSB0aGF0IHRoZSAKKyAgICAvLyB1c2VyIGFnZW50
IGtub3dzIGl0IGNhbm5vdCByZW5kZXIgb3IgaXMgdGhlIHR5cGUgImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIKKyAgICBpZiAodHlwZSA9PSBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtKCkpCisgICAg
ICAgIHJldHVybiBJc05vdFN1cHBvcnRlZDsKKworICAgIE1lZGlhUGxheWVyRmFjdG9yeSogZW5n
aW5lID0gY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3ModHlwZSwgdHlwZUNvZGVjcyk7
CiAKICAgICBpZiAoIWVuZ2luZSkKICAgICAgICAgcmV0dXJuIElzTm90U3VwcG9ydGVkOwogCi0g
ICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7Cisg
ICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIHR5cGVDb2RlY3Mp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
Zz4mIHR5cGVzKQpAQCAtNjU1LDYgKzcwMSwxMiBAQCB2b2lkIE1lZGlhUGxheWVyOjpyYXRlQ2hh
bmdlZCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVyUmF0ZUNoYW5n
ZWQodGhpcyk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXI6OnBsYXliYWNrU3RhdGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNs
aWVudC0+bWVkaWFQbGF5ZXJQbGF5YmFja1N0YXRlQ2hhbmdlZCh0aGlzKTsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA2OTQ1ODcy
Li5lMjI1ZjYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC02
OSw2ICs2OSw3IEBAIHN0cnVjdCBQbGF0Zm9ybU1lZGlhIHsKICAgICAgICAgUVRNb3ZpZVZpc3Vh
bENvbnRleHRUeXBlLAogICAgICAgICBHU3RyZWFtZXJHV29ybGRUeXBlLAogICAgICAgICBDaHJv
bWl1bU1lZGlhUGxheWVyVHlwZSwKKyAgICAgICAgUXRNZWRpYVBsYXllclR5cGUsCiAgICAgfSB0
eXBlOwogCiAgICAgdW5pb24gewpAQCAtNzcsNiArNzgsNyBAQCBzdHJ1Y3QgUGxhdGZvcm1NZWRp
YSB7CiAgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KiBxdE1vdmllVmlzdWFsQ29udGV4dDsK
ICAgICAgICAgR1N0cmVhbWVyR1dvcmxkKiBnc3RyZWFtZXJHV29ybGQ7CiAgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogY2hyb21pdW1NZWRpYVBsYXllcjsKKyAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBxdE1lZGlhUGxheWVyOwogICAgIH0gbWVkaWE7CiB9
OwogCkBAIC0xMTksNiArMTIxLDkgQEAgcHVibGljOgogICAgIC8vIHRoZSBwbGF5YmFjayByYXRl
IGhhcyBjaGFuZ2VkCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUmF0ZUNoYW5nZWQoTWVk
aWFQbGF5ZXIqKSB7IH0KIAorICAgIC8vIHRoZSBwbGF5L3BhdXNlIHN0YXR1cyBjaGFuZ2VkCisg
ICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5
ZXIqKSB7IH0KKwogICAgIC8vIFRoZSBNZWRpYVBsYXllciBoYXMgZm91bmQgcG90ZW50aWFsbHkg
cHJvYmxlbWF0aWMgbWVkaWEgY29udGVudC4KICAgICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxs
eSB0byB0cmlnZ2VyIHN3YXBwaW5nIGZyb20gYSA8dmlkZW8+CiAgICAgLy8gZWxlbWVudCB0byBh
biA8ZW1iZWQ+IGluIHN0YW5kYWxvbmUgZG9jdW1lbnRzCkBAIC0yMzksNiArMjQ0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgdGltZUNoYW5nZWQoKTsKICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAg
ICAgdm9pZCByYXRlQ2hhbmdlZCgpOworICAgIHZvaWQgcGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsK
ICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwogCiAgICAgdm9pZCByZXBhaW50KCk7CkBAIC0y
NDYsNiArMjUyLDcgQEAgcHVibGljOgogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtZWRpYVBsYXll
ckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXJDbGllbnQ7IH0KIAogICAgIGJv
b2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OworICAgIHZvaWQgcHJlcGFyZUZvclJl
bmRlcmluZygpOwogCiAgICAgYm9vbCBjYW5Mb2FkUG9zdGVyKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRQb3N0ZXIoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllclByaXZhdGUuaAppbmRleCA0MGFlYWNiLi4zN2UzY2VkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTEyMyw2ICsxMjMs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1v
dmllTG9hZFR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsgfQogCisg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JSZW5kZXJpbmcoKSB7IH0KKwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQ
aG9ub24uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVQaG9ub24uY3BwCmluZGV4IDNjNmM1YWEuLjhiZWRmZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXll
ciogcGxheWVyKQorTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpNZWRpYVBsYXllclByaXZhdGVQ
aG9ub24oTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAs
IG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCkBAIC0xMTgsMTkgKzExOCwxOSBAQCBNZWRpYVBsYXll
clByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQogICAgIGNv
bm5lY3QobV9tZWRpYU9iamVjdCwgU0lHTkFMKHRvdGFsVGltZUNoYW5nZWQocWludDY0KSksIHRo
aXMsIFNMT1QodG90YWxUaW1lQ2hhbmdlZChxaW50NjQpKSk7CiB9CiAKLU1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBs
YXllcikKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKLSAgICByZXR1cm4gbmV3IE1lZGlh
UGxheWVyUHJpdmF0ZShwbGF5ZXIpOworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uKHBsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFy
IHJlZ2lzdHJhcikKIHsKICAgICBpZiAoaXNBdmFpbGFibGUoKSkKICAgICAgICAgcmVnaXN0cmFy
KGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7CiB9CiAKIAotTWVkaWFQ
bGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK01lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbjo6fk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbigpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5nIHZpZGVvd2lkZ2V0Iik7CiAgICAg
bV92aWRlb1dpZGdldC0+Y2xvc2UoKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBNZWRpYVBsYXllclBy
aXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQogICAgIG1fbWVkaWFPYmplY3QgPSAwOwogfQog
Ci1IYXNoU2V0PFN0cmluZz4mIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydGVkVHlwZXNDYWNo
ZSgpCitIYXNoU2V0PFN0cmluZz4mIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c3VwcG9ydGVk
VHlwZXNDYWNoZSgpCiB7CiAgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBzdXBwb3J0ZWRUeXBl
czsKICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmlzRW1wdHkoKSkKQEAgLTE5MCwxMiArMTkwLDEy
IEBAIEhhc2hTZXQ8U3RyaW5nPiYgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0ZWRUeXBlc0Nh
Y2hlKCkKICAgICByZXR1cm4gc3VwcG9ydGVkVHlwZXM7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVQaG9ub246OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
PiYgdHlwZXMpCiB7CiAgICAgdHlwZXMgPSBzdXBwb3J0ZWRUeXBlc0NhY2hlKCk7CiB9CiAKLU1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK01lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzdXBwb3J0c1R5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKIHsKICAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CkBAIC0y
MDUsMTQgKzIwNSwxNCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgYwogICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpo
YXNWaWRlbygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW8o
KSBjb25zdAogewogICAgIGJvb2wgaGFzVmlkZW8gPSBtX21lZGlhT2JqZWN0LT5oYXNWaWRlbygp
OwogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW8oKSAt
PiAlcyIsIGhhc1ZpZGVvID8gInRydWUiIDogImZhbHNlIik7CiAgICAgcmV0dXJuIGhhc1ZpZGVv
OwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25zdAorYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhhc0F1ZGlvKCkgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogUGhvbm9uOjpNZWRpYU9iamVjdCBkb2VzIG5vdCBoYXZlIHN1Y2ggYSBoYXNBdWRpbygpIGZ1
bmN0aW9uCiAgICAgYm9vbCBoYXNBdWRpbyA9IHRydWU7CkBAIC0yMjAsNyArMjIwLDcgQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKICAgICByZXR1cm4gaGFzQXVk
aW87CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJs
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
CiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpsb2FkKFwiJXNc
IikiLCB1cmwudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTI0MSwzMyArMjQxLDMzIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogICAgIHNldFZpc2libGUo
bV9wbGF5ZXItPnZpc2libGUoKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5j
ZWxMb2FkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpjYW5jZWxMb2FkKCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpw
bGF5KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwbGF5KCkKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnBsYXkoKSIpOwogICAgIG1fbWVkaWFP
YmplY3QtPnBsYXkoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZSgpCiB7CiAgICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZSgpIik7CiAgICAgbV9tZWRpYU9iamVjdC0+
cGF1c2UoKTsKIH0KIAogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZWQoKSBjb25zdAogewogICAgIGJv
b2wgcGF1c2VkID0gbV9tZWRpYU9iamVjdC0+c3RhdGUoKSA9PSBQaG9ub246OlBhdXNlZFN0YXRl
OwogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2VkKCkgLS0+
ICVzIiwgcGF1c2VkID8gInRydWUiIDogImZhbHNlIik7CiAgICAgcmV0dXJuIHBhdXNlZDsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgcG9zaXRpb24pCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2VlayhmbG9hdCBwb3NpdGlvbikKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNlZWsoJWYpIiwgcG9zaXRpb24pOwog
CkBAIC0yODAsMTIgKzI4MCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9h
dCBwb3NpdGlvbikKICAgICBtX21lZGlhT2JqZWN0LT5zZWVrKHBvc2l0aW9uICogMTAwMC4wZik7
CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZWVraW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAorZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVy
biAwLjBmOwpAQCAtMjk5LDcgKzI5OSw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVy
YXRpb24oKSBjb25zdAogICAgIHJldHVybiBkdXJhdGlvbjsKIH0KIAotZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpjdXJyZW50VGltZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVQ
aG9ub246OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKICAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1f
bWVkaWFPYmplY3QtPmN1cnJlbnRUaW1lKCkgLyAxMDAwLjBmOwogCkBAIC0zMDcsNDggKzMwNyw0
OCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKICAgICBy
ZXR1cm4gY3VycmVudFRpbWU7CiB9CiAKLVBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5
ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0CitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlh
UGxheWVyUHJpdmF0ZVBob25vbjo6YnVmZmVyZWQoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiAgICAgcmV0dXJuIFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQogCi1mbG9hdCBNZWRp
YVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXll
clByaXZhdGVQaG9ub246Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gMC4wZjsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVQaG9u
b246OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiAwOwogfQogCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBj
b25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp0b3RhbEJ5dGVzKCkgY29u
c3QKIHsKICAgICAvL25vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0KQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OnNldFJhdGUoZmxvYXQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNldFZvbHVtZSgpIik7CiAgICAg
bV9hdWRpb091dHB1dC0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRNdXRlZChib29sIG11dGVkKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9u
b246OnNldE11dGVkKGJvb2wgbXV0ZWQpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjpzZXRNdXRlZCgpIik7CiAgICAgbV9hdWRpb091dHB1dC0+c2V0TXV0ZWQo
bXV0ZWQpOwogfQogCi1NZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uOjpuZXR3b3JrU3RhdGUoKSBjb25zdAogewogICAgIGNvbnN0IFFN
ZXRhT2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9iamVjdCgpOwogICAgIFFNZXRhRW51bSBu
ZXR3b3JrU3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9mRW51bWVy
YXRvcigiTmV0d29ya1N0YXRlIikpOwpAQCAtMzU2LDcgKzM1Niw3IEBAIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAogICAg
IHJldHVybiBtX25ldHdvcmtTdGF0ZTsKIH0KIAotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK01lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB7CiAgICAg
Y29uc3QgUU1ldGFPYmplY3QqIG1ldGFPYmogPSB0aGlzLT5tZXRhT2JqZWN0KCk7CiAgICAgUU1l
dGFFbnVtIHJlYWR5U3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9m
RW51bWVyYXRvcigiUmVhZHlTdGF0ZSIpKTsKQEAgLTM2NCw3ICszNjQsNyBAQCBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGU6OnJlYWR5U3RhdGUoKSBjb25zdAogICAg
IHJldHVybiBtX3JlYWR5U3RhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRh
dGVTdGF0ZXMoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnVwZGF0ZVN0YXRlcygp
CiB7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25l
dHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0g
bV9yZWFkeVN0YXRlOwpAQCAtNDEyLDcgKzQxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp1cGRhdGVTdGF0ZXMoKQogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKICAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNldFZpc2libGUoJXMpIiwg
dmlzaWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwpAQCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3ZpZGVvV2lk
Z2V0LT5zZXRWaXNpYmxlKG1faXNWaXNpYmxlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUGhvbm9uOjpzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKCFt
X3ZpZGVvV2lkZ2V0KQogICAgICAgICByZXR1cm47CkBAIC00MzQsNyArNDM0LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKICAgICAg
ICAgbV92aWRlb1dpZGdldC0+cmVzaXplKG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQo
KSk7CiB9CiAKLUludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0
CitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bmF0dXJhbFNpemUoKSBjb25zdAog
ewogICAgIGlmICghaGFzVmlkZW8oKSkgewogICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVQaG9ub246Om5hdHVyYWxTaXplKCkgLT4gJWR4JWQiLApAQCAtNDU1LDcgKzQ1NSw3
IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG5hdHVyYWxTaXplOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZXZlbnRG
aWx0ZXIoUU9iamVjdCogb2JqLCBRRXZlbnQqIGV2ZW50KQorYm9vbCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OmV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwgUUV2ZW50KiBldmVudCkKIHsKICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlVwZGF0ZVJlcXVlc3QpCiAgICAgICAgIG1f
cGxheWVyLT5yZXBhaW50KCk7CkBAIC00NjMsNyArNDYzLDcgQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OmV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwgUUV2ZW50KiBldmVudCkKICAgICByZXR1
cm4gUU9iamVjdDo6ZXZlbnRGaWx0ZXIob2JqLCBldmVudCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGVjdCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAoZ3JhcGhpY3NDb250ZWN0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ4MSw3ICs0ODEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRlY3QsIGNvbnN0IEludFJlY3QmCiAKIC8vID09PT09
PT09PT09PT09PT09PT09PT0gUGhvbm9uOjpNZWRpYU9iamVjdCBzaWduYWxzID09PT09PT09PT09
PT09PT09PT09PT0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnN0YXRlQ2hhbmdlZChQaG9u
b246OlN0YXRlIG5ld1N0YXRlLCBQaG9ub246OlN0YXRlIG9sZFN0YXRlKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVQaG9ub246OnN0YXRlQ2hhbmdlZChQaG9ub246OlN0YXRlIG5ld1N0YXRlLCBQ
aG9ub246OlN0YXRlIG9sZFN0YXRlKQogewogICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2Jq
ID0gdGhpcy0+bWV0YU9iamVjdCgpOwogICAgIFFNZXRhRW51bSBwaG9ub25TdGF0ZXMgPSBtZXRh
T2JqLT5lbnVtZXJhdG9yKG1ldGFPYmotPmluZGV4T2ZFbnVtZXJhdG9yKCJQaG9ub25TdGF0ZSIp
KTsKQEAgLTQ5MSw0OCArNDkxLDQ4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdGF0ZUNo
YW5nZWQoUGhvbm9uOjpTdGF0ZSBuZXdTdGF0ZSwgUGhvbm9uOjpTdGF0ZSBvbGRTCiAgICAgdXBk
YXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptZXRhRGF0YUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om1ldGFEYXRhQ2hhbmdlZCgpCiB7
CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjptZXRhRGF0YUNoYW5n
ZWQoKSIpOwogICAgIExPR19NRURJQU9CSkVDVCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2Vla2FibGVDaGFuZ2VkKGJvb2wpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6c2Vla2FibGVDaGFuZ2VkKGJvb2wpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBM
T0dfTUVESUFPQkpFQ1QoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVv
Q2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhh
c1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW9DaGFuZ2VkKCVzKSIsIGhhc1ZpZGVvID8gInRydWUi
IDogImZhbHNlIik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJTdGF0dXMo
aW50KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmJ1ZmZlclN0YXR1cyhpbnQpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBMT0dfTUVESUFPQkpFQ1QoKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OmZpbmlzaGVkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uOjpmaW5pc2hlZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBMT0dfTUVE
SUFPQkpFQ1QoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRTb3VyY2VD
aGFuZ2VkKGNvbnN0IFBob25vbjo6TWVkaWFTb3VyY2UmKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OmN1cnJlbnRTb3VyY2VDaGFuZ2VkKGNvbnN0IFBob25vbjo6TWVkaWFTb3VyY2Um
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgTE9HX01FRElBT0JKRUNUKCk7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjphYm91dFRvRmluaXNoKCkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjphYm91dFRvRmluaXNoKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIExPR19NRURJQU9CSkVDVCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
dG90YWxUaW1lQ2hhbmdlZChxaW50NjQgdG90YWxUaW1lKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OnRvdGFsVGltZUNoYW5nZWQocWludDY0IHRvdGFsVGltZSkKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnRvdGFsVGltZUNoYW5nZWQoJWxsZCki
LCB0b3RhbFRpbWUpOwogICAgIExPR19NRURJQU9CSkVDVCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKaW5kZXgg
ZmY2YTAxYy4uZDc5MzY3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCkBAIC00MCwxMyArNDAsMTMgQEAgUVRf
RU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBNZWRpYVBs
YXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZSB7CisgICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uIDogcHVibGljIFFP
YmplY3QsIHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogCiAgICAgICAgIFFf
T0JKRUNUCiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRl
KCk7CisgICAgICAgIH5NZWRpYVBsYXllclByaXZhdGVQaG9ub24oKTsKIAogICAgICAgICAvLyBU
aGVzZSBlbnVtcyBhcmUgdXNlZCBmb3IgZGVidWdnaW5nCiAgICAgICAgIFFfRU5VTVMoUmVhZHlT
dGF0ZSBOZXR3b3JrU3RhdGUgUGhvbm9uU3RhdGUpCkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRvdGFsVGltZUNoYW5nZWQocWludDY0KTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOwor
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVQaG9ub24oTWVkaWFQbGF5ZXIqKTsKICAgICAgICAg
c3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBw
bGF5ZXIpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nPiYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVF0LmNwcAppbmRleCA1MjVhYWY0Li41YTBlYmFkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApA
QCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1
ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJxd2ViZnJh
bWUuaCIKQEAgLTUxLDE3ICs1MywxNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLU1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQ
cml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK01lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVy
KQogewotICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcik7CisgICAgcmV0
dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGVRdChwbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdp
c3RyYXIpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKICAgICByZWdpc3RyYXIoY3JlYXRlLCBn
ZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiAmc3VwcG9ydGVkKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdDo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+
ICZzdXBwb3J0ZWQpCiB7CiAgICAgUVN0cmluZ0xpc3QgdHlwZXMgPSBRTWVkaWFQbGF5ZXI6OnN1
cHBvcnRlZE1pbWVUeXBlcygpOwogCkBAIC03Miw3ICs3NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4gJnN1cHBvcnRlZCkKICAg
ICB9CiB9CiAKLU1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiBtaW1lLCBjb25zdCBTdHJpbmcmIGNvZGVjKQorTWVk
aWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVRdDo6c3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYgbWltZSwgY29uc3QgU3RyaW5nJiBjb2RlYykKIHsKICAgICBpZiAoIW1p
bWUuc3RhcnRzV2l0aCgiYXVkaW8vIikgJiYgIW1pbWUuc3RhcnRzV2l0aCgidmlkZW8vIikpCiAg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CkBAIC04MywxOCArODUs
MjEgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBv
cnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGMKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1h
eUJlU3VwcG9ydGVkOwogfQogCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogbV9wbGF5ZXIocGxheWVyKQorTWVkaWFQbGF5
ZXJQcml2YXRlUXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVF0KE1lZGlhUGxheWVyKiBwbGF5ZXIpCisg
ICAgOiBtX3dlYkNvcmVQbGF5ZXIocGxheWVyKQogICAgICwgbV9tZWRpYVBsYXllcihuZXcgUU1l
ZGlhUGxheWVyKQogICAgICwgbV9tZWRpYVBsYXllckNvbnRyb2woMCkKICAgICAsIG1fdmlkZW9J
dGVtKG5ldyBRR3JhcGhpY3NWaWRlb0l0ZW0pCiAgICAgLCBtX3ZpZGVvU2NlbmUobmV3IFFHcmFw
aGljc1NjZW5lKQogICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAsIG1fY3VycmVu
dFNpemUoMCwgMCkKKyAgICAsIG1fbmF0dXJhbFNpemUoUmVuZGVyVmlkZW86OmRlZmF1bHRTaXpl
KCkpCiAgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1faXNTZWVraW5nKGZhbHNlKQog
ICAgICwgbV9jb21wb3NpdGVkKGZhbHNlKQogICAgICwgbV9xdWV1ZWRTZWVrKC0xKQorICAgICwg
bV9wcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRvKQogewogICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQo
bV92aWRlb0l0ZW0pOwogICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CkBA
IC0xMDYsNiArMTExLDggQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUo
TWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICAgICAgICAgIHRoaXMsIFNMT1Qoc3RhdGVDaGFuZ2Vk
KFFNZWRpYVBsYXllcjo6U3RhdGUpKSk7CiAgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdO
QUwoZXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLAogICAgICAgICAgICAgdGhpcywgU0xPVCho
YW5kbGVFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBs
YXllciwgU0lHTkFMKGJ1ZmZlclN0YXR1c0NoYW5nZWQoaW50KSksCisgICAgICAgICAgICB0aGlz
LCBTTE9UKGJ1ZmZlclN0YXR1c0NoYW5nZWQoaW50KSkpOwogICAgIGNvbm5lY3QobV9tZWRpYVBs
YXllciwgU0lHTkFMKGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpKSwKICAgICAgICAgICAgIHRoaXMs
IFNMT1QoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkpKTsKICAgICBjb25uZWN0KG1fbWVkaWFQbGF5
ZXIsIFNJR05BTChwb3NpdGlvbkNoYW5nZWQocWludDY0KSksCkBAIC0xMjAsNDggKzEyNyw2OSBA
QCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxh
eWVyKQogICAgICAgICAgICB0aGlzLCBTTE9UKG5hdGl2ZVNpemVDaGFuZ2VkKFFTaXplRikpKTsK
IAogICAgIC8vIEdyYWIgdGhlIHBsYXllciBjb250cm9sCi0gICAgUU1lZGlhU2VydmljZSogc2Vy
dmljZSA9IG1fbWVkaWFQbGF5ZXItPnNlcnZpY2UoKTsKLSAgICBpZiAoc2VydmljZSkgeworICAg
IGlmIChRTWVkaWFTZXJ2aWNlKiBzZXJ2aWNlID0gbV9tZWRpYVBsYXllci0+c2VydmljZSgpKSB7
CiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDb250cm9sID0gcW9iamVjdF9jYXN0PFFNZWRpYVBsYXll
ckNvbnRyb2wgKj4oCiAgICAgICAgICAgICAgICAgc2VydmljZS0+cmVxdWVzdENvbnRyb2woUU1l
ZGlhUGxheWVyQ29udHJvbF9paWQpKTsKICAgICB9CiB9CiAKLU1lZGlhUGxheWVyUHJpdmF0ZTo6
fk1lZGlhUGxheWVyUHJpdmF0ZSgpCitNZWRpYVBsYXllclByaXZhdGVRdDo6fk1lZGlhUGxheWVy
UHJpdmF0ZVF0KCkKIHsKKyAgICBtX21lZGlhUGxheWVyLT5kaXNjb25uZWN0KHRoaXMpOworICAg
IG1fbWVkaWFQbGF5ZXItPnN0b3AoKTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVk
aWFDb250ZW50KCkpOworICAgIAogICAgIGRlbGV0ZSBtX21lZGlhUGxheWVyOwogICAgIGRlbGV0
ZSBtX3ZpZGVvU2NlbmU7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygp
IGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpoYXNWaWRlbygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFibGUoKTsKKwkvLyBKdXN0IGZv
ciB0ZXN0aW5nLCBkb24ndCBjb21taXQKKwlyZXR1cm4gdHJ1ZTsKKyAgLy9yZXR1cm4gbV9tZWRp
YVBsYXllci0+aXNWaWRlb0F2YWlsYWJsZSgpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZTo6aGFzQXVkaW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdDo6aGFzQXVkaW8o
KSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Omxv
YWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9tZWRpYVVybCA9IHVybDsKKworICAgIC8v
IFF0TXVsdGltZWRpYSBkb2VzIG5vdCBoYXZlIGFuIEFQSSB0byB0aHJvdHRsZSBsb2FkaW5nCisg
ICAgLy8gc28gd2UgaGFuZGxlIHRoaXMgb3Vyc2VsdmVzIGJ5IGRlbGF5aW5nIHRoZSBsb2FkCisg
ICAgaWYgKG1fcHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6Tm9uZSl7CisgICAgCS8vIE1heSBuZWVk
IHRvIGFkZCB0aGlzIGluIGxhdGVyCisgICAgCS8vfHwgbV93ZWJDb3JlUGxheWVyLT5yZXF1aXJl
c0Z1bGxzY3JlZW5WaWRlb1BsYXliYWNrKCkpIHsKKyAgICAgICAgbV9kZWxheWluZ0xvYWQgPSB0
cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29tbWl0TG9hZCh1cmwpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpjb21taXRMb2FkKGNvbnN0IFN0cmluZyYgdXJs
KQogewogICAgIC8vIFdlIGFyZSBub3cgbG9hZGluZwogICAgIGlmIChtX25ldHdvcmtTdGF0ZSAh
PSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOwotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgp
OworICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICB9
CiAKICAgICAvLyBBbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB5ZXQKICAgICBpZiAobV9yZWFk
eVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgewogICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2Vk
KCk7CiAgICAgfQogCiAgICAgY29uc3QgUVVybCByVXJsID0gUVVybChRU3RyaW5nKHVybCkpOwog
ICAgIGNvbnN0IFFTdHJpbmcgc2NoZW1lID0gclVybC5zY2hlbWUoKS50b0xvd2VyKCk7CiAKICAg
ICAvLyBHcmFiIHRoZSBjbGllbnQgbWVkaWEgZWxlbWVudAotICAgIEhUTUxNZWRpYUVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV9wbGF5ZXItPm1lZGlh
UGxheWVyQ2xpZW50KCkpOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVu
dCgpKTsKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbWVkaWEgY29udGVudCB3aXRoIGEgbmV0d29y
ayByZXF1ZXN0IGlmIHRoZSByZXNvdXJjZSBpcyBodHRwW3NdCiAgICAgaWYgKHNjaGVtZSA9PSAi
aHR0cCIgfHwgc2NoZW1lID09ICJodHRwcyIpIHsKQEAgLTIwOCwzMiArMjM2LDUzIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogICAgIC8vIGVuZ2lu
ZSB3aGljaCBkb2VzLgogICAgIG1fbWVkaWFQbGF5ZXItPnNldE11dGVkKGVsZW1lbnQtPm11dGVk
KCkpOwogICAgIG1fbWVkaWFQbGF5ZXItPnNldFZvbHVtZShzdGF0aWNfY2FzdDxpbnQ+KGVsZW1l
bnQtPnZvbHVtZSgpICogMTAwLjApKTsKKyAgICAKKyAgICAvLyBTZXR0aW5nIGEgbWVkaWEgc291
cmNlIHdpbGwgc3RhcnQgbG9hZGluZyB0aGUgbWVkaWEsIGJ1dCB3ZSBuZWVkCisgICAgLy8gdG8g
cHJlLXJvbGwgYXMgd2VsbCB0byBnZXQgdmlkZW8gc2l6ZS1oaW50cyBhbmQgYnVmZmVyLXN0YXR1
cworICAgIGlmIChlbGVtZW50LT5wYXVzZWQoKSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1
c2UoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKKyAgICAKIH0K
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlc3VtZUxvYWQoKQoreworICAgIG1fZGVsYXlp
bmdMb2FkID0gZmFsc2U7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkK
KyAgICBpZiAoIW1fbWVkaWFVcmwuaXNOdWxsKCkpCisgICAgICAgIGNvbW1pdExvYWQobV9tZWRp
YVVybCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmNhbmNlbExvYWQoKQogewog
ICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlhKFFNZWRpYUNvbnRlbnQoKSk7CiAgICAgdXBkYXRl
U3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUXQ6OnByZXBhcmVUb1BsYXkoKQoreworICAgIGlmIChtX21lZGlhUGxh
eWVyLT5tZWRpYSgpLmlzTnVsbCgpIHx8IG1fZGVsYXlpbmdMb2FkKQorICAgICAgICByZXN1bWVM
b2FkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXkoKQogewogICAgIGlm
IChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQog
ICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpwYXVzZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwYXVzZSgpCiB7CiAgICAg
aWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUp
CiAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwYXVzZWQoKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGF1c2Vk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgIT0gUU1lZGlh
UGxheWVyOjpQbGF5aW5nU3RhdGUpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vl
ayhmbG9hdCBwb3NpdGlvbikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnNlZWsoZmxvYXQg
cG9zaXRpb24pCiB7CiAgICAgaWYgKCFtX21lZGlhUGxheWVyLT5pc1NlZWthYmxlKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI2OSwxMiArMzE4LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzZWVrKGZsb2F0IHBvc2l0aW9uKQogICAgIH0KIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZh
dGU6OnNlZWtpbmcoKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdDo6c2Vla2luZygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faXNTZWVraW5nOwogfQogCi1mbG9hdCBNZWRpYVBsYXll
clByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpk
dXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVybiAwLjBmOwpAQCAtMjg4LDEzICszMzcsMTIgQEAg
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGR1
cmF0aW9uOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29u
c3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpjdXJyZW50VGltZSgpIGNvbnN0CiB7Ci0g
ICAgZmxvYXQgY3VycmVudFRpbWUgPSBtX21lZGlhUGxheWVyLT5wb3NpdGlvbigpIC8gMTAwMC4w
ZjsKLSAgICByZXR1cm4gY3VycmVudFRpbWU7CisgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPnBv
c2l0aW9uKCkgLyAxMDAwLjBmOwogfQogCi1QYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxh
eWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAorUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRp
YVBsYXllclByaXZhdGVRdDo6YnVmZmVyZWQoKSBjb25zdAogewogICAgIFJlZlB0cjxUaW1lUmFu
Z2VzPiBidWZmZXJlZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogCkBAIC0zMTIsNyArMzYwLDcg
QEAgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKCkg
Y29uc3QKICAgICByZXR1cm4gYnVmZmVyZWQucmVsZWFzZSgpOwogfQogCi1mbG9hdCBNZWRpYVBs
YXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fbWVkaWFQbGF5
ZXJDb250cm9sKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMCwxOCArMzY4LDE4IEBAIGZsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFj
a1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAwLjBmOwogfQogCi11bnNpZ25lZCBNZWRpYVBs
YXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZVF0OjpieXRlc0xvYWRlZCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcGVyY2VudGFnZSA9
IG1fbWVkaWFQbGF5ZXItPmJ1ZmZlclN0YXR1cygpOwogCiAgICAgaWYgKHBlcmNlbnRhZ2UgPT0g
MTAwKSB7CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SWRsZSkg
ewogICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKLSAgICAg
ICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgICAgICBtX3dl
YkNvcmVQbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkgewogICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgICAg
ICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgICAgICAgICBtX3dlYkNv
cmVQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0
Miw3ICszOTAsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkg
Y29uc3QKICAgICByZXR1cm4gcGVyY2VudGFnZTsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVF0
Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKICAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxl
TWV0YURhdGEoKS5jb250YWlucyhRdE11bHRpbWVkaWFLaXQ6OlNpemUpKQogICAgICAgICByZXR1
cm4gbV9tZWRpYVBsYXllci0+bWV0YURhdGEoUXRNdWx0aW1lZGlhS2l0OjpTaXplKS50b0ludCgp
OwpAQCAtMzUwLDUyICszOTgsNTkgQEAgdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3Rh
bEJ5dGVzKCkgY29uc3QKICAgICByZXR1cm4gMTAwOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6c2V0
UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQoreworICAgIG1fcHJlbG9hZCA9
IHByZWxvYWQ7CisgICAgaWYgKG1fZGVsYXlpbmdMb2FkICYmIG1fcHJlbG9hZCAhPSBNZWRpYVBs
YXllcjo6Tm9uZSkKKyAgICAgICAgcmVzdW1lTG9hZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF0OjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7CiAgICAgbV9tZWRpYVBsYXllci0+c2V0
UGxheWJhY2tSYXRlKHJhdGUpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnNldFZvbHVtZShm
bG9hdCB2b2x1bWUpCiB7CiAgICAgbV9tZWRpYVBsYXllci0+c2V0Vm9sdW1lKHN0YXRpY19jYXN0
PGludD4odm9sdW1lICogMTAwLjApKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnN1
cHBvcnRzTXV0aW5nKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnN1cHBvcnRz
TXV0aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0
OjpzZXRNdXRlZChib29sIG11dGVkKQogewogICAgIG1fbWVkaWFQbGF5ZXItPnNldE11dGVkKG11
dGVkKTsKIH0KIAotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGU6
Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjpuZXR3b3JrU3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX25ldHdv
cmtTdGF0ZTsKIH0KIAotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRl
OjpyZWFkeVN0YXRlKCkgY29uc3QKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVy
UHJpdmF0ZVF0OjpyZWFkeVN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZWFkeVN0YXRl
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2libGUp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsK
ICAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjptZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUXQ6Om1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlh
U3RhdHVzKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXQ6OmhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpCiB7CiAgICAgdXBkYXRl
U3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdGF0ZUNoYW5nZWQoUU1l
ZGlhUGxheWVyOjpTdGF0ZSBzdGF0ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnN0YXRl
Q2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlIHN0YXRlKQogewogICAgIGlmIChzdGF0ZSAhPSBR
TWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSAmJiBtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsg
Pj0gMCkgewogICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihtX3F1ZXVlZFNlZWsp
OwpAQCAtNDAzLDEyICs0NTgsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnN0YXRlQ2hh
bmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlIHN0YXRlKQogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6Om5hdGl2ZVNpemVDaGFuZ2VkKGNvbnN0IFFTaXplRiYpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpuYXRpdmVTaXplQ2hhbmdlZChjb25zdCBRU2l6ZUYmIHNpemUpCiB7
Ci0gICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7CisgICAgaWYgKCFzaXplLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9uYXR1cmFsU2l6ZSA9IHNpemUudG9TaXplKCk7Cisg
ICAgbV93ZWJDb3JlUGxheWVyLT5zaXplQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6cXVldWVkU2Vla1RpbWVvdXQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6
cXVldWVkU2Vla1RpbWVvdXQoKQogewogICAgIC8vIElmIHdlIGhhdmVuJ3QgaGVhcmQgYW55dGhp
bmcsIGFzc3VtZSB0aGUgcGxheWVyIGlzIG5vdyBwYXVzZWQKICAgICAvLyBhbmQgd2UgY2FuIGF0
dGVtcHQgdGhlIHNlZWsKQEAgLTQyMSw0MCArNDgwLDQ1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpxdWV1ZWRTZWVrVGltZW91dCgpCiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2Vla1RpbWVvdXQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6c2Vla1RpbWVv
dXQoKQogewogICAgIC8vIElmIHdlIGhhdmVuJ3QgaGVhcmQgYW55dGhpbmcsIGFzc3VtZSB0aGUg
c2VlayBzdWNjZWVkZWQKICAgICBpZiAobV9pc1NlZWtpbmcpIHsKLSAgICAgICAgbV9wbGF5ZXIt
PnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1fd2ViQ29yZVBsYXllci0+dGltZUNoYW5nZWQoKTsK
ICAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpwb3NpdGlvbkNoYW5nZWQocWludDY0KQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdDo6cG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkKIHsKICAgICAvLyBPbmx5IHByb3BvZ2F0ZSB0
aGlzIGV2ZW50IGlmIHdlIGFyZSBzZWVraW5nCiAgICAgaWYgKG1faXNTZWVraW5nICYmIG1fcXVl
dWVkU2VlayA9PSAtMSkgewotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAg
ICAgbV93ZWJDb3JlUGxheWVyLT50aW1lQ2hhbmdlZCgpOwogICAgICAgICBtX2lzU2Vla2luZyA9
IGZhbHNlOwogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uQ2hh
bmdlZChxaW50NjQpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpidWZmZXJTdGF0dXNDaGFu
Z2VkKGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF0OjpkdXJhdGlvbkNoYW5nZWQocWludDY0KQogewotICAgIG1fcGxheWVyLT5kdXJh
dGlvbkNoYW5nZWQoKTsKKyAgICBtX3dlYkNvcmVQbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dm9sdW1lQ2hhbmdlZChpbnQgdm9sdW1lKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6dm9sdW1lQ2hhbmdlZChpbnQgdm9sdW1lKQogewot
ICAgIG1fcGxheWVyLT52b2x1bWVDaGFuZ2VkKHN0YXRpY19jYXN0PGZsb2F0Pih2b2x1bWUpIC8g
MTAwLjApOworICAgIG1fd2ViQ29yZVBsYXllci0+dm9sdW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxm
bG9hdD4odm9sdW1lKSAvIDEwMC4wKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om11
dGVkQ2hhbmdlZChib29sIG11dGVkKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6bXV0ZWRD
aGFuZ2VkKGJvb2wgbXV0ZWQpCiB7Ci0gICAgbV9wbGF5ZXItPm11dGVDaGFuZ2VkKG11dGVkKTsK
KyAgICBtX3dlYkNvcmVQbGF5ZXItPm11dGVDaGFuZ2VkKG11dGVkKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0
Ojp1cGRhdGVTdGF0ZXMoKQogewogICAgIC8vIFN0b3JlIHRoZSBvbGQgc3RhdGVzIHNvIHRoYXQg
d2UgY2FuIGRldGVjdCBhIGNoYW5nZSBhbmQgcmFpc2UgY2hhbmdlIGV2ZW50cwogICAgIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CkBA
IC00OTksMTMgKzU2MywxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVz
KCkKICAgICAvLyBCcmVha2luZyB0aGlzIGludmFyaWFudCB3aWxsIGNhdXNlIHRoZSByZXNvdXJj
ZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGZvciBtdWx0aXBsZQogICAgIC8vIHNvdXJjZXMgdG8gZmFp
bC4KICAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpCi0gICAgICAgIG1fcGxh
eWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CiAKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0
YXRlKQotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgICAgICBt
X3dlYkNvcmVQbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoc2l6
ZSA9PSBtX2N1cnJlbnRTaXplKQogICAgICAgICByZXR1cm47CkBAIC01MTQsMTUgKzU3OCwzMiBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQog
ICAgIG1fdmlkZW9JdGVtLT5zZXRTaXplKFFTaXplRihRU2l6ZShzaXplKSkpOwogfQogCi1JbnRT
aXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAorSW50U2l6ZSBNZWRp
YVBsYXllclByaXZhdGVRdDo6bmF0dXJhbFNpemUoKSBjb25zdAogewotICAgIGlmICghaGFzVmlk
ZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgIGlm
ICghaGFzVmlkZW8oKSB8fCAgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0
YSkgewogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworICAgIH0KIAotICAgIHJldHVybiBJbnRT
aXplKG1fdmlkZW9JdGVtLT5uYXRpdmVTaXplKCkudG9TaXplKCkpOworICAgIHJldHVybiBtX25h
dHVyYWxTaXplOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZW1vdmVWaWRlb0l0
ZW0oKQoreworICAgIG1fb2xkTmF0dXJhbFNpemUgPSBtX25hdHVyYWxTaXplOworICAgIG1fbWVk
aWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KHN0YXRpY19jYXN0PFFHcmFwaGljc1ZpZGVvSXRlbSo+
KDApKTsKKyAgICBtX3ZpZGVvU2NlbmUtPnJlbW92ZUl0ZW0obV92aWRlb0l0ZW0pOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVzdG9yZVZp
ZGVvSXRlbSgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRlb0l0
ZW0pOworICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CisgICAgLy8gRklY
TUU6IGEgcXRtb2JpbGl0eSBidWcsIG5lZWQgdG8gcmVzZXQgdGhlIHNpemUgd2hlbiByZXN0b3Jl
IHRoZSB2aWRlb2l0ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBpcyAwCisgICAgLy8gaHR0cDovL2J1
Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVE1PQklMSVRZLTk3MQorICAgIG5hdGl2ZVNp
emVDaGFuZ2VkKFFTaXplKG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9j
b21wb3NpdGVkKQpAQCAtNTM0LDIyICs2MTUsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBpZiAoIW1faXNWaXNpYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBHcmFiIHRoZSBw
YWludGVyIGFuZCB3aWRnZXQKICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwotCi0gICAgLy8gUmVuZGVyIHRoZSB2aWRlbwogICAgIG1fdmlkZW9TY2Vu
ZS0+cmVuZGVyKHBhaW50ZXIsIFFSZWN0RihRUmVjdChyZWN0KSksIG1fdmlkZW9JdGVtLT5zY2Vu
ZUJvdW5kaW5nUmVjdCgpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQo
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVwYWludCgpCiB7Ci0gICAgbV9wbGF5ZXIt
PnJlcGFpbnQoKTsKKyAgICBtX3dlYkNvcmVQbGF5ZXItPnJlcGFpbnQoKTsKIH0KIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjphY2Nl
bGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0
OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgYm9vbCBjb21wb3Np
dGVkID0gbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUmVuZGVyaW5n
Q2FuQmVBY2NlbGVyYXRlZChtX3BsYXllcik7CisgICAgTWVkaWFQbGF5ZXJDbGllbnQqIGNsaWVu
dCA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKTsKKyAgICBib29sIGNvbXBv
c2l0ZWQgPSBjbGllbnQtPm1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZChtX3dl
YkNvcmVQbGF5ZXIpOwogICAgIGlmIChjb21wb3NpdGVkID09IG1fY29tcG9zaXRlZCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC01NjAsMTIgKzYzOSwyMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQogICAgICAgICBtX3ZpZGVvU2Nl
bmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogfQogCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXll
clByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5
ZXJQcml2YXRlUXQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbXBv
c2l0ZWQgPyBtX3ZpZGVvSXRlbSA6IDA7CiB9CisKICNlbmRpZgogCitQbGF0Zm9ybU1lZGlhIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0OjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sKKyAgICBQbGF0Zm9y
bU1lZGlhIHBtOworICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlw
ZTsKKyAgICBwbS5tZWRpYS5xdE1lZGlhUGxheWVyID0gY29uc3RfY2FzdDxNZWRpYVBsYXllclBy
aXZhdGVRdCo+KHRoaXMpOworICAgIHJldHVybiBwbTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjaW5jbHVkZSAibW9jX01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCIKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAppbmRl
eCBkNzI0MDRjLi4wOWJiNDNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCkBAIC0zMywxMyArMzMsMTMgQEAgUVRfRU5EX05B
TUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsK
K2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogCiAgICAgUV9PQkpFQ1QKIAogcHVibGljOgogICAg
IHN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0ZShNZWRpYVBsYXllciog
cGxheWVyKTsKLSAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CisgICAgfk1lZGlhUGxheWVyUHJp
dmF0ZVF0KCk7CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5n
aW5lUmVnaXN0cmFyKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0
PFN0cmluZz4mKTsKQEAgLTUwLDEwICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBdWRp
bygpIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKTsKKyAgICB2b2lk
IGNvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgcmVzdW1lTG9hZCgpOwog
ICAgIHZvaWQgY2FuY2VsTG9hZCgpOwogCiAgICAgdm9pZCBwbGF5KCk7CiAgICAgdm9pZCBwYXVz
ZSgpOworICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpOwogCiAgICAgYm9vbCBwYXVzZWQoKSBjb25z
dDsKICAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKQEAgLTY4LDYgKzcxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldE11dGVkKGJvb2wp
OwogCisgICAgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKTsKKwogICAgIE1l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CiAgICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCkBAIC04Myw3ICs4OCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIC8vIHdoZXRoZXIgYWNj
ZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgbWVkaWEgZW5naW5lIGZvciB0
aGUgY3VycmVudCBtZWRpYS4KQEAgLTkzLDYgKzk4LDEwIEBAIHB1YmxpYzoKICAgICAvLyByZXR1
cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSBkaXJlY3RseSBjb21wb3NpdGVkIHZpYSBHcmFwaGlj
c0xheWVyUXQgKGVzc2VudGlhbGx5IGEgUUdyYXBoaWNzSXRlbSopCiAgICAgdmlydHVhbCBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKKyAgICB2aXJ0dWFsIFBs
YXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworICAgIFFNZWRpYVBsYXllciogbWVk
aWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUGxheWVyOyB9CisgICAgdm9pZCByZW1v
dmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lkIHJlc3RvcmVWaWRlb0l0ZW0oKTsKIAogcHJpdmF0ZSBz
bG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3Rh
dHVzKTsKQEAgLTEwMyw2ICsxMTIsNyBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgc2Vla1Rp
bWVvdXQoKTsKICAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpOwogICAgIHZvaWQgZHVy
YXRpb25DaGFuZ2VkKHFpbnQ2NCk7CisgICAgdm9pZCBidWZmZXJTdGF0dXNDaGFuZ2VkKGludCk7
CiAgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CiAgICAgdm9pZCBtdXRlZENoYW5nZWQoYm9v
bCk7CiAgICAgdm9pZCByZXBhaW50KCk7CkBAIC0xMTEsOSArMTIxLDkgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogCiBwcml2YXRlOgotICAgIE1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciopOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KE1lZGlhUGxheWVyKik7
CiAKLSAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgTWVkaWFQbGF5ZXIqIG1fd2ViQ29y
ZVBsYXllcjsKICAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7CiAgICAgUU1lZGlhUGxh
eWVyQ29udHJvbCogbV9tZWRpYVBsYXllckNvbnRyb2w7CiAgICAgUUdyYXBoaWNzVmlkZW9JdGVt
KiBtX3ZpZGVvSXRlbTsKQEAgLTEyMywxMCArMTMzLDE1IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAKICAgICBJbnRTaXplIG1f
Y3VycmVudFNpemU7CisgICAgSW50U2l6ZSBtX25hdHVyYWxTaXplOworICAgIEludFNpemUgbV9v
bGROYXR1cmFsU2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwogICAgIGJvb2wgbV9pc1NlZWtp
bmc7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZWQ7CiAgICAgcWludDY0IG1fcXVldWVkU2VlazsKKyAg
ICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7CisgICAgYm9vbCBtX2RlbGF5aW5nTG9h
ZDsKKyAgICBTdHJpbmcgbV9tZWRpYVVybDsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwCmluZGV4IGRiYTc5MDIuLjUzMDg3MDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0LmNwcApAQCAtOTg5LDcgKzk4OSwxMiBAQCBDb250cm9sUGFydCBSZW5kZXJU
aGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mIG9wdGlv
biwgUgogCiBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzUXRVc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIFN0
cmluZyByZXN1bHQgPSBTdHJpbmcobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKG1lZGlhQ29udHJvbHNRdFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKworICAgIGlmICht
X3BhZ2UgJiYgbV9wYWdlLT5jaHJvbWUoKS0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpKQorICAgICAgICByZXN1bHQgKz0gU3RyaW5nKG1lZGlhQ29udHJvbHNRdEZ1bGxzY3Jl
ZW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVz
ZXJBZ2VudFN0eWxlU2hlZXQpKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEhlbHBl
ciBjbGFzcyB0byB0cmFuc2Zvcm0gdGhlIHBhaW50ZXIncyB3b3JsZCBtYXRyaXggdG8gdGhlIG9i
amVjdCdzIGNvbnRlbnQgYXJlYSwgc2NhbGVkIHRvIDAsMCwxMDAsMTAwCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHAKaW5kZXggNjEwZmI1Zi4uMzk3ODhlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZGVvLmNwcApAQCAtNTAsMjUgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFJl
bmRlclZpZGVvOjpSZW5kZXJWaWRlbyhIVE1MVmlkZW9FbGVtZW50KiB2aWRlbykKICAgICA6IFJl
bmRlck1lZGlhKHZpZGVvKQogewotICAgIGlmICh2aWRlby0+cGxheWVyKCkgJiYgdmlkZW8tPnJl
YWR5U3RhdGUoKSA+PSBIVE1MVmlkZW9FbGVtZW50OjpIQVZFX01FVEFEQVRBKQotICAgICAgICBz
ZXRJbnRyaW5zaWNTaXplKHZpZGVvLT5wbGF5ZXIoKS0+bmF0dXJhbFNpemUoKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIFdoZW4gdGhlIG5hdHVyYWwgc2l6ZSBvZiB0aGUgdmlkZW8gaXMgdW5h
dmFpbGFibGUsIHdlIHVzZSB0aGUgcHJvdmlkZWQKLSAgICAgICAgLy8gd2lkdGggYW5kIGhlaWdo
dCBhdHRyaWJ1dGVzIG9mIHRoZSB2aWRlbyBlbGVtZW50IGFzIHRoZSBpbnRyaW5zaWMgc2l6ZSB1
bnRpbAotICAgICAgICAvLyBiZXR0ZXIgdmFsdWVzIGJlY29tZSBhdmFpbGFibGUuIElmIHRoZXNl
IGF0dHJpYnV0ZXMgYXJlIG5vdCBzZXQsIHdlIGZhbGwgYmFjawotICAgICAgICAvLyB0byBhIGRl
ZmF1bHQgdmlkZW8gc2l6ZSAoMzAweDE1MCkuCi0gICAgICAgIGlmICh2aWRlby0+aGFzQXR0cmli
dXRlKHdpZHRoQXR0cikgJiYgdmlkZW8tPmhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkKLSAgICAg
ICAgICAgIHNldEludHJpbnNpY1NpemUoSW50U2l6ZSh2aWRlby0+d2lkdGgoKSwgdmlkZW8tPmhl
aWdodCgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKHZpZGVvLT5vd25lckRvY3VtZW50KCkgJiYgdmlk
ZW8tPm93bmVyRG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIC8v
IFZpZGVvIGluIHN0YW5kYWxvbmUgbWVkaWEgZG9jdW1lbnRzIHNob3VsZCBub3QgdXNlIHRoZSBk
ZWZhdWx0IDMwMHgxNTAKLSAgICAgICAgICAgIC8vIHNpemUgc2luY2UgdGhleSBhbHNvIGhhdmUg
YXVkaW8gdGhyb3duIGF0IHRoZW0uIEJ5IHNldHRpbmcgdGhlIGludHJpbnNpYwotICAgICAgICAg
ICAgLy8gc2l6ZSB0byAzMDB4MSB0aGUgdmlkZW8gd2lsbCByZXNpemUgaXRzZWxmIGluIHRoZXNl
IGNhc2VzLCBhbmQgYXVkaW8gd2lsbAotICAgICAgICAgICAgLy8gaGF2ZSB0aGUgY29ycmVjdCBo
ZWlnaHQgKGl0IG5lZWRzIHRvIGJlID4gMCBmb3IgY29udHJvbHMgdG8gcmVuZGVyIHByb3Blcmx5
KS4KLSAgICAgICAgICAgIHNldEludHJpbnNpY1NpemUoSW50U2l6ZShkZWZhdWx0U2l6ZSgpLndp
ZHRoKCksIDEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRJbnRy
aW5zaWNTaXplKGRlZmF1bHRTaXplKCkpOwotICAgIH0KKyAgICBzZXRJbnRyaW5zaWNTaXplKGNh
bGN1bGF0ZUludHJpbnNpY1NpemUoKSk7CiB9CiAKIFJlbmRlclZpZGVvOjp+UmVuZGVyVmlkZW8o
KQpAQCAtOTIsMjQgKzc0LDYwIEBAIHZvaWQgUmVuZGVyVmlkZW86OmludHJpbnNpY1NpemVDaGFu
Z2VkKCkKIHsKICAgICBpZiAodmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFn
ZSgpKQogICAgICAgICBSZW5kZXJNZWRpYTo6aW50cmluc2ljU2l6ZUNoYW5nZWQoKTsKLSAgICB2
aWRlb1NpemVDaGFuZ2VkKCk7IAorICAgIHVwZGF0ZUludHJpbnNpY1NpemUoKTsgCiB9CiAKLQot
dm9pZCBSZW5kZXJWaWRlbzo6dmlkZW9TaXplQ2hhbmdlZCgpCit2b2lkIFJlbmRlclZpZGVvOjp1
cGRhdGVJbnRyaW5zaWNTaXplKCkKIHsKLSAgICBpZiAoIXBsYXllcigpKQorICAgIEludFNpemUg
c2l6ZSA9IGNhbGN1bGF0ZUludHJpbnNpY1NpemUoKTsKKyAgICBzaXplLnNjYWxlKHN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSk7CisKKyAgICAvLyBOZXZlciBzZXQgdGhlIGVsZW1lbnQgc2l6ZSB0
byB6ZXJvIHdoZW4gaW4gYSBtZWRpYSBkb2N1bWVudC4KKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkg
JiYgbm9kZSgpLT5vd25lckRvY3VtZW50KCkgJiYgbm9kZSgpLT5vd25lckRvY3VtZW50KCktPmlz
TWVkaWFEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgSW50U2l6ZSBzaXplID0gcGxh
eWVyKCktPm5hdHVyYWxTaXplKCk7Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGlmIChub2RlKCktPm93bmVyRG9jdW1lbnQoKSAmJiBub2RlKCktPm93bmVyRG9jdW1lbnQoKS0+
aXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChz
aXplICE9IGludHJpbnNpY1NpemUoKSkgewotICAgICAgICBzZXRJbnRyaW5zaWNTaXplKHNpemUp
OwotICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7Ci0gICAgICAgIHNldE5lZWRzTGF5
b3V0KHRydWUpOwotICAgIH0KKworICAgIGlmIChzaXplID09IGludHJpbnNpY1NpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0SW50cmluc2ljU2l6ZShzaXplKTsKKyAgICBzZXRQcmVm
V2lkdGhzRGlydHkodHJ1ZSk7CisgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7Cit9CisgICAgCitJ
bnRTaXplIFJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCkKK3sKKyAgICBIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbyA9IHZpZGVvRWxlbWVudCgpOworICAgIAorICAgIC8vIFNwZWMg
dGV4dCBmcm9tIDQuOC42CisgICAgLy8KKyAgICAvLyBUaGUgaW50cmluc2ljIHdpZHRoIG9mIGEg
dmlkZW8gZWxlbWVudCdzIHBsYXliYWNrIGFyZWEgaXMgdGhlIGludHJpbnNpYyB3aWR0aCAKKyAg
ICAvLyBvZiB0aGUgdmlkZW8gcmVzb3VyY2UsIGlmIHRoYXQgaXMgYXZhaWxhYmxlOyBvdGhlcndp
c2UgaXQgaXMgdGhlIGludHJpbnNpYyAKKyAgICAvLyB3aWR0aCBvZiB0aGUgcG9zdGVyIGZyYW1l
LCBpZiB0aGF0IGlzIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlzIDMwMCBDU1MgcGl4ZWxzLgor
ICAgIC8vCisgICAgLy8gVGhlIGludHJpbnNpYyBoZWlnaHQgb2YgYSB2aWRlbyBlbGVtZW50J3Mg
cGxheWJhY2sgYXJlYSBpcyB0aGUgaW50cmluc2ljIGhlaWdodCAKKyAgICAvLyBvZiB0aGUgdmlk
ZW8gcmVzb3VyY2UsIGlmIHRoYXQgaXMgYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgdGhlIGlu
dHJpbnNpYyAKKyAgICAvLyBoZWlnaHQgb2YgdGhlIHBvc3RlciBmcmFtZSwgaWYgdGhhdCBpcyBh
dmFpbGFibGU7IG90aGVyd2lzZSBpdCBpcyAxNTAgQ1NTIHBpeGVscy4KKyAgICAKKyAgICBpZiAo
cGxheWVyKCkgJiYgdmlkZW8tPnJlYWR5U3RhdGUoKSA+PSBIVE1MVmlkZW9FbGVtZW50OjpIQVZF
X01FVEFEQVRBKQorICAgICAgICByZXR1cm4gcGxheWVyKCktPm5hdHVyYWxTaXplKCk7CisKKyAg
ICBpZiAodmlkZW8tPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpICYmICFtX2NhY2hlZEltYWdl
U2l6ZS5pc0VtcHR5KCkgJiYgIWVycm9yT2NjdXJyZWQoKSkgIAorICAgICAgICByZXR1cm4gbV9j
YWNoZWRJbWFnZVNpemU7CisKKyAgICAvLyBXaGVuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIHZp
ZGVvIGlzIHVuYXZhaWxhYmxlLCB3ZSB1c2UgdGhlIHByb3ZpZGVkCisgICAgLy8gd2lkdGggYW5k
IGhlaWdodCBhdHRyaWJ1dGVzIG9mIHRoZSB2aWRlbyBlbGVtZW50IGFzIHRoZSBpbnRyaW5zaWMg
c2l6ZSB1bnRpbAorICAgIC8vIGJldHRlciB2YWx1ZXMgYmVjb21lIGF2YWlsYWJsZS4gCisgICAg
aWYgKHZpZGVvLT5oYXNBdHRyaWJ1dGUod2lkdGhBdHRyKSAmJiB2aWRlby0+aGFzQXR0cmlidXRl
KGhlaWdodEF0dHIpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSh2aWRlby0+d2lkdGgoKSwgdmlk
ZW8tPmhlaWdodCgpKTsKKworICAgIC8vIDx2aWRlbz4gaW4gc3RhbmRhbG9uZSBtZWRpYSBkb2N1
bWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlIGRlZmF1bHQgMzAweDE1MAorICAgIC8vIHNpemUgc2lu
Y2UgdGhleSBhbHNvIGhhdmUgYXVkaW8tb25seSBmaWxlcy4gQnkgc2V0dGluZyB0aGUgaW50cmlu
c2ljCisgICAgLy8gc2l6ZSB0byAzMDB4MSB0aGUgdmlkZW8gd2lsbCByZXNpemUgaXRzZWxmIGlu
IHRoZXNlIGNhc2VzLCBhbmQgYXVkaW8gd2lsbAorICAgIC8vIGhhdmUgdGhlIGNvcnJlY3QgaGVp
Z2h0IChpdCBuZWVkcyB0byBiZSA+IDAgZm9yIGNvbnRyb2xzIHRvIHJlbmRlciBwcm9wZXJseSku
CisgICAgaWYgKHZpZGVvLT5vd25lckRvY3VtZW50KCkgJiYgdmlkZW8tPm93bmVyRG9jdW1lbnQo
KS0+aXNNZWRpYURvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKGRlZmF1bHRTaXpl
KCkud2lkdGgoKSwgMSk7CisKKyAgICByZXR1cm4gZGVmYXVsdFNpemUoKTsKIH0KIAogdm9pZCBS
ZW5kZXJWaWRlbzo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciBuZXdJbWFnZSwgY29uc3Qg
SW50UmVjdCogcmVjdCkKQEAgLTExNywxMCArMTM1LDE0IEBAIHZvaWQgUmVuZGVyVmlkZW86Omlt
YWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIgbmV3SW1hZ2UsIGNvbnN0IEludFJlY3QqIHJlY3Qp
CiAgICAgUmVuZGVyTWVkaWE6OmltYWdlQ2hhbmdlZChuZXdJbWFnZSwgcmVjdCk7CiAKICAgICAv
LyBDYWNoZSB0aGUgaW1hZ2UgaW50cmluc2ljIHNpemUgc28gd2UgY2FuIGNvbnRpbnVlIHRvIHVz
ZSBpdCB0byBkcmF3IHRoZSBpbWFnZSBjb3JyZWN0bHkKLSAgICAvLyBldmVuIGFmdGVyIHdlIGtu
b3cgdGhlIHZpZGVvIGludHJpc2ljIHNpemUgYnV0IGFyZW4ndCBhYmxlIHRvIGRyYXcgdmlkZW8g
ZnJhbWVzIHlldAotICAgIC8vICh3ZSBkb24ndCB3YW50IHRvIHNjYWxlIHRoZSBwb3N0ZXIgdG8g
dGhlIHZpZGVvIHNpemUpLgorICAgIC8vIGV2ZW4gaWYgd2Uga25vdyB0aGUgdmlkZW8gaW50cmlu
c2ljIHNpemUgYnV0IGFyZW4ndCBhYmxlIHRvIGRyYXcgdmlkZW8gZnJhbWVzIHlldAorICAgIC8v
ICh3ZSBkb24ndCB3YW50IHRvIHNjYWxlIHRoZSBwb3N0ZXIgdG8gdGhlIHZpZGVvIHNpemUgd2l0
aG91dCBrZWVwaW5nIGFzcGVjdCByYXRpbykuCiAgICAgaWYgKHZpZGVvRWxlbWVudCgpLT5zaG91
bGREaXNwbGF5UG9zdGVySW1hZ2UoKSkKICAgICAgICAgbV9jYWNoZWRJbWFnZVNpemUgPSBpbnRy
aW5zaWNTaXplKCk7CisKKyAgICAvLyBUaGUgaW50cmluc2ljIHNpemUgaXMgbm93IHRoYXQgb2Yg
dGhlIGltYWdlLCBidXQgaW4gY2FzZSB3ZSBhbHJlYWR5IGhhZCB0aGUKKyAgICAvLyBpbnRyaW5z
aWMgc2l6ZSBvZiB0aGUgdmlkZW8gd2UgY2FsbCB0aGlzIGhlcmUgdG8gcmVzdG9yZSB0aGUgdmlk
ZW8gc2l6ZS4KKyAgICB1cGRhdGVJbnRyaW5zaWNTaXplKCk7CiB9CiAKIEludFJlY3QgUmVuZGVy
VmlkZW86OnZpZGVvQm94KCkgY29uc3QKQEAgLTE1Niw2ICsxNzgsMTEgQEAgSW50UmVjdCBSZW5k
ZXJWaWRlbzo6dmlkZW9Cb3goKSBjb25zdAogICAgIHJldHVybiByZW5kZXJCb3g7CiB9CiAgICAg
Citib29sIFJlbmRlclZpZGVvOjpzaG91bGREaXNwbGF5VmlkZW8oKSBjb25zdAoreworICAgIHJl
dHVybiAhdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpOworfQorCiB2
b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKIHsKICAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIgPSBwbGF5ZXIoKTsK
QEAgLTIwMCw2ICsyMjcsOCBAQCB2b2lkIFJlbmRlclZpZGVvOjp1cGRhdGVGcm9tRWxlbWVudCgp
CiAKIHZvaWQgUmVuZGVyVmlkZW86OnVwZGF0ZVBsYXllcigpCiB7CisgICAgdXBkYXRlSW50cmlu
c2ljU2l6ZSgpOworCiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7CiAg
ICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVv
LmgKaW5kZXggYmIyYjA1Yy4uMmEzOWMxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlkZW8uaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCkBAIC00
MCw3ICs0MCw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJWaWRlbyhIVE1MVmlkZW9FbGVtZW50Kik7
CiAgICAgdmlydHVhbCB+UmVuZGVyVmlkZW8oKTsKIAotICAgIHZvaWQgdmlkZW9TaXplQ2hhbmdl
ZCgpOwogICAgIEludFJlY3QgdmlkZW9Cb3goKSBjb25zdDsKIAogICAgIHN0YXRpYyBJbnRTaXpl
IGRlZmF1bHRTaXplKCk7CkBAIC01MCwxMSArNDksMTYgQEAgcHVibGljOgogICAgIHZvaWQgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKICNlbmRpZgogCisgICAgdmlydHVhbCBi
b29sIHNob3VsZERpc3BsYXlWaWRlbygpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIGlubGluZSBIVE1MVmlkZW9FbGVtZW50KiB2
aWRlb0VsZW1lbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hh
bmdlZCgpOworICAgIEludFNpemUgY2FsY3VsYXRlSW50cmluc2ljU2l6ZSgpOworICAgIHZvaWQg
dXBkYXRlSW50cmluc2ljU2l6ZSgpOworCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChX
cmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJWaWRlbyI7IH0KZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9XZWJLaXQvcXQvQXBp
L3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCmluZGV4IDJjZWFhYzEuLmEzZGI5Y2IgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKKysrIGIvV2ViS2l0L3F0
L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5jbHVk
ZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAm
JiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAogY2xhc3Mg
UVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGlyZWN0aW9u
KSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9W
SURFTworY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigp
IHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZp
cnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgPSAw
OworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBR
X1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpID0gMDsKK307CisjZW5kaWYK
KwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjQsNyArMTQ0
LDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAgICAgIE5vdGlm
aWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJhY3Rpb24KKyAg
ICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyCiAg
ICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0
ZW5zaW9uKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcAppbmRleCA0NmNiY2IyLi4yYmJhNjE2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKQEAgLTY5LDExICs2OSwyMiBAQAogI2luY2x1ZGUgPHF0
ZXh0ZG9jdW1lbnQuaD4KICNpbmNsdWRlIDxxdG9vbHRpcC5oPgogCisjaWYgRU5BQkxFKFZJREVP
KQorI2luY2x1ZGUgIkZ1bGxTY3JlZW5WaWRlb1F0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudC5oIiAKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVt
ZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKyNlbmRpZiAKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBDaHJvbWVDbGllbnRRdDo6Q2hyb21lQ2xpZW50UXQoUVdlYlBh
Z2UqIHdlYlBhZ2UpCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKICAgICAsIG1fZXZlbnRMb29w
KDApCisjaWYgRU5BQkxFKFZJREVPKQorICAgICwgbV9mdWxsU2NyZWVuVmlkZW8oMCkKKyNlbmRp
ZgogewogICAgIHRvb2xCYXJzVmlzaWJsZSA9IHN0YXR1c0JhclZpc2libGUgPSBtZW51QmFyVmlz
aWJsZSA9IHRydWU7CiB9CkBAIC04Miw2ICs5MywxMCBAQCBDaHJvbWVDbGllbnRRdDo6fkNocm9t
ZUNsaWVudFF0KCkKIHsKICAgICBpZiAobV9ldmVudExvb3ApCiAgICAgICAgIG1fZXZlbnRMb29w
LT5leGl0KCk7CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZGVsZXRlIG1fZnVsbFNjcmVlblZp
ZGVvOworI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNTk5LDYgKzYxNCw1NCBAQCBJbnRSZWN0IENocm9tZUNs
aWVudFF0Ojp2aXNpYmxlUmVjdEZvclRpbGVkQmFja2luZ1N0b3JlKCkgY29uc3QKIH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKFZJREVPKQorRnVsbFNjcmVlblZpZGVvUXQqIENocm9tZUNsaWVudFF0
OjpmdWxsU2NyZWVuVmlkZW8oKQoreworICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW8pCisgICAg
ICAgIG1fZnVsbFNjcmVlblZpZGVvID0gbmV3IEZ1bGxTY3JlZW5WaWRlb1F0KHRoaXMpOworICAg
IHJldHVybiBtX2Z1bGxTY3JlZW5WaWRlbzsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6c3Vw
cG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAm
JiBmdWxsU2NyZWVuVmlkZW8oKS0+aXNWYWxpZCgpOworfQorCitib29sIENocm9tZUNsaWVudFF0
OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkKK3sKKyAgICByZXR1cm4gZnVs
bFNjcmVlblZpZGVvKCktPnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRRdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRl
b1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOworCisgICAgQVNTRVJUKHBsYXRm
b3JtTWVkaWEudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSk7CisgICAg
aWYgKHBsYXRmb3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlw
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZ1bGxTY3JlZW5WaWRlbygpLT5lbnRlckZ1
bGxTY3JlZW5Gb3JOb2RlKG5vZGUpOworfQorCit2b2lkIENocm9tZUNsaWVudFF0OjpleGl0RnVs
bHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAg
ICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVk
aWEoKTsKKworICAgIEFTU0VSVChwbGF0Zm9ybU1lZGlhLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6
UXRNZWRpYVBsYXllclR5cGUpOworICAgIGlmIChwbGF0Zm9ybU1lZGlhLnR5cGUgIT0gUGxhdGZv
cm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZ1bGxT
Y3JlZW5WaWRlbygpLT5leGl0RnVsbFNjcmVlbkZvck5vZGUobm9kZSk7Cit9IAorI2VuZGlmCisK
IFF0QWJzdHJhY3RXZWJQb3B1cCogQ2hyb21lQ2xpZW50UXQ6OmNyZWF0ZVNlbGVjdFBvcHVwKCkK
IHsKICAgICBRdEFic3RyYWN0V2ViUG9wdXAqIHJlc3VsdCA9IG1fcGxhdGZvcm1QbHVnaW4uY3Jl
YXRlU2VsZWN0SW5wdXRNZXRob2QoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5oIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmgKaW5kZXggMzZiMDg4Ny4uMjc4YWFjZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAgIGNsYXNzIFF0QWJzdHJhY3RXZWJQ
b3B1cDsKICAgICBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHM7CisgICAgY2xhc3MgRnVsbFNjcmVl
blZpZGVvUXQ7CiAKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdCA6IHB1YmxpYyBDaHJvbWVDbGll
bnQKICAgICB7CkBAIC0xNTYsNiArMTU3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIG5lZWRUb3VjaEV2ZW50cyhib29sKSB7IH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKFZJREVPKQorICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9y
Tm9kZShjb25zdCBOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5G
b3JOb2RlKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9k
ZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRl
b1BsYXliYWNrKCk7CisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1F0KiBmdWxsU2NyZWVuVmlkZW8o
KTsKKyNlbmRpZgorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQ
YXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29u
Rm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCkBAIC0xODMs
NiArMTkyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHN0YXR1c0JhclZp
c2libGU7CiAgICAgICAgIGJvb2wgbWVudUJhclZpc2libGU7CiAgICAgICAgIFFFdmVudExvb3Aq
IG1fZXZlbnRMb29wOworI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAgRnVsbFNjcmVlblZpZGVv
UXQqIG1fZnVsbFNjcmVlblZpZGVvOworI2VuZGlmCiAKICAgICAgICAgUXRQbGF0Zm9ybVBsdWdp
biBtX3BsYXRmb3JtUGx1Z2luOwogICAgIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggZTI1NWFhYS4uNTk4MDU1YSAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCisrKyBiL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcApAQCAtMTgzLDUgKzE4Mywx
MiBAQCBRV2ViVG91Y2hNb2RpZmllciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlVG91Y2hNb2Rp
ZmllcigpCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CiAgICAgcmV0
dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViVG91Y2hNb2RpZmllcio+KHAtPmNyZWF0ZUV4dGVuc2lv
bihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlRvdWNoSW50ZXJhY3Rpb24pKSA6IDA7CiB9CisjaWYg
RU5BQkxFKFZJREVPKQorUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIqIFF0UGxhdGZvcm1QbHVn
aW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbiogcCA9IHBsdWdpbigpOworICAgIHJldHVybiBwID8gc3RhdGljX2Nhc3Q8UVdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktpdFBsYXRmb3Jt
UGx1Z2luOjpGdWxsU2NyZWVuVmlkZW9QbGF5ZXIpKSA6IDA7Cit9CisjZW5kaWYKIAogfQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBiL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKaW5kZXggMjI2MDc1OS4u
YmVkM2MwNyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uaAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5o
CkBAIC0zMSw2ICszMSw5IEBAIGNsYXNzIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFz
cyBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXI7CiBjbGFzcyBRV2ViU2VsZWN0RGF0YTsKIGNsYXNz
IFFXZWJUb3VjaE1vZGlmaWVyOworI2lmIEVOQUJMRShWSURFTykKK2NsYXNzIFFXZWJGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyOworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEs
NyArNjQsMTAgQEAgcHVibGljOgogICAgIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNyZWF0
ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllciog
Y3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIoKTsKICAgICBRV2ViVG91Y2hNb2RpZmllciogY3Jl
YXRlVG91Y2hNb2RpZmllcigpOwotCisjaWYgRU5BQkxFKFZJREVPKQorICAgIFFXZWJGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYK
KyAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAg
Yi9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAppbmRleCBk
MDI5YjczLi5kMWUxYTU2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmNwcAorKysgYi9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcApAQCAtMTksNyArMTksOSBAQAogICovCiAjaW5jbHVkZSAiV2ViUGx1
Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAjaW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5j
bHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0PgogI2luY2x1ZGUgPFFMaXN0
V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KQEAgLTIwOCw2ICsyMTAsNzEgQEAgTXVs
dGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVTZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2Vs
ZWN0RGF0YSYgZGF0YSkKICAgICByZXNpemUoc2l6ZSgpLndpZHRoKCksIHZpc2libGVJdGVtQ291
bnQgKiBnTWFlbW9MaXN0SXRlbVNpemUpOwogfQogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8p
ICYmIEVOQUJMRV9WSURFTworRnVsbFNjcmVlblZpZGVvV2lkZ2V0OjpGdWxsU2NyZWVuVmlkZW9X
aWRnZXQoUU1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBRVmlkZW9XaWRnZXQoKQorICAgICwg
bV9tZWRpYVBsYXllcihwbGF5ZXIpCit7CisgICAgUV9BU1NFUlQobV9tZWRpYVBsYXllcik7CisK
KyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0
cHV0KHRoaXMpOworfQorCitib29sIEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6ZXZlbnQoUUV2ZW50
KiBldikKK3sKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSAgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENs
aWNrKSB7CisgICAgICAgIGVtaXQgZnVsbFNjcmVlbkNsb3NlZCgpOworICAgICAgICBldi0+YWNj
ZXB0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgcmV0dXJuIFFXaWRnZXQ6
OmV2ZW50KGV2KTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9XaWRnZXQ6OmtleVByZXNzRXZl
bnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfU3BhY2Up
IHsKKyAgICAgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQ
bGF5aW5nU3RhdGUpCisgICAgICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7CisgICAgICAgIGV2LT5h
Y2NlcHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworRnVsbFNjcmVlblZpZGVvSGFu
ZGxlcjo6RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCisgICAgOiBtX21lZGlhV2lkZ2V0KDApCit7
Cit9CisKK0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkK
K3sKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKK30KKworYm9vbCBGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1
bGxTY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgUV9BU1NFUlQocGxheWVyKTsK
KworICAgIG1fbWVkaWFXaWRnZXQgPSBuZXcgRnVsbFNjcmVlblZpZGVvV2lkZ2V0KHBsYXllcik7
CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoZnVsbFNjcmVlbkNsb3NlZCgpKSwg
dGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIG1fbWVkaWFXaWRnZXQtPnNo
b3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1
bGxTY3JlZW4oKQoreworICAgIG1fbWVkaWFXaWRnZXQtPmhpZGUoKTsKKyAgICBkZWxldGUgbV9t
ZWRpYVdpZGdldDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsKK30KKyNlbmRpZgorCiBib29sIFdl
YlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGV4dGVuc2lvbikgewpAQCAtMjE5LDYgKzI4NiwxMCBAQCBib29sIFdlYlBs
dWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKICNlbmRp
ZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAgcmV0dXJuIHRydWU7CisjaWYg
ZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworICAgIGNhc2UgRnVsbFNjcmVl
blZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzUsNiArMzA2LDEwIEBAIFFPYmpl
Y3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0
CiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246CiAgICAgICAgIHJldHVybiBuZXcg
VG91Y2hNb2RpZmllcigpOworI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklE
RU8KKyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0dXJuIG5ldyBG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmggYi9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmgKaW5kZXggMDI0M2Y1Ny4uMmUwZTY5MiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L2V4
YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCisrKyBiL1dlYktpdC9xdC9leGFtcGxl
cy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaApAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUg
IldlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgogCiAjaW5jbHVkZSA8UURpYWxvZz4KKyNpZiBk
ZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCisjaW5jbHVkZSA8UVZpZGVvV2lk
Z2V0PgorI2VuZGlmCiAKIGNsYXNzIFFMaXN0V2lkZ2V0SXRlbTsKIGNsYXNzIFFMaXN0V2lkZ2V0
OwpAQCAtOTQsNiArOTcsNDAgQEAgcHVibGljOgogICAgIH0KIH07CiAKKyNpZiBkZWZpbmVkKEVO
QUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBGdWxsU2NyZWVuVmlkZW9XaWRnZXQg
OiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxT
Y3JlZW5WaWRlb1dpZGdldChRTWVkaWFQbGF5ZXIqKTsKKyAgICB2aXJ0dWFsIH5GdWxsU2NyZWVu
VmlkZW9XaWRnZXQoKSB7fQorCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2Vk
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGV2ZW50KFFFdmVudCopOworICAgIHZvaWQga2V5
UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIqIG1f
bWVkaWFQbGF5ZXI7IC8vIG5vdCBvd25lZAorfTsKKworY2xhc3MgRnVsbFNjcmVlblZpZGVvSGFu
ZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgdmlydHVhbCB+RnVs
bFNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlk
ZW9QbGF5YmFjaygpIGNvbnN0OworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIGVudGVyRnVs
bFNjcmVlbihRTWVkaWFQbGF5ZXIqKTsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisKK3By
aXZhdGU6CisgICAgRnVsbFNjcmVlblZpZGVvV2lkZ2V0KiBtX21lZGlhV2lkZ2V0OyAvLyBvd25l
ZAorfTsKKyNlbmRpZgorCiBjbGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGlj
IFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogICAgIFFfT0JKRUNUCmRpZmYgLS1naXQgYS9XZWJL
aXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvIGIvV2ViS2l0
L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwppbmRleCA5Mjc1
NjY1Li5jMWE2NTgyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vcGxhdGZvcm1wbHVnaW4ucHJvCisrKyBiL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBs
dWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8KQEAgLTMsNiArMywxOSBAQCBUQVJHRVQgPSAkJHF0TGli
cmFyeVRhcmdldChwbGF0Zm9ybXBsdWdpbikKIFRFTVBMQVRFID0gbGliCiBDT05GSUcgKz0gcGx1
Z2luCiAKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxhYmxlCits
b2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2Ug
cmVxdWlyZSBRdE11bHRpbWVkaWEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89Likg
eworICAgIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICBD
T05GSUcgKz0gbW9iaWxpdHkKKyAgICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQorICAgICAg
ICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0wCisgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJ
REVPPTEKKyAgICB9Cit9CiBERVNURElSID0gJCRbUVRfSU5TVEFMTF9QTFVHSU5TXS93ZWJraXQK
IAogU09VUkNFUyArPSBcCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZv
cm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKaW5kZXggZjM4YThmYi4uMTJkYTJkZCAx
MDA2NDQKLS0tIGEvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0
Zm9ybXBsdWdpbi5oCisrKyBiL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9xd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5jbHVkZSA8UU9iamVj
dD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVf
VklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKIAogY2xhc3MgUVdlYlNlbGVj
dERhdGEKIHsKQEAgLTExMSw2ICsxMTQsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGlyZWN0aW9uKSBjb25zdCA9
IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworY2xh
c3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9P
QkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAg
dmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgYm9v
bCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgPSAwOworCitRX1NJ
R05BTFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgor
ICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpID0gMDsKK307CisjZW5kaWYKKwogY2xhc3Mg
UVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjAsNyArMTQwLDggQEAgcHVi
bGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAgICAgIE5vdGlmaWNhdGlvbnMs
CiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJhY3Rpb24KKyAgICAgICAgVG91
Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyCiAgICAgfTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBj
b25zdCA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>79079</attachid>
            <date>2011-01-15 15:02:47 -0800</date>
            <delta_ts>2011-01-16 09:41:29 -0800</delta_ts>
            <desc>Backport to webkit 2.2</desc>
            <filename>videobackport2.diff</filename>
            <type>application/octet-stream</type>
            <size>101716</size>
            <attacher name="Nancy Piedra">nancy.piedra</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IGMzN2UzMzMuLjY4MmI0NjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjcyLDYgKzI3Miw3IEBAIFNUWUxFU0hFRVRTX0VN
QkVEID0gXAogICAgICQkUFdEL2Nzcy92aWV3LXNvdXJjZS5jc3MgXAogICAgICQkUFdEL2Nzcy93
bWwuY3NzIFwKICAgICAkJFBXRC9jc3MvbWVkaWFDb250cm9scy5jc3MgXAorICAgICQkUFdEL2Nz
cy9tZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuLmNzcyBcCiAgICAgJCRQV0QvY3NzL21lZGlhQ29u
dHJvbHNRdC5jc3MgXAogICAgICQkUFdEL2Nzcy90aGVtZVF0Tm9MaXN0Ym94ZXMuY3NzIFwKICAg
ICAkJFBXRC9jc3MvdGhlbWVRdE1vYmlsZS5jc3MKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDllOTA0NDcuLjcwNWI2YzUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAt
MjU3NCw4ICsyNTc0LDEyIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKIAogICAgICAgICAhbGVz
c1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNik6Y29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBtdWx0
aW1lZGlhKSB7Ci0gICAgICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgKLSAgICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCisgICAgICAgICAgICBIRUFERVJTICs9
IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5oIFwKKyAgICAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnVsbFNjcmVlblZpZGVvUXQuaAorICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwIFwK
KyAgICAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNj
cmVlblZpZGVvUXQuY3BwCiAKICAgICAgICAgICAgIENPTkZJRyAqPSBtb2JpbGl0eQogICAgICAg
ICAgICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvdGhl
bWVRdE1vYmlsZS5jc3MgYi9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNzcwppbmRleCA4YjBj
NTQ4Li4zMWQ1MDMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNzcwor
KysgYi9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNzcwpAQCAtMTEzLDMgKzExMyw4IEBAIGlu
cHV0W3R5cGU9InVybCJdOmFjdGl2ZSwKIHRleHRhcmVhOmFjdGl2ZSB7CiAgICAgYmFja2dyb3Vu
ZDogQnV0dG9uU2hhZG93OwogfQorCit2aWRlbyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzAw
MDAwMDsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGQ3ZDAyMjcuLjBiOTM0MzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAg
LTQwNyw2ICs0MDcsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBL
VVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAjZW5kaWYKICAgICAsIG1fd2Vh
a1JlZmVyZW5jZShEb2N1bWVudFdlYWtSZWZlcmVuY2U6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1f
aWRBdHRyaWJ1dGVOYW1lKGlkQXR0cikKKyAgICAsIG1fbG9hZEV2ZW50RGVsYXlDb3VudCgwKQog
ewogICAgIG1fZG9jdW1lbnQgPSB0aGlzOwogCkBAIC01MTA3LDQgKzUxMDgsMTMgQEAgSW5zcGVj
dG9yQ29udHJvbGxlciogRG9jdW1lbnQ6Omluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdAogfQog
I2VuZGlmCiAKK3ZvaWQgRG9jdW1lbnQ6OmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKSAg
Cit7ICAKKyAgICBBU1NFUlQobV9sb2FkRXZlbnREZWxheUNvdW50KTsgIAorICAgIC0tbV9sb2Fk
RXZlbnREZWxheUNvdW50OyAgCisKKyAgICBpZiAoZnJhbWUoKSAmJiAhbV9sb2FkRXZlbnREZWxh
eUNvdW50KSAgCisgICAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7ICAK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMGI1NTYxMS4uZWI0MmNlNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0xMDI1LDYgKzEwMjUsMTEgQEAgcHVibGljOgogCiAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9pZEF0dHJpYnV0ZU5h
bWU7IH0KIAorICAgIC8vIFVzZWQgdG8gYWxsb3cgZWxlbWVudCB0aGF0IGxvYWRzIGRhdGEgd2l0
aG91dCBnb2luZyB0aHJvdWdoIGEgRnJhbWVMb2FkZXIgdG8gZGVsYXkgdGhlICdsb2FkJyBldmVu
dC4KKyAgICB2b2lkIGluY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKSB7ICsrbV9sb2FkRXZl
bnREZWxheUNvdW50OyB9CisgICAgdm9pZCBkZWNyZW1lbnRMb2FkRXZlbnREZWxheUNvdW50KCk7
CisgICAgYm9vbCBpc0RlbGF5aW5nTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sb2FkRXZl
bnREZWxheUNvdW50OyB9CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0
IEtVUkwmLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MKTsKIApAQCAtMTMwNiw2ICsxMzExLDgg
QEAgcHJpdmF0ZToKIAogICAgIFF1YWxpZmllZE5hbWUgbV9pZEF0dHJpYnV0ZU5hbWU7CiAKKyAg
ICBpbnQgbV9sb2FkRXZlbnREZWxheUNvdW50OworCiAgICAgVmlld3BvcnRBcmd1bWVudHMgbV92
aWV3cG9ydEFyZ3VtZW50czsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBm
NzVhOTkwLi45MTVkYWI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yOSwxNCAr
MjksMTQgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRy
aWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NIZWxwZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKICNp
bmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisjaW5j
bHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTQ5LDEyICs0OSwxMiBAQAog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTb3VyY2VFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKICNpbmNsdWRlICJNZWRpYURvY3VtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFFcnJvci5oIgog
I2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVk
ZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCkBAIC04MSw4ICs4MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDog
SFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisg
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIEFjdGl2ZURPTU9iamVj
dChkb2N1bWVudCwgdGhpcykKICAgICAsIG1fbG9hZFRpbWVyKHRoaXMsICZIVE1MTWVkaWFFbGVt
ZW50Ojpsb2FkVGltZXJGaXJlZCkKICAgICAsIG1fYXN5bmNFdmVudFRpbWVyKHRoaXMsICZIVE1M
TWVkaWFFbGVtZW50Ojphc3luY0V2ZW50VGltZXJGaXJlZCkKICAgICAsIG1fcHJvZ3Jlc3NFdmVu
dFRpbWVyKHRoaXMsICZIVE1MTWVkaWFFbGVtZW50Ojpwcm9ncmVzc0V2ZW50VGltZXJGaXJlZCkK
QEAgLTEwOCwxMSArMTA5LDExIEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICNlbmRpZgogICAg
ICwgbV9yZXN0cmljdGlvbnMoTm9SZXN0cmljdGlvbnMpCiAgICAgLCBtX3ByZWxvYWQoTWVkaWFQ
bGF5ZXI6OkF1dG8pCi0gICAgLCBtX3BsYXlpbmcoZmFsc2UpCisgICAgLCBtX2Rpc3BsYXlNb2Rl
KFVua25vd24pCiAgICAgLCBtX3Byb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKDApCisgICAg
LCBtX3BsYXlpbmcoZmFsc2UpCiAgICAgLCBtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydChm
YWxzZSkKLSAgICAsIG1fcHJvY2Vzc2luZ0xvYWQoZmFsc2UpCi0gICAgLCBtX2RlbGF5aW5nVGhl
TG9hZEV2ZW50KGZhbHNlKQorICAgICwgbV9zaG91bGREZWxheUxvYWRFdmVudChmYWxzZSkKICAg
ICAsIG1faGF2ZUZpcmVkTG9hZGVkRGF0YShmYWxzZSkKICAgICAsIG1faW5BY3RpdmVEb2N1bWVu
dCh0cnVlKQogICAgICwgbV9hdXRvcGxheWluZyh0cnVlKQpAQCAtMTMyLDE0ICsxMzMsMTUgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgICwgbV9sb2FkSW5pdGlhdGVkQnlVc2VyR2VzdHVy
ZShmYWxzZSkKICAgICAsIG1fY29tcGxldGVseUxvYWRlZChmYWxzZSkKIHsKLSAgICBkb2N1bWVu
dCgpLT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICBk
b2N1bWVudCgpLT5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKHRoaXMpOworICAgIGRv
Y3VtZW50LT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICBkb2N1bWVudC0+cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKIH0KIAog
SFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQoKQogewogICAgIGlmIChtX2lzV2Fp
dGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNl
KTsKICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJh
Y2tzKHRoaXMpOwogICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxi
YWNrcyh0aGlzKTsKIH0KQEAgLTE0OCw2ICsxNTAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRp
bE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcih0aGlzKTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlz
KTsKICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhp
cyk7CiAgICAgSFRNTEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CkBAIC0x
NTcsNiArMTYwLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCkKIHsKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAg
ICAgIGRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICBpZiAo
bV9yZWFkeVN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEpCisgICAgICAgIHNldFNob3VsZERlbGF5
TG9hZEV2ZW50KHRydWUpOwogICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3Rp
dmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwogICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yTWVkaWFW
b2x1bWVDYWxsYmFja3ModGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKQEAgLTMwNCw3ICszMDksNyBAQCBSZW5kZXJPYmplY3QqIEhUTUxNZWRpYUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRN
TEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgaWYgKCFzcmMoKS5pc0VtcHR5
KCkgJiYgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSkKKyAgICBpZiAoIWdldEF0dHJp
YnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkgJiYgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBU
WSkKICAgICAgICAgc2NoZWR1bGVMb2FkKCk7CiB9CiAKQEAgLTQzOCwxMSArNDQzLDYgQEAgUGFz
c1JlZlB0cjxNZWRpYUVycm9yPiBIVE1MTWVkaWFFbGVtZW50OjplcnJvcigpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZXJyb3I7CiB9CiAKLUtVUkwgSFRNTE1lZGlhRWxlbWVudDo6c3JjKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0cik7Ci19Ci0KIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIHNl
dEF0dHJpYnV0ZShzcmNBdHRyLCB1cmwpOwpAQCAtNDk5LDYgKzQ5OSw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQoKQogICAgIG1fc2VudFN0YWxsZWRFdmVudCA9IGZh
bHNlOwogICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IGZhbHNlOwogICAgIG1fY29tcGxldGVs
eUxvYWRlZCA9IGZhbHNlOworICAgIG1fZGlzcGxheU1vZGUgPSBVbmtub3duOwogCiAgICAgLy8g
MSAtIEFib3J0IGFueSBhbHJlYWR5LXJ1bm5pbmcgaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIHNl
bGVjdGlvbiBhbGdvcml0aG0gZm9yIHRoaXMgZWxlbWVudC4KICAgICBtX2N1cnJlbnRTb3VyY2VO
b2RlID0gMDsKQEAgLTUxNSw3ICs1MTYsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwcmVw
YXJlRm9yTG9hZCgpCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIG1f
cGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKICNlbHNlCi0gICAgY3JlYXRlTWVk
aWFQbGF5ZXJQcm94eSgpOworICAgIGlmIChtX3BsYXllcikKKyAgICAgICAgbV9wbGF5ZXItPmNh
bmNlbExvYWQoKTsKKyAgICBlbHNlCisgICAgICAgIGNyZWF0ZU1lZGlhUGxheWVyUHJveHkoKTsK
ICNlbmRpZgogCiAgICAgLy8gNCAtIElmIHRoZSBtZWRpYSBlbGVtZW50J3MgbmV0d29ya1N0YXRl
IGlzIG5vdCBzZXQgdG8gTkVUV09SS19FTVBUWSwgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHMKQEAg
LTUzNSwxMCArNTM5LDI1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQo
KQogICAgIG1fZXJyb3IgPSAwOwogICAgIG1fYXV0b3BsYXlpbmcgPSB0cnVlOwogCisgICAgLy8g
NyAtIEludm9rZSB0aGUgbWVkaWEgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0
aG0uCisKKyAgICAvLyA4IC0gTm90ZTogUGxheWJhY2sgb2YgYW55IHByZXZpb3VzbHkgcGxheWlu
ZyBtZWRpYSByZXNvdXJjZSBmb3IgdGhpcyBlbGVtZW50IHN0b3BzLgorCisgICAgLy8gVGhlIHJl
c291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0KKyAgICAvLyAxIC0gU2V0IHRoZSBuZXR3b3JrU3Rh
dGUgdG8gTkVUV09SS19OT19TT1VSQ0UKKyAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9f
U09VUkNFOworCisgICAgLy8gMiAtIEFzeW5jaHJvbm91c2x5IGF3YWl0IGEgc3RhYmxlIHN0YXRl
LgorCiAgICAgbV9wbGF5ZWRUaW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CiAgICAg
bV9sYXN0U2Vla1RpbWUgPSAwOwogICAgIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlID0gZmFsc2U7
CiAKKworICAgIC8vIFRoZSBzcGVjIGRvZXNuJ3Qgc2F5IHRvIGJsb2NrIHRoZSBsb2FkIGV2ZW50
IHVudGlsIHdlIGFjdHVhbGx5IHJ1biB0aGUgYXN5bmNocm9ub3VzIHNlY3Rpb24KKyAgICAvLyBh
bGdvcml0aG0sIGJ1dCBkbyBpdCBub3cgYmVjYXVzZSB3ZSB3b24ndCBzdGFydCB0aGF0IHVudGls
IGFmdGVyIHRoZSB0aW1lciBmaXJlcyBhbmQgdGhlIAorICAgIC8vIGV2ZW50IG1heSBoYXZlIGFs
cmVhZHkgZmlyZWQgYnkgdGhlbi4KKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudCh0cnVlKTsK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkSW50ZXJuYWwoKQpAQCAtNTUzLDExICs1
NzIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBTdGVwcyAxIC0gNiB3ZXJlIGRvbmUgaW4gcHJlcGFyZUZv
ckxvYWQKLQotICAgIC8vIDcgLSBJbnZva2UgdGhlIG1lZGlhIGVsZW1lbnQncyByZXNvdXJjZSBz
ZWxlY3Rpb24gYWxnb3JpdGhtLgogICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKLSAgICBtX3By
b2Nlc3NpbmdMb2FkID0gZmFsc2U7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0
TWVkaWFSZXNvdXJjZSgpCkBAIC01NjUsMTEgKzU4MCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAgICAgZW51bSBNb2RlIHsgYXR0cmlidXRlLCBjaGls
ZHJlbiB9OwogICAgIE1vZGUgbW9kZSA9IGF0dHJpYnV0ZTsKIAotICAgIC8vIDEgLSBTZXQgdGhl
IG5ldHdvcmtTdGF0ZSB0byBORVRXT1JLX05PX1NPVVJDRQotICAgIG1fbmV0d29ya1N0YXRlID0g
TkVUV09SS19OT19TT1VSQ0U7Ci0KLSAgICAvLyAyIC0gQXN5bmNocm9ub3VzbHkgYXdhaXQgYSBz
dGFibGUgc3RhdGUuCi0KICAgICAvLyAzIC0gLi4uIHRoZSBtZWRpYSBlbGVtZW50IGhhcyBuZWl0
aGVyIGEgc3JjIGF0dHJpYnV0ZSAuLi4KICAgICBpZiAoIWhhc0F0dHJpYnV0ZShzcmNBdHRyKSkg
ewogICAgICAgICAvLyAuLi4gbm9yIGEgc291cmNlIGVsZW1lbnQgY2hpbGQ6IC4uLgpAQCAtNTgx
LDE4ICs1OTEsMTkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNl
KCkKIAogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgIG1fbG9hZFN0YXRlID0gV2Fp
dGluZ0ZvclNvdXJjZTsKKyAgICAgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNl
KTsKIAogICAgICAgICAgICAgLy8gLi4uIHNldCB0aGUgbmV0d29ya1N0YXRlIHRvIE5FVFdPUktf
RU1QVFksIGFuZCBhYm9ydCB0aGVzZSBzdGVwcwogICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBORVRXT1JLX0VNUFRZOwotICAgICAgICAgICAgQVNTRVJUKCFtX2RlbGF5aW5nVGhlTG9hZEV2
ZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1vZGUgPSBj
aGlsZHJlbjsKICAgICB9CiAKLSAgICAvLyA0Ci0gICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9
IHRydWU7CisgICAgLy8gNCAtIFNldCB0aGUgbWVkaWEgZWxlbWVudCdzIGRlbGF5aW5nLXRoZS1s
b2FkLWV2ZW50IGZsYWcgdG8gdHJ1ZSAodGhpcyBkZWxheXMgdGhlIGxvYWQgZXZlbnQpLCAKKyAg
ICAvLyBhbmQgc2V0IGl0cyBuZXR3b3JrU3RhdGUgdG8gTkVUV09SS19MT0FESU5HLgorICAgIHNl
dFNob3VsZERlbGF5TG9hZEV2ZW50KHRydWUpOwogICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09S
S19MT0FESU5HOwogCiAgICAgLy8gNQpAQCAtNjcwLDExICs2ODEsOSBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBLVVJMJiBpbml0aWFsVVJMLCBDb250ZW50VHlw
ZSYgY29udGVudAogCiAgICAgbV9wbGF5ZXItPmxvYWQobV9jdXJyZW50U3JjLCBjb250ZW50VHlw
ZSk7CiAKLSAgICBpZiAoaXNWaWRlbygpICYmIG1fcGxheWVyLT5jYW5Mb2FkUG9zdGVyKCkpIHsK
LSAgICAgICAgS1VSTCBwb3N0ZXJVcmwgPSBwb3N0ZXIoKTsKLSAgICAgICAgaWYgKCFwb3N0ZXJV
cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9wbGF5ZXItPnNldFBvc3Rlcihwb3N0ZXJVcmwp
OwotICAgIH0KKyAgICAvLyBJZiB0aGVyZSBpcyBubyBwb3N0ZXIgdG8gZGlzcGxheSwgYWxsb3cg
dGhlIG1lZGlhIGVuZ2luZSB0byByZW5kZXIgdmlkZW8gZnJhbWVzIGFzIHNvb24gYXMKKyAgICAv
LyB0aGV5IGFyZSBhdmFpbGFibGUuCisgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAKICAgICBp
ZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
QEAgLTcxOCw3ICs3MjcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndhaXRGb3JTb3VyY2VD
aGFuZ2UoKQogICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7CiAKICAgICAv
LyA2LjE4IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxhZyB0
byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KLSAgICBtX2RlbGF5
aW5nVGhlTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFs
c2UpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om5vbmVTdXBwb3J0ZWQoKQpAQCAtNzQx
LDExICs3NTAsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpub25lU3VwcG9ydGVkKCkKICAg
ICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIAogICAgIC8vIDggLSBT
ZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBU
aGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2Fk
RXZlbnQgPSBmYWxzZTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKICAg
ICAvLyA5IC1BYm9ydCB0aGVzZSBzdGVwcy4gVW50aWwgdGhlIGxvYWQoKSBtZXRob2QgaXMgaW52
b2tlZCwgdGhlIGVsZW1lbnQgd29uJ3QgYXR0ZW1wdCB0byBsb2FkIGFub3RoZXIgcmVzb3VyY2Uu
CiAKLSAgICB1cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVt
ZW50KCk7CkBAIC03NjEsOCArNzcwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUVu
Z2luZUVycm9yKFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gZXJyKQogICAgIC8vIHNldCB0byBNRURJ
QV9FUlJfTkVUV09SSy9NRURJQV9FUlJfREVDT0RFLgogICAgIG1fZXJyb3IgPSBlcnI7CiAKLSAg
ICAvLyAzIC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJy
b3IgYXQgdGhlIG1lZGlhIGVsZW1lbnQsIGluCi0gICAgLy8gdGhlIGNvbnRleHQgb2YgdGhlIGZl
dGNoaW5nIHByb2Nlc3Mgc3RhcnRlZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoaXMgYWxnb3JpdGht
LgorICAgIC8vIDMgLSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBl
cnJvciBhdCB0aGUgbWVkaWEgZWxlbWVudC4KICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50KTsKIAogICAgIC8vIDQgLSBTZXQgdGhlIGVsZW1lbnQncyBuZXR3b3JrU3Rh
dGUgYXR0cmlidXRlIHRvIHRoZSBORVRXT1JLX0VNUFRZIHZhbHVlIGFuZCBxdWV1ZSBhCkBAIC03
NzEsNyArNzc5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUVuZ2luZUVycm9yKFBh
c3NSZWZQdHI8TWVkaWFFcnJvcj4gZXJyKQogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygp
LmVtcHRpZWRFdmVudCk7CiAKICAgICAvLyA1IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmct
dGhlLWxvYWQtZXZlbnQgZmxhZyB0byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9h
ZCBldmVudC4KLSAgICBtX2RlbGF5aW5nVGhlTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgc2V0U2hv
dWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCiAgICAgLy8gNiAtIEFib3J0IHRoZSBvdmVyYWxs
IHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAgbV9jdXJyZW50U291cmNlTm9kZSA9
IDA7CkBAIC04MzQsNyArODQyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKICAgICAgICAgZWxzZSBpZiAo
c3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yICYmIG1fbG9hZFN0YXRlID09IExvYWRp
bmdGcm9tU3JjQXR0cikKICAgICAgICAgICAgIG5vbmVTdXBwb3J0ZWQoKTsKIAotICAgICAgICB1
cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgICAgICB1cGRhdGVEaXNwbGF5U3RhdGUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtODkyLDIyICs5MDAsMTcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9zZWVraW5nKSB7Ci0gICAgICAgIC8vIDQuOC4xMC4x
MCwgc3RlcCA4CisgICAgICAgIC8vIDQuOC4xMC45LCBzdGVwIDExCiAgICAgICAgIGlmICh3YXNQ
b3RlbnRpYWxseVBsYXlpbmcgJiYgbV9yZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVfREFUQSkKICAg
ICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndhaXRpbmdFdmVudCk7CiAKLSAg
ICAgICAgLy8gNC44LjEwLjEwLCBzdGVwIDkKLSAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IEhB
VkVfQ1VSUkVOVF9EQVRBKSB7Ci0gICAgICAgICAgICBpZiAob2xkU3RhdGUgPj0gSEFWRV9DVVJS
RU5UX0RBVEEpCi0gICAgICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuc2Vl
a2luZ0V2ZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDQuOC4xMC4xMCBz
dGVwIDEyICYgMTMuCisgICAgICAgIC8vIDQuOC4xMC4xMCBzdGVwIDE0ICYgMTUuCisgICAgICAg
IGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEpCiAgICAgICAgICAgICBmaW5p
c2hTZWVrKCk7Ci0gICAgICAgIH0KIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICh3YXNQb3Rl
bnRpYWxseVBsYXlpbmcgJiYgbV9yZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVfREFUQSkgewotICAg
ICAgICAgICAgLy8gNC44LjEwLjkKKyAgICAgICAgICAgIC8vIDQuOC4xMC44CiAgICAgICAgICAg
ICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CiAgICAgICAgICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS53YWl0aW5nRXZlbnQpOwogICAgICAgICB9CkBAIC05MTcsMjYgKzky
MCwxOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmR1
cmF0aW9uY2hhbmdlRXZlbnQpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5s
b2FkZWRtZXRhZGF0YUV2ZW50KTsKIAotI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURF
TykKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNWaWRlbygpKSB7Ci0g
ICAgICAgICAgICB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7
Ci0gICAgICAgIH0KLSNlbmRpZiAgICAgICAgCi0gICAgICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZl
bnQgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKICAg
ICB9CiAKLSAgICBib29sIHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gZmFsc2U7CisgICAgYm9v
bCBzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUgPSBmYWxzZTsKIAotICAgIC8vIDQuOC4xMC43IHNh
eXMgbG9hZGVkZGF0YSBpcyBzZW50IG9ubHkgd2hlbiB0aGUgbmV3IHN0YXRlICppcyogSEFWRV9D
VVJSRU5UX0RBVEE6ICJJZiB0aGUKLSAgICAvLyBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMgSEFW
RV9NRVRBREFUQSBhbmQgdGhlIG5ldyByZWFkeSBzdGF0ZSBpcyBIQVZFX0NVUlJFTlRfREFUQSIs
IAotICAgIC8vIGJ1dCB0aGUgZXZlbnQgdGFibGUgYXQgdGhlIGVuZCBvZiB0aGUgc3BlYyBzYXlz
IGl0IGlzIHNlbnQgd2hlbjogInJlYWR5U3RhdGUgbmV3bHkgCi0gICAgLy8gaW5jcmVhc2VkIHRv
IEhBVkVfQ1VSUkVOVF9EQVRBICBvciBncmVhdGVyIGZvciB0aGUgZmlyc3QgdGltZSIKLSAgICAv
LyBXZSBnbyB3aXRoIHRoZSBsYXRlciBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCB0byBjb3VudCBv
biBnZXR0aW5nIHRoaXMgZXZlbnQKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVO
VF9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEgJiYgIW1faGF2ZUZpcmVkTG9h
ZGVkRGF0YSkgewogICAgICAgICBtX2hhdmVGaXJlZExvYWRlZERhdGEgPSB0cnVlOwotICAgICAg
ICBzaG91bGRVcGRhdGVQb3N0ZXJJbWFnZSA9IHRydWU7CisgICAgICAgIHNob3VsZFVwZGF0ZURp
c3BsYXlTdGF0ZSA9IHRydWU7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxv
YWRlZGRhdGFFdmVudCk7CisgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsK
ICAgICB9CiAKICAgICBib29sIGlzUG90ZW50aWFsbHlQbGF5aW5nID0gcG90ZW50aWFsbHlQbGF5
aW5nKCk7CkBAIC05NDQsNyArOTM5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFk
eVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS5jYW5wbGF5RXZlbnQpOwogICAgICAgICBpZiAoaXNQb3RlbnRpYWxs
eVBsYXlpbmcpCiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5aW5n
RXZlbnQpOwotICAgICAgICBzaG91bGRVcGRhdGVQb3N0ZXJJbWFnZSA9IHRydWU7CisgICAgICAg
IHNob3VsZFVwZGF0ZURpc3BsYXlTdGF0ZSA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1fcmVh
ZHlTdGF0ZSA9PSBIQVZFX0VOT1VHSF9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9FTk9VR0hfREFU
QSkgewpAQCAtOTYyLDExICs5NTcsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFk
eVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICAgICAgc2NoZWR1
bGVFdmVudChldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KTsKICAgICAgICAgfQogCi0gICAgICAg
IHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gdHJ1ZTsKKyAgICAgICAgc2hvdWxkVXBkYXRlRGlz
cGxheVN0YXRlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlUG9zdGVySW1h
Z2UpCi0gICAgICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CisgICAgaWYgKHNob3VsZFVwZGF0ZURp
c3BsYXlTdGF0ZSkKKyAgICAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAKICAgICB1cGRhdGVQ
bGF5U3RhdGUoKTsKIH0KQEAgLTEwMzMsMjcgKzEwMjgsMzggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWVrKGZsb2F0IHRpbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIC8vIEdldCB0aGUg
Y3VycmVudCB0aW1lIGJlZm9yZSBzZXR0aW5nIG1fc2Vla2luZywgbV9sYXN0U2Vla1RpbWUgaXMg
cmV0dXJuZWQgb25jZSBpdCBpcyBzZXQuCiAgICAgZmxvYXQgbm93ID0gY3VycmVudFRpbWUoKTsK
IAorICAgIC8vIDIgLSBJZiB0aGUgZWxlbWVudCdzIHNlZWtpbmcgSURMIGF0dHJpYnV0ZSBpcyB0
cnVlLCB0aGVuIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhpcyBhbGdvcml0aG0gaXMKKyAgICAvLyBh
bHJlYWR5IHJ1bm5pbmcuIEFib3J0IHRoYXQgb3RoZXIgaW5zdGFuY2Ugb2YgdGhlIGFsZ29yaXRo
bSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBzdGVwIHRoYXQKKyAgICAvLyBpdCBpcyBydW5uaW5n
IHRvIGNvbXBsZXRlLgorICAgIC8vIE5vdGhpbmcgc3BlY2lmaWMgdG8gYmUgZG9uZSBoZXJlLgor
CiAgICAgLy8gMyAtIFNldCB0aGUgc2Vla2luZyBJREwgYXR0cmlidXRlIHRvIHRydWUuCi0gICAg
Ly8gVGhlIGZsYWcgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIGVuZ2luZSB0ZWxscyBpcyB0aGUg
dGltZSBoYXMgYWN0dWFsbHkgY2hhbmdlZAorICAgIC8vIFRoZSBmbGFnIHdpbGwgYmUgY2xlYXJl
ZCB3aGVuIHRoZSBlbmdpbmUgdGVsbHMgdXMgdGhlIHRpbWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQu
CiAgICAgbV9zZWVraW5nID0gdHJ1ZTsKIAotICAgIC8vIDQgLSBRdWV1ZSBhIHRhc2sgdG8gZmly
ZSBhIHNpbXBsZSBldmVudCBuYW1lZCB0aW1ldXBkYXRlIGF0IHRoZSBlbGVtZW50LgotICAgIHNj
aGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsKLQotICAgIC8vIDYgLSBJZiB0aGUgbmV3IHBs
YXliYWNrIHBvc2l0aW9uIGlzIGxhdGVyIHRoYW4gdGhlIGVuZCBvZiB0aGUgbWVkaWEgcmVzb3Vy
Y2UsIHRoZW4gbGV0IGl0IGJlIHRoZSBlbmQgCisgICAgLy8gNSAtIElmIHRoZSBuZXcgcGxheWJh
Y2sgcG9zaXRpb24gaXMgbGF0ZXIgdGhhbiB0aGUgZW5kIG9mIHRoZSBtZWRpYSByZXNvdXJjZSwg
dGhlbiBsZXQgaXQgYmUgdGhlIGVuZCAKICAgICAvLyBvZiB0aGUgbWVkaWEgcmVzb3VyY2UgaW5z
dGVhZC4KICAgICB0aW1lID0gbWluKHRpbWUsIGR1cmF0aW9uKCkpOwogCi0gICAgLy8gNyAtIElm
IHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gaXMgbGVzcyB0aGFuIHRoZSBlYXJsaWVzdCBwb3Nz
aWJsZSBwb3NpdGlvbiwgbGV0IGl0IGJlIHRoYXQgcG9zaXRpb24gaW5zdGVhZC4KKyAgICAvLyA2
IC0gSWYgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gdGhlIGVhcmxpZXN0
IHBvc3NpYmxlIHBvc2l0aW9uLCBsZXQgaXQgYmUgdGhhdCBwb3NpdGlvbiBpbnN0ZWFkLgogICAg
IGZsb2F0IGVhcmxpZXN0VGltZSA9IG1fcGxheWVyLT5zdGFydFRpbWUoKTsKICAgICB0aW1lID0g
bWF4KHRpbWUsIGVhcmxpZXN0VGltZSk7CiAKLSAgICAvLyA4IC0gSWYgdGhlIChwb3NzaWJseSBu
b3cgY2hhbmdlZCkgbmV3IHBsYXliYWNrIHBvc2l0aW9uIGlzIG5vdCBpbiBvbmUgb2YgdGhlIHJh
bmdlcyBnaXZlbiBpbiB0aGUgCisgICAgLy8gNyAtIElmIHRoZSAocG9zc2libHkgbm93IGNoYW5n
ZWQpIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBub3QgaW4gb25lIG9mIHRoZSByYW5nZXMgZ2l2
ZW4gaW4gdGhlIAogICAgIC8vIHNlZWthYmxlIGF0dHJpYnV0ZSwgdGhlbiBsZXQgaXQgYmUgdGhl
IHBvc2l0aW9uIGluIG9uZSBvZiB0aGUgcmFuZ2VzIGdpdmVuIGluIHRoZSBzZWVrYWJsZSBhdHRy
aWJ1dGUgCiAgICAgLy8gdGhhdCBpcyB0aGUgbmVhcmVzdCB0byB0aGUgbmV3IHBsYXliYWNrIHBv
c2l0aW9uLiAuLi4gSWYgdGhlcmUgYXJlIG5vIHJhbmdlcyBnaXZlbiBpbiB0aGUgc2Vla2FibGUK
ICAgICAvLyBhdHRyaWJ1dGUgdGhlbiBzZXQgdGhlIHNlZWtpbmcgSURMIGF0dHJpYnV0ZSB0byBm
YWxzZSBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHNlZWth
YmxlUmFuZ2VzID0gc2Vla2FibGUoKTsKLSAgICBpZiAoIXNlZWthYmxlUmFuZ2VzLT5sZW5ndGgo
KSB8fCB0aW1lID09IG5vdykgeworICAgIC8vIFNob3J0IGNpcmN1aXQgc2Vla2luZyB0byB0aGUg
Y3VycmVudCB0aW1lIGJ5IGp1c3QgZmlyaW5nIHRoZSBldmVudHMgaWYgbm8gc2VlayBpcyByZXF1
aXJlZC4KKyAgICAvLyBEb24ndCBza2lwIGNhbGxpbmcgdGhlIG1lZGlhIGVuZ2luZSBpZiB3ZSBh
cmUgaW4gcG9zdGVyIG1vZGUgYmVjYXVzZSBhIHNlZWsgc2hvdWxkIGFsd2F5cyAKKyAgICAvLyBj
YW5jZWwgcG9zdGVyIGRpc3BsYXkuCisgICAgYm9vbCBub1NlZWtSZXF1aXJlZCA9ICFzZWVrYWJs
ZVJhbmdlcy0+bGVuZ3RoKCkgfHwgKHRpbWUgPT0gbm93ICYmIGRpc3BsYXlNb2RlKCkgIT0gUG9z
dGVyKTsKKyAgICBpZiAobm9TZWVrUmVxdWlyZWQpIHsKKyAgICAgICAgaWYgKHRpbWUgPT0gbm93
KSB7CisgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zZWVraW5nRXZlbnQp
OworICAgICAgICAgICAgc2NoZWR1bGVUaW1ldXBkYXRlRXZlbnQoZmFsc2UpOworICAgICAgICAg
ICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuc2Vla2VkRXZlbnQpOworICAgICAgICB9CiAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA2
NiwyMCArMTA3MiwyOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWsoZmxvYXQgdGltZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV9sYXN0U2Vla1RpbWUgPSB0aW1lOwogICAgIG1fc2Vu
dEVuZEV2ZW50ID0gZmFsc2U7CiAKLSAgICAvLyA5IC0gU2V0IHRoZSBjdXJyZW50IHBsYXliYWNr
IHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBuZXcgcGxheWJhY2sgcG9zaXRpb24KKyAgICAvLyA4IC0g
U2V0IHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBuZXcgcGxheWJh
Y2sgcG9zaXRpb24KICAgICBtX3BsYXllci0+c2Vlayh0aW1lKTsKIAotICAgIC8vIDEwLTE1IGFy
ZSBoYW5kbGVkLCBpZiBuZWNlc3NhcnksIHdoZW4gdGhlIGVuZ2luZSBzaWduYWxzIGEgcmVhZHlz
dGF0ZSBjaGFuZ2UuCisgICAgLy8gOSAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHNlZWtpbmcgYXQgdGhlIGVsZW1lbnQuCisgICAgc2NoZWR1bGVFdmVudChldmVu
dE5hbWVzKCkuc2Vla2luZ0V2ZW50KTsKKworICAgIC8vIDEwIC0gUXVldWUgYSB0YXNrIHRvIGZp
cmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgdGltZXVwZGF0ZSBhdCB0aGUgZWxlbWVudC4KKyAgICBz
Y2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CisKKyAgICAvLyAxMS0xNSBhcmUgaGFuZGxl
ZCwgaWYgbmVjZXNzYXJ5LCB3aGVuIHRoZSBlbmdpbmUgc2lnbmFscyBhIHJlYWR5c3RhdGUgY2hh
bmdlLgogCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZmluaXNoU2VlaygpCiB7Ci0gICAg
Ly8gNC44LjEwLjEwIFNlZWtpbmcgc3RlcCAxMgorICAgIC8vIDQuOC4xMC45IFNlZWtpbmcgc3Rl
cCAxNAogICAgIG1fc2Vla2luZyA9IGZhbHNlOwogCi0gICAgLy8gNC44LjEwLjEwIFNlZWtpbmcg
c3RlcCAxMworICAgIC8vIDQuOC4xMC45IFNlZWtpbmcgc3RlcCAxNQogICAgIHNjaGVkdWxlRXZl
bnQoZXZlbnROYW1lcygpLnNlZWtlZEV2ZW50KTsKKworICAgIHNldERpc3BsYXlNb2RlKFZpZGVv
KTsKIH0KIAogSFRNTE1lZGlhRWxlbWVudDo6UmVhZHlTdGF0ZSBIVE1MTWVkaWFFbGVtZW50Ojpy
ZWFkeVN0YXRlKCkgY29uc3QKQEAgLTE1MzgsOCArMTU1Miw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZChNZWRpYVBsYXllciopCiAgICAgLy8gbW92aWUg
dGltZS4KICAgICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CiAKLSAgICAvLyA0Ljgu
MTAuMTAgc3RlcCAxMiAmIDEzLiAgTmVlZGVkIGlmIG5vIFJlYWR5U3RhdGUgY2hhbmdlIGlzIGFz
c29jaWF0ZWQgd2l0aCB0aGUgc2Vlay4KLSAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VS
UkVOVF9EQVRBICYmIG1fc2Vla2luZykKKyAgICAvLyA0LjguMTAuOSBzdGVwIDE0ICYgMTUuICBO
ZWVkZWQgaWYgbm8gUmVhZHlTdGF0ZSBjaGFuZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWVr
LgorICAgIGlmIChtX3NlZWtpbmcgJiYgbV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRB
KQogICAgICAgICBmaW5pc2hTZWVrKCk7CiAgICAgCiAgICAgZmxvYXQgbm93ID0gY3VycmVudFRp
bWUoKTsKQEAgLTE1ODQsMTMgKzE1OTgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyRHVyYXRpb25DaGFuZ2VkKE1lZGlhUGxheWVyKikKIHsKICAgICBiZWdpblByb2Nlc3Np
bmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
ZHVyYXRpb25jaGFuZ2VFdmVudCk7Ci0jaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQotICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpLT5p
c1ZpZGVvKCkpCi0gICAgICAgICAgICB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT52aWRlb1Np
emVDaGFuZ2VkKCk7Ci0gICAgfQotI2VuZGlmICAgICAgICAKICAgICBlbmRQcm9jZXNzaW5nTWVk
aWFQbGF5ZXJDYWxsYmFjaygpOwogfQogCkBAIC0xNjAzLDYgKzE2MTIsMTkgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikKICAgICBl
bmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOwogfQogCit2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQorewor
ICAgIGlmICghbV9wbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGJlZ2luUHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2soKTsKKyAgICBpZiAobV9wbGF5ZXItPnBhdXNlZCgpKQorICAg
ICAgICBwYXVzZUludGVybmFsKCk7CisgICAgZWxzZQorICAgICAgICBwbGF5SW50ZXJuYWwoKTsK
KyAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOworfQorCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2F3VW5zdXBwb3J0ZWRUcmFja3MoTWVkaWFQbGF5ZXIq
KQogewogICAgIC8vIFRoZSBNZWRpYVBsYXllciBjYW1lIGFjcm9zcyBjb250ZW50IGl0IGNhbm5v
dCBjb21wbGV0ZWx5IGhhbmRsZS4KQEAgLTE2MTgsMjAgKzE2NDAsMTggQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllclNhd1Vuc3VwcG9ydGVkVHJhY2tzKE1lZGlhUGxheWVyKikK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZXBhaW50KE1lZGlhUGxheWVyKikK
IHsKICAgICBiZWdpblByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CisgICAgdXBkYXRl
RGlzcGxheVN0YXRlKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKIAotICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CiAgICAgZW5kUHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllclNpemVDaGFuZ2VkKE1lZGlhUGxheWVyKikKIHsKICAgICBiZWdpblByb2Nlc3NpbmdN
ZWRpYVBsYXllckNhbGxiYWNrKCk7Ci0jaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVmlkZW8oKSkKLSAgICAgICAg
dG9SZW5kZXJWaWRlbyhyZW5kZXJlcigpKS0+dmlkZW9TaXplQ2hhbmdlZCgpOwotI2VuZGlmICAg
ICAgICAKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJv
bUVsZW1lbnQoKTsKICAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOwogfQog
CkBAIC0xNzgxLDI0ICsxODAxLDM0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxh
eVN0YXRlKCkKICAgICAKICAgICBib29sIHNob3VsZEJlUGxheWluZyA9IHBvdGVudGlhbGx5UGxh
eWluZygpOwogICAgIGJvb2wgcGxheWVyUGF1c2VkID0gbV9wbGF5ZXItPnBhdXNlZCgpOwotICAg
IGlmIChzaG91bGRCZVBsYXlpbmcgJiYgcGxheWVyUGF1c2VkKSB7Ci0gICAgICAgIGlmICghbV9p
c0Z1bGxzY3JlZW4gJiYgaXNWaWRlbygpICYmIGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFn
ZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPnJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKSkKLSAgICAgICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwotICAgICAg
ICAvLyBTZXQgcmF0ZSBiZWZvcmUgY2FsbGluZyBwbGF5IGluIGNhc2UgdGhlIHJhdGUgd2FzIHNl
dCBiZWZvcmUgdGhlIG1lZGlhIGVuZ2luZSB3YXNuJ3Qgc2V0dXAuCi0gICAgICAgIC8vIFRoZSBt
ZWRpYSBlbmdpbmUgc2hvdWxkIGp1c3Qgc3Rhc2ggdGhlIHJhdGUgc2luY2UgaXQgaXNuJ3QgYWxy
ZWFkeSBwbGF5aW5nLgotICAgICAgICBtX3BsYXllci0+c2V0UmF0ZShtX3BsYXliYWNrUmF0ZSk7
Ci0gICAgICAgIG1fcGxheWVyLT5wbGF5KCk7CisgICAgaWYgKHNob3VsZEJlUGxheWluZykgewor
ICAgICAgICBzZXREaXNwbGF5TW9kZShWaWRlbyk7CisgICAgICAgIGlmIChwbGF5ZXJQYXVzZWQp
IHsKKyAgICAgICAgICAgIGlmICghbV9pc0Z1bGxzY3JlZW4gJiYgaXNWaWRlbygpICYmIGRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21l
KCktPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkKKyAgICAgICAgICAgICAg
ICBlbnRlckZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2V0IHJh
dGUgYmVmb3JlIGNhbGxpbmcgcGxheSBpbiBjYXNlIHRoZSByYXRlIHdhcyBzZXQgYmVmb3JlIHRo
ZSBtZWRpYSBlbmdpbmUgd2FzIHNldHVwLgorICAgICAgICAgICAgLy8gVGhlIG1lZGlhIGVuZ2lu
ZSBzaG91bGQganVzdCBzdGFzaCB0aGUgcmF0ZSBzaW5jZSBpdCBpc24ndCBhbHJlYWR5IHBsYXlp
bmcuCisgICAgICAgICAgICBtX3BsYXllci0+c2V0UmF0ZShtX3BsYXliYWNrUmF0ZSk7CisgICAg
ICAgICAgICBtX3BsYXllci0+cGxheSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBz
dGFydFBsYXliYWNrUHJvZ3Jlc3NUaW1lcigpOwogICAgICAgICBtX3BsYXlpbmcgPSB0cnVlOwot
ICAgIH0gZWxzZSBpZiAoIXNob3VsZEJlUGxheWluZyAmJiAhcGxheWVyUGF1c2VkKSB7Ci0gICAg
ICAgIG1fcGxheWVyLT5wYXVzZSgpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoIXBsYXllclBhdXNlZCkKKyAgICAgICAgICAgIG1fcGxheWVyLT5wYXVzZSgpOworCiAgICAg
ICAgIG1fcGxheWJhY2tQcm9ncmVzc1RpbWVyLnN0b3AoKTsKICAgICAgICAgbV9wbGF5aW5nID0g
ZmFsc2U7CiAgICAgICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgICAgICBpZiAo
dGltZSA+IG1fbGFzdFNlZWtUaW1lKQogICAgICAgICAgICAgYWRkUGxheWVkUmFuZ2UobV9sYXN0
U2Vla1RpbWUsIHRpbWUpOwotICAgIH0gZWxzZSBpZiAoY291bGRQbGF5SWZFbm91Z2hEYXRhKCkg
JiYgcGxheWVyUGF1c2VkKQotICAgICAgICBtX3BsYXllci0+cHJlcGFyZVRvUGxheSgpOworICAg
ICAgICAgICAKKyAgICAgICAgaWYgKGNvdWxkUGxheUlmRW5vdWdoRGF0YSgpKQorICAgICAgICAg
ICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKHJlbmRl
cmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CkBAIC0xODI4
LDE3ICsxODU4LDE3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQo
KQogICAgIG1fcGxheWVyLmNsZWFyKCk7CiAjZW5kaWYKICAgICBzdG9wUGVyaW9kaWNUaW1lcnMo
KTsKKyAgICBtX2xvYWRTdGF0ZSA9IFdhaXRpbmdGb3JTb3VyY2U7CiAKICAgICAvLyAyIC0gU2V0
IHRoZSBlcnJvciBhdHRyaWJ1dGUgdG8gYSBuZXcgTWVkaWFFcnJvciBvYmplY3Qgd2hvc2UgY29k
ZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE1FRElBX0VSUl9BQk9SVEVELgogICAgIG1fZXJyb3IgPSBN
ZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQpOwogCi0gICAg
Ly8gMyAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0
IGF0IHRoZSBtZWRpYSBlbGVtZW50LCBpbiB0aGUgY29udGV4dAotICAgIC8vIG9mIHRoZSBmZXRj
aGluZyBwcm9jZXNzIHN0YXJ0ZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiB0aGlzIGFsZ29yaXRobS4K
KyAgICAvLyAzIC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgZXJy
b3IgYXQgdGhlIG1lZGlhIGVsZW1lbnQuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
YWJvcnRFdmVudCk7CiAKLSAgICAvLyA1IC0gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0
YXRlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSBlcXVhbCB0byBIQVZFX05PVEhJTkcsIHNldCB0aGUK
LSAgICAvLyBlbGVtZW50J3MgbmV0d29ya1N0YXRlIGF0dHJpYnV0ZSB0byB0aGUgTkVUV09SS19F
TVBUWSB2YWx1ZSBhbmQgcXVldWUgYSB0YXNrIHRvIGZpcmUgYQotICAgIC8vIHNpbXBsZSBldmVu
dCBjYWxsZWQgZW1wdGllZCBhdCB0aGUgZWxlbWVudC4gT3RoZXJ3aXNlLCBzZXQgc2V0IHRoZSBl
bGVtZW50J3MgbmV0d29ya1N0YXRlCisgICAgLy8gNCAtIElmIHRoZSBtZWRpYSBlbGVtZW50J3Mg
cmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgZXF1YWwgdG8gSEFWRV9OT1RISU5HLCBz
ZXQgdGhlIAorICAgIC8vIGVsZW1lbnQncyBuZXR3b3JrU3RhdGUgYXR0cmlidXRlIHRvIHRoZSBO
RVRXT1JLX0VNUFRZIHZhbHVlIGFuZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIAorICAgIC8vIHNp
bXBsZSBldmVudCBuYW1lZCBlbXB0aWVkIGF0IHRoZSBlbGVtZW50LiBPdGhlcndpc2UsIHNldCB0
aGUgZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSAKICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhlIE5FVFdP
UktfSURMRSB2YWx1ZS4KICAgICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfTk9USElORykgewog
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfRU1QVFk7CkBAIC0xODQ3LDE4ICsxODc3
LDI3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckNhbmNlbGxlZExvYWQoKQogICAgIGVs
c2UKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0lETEU7CiAKLSAgICAvLyA2IC0g
U2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxhZyB0byBmYWxzZS4g
VGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KLSAgICBtX2RlbGF5aW5nVGhlTG9h
ZEV2ZW50ID0gZmFsc2U7CisgICAgLy8gNSAtIFNldCB0aGUgZWxlbWVudCdzIGRlbGF5aW5nLXRo
ZS1sb2FkLWV2ZW50IGZsYWcgdG8gZmFsc2UuIFRoaXMgc3RvcHMgZGVsYXlpbmcgdGhlIGxvYWQg
ZXZlbnQuCisgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCi0gICAgLy8gNyAt
IEFib3J0IHRoZSBvdmVyYWxsIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgLy8g
NiAtIEFib3J0IHRoZSBvdmVyYWxsIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAg
bV9jdXJyZW50U291cmNlTm9kZSA9IDA7CiAKICAgICAvLyBSZXNldCBtX3JlYWR5U3RhdGUgc2lu
Y2UgbV9wbGF5ZXIgaXMgZ29uZS4KICAgICBtX3JlYWR5U3RhdGUgPSBIQVZFX05PVEhJTkc7CiB9
CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKQot
eworYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjYW5TdXNwZW5kKCkgY29uc3QgIAoreyAgCisgICAg
cmV0dXJuIHRydWU7ICAgCit9ICAKKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkgIAor
eyAgCisgICAgc3VzcGVuZCgpOyAgCit9ICAKKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdXNw
ZW5kKCkgewogICAgIGlmIChtX2lzRnVsbHNjcmVlbikKICAgICAgICAgZXhpdEZ1bGxzY3JlZW4o
KTsKIApAQCAtMTg3NSw3ICsxOTE0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpkb2N1bWVu
dFdpbGxCZWNvbWVJbmFjdGl2ZSgpCiAgICAgY2FuY2VsUGVuZGluZ0V2ZW50c0FuZENhbGxiYWNr
cygpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQWN0aXZl
KCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKIHsKICAgICBtX2luQWN0aXZlRG9j
dW1lbnQgPSB0cnVlOwogICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKQEAgLTE4OTMsNiAr
MTkzMiwxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQWN0aXZl
KCkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAorYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCAgCit7ICAKKyAgICAv
LyBSZXR1cm4gdHJ1ZSB3aGVuIHdlIGhhdmUgcGVuZGluZyBldmVudHMgc28gd2UgY2FuJ3QgZmly
ZSBldmVudHMgYWZ0ZXIgdGhlIEpTICAgCisgICAgLy8gb2JqZWN0IGdldHMgY29sbGVjdGVkLiAg
CisgICAgcmV0dXJuIG1fcGVuZGluZ0V2ZW50cy5zaXplKCk7ICAKK30gIAorCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkKIHsKICAgICB1cGRhdGVWb2x1bWUo
KTsKQEAgLTE5NjQsMTMgKzIwMTAsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpnZXRQbHVn
aW5Qcm94eVBhcmFtcyhLVVJMJiB1cmwsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcywgVmUKICAgICBG
cmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCkgOiAwOwogCiAgICAg
aWYgKGlzVmlkZW8oKSkgewotICAgICAgICBTdHJpbmcgcG9zdGVyID0gcG9zdGVyKCk7Ci0gICAg
ICAgIGlmICghcG9zdGVyLmlzRW1wdHkoKSAmJiBsb2FkZXIpIHsKLSAgICAgICAgICAgIEtVUkwg
cG9zdGVyVVJMID0gbG9hZGVyLT5jb21wbGV0ZVVSTChwb3N0ZXIpOwotICAgICAgICAgICAgaWYg
KHBvc3RlclVSTC5pc1ZhbGlkKCkgJiYgbG9hZGVyLT53aWxsTG9hZE1lZGlhRWxlbWVudFVSTChw
b3N0ZXJVUkwpKSB7Ci0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKCJfbWVkaWFfZWxlbWVu
dF9wb3N0ZXJfIik7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChwb3N0ZXJVUkwuc3Ry
aW5nKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBLVVJMIHBvc3RlclVSTCA9IGdldE5vbkVt
cHR5VVJMQXR0cmlidXRlKHBvc3RlckF0dHIpOworICAgICAgICBpZiAoIXBvc3RlclVSTC5pc0Vt
cHR5KCkgJiYgbG9hZGVyICYmIGxvYWRlci0+d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwocG9zdGVy
VVJMKSkgeworICAgICAgICAgICAgbmFtZXMuYXBwZW5kKCJfbWVkaWFfZWxlbWVudF9wb3N0ZXJf
Iik7CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHBvc3RlclVSTC5zdHJpbmcoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTIxMDYsNiArMjE0OSwyMCBAQCBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cmlidXRlKSBjb25zdAogICAgIHJldHVy
biBhdHRyaWJ1dGUtPm5hbWUoKSA9PSBzcmNBdHRyOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldFNob3VsZERlbGF5TG9hZEV2ZW50KGJvb2wgc2hvdWxkRGVsYXkpCit7CisgICAgaWYg
KG1fc2hvdWxkRGVsYXlMb2FkRXZlbnQgPT0gc2hvdWxkRGVsYXkpCisgICAgICAgIHJldHVybjsK
KworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNldFNob3VsZERlbGF5TG9hZEV2
ZW50KCVzKSIsIGJvb2xTdHJpbmcoc2hvdWxkRGVsYXkpKTsKKworICAgIG1fc2hvdWxkRGVsYXlM
b2FkRXZlbnQgPSBzaG91bGREZWxheTsKKyAgICBpZiAoc2hvdWxkRGVsYXkpCisgICAgICAgIGRv
Y3VtZW50KCktPmluY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKKyAgICBlbHNlCisgICAg
ICAgIGRvY3VtZW50KCktPmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKK30KKwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1MTYyOWUuLjhmZDhlZGEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShWSURF
TykKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKIApAQCAtNTEsNyArNTIsNyBAQCBjbGFzcyBXaWRnZXQ7CiAvLyBCdXQgaXQgY2Fu
J3QgYmUgdW50aWwgdGhlIENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBp
cyBmaXhlZCBzbyBpdAogLy8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRp
YVBsYXllckNsaWVudCB0byBhbiBIVE1MTWVkaWFFbGVtZW50LgogCi1jbGFzcyBIVE1MTWVkaWFF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJDbGllbnQsIHBy
aXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIsIHByaXZhdGUgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICBNZWRpYVBsYXllciogcGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXIuZ2V0KCk7IH0K
ICAgICAKQEAgLTY0LDcgKzY1LDYgQEAgcHVibGljOgogCiAgICAgLy8gRXZlbnR1YWxseSBvdmVy
bG9hZGVkIGluIEhUTUxWaWRlb0VsZW1lbnQKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07Ci0gICAgdmlydHVhbCBjb25zdCBLVVJM
IHBvc3RlcigpIGNvbnN0IHsgcmV0dXJuIEtVUkwoKTsgfQogCiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzU2F2ZSgpIGNvbnN0OwogICAgIApAQCAtODQsNyArODQsNiBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxNZWRpYUVycm9yPiBlcnJvcigpIGNvbnN0OwogCiAvLyBuZXR3b3JrIHN0YXRl
Ci0gICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsK
ICAgICBTdHJpbmcgY3VycmVudFNyYygpIGNvbnN0OwogCkBAIC0xODAsNiArMTc5LDEwIEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCisgICAgZW51
bSBEaXNwbGF5TW9kZSB7IFVua25vd24sIE5vbmUsIFBvc3RlciwgVmlkZW8gfTsKKyAgICBEaXNw
bGF5TW9kZSBkaXNwbGF5TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheU1vZGU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGlzcGxheU1vZGUoRGlzcGxheU1vZGUgbW9kZSkgeyBtX2Rpc3Bs
YXlNb2RlID0gbW9kZTsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKiBuZXdDaGlsZCk7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7CkBAIC0xOTQsMTAgKzE5NywxNSBA
QCBwcml2YXRlOgogICAgIGZsb2F0IGdldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGZsb2F0IHZhbHVlT25FcnJvcikgY29uc3Q7CiAgICAgdm9pZCBzZXRUaW1lT2Zm
c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBmbG9hdCB2YWx1ZSk7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzdXNwZW5kKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVBvc3RlckltYWdlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZURpc3BsYXlTdGF0ZSgpIHsgfQogICAgIAogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSk7CiAgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSk7CkBAIC0yMTAsNiArMjE4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgbWVkaWFQbGF5ZXJNdXRlQ2hhbmdlZChNZWRpYVBsYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBtZWRpYVBsYXllckR1cmF0aW9uQ2hhbmdlZChNZWRpYVBsYXllciopOwogICAgIHZp
cnR1YWwgdm9pZCBtZWRpYVBsYXllclJhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKik7CisgICAgdmly
dHVhbCB2b2lkIG1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTYXdVbnN1cHBvcnRlZFRyYWNrcyhNZWRpYVBs
YXllciopOwogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclJlcGFpbnQoTWVkaWFQbGF5ZXIq
KTsKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTaXplQ2hhbmdlZChNZWRpYVBsYXllciop
OwpAQCAtMjU2LDYgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXVzZUludGVybmFsKCk7
CiAKICAgICB2b2lkIHByZXBhcmVGb3JMb2FkKCk7CisgICAgdm9pZCBhbGxvd1ZpZGVvUmVuZGVy
aW5nKCk7CiAgICAgCiAgICAgYm9vbCBwcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2sgPiAwOyB9CiAgICAg
dm9pZCBiZWdpblByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCkgeyArK21fcHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2s7IH0KQEAgLTI3Nyw2ICsyODcsOCBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIG1lZGlhQ2FuU3RhcnQoKTsKIAorICAgIHZvaWQgc2V0U2hvdWxkRGVs
YXlMb2FkRXZlbnQoYm9vbCk7CisKICAgICAvLyBSZXN0cmljdGlvbnMgdG8gY2hhbmdlIGRlZmF1
bHQgYmVoYXZpb3JzLiBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgY29tcGlsZSB0aW1lIGNob2ljZSBh
dCB0aGUgbW9tZW50CiAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgbm8gYWNjZXNzb3IgZnVuY3Rp
b25zLgogICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbnMgewpAQCAtMzI4LDE2ICszNDAsMTYg
QEAgcHJpdmF0ZToKICAgICAKICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7CiAK
LSAgICBib29sIG1fcGxheWluZzsKKyAgICBEaXNwbGF5TW9kZSBtX2Rpc3BsYXlNb2RlOwogCiAg
ICAgLy8gQ291bnRlciBpbmNyZW1lbnRlZCB3aGlsZSBwcm9jZXNzaW5nIGEgY2FsbGJhY2sgZnJv
bSB0aGUgbWVkaWEgcGxheWVyLCBzbyB3ZSBjYW4gYXZvaWQKICAgICAvLyBjYWxsaW5nIHRoZSBt
ZWRpYSBlbmdpbmUgcmVjdXJzaXZlbHkuCiAgICAgaW50IG1fcHJvY2Vzc2luZ01lZGlhUGxheWVy
Q2FsbGJhY2s7CiAKLSAgICBib29sIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0OwotCi0g
ICAgYm9vbCBtX3Byb2Nlc3NpbmdMb2FkIDogMTsKLSAgICBib29sIG1fZGVsYXlpbmdUaGVMb2Fk
RXZlbnQgOiAxOworICAgIGJvb2wgbV9wbGF5aW5nIDogMTsKKyAgICBib29sIG1faXNXYWl0aW5n
VW50aWxNZWRpYUNhblN0YXJ0IDogMTsKKyAgICBib29sIG1fc2hvdWxkRGVsYXlMb2FkRXZlbnQg
OiAxOworICAgIGJvb2wgbV9pc1dhaXRpbmdUb0RlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQg
OiAxOwogICAgIGJvb2wgbV9oYXZlRmlyZWRMb2FkZWREYXRhIDogMTsKICAgICBib29sIG1faW5B
Y3RpdmVEb2N1bWVudCA6IDE7CiAgICAgYm9vbCBtX2F1dG9wbGF5aW5nIDogMTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwgYi9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaWRsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAppbmRleCAyYzgz
ZmVkLi45NmM5ODI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTUyLDkgKzUy
LDkgQEAgUGFzc1JlZlB0cjxIVE1MU291cmNlRWxlbWVudD4gSFRNTFNvdXJjZUVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhU
TUxTb3VyY2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLXZvaWQgSFRNTFNvdXJj
ZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKK3ZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXAp
OwogICAgIGlmIChwYXJlbnROb2RlKCkgJiYgKHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShhdWRp
b1RhZykgfHwgIHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZSh2aWRlb1RhZykpKSB7CiAgICAgICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+
KHBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmIChtZWRpYS0+bmV0d29ya1N0YXRlKCkgPT0gSFRN
TE1lZGlhRWxlbWVudDo6TkVUV09SS19FTVBUWSkKQEAgLTYyLDExICs2Miw2IEBAIHZvaWQgSFRN
TFNvdXJjZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICB9CiB9CiAKLUtVUkwg
SFRNTFNvdXJjZUVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldE5vbkVtcHR5
VVJMQXR0cmlidXRlKHNyY0F0dHIpOwotfQotCiB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpzZXRT
cmMoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaCBiL1dlYkNvcmUv
aHRtbC9IVE1MU291cmNlRWxlbWVudC5oCmluZGV4IDZjY2E2NGUuLjdkNDlhM2UgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MU291cmNlRWxlbWVudC5oCkBAIC0zNyw3ICszNyw2IEBAIGNsYXNzIEhUTUxTb3VyY2VFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MU291cmNlRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogCi0gICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsK
ICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYp
OyAgICAKQEAgLTUzLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47
IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAKICAgICB2b2lkIGVycm9yRXZlbnRUaW1lckZpcmVk
KFRpbWVyPEhUTUxTb3VyY2VFbGVtZW50PiopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmlkbCBiL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5pZGwK
aW5kZXggZjcyMjlmMS4uNjFkYzRkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxTb3Vy
Y2VFbGVtZW50LmlkbAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaWRsCkBA
IC0yNSw3ICsyNSw3IEBACiAKIG1vZHVsZSBodG1sIHsKIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9
VklERU9dIEhUTUxTb3VyY2VFbGVtZW50IDogSFRNTEVsZW1lbnQgewotICAgIGF0dHJpYnV0ZSBb
UmVmbGVjdCxOb25FbXB0eSxVUkxdIERPTVN0cmluZyBzcmM7CisgICAgYXR0cmlidXRlIFtSZWZs
ZWN0LFVSTF0gRE9NU3RyaW5nIHNyYzsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyBtZWRpYTsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKaW5kZXggYTZmZGI1Zi4uYzk1ZDZlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxW
aWRlb0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApA
QCAtNDcsNyArNDcsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBpbmxpbmUgSFRN
TFZpZGVvRWxlbWVudDo6SFRNTFZpZGVvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBIVE1MTWVkaWFFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQotICAgICwgbV9zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoZmFsc2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUodmlkZW9UYWcpKTsKIH0KQEAgLTc0LDggKzczLDggQEAgdm9p
ZCBIVE1MVmlkZW9FbGVtZW50OjphdHRhY2goKQogICAgIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dGFj
aCgpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIHVwZGF0ZVBv
c3RlckltYWdlKCk7Ci0gICAgaWYgKG1fc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKSB7CisgICAg
dXBkYXRlRGlzcGxheVN0YXRlKCk7CisgICAgaWYgKHNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgp
KSB7CiAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlcikKICAgICAgICAgICAgIG1faW1hZ2VMb2Fk
ZXIuc2V0KG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwogICAgICAgICBtX2ltYWdlTG9hZGVy
LT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtOTEsOSArOTAsOCBAQCB2b2lkIEhUTUxWaWRlb0Vs
ZW1lbnQ6OmRldGFjaCgpCiB7CiAgICAgSFRNTE1lZGlhRWxlbWVudDo6ZGV0YWNoKCk7CiAgICAg
Ci0gICAgaWYgKCFtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSkKLSAgICAgICAgaWYgKG1faW1h
Z2VMb2FkZXIpCi0gICAgICAgICAgICBtX2ltYWdlTG9hZGVyLmNsZWFyKCk7CisgICAgaWYgKCFz
aG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKSAmJiBtX2ltYWdlTG9hZGVyKQorICAgICAgICBtX2lt
YWdlTG9hZGVyLmNsZWFyKCk7CiB9CiAKIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpAQCAtMTAxLDE4ICs5OSwyMSBAQCB2b2lkIEhU
TUxWaWRlb0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKIAogICAgIGlm
IChhdHRyTmFtZSA9PSBwb3N0ZXJBdHRyKSB7Ci0gICAgICAgIG1fcG9zdGVyVVJMID0gZ2V0Tm9u
RW1wdHlVUkxBdHRyaWJ1dGUocG9zdGVyQXR0cik7Ci0gICAgICAgIHVwZGF0ZVBvc3RlckltYWdl
KCk7Ci0gICAgICAgIGlmIChtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSkgeworICAgICAgICAv
LyBGb3JjZSBhIHBvc3RlciByZWNhbGMgYnkgc2V0dGluZyBtX2Rpc3BsYXlNb2RlIHRvIFVua25v
d24gZGlyZWN0bHkgYmVmb3JlIGNhbGxpbmcgdXBkYXRlRGlzcGxheVN0YXRlLgorICAgICAgICBI
VE1MTWVkaWFFbGVtZW50OjpzZXREaXNwbGF5TW9kZShVbmtub3duKTsKKyAgICAgICAgdXBkYXRl
RGlzcGxheVN0YXRlKCk7CiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAg
ICAgICBpZiAoc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkpIHsKICAgICAgICAgICAgIGlmICgh
bV9pbWFnZUxvYWRlcikKLSAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyLnNldChuZXcgSFRN
TEltYWdlTG9hZGVyKHRoaXMpKTsKKyAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gYWRv
cHRQdHIobmV3IEhUTUxJbWFnZUxvYWRlcih0aGlzKSk7CiAgICAgICAgICAgICBtX2ltYWdlTG9h
ZGVyLT51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJvcigpOwotI2Vsc2UKLSAg
ICAgICAgICAgIGlmIChwbGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBwbGF5ZXIoKS0+c2V0UG9z
dGVyKHBvc3RlcigpKTsKLSNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KG1faW1hZ2VMb2FkZXIpCisgICAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVhcigpOwor
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgdG9SZW5kZXJJbWFn
ZShyZW5kZXJlcigpKS0+c2V0Q2FjaGVkSW1hZ2UoMCk7IAogICAgICAgICB9CisjZW5kaWYKICAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0cikKICAgICAgICAgYWRkQ1NTTGVuZ3Ro
KGF0dHIsIENTU1Byb3BlcnR5V2lkdGgsIGF0dHItPnZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IGhlaWdodEF0dHIpCkBAIC0xNzMsMjAgKzE3NCw0MiBAQCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MVmlkZW9FbGVtZW50OjppbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25z
dAogICAgIHJldHVybiBwb3N0ZXJBdHRyOwogfQogCi12b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnVw
ZGF0ZVBvc3RlckltYWdlKCkKK3ZvaWQgSFRNTFZpZGVvRWxlbWVudDo6c2V0RGlzcGxheU1vZGUo
RGlzcGxheU1vZGUgbW9kZSkKIHsKLSNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8p
Ci0gICAgYm9vbCBvbGRTaG91bGRTaG93UG9zdGVySW1hZ2UgPSBtX3Nob3VsZERpc3BsYXlQb3N0
ZXJJbWFnZTsKLSNlbmRpZgorICAgIERpc3BsYXlNb2RlIG9sZE1vZGUgPSBkaXNwbGF5TW9kZSgp
OworICAgIEtVUkwgcG9zdGVyID0gZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUocG9zdGVyQXR0cik7
CisKKyAgICBpZiAoIXBvc3Rlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHBv
c3RlciBwYXRoLCBidXQgb25seSBzaG93IGl0IHVudGlsIHRoZSB1c2VyIHRyaWdnZXJzIGRpc3Bs
YXkgYnkgcGxheWluZyBvciBzZWVraW5nIGFuZCB0aGUKKyAgICAgICAgLy8gbWVkaWEgZW5naW5l
IGhhcyBzb21ldGhpbmcgdG8gZGlzcGxheS4KKyAgICAgICAgaWYgKG1vZGUgPT0gVmlkZW8pIHsK
KyAgICAgICAgICAgIGlmIChvbGRNb2RlICE9IFZpZGVvICYmIHBsYXllcigpKQorICAgICAgICAg
ICAgICAgIHBsYXllcigpLT5wcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgICAgICAgICBpZiAo
IWhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBtb2RlID0gUG9zdGVy
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChvbGRNb2RlICE9IFZpZGVvICYmIHBsYXllcigp
KQorICAgICAgICBwbGF5ZXIoKS0+cHJlcGFyZUZvclJlbmRlcmluZygpOwogCi0gICAgbV9zaG91
bGREaXNwbGF5UG9zdGVySW1hZ2UgPSAhcG9zdGVyKCkuaXNFbXB0eSgpICYmICFoYXNBdmFpbGFi
bGVWaWRlb0ZyYW1lKCk7CisgICAgSFRNTE1lZGlhRWxlbWVudDo6c2V0RGlzcGxheU1vZGUobW9k
ZSk7CisKKyAgICBpZiAocGxheWVyKCkgJiYgcGxheWVyKCktPmNhbkxvYWRQb3N0ZXIoKSkKKyAg
ICAgICAgcGxheWVyKCktPnNldFBvc3Rlcihwb3N0ZXIpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5f
UFJPWFlfRk9SX1ZJREVPKQotICAgIGlmIChyZW5kZXJlcigpICYmIG9sZFNob3VsZFNob3dQb3N0
ZXJJbWFnZSAhPSBtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSkKKyAgICBpZiAocmVuZGVyZXIo
KSAmJiBkaXNwbGF5TW9kZSgpICE9IG9sZE1vZGUpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUZyb21FbGVtZW50KCk7CiAjZW5kaWYKIH0KIAordm9pZCBIVE1MVmlkZW9FbGVtZW50Ojp1cGRh
dGVEaXNwbGF5U3RhdGUoKQoreworICAgIGlmIChnZXROb25FbXB0eVVSTEF0dHJpYnV0ZShwb3N0
ZXJBdHRyKS5pc0VtcHR5KCkpCisgICAgICAgIHNldERpc3BsYXlNb2RlKFZpZGVvKTsKKyAgICBl
bHNlIGlmIChkaXNwbGF5TW9kZSgpIDwgUG9zdGVyKQorICAgICAgICBzZXREaXNwbGF5TW9kZShQ
b3N0ZXIpOworfQorCiB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnBhaW50Q3VycmVudEZyYW1lSW5D
b250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
CiB7CiAgICAgTWVkaWFQbGF5ZXIqIHBsYXllciA9IEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXllcigp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaCBiL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKaW5kZXggYzI3OTYyZi4uYjcxYzJkNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TFZpZGVvRWxlbWVudC5oCkBAIC01NywxMSArNTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgd2Vi
a2l0RW50ZXJGdWxsU2NyZWVuKGJvb2wgaXNVc2VyR2VzdHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgd2Via2l0RW50ZXJGdWxsc2NyZWVuKGlzVXNlckdlc3R1cmUsIGVjKTsgfQogICAgIHZvaWQg
d2Via2l0RXhpdEZ1bGxTY3JlZW4oKSB7IHdlYmtpdEV4aXRGdWxsc2NyZWVuKCk7IH0KIAotICAg
IGJvb2wgc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRE
aXNwbGF5UG9zdGVySW1hZ2U7IH0KLQogICAgIC8vIFVzZWQgYnkgY2FudmFzIHRvIGdhaW4gcmF3
IHBpeGVsIGFjY2VzcwogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgYm9vbCBzaG91bGREaXNwbGF5UG9z
dGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBkaXNwbGF5TW9kZSgpID09IFBvc3RlcjsgfQorCiBw
cml2YXRlOgogICAgIEhUTUxWaWRlb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKQEAgLTgwLDEyICs4MCwxMyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVQb3N0ZXJJbWFnZSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5
U3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
IAorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNwbGF5TW9kZShEaXNwbGF5TW9kZSk7CisKICAgICBP
d25QdHI8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwogICAgIEtVUkwgbV9wb3N0ZXJV
Ukw7Ci0gICAgYm9vbCBtX3Nob3VsZERpc3BsYXlQb3N0ZXJJbWFnZTsKIH07CiAKIH0gLy9uYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggNGZi
MDFjOC4uMjc3YmEzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTE3MSw2ICsxNzEsMTIgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3Rvcnkq
PiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CisjZWxpZiBQTEFURk9STShRVCkgIAorI2lmIFVTRShRVF9N
VUxUSU1FRElBKSAgCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZWdpc3Rlck1lZGlh
RW5naW5lKGFkZE1lZGlhRW5naW5lKTsgIAorI2Vsc2UgIAorICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGVQaG9ub246OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOyAgCisjZW5k
aWYgIAogI2VsaWYgIVBMQVRGT1JNKEdUSykKICAgICAgICAgLy8gRklYTUU6IGN1cnJlbnRseSBh
bGwgdGhlIE1lZGlhRW5naW5lcyBhcmUgbmFtZWQKICAgICAgICAgLy8gTWVkaWFQbGF5ZXJQcml2
YXRlLiBUaGlzIGNvZGUgd2lsbCBuZWVkIGFuIHVwZGF0ZSB3aGVuIGJ1ZwpAQCAtMTkyLDYgKzE5
OCwyNCBAQCBzdGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShDcmVhdGVNZWRpYUVuZ2luZVBsYXll
ciBjb25zdHJ1Y3RvciwgTWVkaWFFbmdpbmVTdXBwbwogICAgIGluc3RhbGxlZE1lZGlhRW5naW5l
cygpLmFwcGVuZChuZXcgTWVkaWFQbGF5ZXJGYWN0b3J5KGNvbnN0cnVjdG9yLCBnZXRTdXBwb3J0
ZWRUeXBlcywgc3VwcG9ydHNUeXBlKSk7CiB9CiAKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGFwcGxpY2F0aW9uT2N0ZXRTdHJlYW0oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgQXRvbWljU3RyaW5nLCBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtLCAoImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSIpKTsKKyAgICByZXR1cm4gYXBwbGljYXRpb25PY3RldFN0cmVhbTsKK30KKwor
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFBsYWluKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgdGV4dFBsYWluLCAoInRleHQvcGxhaW4iKSk7
CisgICAgcmV0dXJuIHRleHRQbGFpbjsKK30KKworc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
Y29kZWNzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
Y29kZWNzLCAoImNvZGVjcyIpKTsKKyAgICByZXR1cm4gY29kZWNzOworfQorCiBzdGF0aWMgTWVk
aWFQbGF5ZXJGYWN0b3J5KiBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyhjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQogewogICAgIFZlY3RvcjxNZWRpYVBs
YXllckZhY3RvcnkqPiYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOwpAQCAtMTk5
LDYgKzIyMywxNCBAQCBzdGF0aWMgTWVkaWFQbGF5ZXJGYWN0b3J5KiBjaG9vc2VCZXN0RW5naW5l
Rm9yVHlwZUFuZENvZGVjcyhjb25zdCBTdHJpbmcmIHR5cGUsCiAgICAgaWYgKGVuZ2luZXMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIC8vIDQuOC4xMC4zIE1JTUUgdHlwZXMg
LSBJbiB0aGUgYWJzZW5jZSBvZiBhIHNwZWNpZmljYXRpb24gdG8gdGhlIGNvbnRyYXJ5LCB0aGUg
TUlNRSB0eXBlICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIAorICAgIC8vIHdoZW4gdXNlZCB3
aXRoIHBhcmFtZXRlcnMsIGUuZy4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtjb2RlY3M9dGhl
b3JhIiwgaXMgYSB0eXBlIHRoYXQgdGhlIHVzZXIgYWdlbnQga25vd3MgCisgICAgLy8gaXQgY2Fu
bm90IHJlbmRlci4KKyAgICBpZiAodHlwZSA9PSBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtKCkpIHsK
KyAgICAgICAgaWYgKCFjb2RlY3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAogICAgIE1lZGlhUGxheWVyRmFjdG9yeSogZW5naW5lID0gMDsKICAgICBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRlZCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKIApAQCAtMjQ3LDExICsyNzksMTEgQEAgTWVkaWFQbGF5ZXI6On5NZWRpYVBsYXllcigp
CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IENvbnRl
bnRUeXBlJiBjb250ZW50VHlwZSkKIHsKLSAgICBTdHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlLnR5
cGUoKTsKLSAgICBTdHJpbmcgY29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKCJjb2RlY3Mi
KTsKKyAgICBTdHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKS5sb3dlcigpOworICAgIFN0
cmluZyB0eXBlQ29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKGNvZGVjcygpKTsKIAotICAg
IC8vIGlmIHdlIGRvbid0IGtub3cgdGhlIE1JTUUgdHlwZSwgc2VlIGlmIHRoZSBleHRlbnNpb24g
Y2FuIGhlbHAKLSAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtIiB8fCB0eXBlID09ICJ0ZXh0L3BsYWluIikgeworICAgIC8vIElmIHRoZSBN
SU1FIHR5cGUgaXMgbWlzc2luZyBvciBpcyBub3QgbWVhbmluZ2Z1bCwgdHJ5IHRvIGZpZ3VyZSBp
dCBvdXQgZnJvbSB0aGUgVVJMLgorICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09IGFw
cGxpY2F0aW9uT2N0ZXRTdHJlYW0oKSB8fCB0eXBlID09IHRleHRQbGFpbigpKSB7CiAgICAgICAg
IGludCBwb3MgPSB1cmwucmV2ZXJzZUZpbmQoJy4nKTsKICAgICAgICAgaWYgKHBvcyA+PSAwKSB7
CiAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gdXJsLnN1YnN0cmluZyhwb3MgKyAxKTsK
QEAgLTI2MywxNCArMjk1LDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkKIAogICAgIE1lZGlhUGxheWVy
RmFjdG9yeSogZW5naW5lID0gMDsKICAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKQotICAgICAgICBl
bmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOwor
ICAgICAgICBlbmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCB0
eXBlQ29kZWNzKTsKIAotICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGFuIGVuZ2luZSB0aGF0IGNs
YWltcyB0aGUgTUlNRSB0eXBlLCBqdXN0IHVzZSB0aGUgZmlyc3QgZW5naW5lCi0gICAgaWYgKCFl
bmdpbmUgJiYgIWluc3RhbGxlZE1lZGlhRW5naW5lcygpLmlzRW1wdHkoKSkKKyAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBhbiBlbmdpbmUgYW5kIG5vIE1JTUUgdHlwZSBpcyBzcGVjaWZpZWQsIGp1
c3QgdXNlIHRoZSBmaXJzdCBlbmdpbmUuICAKKyAgICBpZiAoIWVuZ2luZSAmJiAhaW5zdGFsbGVk
TWVkaWFFbmdpbmVzKCkuaXNFbXB0eSgpKSAgCiAgICAgICAgIGVuZ2luZSA9IGluc3RhbGxlZE1l
ZGlhRW5naW5lcygpWzBdOwogICAgIAotICAgIC8vIGRvbid0IGRlbGV0ZSBhbmQgcmVjcmVhdGUg
dGhlIHBsYXllciB1bmxlc3MgaXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBlbmdpbmUKLSAgICBp
ZiAoZW5naW5lICYmIG1fY3VycmVudE1lZGlhRW5naW5lICE9IGVuZ2luZSkgeworICAgIC8vIERv
bid0IGRlbGV0ZSBhbmQgcmVjcmVhdGUgdGhlIHBsYXllciB1bmxlc3MgaXQgY29tZXMgZnJvbSBh
IGRpZmZlcmVudCBlbmdpbmUgIAorICAgIGlmICghZW5naW5lKSB7ICAKKyAgICAgICAgbV9jdXJy
ZW50TWVkaWFFbmdpbmUgPSBlbmdpbmU7ICAKKyAgICAgICAgbV9wcml2YXRlLmNsZWFyKCk7ICAK
KyAgICB9IGVsc2UgaWYgKG1fY3VycmVudE1lZGlhRW5naW5lICE9IGVuZ2luZSkgeyAgCiAgICAg
ICAgIG1fY3VycmVudE1lZGlhRW5naW5lID0gZW5naW5lOwogICAgICAgICBtX3ByaXZhdGUuY2xl
YXIoKTsKICAgICAgICAgbV9wcml2YXRlLnNldChlbmdpbmUtPmNvbnN0cnVjdG9yKHRoaXMpKTsK
QEAgLTI5Miw2ICszMjcsMTEgQEAgYm9vbCBNZWRpYVBsYXllcjo6aGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzQXZhaWxhYmxlVmlkZW9GcmFt
ZSgpOwogfQogICAgIAordm9pZCBNZWRpYVBsYXllcjo6cHJlcGFyZUZvclJlbmRlcmluZygpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cHJlcGFyZUZvclJlbmRlcmluZygpOworfQorICAgIAog
Ym9vbCBNZWRpYVBsYXllcjo6Y2FuTG9hZFBvc3RlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Y2FuTG9hZFBvc3RlcigpOwpAQCAtNTIyLDE0ICs1NjIsMjAgQEAgdm9pZCBNZWRp
YVBsYXllcjo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBwLCBj
b25zdCBJbnRSZWN0JgogCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyOjpz
dXBwb3J0c1R5cGUoQ29udGVudFR5cGUgY29udGVudFR5cGUpCiB7Ci0gICAgU3RyaW5nIHR5cGUg
PSBjb250ZW50VHlwZS50eXBlKCk7Ci0gICAgU3RyaW5nIGNvZGVjcyA9IGNvbnRlbnRUeXBlLnBh
cmFtZXRlcigiY29kZWNzIik7Ci0gICAgTWVkaWFQbGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBjaG9v
c2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOworICAgIFN0cmluZyB0
eXBlID0gY29udGVudFR5cGUudHlwZSgpLmxvd2VyKCk7CisgICAgU3RyaW5nIHR5cGVDb2RlY3Mg
PSBjb250ZW50VHlwZS5wYXJhbWV0ZXIoY29kZWNzKCkpOworCisgICAgLy8gNC44LjEwLjMgTUlN
RSB0eXBlcyAtIFRoZSBjYW5QbGF5VHlwZSh0eXBlKSBtZXRob2QgbXVzdCByZXR1cm4gdGhlIGVt
cHR5IHN0cmluZyBpZiB0eXBlIGlzIGEgdHlwZSB0aGF0IHRoZSAKKyAgICAvLyB1c2VyIGFnZW50
IGtub3dzIGl0IGNhbm5vdCByZW5kZXIgb3IgaXMgdGhlIHR5cGUgImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIKKyAgICBpZiAodHlwZSA9PSBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtKCkpCisgICAg
ICAgIHJldHVybiBJc05vdFN1cHBvcnRlZDsKKworICAgIE1lZGlhUGxheWVyRmFjdG9yeSogZW5n
aW5lID0gY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3ModHlwZSwgdHlwZUNvZGVjcyk7
CiAKICAgICBpZiAoIWVuZ2luZSkKICAgICAgICAgcmV0dXJuIElzTm90U3VwcG9ydGVkOwogCi0g
ICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7Cisg
ICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIHR5cGVDb2RlY3Mp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
Zz4mIHR5cGVzKQpAQCAtNjU1LDYgKzcwMSwxMiBAQCB2b2lkIE1lZGlhUGxheWVyOjpyYXRlQ2hh
bmdlZCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVyUmF0ZUNoYW5n
ZWQodGhpcyk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXI6OnBsYXliYWNrU3RhdGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNs
aWVudC0+bWVkaWFQbGF5ZXJQbGF5YmFja1N0YXRlQ2hhbmdlZCh0aGlzKTsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA2OTQ1ODcy
Li5lMjI1ZjYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC02
OSw2ICs2OSw3IEBAIHN0cnVjdCBQbGF0Zm9ybU1lZGlhIHsKICAgICAgICAgUVRNb3ZpZVZpc3Vh
bENvbnRleHRUeXBlLAogICAgICAgICBHU3RyZWFtZXJHV29ybGRUeXBlLAogICAgICAgICBDaHJv
bWl1bU1lZGlhUGxheWVyVHlwZSwKKyAgICAgICAgUXRNZWRpYVBsYXllclR5cGUsCiAgICAgfSB0
eXBlOwogCiAgICAgdW5pb24gewpAQCAtNzcsNiArNzgsNyBAQCBzdHJ1Y3QgUGxhdGZvcm1NZWRp
YSB7CiAgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KiBxdE1vdmllVmlzdWFsQ29udGV4dDsK
ICAgICAgICAgR1N0cmVhbWVyR1dvcmxkKiBnc3RyZWFtZXJHV29ybGQ7CiAgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogY2hyb21pdW1NZWRpYVBsYXllcjsKKyAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBxdE1lZGlhUGxheWVyOwogICAgIH0gbWVkaWE7CiB9
OwogCkBAIC0xMTksNiArMTIxLDkgQEAgcHVibGljOgogICAgIC8vIHRoZSBwbGF5YmFjayByYXRl
IGhhcyBjaGFuZ2VkCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUmF0ZUNoYW5nZWQoTWVk
aWFQbGF5ZXIqKSB7IH0KIAorICAgIC8vIHRoZSBwbGF5L3BhdXNlIHN0YXR1cyBjaGFuZ2VkCisg
ICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5
ZXIqKSB7IH0KKwogICAgIC8vIFRoZSBNZWRpYVBsYXllciBoYXMgZm91bmQgcG90ZW50aWFsbHkg
cHJvYmxlbWF0aWMgbWVkaWEgY29udGVudC4KICAgICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxs
eSB0byB0cmlnZ2VyIHN3YXBwaW5nIGZyb20gYSA8dmlkZW8+CiAgICAgLy8gZWxlbWVudCB0byBh
biA8ZW1iZWQ+IGluIHN0YW5kYWxvbmUgZG9jdW1lbnRzCkBAIC0yMzksNiArMjQ0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgdGltZUNoYW5nZWQoKTsKICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAg
ICAgdm9pZCByYXRlQ2hhbmdlZCgpOworICAgIHZvaWQgcGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsK
ICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwogCiAgICAgdm9pZCByZXBhaW50KCk7CkBAIC0y
NDYsNiArMjUyLDcgQEAgcHVibGljOgogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtZWRpYVBsYXll
ckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXJDbGllbnQ7IH0KIAogICAgIGJv
b2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OworICAgIHZvaWQgcHJlcGFyZUZvclJl
bmRlcmluZygpOwogCiAgICAgYm9vbCBjYW5Mb2FkUG9zdGVyKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRQb3N0ZXIoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllclByaXZhdGUuaAppbmRleCA0MGFlYWNiLi4zN2UzY2VkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTEyMyw2ICsxMjMs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1v
dmllTG9hZFR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsgfQogCisg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JSZW5kZXJpbmcoKSB7IH0KKwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQ
aG9ub24uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVQaG9ub24uY3BwCmluZGV4IDNjNmM1YWEuLjhiZWRmZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXll
ciogcGxheWVyKQorTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpNZWRpYVBsYXllclByaXZhdGVQ
aG9ub24oTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAs
IG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCkBAIC0xMTgsMTkgKzExOCwxOSBAQCBNZWRpYVBsYXll
clByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQogICAgIGNv
bm5lY3QobV9tZWRpYU9iamVjdCwgU0lHTkFMKHRvdGFsVGltZUNoYW5nZWQocWludDY0KSksIHRo
aXMsIFNMT1QodG90YWxUaW1lQ2hhbmdlZChxaW50NjQpKSk7CiB9CiAKLU1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBs
YXllcikKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKLSAgICByZXR1cm4gbmV3IE1lZGlh
UGxheWVyUHJpdmF0ZShwbGF5ZXIpOworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uKHBsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFy
IHJlZ2lzdHJhcikKIHsKICAgICBpZiAoaXNBdmFpbGFibGUoKSkKICAgICAgICAgcmVnaXN0cmFy
KGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7CiB9CiAKIAotTWVkaWFQ
bGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK01lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbjo6fk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbigpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5nIHZpZGVvd2lkZ2V0Iik7CiAgICAg
bV92aWRlb1dpZGdldC0+Y2xvc2UoKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBNZWRpYVBsYXllclBy
aXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQogICAgIG1fbWVkaWFPYmplY3QgPSAwOwogfQog
Ci1IYXNoU2V0PFN0cmluZz4mIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydGVkVHlwZXNDYWNo
ZSgpCitIYXNoU2V0PFN0cmluZz4mIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c3VwcG9ydGVk
VHlwZXNDYWNoZSgpCiB7CiAgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBzdXBwb3J0ZWRUeXBl
czsKICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmlzRW1wdHkoKSkKQEAgLTE5MCwxMiArMTkwLDEy
IEBAIEhhc2hTZXQ8U3RyaW5nPiYgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0ZWRUeXBlc0Nh
Y2hlKCkKICAgICByZXR1cm4gc3VwcG9ydGVkVHlwZXM7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVQaG9ub246OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
PiYgdHlwZXMpCiB7CiAgICAgdHlwZXMgPSBzdXBwb3J0ZWRUeXBlc0NhY2hlKCk7CiB9CiAKLU1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK01lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzdXBwb3J0c1R5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKIHsKICAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CkBAIC0y
MDUsMTQgKzIwNSwxNCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgYwogICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpo
YXNWaWRlbygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW8o
KSBjb25zdAogewogICAgIGJvb2wgaGFzVmlkZW8gPSBtX21lZGlhT2JqZWN0LT5oYXNWaWRlbygp
OwogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW8oKSAt
PiAlcyIsIGhhc1ZpZGVvID8gInRydWUiIDogImZhbHNlIik7CiAgICAgcmV0dXJuIGhhc1ZpZGVv
OwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25zdAorYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhhc0F1ZGlvKCkgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogUGhvbm9uOjpNZWRpYU9iamVjdCBkb2VzIG5vdCBoYXZlIHN1Y2ggYSBoYXNBdWRpbygpIGZ1
bmN0aW9uCiAgICAgYm9vbCBoYXNBdWRpbyA9IHRydWU7CkBAIC0yMjAsNyArMjIwLDcgQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKICAgICByZXR1cm4gaGFzQXVk
aW87CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJs
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
CiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpsb2FkKFwiJXNc
IikiLCB1cmwudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTI0MSwzMyArMjQxLDMzIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogICAgIHNldFZpc2libGUo
bV9wbGF5ZXItPnZpc2libGUoKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5j
ZWxMb2FkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpjYW5jZWxMb2FkKCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpw
bGF5KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwbGF5KCkKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnBsYXkoKSIpOwogICAgIG1fbWVkaWFP
YmplY3QtPnBsYXkoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZSgpCiB7CiAgICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZSgpIik7CiAgICAgbV9tZWRpYU9iamVjdC0+
cGF1c2UoKTsKIH0KIAogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYXVzZWQoKSBjb25zdAogewogICAgIGJv
b2wgcGF1c2VkID0gbV9tZWRpYU9iamVjdC0+c3RhdGUoKSA9PSBQaG9ub246OlBhdXNlZFN0YXRl
OwogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2VkKCkgLS0+
ICVzIiwgcGF1c2VkID8gInRydWUiIDogImZhbHNlIik7CiAgICAgcmV0dXJuIHBhdXNlZDsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgcG9zaXRpb24pCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2VlayhmbG9hdCBwb3NpdGlvbikKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNlZWsoJWYpIiwgcG9zaXRpb24pOwog
CkBAIC0yODAsMTIgKzI4MCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9h
dCBwb3NpdGlvbikKICAgICBtX21lZGlhT2JqZWN0LT5zZWVrKHBvc2l0aW9uICogMTAwMC4wZik7
CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZWVraW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAorZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVy
biAwLjBmOwpAQCAtMjk5LDcgKzI5OSw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVy
YXRpb24oKSBjb25zdAogICAgIHJldHVybiBkdXJhdGlvbjsKIH0KIAotZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpjdXJyZW50VGltZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVQ
aG9ub246OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKICAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1f
bWVkaWFPYmplY3QtPmN1cnJlbnRUaW1lKCkgLyAxMDAwLjBmOwogCkBAIC0zMDcsNDggKzMwNyw0
OCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKICAgICBy
ZXR1cm4gY3VycmVudFRpbWU7CiB9CiAKLVBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5
ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0CitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlh
UGxheWVyUHJpdmF0ZVBob25vbjo6YnVmZmVyZWQoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiAgICAgcmV0dXJuIFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQogCi1mbG9hdCBNZWRp
YVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXll
clByaXZhdGVQaG9ub246Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gMC4wZjsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVQaG9u
b246OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiAwOwogfQogCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBj
b25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp0b3RhbEJ5dGVzKCkgY29u
c3QKIHsKICAgICAvL25vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0KQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OnNldFJhdGUoZmxvYXQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNldFZvbHVtZSgpIik7CiAgICAg
bV9hdWRpb091dHB1dC0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRNdXRlZChib29sIG11dGVkKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9u
b246OnNldE11dGVkKGJvb2wgbXV0ZWQpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjpzZXRNdXRlZCgpIik7CiAgICAgbV9hdWRpb091dHB1dC0+c2V0TXV0ZWQo
bXV0ZWQpOwogfQogCi1NZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uOjpuZXR3b3JrU3RhdGUoKSBjb25zdAogewogICAgIGNvbnN0IFFN
ZXRhT2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9iamVjdCgpOwogICAgIFFNZXRhRW51bSBu
ZXR3b3JrU3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9mRW51bWVy
YXRvcigiTmV0d29ya1N0YXRlIikpOwpAQCAtMzU2LDcgKzM1Niw3IEBAIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAogICAg
IHJldHVybiBtX25ldHdvcmtTdGF0ZTsKIH0KIAotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK01lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB7CiAgICAg
Y29uc3QgUU1ldGFPYmplY3QqIG1ldGFPYmogPSB0aGlzLT5tZXRhT2JqZWN0KCk7CiAgICAgUU1l
dGFFbnVtIHJlYWR5U3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9m
RW51bWVyYXRvcigiUmVhZHlTdGF0ZSIpKTsKQEAgLTM2NCw3ICszNjQsNyBAQCBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGU6OnJlYWR5U3RhdGUoKSBjb25zdAogICAg
IHJldHVybiBtX3JlYWR5U3RhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRh
dGVTdGF0ZXMoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnVwZGF0ZVN0YXRlcygp
CiB7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25l
dHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0g
bV9yZWFkeVN0YXRlOwpAQCAtNDEyLDcgKzQxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp1cGRhdGVTdGF0ZXMoKQogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKICAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNldFZpc2libGUoJXMpIiwg
dmlzaWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwpAQCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3ZpZGVvV2lk
Z2V0LT5zZXRWaXNpYmxlKG1faXNWaXNpYmxlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUGhvbm9uOjpzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKCFt
X3ZpZGVvV2lkZ2V0KQogICAgICAgICByZXR1cm47CkBAIC00MzQsNyArNDM0LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKICAgICAg
ICAgbV92aWRlb1dpZGdldC0+cmVzaXplKG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQo
KSk7CiB9CiAKLUludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0
CitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bmF0dXJhbFNpemUoKSBjb25zdAog
ewogICAgIGlmICghaGFzVmlkZW8oKSkgewogICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVQaG9ub246Om5hdHVyYWxTaXplKCkgLT4gJWR4JWQiLApAQCAtNDU1LDcgKzQ1NSw3
IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG5hdHVyYWxTaXplOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZXZlbnRG
aWx0ZXIoUU9iamVjdCogb2JqLCBRRXZlbnQqIGV2ZW50KQorYm9vbCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OmV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwgUUV2ZW50KiBldmVudCkKIHsKICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlVwZGF0ZVJlcXVlc3QpCiAgICAgICAgIG1f
cGxheWVyLT5yZXBhaW50KCk7CkBAIC00NjMsNyArNDYzLDcgQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OmV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwgUUV2ZW50KiBldmVudCkKICAgICByZXR1
cm4gUU9iamVjdDo6ZXZlbnRGaWx0ZXIob2JqLCBldmVudCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGVjdCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAoZ3JhcGhpY3NDb250ZWN0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ4MSw3ICs0ODEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRlY3QsIGNvbnN0IEludFJlY3QmCiAKIC8vID09PT09
PT09PT09PT09PT09PT09PT0gUGhvbm9uOjpNZWRpYU9iamVjdCBzaWduYWxzID09PT09PT09PT09
PT09PT09PT09PT0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnN0YXRlQ2hhbmdlZChQaG9u
b246OlN0YXRlIG5ld1N0YXRlLCBQaG9ub246OlN0YXRlIG9sZFN0YXRlKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVQaG9ub246OnN0YXRlQ2hhbmdlZChQaG9ub246OlN0YXRlIG5ld1N0YXRlLCBQ
aG9ub246OlN0YXRlIG9sZFN0YXRlKQogewogICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2Jq
ID0gdGhpcy0+bWV0YU9iamVjdCgpOwogICAgIFFNZXRhRW51bSBwaG9ub25TdGF0ZXMgPSBtZXRh
T2JqLT5lbnVtZXJhdG9yKG1ldGFPYmotPmluZGV4T2ZFbnVtZXJhdG9yKCJQaG9ub25TdGF0ZSIp
KTsKQEAgLTQ5MSw0OCArNDkxLDQ4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdGF0ZUNo
YW5nZWQoUGhvbm9uOjpTdGF0ZSBuZXdTdGF0ZSwgUGhvbm9uOjpTdGF0ZSBvbGRTCiAgICAgdXBk
YXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptZXRhRGF0YUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om1ldGFEYXRhQ2hhbmdlZCgpCiB7
CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjptZXRhRGF0YUNoYW5n
ZWQoKSIpOwogICAgIExPR19NRURJQU9CSkVDVCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2Vla2FibGVDaGFuZ2VkKGJvb2wpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6c2Vla2FibGVDaGFuZ2VkKGJvb2wpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBM
T0dfTUVESUFPQkpFQ1QoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVv
Q2hhbmdlZChib29sIGhhc1ZpZGVvKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhh
c1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZVBob25vbjo6aGFzVmlkZW9DaGFuZ2VkKCVzKSIsIGhhc1ZpZGVvID8gInRydWUi
IDogImZhbHNlIik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJTdGF0dXMo
aW50KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmJ1ZmZlclN0YXR1cyhpbnQpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBMT0dfTUVESUFPQkpFQ1QoKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OmZpbmlzaGVkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uOjpmaW5pc2hlZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBMT0dfTUVE
SUFPQkpFQ1QoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRTb3VyY2VD
aGFuZ2VkKGNvbnN0IFBob25vbjo6TWVkaWFTb3VyY2UmKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OmN1cnJlbnRTb3VyY2VDaGFuZ2VkKGNvbnN0IFBob25vbjo6TWVkaWFTb3VyY2Um
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgTE9HX01FRElBT0JKRUNUKCk7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjphYm91dFRvRmluaXNoKCkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjphYm91dFRvRmluaXNoKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIExPR19NRURJQU9CSkVDVCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
dG90YWxUaW1lQ2hhbmdlZChxaW50NjQgdG90YWxUaW1lKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVQaG9ub246OnRvdGFsVGltZUNoYW5nZWQocWludDY0IHRvdGFsVGltZSkKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnRvdGFsVGltZUNoYW5nZWQoJWxsZCki
LCB0b3RhbFRpbWUpOwogICAgIExPR19NRURJQU9CSkVDVCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKaW5kZXgg
ZmY2YTAxYy4uZDc5MzY3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCkBAIC00MCwxMyArNDAsMTMgQEAgUVRf
RU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBNZWRpYVBs
YXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZSB7CisgICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uIDogcHVibGljIFFP
YmplY3QsIHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogCiAgICAgICAgIFFf
T0JKRUNUCiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRl
KCk7CisgICAgICAgIH5NZWRpYVBsYXllclByaXZhdGVQaG9ub24oKTsKIAogICAgICAgICAvLyBU
aGVzZSBlbnVtcyBhcmUgdXNlZCBmb3IgZGVidWdnaW5nCiAgICAgICAgIFFfRU5VTVMoUmVhZHlT
dGF0ZSBOZXR3b3JrU3RhdGUgUGhvbm9uU3RhdGUpCkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRvdGFsVGltZUNoYW5nZWQocWludDY0KTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOwor
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVQaG9ub24oTWVkaWFQbGF5ZXIqKTsKICAgICAgICAg
c3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBw
bGF5ZXIpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nPiYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVF0LmNwcAppbmRleCA1MjVhYWY0Li42OTAzMWFmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApA
QCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1
ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJxd2ViZnJh
bWUuaCIKQEAgLTUxLDE3ICs1MywxNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLU1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQ
cml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK01lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVy
KQogewotICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcik7CisgICAgcmV0
dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGVRdChwbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdp
c3RyYXIpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKICAgICByZWdpc3RyYXIoY3JlYXRlLCBn
ZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiAmc3VwcG9ydGVkKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdDo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+
ICZzdXBwb3J0ZWQpCiB7CiAgICAgUVN0cmluZ0xpc3QgdHlwZXMgPSBRTWVkaWFQbGF5ZXI6OnN1
cHBvcnRlZE1pbWVUeXBlcygpOwogCkBAIC03Miw3ICs3NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4gJnN1cHBvcnRlZCkKICAg
ICB9CiB9CiAKLU1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiBtaW1lLCBjb25zdCBTdHJpbmcmIGNvZGVjKQorTWVk
aWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVRdDo6c3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYgbWltZSwgY29uc3QgU3RyaW5nJiBjb2RlYykKIHsKICAgICBpZiAoIW1p
bWUuc3RhcnRzV2l0aCgiYXVkaW8vIikgJiYgIW1pbWUuc3RhcnRzV2l0aCgidmlkZW8vIikpCiAg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CkBAIC04MywyMCArODUs
MjMgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBv
cnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGMKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1h
eUJlU3VwcG9ydGVkOwogfQogCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogbV9wbGF5ZXIocGxheWVyKQorTWVkaWFQbGF5
ZXJQcml2YXRlUXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVF0KE1lZGlhUGxheWVyKiBwbGF5ZXIpCisg
ICAgOiBtX3dlYkNvcmVQbGF5ZXIocGxheWVyKQogICAgICwgbV9tZWRpYVBsYXllcihuZXcgUU1l
ZGlhUGxheWVyKQogICAgICwgbV9tZWRpYVBsYXllckNvbnRyb2woMCkKICAgICAsIG1fdmlkZW9J
dGVtKG5ldyBRR3JhcGhpY3NWaWRlb0l0ZW0pCiAgICAgLCBtX3ZpZGVvU2NlbmUobmV3IFFHcmFw
aGljc1NjZW5lKQogICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAsIG1fY3VycmVu
dFNpemUoMCwgMCkKKyAgICAsIG1fbmF0dXJhbFNpemUoUmVuZGVyVmlkZW86OmRlZmF1bHRTaXpl
KCkpCiAgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1faXNTZWVraW5nKGZhbHNlKQog
ICAgICwgbV9jb21wb3NpdGVkKGZhbHNlKQogICAgICwgbV9xdWV1ZWRTZWVrKC0xKQorICAgICwg
bV9wcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRvKQogewotICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQo
bV92aWRlb0l0ZW0pOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9J
dGVtKTsKICAgICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogCiAgICAgLy8g
U2lnbmFsIEhhbmRsZXJzCkBAIC0xMDYsNiArMTExLDggQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpN
ZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICAgICAgICAgIHRoaXMs
IFNMT1Qoc3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUpKSk7CiAgICAgY29ubmVjdCht
X21lZGlhUGxheWVyLCBTSUdOQUwoZXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLAogICAgICAg
ICAgICAgdGhpcywgU0xPVChoYW5kbGVFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKSkpOworICAg
IGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKGJ1ZmZlclN0YXR1c0NoYW5nZWQoaW50KSks
CisgICAgICAgICAgICB0aGlzLCBTTE9UKGJ1ZmZlclN0YXR1c0NoYW5nZWQoaW50KSkpOwogICAg
IGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpKSwK
ICAgICAgICAgICAgIHRoaXMsIFNMT1QoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkpKTsKICAgICBj
b25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChwb3NpdGlvbkNoYW5nZWQocWludDY0KSksCkBA
IC0xMjAsNDggKzEyNyw2OSBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciogcGxheWVyKQogICAgICAgICAgICB0aGlzLCBTTE9UKG5hdGl2ZVNpemVD
aGFuZ2VkKFFTaXplRikpKTsKIAogICAgIC8vIEdyYWIgdGhlIHBsYXllciBjb250cm9sCi0gICAg
UU1lZGlhU2VydmljZSogc2VydmljZSA9IG1fbWVkaWFQbGF5ZXItPnNlcnZpY2UoKTsKLSAgICBp
ZiAoc2VydmljZSkgeworICAgIGlmIChRTWVkaWFTZXJ2aWNlKiBzZXJ2aWNlID0gbV9tZWRpYVBs
YXllci0+c2VydmljZSgpKSB7CiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDb250cm9sID0gcW9iamVj
dF9jYXN0PFFNZWRpYVBsYXllckNvbnRyb2wgKj4oCiAgICAgICAgICAgICAgICAgc2VydmljZS0+
cmVxdWVzdENvbnRyb2woUU1lZGlhUGxheWVyQ29udHJvbF9paWQpKTsKICAgICB9CiB9CiAKLU1l
ZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSgpCitNZWRpYVBsYXllclByaXZh
dGVRdDo6fk1lZGlhUGxheWVyUHJpdmF0ZVF0KCkKIHsKKyAgICBtX21lZGlhUGxheWVyLT5kaXNj
b25uZWN0KHRoaXMpOworICAgIG1fbWVkaWFQbGF5ZXItPnN0b3AoKTsKKyAgICBtX21lZGlhUGxh
eWVyLT5zZXRNZWRpYShRTWVkaWFDb250ZW50KCkpOworICAgIAogICAgIGRlbGV0ZSBtX21lZGlh
UGxheWVyOwogICAgIGRlbGV0ZSBtX3ZpZGVvU2NlbmU7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNWaWRlbygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpoYXNW
aWRlbygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFi
bGUoKTsKKwkvLyBKdXN0IGZvciB0ZXN0aW5nLCBkb24ndCBjb21taXQKKwlyZXR1cm4gdHJ1ZTsK
KyAgLy9yZXR1cm4gbV9tZWRpYVBsYXllci0+aXNWaWRlb0F2YWlsYWJsZSgpOwogfQogCi1ib29s
IE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6aGFzQXVkaW8oKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUXQ6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9tZWRpYVVy
bCA9IHVybDsKKworICAgIC8vIFF0TXVsdGltZWRpYSBkb2VzIG5vdCBoYXZlIGFuIEFQSSB0byB0
aHJvdHRsZSBsb2FkaW5nCisgICAgLy8gc28gd2UgaGFuZGxlIHRoaXMgb3Vyc2VsdmVzIGJ5IGRl
bGF5aW5nIHRoZSBsb2FkCisgICAgaWYgKG1fcHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6Tm9uZSl7
CisgICAgCS8vIE1heSBuZWVkIHRvIGFkZCB0aGlzIGluIGxhdGVyCisgICAgCS8vfHwgbV93ZWJD
b3JlUGxheWVyLT5yZXF1aXJlc0Z1bGxzY3JlZW5WaWRlb1BsYXliYWNrKCkpIHsKKyAgICAgICAg
bV9kZWxheWluZ0xvYWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29t
bWl0TG9hZCh1cmwpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpjb21taXRMb2Fk
KGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIC8vIFdlIGFyZSBub3cgbG9hZGluZwogICAgIGlm
IChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICBtX3BsYXllci0+bmV0
d29ya1N0YXRlQ2hhbmdlZCgpOworICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKICAgICB9CiAKICAgICAvLyBBbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB5
ZXQKICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgewog
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgICAgICBtX3dlYkNvcmVQbGF5ZXIt
PnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAgICAgfQogCiAgICAgY29uc3QgUVVybCByVXJsID0gUVVy
bChRU3RyaW5nKHVybCkpOwogICAgIGNvbnN0IFFTdHJpbmcgc2NoZW1lID0gclVybC5zY2hlbWUo
KS50b0xvd2VyKCk7CiAKICAgICAvLyBHcmFiIHRoZSBjbGllbnQgbWVkaWEgZWxlbWVudAotICAg
IEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50
Kj4obV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworICAgIEhUTUxNZWRpYUVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV93ZWJDb3JlUGxheWVy
LT5tZWRpYVBsYXllckNsaWVudCgpKTsKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbWVkaWEgY29u
dGVudCB3aXRoIGEgbmV0d29yayByZXF1ZXN0IGlmIHRoZSByZXNvdXJjZSBpcyBodHRwW3NdCiAg
ICAgaWYgKHNjaGVtZSA9PSAiaHR0cCIgfHwgc2NoZW1lID09ICJodHRwcyIpIHsKQEAgLTIwOCwz
MiArMjM2LDUzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYg
dXJsKQogICAgIC8vIGVuZ2luZSB3aGljaCBkb2VzLgogICAgIG1fbWVkaWFQbGF5ZXItPnNldE11
dGVkKGVsZW1lbnQtPm11dGVkKCkpOwogICAgIG1fbWVkaWFQbGF5ZXItPnNldFZvbHVtZShzdGF0
aWNfY2FzdDxpbnQ+KGVsZW1lbnQtPnZvbHVtZSgpICogMTAwLjApKTsKKyAgICAKKyAgICAvLyBT
ZXR0aW5nIGEgbWVkaWEgc291cmNlIHdpbGwgc3RhcnQgbG9hZGluZyB0aGUgbWVkaWEsIGJ1dCB3
ZSBuZWVkCisgICAgLy8gdG8gcHJlLXJvbGwgYXMgd2VsbCB0byBnZXQgdmlkZW8gc2l6ZS1oaW50
cyBhbmQgYnVmZmVyLXN0YXR1cworICAgIGlmIChlbGVtZW50LT5wYXVzZWQoKSkKKyAgICAgICAg
bV9tZWRpYVBsYXllci0+cGF1c2UoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXIt
PnBsYXkoKTsKKyAgICAKIH0KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlc3VtZUxvYWQo
KQoreworICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjYW5jZWxMb2FkKCkKKyAgICBpZiAoIW1fbWVkaWFVcmwuaXNOdWxsKCkpCisgICAgICAg
IGNvbW1pdExvYWQobV9tZWRpYVVybCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
OmNhbmNlbExvYWQoKQogewogICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlhKFFNZWRpYUNvbnRl
bnQoKSk7CiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpwbGF5KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnByZXBhcmVUb1BsYXkoKQorewor
ICAgIGlmIChtX21lZGlhUGxheWVyLT5tZWRpYSgpLmlzTnVsbCgpIHx8IG1fZGVsYXlpbmdMb2Fk
KQorICAgICAgICByZXN1bWVMb2FkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
OnBsYXkoKQogewogICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlKQogICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0
OjpwYXVzZSgpCiB7CiAgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxh
eWVyOjpQbGF5aW5nU3RhdGUpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7CiB9CiAK
LWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAorYm9vbCBNZWRpYVBsYXll
clByaXZhdGVRdDo6cGF1c2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gKG1fbWVkaWFQbGF5ZXIt
PnN0YXRlKCkgIT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpOwogfQogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlvbikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OnNlZWsoZmxvYXQgcG9zaXRpb24pCiB7CiAgICAgaWYgKCFtX21lZGlhUGxheWVyLT5p
c1NlZWthYmxlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2OSwxMiArMzE4LDEyIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHBvc2l0aW9uKQogICAgIH0KIH0KIAotYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcoKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6c2Vla2luZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faXNTZWVraW5nOwogfQog
Ci1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVhZHlTdGF0
ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVybiAwLjBmOwpAQCAt
Mjg4LDEzICszMzcsMTIgQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIGR1cmF0aW9uOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6
OmN1cnJlbnRUaW1lKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpjdXJyZW50
VGltZSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUgPSBtX21lZGlhUGxheWVyLT5w
b3NpdGlvbigpIC8gMTAwMC4wZjsKLSAgICByZXR1cm4gY3VycmVudFRpbWU7CisgICAgcmV0dXJu
IG1fbWVkaWFQbGF5ZXItPnBvc2l0aW9uKCkgLyAxMDAwLjBmOwogfQogCi1QYXNzUmVmUHRyPFRp
bWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAorUGFzc1JlZlB0
cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVRdDo6YnVmZmVyZWQoKSBjb25zdAogewog
ICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwog
CkBAIC0zMTIsNyArMzYwLDcgQEAgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclBy
aXZhdGU6OmJ1ZmZlcmVkKCkgY29uc3QKICAgICByZXR1cm4gYnVmZmVyZWQucmVsZWFzZSgpOwog
fQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Citm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVRdDo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fbWVkaWFQbGF5ZXJDb250cm9sKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMCwx
OCArMzY4LDE4IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKCkg
Y29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5ZXJDb250cm9s
LT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAwLjBmOwogfQog
Ci11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKK3Vuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpieXRlc0xvYWRlZCgpIGNvbnN0CiB7CiAgICAgdW5z
aWduZWQgcGVyY2VudGFnZSA9IG1fbWVkaWFQbGF5ZXItPmJ1ZmZlclN0YXR1cygpOwogCiAgICAg
aWYgKHBlcmNlbnRhZ2UgPT0gMTAwKSB7CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBN
ZWRpYVBsYXllcjo6SWRsZSkgewogICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6SWRsZTsKLSAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7
CisgICAgICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlRW5v
dWdoRGF0YSkgewogICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVF
bm91Z2hEYXRhOwotICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cisg
ICAgICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTM0Miw3ICszOTAsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZh
dGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKICAgICByZXR1cm4gcGVyY2VudGFnZTsKIH0KIAotdW5z
aWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKICAgICBpZiAobV9tZWRp
YVBsYXllci0+YXZhaWxhYmxlTWV0YURhdGEoKS5jb250YWlucyhRdE11bHRpbWVkaWFLaXQ6OlNp
emUpKQogICAgICAgICByZXR1cm4gbV9tZWRpYVBsYXllci0+bWV0YURhdGEoUXRNdWx0aW1lZGlh
S2l0OjpTaXplKS50b0ludCgpOwpAQCAtMzUwLDUyICszOTgsNTkgQEAgdW5zaWduZWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKICAgICByZXR1cm4gMTAwOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdDo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQor
eworICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7CisgICAgaWYgKG1fZGVsYXlpbmdMb2FkICYmIG1f
cHJlbG9hZCAhPSBNZWRpYVBsYXllcjo6Tm9uZSkKKyAgICAgICAgcmVzdW1lTG9hZCgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7CiAgICAg
bV9tZWRpYVBsYXllci0+c2V0UGxheWJhY2tSYXRlKHJhdGUpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7CiAgICAgbV9tZWRpYVBsYXllci0+c2V0
Vm9sdW1lKHN0YXRpY19jYXN0PGludD4odm9sdW1lICogMTAwLjApKTsKIH0KIAotYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OnN1cHBvcnRzTXV0aW5nKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlUXQ6OnN1cHBvcnRzTXV0aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0OjpzZXRNdXRlZChib29sIG11dGVkKQogewogICAgIG1fbWVkaWFQ
bGF5ZXItPnNldE11dGVkKG11dGVkKTsKIH0KIAotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBN
ZWRpYVBsYXllclByaXZhdGU6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CitNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpuZXR3b3JrU3RhdGUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKIH0KIAotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK01lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZWFkeVN0YXRlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9yZWFkeVN0YXRlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKIHsKICAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjptZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRp
YVN0YXR1cykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om1lZGlhU3RhdHVzQ2hhbmdlZChR
TWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IpCiB7CiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSBzdGF0ZSkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXQ6OnN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlIHN0YXRlKQogewog
ICAgIGlmIChzdGF0ZSAhPSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSAmJiBtX2lzU2Vla2lu
ZyAmJiBtX3F1ZXVlZFNlZWsgPj0gMCkgewogICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRQb3Np
dGlvbihtX3F1ZXVlZFNlZWspOwpAQCAtNDAzLDEyICs0NTgsMTYgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlIHN0YXRlKQogICAgIH0K
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om5hdGl2ZVNpemVDaGFuZ2VkKGNvbnN0IFFT
aXplRiYpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpuYXRpdmVTaXplQ2hhbmdlZChjb25z
dCBRU2l6ZUYmIHNpemUpCiB7Ci0gICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7CisgICAgaWYg
KCFzaXplLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uYXR1cmFsU2l6ZSA9
IHNpemUudG9TaXplKCk7CisgICAgbV93ZWJDb3JlUGxheWVyLT5zaXplQ2hhbmdlZCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cXVldWVkU2Vla1RpbWVvdXQoKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdDo6cXVldWVkU2Vla1RpbWVvdXQoKQogewogICAgIC8vIElmIHdlIGhh
dmVuJ3QgaGVhcmQgYW55dGhpbmcsIGFzc3VtZSB0aGUgcGxheWVyIGlzIG5vdyBwYXVzZWQKICAg
ICAvLyBhbmQgd2UgY2FuIGF0dGVtcHQgdGhlIHNlZWsKQEAgLTQyMSw0MCArNDgwLDQ1IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpxdWV1ZWRTZWVrVGltZW91dCgpCiAgICAgfQogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVvdXQoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6c2Vla1RpbWVvdXQoKQogewogICAgIC8vIElmIHdlIGhhdmVuJ3QgaGVhcmQgYW55
dGhpbmcsIGFzc3VtZSB0aGUgc2VlayBzdWNjZWVkZWQKICAgICBpZiAobV9pc1NlZWtpbmcpIHsK
LSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1fd2ViQ29yZVBsYXll
ci0+dGltZUNoYW5nZWQoKTsKICAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKICAgICB9CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwb3NpdGlvbkNoYW5nZWQocWludDY0KQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkKIHsKICAgICAv
LyBPbmx5IHByb3BvZ2F0ZSB0aGlzIGV2ZW50IGlmIHdlIGFyZSBzZWVraW5nCiAgICAgaWYgKG1f
aXNTZWVraW5nICYmIG1fcXVldWVkU2VlayA9PSAtMSkgewotICAgICAgICBtX3BsYXllci0+dGlt
ZUNoYW5nZWQoKTsKKyAgICAgICAgbV93ZWJDb3JlUGxheWVyLT50aW1lQ2hhbmdlZCgpOwogICAg
ICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmR1cmF0aW9uQ2hhbmdlZChxaW50NjQpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0
OjpidWZmZXJTdGF0dXNDaGFuZ2VkKGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpkdXJhdGlvbkNoYW5nZWQocWludDY0KQogewot
ICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKKyAgICBtX3dlYkNvcmVQbGF5ZXItPmR1
cmF0aW9uQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dm9sdW1lQ2hh
bmdlZChpbnQgdm9sdW1lKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6dm9sdW1lQ2hhbmdl
ZChpbnQgdm9sdW1lKQogewotICAgIG1fcGxheWVyLT52b2x1bWVDaGFuZ2VkKHN0YXRpY19jYXN0
PGZsb2F0Pih2b2x1bWUpIC8gMTAwLjApOworICAgIG1fd2ViQ29yZVBsYXllci0+dm9sdW1lQ2hh
bmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSAvIDEwMC4wKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRdDo6bXV0ZWRDaGFuZ2VkKGJvb2wgbXV0ZWQpCiB7Ci0gICAgbV9wbGF5ZXItPm11
dGVDaGFuZ2VkKG11dGVkKTsKKyAgICBtX3dlYkNvcmVQbGF5ZXItPm11dGVDaGFuZ2VkKG11dGVk
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0Ojp1cGRhdGVTdGF0ZXMoKQogewogICAgIC8vIFN0b3JlIHRoZSBv
bGQgc3RhdGVzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhIGNoYW5nZSBhbmQgcmFpc2UgY2hhbmdl
IGV2ZW50cwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0g
bV9uZXR3b3JrU3RhdGU7CkBAIC00OTksMTMgKzU2MywxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAvLyBCcmVha2luZyB0aGlzIGludmFyaWFudCB3aWxs
IGNhdXNlIHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGZvciBtdWx0aXBsZQogICAg
IC8vIHNvdXJjZXMgdG8gZmFpbC4KICAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3Rh
dGUpCi0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgICAgICBtX3dl
YkNvcmVQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAKICAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgIT0gb2xkTmV0d29ya1N0YXRlKQotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hh
bmdlZCgpOworICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKICAgICBpZiAoc2l6ZSA9PSBtX2N1cnJlbnRTaXplKQogICAgICAgICByZXR1cm47CkBA
IC01MTQsMTUgKzU3OCwzMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQogICAgIG1fdmlkZW9JdGVtLT5zZXRTaXplKFFTaXplRihRU2l6ZShz
aXplKSkpOwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBj
b25zdAorSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRdDo6bmF0dXJhbFNpemUoKSBjb25zdAog
ewotICAgIGlmICghaGFzVmlkZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2
ZU1ldGFkYXRhKQorICAgIGlmICghaGFzVmlkZW8oKSB8fCAgbV9yZWFkeVN0YXRlIDwgTWVkaWFQ
bGF5ZXI6OkhhdmVNZXRhZGF0YSkgewogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworICAgIH0K
IAotICAgIHJldHVybiBJbnRTaXplKG1fdmlkZW9JdGVtLT5uYXRpdmVTaXplKCkudG9TaXplKCkp
OworICAgIHJldHVybiBtX25hdHVyYWxTaXplOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF0OjpyZW1vdmVWaWRlb0l0ZW0oKQoreworICAgIG1fb2xkTmF0dXJhbFNpemUgPSBtX25hdHVy
YWxTaXplOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KHN0YXRpY19jYXN0PFFH
cmFwaGljc1ZpZGVvSXRlbSo+KDApKTsKKyAgICBtX3ZpZGVvU2NlbmUtPnJlbW92ZUl0ZW0obV92
aWRlb0l0ZW0pOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6cmVzdG9yZVZpZGVvSXRlbSgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vmlk
ZW9PdXRwdXQobV92aWRlb0l0ZW0pOworICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVv
SXRlbSk7CisgICAgLy8gRklYTUU6IGEgcXRtb2JpbGl0eSBidWcsIG5lZWQgdG8gcmVzZXQgdGhl
IHNpemUgd2hlbiByZXN0b3JlIHRoZSB2aWRlb2l0ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBpcyAw
CisgICAgLy8gaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVE1PQklMSVRZ
LTk3MQorICAgIG5hdGl2ZVNpemVDaGFuZ2VkKFFTaXplKG1fb2xkTmF0dXJhbFNpemUpKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBpZiAobV9jb21wb3NpdGVkKQpAQCAtNTM0LDIyICs2MTUsMjAgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKICAgICBpZiAoIW1faXNWaXNpYmxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBHcmFiIHRoZSBwYWludGVyIGFuZCB3aWRnZXQKICAgICBRUGFpbnRlciogcGFpbnRl
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgLy8gUmVuZGVyIHRoZSB2aWRl
bwogICAgIG1fdmlkZW9TY2VuZS0+cmVuZGVyKHBhaW50ZXIsIFFSZWN0RihRUmVjdChyZWN0KSks
IG1fdmlkZW9JdGVtLT5zY2VuZUJvdW5kaW5nUmVjdCgpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnJlcGFpbnQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVwYWludCgp
CiB7Ci0gICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKKyAgICBtX3dlYkNvcmVQbGF5ZXItPnJlcGFp
bnQoKTsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiB7
Ci0gICAgYm9vbCBjb21wb3NpdGVkID0gbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZChtX3BsYXllcik7CisgICAgTWVkaWFQ
bGF5ZXJDbGllbnQqIGNsaWVudCA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQo
KTsKKyAgICBib29sIGNvbXBvc2l0ZWQgPSBjbGllbnQtPm1lZGlhUGxheWVyUmVuZGVyaW5nQ2Fu
QmVBY2NlbGVyYXRlZChtX3dlYkNvcmVQbGF5ZXIpOwogICAgIGlmIChjb21wb3NpdGVkID09IG1f
Y29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NjAsMTIgKzYzOSwyMSBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQog
ICAgICAgICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogfQogCi1QbGF0Zm9y
bUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorUGxhdGZv
cm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2NvbXBvc2l0ZWQgPyBtX3ZpZGVvSXRlbSA6IDA7CiB9CisKICNlbmRpZgog
CitQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwbGF0Zm9ybU1lZGlhKCkgY29u
c3QKK3sKKyAgICBQbGF0Zm9ybU1lZGlhIHBtOworICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlh
OjpRdE1lZGlhUGxheWVyVHlwZTsKKyAgICBwbS5tZWRpYS5xdE1lZGlhUGxheWVyID0gY29uc3Rf
Y2FzdDxNZWRpYVBsYXllclByaXZhdGVRdCo+KHRoaXMpOworICAgIHJldHVybiBwbTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaW5jbHVkZSAibW9jX01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUXQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5
ZXJQcml2YXRlUXQuaAppbmRleCBkNzI0MDRjLi4wOWJiNDNlIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCkBAIC0zMywxMyAr
MzMsMTMgQEAgUVRfRU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQ
cml2YXRlSW50ZXJmYWNlIHsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF0IDogcHVibGljIFFP
YmplY3QsIHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogCiAgICAgUV9PQkpF
Q1QKIAogcHVibGljOgogICAgIHN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNy
ZWF0ZShNZWRpYVBsYXllciogcGxheWVyKTsKLSAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7Cisg
ICAgfk1lZGlhUGxheWVyUHJpdmF0ZVF0KCk7CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKQEAgLTUwLDEwICs1MCwxMyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyAmdXJsKTsKKyAgICB2b2lkIGNvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZv
aWQgcmVzdW1lTG9hZCgpOwogICAgIHZvaWQgY2FuY2VsTG9hZCgpOwogCiAgICAgdm9pZCBwbGF5
KCk7CiAgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpOwogCiAgICAg
Ym9vbCBwYXVzZWQoKSBjb25zdDsKICAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKQEAgLTY4LDYg
KzcxLDggQEAgcHVibGljOgogICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdDsKICAgICB2
b2lkIHNldE11dGVkKGJvb2wpOwogCisgICAgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQ
cmVsb2FkKTsKKwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkg
Y29uc3Q7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0Owog
CkBAIC04Myw3ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgIC8vIHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUg
bWVkaWEgZW5naW5lIGZvciB0aGUgY3VycmVudCBtZWRpYS4KQEAgLTkzLDYgKzk4LDEwIEBAIHB1
YmxpYzoKICAgICAvLyByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSBkaXJlY3RseSBjb21w
b3NpdGVkIHZpYSBHcmFwaGljc0xheWVyUXQgKGVzc2VudGlhbGx5IGEgUUdyYXBoaWNzSXRlbSop
CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5k
aWYKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworICAg
IFFNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUGxheWVy
OyB9CisgICAgdm9pZCByZW1vdmVWaWRlb0l0ZW0oKTsKKyAgICB2b2lkIHJlc3RvcmVWaWRlb0l0
ZW0oKTsKIAogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVk
aWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKQEAgLTEwMyw2ICsxMTIsNyBAQCBwcml2YXRlIHNsb3Rz
OgogICAgIHZvaWQgc2Vla1RpbWVvdXQoKTsKICAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZChxaW50
NjQpOwogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCk7CisgICAgdm9pZCBidWZmZXJT
dGF0dXNDaGFuZ2VkKGludCk7CiAgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CiAgICAgdm9p
ZCBtdXRlZENoYW5nZWQoYm9vbCk7CiAgICAgdm9pZCByZXBhaW50KCk7CkBAIC0xMTEsOSArMTIx
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogCiBwcml2YXRlOgotICAg
IE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOworICAgIE1lZGlhUGxheWVyUHJpdmF0
ZVF0KE1lZGlhUGxheWVyKik7CiAKLSAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgTWVk
aWFQbGF5ZXIqIG1fd2ViQ29yZVBsYXllcjsKICAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5
ZXI7CiAgICAgUU1lZGlhUGxheWVyQ29udHJvbCogbV9tZWRpYVBsYXllckNvbnRyb2w7CiAgICAg
UUdyYXBoaWNzVmlkZW9JdGVtKiBtX3ZpZGVvSXRlbTsKQEAgLTEyMywxMCArMTMzLDE1IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7
CiAKICAgICBJbnRTaXplIG1fY3VycmVudFNpemU7CisgICAgSW50U2l6ZSBtX25hdHVyYWxTaXpl
OworICAgIEludFNpemUgbV9vbGROYXR1cmFsU2l6ZTsKICAgICBib29sIG1faXNWaXNpYmxlOwog
ICAgIGJvb2wgbV9pc1NlZWtpbmc7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZWQ7CiAgICAgcWludDY0
IG1fcXVldWVkU2VlazsKKyAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7CisgICAg
Ym9vbCBtX2RlbGF5aW5nTG9hZDsKKyAgICBTdHJpbmcgbV9tZWRpYVVybDsKIH07CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IGRiYTc5MDIuLjUzMDg3MDMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApAQCAtOTg5LDcgKzk4OSwxMiBAQCBD
b250cm9sUGFydCBSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhR
U3R5bGVPcHRpb24mIG9wdGlvbiwgUgogCiBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFNZWRp
YUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xz
UXRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5
bGVTaGVldCkpOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmcobWVkaWFDb250cm9sc1F0VXNl
ckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNRdFVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKKworICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5jaHJvbWUoKS0+cmVxdWlyZXNGdWxs
c2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKQorICAgICAgICByZXN1bHQgKz0gU3RyaW5nKG1lZGlh
Q29udHJvbHNRdEZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250
cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIC8vIEhlbHBlciBjbGFzcyB0byB0cmFuc2Zvcm0gdGhlIHBhaW50ZXIncyB3b3Js
ZCBtYXRyaXggdG8gdGhlIG9iamVjdCdzIGNvbnRlbnQgYXJlYSwgc2NhbGVkIHRvIDAsMCwxMDAs
MTAwCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKaW5kZXggNjEwZmI1Zi4uMzk3ODhlYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcApAQCAtNTAsMjUgKzUwLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIFJlbmRlclZpZGVvOjpSZW5kZXJWaWRlbyhIVE1MVmlkZW9FbGVtZW50
KiB2aWRlbykKICAgICA6IFJlbmRlck1lZGlhKHZpZGVvKQogewotICAgIGlmICh2aWRlby0+cGxh
eWVyKCkgJiYgdmlkZW8tPnJlYWR5U3RhdGUoKSA+PSBIVE1MVmlkZW9FbGVtZW50OjpIQVZFX01F
VEFEQVRBKQotICAgICAgICBzZXRJbnRyaW5zaWNTaXplKHZpZGVvLT5wbGF5ZXIoKS0+bmF0dXJh
bFNpemUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFdoZW4gdGhlIG5hdHVyYWwgc2l6ZSBv
ZiB0aGUgdmlkZW8gaXMgdW5hdmFpbGFibGUsIHdlIHVzZSB0aGUgcHJvdmlkZWQKLSAgICAgICAg
Ly8gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mIHRoZSB2aWRlbyBlbGVtZW50IGFzIHRo
ZSBpbnRyaW5zaWMgc2l6ZSB1bnRpbAotICAgICAgICAvLyBiZXR0ZXIgdmFsdWVzIGJlY29tZSBh
dmFpbGFibGUuIElmIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIG5vdCBzZXQsIHdlIGZhbGwgYmFjawot
ICAgICAgICAvLyB0byBhIGRlZmF1bHQgdmlkZW8gc2l6ZSAoMzAweDE1MCkuCi0gICAgICAgIGlm
ICh2aWRlby0+aGFzQXR0cmlidXRlKHdpZHRoQXR0cikgJiYgdmlkZW8tPmhhc0F0dHJpYnV0ZSho
ZWlnaHRBdHRyKSkKLSAgICAgICAgICAgIHNldEludHJpbnNpY1NpemUoSW50U2l6ZSh2aWRlby0+
d2lkdGgoKSwgdmlkZW8tPmhlaWdodCgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKHZpZGVvLT5vd25l
ckRvY3VtZW50KCkgJiYgdmlkZW8tPm93bmVyRG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCkp
IHsKLSAgICAgICAgICAgIC8vIFZpZGVvIGluIHN0YW5kYWxvbmUgbWVkaWEgZG9jdW1lbnRzIHNo
b3VsZCBub3QgdXNlIHRoZSBkZWZhdWx0IDMwMHgxNTAKLSAgICAgICAgICAgIC8vIHNpemUgc2lu
Y2UgdGhleSBhbHNvIGhhdmUgYXVkaW8gdGhyb3duIGF0IHRoZW0uIEJ5IHNldHRpbmcgdGhlIGlu
dHJpbnNpYwotICAgICAgICAgICAgLy8gc2l6ZSB0byAzMDB4MSB0aGUgdmlkZW8gd2lsbCByZXNp
emUgaXRzZWxmIGluIHRoZXNlIGNhc2VzLCBhbmQgYXVkaW8gd2lsbAotICAgICAgICAgICAgLy8g
aGF2ZSB0aGUgY29ycmVjdCBoZWlnaHQgKGl0IG5lZWRzIHRvIGJlID4gMCBmb3IgY29udHJvbHMg
dG8gcmVuZGVyIHByb3Blcmx5KS4KLSAgICAgICAgICAgIHNldEludHJpbnNpY1NpemUoSW50U2l6
ZShkZWZhdWx0U2l6ZSgpLndpZHRoKCksIDEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXRJbnRyaW5zaWNTaXplKGRlZmF1bHRTaXplKCkpOwotICAgIH0KKyAgICBz
ZXRJbnRyaW5zaWNTaXplKGNhbGN1bGF0ZUludHJpbnNpY1NpemUoKSk7CiB9CiAKIFJlbmRlclZp
ZGVvOjp+UmVuZGVyVmlkZW8oKQpAQCAtOTIsMjQgKzc0LDYwIEBAIHZvaWQgUmVuZGVyVmlkZW86
OmludHJpbnNpY1NpemVDaGFuZ2VkKCkKIHsKICAgICBpZiAodmlkZW9FbGVtZW50KCktPnNob3Vs
ZERpc3BsYXlQb3N0ZXJJbWFnZSgpKQogICAgICAgICBSZW5kZXJNZWRpYTo6aW50cmluc2ljU2l6
ZUNoYW5nZWQoKTsKLSAgICB2aWRlb1NpemVDaGFuZ2VkKCk7IAorICAgIHVwZGF0ZUludHJpbnNp
Y1NpemUoKTsgCiB9CiAKLQotdm9pZCBSZW5kZXJWaWRlbzo6dmlkZW9TaXplQ2hhbmdlZCgpCit2
b2lkIFJlbmRlclZpZGVvOjp1cGRhdGVJbnRyaW5zaWNTaXplKCkKIHsKLSAgICBpZiAoIXBsYXll
cigpKQorICAgIEludFNpemUgc2l6ZSA9IGNhbGN1bGF0ZUludHJpbnNpY1NpemUoKTsKKyAgICBz
aXplLnNjYWxlKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisKKyAgICAvLyBOZXZlciBzZXQg
dGhlIGVsZW1lbnQgc2l6ZSB0byB6ZXJvIHdoZW4gaW4gYSBtZWRpYSBkb2N1bWVudC4KKyAgICBp
ZiAoc2l6ZS5pc0VtcHR5KCkgJiYgbm9kZSgpLT5vd25lckRvY3VtZW50KCkgJiYgbm9kZSgpLT5v
d25lckRvY3VtZW50KCktPmlzTWVkaWFEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
SW50U2l6ZSBzaXplID0gcGxheWVyKCktPm5hdHVyYWxTaXplKCk7Ci0gICAgaWYgKHNpemUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGlmIChub2RlKCktPm93bmVyRG9jdW1lbnQoKSAmJiBub2RlKCkt
Pm93bmVyRG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChzaXplICE9IGludHJpbnNpY1NpemUoKSkgewotICAgICAgICBzZXRJ
bnRyaW5zaWNTaXplKHNpemUpOwotICAgICAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7Ci0g
ICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgIH0KKworICAgIGlmIChzaXplID09IGlu
dHJpbnNpY1NpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SW50cmluc2ljU2l6ZShz
aXplKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CisgICAgc2V0TmVlZHNMYXlvdXQo
dHJ1ZSk7Cit9CisgICAgCitJbnRTaXplIFJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNT
aXplKCkKK3sKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyA9IHZpZGVvRWxlbWVudCgpOwor
ICAgIAorICAgIC8vIFNwZWMgdGV4dCBmcm9tIDQuOC42CisgICAgLy8KKyAgICAvLyBUaGUgaW50
cmluc2ljIHdpZHRoIG9mIGEgdmlkZW8gZWxlbWVudCdzIHBsYXliYWNrIGFyZWEgaXMgdGhlIGlu
dHJpbnNpYyB3aWR0aCAKKyAgICAvLyBvZiB0aGUgdmlkZW8gcmVzb3VyY2UsIGlmIHRoYXQgaXMg
YXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgdGhlIGludHJpbnNpYyAKKyAgICAvLyB3aWR0aCBv
ZiB0aGUgcG9zdGVyIGZyYW1lLCBpZiB0aGF0IGlzIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlz
IDMwMCBDU1MgcGl4ZWxzLgorICAgIC8vCisgICAgLy8gVGhlIGludHJpbnNpYyBoZWlnaHQgb2Yg
YSB2aWRlbyBlbGVtZW50J3MgcGxheWJhY2sgYXJlYSBpcyB0aGUgaW50cmluc2ljIGhlaWdodCAK
KyAgICAvLyBvZiB0aGUgdmlkZW8gcmVzb3VyY2UsIGlmIHRoYXQgaXMgYXZhaWxhYmxlOyBvdGhl
cndpc2UgaXQgaXMgdGhlIGludHJpbnNpYyAKKyAgICAvLyBoZWlnaHQgb2YgdGhlIHBvc3RlciBm
cmFtZSwgaWYgdGhhdCBpcyBhdmFpbGFibGU7IG90aGVyd2lzZSBpdCBpcyAxNTAgQ1NTIHBpeGVs
cy4KKyAgICAKKyAgICBpZiAocGxheWVyKCkgJiYgdmlkZW8tPnJlYWR5U3RhdGUoKSA+PSBIVE1M
VmlkZW9FbGVtZW50OjpIQVZFX01FVEFEQVRBKQorICAgICAgICByZXR1cm4gcGxheWVyKCktPm5h
dHVyYWxTaXplKCk7CisKKyAgICBpZiAodmlkZW8tPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgp
ICYmICFtX2NhY2hlZEltYWdlU2l6ZS5pc0VtcHR5KCkgJiYgIWVycm9yT2NjdXJyZWQoKSkgIAor
ICAgICAgICByZXR1cm4gbV9jYWNoZWRJbWFnZVNpemU7CisKKyAgICAvLyBXaGVuIHRoZSBuYXR1
cmFsIHNpemUgb2YgdGhlIHZpZGVvIGlzIHVuYXZhaWxhYmxlLCB3ZSB1c2UgdGhlIHByb3ZpZGVk
CisgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mIHRoZSB2aWRlbyBlbGVtZW50
IGFzIHRoZSBpbnRyaW5zaWMgc2l6ZSB1bnRpbAorICAgIC8vIGJldHRlciB2YWx1ZXMgYmVjb21l
IGF2YWlsYWJsZS4gCisgICAgaWYgKHZpZGVvLT5oYXNBdHRyaWJ1dGUod2lkdGhBdHRyKSAmJiB2
aWRlby0+aGFzQXR0cmlidXRlKGhlaWdodEF0dHIpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSh2
aWRlby0+d2lkdGgoKSwgdmlkZW8tPmhlaWdodCgpKTsKKworICAgIC8vIDx2aWRlbz4gaW4gc3Rh
bmRhbG9uZSBtZWRpYSBkb2N1bWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlIGRlZmF1bHQgMzAweDE1
MAorICAgIC8vIHNpemUgc2luY2UgdGhleSBhbHNvIGhhdmUgYXVkaW8tb25seSBmaWxlcy4gQnkg
c2V0dGluZyB0aGUgaW50cmluc2ljCisgICAgLy8gc2l6ZSB0byAzMDB4MSB0aGUgdmlkZW8gd2ls
bCByZXNpemUgaXRzZWxmIGluIHRoZXNlIGNhc2VzLCBhbmQgYXVkaW8gd2lsbAorICAgIC8vIGhh
dmUgdGhlIGNvcnJlY3QgaGVpZ2h0IChpdCBuZWVkcyB0byBiZSA+IDAgZm9yIGNvbnRyb2xzIHRv
IHJlbmRlciBwcm9wZXJseSkuCisgICAgaWYgKHZpZGVvLT5vd25lckRvY3VtZW50KCkgJiYgdmlk
ZW8tPm93bmVyRG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBJ
bnRTaXplKGRlZmF1bHRTaXplKCkud2lkdGgoKSwgMSk7CisKKyAgICByZXR1cm4gZGVmYXVsdFNp
emUoKTsKIH0KIAogdm9pZCBSZW5kZXJWaWRlbzo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0
ciBuZXdJbWFnZSwgY29uc3QgSW50UmVjdCogcmVjdCkKQEAgLTExNywxMCArMTM1LDE0IEBAIHZv
aWQgUmVuZGVyVmlkZW86OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIgbmV3SW1hZ2UsIGNv
bnN0IEludFJlY3QqIHJlY3QpCiAgICAgUmVuZGVyTWVkaWE6OmltYWdlQ2hhbmdlZChuZXdJbWFn
ZSwgcmVjdCk7CiAKICAgICAvLyBDYWNoZSB0aGUgaW1hZ2UgaW50cmluc2ljIHNpemUgc28gd2Ug
Y2FuIGNvbnRpbnVlIHRvIHVzZSBpdCB0byBkcmF3IHRoZSBpbWFnZSBjb3JyZWN0bHkKLSAgICAv
LyBldmVuIGFmdGVyIHdlIGtub3cgdGhlIHZpZGVvIGludHJpc2ljIHNpemUgYnV0IGFyZW4ndCBh
YmxlIHRvIGRyYXcgdmlkZW8gZnJhbWVzIHlldAotICAgIC8vICh3ZSBkb24ndCB3YW50IHRvIHNj
YWxlIHRoZSBwb3N0ZXIgdG8gdGhlIHZpZGVvIHNpemUpLgorICAgIC8vIGV2ZW4gaWYgd2Uga25v
dyB0aGUgdmlkZW8gaW50cmluc2ljIHNpemUgYnV0IGFyZW4ndCBhYmxlIHRvIGRyYXcgdmlkZW8g
ZnJhbWVzIHlldAorICAgIC8vICh3ZSBkb24ndCB3YW50IHRvIHNjYWxlIHRoZSBwb3N0ZXIgdG8g
dGhlIHZpZGVvIHNpemUgd2l0aG91dCBrZWVwaW5nIGFzcGVjdCByYXRpbykuCiAgICAgaWYgKHZp
ZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKSkKICAgICAgICAgbV9jYWNo
ZWRJbWFnZVNpemUgPSBpbnRyaW5zaWNTaXplKCk7CisKKyAgICAvLyBUaGUgaW50cmluc2ljIHNp
emUgaXMgbm93IHRoYXQgb2YgdGhlIGltYWdlLCBidXQgaW4gY2FzZSB3ZSBhbHJlYWR5IGhhZCB0
aGUKKyAgICAvLyBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUgdmlkZW8gd2UgY2FsbCB0aGlzIGhlcmUg
dG8gcmVzdG9yZSB0aGUgdmlkZW8gc2l6ZS4KKyAgICB1cGRhdGVJbnRyaW5zaWNTaXplKCk7CiB9
CiAKIEludFJlY3QgUmVuZGVyVmlkZW86OnZpZGVvQm94KCkgY29uc3QKQEAgLTE1Niw2ICsxNzgs
MTEgQEAgSW50UmVjdCBSZW5kZXJWaWRlbzo6dmlkZW9Cb3goKSBjb25zdAogICAgIHJldHVybiBy
ZW5kZXJCb3g7CiB9CiAgICAgCitib29sIFJlbmRlclZpZGVvOjpzaG91bGREaXNwbGF5VmlkZW8o
KSBjb25zdAoreworICAgIHJldHVybiAhdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0
ZXJJbWFnZSgpOworfQorCiB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBNZWRpYVBsYXllciogbWVkaWFQ
bGF5ZXIgPSBwbGF5ZXIoKTsKQEAgLTIwMCw2ICsyMjcsOCBAQCB2b2lkIFJlbmRlclZpZGVvOjp1
cGRhdGVGcm9tRWxlbWVudCgpCiAKIHZvaWQgUmVuZGVyVmlkZW86OnVwZGF0ZVBsYXllcigpCiB7
CisgICAgdXBkYXRlSW50cmluc2ljU2l6ZSgpOworCiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxh
eWVyID0gcGxheWVyKCk7CiAgICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmgKaW5kZXggYmIyYjA1Yy4uMmEzOWMxMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWRlby5oCkBAIC00MCw3ICs0MCw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJWaWRlbyhI
VE1MVmlkZW9FbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyVmlkZW8oKTsKIAotICAgIHZv
aWQgdmlkZW9TaXplQ2hhbmdlZCgpOwogICAgIEludFJlY3QgdmlkZW9Cb3goKSBjb25zdDsKIAog
ICAgIHN0YXRpYyBJbnRTaXplIGRlZmF1bHRTaXplKCk7CkBAIC01MCwxMSArNDksMTYgQEAgcHVi
bGljOgogICAgIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKICNlbmRp
ZgogCisgICAgdmlydHVhbCBib29sIHNob3VsZERpc3BsYXlWaWRlbygpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIGlubGluZSBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpOworICAgIEludFNpemUgY2FsY3VsYXRlSW50cmluc2lj
U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlSW50cmluc2ljU2l6ZSgpOworCiAgICAgdmlydHVhbCB2
b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqKTsKIAogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJW
aWRlbyI7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2lu
LmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCmluZGV4IDJjZWFhYzEu
LmEzZGI5Y2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2lu
LmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjgsNiAr
MjgsOSBAQAogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmlu
ZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+
CisjZW5kaWYKIAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25z
dCBQYWRkaW5nRGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVf
VklERU8pICYmIEVOQUJMRV9WSURFTworY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIg
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hh
bmRsZXIoKSB7fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1Bs
YXliYWNrKCkgY29uc3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xv
c2VkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3Jl
ZW4oUU1lZGlhUGxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigp
ID0gMDsKK307CisjZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJs
aWM6CkBAIC0xMjQsNyArMTQ0LDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlv
bnMsCiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRv
dWNoSW50ZXJhY3Rpb24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbFNj
cmVlblZpZGVvUGxheWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVu
c2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAppbmRleCA0NmNiY2IyLi4yYmJhNjE2IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCisrKyBiL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKQEAgLTY5LDExICs2OSwy
MiBAQAogI2luY2x1ZGUgPHF0ZXh0ZG9jdW1lbnQuaD4KICNpbmNsdWRlIDxxdG9vbHRpcC5oPgog
CisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkZ1bGxTY3JlZW5WaWRlb1F0LmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIiAKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aCIKKyNlbmRpZiAKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDaHJvbWVDbGllbnRRdDo6Q2hy
b21lQ2xpZW50UXQoUVdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkK
ICAgICAsIG1fZXZlbnRMb29wKDApCisjaWYgRU5BQkxFKFZJREVPKQorICAgICwgbV9mdWxsU2Ny
ZWVuVmlkZW8oMCkKKyNlbmRpZgogewogICAgIHRvb2xCYXJzVmlzaWJsZSA9IHN0YXR1c0JhclZp
c2libGUgPSBtZW51QmFyVmlzaWJsZSA9IHRydWU7CiB9CkBAIC04Miw2ICs5MywxMCBAQCBDaHJv
bWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0KCkKIHsKICAgICBpZiAobV9ldmVudExvb3ApCiAg
ICAgICAgIG1fZXZlbnRMb29wLT5leGl0KCk7CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZGVs
ZXRlIG1fZnVsbFNjcmVlblZpZGVvOworI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNTk5LDYgKzYxNCw1NCBA
QCBJbnRSZWN0IENocm9tZUNsaWVudFF0Ojp2aXNpYmxlUmVjdEZvclRpbGVkQmFja2luZ1N0b3Jl
KCkgY29uc3QKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorRnVsbFNjcmVlblZpZGVv
UXQqIENocm9tZUNsaWVudFF0OjpmdWxsU2NyZWVuVmlkZW8oKQoreworICAgIGlmICghbV9mdWxs
U2NyZWVuVmlkZW8pCisgICAgICAgIG1fZnVsbFNjcmVlblZpZGVvID0gbmV3IEZ1bGxTY3JlZW5W
aWRlb1F0KHRoaXMpOworICAgIHJldHVybiBtX2Z1bGxTY3JlZW5WaWRlbzsKK30KKworYm9vbCBD
aHJvbWVDbGllbnRRdDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnZpZGVvVGFnKSAmJiBmdWxsU2NyZWVuVmlkZW8oKS0+aXNWYWxpZCgpOworfQorCiti
b29sIENocm9tZUNsaWVudFF0OjpyZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkK
K3sKKyAgICByZXR1cm4gZnVsbFNjcmVlblZpZGVvKCktPnJlcXVpcmVzRnVsbFNjcmVlbkZvclZp
ZGVvUGxheWJhY2soKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6ZW50ZXJGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9F
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRm
b3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOwor
CisgICAgQVNTRVJUKHBsYXRmb3JtTWVkaWEudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlh
UGxheWVyVHlwZSk7CisgICAgaWYgKHBsYXRmb3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlh
OjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZ1bGxTY3Jl
ZW5WaWRlbygpLT5lbnRlckZ1bGxTY3JlZW5Gb3JOb2RlKG5vZGUpOworfQorCit2b2lkIENocm9t
ZUNsaWVudFF0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NF
UlQobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKworICAg
IEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0Vs
ZW1lbnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSB2aWRlb0Vs
ZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIEFTU0VSVChwbGF0Zm9ybU1lZGlhLnR5cGUg
PT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpOworICAgIGlmIChwbGF0Zm9ybU1l
ZGlhLnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZ1bGxTY3JlZW5WaWRlbygpLT5leGl0RnVsbFNjcmVlbkZvck5vZGUobm9k
ZSk7Cit9IAorI2VuZGlmCisKIFF0QWJzdHJhY3RXZWJQb3B1cCogQ2hyb21lQ2xpZW50UXQ6OmNy
ZWF0ZVNlbGVjdFBvcHVwKCkKIHsKICAgICBRdEFic3RyYWN0V2ViUG9wdXAqIHJlc3VsdCA9IG1f
cGxhdGZvcm1QbHVnaW4uY3JlYXRlU2VsZWN0SW5wdXRNZXRob2QoKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oIGIvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKaW5kZXggMzZiMDg4Ny4uMjc4YWFjZCAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKKysrIGIvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKQEAgLTQ5LDYgKzQ5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAgIGNs
YXNzIFF0QWJzdHJhY3RXZWJQb3B1cDsKICAgICBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHM7Cisg
ICAgY2xhc3MgRnVsbFNjcmVlblZpZGVvUXQ7CiAKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdCA6
IHB1YmxpYyBDaHJvbWVDbGllbnQKICAgICB7CkBAIC0xNTYsNiArMTU3LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIG5lZWRUb3VjaEV2ZW50cyhib29sKSB7
IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7CisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1F0
KiBmdWxsU2NyZWVuVmlkZW8oKTsKKyNlbmRpZgorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5P
cGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hv
b3NlciopOwogCkBAIC0xODMsNiArMTkyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIHN0YXR1c0JhclZpc2libGU7CiAgICAgICAgIGJvb2wgbWVudUJhclZpc2libGU7CiAg
ICAgICAgIFFFdmVudExvb3AqIG1fZXZlbnRMb29wOworI2lmIEVOQUJMRShWSURFTykKKyAgICAg
ICAgRnVsbFNjcmVlblZpZGVvUXQqIG1fZnVsbFNjcmVlblZpZGVvOworI2VuZGlmCiAKICAgICAg
ICAgUXRQbGF0Zm9ybVBsdWdpbiBtX3BsYXRmb3JtUGx1Z2luOwogICAgIH07CmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgYi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggZTI1NWFhYS4uNTk4
MDU1YSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNw
cApAQCAtMTgzLDUgKzE4MywxMiBAQCBRV2ViVG91Y2hNb2RpZmllciogUXRQbGF0Zm9ybVBsdWdp
bjo6Y3JlYXRlVG91Y2hNb2RpZmllcigpCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0g
cGx1Z2luKCk7CiAgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViVG91Y2hNb2RpZmllcio+
KHAtPmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlRvdWNoSW50ZXJhY3Rp
b24pKSA6IDA7CiB9CisjaWYgRU5BQkxFKFZJREVPKQorUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXIqIFF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQorewor
ICAgIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiogcCA9IHBsdWdpbigpOworICAgIHJldHVybiBwID8g
c3RhdGljX2Nhc3Q8UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIqPihwLT5jcmVhdGVFeHRlbnNp
b24oUVdlYktpdFBsYXRmb3JtUGx1Z2luOjpGdWxsU2NyZWVuVmlkZW9QbGF5ZXIpKSA6IDA7Cit9
CisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxh
dGZvcm1QbHVnaW4uaCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2lu
LmgKaW5kZXggMjI2MDc1OS4uYmVkM2MwNyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5oCkBAIC0zMSw2ICszMSw5IEBAIGNsYXNzIFFXZWJOb3RpZmljYXRp
b25QcmVzZW50ZXI7CiBjbGFzcyBRV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXI7CiBjbGFzcyBRV2Vi
U2VsZWN0RGF0YTsKIGNsYXNzIFFXZWJUb3VjaE1vZGlmaWVyOworI2lmIEVOQUJMRShWSURFTykK
K2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOworI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjEsNyArNjQsMTAgQEAgcHVibGljOgogICAgIFFXZWJOb3RpZmljYXRp
b25QcmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogICAgIFFXZWJIYXB0
aWNGZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGljRmVlZGJhY2tQbGF5ZXIoKTsKICAgICBRV2Vi
VG91Y2hNb2RpZmllciogY3JlYXRlVG91Y2hNb2RpZmllcigpOwotCisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyKCk7CisjZW5kaWYKKyAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigp
OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1
Z2luL1dlYlBsdWdpbi5jcHAgYi9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAppbmRleCBkMDI5YjczLi5kMWUxYTU2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQv
ZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAorKysgYi9XZWJLaXQvcXQvZXhh
bXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcApAQCAtMTksNyArMTksOSBAQAogICov
CiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAjaW5jbHVkZSA8
UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0
PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KQEAgLTIw
OCw2ICsyMTAsNzEgQEAgTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVTZWxlY3Rpb25Q
b3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0YSkKICAgICByZXNpemUoc2l6ZSgpLndpZHRo
KCksIHZpc2libGVJdGVtQ291bnQgKiBnTWFlbW9MaXN0SXRlbVNpemUpOwogfQogCisjaWYgZGVm
aW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworRnVsbFNjcmVlblZpZGVvV2lkZ2V0
OjpGdWxsU2NyZWVuVmlkZW9XaWRnZXQoUU1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBRVmlk
ZW9XaWRnZXQoKQorICAgICwgbV9tZWRpYVBsYXllcihwbGF5ZXIpCit7CisgICAgUV9BU1NFUlQo
bV9tZWRpYVBsYXllcik7CisKKyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFZpZGVvT3V0cHV0KHRoaXMpOworfQorCitib29sIEZ1bGxTY3JlZW5WaWRlb1dp
ZGdldDo6ZXZlbnQoUUV2ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSAgUUV2ZW50
OjpNb3VzZUJ1dHRvbkRibENsaWNrKSB7CisgICAgICAgIGVtaXQgZnVsbFNjcmVlbkNsb3NlZCgp
OworICAgICAgICBldi0+YWNjZXB0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisg
ICAgcmV0dXJuIFFXaWRnZXQ6OmV2ZW50KGV2KTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9X
aWRnZXQ6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPmtleSgp
ID09IFF0OjpLZXlfU3BhY2UpIHsKKyAgICAgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkg
PT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgICAgICBtX21lZGlhUGxheWVy
LT5wYXVzZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5
KCk7CisgICAgICAgIGV2LT5hY2NlcHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCisgICAgOiBt
X21lZGlhV2lkZ2V0KDApCit7Cit9CisKK0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5GdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKK30KKworYm9v
bCBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAg
UV9BU1NFUlQocGxheWVyKTsKKworICAgIG1fbWVkaWFXaWRnZXQgPSBuZXcgRnVsbFNjcmVlblZp
ZGVvV2lkZ2V0KHBsYXllcik7CisgICAgY29ubmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoZnVs
bFNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAg
IG1fbWVkaWFXaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgRnVsbFNjcmVlblZp
ZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1fbWVkaWFXaWRnZXQtPmhpZGUo
KTsKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdldDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsKK30K
KyNlbmRpZgorCiBib29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4
dGVuc2lvbikgY29uc3QKIHsKICAgICBzd2l0Y2ggKGV4dGVuc2lvbikgewpAQCAtMjE5LDYgKzI4
NiwxMCBAQCBib29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVu
c2lvbikgY29uc3QKICNlbmRpZgogICAgIGNhc2UgVG91Y2hJbnRlcmFjdGlvbjoKICAgICAgICAg
cmV0dXJuIHRydWU7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTwor
ICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzUs
NiArMzA2LDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lv
biBleHRlbnNpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246CiAg
ICAgICAgIHJldHVybiBuZXcgVG91Y2hNb2RpZmllcigpOworI2lmIGRlZmluZWQoRU5BQkxFX1ZJ
REVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXllcjoKKyAg
ICAgICAgcmV0dXJuIG5ldyBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAgICBk
ZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
ZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmggYi9XZWJLaXQvcXQvZXhhbXBsZXMv
cGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKaW5kZXggMDI0M2Y1Ny4uMmUwZTY5MiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCisrKyBi
L1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaApAQCAtMjQsNiAr
MjQsOSBAQAogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgogCiAjaW5jbHVk
ZSA8UURpYWxvZz4KKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCisj
aW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorI2VuZGlmCiAKIGNsYXNzIFFMaXN0V2lkZ2V0SXRlbTsK
IGNsYXNzIFFMaXN0V2lkZ2V0OwpAQCAtOTQsNiArOTcsNDAgQEAgcHVibGljOgogICAgIH0KIH07
CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCitjbGFzcyBGdWxs
U2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsKKyAgICBRX09CSkVDVAor
cHVibGljOgorICAgIEZ1bGxTY3JlZW5WaWRlb1dpZGdldChRTWVkaWFQbGF5ZXIqKTsKKyAgICB2
aXJ0dWFsIH5GdWxsU2NyZWVuVmlkZW9XaWRnZXQoKSB7fQorCitRX1NJR05BTFM6CisgICAgdm9p
ZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGV2ZW50KFFFdmVu
dCopOworICAgIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKKworcHJpdmF0ZToKKyAg
ICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7IC8vIG5vdCBvd25lZAorfTsKKworY2xhc3Mg
RnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxl
ciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7
CisgICAgdmlydHVhbCB+RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIGJvb2wgcmVxdWly
ZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0OworCitwdWJsaWMgUV9TTE9UUzoK
KyAgICB2b2lkIGVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKTsKKyAgICB2b2lkIGV4aXRG
dWxsU2NyZWVuKCk7CisKK3ByaXZhdGU6CisgICAgRnVsbFNjcmVlblZpZGVvV2lkZ2V0KiBtX21l
ZGlhV2lkZ2V0OyAvLyBvd25lZAorfTsKKyNlbmRpZgorCiBjbGFzcyBXZWJQbHVnaW4gOiBwdWJs
aWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgogewogICAgIFFfT0JKRUNU
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1w
bHVnaW4ucHJvIGIvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1
Z2luLnBybwppbmRleCA5Mjc1NjY1Li5jMWE2NTgyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvZXhh
bXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCisrKyBiL1dlYktpdC9xdC9l
eGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8KQEAgLTMsNiArMywxOSBA
QCBUQVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldChwbGF0Zm9ybXBsdWdpbikKIFRFTVBMQVRFID0g
bGliCiBDT05GSUcgKz0gcGx1Z2luCiAKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxp
dHkgaXMgYXZhaWxhYmxlCitsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCisjIEhUTUw1IE1l
ZGlhIFN1cHBvcnQKKyMgV2UgcmVxdWlyZSBRdE11bHRpbWVkaWEKKyFjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfVklERU89LikgeworICAgIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGlt
ZWRpYSkgeworICAgICAgICBDT05GSUcgKz0gbW9iaWxpdHkKKyAgICAgICAgTU9CSUxJVFkgKz0g
bXVsdGltZWRpYQorICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0wCisgICAgICAgIERF
RklORVMgKz0gRU5BQkxFX1ZJREVPPTEKKyAgICB9Cit9CiBERVNURElSID0gJCRbUVRfSU5TVEFM
TF9QTFVHSU5TXS93ZWJraXQKIAogU09VUkNFUyArPSBcCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
ZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9XZWJLaXQv
cXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKaW5kZXgg
ZjM4YThmYi4uMTJkYTJkZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3Jt
cGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCisrKyBiL1dlYktpdC9xdC9leGFtcGxlcy9w
bGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjgsNiArMjgsOSBAQAog
CiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVXJsPgorI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYK
IAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExMSw2ICsxMTQsMjMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5n
RGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYm
IEVOQUJMRV9WSURFTworY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMg
UU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVv
SGFuZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7
fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkg
Y29uc3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisK
K3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlh
UGxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpID0gMDsKK307
CisjZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0x
MjAsNyArMTQwLDggQEAgcHVibGljOgogICAgICAgICBNdWx0aXBsZVNlbGVjdGlvbnMsCiAgICAg
ICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCi0gICAgICAgIFRvdWNoSW50ZXJh
Y3Rpb24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbFNjcmVlblZpZGVv
UGxheWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRl
bnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79090</attachid>
            <date>2011-01-15 20:41:46 -0800</date>
            <delta_ts>2011-01-17 08:00:50 -0800</delta_ts>
            <desc>fix build issue</desc>
            <filename>51249.v3.patch</filename>
            <type>text/plain</type>
            <size>28029</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1ODg5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDEtMTUgIFlpIFNoZW4g
IDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9ybSBQbHVnaW4gdG8gc3VwcG9y
dCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIE1ha2UgTWVkaWFQbGF5ZXJQcml2
YXRlUXQgc3VwcG9ydCBhIGZ1bGxzY3JlZW4gcGxheWVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIExheW91dFRlc3RzL21lZGlhL21lZGlhLWZ1bGxzY3JlZW4taW5saW5lLmh0bWwg
YWxyZWFkeSBleGlzdHMuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgdGVzdCBmYWlsZWQgZm9yIFF0
IChRdE1lZGlhUGxheWVyKSBkdWUgdG8gZHVyYXRpb25jaGFuZ2UgZXZlbnQgZ2V0dGluZyBmaXJl
ZCB0d2ljZS4KKyAgICAgICAgU28sIHN0aWxsIHNraXAgaXQgZm9yIFF0LgorCisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogZmVhdHVyZXMucHJpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVF0OjpNZWRpYVBsYXllclByaXZhdGVRdCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6cmVtb3ZlVmlkZW9JdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXN0b3JlVmlkZW9JdGVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6bWVkaWFQbGF5ZXIpOgorCiAy
MDExLTAxLTE1ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzU3MDguCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwkocmV2aXNpb24gNzU4ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMzI1Nyw4ICszMjU3LDEzIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9W
SURFTz0xKSB7CiAKICAgICAgICAgUEtHQ09ORklHICs9IGdsaWItMi4wIGdpby0yLjAgZ3N0cmVh
bWVyLTAuMTAgZ3N0cmVhbWVyLWFwcC0wLjEwIGdzdHJlYW1lci1iYXNlLTAuMTAgZ3N0cmVhbWVy
LWludGVyZmFjZXMtMC4xMCBnc3RyZWFtZXItcGJ1dGlscy0wLjEwIGdzdHJlYW1lci1wbHVnaW5z
LWJhc2UtMC4xMCBnc3RyZWFtZXItdmlkZW8tMC4xMAogICAgICB9IGVsc2U6Y29udGFpbnMoTU9C
SUxJVFlfQ09ORklHLCBtdWx0aW1lZGlhKSB7Ci0gICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAotICAgICAgICBTT1VSQ0VTICs9IHBs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAorICAgICAgICBIRUFE
RVJTICs9IFwgCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclBy
aXZhdGVRdC5oIFwKKyAgICAgICAgICAgICQkUFdELy4uLy4uL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCisKKyAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAgXAorICAg
ICAgICAgICAgJCRQV0QvLi4vLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5W
aWRlb1F0LmNwcAogCiAgICAgICAgIENPTkZJRyAqPSBtb2JpbGl0eQogICAgICAgICBNT0JJTElU
WSArPSBtdWx0aW1lZGlhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9mZWF0dXJlcy5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCShyZXZpc2lvbiA3NTg4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDkgKzE1
MiwxMyBAQCBjb250YWlucyhNT0JJTElUWV9DT05GSUcsIHNlbnNvcnMpIHsKICAgICBjb250YWlu
cyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEpIHsKICAgICAgICAgREVGSU5FUyAtPSBFTkFC
TEVfVklERU89MAogICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCisgICAgICAgIERF
RklORVMgLT0gRU5BQkxFX1FUX01VTFRJTUVESUE9MAorICAgICAgICBERUZJTkVTICs9IEVOQUJM
RV9RVF9NVUxUSU1FRElBPTEKICAgICB9IGVsc2U6Y29udGFpbnMoUVRfQ09ORklHLCBwaG9ub24p
IHsKICAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MAogICAgICAgICBERUZJTkVTICs9
IEVOQUJMRV9WSURFTz0xCisgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1FUX01VTFRJTUVESUE9
MQorICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9RVF9NVUxUSU1FRElBPTAKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHJldmlzaW9uIDc1ODg4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZQogICAgICwgbV9xdWV1ZWRTZWVrKC0xKQogICAgICwgbV9wcmVsb2Fk
KE1lZGlhUGxheWVyOjpBdXRvKQogewotICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQobV92aWRlb0l0
ZW0pOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKICAg
ICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogCiAgICAgLy8gU2lnbmFsIEhh
bmRsZXJzCkBAIC01ODcsNiArNTg3LDIyIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
Om5hdHVyYWxTaXoKICAgICByZXR1cm4gbV9uYXR1cmFsU2l6ZTsKIH0KIAordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdDo6cmVtb3ZlVmlkZW9JdGVtKCkKK3sKKyAgICBtX29sZE5hdHVyYWxTaXpl
ID0gbV9uYXR1cmFsU2l6ZTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChzdGF0
aWNfY2FzdDxRR3JhcGhpY3NWaWRlb0l0ZW0qPigwKSk7CisgICAgbV92aWRlb1NjZW5lLT5yZW1v
dmVJdGVtKG1fdmlkZW9JdGVtKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVz
dG9yZVZpZGVvSXRlbSgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92
aWRlb0l0ZW0pOworICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CisgICAg
Ly8gRklYTUU6IGEgcXRtb2JpbGl0eSBidWcsIG5lZWQgdG8gcmVzZXQgdGhlIHNpemUgd2hlbiBy
ZXN0b3JlIHRoZSB2aWRlb2l0ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBpcyAwCisgICAgLy8gaHR0
cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVE1PQklMSVRZLTk3MQorICAgIG5h
dGl2ZVNpemVDaGFuZ2VkKFFTaXplKG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUXQuaAkocmV2aXNpb24gNzU4ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
I2lmIFVTRShURVhUVVJFX01BUFBFUikKQEAgLTEwOCw2ICsxMDgsMTEgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0Owor
CisgICAgUU1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQ
bGF5ZXI7IH0KKyAgICB2b2lkIHJlbW92ZVZpZGVvSXRlbSgpOworICAgIHZvaWQgcmVzdG9yZVZp
ZGVvSXRlbSgpOworCiBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgbWVkaWFTdGF0dXNDaGFuZ2Vk
KFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlRXJyb3IoUU1lZGlh
UGxheWVyOjpFcnJvcik7CkBAIC0xNDIsNiArMTQ3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNp
emUgbV9jdXJyZW50U2l6ZTsKICAgICBJbnRTaXplIG1fbmF0dXJhbFNpemU7CisgICAgSW50U2l6
ZSBtX29sZE5hdHVyYWxTaXplOwogICAgIGJvb2wgbV9pc1Zpc2libGU7CiAgICAgYm9vbCBtX2lz
U2Vla2luZzsKICAgICBib29sIG1fY29tcG9zaXRlZDsKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzU4ODkpCisr
KyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIw
MTEtMDEtMTUgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gRXh0ZW5kIHRoZSBQbGF0Zm9y
bSBQbHVnaW4gdG8gc3VwcG9ydCBmdWxsIHNjcmVlbiB2aWRlbyBoYW5kbGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI0OQorCisgICAgICAgIEFk
ZCBhIG5ldyB3ZWJraXQgcGxhdGZvcm0gcGx1Z2luIGludGVyZmFjZSB0byBzdXBwb3J0IGZ1bGwg
c2NyZWVuIHZpZGVvIGhhbmRsZXIuCisKKyAgICAgICAgKiBBcGkvcXdlYmtpdHBsYXRmb3JtcGx1
Z2luLmg6CisgICAgICAgIChRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6UVdlYkZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5R
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OkNocm9t
ZUNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojp+Q2hyb21lQ2xp
ZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmZ1bGxTY3JlZW5WaWRl
byk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c3VwcG9ydHNGdWxsc2NyZWVu
Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cmVxdWlyZXNGdWxs
c2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRR
dDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGll
bnRRdDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRl
b1F0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGdWxsU2NyZWVuVmlkZW9RdDo6RnVs
bFNjcmVlblZpZGVvUXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbFNjcmVlblZpZGVvUXQ6On5G
dWxsU2NyZWVuVmlkZW9RdCk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsU2NyZWVuVmlkZW9RdDo6
ZW50ZXJGdWxsU2NyZWVuRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsU2NyZWVuVmlk
ZW9RdDo6ZXhpdEZ1bGxTY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxTY3Jl
ZW5WaWRlb1F0OjphYm91dFRvQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbFNjcmVlblZp
ZGVvUXQ6Om1lZGlhUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxTY3JlZW5WaWRlb1F0
OjptZWRpYVBsYXllckZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbFNjcmVlblZpZGVv
UXQ6OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2spOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RnVsbFNjcmVlblZpZGVvUXQ6OmlzVmFsaWQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0
UGxhdGZvcm1QbHVnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRQbGF0Zm9ybVBsdWdpbjo6
Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5oOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dl
YlBsdWdpbi5jcHA6CisgICAgICAgIChGdWxsU2NyZWVuVmlkZW9XaWRnZXQ6OkZ1bGxTY3JlZW5W
aWRlb1dpZGdldCk6CisgICAgICAgIChGdWxsU2NyZWVuVmlkZW9XaWRnZXQ6OmV2ZW50KToKKyAg
ICAgICAgKEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudCk6CisgICAgICAgIChG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAg
KEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAg
ICAgKEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxh
eWJhY2spOgorICAgICAgICAoRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsU2NyZWVu
KToKKyAgICAgICAgKEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKToKKyAg
ICAgICAgKFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoV2ViUGx1Z2lu
OjpjcmVhdGVFeHRlbnNpb24pOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dl
YlBsdWdpbi5oOgorICAgICAgICAoRnVsbFNjcmVlblZpZGVvV2lkZ2V0Ojp+RnVsbFNjcmVlblZp
ZGVvV2lkZ2V0KToKKyAgICAgICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBs
dWdpbi5wcm86CisgICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRm
b3JtcGx1Z2luLmg6CisgICAgICAgIChRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6UVdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAoUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6On5RV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisKIDIwMTEtMDEtMTUgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI3NTcwOC4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3Jt
cGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVn
aW4uaAkocmV2aXNpb24gNzU4ODgpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxRT2Jq
ZWN0PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVMVElNRURJQSkg
JiYgRU5BQkxFX1FUX01VTFRJTUVESUEKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYK
IAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5n
RGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVMVElN
RURJQSkgJiYgRU5BQkxFX1FUX01VTFRJTUVESUEKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdl
YkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9y
VmlkZW9QbGF5YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbFNj
cmVlbkNsb3NlZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsU2NyZWVuKFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxT
Y3JlZW4oKSA9IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgog
ewogcHVibGljOgpAQCAtMTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVT
ZWxlY3Rpb25zLAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAg
ICAgICBUb3VjaEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAg
IEZ1bGxTY3JlZW5WaWRlb1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwpAQCAtMTMyLDcgKzE1
Myw3IEBAIHB1YmxpYzoKIH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotUV9ERUNMQVJFX0lOVEVS
RkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3Jt
UGx1Z2luLzEuNiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4s
ICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogUVRfRU5EX05BTUVT
UEFDRQogCiAjZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gKSW5kZXg6IFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2aXNpb24gNzU4ODgpCisr
KyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw2ICs3NiwxNCBAQAogI2luY2x1ZGUgPHF0b29sdGlwLmg+CiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoUVRfTVVMVElNRURJ
QSkKKyNpbmNsdWRlICJGdWxsU2NyZWVuVmlkZW9RdC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVt
ZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNpdGVkTGlua3ND
YWxsYmFja3MgPSBmYWxzZTsKQEAgLTgzLDYgKzkxLDkgQEAgYm9vbCBDaHJvbWVDbGllbnRRdDo6
ZHVtcFZpc2l0ZWRMaW5rc0NhbAogQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVudFF0KFFXZWJQ
YWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2V2ZW50TG9v
cCgwKQorI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKFFUX01VTFRJTUVESUEpCisgICAgLCBt
X2Z1bGxTY3JlZW5WaWRlbygwKQorI2VuZGlmCiB7CiAgICAgdG9vbEJhcnNWaXNpYmxlID0gc3Rh
dHVzQmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNpYmxlID0gdHJ1ZTsKIH0KQEAgLTkxLDYgKzEwMiwx
MCBAQCBDaHJvbWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0KCkKIHsKICAgICBpZiAobV9ldmVu
dExvb3ApCiAgICAgICAgIG1fZXZlbnRMb29wLT5leGl0KCk7CisKKyNpZiBFTkFCTEUoVklERU8p
ICYmIEVOQUJMRShRVF9NVUxUSU1FRElBKQorICAgIGRlbGV0ZSBtX2Z1bGxTY3JlZW5WaWRlbzsK
KyNlbmRpZgogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKQEAgLTY0OCw2ICs2NjMsNTQgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRR
dDo6dmlzaWJsZVJlY3RGb3JUaQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pICYmIEVO
QUJMRShRVF9NVUxUSU1FRElBKQorRnVsbFNjcmVlblZpZGVvUXQqIENocm9tZUNsaWVudFF0Ojpm
dWxsU2NyZWVuVmlkZW8oKQoreworICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW8pCisgICAgICAg
IG1fZnVsbFNjcmVlblZpZGVvID0gbmV3IEZ1bGxTY3JlZW5WaWRlb1F0KHRoaXMpOworICAgIHJl
dHVybiBtX2Z1bGxTY3JlZW5WaWRlbzsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6c3VwcG9y
dHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2Rl
KTsKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiBm
dWxsU2NyZWVuVmlkZW8oKS0+aXNWYWxpZCgpOworfQorCitib29sIENocm9tZUNsaWVudFF0Ojpy
ZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkKK3sKKyAgICByZXR1cm4gZnVsbFNj
cmVlblZpZGVvKCktPnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRRdDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQor
eworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1Rh
ZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRp
YSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOworCisgICAgQVNTRVJUKHBsYXRmb3Jt
TWVkaWEudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSk7CisgICAgaWYg
KHBsYXRmb3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZnVsbFNjcmVlblZpZGVvKCktPmVudGVyRnVsbFNjcmVl
bkZvck5vZGUobm9kZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmV4aXRGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9F
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAgIFBsYXRm
b3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpOwor
CisgICAgQVNTRVJUKHBsYXRmb3JtTWVkaWEudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRdE1lZGlh
UGxheWVyVHlwZSk7CisgICAgaWYgKHBsYXRmb3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9ybU1lZGlh
OjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnVsbFNjcmVlblZp
ZGVvKCktPmV4aXRGdWxsU2NyZWVuRm9yTm9kZShub2RlKTsKK30gCisjZW5kaWYKKwogUVdlYlNl
bGVjdE1ldGhvZCogQ2hyb21lQ2xpZW50UXQ6OmNyZWF0ZVNlbGVjdFBvcHVwKCkgY29uc3QKIHsK
ICAgICBRV2ViU2VsZWN0TWV0aG9kKiByZXN1bHQgPSBtX3BsYXRmb3JtUGx1Z2luLmNyZWF0ZVNl
bGVjdElucHV0TWV0aG9kKCk7CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuaAkocmV2aXNpb24gNzU4ODgpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiAgICAgY2xhc3MgUXRB
YnN0cmFjdFdlYlBvcHVwOwogICAgIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50czsKKyNpZiBFTkFC
TEUoVklERU8pICYmIEVOQUJMRShRVF9NVUxUSU1FRElBKQorICAgIGNsYXNzIEZ1bGxTY3JlZW5W
aWRlb1F0OworI2VuZGlmCiAKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdCA6IHB1YmxpYyBDaHJv
bWVDbGllbnQKICAgICB7CkBAIC0xNjIsNiArMTY1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNo
RXZlbnRzKGJvb2wpIHsgfQogI2VuZGlmCisgCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUo
UVRfTVVMVElNRURJQSkKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZv
ck5vZGUoY29uc3QgTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5v
ZGUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlk
ZW9QbGF5YmFjaygpOworICAgICAgICBGdWxsU2NyZWVuVmlkZW9RdCogZnVsbFNjcmVlblZpZGVv
KCk7CisjZW5kaWYKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwg
UGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNv
bkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKTsKQEAgLTE5Niw2
ICsyMDcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1lbnVCYXJWaXNp
YmxlOwogICAgICAgICBRRXZlbnRMb29wKiBtX2V2ZW50TG9vcDsKIAorI2lmIEVOQUJMRShWSURF
TykgJiYgRU5BQkxFKFFUX01VTFRJTUVESUEpCisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1F0KiBt
X2Z1bGxTY3JlZW5WaWRlbzsKKyNlbmRpZgorCiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBWaXNp
dGVkTGlua3NDYWxsYmFja3M7CiAKICAgICAgICAgbXV0YWJsZSBRdFBsYXRmb3JtUGx1Z2luIG1f
cGxhdGZvcm1QbHVnaW47CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVl
blZpZGVvUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxs
U2NyZWVuVmlkZW9RdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnVsbFNjcmVlblZpZGVvUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdWxsU2Ny
ZWVuVmlkZW9RdC5oIgorCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlUXQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAicXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgiCisKKyNpbmNsdWRlIDxRR3JhcGhpY3NWaWRlb0l0ZW0+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRnVsbFNjcmVlblZpZGVvUXQ6OkZ1bGxTY3JlZW5WaWRlb1F0
KENocm9tZUNsaWVudFF0KiBjaHJvbWVDbGllbnQpCisgICAgOiBtX2Nocm9tZUNsaWVudChjaHJv
bWVDbGllbnQpCisgICAgLCBtX3ZpZGVvRWxlbWVudCgwKQoreworICAgIFFfQVNTRVJUKG1fY2hy
b21lQ2xpZW50KTsKKyAgICBtX0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXIgPSBtX2Nocm9tZUNsaWVu
dC0+bV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisKKyAg
ICBpZiAobV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKQorICAgICAgICBjb25uZWN0KG1fRnVsbFNj
cmVlblZpZGVvSGFuZGxlciwgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNMT1Qo
YWJvdXRUb0Nsb3NlKCkpKTsKK30KKworRnVsbFNjcmVlblZpZGVvUXQ6On5GdWxsU2NyZWVuVmlk
ZW9RdCgpCit7CisgICAgZGVsZXRlIG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKK30KKwordm9p
ZCBGdWxsU2NyZWVuVmlkZW9RdDo6ZW50ZXJGdWxsU2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQor
eworICAgIFFfQVNTRVJUKG5vZGUpOworICAgIFFfQVNTRVJUKG1fRnVsbFNjcmVlblZpZGVvSGFu
ZGxlcik7CisKKyAgICBpZiAoIW1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyUXQgPSBtZWRpYVBs
YXllckZvck5vZGUobm9kZSk7CisgICAgbWVkaWFQbGF5ZXJRdC0+cmVtb3ZlVmlkZW9JdGVtKCk7
CisgICAgbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyLT5lbnRlckZ1bGxTY3JlZW4obWVkaWFQbGF5
ZXJRdC0+bWVkaWFQbGF5ZXIoKSk7Cit9CisKK3ZvaWQgRnVsbFNjcmVlblZpZGVvUXQ6OmV4aXRG
dWxsU2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIFFfQVNTRVJUKG5vZGUpOworICAg
IFFfQVNTRVJUKG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcik7CisKKyAgICBpZiAoIW1fRnVsbFNj
cmVlblZpZGVvSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9GdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyLT5leGl0RnVsbFNjcmVlbigpOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF0KiBt
ZWRpYVBsYXllclF0ID0gbWVkaWFQbGF5ZXJGb3JOb2RlKG5vZGUpOworICAgIG1lZGlhUGxheWVy
UXQtPnJlc3RvcmVWaWRlb0l0ZW0oKTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9RdDo6YWJv
dXRUb0Nsb3NlKCkKK3sKKyAgICBRX0FTU0VSVChtX3ZpZGVvRWxlbWVudCk7CisgICAgbV92aWRl
b0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF0KiBG
dWxsU2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXIoKQoreworICAgIFFfQVNTRVJUKG1fdmlkZW9F
bGVtZW50KTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSBtX3ZpZGVvRWxlbWVu
dC0+cGxhdGZvcm1NZWRpYSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclBy
aXZhdGVRdCo+KHBsYXRmb3JtTWVkaWEubWVkaWEucXRNZWRpYVBsYXllcik7Cit9CisKK01lZGlh
UGxheWVyUHJpdmF0ZVF0KiBGdWxsU2NyZWVuVmlkZW9RdDo6bWVkaWFQbGF5ZXJGb3JOb2RlKE5v
ZGUqIG5vZGUpCit7CisgICAgUV9BU1NFUlQobm9kZSk7CisgICAgaWYgKG5vZGUpCisgICAgICAg
IG1fdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOwor
ICAgIHJldHVybiBtZWRpYVBsYXllcigpOworfQorCitib29sIEZ1bGxTY3JlZW5WaWRlb1F0Ojpy
ZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkKK3sKKyAgICByZXR1cm4gbV9GdWxs
U2NyZWVuVmlkZW9IYW5kbGVyID8gbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyLT5yZXF1aXJlc0Z1
bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgOiBmYWxzZTsKK30KKworfQorCkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsU2NyZWVu
VmlkZW9RdF9oCisjZGVmaW5lIEZ1bGxTY3JlZW5WaWRlb1F0X2gKKworI2luY2x1ZGUgPFFPYmpl
Y3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUdyYXBoaWNzVmlkZW9JdGVtOworUVRf
RU5EX05BTUVTUEFDRQorCitjbGFzcyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDaHJvbWVDbGllbnRRdDsKK2NsYXNzIEhUTUxWaWRl
b0VsZW1lbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXQ7CisKK2Ns
YXNzIEZ1bGxTY3JlZW5WaWRlb1F0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgRnVsbFNjcmVlblZpZGVvUXQoQ2hyb21lQ2xpZW50UXQqKTsKKyAgICB+RnVs
bFNjcmVlblZpZGVvUXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JO
b2RlKE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JOb2RlKE5vZGUq
KTsKKyAgICBib29sIHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKTsKKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7ICByZXR1cm4gbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyOyB9
CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyKCk7Cisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlUXQqIG1lZGlhUGxheWVyRm9yTm9kZShOb2RlKiA9IDApOwor
Citwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgYWJvdXRUb0Nsb3NlKCk7CisKK3ByaXZhdGU6Cisg
ICAgQ2hyb21lQ2xpZW50UXQqIG1fY2hyb21lQ2xpZW50OworICAgIEhUTUxWaWRlb0VsZW1lbnQq
IG1fdmlkZW9FbGVtZW50OworICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBtX0Z1bGxT
Y3JlZW5WaWRlb0hhbmRsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVRdF9oCklu
ZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCShy
ZXZpc2lvbiA3NTg4OCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1
Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDQgKzEyNywxMiBAQCBRV2ViVG91Y2hNb2Rp
ZmllciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlCiAgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxR
V2ViVG91Y2hNb2RpZmllcio+KHAtPmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVn
aW46OlRvdWNoSW50ZXJhY3Rpb24pKSA6IDA7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pICYmIEVO
QUJMRShRVF9NVUxUSU1FRElBKQorUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIqIFF0UGxhdGZv
cm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIFFXZWJLaXRQ
bGF0Zm9ybVBsdWdpbiogcCA9IHBsdWdpbigpOworICAgIHJldHVybiBwID8gc3RhdGljX2Nhc3Q8
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktpdFBs
YXRmb3JtUGx1Z2luOjpGdWxsU2NyZWVuVmlkZW9QbGF5ZXIpKSA6IDA7Cit9CisjZW5kaWYKKwog
fQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCShy
ZXZpc2lvbiA3NTg4OCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAgY2xhc3MgUVdlYk5vdGlmaWNh
dGlvblByZXNlbnRlcjsKIGNsYXNzIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcjsKIGNsYXNzIFFX
ZWJTZWxlY3REYXRhOwogY2xhc3MgUVdlYlRvdWNoTW9kaWZpZXI7CisjaWYgRU5BQkxFKFZJREVP
KSAmJiBFTkFCTEUoUVRfTVVMVElNRURJQSkKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyOworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArNDQsOSBAQCBw
dWJsaWM6CiAgICAgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogY3JlYXRlTm90aWZpY2F0aW9u
UHJlc2VudGVyKCk7CiAgICAgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKiBjcmVhdGVIYXB0aWNG
ZWVkYmFja1BsYXllcigpOwogICAgIFFXZWJUb3VjaE1vZGlmaWVyKiBjcmVhdGVUb3VjaE1vZGlm
aWVyKCk7CisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoUVRfTVVMVElNRURJQSkKKyAgICBR
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigp
OworI2VuZGlmCiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCkluZGV4
OiBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAko
cmV2aXNpb24gNzU4ODgpCisrKyBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksOSBAQAogICovCiAjaW5jbHVk
ZSAiV2ViUGx1Z2luLmgiCiAKKyNpbmNsdWRlIDxRRXZlbnQ+CiAjaW5jbHVkZSA8UUhCb3hMYXlv
dXQ+CisjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFMaXN0V2lkZ2V0PgogI2luY2x1
ZGUgPFFMaXN0V2lkZ2V0SXRlbT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KQEAgLTIwOCw2ICsyMTAs
NzEgQEAgTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVTZWxlY3RpbwogICAgIHJlc2l6
ZShzaXplKCkud2lkdGgoKSwgdmlzaWJsZUl0ZW1Db3VudCAqIGdNYWVtb0xpc3RJdGVtU2l6ZSk7
CiB9CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVfUVRfTVVM
VElNRURJQQorRnVsbFNjcmVlblZpZGVvV2lkZ2V0OjpGdWxsU2NyZWVuVmlkZW9XaWRnZXQoUU1l
ZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBRVmlkZW9XaWRnZXQoKQorICAgICwgbV9tZWRpYVBs
YXllcihwbGF5ZXIpCit7CisgICAgUV9BU1NFUlQobV9tZWRpYVBsYXllcik7CisKKyAgICBzZXRG
dWxsU2NyZWVuKHRydWUpOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KHRoaXMp
OworfQorCitib29sIEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6ZXZlbnQoUUV2ZW50KiBldikKK3sK
KyAgICBpZiAoZXYtPnR5cGUoKSA9PSAgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrKSB7Cisg
ICAgICAgIGVtaXQgZnVsbFNjcmVlbkNsb3NlZCgpOworICAgICAgICBldi0+YWNjZXB0KCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgcmV0dXJuIFFXaWRnZXQ6OmV2ZW50KGV2
KTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9XaWRnZXQ6OmtleVByZXNzRXZlbnQoUUtleUV2
ZW50KiBldikKK3sKKyAgICBpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfU3BhY2UpIHsKKyAgICAg
ICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3Rh
dGUpCisgICAgICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7CisgICAgICAgIGV2LT5hY2NlcHQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6RnVs
bFNjcmVlblZpZGVvSGFuZGxlcigpCisgICAgOiBtX21lZGlhV2lkZ2V0KDApCit7Cit9CisKK0Z1
bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBk
ZWxldGUgbV9tZWRpYVdpZGdldDsKK30KKworYm9vbCBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpy
ZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4o
UU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgUV9BU1NFUlQocGxheWVyKTsKKworICAgIG1f
bWVkaWFXaWRnZXQgPSBuZXcgRnVsbFNjcmVlblZpZGVvV2lkZ2V0KHBsYXllcik7CisgICAgY29u
bmVjdChtX21lZGlhV2lkZ2V0LCBTSUdOQUwoZnVsbFNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0lH
TkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIG1fbWVkaWFXaWRnZXQtPnNob3dGdWxsU2Ny
ZWVuKCk7Cit9CisKK3ZvaWQgRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4o
KQoreworICAgIG1fbWVkaWFXaWRnZXQtPmhpZGUoKTsKKyAgICBkZWxldGUgbV9tZWRpYVdpZGdl
dDsKKyAgICBtX21lZGlhV2lkZ2V0ID0gMDsKK30KKyNlbmRpZgorCiBib29sIFdlYlBsdWdpbjo6
c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKIHsKICAgICBzd2l0
Y2ggKGV4dGVuc2lvbikgewpAQCAtMjE5LDYgKzI4NiwxMCBAQCBib29sIFdlYlBsdWdpbjo6c3Vw
cG9ydHNFeHRlbnNpb24oRXh0ZW5zCiAjZW5kaWYKICAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246
CiAgICAgICAgIHJldHVybiB0cnVlOworI2lmIGRlZmluZWQoRU5BQkxFX1FUX01VTFRJTUVESUEp
ICYmIEVOQUJMRV9RVF9NVUxUSU1FRElBCisgICAgY2FzZSBGdWxsU2NyZWVuVmlkZW9QbGF5ZXI6
CisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTIzNSw2ICszMDYsMTAgQEAgUU9iamVjdCogV2ViUGx1Z2lu
OjpjcmVhdGVFeHRlbnNpb24oRXh0ZQogI2VuZGlmCiAgICAgY2FzZSBUb3VjaEludGVyYWN0aW9u
OgogICAgICAgICByZXR1cm4gbmV3IFRvdWNoTW9kaWZpZXIoKTsKKyNpZiBkZWZpbmVkKEVOQUJM
RV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVfUVRfTVVMVElNRURJQQorICAgIGNhc2UgRnVsbFNj
cmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gbmV3IEZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXIoKTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5k
ZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHJl
dmlzaW9uIDc1ODg4KQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBs
dWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSAiV2ViTm90
aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAKICNpbmNsdWRlIDxRRGlhbG9nPgorI2lmIGRlZmluZWQo
RU5BQkxFX1FUX01VTFRJTUVESUEpICYmIEVOQUJMRV9RVF9NVUxUSU1FRElBCisjaW5jbHVkZSA8
UVZpZGVvV2lkZ2V0PgorI2VuZGlmCiAKIGNsYXNzIFFMaXN0V2lkZ2V0SXRlbTsKIGNsYXNzIFFM
aXN0V2lkZ2V0OwpAQCAtOTQsNiArOTcsNDAgQEAgcHVibGljOgogICAgIH0KIH07CiAKKyNpZiBk
ZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVfUVRfTVVMVElNRURJQQorY2xh
c3MgRnVsbFNjcmVlblZpZGVvV2lkZ2V0IDogcHVibGljIFFWaWRlb1dpZGdldCB7CisgICAgUV9P
QkpFQ1QKK3B1YmxpYzoKKyAgICBGdWxsU2NyZWVuVmlkZW9XaWRnZXQoUU1lZGlhUGxheWVyKik7
CisgICAgdmlydHVhbCB+RnVsbFNjcmVlblZpZGVvV2lkZ2V0KCkge30KKworUV9TSUdOQUxTOgor
ICAgIHZvaWQgZnVsbFNjcmVlbkNsb3NlZCgpOworCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBldmVu
dChRRXZlbnQqKTsKKyAgICB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7CisKK3ByaXZh
dGU6CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOyAvLyBub3Qgb3duZWQKK307CisK
K2NsYXNzIEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRnVsbFNjcmVlblZpZGVvSGFu
ZGxlcigpOworICAgIHZpcnR1YWwgfkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBib29s
IHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdDsKKworcHVibGljIFFf
U0xPVFM6CisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKik7CisgICAgdm9p
ZCBleGl0RnVsbFNjcmVlbigpOworCitwcml2YXRlOgorICAgIEZ1bGxTY3JlZW5WaWRlb1dpZGdl
dCogbV9tZWRpYVdpZGdldDsgLy8gb3duZWQKK307CisjZW5kaWYKKwogY2xhc3MgV2ViUGx1Z2lu
IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsKICAgICBR
X09CSkVDVApJbmRleDogV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3Jt
cGx1Z2luLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVn
aW4vcGxhdGZvcm1wbHVnaW4ucHJvCShyZXZpc2lvbiA3NTg4OCkKKysrIFdlYktpdC9xdC9leGFt
cGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMywyMiBAQCBUQVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldChwbGF0Zm9ybXBsdWdpCiBU
RU1QTEFURSA9IGxpYgogQ09ORklHICs9IHBsdWdpbgogCisjIyBsb2FkIG1vYmlsaXR5Y29uZmln
IGlmIG1vYmlsaXR5IGlzIGF2YWlsYWJsZQorbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKKwor
IyBIVE1MNSBNZWRpYSBTdXBwb3J0CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhCishY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPS4pIHsKKyAgICBjb250YWlucyhNT0JJTElUWV9DT05G
SUcsIG11bHRpbWVkaWEpIHsKKyAgICAgICAgQ09ORklHICs9IG1vYmlsaXR5CisgICAgICAgIE1P
QklMSVRZICs9IG11bHRpbWVkaWEKKyAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MAor
ICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCisgICAgICAgIERFRklORVMgLT0gRU5B
QkxFX1FUX01VTFRJTUVESUE9MAorICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9RVF9NVUxUSU1F
RElBPTEKKyAgICB9Cit9CisKIERFU1RESVIgPSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNdL3dlYmtp
dAogCiBTT1VSQ0VTICs9IFwKSW5kZXg6IFdlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdp
bi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvZXhhbXBs
ZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDc1ODg4
KQorKysgV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxRT2Jq
ZWN0PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVMVElNRURJQSkg
JiYgRU5BQkxFX1FUX01VTFRJTUVESUEKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYK
IAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExNSw2ICsxMTgsMjMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5n
RGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVMVElN
RURJQSkgJiYgRU5BQkxFX1FUX01VTFRJTUVESUEKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdl
YkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9y
VmlkZW9QbGF5YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbFNj
cmVlbkNsb3NlZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsU2NyZWVuKFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxT
Y3JlZW4oKSA9IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgog
ewogcHVibGljOgpAQCAtMTI0LDcgKzE0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVT
ZWxlY3Rpb25zLAogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBIYXB0aWNzLAotICAg
ICAgICBUb3VjaEludGVyYWN0aW9uCisgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCisgICAgICAg
IEZ1bGxTY3JlZW5WaWRlb1BsYXllcgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwpAQCAtMTMyLDcgKzE1
Myw3IEBAIHB1YmxpYzoKIH07CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotUV9ERUNMQVJFX0lOVEVS
RkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3Jt
UGx1Z2luLzEuNiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4s
ICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogUVRfRU5EX05BTUVT
UEFDRQogCiAjZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79100</attachid>
            <date>2011-01-16 09:41:29 -0800</date>
            <delta_ts>2011-01-16 09:41:29 -0800</delta_ts>
            <desc>Patch to backport to Qt Webkit 2.2</desc>
            <filename>videobackport3.diff</filename>
            <type>text/plain</type>
            <size>103164</size>
            <attacher name="Nancy Piedra">nancy.piedra</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IGMzN2UzMzMuLmEwZTI2ZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMTY4LDkgKzE2OCwxMyBAQCBjb250YWlucyhNT0JJ
TElUWV9DT05GSUcsIHNlbnNvcnMpIHsKICAgICAhbGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwg
Nik6Y29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBtdWx0aW1lZGlhKSB7CiAgICAgICAgIERFRklO
RVMgLT0gRU5BQkxFX1ZJREVPPTAKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MQor
ICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9RVF9NVUxUSU1FRElBPTAKKyAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfUVRfTVVMVElNRURJQT0xCiAgICAgfSBlbHNlOmNvbnRhaW5zKFFUX0NPTkZJ
RywgcGhvbm9uKSB7CiAgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTAKICAgICAgICAg
REVGSU5FUyArPSBFTkFCTEVfVklERU89MQorICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9RVF9N
VUxUSU1FRElBPTEKKyAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfUVRfTVVMVElNRURJQT0wCiAg
ICAgfQogfQogCkBAIC0yNzIsNiArMjc2LDcgQEAgU1RZTEVTSEVFVFNfRU1CRUQgPSBcCiAgICAg
JCRQV0QvY3NzL3ZpZXctc291cmNlLmNzcyBcCiAgICAgJCRQV0QvY3NzL3dtbC5jc3MgXAogICAg
ICQkUFdEL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcyBcCisgICAgJCRQV0QvY3NzL21lZGlhQ29udHJv
bHNRdEZ1bGxzY3JlZW4uY3NzIFwKICAgICAkJFBXRC9jc3MvbWVkaWFDb250cm9sc1F0LmNzcyBc
CiAgICAgJCRQV0QvY3NzL3RoZW1lUXROb0xpc3Rib3hlcy5jc3MgXAogICAgICQkUFdEL2Nzcy90
aGVtZVF0TW9iaWxlLmNzcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KaW5kZXggOWU5MDQ0Ny4uNzA1YjZjNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yNTc0LDggKzI1NzQs
MTIgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKICAgICAgICAgYmluZGlu
Z3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAogCiAgICAgICAgICFsZXNzVGhhbihRVF9NSU5P
Ul9WRVJTSU9OLCA2KTpjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEpIHsKLSAg
ICAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2
YXRlUXQuaAotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVRdC5jcHAKKyAgICAgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggXAorICAg
ICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVu
VmlkZW9RdC5oCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAgXAorICAgICAgICAgICAg
ICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5j
cHAKIAogICAgICAgICAgICAgQ09ORklHICo9IG1vYmlsaXR5CiAgICAgICAgICAgICBNT0JJTElU
WSArPSBtdWx0aW1lZGlhCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy90aGVtZVF0TW9iaWxlLmNz
cyBiL1dlYkNvcmUvY3NzL3RoZW1lUXRNb2JpbGUuY3NzCmluZGV4IDhiMGM1NDguLjMxZDUwMzAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL3RoZW1lUXRNb2JpbGUuY3NzCisrKyBiL1dlYkNvcmUv
Y3NzL3RoZW1lUXRNb2JpbGUuY3NzCkBAIC0xMTMsMyArMTEzLDggQEAgaW5wdXRbdHlwZT0idXJs
Il06YWN0aXZlLAogdGV4dGFyZWE6YWN0aXZlIHsKICAgICBiYWNrZ3JvdW5kOiBCdXR0b25TaGFk
b3c7CiB9CisKK3ZpZGVvIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOworfQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKaW5kZXggZDdkMDIyNy4uMGI5MzQzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDA3LDYgKzQwNyw3
IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgYm9v
bCBpc1hIVE1MLCBib29sIGlzSFRNTCkKICNlbmRpZgogICAgICwgbV93ZWFrUmVmZXJlbmNlKERv
Y3VtZW50V2Vha1JlZmVyZW5jZTo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9pZEF0dHJpYnV0ZU5h
bWUoaWRBdHRyKQorICAgICwgbV9sb2FkRXZlbnREZWxheUNvdW50KDApCiB7CiAgICAgbV9kb2N1
bWVudCA9IHRoaXM7CiAKQEAgLTUxMDcsNCArNTEwOCwxMyBAQCBJbnNwZWN0b3JDb250cm9sbGVy
KiBEb2N1bWVudDo6aW5zcGVjdG9yQ29udHJvbGxlcigpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9p
ZCBEb2N1bWVudDo6ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpICAKK3sgIAorICAgIEFT
U0VSVChtX2xvYWRFdmVudERlbGF5Q291bnQpOyAgCisgICAgLS1tX2xvYWRFdmVudERlbGF5Q291
bnQ7ICAKKworICAgIGlmIChmcmFtZSgpICYmICFtX2xvYWRFdmVudERlbGF5Q291bnQpICAKKyAg
ICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsgIAorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwYjU1NjExLi5lYjQyY2U3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEw
MjUsNiArMTAyNSwxMSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBpZEF0
dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lkQXR0cmlidXRlTmFtZTsgfQogCisgICAg
Ly8gVXNlZCB0byBhbGxvdyBlbGVtZW50IHRoYXQgbG9hZHMgZGF0YSB3aXRob3V0IGdvaW5nIHRo
cm91Z2ggYSBGcmFtZUxvYWRlciB0byBkZWxheSB0aGUgJ2xvYWQnIGV2ZW50LgorICAgIHZvaWQg
aW5jcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpIHsgKyttX2xvYWRFdmVudERlbGF5Q291bnQ7
IH0KKyAgICB2b2lkIGRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKKyAgICBib29sIGlz
RGVsYXlpbmdMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2xvYWRFdmVudERlbGF5Q291bnQ7
IH0KKwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgS1VSTCYsIGJvb2wg
aXNYSFRNTCwgYm9vbCBpc0hUTUwpOwogCkBAIC0xMzA2LDYgKzEzMTEsOCBAQCBwcml2YXRlOgog
CiAgICAgUXVhbGlmaWVkTmFtZSBtX2lkQXR0cmlidXRlTmFtZTsKIAorICAgIGludCBtX2xvYWRF
dmVudERlbGF5Q291bnQ7CisKICAgICBWaWV3cG9ydEFyZ3VtZW50cyBtX3ZpZXdwb3J0QXJndW1l
bnRzOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
IGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGY3NWE5OTAuLjkxNWRh
YjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTI5LDE0ICsyOSwxNCBAQAogI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2lu
Y2x1ZGUgIkNTU0hlbHBlci5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVu
dFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNpbmNsdWRlICJDU1NIZWxw
ZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNDksMTIgKzQ5LDEyIEBACiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
Ik1lZGlhRG9jdW1lbnQuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCiAjaW5jbHVkZSAiTWVk
aWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
QEAgLTgxLDggKzgxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1IVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2MpCitIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0
aGlzKQogICAgICwgbV9sb2FkVGltZXIodGhpcywgJkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRUaW1l
ckZpcmVkKQogICAgICwgbV9hc3luY0V2ZW50VGltZXIodGhpcywgJkhUTUxNZWRpYUVsZW1lbnQ6
OmFzeW5jRXZlbnRUaW1lckZpcmVkKQogICAgICwgbV9wcm9ncmVzc0V2ZW50VGltZXIodGhpcywg
JkhUTUxNZWRpYUVsZW1lbnQ6OnByb2dyZXNzRXZlbnRUaW1lckZpcmVkKQpAQCAtMTA4LDExICsx
MDksMTEgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogI2VuZGlmCiAgICAgLCBtX3Jlc3RyaWN0
aW9ucyhOb1Jlc3RyaWN0aW9ucykKICAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6QXV0bykK
LSAgICAsIG1fcGxheWluZyhmYWxzZSkKKyAgICAsIG1fZGlzcGxheU1vZGUoVW5rbm93bikKICAg
ICAsIG1fcHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soMCkKKyAgICAsIG1fcGxheWluZyhm
YWxzZSkKICAgICAsIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KGZhbHNlKQotICAgICwg
bV9wcm9jZXNzaW5nTG9hZChmYWxzZSkKLSAgICAsIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQoZmFs
c2UpCisgICAgLCBtX3Nob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKQogICAgICwgbV9oYXZlRmly
ZWRMb2FkZWREYXRhKGZhbHNlKQogICAgICwgbV9pbkFjdGl2ZURvY3VtZW50KHRydWUpCiAgICAg
LCBtX2F1dG9wbGF5aW5nKHRydWUpCkBAIC0xMzIsMTQgKzEzMywxNSBAQCBIVE1MTWVkaWFFbGVt
ZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MpCiAgICAgLCBtX2xvYWRJbml0aWF0ZWRCeVVzZXJHZXN0dXJlKGZhbHNlKQogICAg
ICwgbV9jb21wbGV0ZWx5TG9hZGVkKGZhbHNlKQogewotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVy
Rm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50KCktPnJl
Z2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQtPnJlZ2lz
dGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LT5y
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKHRoaXMpOwogfQogCiBIVE1MTWVkaWFFbGVt
ZW50Ojp+SFRNTE1lZGlhRWxlbWVudCgpCiB7CiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRp
YUNhblN0YXJ0KQogICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogICAgIGRvY3Vt
ZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CiAg
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKHRoaXMpOwog
fQpAQCAtMTQ4LDYgKzE1MCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKQogewogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFy
dCkKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMp
OworICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKICAgICBkb2N1bWVudCgpLT51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwogICAgIGRvY3Vt
ZW50KCktPnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKICAgICBIVE1M
RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKQEAgLTE1Nyw2ICsxNjAsOCBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQogewog
ICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQo
KS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgIGlmIChtX3JlYWR5U3RhdGUg
PCBIQVZFX0NVUlJFTlRfREFUQSkKKyAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQodHJ1
ZSk7CiAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFj
a3ModGhpcyk7CiAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNr
cyh0aGlzKTsKICAgICBIVE1MRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwpA
QCAtMzA0LDcgKzMwOSw3IEBAIFJlbmRlck9iamVjdCogSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBpZiAoIXNyYygpLmlzRW1wdHkoKSAmJiBtX25ldHdv
cmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKQorICAgIGlmICghZ2V0QXR0cmlidXRlKHNyY0F0dHIp
LmlzRW1wdHkoKSAmJiBtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKQogICAgICAgICBz
Y2hlZHVsZUxvYWQoKTsKIH0KIApAQCAtNDM4LDExICs0NDMsNiBAQCBQYXNzUmVmUHRyPE1lZGlh
RXJyb3I+IEhUTUxNZWRpYUVsZW1lbnQ6OmVycm9yKCkgY29uc3QKICAgICByZXR1cm4gbV9lcnJv
cjsKIH0KIAotS1VSTCBIVE1MTWVkaWFFbGVtZW50OjpzcmMoKSBjb25zdAotewotICAgIHJldHVy
biBnZXROb25FbXB0eVVSTEF0dHJpYnV0ZShzcmNBdHRyKTsKLX0KLQogdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNy
Y0F0dHIsIHVybCk7CkBAIC00OTksNiArNDk5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpw
cmVwYXJlRm9yTG9hZCgpCiAgICAgbV9zZW50U3RhbGxlZEV2ZW50ID0gZmFsc2U7CiAgICAgbV9o
YXZlRmlyZWRMb2FkZWREYXRhID0gZmFsc2U7CiAgICAgbV9jb21wbGV0ZWx5TG9hZGVkID0gZmFs
c2U7CisgICAgbV9kaXNwbGF5TW9kZSA9IFVua25vd247CiAKICAgICAvLyAxIC0gQWJvcnQgYW55
IGFscmVhZHktcnVubmluZyBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29y
aXRobSBmb3IgdGhpcyBlbGVtZW50LgogICAgIG1fY3VycmVudFNvdXJjZU5vZGUgPSAwOwpAQCAt
NTE1LDcgKzUxNiwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JMb2FkKCkK
ICNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgbV9wbGF5ZXIgPSBNZWRp
YVBsYXllcjo6Y3JlYXRlKHRoaXMpOwogI2Vsc2UKLSAgICBjcmVhdGVNZWRpYVBsYXllclByb3h5
KCk7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICBtX3BsYXllci0+Y2FuY2VsTG9hZCgpOwor
ICAgIGVsc2UKKyAgICAgICAgY3JlYXRlTWVkaWFQbGF5ZXJQcm94eSgpOwogI2VuZGlmCiAKICAg
ICAvLyA0IC0gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyBuZXR3b3JrU3RhdGUgaXMgbm90IHNldCB0
byBORVRXT1JLX0VNUFRZLCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwcwpAQCAtNTM1LDEwICs1Mzks
MjUgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgbV9lcnJv
ciA9IDA7CiAgICAgbV9hdXRvcGxheWluZyA9IHRydWU7CiAKKyAgICAvLyA3IC0gSW52b2tlIHRo
ZSBtZWRpYSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4KKworICAgIC8v
IDggLSBOb3RlOiBQbGF5YmFjayBvZiBhbnkgcHJldmlvdXNseSBwbGF5aW5nIG1lZGlhIHJlc291
cmNlIGZvciB0aGlzIGVsZW1lbnQgc3RvcHMuCisKKyAgICAvLyBUaGUgcmVzb3VyY2Ugc2VsZWN0
aW9uIGFsZ29yaXRobQorICAgIC8vIDEgLSBTZXQgdGhlIG5ldHdvcmtTdGF0ZSB0byBORVRXT1JL
X05PX1NPVVJDRQorICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7CisKKyAg
ICAvLyAyIC0gQXN5bmNocm9ub3VzbHkgYXdhaXQgYSBzdGFibGUgc3RhdGUuCisKICAgICBtX3Bs
YXllZFRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKICAgICBtX2xhc3RTZWVrVGlt
ZSA9IDA7CiAgICAgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgPSBmYWxzZTsKIAorCisgICAgLy8g
VGhlIHNwZWMgZG9lc24ndCBzYXkgdG8gYmxvY2sgdGhlIGxvYWQgZXZlbnQgdW50aWwgd2UgYWN0
dWFsbHkgcnVuIHRoZSBhc3luY2hyb25vdXMgc2VjdGlvbgorICAgIC8vIGFsZ29yaXRobSwgYnV0
IGRvIGl0IG5vdyBiZWNhdXNlIHdlIHdvbid0IHN0YXJ0IHRoYXQgdW50aWwgYWZ0ZXIgdGhlIHRp
bWVyIGZpcmVzIGFuZCB0aGUgCisgICAgLy8gZXZlbnQgbWF5IGhhdmUgYWxyZWFkeSBmaXJlZCBi
eSB0aGVuLgorICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KHRydWUpOwogfQogCiB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCkBAIC01NTMsMTEgKzU3Miw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bG9hZEludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIC8vIFN0ZXBzIDEgLSA2IHdlcmUgZG9uZSBpbiBwcmVwYXJlRm9yTG9hZAotCi0gICAg
Ly8gNyAtIEludm9rZSB0aGUgbWVkaWEgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdv
cml0aG0uCiAgICAgc2VsZWN0TWVkaWFSZXNvdXJjZSgpOwotICAgIG1fcHJvY2Vzc2luZ0xvYWQg
PSBmYWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNl
KCkKQEAgLTU2NSwxMSArNTgwLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRp
YVJlc291cmNlKCkKICAgICBlbnVtIE1vZGUgeyBhdHRyaWJ1dGUsIGNoaWxkcmVuIH07CiAgICAg
TW9kZSBtb2RlID0gYXR0cmlidXRlOwogCi0gICAgLy8gMSAtIFNldCB0aGUgbmV0d29ya1N0YXRl
IHRvIE5FVFdPUktfTk9fU09VUkNFCi0gICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NP
VVJDRTsKLQotICAgIC8vIDIgLSBBc3luY2hyb25vdXNseSBhd2FpdCBhIHN0YWJsZSBzdGF0ZS4K
LQogICAgIC8vIDMgLSAuLi4gdGhlIG1lZGlhIGVsZW1lbnQgaGFzIG5laXRoZXIgYSBzcmMgYXR0
cmlidXRlIC4uLgogICAgIGlmICghaGFzQXR0cmlidXRlKHNyY0F0dHIpKSB7CiAgICAgICAgIC8v
IC4uLiBub3IgYSBzb3VyY2UgZWxlbWVudCBjaGlsZDogLi4uCkBAIC01ODEsMTggKzU5MSwxOSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2UoKQogCiAgICAgICAg
IGlmICghbm9kZSkgewogICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBXYWl0aW5nRm9yU291cmNl
OworICAgICAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogCiAgICAgICAg
ICAgICAvLyAuLi4gc2V0IHRoZSBuZXR3b3JrU3RhdGUgdG8gTkVUV09SS19FTVBUWSwgYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzCiAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfRU1Q
VFk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZGVsYXlpbmdUaGVMb2FkRXZlbnQpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgbW9kZSA9IGNoaWxkcmVuOwogICAg
IH0KIAotICAgIC8vIDQKLSAgICBtX2RlbGF5aW5nVGhlTG9hZEV2ZW50ID0gdHJ1ZTsKKyAgICAv
LyA0IC0gU2V0IHRoZSBtZWRpYSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQgZmxh
ZyB0byB0cnVlICh0aGlzIGRlbGF5cyB0aGUgbG9hZCBldmVudCksIAorICAgIC8vIGFuZCBzZXQg
aXRzIG5ldHdvcmtTdGF0ZSB0byBORVRXT1JLX0xPQURJTkcuCisgICAgc2V0U2hvdWxkRGVsYXlM
b2FkRXZlbnQodHJ1ZSk7CiAgICAgbV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7CiAK
ICAgICAvLyA1CkBAIC02NzAsMTEgKzY4MSw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9h
ZFJlc291cmNlKGNvbnN0IEtVUkwmIGluaXRpYWxVUkwsIENvbnRlbnRUeXBlJiBjb250ZW50CiAK
ICAgICBtX3BsYXllci0+bG9hZChtX2N1cnJlbnRTcmMsIGNvbnRlbnRUeXBlKTsKIAotICAgIGlm
IChpc1ZpZGVvKCkgJiYgbV9wbGF5ZXItPmNhbkxvYWRQb3N0ZXIoKSkgewotICAgICAgICBLVVJM
IHBvc3RlclVybCA9IHBvc3RlcigpOwotICAgICAgICBpZiAoIXBvc3RlclVybC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX3BsYXllci0+c2V0UG9zdGVyKHBvc3RlclVybCk7Ci0gICAgfQorICAg
IC8vIElmIHRoZXJlIGlzIG5vIHBvc3RlciB0byBkaXNwbGF5LCBhbGxvdyB0aGUgbWVkaWEgZW5n
aW5lIHRvIHJlbmRlciB2aWRlbyBmcmFtZXMgYXMgc29vbiBhcworICAgIC8vIHRoZXkgYXJlIGF2
YWlsYWJsZS4KKyAgICB1cGRhdGVEaXNwbGF5U3RhdGUoKTsKIAogICAgIGlmIChyZW5kZXJlcigp
KQogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtNzE4LDcgKzcy
Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2FpdEZvclNvdXJjZUNoYW5nZSgpCiAgICAg
bV9uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NPVVJDRTsKIAogICAgIC8vIDYuMTggLSBTZXQg
dGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBUaGlz
IHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZl
bnQgPSBmYWxzZTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiB9CiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6bm9uZVN1cHBvcnRlZCgpCkBAIC03NDEsMTEgKzc1MCwxMSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om5vbmVTdXBwb3J0ZWQoKQogICAgIHNjaGVkdWxlRXZl
bnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogCiAgICAgLy8gOCAtIFNldCB0aGUgZWxlbWVu
dCdzIGRlbGF5aW5nLXRoZS1sb2FkLWV2ZW50IGZsYWcgdG8gZmFsc2UuIFRoaXMgc3RvcHMgZGVs
YXlpbmcgdGhlIGxvYWQgZXZlbnQuCi0gICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9IGZhbHNl
OworICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKIAogICAgIC8vIDkgLUFib3J0
IHRoZXNlIHN0ZXBzLiBVbnRpbCB0aGUgbG9hZCgpIG1ldGhvZCBpcyBpbnZva2VkLCB0aGUgZWxl
bWVudCB3b24ndCBhdHRlbXB0IHRvIGxvYWQgYW5vdGhlciByZXNvdXJjZS4KIAotICAgIHVwZGF0
ZVBvc3RlckltYWdlKCk7CisgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTc2
MSw4ICs3NzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhRW5naW5lRXJyb3IoUGFz
c1JlZlB0cjxNZWRpYUVycm9yPiBlcnIpCiAgICAgLy8gc2V0IHRvIE1FRElBX0VSUl9ORVRXT1JL
L01FRElBX0VSUl9ERUNPREUuCiAgICAgbV9lcnJvciA9IGVycjsKIAotICAgIC8vIDMgLSBRdWV1
ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCB0aGUgbWVk
aWEgZWxlbWVudCwgaW4KLSAgICAvLyB0aGUgY29udGV4dCBvZiB0aGUgZmV0Y2hpbmcgcHJvY2Vz
cyBzdGFydGVkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgdGhpcyBhbGdvcml0aG0uCisgICAgLy8gMyAt
IFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGVycm9yIGF0IHRoZSBt
ZWRpYSBlbGVtZW50LgogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQp
OwogCiAgICAgLy8gNCAtIFNldCB0aGUgZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSBhdHRyaWJ1dGUg
dG8gdGhlIE5FVFdPUktfRU1QVFkgdmFsdWUgYW5kIHF1ZXVlIGEKQEAgLTc3MSw3ICs3NzksNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhRW5naW5lRXJyb3IoUGFzc1JlZlB0cjxNZWRp
YUVycm9yPiBlcnIpCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZW1wdGllZEV2ZW50
KTsKIAogICAgIC8vIDUgLSBTZXQgdGhlIGVsZW1lbnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVu
dCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRlbGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAg
IG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICBzZXRTaG91bGREZWxheUxvYWRF
dmVudChmYWxzZSk7CiAKICAgICAvLyA2IC0gQWJvcnQgdGhlIG92ZXJhbGwgcmVzb3VyY2Ugc2Vs
ZWN0aW9uIGFsZ29yaXRobS4KICAgICBtX2N1cnJlbnRTb3VyY2VOb2RlID0gMDsKQEAgLTgzNCw3
ICs4NDIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQogICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBNZWRp
YVBsYXllcjo6Rm9ybWF0RXJyb3IgJiYgbV9sb2FkU3RhdGUgPT0gTG9hZGluZ0Zyb21TcmNBdHRy
KQogICAgICAgICAgICAgbm9uZVN1cHBvcnRlZCgpOwogCi0gICAgICAgIHVwZGF0ZVBvc3Rlcklt
YWdlKCk7CisgICAgICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC04OTIsMjIgKzkwMCwxNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChtX3NlZWtpbmcpIHsKLSAgICAgICAgLy8gNC44LjEwLjEwLCBzdGVwIDgKKyAg
ICAgICAgLy8gNC44LjEwLjksIHN0ZXAgMTEKICAgICAgICAgaWYgKHdhc1BvdGVudGlhbGx5UGxh
eWluZyAmJiBtX3JlYWR5U3RhdGUgPCBIQVZFX0ZVVFVSRV9EQVRBKQogICAgICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkud2FpdGluZ0V2ZW50KTsKIAotICAgICAgICAvLyA0Ljgu
MTAuMTAsIHN0ZXAgOQotICAgICAgICBpZiAobV9yZWFkeVN0YXRlIDwgSEFWRV9DVVJSRU5UX0RB
VEEpIHsKLSAgICAgICAgICAgIGlmIChvbGRTdGF0ZSA+PSBIQVZFX0NVUlJFTlRfREFUQSkKLSAg
ICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zZWVraW5nRXZlbnQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gNC44LjEwLjEwIHN0ZXAgMTIgJiAxMy4K
KyAgICAgICAgLy8gNC44LjEwLjEwIHN0ZXAgMTQgJiAxNS4KKyAgICAgICAgaWYgKG1fcmVhZHlT
dGF0ZSA+PSBIQVZFX0NVUlJFTlRfREFUQSkKICAgICAgICAgICAgIGZpbmlzaFNlZWsoKTsKLSAg
ICAgICAgfQogCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHdhc1BvdGVudGlhbGx5UGxheWlu
ZyAmJiBtX3JlYWR5U3RhdGUgPCBIQVZFX0ZVVFVSRV9EQVRBKSB7Ci0gICAgICAgICAgICAvLyA0
LjguMTAuOQorICAgICAgICAgICAgLy8gNC44LjEwLjgKICAgICAgICAgICAgIHNjaGVkdWxlVGlt
ZXVwZGF0ZUV2ZW50KGZhbHNlKTsKICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLndhaXRpbmdFdmVudCk7CiAgICAgICAgIH0KQEAgLTkxNywyNiArOTIwLDE4IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBz
dGF0ZSkKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VF
dmVudCk7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRh
RXZlbnQpOwogCi0jaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICBp
ZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsKLSAgICAgICAgICAgIHRv
UmVuZGVyVmlkZW8ocmVuZGVyZXIoKSktPnZpZGVvU2l6ZUNoYW5nZWQoKTsKLSAgICAgICAgfQot
I2VuZGlmICAgICAgICAKLSAgICAgICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9IGZhbHNlOwor
ICAgICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZy
b21FbGVtZW50KCk7CiAgICAgICAgIG1fcGxheWVyLT5zZWVrKDApOwogICAgIH0KIAotICAgIGJv
b2wgc2hvdWxkVXBkYXRlUG9zdGVySW1hZ2UgPSBmYWxzZTsKKyAgICBib29sIHNob3VsZFVwZGF0
ZURpc3BsYXlTdGF0ZSA9IGZhbHNlOwogCi0gICAgLy8gNC44LjEwLjcgc2F5cyBsb2FkZWRkYXRh
IGlzIHNlbnQgb25seSB3aGVuIHRoZSBuZXcgc3RhdGUgKmlzKiBIQVZFX0NVUlJFTlRfREFUQTog
IklmIHRoZQotICAgIC8vIHByZXZpb3VzIHJlYWR5IHN0YXRlIHdhcyBIQVZFX01FVEFEQVRBIGFu
ZCB0aGUgbmV3IHJlYWR5IHN0YXRlIGlzIEhBVkVfQ1VSUkVOVF9EQVRBIiwgCi0gICAgLy8gYnV0
IHRoZSBldmVudCB0YWJsZSBhdCB0aGUgZW5kIG9mIHRoZSBzcGVjIHNheXMgaXQgaXMgc2VudCB3
aGVuOiAicmVhZHlTdGF0ZSBuZXdseSAKLSAgICAvLyBpbmNyZWFzZWQgdG8gSEFWRV9DVVJSRU5U
X0RBVEEgIG9yIGdyZWF0ZXIgZm9yIHRoZSBmaXJzdCB0aW1lIgotICAgIC8vIFdlIGdvIHdpdGgg
dGhlIGxhdGVyIGJlY2F1c2UgaXQgc2VlbXMgdXNlZnVsIHRvIGNvdW50IG9uIGdldHRpbmcgdGhp
cyBldmVudAogICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEgJiYgb2xk
U3RhdGUgPCBIQVZFX0NVUlJFTlRfREFUQSAmJiAhbV9oYXZlRmlyZWRMb2FkZWREYXRhKSB7CiAg
ICAgICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IHRydWU7Ci0gICAgICAgIHNob3VsZFVwZGF0
ZVBvc3RlckltYWdlID0gdHJ1ZTsKKyAgICAgICAgc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlID0g
dHJ1ZTsKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkZGF0YUV2ZW50
KTsKKyAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwogICAgIH0KIAogICAg
IGJvb2wgaXNQb3RlbnRpYWxseVBsYXlpbmcgPSBwb3RlbnRpYWxseVBsYXlpbmcoKTsKQEAgLTk0
NCw3ICs5MzksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLmNhbnBsYXlFdmVudCk7CiAgICAgICAgIGlmIChpc1BvdGVudGlhbGx5UGxheWluZykKICAg
ICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnBsYXlpbmdFdmVudCk7Ci0gICAg
ICAgIHNob3VsZFVwZGF0ZVBvc3RlckltYWdlID0gdHJ1ZTsKKyAgICAgICAgc2hvdWxkVXBkYXRl
RGlzcGxheVN0YXRlID0gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9yZWFkeVN0YXRlID09IEhB
VkVfRU5PVUdIX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0VOT1VHSF9EQVRBKSB7CkBAIC05NjIs
MTEgKzk1NywxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50
TmFtZXMoKS5wbGF5aW5nRXZlbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgc2hvdWxkVXBkYXRl
UG9zdGVySW1hZ2UgPSB0cnVlOworICAgICAgICBzaG91bGRVcGRhdGVEaXNwbGF5U3RhdGUgPSB0
cnVlOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVQb3N0ZXJJbWFnZSkKLSAgICAgICAg
dXBkYXRlUG9zdGVySW1hZ2UoKTsKKyAgICBpZiAoc2hvdWxkVXBkYXRlRGlzcGxheVN0YXRlKQor
ICAgICAgICB1cGRhdGVEaXNwbGF5U3RhdGUoKTsKIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwog
fQpAQCAtMTAzMywyNyArMTAyOCwzOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWsoZmxv
YXQgdGltZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUg
YmVmb3JlIHNldHRpbmcgbV9zZWVraW5nLCBtX2xhc3RTZWVrVGltZSBpcyByZXR1cm5lZCBvbmNl
IGl0IGlzIHNldC4KICAgICBmbG9hdCBub3cgPSBjdXJyZW50VGltZSgpOwogCisgICAgLy8gMiAt
IElmIHRoZSBlbGVtZW50J3Mgc2Vla2luZyBJREwgYXR0cmlidXRlIGlzIHRydWUsIHRoZW4gYW5v
dGhlciBpbnN0YW5jZSBvZiB0aGlzIGFsZ29yaXRobSBpcworICAgIC8vIGFscmVhZHkgcnVubmlu
Zy4gQWJvcnQgdGhhdCBvdGhlciBpbnN0YW5jZSBvZiB0aGUgYWxnb3JpdGhtIHdpdGhvdXQgd2Fp
dGluZyBmb3IgdGhlIHN0ZXAgdGhhdAorICAgIC8vIGl0IGlzIHJ1bm5pbmcgdG8gY29tcGxldGUu
CisgICAgLy8gTm90aGluZyBzcGVjaWZpYyB0byBiZSBkb25lIGhlcmUuCisKICAgICAvLyAzIC0g
U2V0IHRoZSBzZWVraW5nIElETCBhdHRyaWJ1dGUgdG8gdHJ1ZS4KLSAgICAvLyBUaGUgZmxhZyB3
aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgZW5naW5lIHRlbGxzIGlzIHRoZSB0aW1lIGhhcyBhY3R1
YWxseSBjaGFuZ2VkCisgICAgLy8gVGhlIGZsYWcgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIGVu
Z2luZSB0ZWxscyB1cyB0aGUgdGltZSBoYXMgYWN0dWFsbHkgY2hhbmdlZC4KICAgICBtX3NlZWtp
bmcgPSB0cnVlOwogCi0gICAgLy8gNCAtIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHRpbWV1cGRhdGUgYXQgdGhlIGVsZW1lbnQuCi0gICAgc2NoZWR1bGVUaW1ldXBk
YXRlRXZlbnQoZmFsc2UpOwotCi0gICAgLy8gNiAtIElmIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRp
b24gaXMgbGF0ZXIgdGhhbiB0aGUgZW5kIG9mIHRoZSBtZWRpYSByZXNvdXJjZSwgdGhlbiBsZXQg
aXQgYmUgdGhlIGVuZCAKKyAgICAvLyA1IC0gSWYgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBp
cyBsYXRlciB0aGFuIHRoZSBlbmQgb2YgdGhlIG1lZGlhIHJlc291cmNlLCB0aGVuIGxldCBpdCBi
ZSB0aGUgZW5kIAogICAgIC8vIG9mIHRoZSBtZWRpYSByZXNvdXJjZSBpbnN0ZWFkLgogICAgIHRp
bWUgPSBtaW4odGltZSwgZHVyYXRpb24oKSk7CiAKLSAgICAvLyA3IC0gSWYgdGhlIG5ldyBwbGF5
YmFjayBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHBvc2l0aW9u
LCBsZXQgaXQgYmUgdGhhdCBwb3NpdGlvbiBpbnN0ZWFkLgorICAgIC8vIDYgLSBJZiB0aGUgbmV3
IHBsYXliYWNrIHBvc2l0aW9uIGlzIGxlc3MgdGhhbiB0aGUgZWFybGllc3QgcG9zc2libGUgcG9z
aXRpb24sIGxldCBpdCBiZSB0aGF0IHBvc2l0aW9uIGluc3RlYWQuCiAgICAgZmxvYXQgZWFybGll
c3RUaW1lID0gbV9wbGF5ZXItPnN0YXJ0VGltZSgpOwogICAgIHRpbWUgPSBtYXgodGltZSwgZWFy
bGllc3RUaW1lKTsKIAotICAgIC8vIDggLSBJZiB0aGUgKHBvc3NpYmx5IG5vdyBjaGFuZ2VkKSBu
ZXcgcGxheWJhY2sgcG9zaXRpb24gaXMgbm90IGluIG9uZSBvZiB0aGUgcmFuZ2VzIGdpdmVuIGlu
IHRoZSAKKyAgICAvLyA3IC0gSWYgdGhlIChwb3NzaWJseSBub3cgY2hhbmdlZCkgbmV3IHBsYXli
YWNrIHBvc2l0aW9uIGlzIG5vdCBpbiBvbmUgb2YgdGhlIHJhbmdlcyBnaXZlbiBpbiB0aGUgCiAg
ICAgLy8gc2Vla2FibGUgYXR0cmlidXRlLCB0aGVuIGxldCBpdCBiZSB0aGUgcG9zaXRpb24gaW4g
b25lIG9mIHRoZSByYW5nZXMgZ2l2ZW4gaW4gdGhlIHNlZWthYmxlIGF0dHJpYnV0ZSAKICAgICAv
LyB0aGF0IGlzIHRoZSBuZWFyZXN0IHRvIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24uIC4uLiBJ
ZiB0aGVyZSBhcmUgbm8gcmFuZ2VzIGdpdmVuIGluIHRoZSBzZWVrYWJsZQogICAgIC8vIGF0dHJp
YnV0ZSB0aGVuIHNldCB0aGUgc2Vla2luZyBJREwgYXR0cmlidXRlIHRvIGZhbHNlIGFuZCBhYm9y
dCB0aGVzZSBzdGVwcy4KICAgICBSZWZQdHI8VGltZVJhbmdlcz4gc2Vla2FibGVSYW5nZXMgPSBz
ZWVrYWJsZSgpOwotICAgIGlmICghc2Vla2FibGVSYW5nZXMtPmxlbmd0aCgpIHx8IHRpbWUgPT0g
bm93KSB7CisgICAgLy8gU2hvcnQgY2lyY3VpdCBzZWVraW5nIHRvIHRoZSBjdXJyZW50IHRpbWUg
YnkganVzdCBmaXJpbmcgdGhlIGV2ZW50cyBpZiBubyBzZWVrIGlzIHJlcXVpcmVkLgorICAgIC8v
IERvbid0IHNraXAgY2FsbGluZyB0aGUgbWVkaWEgZW5naW5lIGlmIHdlIGFyZSBpbiBwb3N0ZXIg
bW9kZSBiZWNhdXNlIGEgc2VlayBzaG91bGQgYWx3YXlzIAorICAgIC8vIGNhbmNlbCBwb3N0ZXIg
ZGlzcGxheS4KKyAgICBib29sIG5vU2Vla1JlcXVpcmVkID0gIXNlZWthYmxlUmFuZ2VzLT5sZW5n
dGgoKSB8fCAodGltZSA9PSBub3cgJiYgZGlzcGxheU1vZGUoKSAhPSBQb3N0ZXIpOworICAgIGlm
IChub1NlZWtSZXF1aXJlZCkgeworICAgICAgICBpZiAodGltZSA9PSBub3cpIHsKKyAgICAgICAg
ICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnNlZWtpbmdFdmVudCk7CisgICAgICAgICAg
ICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CisgICAgICAgICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS5zZWVrZWRFdmVudCk7CisgICAgICAgIH0KICAgICAgICAgbV9zZWVr
aW5nID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDY2LDIwICsxMDcyLDI4
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VlayhmbG9hdCB0aW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICBtX2xhc3RTZWVrVGltZSA9IHRpbWU7CiAgICAgbV9zZW50RW5kRXZlbnQgPSBm
YWxzZTsKIAotICAgIC8vIDkgLSBTZXQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gdG8g
dGhlIGdpdmVuIG5ldyBwbGF5YmFjayBwb3NpdGlvbgorICAgIC8vIDggLSBTZXQgdGhlIGN1cnJl
bnQgcGxheWJhY2sgcG9zaXRpb24gdG8gdGhlIGdpdmVuIG5ldyBwbGF5YmFjayBwb3NpdGlvbgog
ICAgIG1fcGxheWVyLT5zZWVrKHRpbWUpOwogCi0gICAgLy8gMTAtMTUgYXJlIGhhbmRsZWQsIGlm
IG5lY2Vzc2FyeSwgd2hlbiB0aGUgZW5naW5lIHNpZ25hbHMgYSByZWFkeXN0YXRlIGNoYW5nZS4K
KyAgICAvLyA5IC0gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgc2Vl
a2luZyBhdCB0aGUgZWxlbWVudC4KKyAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zZWVr
aW5nRXZlbnQpOworCisgICAgLy8gMTAgLSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBl
dmVudCBuYW1lZCB0aW1ldXBkYXRlIGF0IHRoZSBlbGVtZW50LgorICAgIHNjaGVkdWxlVGltZXVw
ZGF0ZUV2ZW50KGZhbHNlKTsKKworICAgIC8vIDExLTE1IGFyZSBoYW5kbGVkLCBpZiBuZWNlc3Nh
cnksIHdoZW4gdGhlIGVuZ2luZSBzaWduYWxzIGEgcmVhZHlzdGF0ZSBjaGFuZ2UuCiAKIH0KIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hTZWVrKCkKIHsKLSAgICAvLyA0LjguMTAuMTAg
U2Vla2luZyBzdGVwIDEyCisgICAgLy8gNC44LjEwLjkgU2Vla2luZyBzdGVwIDE0CiAgICAgbV9z
ZWVraW5nID0gZmFsc2U7CiAKLSAgICAvLyA0LjguMTAuMTAgU2Vla2luZyBzdGVwIDEzCisgICAg
Ly8gNC44LjEwLjkgU2Vla2luZyBzdGVwIDE1CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVz
KCkuc2Vla2VkRXZlbnQpOworCisgICAgc2V0RGlzcGxheU1vZGUoVmlkZW8pOwogfQogCiBIVE1M
TWVkaWFFbGVtZW50OjpSZWFkeVN0YXRlIEhUTUxNZWRpYUVsZW1lbnQ6OnJlYWR5U3RhdGUoKSBj
b25zdApAQCAtMTUzOCw4ICsxNTUyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBs
YXllclRpbWVDaGFuZ2VkKE1lZGlhUGxheWVyKikKICAgICAvLyBtb3ZpZSB0aW1lLgogICAgIHNj
aGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsKIAotICAgIC8vIDQuOC4xMC4xMCBzdGVwIDEy
ICYgMTMuICBOZWVkZWQgaWYgbm8gUmVhZHlTdGF0ZSBjaGFuZ2UgaXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSBzZWVrLgotICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEgJiYg
bV9zZWVraW5nKQorICAgIC8vIDQuOC4xMC45IHN0ZXAgMTQgJiAxNS4gIE5lZWRlZCBpZiBubyBS
ZWFkeVN0YXRlIGNoYW5nZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlZWsuCisgICAgaWYgKG1f
c2Vla2luZyAmJiBtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEpCiAgICAgICAgIGZp
bmlzaFNlZWsoKTsKICAgICAKICAgICBmbG9hdCBub3cgPSBjdXJyZW50VGltZSgpOwpAQCAtMTU4
NCwxMyArMTU5OCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEdXJhdGlv
bkNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogewogICAgIGJlZ2luUHJvY2Vzc2luZ01lZGlhUGxheWVy
Q2FsbGJhY2soKTsKICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5n
ZUV2ZW50KTsKLSNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgaWYgKHJl
bmRlcmVyKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCktPmlzVmlkZW8oKSkKLSAg
ICAgICAgICAgIHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIoKSktPnZpZGVvU2l6ZUNoYW5nZWQoKTsK
LSAgICB9Ci0jZW5kaWYgICAgICAgIAogICAgIGVuZFByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxi
YWNrKCk7CiB9CiAKQEAgLTE2MDMsNiArMTYxMiwxOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyUmF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogICAgIGVuZFByb2Nlc3NpbmdN
ZWRpYVBsYXllckNhbGxiYWNrKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQ
bGF5ZXJQbGF5YmFja1N0YXRlQ2hhbmdlZChNZWRpYVBsYXllciopCit7CisgICAgaWYgKCFtX3Bs
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYmVnaW5Qcm9jZXNzaW5nTWVkaWFQbGF5ZXJD
YWxsYmFjaygpOworICAgIGlmIChtX3BsYXllci0+cGF1c2VkKCkpCisgICAgICAgIHBhdXNlSW50
ZXJuYWwoKTsKKyAgICBlbHNlCisgICAgICAgIHBsYXlJbnRlcm5hbCgpOworICAgIGVuZFByb2Nl
c3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7Cit9CisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
bWVkaWFQbGF5ZXJTYXdVbnN1cHBvcnRlZFRyYWNrcyhNZWRpYVBsYXllciopCiB7CiAgICAgLy8g
VGhlIE1lZGlhUGxheWVyIGNhbWUgYWNyb3NzIGNvbnRlbnQgaXQgY2Fubm90IGNvbXBsZXRlbHkg
aGFuZGxlLgpAQCAtMTYxOCwyMCArMTY0MCwxOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1l
ZGlhUGxheWVyU2F3VW5zdXBwb3J0ZWRUcmFja3MoTWVkaWFQbGF5ZXIqKQogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllclJlcGFpbnQoTWVkaWFQbGF5ZXIqKQogewogICAgIGJlZ2lu
UHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKKyAgICB1cGRhdGVEaXNwbGF5U3RhdGUo
KTsKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOwog
Ci0gICAgdXBkYXRlUG9zdGVySW1hZ2UoKTsKICAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJD
YWxsYmFjaygpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyU2l6ZUNo
YW5nZWQoTWVkaWFQbGF5ZXIqKQogewogICAgIGJlZ2luUHJvY2Vzc2luZ01lZGlhUGxheWVyQ2Fs
bGJhY2soKTsKLSNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgaWYgKHJl
bmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNWaWRlbygpKQotICAgICAgICB0b1JlbmRlclZpZGVv
KHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7Ci0jZW5kaWYgICAgICAgIAorICAgIGlm
IChyZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwog
ICAgIGVuZFByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CiB9CiAKQEAgLTE3ODEsMjQg
KzE4MDEsMzQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAg
IAogICAgIGJvb2wgc2hvdWxkQmVQbGF5aW5nID0gcG90ZW50aWFsbHlQbGF5aW5nKCk7CiAgICAg
Ym9vbCBwbGF5ZXJQYXVzZWQgPSBtX3BsYXllci0+cGF1c2VkKCk7Ci0gICAgaWYgKHNob3VsZEJl
UGxheWluZyAmJiBwbGF5ZXJQYXVzZWQpIHsKLSAgICAgICAgaWYgKCFtX2lzRnVsbHNjcmVlbiAm
JiBpc1ZpZGVvKCkgJiYgZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCkgJiYgZG9jdW1l
bnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFj
aygpKQotICAgICAgICAgICAgZW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgICAgIC8vIFNldCByYXRl
IGJlZm9yZSBjYWxsaW5nIHBsYXkgaW4gY2FzZSB0aGUgcmF0ZSB3YXMgc2V0IGJlZm9yZSB0aGUg
bWVkaWEgZW5naW5lIHdhc24ndCBzZXR1cC4KLSAgICAgICAgLy8gVGhlIG1lZGlhIGVuZ2luZSBz
aG91bGQganVzdCBzdGFzaCB0aGUgcmF0ZSBzaW5jZSBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcu
Ci0gICAgICAgIG1fcGxheWVyLT5zZXRSYXRlKG1fcGxheWJhY2tSYXRlKTsKLSAgICAgICAgbV9w
bGF5ZXItPnBsYXkoKTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKSB7CisgICAgICAgIHNldERp
c3BsYXlNb2RlKFZpZGVvKTsKKyAgICAgICAgaWYgKHBsYXllclBhdXNlZCkgeworICAgICAgICAg
ICAgaWYgKCFtX2lzRnVsbHNjcmVlbiAmJiBpc1ZpZGVvKCkgJiYgZG9jdW1lbnQoKSAmJiBkb2N1
bWVudCgpLT5wYWdlKCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+cmVxdWlyZXNG
dWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKQorICAgICAgICAgICAgICAgIGVudGVyRnVsbHNj
cmVlbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZXQgcmF0ZSBiZWZvcmUgY2Fs
bGluZyBwbGF5IGluIGNhc2UgdGhlIHJhdGUgd2FzIHNldCBiZWZvcmUgdGhlIG1lZGlhIGVuZ2lu
ZSB3YXMgc2V0dXAuCisgICAgICAgICAgICAvLyBUaGUgbWVkaWEgZW5naW5lIHNob3VsZCBqdXN0
IHN0YXNoIHRoZSByYXRlIHNpbmNlIGl0IGlzbid0IGFscmVhZHkgcGxheWluZy4KKyAgICAgICAg
ICAgIG1fcGxheWVyLT5zZXRSYXRlKG1fcGxheWJhY2tSYXRlKTsKKyAgICAgICAgICAgIG1fcGxh
eWVyLT5wbGF5KCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXJ0UGxheWJhY2tQ
cm9ncmVzc1RpbWVyKCk7CiAgICAgICAgIG1fcGxheWluZyA9IHRydWU7Ci0gICAgfSBlbHNlIGlm
ICghc2hvdWxkQmVQbGF5aW5nICYmICFwbGF5ZXJQYXVzZWQpIHsKLSAgICAgICAgbV9wbGF5ZXIt
PnBhdXNlKCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcGxheWVyUGF1
c2VkKQorICAgICAgICAgICAgbV9wbGF5ZXItPnBhdXNlKCk7CisKICAgICAgICAgbV9wbGF5YmFj
a1Byb2dyZXNzVGltZXIuc3RvcCgpOwogICAgICAgICBtX3BsYXlpbmcgPSBmYWxzZTsKICAgICAg
ICAgZmxvYXQgdGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAgICAgIGlmICh0aW1lID4gbV9sYXN0
U2Vla1RpbWUpCiAgICAgICAgICAgICBhZGRQbGF5ZWRSYW5nZShtX2xhc3RTZWVrVGltZSwgdGlt
ZSk7Ci0gICAgfSBlbHNlIGlmIChjb3VsZFBsYXlJZkVub3VnaERhdGEoKSAmJiBwbGF5ZXJQYXVz
ZWQpCi0gICAgICAgIG1fcGxheWVyLT5wcmVwYXJlVG9QbGF5KCk7CisgICAgICAgICAgIAorICAg
ICAgICBpZiAoY291bGRQbGF5SWZFbm91Z2hEYXRhKCkpCisgICAgICAgICAgICBtX3BsYXllci0+
cHJlcGFyZVRvUGxheSgpOworICAgIH0KICAgICAKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAg
ICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTE4MjgsMTcgKzE4NTgsMTcg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1c2VyQ2FuY2VsbGVkTG9hZCgpCiAgICAgbV9wbGF5
ZXIuY2xlYXIoKTsKICNlbmRpZgogICAgIHN0b3BQZXJpb2RpY1RpbWVycygpOworICAgIG1fbG9h
ZFN0YXRlID0gV2FpdGluZ0ZvclNvdXJjZTsKIAogICAgIC8vIDIgLSBTZXQgdGhlIGVycm9yIGF0
dHJpYnV0ZSB0byBhIG5ldyBNZWRpYUVycm9yIG9iamVjdCB3aG9zZSBjb2RlIGF0dHJpYnV0ZSBp
cyBzZXQgdG8gTUVESUFfRVJSX0FCT1JURUQuCiAgICAgbV9lcnJvciA9IE1lZGlhRXJyb3I6OmNy
ZWF0ZShNZWRpYUVycm9yOjpNRURJQV9FUlJfQUJPUlRFRCk7CiAKLSAgICAvLyAzIC0gUXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgYWJvcnQgYXQgdGhlIG1lZGlh
IGVsZW1lbnQsIGluIHRoZSBjb250ZXh0Ci0gICAgLy8gb2YgdGhlIGZldGNoaW5nIHByb2Nlc3Mg
c3RhcnRlZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoaXMgYWxnb3JpdGhtLgorICAgIC8vIDMgLSBR
dWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBlcnJvciBhdCB0aGUgbWVk
aWEgZWxlbWVudC4KICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsK
IAotICAgIC8vIDUgLSBJZiB0aGUgbWVkaWEgZWxlbWVudCdzIHJlYWR5U3RhdGUgYXR0cmlidXRl
IGhhcyBhIHZhbHVlIGVxdWFsIHRvIEhBVkVfTk9USElORywgc2V0IHRoZQotICAgIC8vIGVsZW1l
bnQncyBuZXR3b3JrU3RhdGUgYXR0cmlidXRlIHRvIHRoZSBORVRXT1JLX0VNUFRZIHZhbHVlIGFu
ZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhCi0gICAgLy8gc2ltcGxlIGV2ZW50IGNhbGxlZCBlbXB0
aWVkIGF0IHRoZSBlbGVtZW50LiBPdGhlcndpc2UsIHNldCBzZXQgdGhlIGVsZW1lbnQncyBuZXR3
b3JrU3RhdGUKKyAgICAvLyA0IC0gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0YXRlIGF0
dHJpYnV0ZSBoYXMgYSB2YWx1ZSBlcXVhbCB0byBIQVZFX05PVEhJTkcsIHNldCB0aGUgCisgICAg
Ly8gZWxlbWVudCdzIG5ldHdvcmtTdGF0ZSBhdHRyaWJ1dGUgdG8gdGhlIE5FVFdPUktfRU1QVFkg
dmFsdWUgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgCisgICAgLy8gc2ltcGxlIGV2ZW50IG5h
bWVkIGVtcHRpZWQgYXQgdGhlIGVsZW1lbnQuIE90aGVyd2lzZSwgc2V0IHRoZSBlbGVtZW50J3Mg
bmV0d29ya1N0YXRlIAogICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgTkVUV09SS19JRExFIHZhbHVl
LgogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9OT1RISU5HKSB7CiAgICAgICAgIG1fbmV0
d29ya1N0YXRlID0gTkVUV09SS19FTVBUWTsKQEAgLTE4NDcsMTggKzE4NzcsMjcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1c2VyQ2FuY2VsbGVkTG9hZCgpCiAgICAgZWxzZQogICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTsKIAotICAgIC8vIDYgLSBTZXQgdGhlIGVsZW1l
bnQncyBkZWxheWluZy10aGUtbG9hZC1ldmVudCBmbGFnIHRvIGZhbHNlLiBUaGlzIHN0b3BzIGRl
bGF5aW5nIHRoZSBsb2FkIGV2ZW50LgotICAgIG1fZGVsYXlpbmdUaGVMb2FkRXZlbnQgPSBmYWxz
ZTsKKyAgICAvLyA1IC0gU2V0IHRoZSBlbGVtZW50J3MgZGVsYXlpbmctdGhlLWxvYWQtZXZlbnQg
ZmxhZyB0byBmYWxzZS4gVGhpcyBzdG9wcyBkZWxheWluZyB0aGUgbG9hZCBldmVudC4KKyAgICBz
ZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAKLSAgICAvLyA3IC0gQWJvcnQgdGhlIG92
ZXJhbGwgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4KKyAgICAvLyA2IC0gQWJvcnQgdGhl
IG92ZXJhbGwgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4KICAgICBtX2N1cnJlbnRTb3Vy
Y2VOb2RlID0gMDsKIAogICAgIC8vIFJlc2V0IG1fcmVhZHlTdGF0ZSBzaW5jZSBtX3BsYXllciBp
cyBnb25lLgogICAgIG1fcmVhZHlTdGF0ZSA9IEhBVkVfTk9USElORzsKIH0KIAotdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpCi17Citib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OmNhblN1c3BlbmQoKSBjb25zdCAgCit7ICAKKyAgICByZXR1cm4gdHJ1ZTsg
ICAKK30gIAorCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN0b3AoKSAgCit7ICAKKyAgICBzdXNw
ZW5kKCk7ICAKK30gIAorCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQoKSB7CiAgICAg
aWYgKG1faXNGdWxsc2NyZWVuKQogICAgICAgICBleGl0RnVsbHNjcmVlbigpOwogCkBAIC0xODc1
LDcgKzE5MTQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRvY3VtZW50V2lsbEJlY29tZUlu
YWN0aXZlKCkKICAgICBjYW5jZWxQZW5kaW5nRXZlbnRzQW5kQ2FsbGJhY2tzKCk7CiB9CiAKLXZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKQordm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpyZXN1bWUoKQogewogICAgIG1faW5BY3RpdmVEb2N1bWVudCA9IHRydWU7
CiAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOwpAQCAtMTg5Myw2ICsxOTMyLDEzIEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKQogICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCitib29sIEhUTUxNZWRpYUVsZW1l
bnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0ICAKK3sgIAorICAgIC8vIFJldHVybiB0cnVl
IHdoZW4gd2UgaGF2ZSBwZW5kaW5nIGV2ZW50cyBzbyB3ZSBjYW4ndCBmaXJlIGV2ZW50cyBhZnRl
ciB0aGUgSlMgICAKKyAgICAvLyBvYmplY3QgZ2V0cyBjb2xsZWN0ZWQuICAKKyAgICByZXR1cm4g
bV9wZW5kaW5nRXZlbnRzLnNpemUoKTsgIAorfSAgCisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogewogICAgIHVwZGF0ZVZvbHVtZSgpOwpAQCAtMTk2NCwx
MyArMjAxMCwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmdldFBsdWdpblByb3h5UGFyYW1z
KEtVUkwmIHVybCwgVmVjdG9yPFN0cmluZz4mIG5hbWVzLCBWZQogICAgIEZyYW1lTG9hZGVyKiBs
b2FkZXIgPSBmcmFtZSA/IGZyYW1lLT5sb2FkZXIoKSA6IDA7CiAKICAgICBpZiAoaXNWaWRlbygp
KSB7Ci0gICAgICAgIFN0cmluZyBwb3N0ZXIgPSBwb3N0ZXIoKTsKLSAgICAgICAgaWYgKCFwb3N0
ZXIuaXNFbXB0eSgpICYmIGxvYWRlcikgewotICAgICAgICAgICAgS1VSTCBwb3N0ZXJVUkwgPSBs
b2FkZXItPmNvbXBsZXRlVVJMKHBvc3Rlcik7Ci0gICAgICAgICAgICBpZiAocG9zdGVyVVJMLmlz
VmFsaWQoKSAmJiBsb2FkZXItPndpbGxMb2FkTWVkaWFFbGVtZW50VVJMKHBvc3RlclVSTCkpIHsK
LSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoIl9tZWRpYV9lbGVtZW50X3Bvc3Rlcl8iKTsK
LSAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHBvc3RlclVSTC5zdHJpbmcoKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIEtVUkwgcG9zdGVyVVJMID0gZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1
dGUocG9zdGVyQXR0cik7CisgICAgICAgIGlmICghcG9zdGVyVVJMLmlzRW1wdHkoKSAmJiBsb2Fk
ZXIgJiYgbG9hZGVyLT53aWxsTG9hZE1lZGlhRWxlbWVudFVSTChwb3N0ZXJVUkwpKSB7CisgICAg
ICAgICAgICBuYW1lcy5hcHBlbmQoIl9tZWRpYV9lbGVtZW50X3Bvc3Rlcl8iKTsKKyAgICAgICAg
ICAgIHZhbHVlcy5hcHBlbmQocG9zdGVyVVJMLnN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMjEwNiw2ICsyMTQ5LDIwIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyaWJ1dGUpIGNvbnN0CiAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+
bmFtZSgpID09IHNyY0F0dHI7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U2hvdWxk
RGVsYXlMb2FkRXZlbnQoYm9vbCBzaG91bGREZWxheSkKK3sKKyAgICBpZiAobV9zaG91bGREZWxh
eUxvYWRFdmVudCA9PSBzaG91bGREZWxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKE1l
ZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6c2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoJXMpIiwgYm9v
bFN0cmluZyhzaG91bGREZWxheSkpOworCisgICAgbV9zaG91bGREZWxheUxvYWRFdmVudCA9IHNo
b3VsZERlbGF5OworICAgIGlmIChzaG91bGREZWxheSkKKyAgICAgICAgZG9jdW1lbnQoKS0+aW5j
cmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQo
KS0+ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOworfQorCiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgKaW5kZXggMDUxNjI5ZS4uOGZkOGVkYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRl
ICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogCkBA
IC01MSw3ICs1Miw3IEBAIGNsYXNzIFdpZGdldDsKIC8vIEJ1dCBpdCBjYW4ndCBiZSB1bnRpbCB0
aGUgQ2hyb21pdW0gV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsIGNsYXNzIGlzIGZpeGVkIHNvIGl0
CiAvLyBubyBsb25nZXIgZGVwZW5kcyBvbiB0eXBlY2FzdGluZyBhIE1lZGlhUGxheWVyQ2xpZW50
IHRvIGFuIEhUTUxNZWRpYUVsZW1lbnQuCiAKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNh
blN0YXJ0TGlzdGVuZXIgeworY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lciwgcHJpdmF0ZSBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIE1lZGlhUGxheWVy
KiBwbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllci5nZXQoKTsgfQogICAgIApAQCAtNjQs
NyArNjUsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBFdmVudHVhbGx5IG92ZXJsb2FkZWQgaW4gSFRN
TFZpZGVvRWxlbWVudAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfTsKLSAgICB2aXJ0dWFsIGNvbnN0IEtVUkwgcG9zdGVyKCkgY29u
c3QgeyByZXR1cm4gS1VSTCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTYXZlKCkg
Y29uc3Q7CiAgICAgCkBAIC04NCw3ICs4NCw2IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPE1l
ZGlhRXJyb3I+IGVycm9yKCkgY29uc3Q7CiAKIC8vIG5ldHdvcmsgc3RhdGUKLSAgICBLVVJMIHNy
YygpIGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBj
dXJyZW50U3JjKCkgY29uc3Q7CiAKQEAgLTE4MCw2ICsxNzksMTAgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAKKyAgICBlbnVtIERpc3BsYXlNb2Rl
IHsgVW5rbm93biwgTm9uZSwgUG9zdGVyLCBWaWRlbyB9OworICAgIERpc3BsYXlNb2RlIGRpc3Bs
YXlNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TW9kZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXREaXNwbGF5TW9kZShEaXNwbGF5TW9kZSBtb2RlKSB7IG1fZGlzcGxheU1vZGUgPSBtb2Rl
OyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5l
d0NoaWxkKTsgICAgCiAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRl
KiwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKQEAgLTE5NCwxMCArMTk3LDE1IEBAIHByaXZhdGU6CiAg
ICAgZmxvYXQgZ2V0VGltZU9mZnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgZmxv
YXQgdmFsdWVPbkVycm9yKSBjb25zdDsKICAgICB2b2lkIHNldFRpbWVPZmZzZXRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGZsb2F0IHZhbHVlKTsKICAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9jdW1l
bnREaWRCZWNvbWVBY3RpdmUoKTsKKyAgICAvLyBBY3RpdmVET01PYmplY3QgZnVuY3Rpb25zLgor
ICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN1
c3BlbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisKICAg
ICB2aXJ0dWFsIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlUG9zdGVySW1hZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVN0
YXRlKCkgeyB9CiAgICAgCiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlKTsKICAgICB2b2lkIHNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlKTsKQEAgLTIxMCw2ICsyMTgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtZWRp
YVBsYXllck11dGVDaGFuZ2VkKE1lZGlhUGxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIG1lZGlh
UGxheWVyRHVyYXRpb25DaGFuZ2VkKE1lZGlhUGxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIG1l
ZGlhUGxheWVyUmF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWVk
aWFQbGF5ZXJQbGF5YmFja1N0YXRlQ2hhbmdlZChNZWRpYVBsYXllciopOwogICAgIHZpcnR1YWwg
dm9pZCBtZWRpYVBsYXllclNhd1Vuc3VwcG9ydGVkVHJhY2tzKE1lZGlhUGxheWVyKik7CiAgICAg
dmlydHVhbCB2b2lkIG1lZGlhUGxheWVyUmVwYWludChNZWRpYVBsYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBtZWRpYVBsYXllclNpemVDaGFuZ2VkKE1lZGlhUGxheWVyKik7CkBAIC0yNTYsNiAr
MjY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhdXNlSW50ZXJuYWwoKTsKIAogICAgIHZvaWQg
cHJlcGFyZUZvckxvYWQoKTsKKyAgICB2b2lkIGFsbG93VmlkZW9SZW5kZXJpbmcoKTsKICAgICAK
ICAgICBib29sIHByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjayA+IDA7IH0KICAgICB2b2lkIGJlZ2luUHJv
Y2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKSB7ICsrbV9wcm9jZXNzaW5nTWVkaWFQbGF5ZXJD
YWxsYmFjazsgfQpAQCAtMjc3LDYgKzI4Nyw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZv
aWQgbWVkaWFDYW5TdGFydCgpOwogCisgICAgdm9pZCBzZXRTaG91bGREZWxheUxvYWRFdmVudChi
b29sKTsKKwogICAgIC8vIFJlc3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBiZWhhdmlvcnMu
IFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBjb21waWxlIHRpbWUgY2hvaWNlIGF0IHRoZSBtb21lbnQK
ICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBubyBhY2Nlc3NvciBmdW5jdGlvbnMuCiAgICAgZW51
bSBCZWhhdmlvclJlc3RyaWN0aW9ucyB7CkBAIC0zMjgsMTYgKzM0MCwxNiBAQCBwcml2YXRlOgog
ICAgIAogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9hZDsKIAotICAgIGJvb2wgbV9w
bGF5aW5nOworICAgIERpc3BsYXlNb2RlIG1fZGlzcGxheU1vZGU7CiAKICAgICAvLyBDb3VudGVy
IGluY3JlbWVudGVkIHdoaWxlIHByb2Nlc3NpbmcgYSBjYWxsYmFjayBmcm9tIHRoZSBtZWRpYSBw
bGF5ZXIsIHNvIHdlIGNhbiBhdm9pZAogICAgIC8vIGNhbGxpbmcgdGhlIG1lZGlhIGVuZ2luZSBy
ZWN1cnNpdmVseS4KICAgICBpbnQgbV9wcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjazsKIAot
ICAgIGJvb2wgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQ7Ci0KLSAgICBib29sIG1fcHJv
Y2Vzc2luZ0xvYWQgOiAxOwotICAgIGJvb2wgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA6IDE7Cisg
ICAgYm9vbCBtX3BsYXlpbmcgOiAxOworICAgIGJvb2wgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2Fu
U3RhcnQgOiAxOworICAgIGJvb2wgbV9zaG91bGREZWxheUxvYWRFdmVudCA6IDE7CisgICAgYm9v
bCBtX2lzV2FpdGluZ1RvRGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCA6IDE7CiAgICAgYm9v
bCBtX2hhdmVGaXJlZExvYWRlZERhdGEgOiAxOwogICAgIGJvb2wgbV9pbkFjdGl2ZURvY3VtZW50
IDogMTsKICAgICBib29sIG1fYXV0b3BsYXlpbmcgOiAxOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVu
dC5jcHAKaW5kZXggMmM4M2ZlZC4uOTZjOTgyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQu
Y3BwCkBAIC01Miw5ICs1Miw5IEBAIFBhc3NSZWZQdHI8SFRNTFNvdXJjZUVsZW1lbnQ+IEhUTUxT
b3VyY2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnCiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBIVE1MU291cmNlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQog
Ci12b2lkIEhUTUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCit2b2lkIEhU
TUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIHsKLSAgICBIVE1M
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShkZWVwKTsKICAgICBpZiAocGFyZW50Tm9kZSgpICYmIChwYXJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUoYXVkaW9UYWcpIHx8ICBwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUodmlkZW9U
YWcpKSkgewogICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYSA9IHN0YXRpY19jYXN0PEhU
TUxNZWRpYUVsZW1lbnQqPihwYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAobWVkaWEtPm5ldHdv
cmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktfRU1QVFkpCkBAIC02MiwxMSAr
NjIsNiBAQCB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiAg
ICAgfQogfQogCi1LVVJMIEhUTUxTb3VyY2VFbGVtZW50OjpzcmMoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXROb25FbXB0eVVSTEF0dHJpYnV0ZShzcmNBdHRyKTsKLX0KLQogdm9pZCBIVE1MU291
cmNlRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIHNldEF0dHJpYnV0
ZShzcmNBdHRyLCB1cmwpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVt
ZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAppbmRleCA2Y2NhNjRlLi43
ZDQ5YTNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaApAQCAtMzcsNyArMzcsNiBAQCBjbGFz
cyBIVE1MU291cmNlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SFRNTFNvdXJjZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIEtVUkwgc3JjKCkgY29uc3Q7CiAgICAgU3RyaW5n
IG1lZGlhKCkgY29uc3Q7CiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFNy
Yyhjb25zdCBTdHJpbmcmKTsgICAgCkBAIC01Myw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzRm9yYmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50
KCk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCk7CiAgICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCiAgICAgdm9pZCBlcnJv
ckV2ZW50VGltZXJGaXJlZChUaW1lcjxIVE1MU291cmNlRWxlbWVudD4qKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5pZGwgYi9XZWJDb3JlL2h0bWwvSFRNTFNv
dXJjZUVsZW1lbnQuaWRsCmluZGV4IGY3MjI5ZjEuLjYxZGM0ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5pZGwKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxTb3Vy
Y2VFbGVtZW50LmlkbApAQCAtMjUsNyArMjUsNyBAQAogCiBtb2R1bGUgaHRtbCB7CiBpbnRlcmZh
Y2UgW0NvbmRpdGlvbmFsPVZJREVPXSBIVE1MU291cmNlRWxlbWVudCA6IEhUTUxFbGVtZW50IHsK
LSAgICBhdHRyaWJ1dGUgW1JlZmxlY3QsTm9uRW1wdHksVVJMXSBET01TdHJpbmcgc3JjOworICAg
IGF0dHJpYnV0ZSBbUmVmbGVjdCxVUkxdIERPTVN0cmluZyBzcmM7CiAgICAgYXR0cmlidXRlIERP
TVN0cmluZyB0eXBlOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbWVkaWE7CiB9OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IGE2ZmRiNWYuLmM5NWQ2ZTggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogaW5saW5lIEhUTUxWaWRlb0VsZW1lbnQ6OkhUTUxWaWRlb0VsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTE1lZGlh
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fc2hvdWxkRGlzcGxheVBvc3Rlcklt
YWdlKGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHZpZGVvVGFnKSk7CiB9CkBAIC03
NCw4ICs3Myw4IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6YXR0YWNoKCkKICAgICBIVE1MTWVk
aWFFbGVtZW50OjphdHRhY2goKTsKIAogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURF
TykKLSAgICB1cGRhdGVQb3N0ZXJJbWFnZSgpOwotICAgIGlmIChtX3Nob3VsZERpc3BsYXlQb3N0
ZXJJbWFnZSkgeworICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOworICAgIGlmIChzaG91bGREaXNw
bGF5UG9zdGVySW1hZ2UoKSkgewogICAgICAgICBpZiAoIW1faW1hZ2VMb2FkZXIpCiAgICAgICAg
ICAgICBtX2ltYWdlTG9hZGVyLnNldChuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKICAgICAg
ICAgbV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTkxLDkgKzkwLDggQEAg
dm9pZCBIVE1MVmlkZW9FbGVtZW50OjpkZXRhY2goKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnQ6
OmRldGFjaCgpOwogICAgIAotICAgIGlmICghbV9zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UpCi0g
ICAgICAgIGlmIChtX2ltYWdlTG9hZGVyKQotICAgICAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVh
cigpOworICAgIGlmICghc2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkgJiYgbV9pbWFnZUxvYWRl
cikKKyAgICAgICAgbV9pbWFnZUxvYWRlci5jbGVhcigpOwogfQogCiB2b2lkIEhUTUxWaWRlb0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKQEAgLTEwMSwxOCAr
OTksMjEgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHIpCiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5u
YW1lKCk7CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gcG9zdGVyQXR0cikgewotICAgICAgICBtX3Bv
c3RlclVSTCA9IGdldE5vbkVtcHR5VVJMQXR0cmlidXRlKHBvc3RlckF0dHIpOwotICAgICAgICB1
cGRhdGVQb3N0ZXJJbWFnZSgpOwotICAgICAgICBpZiAobV9zaG91bGREaXNwbGF5UG9zdGVySW1h
Z2UpIHsKKyAgICAgICAgLy8gRm9yY2UgYSBwb3N0ZXIgcmVjYWxjIGJ5IHNldHRpbmcgbV9kaXNw
bGF5TW9kZSB0byBVbmtub3duIGRpcmVjdGx5IGJlZm9yZSBjYWxsaW5nIHVwZGF0ZURpc3BsYXlT
dGF0ZS4KKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudDo6c2V0RGlzcGxheU1vZGUoVW5rbm93bik7
CisgICAgICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZ
X0ZPUl9WSURFTykKKyAgICAgICAgaWYgKHNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpKSB7CiAg
ICAgICAgICAgICBpZiAoIW1faW1hZ2VMb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9pbWFnZUxv
YWRlci5zZXQobmV3IEhUTUxJbWFnZUxvYWRlcih0aGlzKSk7CisgICAgICAgICAgICAgICAgbV9p
bWFnZUxvYWRlciA9IGFkb3B0UHRyKG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwogICAgICAg
ICAgICAgbV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJy
b3IoKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAocGxheWVyKCkpCi0gICAgICAgICAgICAgICAg
cGxheWVyKCktPnNldFBvc3Rlcihwb3N0ZXIoKSk7Ci0jZW5kaWYKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChtX2ltYWdlTG9hZGVyKQorICAgICAgICAgICAgICAgIG1faW1hZ2VM
b2FkZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAg
ICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnNldENhY2hlZEltYWdlKDApOyAKICAgICAg
ICAgfQorI2VuZGlmCiAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIpCiAgICAg
ICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eVdpZHRoLCBhdHRyLT52YWx1ZSgpKTsK
ICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBoZWlnaHRBdHRyKQpAQCAtMTczLDIwICsxNzQsNDIg
QEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTFZpZGVvRWxlbWVudDo6aW1hZ2VTb3VyY2VBdHRy
aWJ1dGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gcG9zdGVyQXR0cjsKIH0KIAotdm9pZCBIVE1M
VmlkZW9FbGVtZW50Ojp1cGRhdGVQb3N0ZXJJbWFnZSgpCit2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6
OnNldERpc3BsYXlNb2RlKERpc3BsYXlNb2RlIG1vZGUpCiB7Ci0jaWYgIUVOQUJMRShQTFVHSU5f
UFJPWFlfRk9SX1ZJREVPKQotICAgIGJvb2wgb2xkU2hvdWxkU2hvd1Bvc3RlckltYWdlID0gbV9z
aG91bGREaXNwbGF5UG9zdGVySW1hZ2U7Ci0jZW5kaWYKKyAgICBEaXNwbGF5TW9kZSBvbGRNb2Rl
ID0gZGlzcGxheU1vZGUoKTsKKyAgICBLVVJMIHBvc3RlciA9IGdldE5vbkVtcHR5VVJMQXR0cmli
dXRlKHBvc3RlckF0dHIpOworCisgICAgaWYgKCFwb3N0ZXIuaXNFbXB0eSgpKSB7CisgICAgICAg
IC8vIFdlIGhhdmUgYSBwb3N0ZXIgcGF0aCwgYnV0IG9ubHkgc2hvdyBpdCB1bnRpbCB0aGUgdXNl
ciB0cmlnZ2VycyBkaXNwbGF5IGJ5IHBsYXlpbmcgb3Igc2Vla2luZyBhbmQgdGhlCisgICAgICAg
IC8vIG1lZGlhIGVuZ2luZSBoYXMgc29tZXRoaW5nIHRvIGRpc3BsYXkuCisgICAgICAgIGlmICht
b2RlID09IFZpZGVvKSB7CisgICAgICAgICAgICBpZiAob2xkTW9kZSAhPSBWaWRlbyAmJiBwbGF5
ZXIoKSkKKyAgICAgICAgICAgICAgICBwbGF5ZXIoKS0+cHJlcGFyZUZvclJlbmRlcmluZygpOwor
ICAgICAgICAgICAgaWYgKCFoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkpCisgICAgICAgICAgICAg
ICAgbW9kZSA9IFBvc3RlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAob2xkTW9kZSAhPSBW
aWRlbyAmJiBwbGF5ZXIoKSkKKyAgICAgICAgcGxheWVyKCktPnByZXBhcmVGb3JSZW5kZXJpbmco
KTsKIAotICAgIG1fc2hvdWxkRGlzcGxheVBvc3RlckltYWdlID0gIXBvc3RlcigpLmlzRW1wdHko
KSAmJiAhaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpOworICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
dERpc3BsYXlNb2RlKG1vZGUpOworCisgICAgaWYgKHBsYXllcigpICYmIHBsYXllcigpLT5jYW5M
b2FkUG9zdGVyKCkpCisgICAgICAgIHBsYXllcigpLT5zZXRQb3N0ZXIocG9zdGVyKTsKIAogI2lm
ICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICBpZiAocmVuZGVyZXIoKSAmJiBv
bGRTaG91bGRTaG93UG9zdGVySW1hZ2UgIT0gbV9zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UpCisg
ICAgaWYgKHJlbmRlcmVyKCkgJiYgZGlzcGxheU1vZGUoKSAhPSBvbGRNb2RlKQogICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogI2VuZGlmCiB9CiAKK3ZvaWQgSFRNTFZp
ZGVvRWxlbWVudDo6dXBkYXRlRGlzcGxheVN0YXRlKCkKK3sKKyAgICBpZiAoZ2V0Tm9uRW1wdHlV
UkxBdHRyaWJ1dGUocG9zdGVyQXR0cikuaXNFbXB0eSgpKQorICAgICAgICBzZXREaXNwbGF5TW9k
ZShWaWRlbyk7CisgICAgZWxzZSBpZiAoZGlzcGxheU1vZGUoKSA8IFBvc3RlcikKKyAgICAgICAg
c2V0RGlzcGxheU1vZGUoUG9zdGVyKTsKK30KKwogdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBIVE1MTWVkaWFF
bGVtZW50OjpwbGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCmluZGV4IGMyNzk2MmYuLmI3
MWMyZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaApAQCAtNTcsMTEgKzU3LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHdlYmtpdEVudGVyRnVsbFNjcmVlbihib29sIGlzVXNlckdlc3R1cmUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHdlYmtpdEVudGVyRnVsbHNjcmVlbihpc1VzZXJHZXN0dXJlLCBl
Yyk7IH0KICAgICB2b2lkIHdlYmtpdEV4aXRGdWxsU2NyZWVuKCkgeyB3ZWJraXRFeGl0RnVsbHNj
cmVlbigpOyB9CiAKLSAgICBib29sIHNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkRGlzcGxheVBvc3RlckltYWdlOyB9Ci0KICAgICAvLyBVc2VkIGJ5IGNh
bnZhcyB0byBnYWluIHJhdyBwaXhlbCBhY2Nlc3MKICAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1l
SW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAorICAgIGJvb2wg
c2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZGlzcGxheU1vZGUoKSA9
PSBQb3N0ZXI7IH0KKwogcHJpdmF0ZToKICAgICBIVE1MVmlkZW9FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkBAIC04MCwxMiArODAsMTMgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUG9zdGVySW1hZ2UoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzcGxheU1vZGUoRGlzcGxh
eU1vZGUpOworCiAgICAgT3duUHRyPEhUTUxJbWFnZUxvYWRlcj4gbV9pbWFnZUxvYWRlcjsKICAg
ICBLVVJMIG1fcG9zdGVyVVJMOwotICAgIGJvb2wgbV9zaG91bGREaXNwbGF5UG9zdGVySW1hZ2U7
CiB9OwogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuY3BwCmluZGV4IDRmYjAxYzguLjI3N2JhMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC0xNzEsNiArMTcxLDEyIEBAIHN0YXRpYyBWZWN0b3I8TWVk
aWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3RhbGxlZE1lZGlhRW5naW5lcygpCiAKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VsaWYgUExBVEZPUk0oUVQp
ICAKKyNpZiBVU0UoUVRfTVVMVElNRURJQSkgIAorICAgICAgICBNZWRpYVBsYXllclByaXZhdGVR
dDo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7ICAKKyNlbHNlICAKKyAgICAg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlh
RW5naW5lKTsgIAorI2VuZGlmICAKICNlbGlmICFQTEFURk9STShHVEspCiAgICAgICAgIC8vIEZJ
WE1FOiBjdXJyZW50bHkgYWxsIHRoZSBNZWRpYUVuZ2luZXMgYXJlIG5hbWVkCiAgICAgICAgIC8v
IE1lZGlhUGxheWVyUHJpdmF0ZS4gVGhpcyBjb2RlIHdpbGwgbmVlZCBhbiB1cGRhdGUgd2hlbiBi
dWcKQEAgLTE5Miw2ICsxOTgsMjQgQEAgc3RhdGljIHZvaWQgYWRkTWVkaWFFbmdpbmUoQ3JlYXRl
TWVkaWFFbmdpbmVQbGF5ZXIgY29uc3RydWN0b3IsIE1lZGlhRW5naW5lU3VwcG8KICAgICBpbnN0
YWxsZWRNZWRpYUVuZ2luZXMoKS5hcHBlbmQobmV3IE1lZGlhUGxheWVyRmFjdG9yeShjb25zdHJ1
Y3RvciwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSkpOwogfQogCitzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgYXBwbGljYXRpb25PY3RldFN0cmVhbSwg
KCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSk7CisgICAgcmV0dXJuIGFwcGxpY2F0aW9uT2N0
ZXRTdHJlYW07Cit9CisKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRleHRQbGFpbigpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHRleHRQbGFpbiwg
KCJ0ZXh0L3BsYWluIikpOworICAgIHJldHVybiB0ZXh0UGxhaW47Cit9CisKK3N0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGNvZGVjcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGNvZGVjcywgKCJjb2RlY3MiKSk7CisgICAgcmV0dXJuIGNvZGVjczsK
K30KKwogc3RhdGljIE1lZGlhUGxheWVyRmFjdG9yeSogY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVB
bmRDb2RlY3MoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKIHsKICAg
ICBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj4mIGVuZ2luZXMgPSBpbnN0YWxsZWRNZWRpYUVu
Z2luZXMoKTsKQEAgLTE5OSw2ICsyMjMsMTQgQEAgc3RhdGljIE1lZGlhUGxheWVyRmFjdG9yeSog
Y2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3MoY29uc3QgU3RyaW5nJiB0eXBlLAogICAg
IGlmIChlbmdpbmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAvLyA0Ljgu
MTAuMyBNSU1FIHR5cGVzIC0gSW4gdGhlIGFic2VuY2Ugb2YgYSBzcGVjaWZpY2F0aW9uIHRvIHRo
ZSBjb250cmFyeSwgdGhlIE1JTUUgdHlwZSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiAKKyAg
ICAvLyB3aGVuIHVzZWQgd2l0aCBwYXJhbWV0ZXJzLCBlLmcuICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW07Y29kZWNzPXRoZW9yYSIsIGlzIGEgdHlwZSB0aGF0IHRoZSB1c2VyIGFnZW50IGtub3dz
IAorICAgIC8vIGl0IGNhbm5vdCByZW5kZXIuCisgICAgaWYgKHR5cGUgPT0gYXBwbGljYXRpb25P
Y3RldFN0cmVhbSgpKSB7CisgICAgICAgIGlmICghY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAgICBNZWRpYVBsYXllckZhY3RvcnkqIGVuZ2lu
ZSA9IDA7CiAgICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0ZWQgPSBNZWRpYVBs
YXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAKQEAgLTI0NywxMSArMjc5LDExIEBAIE1lZGlhUGxheWVy
Ojp+TWVkaWFQbGF5ZXIoKQogCiB2b2lkIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUpCiB7Ci0gICAgU3RyaW5nIHR5cGUg
PSBjb250ZW50VHlwZS50eXBlKCk7Ci0gICAgU3RyaW5nIGNvZGVjcyA9IGNvbnRlbnRUeXBlLnBh
cmFtZXRlcigiY29kZWNzIik7CisgICAgU3RyaW5nIHR5cGUgPSBjb250ZW50VHlwZS50eXBlKCku
bG93ZXIoKTsKKyAgICBTdHJpbmcgdHlwZUNvZGVjcyA9IGNvbnRlbnRUeXBlLnBhcmFtZXRlcihj
b2RlY3MoKSk7CiAKLSAgICAvLyBpZiB3ZSBkb24ndCBrbm93IHRoZSBNSU1FIHR5cGUsIHNlZSBp
ZiB0aGUgZXh0ZW5zaW9uIGNhbiBoZWxwCi0gICAgaWYgKHR5cGUuaXNFbXB0eSgpIHx8IHR5cGUg
PT0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgfHwgdHlwZSA9PSAidGV4dC9wbGFpbiIpIHsK
KyAgICAvLyBJZiB0aGUgTUlNRSB0eXBlIGlzIG1pc3Npbmcgb3IgaXMgbm90IG1lYW5pbmdmdWws
IHRyeSB0byBmaWd1cmUgaXQgb3V0IGZyb20gdGhlIFVSTC4KKyAgICBpZiAodHlwZS5pc0VtcHR5
KCkgfHwgdHlwZSA9PSBhcHBsaWNhdGlvbk9jdGV0U3RyZWFtKCkgfHwgdHlwZSA9PSB0ZXh0UGxh
aW4oKSkgewogICAgICAgICBpbnQgcG9zID0gdXJsLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgICAg
IGlmIChwb3MgPj0gMCkgewogICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5zdWJz
dHJpbmcocG9zICsgMSk7CkBAIC0yNjMsMTQgKzI5NSwxNyBAQCB2b2lkIE1lZGlhUGxheWVyOjps
b2FkKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUpCiAK
ICAgICBNZWRpYVBsYXllckZhY3RvcnkqIGVuZ2luZSA9IDA7CiAgICAgaWYgKCF0eXBlLmlzRW1w
dHkoKSkKLSAgICAgICAgZW5naW5lID0gY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3Mo
dHlwZSwgY29kZWNzKTsKKyAgICAgICAgZW5naW5lID0gY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVB
bmRDb2RlY3ModHlwZSwgdHlwZUNvZGVjcyk7CiAKLSAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBh
biBlbmdpbmUgdGhhdCBjbGFpbXMgdGhlIE1JTUUgdHlwZSwganVzdCB1c2UgdGhlIGZpcnN0IGVu
Z2luZQotICAgIGlmICghZW5naW5lICYmICFpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKS5pc0VtcHR5
KCkpCisgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW4gZW5naW5lIGFuZCBubyBNSU1FIHR5cGUg
aXMgc3BlY2lmaWVkLCBqdXN0IHVzZSB0aGUgZmlyc3QgZW5naW5lLiAgCisgICAgaWYgKCFlbmdp
bmUgJiYgIWluc3RhbGxlZE1lZGlhRW5naW5lcygpLmlzRW1wdHkoKSkgIAogICAgICAgICBlbmdp
bmUgPSBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKVswXTsKICAgICAKLSAgICAvLyBkb24ndCBkZWxl
dGUgYW5kIHJlY3JlYXRlIHRoZSBwbGF5ZXIgdW5sZXNzIGl0IGNvbWVzIGZyb20gYSBkaWZmZXJl
bnQgZW5naW5lCi0gICAgaWYgKGVuZ2luZSAmJiBtX2N1cnJlbnRNZWRpYUVuZ2luZSAhPSBlbmdp
bmUpIHsKKyAgICAvLyBEb24ndCBkZWxldGUgYW5kIHJlY3JlYXRlIHRoZSBwbGF5ZXIgdW5sZXNz
IGl0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgZW5naW5lICAKKyAgICBpZiAoIWVuZ2luZSkgeyAg
CisgICAgICAgIG1fY3VycmVudE1lZGlhRW5naW5lID0gZW5naW5lOyAgCisgICAgICAgIG1fcHJp
dmF0ZS5jbGVhcigpOyAgCisgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRNZWRpYUVuZ2luZSAhPSBl
bmdpbmUpIHsgIAogICAgICAgICBtX2N1cnJlbnRNZWRpYUVuZ2luZSA9IGVuZ2luZTsKICAgICAg
ICAgbV9wcml2YXRlLmNsZWFyKCk7CiAgICAgICAgIG1fcHJpdmF0ZS5zZXQoZW5naW5lLT5jb25z
dHJ1Y3Rvcih0aGlzKSk7CkBAIC0yOTIsNiArMzI3LDExIEBAIGJvb2wgTWVkaWFQbGF5ZXI6Omhh
c0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAogICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc0F2
YWlsYWJsZVZpZGVvRnJhbWUoKTsKIH0KICAgICAKK3ZvaWQgTWVkaWFQbGF5ZXI6OnByZXBhcmVG
b3JSZW5kZXJpbmcoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnByZXBhcmVGb3JSZW5kZXJp
bmcoKTsKK30KKyAgICAKIGJvb2wgTWVkaWFQbGF5ZXI6OmNhbkxvYWRQb3N0ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3ByaXZhdGUtPmNhbkxvYWRQb3N0ZXIoKTsKQEAgLTUyMiwxNCArNTYy
LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXI6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBo
aWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYKIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKQogewot
ICAgIFN0cmluZyB0eXBlID0gY29udGVudFR5cGUudHlwZSgpOwotICAgIFN0cmluZyBjb2RlY3Mg
PSBjb250ZW50VHlwZS5wYXJhbWV0ZXIoImNvZGVjcyIpOwotICAgIE1lZGlhUGxheWVyRmFjdG9y
eSogZW5naW5lID0gY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3ModHlwZSwgY29kZWNz
KTsKKyAgICBTdHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKS5sb3dlcigpOworICAgIFN0
cmluZyB0eXBlQ29kZWNzID0gY29udGVudFR5cGUucGFyYW1ldGVyKGNvZGVjcygpKTsKKworICAg
IC8vIDQuOC4xMC4zIE1JTUUgdHlwZXMgLSBUaGUgY2FuUGxheVR5cGUodHlwZSkgbWV0aG9kIG11
c3QgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdHlwZSBpcyBhIHR5cGUgdGhhdCB0aGUgCisg
ICAgLy8gdXNlciBhZ2VudCBrbm93cyBpdCBjYW5ub3QgcmVuZGVyIG9yIGlzIHRoZSB0eXBlICJh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iCisgICAgaWYgKHR5cGUgPT0gYXBwbGljYXRpb25PY3Rl
dFN0cmVhbSgpKQorICAgICAgICByZXR1cm4gSXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBNZWRpYVBs
YXllckZhY3RvcnkqIGVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5
cGUsIHR5cGVDb2RlY3MpOwogCiAgICAgaWYgKCFlbmdpbmUpCiAgICAgICAgIHJldHVybiBJc05v
dFN1cHBvcnRlZDsKIAotICAgIHJldHVybiBlbmdpbmUtPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0
eXBlLCBjb2RlY3MpOworICAgIHJldHVybiBlbmdpbmUtPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0
eXBlLCB0eXBlQ29kZWNzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllcjo6Z2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKQEAgLTY1NSw2ICs3MDEsMTIgQEAgdm9pZCBNZWRp
YVBsYXllcjo6cmF0ZUNoYW5nZWQoKQogICAgICAgICBtX21lZGlhUGxheWVyQ2xpZW50LT5tZWRp
YVBsYXllclJhdGVDaGFuZ2VkKHRoaXMpOwogfQogCit2b2lkIE1lZGlhUGxheWVyOjpwbGF5YmFj
a1N0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDbGllbnQpCisgICAgICAg
IG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVyUGxheWJhY2tTdGF0ZUNoYW5nZWQodGhp
cyk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmgKaW5kZXggNjk0NTg3Mi4uZTIyNWY2MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaApAQCAtNjksNiArNjksNyBAQCBzdHJ1Y3QgUGxhdGZvcm1NZWRpYSB7CiAgICAg
ICAgIFFUTW92aWVWaXN1YWxDb250ZXh0VHlwZSwKICAgICAgICAgR1N0cmVhbWVyR1dvcmxkVHlw
ZSwKICAgICAgICAgQ2hyb21pdW1NZWRpYVBsYXllclR5cGUsCisgICAgICAgIFF0TWVkaWFQbGF5
ZXJUeXBlLAogICAgIH0gdHlwZTsKIAogICAgIHVuaW9uIHsKQEAgLTc3LDYgKzc4LDcgQEAgc3Ry
dWN0IFBsYXRmb3JtTWVkaWEgewogICAgICAgICBRVE1vdmllVmlzdWFsQ29udGV4dCogcXRNb3Zp
ZVZpc3VhbENvbnRleHQ7CiAgICAgICAgIEdTdHJlYW1lckdXb3JsZCogZ3N0cmVhbWVyR1dvcmxk
OwogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNocm9taXVtTWVkaWFQbGF5
ZXI7CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogcXRNZWRpYVBsYXllcjsK
ICAgICB9IG1lZGlhOwogfTsKIApAQCAtMTE5LDYgKzEyMSw5IEBAIHB1YmxpYzoKICAgICAvLyB0
aGUgcGxheWJhY2sgcmF0ZSBoYXMgY2hhbmdlZAogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXll
clJhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9CiAKKyAgICAvLyB0aGUgcGxheS9wYXVzZSBz
dGF0dXMgY2hhbmdlZAorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclBsYXliYWNrU3RhdGVD
aGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9CisKICAgICAvLyBUaGUgTWVkaWFQbGF5ZXIgaGFzIGZv
dW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIG1lZGlhIGNvbnRlbnQuCiAgICAgLy8gVGhpcyBp
cyB1c2VkIGludGVybmFsbHkgdG8gdHJpZ2dlciBzd2FwcGluZyBmcm9tIGEgPHZpZGVvPgogICAg
IC8vIGVsZW1lbnQgdG8gYW4gPGVtYmVkPiBpbiBzdGFuZGFsb25lIGRvY3VtZW50cwpAQCAtMjM5
LDYgKzI0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7CiAgICAgdm9pZCBz
aXplQ2hhbmdlZCgpOwogICAgIHZvaWQgcmF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHBsYXliYWNr
U3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKIAogICAgIHZvaWQg
cmVwYWludCgpOwpAQCAtMjQ2LDYgKzI1Miw3IEBAIHB1YmxpYzoKICAgICBNZWRpYVBsYXllckNs
aWVudCogbWVkaWFQbGF5ZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUGxheWVyQ2xp
ZW50OyB9CiAKICAgICBib29sIGhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdDsKKyAgICB2
b2lkIHByZXBhcmVGb3JSZW5kZXJpbmcoKTsKIAogICAgIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNv
bnN0OwogICAgIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggNDBhZWFjYi4uMzdlM2Nl
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZh
dGUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5o
CkBAIC0xMjMsNiArMTIzLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6
TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3QgeyByZXR1cm4gTWVkaWFQbGF5ZXI6
OlVua25vd247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5nKCkgeyB9
CisKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAppbmRleCAzYzZjNWFhLi44YmVkZmRhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbi5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclBy
aXZhdGVQaG9ub24uY3BwCkBAIC04NCw3ICs4NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclBy
aXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK01lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6TWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXll
cihwbGF5ZXIpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAg
LCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQpAQCAtMTE4LDE5ICsxMTgs
MTkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikKICAgICBjb25uZWN0KG1fbWVkaWFPYmplY3QsIFNJR05BTCh0b3RhbFRpbWVDaGFu
Z2VkKHFpbnQ2NCkpLCB0aGlzLCBTTE9UKHRvdGFsVGltZUNoYW5nZWQocWludDY0KSkpOwogfQog
Ci1NZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRl
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlh
UGxheWVyUHJpdmF0ZVBob25vbjo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiB7Ci0gICAg
cmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKTsKKyAgICByZXR1cm4gbmV3IE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbihwbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRp
YUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7CiAgICAgaWYgKGlzQXZhaWxhYmxlKCkpCiAg
ICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUp
OwogfQogCiAKLU1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSgpCitNZWRp
YVBsYXllclByaXZhdGVQaG9ub246On5NZWRpYVBsYXllclByaXZhdGVQaG9ub24oKQogewogICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6ZHRvciBkZWxldGluZyB2aWRl
b3dpZGdldCIpOwogICAgIG1fdmlkZW9XaWRnZXQtPmNsb3NlKCk7CkBAIC0xNDYsNyArMTQ2LDcg
QEAgTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKICAgICBtX21lZGlh
T2JqZWN0ID0gMDsKIH0KIAotSGFzaFNldDxTdHJpbmc+JiBNZWRpYVBsYXllclByaXZhdGU6OnN1
cHBvcnRlZFR5cGVzQ2FjaGUoKQorSGFzaFNldDxTdHJpbmc+JiBNZWRpYVBsYXllclByaXZhdGVQ
aG9ub246OnN1cHBvcnRlZFR5cGVzQ2FjaGUoKQogewogICAgIHN0YXRpYyBIYXNoU2V0PFN0cmlu
Zz4gc3VwcG9ydGVkVHlwZXM7CiAgICAgaWYgKCFzdXBwb3J0ZWRUeXBlcy5pc0VtcHR5KCkpCkBA
IC0xOTAsMTIgKzE5MCwxMiBAQCBIYXNoU2V0PFN0cmluZz4mIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c3VwcG9ydGVkVHlwZXNDYWNoZSgpCiAgICAgcmV0dXJuIHN1cHBvcnRlZFR5cGVzOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+
JiB0eXBlcykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQogewogICAgIHR5cGVzID0gc3VwcG9ydGVkVHlwZXND
YWNoZSgpOwogfQogCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3Mp
CitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c3Vw
cG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCiB7CiAg
ICAgaWYgKHR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOwpAQCAtMjA1LDE0ICsyMDUsMTQgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGMK
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVQ
aG9ub246Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBib29sIGhhc1ZpZGVvID0gbV9tZWRpYU9i
amVjdC0+aGFzVmlkZW8oKTsKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9u
b246Omhhc1ZpZGVvKCkgLT4gJXMiLCBoYXNWaWRlbyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAg
IHJldHVybiBoYXNWaWRlbzsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlv
KCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpoYXNBdWRpbygpIGNvbnN0
CiB7CiAgICAgLy8gRklYTUU6IFBob25vbjo6TWVkaWFPYmplY3QgZG9lcyBub3QgaGF2ZSBzdWNo
IGEgaGFzQXVkaW8oKSBmdW5jdGlvbgogICAgIGJvb2wgaGFzQXVkaW8gPSB0cnVlOwpAQCAtMjIw
LDcgKzIyMCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbygpIGNvbnN0CiAg
ICAgcmV0dXJuIGhhc0F1ZGlvOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChj
b25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbjo6bG9hZChcIiVzXCIpIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0yNDEsMzMgKzI0
MSwzMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkK
ICAgICBzZXRWaXNpYmxlKG1fcGxheWVyLT52aXNpYmxlKCkpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6
Y2FuY2VsTG9hZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6cGxheSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGxh
eSgpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpwbGF5KCki
KTsKICAgICBtX21lZGlhT2JqZWN0LT5wbGF5KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpwYXVzZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2UoKQogewog
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2UoKSIpOwogICAg
IG1fbWVkaWFPYmplY3QtPnBhdXNlKCk7CiB9CiAKIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
OnBhdXNlZCgpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6cGF1c2VkKCkg
Y29uc3QKIHsKICAgICBib29sIHBhdXNlZCA9IG1fbWVkaWFPYmplY3QtPnN0YXRlKCkgPT0gUGhv
bm9uOjpQYXVzZWRTdGF0ZTsKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9u
b246OnBhdXNlZCgpIC0tPiAlcyIsIHBhdXNlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgIHJl
dHVybiBwYXVzZWQ7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHBv
c2l0aW9uKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNlZWsoZmxvYXQgcG9zaXRp
b24pCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZWVrKCVm
KSIsIHBvc2l0aW9uKTsKIApAQCAtMjgwLDEyICsyODAsMTIgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnNlZWsoZmxvYXQgcG9zaXRpb24pCiAgICAgbV9tZWRpYU9iamVjdC0+c2Vlayhwb3Np
dGlvbiAqIDEwMDAuMGYpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygp
IGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2Vla2luZygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0
aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6ZHVyYXRpb24oKSBj
b25zdAogewogICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KQogICAgICAgICByZXR1cm4gMC4wZjsKQEAgLTI5OSw3ICsyOTksNyBAQCBmbG9hdCBNZWRpYVBs
YXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKICAgICByZXR1cm4gZHVyYXRpb247CiB9CiAK
LWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAorZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAgZmxvYXQg
Y3VycmVudFRpbWUgPSBtX21lZGlhT2JqZWN0LT5jdXJyZW50VGltZSgpIC8gMTAwMC4wZjsKIApA
QCAtMzA3LDQ4ICszMDcsNDggQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjdXJyZW50VGlt
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRUaW1lOwogfQogCi1QYXNzUmVmUHRyPFRpbWVS
YW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAorUGFzc1JlZlB0cjxU
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmJ1ZmZlcmVkKCkgY29uc3QKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsK
IH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAor
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDAuMGY7CiB9CiAKLXVuc2lnbmVk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uOjpieXRlc0xvYWRlZCgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6
dG90YWxCeXRlcygpIGNvbnN0CiB7CiAgICAgLy9ub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biAwOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRSYXRlKGZsb2F0KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQg
dm9sdW1lKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnNldFZvbHVtZShmbG9hdCB2
b2x1bWUpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRW
b2x1bWUoKSIpOwogICAgIG1fYXVkaW9PdXRwdXQtPnNldFZvbHVtZSh2b2x1bWUpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uOjpzZXRNdXRlZChib29sIG11dGVkKQogewogICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0TXV0ZWQoKSIpOwogICAgIG1fYXVkaW9P
dXRwdXQtPnNldE11dGVkKG11dGVkKTsKIH0KIAotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBN
ZWRpYVBsYXllclByaXZhdGU6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CitNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6bmV0d29ya1N0YXRlKCkgY29uc3QK
IHsKICAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9iaiA9IHRoaXMtPm1ldGFPYmplY3QoKTsK
ICAgICBRTWV0YUVudW0gbmV0d29ya1N0YXRlcyA9IG1ldGFPYmotPmVudW1lcmF0b3IobWV0YU9i
ai0+aW5kZXhPZkVudW1lcmF0b3IoIk5ldHdvcmtTdGF0ZSIpKTsKQEAgLTM1Niw3ICszNTYsNyBA
QCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0
YXRlKCkgY29uc3QKICAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7CiB9CiAKLU1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0CitNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVQaG9ub246OnJlYWR5U3RhdGUo
KSBjb25zdAogewogICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2JqID0gdGhpcy0+bWV0YU9i
amVjdCgpOwogICAgIFFNZXRhRW51bSByZWFkeVN0YXRlcyA9IG1ldGFPYmotPmVudW1lcmF0b3Io
bWV0YU9iai0+aW5kZXhPZkVudW1lcmF0b3IoIlJlYWR5U3RhdGUiKSk7CkBAIC0zNjQsNyArMzY0
LDcgQEAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0
YXRlKCkgY29uc3QKICAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9u
Ojp1cGRhdGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0
d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
b2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBtX2lzVmlzaWJs
ZSA9IHZpc2libGU7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpz
ZXRWaXNpYmxlKCVzKSIsIHZpc2libGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKQEAgLTQyMCw3ICs0
MjAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2libGUp
CiAgICAgbV92aWRlb1dpZGdldC0+c2V0VmlzaWJsZShtX2lzVmlzaWJsZSk7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXpl
KQogewogICAgIGlmICghbV92aWRlb1dpZGdldCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDM0LDcg
KzQzNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNvbnN0IEludFNpemUm
IG5ld1NpemUpCiAgICAgICAgIG1fdmlkZW9XaWRnZXQtPnJlc2l6ZShuZXdTaXplLndpZHRoKCks
IG5ld1NpemUuaGVpZ2h0KCkpOwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0
dXJhbFNpemUoKSBjb25zdAorSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVQaG9ub246Om5hdHVy
YWxTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIWhhc1ZpZGVvKCkpIHsKICAgICAgICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpuYXR1cmFsU2l6ZSgpIC0+ICVkeCVkIiwK
QEAgLTQ1NSw3ICs0NTUsNyBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNp
emUoKSBjb25zdAogICAgIHJldHVybiBuYXR1cmFsU2l6ZTsKIH0KIAotYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6OmV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwgUUV2ZW50KiBldmVudCkKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpldmVudEZpbHRlcihRT2JqZWN0KiBvYmosIFFFdmVu
dCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpVcGRhdGVSZXF1
ZXN0KQogICAgICAgICBtX3BsYXllci0+cmVwYWludCgpOwpAQCAtNDYzLDcgKzQ2Myw3IEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpldmVudEZpbHRlcihRT2JqZWN0KiBvYmosIFFFdmVudCog
ZXZlbnQpCiAgICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50RmlsdGVyKG9iaiwgZXZlbnQpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRlY3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRlY3QsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgaWYgKGdyYXBoaWNzQ29udGVjdC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC00ODEsNyArNDgxLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZWN0LCBjb25zdCBJbnRS
ZWN0JgogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09IFBob25vbjo6TWVkaWFPYmplY3Qgc2ln
bmFscyA9PT09PT09PT09PT09PT09PT09PT09CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
dGF0ZUNoYW5nZWQoUGhvbm9uOjpTdGF0ZSBuZXdTdGF0ZSwgUGhvbm9uOjpTdGF0ZSBvbGRTdGF0
ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpzdGF0ZUNoYW5nZWQoUGhvbm9uOjpT
dGF0ZSBuZXdTdGF0ZSwgUGhvbm9uOjpTdGF0ZSBvbGRTdGF0ZSkKIHsKICAgICBjb25zdCBRTWV0
YU9iamVjdCogbWV0YU9iaiA9IHRoaXMtPm1ldGFPYmplY3QoKTsKICAgICBRTWV0YUVudW0gcGhv
bm9uU3RhdGVzID0gbWV0YU9iai0+ZW51bWVyYXRvcihtZXRhT2JqLT5pbmRleE9mRW51bWVyYXRv
cigiUGhvbm9uU3RhdGUiKSk7CkBAIC00OTEsNDggKzQ5MSw0OCBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKFBob25vbjo6U3RhdGUgbmV3U3RhdGUsIFBob25vbjo6U3Rh
dGUgb2xkUwogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bWV0YURhdGFDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjptZXRh
RGF0YUNoYW5nZWQoKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25v
bjo6bWV0YURhdGFDaGFuZ2VkKCkiKTsKICAgICBMT0dfTUVESUFPQkpFQ1QoKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWthYmxlQ2hhbmdlZChib29sKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVQaG9ub246OnNlZWthYmxlQ2hhbmdlZChib29sKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgTE9HX01FRElBT0JKRUNUKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUGhvbm9uOjpoYXNWaWRlb0NoYW5nZWQoYm9vbCBoYXNWaWRlbykKIHsKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246Omhhc1ZpZGVvQ2hhbmdlZCglcykiLCBo
YXNWaWRlbyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6YnVmZmVyU3RhdHVzKGludCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpidWZm
ZXJTdGF0dXMoaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgTE9HX01FRElBT0JK
RUNUKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpmaW5pc2hlZCgpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6ZmluaXNoZWQoKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgTE9HX01FRElBT0JKRUNUKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjdXJyZW50U291cmNlQ2hhbmdlZChjb25zdCBQaG9ub246Ok1lZGlhU291cmNlJikKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjpjdXJyZW50U291cmNlQ2hhbmdlZChjb25zdCBQaG9u
b246Ok1lZGlhU291cmNlJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIExPR19NRURJ
QU9CSkVDVCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6YWJvdXRUb0ZpbmlzaCgp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6YWJvdXRUb0ZpbmlzaCgpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICBMT0dfTUVESUFPQkpFQ1QoKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnRvdGFsVGltZUNoYW5nZWQocWludDY0IHRvdGFsVGltZSkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCB0b3RhbFRp
bWUpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uOjp0b3RhbFRp
bWVDaGFuZ2VkKCVsbGQpIiwgdG90YWxUaW1lKTsKICAgICBMT0dfTUVESUFPQkpFQ1QoKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5oCmluZGV4IGZmNmEwMWMuLmQ3OTM2NzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaApAQCAtNDAs
MTMgKzQwLDEzIEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UgeworICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVBo
b25vbiA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
IHsKIAogICAgICAgICBRX09CSkVDVAogCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgdm9p
ZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICAgICAgfk1l
ZGlhUGxheWVyUHJpdmF0ZSgpOworICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uKCk7
CiAKICAgICAgICAgLy8gVGhlc2UgZW51bXMgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZwogICAgICAg
ICBRX0VOVU1TKFJlYWR5U3RhdGUgTmV0d29ya1N0YXRlIFBob25vblN0YXRlKQpAQCAtMTI3LDcg
KzEyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0b3RhbFRpbWVDaGFu
Z2VkKHFpbnQ2NCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBNZWRpYVBsYXllclByaXZhdGUo
TWVkaWFQbGF5ZXIqKTsKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uKE1lZGlhUGxh
eWVyKik7CiAgICAgICAgIHN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0
ZShNZWRpYVBsYXllciogcGxheWVyKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKaW5kZXggNTI1YWFmNC4uNjkwMzFh
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclBy
aXZhdGVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXll
clByaXZhdGVRdC5jcHAKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVv
RWxlbWVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVy
VmlkZW8uaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAj
aW5jbHVkZSAicXdlYmZyYW1lLmgiCkBAIC01MSwxNyArNTMsMTcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCitNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpjcmVhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikKIHsKLSAgICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZShw
bGF5ZXIpOworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUXQocGxheWVyKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdp
bmVSZWdpc3RyYXIgcmVnaXN0cmFyKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVnaXN0
ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7CiAgICAgcmVn
aXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4g
JnN1cHBvcnRlZCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmdldFN1cHBvcnRlZFR5cGVz
KEhhc2hTZXQ8U3RyaW5nPiAmc3VwcG9ydGVkKQogewogICAgIFFTdHJpbmdMaXN0IHR5cGVzID0g
UU1lZGlhUGxheWVyOjpzdXBwb3J0ZWRNaW1lVHlwZXMoKTsKIApAQCAtNzIsNyArNzQsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+
ICZzdXBwb3J0ZWQpCiAgICAgfQogfQogCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlh
UGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgbWltZSwgY29uc3QgU3Ry
aW5nJiBjb2RlYykKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRl
UXQ6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGNvbnN0IFN0cmluZyYgY29kZWMp
CiB7CiAgICAgaWYgKCFtaW1lLnN0YXJ0c1dpdGgoImF1ZGlvLyIpICYmICFtaW1lLnN0YXJ0c1dp
dGgoInZpZGVvLyIpKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVk
OwpAQCAtODMsMjAgKzg1LDIzIEBAIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiBtaW1lLCBjCiAgICAgcmV0dXJu
IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKIH0KIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpN
ZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fcGxheWVyKHBs
YXllcikKK01lZGlhUGxheWVyUHJpdmF0ZVF0OjpNZWRpYVBsYXllclByaXZhdGVRdChNZWRpYVBs
YXllciogcGxheWVyKQorICAgIDogbV93ZWJDb3JlUGxheWVyKHBsYXllcikKICAgICAsIG1fbWVk
aWFQbGF5ZXIobmV3IFFNZWRpYVBsYXllcikKICAgICAsIG1fbWVkaWFQbGF5ZXJDb250cm9sKDAp
CiAgICAgLCBtX3ZpZGVvSXRlbShuZXcgUUdyYXBoaWNzVmlkZW9JdGVtKQogICAgICwgbV92aWRl
b1NjZW5lKG5ldyBRR3JhcGhpY3NTY2VuZSkKICAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxh
eWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcp
CisgICAgLCBtX2N1cnJlbnRTaXplKDAsIDApCisgICAgLCBtX25hdHVyYWxTaXplKFJlbmRlclZp
ZGVvOjpkZWZhdWx0U2l6ZSgpKQogICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX2lz
U2Vla2luZyhmYWxzZSkKICAgICAsIG1fY29tcG9zaXRlZChmYWxzZSkKICAgICAsIG1fcXVldWVk
U2VlaygtMSkKKyAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6QXV0bykKIHsKLSAgICBtX21l
ZGlhUGxheWVyLT5iaW5kKG1fdmlkZW9JdGVtKTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRl
b091dHB1dChtX3ZpZGVvSXRlbSk7CiAgICAgbV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9J
dGVtKTsKIAogICAgIC8vIFNpZ25hbCBIYW5kbGVycwpAQCAtMTA2LDYgKzExMSw4IEBAIE1lZGlh
UGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAg
ICAgICAgICAgICB0aGlzLCBTTE9UKHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKSkp
OwogICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKGVycm9yKFFNZWRpYVBsYXllcjo6
RXJyb3IpKSwKICAgICAgICAgICAgIHRoaXMsIFNMT1QoaGFuZGxlRXJyb3IoUU1lZGlhUGxheWVy
OjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChidWZmZXJTdGF0
dXNDaGFuZ2VkKGludCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChidWZmZXJTdGF0dXNDaGFu
Z2VkKGludCkpKTsKICAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChkdXJhdGlvbkNo
YW5nZWQocWludDY0KSksCiAgICAgICAgICAgICB0aGlzLCBTTE9UKGR1cmF0aW9uQ2hhbmdlZChx
aW50NjQpKSk7CiAgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwocG9zaXRpb25DaGFu
Z2VkKHFpbnQ2NCkpLApAQCAtMTIwLDQ4ICsxMjcsNjkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpN
ZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICAgICAgICAgdGhpcywg
U0xPVChuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZUYpKSk7CiAKICAgICAvLyBHcmFiIHRoZSBwbGF5
ZXIgY29udHJvbAotICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlhUGxheWVyLT5z
ZXJ2aWNlKCk7Ci0gICAgaWYgKHNlcnZpY2UpIHsKKyAgICBpZiAoUU1lZGlhU2VydmljZSogc2Vy
dmljZSA9IG1fbWVkaWFQbGF5ZXItPnNlcnZpY2UoKSkgewogICAgICAgICBtX21lZGlhUGxheWVy
Q29udHJvbCA9IHFvYmplY3RfY2FzdDxRTWVkaWFQbGF5ZXJDb250cm9sICo+KAogICAgICAgICAg
ICAgICAgIHNlcnZpY2UtPnJlcXVlc3RDb250cm9sKFFNZWRpYVBsYXllckNvbnRyb2xfaWlkKSk7
CiAgICAgfQogfQogCi1NZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQor
TWVkaWFQbGF5ZXJQcml2YXRlUXQ6On5NZWRpYVBsYXllclByaXZhdGVRdCgpCiB7CisgICAgbV9t
ZWRpYVBsYXllci0+ZGlzY29ubmVjdCh0aGlzKTsKKyAgICBtX21lZGlhUGxheWVyLT5zdG9wKCk7
CisgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVudCgpKTsKKyAgICAKICAg
ICBkZWxldGUgbV9tZWRpYVBsYXllcjsKICAgICBkZWxldGUgbV92aWRlb1NjZW5lOwogfQogCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXll
clByaXZhdGVRdDo6aGFzVmlkZW8oKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhUGxheWVy
LT5pc1ZpZGVvQXZhaWxhYmxlKCk7CisJLy8gSnVzdCBmb3IgdGVzdGluZywgZG9uJ3QgY29tbWl0
CisJcmV0dXJuIHRydWU7CisgIC8vcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFi
bGUoKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Omhhc0F1ZGlvKCkgY29uc3QKIHsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1
cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQor
eworICAgIG1fbWVkaWFVcmwgPSB1cmw7CisKKyAgICAvLyBRdE11bHRpbWVkaWEgZG9lcyBub3Qg
aGF2ZSBhbiBBUEkgdG8gdGhyb3R0bGUgbG9hZGluZworICAgIC8vIHNvIHdlIGhhbmRsZSB0aGlz
IG91cnNlbHZlcyBieSBkZWxheWluZyB0aGUgbG9hZAorICAgIGlmIChtX3ByZWxvYWQgPT0gTWVk
aWFQbGF5ZXI6Ok5vbmUpeworICAgIAkvLyBNYXkgbmVlZCB0byBhZGQgdGhpcyBpbiBsYXRlcgor
ICAgIAkvL3x8IG1fd2ViQ29yZVBsYXllci0+cmVxdWlyZXNGdWxsc2NyZWVuVmlkZW9QbGF5YmFj
aygpKSB7CisgICAgICAgIG1fZGVsYXlpbmdMb2FkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNvbW1pdExvYWQodXJsKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdDo6Y29tbWl0TG9hZChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICAvLyBXZSBhcmUgbm93
IGxvYWRpbmcKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcp
IHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAg
ICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgbV93ZWJDb3JlUGxh
eWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiAgICAgfQogCiAgICAgLy8gQW5kIHdlIGRvbid0
IGhhdmUgYW55IGRhdGEgeWV0CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmcpIHsKICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVO
b3RoaW5nOwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAg
bV93ZWJDb3JlUGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogICAgIH0KIAogICAgIGNvbnN0
IFFVcmwgclVybCA9IFFVcmwoUVN0cmluZyh1cmwpKTsKICAgICBjb25zdCBRU3RyaW5nIHNjaGVt
ZSA9IHJVcmwuc2NoZW1lKCkudG9Mb3dlcigpOwogCiAgICAgLy8gR3JhYiB0aGUgY2xpZW50IG1l
ZGlhIGVsZW1lbnQKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTE1lZGlhRWxlbWVudCo+KG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKKyAgICBI
VE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+
KG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0aCBhIG5ldHdvcmsgcmVxdWVzdCBpZiB0aGUgcmVzb3Vy
Y2UgaXMgaHR0cFtzXQogICAgIGlmIChzY2hlbWUgPT0gImh0dHAiIHx8IHNjaGVtZSA9PSAiaHR0
cHMiKSB7CkBAIC0yMDgsMzIgKzIzNiw1MyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCkKICAgICAvLyBlbmdpbmUgd2hpY2ggZG9lcy4KICAgICBtX21l
ZGlhUGxheWVyLT5zZXRNdXRlZChlbGVtZW50LT5tdXRlZCgpKTsKICAgICBtX21lZGlhUGxheWVy
LT5zZXRWb2x1bWUoc3RhdGljX2Nhc3Q8aW50PihlbGVtZW50LT52b2x1bWUoKSAqIDEwMC4wKSk7
CisgICAgCisgICAgLy8gU2V0dGluZyBhIG1lZGlhIHNvdXJjZSB3aWxsIHN0YXJ0IGxvYWRpbmcg
dGhlIG1lZGlhLCBidXQgd2UgbmVlZAorICAgIC8vIHRvIHByZS1yb2xsIGFzIHdlbGwgdG8gZ2V0
IHZpZGVvIHNpemUtaGludHMgYW5kIGJ1ZmZlci1zdGF0dXMKKyAgICBpZiAoZWxlbWVudC0+cGF1
c2VkKCkpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7CisgICAgZWxzZQorICAgICAg
ICBtX21lZGlhUGxheWVyLT5wbGF5KCk7CisgICAgCiB9Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF0OjpyZXN1bWVMb2FkKCkKK3sKKyAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCisgICAgaWYgKCFtX21lZGlhVXJsLmlz
TnVsbCgpKQorICAgICAgICBjb21taXRMb2FkKG1fbWVkaWFVcmwpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpjYW5jZWxMb2FkKCkKIHsKICAgICBtX21lZGlhUGxheWVyLT5zZXRN
ZWRpYShRTWVkaWFDb250ZW50KCkpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwcmVw
YXJlVG9QbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+bWVkaWEoKS5pc051bGwoKSB8
fCBtX2RlbGF5aW5nTG9hZCkKKyAgICAgICAgcmVzdW1lTG9hZCgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpwbGF5KCkKIHsKICAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUo
KSAhPSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKICAgICAgICAgbV9tZWRpYVBsYXllci0+
cGxheSgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdDo6cGF1c2UoKQogewogICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0
ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQogICAgICAgICBtX21lZGlhUGxheWVy
LT5wYXVzZSgpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBhdXNlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgcG9zaXRpb24pCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzZWVrKGZsb2F0IHBvc2l0aW9uKQogewogICAgIGlmICgh
bV9tZWRpYVBsYXllci0+aXNTZWVrYWJsZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjksMTIg
KzMxOCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlvbikK
ICAgICB9CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnNlZWtpbmcoKSBjb25zdAogewogICAgIHJldHVybiBt
X2lzU2Vla2luZzsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbigpIGNv
bnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdDo6ZHVyYXRpb24oKSBjb25zdAogewogICAg
IGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQogICAgICAgICBy
ZXR1cm4gMC4wZjsKQEAgLTI4OCwxMyArMzM3LDEyIEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb24oKSBjb25zdAogICAgIHJldHVybiBkdXJhdGlvbjsKIH0KIAotZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpjdXJyZW50VGltZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6Y3VycmVudFRpbWUoKSBjb25zdAogewotICAgIGZsb2F0IGN1cnJlbnRUaW1lID0g
bV9tZWRpYVBsYXllci0+cG9zaXRpb24oKSAvIDEwMDAuMGY7Ci0gICAgcmV0dXJuIGN1cnJlbnRU
aW1lOworICAgIHJldHVybiBtX21lZGlhUGxheWVyLT5wb3NpdGlvbigpIC8gMTAwMC4wZjsKIH0K
IAotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKCkg
Y29uc3QKK1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmJ1ZmZl
cmVkKCkgY29uc3QKIHsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBUaW1lUmFu
Z2VzOjpjcmVhdGUoKTsKIApAQCAtMzEyLDcgKzM2MCw3IEBAIFBhc3NSZWZQdHI8VGltZVJhbmdl
cz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGJ1ZmZl
cmVkLnJlbGVhc2UoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vl
a2FibGUoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om1heFRpbWVTZWVrYWJs
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJvbCkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0zMjAsMTggKzM2OCwxOCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1h
eFRpbWVTZWVrYWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX21l
ZGlhUGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxheWJhY2tSYW5nZXMoKS5sYXRlc3RUaW1lKCkp
IC8gMTAwMC4wZjsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRl
ZCgpIGNvbnN0Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVRdDo6Ynl0ZXNMb2FkZWQoKSBj
b25zdAogewogICAgIHVuc2lnbmVkIHBlcmNlbnRhZ2UgPSBtX21lZGlhUGxheWVyLT5idWZmZXJT
dGF0dXMoKTsKIAogICAgIGlmIChwZXJjZW50YWdlID09IDEwMCkgewogICAgICAgICBpZiAobV9u
ZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OklkbGUpIHsKICAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7Ci0gICAgICAgICAgICBtX3BsYXllci0+bmV0d29y
a1N0YXRlQ2hhbmdlZCgpOworICAgICAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRp
YVBsYXllcjo6SGF2ZUVub3VnaERhdGEpIHsKICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworICAgICAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5yZWFkeVN0YXRlQ2hh
bmdlZCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDIsNyArMzkwLDcgQEAgdW5zaWduZWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIHBlcmNl
bnRhZ2U7CiB9CiAKLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNv
bnN0Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVRdDo6dG90YWxCeXRlcygpIGNvbnN0CiB7
CiAgICAgaWYgKG1fbWVkaWFQbGF5ZXItPmF2YWlsYWJsZU1ldGFEYXRhKCkuY29udGFpbnMoUXRN
dWx0aW1lZGlhS2l0OjpTaXplKSkKICAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPm1ldGFE
YXRhKFF0TXVsdGltZWRpYUtpdDo6U2l6ZSkudG9JbnQoKTsKQEAgLTM1MCw1MiArMzk4LDU5IEBA
IHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiAgICAgcmV0
dXJuIDEwMDsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0
ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQgcHJlbG9hZCkKK3sKKyAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOworICAgIGlmIChtX2Rl
bGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCisgICAgICAgIHJl
c3VtZUxvYWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6c2V0UmF0ZShmbG9h
dCByYXRlKQogewogICAgIG1fbWVkaWFQbGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogewogICAgIG1f
bWVkaWFQbGF5ZXItPnNldFZvbHVtZShzdGF0aWNfY2FzdDxpbnQ+KHZvbHVtZSAqIDEwMC4wKSk7
CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c011dGluZygpIGNvbnN0Citi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzdXBwb3J0c011dGluZygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRNdXRlZChib29s
IG11dGVkKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkK
IHsKICAgICBtX21lZGlhUGxheWVyLT5zZXRNdXRlZChtdXRlZCk7CiB9CiAKLU1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAor
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVRdDo6bmV0d29ya1N0
YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7CiB9CiAKLU1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0CitN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVhZHlTdGF0ZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgbV9pc1Zpc2libGUgPSB2aXNp
YmxlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bWVkaWFTdGF0dXNDaGFuZ2VkKFFN
ZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjptZWRp
YVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykKIHsKICAgICB1cGRhdGVT
dGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmhhbmRsZUVycm9yKFFNZWRp
YVBsYXllcjo6RXJyb3IpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpoYW5kbGVFcnJvcihR
TWVkaWFQbGF5ZXI6OkVycm9yKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUgc3RhdGUp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpT
dGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoc3RhdGUgIT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3Rh
dGUgJiYgbV9pc1NlZWtpbmcgJiYgbV9xdWV1ZWRTZWVrID49IDApIHsKICAgICAgICAgbV9tZWRp
YVBsYXllci0+c2V0UG9zaXRpb24obV9xdWV1ZWRTZWVrKTsKQEAgLTQwMywxMiArNDU4LDE2IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0
ZSBzdGF0ZSkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXRpdmVTaXpl
Q2hhbmdlZChjb25zdCBRU2l6ZUYmKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6bmF0aXZl
U2l6ZUNoYW5nZWQoY29uc3QgUVNpemVGJiBzaXplKQogewotICAgIG1fcGxheWVyLT5zaXplQ2hh
bmdlZCgpOworICAgIGlmICghc2l6ZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbmF0dXJhbFNpemUgPSBzaXplLnRvU2l6ZSgpOworICAgIG1fd2ViQ29yZVBsYXllci0+c2l6
ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnF1ZXVlZFNlZWtUaW1l
b3V0KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnF1ZXVlZFNlZWtUaW1lb3V0KCkKIHsK
ICAgICAvLyBJZiB3ZSBoYXZlbid0IGhlYXJkIGFueXRoaW5nLCBhc3N1bWUgdGhlIHBsYXllciBp
cyBub3cgcGF1c2VkCiAgICAgLy8gYW5kIHdlIGNhbiBhdHRlbXB0IHRoZSBzZWVrCkBAIC00MjEs
NDAgKzQ4MCw0NSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cXVldWVkU2Vla1RpbWVvdXQo
KQogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lb3V0KCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnNlZWtUaW1lb3V0KCkKIHsKICAgICAvLyBJZiB3ZSBo
YXZlbid0IGhlYXJkIGFueXRoaW5nLCBhc3N1bWUgdGhlIHNlZWsgc3VjY2VlZGVkCiAgICAgaWYg
KG1faXNTZWVraW5nKSB7Ci0gICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgICAg
ICBtX3dlYkNvcmVQbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiAgICAgICAgIG1faXNTZWVraW5nID0g
ZmFsc2U7CiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cG9zaXRpb25DaGFu
Z2VkKHFpbnQ2NCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBvc2l0aW9uQ2hhbmdlZChx
aW50NjQpCiB7CiAgICAgLy8gT25seSBwcm9wb2dhdGUgdGhpcyBldmVudCBpZiB3ZSBhcmUgc2Vl
a2luZwogICAgIGlmIChtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsgPT0gLTEpIHsKLSAgICAg
ICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1fd2ViQ29yZVBsYXllci0+dGlt
ZUNoYW5nZWQoKTsKICAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKICAgICB9CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQocWludDY0KQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdDo6YnVmZmVyU3RhdHVzQ2hhbmdlZChpbnQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6ZHVyYXRpb25DaGFu
Z2VkKHFpbnQ2NCkKIHsKLSAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7CisgICAgbV93
ZWJDb3JlUGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnZvbHVtZUNoYW5nZWQoaW50IHZvbHVtZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UXQ6OnZvbHVtZUNoYW5nZWQoaW50IHZvbHVtZSkKIHsKLSAgICBtX3BsYXllci0+dm9sdW1lQ2hh
bmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSAvIDEwMC4wKTsKKyAgICBtX3dlYkNvcmVQ
bGF5ZXItPnZvbHVtZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkgLyAxMDAuMCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptdXRlZENoYW5nZWQoYm9vbCBtdXRlZCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om11dGVkQ2hhbmdlZChib29sIG11dGVkKQogewot
ICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChtdXRlZCk7CisgICAgbV93ZWJDb3JlUGxheWVyLT5t
dXRlQ2hhbmdlZChtdXRlZCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVT
dGF0ZXMoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6dXBkYXRlU3RhdGVzKCkKIHsKICAg
ICAvLyBTdG9yZSB0aGUgb2xkIHN0YXRlcyBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgYSBjaGFuZ2Ug
YW5kIHJhaXNlIGNoYW5nZSBldmVudHMKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9s
ZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOwpAQCAtNDk5LDEzICs1NjMsMTMgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCiAgICAgLy8gQnJlYWtpbmcgdGhp
cyBpbnZhcmlhbnQgd2lsbCBjYXVzZSB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBm
b3IgbXVsdGlwbGUKICAgICAvLyBzb3VyY2VzIHRvIGZhaWwuCiAgICAgaWYgKG1fcmVhZHlTdGF0
ZSAhPSBvbGRSZWFkeVN0YXRlKQotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQo
KTsKKyAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogCiAgICAg
aWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkKLSAgICAgICAgbV9wbGF5ZXIt
Pm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5uZXR3b3Jr
U3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUgPT0gbV9jdXJyZW50U2l6ZSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTE0LDE1ICs1NzgsMzIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBtX3ZpZGVvSXRlbS0+c2V0U2l6
ZShRU2l6ZUYoUVNpemUoc2l6ZSkpKTsKIH0KIAotSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6
Om5hdHVyYWxTaXplKCkgY29uc3QKK0ludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om5hdHVy
YWxTaXplKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1ZpZGVvKCkgfHwgbV9yZWFkeVN0YXRlIDwg
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICBpZiAoIWhhc1ZpZGVvKCkgfHwgIG1fcmVh
ZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpIHsKICAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKKyAgICB9CiAKLSAgICByZXR1cm4gSW50U2l6ZShtX3ZpZGVvSXRlbS0+bmF0aXZl
U2l6ZSgpLnRvU2l6ZSgpKTsKKyAgICByZXR1cm4gbV9uYXR1cmFsU2l6ZTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdDo6cmVtb3ZlVmlkZW9JdGVtKCkKK3sKKyAgICBtX29sZE5hdHVy
YWxTaXplID0gbV9uYXR1cmFsU2l6ZTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1
dChzdGF0aWNfY2FzdDxRR3JhcGhpY3NWaWRlb0l0ZW0qPigwKSk7CisgICAgbV92aWRlb1NjZW5l
LT5yZW1vdmVJdGVtKG1fdmlkZW9JdGVtKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlc3RvcmVWaWRlb0l0ZW0oKQoreworICAgIG1fbWVk
aWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKKyAgICBtX3ZpZGVvU2NlbmUt
PmFkZEl0ZW0obV92aWRlb0l0ZW0pOworICAgIC8vIEZJWE1FOiBhIHF0bW9iaWxpdHkgYnVnLCBu
ZWVkIHRvIHJlc2V0IHRoZSBzaXplIHdoZW4gcmVzdG9yZSB0aGUgdmlkZW9pdGVtLCBvdGhlcndp
c2UgdGhlIHNpemUgaXMgMAorICAgIC8vIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9i
cm93c2UvUVRNT0JJTElUWS05NzEKKyAgICBuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZShtX29sZE5h
dHVyYWxTaXplKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG1fY29tcG9zaXRlZCkKQEAgLTUzNCwyMiAr
NjE1LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFtX2lzVmlzaWJsZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gR3JhYiB0aGUgcGFpbnRlciBhbmQgd2lkZ2V0CiAgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIC8v
IFJlbmRlciB0aGUgdmlkZW8KICAgICBtX3ZpZGVvU2NlbmUtPnJlbmRlcihwYWludGVyLCBRUmVj
dEYoUVJlY3QocmVjdCkpLCBtX3ZpZGVvSXRlbS0+c2NlbmVCb3VuZGluZ1JlY3QoKSk7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OnJlcGFpbnQoKQogewotICAgIG1fcGxheWVyLT5yZXBhaW50KCk7CisgICAgbV93ZWJD
b3JlUGxheWVyLT5yZXBhaW50KCk7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNo
YW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdT
dGF0ZUNoYW5nZWQoKQogewotICAgIGJvb2wgY29tcG9zaXRlZCA9IG1fcGxheWVyLT5tZWRpYVBs
YXllckNsaWVudCgpLT5tZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV9wbGF5
ZXIpOworICAgIE1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQgPSBtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCk7CisgICAgYm9vbCBjb21wb3NpdGVkID0gY2xpZW50LT5tZWRpYVBs
YXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV93ZWJDb3JlUGxheWVyKTsKICAgICBpZiAo
Y29tcG9zaXRlZCA9PSBtX2NvbXBvc2l0ZWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTYwLDEy
ICs2MzksMjEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmFjY2VsZXJhdGVkUmVuZGVyaW5n
U3RhdGVDaGFuZ2VkKCkKICAgICAgICAgbV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9JdGVt
KTsKIH0KIAotUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdGVkID8gbV92aWRlb0l0ZW0gOiAw
OwogfQorCiAjZW5kaWYKIAorUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVRdDo6cGxh
dGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxhdGZvcm1NZWRpYSBwbTsKKyAgICBwbS50eXBl
ID0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGU7CisgICAgcG0ubWVkaWEucXRNZWRp
YVBsYXllciA9IGNvbnN0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlUXQqPih0aGlzKTsKKyAgICBy
ZXR1cm4gcG07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2luY2x1ZGUgIm1vY19N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHAiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKaW5kZXggZDcyNDA0Yy4uMDliYjQzZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVR
dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRl
UXQuaApAQCAtMzMsMTMgKzMzLDEzIEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwgcHVi
bGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVRdCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
IHsKIAogICAgIFFfT0JKRUNUCiAKIHB1YmxpYzoKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlKiBjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcik7Ci0gICAgfk1lZGlhUGxh
eWVyUHJpdmF0ZSgpOworICAgIH5NZWRpYVBsYXllclByaXZhdGVRdCgpOwogCiAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAgICAgc3Rh
dGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7CkBAIC01MCwxMCAr
NTAsMTMgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKIAogICAgIHZvaWQg
bG9hZChjb25zdCBTdHJpbmcgJnVybCk7CisgICAgdm9pZCBjb21taXRMb2FkKGNvbnN0IFN0cmlu
ZyYgdXJsKTsKKyAgICB2b2lkIHJlc3VtZUxvYWQoKTsKICAgICB2b2lkIGNhbmNlbExvYWQoKTsK
IAogICAgIHZvaWQgcGxheSgpOwogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHByZXBhcmVU
b1BsYXkoKTsKIAogICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCBzZWVraW5nKCkg
Y29uc3Q7CkBAIC02OCw2ICs3MSw4IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzTXV0aW5n
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNdXRlZChib29sKTsKIAorICAgIHZvaWQgc2V0UHJlbG9h
ZChNZWRpYVBsYXllcjo6UHJlbG9hZCk7CisKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSgpIGNvbnN0OwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUoKSBjb25zdDsKIApAQCAtODMsNyArODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgIGJvb2wgc3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRz
RnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICAvLyB3aGV0aGVyIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBpcyBz
dXBwb3J0ZWQgYnkgdGhlIG1lZGlhIGVuZ2luZSBmb3IgdGhlIGN1cnJlbnQgbWVkaWEuCkBAIC05
Myw2ICs5OCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gcmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4g
YmUgZGlyZWN0bHkgY29tcG9zaXRlZCB2aWEgR3JhcGhpY3NMYXllclF0IChlc3NlbnRpYWxseSBh
IFFHcmFwaGljc0l0ZW0qKQogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0OwogI2VuZGlmCisgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVk
aWEoKSBjb25zdDsKKyAgICBRTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYVBsYXllcjsgfQorICAgIHZvaWQgcmVtb3ZlVmlkZW9JdGVtKCk7CisgICAgdm9p
ZCByZXN0b3JlVmlkZW9JdGVtKCk7CiAKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBtZWRpYVN0
YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CkBAIC0xMDMsNiArMTEyLDcg
QEAgcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIHNlZWtUaW1lb3V0KCk7CiAgICAgdm9pZCBwb3Np
dGlvbkNoYW5nZWQocWludDY0KTsKICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpOwor
ICAgIHZvaWQgYnVmZmVyU3RhdHVzQ2hhbmdlZChpbnQpOwogICAgIHZvaWQgdm9sdW1lQ2hhbmdl
ZChpbnQpOwogICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wpOwogICAgIHZvaWQgcmVwYWludCgp
OwpAQCAtMTExLDkgKzEyMSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsK
IAogcHJpdmF0ZToKLSAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBN
ZWRpYVBsYXllclByaXZhdGVRdChNZWRpYVBsYXllciopOwogCi0gICAgTWVkaWFQbGF5ZXIqIG1f
cGxheWVyOworICAgIE1lZGlhUGxheWVyKiBtX3dlYkNvcmVQbGF5ZXI7CiAgICAgUU1lZGlhUGxh
eWVyKiBtX21lZGlhUGxheWVyOwogICAgIFFNZWRpYVBsYXllckNvbnRyb2wqIG1fbWVkaWFQbGF5
ZXJDb250cm9sOwogICAgIFFHcmFwaGljc1ZpZGVvSXRlbSogbV92aWRlb0l0ZW07CkBAIC0xMjMs
MTAgKzEzMywxNSBAQCBwcml2YXRlOgogICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgbV9yZWFkeVN0YXRlOwogCiAgICAgSW50U2l6ZSBtX2N1cnJlbnRTaXplOworICAgIEludFNp
emUgbV9uYXR1cmFsU2l6ZTsKKyAgICBJbnRTaXplIG1fb2xkTmF0dXJhbFNpemU7CiAgICAgYm9v
bCBtX2lzVmlzaWJsZTsKICAgICBib29sIG1faXNTZWVraW5nOwogICAgIGJvb2wgbV9jb21wb3Np
dGVkOwogICAgIHFpbnQ2NCBtX3F1ZXVlZFNlZWs7CisgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQg
bV9wcmVsb2FkOworICAgIGJvb2wgbV9kZWxheWluZ0xvYWQ7CisgICAgU3RyaW5nIG1fbWVkaWFV
cmw7CiB9OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRleCBkYmE3
OTAyLi41MzA4NzAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTk4
OSw3ICs5ODksMTIgQEAgQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVRdDo6aW5pdGlhbGl6ZUNvbW1v
blFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0aW9uJiBvcHRpb24sIFIKIAogU3RyaW5nIFJlbmRlclRo
ZW1lUXQ6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewotICAgIHJldHVybiBTdHJp
bmcobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJv
bHNRdFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nKG1l
ZGlhQ29udHJvbHNRdFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXRV
c2VyQWdlbnRTdHlsZVNoZWV0KSk7CisKKyAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+Y2hyb21l
KCktPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkKKyAgICAgICAgcmVzdWx0
ICs9IFN0cmluZyhtZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKG1lZGlhQ29udHJvbHNRdEZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBIZWxwZXIgY2xhc3MgdG8gdHJhbnNmb3JtIHRo
ZSBwYWludGVyJ3Mgd29ybGQgbWF0cml4IHRvIHRoZSBvYmplY3QncyBjb250ZW50IGFyZWEsIHNj
YWxlZCB0byAwLDAsMTAwLDEwMApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCmluZGV4IDYxMGZi
NWYuLjM5Nzg4ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKQEAgLTUwLDI1ICs1MCw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBSZW5kZXJWaWRlbzo6UmVuZGVyVmlkZW8o
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8pCiAgICAgOiBSZW5kZXJNZWRpYSh2aWRlbykKIHsKLSAg
ICBpZiAodmlkZW8tPnBsYXllcigpICYmIHZpZGVvLT5yZWFkeVN0YXRlKCkgPj0gSFRNTFZpZGVv
RWxlbWVudDo6SEFWRV9NRVRBREFUQSkKLSAgICAgICAgc2V0SW50cmluc2ljU2l6ZSh2aWRlby0+
cGxheWVyKCktPm5hdHVyYWxTaXplKCkpOwotICAgIGVsc2UgewotICAgICAgICAvLyBXaGVuIHRo
ZSBuYXR1cmFsIHNpemUgb2YgdGhlIHZpZGVvIGlzIHVuYXZhaWxhYmxlLCB3ZSB1c2UgdGhlIHBy
b3ZpZGVkCi0gICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcyBvZiB0aGUgdmlk
ZW8gZWxlbWVudCBhcyB0aGUgaW50cmluc2ljIHNpemUgdW50aWwKLSAgICAgICAgLy8gYmV0dGVy
IHZhbHVlcyBiZWNvbWUgYXZhaWxhYmxlLiBJZiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBub3Qgc2V0
LCB3ZSBmYWxsIGJhY2sKLSAgICAgICAgLy8gdG8gYSBkZWZhdWx0IHZpZGVvIHNpemUgKDMwMHgx
NTApLgotICAgICAgICBpZiAodmlkZW8tPmhhc0F0dHJpYnV0ZSh3aWR0aEF0dHIpICYmIHZpZGVv
LT5oYXNBdHRyaWJ1dGUoaGVpZ2h0QXR0cikpCi0gICAgICAgICAgICBzZXRJbnRyaW5zaWNTaXpl
KEludFNpemUodmlkZW8tPndpZHRoKCksIHZpZGVvLT5oZWlnaHQoKSkpOwotICAgICAgICBlbHNl
IGlmICh2aWRlby0+b3duZXJEb2N1bWVudCgpICYmIHZpZGVvLT5vd25lckRvY3VtZW50KCktPmlz
TWVkaWFEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAvLyBWaWRlbyBpbiBzdGFuZGFsb25lIG1l
ZGlhIGRvY3VtZW50cyBzaG91bGQgbm90IHVzZSB0aGUgZGVmYXVsdCAzMDB4MTUwCi0gICAgICAg
ICAgICAvLyBzaXplIHNpbmNlIHRoZXkgYWxzbyBoYXZlIGF1ZGlvIHRocm93biBhdCB0aGVtLiBC
eSBzZXR0aW5nIHRoZSBpbnRyaW5zaWMKLSAgICAgICAgICAgIC8vIHNpemUgdG8gMzAweDEgdGhl
IHZpZGVvIHdpbGwgcmVzaXplIGl0c2VsZiBpbiB0aGVzZSBjYXNlcywgYW5kIGF1ZGlvIHdpbGwK
LSAgICAgICAgICAgIC8vIGhhdmUgdGhlIGNvcnJlY3QgaGVpZ2h0IChpdCBuZWVkcyB0byBiZSA+
IDAgZm9yIGNvbnRyb2xzIHRvIHJlbmRlciBwcm9wZXJseSkuCi0gICAgICAgICAgICBzZXRJbnRy
aW5zaWNTaXplKEludFNpemUoZGVmYXVsdFNpemUoKS53aWR0aCgpLCAxKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0SW50cmluc2ljU2l6ZShkZWZhdWx0U2l6ZSgp
KTsKLSAgICB9CisgICAgc2V0SW50cmluc2ljU2l6ZShjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCkp
OwogfQogCiBSZW5kZXJWaWRlbzo6flJlbmRlclZpZGVvKCkKQEAgLTkyLDI0ICs3NCw2MCBAQCB2
b2lkIFJlbmRlclZpZGVvOjppbnRyaW5zaWNTaXplQ2hhbmdlZCgpCiB7CiAgICAgaWYgKHZpZGVv
RWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKSkKICAgICAgICAgUmVuZGVyTWVk
aWE6OmludHJpbnNpY1NpemVDaGFuZ2VkKCk7Ci0gICAgdmlkZW9TaXplQ2hhbmdlZCgpOyAKKyAg
ICB1cGRhdGVJbnRyaW5zaWNTaXplKCk7IAogfQogCi0KLXZvaWQgUmVuZGVyVmlkZW86OnZpZGVv
U2l6ZUNoYW5nZWQoKQordm9pZCBSZW5kZXJWaWRlbzo6dXBkYXRlSW50cmluc2ljU2l6ZSgpCiB7
Ci0gICAgaWYgKCFwbGF5ZXIoKSkKKyAgICBJbnRTaXplIHNpemUgPSBjYWxjdWxhdGVJbnRyaW5z
aWNTaXplKCk7CisgICAgc2l6ZS5zY2FsZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworCisg
ICAgLy8gTmV2ZXIgc2V0IHRoZSBlbGVtZW50IHNpemUgdG8gemVybyB3aGVuIGluIGEgbWVkaWEg
ZG9jdW1lbnQuCisgICAgaWYgKHNpemUuaXNFbXB0eSgpICYmIG5vZGUoKS0+b3duZXJEb2N1bWVu
dCgpICYmIG5vZGUoKS0+b3duZXJEb2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIEludFNpemUgc2l6ZSA9IHBsYXllcigpLT5uYXR1cmFsU2l6ZSgpOwot
ICAgIGlmIChzaXplLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobm9kZSgpLT5vd25lckRvY3Vt
ZW50KCkgJiYgbm9kZSgpLT5vd25lckRvY3VtZW50KCktPmlzTWVkaWFEb2N1bWVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2l6ZSAhPSBpbnRyaW5zaWNTaXplKCkp
IHsKLSAgICAgICAgc2V0SW50cmluc2ljU2l6ZShzaXplKTsKLSAgICAgICAgc2V0UHJlZldpZHRo
c0RpcnR5KHRydWUpOwotICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICB9CisKKyAg
ICBpZiAoc2l6ZSA9PSBpbnRyaW5zaWNTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dEludHJpbnNpY1NpemUoc2l6ZSk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUpOworICAg
IHNldE5lZWRzTGF5b3V0KHRydWUpOworfQorICAgIAorSW50U2l6ZSBSZW5kZXJWaWRlbzo6Y2Fs
Y3VsYXRlSW50cmluc2ljU2l6ZSgpCit7CisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8gPSB2
aWRlb0VsZW1lbnQoKTsKKyAgICAKKyAgICAvLyBTcGVjIHRleHQgZnJvbSA0LjguNgorICAgIC8v
CisgICAgLy8gVGhlIGludHJpbnNpYyB3aWR0aCBvZiBhIHZpZGVvIGVsZW1lbnQncyBwbGF5YmFj
ayBhcmVhIGlzIHRoZSBpbnRyaW5zaWMgd2lkdGggCisgICAgLy8gb2YgdGhlIHZpZGVvIHJlc291
cmNlLCBpZiB0aGF0IGlzIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlzIHRoZSBpbnRyaW5zaWMg
CisgICAgLy8gd2lkdGggb2YgdGhlIHBvc3RlciBmcmFtZSwgaWYgdGhhdCBpcyBhdmFpbGFibGU7
IG90aGVyd2lzZSBpdCBpcyAzMDAgQ1NTIHBpeGVscy4KKyAgICAvLworICAgIC8vIFRoZSBpbnRy
aW5zaWMgaGVpZ2h0IG9mIGEgdmlkZW8gZWxlbWVudCdzIHBsYXliYWNrIGFyZWEgaXMgdGhlIGlu
dHJpbnNpYyBoZWlnaHQgCisgICAgLy8gb2YgdGhlIHZpZGVvIHJlc291cmNlLCBpZiB0aGF0IGlz
IGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlzIHRoZSBpbnRyaW5zaWMgCisgICAgLy8gaGVpZ2h0
IG9mIHRoZSBwb3N0ZXIgZnJhbWUsIGlmIHRoYXQgaXMgYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQg
aXMgMTUwIENTUyBwaXhlbHMuCisgICAgCisgICAgaWYgKHBsYXllcigpICYmIHZpZGVvLT5yZWFk
eVN0YXRlKCkgPj0gSFRNTFZpZGVvRWxlbWVudDo6SEFWRV9NRVRBREFUQSkKKyAgICAgICAgcmV0
dXJuIHBsYXllcigpLT5uYXR1cmFsU2l6ZSgpOworCisgICAgaWYgKHZpZGVvLT5zaG91bGREaXNw
bGF5UG9zdGVySW1hZ2UoKSAmJiAhbV9jYWNoZWRJbWFnZVNpemUuaXNFbXB0eSgpICYmICFlcnJv
ck9jY3VycmVkKCkpICAKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2VTaXplOworCisgICAg
Ly8gV2hlbiB0aGUgbmF0dXJhbCBzaXplIG9mIHRoZSB2aWRlbyBpcyB1bmF2YWlsYWJsZSwgd2Ug
dXNlIHRoZSBwcm92aWRlZAorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcyBvZiB0
aGUgdmlkZW8gZWxlbWVudCBhcyB0aGUgaW50cmluc2ljIHNpemUgdW50aWwKKyAgICAvLyBiZXR0
ZXIgdmFsdWVzIGJlY29tZSBhdmFpbGFibGUuIAorICAgIGlmICh2aWRlby0+aGFzQXR0cmlidXRl
KHdpZHRoQXR0cikgJiYgdmlkZW8tPmhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkKKyAgICAgICAg
cmV0dXJuIEludFNpemUodmlkZW8tPndpZHRoKCksIHZpZGVvLT5oZWlnaHQoKSk7CisKKyAgICAv
LyA8dmlkZW8+IGluIHN0YW5kYWxvbmUgbWVkaWEgZG9jdW1lbnRzIHNob3VsZCBub3QgdXNlIHRo
ZSBkZWZhdWx0IDMwMHgxNTAKKyAgICAvLyBzaXplIHNpbmNlIHRoZXkgYWxzbyBoYXZlIGF1ZGlv
LW9ubHkgZmlsZXMuIEJ5IHNldHRpbmcgdGhlIGludHJpbnNpYworICAgIC8vIHNpemUgdG8gMzAw
eDEgdGhlIHZpZGVvIHdpbGwgcmVzaXplIGl0c2VsZiBpbiB0aGVzZSBjYXNlcywgYW5kIGF1ZGlv
IHdpbGwKKyAgICAvLyBoYXZlIHRoZSBjb3JyZWN0IGhlaWdodCAoaXQgbmVlZHMgdG8gYmUgPiAw
IGZvciBjb250cm9scyB0byByZW5kZXIgcHJvcGVybHkpLgorICAgIGlmICh2aWRlby0+b3duZXJE
b2N1bWVudCgpICYmIHZpZGVvLT5vd25lckRvY3VtZW50KCktPmlzTWVkaWFEb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gSW50U2l6ZShkZWZhdWx0U2l6ZSgpLndpZHRoKCksIDEpOworCisgICAg
cmV0dXJuIGRlZmF1bHRTaXplKCk7CiB9CiAKIHZvaWQgUmVuZGVyVmlkZW86OmltYWdlQ2hhbmdl
ZChXcmFwcGVkSW1hZ2VQdHIgbmV3SW1hZ2UsIGNvbnN0IEludFJlY3QqIHJlY3QpCkBAIC0xMTcs
MTAgKzEzNSwxNCBAQCB2b2lkIFJlbmRlclZpZGVvOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdl
UHRyIG5ld0ltYWdlLCBjb25zdCBJbnRSZWN0KiByZWN0KQogICAgIFJlbmRlck1lZGlhOjppbWFn
ZUNoYW5nZWQobmV3SW1hZ2UsIHJlY3QpOwogCiAgICAgLy8gQ2FjaGUgdGhlIGltYWdlIGludHJp
bnNpYyBzaXplIHNvIHdlIGNhbiBjb250aW51ZSB0byB1c2UgaXQgdG8gZHJhdyB0aGUgaW1hZ2Ug
Y29ycmVjdGx5Ci0gICAgLy8gZXZlbiBhZnRlciB3ZSBrbm93IHRoZSB2aWRlbyBpbnRyaXNpYyBz
aXplIGJ1dCBhcmVuJ3QgYWJsZSB0byBkcmF3IHZpZGVvIGZyYW1lcyB5ZXQKLSAgICAvLyAod2Ug
ZG9uJ3Qgd2FudCB0byBzY2FsZSB0aGUgcG9zdGVyIHRvIHRoZSB2aWRlbyBzaXplKS4KKyAgICAv
LyBldmVuIGlmIHdlIGtub3cgdGhlIHZpZGVvIGludHJpbnNpYyBzaXplIGJ1dCBhcmVuJ3QgYWJs
ZSB0byBkcmF3IHZpZGVvIGZyYW1lcyB5ZXQKKyAgICAvLyAod2UgZG9uJ3Qgd2FudCB0byBzY2Fs
ZSB0aGUgcG9zdGVyIHRvIHRoZSB2aWRlbyBzaXplIHdpdGhvdXQga2VlcGluZyBhc3BlY3QgcmF0
aW8pLgogICAgIGlmICh2aWRlb0VsZW1lbnQoKS0+c2hvdWxkRGlzcGxheVBvc3RlckltYWdlKCkp
CiAgICAgICAgIG1fY2FjaGVkSW1hZ2VTaXplID0gaW50cmluc2ljU2l6ZSgpOworCisgICAgLy8g
VGhlIGludHJpbnNpYyBzaXplIGlzIG5vdyB0aGF0IG9mIHRoZSBpbWFnZSwgYnV0IGluIGNhc2Ug
d2UgYWxyZWFkeSBoYWQgdGhlCisgICAgLy8gaW50cmluc2ljIHNpemUgb2YgdGhlIHZpZGVvIHdl
IGNhbGwgdGhpcyBoZXJlIHRvIHJlc3RvcmUgdGhlIHZpZGVvIHNpemUuCisgICAgdXBkYXRlSW50
cmluc2ljU2l6ZSgpOwogfQogCiBJbnRSZWN0IFJlbmRlclZpZGVvOjp2aWRlb0JveCgpIGNvbnN0
CkBAIC0xNTYsNiArMTc4LDExIEBAIEludFJlY3QgUmVuZGVyVmlkZW86OnZpZGVvQm94KCkgY29u
c3QKICAgICByZXR1cm4gcmVuZGVyQm94OwogfQogICAgIAorYm9vbCBSZW5kZXJWaWRlbzo6c2hv
dWxkRGlzcGxheVZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXZpZGVvRWxlbWVudCgpLT5z
aG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKK30KKwogdm9pZCBSZW5kZXJWaWRlbzo6cGFpbnRS
ZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgTWVk
aWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7CkBAIC0yMDAsNiArMjI3LDggQEAgdm9p
ZCBSZW5kZXJWaWRlbzo6dXBkYXRlRnJvbUVsZW1lbnQoKQogCiB2b2lkIFJlbmRlclZpZGVvOjp1
cGRhdGVQbGF5ZXIoKQogeworICAgIHVwZGF0ZUludHJpbnNpY1NpemUoKTsKKwogICAgIE1lZGlh
UGxheWVyKiBtZWRpYVBsYXllciA9IHBsYXllcigpOwogICAgIGlmICghbWVkaWFQbGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVv
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCmluZGV4IGJiMmIwNWMuLjJhMzlj
MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaApAQCAtNDAsNyArNDAsNiBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyVmlkZW8oSFRNTFZpZGVvRWxlbWVudCopOwogICAgIHZpcnR1YWwgflJlbmRlclZp
ZGVvKCk7CiAKLSAgICB2b2lkIHZpZGVvU2l6ZUNoYW5nZWQoKTsKICAgICBJbnRSZWN0IHZpZGVv
Qm94KCkgY29uc3Q7CiAKICAgICBzdGF0aWMgSW50U2l6ZSBkZWZhdWx0U2l6ZSgpOwpAQCAtNTAs
MTEgKzQ5LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVD
aGFuZ2VkKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGREaXNwbGF5VmlkZW8o
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQo
KTsKICAgICBpbmxpbmUgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljU2l6ZUNoYW5nZWQoKTsKKyAgICBJbnRTaXplIGNh
bGN1bGF0ZUludHJpbnNpY1NpemUoKTsKKyAgICB2b2lkIHVwZGF0ZUludHJpbnNpY1NpemUoKTsK
KwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJ
bnRSZWN0Kik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7
IHJldHVybiAiUmVuZGVyVmlkZW8iOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oIGIvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4u
aAppbmRleCAyY2VhYWMxLi5mYjZhZDAyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1
Z2luLmgKQEAgLTI4LDYgKzI4LDkgQEAKIAogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVkZSA8
UVVybD4KKyNpZiBkZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVfUVRfTVVM
VElNRURJQQorI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBRV2ViU2Vs
ZWN0RGF0YQogewpAQCAtMTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0
ID0gMDsKIH07CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVf
UVRfTVVMVElNRURJQQorY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMg
UU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVv
SGFuZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7
fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkg
Y29uc3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsc2NyZWVuQ2xvc2VkKCk7CisK
K3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlh
UGxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpID0gMDsKK307
CisjZW5kaWYKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0x
MjQsMTMgKzE0NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKICAg
ICAgICAgTm90aWZpY2F0aW9ucywKICAgICAgICAgSGFwdGljcywKLSAgICAgICAgVG91Y2hJbnRl
cmFjdGlvbgorICAgICAgICBUb3VjaEludGVyYWN0aW9uLAorICAgICAgICBGdWxsU2NyZWVuVmlk
ZW9QbGF5ZXIKICAgICB9OwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4
dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0
ZUV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CiB9OwogCi1RX0RFQ0xB
UkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQu
UGxhdGZvcm1QbHVnaW4vMS42Iik7CitRX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CiAKICNl
bmRpZiAvLyBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggNDZjYmNiMi4uNmVlNmM5OSAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCkBAIC02OSwxMSArNjksMjIgQEAK
ICNpbmNsdWRlIDxxdGV4dGRvY3VtZW50Lmg+CiAjaW5jbHVkZSA8cXRvb2x0aXAuaD4KIAorI2lm
IEVOQUJMRShWSURFTykgJiYgRU5BQkxFKFFUX01VTFRJTUVESUEpCisjaW5jbHVkZSAiRnVsbFNj
cmVlblZpZGVvUXQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiIAorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVRdC5oIgorI2VuZGlmIAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IENocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRRdChRV2ViUGFnZSogd2ViUGFnZSkKICAgICA6
IG1fd2ViUGFnZSh3ZWJQYWdlKQogICAgICwgbV9ldmVudExvb3AoMCkKKyNpZiBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShRVF9NVUxUSU1FRElBKQorICAgICwgbV9mdWxsU2NyZWVuVmlkZW8oMCkK
KyNlbmRpZgogewogICAgIHRvb2xCYXJzVmlzaWJsZSA9IHN0YXR1c0JhclZpc2libGUgPSBtZW51
QmFyVmlzaWJsZSA9IHRydWU7CiB9CkBAIC04Miw2ICs5MywxMCBAQCBDaHJvbWVDbGllbnRRdDo6
fkNocm9tZUNsaWVudFF0KCkKIHsKICAgICBpZiAobV9ldmVudExvb3ApCiAgICAgICAgIG1fZXZl
bnRMb29wLT5leGl0KCk7CisKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShRVF9NVUxUSU1F
RElBKQorICAgIGRlbGV0ZSBtX2Z1bGxTY3JlZW5WaWRlbzsKKyNlbmRpZgogfQogCiB2b2lkIENo
cm9tZUNsaWVudFF0OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTU5
OSw2ICs2MTQsNTQgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6dmlzaWJsZVJlY3RGb3JUaWxl
ZEJhY2tpbmdTdG9yZSgpIGNvbnN0CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykgJiYg
RU5BQkxFKFFUX01VTFRJTUVESUEpCitGdWxsU2NyZWVuVmlkZW9RdCogQ2hyb21lQ2xpZW50UXQ6
OmZ1bGxTY3JlZW5WaWRlbygpCit7CisgICAgaWYgKCFtX2Z1bGxTY3JlZW5WaWRlbykKKyAgICAg
ICAgbV9mdWxsU2NyZWVuVmlkZW8gPSBuZXcgRnVsbFNjcmVlblZpZGVvUXQodGhpcyk7CisgICAg
cmV0dXJuIG1fZnVsbFNjcmVlblZpZGVvOworfQorCitib29sIENocm9tZUNsaWVudFF0OjpzdXBw
b3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5v
ZGUpOworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYm
IGZ1bGxTY3JlZW5WaWRlbygpLT5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50UXQ6
OnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKQoreworICAgIHJldHVybiBmdWxs
U2NyZWVuVmlkZW8oKS0+cmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOworfQor
Cit2b2lkIENocm9tZUNsaWVudFF0OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUp
Cit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVv
VGFnKSk7CisKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MVmlkZW9FbGVtZW50Kj4obm9kZSk7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1l
ZGlhID0gdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCk7CisKKyAgICBBU1NFUlQocGxhdGZv
cm1NZWRpYS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBlKTsKKyAgICBp
ZiAocGxhdGZvcm1NZWRpYS50eXBlICE9IFBsYXRmb3JtTWVkaWE6OlF0TWVkaWFQbGF5ZXJUeXBl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZnVsbFNjcmVlblZpZGVvKCktPmVudGVyRnVs
bFNjcmVlbkZvck5vZGUobm9kZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmV4aXRGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpOworCisgICAgSFRNTFZpZGVvRWxlbWVudCog
dmlkZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFZpZGVvRWxlbWVudCo+KG5vZGUpOworICAg
IFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSA9IHZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRp
YSgpOworCisgICAgQVNTRVJUKHBsYXRmb3JtTWVkaWEudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpR
dE1lZGlhUGxheWVyVHlwZSk7CisgICAgaWYgKHBsYXRmb3JtTWVkaWEudHlwZSAhPSBQbGF0Zm9y
bU1lZGlhOjpRdE1lZGlhUGxheWVyVHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnVsbFNj
cmVlblZpZGVvKCktPmV4aXRGdWxsU2NyZWVuRm9yTm9kZShub2RlKTsKK30gCisjZW5kaWYKKwog
UXRBYnN0cmFjdFdlYlBvcHVwKiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlU2VsZWN0UG9wdXAoKQog
ewogICAgIFF0QWJzdHJhY3RXZWJQb3B1cCogcmVzdWx0ID0gbV9wbGF0Zm9ybVBsdWdpbi5jcmVh
dGVTZWxlY3RJbnB1dE1ldGhvZCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmggYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuaAppbmRleCAzNmIwODg3Li42NmNjNmZlIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuaApAQCAtNDksNiArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiAgICAgY2xhc3MgUXRBYnN0cmFjdFdlYlBv
cHVwOwogICAgIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50czsKKyAgICBjbGFzcyBGdWxsU2NyZWVu
VmlkZW9RdDsKIAogICAgIGNsYXNzIENocm9tZUNsaWVudFF0IDogcHVibGljIENocm9tZUNsaWVu
dAogICAgIHsKQEAgLTE1Niw2ICsxNTcsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRzKGJvb2wpIHsgfQogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoVklERU8pICYmIEVOQUJMRShRVF9NVUxUSU1FRElBKQorICAgICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7CisgICAgICAgIEZ1bGxTY3JlZW5W
aWRlb1F0KiBmdWxsU2NyZWVuVmlkZW8oKTsKKyNlbmRpZgorCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBG
aWxlQ2hvb3NlciopOwogCkBAIC0xODMsNiArMTkyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIHN0YXR1c0JhclZpc2libGU7CiAgICAgICAgIGJvb2wgbWVudUJhclZpc2li
bGU7CiAgICAgICAgIFFFdmVudExvb3AqIG1fZXZlbnRMb29wOworI2lmIEVOQUJMRShWSURFTykg
JiYgRU5BQkxFKFFUX01VTFRJTUVESUEpCisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1F0KiBtX2Z1
bGxTY3JlZW5WaWRlbzsKKyNlbmRpZgogCiAgICAgICAgIFF0UGxhdGZvcm1QbHVnaW4gbV9wbGF0
Zm9ybVBsdWdpbjsKICAgICB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1F0UGxhdGZvcm1QbHVnaW4uY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZv
cm1QbHVnaW4uY3BwCmluZGV4IGUyNTVhYWEuLjk3ZjQ4ZTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAorKysgYi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKQEAgLTE4Myw1ICsxODMsMTIgQEAgUVdl
YlRvdWNoTW9kaWZpZXIqIFF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZVRvdWNoTW9kaWZpZXIoKQog
ICAgIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiogcCA9IHBsdWdpbigpOwogICAgIHJldHVybiBwID8g
c3RhdGljX2Nhc3Q8UVdlYlRvdWNoTW9kaWZpZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktp
dFBsYXRmb3JtUGx1Z2luOjpUb3VjaEludGVyYWN0aW9uKSkgOiAwOwogfQorI2lmIEVOQUJMRShW
SURFTykgJiYgRU5BQkxFKFFUX01VTFRJTUVESUEpCitRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxl
ciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCit7Cisg
ICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIHAgPyBz
dGF0aWNfY2FzdDxRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcio+KHAtPmNyZWF0ZUV4dGVuc2lv
bihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OkZ1bGxTY3JlZW5WaWRlb1BsYXllcikpIDogMDsKK30K
KyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0
Zm9ybVBsdWdpbi5oIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
aAppbmRleCAyMjYwNzU5Li5kZDg5NzhmIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
dFBsYXRmb3JtUGx1Z2luLmgKQEAgLTMxLDYgKzMxLDkgQEAgY2xhc3MgUVdlYk5vdGlmaWNhdGlv
blByZXNlbnRlcjsKIGNsYXNzIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcjsKIGNsYXNzIFFXZWJT
ZWxlY3REYXRhOwogY2xhc3MgUVdlYlRvdWNoTW9kaWZpZXI7CisjaWYgRU5BQkxFKFZJREVPKSAm
JiBFTkFCTEUoUVRfTVVMVElNRURJQSkKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
OworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNyArNjQsMTAgQEAgcHVi
bGljOgogICAgIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIGNyZWF0ZU5vdGlmaWNhdGlvblBy
ZXNlbnRlcigpOwogICAgIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllciogY3JlYXRlSGFwdGljRmVl
ZGJhY2tQbGF5ZXIoKTsKICAgICBRV2ViVG91Y2hNb2RpZmllciogY3JlYXRlVG91Y2hNb2RpZmll
cigpOwotCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoUVRfTVVMVElNRURJQSkKKyAgICBR
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigp
OworI2VuZGlmCisgCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwbHVnaW4oKTsKIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQ
bHVnaW4uY3BwIGIvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5j
cHAKaW5kZXggZDAyOWI3My4uMzIwMDc5ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L2V4YW1wbGVz
L3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAKKysrIGIvV2ViS2l0L3F0L2V4YW1wbGVzL3Bs
YXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAKQEAgLTE5LDcgKzE5LDkgQEAKICAqLwogI2luY2x1
ZGUgIldlYlBsdWdpbi5oIgogCisjaW5jbHVkZSA8UUV2ZW50PgogI2luY2x1ZGUgPFFIQm94TGF5
b3V0PgorI2luY2x1ZGUgPFFLZXlFdmVudD4KICNpbmNsdWRlIDxRTGlzdFdpZGdldD4KICNpbmNs
dWRlIDxRTGlzdFdpZGdldEl0ZW0+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CkBAIC0yMDgsNiArMjEw
LDcxIEBAIE11bHRpcGxlU2VsZWN0aW9uUG9wdXA6Ok11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29u
c3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCiAgICAgcmVzaXplKHNpemUoKS53aWR0aCgpLCB2aXNp
YmxlSXRlbUNvdW50ICogZ01hZW1vTGlzdEl0ZW1TaXplKTsKIH0KIAorI2lmIGRlZmluZWQoRU5B
QkxFX1FUX01VTFRJTUVESUEpICYmIEVOQUJMRV9RVF9NVUxUSU1FRElBCitGdWxsU2NyZWVuVmlk
ZW9XaWRnZXQ6OkZ1bGxTY3JlZW5WaWRlb1dpZGdldChRTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAg
ICA6IFFWaWRlb1dpZGdldCgpCisgICAgLCBtX21lZGlhUGxheWVyKHBsYXllcikKK3sKKyAgICBR
X0FTU0VSVChtX21lZGlhUGxheWVyKTsKKworICAgIHNldEZ1bGxTY3JlZW4odHJ1ZSk7CisgICAg
bV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQodGhpcyk7Cit9CisKK2Jvb2wgRnVsbFNjcmVl
blZpZGVvV2lkZ2V0OjpldmVudChRRXZlbnQqIGV2KQoreworICAgIGlmIChldi0+dHlwZSgpID09
ICBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2spIHsKKyAgICAgICAgZW1pdCBmdWxsU2NyZWVu
Q2xvc2VkKCk7CisgICAgICAgIGV2LT5hY2NlcHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfSAKKyAgICByZXR1cm4gUVdpZGdldDo6ZXZlbnQoZXYpOworfQorCit2b2lkIEZ1bGxTY3Jl
ZW5WaWRlb1dpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2KQoreworICAgIGlmIChl
di0+a2V5KCkgPT0gUXQ6OktleV9TcGFjZSkgeworICAgICAgICBpZiAobV9tZWRpYVBsYXllci0+
c3RhdGUoKSA9PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgICAgIG1fbWVk
aWFQbGF5ZXItPnBhdXNlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5
ZXItPnBsYXkoKTsKKyAgICAgICAgZXYtPmFjY2VwdCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkK
KyAgICA6IG1fbWVkaWFXaWRnZXQoMCkKK3sKK30KKworRnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6
fkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIGRlbGV0ZSBtX21lZGlhV2lkZ2V0Owor
fQorCitib29sIEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZp
ZGVvUGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqIHBsYXllcikK
K3sKKyAgICBRX0FTU0VSVChwbGF5ZXIpOworCisgICAgbV9tZWRpYVdpZGdldCA9IG5ldyBGdWxs
U2NyZWVuVmlkZW9XaWRnZXQocGxheWVyKTsKKyAgICBjb25uZWN0KG1fbWVkaWFXaWRnZXQsIFNJ
R05BTChmdWxsU2NyZWVuQ2xvc2VkKCkpLCB0aGlzLCBTSUdOQUwoZnVsbFNjcmVlbkNsb3NlZCgp
KSk7CisgICAgbV9tZWRpYVdpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNjcmVlbigpCit7CisgICAgbV9tZWRpYVdpZGdl
dC0+aGlkZSgpOworICAgIGRlbGV0ZSBtX21lZGlhV2lkZ2V0OworICAgIG1fbWVkaWFXaWRnZXQg
PSAwOworfQorI2VuZGlmCisKIGJvb2wgV2ViUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRl
bnNpb24gZXh0ZW5zaW9uKSBjb25zdAogewogICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CkBAIC0y
MTksNiArMjg2LDEwIEBAIGJvb2wgV2ViUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNp
b24gZXh0ZW5zaW9uKSBjb25zdAogI2VuZGlmCiAgICAgY2FzZSBUb3VjaEludGVyYWN0aW9uOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAm
JiBFTkFCTEVfUVRfTVVMVElNRURJQQorICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC0yMzUsNiArMzA2LDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6
Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0CiAjZW5kaWYKICAgICBj
YXNlIFRvdWNoSW50ZXJhY3Rpb246CiAgICAgICAgIHJldHVybiBuZXcgVG91Y2hNb2RpZmllcigp
OworI2lmIGRlZmluZWQoRU5BQkxFX1FUX01VTFRJTUVESUEpICYmIEVOQUJMRV9RVF9NVUxUSU1F
RElBCisgICAgY2FzZSBGdWxsU2NyZWVuVmlkZW9QbGF5ZXI6CisgICAgICAgIHJldHVybiBuZXcg
RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3Jt
cGx1Z2luL1dlYlBsdWdpbi5oIGIvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dl
YlBsdWdpbi5oCmluZGV4IDAyNDNmNTcuLjQ5OTQ2NjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9l
eGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAorKysgYi9XZWJLaXQvcXQvZXhhbXBs
ZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRl
ICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKIAogI2luY2x1ZGUgPFFEaWFsb2c+CisjaWYg
ZGVmaW5lZChFTkFCTEVfUVRfTVVMVElNRURJQSkgJiYgRU5BQkxFX1FUX01VTFRJTUVESUEKKyNp
bmNsdWRlIDxRVmlkZW9XaWRnZXQ+CisjZW5kaWYKIAogY2xhc3MgUUxpc3RXaWRnZXRJdGVtOwog
Y2xhc3MgUUxpc3RXaWRnZXQ7CkBAIC05NCw2ICs5Nyw0MCBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAorI2lmIGRlZmluZWQoRU5BQkxFX1FUX01VTFRJTUVESUEpICYmIEVOQUJMRV9RVF9NVUxUSU1F
RElBCitjbGFzcyBGdWxsU2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsK
KyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEZ1bGxTY3JlZW5WaWRlb1dpZGdldChRTWVkaWFQ
bGF5ZXIqKTsKKyAgICB2aXJ0dWFsIH5GdWxsU2NyZWVuVmlkZW9XaWRnZXQoKSB7fQorCitRX1NJ
R05BTFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisKK3Byb3RlY3RlZDoKKyAgICBi
b29sIGV2ZW50KFFFdmVudCopOworICAgIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsK
KworcHJpdmF0ZToKKyAgICBRTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7IC8vIG5vdCBvd25l
ZAorfTsKKworY2xhc3MgRnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyKCk7CisgICAgdmlydHVhbCB+RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwor
ICAgIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0OworCitw
dWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIGVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKTsK
KyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisKK3ByaXZhdGU6CisgICAgRnVsbFNjcmVlblZp
ZGVvV2lkZ2V0KiBtX21lZGlhV2lkZ2V0OyAvLyBvd25lZAorfTsKKyNlbmRpZgorCiBjbGFzcyBX
ZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgog
ewogICAgIFFfT0JKRUNUCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvIGIvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1
Z2luL3BsYXRmb3JtcGx1Z2luLnBybwppbmRleCA5Mjc1NjY1Li5hZDQ4MTJjIDEwMDY0NAotLS0g
YS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCisr
KyBiL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8K
QEAgLTMsNiArMywyMSBAQCBUQVJHRVQgPSAkJHF0TGlicmFyeVRhcmdldChwbGF0Zm9ybXBsdWdp
bikKIFRFTVBMQVRFID0gbGliCiBDT05GSUcgKz0gcGx1Z2luCiAKKyMjIGxvYWQgbW9iaWxpdHlj
b25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxhYmxlCitsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVl
KQorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2UgcmVxdWlyZSBRdE11bHRpbWVkaWEKKyFj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89LikgeworICAgIGNvbnRhaW5zKE1PQklMSVRZ
X0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICBDT05GSUcgKz0gbW9iaWxpdHkKKyAgICAg
ICAgTU9CSUxJVFkgKz0gbXVsdGltZWRpYQorICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURF
Tz0wCisgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTEKKyAgICAgICAgREVGSU5FUyAt
PSBFTkFCTEVfUVRfTVVMVElNRURJQT0wCisgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1FUX01V
TFRJTUVESUE9MQorICAgIH0KK30KIERFU1RESVIgPSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNdL3dl
YmtpdAogCiBTT1VSQ0VTICs9IFwKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0
Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCBiL1dlYktpdC9xdC9leGFtcGxlcy9w
bGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAppbmRleCBmMzhhOGZiLi4xMjQ1
MDJmIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgKKysrIGIvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2lu
L3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpbmNsdWRlIDxR
T2JqZWN0PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVMVElNRURJ
QSkgJiYgRU5BQkxFX1FUX01VTFRJTUVESUEKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5k
aWYKIAogY2xhc3MgUVdlYlNlbGVjdERhdGEKIHsKQEAgLTExMSw2ICsxMTQsMjMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRk
aW5nRGlyZWN0aW9uKSBjb25zdCA9IDA7CiB9OwogCisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVM
VElNRURJQSkgJiYgRU5BQkxFX1FUX01VTFRJTUVESUEKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVu
Rm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVs
bFNjcmVlbkNsb3NlZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50
ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxTY3JlZW4oKSA9IDA7Cit9OworI2VuZGlmCisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdp
bgogewogcHVibGljOgpAQCAtMTIwLDEzICsxNDAsMTQgQEAgcHVibGljOgogICAgICAgICBNdWx0
aXBsZVNlbGVjdGlvbnMsCiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3Ms
Ci0gICAgICAgIFRvdWNoSW50ZXJhY3Rpb24KKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAg
ICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBRT2JqZWN0KiBjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Qg
PSAwOwogfTsKIAotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJj
b20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNiIpOworUV9ERUNMQVJFX0lOVEVS
RkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3Jt
UGx1Z2luLzEuNyIpOwogCiAjZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79756</attachid>
            <date>2011-01-21 10:03:45 -0800</date>
            <delta_ts>2011-01-21 10:03:45 -0800</delta_ts>
            <desc>backport patch for the test branch</desc>
            <filename>backport.patch</filename>
            <type>text/plain</type>
            <size>12381</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmlu
ZGV4IGI4NGE1MjAuLmFlZmYwOGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMTY1LDkgKzE2NSwxMyBAQCBjb250YWlucyhNT0JJ
TElUWV9DT05GSUcsIHNlbnNvcnMpIHsKICAgICAhbGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwg
Nik6Y29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBtdWx0aW1lZGlhKSB7CiAgICAgICAgIERFRklO
RVMgLT0gRU5BQkxFX1ZJREVPPTAKICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MQor
ICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9RVF9NVUxUSU1FRElBPTAKKyAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfUVRfTVVMVElNRURJQT0xCiAgICAgfSBlbHNlOmNvbnRhaW5zKFFUX0NPTkZJ
RywgcGhvbm9uKSB7CiAgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTAKICAgICAgICAg
REVGSU5FUyArPSBFTkFCTEVfVklERU89MQorICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9RVF9N
VUxUSU1FRElBPTEKKyAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfUVRfTVVMVElNRURJQT0wCiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBhNGJmNzlhLi5mNDUzZDBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTI1NzIsOCArMjU3MiwxMyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewogICAgICAgICBiaW5kaW5ncy9qcy9K
U0F1ZGlvQ29uc3RydWN0b3IuY3BwCiAKICAgICAgICAgIWxlc3NUaGFuKFFUX01JTk9SX1ZFUlNJ
T04sIDYpOmNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgewotICAgICAgICAg
ICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
Ci0gICAgICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVy
UHJpdmF0ZVF0LmNwcAorICAgICAgICAgICAgSEVBREVSUyArPSBcIAorICAgICAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggXAorICAgICAgICAg
ICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9R
dC5oCisKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBcCisgICAgICAgICAgICAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcAog
CiAgICAgICAgICAgICBDT05GSUcgKj0gbW9iaWxpdHkKICAgICAgICAgICAgIE1PQklMSVRZICs9
IG11bHRpbWVkaWEKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBlNzNiOTBlLi40ZWJk
ZGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik1lZGlhRG9jdW1lbnQuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCiAjaW5jbHVkZSAiTWVk
aWFMaXN0LmgiCkBAIC0xODExLDEwICsxODEyLDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
dXBkYXRlUGxheVN0YXRlKCkKIAogICAgIGlmIChzaG91bGRCZVBsYXlpbmcpIHsKICAgICAgICAg
c2V0RGlzcGxheU1vZGUoVmlkZW8pOwotICAgICAgICBpZiAoIW1faXNGdWxsc2NyZWVuICYmIGlz
VmlkZW8oKSAmJiBkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSAmJiBkb2N1bWVudCgp
LT5wYWdlKCktPmNocm9tZSgpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkp
Ci0gICAgICAgICAgICBlbnRlckZ1bGxzY3JlZW4oKTsKIAogICAgICAgICBpZiAocGxheWVyUGF1
c2VkKSB7CisgICAgICAgICAgICBpZiAoIW1faXNGdWxsc2NyZWVuICYmIGlzVmlkZW8oKSAmJiBk
b2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPmNo
cm9tZSgpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAgICAgICAg
ICAgICAgZW50ZXJGdWxsc2NyZWVuKCk7CisKICAgICAgICAgICAgIC8vIFNldCByYXRlIGJlZm9y
ZSBjYWxsaW5nIHBsYXkgaW4gY2FzZSB0aGUgcmF0ZSB3YXMgc2V0IGJlZm9yZSB0aGUgbWVkaWEg
ZW5naW5lIHdhcyBzZXR1cC4KICAgICAgICAgICAgIC8vIFRoZSBtZWRpYSBlbmdpbmUgc2hvdWxk
IGp1c3Qgc3Rhc2ggdGhlIHJhdGUgc2luY2UgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLgogICAg
ICAgICAgICAgbV9wbGF5ZXItPnNldFJhdGUobV9wbGF5YmFja1JhdGUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAppbmRl
eCBiYTllMDE2Li4yYzU2MjE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIE1lZGlh
UGxheWVyUHJpdmF0ZVF0OjpNZWRpYVBsYXllclByaXZhdGVRdChNZWRpYVBsYXllciogcGxheWVy
KQogICAgICwgbV9xdWV1ZWRTZWVrKC0xKQogICAgICwgbV9wcmVsb2FkKE1lZGlhUGxheWVyOjpB
dXRvKQogewotICAgIG1fbWVkaWFQbGF5ZXItPmJpbmQobV92aWRlb0l0ZW0pOworICAgIG1fbWVk
aWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9JdGVtKTsKICAgICBtX3ZpZGVvU2NlbmUt
PmFkZEl0ZW0obV92aWRlb0l0ZW0pOwogCiAgICAgLy8gU2lnbmFsIEhhbmRsZXJzCkBAIC01ODAs
NiArNTgwLDIyIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6Om5hdHVyYWxTaXplKCkg
Y29uc3QKICAgICByZXR1cm4gbV9uYXR1cmFsU2l6ZTsKIH0KIAordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRdDo6cmVtb3ZlVmlkZW9JdGVtKCkKK3sKKyAgICBtX29sZE5hdHVyYWxTaXplID0gbV9u
YXR1cmFsU2l6ZTsKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWaWRlb091dHB1dChzdGF0aWNfY2Fz
dDxRR3JhcGhpY3NWaWRlb0l0ZW0qPigwKSk7CisgICAgbV92aWRlb1NjZW5lLT5yZW1vdmVJdGVt
KG1fdmlkZW9JdGVtKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cmVzdG9yZVZp
ZGVvSXRlbSgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92aWRlb0l0
ZW0pOworICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7CisgICAgLy8gRklY
TUU6IGEgcXRtb2JpbGl0eSBidWcsIG5lZWQgdG8gcmVzZXQgdGhlIHNpemUgd2hlbiByZXN0b3Jl
IHRoZSB2aWRlb2l0ZW0sIG90aGVyd2lzZSB0aGUgc2l6ZSBpcyAwCisgICAgLy8gaHR0cDovL2J1
Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVE1PQklMSVRZLTk3MQorICAgIG5hdGl2ZVNp
emVDaGFuZ2VkKFFTaXplKG1fb2xkTmF0dXJhbFNpemUpKTsKK30KKwogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVRdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAppbmRleCBi
YTg1ZjhmLi42ZTcxYzAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9NZWRpYVBsYXllclByaXZhdGVRdC5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9v
bCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
c3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIC8vIHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVuZGVy
aW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgbWVkaWEgZW5naW5lIGZvciB0aGUgY3VycmVudCBtZWRp
YS4KQEAgLTEwMCw2ICsxMDAsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIFBs
YXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworCisgICAgUU1lZGlhUGxheWVyKiBt
ZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXI7IH0KKyAgICB2b2lkIHJl
bW92ZVZpZGVvSXRlbSgpOworICAgIHZvaWQgcmVzdG9yZVZpZGVvSXRlbSgpOwogcHJpdmF0ZSBz
bG90czoKICAgICB2b2lkIG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3Rh
dHVzKTsKICAgICB2b2lkIGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpOwpAQCAtMTMx
LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAKICAgICBJbnRTaXplIG1fY3VycmVudFNpemU7CiAgICAg
SW50U2l6ZSBtX25hdHVyYWxTaXplOworICAgIEludFNpemUgbV9vbGROYXR1cmFsU2l6ZTsKICAg
ICBib29sIG1faXNWaXNpYmxlOwogICAgIGJvb2wgbV9pc1NlZWtpbmc7CiAgICAgYm9vbCBtX2Nv
bXBvc2l0ZWQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oIGIvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAppbmRleCAyY2VhYWMx
Li5mZjEwZTYzIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgKQEAgLTI4LDYg
KzI4LDkgQEAKIAogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVkZSA8UVVybD4KKyNpZiBkZWZp
bmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVfUVRfTVVMVElNRURJQQorI2luY2x1
ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgogCiBjbGFzcyBRV2ViU2VsZWN0RGF0YQogewpAQCAt
MTE1LDYgKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFk
ZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRpbmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKIH07CiAKKyNp
ZiBkZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFCTEVfUVRfTVVMVElNRURJQQor
Y2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAg
UV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpIHt9Cisg
ICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwg
Ym9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgPSAwOworCitR
X1NJR05BTFM6CisgICAgdm9pZCBmdWxsU2NyZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBRX1NMT1RT
OgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpID0gMDsKK307CisjZW5kaWYKKwogY2xh
c3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCiB7CiBwdWJsaWM6CkBAIC0xMjQsMTMgKzE0NCwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKICAgICAgICAgTm90aWZpY2F0
aW9ucywKICAgICAgICAgSGFwdGljcywKLSAgICAgICAgVG91Y2hJbnRlcmFjdGlvbgorICAgICAg
ICBUb3VjaEludGVyYWN0aW9uLAorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIsCiAgICAg
fTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5z
aW9uKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBRT2JqZWN0KiBjcmVhdGVFeHRlbnNpb24oRXh0
ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOwogfTsKIAotUV9ERUNMQVJFX0lOVEVSRkFDRShR
V2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2lu
LzEuNiIpOworUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1QbHVnaW4sICJjb20u
bm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOwogCiAjZW5kaWYgLy8gUVdFQktJ
VFBMQVRGT1JNUExVR0lOX0gKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCmluZGV4IDQ2Y2JjYjIuLjdmMmFiMDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcApAQCAtNjksMTEgKzY5LDIyIEBACiAjaW5jbHVkZSA8cXRl
eHRkb2N1bWVudC5oPgogI2luY2x1ZGUgPHF0b29sdGlwLmg+CiAKKyNpZiBFTkFCTEUoVklERU8p
ICYmIEVOQUJMRShRVF9NVUxUSU1FRElBKQorI2luY2x1ZGUgIkZ1bGxTY3JlZW5WaWRlb1F0Lmgi
CisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVRdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2hyb21lQ2xpZW50UXQ6
OkNocm9tZUNsaWVudFF0KFFXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBh
Z2UpCiAgICAgLCBtX2V2ZW50TG9vcCgwKQorI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKFFU
X01VTFRJTUVESUEpCisgICAgLCBtX2Z1bGxTY3JlZW5WaWRlbygwKQorI2VuZGlmCiB7CiAgICAg
dG9vbEJhcnNWaXNpYmxlID0gc3RhdHVzQmFyVmlzaWJsZSA9IG1lbnVCYXJWaXNpYmxlID0gdHJ1
ZTsKIH0KQEAgLTgyLDYgKzkzLDEwIEBAIENocm9tZUNsaWVudFF0Ojp+Q2hyb21lQ2xpZW50UXQo
KQogewogICAgIGlmIChtX2V2ZW50TG9vcCkKICAgICAgICAgbV9ldmVudExvb3AtPmV4aXQoKTsK
KworI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKFFUX01VTFRJTUVESUEpCisgICAgZGVsZXRl
IG1fZnVsbFNjcmVlblZpZGVvOworI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNl
dFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNTk5LDYgKzYxNCw1NCBAQCBJ
bnRSZWN0IENocm9tZUNsaWVudFF0Ojp2aXNpYmxlUmVjdEZvclRpbGVkQmFja2luZ1N0b3JlKCkg
Y29uc3QKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoUVRfTVVMVElN
RURJQSkKK0Z1bGxTY3JlZW5WaWRlb1F0KiBDaHJvbWVDbGllbnRRdDo6ZnVsbFNjcmVlblZpZGVv
KCkKK3sKKyAgICBpZiAoIW1fZnVsbFNjcmVlblZpZGVvKQorICAgICAgICBtX2Z1bGxTY3JlZW5W
aWRlbyA9IG5ldyBGdWxsU2NyZWVuVmlkZW9RdCh0aGlzKTsKKyAgICByZXR1cm4gbV9mdWxsU2Ny
ZWVuVmlkZW87Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50UXQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZv
ck5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgcmV0dXJu
IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYgZnVsbFNjcmVlblZpZGVv
KCktPmlzVmFsaWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6cmVxdWlyZXNGdWxsc2Ny
ZWVuRm9yVmlkZW9QbGF5YmFjaygpCit7CisgICAgcmV0dXJuIGZ1bGxTY3JlZW5WaWRlbygpLT5y
ZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQo
bm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKworICAgIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1l
bnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEgPSB2aWRlb0VsZW1l
bnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIEFTU0VSVChwbGF0Zm9ybU1lZGlhLnR5cGUgPT0g
UGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpOworICAgIGlmIChwbGF0Zm9ybU1lZGlh
LnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZ1bGxTY3JlZW5WaWRlbygpLT5lbnRlckZ1bGxTY3JlZW5Gb3JOb2RlKG5vZGUp
OworfQorCit2b2lkIENocm9tZUNsaWVudFF0OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dmlkZW9UYWcpKTsKKworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihub2RlKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRm
b3JtTWVkaWEgPSB2aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKTsKKworICAgIEFTU0VSVChw
bGF0Zm9ybU1lZGlhLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXllclR5cGUpOwor
ICAgIGlmIChwbGF0Zm9ybU1lZGlhLnR5cGUgIT0gUGxhdGZvcm1NZWRpYTo6UXRNZWRpYVBsYXll
clR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZ1bGxTY3JlZW5WaWRlbygpLT5leGl0RnVs
bFNjcmVlbkZvck5vZGUobm9kZSk7Cit9IAorI2VuZGlmCisKIFF0QWJzdHJhY3RXZWJQb3B1cCog
Q2hyb21lQ2xpZW50UXQ6OmNyZWF0ZVNlbGVjdFBvcHVwKCkKIHsKICAgICBRdEFic3RyYWN0V2Vi
UG9wdXAqIHJlc3VsdCA9IG1fcGxhdGZvcm1QbHVnaW4uY3JlYXRlU2VsZWN0SW5wdXRNZXRob2Qo
KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
IGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKaW5kZXggMzZiMDg4
Ny4uYmE1YTdlMCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmgKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgK
QEAgLTQ5LDYgKzQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBGcmFtZUxv
YWRSZXF1ZXN0OwogICAgIGNsYXNzIFF0QWJzdHJhY3RXZWJQb3B1cDsKICAgICBzdHJ1Y3QgVmll
d3BvcnRBcmd1bWVudHM7CisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoUVRfTVVMVElNRURJ
QSkKKyAgICBjbGFzcyBGdWxsU2NyZWVuVmlkZW9RdDsKKyNlbmRpZgogCiAgICAgY2xhc3MgQ2hy
b21lQ2xpZW50UXQgOiBwdWJsaWMgQ2hyb21lQ2xpZW50CiAgICAgewpAQCAtMTU2LDYgKzE1OSwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hF
dmVudHMoYm9vbCkgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKFFU
X01VTFRJTUVESUEpCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JO
b2RlKGNvbnN0IE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2Rl
KE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVv
UGxheWJhY2soKTsKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUXQqIGZ1bGxTY3JlZW5WaWRlbygp
OworI2VuZGlmCisKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBh
c3NSZWZQdHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25G
b3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKik7CiAKQEAgLTE4NCw2
ICsxOTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbWVudUJhclZpc2li
bGU7CiAgICAgICAgIFFFdmVudExvb3AqIG1fZXZlbnRMb29wOwogCisjaWYgRU5BQkxFKFZJREVP
KSAmJiBFTkFCTEUoUVRfTVVMVElNRURJQSkKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUXQqIG1f
ZnVsbFNjcmVlblZpZGVvOworI2VuZGlmCiAgICAgICAgIFF0UGxhdGZvcm1QbHVnaW4gbV9wbGF0
Zm9ybVBsdWdpbjsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxh
dGZvcm1QbHVnaW4uY3BwCmluZGV4IGUyNTVhYWEuLjVlZDE5ODQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAorKysgYi9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKQEAgLTE4NCw0ICsxODQsMTIgQEAg
UVdlYlRvdWNoTW9kaWZpZXIqIFF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZVRvdWNoTW9kaWZpZXIo
KQogICAgIHJldHVybiBwID8gc3RhdGljX2Nhc3Q8UVdlYlRvdWNoTW9kaWZpZXIqPihwLT5jcmVh
dGVFeHRlbnNpb24oUVdlYktpdFBsYXRmb3JtUGx1Z2luOjpUb3VjaEludGVyYWN0aW9uKSkgOiAw
OwogfQogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoUVRfTVVMVElNRURJQSkKK1FXZWJG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4o
KTsKKyAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
Kj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6RnVsbFNjcmVlblZp
ZGVvUGxheWVyKSkgOiAwOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5oCmluZGV4IDIyNjA3NTkuLjNlNzZjMWUgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKKysrIGIvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaApAQCAtMzEsNiArMzEsOSBAQCBj
bGFzcyBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNr
UGxheWVyOwogY2xhc3MgUVdlYlNlbGVjdERhdGE7CiBjbGFzcyBRV2ViVG91Y2hNb2RpZmllcjsK
KyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShRVF9NVUxUSU1FRElBKQorY2xhc3MgUVdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXI7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC02MSw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBj
cmVhdGVOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKICAgICBRV2ViSGFwdGljRmVlZGJhY2tQbGF5
ZXIqIGNyZWF0ZUhhcHRpY0ZlZWRiYWNrUGxheWVyKCk7CiAgICAgUVdlYlRvdWNoTW9kaWZpZXIq
IGNyZWF0ZVRvdWNoTW9kaWZpZXIoKTsKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShRVF9N
VUxUSU1FRElBKQorICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKIAogICAgIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiog
cGx1Z2luKCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>