<?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>102800</bug_id>
          
          <creation_ts>2012-11-20 04:33:25 -0800</creation_ts>
          <short_desc>[Qt] Separate QWidget dependant code into separate WebKitWidgets static library</short_desc>
          <delta_ts>2012-12-03 04:29:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>103073</dependson>
    
    <dependson>103074</dependson>
          <blocked>99314</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>pierre.rossi</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>771748</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-20 04:33:25 -0800</bug_when>
    <thetext>In preparation for bug #99314 we should move all the code that depends on QtWidgets into a separate WebKitWidgets.a static library first and make sure
that the WebKit1.a static library is compiled without QtWidgets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771855</commentid>
    <comment_count>1</comment_count>
      <attachid>175217</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-20 07:34:56 -0800</bug_when>
    <thetext>Created attachment 175217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771857</commentid>
    <comment_count>2</comment_count>
      <attachid>175217</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-20 07:35:18 -0800</bug_when>
    <thetext>Comment on attachment 175217
Patch

Clearing review, just want to run this through the EWS :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771862</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 07:37:52 -0800</bug_when>
    <thetext>Attachment 175217 did not pass style-queue:

Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:93:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:94:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:95:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:95:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:96:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:97:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:98:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:99:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:106:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:107:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:108:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:117:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:119:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:120:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:121:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:123:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:124:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:125:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:128:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:129:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:176:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:180:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/Api/qwebframe.h:120:  The parameter name &quot;pageAdapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:1138:  Declaration has space between type name and * in QWebPageAdapter *DumpRenderTree  [whitespace/declaration] [3]
Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:1143:  Declaration has space between type name and * in QWebFrameAdapter *DumpRenderTree  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:358:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.cpp:53:  Declaration has space between type name and * in QGraphicsObject *parentItem  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.cpp:58:  Declaration has space between type name and * in QObject *QGraphicsWidgetPluginImpl  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/Api/qwebpage_p.h:24:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/Api/qwebpage_p.h:91:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:92:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:93:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:94:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:95:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:96:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:102:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:132:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:132:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:133:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:134:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage_p.h:134:  The parameter name &quot;item&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:97:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:143:  Declaration has space between type name and * in QWebFrameAdapter *QWebFrameAdapter  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:194:  Declaration has space between type name and * in QWebFrameAdapter *QWebFrameAdapter  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWebUndoCommand.h:31:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/WebCoreSupport/QWebUndoCommand.h:33:  The parameter name &quot;undoStep&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:70:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:74:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:79:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:88:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:230:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:1194:  Declaration has space between type name and * in QWebPageAdapter *newPage  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/Api/qwebframe_p.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h:84:  The parameter name &quot;inspectorClient&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/UndoStepQt.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QtPluginWidgetAdapter.h:24:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.h:33:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.h:45:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/Api/qwebsettings.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:35:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:85:  The parameter name &quot;webFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:85:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.h:24:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.h:34:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.h:39:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:207:  Declaration has space between type name and * in QObject *PageClientQWidget  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:366:  Declaration has space between type name and * in QObject *PageClientQGraphicsWidget  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWebUndoCommand.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:68:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:87:  The parameter name &quot;req&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:87:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:92:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:98:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:103:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:104:  The parameter name &quot;frameData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:445:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebKit/qt/WebCoreSupport/DragClientQt.h:37:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:67:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:407:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:408:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:497:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:521:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:729:  Declaration has space between type name and * in QWebFullScreenVideoHandler *ChromeClientQt  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:770:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/InitWebKitQt.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/WebEventConversion.h:23:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:64:  The parameter name &quot;page&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:78:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:79:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:80:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:81:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:82:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:83:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:85:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:121:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:121:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:151:  The parameter name &quot;manager&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage.cpp:108:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/Api/qwebpage.cpp:379:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/Api/qwebpage.cpp:518:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebKit/qt/Api/qwebpage.cpp:3461:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/Api/qwebpage.cpp:3469:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/Api/qwebpage.cpp:3477:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/Api/qwebpage.cpp:3485:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp:28:  AlphabeticalFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/platform/qt/QWebPageClient....&quot; exit_code: 1
 sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp:83:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp:101:  Declaration has space between type name and * in QNetworkAccessManager *QWebPageAdapter  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.cpp:27:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.cpp:66:  Declaration has space between type name and * in QObject *QWidgetPluginImpl  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:65:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 146 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771864</commentid>
    <comment_count>4</comment_count>
      <attachid>175217</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-20 07:44:26 -0800</bug_when>
    <thetext>Comment on attachment 175217
Patch

Attachment 175217 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14905628</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771866</commentid>
    <comment_count>5</comment_count>
      <attachid>175217</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-20 07:46:05 -0800</bug_when>
    <thetext>Comment on attachment 175217
Patch

Attachment 175217 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14912643</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771882</commentid>
    <comment_count>6</comment_count>
      <attachid>175224</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-20 08:14:49 -0800</bug_when>
    <thetext>Created attachment 175224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771887</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 08:19:15 -0800</bug_when>
    <thetext>Attachment 175224 did not pass style-queue:

Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:93:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:94:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:95:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:95:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:96:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:97:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:98:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:99:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:106:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:107:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:108:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:117:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:119:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:120:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:121:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:123:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:124:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:125:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:128:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:129:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:176:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h:180:  The parameter name &quot;adapter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp:358:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.cpp:53:  Declaration has space between type name and * in QGraphicsObject *parentItem  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.cpp:58:  Declaration has space between type name and * in QObject *QGraphicsWidgetPluginImpl  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:97:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:143:  Declaration has space between type name and * in QWebFrameAdapter *QWebFrameAdapter  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.cpp:194:  Declaration has space between type name and * in QWebFrameAdapter *QWebFrameAdapter  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWebUndoCommand.h:31:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/WebCoreSupport/QWebUndoCommand.h:33:  The parameter name &quot;undoStep&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:70:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:74:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:79:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:88:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:230:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:1194:  Declaration has space between type name and * in QWebPageAdapter *newPage  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h:84:  The parameter name &quot;inspectorClient&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/UndoStepQt.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QtPluginWidgetAdapter.h:24:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.h:33:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.h:45:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:35:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:85:  The parameter name &quot;webFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:85:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.h:24:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.h:34:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/QGraphicsWidgetPluginImpl.h:39:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:207:  Declaration has space between type name and * in QObject *PageClientQWidget  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:366:  Declaration has space between type name and * in QObject *PageClientQGraphicsWidget  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWebUndoCommand.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:68:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:87:  The parameter name &quot;req&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:87:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:92:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:98:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:103:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/WebCoreSupport/QWebFrameAdapter.h:104:  The parameter name &quot;frameData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:445:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebKit/qt/WebCoreSupport/DragClientQt.h:37:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:67:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:407:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:408:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:497:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:521:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:729:  Declaration has space between type name and * in QWebFullScreenVideoHandler *ChromeClientQt  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:770:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/InitWebKitQt.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/WebEventConversion.h:23:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:64:  The parameter name &quot;page&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:78:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:79:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:80:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:81:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:82:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:83:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:85:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:121:  The parameter name &quot;frame&quot; adds no informaFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/platform/qt/QWebPageClient....&quot; exit_code: 1
tion, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:121:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.h:151:  The parameter name &quot;manager&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/Api/qwebpage.cpp:97:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp:83:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWebPageAdapter.cpp:101:  Declaration has space between type name and * in QNetworkAccessManager *QWebPageAdapter  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.cpp:27:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/qt/WebCoreSupport/QWidgetPluginImpl.cpp:66:  Declaration has space between type name and * in QObject *QWidgetPluginImpl  [whitespace/declaration] [3]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:65:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 121 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772599</commentid>
    <comment_count>8</comment_count>
      <attachid>175369</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-21 01:24:31 -0800</bug_when>
    <thetext>Created attachment 175369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772887</commentid>
    <comment_count>9</comment_count>
      <attachid>175369</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-11-21 06:32:19 -0800</bug_when>
    <thetext>Comment on attachment 175369
Patch

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

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:201
&gt; +    emit m_page-&gt;respondToChangedContents();

remove &quot;emit&quot;

&gt; Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:-207
&gt; -    , m_webFrame(0)

this shouldn&apos;t go away

&gt; Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:-262
&gt; -    ASSERT(m_webFrame);

Ditto.

&gt; Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:229
&gt; +    // FIXME: Remove virtual keyword once FrameLoaderClienQt has moved from WKWidgets to WK1.

Please do fix me...

&gt; Source/WebKit/qt/WebCoreSupport/UndoStepQt.cpp:140
&gt;  // vim: ts=4 sw=4 et

that should be at the bottom of the file still...

&gt; Source/WebKit2/qt/MainQt.cpp:45
&gt; +#if !defined(QT_NO_WIDGETS)

do we have another define for that ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773810</commentid>
    <comment_count>10</comment_count>
      <attachid>175642</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-22 03:44:51 -0800</bug_when>
    <thetext>Created attachment 175642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773871</commentid>
    <comment_count>11</comment_count>
      <attachid>175642</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-22 05:44:41 -0800</bug_when>
    <thetext>Comment on attachment 175642
Patch

Reviewing locally with Tor Arne in the office</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773905</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-22 06:35:09 -0800</bug_when>
    <thetext>Committed r135515: &lt;http://trac.webkit.org/changeset/135515&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773987</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-22 08:57:39 -0800</bug_when>
    <thetext>New bugs to
- fix the 3-3 failing/crashing test: https://bugs.webkit.org/show_bug.cgi?id=103073
- fix the Windows build: https://bugs.webkit.org/show_bug.cgi?id=103074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781042</commentid>
    <comment_count>14</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-02 16:16:00 -0800</bug_when>
    <thetext>When I run layout test on Qt WK2 and EFL WK2, I encounters crash.
Do you think it is related to this bug?

crash log for WebProcess (pid &lt;unknown&gt;):
STDOUT: &lt;empty&gt;
STDERR: /media/WDDisk/workspace/WebKit/WebKit/WebKitBuild/qt5/Release/bin/QtWebProcess: symbol lookup error: /media/WDDisk/workspace/WebKit/WebKit/WebKitBuild/qt5/Release/lib/libWebKitWidgets.so.1: undefined symbol: _ZN6WebKit28setWebKitWidgetsInitCallbackEPFPN7WebCore12QStyleFacadeEPNS0_4PageEE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781043</commentid>
    <comment_count>15</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-02 16:18:28 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; When I run layout test on Qt WK2 and EFL WK2, I encounters crash.
&gt; Do you think it is related to this bug?
&gt; 
&gt; crash log for WebProcess (pid &lt;unknown&gt;):
&gt; STDOUT: &lt;empty&gt;
&gt; STDERR: /media/WDDisk/workspace/WebKit/WebKit/WebKitBuild/qt5/Release/bin/QtWebProcess: symbol lookup error: /media/WDDisk/workspace/WebKit/WebKit/WebKitBuild/qt5/Release/lib/libWebKitWidgets.so.1: undefined symbol: _ZN6WebKit28setWebKitWidgetsInitCallbackEPFPN7WebCore12QStyleFacadeEPNS0_4PageEE

I tested like this.
&gt; ./new-run-webkit-tests --qt -2 compositing/backings

And the results


Found 4 tests; running 4, skipping 0.
Running 1 WebKitTestRunner over 1 shard.

[1/4] compositing/backing/no-backing-for-clip-overlap.html failed unexpectedly (WebProcess crashed)
[2/4] compositing/backing/no-backing-for-clip.html failed unexpectedly (WebProcess crashed)
[3/4] compositing/backing/no-backing-for-perspective.html failed unexpectedly (WebProcess crashed)
[4/4] compositing/backing/no-backing-foreground-layer.html failed unexpectedly (WebProcess crashed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781299</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-12-03 03:30:55 -0800</bug_when>
    <thetext>I don&apos;t think so ... These tests pass on Qt-WK2 bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781332</commentid>
    <comment_count>17</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-12-03 04:29:34 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I don&apos;t think so ... These tests pass on Qt-WK2 bots.

No worries there: we had a quick chat on IRC yesterday, and a clean build was required for things to work again. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175217</attachid>
            <date>2012-11-20 07:34:56 -0800</date>
            <delta_ts>2012-11-20 08:14:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102800-20121120163345.patch</filename>
            <type>text/plain</type>
            <size>333307</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UVdlYlBhZ2VDbGllbnQuaAppbmRleCBjZGEwYjBmNGQ2M2I1Y2U1NDU3ZWUxYjNhMjAxNmUzYjFj
Nzg5MDE2Li5hZTNmYjRlMmZhMGRiMjRiZDNlNGJlYWMyMThhMjE5NjAyYmRlNzFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJlcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFFX
aWRnZXQqIG93bmVyV2lkZ2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUU9iamVjdCogb3du
ZXJXaWRnZXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeVJlbGF0aXZl
VG9Pd25lcldpZGdldCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2lu
UGFyZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBy
aSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcmkKaW5kZXggNTYyNmYwNzA4NDA4Y2E4ODEzNzI0
MTc3OTQ3NjYwMTA4MDQ5YTZhZi4uYWYwMjE1ZjRhZWM4Y2VjOTY0NDZhNmIzMTE5NzY0NjA5ZjM1
MjUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJpCkBAIC04LDcgKzgsNiBAQAogU09VUkNFX0RJUiA9ICQke1JPT1Rf
V0VCS0lUX0RJUn0vU291cmNlL1dlYktpdAogCiBJTkNMVURFUEFUSCArPSBcCi0gICAgJCRTT1VS
Q0VfRElSL3F0L0FwaSBcCiAgICAgJCRTT1VSQ0VfRElSL3F0L1dlYkNvcmVTdXBwb3J0IFwKICAg
ICAkJFJPT1RfV0VCS0lUX0RJUi9Tb3VyY2UvV1RGL3d0Zi9xdAogCkBAIC0xOCwyMCArMTcsOSBA
QCBlbmFibGU/KERFVklDRV9PUklFTlRBVElPTil8ZW5hYmxlPyhPUklFTlRBVElPTl9FVkVOVFMp
IHsKIAogZW5hYmxlPyhHRU9MT0NBVElPTik6IFFUICs9IGxvY2F0aW9uCiAKLXVzZT8oUVRfTVVM
VElNRURJQSk6IFFUICo9IG11bHRpbWVkaWF3aWRnZXRzCi0KIGNvbnRhaW5zKENPTkZJRywgdGV4
bWFwKTogREVGSU5FUyArPSBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSPTEKIAogdXNlPyhQTFVHSU5f
QkFDS0VORF9YTElCKTogUEtHQ09ORklHICs9IHgxMQogCi1RVCArPSBuZXR3b3JrIHdpZGdldHMK
LWhhdmU/KFFUUVVJQ0spOiBRVCArPSBxdWljawotaGF2ZT8oUVRQUklOVFNVUFBPUlQpOiBRVCAr
PSBwcmludHN1cHBvcnQKLQotdXNlPyhURVhUVVJFX01BUFBFUl9HTCl8ZW5hYmxlPyhXRUJHTCkg
ewotICAgIFFUICo9IG9wZW5nbAotICAgICMgTWFrZSBzdXJlIE9wZW5HTCBsaWJzIGFyZSBhZnRl
ciB0aGUgd2ViY29yZSBsaWIgc28gTWluR1cgY2FuIHJlc29sdmUgc3ltYm9scwotICAgIHdpbjMy
Kjohd2luMzItbXN2Yyo6IExJQlMgKz0gJCRRTUFLRV9MSUJTX09QRU5HTAotfQotCitRVCArPSBu
ZXR3b3JrCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8gYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJvCmluZGV4IDc1ZDRkNzlkZTVhYzRjZTNlYzY5MmVlZDJmOTVkNWQ3
ZGY5NGI0MzkuLmZlZTk5ZTg4NTFiZmZkNjExOGNmNGNhYTBmMjI2YjEyZGI0Yjc0NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KKysrIGIvU291cmNlL1dlYktpdC9XZWJL
aXQxLnBybwpAQCAtMTUsMzAgKzE1LDIwIEBAIFFUICs9IGd1aQogQ09ORklHICs9IHN0YXRpY2xp
YgogCiBTT1VSQ0VTICs9IFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBcCi0gICAg
JCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdl
YnBhZ2UuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnZpZXcuY3BwIFwKKyAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNw
cCBcCiAgICAgJCRQV0QvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBcCiAgICAgJCRQV0QvcXQvQXBp
L3F3ZWJoaXN0b3J5LmNwcCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAog
ICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5jcHAgXAotICAgICQkUFdEL3F0
L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYnBsdWdp
bmZhY3RvcnkuY3BwIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcCBc
CisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAogICAgICQkUFdEL3F0L0FwaS9x
d2Vic2NyaXB0d29ybGQuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNwcCBc
Ci0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkv
cXdlYmtpdHZlcnNpb24uY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwK
LSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmNwcCBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRRdC5jcHAgXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9T
dGVwUXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29u
dGV4dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQuY3BwIFwKQEAgLTQ2LDY3ICszNiw3MiBAQCBTT1VSQ0VTICs9IFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcCBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgXAogICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvUVN0eWxlRmFjYWRlSW1wLmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJG
cmFtZUFkYXB0ZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFk
YXB0ZXIuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVR
dC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQu
Y3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5j
cHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwIFwKICAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCiAKIEhFQURFUlMg
Kz0gXAotICAgICQkUFdEL3F0L0FwaS9xd2ViZnJhbWUuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3
ZWJmcmFtZV9wLmggXAotICAgICQkUFdEL3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmggXAotICAg
ICQkUFdEL3F0L0FwaS9xd2Via2l0Z2xvYmFsLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJwYWdlLmggXAotICAgICQk
UFdEL3F0L0FwaS9xd2Vidmlldy5oIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaCBcCiAgICAgJCRQV0QvcXQv
QXBpL3F3ZWJlbGVtZW50LmggXAogICAgICQkUFdEL3F0L0FwaS9xd2ViZWxlbWVudF9wLmggXAot
ICAgICQkUFdEL3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIFwKICAgICAkJFBXRC9xdC9BcGkv
cXdlYmhpc3RvcnkuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaCBcCi0gICAg
JCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2VicGx1
Z2luZGF0YWJhc2VfcC5oIFwKLSAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggXAotICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmggXAotICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFdlYkNvbWJvQm94LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeV9wLmgg
XAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZWN1cml0
eW9yaWdpbi5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmggXAorICAgICQkUFdE
L3F0L0FwaS9xd2Vic2NyaXB0d29ybGRfcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0
TWVudUNsaWVudFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRR
dC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oIFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5oIFwKICAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmggXAorICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmggXAotICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RU3R5bGVGYWNhZGVJ
bXAuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFkYXB0ZXIuaCBcCisg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5oIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuaCBcCiAgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9V
bmRvU3RlcFF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVy
c2lvbi5oCiAKLWNvbnRhaW5zKFFUX0NPTkZJRyxhY2Nlc3NpYmlsaXR5KSB7Ci0gICAgU09VUkNF
UyArPSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nlc3NpYmxlLmNwcAotICAgIEhFQURFUlMgKz0g
JCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZV9wLmggCi19Ci0KIElOQ0xVREVQQVRIICs9
IFwKLSAgICAkJFBXRC9xdC9BcGkgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0CiAKLWVu
YWJsZT8oVklERU8pIHsKLSAgICAhdXNlPyhRVEtJVCk6IXVzZT8oR1NUUkVBTUVSKTp1c2U/KFFU
X01VTFRJTUVESUEpIHsKLSAgICAgICAgSEVBREVSUyArPSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaAotICAgICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5jcHAKLSAgICB9Cit1c2U/KDNEX0dS
QVBISUNTKTogV0VCS0lUICs9IGFuZ2xlCiAKK2VuYWJsZT8oR0VPTE9DQVRJT04pIHsKKyAgICAg
SEVBREVSUyArPSBcCisgICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
Q2xpZW50UXQuaAorICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKK30KKworZW5hYmxlPyhJQ09OREFUQUJBU0Up
IHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2VDbGllbnQuaCBcCisgICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0
L0ljb25EYXRhYmFzZUNsaWVudFF0LmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRRdC5jcHAKK30KKworZW5hYmxl
PyhWSURFTykgewogICAgIHVzZT8oUVRLSVQpIHwgdXNlPyhHU1RSRUFNRVIpIHwgdXNlPyhRVF9N
VUxUSU1FRElBKSB7CiAgICAgICAgIEhFQURFUlMgKz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
RnVsbFNjcmVlblZpZGVvUXQuaAogICAgICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcApAQCAtMTM0LDIxICsxMjksNCBAQCBlbmFibGU/
KFZJREVPKSB7CiAgICAgfQogfQogCi1lbmFibGU/KElDT05EQVRBQkFTRSkgewotICAgIEhFQURF
UlMgKz0gXAotICAgICAgICAkJFBXRC8uLi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUNsaWVudC5oIFwKLSAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNl
Q2xpZW50UXQuaAotCi0gICAgU09VUkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudFF0LmNwcAotfQotCi1lbmFibGU/KEdFT0xPQ0FUSU9O
KSB7Ci0gICAgIEhFQURFUlMgKz0gXAotICAgICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvbkNsaWVudFF0LmgKLSAgICAgU09VUkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCi19Ci0KLXVzZT8oM0RfR1JB
UEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXRXaWRnZXRzLnByaSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcmkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGMxNjgzMDExMDVlMWU4MjU2ZTYxYzA0YWQzNDQ1Y2MyNmJlNmE0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcmkKQEAgLTAsMCArMSwzNyBAQAor
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisjIFRoaXMgZmlsZSBjb250YWlucyBzaGFyZWQgcnVsZXMgdXNlZCBib3Ro
IHdoZW4gYnVpbGRpbmcgV2ViS2l0V2lkZ2V0cworIyBpdHNlbGYsIGFuZCBieSB0YXJnZXRzIHRo
YXQgdXNlIFdlYktpdFdpZGdldHMuCisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3Ig
YW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NPVVJDRV9E
SVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQKKworSU5DTFVERVBBVEggKz0g
XAorICAgICQkU09VUkNFX0RJUi9xdC9BcGkgXAorICAgICQkU09VUkNFX0RJUi9xdC9XZWJDb3Jl
U3VwcG9ydCBcCisgICAgJCRST09UX1dFQktJVF9ESVIvU291cmNlL1dURi93dGYvcXQKKworZW5h
YmxlPyhERVZJQ0VfT1JJRU5UQVRJT04pfGVuYWJsZT8oT1JJRU5UQVRJT05fRVZFTlRTKSB7Cisg
ICAgUVQgKz0gc2Vuc29ycworfQorCitlbmFibGU/KEdFT0xPQ0FUSU9OKTogUVQgKz0gbG9jYXRp
b24KKwordXNlPyhRVF9NVUxUSU1FRElBKTogUVQgKj0gbXVsdGltZWRpYXdpZGdldHMKKworY29u
dGFpbnMoQ09ORklHLCB0ZXhtYXApOiBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9
MQorCit1c2U/KFBMVUdJTl9CQUNLRU5EX1hMSUIpOiBQS0dDT05GSUcgKz0geDExCisKK1FUICs9
IG5ldHdvcmsgd2lkZ2V0cworaGF2ZT8oUVRRVUlDSyk6IFFUICs9IHF1aWNrCitoYXZlPyhRVFBS
SU5UU1VQUE9SVCk6IFFUICs9IHByaW50c3VwcG9ydAorCit1c2U/KFRFWFRVUkVfTUFQUEVSX0dM
KXxlbmFibGU/KFdFQkdMKSB7CisgICAgUVQgKj0gb3BlbmdsCisgICAgIyBNYWtlIHN1cmUgT3Bl
bkdMIGxpYnMgYXJlIGFmdGVyIHRoZSB3ZWJjb3JlIGxpYiBzbyBNaW5HVyBjYW4gcmVzb2x2ZSBz
eW1ib2xzCisgICAgd2luMzIqOiF3aW4zMi1tc3ZjKjogTElCUyArPSAkJFFNQUtFX0xJQlNfT1BF
TkdMCit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXRXaWRnZXRzLnBybyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZiZTJmN2I3NWRl
MDlhMWM3ZDhiYjlkNzkzNWYyOTI2NTAzY2NmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KQEAgLTAsMCArMSw3NiBAQAorIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj
IFRhcmdldCBmaWxlIGZvciB0aGUgV2ViS2l0V2lkZ2V0cyBzdGF0aWMgbGlicmFyeQorIworIyBT
ZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0
ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitURU1QTEFURSA9IGxpYgorVEFSR0VUID0gV2ViS2l0V2lkZ2V0
cworCitpbmNsdWRlKFdlYktpdFdpZGdldHMucHJpKQorCitXRUJLSVQgKz0gd3RmIGphdmFzY3Jp
cHRjb3JlIHdlYmNvcmUgd2Via2l0MQorUVQgKz0gZ3VpCisKK0NPTkZJRyArPSBzdGF0aWNsaWIK
KworU09VUkNFUyArPSBcCisgICAgJCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIFwK
KyAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJw
YWdlLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3LmNwcCBcCisgICAgJCRQV0QvcXQv
QXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaW5zcGVj
dG9yLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmNwcCBcCisgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcCBcCisgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1FXZWJVbmRvQ29tbWFuZC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNwcCBcCisgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FTdHls
ZUZhY2FkZUltcC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGwuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0
UGx1Z2luSW1wbC5jcHAKKworSEVBREVSUyArPSBcCisgICAgJCRQV0QvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJmcmFtZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYmZyYW1lX3AuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXRnbG9iYWwuaCBc
CisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYnBhZ2UuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJwYWdlX3AuaCBcCisgICAg
JCRQV0QvcXQvQXBpL3F3ZWJ2aWV3LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaW5zcGVjdG9y
LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2Via2l0dmVyc2lvbi5oIFwKKyAgICAkJFBXRC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlX3AuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
SW5pdFdlYktpdFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFdlYlBhZ2UuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxs
YmFja1dlYlBvcHVwLmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9C
b3guaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmggXAor
ICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmggXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L1FTdHlsZUZhY2FkZUltcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFkYXB0ZXIuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuaAorCitjb250YWlucyhRVF9DT05GSUcsIGFjY2Vz
c2liaWxpdHkpIHsKKyAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L0FwaS9xd2Vidmlld2FjY2Vzc2li
bGUuY3BwCisgICAgSEVBREVSUyArPSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nlc3NpYmxlX3Au
aCAKK30KKworSU5DTFVERVBBVEggKz0gXAorICAgICQkUFdEL3F0L0FwaSBcCisgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQKKworZW5hYmxlPyhWSURFTykgeworICAgICF1c2U/KFFUS0lUKToh
dXNlPyhHU1RSRUFNRVIpOnVzZT8oUVRfTVVMVElNRURJQSkgeworICAgICAgICBIRUFERVJTICs9
ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oCisgICAgICAg
IFNPVVJDRVMgKz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0
LmNwcAorICAgIH0KK30KKwordXNlPygzRF9HUkFQSElDUyk6IFdFQktJVCArPSBhbmdsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRleCBlZjQyYzk1MTg2ZTBl
NjRkZDNjZDcxN2YxMThjNzg4OGZmMzdhNTIxLi44NGI0ZTgwMWJkMWFjZGY2ZmZiZjczMjk2NGM5
OGVjYWUzM2E0MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3
ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNw
cApAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAKICAgICBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0KiBwYWdlQ2xpZW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4gKHBhZ2UtPmQtPmNsaWVudC5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0Kj4gKHBhZ2UtPmQtPmNsaWVudC5kYXRhKCkpOwogICAgIH0gCiB9OwogCkBA
IC00NjgsNyArNDY4LDcgQEAgdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6ZGV0YWNoQ3Vy
cmVudFBhZ2UoKQogICAgICAgICByZXR1cm47CiAKICAgICBwYWdlLT5kLT52aWV3ID0gMDsKLSAg
ICBwYWdlLT5kLT5jbGllbnQgPSBudWxscHRyOworICAgIHBhZ2UtPmQtPmNsaWVudC5yZXNldCgp
OwogCiAgICAgLy8gaWYgdGhlIHBhZ2Ugd2FzIGNyZWF0ZWQgYnkgdXMsIHdlIG93biBpdCBhbmQg
bmVlZCB0bwogICAgIC8vIGRlc3Ryb3kgaXQgYXMgd2VsbC4KQEAgLTUwMSw3ICs1MDEsNyBAQCB2
b2lkIFFHcmFwaGljc1dlYlZpZXc6OnNldFBhZ2UoUVdlYlBhZ2UqIHBhZ2UpCiAgICAgaWYgKCFk
LT5wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBkLT5wYWdlLT5kLT5jbGllbnQgPSBhZG9w
dFB0cihuZXcgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCh0aGlzLCBwYWdlKSk7CisgICAgZC0+
cGFnZS0+ZC0+Y2xpZW50LnJlc2V0KG5ldyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KHRoaXMs
IHBhZ2UpKTsKIAogICAgIGlmIChkLT5vdmVybGF5KCkpCiAgICAgICAgIGQtPm92ZXJsYXkoKS0+
cHJlcGFyZUdyYXBoaWNzSXRlbUdlb21ldHJ5Q2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZWxlbWVudC5jcHAKaW5kZXggMTA4YjliMDZmMWRmM2JmMzNkMWM0ZTM3NWQ4OGZkYjNmODBkODNk
My4uODJmNTc5ZDk1NTBhM2FjZmQ5OWQ0MzBkMWQ1Y2ZhMDc4ZmVlODM4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJlbGVtZW50LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTSFRN
TEVsZW1lbnQuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFt
ZUFycmF5LmgiCisjaW5jbHVkZSA8UVdlYkZyYW1lQWRhcHRlci5oPgogI2luY2x1ZGUgPHBhcnNl
ci9Tb3VyY2VDb2RlLmg+CiAjaW5jbHVkZSAicXRfcnVudGltZS5oIgogI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCkBAIC00Nyw4ICs0OCw2IEBACiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSAi
cXdlYmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJydW50aW1l
X3Jvb3QuaCIKICNpbmNsdWRlIDxKU0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtNzA2LDcgKzcwNSw4IEBAIFFXZWJGcmFtZSAqUVdlYkVsZW1lbnQ6OndlYkZyYW1lKCkg
Y29uc3QKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0
KGZyYW1lKTsKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZUFkYXB0ZXIgPSBRV2ViRnJhbWVB
ZGFwdGVyOjpraXQoZnJhbWUpOworICAgIHJldHVybiBmcmFtZUFkYXB0ZXItPmFwaUhhbmRsZSgp
OwogfQogCiBzdGF0aWMgYm9vbCBzZXR1cFNjcmlwdENvbnRleHQoV2ViQ29yZTo6RWxlbWVudCog
ZWxlbWVudCwgSlNDOjpKU1ZhbHVlJiB0aGlzVmFsdWUsIFNjcmlwdFN0YXRlKiYgc3RhdGUsIFNj
cmlwdENvbnRyb2xsZXIqJiBzY3JpcHRDb250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKaW5kZXggMGFjY2QzMzYyZGQ2ODczNGNmZGYyMTM4NWVjMzgwNjRmMmMxMzFiZi4uY2Ri
NGQ1OTE3N2I0OThkZTNiZmIwOWRlNmY1MTE3YzkzNWRhNGFiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWUuY3BwCkBAIC0xMDYsNTQgKzEwNiw2IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogZXh0
ZXJuIFFfR1VJX0VYUE9SVCBpbnQgcXRfZGVmYXVsdERwaSgpOwogUVRfRU5EX05BTUVTUEFDRQog
Ci1zdGF0aWMgaW5saW5lIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IGNhY2hlTG9hZENvbnRy
b2xUb0NhY2hlUG9saWN5KHVpbnQgY2FjaGVMb2FkQ29udHJvbCkKLXsKLSAgICBzd2l0Y2ggKGNh
Y2hlTG9hZENvbnRyb2wpIHsKLSAgICBjYXNlIFFOZXR3b3JrUmVxdWVzdDo6QWx3YXlzTmV0d29y
azoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhOwotICAg
IGNhc2UgUU5ldHdvcmtSZXF1ZXN0OjpQcmVmZXJDYWNoZToKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlJldHVybkNhY2hlRGF0YUVsc2VMb2FkOwotICAgIGNhc2UgUU5ldHdvcmtSZXF1ZXN0OjpB
bHdheXNDYWNoZToKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YURvbnRM
b2FkOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
Q29yZTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeTsKLX0KLQotUVdlYkZyYW1lRGF0YTo6UVdlYkZy
YW1lRGF0YShXZWJDb3JlOjpQYWdlKiBwYXJlbnRQYWdlLCBXZWJDb3JlOjpGcmFtZSogcGFyZW50
RnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJGcmFtZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdURjo6U3RyaW5nJiBmcmFtZU5hbWUpCi0gICAgOiBuYW1lKGZyYW1lTmFtZSkK
LSAgICAsIG93bmVyRWxlbWVudChvd25lckZyYW1lRWxlbWVudCkKLSAgICAsIHBhZ2UocGFyZW50
UGFnZSkKLSAgICAsIGFsbG93c1Njcm9sbGluZyh0cnVlKQotICAgICwgbWFyZ2luV2lkdGgoMCkK
LSAgICAsIG1hcmdpbkhlaWdodCgwKQotewotICAgIGZyYW1lTG9hZGVyQ2xpZW50ID0gbmV3IEZy
YW1lTG9hZGVyQ2xpZW50UXQoKTsKLSAgICBmcmFtZSA9IEZyYW1lOjpjcmVhdGUocGFnZSwgb3du
ZXJFbGVtZW50LCBmcmFtZUxvYWRlckNsaWVudCk7Ci0KLSAgICAvLyBGSVhNRTogQWxsIG9mIHRo
ZSBiZWxvdyBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgb3ZlciBpbnRvIFdlYkNvcmUKLSAgICBm
cmFtZS0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOwotICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAg
ICAgcGFyZW50RnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hpbGQoZnJhbWUpOwotfQotCi12b2lkIFFX
ZWJGcmFtZVByaXZhdGU6OmluaXQoUVdlYkZyYW1lICpxZnJhbWUsIFFXZWJGcmFtZURhdGEgKmZy
YW1lRGF0YSkKLXsKLSAgICBxID0gcWZyYW1lOwotCi0gICAgYWxsb3dzU2Nyb2xsaW5nID0gZnJh
bWVEYXRhLT5hbGxvd3NTY3JvbGxpbmc7Ci0gICAgbWFyZ2luV2lkdGggPSBmcmFtZURhdGEtPm1h
cmdpbldpZHRoOwotICAgIG1hcmdpbkhlaWdodCA9IGZyYW1lRGF0YS0+bWFyZ2luSGVpZ2h0Owot
ICAgIGZyYW1lID0gZnJhbWVEYXRhLT5mcmFtZS5nZXQoKTsKLSAgICBmcmFtZUxvYWRlckNsaWVu
dCA9IGZyYW1lRGF0YS0+ZnJhbWVMb2FkZXJDbGllbnQ7Ci0gICAgZnJhbWVMb2FkZXJDbGllbnQt
PnNldEZyYW1lKHFmcmFtZSwgZnJhbWUpOwotCi0gICAgZnJhbWUtPmluaXQoKTsKLX0KLQogdm9p
ZCBRV2ViRnJhbWVQcml2YXRlOjpzZXRQYWdlKFFXZWJQYWdlKiBuZXdQYWdlKQogewogICAgIGlm
IChwYWdlID09IG5ld1BhZ2UpCkBAIC0xNjYsNiArMTE4LDcgQEAgdm9pZCBRV2ViRnJhbWVQcml2
YXRlOjpzZXRQYWdlKFFXZWJQYWdlKiBuZXdQYWdlKQogICAgICAgICBxLT5zZXRQYXJlbnQobmV3
UGFnZSk7CiAKICAgICBwYWdlID0gbmV3UGFnZTsKKyAgICBwYWdlQWRhcHRlciA9IG5ld1BhZ2Ut
PmhhbmRsZSgpOwogICAgIGVtaXQgcS0+cGFnZUNoYW5nZWQoKTsKIH0KIApAQCAtMzc1LDYgKzMy
OCwxMSBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OmVtaXRVcmxDaGFuZ2VkKCkKICAgICBlbWl0
IHEtPnVybENoYW5nZWQodXJsKTsKIH0KIAordm9pZCBRV2ViRnJhbWVQcml2YXRlOjpkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZCgpCit7CisgICAgZW1pdCBxLT5wcm92aXNpb25hbExvYWQoKTsKK30K
Kwogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpfcV9vcmllbnRhdGlvbkNoYW5nZWQoKQogewogI2lm
IEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCkBAIC00MDksNiArMzY3LDY1IEBAIHZvaWQgUVdl
YkZyYW1lUHJpdmF0ZTo6ZGlkQ2xlYXJXaW5kb3dPYmplY3QoKQogICAgIGVtaXQgcS0+amF2YVNj
cmlwdFdpbmRvd09iamVjdENsZWFyZWQoKTsKIH0KIAorYm9vbCBRV2ViRnJhbWVQcml2YXRlOjpo
YW5kbGVQcm9ncmVzc0ZpbmlzaGVkKFFQb2ludCAqbG9jYWxQb3MpCit7CisgICAgUVdpZGdldCAq
dmlldyA9IHEtPnBhZ2UoKS0+dmlldygpOworICAgIGlmICghdmlldyB8fCAhbG9jYWxQb3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqbG9jYWxQb3MgPSB2aWV3LT5tYXBGcm9tR2xvYmFs
KFFDdXJzb3I6OnBvcygpKTsKKyAgICByZXR1cm4gdmlldy0+aGFzRm9jdXMoKSAmJiB2aWV3LT5y
ZWN0KCkuY29udGFpbnMoKmxvY2FsUG9zKTsKK30KKwordm9pZCBRV2ViRnJhbWVQcml2YXRlOjpl
bWl0SW5pdGlhbExheW91dENvbXBsZXRlZCgpCit7CisgICAgZW1pdCBxLT5pbml0aWFsTGF5b3V0
Q29tcGxldGVkKCk7Cit9CisKK3ZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6ZW1pdEljb25DaGFuZ2Vk
KCkKK3sKKyAgICBlbWl0IHEtPmljb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6ZW1pdExvYWRTdGFydGVkKGJvb2wgb3JpZ2luYXRpbmdMb2FkKQoreworICAgIGlmIChw
YWdlICYmIG9yaWdpbmF0aW5nTG9hZCkKKyAgICAgICAgZW1pdCBwYWdlLT5sb2FkU3RhcnRlZCgp
OworICAgIGVtaXQgcS0+bG9hZFN0YXJ0ZWQoKTsKK30KKwordm9pZCBRV2ViRnJhbWVQcml2YXRl
OjplbWl0TG9hZEZpbmlzaGVkKGJvb2wgb3JpZ2luYXRpbmdMb2FkLCBib29sIG9rKQoreworICAg
IGlmIChwYWdlICYmIG9yaWdpbmF0aW5nTG9hZCkKKyAgICAgICAgZW1pdCBwYWdlLT5sb2FkRmlu
aXNoZWQob2spOworICAgIGVtaXQgcS0+bG9hZEZpbmlzaGVkKG9rKTsKK30KKworUVdlYkZyYW1l
QWRhcHRlciAqUVdlYkZyYW1lUHJpdmF0ZTo6Y3JlYXRlV2ViRnJhbWUoUVdlYkZyYW1lQWRhcHRl
ciAqcGFyZW50QWRhcHRlcikKK3sKKyAgICBRV2ViRnJhbWUgKm5ld0ZyYW1lID0gbmV3IFFXZWJG
cmFtZShRV2ViRnJhbWVQcml2YXRlOjpraXQocGFyZW50QWRhcHRlcikpOworICAgIHJldHVybiBu
ZXdGcmFtZS0+ZDsKK30KKworUVdlYkZyYW1lICpRV2ViRnJhbWVQcml2YXRlOjphcGlIYW5kbGUo
KQoreworICAgIHJldHVybiBxOworfQorCitRT2JqZWN0ICpRV2ViRnJhbWVQcml2YXRlOjpoYW5k
bGUoKQoreworICAgIHJldHVybiBxOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6OmNvbnRl
bnRzU2l6ZURpZENoYW5nZShjb25zdCBRU2l6ZSAmc2l6ZSkKK3sKKyAgICBlbWl0IHEtPmNvbnRl
bnRzU2l6ZUNoYW5nZWQoc2l6ZSk7Cit9CisKK2ludCBRV2ViRnJhbWVQcml2YXRlOjpzY3JvbGxC
YXJQb2xpY3koUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVy
biAoaW50KSBxLT5zY3JvbGxCYXJQb2xpY3kob3JpZW50YXRpb24pOworfQorCiAvKiEKICAgICBc
Y2xhc3MgUVdlYkZyYW1lCiAgICAgXHNpbmNlIDQuNApAQCAtNDcyLDI5ICs0ODksMjcgQEAgdm9p
ZCBRV2ViRnJhbWVQcml2YXRlOjpkaWRDbGVhcldpbmRvd09iamVjdCgpCiAgICAgXHZhbHVlIEFs
bExheWVycyBJbmNsdWRlcyBhbGwgdGhlIGFib3ZlIGxheWVycwogKi8KIAotUVdlYkZyYW1lOjpR
V2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKQotICAg
IDogUU9iamVjdChwYXJlbnQpCitRV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50
UGFnZSwgUVdlYlBhZ2VBZGFwdGVyICpwYWdlQWRhcHRlcikKKyAgICA6IFFPYmplY3QocGFyZW50
UGFnZSkKICAgICAsIGQobmV3IFFXZWJGcmFtZVByaXZhdGUpCiB7Ci0gICAgZC0+cGFnZSA9IHBh
cmVudDsKLSAgICBkLT5pbml0KHRoaXMsIGZyYW1lRGF0YSk7CisgICAgZC0+cGFnZSA9IHBhcmVu
dFBhZ2U7CisgICAgZC0+cGFnZUFkYXB0ZXIgPSBwYXJlbnRQYWdlLT5oYW5kbGUoKTsKKyAgICBk
LT5xID0gdGhpczsKKyAgICBwYWdlQWRhcHRlci0+aW5pdEZyYW1lKGQpOwogCi0gICAgaWYgKCFm
cmFtZURhdGEtPnVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QoZnJhbWVEYXRhLT51cmwsIGZyYW1lRGF0YS0+cmVmZXJyZXIpOwotICAgICAg
ICBkLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgZnJhbWVEYXRhLT5uYW1lLCBmYWxz
ZSk7Ci0gICAgfQogI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCiAgICAgY29ubmVjdCgm
ZC0+bV9vcmllbnRhdGlvbiwgU0lHTkFMKHJlYWRpbmdDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKF9x
X29yaWVudGF0aW9uQ2hhbmdlZCgpKSk7CiAgICAgZC0+bV9vcmllbnRhdGlvbi5zdGFydCgpOwog
I2VuZGlmCiB9CiAKLVFXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50LCBRV2Vi
RnJhbWVEYXRhICpmcmFtZURhdGEpCitRV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViRnJhbWUgKnBh
cmVudCkKICAgICA6IFFPYmplY3QocGFyZW50KQogICAgICwgZChuZXcgUVdlYkZyYW1lUHJpdmF0
ZSkKIHsKICAgICBkLT5wYWdlID0gcGFyZW50LT5kLT5wYWdlOwotICAgIGQtPmluaXQodGhpcywg
ZnJhbWVEYXRhKTsKKyAgICBkLT5xID0gdGhpczsKICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZF
TlRTKQogICAgIGNvbm5lY3QoJmQtPm1fb3JpZW50YXRpb24sIFNJR05BTChyZWFkaW5nQ2hhbmdl
ZCgpKSwgdGhpcywgU0xPVChfcV9vcmllbnRhdGlvbkNoYW5nZWQoKSkpOwogICAgIGQtPm1fb3Jp
ZW50YXRpb24uc3RhcnQoKTsKQEAgLTUwMyw5ICs1MTgsNiBAQCBRV2ViRnJhbWU6OlFXZWJGcmFt
ZShRV2ViRnJhbWUgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKQogCiBRV2ViRnJh
bWU6On5RV2ViRnJhbWUoKQogewotICAgIGlmIChkLT5mcmFtZSAmJiBkLT5mcmFtZS0+bG9hZGVy
KCkgJiYgZC0+ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8
RnJhbWVMb2FkZXJDbGllbnRRdCo+KGQtPmZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5tX3dl
YkZyYW1lID0gMDsKLQogICAgIGRlbGV0ZSBkOwogfQogCkBAIC02NzQsMjIgKzY4Niw2IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0NvcmVGcmFtZUNsZWFyKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkK
ICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLmlzRW1wdHkoKTsKIH0KIAotc3Rh
dGljIGlubGluZSBRVXJsIGVuc3VyZUFic29sdXRlVXJsKGNvbnN0IFFVcmwgJnVybCkKLXsKLSAg
ICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVybC5pc1JlbGF0aXZlKCkpCi0gICAgICAgIHJldHVy
biB1cmw7Ci0KLSAgICAvLyBUaGlzIGNvbnRhaW5zIHRoZSBVUkwgd2l0aCBhYnNvbHV0ZSBwYXRo
IGJ1dCB3aXRob3V0IAotICAgIC8vIHRoZSBxdWVyeSBhbmQgdGhlIGZyYWdtZW50IHBhcnQuCi0g
ICAgUVVybCBiYXNlVXJsID0gUVVybDo6ZnJvbUxvY2FsRmlsZShRRmlsZUluZm8odXJsLnRvTG9j
YWxGaWxlKCkpLmFic29sdXRlRmlsZVBhdGgoKSk7IAotCi0gICAgLy8gVGhlIHBhdGggaXMgcmVt
b3ZlZCBzbyB0aGUgcXVlcnkgYW5kIHRoZSBmcmFnbWVudCBwYXJ0cyBhcmUgdGhlcmUuCi0gICAg
UVN0cmluZyBwYXRoUmVtb3ZlZCA9IHVybC50b1N0cmluZyhRVXJsOjpSZW1vdmVQYXRoKTsKLSAg
ICBRVXJsIHRvUmVzb2x2ZShwYXRoUmVtb3ZlZCk7Ci0gICAgCi0gICAgcmV0dXJuIGJhc2VVcmwu
cmVzb2x2ZWQodG9SZXNvbHZlKTsKLX0KLQogLyohCiAgICAgXHByb3BlcnR5IFFXZWJGcmFtZTo6
dXJsCiAgICAgXGJyaWVmIHRoZSB1cmwgb2YgdGhlIGZyYW1lIGN1cnJlbnRseSB2aWV3ZWQKQEAg
LTcwNCw3ICs3MDAsNyBAQCBzdGF0aWMgaW5saW5lIFFVcmwgZW5zdXJlQWJzb2x1dGVVcmwoY29u
c3QgUVVybCAmdXJsKQogdm9pZCBRV2ViRnJhbWU6OnNldFVybChjb25zdCBRVXJsICZ1cmwpCiB7
CiAgICAgY2xlYXJDb3JlRnJhbWUoZC0+ZnJhbWUpOwotICAgIGNvbnN0IFFVcmwgYWJzb2x1dGUg
PSBlbnN1cmVBYnNvbHV0ZVVybCh1cmwpOworICAgIGNvbnN0IFFVcmwgYWJzb2x1dGUgPSBRV2Vi
RnJhbWVBZGFwdGVyOjplbnN1cmVBYnNvbHV0ZVVybCh1cmwpOwogICAgIGQtPnVybCA9IGFic29s
dXRlOwogICAgIGxvYWQoYWJzb2x1dGUpOwogfQpAQCAtNzk4LDU4ICs3OTQsNyBAQCB2b2lkIFFX
ZWJGcmFtZTo6bG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcSwKICAgICAgICAgICAgICAg
ICAgICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJhdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFCeXRlQXJyYXkgJmJvZHkpCiB7Ci0gICAgaWYgKGQtPnBh
cmVudEZyYW1lKCkpCi0gICAgICAgIGQtPnBhZ2UtPmQtPmluc2lkZU9wZW5DYWxsID0gdHJ1ZTsK
LQotICAgIFFVcmwgdXJsID0gZW5zdXJlQWJzb2x1dGVVcmwocmVxLnVybCgpKTsKLQotICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0KLSAgICBzd2l0Y2ggKG9wZXJh
dGlvbikgewotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6SGVhZE9wZXJhdGlv
bjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiSEVBRCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRp
b246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQdXRPcGVyYXRp
b246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBVVCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQb3N0T3BlcmF0
aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJQT1NUIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkRlbGV0ZU9w
ZXJhdGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiREVMRVRFIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkN1
c3RvbU9wZXJhdGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChyZXEuYXR0
cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6Q3VzdG9tVmVyYkF0dHJpYnV0ZSkudG9CeXRlQXJyYXko
KS5jb25zdERhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29y
a0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRpb246Ci0gICAgICAgICAgICAvLyBlaD8KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFFWYXJpYW50IGNhY2hlTG9hZCA9IHJlcS5h
dHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpDYWNoZUxvYWRDb250cm9sQXR0cmlidXRlKTsKLSAg
ICBpZiAoY2FjaGVMb2FkLmlzVmFsaWQoKSkgewotICAgICAgICBib29sIG9rOwotICAgICAgICB1
aW50IGNhY2hlTG9hZFZhbHVlID0gY2FjaGVMb2FkLnRvVUludCgmb2spOwotICAgICAgICBpZiAo
b2spCi0gICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KGNhY2hlTG9hZENvbnRyb2xU
b0NhY2hlUG9saWN5KGNhY2hlTG9hZFZhbHVlKSk7Ci0gICAgfQotCi0gICAgUUxpc3Q8UUJ5dGVB
cnJheT4gaHR0cEhlYWRlcnMgPSByZXEucmF3SGVhZGVyTGlzdCgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgaHR0cEhlYWRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUUJ5dGVB
cnJheSAmaGVhZGVyTmFtZSA9IGh0dHBIZWFkZXJzLmF0KGkpOwotICAgICAgICByZXF1ZXN0LmFk
ZEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9tTGF0aW4xKGhlYWRlck5hbWUpLCBRU3RyaW5n
Ojpmcm9tTGF0aW4xKHJlcS5yYXdIZWFkZXIoaGVhZGVyTmFtZSkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWJvZHkuaXNFbXB0eSgpKQotICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KFdlYkNvcmU6
OkZvcm1EYXRhOjpjcmVhdGUoYm9keS5jb25zdERhdGEoKSwgYm9keS5zaXplKCkpKTsKLQotICAg
IGQtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBmYWxzZSk7Ci0KLSAgICBpZiAoZC0+
cGFyZW50RnJhbWUoKSkKLSAgICAgICAgZC0+cGFnZS0+ZC0+aW5zaWRlT3BlbkNhbGwgPSBmYWxz
ZTsKKyAgICBkLT5sb2FkKHJlcSwgb3BlcmF0aW9uLCBib2R5KTsKIH0KIAogLyohCkBAIC0xMDg4
LDEwICsxMDMzLDcgQEAgdm9pZCBRV2ViRnJhbWU6OnNjcm9sbChpbnQgZHgsIGludCBkeSkKIAog
UVBvaW50IFFXZWJGcmFtZTo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewotICAgIGlmICghZC0+
ZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIFFQb2ludCgwLCAwKTsKLQotICAgIEludFNp
emUgb2ZzID0gZC0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgSW50U2l6ZSBv
ZnMgPSBkLT5zY3JvbGxQb3NpdGlvbigpOwogICAgIHJldHVybiBRUG9pbnQob2ZzLndpZHRoKCks
IG9mcy5oZWlnaHQoKSk7CiB9CiAKQEAgLTEyNDgsOSArMTE5MCw3IEBAIFFQb2ludCBRV2ViRnJh
bWU6OnBvcygpIGNvbnN0CiAqLwogUVJlY3QgUVdlYkZyYW1lOjpnZW9tZXRyeSgpIGNvbnN0CiB7
Ci0gICAgaWYgKCFkLT5mcmFtZS0+dmlldygpKQotICAgICAgICByZXR1cm4gUVJlY3QoKTsKLSAg
ICByZXR1cm4gZC0+ZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCk7CisgICAgcmV0dXJuIGQtPmZy
YW1lUmVjdCgpOwogfQogCiAvKiEKQEAgLTE0NzksNiArMTQxOSwxMSBAQCBRV2ViRnJhbWUqIFFX
ZWJGcmFtZVByaXZhdGU6OmtpdChjb25zdCBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lKQogICAg
IHJldHVybiBxb2JqZWN0X2Nhc3Q8UVdlYkZyYW1lKj4oY29yZUZyYW1lLT5sb2FkZXIoKS0+bmV0
d29ya2luZ0NvbnRleHQoKS0+b3JpZ2luYXRpbmdPYmplY3QoKSk7CiB9CiAKK1FXZWJGcmFtZSAq
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGNvbnN0IFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lQWRhcHRl
cikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUVdlYkZyYW1lUHJpdmF0ZSo+KGZy
YW1lQWRhcHRlciktPnE7Cit9CisKIAogLyohCiAgICAgXGZuIHZvaWQgUVdlYkZyYW1lOjpqYXZh
U2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpCkBAIC0xODU3LDQgKzE4MDIsMTIgQEAgUVdlYkZy
YW1lICpRV2ViSGl0VGVzdFJlc3VsdDo6ZnJhbWUoKSBjb25zdAogICAgIHJldHVybiBkLT5mcmFt
ZS5kYXRhKCk7CiB9CiAKKy8qIQorICogXGludGVybmFsCisgKi8KK1FXZWJGcmFtZUFkYXB0ZXIg
KlFXZWJGcmFtZTo6aGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDsKK30KKwogI2luY2x1
ZGUgIm1vY19xd2ViZnJhbWUuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCBjYTk2
NjYxZTM1Y2FjNTI2NmQ1NWYwZjQxODczYzU2NjcwZGMzOTkxLi45ZWE3ZTZmNDdiMmM2MTZlYTRl
YzQ1NTQzNTc5NDhkZDg1NTM3MjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaApAQCAtNDEs
OCArNDEsMTAgQEAgY2xhc3MgUVByaW50ZXI7CiBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFX
ZWJOZXR3b3JrUmVxdWVzdDsKK2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXI7CiBjbGFzcyBRV2ViRnJh
bWVQcml2YXRlOwogY2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiBjbGFz
cyBRV2ViSGl0VGVzdFJlc3VsdDsKIGNsYXNzIFFXZWJIaXN0b3J5SXRlbTsKIGNsYXNzIFFXZWJT
ZWN1cml0eU9yaWdpbjsKQEAgLTExNSw4ICsxMTcsOCBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBR
V2ViRnJhbWUgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9QUk9QRVJUWShRUG9pbnQgc2Nyb2xs
UG9zaXRpb24gUkVBRCBzY3JvbGxQb3NpdGlvbiBXUklURSBzZXRTY3JvbGxQb3NpdGlvbikKICAg
ICBRX1BST1BFUlRZKGJvb2wgZm9jdXMgUkVBRCBoYXNGb2N1cykKIHByaXZhdGU6Ci0gICAgUVdl
YkZyYW1lKFFXZWJQYWdlICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7Ci0gICAg
UVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpOwor
ICAgIFFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50UGFnZSwgUVdlYlBhZ2VBZGFwdGVyICpwYWdl
QWRhcHRlcik7CisgICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50KTsKICAgICB+UVdlYkZy
YW1lKCk7CiAKIHB1YmxpYzoKQEAgLTIwMCw2ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGV2ZW50KFFFdmVudCAqKTsKIAogICAgIFFXZWJTZWN1cml0eU9yaWdpbiBzZWN1cml0
eU9yaWdpbigpIGNvbnN0OworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGhhbmRsZSgpIGNvbnN0Owog
CiBwdWJsaWMgUV9TTE9UUzoKICAgICBRVmFyaWFudCBldmFsdWF0ZUphdmFTY3JpcHQoY29uc3Qg
UVN0cmluZyYgc2NyaXB0U291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4
IGQ2Nzc5ZjJiYzU5OTMxMzliYzdkMGZlYzRiNjRlMTZlYmY1MDlkMzYuLmJkNzJlZWZjNzRkZGQ2
NDUyNDY3ZGQ1Y2MzMmVjZmMzODUxNTE2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3Au
aApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInF3ZWJlbGVtZW50LmgiCiAjaW5jbHVkZSAi
d3RmL1JlZlB0ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSA8UVdlYkZyYW1lQWRh
cHRlci5oPgogI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUwLDQyICs1MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB9CiBjbGFzcyBRV2ViUGFnZTsKIAotY2xhc3MgUVdlYkZyYW1lRGF0YSB7Ci1wdWJsaWM6Ci0g
ICAgUVdlYkZyYW1lRGF0YShXZWJDb3JlOjpQYWdlKiwgV2ViQ29yZTo6RnJhbWUqIHBhcmVudEZy
YW1lID0gMCwKLSAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dCogPSAwLAotICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSA9
IFdURjo6U3RyaW5nKCkpOwotCi0gICAgV2ViQ29yZTo6S1VSTCB1cmw7Ci0gICAgV1RGOjpTdHJp
bmcgbmFtZTsKLSAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVu
dDsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4g
ZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdCogZnJhbWVMb2FkZXJDbGll
bnQ7Ci0KLSAgICBXVEY6OlN0cmluZyByZWZlcnJlcjsKLSAgICBib29sIGFsbG93c1Njcm9sbGlu
ZzsKLSAgICBpbnQgbWFyZ2luV2lkdGg7Ci0gICAgaW50IG1hcmdpbkhlaWdodDsKLX07Ci0KLWNs
YXNzIFFXZWJGcmFtZVByaXZhdGUgeworY2xhc3MgUVdlYkZyYW1lUHJpdmF0ZSA6IHB1YmxpYyBR
V2ViRnJhbWVBZGFwdGVyIHsKIHB1YmxpYzoKICAgICBRV2ViRnJhbWVQcml2YXRlKCkKICAgICAg
ICAgOiBxKDApCiAgICAgICAgICwgaG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xs
QmFyQXNOZWVkZWQpCiAgICAgICAgICwgdmVydGljYWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9s
bEJhckFzTmVlZGVkKQotICAgICAgICAsIGZyYW1lTG9hZGVyQ2xpZW50KDApCi0gICAgICAgICwg
ZnJhbWUoMCkKICAgICAgICAgLCBwYWdlKDApCi0gICAgICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRy
dWUpCi0gICAgICAgICwgbWFyZ2luV2lkdGgoLTEpCi0gICAgICAgICwgbWFyZ2luSGVpZ2h0KC0x
KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgLCByb290VGV4dHVy
ZU1hcHBlckxheWVyKDApCiAjZW5kaWYKICAgICAgICAge30KLSAgICB2b2lkIGluaXQoUVdlYkZy
YW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEqIGZyYW1lRGF0YSk7CiAgICAgdm9pZCBzZXRQYWdl
KFFXZWJQYWdlKik7CiAKICAgICBpbmxpbmUgUVdlYkZyYW1lICpwYXJlbnRGcmFtZSgpIHsgcmV0
dXJuIHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihxLT5wYXJlbnQoKSk7IH0KQEAgLTk1LDYgKzcx
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFdlYkNvcmU6OkZyYW1lKiBjb3JlKGNvbnN0IFFX
ZWJGcmFtZSopOwogICAgIHN0YXRpYyBRV2ViRnJhbWUqIGtpdChjb25zdCBXZWJDb3JlOjpGcmFt
ZSopOworICAgIHN0YXRpYyBRV2ViRnJhbWUqIGtpdChjb25zdCBRV2ViRnJhbWVBZGFwdGVyKik7
CiAKICAgICB2b2lkIHJlbmRlclJlbGF0aXZlQ29vcmRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCosIFFGbGFnczxRV2ViRnJhbWU6OlJlbmRlckxheWVyPiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7
CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xMDUsMjIgKzgyLDI5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbmRlckNvbXBvc2l0ZWRMYXllcnMoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CiAjZW5kaWYKICAgICB2b2lkIHJl
bmRlckZyYW1lRXh0cmFzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIFFGbGFnczxRV2ViRnJh
bWU6OlJlbmRlckxheWVyPiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7Ci0gICAgdm9pZCBlbWl0VXJs
Q2hhbmdlZCgpOwogICAgIHZvaWQgX3Ffb3JpZW50YXRpb25DaGFuZ2VkKCk7CiAKLSAgICB2b2lk
IGRpZENsZWFyV2luZG93T2JqZWN0KCk7CisKKyAgICAvLyBBZGFwdGVyIGltcGxlbWVudGF0aW9u
CisgICAgdmlydHVhbCBRV2ViRnJhbWUqIGFwaUhhbmRsZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgUU9iamVjdCogaGFuZGxlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRz
U2l6ZURpZENoYW5nZShjb25zdCBRU2l6ZSAmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBz
Y3JvbGxCYXJQb2xpY3koUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW1pdFVybENoYW5nZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnRQcm92aXNpb25hbExvYWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xl
YXJXaW5kb3dPYmplY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUHJvZ3Jl
c3NGaW5pc2hlZChRUG9pbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEluaXRp
YWxMYXlvdXRDb21wbGV0ZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEljb25D
aGFuZ2VkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXRMb2FkU3RhcnRlZChib29s
IG9yaWdpbmF0aW5nTG9hZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXRMb2FkRmlu
aXNoZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQsIGJvb2wgb2spIE9WRVJSSURFOworICAgIHZpcnR1
YWwgUVdlYkZyYW1lQWRhcHRlciogY3JlYXRlV2ViRnJhbWUoUVdlYkZyYW1lQWRhcHRlciopIE9W
RVJSSURFOwogCiAgICAgUVdlYkZyYW1lICpxOwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgaG9y
aXpvbnRhbFNjcm9sbEJhclBvbGljeTsKICAgICBRdDo6U2Nyb2xsQmFyUG9saWN5IHZlcnRpY2Fs
U2Nyb2xsQmFyUG9saWN5OwotICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQgKmZyYW1l
TG9hZGVyQ2xpZW50OwotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZTsKICAgICBRV2ViUGFnZSAq
cGFnZTsKLSAgICBXZWJDb3JlOjpLVVJMIHVybDsKIAotICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5n
OwotICAgIGludCBtYXJnaW5XaWR0aDsKLSAgICBpbnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
IHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI+IHRleHR1cmVNYXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
aGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKaW5kZXgg
Zjc4NDk2NjZlMGZjYmQxOGNjZjJhZWJkMWUyNzNjNzJiNzk5Mjc0MC4uYTk0NWI1OTJiYjI5MGUx
ODZjNTZiMDM5YzBkYmM4ZTY1NTJiZDkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5
LmNwcApAQCAtMjAsMTUgKzIwLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
cXdlYmhpc3RvcnkuaCIKICNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCi0jaW5jbHVkZSAicXdl
YmZyYW1lX3AuaCIKIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkljb25EYXRhYmFzZUJhc2UuaCIKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgPFFXZWJQYWdlQWRhcHRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaW5jbHVkZSA8UVNoYXJl
ZERhdGE+CkBAIC01NTIsOSArNTUzLDkgQEAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oUURhdGFT
dHJlYW0mIHNvdXJjZSwgUVdlYkhpc3RvcnkmIGhpc3RvcnkpCiAgICAgcmV0dXJuIHNvdXJjZTsK
IH0KIAotUVdlYlBhZ2VQcml2YXRlKiBRV2ViSGlzdG9yeVByaXZhdGU6OnBhZ2UoKQorUVdlYlBh
Z2VBZGFwdGVyKiBRV2ViSGlzdG9yeVByaXZhdGU6OnBhZ2UoKQogewotICAgIHJldHVybiBRV2Vi
RnJhbWVQcml2YXRlOjpraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1w
bCo+KGxzdCktPnBhZ2UoKS0+bWFpbkZyYW1lKCkpLT5wYWdlKCktPmhhbmRsZSgpOworICAgIHJl
dHVybiBRV2ViUGFnZUFkYXB0ZXI6OmtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3RJbXBsKj4obHN0KS0+cGFnZSgpKTsKIH0KIAogV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFFX
ZWJIaXN0b3J5SXRlbVByaXZhdGU6OmNvcmUoY29uc3QgUVdlYkhpc3RvcnlJdGVtKiBxKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlfcC5oIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmhpc3RvcnlfcC5oCmluZGV4IGFhZWUzODYzMjljMDVmYzU3YzE3MmRi
NmU2ODM2OTYyMWIyYWZiMzEuLjE3NjM0ZWJjMDg4ZGU4ZTk0YjU2NDgxNWNjZDQ4OWMwOWYwNjMy
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5X3AuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeV9wLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0
YS5oPgogCi1jbGFzcyBRV2ViUGFnZVByaXZhdGU7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAK
IGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJIaXN0b3J5SXRlbVByaXZhdGUgOiBwdWJsaWMgUVNo
YXJlZERhdGEgewogcHVibGljOgpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGxz
dC0+ZGVyZWYoKTsKICAgICB9CiAKLSAgICBRV2ViUGFnZVByaXZhdGUqIHBhZ2UoKTsKKyAgICBR
V2ViUGFnZUFkYXB0ZXIqIHBhZ2UoKTsKIAogICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdElt
cGwqIGxzdDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IDJm
YmJhYjI0OWEwNDFjMzZhY2ZjZDJjOGVhNzZjODEyNjhmNmYyNWQuLjU1MDg5ZTFhMWZjZWU4Y2Rl
OTQzOWJkOTUyY2NiYzViMzMxNmVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJpbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0
b3IuY3BwCkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZl
bnQoUUNsb3NlRXZlbnQqIGV2ZW50KQogfQogCiAvKiEgXGludGVybmFsICovCi12b2lkIFFXZWJJ
bnNwZWN0b3JQcml2YXRlOjpzZXRGcm9udGVuZChRV2lkZ2V0KiBuZXdGcm9udGVuZCkKK3ZvaWQg
UVdlYkluc3BlY3RvclByaXZhdGU6OnNldEZyb250ZW5kKFFPYmplY3QqIG5ld0Zyb250ZW5kKQog
ewogICAgIGlmIChmcm9udGVuZCkKICAgICAgICAgZnJvbnRlbmQtPnNldFBhcmVudCgwKTsKIAot
ICAgIGZyb250ZW5kID0gbmV3RnJvbnRlbmQ7CisgICAgZnJvbnRlbmQgPSBxb2JqZWN0X2Nhc3Q8
UVdpZGdldCo+KG5ld0Zyb250ZW5kKTsKIAogICAgIGlmIChmcm9udGVuZCkgewogICAgICAgICBm
cm9udGVuZC0+c2V0UGFyZW50KHEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmluc3BlY3Rvcl9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3Au
aAppbmRleCA0ZDMyN2NjNWE5MTFmN2U1MjI5ODA0ZjFkOGUyNzlhNDU0OGVkNzU3Li45MDhkZTg0
ZWRjMWQ5YWI3YTA3MTE4ZGRkYjU5MmY0YWUxYmYyNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViaW5zcGVjdG9yX3AuaApAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgLCBmcm9udGVu
ZCgwKQogICAgIHt9CiAKLSAgICB2b2lkIHNldEZyb250ZW5kKFFXaWRnZXQqIG5ld0Zyb250ZW5k
KTsKKyAgICB2b2lkIHNldEZyb250ZW5kKFFPYmplY3QqIG5ld0Zyb250ZW5kKTsKICAgICB2b2lk
IGFkanVzdEZyb250ZW5kU2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSk7CiAKICAgICBRV2ViSW5zcGVj
dG9yKiBxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGFkZTQ5NmZhNDRhZTNkN2Vl
OGQ2NzEzNDQ0NjU5OGNmMmRhZjQ0YmIuLjU1ZGJlNjUwYTQ4ZjQ5OTUzZDFlZDVlYWMxODljMTYw
NmY5Y2UyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTc4LDggKzc4LDkgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbml0V2ViQ29yZVF0LmgiCisjaW5jbHVkZSAiSW5p
dFdlYktpdFF0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JDbGllbnRXZWJQYWdlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclNlcnZlclF0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAt
OTQsNyArOTUsNiBAQAogI2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1
cmVFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtVG91Y2hFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpA
QCAtMTAyLDcgKzEwMiwxMSBAQAogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1
ZGUgIlFHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuaCIKKyNpbmNsdWRlICJRdEZhbGxiYWNrV2Vi
UG9wdXAuaCIKICNpbmNsdWRlICJRdFBsYXRmb3JtUGx1Z2luLmgiCisjaW5jbHVkZSAiUVdlYlVu
ZG9Db21tYW5kLmgiCisjaW5jbHVkZSAiUVdpZGdldFBsdWdpbkltcGwuaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKICNpbmNsdWRl
ICJTY2hlbWVSZWdpc3RyeS5oIgpAQCAtMTE0LDEyICsxMTgsMTcgQEAKICNpbmNsdWRlICJTeXN0
ZW1JbmZvLmgiCiAjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgorI2luY2x1ZGUgIlVuZG9TdGVwUXQuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRRdC5oIgogI2lu
Y2x1ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYktpdFZlcnNpb24uaCIK
ICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgog
CisjaWYgVVNFKFFUX01VTFRJTUVESUEpCisjaW5jbHVkZSAiRGVmYXVsdEZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8UUFjdGlvbj4KICNpbmNsdWRlIDxRQXBw
bGljYXRpb24+CiAjaW5jbHVkZSA8UUJhc2ljVGltZXI+CkBAIC0xNDUsNyArMTU0LDkgQEAKICNp
bmNsdWRlIDxRU3NsU29ja2V0PgogI2luY2x1ZGUgPFFTdHlsZT4KICNpbmNsdWRlIDxRU3lzSW5m
bz4KKyNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAjaW5jbHVkZSA8UVRleHRDaGFyRm9ybWF0
PgorI2luY2x1ZGUgPFFUb29sVGlwPgogI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgogI2luY2x1ZGUg
PFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KICNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CkBAIC0x
NjMsOCArMTc0LDYgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCiBleHRlcm4gUV9HVUlfRVhQT1JUIGlu
dCBxdF9kZWZhdWx0RHBpKCk7CiBRVF9FTkRfTkFNRVNQQUNFCiAKLWJvb2wgUVdlYlBhZ2VQcml2
YXRlOjpkcnRSdW4gPSBmYWxzZTsKLQogLy8gTG9va3VwIHRhYmxlIG1hcHBpbmcgUVdlYlBhZ2U6
OldlYkFjdGlvbnMgdG8gdGhlIGFzc29jaWF0ZWQgRWRpdG9yIGNvbW1hbmRzCiBzdGF0aWMgY29u
c3QgY2hhciogZWRpdG9yQ29tbWFuZFdlYkFjdGlvbnNbXSA9CiB7CkBAIC0zMDAsMjMgKzMwOSwx
NSBAQCBzdGF0aWMgaW5saW5lIFF0OjpEcm9wQWN0aW9uIGRyYWdPcFRvRHJvcEFjdGlvbih1bnNp
Z25lZCBhY3Rpb25zKQogCiBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFn
ZSAqcXEpCiAgICAgOiBxKHFxKQotICAgICwgcGFnZSgwKQogI2lmbmRlZiBRVF9OT19VTkRPU1RB
Q0sKICAgICAsIHVuZG9TdGFjaygwKQogI2VuZGlmCi0gICAgLCBpbnNpZGVPcGVuQ2FsbChmYWxz
ZSkKICAgICAsIG1fdG90YWxCeXRlcygwKQogICAgICwgbV9ieXRlc1JlY2VpdmVkKCkKICAgICAs
IGNsaWNrQ2F1c2VkRm9jdXMoZmFsc2UpCi0gICAgLCBuZXR3b3JrTWFuYWdlcigwKQotICAgICwg
Zm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudChmYWxzZSkKLSAgICAsIHNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZCh0cnVlKQotICAgICwgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxz
ZSkKICAgICAsIGxpbmtQb2xpY3koUVdlYlBhZ2U6OkRvbnREZWxlZ2F0ZUxpbmtzKQotICAgICwg
dmlld3BvcnRTaXplKFFTaXplKDAsIDApKQotICAgICwgc2V0dGluZ3MoMCkKKyAgICAsIG1fdmll
d3BvcnRTaXplKFFTaXplKDAsIDApKQogICAgICwgdXNlRml4ZWRMYXlvdXQoZmFsc2UpCi0gICAg
LCBwbHVnaW5GYWN0b3J5KDApCiAgICAgLCBpbnNwZWN0b3JGcm9udGVuZCgwKQogICAgICwgaW5z
cGVjdG9yKDApCiAgICAgLCBpbnNwZWN0b3JJc0ludGVybmFsT25seShmYWxzZSkKQEAgLTMyNiwx
NCArMzI3LDE0IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpx
cSkKICAgICBib29sIHVzZU1vY2sgPSBRV2ViUGFnZVByaXZhdGU6OmRydFJ1bjsKICNlbmRpZgog
Ci0gICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOworICAgIFdlYktpdDo6aW5pdGlh
bGl6ZVdlYktpdFdpZGdldHMoKTsKIAogICAgIFBhZ2U6OlBhZ2VDbGllbnRzIHBhZ2VDbGllbnRz
OwotICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IG5ldyBDaHJvbWVDbGllbnRRdChxKTsK
KyAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQgPSBuZXcgQ2hyb21lQ2xpZW50UXQodGhpcyk7
CiAgICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGllbnQgPSBuZXcgQ29udGV4dE1lbnVDbGll
bnRRdCgpOwotICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IG5ldyBFZGl0b3JDbGllbnRR
dChxKTsKLSAgICBwYWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gbmV3IERyYWdDbGllbnRRdChxKTsK
LSAgICBwYWdlQ2xpZW50cy5pbnNwZWN0b3JDbGllbnQgPSBuZXcgSW5zcGVjdG9yQ2xpZW50UXQo
cSk7CisgICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gbmV3IEVkaXRvckNsaWVudFF0KHRo
aXMpOworICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcgRHJhZ0NsaWVudFF0KHBhZ2VD
bGllbnRzLmNocm9tZUNsaWVudCk7CisgICAgcGFnZUNsaWVudHMuaW5zcGVjdG9yQ2xpZW50ID0g
bmV3IEluc3BlY3RvckNsaWVudFF0KHRoaXMpOwogICAgIHBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xp
ZW50cyk7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAgIGlmICh1c2VNb2NrKSB7CkBAIC0z
NDIsNyArMzQzLDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2Ug
KnFxKQogICAgICAgICBXZWJDb3JlOjpwcm92aWRlR2VvbG9jYXRpb25UbyhwYWdlLCBtb2NrKTsK
ICAgICAgICAgbW9jay0+c2V0Q29udHJvbGxlcihXZWJDb3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xs
ZXI6OmZyb20ocGFnZSkpOwogICAgIH0gZWxzZQotICAgICAgICBXZWJDb3JlOjpwcm92aWRlR2Vv
bG9jYXRpb25UbyhwYWdlLCBuZXcgR2VvbG9jYXRpb25DbGllbnRRdChxKSk7CisgICAgICAgIFdl
YkNvcmU6OnByb3ZpZGVHZW9sb2NhdGlvblRvKHBhZ2UsIG5ldyBHZW9sb2NhdGlvbkNsaWVudFF0
KHRoaXMpKTsKICNlbmRpZgogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgaWYg
KHVzZU1vY2spCkBAIC0zNTEsOSArMzUyLDYgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVBy
aXZhdGUoUVdlYlBhZ2UgKnFxKQogICAgICAgICBXZWJDb3JlOjpwcm92aWRlRGV2aWNlT3JpZW50
YXRpb25UbyhwYWdlLCBuZXcgRGV2aWNlT3JpZW50YXRpb25DbGllbnRRdCk7CiAgICAgV2ViQ29y
ZTo6cHJvdmlkZURldmljZU1vdGlvblRvKHBhZ2UsIG5ldyBEZXZpY2VNb3Rpb25DbGllbnRRdCk7
CiAjZW5kaWYKLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJ
RklDQVRJT05TKQotICAgIFdlYkNvcmU6OnByb3ZpZGVOb3RpZmljYXRpb24ocGFnZSwgTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpKTsKLSNlbmRp
ZgogCiAgICAgLy8gQnkgZGVmYXVsdCBlYWNoIHBhZ2UgaXMgcHV0IGludG8gdGhlaXIgb3duIHVu
aXF1ZSBwYWdlIGdyb3VwLCB3aGljaCBhZmZlY3RzIHBvcHVwIHdpbmRvd3MKICAgICAvLyBhbmQg
dmlzaXRlZCBsaW5rcy4gUGFnZSBncm91cHMgKHBlciBwcm9jZXNzIG9ubHkpIGlzIGEgZmVhdHVy
ZSBtYWtpbmcgaXQgcG9zc2libGUgdG8gdXNlCkBAIC0zNjQsNyArMzYyLDcgQEAgUVdlYlBhZ2VQ
cml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogCiAgICAgcGFnZS0+YWRkTGF5
b3V0TWlsZXN0b25lcyhEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOwogCi0gICAgc2V0
dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdzKHBhZ2UtPnNldHRpbmdzKCkpOworICAgIFFXZWJQYWdl
QWRhcHRlcjo6aW5pdChwYWdlKTsKIAogICAgIGhpc3RvcnkuZCA9IG5ldyBRV2ViSGlzdG9yeVBy
aXZhdGUoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHBhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpKSk7CiAgICAgbWVtc2V0KGFjdGlvbnMsIDAsIHNpemVvZihhY3Rpb25z
KSk7CkBAIC0zNzIsOCArMzcwLDEzIEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRl
KFFXZWJQYWdlICpxcSkKICAgICBQYWdlR3JvdXA6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtz
KHRydWUpOwogICAgIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZ
X05PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlm
aWNhdGlvblByZXNlbnRlcigpLT5hZGRDbGllbnQoKTsKLSNlbmRpZgorICAgIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0KiBwcmVzZW50ZXIgPSBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CisgICAgcHJlc2VudGVyLT5hZGRDbGllbnQo
KTsKKyNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04KKyAgICBpZiAoIXByZXNlbnRlci0+aGFz
U3lzdGVtVHJheUljb24oKSkKKyAgICAgICAgcHJlc2VudGVyLT5zZXRTeXN0ZW1UcmF5SWNvbihu
ZXcgUVN5c3RlbVRyYXlJY29uKTsKKyNlbmRpZiAvLyBRVF9OT19TWVNURU1UUkFZSUNPTgorI2Vu
ZGlmIC8vRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9O
UykKIH0KIAogUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkKQEAgLTM4NCw4ICsz
ODcsNiBAQCBRV2ViUGFnZVByaXZhdGU6On5RV2ViUGFnZVByaXZhdGUoKQogI2lmbmRlZiBRVF9O
T19VTkRPU1RBQ0sKICAgICBkZWxldGUgdW5kb1N0YWNrOwogI2VuZGlmCi0gICAgZGVsZXRlIHNl
dHRpbmdzOwotICAgIGRlbGV0ZSBwYWdlOwogICAgIAogICAgIGlmIChpbnNwZWN0b3IpIHsKICAg
ICAgICAgLy8gSWYgdGhlIGluc3BlY3RvciBpcyBvdXJzLCBkZWxldGUgaXQsIG90aGVyd2lzZSBq
dXN0IGRldGFjaCBmcm9tIGl0LgpAQCAtMzk0LDQxICszOTUsMjIwIEBAIFFXZWJQYWdlUHJpdmF0
ZTo6flFXZWJQYWdlUHJpdmF0ZSgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGluc3BlY3Rv
ci0+c2V0UGFnZSgwKTsKICAgICB9CisgICAgLy8gRXhwbGljaXRseSBkZXN0cnVjdCB0aGUgV2Vi
Q29yZSBwYWdlIGF0IHRoaXMgcG9pbnQgd2hlbiB0aGUKKyAgICAvLyBRV2ViUGFnZVByaXZhdGUg
LyBRV2ViUGFnZUFkYXBhdGVyIHZ0YWJsZXMgYXJlIHN0aWxsIGludGFjdCwKKyAgICAvLyBpbiBv
cmRlciBmb3IgdmFyaW91cyBkZXN0cnVjdGlvbiBjYWxsYmFja3Mgb3V0IG9mIFdlYkNvcmUgdG8K
KyAgICAvLyB3b3JrLgorICAgIGRlbGV0ZVBhZ2UoKTsKK30KIAotI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5yZW1vdmVDbGllbnQo
KTsKK1dlYkNvcmU6OlBhZ2UqIFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShjb25zdCBRV2ViUGFnZSog
cGFnZSkKK3sKKyAgICByZXR1cm4gcGFnZS0+ZC0+cGFnZTsKK30KKwordm9pZCBRV2ViUGFnZVBy
aXZhdGU6OnNob3coKQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIHZp
ZXctPndpbmRvdygpLT5zaG93KCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpzZXRGb2N1
cygpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgdmlldy0+c2V0Rm9j
dXMoKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OnVuZm9jdXMoKQoreworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXctPmNsZWFyRm9jdXMoKTsKK30KKwordm9p
ZCBRV2ViUGFnZVByaXZhdGU6OnNldFdpbmRvd1JlY3QoY29uc3QgUVJlY3QgJnJlY3QpCit7Cisg
ICAgZW1pdCBxLT5nZW9tZXRyeUNoYW5nZVJlcXVlc3RlZChyZWN0KTsKK30KKworUVNpemUgUVdl
YlBhZ2VQcml2YXRlOjp2aWV3cG9ydFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBxLT52aWV3
cG9ydFNpemUoKTsKK30KKworUVdlYlBhZ2VBZGFwdGVyICpRV2ViUGFnZVByaXZhdGU6OmNyZWF0
ZVdpbmRvdyhib29sIGRpYWxvZykKK3sKKyAgICBRV2ViUGFnZSAqbmV3UGFnZSA9IHEtPmNyZWF0
ZVdpbmRvdyhkaWFsb2cgPyBRV2ViUGFnZTo6V2ViTW9kYWxEaWFsb2cgOiBRV2ViUGFnZTo6V2Vi
QnJvd3NlcldpbmRvdyk7CisgICAgaWYgKCFuZXdQYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhlIG1haW4gZnJhbWUgZXhpc3RzLCBhcyBXZWJDb3JlIGV4cGVjdHMg
aXQgd2hlbiByZXR1cm5pbmcgZnJvbSB0aGlzIENocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KCkK
KyAgICBuZXdQYWdlLT5kLT5jcmVhdGVNYWluRnJhbWUoKTsKKyAgICByZXR1cm4gbmV3UGFnZS0+
ZDsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmphdmFTY3JpcHRDb25zb2xlTWVzc2FnZShj
b25zdCBRU3RyaW5nICZtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgUVN0cmluZyAmc291
cmNlSUQpCit7CisgICAgcS0+amF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKG1lc3NhZ2UsIGxpbmVO
dW1iZXIsIHNvdXJjZUlEKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmphdmFTY3JpcHRB
bGVydChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnKQoreworICAg
IHEtPmphdmFTY3JpcHRBbGVydChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpLCBtc2cpOwor
fQorCitib29sIFFXZWJQYWdlUHJpdmF0ZTo6amF2YVNjcmlwdENvbmZpcm0oUVdlYkZyYW1lQWRh
cHRlciogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICByZXR1cm4gcS0+amF2YVNj
cmlwdENvbmZpcm0oUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgbXNnKTsKK30KKworYm9v
bCBRV2ViUGFnZVByaXZhdGU6OmphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1lQWRhcHRlciAqZnJh
bWUsIGNvbnN0IFFTdHJpbmcgJm1zZywgY29uc3QgUVN0cmluZyAmZGVmYXVsdFZhbHVlLCBRU3Ry
aW5nICpyZXN1bHQpCit7CisgICAgcmV0dXJuIHEtPmphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1l
UHJpdmF0ZTo6a2l0KGZyYW1lKSwgbXNnLCBkZWZhdWx0VmFsdWUsIHJlc3VsdCk7Cit9CisKK3Zv
aWQgUVdlYlBhZ2VQcml2YXRlOjpwcmludFJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyICpmcmFt
ZSkKK3sKKyAgICBlbWl0IHEtPnByaW50UmVxdWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChm
cmFtZSkpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZGF0YWJhc2VRdW90YUV4Y2VlZGVk
KFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBkYXRhYmFzZU5hbWUpCit7
CisgICAgZW1pdCBxLT5kYXRhYmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0
KGZyYW1lKSwgZGF0YWJhc2VOYW1lKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmFwcGxp
Y2F0aW9uQ2FjaGVRdW90YUV4Y2VlZGVkKFFXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBxdWlu
dDY0IGRlZmF1bHRPcmlnaW5RdW90YSwgcXVpbnQ2NCBjKQoreworICAgIGVtaXQgcS0+YXBwbGlj
YXRpb25DYWNoZVF1b3RhRXhjZWVkZWQob3JpZ2luLCBkZWZhdWx0T3JpZ2luUXVvdGEsIGRlZmF1
bHRPcmlnaW5RdW90YSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpzZXRUb29sVGlwKGNv
bnN0IFFTdHJpbmcgJnRpcCkKK3sKKyNpZm5kZWYgUVRfTk9fVE9PTFRJUAorICAgIGlmICghdmll
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRpcC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
dmlldy0+c2V0VG9vbFRpcChRU3RyaW5nKCkpOworICAgICAgICBRVG9vbFRpcDo6aGlkZVRleHQo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBRU3RyaW5nIGR0aXAgPSBRTGF0aW4xU3RyaW5nKCI8
cD4iKSArIFFTdHJpbmcodGlwKS50b0h0bWxFc2NhcGVkKCkgKyBRTGF0aW4xU3RyaW5nKCI8L3A+
Iik7CisgICAgICAgIHZpZXctPnNldFRvb2xUaXAoZHRpcCk7CisgICAgfQorI2Vsc2UKKyAgICBR
X1VOVVNFRCh0aXApOwogI2VuZGlmCiB9CiAKLVdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIFFX
ZWJQYWdlUHJpdmF0ZTo6dmlld3BvcnRBcmd1bWVudHMoKQorI2lmIFVTRShRVF9NVUxUSU1FRElB
KQorUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlRnVs
bFNjcmVlblZpZGVvSGFuZGxlcigpCiB7Ci0gICAgcmV0dXJuIHBhZ2UgPyBwYWdlLT52aWV3cG9y
dEFyZ3VtZW50cygpIDogV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICByZXR1cm4g
bmV3IFdlYktpdDo6RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI7CiB9CisjZW5kaWYKIAot
V2ViQ29yZTo6UGFnZSogUVdlYlBhZ2VQcml2YXRlOjpjb3JlKGNvbnN0IFFXZWJQYWdlKiBwYWdl
KQorUVdlYkZyYW1lQWRhcHRlciAqUVdlYlBhZ2VQcml2YXRlOjptYWluRnJhbWVBZGFwdGVyKCkK
IHsKLSAgICByZXR1cm4gcGFnZS0+ZC0+cGFnZTsKKyAgICByZXR1cm4gcS0+bWFpbkZyYW1lKCkt
PmQ7CiB9CiAKLVFXZWJQYWdlUHJpdmF0ZSogUVdlYlBhZ2VQcml2YXRlOjpwcml2KFFXZWJQYWdl
KiBwYWdlKQorUVN0cmluZ0xpc3QgUVdlYlBhZ2VQcml2YXRlOjpjaG9vc2VGaWxlcyhRV2ViRnJh
bWVBZGFwdGVyICpmcmFtZSwgYm9vbCBhbGxvd011bHRpcGxlLCBjb25zdCBRU3RyaW5nTGlzdCAm
c3VnZ2VzdGVkRmlsZU5hbWVzKQogewotICAgIHJldHVybiBwYWdlLT5kOworICAgIGlmIChhbGxv
d011bHRpcGxlICYmIHEtPnN1cHBvcnRzRXh0ZW5zaW9uKFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBs
ZUZpbGVzRXh0ZW5zaW9uKSkgeworICAgICAgICBRV2ViUGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxl
c0V4dGVuc2lvbk9wdGlvbiBvcHRpb247CisgICAgICAgIG9wdGlvbi5wYXJlbnRGcmFtZSA9IFFX
ZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7CisgICAgICAgIG9wdGlvbi5zdWdnZXN0ZWRGaWxl
TmFtZXMgPSBzdWdnZXN0ZWRGaWxlTmFtZXM7CisKKyAgICAgICAgUVdlYlBhZ2U6OkNob29zZU11
bHRpcGxlRmlsZXNFeHRlbnNpb25SZXR1cm4gb3V0cHV0OworICAgICAgICBxLT5leHRlbnNpb24o
UVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb24sICZvcHRpb24sICZvdXRwdXQp
OworCisgICAgICAgIHJldHVybiBvdXRwdXQuZmlsZU5hbWVzOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKKyAgICAgICAgUVN0cmluZyBzdWdnZXN0ZWRGaWxlOwor
ICAgICAgICBpZiAoIXN1Z2dlc3RlZEZpbGVOYW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBz
dWdnZXN0ZWRGaWxlID0gc3VnZ2VzdGVkRmlsZU5hbWVzLmZpcnN0KCk7CisgICAgICAgIFFTdHJp
bmcgZmlsZSA9IHEtPmNob29zZUZpbGUoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgc3Vn
Z2VzdGVkRmlsZSk7CisgICAgICAgIGlmICghZmlsZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXN1bHQgPDwgZmlsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9CiAKLWJvb2wg
UVdlYlBhZ2VQcml2YXRlOjphY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1l
LCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlw
ZSB0eXBlKQorYm9vbCBRV2ViUGFnZVByaXZhdGU6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFX
ZWJGcmFtZUFkYXB0ZXIgKmZyYW1lQWRhcHRlciwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1
ZXN0LCBpbnQgdHlwZSkKIHsKKyAgICBRV2ViRnJhbWUgKmZyYW1lID0gZnJhbWVBZGFwdGVyID8g
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lQWRhcHRlcik6IDA7CiAgICAgaWYgKGluc2lkZU9w
ZW5DYWxsCiAgICAgICAgICYmIGZyYW1lID09IG1haW5GcmFtZS5kYXRhKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBxLT5hY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChmcmFtZSwg
cmVxdWVzdCwgdHlwZSk7CisgICAgcmV0dXJuIHEtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KGZy
YW1lLCByZXF1ZXN0LCBRV2ViUGFnZTo6TmF2aWdhdGlvblR5cGUodHlwZSkpOworfQorCit2b2lk
IFFXZWJQYWdlUHJpdmF0ZTo6ZW1pdFJlc3RvcmVGcmFtZVN0YXRlUmVxdWVzdGVkKFFXZWJGcmFt
ZUFkYXB0ZXIgKmZyYW1lKQoreworICAgIGVtaXQgcS0+cmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0
ZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2
YXRlOjplbWl0U2F2ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciAqZnJhbWUs
IFFXZWJIaXN0b3J5SXRlbSAqaXRlbSkKK3sKKyAgICBlbWl0IHEtPnNhdmVGcmFtZVN0YXRlUmVx
dWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIGl0ZW0pOworfQorCit2b2lkIFFX
ZWJQYWdlUHJpdmF0ZTo6ZW1pdERvd25sb2FkUmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVz
dCAmcmVxdWVzdCkKK3sKKyAgICBlbWl0IHEtPmRvd25sb2FkUmVxdWVzdGVkKHJlcXVlc3QpOwor
fQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZW1pdEZyYW1lQ3JlYXRlZChRV2ViRnJhbWVBZGFw
dGVyICpmcmFtZSkKK3sKKyAgICBlbWl0IHEtPmZyYW1lQ3JlYXRlZChRV2ViRnJhbWVQcml2YXRl
OjpraXQoZnJhbWUpKTsKK30KKworYm9vbCBRV2ViUGFnZVByaXZhdGU6OmVycm9yUGFnZUV4dGVu
c2lvbihRV2ViUGFnZUFkYXB0ZXI6OkVycm9yUGFnZU9wdGlvbiAqb3B0LCBRV2ViUGFnZUFkYXB0
ZXI6OkVycm9yUGFnZVJldHVybiAqb3V0KQoreworICAgIFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRl
bnNpb25PcHRpb24gb3B0aW9uOworICAgIGlmIChvcHQtPmRvbWFpbiA9PSBRTGF0aW4xU3RyaW5n
KCJRdE5ldHdvcmsiKSkKKyAgICAgICAgb3B0aW9uLmRvbWFpbiA9IFFXZWJQYWdlOjpRdE5ldHdv
cms7CisgICAgZWxzZSBpZiAob3B0LT5kb21haW4gPT0gUUxhdGluMVN0cmluZygiSFRUUCIpKQor
ICAgICAgICBvcHRpb24uZG9tYWluID0gUVdlYlBhZ2U6Okh0dHA7CisgICAgZWxzZSBpZiAob3B0
LT5kb21haW4gPT0gUUxhdGluMVN0cmluZygiV2ViS2l0IikpCisgICAgICAgIG9wdGlvbi5kb21h
aW4gPSBRV2ViUGFnZTo6V2ViS2l0OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIG9wdGlvbi51cmwgPSBvcHQtPnVybDsKKyAgICBvcHRpb24uZnJhbWUgPSBRV2ViRnJhbWVQ
cml2YXRlOjpraXQob3B0LT5mcmFtZSk7CisgICAgb3B0aW9uLmVycm9yID0gb3B0LT5lcnJvcjsK
KyAgICBvcHRpb24uZXJyb3JTdHJpbmcgPSBvcHQtPmVycm9yU3RyaW5nOworICAgIFFXZWJQYWdl
OjpFcnJvclBhZ2VFeHRlbnNpb25SZXR1cm4gb3V0cHV0OworICAgIGlmICghcS0+ZXh0ZW5zaW9u
KFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24sICZvcHRpb24sICZvdXRwdXQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgb3V0LT5iYXNlVXJsID0gb3V0cHV0LmJhc2VVcmw7CisgICAg
b3V0LT5jb250ZW50ID0gb3V0cHV0LmNvbnRlbnQ7CisgICAgb3V0LT5jb250ZW50VHlwZSA9IG91
dHB1dC5jb250ZW50VHlwZTsKKyAgICBvdXQtPmVuY29kaW5nID0gb3V0cHV0LmVuY29kaW5nOwor
ICAgIHJldHVybiB0cnVlOworfQorCitRdFBsdWdpbldpZGdldEFkYXB0ZXIgKlFXZWJQYWdlUHJp
dmF0ZTo6Y3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJpbmcgJmNsYXNzaWQsIGNvbnN0IFFVcmwgJnVy
bCwgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMsIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJh
bVZhbHVlcykKK3sKKyAgICBRT2JqZWN0ICp3aWRnZXQgPSBxLT5jcmVhdGVQbHVnaW4oY2xhc3Np
ZCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgcmV0dXJuIGFkYXB0ZXJGb3JX
aWRnZXQod2lkZ2V0KTsKK30KKworUXRQbHVnaW5XaWRnZXRBZGFwdGVyICpRV2ViUGFnZVByaXZh
dGU6OmFkYXB0ZXJGb3JXaWRnZXQoUU9iamVjdCAqb2JqZWN0KSBjb25zdAoreworICAgIGlmIChR
V2lkZ2V0ICp3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG9iamVjdCkpCisgICAgICAg
IHJldHVybiBuZXcgUVdpZGdldFBsdWdpbkltcGwod2lkZ2V0KTsKKyAgICBpZiAoUUdyYXBoaWNz
V2lkZ2V0ICp3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UUdyYXBoaWNzV2lkZ2V0Kj4ob2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIG5ldyBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsKHdpZGdldCk7Cisg
ICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVNYWluRnJhbWUo
KQogewogICAgIGlmICghbWFpbkZyYW1lKSB7Ci0gICAgICAgIFFXZWJGcmFtZURhdGEgZnJhbWVE
YXRhKHBhZ2UpOwotICAgICAgICBtYWluRnJhbWUgPSBuZXcgUVdlYkZyYW1lKHEsICZmcmFtZURh
dGEpOwotCisgICAgICAgIG1haW5GcmFtZSA9IG5ldyBRV2ViRnJhbWUocSwgdGhpcyk7CiAgICAg
ICAgIGVtaXQgcS0+ZnJhbWVDcmVhdGVkKG1haW5GcmFtZS5kYXRhKCkpOwogICAgIH0KIH0KQEAg
LTQ3NSw3ICs2NTUsNyBAQCBRTWVudSAqUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVDb250ZXh0TWVu
dShjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudSAqd2ViY29yZU1lbgogICAgIGlmICghY2xpZW50
IHx8ICF3ZWJjb3JlTWVudSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBRTWVudSogbWVudSA9
IG5ldyBRTWVudShjbGllbnQtPm93bmVyV2lkZ2V0KCkpOworICAgIFFNZW51KiBtZW51ID0gbmV3
IFFNZW51KHEtPnZpZXcoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy0+Y291bnQo
KTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENvbnRleHRNZW51SXRlbSAmaXRlbSA9IGl0ZW1zLT5h
dChpKTsKICAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewpAQCAtNjE5LDYgKzc5OSw2NSBA
QCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKQogICAgIHVw
ZGF0ZUFjdGlvbihRV2ViUGFnZTo6UmVsb2FkQW5kQnlwYXNzQ2FjaGUpOwogfQogCitRT2JqZWN0
ICpRV2ViUGFnZVByaXZhdGU6Omluc3BlY3RvckhhbmRsZSgpCit7CisgICAgcmV0dXJuIGdldE9y
Q3JlYXRlSW5zcGVjdG9yKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpzZXRJbnNwZWN0
b3JGcm9udGVuZChRT2JqZWN0KiBmcm9udGVuZCkKK3sKKyAgICBpbnNwZWN0b3JGcm9udGVuZCA9
IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4oZnJvbnRlbmQpOworICAgIGlmIChpbnNwZWN0b3IpCisg
ICAgICAgIGluc3BlY3Rvci0+ZC0+c2V0RnJvbnRlbmQoZnJvbnRlbmQpOworfQorCit2b2lkIFFX
ZWJQYWdlUHJpdmF0ZTo6c2V0SW5zcGVjdG9yV2luZG93VGl0bGUoY29uc3QgUVN0cmluZyYgdGl0
bGUpCit7CisgICAgaWYgKGluc3BlY3RvcikKKyAgICAgICAgaW5zcGVjdG9yLT5zZXRXaW5kb3dU
aXRsZSh0aXRsZSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVXZWJJbnNwZWN0
b3IoUU9iamVjdCoqIGluc3BlY3RvclZpZXcsIFFXZWJQYWdlQWRhcHRlcioqIGluc3BlY3RvclBh
Z2UpCit7CisgICAgUVdlYlBhZ2UqIHBhZ2UgPSBuZXcgV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRX
ZWJQYWdlOworICAgICppbnNwZWN0b3JWaWV3ID0gcGFnZS0+dmlldygpOworICAgICppbnNwZWN0
b3JQYWdlID0gcGFnZS0+ZDsKK30KKworI2lmbmRlZiBRVF9OT19NRU5VCitzdGF0aWMgUVN0cmlu
Z0xpc3QgaXRlcmF0ZUNvbnRleHRNZW51KFFNZW51KiBtZW51KQoreworICAgIGlmICghbWVudSkK
KyAgICAgICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7CisKKyAgICBRU3RyaW5nTGlzdCBpdGVtczsK
KyAgICBRTGlzdDxRQWN0aW9uICo+IGFjdGlvbnMgPSBtZW51LT5hY3Rpb25zKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLmNvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoYWN0
aW9ucy5hdChpKS0+aXNTZXBhcmF0b3IoKSkKKyAgICAgICAgICAgIGl0ZW1zIDw8IFFMYXRpbjFT
dHJpbmcoIjxzZXBhcmF0b3I+Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZW1zIDw8
IGFjdGlvbnMuYXQoaSktPnRleHQoKTsKKyAgICAgICAgaWYgKGFjdGlvbnMuYXQoaSktPm1lbnUo
KSkKKyAgICAgICAgICAgIGl0ZW1zIDw8IGl0ZXJhdGVDb250ZXh0TWVudShhY3Rpb25zLmF0KGkp
LT5tZW51KCkpOworICAgIH0KKyAgICByZXR1cm4gaXRlbXM7Cit9CisjZW5kaWYKKworUVN0cmlu
Z0xpc3QgUVdlYlBhZ2VQcml2YXRlOjptZW51QWN0aW9uc0FzVGV4dCgpCit7CisjaWZuZGVmIFFU
X05PX01FTlUKKyAgICByZXR1cm4gaXRlcmF0ZUNvbnRleHRNZW51KGN1cnJlbnRDb250ZXh0TWVu
dS5kYXRhKCkpOworI2Vsc2UKKyAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKKyNlbmRpZgorfQor
Cit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZW1pdFZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCkKK3sK
KyAgICBlbWl0IHEtPnZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCk7Cit9CisKIHZvaWQgUVdlYlBh
Z2VQcml2YXRlOjp1cGRhdGVFZGl0b3JBY3Rpb25zKCkKIHsKICAgICB1cGRhdGVBY3Rpb24oUVdl
YlBhZ2U6OkN1dCk7CkBAIC02ODIsOCArOTIxLDcgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OnRp
bWVyRXZlbnQoUVRpbWVyRXZlbnQgKmV2KQogICAgICAgICBxLT50aW1lckV2ZW50KGV2KTsKIH0K
IAotdGVtcGxhdGU8Y2xhc3MgVD4KLXZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZU1vdmVFdmVu
dChUKiBldikKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZU1vdmVFdmVudChRTW91c2VFdmVu
dCogZXYpCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShtYWluRnJhbWUuZGF0YSgpKTsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkpCkBAIC02OTMs
OCArOTMxLDcgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlTW92ZUV2ZW50KFQqIGV2KQog
ICAgIGV2LT5zZXRBY2NlcHRlZChhY2NlcHRlZCk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12
b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VQcmVzc0V2ZW50KFQqIGV2KQordm9pZCBRV2ViUGFn
ZVByaXZhdGU6Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCogZXYpCiB7CiAgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtYWluRnJhbWUuZGF0YSgp
KTsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkpCkBAIC03MjksOCArOTY2LDcgQEAgdm9pZCBRV2Vi
UGFnZVByaXZhdGU6Om1vdXNlUHJlc3NFdmVudChUKiBldikKICAgICAgICAgY2xpY2tDYXVzZWRG
b2N1cyA9IHRydWU7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6bW91c2VEb3VibGVDbGlja0V2ZW50KFQgKmV2KQordm9pZCBRV2ViUGFnZVByaXZhdGU6Om1v
dXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCAqZXYpCiB7CiAgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtYWluRnJhbWUuZGF0YSgpKTsKICAg
ICBpZiAoIWZyYW1lLT52aWV3KCkpCkBAIC03NDcsOCArOTgzLDcgQEAgdm9pZCBRV2ViUGFnZVBy
aXZhdGU6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChUICpldikKICAgICB0cmlwbGVDbGljayA9IFFQ
b2ludEYoZXYtPnBvcygpKS50b1BvaW50KCk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lk
IFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VUcmlwbGVDbGlja0V2ZW50KFQgKmV2KQordm9pZCBRV2Vi
UGFnZVByaXZhdGU6Om1vdXNlVHJpcGxlQ2xpY2tFdmVudChRTW91c2VFdmVudCAqZXYpCiB7CiAg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtYWluRnJh
bWUuZGF0YSgpKTsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkpCkBAIC03NjIsOCArOTk3LDcgQEAg
dm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlVHJpcGxlQ2xpY2tFdmVudChUICpldikKICAgICBl
di0+c2V0QWNjZXB0ZWQoYWNjZXB0ZWQpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBUPgotdm9pZCBR
V2ViUGFnZVByaXZhdGU6Om1vdXNlUmVsZWFzZUV2ZW50KFQgKmV2KQordm9pZCBRV2ViUGFnZVBy
aXZhdGU6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50ICpldikKIHsKICAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkp
OwogICAgIGlmICghZnJhbWUtPnZpZXcoKSkKQEAgLTc5MCw3ICsxMDI0LDcgQEAgdm9pZCBRV2Vi
UGFnZVByaXZhdGU6OmhhbmRsZVNvZnR3YXJlSW5wdXRQYW5lbChRdDo6TW91c2VCdXR0b24gYnV0
dG9uLCBjb25zdCBRUG8KICAgICAgICAgJiYgZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCkKICAgICAgICAgJiYgYnV0dG9uID09IFF0OjpMZWZ0QnV0dG9uICYmIHFBcHAtPmF1dG9TaXBF
bmFibGVkKCkpIHsKICAgICAgICAgUVN0eWxlOjpSZXF1ZXN0U29mdHdhcmVJbnB1dFBhbmVsIGJl
aGF2aW9yID0gUVN0eWxlOjpSZXF1ZXN0U29mdHdhcmVJbnB1dFBhbmVsKAotICAgICAgICAgICAg
Y2xpZW50LT5vd25lcldpZGdldCgpLT5zdHlsZSgpLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9SZXF1
ZXN0U29mdHdhcmVJbnB1dFBhbmVsKSk7CisgICAgICAgICAgICBjbGllbnQtPnN0eWxlKCktPnN0
eWxlSGludChRU3R5bGU6OlNIX1JlcXVlc3RTb2Z0d2FyZUlucHV0UGFuZWwpKTsKICAgICAgICAg
aWYgKCFjbGlja0NhdXNlZEZvY3VzIHx8IGJlaGF2aW9yID09IFFTdHlsZTo6UlNJUF9Pbk1vdXNl
Q2xpY2spIHsKICAgICAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChmcmFtZS0+dmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKHBvcyksIGZhbHNlKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNDb250ZW50RWRp
dGFibGUoKSkgewpAQCAtODMzLDE0ICsxMDY3LDEzIEBAIFFNZW51ICpRV2ViUGFnZTo6Y3JlYXRl
U3RhbmRhcmRDb250ZXh0TWVudSgpCiB9CiAKICNpZm5kZWYgUVRfTk9fV0hFRUxFVkVOVAotdGVt
cGxhdGU8Y2xhc3MgVD4KLXZvaWQgUVdlYlBhZ2VQcml2YXRlOjp3aGVlbEV2ZW50KFQgKmV2KQor
dm9pZCBRV2ViUGFnZVByaXZhdGU6OndoZWVsRXZlbnQoUVdoZWVsRXZlbnQgKmV2KQogewogICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobWFpbkZyYW1l
LmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGV2ID0gY29udmVydFdoZWVsRXZlbnQoZXYpOworICAgIFBs
YXRmb3JtV2hlZWxFdmVudCBwZXYgPSBjb252ZXJ0V2hlZWxFdmVudChldiwgUUFwcGxpY2F0aW9u
Ojp3aGVlbFNjcm9sbExpbmVzKCkpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQocGV2KTsKICAgICBldi0+c2V0QWNjZXB0ZWQoYWNj
ZXB0ZWQpOwogfQpAQCAtMTM0MCwzMyArMTU3MywzOSBAQCBib29sIFFXZWJQYWdlUHJpdmF0ZTo6
dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCiAKIGJvb2wgUVdlYlBhZ2VQcml2YXRlOjpn
ZXN0dXJlRXZlbnQoUUdlc3R1cmVFdmVudCogZXZlbnQpCiB7Ci0jaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQotICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUobWFpbkZyYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFmcmFtZS0+dmlldygpKQorICAgIFFXZWJG
cmFtZUFkYXB0ZXIqIGZyYW1lID0gbWFpbkZyYW1lLmRhdGEoKS0+ZDsKKyAgICBpZiAoIWZyYW1l
LT5oYXNWaWV3KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vIFFHZXN0dXJlRXZl
bnRzIGNhbiBjb250YWluIHVwZGF0ZXMgZm9yIG11bHRpcGxlIGdlc3R1cmVzLgogICAgIGJvb2wg
aGFuZGxlZCA9IGZhbHNlOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICAvLyBRR2Vz
dHVyZUV2ZW50IGxpdmVzIGluIFdpZGdldHMsIHdlJ2xsIG5lZWQgYSBkdW1teSBzdHJ1Y3QgdG8g
bXVsZSB0aGUgaW5mbyBpdCBjb250YWlucyB0byB0aGUgIm90aGVyIHNpZGUiCisgICAgUUdlc3R1
cmVFdmVudEZhY2FkZSBnZXN0dXJlRmFjYWRlOworCiAgICAgUUdlc3R1cmUqIGdlc3R1cmUgPSBl
dmVudC0+Z2VzdHVyZShRdDo6VGFwR2VzdHVyZSk7CiAgICAgLy8gQmV3YXJlIHRoYXQgZ2VzdHVy
ZXMgc2VuZCBieSBEdW1wUmVuZGVyVHJlZSB3aWxsIGhhdmUgc3RhdGUgUXQ6Ok5vR2VzdHVyZSwK
ICAgICAvLyBkdWUgdG8gbm90IG9yaWdpbmF0aW5nIGZyb20gYSBHZXN0dXJlUmVjb2duaXplci4K
ICAgICBpZiAoZ2VzdHVyZSAmJiAoZ2VzdHVyZS0+c3RhdGUoKSA9PSBRdDo6R2VzdHVyZVN0YXJ0
ZWQgfHwgZ2VzdHVyZS0+c3RhdGUoKSA9PSBRdDo6Tm9HZXN0dXJlKSkgewotICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChjb252ZXJ0R2VzdHVyZShldmVu
dCwgZ2VzdHVyZSkpOwotICAgICAgICBldmVudC0+c2V0QWNjZXB0ZWQodHJ1ZSk7CisgICAgICAg
IGdlc3R1cmVGYWNhZGUudHlwZSA9IFF0OjpUYXBHZXN0dXJlOworICAgICAgICBRUG9pbnRGIGds
b2JhbFBvcyA9IHN0YXRpY19jYXN0PGNvbnN0IFFUYXBHZXN0dXJlKj4oZ2VzdHVyZSktPnBvc2l0
aW9uKCk7CisgICAgICAgIGdlc3R1cmVGYWNhZGUuZ2xvYmFsUG9zID0gZ2xvYmFsUG9zLnRvUG9p
bnQoKTsKKyAgICAgICAgZ2VzdHVyZUZhY2FkZS5wb3MgPSBldmVudC0+d2lkZ2V0KCktPm1hcEZy
b21HbG9iYWwoZ2xvYmFsUG9zLnRvUG9pbnQoKSk7CisgICAgICAgIGZyYW1lLT5oYW5kbGVHZXN0
dXJlRXZlbnQoJmdlc3R1cmVGYWNhZGUpOwogICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICB9
CiAgICAgZ2VzdHVyZSA9IGV2ZW50LT5nZXN0dXJlKFF0OjpUYXBBbmRIb2xkR2VzdHVyZSk7CiAg
ICAgaWYgKGdlc3R1cmUgJiYgKGdlc3R1cmUtPnN0YXRlKCkgPT0gUXQ6Okdlc3R1cmVTdGFydGVk
IHx8IGdlc3R1cmUtPnN0YXRlKCkgPT0gUXQ6Ok5vR2VzdHVyZSkpIHsKLSAgICAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudEZvckdlc3R1cmUoY29udmVydEdl
c3R1cmUoZXZlbnQsIGdlc3R1cmUpKTsKLSAgICAgICAgZXZlbnQtPnNldEFjY2VwdGVkKHRydWUp
OworICAgICAgICBnZXN0dXJlRmFjYWRlLnR5cGUgPSBRdDo6VGFwQW5kSG9sZEdlc3R1cmU7Cisg
ICAgICAgIFFQb2ludEYgZ2xvYmFsUG9zID0gc3RhdGljX2Nhc3Q8Y29uc3QgUVRhcEFuZEhvbGRH
ZXN0dXJlKj4oZ2VzdHVyZSktPnBvc2l0aW9uKCk7CisgICAgICAgIGdlc3R1cmVGYWNhZGUuZ2xv
YmFsUG9zID0gZ2xvYmFsUG9zLnRvUG9pbnQoKTsKKyAgICAgICAgZ2VzdHVyZUZhY2FkZS5wb3Mg
PSBldmVudC0+d2lkZ2V0KCktPm1hcEZyb21HbG9iYWwoZ2xvYmFsUG9zLnRvUG9pbnQoKSk7Cisg
ICAgICAgIGZyYW1lLT5oYW5kbGVHZXN0dXJlRXZlbnQoJmdlc3R1cmVGYWNhZGUpOwogICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEdFU1RVUkVfRVZFTlRT
KQogCisgICAgZXZlbnQtPnNldEFjY2VwdGVkKGhhbmRsZWQpOwogICAgIHJldHVybiBoYW5kbGVk
OwotI2Vsc2UKLSAgICBldmVudC0+aWdub3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
CiB9CiAKIC8qIQpAQCAtMjAzNywxMiArMjI3NiwxMiBAQCB2b2lkIFFXZWJQYWdlOjpzZXRWaWV3
KFFXaWRnZXQqIHZpZXcpCiAKICAgICBpZiAoZC0+Y2xpZW50KSB7CiAgICAgICAgIGlmIChkLT5j
bGllbnQtPmlzUVdpZGdldENsaWVudCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UGFnZUNs
aWVudFFXaWRnZXQqPihkLT5jbGllbnQuZ2V0KCkpLT52aWV3ID0gdmlldzsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PFBhZ2VDbGllbnRRV2lkZ2V0Kj4oZC0+Y2xpZW50LmRhdGEoKSktPnZpZXcg
PSB2aWV3OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHZpZXcpCi0gICAgICAg
IGQtPmNsaWVudCA9IGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50UVdpZGdldCh2aWV3LCB0aGlzKSk7
CisgICAgICAgIGQtPmNsaWVudC5yZXNldChuZXcgUGFnZUNsaWVudFFXaWRnZXQodmlldywgdGhp
cykpOwogfQogCiAvKiEKQEAgLTIwODgsOCArMjMyNyw3IEBAIHZvaWQgUVdlYlBhZ2U6OmphdmFT
Y3JpcHRBbGVydChRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2cpCiB7CiAgICAg
UV9VTlVTRUQoZnJhbWUpCiAjaWZuZGVmIFFUX05PX01FU1NBR0VCT1gKLSAgICBRV2lkZ2V0KiBw
YXJlbnQgPSAoZC0+Y2xpZW50KSA/IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDA7Ci0gICAg
UU1lc3NhZ2VCb3ggYm94KHBhcmVudCk7CisgICAgUU1lc3NhZ2VCb3ggYm94KHZpZXcoKSk7CiAg
ICAgYm94LnNldFdpbmRvd1RpdGxlKHRyKCJKYXZhU2NyaXB0IEFsZXJ0IC0gJTEiKS5hcmcobWFp
bkZyYW1lKCktPnVybCgpLmhvc3QoKSkpOwogICAgIGJveC5zZXRUZXh0Rm9ybWF0KFF0OjpQbGFp
blRleHQpOwogICAgIGJveC5zZXRUZXh0KG1zZyk7CkBAIC0yMTEwLDggKzIzNDgsNyBAQCBib29s
IFFXZWJQYWdlOjpqYXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRU3Ry
aW5nJiBtc2cpCiAjaWZkZWYgUVRfTk9fTUVTU0FHRUJPWAogICAgIHJldHVybiB0cnVlOwogI2Vs
c2UKLSAgICBRV2lkZ2V0KiBwYXJlbnQgPSAoZC0+Y2xpZW50KSA/IGQtPmNsaWVudC0+b3duZXJX
aWRnZXQoKSA6IDA7Ci0gICAgUU1lc3NhZ2VCb3ggYm94KHBhcmVudCk7CisgICAgUU1lc3NhZ2VC
b3ggYm94KHZpZXcoKSk7CiAgICAgYm94LnNldFdpbmRvd1RpdGxlKHRyKCJKYXZhU2NyaXB0IENv
bmZpcm0gLSAlMSIpLmFyZyhtYWluRnJhbWUoKS0+dXJsKCkuaG9zdCgpKSk7CiAgICAgYm94LnNl
dFRleHRGb3JtYXQoUXQ6OlBsYWluVGV4dCk7CiAgICAgYm94LnNldFRleHQobXNnKTsKQEAgLTIx
MzYsOCArMjM3Myw3IEBAIGJvb2wgUVdlYlBhZ2U6OmphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1l
ICpmcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyCiAgICAgYm9vbCBvayA9IGZh
bHNlOwogI2lmbmRlZiBRVF9OT19JTlBVVERJQUxPRwogCi0gICAgUVdpZGdldCogcGFyZW50ID0g
KGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIFFJbnB1dERp
YWxvZyBkbGcocGFyZW50KTsKKyAgICBRSW5wdXREaWFsb2cgZGxnKHZpZXcoKSk7CiAgICAgZGxn
LnNldFdpbmRvd1RpdGxlKHRyKCJKYXZhU2NyaXB0IFByb21wdCAtICUxIikuYXJnKG1haW5GcmFt
ZSgpLT51cmwoKS5ob3N0KCkpKTsKIAogICAgIC8vIEhhY2sgdG8gZm9yY2UgdGhlIGRpYWxvZydz
IFFMYWJlbCBpbnRvIHBsYWluIHRleHQgbW9kZQpAQCAtMjE4MSw4ICsyNDE3LDcgQEAgYm9vbCBR
V2ViUGFnZTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCiAjaWZkZWYgUVRfTk9fTUVTU0FH
RUJPWAogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgUVdpZGdldCogcGFyZW50ID0gKGQt
PmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIHJldHVybiBRTWVz
c2FnZUJveDo6WWVzID09IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbihwYXJlbnQsIHRyKCJKYXZh
U2NyaXB0IFByb2JsZW0gLSAlMSIpLmFyZyhtYWluRnJhbWUoKS0+dXJsKCkuaG9zdCgpKSwgdHIo
IlRoZSBzY3JpcHQgb24gdGhpcyBwYWdlIGFwcGVhcnMgdG8gaGF2ZSBhIHByb2JsZW0uIERvIHlv
dSB3YW50IHRvIHN0b3AgdGhlIHNjcmlwdD8iKSwgUU1lc3NhZ2VCb3g6OlllcywgUU1lc3NhZ2VC
b3g6Ok5vKTsKKyAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5m
b3JtYXRpb24odmlldygpLCB0cigiSmF2YVNjcmlwdCBQcm9ibGVtIC0gJTEiKS5hcmcobWFpbkZy
YW1lKCktPnVybCgpLmhvc3QoKSksIHRyKCJUaGUgc2NyaXB0IG9uIHRoaXMgcGFnZSBhcHBlYXJz
IHRvIGhhdmUgYSBwcm9ibGVtLiBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBzY3JpcHQ/IiksIFFN
ZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7CiAjZW5kaWYKIH0KIApAQCAtMjE5Nyw3
ICsyNDMyLDggQEAgdm9pZCBRV2ViUGFnZTo6c2V0RmVhdHVyZVBlcm1pc3Npb24oUVdlYkZyYW1l
KiBmcmFtZSwgRmVhdHVyZSBmZWF0dXJlLCBQZXJtaXNzaW8KICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBHZW9sb2NhdGlvbjoKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgICAgIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+
c2V0UGVybWlzc2lvbihmcmFtZSwgcG9saWN5KTsKKyAgICAgICAgaWYgKHBvbGljeSAhPSBQZXJt
aXNzaW9uVW5rbm93bikKKyAgICAgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+c2V0UGVybWlzc2lvbihmcmFtZS0+ZCwg
KHBvbGljeSA9PSBQZXJtaXNzaW9uR3JhbnRlZEJ5VXNlcikpOwogI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogCkBAIC0yNDYxLDIwICsyNjk3LDE0NiBAQCBRQ29sb3IgUVdlYlBhZ2VQcml2YXRlOjpj
b2xvclNlbGVjdGlvblJlcXVlc3RlZChjb25zdCBRQ29sb3IgJnNlbGVjdGVkQ29sb3IpCiB7CiAg
ICAgUUNvbG9yIHJldCA9IHNlbGVjdGVkQ29sb3I7CiAjaWZuZGVmIFFUX05PX0NPTE9SRElBTE9H
Ci0gICAgUVdpZGdldCogcGFyZW50ID0gKGNsaWVudCkgPyBjbGllbnQtPm93bmVyV2lkZ2V0KCkg
OiAwOwotICAgIHJldCA9IFFDb2xvckRpYWxvZzo6Z2V0Q29sb3Ioc2VsZWN0ZWRDb2xvciwgcGFy
ZW50KTsKKyAgICByZXQgPSBRQ29sb3JEaWFsb2c6OmdldENvbG9yKHNlbGVjdGVkQ29sb3IsIHEt
PnZpZXcoKSk7CiAgICAgaWYgKCFyZXQuaXNWYWxpZCgpKQogICAgICAgICByZXQgPSBzZWxlY3Rl
ZENvbG9yOwogI2VuZGlmCiAgICAgcmV0dXJuIHJldDsKIH0KIAorUVdlYlNlbGVjdE1ldGhvZCAq
UVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVTZWxlY3RQb3B1cCgpCit7CisgICAgcmV0dXJuIG5ldyBR
dEZhbGxiYWNrV2ViUG9wdXAodGhpcyk7Cit9CisKK1FSZWN0IFFXZWJQYWdlUHJpdmF0ZTo6dmll
d1JlY3RSZWxhdGl2ZVRvV2luZG93KCkKK3sKKworICAgIFFXaWRnZXQqIG93bmVyV2lkZ2V0PSBj
bGllbnQuaXNOdWxsKCkgPyAwIDogcW9iamVjdF9jYXN0PFFXaWRnZXQqPihjbGllbnQtPm93bmVy
V2lkZ2V0KCkpOworICAgIGlmICghb3duZXJXaWRnZXQpCisgICAgICAgIHJldHVybiBRUmVjdCgp
OworICAgIFFXaWRnZXQqIHRvcExldmVsV2lkZ2V0ID0gb3duZXJXaWRnZXQtPndpbmRvdygpOwor
CisgICAgUVBvaW50IHRvcExlZnRDb3JuZXIgPSB0b3BMZXZlbFdpZGdldC0+bWFwRnJvbShvd25l
cldpZGdldCwgUVBvaW50KDAsIDApKTsKKyAgICByZXR1cm4gUVJlY3QodG9wTGVmdENvcm5lciwg
b3duZXJXaWRnZXQtPnNpemUoKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpnZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUpCit7CisgICAg
ZW1pdCBxLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVQcml2YXRlOjpraXQo
ZnJhbWUpLCBRV2ViUGFnZTo6R2VvbG9jYXRpb24pOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdENhbmNlbGxlZChRV2ViRnJhbWVBZGFwdGVy
KiBmcmFtZSkKK3sKKyAgICBlbWl0IHEtPmZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVk
KFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIFFXZWJQYWdlOjpHZW9sb2NhdGlvbik7Cit9
CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpub3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3Rl
ZChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSkKK3sKKyAgICBlbWl0IHEtPmZlYXR1cmVQZXJtaXNz
aW9uUmVxdWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIFFXZWJQYWdlOjpOb3Rp
ZmljYXRpb25zKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6Om5vdGlmaWNhdGlvbnNQZXJt
aXNzaW9uUmVxdWVzdENhbmNlbGxlZChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSkKK3sKKyAgICBl
bWl0IHEtPmZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVkKFFXZWJGcmFtZVByaXZhdGU6
OmtpdChmcmFtZSksIFFXZWJQYWdlOjpOb3RpZmljYXRpb25zKTsKK30KKwordm9pZCBRV2ViUGFn
ZVByaXZhdGU6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCit7CisgICAgdXBkYXRlRWRpdG9y
QWN0aW9ucygpOworCisgICAgZW1pdCBxLT5jb250ZW50c0NoYW5nZWQoKTsKK30KKwordm9pZCBR
V2ViUGFnZVByaXZhdGU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQoreworICAgIHVwZGF0
ZUVkaXRvckFjdGlvbnMoKTsKKyAgICBlbWl0IHEtPnNlbGVjdGlvbkNoYW5nZWQoKTsKK30KKwor
dm9pZCBRV2ViUGFnZVByaXZhdGU6Om1pY3JvRm9jdXNDaGFuZ2VkKCkKK3sKKyAgICBlbWl0IHEt
Pm1pY3JvRm9jdXNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjp0cmlnZ2Vy
Q29weUFjdGlvbigpCit7CisgICAgcS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6Q29weSk7Cit9
CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjp0cmlnZ2VyQWN0aW9uRm9yS2V5RXZlbnQoUUtleUV2
ZW50KiBldmVudCkKK3sKKyAgICBRV2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlvbiA9IGVkaXRvckFj
dGlvbkZvcktleUV2ZW50KGV2ZW50KTsKKyAgICBxLT50cmlnZ2VyQWN0aW9uKGFjdGlvbik7Cit9
CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpjbGVhclVuZG9TdGFjaygpCit7CisjaWZuZGVmIFFU
X05PX1VORE9TVEFDSworICAgIGlmICh1bmRvU3RhY2spCisgICAgICAgIHVuZG9TdGFjay0+Y2xl
YXIoKTsKKyNlbmRpZgorfQorCitib29sIFFXZWJQYWdlUHJpdmF0ZTo6Y2FuVW5kbygpIGNvbnN0
Cit7CisjaWZuZGVmIFFUX05PX1VORE9TVEFDSworICAgIGlmICghdW5kb1N0YWNrKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHVuZG9TdGFjay0+Y2FuVW5kbygpOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBRV2ViUGFnZVByaXZhdGU6OmNh
blJlZG8oKSBjb25zdAoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBpZiAoIXVuZG9T
dGFjaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1bmRvU3RhY2stPmNhblJl
ZG8oKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgUVdlYlBh
Z2VQcml2YXRlOjp1bmRvKCkKK3sKKyNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCisgICAgaWYgKHVu
ZG9TdGFjaykKKyAgICAgICAgdW5kb1N0YWNrLT51bmRvKCk7CisjZW5kaWYKK30KKwordm9pZCBR
V2ViUGFnZVByaXZhdGU6OnJlZG8oKQoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBp
ZiAodW5kb1N0YWNrKQorICAgICAgICB1bmRvU3RhY2stPnJlZG8oKTsKKyNlbmRpZgorfQorCit2
b2lkIFFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlVW5kb1N0ZXAoUVNoYXJlZFBvaW50ZXI8VW5kb1N0
ZXBRdD4gc3RlcCkKK3sKKyNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCisgICAgLy8gQ2FsbCB1bmRv
U3RhY2soKSBnZXR0ZXIgZmlyc3QgdG8gZW5zdXJlIHN0YWNrIGlzIGNyZWF0ZWQKKyAgICAvLyBp
ZiBpdCBkb2Vzbid0IGV4aXN0IHlldC4KKyAgICBxLT51bmRvU3RhY2soKS0+cHVzaChuZXcgUVdl
YlVuZG9Db21tYW5kKHN0ZXApKTsKKyNlbmRpZgorfQorCitjb25zdCBjaGFyICpRV2ViUGFnZVBy
aXZhdGU6OmVkaXRvckNvbW1hbmRGb3JLZXlFdmVudChRS2V5RXZlbnQqIGV2ZW50KQoreworICAg
IFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gZWRpdG9yQWN0aW9uRm9yS2V5RXZlbnQoZXZl
bnQpOworICAgIHJldHVybiBlZGl0b3JDb21tYW5kRm9yV2ViQWN0aW9ucyhhY3Rpb24pOworfQor
CiBRU2l6ZSBRV2ViUGFnZTo6dmlld3BvcnRTaXplKCkgY29uc3QKIHsKICAgICBpZiAoZC0+bWFp
bkZyYW1lICYmIGQtPm1haW5GcmFtZS5kYXRhKCktPmQtPmZyYW1lLT52aWV3KCkpCiAgICAgICAg
IHJldHVybiBkLT5tYWluRnJhbWUuZGF0YSgpLT5kLT5mcmFtZS0+dmlldygpLT5mcmFtZVJlY3Qo
KS5zaXplKCk7CiAKLSAgICByZXR1cm4gZC0+dmlld3BvcnRTaXplOworICAgIHJldHVybiBkLT5t
X3ZpZXdwb3J0U2l6ZTsKIH0KIAogLyohCkBAIC0yNDkxLDcgKzI4NTMsNyBAQCBRU2l6ZSBRV2Vi
UGFnZTo6dmlld3BvcnRTaXplKCkgY29uc3QKICovCiB2b2lkIFFXZWJQYWdlOjpzZXRWaWV3cG9y
dFNpemUoY29uc3QgUVNpemUgJnNpemUpIGNvbnN0CiB7Ci0gICAgZC0+dmlld3BvcnRTaXplID0g
c2l6ZTsKKyAgICBkLT5tX3ZpZXdwb3J0U2l6ZSA9IHNpemU7CiAKICAgICBRV2ViRnJhbWUgKmZy
YW1lID0gbWFpbkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lLT5kLT5mcmFtZSAmJiBmcmFtZS0+ZC0+
ZnJhbWUtPnZpZXcoKSkgewpAQCAtMjU3Nyw3ICsyOTM5LDcgQEAgUVdlYlBhZ2U6OlZpZXdwb3J0
QXR0cmlidXRlcyBRV2ViUGFnZTo6dmlld3BvcnRBdHRyaWJ1dGVzRm9yU2l6ZShjb25zdCBRU2l6
ZSYgYXYKIAogICAgIC8vIEJvdGggZW52aXJvbm1lbnQgdmFyaWFibGVzIG5lZWQgdG8gYmUgc2V0
IC0gb3IgdGhleSB3aWxsIGJlIGlnbm9yZWQuCiAgICAgaWYgKGRldmljZVdpZHRoIDwgMCAmJiBk
ZXZpY2VIZWlnaHQgPCAwKSB7Ci0gICAgICAgIFFTaXplIHNpemUgPSBxdWVyeURldmljZVNpemVG
b3JTY3JlZW5Db250YWluaW5nV2lkZ2V0KChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldp
ZGdldCgpIDogMCk7CisgICAgICAgIFFTaXplIHNpemUgPSBxdWVyeURldmljZVNpemVGb3JTY3Jl
ZW5Db250YWluaW5nV2lkZ2V0KHZpZXcoKSk7CiAgICAgICAgIGRldmljZVdpZHRoID0gc2l6ZS53
aWR0aCgpOwogICAgICAgICBkZXZpY2VIZWlnaHQgPSBzaXplLmhlaWdodCgpOwogICAgIH0KQEAg
LTMwOTMsMTggKzM0NTUsMzggQEAgYm9vbCBRV2ViUGFnZTo6ZXZlbnQoUUV2ZW50ICpldikKICAg
ICAgICAgZC0+bW91c2VSZWxlYXNlRXZlbnQoc3RhdGljX2Nhc3Q8UU1vdXNlRXZlbnQqPihldikp
OwogICAgICAgICBicmVhazsKICNpZiAhZGVmaW5lZChRVF9OT19HUkFQSElDU1ZJRVcpCi0gICAg
Y2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZU1vdmU6Ci0gICAgICAgIGQtPm1vdXNlTW92
ZUV2ZW50KHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KSk7CisgICAg
Y2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZU1vdmU6IHsKKyAgICAgICAgUUdyYXBoaWNz
U2NlbmVNb3VzZUV2ZW50ICpnc0V2ID0gc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2
ZW50Kj4oZXYpOworICAgICAgICBRTW91c2VFdmVudCBkdW1teUV2ZW50KFFFdmVudDo6TW91c2VN
b3ZlLCBnc0V2LT5wb3MoKSwgZ3NFdi0+c2NyZWVuUG9zKCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIGdzRXYtPmJ1dHRvbigpLCBnc0V2LT5idXR0b25zKCksIGdzRXYtPm1vZGlm
aWVycygpKTsKKyAgICAgICAgZC0+bW91c2VNb3ZlRXZlbnQoJmR1bW15RXZlbnQpOworICAgICAg
ICBldi0+c2V0QWNjZXB0ZWQoZHVtbXlFdmVudC5pc0FjY2VwdGVkKCkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlUHJlc3M6Ci0gICAgICAgIGQt
Pm1vdXNlUHJlc3NFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihl
dikpOworICAgIH0KKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlUmVsZWFzZTog
eworICAgICAgICBRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQgKmdzRXYgPSBzdGF0aWNfY2FzdDxR
R3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldik7CisgICAgICAgIFFNb3VzZUV2ZW50IGR1bW15
RXZlbnQoUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UsIGdzRXYtPnBvcygpLCBnc0V2LT5zY3Jl
ZW5Qb3MoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZ3NFdi0+YnV0dG9uKCks
IGdzRXYtPmJ1dHRvbnMoKSwgZ3NFdi0+bW9kaWZpZXJzKCkpOworICAgICAgICBkLT5tb3VzZVJl
bGVhc2VFdmVudCgmZHVtbXlFdmVudCk7CisgICAgICAgIGV2LT5zZXRBY2NlcHRlZChkdW1teUV2
ZW50LmlzQWNjZXB0ZWQoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFw
aGljc1NjZW5lTW91c2VEb3VibGVDbGljazoKLSAgICAgICAgZC0+bW91c2VEb3VibGVDbGlja0V2
ZW50KHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KSk7CisgICAgfQor
ICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VQcmVzczogeworICAgICAgICBRR3Jh
cGhpY3NTY2VuZU1vdXNlRXZlbnQgKmdzRXYgPSBzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1v
dXNlRXZlbnQqPihldik7CisgICAgICAgIFFNb3VzZUV2ZW50IGR1bW15RXZlbnQoUUV2ZW50OjpN
b3VzZUJ1dHRvblByZXNzLCBnc0V2LT5wb3MoKSwgZ3NFdi0+c2NyZWVuUG9zKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIGdzRXYtPmJ1dHRvbigpLCBnc0V2LT5idXR0b25zKCks
IGdzRXYtPm1vZGlmaWVycygpKTsKKyAgICAgICAgZC0+bW91c2VQcmVzc0V2ZW50KCZkdW1teUV2
ZW50KTsKKyAgICAgICAgZXYtPnNldEFjY2VwdGVkKGR1bW15RXZlbnQuaXNBY2NlcHRlZCgpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVJlbGVh
c2U6Ci0gICAgICAgIGQtPm1vdXNlUmVsZWFzZUV2ZW50KHN0YXRpY19jYXN0PFFHcmFwaGljc1Nj
ZW5lTW91c2VFdmVudCo+KGV2KSk7CisgICAgfQorICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1Nj
ZW5lTW91c2VEb3VibGVDbGljazogeworICAgICAgICBRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQg
KmdzRXYgPSBzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldik7CisgICAg
ICAgIFFNb3VzZUV2ZW50IGR1bW15RXZlbnQoUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrLCBn
c0V2LT5wb3MoKSwgZ3NFdi0+c2NyZWVuUG9zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIGdzRXYtPmJ1dHRvbigpLCBnc0V2LT5idXR0b25zKCksIGdzRXYtPm1vZGlmaWVycygp
KTsKKyAgICAgICAgZC0+bW91c2VEb3VibGVDbGlja0V2ZW50KCZkdW1teUV2ZW50KTsKKyAgICAg
ICAgZXYtPnNldEFjY2VwdGVkKGR1bW15RXZlbnQuaXNBY2NlcHRlZCgpKTsKICAgICAgICAgYnJl
YWs7CisgICAgfQogI2VuZGlmCiAjaWZuZGVmIFFUX05PX0NPTlRFWFRNRU5VCiAgICAgY2FzZSBR
RXZlbnQ6OkNvbnRleHRNZW51OgpAQCAtMzEyMSw5ICszNTAzLDEzIEBAIGJvb2wgUVdlYlBhZ2U6
OmV2ZW50KFFFdmVudCAqZXYpCiAgICAgICAgIGQtPndoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8UVdo
ZWVsRXZlbnQqPihldikpOwogICAgICAgICBicmVhazsKICNpZiAhZGVmaW5lZChRVF9OT19HUkFQ
SElDU1ZJRVcpCi0gICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVXaGVlbDoKLSAgICAgICAg
ZC0+d2hlZWxFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQqPihldikp
OworICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lV2hlZWw6IHsKKyAgICAgICAgUUdyYXBo
aWNzU2NlbmVXaGVlbEV2ZW50ICpnc0V2ID0gc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVXaGVl
bEV2ZW50Kj4oZXYpOworICAgICAgICBRV2hlZWxFdmVudCBkdW1teUV2ZW50KGdzRXYtPnBvcygp
LCBnc0V2LT5zY3JlZW5Qb3MoKSwgZ3NFdi0+ZGVsdGEoKSwgZ3NFdi0+YnV0dG9ucygpLCBnc0V2
LT5tb2RpZmllcnMoKSwgZ3NFdi0+b3JpZW50YXRpb24oKSk7CisgICAgICAgIGQtPndoZWVsRXZl
bnQoJmR1bW15RXZlbnQpOworICAgICAgICBldi0+c2V0QWNjZXB0ZWQoZHVtbXlFdmVudC5pc0Fj
Y2VwdGVkKCkpOwogICAgICAgICBicmVhazsKKyAgICB9CiAjZW5kaWYKICNlbmRpZgogICAgIGNh
c2UgUUV2ZW50OjpLZXlQcmVzczoKQEAgLTM2MzksOCArNDAyNSw3IEBAIGJvb2wgUVdlYlBhZ2U6
OmV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24gKm9w
dGlvbiwgRXh0CiAgICAgaWYgKGV4dGVuc2lvbiA9PSBDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5z
aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBkbyBub3QgaWdub3JlIHN1Z2dlc3RlZEZpbGVzCiAg
ICAgICAgIFFTdHJpbmdMaXN0IHN1Z2dlc3RlZEZpbGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ2hv
b3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbk9wdGlvbio+KG9wdGlvbiktPnN1Z2dlc3RlZEZpbGVO
YW1lczsKLSAgICAgICAgUVdpZGdldCogcGFyZW50ID0gKGQtPmNsaWVudCkgPyBkLT5jbGllbnQt
Pm93bmVyV2lkZ2V0KCkgOiAwOwotICAgICAgICBRU3RyaW5nTGlzdCBuYW1lcyA9IFFGaWxlRGlh
bG9nOjpnZXRPcGVuRmlsZU5hbWVzKHBhcmVudCwgUVN0cmluZzo6bnVsbCk7CisgICAgICAgIFFT
dHJpbmdMaXN0IG5hbWVzID0gUUZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZXModmlldygpLCBR
U3RyaW5nOjpudWxsKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8Q2hvb3NlTXVsdGlwbGVGaWxlc0V4
dGVuc2lvblJldHVybio+KG91dHB1dCktPmZpbGVOYW1lcyA9IG5hbWVzOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0zNjY1LDYgKzQwNTAsMTQgQEAgYm9vbCBRV2ViUGFnZTo6c3Vw
cG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKIH0KIAogLyohCisgKiBc
aW50ZXJuYWwKKyAqLworUVdlYlBhZ2VBZGFwdGVyICpRV2ViUGFnZTo6aGFuZGxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZDsKK30KKworLyohCiAgICAgRmluZHMgdGhlIHNwZWNpZmllZCBzdHJp
bmcsIFxhIHN1YlN0cmluZywgaW4gdGhlIHBhZ2UsIHVzaW5nIHRoZSBnaXZlbiBcYSBvcHRpb25z
LgogCiAgICAgSWYgdGhlIEhpZ2hsaWdodEFsbE9jY3VycmVuY2VzIGZsYWcgaXMgcGFzc2VkLCB0
aGUgZnVuY3Rpb24gd2lsbCBoaWdobGlnaHQgYWxsIG9jY3VycmVuY2VzCkBAIC0zNzMyLDggKzQx
MjUsNyBAQCBRU3RyaW5nIFFXZWJQYWdlOjpjaG9vc2VGaWxlKFFXZWJGcmFtZSAqcGFyZW50RnJh
bWUsIGNvbnN0IFFTdHJpbmcmIHN1Z2dlc3RlZEZpbAogewogICAgIFFfVU5VU0VEKHBhcmVudEZy
YW1lKQogI2lmbmRlZiBRVF9OT19GSUxFRElBTE9HCi0gICAgUVdpZGdldCogcGFyZW50ID0gKGQt
PmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIHJldHVybiBRRmls
ZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKHBhcmVudCwgUVN0cmluZzo6bnVsbCwgc3VnZ2VzdGVk
RmlsZSk7CisgICAgcmV0dXJuIFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUodmlldygpLCBR
U3RyaW5nOjpudWxsLCBzdWdnZXN0ZWRGaWxlKTsKICNlbHNlCiAgICAgcmV0dXJuIFFTdHJpbmc6
Om51bGw7CiAjZW5kaWYKQEAgLTM3NTAsMTEgKzQxNDIsNyBAQCBRU3RyaW5nIFFXZWJQYWdlOjpj
aG9vc2VGaWxlKFFXZWJGcmFtZSAqcGFyZW50RnJhbWUsIGNvbnN0IFFTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbAogKi8KIHZvaWQgUVdlYlBhZ2U6OnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFOZXR3b3Jr
QWNjZXNzTWFuYWdlciAqbWFuYWdlcikKIHsKLSAgICBpZiAobWFuYWdlciA9PSBkLT5uZXR3b3Jr
TWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkLT5uZXR3b3JrTWFuYWdlciAmJiBk
LT5uZXR3b3JrTWFuYWdlci0+cGFyZW50KCkgPT0gdGhpcykKLSAgICAgICAgZGVsZXRlIGQtPm5l
dHdvcmtNYW5hZ2VyOwotICAgIGQtPm5ldHdvcmtNYW5hZ2VyID0gbWFuYWdlcjsKKyAgICBkLT5z
ZXROZXR3b3JrQWNjZXNzTWFuYWdlcihtYW5hZ2VyKTsKIH0KIAogLyohCkBAIC0zNzY1LDExICs0
MTUzLDcgQEAgdm9pZCBRV2ViUGFnZTo6c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyICptYW5hZ2VyKQogKi8KIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqUVdlYlBh
Z2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QKIHsKLSAgICBpZiAoIWQtPm5ldHdvcmtN
YW5hZ2VyKSB7Ci0gICAgICAgIFFXZWJQYWdlICp0aGF0ID0gY29uc3RfY2FzdDxRV2ViUGFnZSAq
Pih0aGlzKTsKLSAgICAgICAgdGhhdC0+ZC0+bmV0d29ya01hbmFnZXIgPSBuZXcgUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKHRoYXQpOwotICAgIH0KLSAgICByZXR1cm4gZC0+bmV0d29ya01hbmFnZXI7
CisgICAgcmV0dXJuIGQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7CiB9CiAKIC8qIQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmgKaW5kZXggYjJjYWExMzFkZWE2NTA1ZTVmMGFiNDdkY2Q0OTE3NWMyNWUx
ODE3Yy4uZjk3NWFiMDU2NzdjY2Y1YmQzMmIzZDJhNWY3ZjRiNGExNWNiN2I3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5oCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFFXZWJGcmFtZURhdGE7CiBj
bGFzcyBRV2ViSGlzdG9yeUl0ZW07CiBjbGFzcyBRV2ViSGl0VGVzdFJlc3VsdDsKIGNsYXNzIFFX
ZWJOZXR3b3JrSW50ZXJmYWNlOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogY2xhc3MgUVdlYlBh
Z2VQcml2YXRlOwogY2xhc3MgUVdlYlBsdWdpbkZhY3Rvcnk7CiBjbGFzcyBRV2ViU2VjdXJpdHlP
cmlnaW47CkBAIC0zNjUsNyArMzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBleHRl
bnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbiwgY29uc3QgRXh0ZW5zaW9uT3B0aW9uICpvcHRpb24g
PSAwLCBFeHRlbnNpb25SZXR1cm4gKm91dHB1dCA9IDApOwogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdDsKIAotICAgIGlubGluZSBR
V2ViUGFnZVByaXZhdGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KKyAgICBRV2ViUGFn
ZUFkYXB0ZXIqIGhhbmRsZSgpIGNvbnN0OwogCiBwdWJsaWMgUV9TTE9UUzoKICAgICBib29sIHNo
b3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlX3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAppbmRl
eCA3OTQzMjI5OTEzMjFiZjdhMDBjMzY2MmI5YWI5MjZmODA3ZGMzNDAyLi4xZmE4YmJjODhhMmRm
NWM3NDQ3ZTg0N2Y2NGI5NDcyNzY0MjdmMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5o
CkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIFFXRUJQQUdFX1BfSAogI2RlZmluZSBRV0VCUEFH
RV9QX0gKIAorI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSA8UVBvaW50ZXI+CiAKICNp
bmNsdWRlIDxxYmFzaWN0aW1lci5oPgpAQCAtMjgsMjIgKzMwLDE1IEBACiAjaW5jbHVkZSA8cWV2
ZW50Lmg+CiAjaW5jbHVkZSA8cWdlc3R1cmUuaD4KICNpbmNsdWRlIDxxZ3JhcGhpY3NzY2VuZWV2
ZW50Lmg+CisjaW5jbHVkZSA8cWdyYXBoaWNzd2lkZ2V0Lmg+CiAKICNpbmNsdWRlICJxd2VicGFn
ZS5oIgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5LmgiCiAjaW5jbHVkZSAicXdlYmZyYW1lLmgiCiAK
LSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLQotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgorI2luY2x1ZGUg
PFFXZWJQYWdlQWRhcHRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQ2hy
b21lQ2xpZW50UXQ7CiAgICAgY2xhc3MgQ29udGV4dE1lbnVDbGllbnRRdDsKICAgICBjbGFzcyBD
b250ZXh0TWVudUl0ZW07CiAgICAgY2xhc3MgQ29udGV4dE1lbnU7CkBAIC01NCw3ICs0OSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIE5vZGU7
CiAgICAgY2xhc3MgTm9kZUxpc3Q7Ci0gICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBGcmFtZTsK
IH0KIApAQCAtNjQsOCArNTgsMTAgQEAgY2xhc3MgUU1lbnU7CiBjbGFzcyBRQml0QXJyYXk7CiBR
VF9FTkRfTkFNRVNQQUNFCiAKK2NsYXNzIFF0UGx1Z2luV2lkZ2V0QWRhcHRlcjsKIGNsYXNzIFFX
ZWJJbnNwZWN0b3I7Ci1jbGFzcyBRV2ViUGFnZUNsaWVudDsKK2NsYXNzIFFXZWJGcmFtZUFkYXB0
ZXI7CitjbGFzcyBVbmRvU3RlcFF0OwogCiBjbGFzcyBRdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZh
dGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgewogcHVibGljOgpAQCAtNzYsMTMgKzcyLDczIEBAIHB1
YmxpYzoKICAgICBRV2ViUGFnZTo6Vmlld3BvcnRBdHRyaWJ1dGVzKiBxOwogfTsKIAotY2xhc3Mg
UVdlYlBhZ2VQcml2YXRlIHsKK2NsYXNzIFFXZWJQYWdlUHJpdmF0ZSA6IHB1YmxpYyBRV2ViUGFn
ZUFkYXB0ZXIgewogcHVibGljOgogICAgIFFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnZSopOwogICAg
IH5RV2ViUGFnZVByaXZhdGUoKTsKIAogICAgIHN0YXRpYyBXZWJDb3JlOjpQYWdlKiBjb3JlKGNv
bnN0IFFXZWJQYWdlKik7Ci0gICAgc3RhdGljIFFXZWJQYWdlUHJpdmF0ZSogcHJpdihRV2ViUGFn
ZSopOworCisgICAgLy8gQWRhcHRlciBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgdm9pZCBz
aG93KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
V2luZG93UmVjdChjb25zdCBRUmVjdCAmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFFTaXplIHZp
ZXdwb3J0U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUVdlYlBhZ2VBZGFwdGVy
KiBjcmVhdGVXaW5kb3coYm9vbCAvKmRpYWxvZyovKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFFP
YmplY3QqIGhhbmRsZSgpIE9WRVJSSURFIHsgcmV0dXJuIHE7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
amF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5l
TnVtYmVyLCBjb25zdCBRU3RyaW5nJiBzb3VyY2VJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGphdmFTY3JpcHRBbGVydChRV2ViRnJhbWVBZGFwdGVyICpmcmFtZSwgY29uc3QgUVN0cmlu
ZyYgbXNnKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgamF2YVNjcmlwdENvbmZpcm0oUVdl
YkZyYW1lQWRhcHRlciAqZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIGphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1lQWRhcHRlciAqZnJhbWUsIGNv
bnN0IFFTdHJpbmcmIG1zZywgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBRU3RyaW5nKiBy
ZXN1bHQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwcmludFJlcXVlc3RlZChRV2ViRnJh
bWVBZGFwdGVyICpmcmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlUXVv
dGFFeGNlZWRlZChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZGF0YWJh
c2VOYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbGljYXRpb25DYWNoZVF1b3Rh
RXhjZWVkZWQoUVdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHF1aW50NjQgZGVmYXVsdE9yaWdp
blF1b3RhLCBxdWludDY0IHRvdGFsU3BhY2VOZWVkZWQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRUb29sVGlwKGNvbnN0IFFTdHJpbmcmKSBPVkVSUklERTsKKyNpZiBVU0UoUVRfTVVM
VElNRURJQSkKKyAgICB2aXJ0dWFsIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkgT1ZFUlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIFFX
ZWJGcmFtZUFkYXB0ZXIqIG1haW5GcmFtZUFkYXB0ZXIoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFFTdHJpbmdMaXN0IGNob29zZUZpbGVzKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lLCBib29sIGFs
bG93TXVsdGlwbGUsIGNvbnN0IFFTdHJpbmdMaXN0JiBzdWdnZXN0ZWRGaWxlTmFtZXMpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUUNvbG9yIGNvbG9yU2VsZWN0aW9uUmVxdWVzdGVkKGNvbnN0IFFD
b2xvciYgc2VsZWN0ZWRDb2xvcikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRV2ViU2VsZWN0TWV0
aG9kKiBjcmVhdGVTZWxlY3RQb3B1cCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUVJlY3Qgdmll
d1JlY3RSZWxhdGl2ZVRvV2luZG93KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDYW5jZWxsZWQoUVdl
YkZyYW1lQWRhcHRlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25z
UGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIG5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGxlZChRV2ViRnJh
bWVBZGFwdGVyKikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdl
ZENvbnRlbnRzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgbWljcm9Gb2N1c0NoYW5nZWQo
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJpZ2dlckNvcHlBY3Rpb24oKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJpZ2dlckFjdGlvbkZvcktleUV2ZW50KFFLZXlFdmVudCop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9TdGFjaygpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIGNhblJlZG8oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5kbygpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWRvKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVVuZG9TdGVwKFFTaGFyZWRQb2ludGVyPFVuZG9TdGVwUXQ+KSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGVkaXRvckNvbW1hbmRGb3JLZXlFdmVudChRS2V5RXZl
bnQqKSBPVkVSUklERTsKKworICAgIHZvaWQgdXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgUU9iamVjdCogaW5zcGVjdG9ySGFuZGxlKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kKFFPYmplY3QqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdG9yV2luZG93VGl0bGUoY29uc3QgUVN0cmlu
ZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVXZWJJbnNwZWN0b3IoUU9iamVj
dCoqIGluc3BlY3RvclZpZXcsIFFXZWJQYWdlQWRhcHRlcioqIGluc3BlY3RvclBhZ2UpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgbWVudUFjdGlvbnNBc1RleHQoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZUFk
YXB0ZXIgKmZyYW1lLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIGludCB0eXBlKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFJlc3RvcmVGcmFtZVN0YXRlUmVxdWVzdGVk
KFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1p
dFNhdmVGcmFtZVN0YXRlUmVxdWVzdGVkKFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lLCBRV2ViSGlz
dG9yeUl0ZW0qIGl0ZW0pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbWl0RG93bmxvYWRS
ZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGVtaXRGcmFtZUNyZWF0ZWQoUVdlYkZyYW1lQWRhcHRlciAqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFFTdHJpbmcgdXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwgJnVybCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gcS0+dXNlckFnZW50Rm9yVXJsKHVybCk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNFcnJvclBhZ2VFeHRlbnNpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBx
LT5zdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uKTsgfQorICAg
IHZpcnR1YWwgYm9vbCBlcnJvclBhZ2VFeHRlbnNpb24oRXJyb3JQYWdlT3B0aW9uICosIEVycm9y
UGFnZVJldHVybiAqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFF0UGx1Z2luV2lkZ2V0QWRhcHRl
ciogY3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJpbmcgJiwgY29uc3QgUVVybCAmLCBjb25zdCBRU3Ry
aW5nTGlzdCAmLCBjb25zdCBRU3RyaW5nTGlzdCAmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFF0
UGx1Z2luV2lkZ2V0QWRhcHRlciogYWRhcHRlckZvcldpZGdldChRT2JqZWN0ICopIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgdm9pZCBjcmVhdGVNYWluRnJhbWUoKTsKICNpZm5kZWYgUVRfTk9fQ09O
VEVYVE1FTlUKQEAgLTkyLDIzICsxNDgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgX3Ffd2ViQWN0
aW9uVHJpZ2dlcmVkKGJvb2wgY2hlY2tlZCk7CiAgICAgdm9pZCBfcV9jbGVhbnVwTGVha01lc3Nh
Z2VzKCk7CiAgICAgdm9pZCB1cGRhdGVBY3Rpb24oUVdlYlBhZ2U6OldlYkFjdGlvbiBhY3Rpb24p
OwotICAgIHZvaWQgdXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKICAgICB2b2lkIHVwZGF0ZUVk
aXRvckFjdGlvbnMoKTsKIAotICAgIFFDb2xvciBjb2xvclNlbGVjdGlvblJlcXVlc3RlZChjb25z
dCBRQ29sb3ImIHNlbGVjdGVkQ29sb3IpOwotCiAgICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2
ZW50Kik7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIG1vdXNlTW92ZUV2ZW50KFQqKTsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIG1vdXNlUHJlc3NFdmVudChUKik7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgVD4gdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoVCopOwotICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IHZvaWQgbW91c2VUcmlwbGVDbGlja0V2ZW50KFQqKTsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBUPiB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFQqKTsKKyAgICB2b2lkIG1vdXNlTW92
ZUV2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZl
bnQqKTsKKyAgICB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCopOworICAg
IHZvaWQgbW91c2VUcmlwbGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBtb3Vz
ZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCopOwogI2lmbmRlZiBRVF9OT19DT05URVhUTUVOVQog
ICAgIHZvaWQgY29udGV4dE1lbnVFdmVudChjb25zdCBRUG9pbnQmIGdsb2JhbFBvcyk7CiAjZW5k
aWYKICNpZm5kZWYgUVRfTk9fV0hFRUxFVkVOVAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQg
d2hlZWxFdmVudChUKik7CisgICAgdm9pZCB3aGVlbEV2ZW50KFFXaGVlbEV2ZW50Kik7CiAjZW5k
aWYKICAgICB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7CiAgICAgdm9pZCBrZXlSZWxl
YXNlRXZlbnQoUUtleUV2ZW50Kik7CkBAIC0xNTksMTYgKzIxMiwxMiBAQCBwdWJsaWM6CiAgICAg
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAg
IHF1aW50MTYgaW5zcGVjdG9yU2VydmVyUG9ydCgpOwogCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHMoKTsKLQogI2lmbmRlZiBRVF9OT19TSE9SVENVVAog
ICAgIHN0YXRpYyBRV2ViUGFnZTo6V2ViQWN0aW9uIGVkaXRvckFjdGlvbkZvcktleUV2ZW50KFFL
ZXlFdmVudCogZXZlbnQpOwogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGVkaXRvckNv
bW1hbmRGb3JXZWJBY3Rpb25zKFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uKTsKIAogICAgIFFX
ZWJQYWdlICpxOwotICAgIFdlYkNvcmU6OlBhZ2UgKnBhZ2U7Ci0gICAgT3duUHRyPFFXZWJQYWdl
Q2xpZW50PiBjbGllbnQ7CiAgICAgUVBvaW50ZXI8UVdlYkZyYW1lPiBtYWluRnJhbWU7CiAKICNp
Zm5kZWYgUVRfTk9fVU5ET1NUQUNLCkBAIC0xNzcsNyArMjI2LDYgQEAgcHVibGljOgogCiAgICAg
UVBvaW50ZXI8UVdpZGdldD4gdmlldzsKIAotICAgIGJvb2wgaW5zaWRlT3BlbkNhbGw7CiAgICAg
cXVpbnQ2NCBtX3RvdGFsQnl0ZXM7CiAgICAgcXVpbnQ2NCBtX2J5dGVzUmVjZWl2ZWQ7CiAKQEAg
LTE4NiwxNSArMjM0LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBjbGlja0NhdXNlZEZvY3VzOwog
Ci0gICAgYm9vbCBhY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lLCBjb25z
dCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZSB0eXBl
KTsKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm5ldHdvcmtNYW5hZ2VyOwotCi0gICAgYm9v
bCBmb3J3YXJkVW5zdXBwb3J0ZWRDb250ZW50OwotICAgIGJvb2wgc21hcnRJbnNlcnREZWxldGVF
bmFibGVkOwotICAgIGJvb2wgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZDsKICAgICBR
V2ViUGFnZTo6TGlua0RlbGVnYXRpb25Qb2xpY3kgbGlua1BvbGljeTsKIAotICAgIFFTaXplIHZp
ZXdwb3J0U2l6ZTsKKyAgICBRU2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICAgICBRU2l6ZSBmaXhlZExh
eW91dFNpemU7CiAKICAgICBRV2ViSGlzdG9yeSBoaXN0b3J5OwpAQCAtMjAyLDIwICsyNDQsMTUg
QEAgcHVibGljOgogI2lmbmRlZiBRVF9OT19DT05URVhUTUVOVQogICAgIFFQb2ludGVyPFFNZW51
PiBjdXJyZW50Q29udGV4dE1lbnU7CiAjZW5kaWYKLSAgICBRV2ViU2V0dGluZ3MgKnNldHRpbmdz
OwogICAgIFFQYWxldHRlIHBhbGV0dGU7CiAgICAgYm9vbCB1c2VGaXhlZExheW91dDsKIAogICAg
IFFBY3Rpb24gKmFjdGlvbnNbUVdlYlBhZ2U6OldlYkFjdGlvbkNvdW50XTsKIAotICAgIFFXZWJQ
bHVnaW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5OwotCiAgICAgUVdpZGdldCogaW5zcGVjdG9yRnJv
bnRlbmQ7CiAgICAgUVdlYkluc3BlY3RvciogaW5zcGVjdG9yOwogICAgIGJvb2wgaW5zcGVjdG9y
SXNJbnRlcm5hbE9ubHk7IC8vIFRydWUgaWYgY3JlYXRlZCB0aHJvdWdoIHRoZSBJbnNwZWN0IGNv
bnRleHQgbWVudSBhY3Rpb24KICAgICBRdDo6RHJvcEFjdGlvbiBtX2xhc3REcm9wQWN0aW9uOwot
Ci0gICAgc3RhdGljIGJvb2wgZHJ0UnVuOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnNldHRpbmdzLmNwcAppbmRleCA3NjhjODAyNTZlYzEyNjYxMWQzYThmODI3Y2QxZWM5MzE3
MmYzYTgzLi45ZTI5ZGRkYzBmY2I0MjA4OWU4OTZlZjM4Yzg1OGY1ODUwYWU0ZWM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTIwLDggKzIwLDYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIKIAotI2luY2x1ZGUgInF3ZWJw
YWdlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogI2luY2x1ZGUgInF3ZWJwbHVnaW5kYXRh
YmFzZV9wLmgiCiAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCkBAIC00NSwxNCArNDMs
MTQgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUd1aUFwcGxpY2F0
aW9uPgogI2luY2x1ZGUgPFFTdGFuZGFyZFBhdGhzPgogI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVk
ZSA8UUZvbnQ+CiAjaW5jbHVkZSA8UUhhc2g+CiAjaW5jbHVkZSA8UVNoYXJlZERhdGE+CiAjaW5j
bHVkZSA8UVVybD4KICNpbmNsdWRlIDxRRmlsZUluZm8+Ci0jaW5jbHVkZSA8UVN0eWxlPgogCiAj
aW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuaAppbmRleCA1ZTdkM2UxYjRkM2Q0YzgxMzU2ODEyYzkyYjFmODRiNTA4ZDQwZTM5Li40
OTcyMWI3Y2I5M2QyYzU4ZWY2ZTRhNDg4YzNkNzBiMmIwNWM0YjA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Vic2V0dGluZ3MuaApAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUg
UVdlYlNldHRpbmdzUHJpdmF0ZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gZDsgfQogCiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAgICAgZnJpZW5kIGNsYXNz
IFFXZWJQYWdlUHJpdmF0ZTsKICAgICBmcmllbmQgY2xhc3MgUVdlYlNldHRpbmdzUHJpdmF0ZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwCmluZGV4IDlmMmFmNTc4N2VlY2JjZGUwMjJhOGUw
MWZiZmIwNWNjNTBiMWM0NTYuLjJlZGE2YTE4ZWZkMTc4MjU4NDYyZjE1Y2I5Mjk1MTRkOGQwMDkz
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKQEAgLTIyNyw5ICsyMjcsOSBAQCB2b2lk
IFFXZWJWaWV3UHJpdmF0ZTo6ZGV0YWNoQ3VycmVudFBhZ2UoKQogICAgIC8vIHRvIGRlc3Ryb3kg
aXQuCiAKICAgICBpZiAocGFnZS0+ZC0+Y2xpZW50ICYmIHBhZ2UtPmQtPmNsaWVudC0+aXNRV2lk
Z2V0Q2xpZW50KCkpCi0gICAgICAgIHBhZ2UtPmQtPmNsaWVudC5jbGVhcigpOworICAgICAgICBw
YWdlLT5kLT5jbGllbnQucmVzZXQoKTsKIAotICAgIHBhZ2UtPmQtPmNsaWVudC5yZWxlYXNlKCk7
CisgICAgcGFnZS0+ZC0+Y2xpZW50LnRha2UoKTsKIAogICAgIC8vIGlmIHRoZSBwYWdlIHdhcyBj
cmVhdGVkIGJ5IHVzLCB3ZSBvd24gaXQgYW5kIG5lZWQgdG8KICAgICAvLyBkZXN0cm95IGl0IGFz
IHdlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuY3BwCmluZGV4IGVhYWViMDEyZjg2ZDBhNTMxMTBiNTc5NzczZjZkNWI4YzA1ZDkzNDIu
Ljk4MjM2M2U0MjQ5NTg1ODg0MzU2YTZlZDkzMWU0MDJkMDVkNmVlNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCkBAIC01Mywy
NyArNTMsMjUgQEAKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRR
dC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudVF0LmgiCi0jaW5jbHVkZSAiUXRGYWxsYmFja1dlYlBv
cHVwLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFk
YXB0ZXIuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVRdC5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKLSNp
bmNsdWRlICJxZ3JhcGhpY3N3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKLSNp
bmNsdWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJx
d2Vic2VjdXJpdHlvcmlnaW4uaCIKLSNpbmNsdWRlICJxd2Vic2VjdXJpdHlvcmlnaW5fcC5oIgot
I2luY2x1ZGUgInF3ZWJ2aWV3LmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaCIKKyNpbmNsdWRl
ICIuLi9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luX3AuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNl
dHRpbmdzLmgiCiAjaW5jbHVkZSA8cWFic3RyYWN0YW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8cWRl
YnVnLmg+CiAjaW5jbHVkZSA8cWV2ZW50bG9vcC5oPgotI2luY2x1ZGUgPHF0b29sdGlwLmg+Cisj
aW5jbHVkZSA8cXdpbmRvdy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogI2lmIEVOQUJM
RShWSURFTykgJiYgKChVU0UoR1NUUkVBTUVSKSAmJiAhZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05f
MSkpIHx8IFVTRShRVF9NVUxUSU1FRElBKSB8fCBVU0UoUVRLSVQpKQpAQCAtMTI0LDggKzEyMiw4
IEBAIHByaXZhdGU6CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmR1bXBWaXNpdGVkTGlua3NDYWxs
YmFja3MgPSBmYWxzZTsKIAotQ2hyb21lQ2xpZW50UXQ6OkNocm9tZUNsaWVudFF0KFFXZWJQYWdl
KiB3ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCitDaHJvbWVDbGllbnRRdDo6Q2hy
b21lQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKiB3ZWJQYWdlQWRhcHRlcikKKyAgICA6IG1fd2Vi
UGFnZSh3ZWJQYWdlQWRhcHRlcikKICAgICAsIG1fZXZlbnRMb29wKDApCiAjaWYgRU5BQkxFKFZJ
REVPKSAmJiAoKFVTRShHU1RSRUFNRVIpICYmICFkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKSkg
fHwgVVNFKFFUX01VTFRJTUVESUEpIHx8IFVTRShRVEtJVCkpCiAgICAgLCBtX2Z1bGxTY3JlZW5W
aWRlbygwKQpAQCAtMTQ4LDggKzE0Niw4IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFdpbmRv
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmICghbV93ZWJQYWdlKQogICAg
ICAgICByZXR1cm47Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPmdlb21ldHJ5Q2hhbmdlUmVxdWVzdGVk
KFFSZWN0KHFSb3VuZChyZWN0LngoKSksIHFSb3VuZChyZWN0LnkoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcVJvdW5kKHJlY3Qud2lkdGgoKSksIHFSb3VuZChyZWN0LmhlaWdodCgp
KSkpOworICAgIG1fd2ViUGFnZS0+c2V0V2luZG93UmVjdChRUmVjdChxUm91bmQocmVjdC54KCkp
LCBxUm91bmQocmVjdC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx
Um91bmQocmVjdC53aWR0aCgpKSwgcVJvdW5kKHJlY3QuaGVpZ2h0KCkpKSk7CiB9CiAKIC8qIQpA
QCAtMTgyLDExICsxODAsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpmb2N1cygpCiB7CiAgICAg
aWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBRV2lkZ2V0KiB2aWV3ID0gbV93
ZWJQYWdlLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2
aWV3LT5zZXRGb2N1cygpOworICAgIG1fd2ViUGFnZS0+c2V0Rm9jdXMoKTsKIH0KIAogCkBAIC0x
OTQsMTAgKzE4OCw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnVuZm9jdXMoKQogewogICAgIGlm
ICghbV93ZWJQYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgUVdpZGdldCogdmlldyA9IG1fd2Vi
UGFnZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotICAgIHZpZXct
PmNsZWFyRm9jdXMoKTsKKyAgICBtX3dlYlBhZ2UtPnVuZm9jdXMoKTsKIH0KIAogYm9vbCBDaHJv
bWVDbGllbnRRdDo6Y2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQpAQCAtMjI3LDI0ICsyMTgs
MTggQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSopCiAK
IFBhZ2UqIENocm9tZUNsaWVudFF0OjpjcmVhdGVXaW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mKQogewotICAgIFFXZWJQYWdlKiBuZXdQYWdlID0gbV93ZWJQYWdl
LT5jcmVhdGVXaW5kb3coZmVhdHVyZXMuZGlhbG9nID8gUVdlYlBhZ2U6OldlYk1vZGFsRGlhbG9n
IDogUVdlYlBhZ2U6OldlYkJyb3dzZXJXaW5kb3cpOworICAgIFFXZWJQYWdlQWRhcHRlciogbmV3
UGFnZSA9IG1fd2ViUGFnZS0+Y3JlYXRlV2luZG93KGZlYXR1cmVzLmRpYWxvZyk7CiAgICAgaWYg
KCFuZXdQYWdlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEEgY2FsbCB0byBRV2ViUGFn
ZTo6bWFpbkZyYW1lKCkgaW1wbGljaXRseSBjcmVhdGVzIHRoZSBtYWluIGZyYW1lLgotICAgIC8v
IE1ha2Ugc3VyZSBpdCBleGlzdHMsIGFzIFdlYkNvcmUgZXhwZWN0cyBpdCB3aGVuIHJldHVybmlu
ZyBmcm9tIHRoaXMgY2FsbC4KLSAgICBuZXdQYWdlLT5tYWluRnJhbWUoKTsKLSAgICByZXR1cm4g
bmV3UGFnZS0+ZC0+cGFnZTsKKyAgICByZXR1cm4gbmV3UGFnZS0+cGFnZTsKIH0KIAogdm9pZCBD
aHJvbWVDbGllbnRRdDo6c2hvdygpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJl
dHVybjsKLSAgICBRV2lkZ2V0KiB2aWV3ID0gbV93ZWJQYWdlLT52aWV3KCk7Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+d2luZG93KCktPnNob3coKTsKKyAgICBt
X3dlYlBhZ2UtPnNob3coKTsKIH0KIAogCkBAIC0yNjYsNyArMjUxLDcgQEAgdm9pZCBDaHJvbWVD
bGllbnRRdDo6cnVuTW9kYWwoKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0VG9vbGJhcnNWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICB0b29sQmFyc1Zpc2libGUgPSB2aXNpYmxlOwotICAg
IGVtaXQgbV93ZWJQYWdlLT50b29sQmFyVmlzaWJpbGl0eUNoYW5nZVJlcXVlc3RlZCh2aXNpYmxl
KTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJ0
b29sQmFyVmlzaWJpbGl0eUNoYW5nZVJlcXVlc3RlZCIsIFFfQVJHKGJvb2wsIHZpc2libGUpKTsK
IH0KIAogCkBAIC0yNzgsNyArMjYzLDcgQEAgYm9vbCBDaHJvbWVDbGllbnRRdDo6dG9vbGJhcnNW
aXNpYmxlKCkKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0U3RhdHVzYmFyVmlzaWJsZShib29s
IHZpc2libGUpCiB7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnN0YXR1c0JhclZpc2liaWxpdHlDaGFu
Z2VSZXF1ZXN0ZWQodmlzaWJsZSk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dl
YlBhZ2UtPmhhbmRsZSgpLCAic3RhdHVzQmFyVmlzaWJpbGl0eUNoYW5nZVJlcXVlc3RlZCIsIFFf
QVJHKGJvb2wsIHZpc2libGUpKTsKICAgICBzdGF0dXNCYXJWaXNpYmxlID0gdmlzaWJsZTsKIH0K
IApAQCAtMzA1LDcgKzI5MCw3IEBAIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnNjcm9sbGJhcnNWaXNp
YmxlKCkKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKIHsKICAgICBtZW51QmFyVmlzaWJsZSA9IHZpc2libGU7Ci0gICAgZW1pdCBtX3dlYlBhZ2Ut
Pm1lbnVCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVzdGVkKHZpc2libGUpOworICAgIFFNZXRhT2Jq
ZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgIm1lbnVCYXJWaXNpYmlsaXR5
Q2hhbmdlUmVxdWVzdGVkIiwgUV9BUkcoYm9vbCwgdmlzaWJsZSkpOwogfQogCiBib29sIENocm9t
ZUNsaWVudFF0OjptZW51YmFyVmlzaWJsZSgpCkBAIC0zNDMsMzAgKzMyOCwyNiBAQCBib29sIENo
cm9tZUNsaWVudFF0OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBGcmFtZSogZgogCiB2b2lkIENocm9tZUNsaWVudFF0OjpjbG9zZVdpbmRvd1Nvb24o
KQogewotICAgIG1fd2ViUGFnZS0+ZC0+cGFnZS0+c2V0R3JvdXBOYW1lKFN0cmluZygpKTsKLSAg
ICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5kLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2Fk
ZXJzKCk7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPndpbmRvd0Nsb3NlUmVxdWVzdGVkKCk7CisgICAg
bV93ZWJQYWdlLT5wYWdlLT5zZXRHcm91cE5hbWUoU3RyaW5nKCkpOworICAgIG1fd2ViUGFnZS0+
cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOworICAgIFFNZXRh
T2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgIndpbmRvd0Nsb3NlUmVx
dWVzdGVkIik7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRBbGVydChG
cmFtZSogZiwgY29uc3QgU3RyaW5nJiBtc2cpCiB7Ci0gICAgUVN0cmluZyB4ID0gbXNnOwotICAg
IFFXZWJGcmFtZSogd2ViRnJhbWUgPSBxb2JqZWN0X2Nhc3Q8UVdlYkZyYW1lKj4oZi0+bG9hZGVy
KCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm9yaWdpbmF0aW5nT2JqZWN0KCkpOwotICAgIG1fd2Vi
UGFnZS0+amF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLCB4KTsKKyAgICBtX3dlYlBhZ2UtPmphdmFT
Y3JpcHRBbGVydChRV2ViRnJhbWVBZGFwdGVyOjpraXQoZiksIG1zZyk7CiB9CiAKIGJvb2wgQ2hy
b21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiBmLCBjb25zdCBTdHJpbmcm
IG1zZykKIHsKLSAgICBRU3RyaW5nIHggPSBtc2c7Ci0gICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9
IHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihmLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQo
KS0+b3JpZ2luYXRpbmdPYmplY3QoKSk7Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+amF2YVNjcmlw
dENvbmZpcm0od2ViRnJhbWUsIHgpOworICAgIHJldHVybiBtX3dlYlBhZ2UtPmphdmFTY3JpcHRD
b25maXJtKFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmKSwgbXNnKTsKIH0KIAogYm9vbCBDaHJvbWVD
bGllbnRRdDo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSogZiwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAg
UVN0cmluZyB4ID0gcmVzdWx0OwotICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBxb2JqZWN0X2Nh
c3Q8UVdlYkZyYW1lKj4oZi0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm9yaWdpbmF0
aW5nT2JqZWN0KCkpOwotICAgIGJvb2wgcmMgPSBtX3dlYlBhZ2UtPmphdmFTY3JpcHRQcm9tcHQo
d2ViRnJhbWUsIChRU3RyaW5nKW1lc3NhZ2UsIChRU3RyaW5nKWRlZmF1bHRWYWx1ZSwgJngpOwor
ICAgIFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lID0gUVdlYkZyYW1lQWRhcHRlcjo6a2l0KGYp
OworICAgIGJvb2wgcmMgPSBtX3dlYlBhZ2UtPmphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUsIG1l
c3NhZ2UsIGRlZmF1bHRWYWx1ZSwgJngpOwogCiAgICAgLy8gRml4IHVwIGEgcXVpcmsgaW4gdGhl
IFFJbnB1dERpYWxvZyBjbGFzcy4gSWYgbm8gaW5wdXQgaGFwcGVuZWQgdGhlIHN0cmluZyBzaG91
bGQgYmUgZW1wdHkKICAgICAvLyBidXQgaXQgaXMgbnVsbC4gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDkxNC4KQEAgLTM4MSwxOSArMzYyLDE5IEBAIGJvb2wg
Q2hyb21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqIGYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFN0YXR1c2JhclRleHQo
Y29uc3QgU3RyaW5nJiBtc2cpCiB7CiAgICAgUVN0cmluZyB4ID0gbXNnOwotICAgIGVtaXQgbV93
ZWJQYWdlLT5zdGF0dXNCYXJNZXNzYWdlKHgpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRo
b2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInN0YXR1c0Jhck1lc3NhZ2UiLCBRX0FSRyhRU3RyaW5n
LCB4KSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnNob3VsZEludGVycnVwdEphdmFTY3Jp
cHQoKQogewogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0ID0gZmFsc2U7Ci0gICAgUU1ldGFPYmpl
Y3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UsICJzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Iiwg
UXQ6OkRpcmVjdENvbm5lY3Rpb24sIFFfUkVUVVJOX0FSRyhib29sLCBzaG91bGRJbnRlcnJ1cHQp
KTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJz
aG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0IiwgUXQ6OkRpcmVjdENvbm5lY3Rpb24sIFFfUkVUVVJO
X0FSRyhib29sLCBzaG91bGRJbnRlcnJ1cHQpKTsKICAgICByZXR1cm4gc2hvdWxkSW50ZXJydXB0
OwogfQogCiBLZXlib2FyZFVJTW9kZSBDaHJvbWVDbGllbnRRdDo6a2V5Ym9hcmRVSU1vZGUoKQog
ewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnNldHRpbmdzKCktPnRlc3RBdHRyaWJ1dGUoUVdlYlNl
dHRpbmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKQorICAgIHJldHVybiBtX3dlYlBhZ2Ut
PnNldHRpbmdzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9j
dXNDaGFpbikKICAgICAgICAgPyBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzIDogS2V5Ym9hcmRB
Y2Nlc3NEZWZhdWx0OwogfQogCkBAIC00MDcsMTEgKzM4OCwxMCBAQCBJbnRSZWN0IENocm9tZUNs
aWVudFF0Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0CiAgICAgaWYgKCFwYWdlQ2xpZW50KQog
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgUVdpZGdldCogb3duZXJXaWRnZXQgPSBw
YWdlQ2xpZW50LT5vd25lcldpZGdldCgpOwotICAgIGlmICghb3duZXJXaWRnZXQpCisgICAgUVdp
bmRvdyogdG9wTGV2ZWxXaWRnZXQgPSBwYWdlQ2xpZW50LT5vd25lcldpbmRvdygpOworICAgIGlm
ICghdG9wTGV2ZWxXaWRnZXQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBRV2lk
Z2V0KiB0b3BMZXZlbFdpZGdldCA9IG93bmVyV2lkZ2V0LT53aW5kb3coKTsKICAgICBRUmVjdCB0
b3BMZXZlbEdlb21ldHJ5KHRvcExldmVsV2lkZ2V0LT5nZW9tZXRyeSgpKTsKIAogICAgIC8vIFRo
ZXJlJ3Mgbm8gQVBJIGluIFF0IHRvIHF1ZXJ5IGZvciB0aGUgc2l6ZSBvZiB0aGUgcmVzaXplciwg
c28gd2UgYXNzdW1lCkBAIC00MjMsMTIgKzQwMywxMyBAQCBJbnRSZWN0IENocm9tZUNsaWVudFF0
Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0CiAgICAgLy8gaXQgbWlnaHQgZXZlbiBiZSBvbiB0
aGUgbG93ZXIgbGVmdCBzaWRlIG9mIHRoZSB3aW5kb3csIGJ1dCBpbiBXZWJLaXQgd2UKICAgICAv
LyBhbHdheXMgZHJhdyBzY3JvbGxiYXJzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUsIHNvIHdlIGFz
c3VtZSB0aGlzIHRvIGJlIHRoZQogICAgIC8vIGxvY2F0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBy
ZXNpemUgcmVjdCB0byByZXNlcnZlIGZvciBXZWJLaXQuCi0gICAgUVBvaW50IHJlc2l6ZUNvcm5l
clRvcExlZnQgPSBvd25lcldpZGdldC0+bWFwRnJvbSh0b3BMZXZlbFdpZGdldCwKLSAgICAgICAg
ICAgIFFQb2ludCh0b3BMZXZlbEdlb21ldHJ5LndpZHRoKCksIHRvcExldmVsR2VvbWV0cnkuaGVp
Z2h0KCkpCi0gICAgICAgICAgICAtIFFQb2ludChzY29sbGJhclRoaWNrbmVzcywgc2NvbGxiYXJU
aGlja25lc3MpKTsKKyAgICBRUG9pbnQgcmVzaXplQ29ybmVyVG9wTGVmdCA9IFFQb2ludCh0b3BM
ZXZlbEdlb21ldHJ5LndpZHRoKCksIHRvcExldmVsR2VvbWV0cnkuaGVpZ2h0KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtIFFQb2ludChzY29sbGJhclRoaWNrbmVzcywgc2Nv
bGxiYXJUaGlja25lc3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtX3dl
YlBhZ2UtPnZpZXdSZWN0UmVsYXRpdmVUb1dpbmRvdygpLnRvcExlZnQoKTsKIAogICAgIFFSZWN0
IHJlc2l6ZUNvcm5lclJlY3QgPSBRUmVjdChyZXNpemVDb3JuZXJUb3BMZWZ0LCBRU2l6ZShzY29s
bGJhclRoaWNrbmVzcywgc2NvbGxiYXJUaGlja25lc3MpKTsKICAgICByZXR1cm4gcmVzaXplQ29y
bmVyUmVjdC5pbnRlcnNlY3RlZChwYWdlQ2xpZW50LT5nZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldp
ZGdldCgpKTsKKwogI2Vsc2UKICAgICByZXR1cm4gSW50UmVjdCgpOwogI2VuZGlmCkBAIC00Mzgs
NyArNDE5LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0
IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wpCiB7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKSB7Ci0gICAgICAgIFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1f
d2ViUGFnZS0+bWFpbkZyYW1lKCkpLT50aWxlZEJhY2tpbmdTdG9yZSgpOworICAgICAgICBXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gbV93ZWJQYWdlLT5tYWluRnJh
bWVBZGFwdGVyKCktPmZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpOwogICAgICAgICBpZiAoIWJh
Y2tpbmdTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYmFja2luZ1N0b3JlLT5p
bnZhbGlkYXRlKHdpbmRvd1JlY3QpOwpAQCAtNDQ4LDcgKzQyOSw3IEBAIHZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OmludmFsaWRhdGVSb290Vmlldyhjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29s
KQogI2VuZGlmCiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50UXQ6OmludmFsaWRhdGVDb250ZW50c0Fu
ZFJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wgaW1tZWRpYXRlKQordm9p
ZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50
UmVjdCYgd2luZG93UmVjdCwgYm9vbCkKIHsKICAgICAvLyBObyBkb3VibGUgYnVmZmVyLCBzbyBv
bmx5IHVwZGF0ZSB0aGUgUVdpZGdldCBpZiBjb250ZW50IGNoYW5nZWQuCiAgICAgaWYgKHBsYXRm
b3JtUGFnZUNsaWVudCgpKSB7CkBAIC00NTcsNyArNDM4LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRR
dDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgd2luZG93UmVj
dCwgYm8KICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHBsYXRmb3Jt
UGFnZUNsaWVudCgpLT51cGRhdGUocmVjdCk7CiAgICAgfQotICAgIFFNZXRhT2JqZWN0OjppbnZv
a2VNZXRob2QobV93ZWJQYWdlLCAicmVwYWludFJlcXVlc3RlZCIsIFF0OjpRdWV1ZWRDb25uZWN0
aW9uLCBRX0FSRyhRUmVjdCwgd2luZG93UmVjdCkpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VN
ZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInJlcGFpbnRSZXF1ZXN0ZWQiLCBRdDo6UXVldWVk
Q29ubmVjdGlvbiwgUV9BUkcoUVJlY3QsIHdpbmRvd1JlY3QpKTsKIAogICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBubyAiaW1tZWRpYXRlIiBzdXBwb3J0IGZvciB3aW5kb3cgcGFpbnRpbmcuICBUaGlz
IHNob3VsZCBiZSBkb25lIGFsd2F5cyB3aGVuZXZlciB0aGUgZmxhZwogICAgIC8vIGlzIHNldC4K
QEAgLTQ3MiwxNCArNDUzLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNjcm9sbChjb25zdCBJ
bnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsCiB7CiAgICAgaWYg
KHBsYXRmb3JtUGFnZUNsaWVudCgpKQogICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2Ny
b2xsKGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpLCBzY3JvbGxWaWV3UmVjdCk7Ci0gICAg
ZW1pdCBtX3dlYlBhZ2UtPnNjcm9sbFJlcXVlc3RlZChkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWln
aHQoKSwgc2Nyb2xsVmlld1JlY3QpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93
ZWJQYWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJHKGludCwgZGVsdGEud2lk
dGgoKSksIFFfQVJHKGludCwgZGVsdGEuaGVpZ2h0KCkpLCBRX0FSRyhRUmVjdCwgc2Nyb2xsVmll
d1JlY3QpKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogdm9pZCBDaHJvbWVD
bGllbnRRdDo6ZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IEludFBvaW50JiBwb2ludCkK
IHsKLSAgICBRUG9pbnQgY3VycmVudFBvc2l0aW9uKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnNj
cm9sbFBvc2l0aW9uKCkpOwotICAgIGVtaXQgbV93ZWJQYWdlLT5zY3JvbGxSZXF1ZXN0ZWQocG9p
bnQueCgpIC0gY3VycmVudFBvc2l0aW9uLngoKSwgcG9pbnQueSgpIC0gY3VycmVudFBvc2l0aW9u
LnkoKSwgUVJlY3QoUVBvaW50KDAsIDApLCBtX3dlYlBhZ2UtPnZpZXdwb3J0U2l6ZSgpKSk7CisK
KyAgICBJbnRTaXplIGN1cnJlbnRQb3NpdGlvbiA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lQWRhcHRl
cigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGludCB4ID0gcG9pbnQueCgpIC0gY3VycmVudFBv
c2l0aW9uLndpZHRoKCk7CisgICAgaW50IHkgPSBwb2ludC55KCkgLSBjdXJyZW50UG9zaXRpb24u
aGVpZ2h0KCk7CisgICAgY29uc3QgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIG1fd2ViUGFnZS0+
dmlld3BvcnRTaXplKCkpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdl
LT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJHKGludCwgeCksIFFfQVJHKGludCwg
eSksIFFfQVJHKFFSZWN0LCByZWN0KSk7CiB9CiAjZW5kaWYKIApAQCAtNDg5LDEyICs0NzQsMTIg
QEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkKICAgICAgICAgcmV0dXJuIHJlY3Q7
CiAKLSAgICBRV2lkZ2V0KiBvd25lcldpZGdldCA9IHBhZ2VDbGllbnQtPm93bmVyV2lkZ2V0KCk7
Ci0gICAgaWYgKCFvd25lcldpZGdldCkKKyAgICBRV2luZG93KiBvd25lcldpbmRvdyA9IHBhZ2VD
bGllbnQtPm93bmVyV2luZG93KCk7CisgICAgaWYgKCFvd25lcldpbmRvdykKICAgICAgICByZXR1
cm4gcmVjdDsKIAogICAgIFFSZWN0IHNjcmVlblJlY3QocmVjdCk7Ci0gICAgc2NyZWVuUmVjdC50
cmFuc2xhdGUob3duZXJXaWRnZXQtPm1hcFRvR2xvYmFsKFFQb2ludCgwLCAwKSkpOworICAgIHNj
cmVlblJlY3QudHJhbnNsYXRlKG93bmVyV2luZG93LT5tYXBUb0dsb2JhbChtX3dlYlBhZ2UtPnZp
ZXdSZWN0UmVsYXRpdmVUb1dpbmRvdygpLnRvcExlZnQoKSkpOwogCiAgICAgcmV0dXJuIHNjcmVl
blJlY3Q7CiB9CkBAIC01MDUsMjIgKzQ5MCwyMiBAQCBJbnRQb2ludCBDaHJvbWVDbGllbnRRdDo6
c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgaWYgKCFw
YWdlQ2xpZW50KQogICAgICAgICByZXR1cm4gcG9pbnQ7CiAKLSAgICBRV2lkZ2V0KiBvd25lcldp
ZGdldCA9IHBhZ2VDbGllbnQtPm93bmVyV2lkZ2V0KCk7Ci0gICAgaWYgKCFvd25lcldpZGdldCkK
KyAgICBRV2luZG93KiBvd25lcldpbmRvdyA9IHBhZ2VDbGllbnQtPm93bmVyV2luZG93KCk7Cisg
ICAgaWYgKCFvd25lcldpbmRvdykKICAgICAgICAgcmV0dXJuIHBvaW50OwogCi0gICAgcmV0dXJu
IG93bmVyV2lkZ2V0LT5tYXBGcm9tR2xvYmFsKHBvaW50KTsKKyAgICByZXR1cm4gb3duZXJXaW5k
b3ctPm1hcEZyb21HbG9iYWwocG9pbnQpIC0gbV93ZWJQYWdlLT52aWV3UmVjdFJlbGF0aXZlVG9X
aW5kb3coKS50b3BMZWZ0KCkgOwogfQogCiBQbGF0Zm9ybVBhZ2VDbGllbnQgQ2hyb21lQ2xpZW50
UXQ6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+
ZC0+Y2xpZW50LmdldCgpOworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNsaWVudC5kYXRhKCk7CiB9
CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqIGZyYW1l
LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAgIGlmIChmcmFtZS0+bG9hZGVyKCkt
Pm5ldHdvcmtpbmdDb250ZXh0KCkpCi0gICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFt
ZSktPmNvbnRlbnRzU2l6ZUNoYW5nZWQoc2l6ZSk7CisgICAgICAgIFFXZWJGcmFtZUFkYXB0ZXI6
OmtpdChmcmFtZSktPmNvbnRlbnRzU2l6ZURpZENoYW5nZShzaXplKTsKIH0KIAogdm9pZCBDaHJv
bWVDbGllbnRRdDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCB1bnNpZ25lZCkKQEAgLTUzMiwzMyArNTE3LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50
UXQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
dW5zaWduCiAgICAgICAgIGxhc3RIb3ZlclVSTCA9IHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsK
ICAgICAgICAgbGFzdEhvdmVyVGl0bGUgPSByZXN1bHQudGl0bGUoZGlyKTsKICAgICAgICAgbGFz
dEhvdmVyQ29udGVudCA9IHJlc3VsdC50ZXh0Q29udGVudCgpOwotICAgICAgICBlbWl0IG1fd2Vi
UGFnZS0+bGlua0hvdmVyZWQobGFzdEhvdmVyVVJMLnN0cmluZygpLAotICAgICAgICAgICAgICAg
IGxhc3RIb3ZlclRpdGxlLCBsYXN0SG92ZXJDb250ZW50KTsKKyAgICAgICAgUU1ldGFPYmplY3Q6
Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAibGlua0hvdmVyZWQiLCBRX0FSRyhR
U3RyaW5nLCBsYXN0SG92ZXJVUkwuc3RyaW5nKCkpLAorICAgICAgICAgICAgICAgIFFfQVJHKFFT
dHJpbmcsIGxhc3RIb3ZlclRpdGxlKSwgUV9BUkcoUVN0cmluZywgbGFzdEhvdmVyQ29udGVudCkp
OwogICAgIH0KIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0VG9vbFRpcChjb25zdCBTdHJp
bmcgJnRpcCwgVGV4dERpcmVjdGlvbikKIHsKLSNpZm5kZWYgUVRfTk9fVE9PTFRJUAotICAgIFFX
aWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICh0aXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHZpZXctPnNldFRv
b2xUaXAoUVN0cmluZygpKTsKLSAgICAgICAgUVRvb2xUaXA6OmhpZGVUZXh0KCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgUVN0cmluZyBkdGlwID0gUUxhdGluMVN0cmluZygiPHA+IikgKyBRU3Ry
aW5nKHRpcCkudG9IdG1sRXNjYXBlZCgpICsgUUxhdGluMVN0cmluZygiPC9wPiIpOwotICAgICAg
ICB2aWV3LT5zZXRUb29sVGlwKGR0aXApOwotICAgIH0KLSNlbHNlCi0gICAgUV9VTlVTRUQodGlw
KTsKLSNlbmRpZgorICAgIG1fd2ViUGFnZS0+c2V0VG9vbFRpcCh0aXApOwogfQogCiB2b2lkIENo
cm9tZUNsaWVudFF0OjpwcmludChGcmFtZSogZnJhbWUpCiB7Ci0gICAgZW1pdCBtX3dlYlBhZ2Ut
PnByaW50UmVxdWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSkpOworICAgIGVtaXQg
bV93ZWJQYWdlLT5wcmludFJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyOjpraXQoZnJhbWUpKTsK
IH0KIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCkBAIC01NjksNyArNTQwLDcgQEAgdm9pZCBD
aHJvbWVDbGllbnRRdDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU4KICAgICBpZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmhh
c0VudHJ5Rm9yT3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKICAg
ICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEoZnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIHF1b3RhKTsKIAotICAgIGVtaXQgbV93ZWJQYWdlLT5kYXRh
YmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgZGF0YWJhc2VO
YW1lKTsKKyAgICBtX3dlYlBhZ2UtPmRhdGFiYXNlUXVvdGFFeGNlZWRlZChRV2ViRnJhbWVBZGFw
dGVyOjpraXQoZnJhbWUpLCBkYXRhYmFzZU5hbWUpOwogfQogI2VuZGlmCiAKQEAgLTU5Niw3ICs1
NjcsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdp
blF1b3RhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09M
T1IpCiBQYXNzT3duUHRyPENvbG9yQ2hvb3Nlcj4gQ2hyb21lQ2xpZW50UXQ6OmNyZWF0ZUNvbG9y
Q2hvb3NlcihDb2xvckNob29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGNvbnN0IFFDb2xvciBzZWxlY3RlZENvbG9yID0gbV93ZWJQYWdlLT5kLT5jb2xvclNl
bGVjdGlvblJlcXVlc3RlZChRQ29sb3IoY29sb3IpKTsKKyAgICBjb25zdCBRQ29sb3Igc2VsZWN0
ZWRDb2xvciA9IG1fd2ViUGFnZS0+Y29sb3JTZWxlY3Rpb25SZXF1ZXN0ZWQoUUNvbG9yKGNvbG9y
KSk7CiAgICAgY2xpZW50LT5kaWRDaG9vc2VDb2xvcihzZWxlY3RlZENvbG9yKTsKICAgICBjbGll
bnQtPmRpZEVuZENob29zZXIoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYwNiwzMiArNTc3
LDIyIEBAIFBhc3NPd25QdHI8Q29sb3JDaG9vc2VyPiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlQ29s
b3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCoKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJ1bk9w
ZW5QYW5lbChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IHBycEZpbGVDaG9v
c2VyKQogewogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIgPSBwcnBGaWxlQ2hv
b3NlcjsKLSAgICBib29sIHN1cHBvcnRNdWx0aSA9IG1fd2ViUGFnZS0+c3VwcG9ydHNFeHRlbnNp
b24oUVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb24pOwotCi0gICAgaWYgKGZp
bGVDaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRpcGxlRmlsZXMgJiYgc3VwcG9ydE11bHRp
KSB7Ci0gICAgICAgIFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uT3B0aW9u
IG9wdGlvbjsKLSAgICAgICAgb3B0aW9uLnBhcmVudEZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
a2l0KGZyYW1lKTsKIAotICAgICAgICBpZiAoIWZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVj
dGVkRmlsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgb3B0aW9uLnN1Z2dlc3RlZEZpbGVOYW1lcyArPSBmaWxlQ2hvb3Nlci0+c2V0
dGluZ3MoKS5zZWxlY3RlZEZpbGVzW2ldOworICAgIFFTdHJpbmdMaXN0IHN1Z2dlc3RlZEZpbGVO
YW1lczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsZUNob29zZXItPnNldHRpbmdz
KCkuc2VsZWN0ZWRGaWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgc3VnZ2VzdGVkRmlsZU5hbWVz
ICs9IGZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXNbaV07CiAKLSAgICAgICAg
UVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb25SZXR1cm4gb3V0cHV0OwotICAg
ICAgICBtX3dlYlBhZ2UtPmV4dGVuc2lvbihRV2ViUGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxlc0V4
dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCk7CisgICAgY29uc3QgYm9vbCBhbGxvd011bHRpcGxl
ID0gZmlsZUNob29zZXItPnNldHRpbmdzKCkuYWxsb3dzTXVsdGlwbGVGaWxlczsKIAotICAgICAg
ICBpZiAoIW91dHB1dC5maWxlTmFtZXMuaXNFbXB0eSgpKSB7CisgICAgUVN0cmluZ0xpc3QgcmVz
dWx0ID0gbV93ZWJQYWdlLT5jaG9vc2VGaWxlcyhRV2ViRnJhbWVBZGFwdGVyOjpraXQoZnJhbWUp
LCBhbGxvd011bHRpcGxlLCBzdWdnZXN0ZWRGaWxlTmFtZXMpOworICAgIGlmICghcmVzdWx0Lmlz
RW1wdHkoKSkgeworICAgICAgICBpZiAoYWxsb3dNdWx0aXBsZSkgewogICAgICAgICAgICAgVmVj
dG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dHB1
dC5maWxlTmFtZXMuY291bnQoKTsgKytpKQotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChv
dXRwdXQuZmlsZU5hbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVzdWx0LmNvdW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQocmVzdWx0
LmF0KGkpKTsKICAgICAgICAgICAgIGZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlcyhuYW1lcyk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBRU3RyaW5nIHN1Z2dlc3RlZEZpbGU7Ci0g
ICAgICAgIGlmICghZmlsZUNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlcy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBzdWdnZXN0ZWRGaWxlID0gZmlsZUNob29zZXItPnNldHRpbmdzKCku
c2VsZWN0ZWRGaWxlc1swXTsKLSAgICAgICAgUVN0cmluZyBmaWxlID0gbV93ZWJQYWdlLT5jaG9v
c2VGaWxlKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIHN1Z2dlc3RlZEZpbGUpOwotICAg
ICAgICBpZiAoIWZpbGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgZmlsZUNob29zZXItPmNob29z
ZUZpbGUoZmlsZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZmlsZUNob29zZXItPmNo
b29zZUZpbGUocmVzdWx0LmZpcnN0KCkpOwogICAgIH0KIH0KIApAQCAtNjYyLDcgKzYyMyw3IEBA
IHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIAogdm9pZCBDaHJvbWVD
bGllbnRRdDo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucygpCiB7Ci0gICAgbV93ZWJQYWdlLT5t
YWluRnJhbWUoKS0+ZC0+ZnJhbWUtPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhj
b252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyAgICBtX3dlYlBh
Z2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWUtPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5p
bWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKIH0K
ICNlbmRpZgogCkBAIC03MDMsOCArNjY0LDEwIEBAIEludFJlY3QgQ2hyb21lQ2xpZW50UXQ6OnZp
c2libGVSZWN0Rm9yVGlsZWRCYWNraW5nU3RvcmUoKSBjb25zdAogICAgIGlmICghcGxhdGZvcm1Q
YWdlQ2xpZW50KCkgfHwgIW1fd2ViUGFnZSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAot
ICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCktPnZpZXdSZXNpemVzVG9Db250ZW50c0VuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIFFSZWN0KG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnNjcm9s
bFBvc2l0aW9uKCksIG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmdlb21ldHJ5KCkuc2l6ZSgpKTsK
KyAgICBpZiAoIXBsYXRmb3JtUGFnZUNsaWVudCgpLT52aWV3UmVzaXplc1RvQ29udGVudHNFbmFi
bGVkKCkpIHsKKyAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZUFk
YXB0ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIFFSZWN0KFFQb2ludChv
ZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKSwgbV93ZWJQYWdlLT5tYWluRnJhbWVBZGFw
dGVyKCktPmZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoRmxvYXRSZWN0KHBsYXRmb3JtUGFnZUNsaWVudCgpLT5ncmFwaGljc0l0ZW1WaXNp
YmxlUmVjdCgpKSk7CiB9CkBAIC03NTEsNyArNzE0LDcgQEAgUGFzc093blB0cjxRV2ViU2VsZWN0
TWV0aG9kPiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlU2VsZWN0UG9wdXAoKSBjb25zdAogICAgICAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIAogI2lmICFkZWZpbmVkKFFUX05PX0NPTUJPQk9Y
KQotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUXRGYWxsYmFja1dlYlBvcHVwKHRoaXMpKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobV93ZWJQYWdlLT5jcmVhdGVTZWxlY3RQb3B1cCgpKTsKICNlbHNl
CiAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKQEAgLTc1OSw5ICs3MjIsMTkgQEAgUGFzc093
blB0cjxRV2ViU2VsZWN0TWV0aG9kPiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlU2VsZWN0UG9wdXAo
KSBjb25zdAogCiB2b2lkIENocm9tZUNsaWVudFF0OjpkaXNwYXRjaFZpZXdwb3J0UHJvcGVydGll
c0RpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYpIGNvbnN0CiB7Ci0gICAgZW1pdCBt
X3dlYlBhZ2UtPnZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCk7CisgICAgbV93ZWJQYWdlLT5lbWl0
Vmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKTsKIH0KIAorI2lmIFVTRShRVF9NVUxUSU1FRElBKQor
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgKkNocm9tZUNsaWVudFF0OjpjcmVhdGVGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogaGFu
ZGxlciA9IG1fcGxhdGZvcm1QbHVnaW4uY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpLmxl
YWtQdHIoKTsKKyAgICBpZiAoIWhhbmRsZXIpCisgICAgICAgIGhhbmRsZXIgPSBtX3dlYlBhZ2Ut
PmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICByZXR1cm4gaGFuZGxlcjsKK30K
KyNlbmRpZgorCiBib29sIENocm9tZUNsaWVudFF0OjpzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlv
bklzTmF0dXJhbCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzk0LDcgKzc2Nyw3IEBAIHZv
aWQgQ2hyb21lQ2xpZW50UXQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKICAgICAvLyBpbiBhIHNl
cGFyYXRlIGRhdGFiYXNlCiAgICAgaWYgKGR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3MpIHsKICAg
ICAgICAgcHJpbnRmKCJBc2tlZCB0byBwb3B1bGF0ZSB2aXNpdGVkIGxpbmtzIGZvciBXZWJWaWV3
IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICBxUHJpbnRhYmxlKG1fd2ViUGFnZS0+bWFpbkZy
YW1lKCktPnVybCgpLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICBxUHJpbnRhYmxlKFFV
cmwobV93ZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPnVybCkudG9TdHJpbmcoKSkpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5oCmluZGV4IGY3MzU5ZDJlMjg3NGE3NTUxOWMyZjUzODc2ODEzMjk4MGFlNGI5Y2QuLjk2
MDczMDVjMzZlNTA4YzdmZjljMjYwYmUxZjFiYWJhOWNhYmZjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKQEAgLTQyLDYgKzQyLDgg
QEAgY2xhc3MgUUV2ZW50TG9vcDsKIFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3MgUVdlYlBhZ2U7
CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CitjbGFzcyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxl
cjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OSw3ICs2MSw3IEBAIGNsYXNzIEZ1bGxT
Y3JlZW5WaWRlb1F0OwogCiBjbGFzcyBDaHJvbWVDbGllbnRRdCA6IHB1YmxpYyBDaHJvbWVDbGll
bnQgewogcHVibGljOgotICAgIENocm9tZUNsaWVudFF0KFFXZWJQYWdlKik7CisgICAgQ2hyb21l
Q2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50UXQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAKQEAgLTE5OCw3ICsyMDAs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlv
bihXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgeyB9CiAK
LSAgICBRV2ViUGFnZSogbV93ZWJQYWdlOworICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisKKyAgICBRV2ViUGFnZUFkYXB0ZXIq
IG1fd2ViUGFnZTsKICAgICBLVVJMIGxhc3RIb3ZlclVSTDsKICAgICBTdHJpbmcgbGFzdEhvdmVy
VGl0bGU7CiAgICAgU3RyaW5nIGxhc3RIb3ZlckNvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTI0ZThiZDUyMzUyNWJhYzliYTgyMjQ5ODdhM2I2
YzZjZTE3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNwcApAQCAtMCwwICsxLDcyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmYXVs
dEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIuaCIKKworI2lmIFVTRShRVF9NVUxUSU1FRElBKQorCisj
aW5jbHVkZSAiRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK2Jvb2wgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnNfc2hvdWxkRm9yY2VG
dWxsU2NyZWVuVmlkZW9QbGF5YmFjayA9IGZhbHNlOworCitEZWZhdWx0RnVsbFNjcmVlblZpZGVv
SGFuZGxlcjo6RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgIDogUVdlYkZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIoKQorICAgICwgbV9mdWxsU2NyZWVuV2lkZ2V0KG5ldyBGdWxsU2Ny
ZWVuVmlkZW9XaWRnZXQpCit7CisgICAgY29ubmVjdChtX2Z1bGxTY3JlZW5XaWRnZXQsIFNJR05B
TChkaWRFeGl0RnVsbFNjcmVlbigpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkp
OworICAgIG1fZnVsbFNjcmVlbldpZGdldC0+aGlkZSgpOworCisgICAgbV9mdWxsU2NyZWVuV2lk
Z2V0LT5jbG9zZSgpOworfQorCitEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6fkRlZmF1
bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxldGUgbV9mdWxsU2NyZWVuV2lk
Z2V0OworfQorCitib29sIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1
bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgUUJ5dGVB
cnJheSBmb3JjZUZ1bGxTY3JlZW4gPSBxZ2V0ZW52KCJRVF9XRUJLSVRfRk9SQ0VfRlVMTFNDUkVF
Tl9WSURFTyIpOworICAgICAgICBpZiAoIWZvcmNlRnVsbFNjcmVlbi5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2sgPSB0cnVlOworCisg
ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc19zaG91bGRG
b3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrOworfQorCit2b2lkIERlZmF1bHRGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7Cisg
ICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5zaG93KHBsYXllcik7Cit9CisKK3ZvaWQgRGVmYXVsdEZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX2Z1bGxTY3Jl
ZW5XaWRnZXQtPmNsb3NlKCk7Cit9CisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmggYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzE5Mjk4YWZkNTQ1OTI3ZTRmM2E4ZmM4ZmVkMWQzN2Y3ODc1ZDI4
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRGVm
YXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworI2lmbmRlZiBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcl9oCisjZGVmaW5l
IERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyX2gKKworI2luY2x1ZGUgIi4uL0FwaS9xd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEZ1bGxT
Y3JlZW5WaWRlb1dpZGdldDsKKworLy8gV2UgZG8gbm90IHVzZSBFTkFCTEUgb3IgVVNFIGJlY2F1
c2UgbW9jIGRvZXMgbm90IGV4cGFuZCB0aGVzZSBtYWNyb3MuCisjaWYgZGVmaW5lZChXVEZfVVNF
X1FUX01VTFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQorY2xhc3MgRGVmYXVsdEZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIg
eworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXIoKTsKKyAgICB2aXJ0dWFsIH5EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAg
IGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0OworCitwdWJs
aWMgUV9TTE9UUzoKKyAgICB2b2lkIGVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKTsKKyAg
ICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgc19z
aG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrOworICAgIEZ1bGxTY3JlZW5WaWRlb1dp
ZGdldCAqbV9mdWxsU2NyZWVuV2lkZ2V0OworfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcAppbmRleCBj
YjYzMjgzNDAwOTg5NGNjOTU2MzYyNjAzODVkNDAwYTA1NzMwZjQ3Li41ZWEzZWY5NDFlYzRhYjE3
MjdjN2ViZDBkMTIyZGU3ZDQ2YzdhNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCkBAIC0yNywxMSArMjcsMTIgQEAKICNpbmNsdWRl
ICJEcmFnQ2xpZW50UXQuaCIKIAogI2luY2x1ZGUgIkNsaXBib2FyZFF0LmgiCisjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgorI2luY2x1ZGUgPFFXZWJQYWdlQ2xpZW50Lmg+CiAK
ICNpbmNsdWRlIDxRRHJhZz4KICNpbmNsdWRlIDxRTWltZURhdGE+CkBAIC05Myw3ICs5NCw3IEBA
IHZvaWQgRHJhZ0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29u
c3QgSW50UG9pbnQmLCBjb25zdCBJbnRQCiAjaWZuZGVmIFFUX05PX0RSQUdBTkREUk9QCiAgICAg
UU1pbWVEYXRhKiBjbGlwYm9hcmREYXRhID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkUXQqPihjbGlw
Ym9hcmQpLT5jbGlwYm9hcmREYXRhKCk7CiAgICAgc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkUXQqPihj
bGlwYm9hcmQpLT5pbnZhbGlkYXRlV3JpdGFibGVEYXRhKCk7Ci0gICAgUVdpZGdldCogdmlldyA9
IG1fd2ViUGFnZS0+dmlldygpOworICAgIFFPYmplY3QqIHZpZXcgPSBtX2Nocm9tZUNsaWVudC0+
cGxhdGZvcm1QYWdlQ2xpZW50KCktPm93bmVyV2lkZ2V0KCk7CiAgICAgaWYgKHZpZXcpIHsKICAg
ICAgICAgUURyYWcqIGRyYWcgPSBuZXcgUURyYWcodmlldyk7CiAgICAgICAgIGlmIChkcmFnSW1h
Z2UpCkBAIC0xMDUsNyArMTA2LDcgQEAgdm9pZCBEcmFnQ2xpZW50UXQ6OnN0YXJ0RHJhZyhEcmFn
SW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFAKICAgICAgICAg
UXQ6OkRyb3BBY3Rpb24gYWN0dWFsRHJvcEFjdGlvbiA9IGRyYWctPmV4ZWMoZHJhZ09wZXJhdGlv
bnNUb0Ryb3BBY3Rpb25zKGRyYWdPcGVyYXRpb25NYXNrKSk7CiAKICAgICAgICAgLy8gU2VuZCBk
cmFnRW5kIGV2ZW50Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtZShtX3dlYlBhZ2UtPnZp
ZXcoKS0+bWFwRnJvbUdsb2JhbChRQ3Vyc29yOjpwb3MoKSksIFFDdXJzb3I6OnBvcygpLCBMZWZ0
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgMCk7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtZShtX2Nocm9tZUNsaWVu
dC0+c2NyZWVuVG9Sb290VmlldyhRQ3Vyc29yOjpwb3MoKSksIFFDdXJzb3I6OnBvcygpLCBMZWZ0
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgMCk7CiAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZUVu
ZGVkQXQobWUsIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oYWN0dWFsRHJvcEFjdGlvbikpOwog
ICAgIH0KICAgICBmcmFtZS0+cGFnZSgpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW5kZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0
LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5oCmluZGV4
IDE1NzI0ZjFlMTQ4NTYzZjNlNmVlMDE4NTUzYTdlZDNlYzg0Y2MxNTguLjQyNzU0ODE2MGZkYmY1
YjZjMzUxY2FlNDJhN2JkYmNmMmU2MDc0ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuaApAQCAtMjgsMTMgKzI4LDEzIEBACiAKICNpbmNsdWRl
ICJEcmFnQ2xpZW50LmgiCiAKLWNsYXNzIFFXZWJQYWdlOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIENocm9tZUNsaWVudDsKKwogY2xhc3MgRHJhZ0NsaWVudFF0IDogcHVibGljIERy
YWdDbGllbnQgewogcHVibGljOgotICAgIERyYWdDbGllbnRRdChRV2ViUGFnZSogd2ViUGFnZSkg
OiBtX3dlYlBhZ2Uod2ViUGFnZSkge307CisgICAgRHJhZ0NsaWVudFF0KENocm9tZUNsaWVudCog
Y2hyb21lQ2xpZW50KSA6IG1fY2hyb21lQ2xpZW50KGNocm9tZUNsaWVudCkge307CiAgICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbiwgRHJhZ0RhdGEqKTsKICAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBh
Y3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopOwogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJv
bGxlckRlc3Ryb3llZCgpOwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJ
bnRQb2ludCYsIENsaXBib2FyZCopOyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERy
YWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgSW50UG9p
bnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxzZSk7
CiBwcml2YXRlOgotICAgIFFXZWJQYWdlKiBtX3dlYlBhZ2U7CisgICAgQ2hyb21lQ2xpZW50KiBt
X2Nocm9tZUNsaWVudDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKaW5kZXggZWRmMjBh
NDYwNTAzMzE3NjRkNzlkYmZmMGQzM2JjOTA3YmNiZjY3Yy4uMjU1YTRiZGJhOGE2NDViYzAwZDVl
ODNmYjg4OWUxZmU1ZGVmM2U1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKQEAgLTUzLDcgKzUz
LDYgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJJbml0V2ViQ29y
ZVF0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKQEAgLTYz
LDYgKzYyLDggQEAKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUG9zaXRpb25F
cnJvci5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRh
cHRlci5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJTY2hl
bWVSZWdpc3RyeS5oIgpAQCAtNzgsMjIgKzc5LDE2IEBACiAjaW5jbHVkZSAiV29ya2VyVGhyZWFk
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKLSNpbmNsdWRlICJxd2ViZWxlbWVu
dC5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0j
aW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKLSNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCi0jaW5j
bHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXdl
YnNjcmlwdHdvcmxkLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJlbGVtZW50LmgiCisjaW5jbHVk
ZSAiLi4vQXBpL3F3ZWJoaXN0b3J5LmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJoaXN0b3J5X3Au
aCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNjcmlwdHdvcmxkLmgiCiAKICNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdC5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxR
QWN0aW9uPgotI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUgPFFQYWludGVyPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTEwMyw3ICs5OCw3IEBAIFFNYXA8aW50LCBRV2ViU2NyaXB0
V29ybGQqPiBtX3dvcmxkTWFwOwogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKIEdlb2xvY2F0aW9u
Q2xpZW50TW9jayogdG9HZW9sb2NhdGlvbkNsaWVudE1vY2soR2VvbG9jYXRpb25DbGllbnQqIGNs
aWVudCkKIHsKLSAgICAgQVNTRVJUKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuKTsKKyAgICAgQVNT
RVJUKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdl
b2xvY2F0aW9uQ2xpZW50TW9jayo+KGNsaWVudCk7CiB9CiAjZW5kaWYKQEAgLTExMSw3ICsxMDYs
NyBAQCBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIHRvR2VvbG9jYXRpb25DbGllbnRNb2NrKEdlb2xv
Y2F0aW9uQ2xpZW50KiBjbGllbnQpCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogdG9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2so
RGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGNsaWVudCkKIHsKLSAgICBBU1NFUlQoUVdlYlBhZ2VQ
cml2YXRlOjpkcnRSdW4pOworICAgIEFTU0VSVChRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1bik7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayo+KGNsaWVu
dCk7CiB9CiAjZW5kaWYKQEAgLTE5OCw3ICsxOTMsNiBAQCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6fkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0KCkKIAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgp
OwogICAgIFF0RFJUTm9kZVJ1bnRpbWU6OmluaXRpYWxpemUoKTsKIH0KIApAQCAtMjI1LDU4ICsy
MTksNTggQEAgaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3b3JrZXJUaHJlYWRDb3VudCgp
CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldER1bXBSZW5kZXJUcmVlTW9kZUVu
YWJsZWQoYm9vbCBiKQogewotICAgIFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuID0gYjsKKyAgICBR
V2ViUGFnZUFkYXB0ZXI6OmRydFJ1biA9IGI7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpICYmIGRlZmluZWQoWFBfVU5JWCkKICAgICAvLyBQbHVnaW5WaWV3UXQgKFgxMSkgbmVlZHMg
YSBmZXcgd29ya2Fyb3VuZHMgd2hlbiBydW5uaW5nIHVuZGVyIERSVAogICAgIFBsdWdpblZpZXc6
OnNldElzUnVubmluZ1VuZGVyRFJUKGIpOwogI2VuZGlmCiB9CiAKLXZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJv
b2wgZW5hYmxlZCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpLT5zZXR0aW5ncygpLT5zZXRGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkKGVuYWJsZWQpOworICAgIGFkYXB0ZXItPnBhZ2UtPnNldHRpbmdzKCktPnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFT
dHJpbmcmIGdyb3VwTmFtZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VT
ZXRHcm91cE5hbWUoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBncm91
cE5hbWUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPnNldEdyb3VwTmFtZShncm91cE5h
bWUpOworICAgIGFkYXB0ZXItPnBhZ2UtPnNldEdyb3VwTmFtZShncm91cE5hbWUpOwogfQogCi1R
U3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBOYW1lKFFXZWJQYWdl
KiBwYWdlKQorUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFt
ZShRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgcmV0dXJuIHBhZ2UtPmhhbmRsZSgp
LT5wYWdlLT5ncm91cE5hbWUoKTsKKyAgICByZXR1cm4gYWRhcHRlci0+cGFnZS0+Z3JvdXBOYW1l
KCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckV4ZWN1
dGVTY3JpcHQoUVdlYlBhZ2UqIHBhZ2UsIGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3Jp
cHQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRlU2Ny
aXB0KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgbG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcm
IHNjcmlwdCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmICghcGFnZS0+aGFuZGxl
KCktPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICBpZiAoIWFkYXB0ZXItPnBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmhhbmRs
ZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoY2FsbElkLCBzY3JpcHQpOworICAgIGFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7CiAjZW5kaWYK
IH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UoUVdl
YlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JT
aG93KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmICghcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAg
ICBpZiAoIWFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNs
b3NlKCk7CisgICAgYWRhcHRlci0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zaG93KCk7
CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9y
U2hvdyhRV2ViUGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYklu
c3BlY3RvckNsb3NlKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlcikKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIGlmICghcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKSkKKyAgICBpZiAoIWFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNob3coKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmNsb3NlKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFz
RG9jdW1lbnRFbGVtZW50KFFXZWJGcmFtZSogZnJhbWUpCitib29sIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpoYXNEb2N1bWVudEVsZW1lbnQoUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRlcikKIHsK
LSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSktPmRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpOworICAgIHJldHVybiBhZGFwdGVyLT5mcmFtZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgaXNBdXRvZmlsbGVk
KQpAQCAtMzA2LDkgKzMwMCw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFZh
bHVlRm9yVXNlcihjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCwgY29uc3QKIC8vIFBhdXNlIGEg
Z2l2ZW4gQ1NTIGFuaW1hdGlvbiBvciB0cmFuc2l0aW9uIG9uIHRoZSB0YXJnZXQgbm9kZSBhdCBh
IHNwZWNpZmljIHRpbWUuCiAvLyBJZiB0aGUgYW5pbWF0aW9uIG9yIHRyYW5zaXRpb24gaXMgYWxy
ZWFkeSBwYXVzZWQsIGl0IHdpbGwgdXBkYXRlIGl0cyBwYXVzZSB0aW1lLgogLy8gVGhpcyBtZXRo
b2QgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0ZXN0aW5nIHRoZSBDU1MgYW5pbWF0
aW9uIGFuZCB0cmFuc2l0aW9uIHN5c3RlbS4KLWJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnBhdXNlQW5pbWF0aW9uKFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJmFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nICZlbGVtZW50SWQpCitib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihRV2ViRnJhbWVBZGFwdGVyICphZGFw
dGVyLCBjb25zdCBRU3RyaW5nICZhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0
cmluZyAmZWxlbWVudElkKQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7
CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzI2LDkg
KzMyMCw5IEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9uKFFX
ZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJmFuCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIt
PnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvcmVOb2RlLT5yZW5kZXJlcigpLCBhbmltYXRpb25OYW1l
LCB0aW1lKTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VUcmFuc2l0
aW9uT2ZQcm9wZXJ0eShRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZwcm9wZXJ0eU5h
bWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nICZlbGVtZW50SWQpCitib29sIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KFFXZWJGcmFtZUFkYXB0
ZXIgKmFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcgJnByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNv
bnN0IFFTdHJpbmcgJmVsZW1lbnRJZCkKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gUVdlYkZy
YW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXIt
PmZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTM0Nyw5ICszNDEsOSBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5z
aXRpb25PZlByb3BlcnR5KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0CiB9CiAKIC8vIFJldHVybnMg
dGhlIHRvdGFsIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBhbmltYXRpb25zIChpbmNsdWRl
cyBib3RoIENTUyB0cmFuc2l0aW9ucyBhbmQgQ1NTIGFuaW1hdGlvbnMpLgotaW50IER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoUVdlYkZyYW1lICpmcmFt
ZSkKK2ludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFX
ZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBhZGFw
dGVyLT5mcmFtZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0zNjAsOSArMzU0LDkgQEAgaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoUVdlYkZyYW1lICpmcmFtZSkKICAgICByZXR1cm4gY29udHJvbGxl
ci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7CiB9CiAK
LXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyRnJhbWVOYW1lKFFXZWJGcmFtZSog
ZnJhbWUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckZyYW1lTmFtZShRV2Vi
RnJhbWVBZGFwdGVyICphZGFwdGVyKQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJh
bWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+
ZnJhbWU7CiAgICAgY29yZUZyYW1lLT50cmVlKCktPmNsZWFyTmFtZSgpOwogfQogCkBAIC0zODEs
MjQgKzM3NSw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJhZ2VDb2xsZWN0
b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0CiAgICAgZ2NDb250cm9sbGVyKCku
Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25l
KTsKIH0KIAotLy8gU3VzcGVuZCBhY3RpdmUgRE9NIG9iamVjdHMgaW4gdGhpcyBmcmFtZS4KLXZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKFFXZWJG
cmFtZSogZnJhbWUpCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6
OmNvcmUoZnJhbWUpOwotICAgIGlmIChjb3JlRnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjaGFuZ2VkIHRha2UgYSBSZWFzb25Gb3JT
dXNwZW5zaW9uIHBhcmFtZXRlciAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ1NzMyCi0gICAgICAgIGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+c3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0OjpKYXZhU2NyaXB0RGVidWdnZXJQ
YXVzZWQpOwotfQotCi0vLyBSZXN1bWUgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUu
Ci12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKFFX
ZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZh
dGU6OmNvcmUoZnJhbWUpOwotICAgIGlmIChjb3JlRnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOwotfQotCiB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKGNv
bnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90
b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKQogewogICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeSgqU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoc291cmNlT3JpZ2lu
KSwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyk7CkBAIC00MTksMzkgKzM5NSwzOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9y
YgogICAgIFNjaGVtZVJlZ2lzdHJ5OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgdmFsdWUp
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChR
V2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgdmFsdWUpCiB7Ci0gICAgcGFnZS0+aGFuZGxl
KCktPnBhZ2UtPnNldHRpbmdzKCktPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKHZhbHVlKTsKKyAg
ICBhZGFwdGVyLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZCh2YWx1
ZSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIHZhbHVlKQordm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoUVdlYlBhZ2VBZGFw
dGVyKiBhZGFwdGVyLCBib29sIHZhbHVlKQogewotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5z
ZXR0aW5ncygpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCh2YWx1ZSk7CisgICAgYWRh
cHRlci0+cGFnZS0+c2V0dGluZ3MoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQodmFs
dWUpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChRV2ViUGFnZUFkYXB0
ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBwYWdlLT5kLT5zbWFydEluc2VydERl
bGV0ZUVuYWJsZWQgPSBlbmFibGVkOworICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudFF0Kj4o
YWRhcHRlci0+cGFnZS0+ZWRpdG9yQ2xpZW50KCkpLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGVk
KQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICBwYWdlLT5kLT5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkID0gZW5hYmxlZDsKKyAg
ICBzdGF0aWNfY2FzdDxFZGl0b3JDbGllbnRRdCo+KGFkYXB0ZXItPnBhZ2UtPmVkaXRvckNsaWVu
dCgpKS0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChlbmFibGVkKTsKIH0KIAog
Ci12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUo
UVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVl
KQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1l
KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0
cmluZyYgdmFsdWUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuZXhlY3V0
ZSh2YWx1ZSk7CisgICAgYWRhcHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5leGVjdXRlKHZhbHVlKTsKIH0K
IAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNDb21tYW5kRW5hYmxlZChRV2ViUGFn
ZSogcGFnZSwgY29uc3QgUVN0cmluZyYgbmFtZSkKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OmlzQ29tbWFuZEVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3Ry
aW5nJiBuYW1lKQogewotICAgIHJldHVybiBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5p
c0VuYWJsZWQoKTsKKyAgICByZXR1cm4gYWRhcHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5pc0VuYWJsZWQo
KTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZmluZFN0cmluZyhRV2ViUGFn
ZSogcGFnZSwgY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9u
QXJyYXkpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKFFXZWJQYWdl
QWRhcHRlciAqYWRhcHRlciwgY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlz
dCYgb3B0aW9uQXJyYXkpCiB7CiAgICAgLy8gMS4gUGFyc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUg
YXJyYXkKICAgICBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKQEAgLTQ3Myw3ICs0
NDksNyBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKFFXZWJQYWdl
KiBwYWdlLCBjb25zdCBRU3RyaW5nJiBzdHJpbmcsCiAgICAgfQogCiAgICAgLy8gMi4gZmluZCB0
aGUgc3RyaW5nCi0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gcGFnZS0+aGFuZGxlKCktPnBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBhZGFwdGVyLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CiAgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5lZGl0b3IoKS0+Zmlu
ZFN0cmluZyhzdHJpbmcsIG9wdGlvbnMpOwogfQogCkBAIC01MTQsOSArNDkwLDkgQEAgUVZhcmlh
bnRNYXAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNp
dGVkSW5mbyhjb25zdCBRV2UKICAgICByZXR1cm4gcmVzOwogfQogCi1RVmFyaWFudExpc3QgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UpCitRVmFy
aWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2VB
ZGFwdGVyICphZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IHBhZ2UtPmhh
bmRsZSgpLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gYWRhcHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIFFWYXJpYW50TGlzdCBzZWxlY3RlZFJhbmdl
OwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCk7CiAKQEAgLTUzOCw5ICs1MTQsOSBAQCBRVmFyaWFudExpc3QgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UpCiAKIH0K
IAotUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZShRV2ViUGFnZSogcGFnZSwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKQorUVZh
cmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkK
IHsKLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1l
KiBmcmFtZSA9IGFkYXB0ZXItPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKICAgICBRVmFyaWFudExpc3QgcmVjdDsKIAogICAgIGlmICgobG9jYXRpb24gKyBs
ZW5ndGggPCBsb2NhdGlvbikgJiYgKGxvY2F0aW9uICsgbGVuZ3RoKSkKQEAgLTU1Niw5ICs1MzIs
OSBAQCBRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKFFXZWJQYWdlKiBwYWdlLAogICAgIHJldHVybiByZWN0OwogfQogCi1ib29s
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1l
bnRXaXRoSWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQorYm9v
bCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIGVsZW1l
bnRJZCkKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShm
cmFtZSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU3NCw5ICs1NTAsOSBAQCBi
b29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVs
ZW1lbnRXaXRoSWQoUVdlYkZyYW1lKgogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzVGV4dEZp
ZWxkKCkgJiYgIWlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkgJiYgaW5wdXRFbGVtZW50
LT5zaG91bGRBdXRvY29tcGxldGUoKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2V0V2luZG93c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IoUVdlYlBhZ2UqIHBhZ2UpCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaW5kb3dzQmVoYXZpb3JBc0VkaXRpbmdC
ZWhhdmlvcihRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgUGFnZSogY29yZVBhZ2Ug
PSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFw
dGVyLT5wYWdlOwogICAgIGlmICghY29yZVBhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBjb3Jl
UGFnZS0+c2V0dGluZ3MoKS0+c2V0RWRpdGluZ0JlaGF2aW9yVHlwZShFZGl0aW5nV2luZG93c0Jl
aGF2aW9yKTsKQEAgLTY3Niw5ICs2NTIsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpkdW1wTm90aWZpY2F0aW9uKGJvb2wgYikKICNlbmRpZgogfQogCi1RU3RyaW5nIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp2aWV3cG9ydEFzVGV4dChRV2ViUGFnZSogcGFnZSwgaW50IGRldmlj
ZURQSSwgY29uc3QgUVNpemUmIGRldmljZVNpemUsIGNvbnN0IFFTaXplJiBhdmFpbGFibGVTaXpl
KQorUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dmlld3BvcnRBc1RleHQoUVdlYlBh
Z2VBZGFwdGVyKiBhZGFwdGVyLCBpbnQgZGV2aWNlRFBJLCBjb25zdCBRU2l6ZSYgZGV2aWNlU2l6
ZSwgY29uc3QgUVNpemUmIGF2YWlsYWJsZVNpemUpCiB7Ci0gICAgV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMgYXJncyA9IHBhZ2UtPmQtPnZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJncyA9IGFkYXB0ZXItPnZpZXdwb3J0QXJndW1lbnRzKCk7
CiAKICAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlRFBJIC8gV2ViQ29yZTo6Vmll
d3BvcnRBcmd1bWVudHM6OmRlcHJlY2F0ZWRUYXJnZXREUEk7CiAgICAgV2ViQ29yZTo6Vmlld3Bv
cnRBdHRyaWJ1dGVzIGNvbmYgPSBXZWJDb3JlOjpjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFy
Z3MsCkBAIC03MDIsNjIgKzY3OCw2MiBAQCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
Ojp2aWV3cG9ydEFzVGV4dChRV2ViUGFnZSogcGFnZSwgaW50IGRldmljZURQSSwgYwogICAgIHJl
dHVybiByZXM7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5
KFFXZWJGcmFtZSogZnJhbWUsIGZsb2F0IHNjYWxlZmFjdG9yLCBjb25zdCBRUG9pbnQmIG9yaWdp
bikKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KFFXZWJGcmFtZUFk
YXB0ZXIqIGFkYXB0ZXIsIGZsb2F0IHNjYWxlZmFjdG9yLCBjb25zdCBRUG9pbnQmIG9yaWdpbikK
IHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29y
ZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1l
OwogICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCiAgICAgICAgIHBhZ2Ut
PnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZWZhY3Rvciwgb3JpZ2luKTsKIH0KIAotdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKFFXZWJQYWdlKiBw
YWdlLCBib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVC
ZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKK3Zv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihRV2Vi
UGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEs
IGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwg
ZG91YmxlIGdhbW1hKQogewogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCi0gICAgUGFn
ZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29y
ZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayog
bW9ja0NsaWVudCA9IHRvRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKERldmljZU9yaWVudGF0
aW9uQ29udHJvbGxlcjo6ZnJvbShjb3JlUGFnZSktPmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkp
OwogICAgIG1vY2tDbGllbnQtPnNldE9yaWVudGF0aW9uKERldmljZU9yaWVudGF0aW9uRGF0YTo6
Y3JlYXRlKGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Q
cm92aWRlR2FtbWEsIGdhbW1hKSk7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2soUVdlYlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEdlb2xvY2F0aW9uTW9jayhRV2ViUGFnZUFkYXB0ZXIq
IGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFBhZ2UqIGNvcmVQYWdl
ID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRh
cHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2tDbGllbnQgPSB0b0dl
b2xvY2F0aW9uQ2xpZW50TW9jayhHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20oY29yZVBhZ2Up
LT5jbGllbnQoKSk7CiAgICAgbW9ja0NsaWVudC0+cmVzZXQoKTsKICNlbmRpZgogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFFX
ZWJQYWdlKiBwYWdlLCBib29sIGFsbG93ZWQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwg
Ym9vbCBhbGxvd2VkKQogewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICBQYWdlKiBjb3Jl
UGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKyAgICBQYWdlKiBjb3JlUGFnZSA9
IGFkYXB0ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrQ2xpZW50ID0g
dG9HZW9sb2NhdGlvbkNsaWVudE1vY2soR2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9tKGNvcmVQ
YWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNldFBlcm1pc3Npb24oYWxsb3dlZCk7
CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24oUVdlYlBhZ2UqIHBhZ2UsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICNpZiBF
TkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6
OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIEdl
b2xvY2F0aW9uQ2xpZW50TW9jayogbW9ja0NsaWVudCA9IHRvR2VvbG9jYXRpb25DbGllbnRNb2Nr
KEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShjb3JlUGFnZSktPmNsaWVudCgpKTsKICAgICBt
b2NrQ2xpZW50LT5zZXRQb3NpdGlvbihHZW9sb2NhdGlvblBvc2l0aW9uOjpjcmVhdGUoY3VycmVu
dFRpbWUoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpKTsKICNlbmRpZgogfQogCi12
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBt
ZXNzYWdlKQogewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICBQYWdlKiBjb3JlUGFnZSA9
IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKyAgICBQYWdlKiBjb3JlUGFnZSA9IGFkYXB0
ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrQ2xpZW50ID0gc3RhdGlj
X2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oR2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9t
KGNvcmVQYWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNldFBvc2l0aW9uVW5hdmFp
bGFibGVFcnJvcihtZXNzYWdlKTsKICNlbmRpZgogfQogCi1pbnQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFFXZWJQ
YWdlKiBwYWdlKQoraW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBlbmRpbmdH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7
CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQ
cml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsK
ICAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2tDbGllbnQgPSB0b0dlb2xvY2F0aW9uQ2xp
ZW50TW9jayhHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20oY29yZVBhZ2UpLT5jbGllbnQoKSk7
CiAgICAgcmV0dXJuIG1vY2tDbGllbnQtPm51bWJlck9mUGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0
cygpOwogI2Vsc2UKQEAgLTc5NCw5ICs3NzAsOSBAQCBRTWFwPFFTdHJpbmcsIFFXZWJIaXN0b3J5
SXRlbT4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdldENoaWxkSGlzdG9yeUl0ZW1zKGNvbgog
ICAgIHJldHVybiBraWRzOwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91
bGRDbG9zZShRV2ViRnJhbWUqIGZyYW1lKQorYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
c2hvdWxkQ2xvc2UoUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRlcikKIHsKLSAgICBXZWJDb3JlOjpG
cmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgV2Vi
Q29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIHJldHVybiBjb3Jl
RnJhbWUtPmxvYWRlcigpLT5zaG91bGRDbG9zZSgpOwogfQogCkBAIC04MDUsNyArNzgxLDcgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJTY3JpcHRXb3JsZHMoKQogICAgIG1f
d29ybGRNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoUVdlYkZyYW1lKiBmcmFtZSwgaW50IHdvcmxkSUQs
IGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIsIGlu
dCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgUVdlYlNjcmlwdFdvcmxk
KiBzY3JpcHRXb3JsZDsKICAgICBpZiAoIXdvcmxkSUQpIHsKQEAgLTgxNiw3ICs3OTIsNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChRV2ViRnJhbWUqIGZyYW1lLCBpbgogICAgIH0gZWxzZQogICAgICAgICBzY3JpcHRXb3JsZCA9
IG1fd29ybGRNYXAudmFsdWUod29ybGRJRCk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZy
YW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUq
IGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogcHJv
eHkgPSBjb3JlRnJhbWUtPnNjcmlwdCgpOwogCkBAIC04MjUsMTQgKzgwMSwxNCBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2Vi
RnJhbWUqIGZyYW1lLCBpbgogICAgIHByb3h5LT5leGVjdXRlU2NyaXB0SW5Xb3JsZChzY3JpcHRX
b3JsZC0+d29ybGQoKSwgc2NyaXB0LCB0cnVlKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcm
IHNvdXJjZUNvZGUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVc2VyU3R5bGVT
aGVldChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUp
CiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmdyb3VwKCkuYWRkVXNlclN0eWxlU2hlZXRU
b1dvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzb3VyY2VDb2RlLCBRVXJsKCksIFZlY3Rv
cjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVz
KTsKKyAgICBhZGFwdGVyLT5wYWdlLT5ncm91cCgpLmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc291cmNlQ29kZSwgUVVybCgpLCBWZWN0b3I8U3RyaW5n
PigpLCBWZWN0b3I8U3RyaW5nPigpLCBXZWJDb3JlOjpJbmplY3RJbkFsbEZyYW1lcyk7CiB9CiAK
LXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhRV2Vi
UGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCkt
PnBhZ2UtPmdyb3VwKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRzRnJvbVdvcmxkKG1haW5UaHJlYWRO
b3JtYWxXb3JsZCgpKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5ncm91cCgpLnJlbW92ZVVzZXJTdHls
ZVNoZWV0c0Zyb21Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiB9CiAKIHZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNv
bnN0IFFTdHJpbmcmIHRpdGxlKQpAQCAtODQyLDMxICs4MTgsMzEgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgUVN0
cmluZyYgdGkKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRE
ZWZlcnNMb2FkaW5nKFFXZWJQYWdlKiBwYWdlLCBib29sIGZsYWcpCit2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwg
Ym9vbCBmbGFnKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3Jl
KHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBpZiAoY29y
ZVBhZ2UpCiAgICAgICAgIGNvcmVQYWdlLT5zZXREZWZlcnNMb2FkaW5nKGZsYWcpOwogfQogCi12
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2soUVdlYlBhZ2UqIHBhZ2UpCit2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2soUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVy
KQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOwor
ICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBpZiAoY29yZVBhZ2UpCiAg
ICAgICAgIGNvcmVQYWdlLT5nb0JhY2soKTsKIH0KIAogLy8gQVBJIENhbmRpZGF0ZT8KLVFTdHJp
bmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc3BvbnNlTWltZVR5cGUoUVdlYkZyYW1lKiBm
cmFtZSkKK1FTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc3BvbnNlTWltZVR5cGUo
UVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZy
YW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUq
IGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KiBkb2NMb2FkZXIgPSBjb3JlRnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwogICAg
IHJldHVybiBkb2NMb2FkZXItPnJlc3BvbnNlTUlNRVR5cGUoKTsKIH0KIAotdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIoUVdlYkZyYW1lKiBmcmFtZSkKK3ZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyT3BlbmVyKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0
ZXIpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6
OmNvcmUoZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5m
cmFtZTsKICAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIoMCk7CiB9CiAKQEAgLTg3
NSw0MCArODUxLDE2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVSTFRvUmVk
aXJlY3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBjb25zdCBRU3RyCiAgICAgRnJhbWVMb2FkZXJD
bGllbnRRdDo6VVJMc1RvUmVkaXJlY3Rbb3JpZ2luXSA9IGRlc3RpbmF0aW9uOwogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5h
YmxlZChRV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChRV2ViUGFnZUFkYXB0
ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBh
Z2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFn
ZTsKICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQYWdlLT5zZXR0aW5ncygpLT5zZXRJ
bnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChlbmFibGUpOwogfQogCi0jaWZuZGVmIFFU
X05PX01FTlUKLXN0YXRpYyBRU3RyaW5nTGlzdCBpdGVyYXRlQ29udGV4dE1lbnUoUU1lbnUqIG1l
bnUpCi17Ci0gICAgaWYgKCFtZW51KQotICAgICAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLQot
ICAgIFFTdHJpbmdMaXN0IGl0ZW1zOwotICAgIFFMaXN0PFFBY3Rpb24gKj4gYWN0aW9ucyA9IG1l
bnUtPmFjdGlvbnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuY291bnQoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChhY3Rpb25zLmF0KGkpLT5pc1NlcGFyYXRvcigpKQotICAgICAg
ICAgICAgaXRlbXMgPDwgUUxhdGluMVN0cmluZygiPHNlcGFyYXRvcj4iKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgaXRlbXMgPDwgYWN0aW9ucy5hdChpKS0+dGV4dCgpOwotICAgICAgICBp
ZiAoYWN0aW9ucy5hdChpKS0+bWVudSgpKQotICAgICAgICAgICAgaXRlbXMgPDwgaXRlcmF0ZUNv
bnRleHRNZW51KGFjdGlvbnMuYXQoaSktPm1lbnUoKSk7Ci0gICAgfQotICAgIHJldHVybiBpdGVt
czsKLX0KLSNlbmRpZgotCi1RU3RyaW5nTGlzdCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29u
dGV4dE1lbnUoUVdlYlBhZ2UqIHBhZ2UpCitRU3RyaW5nTGlzdCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6Y29udGV4dE1lbnUoUVdlYlBhZ2VBZGFwdGVyKiBwYWdlKQogewotI2lmbmRlZiBRVF9O
T19DT05URVhUTUVOVQotICAgIHJldHVybiBpdGVyYXRlQ29udGV4dE1lbnUocGFnZS0+ZC0+Y3Vy
cmVudENvbnRleHRNZW51LmRhdGEoKSk7Ci0jZWxzZQotICAgIHJldHVybiBRU3RyaW5nTGlzdCgp
OwotI2VuZGlmCisgICAgcmV0dXJuIHBhZ2UtPm1lbnVBY3Rpb25zQXNUZXh0KCk7CiB9CiAKIGRv
dWJsZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVmYXVsdE1pbmltdW1UaW1lckludGVydmFs
KCkKQEAgLTkxNiwxOCArODY4LDE4IEBAIGRvdWJsZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
ZGVmYXVsdE1pbmltdW1UaW1lckludGVydmFsKCkKICAgICByZXR1cm4gU2V0dGluZ3M6OmRlZmF1
bHRNaW5ET01UaW1lckludGVydmFsKCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFsKFFXZWJQYWdlKiBwYWdlLCBkb3VibGUgaW50ZXJ2
YWwpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZh
bChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGRvdWJsZSBpbnRlcnZhbCkKIHsKLSAgICBQYWdl
KiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKyAgICBQYWdlKiBjb3Jl
UGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgaWYgKCFjb3JlUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY29yZVBhZ2UtPnNldHRpbmdzKCktPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwoaW50
ZXJ2YWwpOwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29v
a2llUG9saWN5QWxsb3dzKFFXZWJQYWdlICpwYWdlLCBjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFV
cmwmIGZpcnN0UGFydHlVcmwpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBh
cnR5Q29va2llUG9saWN5QWxsb3dzKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlciwgY29uc3QgUVVy
bCYgdXJsLCBjb25zdCBRVXJsJiBmaXJzdFBhcnR5VXJsKQogewotICAgIFBhZ2UqIGNvcmVQYWdl
ID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRh
cHRlci0+cGFnZTsKICAgICByZXR1cm4gdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29y
ZVBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSwgdXJsLCBm
aXJzdFBhcnR5VXJsKTsKIH0KIApAQCAtOTM2LDEyICs4ODgsMTIgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6ZW5hYmxlTW9ja1Njcm9sbGJhcnMoKQogICAgIFNldHRpbmdzOjpzZXRN
b2NrU2Nyb2xsYmFyc0VuYWJsZWQodHJ1ZSk7CiB9CiAKLVFVcmwgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6Om1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFFTdHJpbmcmIGVsZW1lbnRJZCkKK1FVcmwgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om1lZGlh
Q29udGVudFVybEJ5RWxlbWVudElkKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIsIGNvbnN0IFFT
dHJpbmcmIGVsZW1lbnRJZCkKIHsKICAgICBRVXJsIHJlczsKIAogI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKFFUX01VTFRJTUVESUEpCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFt
ZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIHJlczsKIApAQCAtOTY3LDEw
ICs5MTksMTAgQEAgUVVybCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bWVkaWFDb250ZW50VXJs
QnlFbGVtZW50SWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QKIH0KIAogLy8gQVBJIENhbmRpZGF0
ZT8KLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0ZUh0bWwoUVdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYgYmFzZVVybCwgY29u
c3QgUVVybCYgZmFpbGluZ1VybCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEFs
dGVybmF0ZUh0bWwoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgaHRt
bCwgY29uc3QgUVVybCYgYmFzZVVybCwgY29uc3QgUVVybCYgZmFpbGluZ1VybCkKIHsKICAgICBL
VVJMIGt1cmwoYmFzZVVybCk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJG
cmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUg
PSBhZGFwdGVyLT5mcmFtZTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChr
dXJsKTsKICAgICBjb25zdCBRQnl0ZUFycmF5IHV0ZjggPSBodG1sLnRvVXRmOCgpOwogICAgIFdU
Rjo6UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHV0ZjguY29uc3REYXRhKCksIHV0ZjgubGVuZ3RoKCkpOwpAQCAtOTc4LDkg
KzkzMCw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0ZUh0bWwo
UVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYKICAgICBjb3JlRnJhbWUtPmxvYWRlcigp
LT5sb2FkKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihRV2ViUGFnZSogcGFnZSwgY29u
c3QgY2hhciogdGV4dCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21w
b3NpdGlvbihRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIqIHRleHQpCiB7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBhZGFwdGVyLT5wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OTcsMTUgKzk0OSw5IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihRV2ViUGFnZSogcGFnZSwgY29uc3Qg
Y2hhciogdGV4CiAgICAgICAgIGVkaXRvci0+aW5zZXJ0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRl
eHQpLCAwKTsKIH0KIAotUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bGF5ZXJUcmVl
QXNUZXh0KFFXZWJGcmFtZSogZnJhbWUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpp
bmplY3RJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcikKIHsKLSAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7
Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+bGF5ZXJUcmVlQXNUZXh0KCk7Ci19Ci0KLXZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChRV2ViRnJhbWUqIGZy
YW1lKQotewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRl
Ojpjb3JlKGZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+
ZnJhbWU7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1l
LCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIApAQCAt
MTAyMiw5ICs5NjgsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRl
cm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0
OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFtZSogZnJhbWUpCit2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVybmFsc09iamVjdChRV2ViRnJhbWVB
ZGFwdGVyKiBhZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2Vi
RnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1l
ID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5k
b3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2lu
ZG93KTsKIApAQCAtMTA0MSw5ICs5ODcsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpyZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKICAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwogfQogCi1RSW1hZ2Ug
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhaW50UGFnZXNXaXRoQm91bmRhcmllcyhRV2ViRnJh
bWUqIHFmcmFtZSkKK1FJbWFnZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFpbnRQYWdlc1dp
dGhCb3VuZGFyaWVzKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgRnJhbWUqIGZy
YW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxZnJhbWUpOworICAgIEZyYW1lKiBmcmFtZSA9
IGFkYXB0ZXItPmZyYW1lOwogICAgIFByaW50Q29udGV4dCBwcmludENvbnRleHQoZnJhbWUpOwog
CiAgICAgUVJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgpOwpAQCAtMTA4NCwx
MTkgKzEwMzAsMjEgQEAgUUltYWdlIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWludFBhZ2Vz
V2l0aEJvdW5kYXJpZXMoUVdlYkZyYW1lKiBxZnJhbWUpCiAgICAgcmV0dXJuIGltYWdlOwogfQog
Ci12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRUcmFja1JlcGFpbnRSZWN0cyhRV2Vi
RnJhbWUqIGZyYW1lLCBib29sIGVuYWJsZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldFRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgZW5h
YmxlKQogewotICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpLT52aWV3KCktPnNldFRy
YWNrc1JlcGFpbnRzKGVuYWJsZSk7CisgICAgYWRhcHRlci0+ZnJhbWUtPnZpZXcoKS0+c2V0VHJh
Y2tzUmVwYWludHMoZW5hYmxlKTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
dHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lKiBmcmFtZSkKK2Jvb2wgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7
Ci0gICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpLT52aWV3KCktPmlzVHJh
Y2tpbmdSZXBhaW50cygpOworICAgIHJldHVybiBhZGFwdGVyLT5mcmFtZS0+dmlldygpLT5pc1Ry
YWNraW5nUmVwYWludHMoKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2V0
VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWUqIGZyYW1lLCBRVmVjdG9yPFFSZWN0PiYgcmVz
dWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2V0VHJhY2tlZFJlcGFpbnRSZWN0
cyhRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyLCBRVmVjdG9yPFFSZWN0PiYgcmVzdWx0KQogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgY29uc3QgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cyA9IGNvcmVGcmFtZS0+dmlldygpLT50cmFja2VkUmVwYWludFJlY3RzKCk7
CiAgICAgcmVzdWx0LnJlc2l6ZShyZWN0cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVjdHNbaV0p
OwogfQotCi0vLyBQcm92aWRlIGEgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3Vz
bHkgZXhwb3J0ZWQgcHJpdmF0ZSBzeW1ib2xzIGFzIG9mIFF0V2ViS2l0IDQuNiByZWxlYXNlCi0K
LXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhRV2ViRnJhbWUq
IGZyYW1lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXN1bWVBY3RpdmVET01P
YmplY3RzKGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9zdXNwZW5kQWN0aXZl
RE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhmcmFtZSk7Ci19Ci0KLXZvaWQgUVdFQktJVF9F
WFBPUlQgcXRfZHJ0X2NsZWFyRnJhbWVOYW1lKFFXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyRnJhbWVOYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBR
V0VCS0lUX0VYUE9SVCBxdF9kcnRfZ2FyYmFnZUNvbGxlY3Rvcl9jb2xsZWN0KCkKLXsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsKLX0KLQot
dm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfZ2FyYmFnZUNvbGxlY3Rvcl9jb2xsZWN0T25BbHRl
cm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRp
bERvbmUpOwotfQotCi1pbnQgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X2phdmFTY3JpcHRPYmplY3Rz
Q291bnQoKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6amF2YVNjcmlw
dE9iamVjdHNDb3VudCgpOwotfQotCi1pbnQgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X251bWJlck9m
QWN0aXZlQW5pbWF0aW9ucyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lKTsKLX0KLQot
dm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfb3ZlcndyaXRlUGx1Z2luRGlyZWN0b3JpZXMoKQot
ewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpvdmVyd3JpdGVQbHVnaW5EaXJlY3Rvcmll
cygpOwotfQotCi1ib29sIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9wYXVzZUFuaW1hdGlvbihRV2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwg
Y29uc3QgUVN0cmluZyYgZWxlbWVudElkKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUsIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1l
bnRJZCk7Ci19Ci0KLWJvb2wgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X3BhdXNlVHJhbnNpdGlvbk9m
UHJvcGVydHkoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgcHJvcGVydHlOYW1lLCBk
b3VibGUgdGltZSwgY29uc3QgUVN0cmluZyAmZWxlbWVudElkKQotewotICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShmcmFtZSwgcHJv
cGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0
X2RydF9yZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKQotewotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKTsKLX0KLQotdm9pZCBRV0VC
S0lUX0VYUE9SVCBxdF9kcnRfcnVuKGJvb2wgYikKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZChiKTsKLX0KLQotdm9pZCBRV0VCS0lU
X0VYUE9SVCBxdF9kcnRfd2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihjb25zdCBRU3RyaW5nJiBz
b3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFT
dHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykK
LXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdp
bihzb3VyY2VPcmlnaW4sIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQotCi1RU3RyaW5nIFFXRUJLSVRfRVhQT1JUIHF0
X3dlYnBhZ2VfZ3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlKQotewotICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZShwYWdlKTsKLX0KLQotdm9pZCBRV0VC
S0lUX0VYUE9SVCBxdF93ZWJwYWdlX3NldEdyb3VwTmFtZShRV2ViUGFnZSogcGFnZSwgY29uc3Qg
UVN0cmluZyYgZ3JvdXBOYW1lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQ
YWdlU2V0R3JvdXBOYW1lKHBhZ2UsIGdyb3VwTmFtZSk7Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBP
UlQgcXRfZHVtcF9mcmFtZV9sb2FkZXIoYm9vbCBiKQotewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIoYik7Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRf
ZHVtcF9yZXNvdXJjZV9sb2FkX2NhbGxiYWNrcyhib29sIGIpCi17Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoYik7Ci19Ci0KLXZvaWQgUVdF
QktJVF9FWFBPUlQgcXRfZHVtcF9lZGl0aW5nX2NhbGxiYWNrcyhib29sIGIpCi17Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKGIpOwotfQotCi12b2lk
IFFXRUJLSVRfRVhQT1JUIHF0X2R1bXBfc2V0X2FjY2VwdHNfZWRpdGluZyhib29sIGIpCi17Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBTZXRBY2NlcHRzRWRpdGluZyhiKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5oCmluZGV4IGQwNjAwZmZhN2RhZTQ0OWYxODEwNTIyYTljNjA5Zjgz
NDIxYTYzYzkuLjMxOGFmMWIzYzJlZmU3NDY0ZDAyZGYyODMzOTQyODM1ZTE3NGE5NjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpZm5kZWYgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXRfaAogI2RlZmluZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdF9oCiAKLSNpbmNsdWRl
ICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRnbG9iYWwuaCIKICNp
bmNsdWRlIDxRTmV0d29ya0Nvb2tpZUphcj4KICNpbmNsdWRlIDxRVmFyaWFudD4KICNpbmNsdWRl
IDxRVmVjdG9yPgpAQCAtNDMsNyArNDMsOCBAQCBjbGFzcyBRdERSVE5vZGVSdW50aW1lOwogCiBj
bGFzcyBRV2ViRWxlbWVudDsKIGNsYXNzIFFXZWJGcmFtZTsKLWNsYXNzIFFXZWJQYWdlOworY2xh
c3MgUVdlYkZyYW1lQWRhcHRlcjsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIGNsYXNzIFFXZWJI
aXN0b3J5SXRlbTsKIGNsYXNzIFFXZWJTY3JpcHRXb3JsZDsKIApAQCAtODksMjQgKzkwLDIyIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKIAotICAgIHN0YXRpYyB2
b2lkIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmlu
ZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOwotICAgIHN0YXRpYyBib29sIGlzQ29tbWFu
ZEVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRp
YyBib29sIGZpbmRTdHJpbmcoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHN0cmluZywg
Y29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFycmF5KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCk7Ci0gICAg
c3RhdGljIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChRV2ViUGFnZSog
cGFnZSwgYm9vbCBlbmFibGVkKTsKLSAgICBzdGF0aWMgUVZhcmlhbnRMaXN0IHNlbGVjdGVkUmFu
Z2UoUVdlYlBhZ2UqIHBhZ2UpOwotICAgIHN0YXRpYyBRVmFyaWFudExpc3QgZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCk7
Ci0gICAgc3RhdGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFFXZWJQYWdlKiwgY29uc3QgY2hh
ciogdGV4dCk7CisgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKFFXZWJQ
YWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYg
dmFsdWUpOworICAgIHN0YXRpYyBib29sIGlzQ29tbWFuZEVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVy
KiBhZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBuYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBmaW5kU3Ry
aW5nKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25z
dCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpOworICAgIHN0YXRpYyB2b2lkIHNldFNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlZCk7
CisgICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChRV2Vi
UGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlZCk7CisgICAgc3RhdGljIFFWYXJpYW50
TGlzdCBzZWxlY3RlZFJhbmdlKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlcik7CisgICAgc3RhdGlj
IFFWYXJpYW50TGlzdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2ViUGFnZUFkYXB0ZXIq
IGFkYXB0ZXIsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgY29u
ZmlybUNvbXBvc2l0aW9uKFFXZWJQYWdlQWRhcHRlciosIGNvbnN0IGNoYXIqIHRleHQpOwogCi0g
ICAgc3RhdGljIGJvb2wgcGF1c2VBbmltYXRpb24oUVdlYkZyYW1lKiwgY29uc3QgUVN0cmluZyYg
bmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCk7Ci0gICAgc3RhdGlj
IGJvb2wgcGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShRV2ViRnJhbWUqLCBjb25zdCBRU3RyaW5n
JiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKLSAgICBzdGF0
aWMgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKTsKLSAgICBz
dGF0aWMgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpOworICAg
IHN0YXRpYyBib29sIHBhdXNlQW5pbWF0aW9uKFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3Ry
aW5nJiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKKyAgICBz
dGF0aWMgYm9vbCBwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KFFXZWJGcmFtZUFkYXB0ZXIqLCBj
b25zdCBRU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElk
KTsKIAogICAgIHN0YXRpYyB2b2lkIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWUoYm9vbCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChRV2ViUGFnZSosIGJvb2wpOwotICAgIHN0
YXRpYyB2b2lkIHNldENhcmV0QnJvd3NpbmdFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIHZh
bHVlKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChRV2Vi
UGFnZSosIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQo
UVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyLCBib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgdmFsdWUpOwor
ICAgIHN0YXRpYyB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFFXZWJQYWdlQWRh
cHRlciAqYWRhcHRlciwgYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgc2V0RHVtcFJlbmRlclRyZWVN
b2RlRW5hYmxlZChib29sIGIpOwogCiAgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNv
bGxlY3QoKTsKQEAgLTExNSwyMCArMTE0LDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBz
ZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVsZW1lbnQmLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSk7
CiAgICAgc3RhdGljIGludCBqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7CiAgICAgc3RhdGljIHZv
aWQgY2xlYXJTY3JpcHRXb3JsZHMoKTsKLSAgICBzdGF0aWMgdm9pZCBldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbnQgd29ybGRJRCwgY29uc3QgUVN0cmlu
ZyYgc2NyaXB0KTsKKyAgICBzdGF0aWMgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyLCBpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYg
c2NyaXB0KTsKIAotICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQoUVdl
YlBhZ2UqIHBhZ2UsIGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwotICAgIHN0
YXRpYyB2b2lkIHdlYkluc3BlY3RvclNob3coUVdlYlBhZ2UqIHBhZ2UpOwotICAgIHN0YXRpYyB2
b2lkIHdlYkluc3BlY3RvckNsb3NlKFFXZWJQYWdlKiBwYWdlKTsKKyAgICBzdGF0aWMgdm9pZCB3
ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlciwgbG9uZyBj
YWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CisgICAgc3RhdGljIHZvaWQgd2ViSW5zcGVj
dG9yU2hvdyhRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIpOworICAgIHN0YXRpYyB2b2lkIHdlYklu
c3BlY3RvckNsb3NlKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlcik7CiAKLSAgICBzdGF0aWMgUVN0
cmluZyB3ZWJQYWdlR3JvdXBOYW1lKFFXZWJQYWdlICpwYWdlKTsKLSAgICBzdGF0aWMgdm9pZCB3
ZWJQYWdlU2V0R3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBncm91cE5h
bWUpOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyRnJhbWVOYW1lKFFXZWJGcmFtZSogZnJhbWUpOwor
ICAgIHN0YXRpYyBRU3RyaW5nIHdlYlBhZ2VHcm91cE5hbWUoUVdlYlBhZ2VBZGFwdGVyICphZGFw
dGVyKTsKKyAgICBzdGF0aWMgdm9pZCB3ZWJQYWdlU2V0R3JvdXBOYW1lKFFXZWJQYWdlQWRhcHRl
ciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgZ3JvdXBOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBj
bGVhckZyYW1lTmFtZShRV2ViRnJhbWVBZGFwdGVyICphZGFwdGVyKTsKICAgICBzdGF0aWMgdm9p
ZCBvdmVyd3JpdGVQbHVnaW5EaXJlY3RvcmllcygpOwotICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZSopOwotICAgIHN0YXRpYyBib29sIGhhc0RvY3VtZW50
RWxlbWVudChRV2ViRnJhbWUqIGZyYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBlbGVtZW50RG9lc0F1
dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmlu
ZyYgZWxlbWVudElkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRXaW5kb3dzQmVoYXZpb3JBc0VkaXRp
bmdCZWhhdmlvcihRV2ViUGFnZSopOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZBY3RpdmVBbmlt
YXRpb25zKFFXZWJGcmFtZUFkYXB0ZXIqKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNEb2N1bWVudEVs
ZW1lbnQoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcik7CisgICAgc3RhdGljIGJvb2wgZWxlbWVu
dERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0
ZXIsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCk7CisgICAgc3RhdGljIHZvaWQgc2V0V2luZG93
c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IoUVdlYlBhZ2VBZGFwdGVyKik7CiAKICAgICBzdGF0
aWMgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7CiAKQEAgLTEzNiwxMyArMTM1LDEz
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVXaGl0ZUxpc3RBY2Nlc3NGcm9tT3Jp
Z2luKGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRp
b25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVz
dGluYXRpb25TdWJkb21haW5zKTsKICAgICBzdGF0aWMgdm9pZCByZXNldE9yaWdpbkFjY2Vzc1do
aXRlTGlzdHMoKTsKIAotICAgIHN0YXRpYyB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihR
V2ViUGFnZSosIGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJv
dmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1h
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oUVdlYlBhZ2VBZGFw
dGVyKiwgYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRl
QmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpOwog
Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRHZW9sb2NhdGlvbk1vY2soUVdlYlBhZ2UqKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQYWdlKiwgYm9vbCBh
bGxvd2VkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihRV2Vi
UGFnZSosIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5
KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxl
RXJyb3IoUVdlYlBhZ2UqLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBzdGF0aWMgaW50
IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFFXZWJQYWdlKik7
CisgICAgc3RhdGljIHZvaWQgcmVzZXRHZW9sb2NhdGlvbk1vY2soUVdlYlBhZ2VBZGFwdGVyKik7
CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbihRV2ViUGFnZUFk
YXB0ZXIqLCBib29sIGFsbG93ZWQpOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKFFXZWJQYWdlQWRhcHRlciosIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2VBZGFwdGVyKiwgY29uc3QgUVN0cmlu
ZyYgbWVzc2FnZSk7CisgICAgc3RhdGljIGludCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0cyhRV2ViUGFnZUFkYXB0ZXIqKTsKIAogICAgIHN0YXRpYyBpbnQgd29y
a2VyVGhyZWFkQ291bnQoKTsKIApAQCAtMTY4LDU0ICsxNjcsNTIgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGR1bXBTZXRBY2NlcHRzRWRpdGluZyhib29sIGIpOwogCiAgICAgc3RhdGljIHZv
aWQgZHVtcE5vdGlmaWNhdGlvbihib29sIGIpOworICAgIHN0YXRpYyBRU3RyaW5nIHZpZXdwb3J0
QXNUZXh0KFFXZWJQYWdlQWRhcHRlciosIGludCBkZXZpY2VEUEksIGNvbnN0IFFTaXplJiBkZXZp
Y2VTaXplLCBjb25zdCBRU2l6ZSYgYXZhaWxhYmxlU2l6ZSk7CiAKICAgICBzdGF0aWMgUU1hcDxR
U3RyaW5nLCBRV2ViSGlzdG9yeUl0ZW0+IGdldENoaWxkSGlzdG9yeUl0ZW1zKGNvbnN0IFFXZWJI
aXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwogICAgIHN0YXRpYyBib29sIGlzVGFyZ2V0SXRlbShj
b25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKICAgICBzdGF0aWMgUVN0cmluZyBo
aXN0b3J5SXRlbVRhcmdldChjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKIAot
ICAgIHN0YXRpYyBib29sIHNob3VsZENsb3NlKFFXZWJGcmFtZSogZnJhbWUpOworICAgIHN0YXRp
YyBib29sIHNob3VsZENsb3NlKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpOwogCiAgICAgc3Rh
dGljIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1p
c3NpdmUpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoUVdlYlBhZ2UqIHBh
Z2UsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVVz
ZXJTdHlsZVNoZWV0cyhRV2ViUGFnZSopOworICAgIHN0YXRpYyB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSk7
CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRzKFFXZWJQYWdlQWRhcHRlciop
OwogICAgIHN0YXRpYyB2b2lkIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0
IFFTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgUVN0cmluZyB2aWV3cG9ydEFzVGV4dChRV2Vi
UGFnZSosIGludCBkZXZpY2VEUEksIGNvbnN0IFFTaXplJiBkZXZpY2VTaXplLCBjb25zdCBRU2l6
ZSYgYXZhaWxhYmxlU2l6ZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBzY2FsZVBhZ2VCeShRV2ViRnJh
bWUqLCBmbG9hdCBzY2FsZSwgY29uc3QgUVBvaW50JiBvcmlnaW4pOworICAgIHN0YXRpYyB2b2lk
IHNjYWxlUGFnZUJ5KFFXZWJGcmFtZUFkYXB0ZXIqLCBmbG9hdCBzY2FsZSwgY29uc3QgUVBvaW50
JiBvcmlnaW4pOwogCi0gICAgc3RhdGljIFFTdHJpbmcgcmVzcG9uc2VNaW1lVHlwZShRV2ViRnJh
bWUqKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhck9wZW5lcihRV2ViRnJhbWUqKTsKKyAgICBzdGF0
aWMgUVN0cmluZyByZXNwb25zZU1pbWVUeXBlKFFXZWJGcmFtZUFkYXB0ZXIqKTsKKyAgICBzdGF0
aWMgdm9pZCBjbGVhck9wZW5lcihRV2ViRnJhbWVBZGFwdGVyKik7CiAgICAgc3RhdGljIHZvaWQg
YWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRl
c3RpbmF0aW9uKTsKLSAgICBzdGF0aWMgUVN0cmluZ0xpc3QgY29udGV4dE1lbnUoUVdlYlBhZ2Uq
KTsKKyAgICBzdGF0aWMgUVN0cmluZ0xpc3QgY29udGV4dE1lbnUoUVdlYlBhZ2VBZGFwdGVyKik7
CiAKICAgICBzdGF0aWMgZG91YmxlIGRlZmF1bHRNaW5pbXVtVGltZXJJbnRlcnZhbCgpOyAvLyBO
b3QgcmVhbGx5IHRpZWQgdG8gV2ViVmlldwotICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1UaW1l
ckludGVydmFsKFFXZWJQYWdlKiwgZG91YmxlKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbChRV2ViUGFnZUFkYXB0ZXIqLCBkb3VibGUpOwogCi0gICAgc3RhdGljIFFV
cmwgbWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQoUVdlYkZyYW1lKiwgY29uc3QgUVN0cmluZyYg
ZWxlbWVudElkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRBbHRlcm5hdGVIdG1sKFFXZWJGcmFtZSos
IGNvbnN0IFFTdHJpbmcmIGh0bWwsIGNvbnN0IFFVcmwmIGJhc2VVcmwsIGNvbnN0IFFVcmwmIGZh
aWxpbmdVcmwpOworICAgIHN0YXRpYyBRVXJsIG1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFX
ZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOworICAgIHN0YXRpYyB2
b2lkIHNldEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFTdHJpbmcmIGh0
bWwsIGNvbnN0IFFVcmwmIGJhc2VVcmwsIGNvbnN0IFFVcmwmIGZhaWxpbmdVcmwpOwogCi0gICAg
c3RhdGljIFFTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KFFXZWJGcmFtZSopOwotCi0gICAgc3RhdGlj
IHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFtZSopOworICAgIHN0YXRpYyB2b2lk
IGluamVjdEludGVybmFsc09iamVjdChRV2ViRnJhbWVBZGFwdGVyKik7CiAgICAgc3RhdGljIHZv
aWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZik7Ci0gICAgc3RhdGljIHZvaWQg
cmVzZXRJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgcmVzZXRJ
bnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lQWRhcHRlciopOwogICAgIHN0YXRpYyB2b2lkIHJlc2V0
SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZik7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRJbnRl
cmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChRV2ViUGFnZSosIGJvb2wpOworICAgIHN0YXRp
YyB2b2lkIHNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKFFXZWJQYWdlQWRhcHRl
ciosIGJvb2wpOwogCi0gICAgc3RhdGljIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhRV2ViUGFnZSos
IGJvb2wgZmxhZyk7Ci0gICAgc3RhdGljIHZvaWQgZ29CYWNrKFFXZWJQYWdlKik7CisgICAgc3Rh
dGljIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhRV2ViUGFnZUFkYXB0ZXIqLCBib29sIGZsYWcpOwor
ICAgIHN0YXRpYyB2b2lkIGdvQmFjayhRV2ViUGFnZUFkYXB0ZXIqKTsKIAotICAgIHN0YXRpYyBi
b29sIHRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MoUVdlYlBhZ2UqLCBjb25zdCBRVXJsJiwg
Y29uc3QgUVVybCYgZmlyc3RQYXJ0eVVybCk7CisgICAgc3RhdGljIGJvb2wgdGhpcmRQYXJ0eUNv
b2tpZVBvbGljeUFsbG93cyhRV2ViUGFnZUFkYXB0ZXIqLCBjb25zdCBRVXJsJiwgY29uc3QgUVVy
bCYgZmlyc3RQYXJ0eVVybCk7CiAKICAgICBzdGF0aWMgdm9pZCBlbmFibGVNb2NrU2Nyb2xsYmFy
cygpOwogCi0gICAgc3RhdGljIFFJbWFnZSBwYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMoUVdlYkZy
YW1lKik7CisgICAgc3RhdGljIFFJbWFnZSBwYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMoUVdlYkZy
YW1lQWRhcHRlciopOwogCi0gICAgc3RhdGljIHZvaWQgc2V0VHJhY2tSZXBhaW50UmVjdHMoUVdl
YkZyYW1lKiwgYm9vbCBlbmFibGUpOwotICAgIHN0YXRpYyBib29sIHRyYWNrUmVwYWludFJlY3Rz
KFFXZWJGcmFtZSopOwotICAgIHN0YXRpYyB2b2lkIGdldFRyYWNrZWRSZXBhaW50UmVjdHMoUVdl
YkZyYW1lKiwgUVZlY3RvcjxRUmVjdD4mIHJlc3VsdCk7CisgICAgc3RhdGljIHZvaWQgc2V0VHJh
Y2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lQWRhcHRlciosIGJvb2wgZW5hYmxlKTsKKyAgICBzdGF0
aWMgYm9vbCB0cmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWVBZGFwdGVyKik7CisgICAgc3RhdGlj
IHZvaWQgZ2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWVBZGFwdGVyKiwgUVZlY3RvcjxR
UmVjdD4mIHJlc3VsdCk7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKaW5kZXggZWI3M2M5ZTlkNDU1MTZjMWM5
NzdiNGIzY2I3YzA5NWNmZDVlZjVjZC4uNzE2M2ViODMyN2U3NmI0ZmYxZmU0ZmFkYjU4ZmRmYzgx
YWJhZTYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRRdC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFZGl0b3JDbGllbnRR
dC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJVbmRvU3RlcFF0LmgiCiAj
aW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKQEAgLTQ0LDYgKzQzLDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNTEsMTEgKzUxLDEw
IEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIldpbmRvd3NLZXli
b2FyZENvZGVzLmgiCiAjaW5jbHVkZSAicWd1aWFwcGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAicXdl
YnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAKICNpbmNsdWRlIDxRQ2xpcGJvYXJk
PgotI2luY2x1ZGUgPFFVbmRvU3RhY2s+CisjaW5jbHVkZSA8UUtleUV2ZW50PgorI2luY2x1ZGUg
PFFLZXlTZXF1ZW5jZT4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KIApAQCAtMTA0LDcgKzEwMyw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZERlbGV0
ZVJhbmdlKFJhbmdlKiByYW5nZSkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0Rl
bGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoUVdlYlBhZ2VQ
cml2YXRlOjpkcnRSdW4pCisgICAgaWYgKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKQogICAgICAg
ICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gIm5lZWRzRGVsZXRp
b25VSSI7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTk5LDkgKzE5OCw4IEBAIHZvaWQgRWRp
dG9yQ2xpZW50UXQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCiB7CiAgICAgaWYgKGR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvblxuIik7Ci0gICAgbV9wYWdl
LT5kLT51cGRhdGVFZGl0b3JBY3Rpb25zKCk7CiAKLSAgICBlbWl0IG1fcGFnZS0+Y29udGVudHND
aGFuZ2VkKCk7CisgICAgZW1pdCBtX3BhZ2UtPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwog
fQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1l
KiBmcmFtZSkKQEAgLTIyMCw4ICsyMTgsNyBAQCB2b2lkIEVkaXRvckNsaWVudFF0OjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAgICAgUGFzdGVib2FyZDo6Z2Vu
ZXJhbFBhc3RlYm9hcmQoKS0+c2V0U2VsZWN0aW9uTW9kZShvbGRTZWxlY3Rpb25Nb2RlKTsKICAg
ICB9CiAKLSAgICBtX3BhZ2UtPmQtPnVwZGF0ZUVkaXRvckFjdGlvbnMoKTsKLSAgICBlbWl0IG1f
cGFnZS0+c2VsZWN0aW9uQ2hhbmdlZCgpOworICAgIG1fcGFnZS0+cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbigpOwogICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5pZ25vcmVDb21wb3NpdGlvblNl
bGVjdGlvbkNoYW5nZSgpKQogICAgICAgICBlbWl0IG1fcGFnZS0+bWljcm9Gb2N1c0NoYW5nZWQo
KTsKIH0KQEAgLTI1MCwxMCArMjQ3LDEwIEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNlbGVjdFdv
cmRCZWZvcmVNZW51RXZlbnQoKQogdm9pZCBFZGl0b3JDbGllbnRRdDo6cmVnaXN0ZXJVbmRvU3Rl
cChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+IHN0ZXApCiB7CiAjaWZuZGVmIFFU
X05PX1VORE9TVEFDSwotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+ZC0+cGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAg
IGlmIChtX2luVW5kb1JlZG8gfHwgKGZyYW1lICYmICFmcmFtZS0+ZWRpdG9yKCktPmxhc3RFZGl0
Q29tbWFuZCgpIC8qIEhBQ0shISBEb24ndCByZWNyZWF0ZSB1bmRvcyAqLykpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX3BhZ2UtPnVuZG9TdGFjaygpLT5wdXNoKG5ldyBVbmRvU3RlcFF0KHN0ZXAp
KTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyVW5kb1N0ZXAoc3RlcCk7CiAjZW5kaWYgLy8gUVRfTk9f
VU5ET1NUQUNLCiB9CiAKQEAgLTI2NCw3ICsyNjEsNyBAQCB2b2lkIEVkaXRvckNsaWVudFF0Ojpy
ZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pCiB2b2lk
IEVkaXRvckNsaWVudFF0OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpCiB7CiAjaWZuZGVmIFFU
X05PX1VORE9TVEFDSwotICAgIHJldHVybiBtX3BhZ2UtPnVuZG9TdGFjaygpLT5jbGVhcigpOwor
ICAgIHJldHVybiBtX3BhZ2UtPmNsZWFyVW5kb1N0YWNrKCk7CiAjZW5kaWYKIH0KIApAQCAtMjgz
LDcgKzI4MCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmNhblVuZG8oKSBjb25zdAogI2lmZGVm
IFFUX05PX1VORE9TVEFDSwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1f
cGFnZS0+dW5kb1N0YWNrKCktPmNhblVuZG8oKTsKKyAgICByZXR1cm4gbV9wYWdlLT5jYW5VbmRv
KCk7CiAjZW5kaWYKIH0KIApAQCAtMjkyLDcgKzI4OSw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6
OmNhblJlZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VORE9TVEFDSwogICAgIHJldHVybiBmYWxz
ZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5kb1N0YWNrKCktPmNhblJlZG8oKTsKKyAg
ICByZXR1cm4gbV9wYWdlLT5jYW5SZWRvKCk7CiAjZW5kaWYKIH0KIApAQCAtMzAwLDcgKzI5Nyw3
IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVuZG8oKQogewogI2lmbmRlZiBRVF9OT19VTkRPU1RB
Q0sKICAgICBtX2luVW5kb1JlZG8gPSB0cnVlOwotICAgIG1fcGFnZS0+dW5kb1N0YWNrKCktPnVu
ZG8oKTsKKyAgICBtX3BhZ2UtPnVuZG8oKTsKICAgICBtX2luVW5kb1JlZG8gPSBmYWxzZTsKICNl
bmRpZgogfQpAQCAtMzA5LDcgKzMwNiw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnJlZG8oKQog
ewogI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBtX2luVW5kb1JlZG8gPSB0cnVlOwotICAg
IG1fcGFnZS0+dW5kb1N0YWNrKCktPnJlZG8oKTsKKyAgICBtX3BhZ2UtPnJlZG8oKTsKICAgICBt
X2luVW5kb1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpAQCAtMzM2LDE4ICszMzMsMTggQEAgdm9p
ZCBFZGl0b3JDbGllbnRRdDo6cGFnZURlc3Ryb3llZCgpCiAKIGJvb2wgRWRpdG9yQ2xpZW50UXQ6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZC0+c21h
cnRJbnNlcnREZWxldGVFbmFibGVkOworICAgIHJldHVybiBtX3NtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZDsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xlU21hcnRJbnNlcnREZWxldGUo
KQogewotICAgIGJvb2wgY3VycmVudCA9IG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFi
bGVkOwotICAgIG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkID0gIWN1cnJlbnQ7
CisgICAgYm9vbCBjdXJyZW50ID0gbV9zbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7CisgICAgbV9z
bWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSAhY3VycmVudDsKIH0KIAogYm9vbCBFZGl0b3JDbGll
bnRRdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKIHsKLSAgICByZXR1cm4g
bV9wYWdlLT5kLT5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkOworICAgIHJldHVybiBt
X3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50
UXQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKQEAgLTQxNiw3ICs0MTMsNyBAQCBj
b25zdCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yS2V5RG93bkV2ZW50KGNvbnN0IEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+ZC0+cGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEZyYW1lKiBm
cmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDQ0LDE3ICs0NDEs
MTYgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKICAgICAgICAgfQogCiAjaWZuZGVmIFFUX05PX1NIT1JUQ1VUCi0gICAgICAg
IFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JBY3Rp
b25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQoKSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0g
UVdlYlBhZ2U6Ok5vV2ViQWN0aW9uICYmICFkb1NwYXRpYWxOYXZpZ2F0aW9uKSB7Ci0gICAgICAg
ICAgICBjb25zdCBjaGFyKiBjbWQgPSBRV2ViUGFnZVByaXZhdGU6OmVkaXRvckNvbW1hbmRGb3JX
ZWJBY3Rpb25zKGFjdGlvbik7CisgICAgICAgIGNvbnN0IGNoYXIqIGNtZCA9IG1fcGFnZS0+ZWRp
dG9yQ29tbWFuZEZvcktleUV2ZW50KGtldmVudC0+cXRFdmVudCgpKTsKKyAgICAgICAgaWYgKGNt
ZCAmJiAhZG9TcGF0aWFsTmF2aWdhdGlvbikgewogICAgICAgICAgICAgLy8gV2ViS2l0IGRvZXNu
J3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IGNvbW1h
bmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2aWEgRWRpdG9yIHNob3VsZCBi
ZSB0cmVhdGVkLAogICAgICAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlIHRv
IGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZv
Y3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKICAgICAgICAgICAgIC8v
IChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCi0gICAg
ICAgICAgICBpZiAoY21kICYmIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjbWQpLmlzVGV4dElu
c2VydGlvbigpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNtZCku
aXNUZXh0SW5zZXJ0aW9uKCkKICAgICAgICAgICAgICAgICAmJiBrZXZlbnQtPnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlvbik7CisgICAgICAgICAgICBtX3Bh
Z2UtPnRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQoKSk7CiAgICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfSBlbHNlIApAQCAtNTAxLDcgKzQ5Nyw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6Omhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgfQogCiAgICAgLy8g
Tm9uIGVkaXRhYmxlIGNvbnRlbnQuCi0gICAgaWYgKG1fcGFnZS0+aGFuZGxlKCktPnBhZ2UtPnNl
dHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpIHsKKyAgICBpZiAobV9wYWdlLT5wYWdl
LT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIHN3aXRjaCAo
a2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewogICAgICAgICBjYXNlIFZLX0xFRlQ6
CiAgICAgICAgIGNhc2UgVktfUklHSFQ6CkBAIC01MTEsOSArNTA3LDcgQEAgdm9pZCBFZGl0b3JD
bGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAg
ICAgY2FzZSBWS19FTkQ6CiAgICAgICAgICAgICB7CiAjaWZuZGVmIFFUX05PX1NIT1JUQ1VUCi0g
ICAgICAgICAgICAgICAgUVdlYlBhZ2U6OldlYkFjdGlvbiBhY3Rpb24gPSBRV2ViUGFnZVByaXZh
dGU6OmVkaXRvckFjdGlvbkZvcktleUV2ZW50KGtldmVudC0+cXRFdmVudCgpKTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoYWN0aW9uICE9IFFXZWJQYWdlOjpOb1dlYkFjdGlvbik7Ci0gICAgICAg
ICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlvbik7CisgICAgICAgICAgICAgICAg
bV9wYWdlLT50cmlnZ2VyQWN0aW9uRm9yS2V5RXZlbnQoa2V2ZW50LT5xdEV2ZW50KCkpOwogICAg
ICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogI2VuZGlmCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNTMyLDcgKzUyNiw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAKICNpZm5kZWYgUVRf
Tk9fU0hPUlRDVVQKICAgICBpZiAoa2V2ZW50LT5xdEV2ZW50KCkgPT0gUUtleVNlcXVlbmNlOjpD
b3B5KSB7Ci0gICAgICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6Q29weSk7Cisg
ICAgICAgIG1fcGFnZS0+dHJpZ2dlckNvcHlBY3Rpb24oKTsKICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01NDMsOCArNTM3LDEy
IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2Fy
ZEV2ZW50KikKIHsKIH0KIAotRWRpdG9yQ2xpZW50UXQ6OkVkaXRvckNsaWVudFF0KFFXZWJQYWdl
KiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpLCBtX2VkaXRpbmcoZmFsc2UpLCBtX2luVW5kb1Jl
ZG8oZmFsc2UpCitFZGl0b3JDbGllbnRRdDo6RWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVy
KiBwYWdlQWRhcHRlcikKKyAgICA6IG1fcGFnZShwYWdlQWRhcHRlcikKKyAgICAsIG1fZWRpdGlu
ZyhmYWxzZSkKKyAgICAsIG1faW5VbmRvUmVkbyhmYWxzZSkKKyAgICAsIG1fc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkKHRydWUpCisgICAgLCBtX3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTYwNywxMiArNjA1LDEyIEBAIHZvaWQgRWRpdG9yQ2xpZW50
UXQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkKIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6c2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKIHsKLSAgICBRV2ViUGFnZUNsaWVudCogd2Vi
UGFnZUNsaWVudCA9IG1fcGFnZS0+ZC0+Y2xpZW50LmdldCgpOworICAgIFFXZWJQYWdlQ2xpZW50
KiB3ZWJQYWdlQ2xpZW50ID0gbV9wYWdlLT5jbGllbnQuZGF0YSgpOwogICAgIGlmICh3ZWJQYWdl
Q2xpZW50KSB7CiAgICAgICAgIFF0OjpJbnB1dE1ldGhvZEhpbnRzIGhpbnRzOwogCiAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IDA7Ci0gICAgICAgIEZyYW1lKiBmcmFt
ZSA9IG1fcGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPnBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5k
b2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKQogICAgICAgICAg
ICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aW5wdXRUYWcpKQogICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgK
aW5kZXggODYzYzY3YjcxODdkZmQ2NTAzZjYwY2M2ZDk3NDZlZTEwNmVlNDIwNi4uYzQ5YmU0YTQw
MzczNmVmMGFjODA2MmIzMWI5MGRlMjE4OTVkMjE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaApAQCAtMzYsMTIgKzM2LDEzIEBACiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogY2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2Vi
UGFnZUFkYXB0ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWRpdG9yQ2xpZW50
UXQgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBFZGl0b3JDbGllbnRRdChR
V2ViUGFnZSogcGFnZSk7CisgICAgRWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKik7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZnJhbWVXaWxsRGV0YWNoUGFnZShGcmFtZSopIHsgfQpAQCAtMTA5LDE0ICsxMTAsMTkgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0U21hcnRJ
bnNlcnREZWxldGVFbmFibGVkKGJvb2wgYikgeyBtX3NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCA9
IGI7IH0KKyAgICB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBi
KSB7IG1fc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCA9IGI7IH0KKwogICAgIHN0YXRp
YyBib29sIGR1bXBFZGl0aW5nQ2FsbGJhY2tzOwogICAgIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0
aW5nOwogCiBwcml2YXRlOgogICAgIFRleHRDaGVja2VyQ2xpZW50UXQgbV90ZXh0Q2hlY2tlckNs
aWVudDsKLSAgICBRV2ViUGFnZSogbV9wYWdlOworICAgIFFXZWJQYWdlQWRhcHRlciogbV9wYWdl
OwogICAgIGJvb2wgbV9lZGl0aW5nOwogICAgIGJvb2wgbV9pblVuZG9SZWRvOyAvLyBvdXIgdW5k
byBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAtIGRvbid0IHJlLWVudGVyIQorICAgIGJvb2wgbV9z
bWFydEluc2VydERlbGV0ZUVuYWJsZWQ7CisgICAgYm9vbCBtX3NlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAppbmRleCAwNzMxZDkzMTU4YTE2Zjk3
MzBlODQxZTIwODE3YTg4MjJiNGU2MTQ4Li4xYTRmYTBjMjRkN2ExMmU0YjBiNzQxYzE3ZjM1OGMy
ZTA4NmQwMGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKQEAgLTY3LDI0ICs2NywyNSBAQAogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAj
aW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNp
b24uaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgi
Ci0jaW5jbHVkZSAicXdlYmhpc3RvcnlfcC5oIgotI2luY2x1ZGUgInF3ZWJoaXN0b3J5aW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFnZV9wLmgiCi0j
aW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmhpc3Rv
cnkuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmhpc3RvcnlfcC5oIgorI2luY2x1ZGUgIi4uL0Fw
aS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2VicGx1Z2luZmFj
dG9yeS5oIgorCisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgiCisjaW5jbHVkZSAi
UVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogCiAjaW5j
bHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UUZp
bGVJbmZvPgotI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgotI2luY2x1ZGUgPFFHcmFwaGljc1dp
ZGdldD4KICNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgogI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVz
dD4KKyNpbmNsdWRlIDxRTW91c2VFdmVudD4KICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTkzLDEwICs5NCwxMCBAQCBzdGF0aWMgUU1hcDx1bnNp
Z25lZCBsb25nLCBRU3RyaW5nPiBkdW1wQXNzaWduZWRVcmxzOwogLy8gQ29tcGFyZSB3aXRoIHRo
ZSBmaWxlICJXZWJLaXQvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRl
Lm1tIi4KIHN0YXRpYyBRU3RyaW5nIGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KFdlYkNvcmU6OkZyYW1lKiB3ZWJDb3JlRnJhbWUpCiB7Ci0gICAgUVdlYkZyYW1lKiBmcmFtZSA9
IFFXZWJGcmFtZVByaXZhdGU6OmtpdCh3ZWJDb3JlRnJhbWUpOwotICAgIFFTdHJpbmcgbmFtZSA9
IGZyYW1lLT5mcmFtZU5hbWUoKTsKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSA9IFFXZWJG
cmFtZUFkYXB0ZXI6OmtpdCh3ZWJDb3JlRnJhbWUpOworICAgIFFTdHJpbmcgbmFtZSA9IHdlYkNv
cmVGcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CiAKLSAgICBib29sIGlzTWFpbkZyYW1lID0g
ZnJhbWUgPT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCk7CisgICAgYm9vbCBpc01haW5GcmFt
ZSA9IGZyYW1lID09IGZyYW1lLT5wYWdlQWRhcHRlci0+bWFpbkZyYW1lQWRhcHRlcigpOwogICAg
IGlmIChpc01haW5GcmFtZSkgewogICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIFFTdHJpbmc6OmZyb21MYXRpbjEoIm1haW4gZnJhbWUgXCIlMVwiIikuYXJn
KG5hbWUpOwpAQCAtMjA0LDcgKzIwNSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBuYXZpZ2F0aW9u
VHlwZVRvU3RyaW5nKE5hdmlnYXRpb25UeXBlIHR5cGUpCiAKIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OkZyYW1lTG9hZGVyQ2xpZW50UXQoKQogICAgIDogbV9mcmFtZSgwKQotICAgICwgbV93ZWJGcmFt
ZSgwKQogICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1
Z2luKGZhbHNlKQogICAgICwgbV9pc09yaWdpbmF0aW5nTG9hZChmYWxzZSkKQEAgLTIxNiwyNCAr
MjE2LDI0IEBAIEZyYW1lTG9hZGVyQ2xpZW50UXQ6On5GcmFtZUxvYWRlckNsaWVudFF0KCkKIHsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRGcmFtZShRV2ViRnJhbWUqIHdlYkZy
YW1lLCBGcmFtZSogZnJhbWUpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnNldEZyYW1lKFFX
ZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgbV93ZWJGcmFt
ZSA9IHdlYkZyYW1lOwogICAgIG1fZnJhbWUgPSBmcmFtZTsKIAotICAgIGlmICghbV93ZWJGcmFt
ZSB8fCAhbV93ZWJGcmFtZS0+cGFnZSgpKSB7CisgICAgaWYgKCFtX3dlYkZyYW1lIHx8ICFtX3dl
YkZyYW1lLT5wYWdlQWRhcHRlcikgewogICAgICAgICBxV2FybmluZygiRnJhbWVMb2FkZXJDbGll
bnRRdDo6c2V0RnJhbWUgZnJhbWUgd2l0aG91dCBQYWdlISIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkpLAotICAg
ICAgICAgICAgbV93ZWJGcmFtZS0+cGFnZSgpLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkpKTsK
KyAgICAgICAgICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5oYW5kbGUoKSwgU0lHTkFMKGxv
YWRQcm9ncmVzcyhpbnQpKSk7CiAKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTCh1bnN1cHBvcnRl
ZENvbnRlbnQoUU5ldHdvcmtSZXBseSopKSwKLSAgICAgICAgICAgIG1fd2ViRnJhbWUtPnBhZ2Uo
KSwgU0lHTkFMKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29ya1JlcGx5KikpKTsKKyAgICAgICAg
ICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5oYW5kbGUoKSwgU0lHTkFMKHVuc3VwcG9ydGVk
Q29udGVudChRTmV0d29ya1JlcGx5KikpKTsKIAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHRp
dGxlQ2hhbmdlZChRU3RyaW5nKSksCi0gICAgICAgICAgICBtX3dlYkZyYW1lLCBTSUdOQUwodGl0
bGVDaGFuZ2VkKFFTdHJpbmcpKSk7CisgICAgICAgICAgICBtX3dlYkZyYW1lLT5oYW5kbGUoKSwg
U0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OmNhbGxQb2xpY3lGdW5jdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQ
b2xpY3lBY3Rpb24gYWN0aW9uKQpAQCAtMjU5LDEzICsyNTksMTIgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJh
bWUqKQogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JO
ZXdQYWdlKCkKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7Ci0gICAgQVNTRVJUKG1fd2ViRnJhbWUp
OwogCi0gICAgUUJydXNoIGJydXNoID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wYWxldHRlKCkuYnJ1
c2goUVBhbGV0dGU6OkJhc2UpOworICAgIFFPYmplY3QqIHFXZWJQYWdlID0gbV93ZWJGcmFtZS0+
cGFnZUFkYXB0ZXItPmhhbmRsZSgpOworICAgIFFCcnVzaCBicnVzaCA9IHFXZWJQYWdlLT5wcm9w
ZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQYWxldHRlPigpLmJydXNoKFFQYWxldHRlOjpCYXNlKTsK
ICAgICBRQ29sb3IgYmFja2dyb3VuZENvbG9yID0gYnJ1c2guc3R5bGUoKSA9PSBRdDo6U29saWRQ
YXR0ZXJuID8gYnJ1c2guY29sb3IoKSA6IFFDb2xvcigpOwogCi0gICAgUVdlYlBhZ2UqIHBhZ2Ug
PSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgY29uc3QgUVNpemUgcHJlZmVycmVkTGF5b3V0U2l6
ZSA9IHBhZ2UtPnByZWZlcnJlZENvbnRlbnRzU2l6ZSgpOworICAgIGNvbnN0IFFTaXplIHByZWZl
cnJlZExheW91dFNpemUgPSBxV2ViUGFnZS0+cHJvcGVydHkoInByZWZlcnJlZENvbnRlbnRzU2l6
ZSIpLnRvU2l6ZSgpOwogCiAgICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsYmFyID0gKFNjcm9sbGJh
ck1vZGUpIG1fd2ViRnJhbWUtPnNjcm9sbEJhclBvbGljeShRdDo6SG9yaXpvbnRhbCk7CiAgICAg
U2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyID0gKFNjcm9sbGJhck1vZGUpIG1fd2ViRnJhbWUtPnNj
cm9sbEJhclBvbGljeShRdDo6VmVydGljYWwpOwpAQCAtMjc1LDcgKzI3NCw3IEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCiAgICAg
Ly8gVGhlIEhpc3RvcnlDb250cm9sbGVyIHdpbGwgdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24g
bGF0ZXIgaWYgbmVlZGVkLgogICAgIEludFJlY3QgY3VycmVudFZpc2libGVDb250ZW50UmVjdCA9
IG1fZnJhbWUtPnZpZXcoKSA/IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9mcmFtZS0+dmll
dygpLT5maXhlZFZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSkgOiBJbnRSZWN0KCk7CiAKLSAg
ICBtX2ZyYW1lLT5jcmVhdGVWaWV3KG1fd2ViRnJhbWUtPnBhZ2UoKS0+dmlld3BvcnRTaXplKCks
CisgICAgbV9mcmFtZS0+Y3JlYXRlVmlldyhxV2ViUGFnZS0+cHJvcGVydHkoInZpZXdwb3J0U2l6
ZSIpLnRvU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLCAh
YmFja2dyb3VuZENvbG9yLmFscGhhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJy
ZWRMYXlvdXRTaXplLmlzVmFsaWQoKSA/IEludFNpemUocHJlZmVycmVkTGF5b3V0U2l6ZSkgOiBJ
bnRTaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmlzaWJsZUNvbnRlbnRS
ZWN0LApAQCAtMjg0LDggKzI4Myw5IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6dHJhbnNp
dGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICB2U2Ny
b2xsYmFyLCB2TG9jayk7CiAKICAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFtZSA9PSBtX2Zy
YW1lLT5wYWdlKCktPm1haW5GcmFtZSgpOwotICAgIGlmIChpc01haW5GcmFtZSAmJiBwYWdlLT5k
LT5jbGllbnQpIHsKLSAgICAgICAgYm9vbCByZXNpemVzVG9Db250ZW50cyA9IHBhZ2UtPmQtPmNs
aWVudC0+dmlld1Jlc2l6ZXNUb0NvbnRlbnRzRW5hYmxlZCgpOworICAgIGlmIChpc01haW5GcmFt
ZSAmJm1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5jbGllbnQpIHsKKyAgICAgICAgYm9vbCByZXNp
emVzVG9Db250ZW50cyA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5jbGllbnQtPnZpZXdSZXNp
emVzVG9Db250ZW50c0VuYWJsZWQoKTsKKwogICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldFBh
aW50c0VudGlyZUNvbnRlbnRzKHJlc2l6ZXNUb0NvbnRlbnRzKTsKICAgICAgICAgbV9mcmFtZS0+
dmlldygpLT5zZXREZWxlZ2F0ZXNTY3JvbGxpbmcocmVzaXplc1RvQ29udGVudHMpOwogICAgIH0K
QEAgLTM5Miw4ICszOTIsOCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlk
Q2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkKICAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fd2ViRnJhbWUtPmQtPmVtaXRVcmxDaGFuZ2VkKCk7Ci0gICAgbV93
ZWJGcmFtZS0+cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2Vi
RnJhbWUtPmVtaXRVcmxDaGFuZ2VkKCk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPnVw
ZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiB9CiAKIApAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpCiAg
ICAgICAgIHJldHVybjsKICAgICBlbWl0TG9hZFN0YXJ0ZWQoKTsKICAgICBwb3N0UHJvZ3Jlc3NF
c3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKTsKLSAgICBlbWl0IG1fd2ViRnJhbWUtPnByb3Zp
c2lvbmFsTG9hZCgpOworICAgIG1fd2ViRnJhbWUtPmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCk7
CiB9CiAKIApAQCAtNDc4LDggKzQ3OCw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlz
cGF0Y2hEaWRDb21taXRMb2FkKCkKICAgICBpZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSB8
fCAhbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJGcmFtZS0+ZC0+ZW1p
dFVybENoYW5nZWQoKTsKLSAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRp
b25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+ZW1pdFVybENoYW5nZWQoKTsKKyAgICBtX3dl
YkZyYW1lLT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKIAogICAgIC8v
IFdlIHNob3VsZCBhc3N1bWUgZmlyc3QgdGhlIGZyYW1lIGhhcyBubyB0aXRsZS4gSWYgaXQgaGFz
LCB0aGVuIHRoZSBhYm92ZSBkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSgpCiAgICAgLy8gd2lsbCBi
ZSBjYWxsZWQgdmVyeSBzb29uIHdpdGggdGhlIGNvcnJlY3QgdGl0bGUuCkBAIC00OTAsNyArNDkw
LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQog
ICAgIGlmICghaXNNYWluRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVtaXQgbV93ZWJG
cmFtZS0+cGFnZSgpLT52aWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpOworICAgIGVtaXQgbV93ZWJG
cmFtZS0+cGFnZUFkYXB0ZXItPmVtaXRWaWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpOwogfQogCiAK
QEAgLTQ5OSw3ICs0OTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlk
RmluaXNoRG9jdW1lbnRMb2FkKCkKICAgICBpZiAoZHVtcEZyYW1lTG9hZGVyQ2FsbGJhY2tzKQog
ICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIsIHFQ
cmludGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQobV9mcmFtZSkpKTsK
IAotICAgIGlmIChRV2ViUGFnZVByaXZhdGU6OmRydFJ1bikgeworICAgIGlmIChRV2ViUGFnZUFk
YXB0ZXI6OmRydFJ1bikgewogICAgICAgICBpbnQgdW5sb2FkRXZlbnRDb3VudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5wZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKTsK
ICAgICAgICAgaWYgKHVubG9hZEV2ZW50Q291bnQpCiAgICAgICAgICAgICBwcmludGYoIiVzIC0g
aGFzICV1IG9udW5sb2FkIGhhbmRsZXIocylcbiIsIHFQcmludGFibGUoZHJ0RGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQobV9mcmFtZSkpLCB1bmxvYWRFdmVudENvdW50KTsKQEAgLTUw
OCw3ICs1MDgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkRmluaXNo
RG9jdW1lbnRMb2FkKCkKICAgICBpZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSB8fCAhbV93
ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51
cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT51
cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiAKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCiAgICAgaWYgKCFt
X3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQt
PnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXIt
PnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiAgICAgZW1pdExvYWRGaW5pc2hlZCh0cnVlKTsK
IH0KIApAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0
Y2hEaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobWlsZXN0b25lcyAmIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCkK
LSAgICAgICAgZW1pdCBtX3dlYkZyYW1lLT5pbml0aWFsTGF5b3V0Q29tcGxldGVkKCk7CisgICAg
ICAgIG1fd2ViRnJhbWUtPmVtaXRJbml0aWFsTGF5b3V0Q29tcGxldGVkKCk7CiB9CiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hTaG93KCkKQEAgLTU2MCw3ICs1NjAsNyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24o
KQogICAgICAgICBtX2lzT3JpZ2luYXRpbmdMb2FkID0gdHJ1ZTsKICAgICBpZiAobV9mcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSB8fCAhbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
d2ViRnJhbWUtPnBhZ2UoKS0+ZC0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKKyAgICBtX3dl
YkZyYW1lLT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmlj
YXRpb24oKQpAQCAtNTc3LDE0ICs1NzcsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpw
b3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiAgICAgLy8gU2VuZCBhIG1vdXNlbW92
ZSBldmVudCB0bzoKICAgICAvLyAoMSkgdXBkYXRlIHRoZSBjdXJzb3IgdG8gY2hhbmdlIGFjY29y
ZGluZyB0byB3aGF0ZXZlciBpcyB1bmRlcm5lYXRoIHRoZSBtb3VzZSBjdXJzb3IgcmlnaHQgbm93
OwogICAgIC8vICgyKSBkaXNwbGF5IHRoZSB0b29sIHRpcCBpZiB0aGUgbW91c2UgaG92ZXJzIGEg
bm9kZSB3aGljaCBoYXMgYSB0b29sIHRpcC4KLSAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5l
dmVudEhhbmRsZXIoKSAmJiBtX3dlYkZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgUVdpZGdldCog
dmlldyA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+dmlldygpOwotICAgICAgICBpZiAodmlldyAmJiB2
aWV3LT5oYXNGb2N1cygpKSB7Ci0gICAgICAgICAgICBRUG9pbnQgbG9jYWxQb3MgPSB2aWV3LT5t
YXBGcm9tR2xvYmFsKFFDdXJzb3I6OnBvcygpKTsKLSAgICAgICAgICAgIGlmICh2aWV3LT5yZWN0
KCkuY29udGFpbnMobG9jYWxQb3MpKSB7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZXZl
bnRIYW5kbGVyKCkgJiYgbV93ZWJGcmFtZSkgeworICAgICAgICBRUG9pbnQgbG9jYWxQb3M7Cisg
ICAgICAgIGlmIChtX3dlYkZyYW1lLT5oYW5kbGVQcm9ncmVzc0ZpbmlzaGVkKCZsb2NhbFBvcykp
IHsKICAgICAgICAgICAgICAgICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlTW92ZSwg
bG9jYWxQb3MsIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7CiAg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoY29udmVy
dE1vdXNlRXZlbnQoJmV2ZW50LCAwKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC02NTUsNyArNjUyLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpmcmFtZUxv
YWRDb21wbGV0ZWQoKQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlw
bGUgdGltZXMuCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgbV93
ZWJGcmFtZS0+cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2Vi
RnJhbWUtPnBhZ2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiAKQEAg
LTY2Myw3ICs2NjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlc3RvcmVWaWV3U3Rh
dGUoKQogewogICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXQg
bV93ZWJGcmFtZS0+cGFnZSgpLT5yZXN0b3JlRnJhbWVTdGF0ZVJlcXVlc3RlZChtX3dlYkZyYW1l
KTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1pdFJlc3RvcmVGcmFtZVN0YXRlUmVx
dWVzdGVkKG1fd2ViRnJhbWUpOwogfQogCiAKQEAgLTcwMSw3ICs2OTgsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxl
LCBjb25zdCBLVVJMJgogU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudChjb25z
dCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKG1fd2ViRnJhbWUpIHsKLSAgICAgICAgcmV0dXJuIG1f
d2ViRnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50Rm9yVXJsKHVybCkucmVtb3ZlKFFMYXRpbjFDaGFy
KCdcbicpKS5yZW1vdmUoUUxhdGluMUNoYXIoJ1xyJykpOworICAgICAgICByZXR1cm4gbV93ZWJG
cmFtZS0+cGFnZUFkYXB0ZXItPnVzZXJBZ2VudEZvclVybCh1cmwpLnJlbW92ZShRTGF0aW4xQ2hh
cignXG4nKSkucmVtb3ZlKFFMYXRpbjFDaGFyKCdccicpKTsKICAgICB9CiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQpAQCAtNzA5LDEyICs3MDYsMTUgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogewogICAgIGlmIChtX3dlYkZyYW1lKQotICAgICAg
ICBlbWl0IG1fd2ViRnJhbWUtPmljb25DaGFuZ2VkKCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmVt
aXRJY29uQ2hhbmdlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9h
ZGVyRGVzdHJveWVkKCkKIHsKLSAgICBkZWxldGUgbV93ZWJGcmFtZTsKKyAgICAvLyBEZWxldGUg
UVdlYkZyYW1lIChoYW5kbGUoKSksIHdoaWNoIG93bnMgUVdlYkZyYW1lUHJpdmF0ZSwgd2hpY2gK
KyAgICAvLyBfaXNfIGEgUVdlYkZyYW1lQWRhcHRlci4KKyAgICBpZiAobV93ZWJGcmFtZSkKKyAg
ICAgICAgZGVsZXRlIG1fd2ViRnJhbWUtPmhhbmRsZSgpOwogICAgIG1fZnJhbWUgPSAwOwogICAg
IG1fd2ViRnJhbWUgPSAwOwogCkBAIC03MzIsNyArNzMyLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29y
bGQqIHcKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fd2ViRnJhbWUpCi0gICAgICAgIG1f
d2ViRnJhbWUtPmQtPmRpZENsZWFyV2luZG93T2JqZWN0KCk7CisgICAgICAgIG1fd2ViRnJhbWUt
PmRpZENsZWFyV2luZG93T2JqZWN0KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkKQEAgLTc0NCw3ICs3NDQsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25zdAogewogICAg
IGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICBy
ZXR1cm47Ci0gICAgbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9u
cygpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9u
cygpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlm
aWNhdGlvbihib29sIHNob3VsZFJlZ2lzdGVyKQpAQCAtNzYwLDggKzc2MCw4IEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgc2hvdWxk
UmVnaXN0ZXIpCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9uSWNvbkxvYWRlZEZvclBhZ2VV
UkwoY29uc3QgUVN0cmluZyYgdXJsKQogewogI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCi0gICAg
aWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+dXJsKCkgPT0gdXJsKQotICAgICAgICBlbWl0
IG1fd2ViRnJhbWUtPmljb25DaGFuZ2VkKCk7CisgICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJG
cmFtZS0+dXJsID09IHVybCkKKyAgICAgICAgbV93ZWJGcmFtZS0+ZW1pdEljb25DaGFuZ2VkKCk7
CiAjZW5kaWYKIH0KIApAQCAtODUwLDcgKzg1MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRR
dDo6ZGlkRGV0ZWN0WFNTKGNvbnN0IEtVUkwmLCBib29sKQogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpzYXZlVmlld1N0YXRlVG9JdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQogewog
ICAgIFFXZWJIaXN0b3J5SXRlbSBoaXN0b3J5SXRlbShuZXcgUVdlYkhpc3RvcnlJdGVtUHJpdmF0
ZShpdGVtKSk7Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnNhdmVGcmFtZVN0YXRlUmVx
dWVzdGVkKG1fd2ViRnJhbWUsICZoaXN0b3J5SXRlbSk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFk
YXB0ZXItPmVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChtX3dlYkZyYW1lLCAmaGlzdG9yeUl0
ZW0pOwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbkNhY2hlUGFnZSgpIGNvbnN0
CkBAIC05OTEsOCArOTkxLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpkb3dubG9hZChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBXZWJDb3IKICAgICBRTmV0d29y
a1JlcGx5SGFuZGxlciogaGFuZGxlciA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2I7CiAg
ICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBoYW5kbGVyLT5yZWxlYXNlKCk7CiAgICAgaWYgKHJl
cGx5KSB7Ci0gICAgICAgIFFXZWJQYWdlKiBwYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwotICAg
ICAgICBpZiAocGFnZS0+Zm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudCgpKQorICAgICAgICBpZiAo
bV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQpCiAgICAg
ICAgICAgICBlbWl0IHVuc3VwcG9ydGVkQ29udGVudChyZXBseSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJlcGx5LT5hYm9ydCgpOwpAQCAtMTA0MywxMSArMTA0MiwxMSBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiwgdW5zaQogICAgIFFTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7CiAgICAgUVN0
cmluZyB1cmxTY2hlbWUgPSB1cmwuc2NoZW1lKCkudG9Mb3dlcigpOwogCi0gICAgaWYgKFFXZWJQ
YWdlUHJpdmF0ZTo6ZHJ0UnVuCisgICAgaWYgKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuCiAgICAg
ICAgICYmICFob3N0LmlzRW1wdHkoKQogICAgICAgICAmJiAodXJsU2NoZW1lID09IFFMYXRpbjFT
dHJpbmcoImh0dHAiKSB8fCB1cmxTY2hlbWUgPT0gUUxhdGluMVN0cmluZygiaHR0cHMiKSkpIHsK
IAotICAgICAgICBRVXJsIHRlc3RVUkwgPSBtX3dlYkZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgp
LT5yZXF1ZXN0ZWRVcmwoKTsKKyAgICAgICAgUVVybCB0ZXN0VVJMID0gbV93ZWJGcmFtZS0+cGFn
ZUFkYXB0ZXItPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWVMb2FkZXJDbGllbnQtPmxhc3RSZXF1
ZXN0ZWRVcmwoKTsKICAgICAgICAgUVN0cmluZyB0ZXN0SG9zdCA9IHRlc3RVUkwuaG9zdCgpOwog
ICAgICAgICBRU3RyaW5nIHRlc3RVUkxTY2hlbWUgPSB0ZXN0VVJMLnNjaGVtZSgpLnRvTG93ZXIo
KTsKIApAQCAtMTA2Myw3ICsxMDYyLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNw
YXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2kKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzLnNpemUoKTsgKytpKQog
ICAgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKHNlbmRSZXF1ZXN0Q2xlYXJI
ZWFkZXJzLmF0KGkpLnRvTG9jYWw4Qml0KCkuY29uc3REYXRhKCksIFFTdHJpbmcoKSk7CiAKLSAg
ICBpZiAoUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW4pIHsKKyAgICBpZiAoUVdlYlBhZ2VBZGFwdGVy
OjpkcnRSdW4pIHsKICAgICAgICAgUU1hcDxRU3RyaW5nLCBRU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBVUkxzVG9SZWRpcmVjdC5jb25zdEZpbmQodXJsLnRvU3RyaW5nKCkpOwogICAgICAg
ICBpZiAoaXQgIT0gVVJMc1RvUmVkaXJlY3QuY29uc3RFbmQoKSkKICAgICAgICAgICAgIG5ld1Jl
cXVlc3Quc2V0VVJMKFFVcmwoaXQudmFsdWUoKSkpOwpAQCAtMTEzNSwyNyArMTEzNCwxOSBAQCBi
b29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9y
eUNhY2hlKFdlYkNvcmU6OkRvY3VtZQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbGxF
cnJvclBhZ2VFeHRlbnNpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7
Ci0gICAgUVdlYlBhZ2UqIHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdl
LT5zdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uKSkKKyAgICBR
V2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlcjsKKyAgICBpZiAo
IXBhZ2UtPnN1cHBvcnRzRXJyb3JQYWdlRXh0ZW5zaW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb25PcHRpb24gb3B0aW9uOwotICAg
IGlmIChlcnJvci5kb21haW4oKSA9PSAiUXROZXR3b3JrIikKLSAgICAgICAgb3B0aW9uLmRvbWFp
biA9IFFXZWJQYWdlOjpRdE5ldHdvcms7Ci0gICAgZWxzZSBpZiAoZXJyb3IuZG9tYWluKCkgPT0g
IkhUVFAiKQotICAgICAgICBvcHRpb24uZG9tYWluID0gUVdlYlBhZ2U6Okh0dHA7Ci0gICAgZWxz
ZSBpZiAoZXJyb3IuZG9tYWluKCkgPT0gIldlYktpdCIpCi0gICAgICAgIG9wdGlvbi5kb21haW4g
PSBRV2ViUGFnZTo6V2ViS2l0OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisg
ICAgUVdlYlBhZ2VBZGFwdGVyOjpFcnJvclBhZ2VPcHRpb24gb3B0aW9uOwogICAgIG9wdGlvbi51
cmwgPSBRVXJsKGVycm9yLmZhaWxpbmdVUkwoKSk7CiAgICAgb3B0aW9uLmZyYW1lID0gbV93ZWJG
cmFtZTsKKyAgICBvcHRpb24uZG9tYWluID0gZXJyb3IuZG9tYWluKCk7CiAgICAgb3B0aW9uLmVy
cm9yID0gZXJyb3IuZXJyb3JDb2RlKCk7CiAgICAgb3B0aW9uLmVycm9yU3RyaW5nID0gZXJyb3Iu
bG9jYWxpemVkRGVzY3JpcHRpb24oKTsKIAotICAgIFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNp
b25SZXR1cm4gb3V0cHV0OwotICAgIGlmICghcGFnZS0+ZXh0ZW5zaW9uKFFXZWJQYWdlOjpFcnJv
clBhZ2VFeHRlbnNpb24sICZvcHRpb24sICZvdXRwdXQpKQorICAgIFFXZWJQYWdlQWRhcHRlcjo6
RXJyb3JQYWdlUmV0dXJuIG91dHB1dDsKKworICAgIGlmICghcGFnZS0+ZXJyb3JQYWdlRXh0ZW5z
aW9uKCZvcHRpb24sICZvdXRwdXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJM
IGJhc2VVcmwob3V0cHV0LmJhc2VVcmwpOwpAQCAtMTIwMCwxMCArMTE5MSwxMCBAQCBXZWJDb3Jl
OjpGcmFtZSogRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdl
YkNvcmU6Ok5hdmlnYXRpbwogewogICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUVdlYlBhZ2UgKm5ld1BhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCktPmNyZWF0ZVdp
bmRvdyhRV2ViUGFnZTo6V2ViQnJvd3NlcldpbmRvdyk7CisgICAgUVdlYlBhZ2VBZGFwdGVyICpu
ZXdQYWdlID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNyZWF0ZVdpbmRvdygvKiBtb2RhbERp
YWxvZyA9ICovIGZhbHNlKTsKICAgICBpZiAoIW5ld1BhZ2UpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBuZXdQYWdlLT5tYWluRnJhbWUoKS0+ZC0+ZnJhbWU7CisgICAgcmV0dXJuIG5l
d1BhZ2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWU7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRRdDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZShGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKQEAgLTEyMzAsOSArMTIyMSw4IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24oRnJhbWVQb2xpY3lGdW5jCiB7CiAgICAgUV9BU1NFUlQobV93ZWJGcmFtZSk7CiAgICAg
UU5ldHdvcmtSZXF1ZXN0IHIocmVxdWVzdC50b05ldHdvcmtSZXF1ZXN0KG1fZnJhbWUtPmxvYWRl
cigpLT5uZXR3b3JraW5nQ29udGV4dCgpKSk7Ci0gICAgUVdlYlBhZ2UqIHBhZ2UgPSBtX3dlYkZy
YW1lLT5wYWdlKCk7CiAKLSAgICBpZiAoIXBhZ2UtPmQtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0
KDAsIHIsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZShhY3Rpb24udHlwZSgpKSkpIHsKKyAgICBp
ZiAoIW1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5hY2NlcHROYXZpZ2F0aW9uUmVxdWVzdCgwLCBy
LCAoaW50KWFjdGlvbi50eXBlKCkpKSB7CiAgICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IE5h
dmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCB8fCBhY3Rpb24udHlwZSgpID09IE5hdmlnYXRpb25U
eXBlRm9ybVJlc3VibWl0dGVkKQogICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnJlc2V0
TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsKIApAQCAtMTI1MSw3ICsxMjQxLDYg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW4KIHsKICAgICBRX0FTU0VSVChtX3dlYkZyYW1lKTsK
ICAgICBRTmV0d29ya1JlcXVlc3QgcihyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9mcmFtZS0+
bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpKTsKLSAgICBRV2ViUGFnZSpwYWdlID0gbV93
ZWJGcmFtZS0+cGFnZSgpOwogICAgIFBvbGljeUFjdGlvbiByZXN1bHQ7CiAKICAgICAvLyBDdXJy
ZW50bHksIHRoaXMgaXMgb25seSBlbmFibGVkIGJ5IERSVC4KQEAgLTEyNjAsNyArMTI0OSw3IEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuCiAgICAgICAgIGZvciAoY29uc3QgRXZlbnQqIGV2ZW50
ID0gYWN0aW9uLmV2ZW50KCk7IGV2ZW50OyBldmVudCA9IGV2ZW50LT51bmRlcmx5aW5nRXZlbnQo
KSkgewogICAgICAgICAgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSAgc3RhdGljX2Nhc3Q8Y29uc3Qg
TW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgICAgICAgICBub2RlID0gUVdlYkZyYW1lUHJp
dmF0ZTo6Y29yZShtX3dlYkZyYW1lKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBv
aW50KAorICAgICAgICAgICAgICAgIG5vZGUgPSBtX3dlYkZyYW1lLT5mcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KAogICAgICAgICAgICAgICAgICAgICBtb3VzZUV2
ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEyNzUsMTIgKzEyNjQsMTIg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW4KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVz
dWx0ID0gUG9saWN5SWdub3JlOwogCi0gICAgICAgIHBhZ2UtPmQtPmFjY2VwdE5hdmlnYXRpb25S
ZXF1ZXN0KG1fd2ViRnJhbWUsIHIsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZShhY3Rpb24udHlw
ZSgpKSk7CisgICAgICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5hY2NlcHROYXZpZ2F0aW9u
UmVxdWVzdChtX3dlYkZyYW1lLCByLCAoaW50KWFjdGlvbi50eXBlKCkpOwogICAgICAgICBjYWxs
UG9saWN5RnVuY3Rpb24oZnVuY3Rpb24sIHJlc3VsdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIXBhZ2UtPmQtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KG1fd2ViRnJhbWUs
IHIsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZShhY3Rpb24udHlwZSgpKSkpIHsKKyAgICBpZiAo
IW1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5hY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChtX3dlYkZy
YW1lLCByLCAoaW50KWFjdGlvbi50eXBlKCkpKSB7CiAgICAgICAgIGlmIChhY3Rpb24udHlwZSgp
ID09IE5hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCB8fCBhY3Rpb24udHlwZSgpID09IE5hdmln
YXRpb25UeXBlRm9ybVJlc3VibWl0dGVkKQogICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsKIApAQCAtMTMwNSw3ICsx
Mjk0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzdGFydERvd25sb2FkKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKICAgICBpZiAoIW1fd2ViRnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGVtaXQgbV93ZWJGcmFtZS0+cGFnZSgpLT5kb3dubG9hZFJl
cXVlc3RlZChyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdv
cmtpbmdDb250ZXh0KCkpKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1pdERvd25s
b2FkUmVxdWVzdGVkKHJlcXVlc3QudG9OZXR3b3JrUmVxdWVzdChtX2ZyYW1lLT5sb2FkZXIoKS0+
bmV0d29ya2luZ0NvbnRleHQoKSkpOwogfQogCiBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRl
ckNsaWVudFF0OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCkBAIC0xMzI2LDE1ICsxMzE1
LDE2IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUZyYW1l
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nCiAgICAgZnJhbWVEYXRhLm1hcmdpbldpZHRo
ID0gbWFyZ2luV2lkdGg7CiAgICAgZnJhbWVEYXRhLm1hcmdpbkhlaWdodCA9IG1hcmdpbkhlaWdo
dDsKIAotICAgIFFQb2ludGVyPFFXZWJGcmFtZT4gd2ViRnJhbWUgPSBuZXcgUVdlYkZyYW1lKG1f
d2ViRnJhbWUsICZmcmFtZURhdGEpOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lID0g
bV93ZWJGcmFtZS0+Y3JlYXRlRnJhbWUoJmZyYW1lRGF0YSk7CiAgICAgLy8gVGhlIGNyZWF0aW9u
IG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSBydW4gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdGhhdCByZW1v
dmVkIGl0IGZyb20gdGhlIHBhZ2UgYWxyZWFkeS4KLSAgICBpZiAoIXdlYkZyYW1lLmRhdGEoKS0+
ZC0+ZnJhbWUtPnBhZ2UoKSkgeworICAgIGlmICghd2ViRnJhbWUtPmZyYW1lLT5wYWdlKCkpIHsK
KyAgICAgICAgUVBvaW50ZXI8UU9iamVjdD4gcVdlYkZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxR
T2JqZWN0Kj4od2ViRnJhbWUtPmhhbmRsZSgpKTsKICAgICAgICAgZnJhbWVEYXRhLmZyYW1lLnJl
bGVhc2UoKTsKLSAgICAgICAgQVNTRVJUKHdlYkZyYW1lLmlzTnVsbCgpKTsKKyAgICAgICAgQVNT
RVJUKCFxV2ViRnJhbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBlbWl0IG1f
d2ViRnJhbWUtPnBhZ2UoKS0+ZnJhbWVDcmVhdGVkKHdlYkZyYW1lLmRhdGEoKSk7CisgICAgbV93
ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmVtaXRGcmFtZUNyZWF0ZWQod2ViRnJhbWUpOwogCiAgICAg
Ly8gRklYTUU6IFNldCBvdmVycmlkZSBlbmNvZGluZyBpZiB3ZSBoYXZlIG9uZS4KIApAQCAtMTQw
Miw0MSArMTM5Miw0MyBAQCBjb25zdCB1bnNpZ25lZCBudW1xU3R5bGVTaGVldFByb3BlcnRpZXMg
PSBzaXplb2YocXN0eWxlU2hlZXRQcm9wZXJ0aWVzKSAvIHNpemVvZgogY2xhc3MgUXRQbHVnaW5X
aWRnZXQ6IHB1YmxpYyBXaWRnZXQKIHsKIHB1YmxpYzoKLSAgICBRdFBsdWdpbldpZGdldChRV2lk
Z2V0KiB3ID0gMCk6IFdpZGdldCh3KSB7fQorICAgIFF0UGx1Z2luV2lkZ2V0KFF0UGx1Z2luV2lk
Z2V0QWRhcHRlciogdykKKyAgICAgICAgOiBXaWRnZXQody0+aGFuZGxlKCkpCisgICAgICAgICwg
bV9hZGFwdGVyKHcpCisgICAgeworICAgICAgICBzZXRCaW5kaW5nT2JqZWN0KHctPmhhbmRsZSgp
KTsKKyAgICB9CisKICAgICB+UXRQbHVnaW5XaWRnZXQoKQogICAgIHsKLSAgICAgICAgaWYgKHBs
YXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5kZWxldGVMYXRl
cigpOworICAgICAgICBkZWxldGUgbV9hZGFwdGVyOwogICAgIH0KKworICAgIGlubGluZSBRdFBs
dWdpbldpZGdldEFkYXB0ZXIqIHdpZGdldEFkYXB0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYWRhcHRlcjsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYgcikKICAgICB7IAogICAgICAgICBpZiAocGxhdGZvcm1XaWRnZXQo
KSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVdpZGdldCgpKS0+
dXBkYXRlKHIpOworICAgICAgICAgICAgd2lkZ2V0QWRhcHRlcigpLT51cGRhdGUocik7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpCiAgICAgewotICAgICAgICBR
V2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1XaWRnZXQoKSk7
CisgICAgICAgIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciogd2lkZ2V0ID0gd2lkZ2V0QWRhcHRlcigp
OwogICAgICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJ
bnRSZWN0IHdpbmRvd1JlY3QgPSBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwg
MCwgZnJhbWVSZWN0KCkud2lkdGgoKSwgZnJhbWVSZWN0KCkuaGVpZ2h0KCkpKTsKLSAgICAgICAg
d2lkZ2V0LT5zZXRHZW9tZXRyeSh3aW5kb3dSZWN0KTsKKyAgICAgICAgUVJlY3Qgd2luZG93UmVj
dCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVjdCgwLCAwLCBmcmFtZVJlY3QoKS53
aWR0aCgpLCBmcmFtZVJlY3QoKS5oZWlnaHQoKSkpOwogCiAgICAgICAgIFNjcm9sbFZpZXcqIHBh
cmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxWaWV3
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFTU0VSVChwYXJlbnRTY3JvbGxWaWV3
LT5pc0ZyYW1lVmlldygpKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdChzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnRTY3JvbGxWaWV3KS0+d2luZG93Q2xpcFJlY3QoKSk7Ci0gICAgICAg
IGNsaXBSZWN0Lm1vdmUoLXdpbmRvd1JlY3QueCgpLCAtd2luZG93UmVjdC55KCkpOwotICAgICAg
ICBjbGlwUmVjdC5pbnRlcnNlY3Qod2lkZ2V0LT5yZWN0KCkpOwotCi0gICAgICAgIFFSZWdpb24g
Y2xpcFJlZ2lvbiA9IFFSZWdpb24oY2xpcFJlY3QpOwotICAgICAgICB3aWRnZXQtPnNldE1hc2so
Y2xpcFJlZ2lvbik7Ci0KLSAgICAgICAgaGFuZGxlVmlzaWJpbGl0eSgpOwotCi0gICAgICAgIHdp
ZGdldC0+dXBkYXRlKCk7CisgICAgICAgIFFSZWN0IGNsaXBSZWN0OworICAgICAgICBpZiAocGFy
ZW50U2Nyb2xsVmlldykgeworICAgICAgICAgICAgQVNTRVJUKHBhcmVudFNjcm9sbFZpZXctPmlz
RnJhbWVWaWV3KCkpOworICAgICAgICAgICAgY2xpcFJlY3QgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihwYXJlbnRTY3JvbGxWaWV3KS0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICAgICAgICAgIGNs
aXBSZWN0LnRyYW5zbGF0ZSgtd2luZG93UmVjdC54KCksIC13aW5kb3dSZWN0LnkoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgd2lkZ2V0LT5zZXRHZW9tZXRyeUFuZENsaXAod2luZG93UmVjdCwgY2xp
cFJlY3QsIGlzVmlzaWJsZSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpCkBA
IC0xNDQ0LDcyICsxNDM2LDIzIEBAIHB1YmxpYzoKICAgICAgICAgV2lkZ2V0OjpzaG93KCk7CiAg
ICAgICAgIGhhbmRsZVZpc2liaWxpdHkoKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIGhpZGUo
KQorICAgIHsKKyAgICAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICAgICB3aWRn
ZXRBZGFwdGVyKCktPnNldFZpc2libGUoZmFsc2UpOworICAgIH0KIAogcHJpdmF0ZToKKyAgICBR
dFBsdWdpbldpZGdldEFkYXB0ZXIqIG1fYWRhcHRlcjsKKwogICAgIHZvaWQgaGFuZGxlVmlzaWJp
bGl0eSgpCiAgICAgewogICAgICAgICBpZiAoIWlzVmlzaWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIFFXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PFFXaWRnZXQqPihw
bGF0Zm9ybVdpZGdldCgpKTsKLSAgICAgICAgLy8gSWYgc2V0TWFzayBpcyBzZXQgd2l0aCBhbiBl
bXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgICAgIC8vIGJlIHBlcmZvcm1lZCwg
c28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsYXRmb3JtV2lkZ2V0LgotICAgICAgICBRUmVn
aW9uIG1hc2sgPSB3aWRnZXQtPm1hc2soKTsKLSAgICAgICAgd2lkZ2V0LT5zZXRWaXNpYmxlKCFt
YXNrLmlzRW1wdHkoKSk7CisgICAgICAgIHdpZGdldEFkYXB0ZXIoKS0+c2V0VmlzaWJsZSh0cnVl
KTsKICAgICB9CiB9OwogCi0jaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotY2xhc3Mg
UXRQbHVnaW5HcmFwaGljc1dpZGdldDogcHVibGljIFdpZGdldAotewotcHVibGljOgotICAgIHN0
YXRpYyBSZWZQdHI8UXRQbHVnaW5HcmFwaGljc1dpZGdldD4gY3JlYXRlKFFHcmFwaGljc1dpZGdl
dCogdyA9IDApCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFF0UGx1Z2luR3Jh
cGhpY3NXaWRnZXQodykpOwotICAgIH0KLQotICAgIH5RdFBsdWdpbkdyYXBoaWNzV2lkZ2V0KCkK
LSAgICB7Ci0gICAgICAgIGlmIChncmFwaGljc1dpZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNz
V2lkZ2V0LT5kZWxldGVMYXRlcigpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKLSAgICB7Ci0gICAgICAgIFFHcmFwaGljc1NjZW5lKiBz
Y2VuZSA9IGdyYXBoaWNzV2lkZ2V0ID8gZ3JhcGhpY3NXaWRnZXQtPnNjZW5lKCkgOiAwOwotICAg
ICAgICBpZiAoc2NlbmUpCi0gICAgICAgICAgICBzY2VuZS0+dXBkYXRlKFFSZWN0KHIpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkKLSAgICB7Ci0gICAgICAg
IGlmICghZ3JhcGhpY3NXaWRnZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgSW50
UmVjdCB3aW5kb3dSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAs
IGZyYW1lUmVjdCgpLndpZHRoKCksIGZyYW1lUmVjdCgpLmhlaWdodCgpKSk7Ci0gICAgICAgIGdy
YXBoaWNzV2lkZ2V0LT5zZXRHZW9tZXRyeShRUmVjdCh3aW5kb3dSZWN0KSk7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IE1ha2UgdGhlIGNvZGUgaGFuZGxlIGNsaXBwaW5nIG9mIGdyYXBoaWNzIHdpZGdl
dHMuCi0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkKLSAgICB7Ci0gICAgICAgIGlmIChn
cmFwaGljc1dpZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5zaG93KCk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBoaWRlKCkKLSAgICB7Ci0gICAgICAgIGlmIChncmFwaGljc1dp
ZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5oaWRlKCk7Ci0gICAgfQotcHJpdmF0
ZToKLSAgICBRdFBsdWdpbkdyYXBoaWNzV2lkZ2V0KFFHcmFwaGljc1dpZGdldCogdyA9IDApCi0g
ICAgICAgIDogV2lkZ2V0KDApCi0gICAgICAgICwgZ3JhcGhpY3NXaWRnZXQodykKLSAgICB7Ci0g
ICAgICAgIHNldEJpbmRpbmdPYmplY3QoZ3JhcGhpY3NXaWRnZXQpOwotICAgIH0KLQotICAgIFFH
cmFwaGljc1dpZGdldCogZ3JhcGhpY3NXaWRnZXQ7Ci19OwotI2VuZGlmIC8vIFFUX05PX0dSQVBI
SUNTVklFVwogCiBQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRl
UGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSkKQEAgLTE1MzUsNzIgKzE0NzgsNTUgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLAogICAg
IFFTdHJpbmcgdXJsU3RyKHVybC5zdHJpbmcoKSk7CiAgICAgUVVybCBxdXJsID0gdXJsU3RyOwog
Ci0gICAgUU9iamVjdCogb2JqZWN0ID0gMDsKKyAgICBRT2JqZWN0KiBwbHVnaW5BZGFwdGVyID0g
MDsKIAogICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1xdC1wbHVnaW4iIHx8IG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXF0LXN0eWxlZC13aWRnZXQiKSB7Ci0gICAgICAgIG9i
amVjdCA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+Y3JlYXRlUGx1Z2luKGNsYXNzaWQsIHF1cmwsIHBh
cmFtcywgdmFsdWVzKTsKKyAgICAgICAgcGx1Z2luQWRhcHRlciA9IG1fd2ViRnJhbWUtPnBhZ2VB
ZGFwdGVyLT5jcmVhdGVQbHVnaW4oY2xhc3NpZCwgcXVybCwgcGFyYW1zLCB2YWx1ZXMpOwogI2lm
bmRlZiBRVF9OT19TVFlMRV9TVFlMRVNIRUVUCi0gICAgICAgIFFXaWRnZXQqIHdpZGdldCA9IHFv
YmplY3RfY2FzdDxRV2lkZ2V0Kj4ob2JqZWN0KTsKKyAgICAgICAgUXRQbHVnaW5XaWRnZXRBZGFw
dGVyKiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UXRQbHVnaW5XaWRnZXRBZGFwdGVyKj4ocGx1Z2lu
QWRhcHRlcik7CiAgICAgICAgIGlmICh3aWRnZXQgJiYgbWltZVR5cGUgPT0gImFwcGxpY2F0aW9u
L3gtcXQtc3R5bGVkLXdpZGdldCIpIHsKIAotICAgICAgICAgICAgUVN0cmluZyBzdHlsZVNoZWV0
ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJzdHlsZSIpOworICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciBzdHlsZVNoZWV0OworICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoZWxlbWVudC0+
Z2V0QXR0cmlidXRlKCJzdHlsZSIpKTsKICAgICAgICAgICAgIGlmICghc3R5bGVTaGVldC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgc3R5bGVTaGVldCArPSBRTGF0aW4xQ2hhcignOycpOwor
ICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQuYXBwZW5kKCc7Jyk7CiAKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1xU3R5bGVTaGVldFByb3BlcnRpZXM7ICsraSkgewog
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBxc3R5bGVTaGVldFByb3Bl
cnRpZXNbaV07CiAKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0ICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KSk7Ci0gICAgICAgICAgICAgICAgc3R5bGVT
aGVldCArPSBRTGF0aW4xQ2hhcignOicpOwotICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQgKz0g
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCktPmdldFByb3BlcnR5
VmFsdWUocHJvcGVydHkpOwotICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQgKz0gUUxhdGluMUNo
YXIoJzsnKTsKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0LmFwcGVuZChnZXRQcm9wZXJ0eU5h
bWUocHJvcGVydHkpKTsKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0LmFwcGVuZCgnOicpOwor
ICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQuYXBwZW5kKENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6Y3JlYXRlKGVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSk7CisgICAg
ICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoJzsnKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgd2lkZ2V0LT5zZXRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworICAgICAgICAgICAg
d2lkZ2V0LT5zZXRTdHlsZVNoZWV0KHN0eWxlU2hlZXQudG9TdHJpbmcoKSk7CiAgICAgICAgIH0K
ICNlbmRpZiAvLyBRVF9OT19TVFlMRV9TVFlMRVNIRUVUCiAgICAgfQogCi0gICAgaWYgKCFvYmpl
Y3QpIHsKLSAgICAgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5w
YWdlKCktPnBsdWdpbkZhY3RvcnkoKTsKKyAgICBpZiAoIXBsdWdpbkFkYXB0ZXIpIHsKKyAgICAg
ICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+
cGx1Z2luRmFjdG9yeTsKICAgICAgICAgaWYgKGZhY3RvcnkpCi0gICAgICAgICAgICBvYmplY3Qg
PSBmYWN0b3J5LT5jcmVhdGUobWltZVR5cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKKyAgICAg
ICAgICAgIHBsdWdpbkFkYXB0ZXIgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+YWRhcHRlckZv
cldpZGdldChmYWN0b3J5LT5jcmVhdGUobWltZVR5cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKSk7
CiAgICAgfQotCi0gICAgaWYgKG9iamVjdCkgewotICAgICAgICBRV2lkZ2V0KiB3aWRnZXQgPSBx
b2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG9iamVjdCk7CisgICAgaWYgKHBsdWdpbkFkYXB0ZXIpIHsK
KyAgICAgICAgUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UXRQ
bHVnaW5XaWRnZXRBZGFwdGVyKj4ocGx1Z2luQWRhcHRlcik7CiAgICAgICAgIGlmICh3aWRnZXQp
IHsKLSAgICAgICAgICAgIFFXaWRnZXQqIHBhcmVudFdpZGdldCA9IDA7Ci0gICAgICAgICAgICBp
ZiAobV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5jbGllbnQpCi0gICAgICAgICAgICAgICAgcGFyZW50
V2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPihtX3dlYkZyYW1lLT5wYWdlKCktPmQtPmNs
aWVudC0+cGx1Z2luUGFyZW50KCkpOworICAgICAgICAgICAgUU9iamVjdCogcGFyZW50V2lkZ2V0
ID0gMDsKKyAgICAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Y2xpZW50KQor
ICAgICAgICAgICAgICAgIHBhcmVudFdpZGdldCA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5j
bGllbnQtPnBsdWdpblBhcmVudCgpOwogICAgICAgICAgICAgaWYgKHBhcmVudFdpZGdldCkgLy8g
RG9uJ3QgcmVwYXJlbnQgdG8gbm90aGluZyAoaS5lLiBrZWVwIHdoYXRldmVyIHBhcmVudCBRV2Vi
UGFnZTo6Y3JlYXRlUGx1Z2luKCkgY2hvc2UuCi0gICAgICAgICAgICAgICAgd2lkZ2V0LT5zZXRQ
YXJlbnQocGFyZW50V2lkZ2V0KTsKLSAgICAgICAgICAgIHdpZGdldC0+aGlkZSgpOwotICAgICAg
ICAgICAgUmVmUHRyPFF0UGx1Z2luV2lkZ2V0PiB3ID0gYWRvcHRSZWYobmV3IFF0UGx1Z2luV2lk
Z2V0KCkpOwotICAgICAgICAgICAgdy0+c2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsKKyAgICAg
ICAgICAgICAgICB3aWRnZXQtPnNldFdpZGdldFBhcmVudChwYXJlbnRXaWRnZXQpOworICAgICAg
ICAgICAgd2lkZ2V0LT5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAgICAgIFJlZlB0cjxRdFBs
dWdpbldpZGdldD4gdyA9IGFkb3B0UmVmKG5ldyBRdFBsdWdpbldpZGdldCh3aWRnZXQpKTsKICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGludmlzaWJsZSB1bnRpbCBwcm9wZXJseSBwbGFj
ZWQgaW50byB0aGUgbGF5b3V0LgogICAgICAgICAgICAgdy0+c2V0RnJhbWVSZWN0KEludFJlY3Qo
MCwgMCwgMCwgMCkpOwogICAgICAgICAgICAgcmV0dXJuIHc7CiAgICAgICAgIH0KIAotI2lmICFk
ZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKLSAgICAgICAgUUdyYXBoaWNzV2lkZ2V0KiBncmFw
aGljc1dpZGdldCA9IHFvYmplY3RfY2FzdDxRR3JhcGhpY3NXaWRnZXQqPihvYmplY3QpOwotICAg
ICAgICBpZiAoZ3JhcGhpY3NXaWRnZXQpIHsKLSAgICAgICAgICAgIFFHcmFwaGljc09iamVjdCog
cGFyZW50V2lkZ2V0ID0gMDsKLSAgICAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5wYWdlKCktPmQt
PmNsaWVudCkKLSAgICAgICAgICAgICAgICBwYXJlbnRXaWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UUdy
YXBoaWNzT2JqZWN0Kj4obV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5jbGllbnQtPnBsdWdpblBhcmVu
dCgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5oaWRlKCk7Ci0gICAgICAgICAgICBp
ZiAocGFyZW50V2lkZ2V0KSAvLyBEb24ndCByZXBhcmVudCB0byBub3RoaW5nIChpLmUuIGtlZXAg
d2hhdGV2ZXIgcGFyZW50IFFXZWJQYWdlOjpjcmVhdGVQbHVnaW4oKSBjaG9zZS4KLSAgICAgICAg
ICAgICAgICBncmFwaGljc1dpZGdldC0+c2V0UGFyZW50SXRlbShwYXJlbnRXaWRnZXQpOwotICAg
ICAgICAgICAgUmVmUHRyPFF0UGx1Z2luR3JhcGhpY3NXaWRnZXQ+IHcgPSBRdFBsdWdpbkdyYXBo
aWNzV2lkZ2V0OjpjcmVhdGUoZ3JhcGhpY3NXaWRnZXQpOwotICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIGl0J3MgaW52aXNpYmxlIHVudGlsIHByb3Blcmx5IHBsYWNlZCBpbnRvIHRoZSBsYXlvdXQu
Ci0gICAgICAgICAgICB3LT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCAwLCAwKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFFUX05PX0dSQVBISUNTVklF
VwotCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaW5ncyB3b3JrIGZvciB3aWRnZXRsZXNzIHBs
dWdpbnMgYXMgd2VsbC4KLSAgICAgICAgZGVsZXRlIG9iamVjdDsKKyAgICAgICAgZGVsZXRlIHBs
dWdpbkFkYXB0ZXI7CiAgICAgfQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAg
IGVsc2UgeyAvLyBOUEFQSSBQbHVnaW5zCkBAIC0xNjQ1LDIzICsxNTcxLDI2IEBAIFN0cmluZyBG
cmFtZUxvYWRlckNsaWVudFF0OjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0CiAKIFFTdHJpbmcg
RnJhbWVMb2FkZXJDbGllbnRRdDo6Y2hvb3NlRmlsZShjb25zdCBRU3RyaW5nJiBvbGRGaWxlKQog
ewotICAgIHJldHVybiBtX3dlYkZyYW1lLT5wYWdlKCktPmNob29zZUZpbGUobV93ZWJGcmFtZSwg
b2xkRmlsZSk7CisgICAgUVN0cmluZ0xpc3QgcmVzdWx0ID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0
ZXItPmNob29zZUZpbGVzKG1fd2ViRnJhbWUsIC8qYWxsb3dNdWx0aSovIGZhbHNlLCAoUVN0cmlu
Z0xpc3QoKSA8PCBvbGRGaWxlKSk7CisgICAgcmV0dXJuIHJlc3VsdC5pc0VtcHR5KCkgPyBRU3Ry
aW5nKCkgOiByZXN1bHQuZmlyc3QoKTsKIH0KIAogUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdD
b250ZXh0PiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCiB7
Ci0gICAgUVZhcmlhbnQgdmFsdWUgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnByb3BlcnR5KCJfcV9N
SU1FU25pZmZpbmdEaXNhYmxlZCIpOworICAgIFFWYXJpYW50IHZhbHVlID0gbV93ZWJGcmFtZS0+
cGFnZUFkYXB0ZXItPmhhbmRsZSgpLT5wcm9wZXJ0eSgiX3FfTUlNRVNuaWZmaW5nRGlzYWJsZWQi
KTsKICAgICBib29sIE1JTUVTbmlmZmluZ0Rpc2FibGVkID0gdmFsdWUuaXNWYWxpZCgpICYmIHZh
bHVlLnRvQm9vbCgpOwogCi0gICAgcmV0dXJuIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6Y3Jl
YXRlKG1fZnJhbWUsIG1fd2ViRnJhbWUsICFNSU1FU25pZmZpbmdEaXNhYmxlZCwgbV93ZWJGcmFt
ZS0+cGFnZSgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpKTsKKyAgICByZXR1cm4gRnJhbWVOZXR3
b3JraW5nQ29udGV4dFF0OjpjcmVhdGUobV9mcmFtZSwgbV93ZWJGcmFtZS0+aGFuZGxlKCksICFN
SU1FU25pZmZpbmdEaXNhYmxlZCk7Cit9CisKK1FXZWJGcmFtZUFkYXB0ZXIqIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OndlYkZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJGcmFtZTsKIH0K
IAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjplbWl0TG9hZFN0YXJ0ZWQoKQogewotICAgIFFX
ZWJQYWdlKiB3ZWJQYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwotICAgIGlmIChtX2lzT3JpZ2lu
YXRpbmdMb2FkICYmIHdlYlBhZ2UpCi0gICAgICAgIGVtaXQgd2ViUGFnZS0+bG9hZFN0YXJ0ZWQo
KTsKLSAgICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRTdGFydGVkKCk7CisgICAgbV93ZWJGcmFtZS0+
ZW1pdExvYWRTdGFydGVkKG1faXNPcmlnaW5hdGluZ0xvYWQpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBvaykKQEAgLTE2NzAsMTAgKzE1OTks
NyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBvaykK
ICAgICBjb25zdCBib29sIHdhc09yaWdpbmF0aW5nTG9hZCA9IG1faXNPcmlnaW5hdGluZ0xvYWQ7
CiAgICAgbV9pc09yaWdpbmF0aW5nTG9hZCA9IGZhbHNlOwogCi0gICAgUVdlYlBhZ2UqIHdlYlBh
Z2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKHdhc09yaWdpbmF0aW5nTG9hZCAmJiB3
ZWJQYWdlKQotICAgICAgICBlbWl0IHdlYlBhZ2UtPmxvYWRGaW5pc2hlZChvayk7Ci0gICAgZW1p
dCBtX3dlYkZyYW1lLT5sb2FkRmluaXNoZWQob2spOworICAgIG1fd2ViRnJhbWUtPmVtaXRMb2Fk
RmluaXNoZWQod2FzT3JpZ2luYXRpbmdMb2FkLCBvayk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKaW5kZXgg
MDMxMDJkZTNlMmIzYWNmYzY4NzRiMGVlOGJhMTU1MGNkYTRiYTMyYy4uOTJmY2M4MzFkNWRiNDVk
OWU2NDJkYzg3YTk5ZTBhYTVmZWMxMmY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKQEAgLTMwLDEwICszMCwxMiBA
QAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVudFF0X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGll
bnRRdF9oCiAKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCkBAIC00OSw2ICs1MSw3IEBAIGNsYXNzIFFOZXR3b3JrUmVwbHk7CiBRVF9FTkRfTkFNRVNQ
QUNFCiAKIGNsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXI7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNjUsNyArNjgsNyBAQCBzdHJ1Y3QgTG9hZEVycm9yUmVzZXRU
b2tlbjsKIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGlj
IEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBRX09CSkVDVAogCi0gICAgZnJpZW5kIGNsYXNzIDo6
UVdlYkZyYW1lOworICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJGcmFtZUFkYXB0ZXI7CiAgICAgdm9p
ZCBjYWxsUG9saWN5RnVuY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgUG9saWN5
QWN0aW9uIGFjdGlvbik7CiAgICAgYm9vbCBjYWxsRXJyb3JQYWdlRXh0ZW5zaW9uKGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKIApAQCAtNzksNyArODIsNyBAQCBwdWJsaWM6CiAgICAgfkZyYW1lTG9h
ZGVyQ2xpZW50UXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsK
IAotICAgIHZvaWQgc2V0RnJhbWUoUVdlYkZyYW1lKiB3ZWJGcmFtZSwgRnJhbWUqIGZyYW1lKTsK
KyAgICB2b2lkIHNldEZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIgKndlYkZyYW1lLCBGcmFtZSogZnJh
bWUpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXcoKSBjb25zdDsgLy8gbWFpbmx5IGZv
ciBhc3NlcnRpb25zCiAKQEAgLTIyNyw2ICsyMzAsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBL
VVJMJiBsYXN0UmVxdWVzdGVkVXJsKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdGVkVXJs
OyB9CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHZpcnR1YWwga2V5d29yZCBvbmNlIEZyYW1lTG9h
ZGVyQ2xpZW5RdCBoYXMgbW92ZWQgZnJvbSBXS1dpZGdldHMgdG8gV0sxLgorICAgIHZpcnR1YWwg
UVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUoKSBjb25zdDsKKwogICAgIHN0YXRpYyBib29sIGR1
bXBGcmFtZUxvYWRlckNhbGxiYWNrczsKICAgICBzdGF0aWMgYm9vbCBkdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrOwogICAgIHN0YXRpYyBib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
ZXJDYWxsYmFja3M7CkBAIC0yNTEsNyArMjU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRM
b2FkRmluaXNoZWQoYm9vbCBvayk7CiAKICAgICBGcmFtZSAqbV9mcmFtZTsKLSAgICBRV2ViRnJh
bWUgKm1fd2ViRnJhbWU7CisgICAgUVdlYkZyYW1lQWRhcHRlciAqbV93ZWJGcmFtZTsKICAgICBS
ZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAKICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRp
cmVjdCBkYXRhIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5jcHAKaW5kZXggN2U5OTYyNGI1ODM5NjMx
MDRjMjA2MDY2MTZlZjlmZGVlMGUwMGZjYS4uNTczOWVjMDVhODhkNzc1NGZhNWRkN2FkZDVjMTA5
NGIzYTRmZjQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmNwcApAQCAtMTgsMjkgKzE4LDI2IEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0UXQuaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJmcmFt
ZV9wLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01h
bmFnZXI+CiAjaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+CiAjaW5jbHVkZSA8UU5ldHdvcmtDb29r
aWVKYXI+CisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3
ZWJzZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYW1lTmV0d29ya2luZ0Nv
bnRleHRRdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KEZyYW1lKiBmcmFtZSwgUU9iamVjdCog
b3JpZ2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCwgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcikKK0ZyYW1lTmV0d29ya2luZ0NvbnRleHRR
dDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KEZyYW1lKiBmcmFtZSwgUU9iamVjdCogb3JpZ2lu
YXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCkKICAgICA6IEZyYW1lTmV0d29y
a2luZ0NvbnRleHQoZnJhbWUpCiAgICAgLCBtX29yaWdpbmF0aW5nT2JqZWN0KG9yaWdpbmF0aW5n
T2JqZWN0KQotICAgICwgbV9uZXR3b3JrQWNjZXNzTWFuYWdlcihuZXR3b3JrQWNjZXNzTWFuYWdl
cikKICAgICAsIG1fbWltZVNuaWZmaW5nRW5hYmxlZChtaW1lU25pZmZpbmdFbmFibGVkKQogewog
fQogCi1QYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdD4gRnJhbWVOZXR3b3JraW5n
Q29udGV4dFF0OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVj
dCwgYm9vbCBtaW1lU25pZmZpbmdFbmFibGVkLCBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKQorUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ+IEZy
YW1lTmV0d29ya2luZ0NvbnRleHRRdDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgUU9iamVjdCogb3Jp
Z2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdChmcmFtZSwgb3JpZ2luYXRpbmdP
YmplY3QsIG1pbWVTbmlmZmluZ0VuYWJsZWQsIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQoZnJhbWUsIG9yaWdp
bmF0aW5nT2JqZWN0LCBtaW1lU25pZmZpbmdFbmFibGVkKSk7CiB9CiAKIFFPYmplY3QqIEZyYW1l
TmV0d29ya2luZ0NvbnRleHRRdDo6b3JpZ2luYXRpbmdPYmplY3QoKSBjb25zdApAQCAtNTAsNyAr
NDcsNyBAQCBRT2JqZWN0KiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6Om9yaWdpbmF0aW5nT2Jq
ZWN0KCkgY29uc3QKIAogUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBGcmFtZU5ldHdvcmtpbmdDb250
ZXh0UXQ6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHFvYmpl
Y3RfY2FzdDxRV2ViRnJhbWUqPihtX29yaWdpbmF0aW5nT2JqZWN0KSktPnBhZ2UoKS0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKTsKKyAgICByZXR1cm4gUVdlYlBhZ2VBZGFwdGVyOjpraXQoZnJhbWUo
KS0+cGFnZSgpKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKIH0KIAogYm9vbCBGcmFtZU5ldHdv
cmtpbmdDb250ZXh0UXQ6Om1pbWVTbmlmZmluZ0VuYWJsZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQu
aCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4
dFF0LmgKaW5kZXggYzk1ZTYzMGFjMjE0ZGRkYzlkNjg4YTkzM2MwYzc5ZWY2OTg4NGQwYS4uYjU4
YWJlNDhkOWI4YmU3ZmY5YTNhYjU2ZGQwNzAzNTA2ZjUwY2ZjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRR
dC5oCkBAIC0yNiwxMCArMjYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0UXQgOiBwdWJsaWMgRnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0PiBj
cmVhdGUoRnJhbWUqLCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZp
bmdFbmFibGVkLCBRTmV0d29ya0FjY2Vzc01hbmFnZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ+IGNyZWF0ZShGcmFtZSosIFFPYmplY3QqIG9yaWdp
bmF0aW5nT2JqZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJsZWQpOwogCiBwcml2YXRlOgotICAg
IEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdChGcmFtZSosIFFPYmplY3QqIG9yaWdpbmF0aW5nT2Jq
ZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJsZWQsIFFOZXR3b3JrQWNjZXNzTWFuYWdlciopOwor
ICAgIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdChGcmFtZSosIFFPYmplY3QqIG9yaWdpbmF0aW5n
T2JqZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJsZWQpOwogCiAgICAgdmlydHVhbCBRT2JqZWN0
KiBvcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0OwpAQCAtMzcsNyArMzcsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWlzc2lv
bihjb25zdCBRVXJsJikgY29uc3Q7CiAKICAgICBRT2JqZWN0KiBtX29yaWdpbmF0aW5nT2JqZWN0
OwotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbV9uZXR3b3JrQWNjZXNzTWFuYWdlcjsKICAg
ICBib29sIG1fbWltZVNuaWZmaW5nRW5hYmxlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAKaW5kZXggM2IyNDRj
NjU3MzMyZjk4MjkwNzg2MWQ1ZTQ3NGQ4NGY3YTExNGFkMi4uMjVlMzU3YWJhNTJkNDJlYzZhMWRl
YmU3M2EyOTBlODdiOWQ0MzY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAjaWYgVVNFKFFUX01VTFRJTUVESUEpCi0jaW5jbHVk
ZSAiRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
UXQuaCIKICNlbmRpZgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNDAsMTAgKzM5LDggQEAK
ICNlbmRpZgogCiAjaWYgVVNFKFFUX01VTFRJTUVESUEpCi0jaW5jbHVkZSA8UUdyYXBoaWNzVmlk
ZW9JdGVtPgogI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KICNlbmRpZgotI2luY2x1ZGUgPFFXaWRn
ZXQ+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTAsNDkgKzg3LDYgQEAgdm9pZCBHU3Ry
ZWFtZXJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNjcmVlbigpCiB9CiAjZW5kaWYK
IAotI2lmIFVTRShRVF9NVUxUSU1FRElBKQotYm9vbCBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFu
ZGxlcjo6c19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrID0gZmFsc2U7Ci0KLURl
ZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxl
cigpCi0gICAgOiBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCi0gICAgLCBtX2Z1bGxTY3Jl
ZW5XaWRnZXQobmV3IEZ1bGxTY3JlZW5WaWRlb1dpZGdldCkKLXsKLSAgICBjb25uZWN0KG1fZnVs
bFNjcmVlbldpZGdldCwgU0lHTkFMKGRpZEV4aXRGdWxsU2NyZWVuKCkpLCB0aGlzLCBTSUdOQUwo
ZnVsbFNjcmVlbkNsb3NlZCgpKSk7Ci0gICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5oaWRlKCk7Ci0K
LSAgICBtX2Z1bGxTY3JlZW5XaWRnZXQtPmNsb3NlKCk7Ci19Ci0KLURlZmF1bHRGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyOjp+RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQotewotICAgIGRl
bGV0ZSBtX2Z1bGxTY3JlZW5XaWRnZXQ7Ci19Ci0KLWJvb2wgRGVmYXVsdEZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXI6OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdAotewot
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKCFpbml0aWFsaXpl
ZCkgewotICAgICAgICBRQnl0ZUFycmF5IGZvcmNlRnVsbFNjcmVlbiA9IHFnZXRlbnYoIlFUX1dF
QktJVF9GT1JDRV9GVUxMU0NSRUVOX1ZJREVPIik7Ci0gICAgICAgIGlmICghZm9yY2VGdWxsU2Ny
ZWVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNfc2hvdWxkRm9yY2VGdWxsU2NyZWVuVmlkZW9Q
bGF5YmFjayA9IHRydWU7Ci0KLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2s7Ci19Ci0KLXZv
aWQgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbFNjcmVlbihRTWVkaWFQ
bGF5ZXIqIHBsYXllcikKLXsKLSAgICBtX2Z1bGxTY3JlZW5XaWRnZXQtPnNob3cocGxheWVyKTsK
LX0KLQotdm9pZCBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4o
KQotewotICAgIG1fZnVsbFNjcmVlbldpZGdldC0+Y2xvc2UoKTsKLX0KLSNlbmRpZgotCiBGdWxs
U2NyZWVuVmlkZW9RdDo6RnVsbFNjcmVlblZpZGVvUXQoQ2hyb21lQ2xpZW50UXQqIGNocm9tZUNs
aWVudCkKICAgICA6IG1fY2hyb21lQ2xpZW50KGNocm9tZUNsaWVudCkKICAgICAsIG1fdmlkZW9F
bGVtZW50KDApCkBAIC0xNDAsMTAgKzk0LDcgQEAgRnVsbFNjcmVlblZpZGVvUXQ6OkZ1bGxTY3Jl
ZW5WaWRlb1F0KENocm9tZUNsaWVudFF0KiBjaHJvbWVDbGllbnQpCiAgICAgUV9BU1NFUlQobV9j
aHJvbWVDbGllbnQpOwogCiAjaWYgVVNFKFFUX01VTFRJTUVESUEpCi0gICAgbV9GdWxsU2NyZWVu
VmlkZW9IYW5kbGVyID0gbV9jaHJvbWVDbGllbnQtPm1fcGxhdGZvcm1QbHVnaW4uY3JlYXRlRnVs
bFNjcmVlblZpZGVvSGFuZGxlcigpLmxlYWtQdHIoKTsKLSAgICBpZiAoIW1fRnVsbFNjcmVlblZp
ZGVvSGFuZGxlcikKLSAgICAgICAgbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyID0gbmV3IERlZmF1
bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwotCisgICAgbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVy
ID0gbV9jaHJvbWVDbGllbnQtPmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKICAgICBp
ZiAobV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKQogICAgICAgICBjb25uZWN0KG1fRnVsbFNjcmVl
blZpZGVvSGFuZGxlciwgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSksIHRoaXMsIFNMT1QoYWJv
dXRUb0Nsb3NlKCkpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCmluZGV4IDM0YmM5MGMwZDhjOTNjZWE1NmRmZDA0
ZmQ4MThiYTY0NWY3NDFhMTkuLmRjZTNlNWZlMWMxMGEyMGFlODUwOGZhMWJlY2RlOWFjYjY5MmJm
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVl
blZpZGVvUXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3Jl
ZW5WaWRlb1F0LmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgRnVsbFNjcmVlblZpZGVvUXRf
aAogI2RlZmluZSBGdWxsU2NyZWVuVmlkZW9RdF9oCiAKLSNpbmNsdWRlICJxd2Via2l0cGxhdGZv
cm1wbHVnaW4uaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCiAj
aW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIApAQCAtNjUsMjUg
KzY1LDYgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYKIAotLy8gV2UgZG8gbm90IHVzZSBFTkFCTEUg
b3IgVVNFIGJlY2F1c2UgbW9jIGRvZXMgbm90IGV4cGFuZCB0aGVzZSBtYWNyb3MuCi0jaWYgZGVm
aW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQotY2xh
c3MgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgRGVmYXVsdEZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIoKTsKLSAgICB2aXJ0dWFsIH5EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFu
ZGxlcigpOwotICAgIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNv
bnN0OwotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICB2b2lkIGVudGVyRnVsbFNjcmVlbihRTWVkaWFQ
bGF5ZXIqKTsKLSAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIGJvb2wgc19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrOwotICAgIEZ1bGxT
Y3JlZW5WaWRlb1dpZGdldCAqbV9mdWxsU2NyZWVuV2lkZ2V0OwotfTsKLSNlbmRpZgotCiBjbGFz
cyBGdWxsU2NyZWVuVmlkZW9RdCA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogcHVi
bGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2Ny
ZWVuVmlkZW9XaWRnZXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxs
U2NyZWVuVmlkZW9XaWRnZXQuY3BwCmluZGV4IGJiNWUyYjlmNjEyZjY1NTBjYmZlZDEyZmQ4M2Ji
M2MwN2U3NTc0NGIuLjk5OWM3YmY1NmNkNjcxYzViNjBlNDgwYjEyN2E0NzU4ZmI1OWM3NmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVv
V2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3Jl
ZW5WaWRlb1dpZGdldC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RhdGljIGNvbnN0IGludCBn
SGlkZU1vdXNlQ3Vyc29yRGVsYXkgPSAzMDAwOwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgV2ViS2l0IHsKIAogRnVsbFNjcmVlblZpZGVvV2lkZ2V0OjpGdWxsU2NyZWVuVmlkZW9X
aWRnZXQoKQogICAgIDogUVZpZGVvV2lkZ2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oCmluZGV4IDdlN2Y4ZGYx
YzZlMWMwMjcwMDMxODNmYjYyM2NiZTE4MDEyY2Q5ZGIuLjIwMWNjNDlkMWU0MTJlOTg3YjZlNDFj
YzUwM2RkMjJlM2Q0NzZhMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaApAQCAtMzUsNyArMzUsNyBAQCBRVF9C
RUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFNZWRpYVBsYXllcjsKIFFUX0VORF9OQU1FU1BBQ0UKIAot
bmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEZ1bGxTY3Jl
ZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgewogICAgIFFfT0JKRUNUCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50
UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVu
dFF0LmNwcAppbmRleCBiNmI0ZDcwYmQxMGE4N2M4MzE5ZmUxOTc4Yzc2OWQxMmI2OTk5Mzg2Li4w
NWE4ODI4NWMyYzZhM2VlNjQzN2I0ZTZlN2FmYmFlNGI1ZTUyNzM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAK
QEAgLTMzLDEwICszMyw4IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJx
d2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgotI2luY2x1ZGUgInF3ZWJwYWdl
LmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIu
aCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKIAogI2luY2x1ZGUgPFF0TG9jYXRpb24v
UUdlb1Bvc2l0aW9uSW5mb1NvdXJjZT4KIApAQCAtNDQsOCArNDIsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNz
YWdlW10gPSAiRmFpbGVkIHRvIHN0YXJ0IEdlb2xvY2F0aW9uIHNlcnZpY2UiOwogCi1HZW9sb2Nh
dGlvbkNsaWVudFF0OjpHZW9sb2NhdGlvbkNsaWVudFF0KGNvbnN0IFFXZWJQYWdlKiBwYWdlKQot
ICAgIDogbV9wYWdlKHBhZ2UpCitHZW9sb2NhdGlvbkNsaWVudFF0OjpHZW9sb2NhdGlvbkNsaWVu
dFF0KGNvbnN0IFFXZWJQYWdlQWRhcHRlciogcGFnZSkKKyAgICA6IG1fd2ViUGFnZShwYWdlKQog
ICAgICwgbV9sYXN0UG9zaXRpb24oMCkKICAgICAsIG1fbG9jYXRpb24oMCkKIHsKQEAgLTkwLDcg
Kzg4LDcgQEAgdm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQoY29uc3Qg
UUdlb1Bvc2l0aW9uSW5mbyYgZ2VvUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVk
ZUFjY3VyYWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOwogCi0g
ICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShtX3BhZ2UpOwor
ICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPnBhZ2U7CiAgICAgR2VvbG9jYXRp
b25Db250cm9sbGVyOjpmcm9tKHBhZ2UpLT5wb3NpdGlvbkNoYW5nZWQobV9sYXN0UG9zaXRpb24u
Z2V0KCkpOwogfQogCkBAIC0xMDAsNyArOTgsNyBAQCB2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6
OnN0YXJ0VXBkYXRpbmcoKQogICAgICAgICBjb25uZWN0KG1fbG9jYXRpb24sIFNJR05BTChwb3Np
dGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9uSW5mbykpLCB0aGlzLCBTTE9UKHBvc2l0aW9uVXBkYXRl
ZChRR2VvUG9zaXRpb25JbmZvKSkpOwogCiAgICAgaWYgKCFtX2xvY2F0aW9uKSB7Ci0gICAgICAg
IFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUobV9wYWdlKTsKKyAg
ICAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+cGFnZTsKICAgICAgICAgUmVm
UHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+IGVycm9yID0gR2VvbG9jYXRpb25FcnJvcjo6
Y3JlYXRlKEdlb2xvY2F0aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGUsIGZhaWxlZFRvU3Rh
cnRTZXJ2aWNlRXJyb3JNZXNzYWdlKTsKICAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyOjpm
cm9tKHBhZ2UpLT5lcnJvck9jY3VycmVkKGVycm9yLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTI0LDE0ICsxMjIsMTQgQEAgdm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpzZXRFbmFibGVI
aWdoQWNjdXJhY3koYm9vbCkKIHZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6cmVxdWVzdFBlcm1p
c3Npb24oR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewogICAgIEFTU0VSVChnZW9sb2NhdGlv
bik7Ci0gICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9s
b2NhdGlvbi0+ZnJhbWUoKSk7CisgICAgUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBRV2Vi
RnJhbWVBZGFwdGVyOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOwogICAgIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9
CiAKIHZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2Vv
bG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewogICAgIEFTU0VSVChnZW9sb2NhdGlvbik7Ci0gICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+
ZnJhbWUoKSk7CisgICAgUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBRV2ViRnJhbWVBZGFw
dGVyOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25D
bGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNs
aWVudFF0LmgKaW5kZXggMmU5NGJkZWJjMmJkNTc4ZDVmMWY0MWZjZjZiMWIwMzMwMzgzMmFmMi4u
ZDNhNjNlYzAzOGRkMjE1OTQyZjQ3ZTg4NmNjOTY2Zjc5YjhhMDEzYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKQEAg
LTM3LDcgKzM3LDcgQEAgY2xhc3MgUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZTsKIFFUX0VORF9OQU1F
U1BBQ0UKIAogCi1jbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIEdlb2xvY2F0aW9uQ2xp
ZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIEdlb2xvY2F0aW9uQ2xpZW50IHsKICAgICBR
X09CSkVDVAogCiBwdWJsaWM6Ci0gICAgR2VvbG9jYXRpb25DbGllbnRRdChjb25zdCBRV2ViUGFn
ZSopOworICAgIEdlb2xvY2F0aW9uQ2xpZW50UXQoY29uc3QgUVdlYlBhZ2VBZGFwdGVyKik7CiAg
ICAgdmlydHVhbCB+R2VvbG9jYXRpb25DbGllbnRRdCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdl
b2xvY2F0aW9uRGVzdHJveWVkKCk7CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGUgUV9TTE9UUzoK
ICAgICB2b2lkIHBvc2l0aW9uVXBkYXRlZChjb25zdCBRR2VvUG9zaXRpb25JbmZvJik7CiAKIHBy
aXZhdGU6Ci0gICAgY29uc3QgUVdlYlBhZ2UqIG1fcGFnZTsKKyAgICBjb25zdCBRV2ViUGFnZUFk
YXB0ZXIqIG1fd2ViUGFnZTsKICAgICBSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gbV9sYXN0
UG9zaXRpb247CiAgICAgUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZSogbV9sb2NhdGlvbjsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwCmluZGV4IDc1MDBlOTkzZmRiOWZmYmVlMTBh
M2Y4NmEwNjhjNTNmZDgzZDg4OWYuLmEzODI0NTFkMTliMzFhMzRiYTkwZDNmNjUyODVjMzdjYTE0
MGUzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwCkBAIC0zMyw5ICszMyw5
IEBACiAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogCi0jaW5jbHVkZSAicXdlYmZyYW1lLmgi
Ci0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisjaW5j
bHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgor
I2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0Z2xvYmFsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNjAsMzYgKzYwLDMwIEBAIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKQogewogfQogCi12b2lkIEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdl
YkZyYW1lKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQordm9pZCBHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1l
KFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVuZXIpCiB7CiAg
ICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmluc2VydCh3ZWJGcmFtZSwgbGlzdGVuZXIp
OwogCi0gICAgUVdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgpOwotICAgIGVtaXQgcGFn
ZS0+ZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0ZWQod2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2Nh
dGlvbik7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlID0gUVdlYlBhZ2VBZGFwdGVyOjpraXQo
d2ViRnJhbWUtPmZyYW1lLT5wYWdlKCkpOworICAgIHBhZ2UtPmdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RlZCh3ZWJGcmFtZSk7CiB9CiAKIAotdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFFXZWJG
cmFtZSogd2ViRnJhbWUsIEdlb2xvY2F0aW9uKiBsaXN0ZW5lcikKK3ZvaWQgR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JG
cmFtZShRV2ViRnJhbWVBZGFwdGVyKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQog
ewogICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUod2ViRnJhbWUpOwogCi0g
ICAgUVdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgpOwotICAgIGVtaXQgcGFnZS0+ZmVh
dHVyZVBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQod2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2Nh
dGlvbik7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlID0gUVdlYlBhZ2VBZGFwdGVyOjpraXQo
d2ViRnJhbWUtPmZyYW1lLT5wYWdlKCkpOworICAgIHBhZ2UtPmdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RDYW5jZWxsZWQod2ViRnJhbWUpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSogd2ViRnJhbWUsIFFXZWJQYWdl
OjpQZXJtaXNzaW9uUG9saWN5IHBlcm1pc3Npb24pCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBib29s
IGdyYW50ZWQpCiB7ICAKICAgICBpZiAoIW1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5jb250
YWlucyh3ZWJGcmFtZSkpIAogICAgICAgICByZXR1cm47CiAKICAgICBHZW9sb2NhdGlvbiogbGlz
dGVuZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMudmFsdWUod2ViRnJhbWUpOwotCi0g
ICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1pc3Npb25HcmFudGVkQnlVc2VyKQot
ICAgICAgICBsaXN0ZW5lci0+c2V0SXNBbGxvd2VkKHRydWUpOwotICAgIGVsc2UgaWYgKHBlcm1p
c3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWRCeVVzZXIpCi0gICAgICAgIGxpc3Rl
bmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOworICAg
IGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZ3JhbnRlZCk7CiAKICAgICBtX3BlbmRpbmdQZXJtaXNz
aW9uUmVxdWVzdHMucmVtb3ZlKHdlYkZyYW1lKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQuaAppbmRleCAxYjQ1NDBkODdiNjQ0Yjc2YmFjNTBjYmRjMDkwMmYxMDdkZGNjNTdhLi43MTE4
M2I0OTdmYTk3OGNjNTAwY2M1NTg3NjYxZTk3N2EwNDA5NTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdC5oCkBAIC0zNCwxMiArMzQsMTEgQEAKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04p
CiAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAKICNp
bmNsdWRlIDxRSGFzaD4KIAotY2xhc3MgUVdlYkZyYW1lOwotY2xhc3MgUVdlYlBhZ2U7CitjbGFz
cyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQ4LDEzICs0NywxMyBAQCBwdWJsaWM6CiAgICAgR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQoKTsKICAgICB+R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQo
KTsKIAotICAgIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJG
cmFtZSosIEdlb2xvY2F0aW9uKik7Ci0gICAgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0Rm9yRnJhbWUoUVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKLSAgICB2b2lkIHNl
dFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kpOworICAg
IHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZUFkYXB0
ZXIqLCBHZW9sb2NhdGlvbiopOworICAgIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqLCBHZW9sb2NhdGlvbiopOworICAgIHZv
aWQgc2V0UGVybWlzc2lvbihRV2ViRnJhbWVBZGFwdGVyKiwgYm9vbCAvKmdyYW50ZWQqLyk7CiAK
ICAgICBzdGF0aWMgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIGdlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudCgpOwogcHJpdmF0ZToKLSAgICBRSGFzaDxRV2ViRnJhbWUqLCBHZW9sb2Nh
dGlvbio+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBRSGFzaDxRV2ViRnJhbWVB
ZGFwdGVyKiwgR2VvbG9jYXRpb24qPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHM7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJD
b3JlUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0
LmNwcAppbmRleCBkNjA2NWMxNGU1YTY0MjE5Y2MxMTQ5NTBhYzljNzZjNzJkOTU0YTE1Li45MDkz
OWQ2YTI5N2ExM2NiMDk5YWNiNjg0NWZmZjFhYWY3ZGNkMjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKQEAgLTQyLDIxICs0Miwz
MyBAQAogI2luY2x1ZGUgIldlYlN5c3RlbUludGVyZmFjZS5oIgogI2VuZGlmCiAKLSNpbmNsdWRl
ICJxd2ViZWxlbWVudF9wLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJlbGVtZW50X3AuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KLSNp
bmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi0vLyBDYWxsZWQgYWxzbyBmcm9t
IFdlYktpdDIncyBXZWJQcm9jZXNzLgotUV9ERUNMX0VYUE9SVCB2b2lkIGluaXRpYWxpemVXZWJL
aXQyVGhlbWUoKQorc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gaW5pdENhbGxiYWNrID0g
MDsKKwordm9pZCBzZXRXZWJLaXRXaWRnZXRzSW5pdENhbGxiYWNrKFF0U3R5bGVGYWN0b3J5RnVu
Y3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgaWYgKHFnZXRlbnYoIlFUX1dFQktJVF9USEVNRV9OQU1F
IikgPT0gInFzdHlsZSIpIHsKLSAgICAgICAgV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnNl
dFN0eWxlRmFjdG9yeUZ1bmN0aW9uKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpjcmVhdGUpOwor
ICAgIGluaXRDYWxsYmFjayA9IGNhbGxiYWNrOworfQorCisvLyBDYWxsZWQgYWxzbyBmcm9tIFdl
YktpdDIncyBXZWJQcm9jZXNzCitRX0RFQ0xfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZVdlYktpdFF0
KCkKK3sKKyAgICBpZiAoaW5pdENhbGxiYWNrKSB7CisgICAgICAgIFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpzZXRTdHlsZUZhY3RvcnlGdW5jdGlvbihpbml0Q2FsbGJhY2spOwogICAgICAg
ICBXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRDdXN0b21UaGVtZShXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6Y3JlYXRlLCBuZXcgV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOwog
ICAgIH0KKworICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsKK30KKworUV9ERUNM
X0VYUE9SVCB2b2lkIHNldEltYWdlUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBRUGl4bWFwJiBwaXhtYXApCit7CisgICAgV2ViQ29yZTo6SW1hZ2U6OnNldFBsYXRmb3Jt
UmVzb3VyY2UobmFtZSwgcGl4bWFwKTsKIH0KIAogfQpAQCAtNzksMTggKzkxLDEwIEBAIHZvaWQg
aW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAgICAgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmluaXRpYWxp
emUoKTsKICAgICBRdFdlYkVsZW1lbnRSdW50aW1lOjppbml0aWFsaXplKCk7CiAKLSAgICBSZW5k
ZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rpb24oV2ViS2l0OjpRU3R5bGVGYWNh
ZGVJbXA6OmNyZWF0ZSk7Ci0gICAgUmVuZGVyVGhlbWVRdDo6c2V0Q3VzdG9tVGhlbWUoUmVuZGVy
VGhlbWVRU3R5bGU6OmNyZWF0ZSwgbmV3IFNjcm9sbGJhclRoZW1lUVN0eWxlKTsKLQogI2lmIFVT
RShRVEtJVCkKICAgICBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSgpOwogI2VuZGlmCiAKLSAg
ICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRvbkdyYXBoaWMKLSAgICBJbWFnZTo6
c2V0UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uIiwgUUFwcGxpY2F0aW9uOjpz
dHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKSk7Ci0g
ICAgLy8gUVdlYlNldHRpbmdzOjpTZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkR3JhcGhpYwotICAg
IEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIiwg
UUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Ns
b3NlQnV0dG9uKSk7Ci0KICAgICBpbml0aWFsaXplZCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmgKaW5kZXggZGYxYWFmNzc2
MjcxZmZiNzhhZjAyMDc0MzNkY2JiYTVmNzRkOGJkYy4uZTg0ZTBkYWQyZWQ1NTFiOWVjYzgyNjll
ZDg4YTU5OWRlMWJmNzhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9Jbml0V2ViQ29yZVF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9Jbml0V2ViQ29yZVF0LmgKQEAgLTMwLDYgKzMwLDIyIEBACiAjaWZuZGVmIEluaXRXZWJDb3Jl
UXRfaAogI2RlZmluZSBJbml0V2ViQ29yZVF0X2gKIAorI2luY2x1ZGUgInFpbWFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOworY2xhc3MgUVN0eWxlRmFjYWRlOworfQor
dHlwZWRlZiBXZWJDb3JlOjpRU3R5bGVGYWNhZGUqICgqUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiko
V2ViQ29yZTo6UGFnZSopOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBzZXRXZWJLaXRX
aWRnZXRzSW5pdENhbGxiYWNrKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24pOwordm9pZCBpbml0aWFs
aXplV2ViS2l0UXQoKTsKK3ZvaWQgc2V0SW1hZ2VQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IC8qIG5hbWUgKi8sIGNvbnN0IFFQaXhtYXAmKTsKKworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxMTZjNjcwZTdjZjA4
ZDljZjIwNjg2NGQxYjEzYjA5NjIxYTA4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJLaXRRdC5jcHAKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworCisjaW5jbHVkZSAiSW5pdFdlYktpdFF0LmgiCisjaW5jbHVkZSAiSW5pdFdl
YkNvcmVRdC5oIgorCisjaW5jbHVkZSAiUVN0eWxlRmFjYWRlSW1wLmgiCisKKyNpbmNsdWRlIDxR
QXBwbGljYXRpb24+CisjaW5jbHVkZSA8UVN0eWxlPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
UV9ERUNMX0VYUE9SVCB2b2lkIGluaXRpYWxpemVXZWJLaXRXaWRnZXRzKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0V2ViS2l0V2lkZ2V0c0luaXRDYWxsYmFjayhRU3R5bGVGYWNh
ZGVJbXA6OmNyZWF0ZSk7CisgICAgaW5pdGlhbGl6ZVdlYktpdFF0KCk7CisKKyAgICAvLyBRV2Vi
U2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRvbkdyYXBoaWMKKyAgICBzZXRJbWFnZVBsYXRmb3Jt
UmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvbiIsIFFBcHBsaWNhdGlvbjo6c3R5bGUoKS0+c3Rh
bmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1dHRvbikpOworICAgIC8vIFFXZWJT
ZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZEdyYXBoaWMKKyAgICBzZXRJbWFnZVBs
YXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvblByZXNzZWQiLCBRQXBwbGljYXRpb246
OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFwKFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24pKTsK
KworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjJmNTcxMWE4MTM4MTFm
MjcxYTY4NzdlNmI1MWRiZGQwYTE4NTE5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmgKQEAgLTAsMCArMSwyOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBJbml0V2ViS2l0UXRfaAorI2RlZmluZSBJbml0V2ViS2l0UXRfaAor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBpbml0aWFsaXplV2ViS2l0V2lkZ2V0cygpOwor
Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRRdC5jcHAKaW5kZXggMDI1YWQ2NTlkYTAzMmEzMjhjNjFhYzZlZjQ5MTQ4
MDQwMDM4OThmYy4uYTgwOWIyZjY1M2QxZGE3NjRiMzBjYjU3MDJlZTRiNWJlYWI5YzNmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRRdC5jcHAKQEAgLTM4LDYyICszOCwyMiBAQAogI2luY2x1ZGUgIkluc3BlY3RvclNlcnZlclF0
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgog
I2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCi0jaW5jbHVkZSAicXdlYmluc3BlY3Rvci5o
IgotI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3JfcC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0j
aW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInF3ZWJ2aWV3LmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPFF0Q29yZS9RQ29yZUFwcGxpY2F0aW9uPgot
I2luY2x1ZGUgPFF0Q29yZS9RRmlsZT4KLSNpbmNsdWRlIDxRdENvcmUvUVNldHRpbmdzPgotI2lu
Y2x1ZGUgPFF0Q29yZS9RVmFyaWFudD4KKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2lu
Y2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRU2V0
dGluZ3M+CisjaW5jbHVkZSA8UVVybD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgUUxhdGluMVN0cmluZyBzZXR0aW5nU3RvcmFnZVBy
ZWZpeCgiUXQvUXRXZWJLaXQvUVdlYkluc3BlY3Rvci8iKTsKIHN0YXRpYyBjb25zdCBRTGF0aW4x
U3RyaW5nIHNldHRpbmdTdG9yYWdlVHlwZVN1ZmZpeCgiLnR5cGUiKTsKIAotY2xhc3MgSW5zcGVj
dG9yQ2xpZW50V2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZSB7Ci0gICAgUV9PQkpFQ1QKLSAgICBm
cmllbmQgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7Ci1wdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ2xp
ZW50V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQgPSAwKQotICAgICAgICA6IFFXZWJQYWdlKHBhcmVu
dCkKLSAgICB7Ci0gICAgICAgIGNvbm5lY3QobWFpbkZyYW1lKCksIFNJR05BTChqYXZhU2NyaXB0
V2luZG93T2JqZWN0Q2xlYXJlZCgpKSwgU0xPVChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJl
ZCgpKSk7Ci0gICAgfQotCi0gICAgUVdlYlBhZ2UqIGNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2Vi
V2luZG93VHlwZSkKLSAgICB7Ci0gICAgICAgIFFXZWJWaWV3KiB2aWV3ID0gbmV3IFFXZWJWaWV3
OwotICAgICAgICBRV2ViUGFnZSogcGFnZSA9IG5ldyBRV2ViUGFnZTsKLSAgICAgICAgdmlldy0+
c2V0UGFnZShwYWdlKTsKLSAgICAgICAgdmlldy0+c2V0QXR0cmlidXRlKFF0OjpXQV9EZWxldGVP
bkNsb3NlKTsKLSAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgfQotCi1wdWJsaWMgUV9TTE9UUzoK
LSAgICB2b2lkIGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkgCi0gICAgewotI2lmbmRl
ZiBRVF9OT19QUk9QRVJUSUVTCi0gICAgICAgIFFWYXJpYW50IGluc3BlY3RvckphdmFTY3JpcHRX
aW5kb3dPYmplY3RzID0gcHJvcGVydHkoIl9xX2luc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmpl
Y3RzIik7Ci0gICAgICAgIGlmICghaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMuaXNW
YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBRTWFwPFFTdHJpbmcsIFFWYXJp
YW50PiBqYXZhU2NyaXB0TmFtZU9iamVjdE1hcCA9IGluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dP
YmplY3RzLnRvTWFwKCk7Ci0gICAgICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsK
LSAgICAgICAgUU1hcDxRU3RyaW5nLCBRVmFyaWFudD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gamF2
YVNjcmlwdE5hbWVPYmplY3RNYXAuY29uc3RCZWdpbigpOwotICAgICAgICBmb3IgKCA7IGl0ICE9
IGphdmFTY3JpcHROYW1lT2JqZWN0TWFwLmNvbnN0RW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAg
IFFTdHJpbmcgbmFtZSA9IGl0LmtleSgpOwotICAgICAgICAgICAgUVZhcmlhbnQgdmFsdWUgPSBp
dC52YWx1ZSgpOwotICAgICAgICAgICAgUU9iamVjdCogb2JqID0gdmFsdWUudmFsdWU8UU9iamVj
dCo+KCk7Ci0gICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KG5h
bWUsIG9iaik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLX07Ci0KIG5hbWVzcGFjZSB7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTc1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAKIH0K
IAotSW5zcGVjdG9yQ2xpZW50UXQ6Okluc3BlY3RvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKQor
SW5zcGVjdG9yQ2xpZW50UXQ6Okluc3BlY3RvckNsaWVudFF0KFFXZWJQYWdlQWRhcHRlciogcGFn
ZSkKICAgICA6IG1faW5zcGVjdGVkV2ViUGFnZShwYWdlKQogICAgICwgbV9mcm9udGVuZFdlYlBh
Z2UoMCkKICAgICAsIG1fZnJvbnRlbmRDbGllbnQoMCkKQEAgLTIwNCwxMiArMTY0LDEyIEBAIFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogSW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZChXZWJDCiB7CiAgICAgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSAwOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
T3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3ID0gYWRvcHRQdHIobmV3IFFXZWJWaWV3KTsK
LSAgICAvLyBGSVhNRTogV2hlcmUgZG9lcyBpbnNwZWN0b3JQYWdlIGdldCBkZWxldGVkPwotICAg
IEluc3BlY3RvckNsaWVudFdlYlBhZ2UqIGluc3BlY3RvclBhZ2UgPSBuZXcgSW5zcGVjdG9yQ2xp
ZW50V2ViUGFnZShpbnNwZWN0b3JWaWV3LmdldCgpKTsKLSAgICBpbnNwZWN0b3JWaWV3LT5zZXRQ
YWdlKGluc3BlY3RvclBhZ2UpOworICAgIFFPYmplY3QqIHZpZXcgPSAwOworICAgIFFXZWJQYWdl
QWRhcHRlciogaW5zcGVjdG9yUGFnZSA9IDA7CisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5jcmVh
dGVXZWJJbnNwZWN0b3IoJnZpZXcsICZpbnNwZWN0b3JQYWdlKTsKKyAgICBPd25QdHI8UU9iamVj
dD4gaW5zcGVjdG9yVmlldyA9IGFkb3B0UHRyKHZpZXcpOwogCi0gICAgUVdlYkluc3BlY3Rvciog
aW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5nZXRPckNyZWF0ZUluc3BlY3Rvcigp
OworICAgIFFPYmplY3QqIGluc3BlY3RvciA9IG1faW5zcGVjdGVkV2ViUGFnZS0+aW5zcGVjdG9y
SGFuZGxlKCk7CiAgICAgLy8gUmVtb3RlIGZyb250ZW5kIHdhcyBhdHRhY2hlZC4KICAgICBpZiAo
bV9yZW1vdGVGcm9udEVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjI4LDIxICsx
ODgsMjAgQEAgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBJbnNwZWN0b3JDbGll
bnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkMKICNpZm5kZWYgUVRfTk9fUFJPUEVSVElF
UwogICAgIFFWYXJpYW50IGluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzID0gaW5zcGVj
dG9yLT5wcm9wZXJ0eSgiX3FfaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiKTsKICAg
ICBpZiAoaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMuaXNWYWxpZCgpKQotICAgICAg
ICBpbnNwZWN0b3JQYWdlLT5zZXRQcm9wZXJ0eSgiX3FfaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRv
d09iamVjdHMiLCBpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93T2JqZWN0cyk7CisgICAgICAgIGlu
c3BlY3RvclBhZ2UtPmhhbmRsZSgpLT5zZXRQcm9wZXJ0eSgiX3FfaW5zcGVjdG9ySmF2YVNjcmlw
dFdpbmRvd09iamVjdHMiLCBpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93T2JqZWN0cyk7CiAjZW5k
aWYKLSAgICBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkKGluc3BlY3Rv
clVybCk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JGcm9udGVuZCA9IGlu
c3BlY3RvclZpZXcuZ2V0KCk7Ci0gICAgaW5zcGVjdG9yLT5kLT5zZXRGcm9udGVuZChpbnNwZWN0
b3JWaWV3LmdldCgpKTsKKyAgICBpbnNwZWN0b3JQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmxv
YWQoUU5ldHdvcmtSZXF1ZXN0KGluc3BlY3RvclVybCkpOworICAgIG1faW5zcGVjdGVkV2ViUGFn
ZS0+c2V0SW5zcGVjdG9yRnJvbnRlbmQoaW5zcGVjdG9yVmlldy5nZXQoKSk7CiAKICAgICAvLyBJ
cyAnY29udHJvbGxlcicgdGhlIHNhbWUgb2JqZWN0IGFzICdpbnNwZWN0b3JDb250cm9sbGVyJyAo
d2hpY2ggYXBwZWFycyB0byBiZSB1bnVzZWQpPwotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKTsKLSAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdD4gZnJvbnRlbmRD
bGllbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3BlY3Rl
ZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcucmVsZWFzZSgpLCB0aGlzKSk7CisgICAgSW5zcGVjdG9y
Q29udHJvbGxlciogY29udHJvbGxlciA9IGluc3BlY3RvclBhZ2UtPnBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdD4gZnJvbnRl
bmRDbGllbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3Bl
Y3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcucmVsZWFzZSgpLCBpbnNwZWN0b3JQYWdlLT5wYWdl
LCB0aGlzKSk7CiAgICAgbV9mcm9udGVuZENsaWVudCA9IGZyb250ZW5kQ2xpZW50LmdldCgpOwog
ICAgIGNvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KGZyb250ZW5kQ2xpZW50
LnJlbGVhc2UoKSk7CiAgICAgbV9mcm9udGVuZFdlYlBhZ2UgPSBpbnNwZWN0b3JQYWdlOwogCiAg
ICAgLy8gV2ViIEluc3BlY3RvciBzaG91bGQgbm90IGJlbG9uZyB0byBhbnkgb3RoZXIgcGFnZSBn
cm91cHMgc2luY2UgaXQgaXMgYSBzcGVjaWFsaXplZCBkZWJ1Z2dlciB3aW5kb3cuCi0gICAgbV9m
cm9udGVuZFdlYlBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5zZXRHcm91cE5hbWUoIl9fV2ViSW5zcGVj
dG9yUGFnZUdyb3VwX18iKTsKKyAgICBtX2Zyb250ZW5kV2ViUGFnZS0+cGFnZS0+c2V0R3JvdXBO
YW1lKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91cF9fIik7CiAgICAgZnJvbnRlbmRDaGFubmVsID0g
dGhpczsKICNlbmRpZgogICAgIHJldHVybiBmcm9udGVuZENoYW5uZWw7CkBAIC0yNzMsNyArMjMy
LDcgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6YXR0YWNoQW5kUmVwbGFjZVJlbW90ZUZyb250
ZW5kKEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW4KIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIG1fcmVtb3RlRnJvbnRFbmRDaGFubmVsID0gY2hhbm5lbDsKLSAgICBtX2luc3BlY3RlZFdl
YlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y29ubmVjdEZyb250ZW5kKHRoaXMpOwor
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jb25u
ZWN0RnJvbnRlbmQodGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtMjgxLDcgKzI0MCw3IEBAIHZvaWQg
SW5zcGVjdG9yQ2xpZW50UXQ6OmRldGFjaFJlbW90ZUZyb250ZW5kKCkKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIG1fcmVtb3RlRnJvbnRFbmRDaGFubmVsID0gMDsKLSAgICBtX2luc3Bl
Y3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5k
KCk7CisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmRpc2Nvbm5lY3RGcm9udGVuZCgpOwogI2VuZGlmCiB9CiAKQEAgLTI5Miw5ICsyNTEsOSBAQCB2
b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdobGlnaHQoKQogCiB2b2lkIEluc3BlY3RvckNsaWVu
dFF0OjpoaWRlSGlnaGxpZ2h0KCkKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX2lu
c3BlY3RlZFdlYlBhZ2UtPmQtPnBhZ2UtPm1haW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1l
KiBmcmFtZSA9IG1faW5zcGVjdGVkV2ViUGFnZS0+cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPm1haW5G
cmFtZSgpLT5nZW9tZXRyeSgpOworICAgICAgICBRUmVjdCByZWN0ID0gbV9pbnNwZWN0ZWRXZWJQ
YWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmZyYW1lUmVjdCgpOwogICAgICAgICBpZiAoIXJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+aW52YWxpZGF0ZVJlY3QocmVj
dCk7CiAgICAgfQpAQCAtMzExLDcgKzI3MCw3IEBAIGJvb2wgSW5zcGVjdG9yQ2xpZW50UXQ6OnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgaWYgKCFtX2Zy
b250ZW5kV2ViUGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGFnZSogZnJvbnRl
bmRQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKG1fZnJvbnRlbmRXZWJQYWdlKTsKKyAgICBQ
YWdlKiBmcm9udGVuZFBhZ2UgPSBtX2Zyb250ZW5kV2ViUGFnZS0+cGFnZTsKICAgICByZXR1cm4g
ZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZShmcm9udGVuZFBhZ2UsIG1lc3NhZ2UpOwog
I2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTksOCArMjc4LDggQEAgYm9vbCBJbnNwZWN0
b3JDbGllbnRRdDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1JbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFXZWJQYWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNz
T3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3LCBJbnNwZWN0b3JDbGllbnRRdCogaW5zcGVj
dG9yQ2xpZW50KQotICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRX
ZWJQYWdlLT5kLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclZpZXctPnBh
Z2UoKS0+ZC0+cGFnZSwgYWRvcHRQdHIobmV3IEluc3BlY3RvckZyb250ZW5kU2V0dGluZ3NRdCgp
KSkKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQo
UVdlYlBhZ2VBZGFwdGVyKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFPYmplY3Q+IGlu
c3BlY3RvclZpZXcsIFdlYkNvcmU6OlBhZ2UqIGluc3BlY3RvclBhZ2UsIEluc3BlY3RvckNsaWVu
dFF0KiBpbnNwZWN0b3JDbGllbnQpCisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
KGluc3BlY3RlZFdlYlBhZ2UtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSwgaW5zcGVjdG9y
UGFnZSwgYWRvcHRQdHIobmV3IEluc3BlY3RvckZyb250ZW5kU2V0dGluZ3NRdCgpKSkKICAgICAs
IG1faW5zcGVjdGVkV2ViUGFnZShpbnNwZWN0ZWRXZWJQYWdlKQogICAgICwgbV9pbnNwZWN0b3JW
aWV3KGluc3BlY3RvclZpZXcpCiAgICAgLCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KGZhbHNl
KQpAQCAtMzg2LDEwICszNDUsOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUoKQogewotICAgIGlmIChtX2luc3Bl
Y3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgewotICAgICAgICBRU3RyaW5nIGNhcHRpb24gPSBR
Q29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIldlYiBJbnNwZWN0b3IgLSAl
MiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7Ci0gICAgICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+
aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0aW9uKTsKLSAgICB9CisgICAgUVN0cmluZyBj
YXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5z
cGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOworICAgIG1faW5zcGVjdGVkV2ViUGFn
ZS0+c2V0SW5zcGVjdG9yV2luZG93VGl0bGUoY2FwdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRRdDo6ZGVzdHJveUluc3BlY3RvclZpZXcoYm9vbCBub3RpZnlJbnNwZWN0
b3JDb250cm9sbGVyKQpAQCAtMzk5LDIwICszNTYsMjAgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0OjpkZXN0cm95SW5zcGVjdG9yVmlldyhib29sIG5vdGlmeUluc3BlY3RvckNvbnRy
b2wKICAgICBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3ID0gdHJ1ZTsKIAogICAgIC8vIEluc3Bl
Y3RlZCBwYWdlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuCi0gICAgaWYgKG1faW5z
cGVjdGVkV2ViUGFnZSAmJiBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgeworICAg
IGlmIChtX2luc3BlY3RlZFdlYlBhZ2UpIHsKICAgICAgICAgLy8gQ2xlYXIgcmVmZXJlbmNlIGZy
b20gUVdlYkluc3BlY3RvciB0byB0aGUgZnJvbnRlbmQgdmlldy4KLSAgICAgICAgbV9pbnNwZWN0
ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3ItPmQtPnNldEZyb250ZW5kKDApOworICAgICAgICBtX2lu
c3BlY3RlZFdlYlBhZ2UtPnNldEluc3BlY3RvckZyb250ZW5kKDApOwogICAgIH0KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG5vdGlmeUluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAg
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaXNjb25u
ZWN0RnJvbnRlbmQoKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9udGVuZCgpOwogI2VuZGlmCiAgICAgaWYgKG1f
aW5zcGVjdG9yQ2xpZW50KQogICAgICAgICBtX2luc3BlY3RvckNsaWVudC0+cmVsZWFzZUZyb250
ZW5kUGFnZSgpOwogCiAgICAgLy8gQ2xlYXIgcG9pbnRlciBiZWZvcmUgZGVsZXRpbmcgV2ViVmll
dyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgdG8gaXRzIGRlc3RydWN0b3IuCi0gICAgT3duUHRy
PFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3LnJlbGVhc2UoKTsKKyAg
ICBPd25QdHI8UU9iamVjdD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldy5yZWxlYXNl
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aW5zcGVjdG9yQ2xpZW50
RGVzdHJveWVkKCkKQEAgLTQyNCw0ICszODEsMyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ6Omluc3BlY3RvckNsaWVudERlc3Ryb3llZCgpCiAjZW5kaWYKIH0KIAotI2luY2x1ZGUg
Ikluc3BlY3RvckNsaWVudFF0Lm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaAppbmRleCA0OWJhMDAwYWQxYTBkZWRmYzQ1ZmE0
ZThlZTMyOGVmYWJlODdhNzM2Li5hYjJlZGI2NTFjMjEyNmMwNmJmMDJhNGVmYzFkNTEwNDAwYjNi
Yzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRRdC5oCkBAIC0zMywxMSArMzMsMTQgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+
CiAjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CisjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiBjbGFzcyBRV2ViUGFnZTsK
IGNsYXNzIFFXZWJWaWV3OwogCkBAIC00OCw3ICs1MSw3IEBAIGNsYXNzIFBhZ2U7CiAKIGNsYXNz
IEluc3BlY3RvckNsaWVudFF0IDogcHVibGljIEluc3BlY3RvckNsaWVudCwgcHVibGljIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCB7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ2xpZW50UXQoUVdl
YlBhZ2UqKTsKKyAgICBJbnNwZWN0b3JDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIqKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIApAQCAtNjcsOCArNzAsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkZXRhY2hSZW1vdGVGcm9udGVuZCgpOwogCiBwcml2YXRlOgotICAg
IFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7Ci0gICAgUVdlYlBhZ2UqIG1fZnJvbnRlbmRX
ZWJQYWdlOworICAgIFFXZWJQYWdlQWRhcHRlciogbV9pbnNwZWN0ZWRXZWJQYWdlOworICAgIFFX
ZWJQYWdlQWRhcHRlciogbV9mcm9udGVuZFdlYlBhZ2U7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdCogbV9mcm9udGVuZENsaWVudDsKICAgICBib29sIG1fcmVtb3RlSW5zcGVjdG9yOwog
ICAgIEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQqIG1fcmVtb3RlRnJvbnRFbmRDaGFu
bmVsOwpAQCAtNzgsNyArODEsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0IDogcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgewogcHVibGlj
OgotICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2UqIGluc3BlY3RlZFdlYlBh
Z2UsIFBhc3NPd25QdHI8UVdlYlZpZXc+IGluc3BlY3RvclZpZXcsIEluc3BlY3RvckNsaWVudFF0
KiBpbnNwZWN0b3JDbGllbnQpOworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBh
Z2VBZGFwdGVyKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFPYmplY3Q+IGluc3BlY3Rv
clZpZXcsIFdlYkNvcmU6OlBhZ2UqIGluc3BlY3RvclBhZ2UsIEluc3BlY3RvckNsaWVudFF0KiBp
bnNwZWN0b3JDbGllbnQpOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOwpAQCAtMTAyLDggKzEwNSw4
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAg
IHZvaWQgZGVzdHJveUluc3BlY3RvclZpZXcoYm9vbCBub3RpZnlJbnNwZWN0b3JDb250cm9sbGVy
KTsKLSAgICBRV2ViUGFnZSogbV9pbnNwZWN0ZWRXZWJQYWdlOwotICAgIE93blB0cjxRV2ViVmll
dz4gbV9pbnNwZWN0b3JWaWV3OworICAgIFFXZWJQYWdlQWRhcHRlciogbV9pbnNwZWN0ZWRXZWJQ
YWdlOworICAgIE93blB0cjxRT2JqZWN0PiBtX2luc3BlY3RvclZpZXc7CiAgICAgUVN0cmluZyBt
X2luc3BlY3RlZFVSTDsKICAgICBib29sIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiAgICAg
SW5zcGVjdG9yQ2xpZW50UXQqIG1faW5zcGVjdG9yQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGM0NzMwYjMyOTU4NTg3OGMwNTJlNGFmYjE5ODViYTA0YmUzNzQzZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50V2ViUGFnZS5jcHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRXZWJQYWdlLmgiCisKKyNpbmNsdWRl
IDxxd2ViZnJhbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworSW5zcGVjdG9yQ2xp
ZW50V2ViUGFnZTo6SW5zcGVjdG9yQ2xpZW50V2ViUGFnZSgpCit7CisgICAgUVdlYlZpZXcqIHZp
ZXcgPSBuZXcgUVdlYlZpZXc7CisgICAgdmlldy0+c2V0UGFnZSh0aGlzKTsKKyAgICBzZXRQYXJl
bnQodmlldyk7CisgICAgY29ubmVjdChtYWluRnJhbWUoKSwgU0lHTkFMKGphdmFTY3JpcHRXaW5k
b3dPYmplY3RDbGVhcmVkKCkpLCBTTE9UKGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkp
KTsKK30KKworUVdlYlBhZ2UqIEluc3BlY3RvckNsaWVudFdlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhR
V2ViUGFnZTo6V2ViV2luZG93VHlwZSkKK3sKKyAgICBRV2ViVmlldyogdmlldyA9IG5ldyBRV2Vi
VmlldzsKKyAgICBRV2ViUGFnZSogcGFnZSA9IG5ldyBRV2ViUGFnZTsKKyAgICB2aWV3LT5zZXRQ
YWdlKHBhZ2UpOworICAgIHZpZXctPnNldEF0dHJpYnV0ZShRdDo6V0FfRGVsZXRlT25DbG9zZSk7
CisgICAgcmV0dXJuIHBhZ2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZTo6amF2
YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIFFWYXJpYW50IGluc3BlY3Rvckph
dmFTY3JpcHRXaW5kb3dPYmplY3RzID0gcHJvcGVydHkoIl9xX2luc3BlY3RvckphdmFTY3JpcHRX
aW5kb3dPYmplY3RzIik7CisgICAgaWYgKCFpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93T2JqZWN0
cy5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBRTWFwPFFTdHJpbmcsIFFWYXJpYW50
PiBqYXZhU2NyaXB0TmFtZU9iamVjdE1hcCA9IGluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmpl
Y3RzLnRvTWFwKCk7CisgICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOworICAgIFFN
YXA8UVN0cmluZywgUVZhcmlhbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGphdmFTY3JpcHROYW1l
T2JqZWN0TWFwLmNvbnN0QmVnaW4oKTsKKyAgICBmb3IgKCA7IGl0ICE9IGphdmFTY3JpcHROYW1l
T2JqZWN0TWFwLmNvbnN0RW5kKCk7ICsraXQpIHsKKyAgICAgICAgUVN0cmluZyBuYW1lID0gaXQu
a2V5KCk7CisgICAgICAgIFFWYXJpYW50IHZhbHVlID0gaXQudmFsdWUoKTsKKyAgICAgICAgUU9i
amVjdCogb2JqID0gdmFsdWUudmFsdWU8UU9iamVjdCo+KCk7CisgICAgICAgIGZyYW1lLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QobmFtZSwgb2JqKTsKKyAgICB9Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFn
ZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXZWJQ
YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODg3ZjI5YjBjZjUyMTlkZmFhMDRmYjNlOGZjNTc4ZmRkYWVhMDhh
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V2ViUGFnZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJp
Z2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJ
bnNwZWN0b3JDbGllbnRXZWJQYWdlX2gKKyNkZWZpbmUgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZV9o
CisKKyNpbmNsdWRlIDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJ2aWV3Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBJbnNwZWN0b3JDbGllbnRXZWJQYWdlIDogcHVibGljIFFX
ZWJQYWdlIHsKKyAgICBRX09CSkVDVAorICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JDbGllbnRR
dDsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKCk7CisKKyAgICBRV2ViUGFn
ZSogY3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlKTsKKworcHVibGljIFFfU0xP
VFM6CisgICAgdm9pZCBqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBJbnNwZWN0b3JDbGllbnRXZWJQYWdlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2Vy
dmVyUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2
ZXJRdC5jcHAKaW5kZXggNjViYmFkMGYwOTQwZDdkZGZkYjU2NWQ3Njg3MTlmNGIwNDUwYjkwYy4u
NDY1MWY3NTVjYTdiNGJhMjM2NGFiYzM5NDRjN2VhMzA0ZWUzNjhjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKQEAg
LTIyLDE3ICsyMiwxNiBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5o
IgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJxaHR0cGhlYWRlcl9wLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJx
d2VicGFnZV9wLmgiCisjaW5jbHVkZSAiLi4vQXBpL3FodHRwaGVhZGVyX3AuaCIKICNpbmNsdWRl
IDxRRmlsZT4KICNpbmNsdWRlIDxRU3RyaW5nPgogI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogI2lu
Y2x1ZGUgPFFUY3BTZXJ2ZXI+CiAjaW5jbHVkZSA8UVRjcFNvY2tldD4KICNpbmNsdWRlIDxRVXJs
PgotI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8cWVuZGlhbi5oPgogI2luY2x1ZGUgPHd0
Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CkBAIC0yMjksNyArMjI4LDcg
QEAgdm9pZCBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxlclF0Ojp0Y3BSZWFkeVJlYWQoKQog
ICAgICAgICAgICAgICAgICArK2l0KSB7CiAgICAgICAgICAgICAgICAgaW5kZXhIdG1sLmFwcGVu
ZChRU3RyaW5nOjpmcm9tTGF0aW4xKCI8bGk+PGEgaHJlZj1cIi93ZWJraXQvaW5zcGVjdG9yL2lu
c3BlY3Rvci5odG1sP3BhZ2U9JTFcIj4lMjwvbGk+XG4iKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmFyZyhpdC5rZXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5hcmcoaXQudmFsdWUoKS0+bV9pbnNwZWN0ZWRXZWJQYWdlLT5tYWluRnJhbWUoKS0+dXJs
KCkudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhR
VXJsKGl0LnZhbHVlKCktPm1faW5zcGVjdGVkV2ViUGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT51
cmwpLnRvU3RyaW5nKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluZGV4SHRtbC5h
cHBlbmQoUUxhdGluMVN0cmluZygiPC91bD48L2JvZHk+PC9odG1sPiIpKTsKICAgICAgICAgICAg
IHJlc3BvbnNlID0gaW5kZXhIdG1sLnRvTGF0aW4xKCk7CkBAIC0zNTYsNyArMzU1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxlclF0Ojp3ZWJTb2NrZXRSZWFkeVJlYWQoKQog
ICAgICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAobV9pbnNwZWN0b3JD
bGllbnQpIHsKLSAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyID0gbV9pbnNwZWN0b3JDbGllbnQtPm1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+cGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpOworICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBtX2luc3BlY3RvckNsaWVudC0+bV9pbnNwZWN0ZWRXZWJQYWdlLT5w
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxl
ci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKFFTdHJpbmc6OmZyb21VdGY4KHBheWxvYWQp
KTsKICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCmlu
ZGV4IDU2ZWQwYjRjYjdjZTI2NWI2YmJjY2FhMzM4ZjZjZDdkM2Y0NDVjYTAuLjg0MWMyNjk2Zjc1
MmMzMjU4NWUzNDNiMTQwN2Q3YTkzNmE1YTRiMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQuY3BwCkBAIC0zMywxOCArMzMsMTcgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4u
aCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFw
dGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKIAotI2lu
Y2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1
ZGUgInF3ZWJwYWdlLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRnbG9iYWwuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MiwxMCArNzEsNiBAQCBOb3RpZmljYXRpb25XcmFwcGVy
OjpOb3RpZmljYXRpb25XcmFwcGVyKCkKICAgICAsIG1fZGlzcGxheUV2ZW50VGltZXIodGhpcywg
Jk5vdGlmaWNhdGlvbldyYXBwZXI6OnNlbmREaXNwbGF5RXZlbnQpCiB7CiAjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLQotI2lmbmRlZiBR
VF9OT19TWVNURU1UUkFZSUNPTgotICAgIG1fbm90aWZpY2F0aW9uSWNvbiA9IG51bGxwdHI7Ci0j
ZW5kaWYKICAgICBtX3ByZXNlbnRlciA9IG51bGxwdHI7CiAjZW5kaWYKIH0KQEAgLTIwOSw3ICsy
MDQsNiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90aWZp
Y2F0aW9uKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aQogI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZ
SUNPTgogICAgICAgICBpZiAoIWR1bXBOb3RpZmljYXRpb24pCiAgICAgICAgICAgICB3cmFwcGVy
LT5tX2Nsb3NlVGltZXIuc3RhcnRPbmVTaG90KG5vdGlmaWNhdGlvblRpbWVvdXQpOwotICAgICAg
ICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29uID0gYWRvcHRQdHIobmV3IFFTeXN0ZW1U
cmF5SWNvbigpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjI3LDkgKzIyMSw5IEBAIHZvaWQgTm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmRpc3BsYXlOb3RpZmljYXRpb24oTm90aWZpY2F0
aW9uKiBub3RpZmljYXRpCiAgICAgfQogCiAjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCi0g
ICAgd3JhcHBlci0+Y29ubmVjdCh3cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24uZ2V0KCksIFNJ
R05BTChtZXNzYWdlQ2xpY2tlZCgpKSwgd3JhcHBlciwgU0xPVChub3RpZmljYXRpb25DbGlja2Vk
KCkpKTsKLSAgICB3cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24tPnNob3coKTsKLSAgICB3cmFw
cGVyLT5tX25vdGlmaWNhdGlvbkljb24tPnNob3dNZXNzYWdlKG5vdGlmaWNhdGlvbi0+dGl0bGUo
KSwgbm90aWZpY2F0aW9uLT5ib2R5KCkpOworICAgIHdyYXBwZXItPmNvbm5lY3QobV9zeXN0ZW1U
cmF5SWNvbi5kYXRhKCksIFNJR05BTChtZXNzYWdlQ2xpY2tlZCgpKSwgd3JhcHBlciwgU0xPVChu
b3RpZmljYXRpb25DbGlja2VkKCkpKTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1f
c3lzdGVtVHJheUljb24uZGF0YSgpLCAic2hvdyIpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VN
ZXRob2QobV9zeXN0ZW1UcmF5SWNvbi5kYXRhKCksICJzaG93TWVzc2FnZSIsIFFfQVJHKFFTdHJp
bmcsIG5vdGlmaWNhdGlvbi0+dGl0bGUoKSksIFFfQVJHKFFTdHJpbmcsIG5vdGlmaWNhdGlvbi0+
Ym9keSgpKSk7CiAjZW5kaWYKIH0KIApAQCAtMzI0LDExICszMTgsMTAgQEAgdm9pZCBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY28KICAgICAgICAgQ2FsbGJhY2tzSW5mbyBpbmZvOwogICAgICAgICBpbmZvLm1f
ZnJhbWUgPSB0b0ZyYW1lKGNvbnRleHQpOwogICAgICAgICBpbmZvLm1fY2FsbGJhY2tzLmFwcGVu
ZChjYik7Ci0gICAgICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQoY29udGV4
dCwgaW5mbyk7CiAKICAgICAgICAgaWYgKHRvUGFnZShjb250ZXh0KSAmJiB0b0ZyYW1lKGNvbnRl
eHQpKSB7CiAgICAgICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5zZXJ0KGNv
bnRleHQsIGluZm8pOwotICAgICAgICAgICAgZW1pdCB0b1BhZ2UoY29udGV4dCktPmZlYXR1cmVQ
ZXJtaXNzaW9uUmVxdWVzdGVkKHRvRnJhbWUoY29udGV4dCksIFFXZWJQYWdlOjpOb3RpZmljYXRp
b25zKTsKKyAgICAgICAgICAgIHRvUGFnZShjb250ZXh0KS0+bm90aWZpY2F0aW9uc1Blcm1pc3Np
b25SZXF1ZXN0ZWQodG9GcmFtZShjb250ZXh0KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0z
NDYsMTAgKzMzOSwxMCBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5j
ZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQwogICAgIGlmIChpdGVyID09
IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUVdlYkZyYW1lKiBmcmFtZSA9IGl0ZXIudmFsdWUoKS5tX2ZyYW1lOworICAgIFFXZWJGcmFt
ZUFkYXB0ZXIqIGZyYW1lID0gaXRlci52YWx1ZSgpLm1fZnJhbWU7CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFFXZWJQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAg
ICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFkYXB0ZXI6OmtpdChmcmFtZS0+ZnJh
bWUtPnBhZ2UoKSk7CiAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmVyYXNlKGl0ZXIp
OwogCiAgICAgaWYgKCFwYWdlKQpAQCAtMzU4LDcgKzM1MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihTY3JpcHRFeGVj
dXRpb25DCiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCiAgICAgICAgIHByaW50ZigiREVTS1RP
UCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNUIENBTkNFTExFRDogJXNcbiIsIFFTdHJp
bmcoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSkudG9VdGY4KCkuY29uc3RE
YXRhKCkpOwogCi0gICAgZW1pdCBwYWdlLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RDYW5jZWxl
ZChmcmFtZSwgUVdlYlBhZ2U6Ok5vdGlmaWNhdGlvbnMpOworICAgIHBhZ2UtPm5vdGlmaWNhdGlv
bnNQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGxlZChmcmFtZSk7CiB9CiAKIHZvaWQgTm90aWZpY2F0
aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUoRnJhbWUqIGZy
YW1lKQpAQCAtNDQyLDcgKzQzNSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQ6OmR1bXBTaG93VGV4dChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICB9CiB9CiAK
LVFXZWJQYWdlKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9QYWdlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitRV2ViUGFnZUFkYXB0ZXIqIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
IHsKICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtNDUzLDEwICs0NDYsMTAgQEAgUVdlYlBhZ2UqIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKICAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpraXQocGFnZS0+bWFpbkZyYW1lKCkp
LT5wYWdlKCk7CisgICAgcmV0dXJuIFFXZWJQYWdlQWRhcHRlcjo6a2l0KHBhZ2UpOwogfQogCi1R
V2ViRnJhbWUqIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojp0b0ZyYW1lKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitRV2ViRnJhbWVBZGFwdGVyKiBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6dG9GcmFtZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQogewogICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC00NjUsNyArNDU4LDcgQEAgUVdlYkZyYW1lKiBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6dG9GcmFtZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXgKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGRvY3VtZW50LT5mcmFt
ZSgpKTsKKyAgICByZXR1cm4gUVdlYkZyYW1lQWRhcHRlcjo6a2l0KGRvY3VtZW50LT5mcmFtZSgp
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZ
X05PVElGSUNBVElPTlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgKaW5kZXggNTgxOWI0
ZDgwMTNjNDA4NmQwMWU3MjYxNmJhZjRmZWE3ZGE2ODliNy4uMzEwMzQ3NjQyODFlODU4NTdlMWZh
ZTZkNDUzOTk3MjhjOTI1ZjI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaApAQCAt
MzcsMTMgKzM3LDEzIEBACiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAKLSNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRl
ICIuLi9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCiAKICNpbmNsdWRlIDxRTXVsdGlIYXNo
PgotI2luY2x1ZGUgPFFTeXN0ZW1UcmF5SWNvbj4KKyNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4K
IAotY2xhc3MgUVdlYkZyYW1lOwotY2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViRnJhbWVBZGFw
dGVyOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTY5LDE0ICs2OSwxMiBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIG5vdGlmaWNhdGlvbkNs
b3NlZCgpOwogICAgIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZCgpOwogCi1wdWJsaWM6Ci0jaWZu
ZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCi0gICAgT3duUHRyPFFTeXN0ZW1UcmF5SWNvbj4gbV9u
b3RpZmljYXRpb25JY29uOwotI2VuZGlmCi0KK3ByaXZhdGU6CiAgICAgT3duUHRyPFFXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXI+IG1fcHJlc2VudGVyOwogICAgIFRpbWVyPE5vdGlmaWNhdGlvbldy
YXBwZXI+IG1fY2xvc2VUaW1lcjsKICAgICBUaW1lcjxOb3RpZmljYXRpb25XcmFwcGVyPiBtX2Rp
c3BsYXlFdmVudFRpbWVyOworCisgICAgZnJpZW5kIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OwogfTsKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVH
QUNZX05PVElGSUNBVElPTlMpCkBAIC0xMDksNiArMTA3LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgYm9vbCBkdW1wTm90aWZpY2F0aW9uOwogCiAgICAgdm9pZCBhZGRDbGllbnQoKSB7IG1fY2xp
ZW50Q291bnQrKzsgfQorI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgorICAgIGJvb2wgaGFz
U3lzdGVtVHJheUljb24oKSBjb25zdCB7IHJldHVybiAhbV9zeXN0ZW1UcmF5SWNvbi5pc051bGwo
KTsgfQorICAgIHZvaWQgc2V0U3lzdGVtVHJheUljb24oUU9iamVjdCogaWNvbikgeyBtX3N5c3Rl
bVRyYXlJY29uLnJlc2V0KGljb24pOyB9CisjZW5kaWYKICAgICB2b2lkIHJlbW92ZUNsaWVudCgp
OwogICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCogbm90aWZpY2F0aW9u
UHJlc2VudGVyKCk7CiAKQEAgLTEyNCwxMiArMTI2LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
ZXRhY2hOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1wUmVwbGFjZWRJ
ZFRleHQoTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1wU2hvd1RleHQoTm90aWZpY2F0aW9u
Kik7Ci0gICAgUVdlYlBhZ2UqIHRvUGFnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAg
UVdlYkZyYW1lKiB0b0ZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBRV2ViUGFn
ZUFkYXB0ZXIqIHRvUGFnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgUVdlYkZyYW1l
QWRhcHRlciogdG9GcmFtZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBpbnQgbV9j
bGllbnRDb3VudDsKICAgICBzdHJ1Y3QgQ2FsbGJhY2tzSW5mbyB7Ci0gICAgICAgIFFXZWJGcmFt
ZSogbV9mcmFtZTsKKyAgICAgICAgUVdlYkZyYW1lQWRhcHRlciogbV9mcmFtZTsKICAgICAgICAg
UUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiBtX2NhbGxiYWNrczsKICAgICB9OwogICAgIFFI
YXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJhY2tzSW5mbyA+IG1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0czsKQEAgLTEzNywxMCArMTM5LDEzIEBAIHByaXZhdGU6CiAKICAgICBO
b3RpZmljYXRpb25zUXVldWUgbV9ub3RpZmljYXRpb25zOwogICAgIFF0UGxhdGZvcm1QbHVnaW4g
bV9wbGF0Zm9ybVBsdWdpbjsKKyNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04KKyAgICBRU2Nv
cGVkUG9pbnRlcjxRT2JqZWN0PiBtX3N5c3RlbVRyYXlJY29uOworI2VuZGlmCiB9OwogCi0jZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJ
RklDQVRJT05TKQogCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmNwcAppbmRleCAxNDFmOThlMzA4MmMyMTI3YzZmOTQxZTFkOTIwY2U3N2UwOTI5YTA1
Li43MTgyZTUzZDMzZDEwYjQxYzliYzBkNWQ1MmUwMzI3MmViY2M3YzM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBAIC03Myw3ICs3
Myw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lk
Z2V0KFFXaWRnZXQqIHdpZGdldCwgUGxhdGZvcm1HCiAKIFFXaW5kb3cqIFFXZWJQYWdlQ2xpZW50
Ojpvd25lcldpbmRvdygpIGNvbnN0CiB7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0gb3duZXJXaWRn
ZXQoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG93bmVy
V2lkZ2V0KCkpOwogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAo
UVdpbmRvdyAqd2luZG93ID0gd2lkZ2V0LT53aW5kb3dIYW5kbGUoKSkKQEAgLTIwNCw3ICsyMDQs
NyBAQCBpbnQgUGFnZUNsaWVudFFXaWRnZXQ6OnNjcmVlbk51bWJlcigpIGNvbnN0CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVFXaWRnZXQqIFBhZ2VDbGllbnRRV2lkZ2V0Ojpvd25lcldpZGdldCgpIGNv
bnN0CitRT2JqZWN0ICpQYWdlQ2xpZW50UVdpZGdldDo6b3duZXJXaWRnZXQoKSBjb25zdAogewog
ICAgIHJldHVybiB2aWV3OwogfQpAQCAtMzYzLDcgKzM2Myw3IEBAIGludCBQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1R
V2lkZ2V0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25lcldpZGdldCgpIGNvbnN0CitR
T2JqZWN0ICpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25lcldpZGdldCgpIGNvbnN0CiB7
CiAgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZpZXctPnNjZW5lKCkpIHsKICAgICAg
ICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7CkBA
IC00MzIsNyArNDMyLDcgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpjcmVhdGVQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtR3JhcGhpY3MKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9y
bUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFPYmplY3QqKiBzdXJmYWNlT3du
ZXIpCiB7Ci0gICAgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzREZyb21XaWRnZXQob3du
ZXJXaWRnZXQoKSwgY29udGV4dCwgc3VyZmFjZSwgc3VyZmFjZU93bmVyKTsKKyAgICBjcmVhdGVQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJvbVdpZGdldChxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+
KG93bmVyV2lkZ2V0KCkpLCBjb250ZXh0LCBzdXJmYWNlLCBzdXJmYWNlT3duZXIpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5o
CmluZGV4IGU2YjllMTY5NGQ0NmE0MmNlMzIyNDc5MjhkNjk4OWRkYmU1OTg3ZWUuLjhlZDYzOGM5
ZjA0NDU1MjdjZTdmOGNjYzc2YWJhNjE1M2ZjMzUzOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIFFQYWxldHRlIHBhbGV0dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGlu
dCBzY3JlZW5OdW1iZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFFXaWRnZXQqIG93bmVyV2lkZ2V0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBRT2JqZWN0KiBvd25lcldpZGdldCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgUVJlY3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2luUGFyZW50KCkgY29uc3Q7CkBAIC0xOTcsNyArMTk3
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBpbnQgc2NyZWVuTnVtYmVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBRV2lkZ2V0
KiBvd25lcldpZGdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgUU9iamVjdCogb3duZXJXaWRnZXQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFFSZWN0IGdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFFPYmplY3QqIHBsdWdpblBhcmVudCgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1F0LmNwcAppbmRleCBjMzFkOWIwMDc1MDc3ZDkwMTY5YjY3Njc5MTRhZGFkMjlhZjZh
ZTFjLi5mZGZiYzlkOGU1ZTQxMjRiOTc4NmEzNTVlNjU2ZDU1YzU4YzU1NmU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1F0LmNwcApAQCAtMzksMTEgKzM5LDEyIEBACiAjaW5jbHVkZSA8UGx1Z2luRGF0YWJhc2UuaD4K
ICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFMb2NhbGU+Ci0jaW5jbHVk
ZSA8cXdlYmhpc3RvcnlpbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxxd2VicGFnZS5oPgotI2luY2x1
ZGUgPHF3ZWJwbHVnaW5mYWN0b3J5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAor
I2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2ViaGlzdG9y
eWludGVyZmFjZS5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIgorCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6aW5p
dGlhbGl6ZSgpCkBAIC05OSw5ICsxMDAsOSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpy
ZWZyZXNoUGx1Z2lucygpCiAKIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldFBsdWdpbklu
Zm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+
JiBvdXRQbHVnaW5zKQogewotICAgIFFXZWJQYWdlKiBxUGFnZSA9IHN0YXRpY19jYXN0PENocm9t
ZUNsaWVudFF0Kj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdlOworICAgIFFX
ZWJQYWdlQWRhcHRlciogcVBhZ2UgPSBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRRdCo+KHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKSktPm1fd2ViUGFnZTsKICAgICBRV2ViUGx1Z2luRmFjdG9yeSog
ZmFjdG9yeTsKLSAgICBpZiAocVBhZ2UgJiYgKGZhY3RvcnkgPSBxUGFnZS0+cGx1Z2luRmFjdG9y
eSgpKSkgeworICAgIGlmIChxUGFnZSAmJiAoZmFjdG9yeSA9IHFQYWdlLT5wbHVnaW5GYWN0b3J5
KSkgewogCiAgICAgICAgIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+IHFwbHVnaW5z
ID0gZmFjdG9yeS0+cGx1Z2lucygpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHFwbHVn
aW5zLmNvdW50KCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudVF0LmNwcAppbmRleCAyOWU0NjI0ZWJkM2UyMTRjNWZmYTc2ZDYwZjY0MmY3ZjYw
ZGI4YTE0Li5iMTdhMjhkZmRhNDM3OTFmYTJhZTIyOWRhMGExMmQ1ZTQzNDQxODBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcApAQCAtMzAs
NyArMzAsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNs
aWVudC5oIgogCi0jaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisjaW5jbHVkZSAi
Li4vQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogCiBjbGFzcyBTZWxlY3REYXRhIDogcHVi
bGljIFFXZWJTZWxlY3REYXRhIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMwMmFmZmMzNzQ5NmE2OWViNTI3M2Y5OWFmZTcyMDM5YjQzZWIwYzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGwuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmgiCisKKyNpbmNsdWRlIDxRR3JhcGhpY3NTY2Vu
ZT4KKyNpbmNsdWRlIDxRR3JhcGhpY3NXaWRnZXQ+CisKKyNpZm5kZWYgUVRfTk9fR1JBUEhJQ1NW
SUVXCisKK1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6On5RR3JhcGhpY3NXaWRnZXRQbHVnaW5J
bXBsKCkKK3sKKyAgICBtX2dyYXBoaWNzV2lkZ2V0LT5kZWxldGVMYXRlcigpOworfQorCit2b2lk
IFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6OnVwZGF0ZShjb25zdCBRUmVjdCAmcmVjdCkKK3sK
KyAgICBRR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBtX2dyYXBoaWNzV2lkZ2V0LT5zY2VuZSgpOwor
ICAgIGlmIChzY2VuZSkKKyAgICAgICAgc2NlbmUtPnVwZGF0ZShyZWN0KTsKK30KKwordm9pZCBR
R3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjpzZXRHZW9tZXRyeUFuZENsaXAoY29uc3QgUVJlY3Qg
Jmdlb21ldHJ5LCBjb25zdCBRUmVjdCAmLCBib29sKQoreworICAgIG1fZ3JhcGhpY3NXaWRnZXQt
PnNldEdlb21ldHJ5KGdlb21ldHJ5KTsKKyAgICAvLyBGSVhNRTogTWFrZSB0aGUgY29kZSBoYW5k
bGUgY2xpcHBpbmcgb2YgZ3JhcGhpY3Mgd2lkZ2V0cy4KK30KKwordm9pZCBRR3JhcGhpY3NXaWRn
ZXRQbHVnaW5JbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBtX2dyYXBoaWNz
V2lkZ2V0LT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2b2lkIFFHcmFwaGljc1dpZGdldFBs
dWdpbkltcGw6OnNldFdpZGdldFBhcmVudChRT2JqZWN0ICpwYXJlbnQpCit7CisgICAgUUdyYXBo
aWNzT2JqZWN0ICpwYXJlbnRJdGVtID0gcW9iamVjdF9jYXN0PFFHcmFwaGljc09iamVjdCo+KHBh
cmVudCk7CisgICAgaWYgKHBhcmVudEl0ZW0pCisgICAgICAgIG1fZ3JhcGhpY3NXaWRnZXQtPnNl
dFBhcmVudEl0ZW0ocGFyZW50SXRlbSk7Cit9CisKK1FPYmplY3QgKlFHcmFwaGljc1dpZGdldFBs
dWdpbkltcGw6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ3JhcGhpY3NXaWRnZXQ7
Cit9CisKKyNlbmRpZiAvLyAhZGVmaW5lZChRVF9OT19HUkFQSElDU1ZJRVcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbklt
cGwuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUUdyYXBoaWNzV2lkZ2V0UGx1
Z2luSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyNWNmMzg5ZGVlNjFlOWNkOGVmNDMxYjg1MTRlOTVmZmM4
ZmRmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2lmbmRlZiBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsX2gKKyNkZWZpbmUgUUdyYXBoaWNzV2lk
Z2V0UGx1Z2luSW1wbF9oCisjaWZuZGVmIFFUX05PX0dSQVBISUNTVklFVworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgiCisKK1FUX0JFR0lO
X05BTUVTUEFDRQorY2xhc3MgUUdyYXBoaWNzV2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCitj
bGFzcyBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsIDogcHVibGljIFF0UGx1Z2luV2lkZ2V0QWRh
cHRlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRR3JhcGhpY3NXaWRnZXRQbHVnaW5J
bXBsKFFHcmFwaGljc1dpZGdldCAqdykgOiBtX2dyYXBoaWNzV2lkZ2V0KHcpIHt9CisgICAgdmly
dHVhbCB+UUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGUoY29uc3QgUVJlY3QgJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5
QW5kQ2xpcChjb25zdCBRUmVjdCYsIGNvbnN0IFFSZWN0JiwgYm9vbCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxl
U2hlZXQoY29uc3QgUVN0cmluZyYpIE9WRVJSSURFIHt9CisgICAgdmlydHVhbCB2b2lkIHNldFdp
ZGdldFBhcmVudChRT2JqZWN0KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRT2JqZWN0KiBoYW5k
bGUoKSBjb25zdCBPVkVSUklERTsKK3ByaXZhdGU6CisgICAgUUdyYXBoaWNzV2lkZ2V0ICptX2dy
YXBoaWNzV2lkZ2V0OworfTsKKyNlbmRpZiAvLyAhZGVmaW5lZChRVF9OT19HUkFQSElDU1ZJRVcp
CisjZW5kaWYgLy8gUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMTJlMWMxYTE5MDA5NDZjMGZkZTY5ZjlhNWNjY2IxYzI3YmE5NTJkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNw
cApAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMg
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgor
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVu
dC5oIgorI2luY2x1ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5oIgorI2VuZGlmCisKKyNpbmNsdWRl
IDxRRmlsZUluZm8+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworc3RhdGljIGlubGluZSBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBj
YWNoZUxvYWRDb250cm9sVG9DYWNoZVBvbGljeSh1aW50IGNhY2hlTG9hZENvbnRyb2wpCit7Cisg
ICAgc3dpdGNoIChjYWNoZUxvYWRDb250cm9sKSB7CisgICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6
OkFsd2F5c05ldHdvcms6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0Nh
Y2hlRGF0YTsKKyAgICBjYXNlIFFOZXR3b3JrUmVxdWVzdDo6UHJlZmVyQ2FjaGU6CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKKyAgICBjYXNlIFFOZXR3
b3JrUmVxdWVzdDo6QWx3YXlzQ2FjaGU6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpSZXR1cm5D
YWNoZURhdGFEb250TG9hZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3k7Cit9CisKK1FXZWJGcmFt
ZURhdGE6OlFXZWJGcmFtZURhdGEoV2ViQ29yZTo6UGFnZSogcGFyZW50UGFnZSwgV2ViQ29yZTo6
RnJhbWUqIHBhcmVudEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRnJhbWVFbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lKQorICAgIDogbmFt
ZShmcmFtZU5hbWUpCisgICAgLCBvd25lckVsZW1lbnQob3duZXJGcmFtZUVsZW1lbnQpCisgICAg
LCBwYWdlKHBhcmVudFBhZ2UpCisgICAgLCBhbGxvd3NTY3JvbGxpbmcodHJ1ZSkKKyAgICAsIG1h
cmdpbldpZHRoKDApCisgICAgLCBtYXJnaW5IZWlnaHQoMCkKK3sKKyAgICBmcmFtZUxvYWRlckNs
aWVudCA9IG5ldyBGcmFtZUxvYWRlckNsaWVudFF0KCk7CisgICAgZnJhbWUgPSBGcmFtZTo6Y3Jl
YXRlKHBhZ2UsIG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXJDbGllbnQpOworCisgICAgLy8gRklY
TUU6IEFsbCBvZiB0aGUgYmVsb3cgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIG92ZXIgaW50byBX
ZWJDb3JlCisgICAgZnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKKyAgICBpZiAocGFyZW50
RnJhbWUpCisgICAgICAgIHBhcmVudEZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGZyYW1lKTsK
K30KKworUVdlYkZyYW1lQWRhcHRlcjo6UVdlYkZyYW1lQWRhcHRlcigpCisgICAgOiBwYWdlQWRh
cHRlcigwKQorICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCisgICAgLCBtYXJnaW5XaWR0aCgt
MSkKKyAgICAsIG1hcmdpbkhlaWdodCgtMSkKKyAgICAsIGZyYW1lKDApCisgICAgLCBmcmFtZUxv
YWRlckNsaWVudCgwKQoreworfQorCitRV2ViRnJhbWVBZGFwdGVyOjp+UVdlYkZyYW1lQWRhcHRl
cigpCit7CisgICAgaWYgKGZyYW1lTG9hZGVyQ2xpZW50KQorICAgICAgICBmcmFtZUxvYWRlckNs
aWVudC0+bV93ZWJGcmFtZSA9IDA7Cit9CisKK3ZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6bG9hZChj
b25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRp
b24gb3BlcmF0aW9uLCBjb25zdCBRQnl0ZUFycmF5JiBib2R5KQoreworICAgIGlmIChmcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgcGFnZUFkYXB0ZXItPmluc2lkZU9wZW5DYWxsID0g
dHJ1ZTsKKworICAgIFFVcmwgdXJsID0gZW5zdXJlQWJzb2x1dGVVcmwocmVxLnVybCgpKTsKKwor
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CisKKyAgICBzd2l0Y2gg
KG9wZXJhdGlvbikgeworICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6SGVhZE9w
ZXJhdGlvbjoKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiSEVBRCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRP
cGVyYXRpb246CisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQdXRP
cGVyYXRpb246CisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBVVCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQb3N0
T3BlcmF0aW9uOgorICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJQT1NUIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkRl
bGV0ZU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiREVMRVRF
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFn
ZXI6OkN1c3RvbU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChy
ZXEuYXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6Q3VzdG9tVmVyYkF0dHJpYnV0ZSkudG9CeXRl
QXJyYXkoKS5jb25zdERhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBR
TmV0d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRpb246CisgICAgICAgICAgICAvLyBl
aD8KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFFWYXJpYW50IGNhY2hlTG9hZCA9
IHJlcS5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpDYWNoZUxvYWRDb250cm9sQXR0cmlidXRl
KTsKKyAgICBpZiAoY2FjaGVMb2FkLmlzVmFsaWQoKSkgeworICAgICAgICBib29sIG9rOworICAg
ICAgICB1aW50IGNhY2hlTG9hZFZhbHVlID0gY2FjaGVMb2FkLnRvVUludCgmb2spOworICAgICAg
ICBpZiAob2spCisgICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KGNhY2hlTG9hZENv
bnRyb2xUb0NhY2hlUG9saWN5KGNhY2hlTG9hZFZhbHVlKSk7CisgICAgfQorCisgICAgUUxpc3Q8
UUJ5dGVBcnJheT4gaHR0cEhlYWRlcnMgPSByZXEucmF3SGVhZGVyTGlzdCgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgaHR0cEhlYWRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
UUJ5dGVBcnJheSAmaGVhZGVyTmFtZSA9IGh0dHBIZWFkZXJzLmF0KGkpOworICAgICAgICByZXF1
ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9tTGF0aW4xKGhlYWRlck5hbWUpLCBR
U3RyaW5nOjpmcm9tTGF0aW4xKHJlcS5yYXdIZWFkZXIoaGVhZGVyTmFtZSkpKTsKKyAgICB9CisK
KyAgICBpZiAoIWJvZHkuaXNFbXB0eSgpKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KFdl
YkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUoYm9keS5jb25zdERhdGEoKSwgYm9keS5zaXplKCkpKTsK
KworICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBmYWxzZSk7CisKKyAgICBpZiAo
ZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAgICAgIHBhZ2VBZGFwdGVyLT5pbnNpZGVPcGVu
Q2FsbCA9IGZhbHNlOworfQorCitRV2ViRnJhbWVBZGFwdGVyICpRV2ViRnJhbWVBZGFwdGVyOjpj
cmVhdGVGcmFtZShRV2ViRnJhbWVEYXRhICpkYXRhKQoreworICAgIFFXZWJGcmFtZUFkYXB0ZXIq
IG5ld0ZyYW1lID0gY3JlYXRlV2ViRnJhbWUodGhpcyk7CisgICAgbmV3RnJhbWUtPnBhZ2VBZGFw
dGVyID0gcGFnZUFkYXB0ZXI7CisgICAgbmV3RnJhbWUtPmluaXQoZGF0YSk7CisgICAgcmV0dXJu
IG5ld0ZyYW1lOworfQorCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQordm9pZCBRV2ViRnJh
bWVBZGFwdGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoUUdlc3R1cmVFdmVudEZhY2FkZSogZ2VzdHVy
ZUV2ZW50KQoreworICAgIEFTU0VSVChoYXNWaWV3KCkpOworICAgIHN3aXRjaCAoZ2VzdHVyZUV2
ZW50LT50eXBlKSB7CisgICAgY2FzZSBRdDo6VGFwR2VzdHVyZToKKyAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoY29udmVydEdlc3R1cmUoZ2VzdHVyZUV2
ZW50KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUXQ6OlRhcEFuZEhvbGRHZXN0dXJlOgor
ICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50Rm9yR2Vz
dHVyZShjb252ZXJ0R2VzdHVyZShnZXN0dXJlRXZlbnQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorI2VuZGlm
CisKK1dlYkNvcmU6OkludFNpemUgUVdlYkZyYW1lQWRhcHRlcjo6c2Nyb2xsUG9zaXRpb24oKSBj
b25zdAoreworICAgIGlmICghaGFzVmlldygpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwor
ICAgIHJldHVybiBmcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKTsKK30KKworSW50UmVjdCBR
V2ViRnJhbWVBZGFwdGVyOjpmcmFtZVJlY3QoKSBjb25zdAoreworICAgIGlmICghaGFzVmlldygp
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBmcmFtZS0+dmlldygpLT5m
cmFtZVJlY3QoKTsKK30KKwordm9pZCBRV2ViRnJhbWVBZGFwdGVyOjppbml0KFFXZWJGcmFtZURh
dGEgKmZyYW1lRGF0YSkKK3sKKyAgICBhbGxvd3NTY3JvbGxpbmcgPSBmcmFtZURhdGEtPmFsbG93
c1Njcm9sbGluZzsKKyAgICBtYXJnaW5XaWR0aCA9IGZyYW1lRGF0YS0+bWFyZ2luV2lkdGg7Cisg
ICAgbWFyZ2luSGVpZ2h0ID0gZnJhbWVEYXRhLT5tYXJnaW5IZWlnaHQ7CisgICAgZnJhbWUgPSBm
cmFtZURhdGEtPmZyYW1lLmdldCgpOworICAgIGZyYW1lTG9hZGVyQ2xpZW50ID0gZnJhbWVEYXRh
LT5mcmFtZUxvYWRlckNsaWVudDsKKyAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUodGhp
cywgZnJhbWUpOworCisgICAgZnJhbWUtPmluaXQoKTsKK30KKworUVdlYkZyYW1lQWRhcHRlciAq
UVdlYkZyYW1lQWRhcHRlcjo6a2l0KGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCkpLT53ZWJGcmFtZSgpOworfQorCitRVXJsIFFXZWJGcmFtZUFkYXB0ZXI6OmVuc3VyZUFic29s
dXRlVXJsKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVy
bC5pc1JlbGF0aXZlKCkpCisgICAgICAgIHJldHVybiB1cmw7CisKKyAgICAvLyBUaGlzIGNvbnRh
aW5zIHRoZSBVUkwgd2l0aCBhYnNvbHV0ZSBwYXRoIGJ1dCB3aXRob3V0CisgICAgLy8gdGhlIHF1
ZXJ5IGFuZCB0aGUgZnJhZ21lbnQgcGFydC4KKyAgICBRVXJsIGJhc2VVcmwgPSBRVXJsOjpmcm9t
TG9jYWxGaWxlKFFGaWxlSW5mbyh1cmwudG9Mb2NhbEZpbGUoKSkuYWJzb2x1dGVGaWxlUGF0aCgp
KTsKKworICAgIC8vIFRoZSBwYXRoIGlzIHJlbW92ZWQgc28gdGhlIHF1ZXJ5IGFuZCB0aGUgZnJh
Z21lbnQgcGFydHMgYXJlIHRoZXJlLgorICAgIFFTdHJpbmcgcGF0aFJlbW92ZWQgPSB1cmwudG9T
dHJpbmcoUVVybDo6UmVtb3ZlUGF0aCk7CisgICAgUVVybCB0b1Jlc29sdmUocGF0aFJlbW92ZWQp
OworCisgICAgcmV0dXJuIGJhc2VVcmwucmVzb2x2ZWQodG9SZXNvbHZlKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5oIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWY3NjEyYzI5ZTI2NDU3ODcwZGQ0ZGM0NDIzMGEwYTUwY2QyM2I5ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRl
ci5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBs
YyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRV2ViRnJhbWVBZGFwdGVy
X2gKKyNkZWZpbmUgUVdlYkZyYW1lQWRhcHRlcl9oCisKKyNpbmNsdWRlIDxGcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8SW50U2l6ZS5oPgorI2luY2x1ZGUgPEtV
UkwuaD4KKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1FdmVudC5oIgorCisjaW5jbHVkZSA8UVNpemU+CisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsKK30KKworUVRfQkVH
SU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnQ7CitRVF9FTkRfTkFNRVNQQUNFCisKKyNpZiBFTkFC
TEUoR0VTVFVSRV9FVkVOVFMpCitjbGFzcyBRR2VzdHVyZUV2ZW50RmFjYWRlOworI2VuZGlmCitj
bGFzcyBRV2ViRnJhbWU7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CisKK2NsYXNzIFFXZWJGcmFt
ZURhdGEgeworcHVibGljOgorICAgIFFXZWJGcmFtZURhdGEoV2ViQ29yZTo6UGFnZSosIFdlYkNv
cmU6OkZyYW1lKiBwYXJlbnRGcmFtZSA9IDAsCisgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpI
VE1MRnJhbWVPd25lckVsZW1lbnQqID0gMCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBmcmFtZU5hbWUgPSBXVEY6OlN0cmluZygpKTsKKworICAgIFdlYkNvcmU6OktVUkwg
dXJsOworICAgIFdURjo6U3RyaW5nIG5hbWU7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQ7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6RnJhbWU+IGZyYW1lOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQqIGZyYW1lTG9hZGVyQ2xpZW50OworCisgICAgV1RGOjpTdHJpbmcgcmVmZXJyZXI7CisgICAg
Ym9vbCBhbGxvd3NTY3JvbGxpbmc7CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGludCBtYXJn
aW5IZWlnaHQ7Cit9OworCitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUVVybCBlbnN1cmVBYnNvbHV0ZVVybChjb25zdCBRVXJsJiB1cmwpOworCisgICAgUVdl
YkZyYW1lQWRhcHRlcigpOworICAgIHZpcnR1YWwgflFXZWJGcmFtZUFkYXB0ZXIoKTsKKworICAg
IHZpcnR1YWwgUVdlYkZyYW1lKiBhcGlIYW5kbGUoKSA9IDA7CisgICAgdmlydHVhbCBRT2JqZWN0
KiBoYW5kbGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZURpZENoYW5nZShj
b25zdCBRU2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJQb2xpY3koUXQ6Ok9y
aWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVtaXRVcmxDaGFuZ2VkKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZVByb2dyZXNzRmluaXNoZWQoUVBvaW50KikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBlbWl0SW5pdGlhbExheW91dENvbXBsZXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1p
dEljb25DaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0TG9hZFN0YXJ0ZWQoYm9v
bCBvcmlnaW5hdGluZ0xvYWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdExvYWRGaW5pc2hl
ZChib29sIG9yaWdpbmF0aW5nTG9hZCwgYm9vbCBvaykgPSAwOworICAgIHZpcnR1YWwgUVdlYkZy
YW1lQWRhcHRlciogY3JlYXRlV2ViRnJhbWUoUVdlYkZyYW1lQWRhcHRlciopID0gMDsKKworICAg
IHZvaWQgbG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uID0gUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVy
YXRpb24sIGNvbnN0IFFCeXRlQXJyYXkmIGJvZHkgPSBRQnl0ZUFycmF5KCkpOworICAgIGlubGlu
ZSBib29sIGhhc1ZpZXcoKSBjb25zdCB7IHJldHVybiBmcmFtZSAmJiBmcmFtZS0+dmlldygpOyB9
CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50
KFFHZXN0dXJlRXZlbnRGYWNhZGUqKTsKKyNlbmRpZgorICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGNy
ZWF0ZUZyYW1lKFFXZWJGcmFtZURhdGEgKmRhdGEpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVSZWN0KCkg
Y29uc3Q7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlQWRhcHRlcjsKKworLy9wcm90ZWN0ZWQ6
CisgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmc7CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGlu
dCBtYXJnaW5IZWlnaHQ7CisKKy8vcHJpdmF0ZToKKyAgICB2b2lkIGluaXQoUVdlYkZyYW1lRGF0
YSAqZnJhbWVEYXRhKTsKKworICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZTsKKyAgICBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudFF0ICpmcmFtZUxvYWRlckNsaWVudDsKKyAgICBXZWJDb3JlOjpL
VVJMIHVybDsKKworICAgIHN0YXRpYyBRV2ViRnJhbWVBZGFwdGVyKiBraXQoY29uc3QgV2ViQ29y
ZTo6RnJhbWUqKTsKKworLy8gICAgZnJpZW5kIGNsYXNzIENocm9tZUNsaWVudFF0OworfTsKKwor
I2VuZGlmIC8vIFFXZWJGcmFtZUFkYXB0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxNmU0ZmZmM2Nl
YzQyMDJkNzU1MjMwMDhhNjcwYzk0OTQyODJlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJQYWdlQWRhcHRlci5jcHAKQEAgLTAsMCArMSwx
MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRV2ViUGFn
ZUFkYXB0ZXIuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVu
dFF0LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKKyNpbmNs
dWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisjaW5jbHVkZSAiVW5kb1N0ZXBRdC5oIgorI2luY2x1
ZGUgIi4uL0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Vic2V0
dGluZ3MuaCIKKworI2luY2x1ZGUgPFBhZ2UuaD4KKworI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNz
TWFuYWdlcj4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2Jvb2wgUVdlYlBhZ2VBZGFw
dGVyOjpkcnRSdW4gPSBmYWxzZTsKKworUVdlYlBhZ2VBZGFwdGVyOjpRV2ViUGFnZUFkYXB0ZXIo
KQorICAgIDogc2V0dGluZ3MoMCkKKyAgICAsIHBhZ2UoMCkKKyAgICAsIHBsdWdpbkZhY3Rvcnko
MCkKKyAgICAsIGZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQoZmFsc2UpCisgICAgLCBpbnNpZGVP
cGVuQ2FsbChmYWxzZSkKKyAgICAsIG5ldHdvcmtNYW5hZ2VyKDApCit7Cit9CisKK1FXZWJQYWdl
QWRhcHRlcjo6flFXZWJQYWdlQWRhcHRlcigpCit7CisgICAgZGVsZXRlIHBhZ2U7CisgICAgZGVs
ZXRlIHNldHRpbmdzOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdB
Q1lfTk9USUZJQ0FUSU9OUykKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90
aWZpY2F0aW9uUHJlc2VudGVyKCktPnJlbW92ZUNsaWVudCgpOworI2VuZGlmCit9CisKK3ZvaWQg
UVdlYlBhZ2VBZGFwdGVyOjppbml0KFBhZ2UqIHBhZ2UpCit7CisgICAgdGhpcy0+cGFnZSA9IHBh
Z2U7CisgICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdzKHBhZ2UtPnNldHRpbmdzKCkpOwor
CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9O
UykKKyAgICBXZWJDb3JlOjpwcm92aWRlTm90aWZpY2F0aW9uKHBhZ2UsIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBRV2ViUGFnZUFkYXB0ZXI6OmRlbGV0ZVBhZ2UoKQoreworICAgIGRlbGV0ZSBwYWdlOwor
ICAgIHBhZ2UgPSAwOworfQorCitRV2ViUGFnZUFkYXB0ZXIqIFFXZWJQYWdlQWRhcHRlcjo6a2l0
KFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENocm9tZUNsaWVudFF0Kj4o
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdlOworfQorCitWaWV3cG9ydEFyZ3Vt
ZW50cyBRV2ViUGFnZUFkYXB0ZXI6OnZpZXdwb3J0QXJndW1lbnRzKCkKK3sKKyAgICAgICAgcmV0
dXJuIHBhZ2UgPyBwYWdlLT52aWV3cG9ydEFyZ3VtZW50cygpIDogV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMoKTsKK30KKworCit2b2lkIFFXZWJQYWdlQWRhcHRlcjo6cmVnaXN0ZXJVbmRvU3Rl
cChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+IHN0ZXApCit7CisgICAgY3JlYXRl
VW5kb1N0ZXAoUVNoYXJlZFBvaW50ZXI8VW5kb1N0ZXBRdD4obmV3IFVuZG9TdGVwUXQoc3RlcCkp
KTsKK30KKwordm9pZCBRV2ViUGFnZUFkYXB0ZXI6OnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFO
ZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBpZiAobWFuYWdlciA9PSBuZXR3
b3JrTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChuZXR3b3JrTWFuYWdlciAmJiBu
ZXR3b3JrTWFuYWdlci0+cGFyZW50KCkgPT0gaGFuZGxlKCkpCisgICAgICAgIGRlbGV0ZSBuZXR3
b3JrTWFuYWdlcjsKKyAgICBuZXR3b3JrTWFuYWdlciA9IG1hbmFnZXI7Cit9CisKK1FOZXR3b3Jr
QWNjZXNzTWFuYWdlciAqUVdlYlBhZ2VBZGFwdGVyOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigpCit7
CisgICAgaWYgKCFuZXR3b3JrTWFuYWdlcikKKyAgICAgICAgbmV0d29ya01hbmFnZXIgPSBuZXcg
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKGhhbmRsZSgpKTsKKyAgICByZXR1cm4gbmV0d29ya01hbmFn
ZXI7Cit9CisKK3ZvaWQgUVdlYlBhZ2VBZGFwdGVyOjppbml0RnJhbWUoUVdlYkZyYW1lQWRhcHRl
ciAqZnJhbWUpCit7CisgICAgUVdlYkZyYW1lRGF0YSBmcmFtZURhdGEocGFnZSk7CisgICAgZnJh
bWUtPmluaXQoJmZyYW1lRGF0YSk7CisKKyAgICBpZiAoIWZyYW1lRGF0YS51cmwuaXNFbXB0eSgp
KSB7CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGZyYW1lRGF0YS51
cmwsIGZyYW1lRGF0YS5yZWZlcnJlcik7CisgICAgICAgIGZyYW1lLT5mcmFtZS0+bG9hZGVyKCkt
PmxvYWQocmVxdWVzdCwgZnJhbWVEYXRhLm5hbWUsIGZhbHNlKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJQYWdlQWRhcHRlci5oIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NzlhODE2OTQ5ZmZlOGNkNmI1NjFjNWIwYzM1YmQyMjJlNDA4Y2VkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIu
aApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMg
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdlYlBhZ2VBZGFwdGVyX2gK
KyNkZWZpbmUgUVdlYlBhZ2VBZGFwdGVyX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSA8cW5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8cXJlY3QuaD4KKyNpbmNsdWRlIDxx
c2NvcGVkcG9pbnRlci5oPgorI2luY2x1ZGUgPHFzaGFyZWRwb2ludGVyLmg+CisjaW5jbHVkZSA8
cXN0cmluZy5oPgorI2luY2x1ZGUgPHF1cmwuaD4KKworI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50
LmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKKworUVRfQkVHSU5fTkFNRVNQQUNF
CitjbGFzcyBRS2V5RXZlbnQ7CitjbGFzcyBRTmV0d29ya0FjY2Vzc01hbmFnZXI7CitRVF9FTkRf
TkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7CitjbGFzcyBDaHJv
bWVDbGllbnRRdDsKK2NsYXNzIEdlb2xvY2F0aW9uQ2xpZW50UXQ7CitjbGFzcyBVbmRvU3RlcDsK
K30KKworY2xhc3MgUXRQbHVnaW5XaWRnZXRBZGFwdGVyOworY2xhc3MgUVdlYkZyYW1lQWRhcHRl
cjsKK2NsYXNzIFFXZWJIaXN0b3J5SXRlbTsKK2NsYXNzIFFXZWJQYWdlQ2xpZW50OworY2xhc3Mg
UVdlYlBsdWdpbkZhY3Rvcnk7CitjbGFzcyBRV2ViU2VjdXJpdHlPcmlnaW47CitjbGFzcyBRV2Vi
U2VsZWN0TWV0aG9kOworY2xhc3MgUVdlYlNldHRpbmdzOworY2xhc3MgUVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXI7CitjbGFzcyBVbmRvU3RlcFF0OworCisKK2NsYXNzIFFXZWJQYWdlQWRhcHRl
ciB7CitwdWJsaWM6CisgICAgUVdlYlBhZ2VBZGFwdGVyKCk7CisgICAgdmlydHVhbCB+UVdlYlBh
Z2VBZGFwdGVyKCk7CisKKyAgICB2b2lkIGluaXQoV2ViQ29yZTo6UGFnZSogcGFnZSk7CisgICAg
Ly8gQ2FsbGVkIG1hbnVhbGx5IGZyb20gflFXZWJQYWdlIGRlc3RydWN0b3IgdG8gZW5zdXJlIHRo
YXQKKyAgICAvLyB0aGUgUVdlYlBhZ2VBZGFwdGVyIGFuZCB0aGUgUVdlYlBhZ2VQcml2YXRlIGFy
ZSBpbnRhY3Qgd2hlbgorICAgIC8vIHZhcmlvdXMgZGVzdHJ1Y3Rpb24gY2FsbGJhY2tzIGZyb20g
V2ViQ29yZTo6UGFnZTo6flBhZ2UoKSBoaXQgdXMuCisgICAgdm9pZCBkZWxldGVQYWdlKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2hvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldFdpbmRvd1JlY3QoY29uc3QgUVJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBRU2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBRV2ViUGFnZUFkYXB0ZXIqIGNyZWF0
ZVdpbmRvdyhib29sIC8qZGlhbG9nKi8pID0gMDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGhhbmRs
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgamF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0
IFFTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBRU3RyaW5nJiBzb3VyY2VJ
RCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRl
ciogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBqYXZh
U2NyaXB0Q29uZmlybShRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgbXNn
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1lQWRhcHRl
ciAqZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZywgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVl
LCBRU3RyaW5nKiByZXN1bHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRSZXF1ZXN0ZWQo
UVdlYkZyYW1lQWRhcHRlciogZnJhbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VR
dW90YUV4Y2VlZGVkKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBkYXRh
YmFzZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbGljYXRpb25DYWNoZVF1b3RhRXhj
ZWVkZWQoUVdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHF1aW50NjQgZGVmYXVsdE9yaWdpblF1
b3RhLCBxdWludDY0IHRvdGFsU3BhY2VOZWVkZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VG9vbFRpcChjb25zdCBRU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgY2hv
b3NlRmlsZXMoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUsIGJvb2wgYWxsb3dNdWx0aXBsZSwgY29u
c3QgUVN0cmluZ0xpc3QmIHN1Z2dlc3RlZEZpbGVOYW1lcykgPSAwOworICAgIHZpcnR1YWwgUUNv
bG9yIGNvbG9yU2VsZWN0aW9uUmVxdWVzdGVkKGNvbnN0IFFDb2xvciYgc2VsZWN0ZWRDb2xvcikg
PSAwOworICAgIHZpcnR1YWwgUVdlYlNlbGVjdE1ldGhvZCogY3JlYXRlU2VsZWN0UG9wdXAoKSA9
IDA7CisgICAgdmlydHVhbCBRUmVjdCB2aWV3UmVjdFJlbGF0aXZlVG9XaW5kb3coKSA9IDA7CisK
KyNpZiBVU0UoUVRfTVVMVElNRURJQSkKKyAgICB2aXJ0dWFsIFFXZWJGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkgPSAwOworI2VuZGlmCisgICAg
dmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFw
dGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
Q2FuY2VsbGVkKFFXZWJGcmFtZUFkYXB0ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
aWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdGVkKFFXZWJGcmFtZUFkYXB0ZXIqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGxlZChRV2Vi
RnJhbWVBZGFwdGVyKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRD
b250ZW50cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWljcm9Gb2N1c0NoYW5nZWQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHRyaWdnZXJDb3B5QWN0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0
cmlnZ2VyQWN0aW9uRm9yS2V5RXZlbnQoUUtleUV2ZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclVuZG9TdGFjaygpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kbygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5kbygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkbygpID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGVkaXRvckNvbW1hbmRGb3JLZXlFdmVudChRS2V5RXZlbnQqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVuZG9TdGVwKFFTaGFyZWRQb2ludGVyPFVuZG9TdGVw
UXQ+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKSA9
IDA7CisKKyAgICB2aXJ0dWFsIFFXZWJGcmFtZUFkYXB0ZXIqIG1haW5GcmFtZUFkYXB0ZXIoKSA9
IDA7CisKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGluc3BlY3RvckhhbmRsZSgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmQoUU9iamVjdCopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5zcGVjdG9yV2luZG93VGl0bGUoY29uc3QgUVN0cmluZyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlV2ViSW5zcGVjdG9yKFFPYmplY3QqKiBpbnNwZWN0b3JWaWV3
LCBRV2ViUGFnZUFkYXB0ZXIqKiBpbnNwZWN0b3JQYWdlKSA9IDA7CisgICAgdmlydHVhbCBRU3Ry
aW5nTGlzdCBtZW51QWN0aW9uc0FzVGV4dCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFZp
ZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhY2NlcHROYXZp
Z2F0aW9uUmVxdWVzdChRV2ViRnJhbWVBZGFwdGVyICpmcmFtZSwgY29uc3QgUU5ldHdvcmtSZXF1
ZXN0ICZyZXF1ZXN0LCBpbnQgdHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0UmVzdG9y
ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciAqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyICosIFFX
ZWJIaXN0b3J5SXRlbSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdERvd25sb2FkUmVxdWVz
dGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEZy
YW1lQ3JlYXRlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZyB1
c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNFcnJvclBhZ2VFeHRlbnNpb24oKSBjb25zdCA9IDA7CisgICAgc3RydWN0IEVycm9y
UGFnZU9wdGlvbiB7CisgICAgICAgIFFVcmwgdXJsOworICAgICAgICBRV2ViRnJhbWVBZGFwdGVy
KiBmcmFtZTsKKyAgICAgICAgUVN0cmluZyBkb21haW47CisgICAgICAgIGludCBlcnJvcjsKKyAg
ICAgICAgUVN0cmluZyBlcnJvclN0cmluZzsKKyAgICB9OworICAgIHN0cnVjdCBFcnJvclBhZ2VS
ZXR1cm4geworICAgICAgICBRU3RyaW5nIGNvbnRlbnRUeXBlOworICAgICAgICBRU3RyaW5nIGVu
Y29kaW5nOworICAgICAgICBRVXJsIGJhc2VVcmw7CisgICAgICAgIFFCeXRlQXJyYXkgY29udGVu
dDsKKyAgICB9OworICAgIHZpcnR1YWwgYm9vbCBlcnJvclBhZ2VFeHRlbnNpb24oRXJyb3JQYWdl
T3B0aW9uKiwgRXJyb3JQYWdlUmV0dXJuKikgPSAwOworICAgIHZpcnR1YWwgUXRQbHVnaW5XaWRn
ZXRBZGFwdGVyKiBjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyYsIGNvbnN0IFFVcmwmLCBjb25z
dCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0JikgPSAwOworICAgIHZpcnR1YWwgUXRQ
bHVnaW5XaWRnZXRBZGFwdGVyKiBhZGFwdGVyRm9yV2lkZ2V0KFFPYmplY3QqKSBjb25zdCA9IDA7
CisKKworICAgIHN0YXRpYyBRV2ViUGFnZUFkYXB0ZXIqIGtpdChXZWJDb3JlOjpQYWdlKik7Cisg
ICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICB2
b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPik7
CisgICAgdm9pZCBpbml0RnJhbWUoUVdlYkZyYW1lQWRhcHRlciopOworCisgICAgdm9pZCBzZXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIpOworICAg
IFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKKworICAgIFFX
ZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisKKyAgICBXZWJDb3JlOjpQYWdlICpwYWdlOworICAgIFFT
Y29wZWRQb2ludGVyPFFXZWJQYWdlQ2xpZW50PiBjbGllbnQ7CisKKyAgICBRV2ViUGx1Z2luRmFj
dG9yeSAqcGx1Z2luRmFjdG9yeTsKKworICAgIGJvb2wgZm9yd2FyZFVuc3VwcG9ydGVkQ29udGVu
dDsKKyAgICBib29sIGluc2lkZU9wZW5DYWxsOworCitwcml2YXRlOgorICAgIFFOZXR3b3JrQWNj
ZXNzTWFuYWdlciAqbmV0d29ya01hbmFnZXI7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBk
cnRSdW47CisKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ7CisgICAg
ZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ7Cit9OworCisjZW5kaWYg
Ly8gUVdlYlBhZ2VBZGFwdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDhiY2EwNjkzNjc2NjhlZDcw
MjIxNjcwNzYwNDVlMjUzZGM3ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RV2ViVW5kb0NvbW1hbmQuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisjaW5jbHVkZSAiUVdlYlVuZG9Db21tYW5kLmgiCisjaW5jbHVkZSAiVW5kb1N0ZXBR
dC5oIgorCisjaWZuZGVmIFFUX05PX1VORE9DT01NQU5ECitRV2ViVW5kb0NvbW1hbmQ6OlFXZWJV
bmRvQ29tbWFuZChRU2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0PiB1bmRvU3RlcCwgUVVuZG9Db21t
YW5kKiBwYXJlbnQpCisgICAgOiBRVW5kb0NvbW1hbmQocGFyZW50KQorICAgICwgbV9zdGVwKHVu
ZG9TdGVwKQoreworICAgIFFfQVNTRVJUKHVuZG9TdGVwKTsKKyAgICBzZXRUZXh0KG1fc3RlcC0+
dGV4dCgpKTsKK30KKwordm9pZCBRV2ViVW5kb0NvbW1hbmQ6OnVuZG8oKQoreworICAgIG1fc3Rl
cC0+dW5kbygpOworfQorCit2b2lkIFFXZWJVbmRvQ29tbWFuZDo6cmVkbygpCit7CisgICAgbV9z
dGVwLT5yZWRvKCk7Cit9CisKKyNlbmRpZiAvLyBRVF9OT19VTkRPQ09NTUFORApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViVW5kb0NvbW1hbmQuaCBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWJhODUyZmMxZTM3OTllZDI5NWRiMzVjMWY1NjQ4NzRlMWMwZGEyOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmgK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdlYlVuZG9Db21tYW5kX2gKKyNk
ZWZpbmUgUVdlYlVuZG9Db21tYW5kX2gKKworI2luY2x1ZGUgPHFzaGFyZWRwb2ludGVyLmg+Cisj
aW5jbHVkZSA8cXVuZG9zdGFjay5oPgorCitjbGFzcyBVbmRvU3RlcFF0OworCisjaWZuZGVmIFFU
X05PX1VORE9DT01NQU5ECisKK2NsYXNzIFFXZWJVbmRvQ29tbWFuZCA6IHB1YmxpYyBRVW5kb0Nv
bW1hbmQKK3sKK3B1YmxpYzoKKyAgICBRV2ViVW5kb0NvbW1hbmQoUVNoYXJlZFBvaW50ZXI8VW5k
b1N0ZXBRdD4gdW5kb1N0ZXAsIFFVbmRvQ29tbWFuZCAqcGFyZW50ID0gMCk7CisKKyAgICB2b2lk
IHVuZG8oKTsKKyAgICB2b2lkIHJlZG8oKTsKKworcHJpdmF0ZToKKyAgICBRU2hhcmVkUG9pbnRl
cjxVbmRvU3RlcFF0PiBtX3N0ZXA7Cit9OworCisjZW5kaWYgLy8gUVRfTk9fVU5ET0NPTU1BTkQK
KworI2VuZGlmIC8vIFFXZWJVbmRvQ29tbWFuZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5JbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5ZDMy
NTZlMmFkNWY4MjY0MGFlYTk3MzQ0ZWQ0Mjc0OGI0NjdkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5JbXBsLmNwcApAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiUVdpZGdldFBsdWdpbkltcGwuaCIK
KworI2luY2x1ZGUgPFFXaWRnZXQ+CisKK1FXaWRnZXRQbHVnaW5JbXBsOjp+UVdpZGdldFBsdWdp
bkltcGwoKQoreworICAgICAgICBtX3dpZGdldC0+ZGVsZXRlTGF0ZXIoKTsKK30KKwordm9pZCBR
V2lkZ2V0UGx1Z2luSW1wbDo6dXBkYXRlKGNvbnN0IFFSZWN0ICZyZWN0KQoreworICAgIG1fd2lk
Z2V0LT51cGRhdGUocmVjdCk7Cit9CisKK3ZvaWQgUVdpZGdldFBsdWdpbkltcGw6OnNldEdlb21l
dHJ5QW5kQ2xpcChjb25zdCBRUmVjdCAmZ2VvbWV0cnksIGNvbnN0IFFSZWN0ICZjbGlwUmVjdCwg
Ym9vbCBpc1Zpc2libGUpCit7CisgICAgbV93aWRnZXQtPnNldEdlb21ldHJ5KGdlb21ldHJ5KTsK
KyAgICBpZiAoIWNsaXBSZWN0LmlzTnVsbCgpKSB7CisgICAgICAgIFFSZWN0IGNsaXAoY2xpcFJl
Y3QuaW50ZXJzZWN0ZWQobV93aWRnZXQtPnJlY3QoKSkpOworICAgICAgICBtX3dpZGdldC0+c2V0
TWFzayhRUmVnaW9uKGNsaXApKTsKKyAgICB9CisgICAgbV93aWRnZXQtPnVwZGF0ZSgpOworICAg
IHNldFZpc2libGUoaXNWaXNpYmxlKTsKK30KKwordm9pZCBRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0
VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgLy8gSWYgc2V0TWFzayBpcyBzZXQgd2l0aCBh
biBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCisgICAgLy8gYmUgcGVyZm9ybWVkLCBz
byBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGxhdGZvcm1XaWRnZXQuCisgICAgUVJlZ2lvbiBt
YXNrID0gbV93aWRnZXQtPm1hc2soKTsKKyAgICBtX3dpZGdldC0+c2V0VmlzaWJsZSh2aXNpYmxl
ICYmICFtYXNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgUVdpZGdldFBsdWdpbkltcGw6OnNldFN0
eWxlU2hlZXQoY29uc3QgUVN0cmluZyAmc3R5bGVzaGVldCkKK3sKKyAgICBtX3dpZGdldC0+c2V0
U3R5bGVTaGVldChzdHlsZXNoZWV0KTsKK30KKwordm9pZCBRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0
V2lkZ2V0UGFyZW50KFFPYmplY3QgKnBhcmVudCkKK3sKKyAgICBpZiAoIXBhcmVudC0+aXNXaWRn
ZXRUeXBlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dpZGdldC0+c2V0UGFyZW50KHFvYmpl
Y3RfY2FzdDxRV2lkZ2V0Kj4ocGFyZW50KSk7Cit9CisKK1FPYmplY3QgKlFXaWRnZXRQbHVnaW5J
bXBsOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZGdldDsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jMDNkODI2YWEzNjNjNDRlOTBlNzY0NDg1MmVjN2Q0OWExNWM1MzNhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0UGx1Z2lu
SW1wbC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEg
UGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFFXaWRnZXRQbHVnaW5J
bXBsX2gKKyNkZWZpbmUgUVdpZGdldFBsdWdpbkltcGxfaAorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgiCisKK1FUX0JFR0lOX05BTUVTUEFD
RQorY2xhc3MgUVdpZGdldDsKK1FUX0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVdpZGdldFBsdWdp
bkltcGwgOiBwdWJsaWMgUXRQbHVnaW5XaWRnZXRBZGFwdGVyIHsKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIFFXaWRnZXRQbHVnaW5JbXBsKFFXaWRnZXQgKncpIDogbV93aWRnZXQodykge30K
KyAgICB2aXJ0dWFsIH5RV2lkZ2V0UGx1Z2luSW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGUoY29uc3QgUVJlY3QgJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5
QW5kQ2xpcChjb25zdCBRUmVjdCYsIGNvbnN0IFFSZWN0JiwgYm9vbCBpc1Zpc2libGUpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0UGFyZW50KFFPYmplY3QgKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBRT2JqZWN0KiBoYW5kbGUoKSBjb25zdCBPVkVSUklERTsKK3ByaXZhdGU6CisgICAgUVdp
ZGdldCAqbV93aWRnZXQ7Cit9OworCisjZW5kaWYgLy9RV2lkZ2V0UGx1Z2luSW1wbF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1
cC5jcHAKaW5kZXggY2RjNmVlMGM5OTZkMDYzMjZkMTU1NzUxZGQ1ODk1OTVhZGU0NTI5Yi4uOGJm
ZmNmZTUyNTcxODRlMzcwMzAzMDcxNjEyNjY3ODlkNjZmNjZiNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcApAQCAt
MjMsMTggKzIzLDE4IEBACiAKICNpZm5kZWYgUVRfTk9fQ09NQk9CT1gKIAotI2luY2x1ZGUgIkNo
cm9tZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUXRXZWJDb21ib0JveC5oIgogI2luY2x1ZGUgIlFX
ZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAi
cWdyYXBoaWNzd2Vidmlldy5oIgogI2luY2x1ZGUgPFFHcmFwaGljc1Byb3h5V2lkZ2V0PgogI2lu
Y2x1ZGUgPFF0R3VpL1FTdGFuZGFyZEl0ZW1Nb2RlbD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1RdEZhbGxiYWNrV2ViUG9wdXA6OlF0RmFsbGJhY2tXZWJQb3B1cChjb25zdCBDaHJvbWVDbGll
bnRRdCogY2hyb21lQ2xpZW50KQorUXRGYWxsYmFja1dlYlBvcHVwOjpRdEZhbGxiYWNrV2ViUG9w
dXAoY29uc3QgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlKQogICAgIDogbV9jb21ibygwKQotICAgICwg
bV9jaHJvbWVDbGllbnQoY2hyb21lQ2xpZW50KQorICAgICwgbV9wYWdlKHBhZ2UpCiB7CiB9CiAK
QEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBRdEZhbGxiYWNrV2ViUG9wdXA6OnNob3coY29uc3QgUVdl
YlNlbGVjdERhdGEmIGRhdGEpCiAgICAgICAgIHByb3h5LT5zZXRXaWRnZXQobV9jb21ibyk7CiAg
ICAgICAgIHByb3h5LT5zZXRHZW9tZXRyeShyZWN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBt
X2NvbWJvLT5zZXRQYXJlbnQocGFnZUNsaWVudCgpLT5vd25lcldpZGdldCgpKTsKKyAgICAgICAg
bV9jb21iby0+c2V0UGFyZW50KHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ocGFnZUNsaWVudCgpLT5v
d25lcldpZGdldCgpKSk7CiAgICAgICAgIG1fY29tYm8tPnNldEdlb21ldHJ5KFFSZWN0KHJlY3Qu
bGVmdCgpLCByZWN0LnRvcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
d2lkdGgoKSwgbV9jb21iby0+c2l6ZUhpbnQoKS5oZWlnaHQoKSkpOwogICAgIH0KQEAgLTEzMSw3
ICsxMzEsNyBAQCB2b2lkIFF0RmFsbGJhY2tXZWJQb3B1cDo6ZGVsZXRlQ29tYm9Cb3goKQogCiBR
V2ViUGFnZUNsaWVudCogUXRGYWxsYmFja1dlYlBvcHVwOjpwYWdlQ2xpZW50KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9jaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIHJl
dHVybiBtX3BhZ2UtPmNsaWVudC5kYXRhKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmggYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oCmluZGV4IGY3NTMzNzNi
ZTQzNWRjOTNlOWM0ZGU2MGI0NzRkYjExOTQ4MzI0NGQuLjY5YjQ5YmRiZjg4NTE4NmFmNTQ1ZjZl
ZGJhMzkwYzY1NzU1NWYwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuaApAQCAtMjMsOCArMjMsNiBAQAogI2luY2x1ZGUg
InF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0j
aW5jbHVkZSA8UUNvbWJvQm94PgotCiAjaWZuZGVmIFFUX05PX0NPTUJPQk9YCiAKIFFUX0JFR0lO
X05BTUVTUEFDRQpAQCAtMzIsMTYgKzMwLDE2IEBAIGNsYXNzIFFHcmFwaGljc1Byb3h5V2lkZ2V0
OwogUVRfRU5EX05BTUVTUEFDRQogCiBjbGFzcyBRV2ViUGFnZUNsaWVudDsKK2NsYXNzIFFXZWJQ
YWdlQWRhcHRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDaHJvbWVDbGllbnRR
dDsKIGNsYXNzIFF0V2ViQ29tYm9Cb3g7CiAKIGNsYXNzIFF0RmFsbGJhY2tXZWJQb3B1cCA6IHB1
YmxpYyBRV2ViU2VsZWN0TWV0aG9kIHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAgIFF0RmFs
bGJhY2tXZWJQb3B1cChjb25zdCBDaHJvbWVDbGllbnRRdCopOworICAgIFF0RmFsbGJhY2tXZWJQ
b3B1cChjb25zdCBRV2ViUGFnZUFkYXB0ZXIqKTsKICAgICB+UXRGYWxsYmFja1dlYlBvcHVwKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBRV2ViU2VsZWN0RGF0YSYpOwpAQCAtNTks
NyArNTcsNyBAQCBwcml2YXRlIFFfU0xPVFM6CiAKIHByaXZhdGU6CiAgICAgUXRXZWJDb21ib0Jv
eCogbV9jb21ibzsKLSAgICBjb25zdCBDaHJvbWVDbGllbnRRdCogbV9jaHJvbWVDbGllbnQ7Cisg
ICAgY29uc3QgUVdlYlBhZ2VBZGFwdGVyKiBtX3BhZ2U7CiAgICAgUVJlY3QgbV9nZW9tZXRyeTsK
ICAgICBRRm9udCBtX2ZvbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCmluZGV4IDdkODY4OGI5NTllY2M3YjNiMTBlYmM1
OTAzZmJhY2Q0YjVjMmI0MWUuLjIzYjQwYjRhZTY1MWFiYmU1YzdmZTNmZTEyMWY0ZDhkYjA2ZWM1
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9y
bVBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRm
b3JtUGx1Z2luLmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKIAotI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKIAogI2lu
Y2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURpcj4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmggYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGx1Z2luV2lkZ2V0QWRhcHRlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc0ZTkzYzM0NzAwYWNkMjU4ODlkMzRjMjQxOWZhOTM0MmFkOGU2ZTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGx1Z2luV2lk
Z2V0QWRhcHRlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
RGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFF0UGx1Z2lu
V2lkZ2V0QWRhcHRlcl9oCisjZGVmaW5lIFF0UGx1Z2luV2lkZ2V0QWRhcHRlcl9oCisKKyNpbmNs
dWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFTdHJpbmc+CisjaW5jbHVkZSA8UVJlY3Q+CisKK2Ns
YXNzIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVD
VAorcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5QW5kQ2xpcChjb25zdCBRUmVjdCYsIGNvbnN0IFFS
ZWN0JiwgYm9vbCBpc1Zpc2libGUgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBR
U3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaWRnZXRQYXJlbnQoUU9iamVjdCop
ID0gMDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGhhbmRsZSgpIGNvbnN0ID0gMDsKK307CisKKyNl
bmRpZiAvLyBRdFBsdWdpbldpZGdldEFkYXB0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAppbmRleCBiZjlkZWQ0NjU4
ZDk0NTU2NTRhYWE3N2NkZjk0YzdhZTBmODM3YzlhLi5lYTZkNGQzMTU2MjAwNDQ4YTUxNDgyZDBh
MTBlN2M0ZDY0ZjIwNTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVk
ZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0j
aW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1VuZG9TdGVwUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRv
U3RlcFF0LmNwcAppbmRleCAxNWRmMmVlNTAyYzYxZjFjMTQ4ZGJjZTczMGE0MzkwOWQ2OTI2ZWRk
Li4xN2VmYTY2NjlkYjg0Y2E0NmRjYmZjNzMwZTcyZDgxOWY2OTM2OTdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVW5kb1N0ZXBRdC5jcHAKQEAgLTE5LDEwICsxOSwx
MCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVW5kb1N0ZXBRdC5oIgorI2lu
Y2x1ZGUgPHFvYmplY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNpZm5kZWYg
UVRfTk9fVU5ET0NPTU1BTkQKIHN0YXRpYyBRU3RyaW5nIHVuZG9OYW1lRm9yRWRpdEFjdGlvbihj
b25zdCBFZGl0QWN0aW9uIGVkaXRBY3Rpb24pCiB7CiAgICAgc3dpdGNoIChlZGl0QWN0aW9uKSB7
CkBAIC0xMDYsMjYgKzEwNiwxOCBAQCBzdGF0aWMgUVN0cmluZyB1bmRvTmFtZUZvckVkaXRBY3Rp
b24oY29uc3QgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQogICAgIHJldHVybiBRU3RyaW5nKCk7CiB9
CiAKLVVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+IHN0ZXAsIFFV
bmRvQ29tbWFuZCAqcGFyZW50KQotICAgIDogUVVuZG9Db21tYW5kKHBhcmVudCkKLSAgICAsIG1f
c3RlcChzdGVwKQotICAgICwgbV9maXJzdCh0cnVlKQotewotICAgIHNldFRleHQodW5kb05hbWVG
b3JFZGl0QWN0aW9uKHN0ZXAtPmVkaXRpbmdBY3Rpb24oKSkpOwotfQotI2Vsc2UKIFVuZG9TdGVw
UXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+IHN0ZXApCiAgICAgOiBtX3N0ZXAo
c3RlcCkKICAgICAsIG1fZmlyc3QodHJ1ZSkKIHsKKyAgICBtX3RleHQgPSB1bmRvTmFtZUZvckVk
aXRBY3Rpb24oc3RlcC0+ZWRpdGluZ0FjdGlvbigpKTsKIH0KLSNlbmRpZgorCiAKIFVuZG9TdGVw
UXQ6On5VbmRvU3RlcFF0KCkKIHsKIH0KIAotCiB2b2lkIFVuZG9TdGVwUXQ6OnJlZG8oKQogewog
ICAgIGlmIChtX2ZpcnN0KSB7CkBAIC0xNDUsMyArMTM3LDkgQEAgdm9pZCBVbmRvU3RlcFF0Ojp1
bmRvKCkKIAogCiAvLyB2aW06IHRzPTQgc3c9NCBldAorCisKK1FTdHJpbmcgVW5kb1N0ZXBRdDo6
dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dDsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVW5kb1N0ZXBRdC5oIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgKaW5kZXggM2MxNDM0MDNhNzdkZjI4ZGI5MTRj
MmNmMzg5ODQzZWU2M2UxMWMxZi4uMzQ2NzNlYTQ1ZWYxN2QzMWYwYjdjMTM4Y2FkOWRhYmM4ODFh
YzliNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3Rl
cFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgK
QEAgLTIwLDI5ICsyMCwyNSBAQAogI2lmbmRlZiBVbmRvU3RlcFF0X2gKICNkZWZpbmUgVW5kb1N0
ZXBRdF9oCiAKLSNpbmNsdWRlIDxRVW5kb0NvbW1hbmQ+CisjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSA8VW5kb1N0ZXAuaD4KKworI2luY2x1ZGUgPHFzdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAKLWNsYXNzIFVuZG9TdGVwUXQKLSNpZm5kZWYgUVRfTk9fVU5ET0NPTU1B
TkQKLSAgICA6IHB1YmxpYyBRVW5kb0NvbW1hbmQKLSNlbmRpZgoteworY2xhc3MgVW5kb1N0ZXBR
dCB7CiAgICAgcHVibGljOgotI2lmbmRlZiBRVF9OT19VTkRPQ09NTUFORAotICAgICAgICBVbmRv
U3RlcFF0KFdURjo6UmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwLCBRVW5kb0NvbW1hbmQg
KnBhcmVudCA9IDApOwotI2Vsc2UKICAgICAgICAgVW5kb1N0ZXBRdChXVEY6OlJlZlB0cjxXZWJD
b3JlOjpVbmRvU3RlcD4gc3RlcCk7Ci0jZW5kaWYKICAgICAgICAgflVuZG9TdGVwUXQoKTsKIAog
ICAgICAgICB2b2lkIHJlZG8oKTsKICAgICAgICAgdm9pZCB1bmRvKCk7CisgICAgICAgIFFTdHJp
bmcgdGV4dCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgV1RGOjpSZWZQdHI8V2Vi
Q29yZTo6VW5kb1N0ZXA+IG1fc3RlcDsKICAgICAgICAgYm9vbCBtX2ZpcnN0OworICAgICAgICBR
U3RyaW5nIG1fdGV4dDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCmluZGV4IGQ2MTU5MjQxZTRm
YzY0ZTk3Zjc1NzBiNWUwNDMyYWIzYzI0MzQ5MDMuLjQ0NDljMTU1NzBlZWRiM2E5ZThmZWU0OTY5
NjAzMDRlNDFjMzhlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTI3LDEzICsyNyw4IEBACiAjaW5jbHVk
ZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Ub3VjaFBvaW50Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgotI2luY2x1ZGUgPFFHZXN0dXJlPgotI2luY2x1ZGUgPFFHZXN0dXJlRXZlbnQ+Ci0jaW5jbHVk
ZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgogI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgogI2lu
Y2x1ZGUgPFFXaGVlbEV2ZW50PgotI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDU0ICs0OCwyOCBAQCBz
dGF0aWMgdm9pZCBtb3VzZUV2ZW50TW9kaWZpZXJzRnJvbVF0S2V5Ym9hcmRNb2RpZmllcnMoUXQ6
OktleWJvYXJkTW9kaWZpZXJzIGtleQogCiBzdGF0aWMgdm9pZCBtb3VzZUV2ZW50VHlwZUFuZE1v
dXNlQnV0dG9uRnJvbVFFdmVudChjb25zdCBRRXZlbnQqIGV2ZW50LCBQbGF0Zm9ybUV2ZW50OjpU
eXBlJiBtb3VzZUV2ZW50VHlwZSwgTW91c2VCdXR0b24mIG1vdXNlQnV0dG9uKQogewotICAgIGVu
dW0geyBNb3VzZUV2ZW50LCBHcmFwaGljc1NjZW5lTW91c2VFdmVudCB9IGZyYW1ld29ya01vdXNl
RXZlbnRUeXBlOwogICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUoKSkgewogICAgIGNhc2UgUUV2ZW50
OjpNb3VzZUJ1dHRvbkRibENsaWNrOgogICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNz
OgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IE1vdXNlRXZlbnQ7CiAgICAgICAg
IG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgotICAgICAgICBmcmFt
ZXdvcmtNb3VzZUV2ZW50VHlwZSA9IE1vdXNlRXZlbnQ7CiAgICAgICAgIG1vdXNlRXZlbnRUeXBl
ID0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBRRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVudFR5cGUgPSBN
b3VzZUV2ZW50OwotICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
TW92ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91
c2VEb3VibGVDbGljazoKLSAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlUHJlc3M6
Ci0gICAgICAgIGZyYW1ld29ya01vdXNlRXZlbnRUeXBlID0gR3JhcGhpY3NTY2VuZU1vdXNlRXZl
bnQ7Ci0gICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2Vk
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlUmVs
ZWFzZToKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVudFR5cGUgPSBHcmFwaGljc1NjZW5lTW91
c2VFdmVudDsKLSAgICAgICAgbW91c2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJl
bGVhc2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1v
dXNlTW92ZToKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVudFR5cGUgPSBHcmFwaGljc1NjZW5l
TW91c2VFdmVudDsKICAgICAgICAgbW91c2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3Vz
ZU1vdmVkOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVudFR5cGUgPSBNb3VzZUV2ZW50
OwogICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFF0OjpNb3VzZUJ1dHRvbnMgbW91c2VCdXR0b25z
OwotICAgIHN3aXRjaCAoZnJhbWV3b3JrTW91c2VFdmVudFR5cGUpIHsKLSAgICBjYXNlIE1vdXNl
RXZlbnQ6IHsKLSAgICAgICAgY29uc3QgUU1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBRTW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgbW91c2VCdXR0b25zID0g
bW91c2VFdmVudFR5cGUgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCA/IG1vdXNlRXZlbnQt
PmJ1dHRvbnMoKSA6IG1vdXNlRXZlbnQtPmJ1dHRvbigpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBHcmFwaGljc1NjZW5lTW91c2VFdmVudDogewotICAgICAgICBjb25zdCBRR3Jh
cGhpY3NTY2VuZU1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBRR3Jh
cGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIG1vdXNlQnV0dG9ucyA9IG1v
dXNlRXZlbnRUeXBlID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQgPyBtb3VzZUV2ZW50LT5i
dXR0b25zKCkgOiBtb3VzZUV2ZW50LT5idXR0b24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0KKworICAgIGNvbnN0IFFNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgUU1vdXNlRXZlbnQqPihldmVudCk7CisgICAgbW91c2VCdXR0b25zID0gbW91c2VFdmVu
dFR5cGUgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCA/IG1vdXNlRXZlbnQtPmJ1dHRvbnMo
KSA6IG1vdXNlRXZlbnQtPmJ1dHRvbigpOworCiAKICAgICBpZiAobW91c2VCdXR0b25zICYgUXQ6
OkxlZnRCdXR0b24pCiAgICAgICAgIG1vdXNlQnV0dG9uID0gTGVmdEJ1dHRvbjsKQEAgLTExNCwy
NyArODMsOSBAQCBzdGF0aWMgdm9pZCBtb3VzZUV2ZW50VHlwZUFuZE1vdXNlQnV0dG9uRnJvbVFF
dmVudChjb25zdCBRRXZlbnQqIGV2ZW50LCBQbGF0Zm9ybQogCiBjbGFzcyBXZWJLaXRQbGF0Zm9y
bU1vdXNlRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKIHB1YmxpYzoKLSAgICBX
ZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiwgaW50IGNs
aWNrQ291bnQpOwogICAgIFdlYktpdFBsYXRmb3JtTW91c2VFdmVudChRSW5wdXRFdmVudCosIGlu
dCBjbGlja0NvdW50KTsKIH07CiAKLVdlYktpdFBsYXRmb3JtTW91c2VFdmVudDo6V2ViS2l0UGxh
dGZvcm1Nb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQsIGludCBjbGlj
a0NvdW50KQotewotICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJyZW50VGltZSgpOwotCi0gICAg
Ly8gRklYTUU6IFdoeSBkb24ndCB3ZSBoYW5kbGUgYSBjb250ZXh0IG1lbnUgZXZlbnQgaGVyZSBh
cyB3ZSBkbyBpbiBQbGF0Zm9ybU1vdXNlRXZlbnQoUUlucHV0RXZlbnQqLCBpbnQpPwotICAgIC8v
IFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzI4Pi4KLSAg
ICBQbGF0Zm9ybUV2ZW50OjpUeXBlIHR5cGU7Ci0gICAgbW91c2VFdmVudFR5cGVBbmRNb3VzZUJ1
dHRvbkZyb21RRXZlbnQoZXZlbnQsIHR5cGUsIG1fYnV0dG9uKTsKLQotICAgIG1fdHlwZSA9IHR5
cGU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KGV2ZW50LT5wb3MoKS50b1BvaW50KCkpOwot
ICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChldmVudC0+c2NyZWVuUG9zKCkpOwotCi0g
ICAgbV9jbGlja0NvdW50ID0gY2xpY2tDb3VudDsKLSAgICBtb3VzZUV2ZW50TW9kaWZpZXJzRnJv
bVF0S2V5Ym9hcmRNb2RpZmllcnMoZXZlbnQtPm1vZGlmaWVycygpLCBtX21vZGlmaWVycyk7Ci19
Ci0KIFdlYktpdFBsYXRmb3JtTW91c2VFdmVudDo6V2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50KFFJ
bnB1dEV2ZW50KiBldmVudCwgaW50IGNsaWNrQ291bnQpCiB7CiAgICAgbV90aW1lc3RhbXAgPSBX
VEY6OmN1cnJlbnRUaW1lKCk7CkBAIC0xNjksMjEgKzEyMCwxNSBAQCBQbGF0Zm9ybU1vdXNlRXZl
bnQgY29udmVydE1vdXNlRXZlbnQoUUlucHV0RXZlbnQqIGV2ZW50LCBpbnQgY2xpY2tDb3VudCkK
ICAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBjbGlja0NvdW50KTsK
IH0KIAotUGxhdGZvcm1Nb3VzZUV2ZW50IGNvbnZlcnRNb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5l
TW91c2VFdmVudCogZXZlbnQsIGludCBjbGlja0NvdW50KQotewotICAgIHJldHVybiBXZWJLaXRQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIGNsaWNrQ291bnQpOwotfQotCiBjbGFzcyBXZWJLaXRQ
bGF0Zm9ybVdoZWVsRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1XaGVlbEV2ZW50IHsKIHB1YmxpYzoK
LSAgICBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoUUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50Kik7
Ci0gICAgV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50Kik7CisgICAgV2ViS2l0
UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiwgaW50IHdoZWVsU2Nyb2xsTGluZXMpOwog
CiBwcml2YXRlOgotICAgIHZvaWQgYXBwbHlEZWx0YShpbnQgZGVsdGEsIFF0OjpPcmllbnRhdGlv
bik7CisgICAgdm9pZCBhcHBseURlbHRhKGludCBkZWx0YSwgUXQ6Ok9yaWVudGF0aW9uLCBpbnQg
d2hlZWxTY3JvbGxMaW5lcyk7CiB9OwogCi12b2lkIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudDo6
YXBwbHlEZWx0YShpbnQgZGVsdGEsIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3ZvaWQg
V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjphcHBseURlbHRhKGludCBkZWx0YSwgUXQ6Ok9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBpbnQgd2hlZWxTY3JvbGxMaW5lcykKIHsKICAgICBpZiAob3Jp
ZW50YXRpb24gPT0gUXQ6Okhvcml6b250YWwpIHsKICAgICAgICAgbV9kZWx0YVggPSBkZWx0YTsK
QEAgLTE5OCwyMiArMTQzLDExIEBAIHZvaWQgV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjphcHBs
eURlbHRhKGludCBkZWx0YSwgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uCiAgICAgLy8gU2lu
Y2Ugd2UgcmVxdWVzdCB0aGUgc2Nyb2xsIGRlbHRhIGJ5IHRoZSBwaXhlbCwgY29udmVydCB0aGUg
d2hlZWwgZGVsdGEgdG8gcGl4ZWwgZGVsdGEgdXNpbmcgdGhlIHN0YW5kYXJkIHNjcm9sbCBzdGVw
LgogICAgIC8vIFVzZSB0aGUgc2FtZSBzaW5nbGUgc2Nyb2xsIHN0ZXAgYXMgUVRleHRFZGl0IChp
biBRVGV4dEVkaXRQcml2YXRlOjppbml0IFtoLHZdYmFyLT5zZXRTaW5nbGVTdGVwKQogICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBjRGVmYXVsdFF0U2Nyb2xsU3RlcCA9IDIwLmY7Ci0gICAgbV9kZWx0
YVggPSBtX3doZWVsVGlja3NYICogUUFwcGxpY2F0aW9uOjp3aGVlbFNjcm9sbExpbmVzKCkgKiBj
RGVmYXVsdFF0U2Nyb2xsU3RlcDsKLSAgICBtX2RlbHRhWSA9IG1fd2hlZWxUaWNrc1kgKiBRQXBw
bGljYXRpb246OndoZWVsU2Nyb2xsTGluZXMoKSAqIGNEZWZhdWx0UXRTY3JvbGxTdGVwOworICAg
IG1fZGVsdGFYID0gbV93aGVlbFRpY2tzWCAqIHdoZWVsU2Nyb2xsTGluZXMgKiBjRGVmYXVsdFF0
U2Nyb2xsU3RlcDsKKyAgICBtX2RlbHRhWSA9IG1fd2hlZWxUaWNrc1kgKiB3aGVlbFNjcm9sbExp
bmVzICogY0RlZmF1bHRRdFNjcm9sbFN0ZXA7CiB9CiAKLVdlYktpdFBsYXRmb3JtV2hlZWxFdmVu
dDo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCogZSkK
LXsKLSAgICBtX3RpbWVzdGFtcCA9IFdURjo6Y3VycmVudFRpbWUoKTsKLSAgICBtb3VzZUV2ZW50
TW9kaWZpZXJzRnJvbVF0S2V5Ym9hcmRNb2RpZmllcnMoZS0+bW9kaWZpZXJzKCksIG1fbW9kaWZp
ZXJzKTsKLSAgICBtX3Bvc2l0aW9uID0gZS0+cG9zKCkudG9Qb2ludCgpOwotICAgIG1fZ2xvYmFs
UG9zaXRpb24gPSBlLT5zY3JlZW5Qb3MoKTsKLSAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQ
aXhlbFdoZWVsRXZlbnQ7Ci0gICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBmYWxz
ZTsKLSAgICBhcHBseURlbHRhKGUtPmRlbHRhKCksIGUtPm9yaWVudGF0aW9uKCkpOwotfQotCi1X
ZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6OldlYktpdFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxF
dmVudCogZSkKK1dlYktpdFBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2
ZW50KFFXaGVlbEV2ZW50KiBlLCBpbnQgd2hlZWxTY3JvbGxMaW5lcykKIHsKICAgICBtX3RpbWVz
dGFtcCA9IFdURjo6Y3VycmVudFRpbWUoKTsKICAgICBtb3VzZUV2ZW50TW9kaWZpZXJzRnJvbVF0
S2V5Ym9hcmRNb2RpZmllcnMoZS0+bW9kaWZpZXJzKCksIG1fbW9kaWZpZXJzKTsKQEAgLTIyMSw3
ICsxNTUsNyBAQCBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6OldlYktpdFBsYXRmb3JtV2hlZWxF
dmVudChRV2hlZWxFdmVudCogZSkKICAgICBtX2dsb2JhbFBvc2l0aW9uID0gZS0+Z2xvYmFsUG9z
KCk7CiAgICAgbV9ncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwogICAgIG1f
ZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gZmFsc2U7Ci0gICAgYXBwbHlEZWx0YShlLT5k
ZWx0YSgpLCBlLT5vcmllbnRhdGlvbigpKTsKKyAgICBhcHBseURlbHRhKGUtPmRlbHRhKCksIGUt
Pm9yaWVudGF0aW9uKCksIHdoZWVsU2Nyb2xsTGluZXMpOwogfQogCiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKQEAgLTMwOSw0MyArMjQzLDM1IEBAIFdlYktpdFBsYXRmb3JtVG91Y2hQb2ludDo6
V2ViS2l0UGxhdGZvcm1Ub3VjaFBvaW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50CiAj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQogY2xhc3MgV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZl
bnQgOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlRXZlbnQgewogcHVibGljOgotICAgIFdlYktpdFBs
YXRmb3JtR2VzdHVyZUV2ZW50KGNvbnN0IFFHZXN0dXJlRXZlbnQqLCBjb25zdCBRR2VzdHVyZSop
OworICAgIFdlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZlbnRGYWNhZGUqKTsK
IH07CiAKLVdlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpXZWJLaXRQbGF0Zm9ybUdlc3R1cmVF
dmVudChjb25zdCBRR2VzdHVyZUV2ZW50KiBldmVudCwgY29uc3QgUUdlc3R1cmUqIGdlc3R1cmUp
CitzdGF0aWMgaW5saW5lIFBsYXRmb3JtRXZlbnQ6OlR5cGUgdG9QbGF0Zm9ybUV2ZW50VHlwZShR
dDo6R2VzdHVyZVR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2ggKGdlc3R1cmUtPmdlc3R1cmVUeXBl
KCkpIHsKLSAgICBjYXNlIFF0OjpUYXBHZXN0dXJlOiB7Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRm
b3JtRXZlbnQ6Okdlc3R1cmVUYXA7Ci0gICAgICAgIFFQb2ludEYgZ2xvYmFsUG9zID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgUVRhcEdlc3R1cmUqPihnZXN0dXJlKS0+cG9zaXRpb24oKTsKLSAgICAgICAg
bV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvcy50b1BvaW50KCk7Ci0gICAgICAgIG1fcG9zaXRp
b24gPSBldmVudC0+d2lkZ2V0KCktPm1hcEZyb21HbG9iYWwoZ2xvYmFsUG9zLnRvUG9pbnQoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFF0OjpUYXBBbmRIb2xkR2VzdHVyZTog
ewotICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOwotICAg
ICAgICBRUG9pbnRGIGdsb2JhbFBvcyA9IHN0YXRpY19jYXN0PGNvbnN0IFFUYXBBbmRIb2xkR2Vz
dHVyZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOwotICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0g
Z2xvYmFsUG9zLnRvUG9pbnQoKTsKLSAgICAgICAgbV9wb3NpdGlvbiA9IGV2ZW50LT53aWRnZXQo
KS0+bWFwRnJvbUdsb2JhbChnbG9iYWxQb3MudG9Qb2ludCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUXQ6OlRhcEdlc3R1cmU6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOworICAgIGNhc2UgUXQ6OlRhcEFu
ZEhvbGRHZXN0dXJlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6R2VzdHVyZUxvbmdQ
cmVzczsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpOb1R5cGU7CiAgICAgfQot
ICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJyZW50VGltZSgpOwogfQogCi0jZW5kaWYKLQotUGxh
dGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldmVudCkKK1dl
YktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpXZWJLaXRQbGF0Zm9ybUdlc3R1cmVFdmVudChRR2Vz
dHVyZUV2ZW50RmFjYWRlKiBldmVudCkKIHsKLSAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1XaGVl
bEV2ZW50KGV2ZW50KTsKKyAgICBtX3R5cGUgPSB0b1BsYXRmb3JtRXZlbnRUeXBlKGV2ZW50LT50
eXBlKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gZXZlbnQtPmdsb2JhbFBvczsKKyAgICBtX3Bv
c2l0aW9uID0gZXZlbnQtPnBvczsKKyAgICBtX3RpbWVzdGFtcCA9IFdURjo6Y3VycmVudFRpbWUo
KTsKIH0KIAotUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFHcmFwaGljc1Nj
ZW5lV2hlZWxFdmVudCogZXZlbnQpCisjZW5kaWYKKworUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZl
cnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldmVudCwgaW50IHdoZWVsU2Nyb2xsTGluZXMpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudChldmVudCk7CisgICAgcmV0dXJu
IFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudChldmVudCwgd2hlZWxTY3JvbGxMaW5lcyk7CiB9CiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzU2LDEwICsyODIsOSBAQCBQbGF0Zm9ybVRv
dWNoRXZlbnQgY29udmVydFRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCi1QbGF0Zm9ybUdlc3R1cmVFdmVudCBjb252ZXJ0
R2VzdHVyZShRR2VzdHVyZUV2ZW50KiBldmVudCwgUUdlc3R1cmUqIGdlc3R1cmUpCitQbGF0Zm9y
bUdlc3R1cmVFdmVudCBjb252ZXJ0R2VzdHVyZShRR2VzdHVyZUV2ZW50RmFjYWRlKiBldmVudCkK
IHsKLSAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQoZXZlbnQsIGdlc3R1cmUp
OworICAgIHJldHVybiBXZWJLaXRQbGF0Zm9ybUdlc3R1cmVFdmVudChldmVudCk7CiB9CiAjZW5k
aWYKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJF
dmVudENvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZl
bnRDb252ZXJzaW9uLmgKaW5kZXggMzIyNGVlZTkwOTZmZWQ0ZTU0MjdhN2NkZTUwMjUzMTBiZTBj
MmRiYy4uOTEzNWUzYjkwODcwZjE1ZmQ2ZWNiODJmZDcxZDU2Y2Y2OTJkMmVmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5o
CkBAIC0yMCwyNiArMjAsMjcgQEAKICovCiAKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CisjaW5jbHVk
ZSA8UVBvaW50PgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFJbnB1dEV2ZW50OwotY2xh
c3MgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50OwogY2xhc3MgUVdoZWVsRXZlbnQ7Ci1jbGFzcyBR
R3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQ7CiBjbGFzcyBRVG91Y2hFdmVudDsKLWNsYXNzIFFHZXN0
dXJlOwotY2xhc3MgUUdlc3R1cmVFdmVudDsKIFFUX0VORF9OQU1FU1BBQ0UKIAorc3RydWN0IFFH
ZXN0dXJlRXZlbnRGYWNhZGUgeworICAgIFF0OjpHZXN0dXJlVHlwZSB0eXBlOworICAgIFFQb2lu
dCBnbG9iYWxQb3M7CisgICAgUVBvaW50IHBvczsKK307CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50Owog
CiBQbGF0Zm9ybU1vdXNlRXZlbnQgY29udmVydE1vdXNlRXZlbnQoUUlucHV0RXZlbnQqLCBpbnQg
Y2xpY2tDb3VudCk7Ci1QbGF0Zm9ybU1vdXNlRXZlbnQgY29udmVydE1vdXNlRXZlbnQoUUdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50KiwgaW50IGNsaWNrQ291bnQpOwotUGxhdGZvcm1XaGVlbEV2ZW50
IGNvbnZlcnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50Kik7Ci1QbGF0Zm9ybVdoZWVsRXZlbnQgY29u
dmVydFdoZWVsRXZlbnQoUUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50Kik7CitQbGF0Zm9ybVdoZWVs
RXZlbnQgY29udmVydFdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqLCBpbnQgd2hlZWxTY3JvbGxMaW5l
cyk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50
OwpAQCAtNDgsNiArNDksNiBAQCBQbGF0Zm9ybVRvdWNoRXZlbnQgY29udmVydFRvdWNoRXZlbnQo
UVRvdWNoRXZlbnQqKTsKIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKIGNsYXNzIFBsYXRm
b3JtR2VzdHVyZUV2ZW50OwotUGxhdGZvcm1HZXN0dXJlRXZlbnQgY29udmVydEdlc3R1cmUoUUdl
c3R1cmVFdmVudCosIFFHZXN0dXJlKik7CitQbGF0Zm9ybUdlc3R1cmVFdmVudCBjb252ZXJ0R2Vz
dHVyZShRR2VzdHVyZUV2ZW50RmFjYWRlKik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcAppbmRleCBmZjQwYjU1ZjAzOWJh
NzUyMmE5YWYzMzJiMWRkZjM3OTc4ZTkzNmM3Li5mZDgyYzI4NzYxNGM5MWVhNjc5MjUxOGY4Njc5
NWU3MjIzNDFiYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdl
L3RzdF9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90
c3RfcXdlYnBhZ2UuY3BwCkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6Omxv
YWRIdG1sNVZpZGVvKCkKICAgICBRQnl0ZUFycmF5IHVybCgiaHR0cDovL2RvZXMubm90L2V4aXN0
P2E9MSUyQ2I9MiIpOwogICAgIG1fdmlldy0+c2V0SHRtbCgiPHA+PHZpZGVvIGlkID0ndmlkZW8n
IHNyYz0nIiArIHVybCArICInIGF1dG9wbGF5Lz48L3A+Iik7CiAgICAgUVRlc3Q6OnFXYWl0KDIw
MDApOwotICAgIFFVcmwgbVVybCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjptZWRpYUNvbnRl
bnRVcmxCeUVsZW1lbnRJZChtX3BhZ2UtPm1haW5GcmFtZSgpLCAidmlkZW8iKTsKKyAgICBRVXJs
IG1VcmwgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bWVkaWFDb250ZW50VXJsQnlFbGVtZW50
SWQobV9wYWdlLT5tYWluRnJhbWUoKS0+aGFuZGxlKCksICJ2aWRlbyIpOwogICAgIFFFWFBFQ1Rf
RkFJTCgiIiwgImh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ1MiIs
IENvbnRpbnVlKTsKICAgICBRQ09NUEFSRShtVXJsLnRvRW5jb2RlZCgpLCB1cmwpOwogI2Vsc2UK
QEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6Om11bHRpcGxlUGFnZUdy
b3Vwc0FuZExvY2FsU3RvcmFnZSgpCiAKICAgICB2aWV3MS5wYWdlKCktPnNldHRpbmdzKCktPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3RvcmFnZUVuYWJsZWQsIHRydWUpOwogICAg
IHZpZXcxLnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0TG9jYWxTdG9yYWdlUGF0aChRRGlyOjp0b05h
dGl2ZVNlcGFyYXRvcnModG1wRGlyUGF0aCgpICsgIi9wYXRoMSIpKTsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZSh2aWV3MS5wYWdlKCksICJncm91cDEi
KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZSh2aWV3
MS5wYWdlKCktPmhhbmRsZSgpLCAiZ3JvdXAxIik7CiAgICAgdmlldzIucGFnZSgpLT5zZXR0aW5n
cygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbFN0b3JhZ2VFbmFibGVkLCB0cnVl
KTsgICAgCiAgICAgdmlldzIucGFnZSgpLT5zZXR0aW5ncygpLT5zZXRMb2NhbFN0b3JhZ2VQYXRo
KFFEaXI6OnRvTmF0aXZlU2VwYXJhdG9ycyh0bXBEaXJQYXRoKCkgKyAiL3BhdGgyIikpOwotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHZpZXcyLnBhZ2Uo
KSwgImdyb3VwMiIpOwotICAgIFFDT01QQVJFKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQ
YWdlR3JvdXBOYW1lKHZpZXcxLnBhZ2UoKSksIFFTdHJpbmcoImdyb3VwMSIpKTsKLSAgICBRQ09N
UEFSRShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZSh2aWV3Mi5wYWdl
KCkpLCBRU3RyaW5nKCJncm91cDIiKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Ondl
YlBhZ2VTZXRHcm91cE5hbWUodmlldzIucGFnZSgpLT5oYW5kbGUoKSwgImdyb3VwMiIpOworICAg
IFFDT01QQVJFKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBOYW1lKHZpZXcx
LnBhZ2UoKS0+aGFuZGxlKCkpLCBRU3RyaW5nKCJncm91cDEiKSk7CisgICAgUUNPTVBBUkUoRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VHcm91cE5hbWUodmlldzIucGFnZSgpLT5oYW5k
bGUoKSksIFFTdHJpbmcoImdyb3VwMiIpKTsKIAogCiAgICAgdmlldzEuc2V0SHRtbChRU3RyaW5n
KCI8aHRtbD48Ym9keT4gPC9ib2R5PjwvaHRtbD4iKSwgUVVybCgiaHR0cDovL3d3dy5teWV4YW1w
bGUuY29tIikpOwpAQCAtMzA2MiwzNSArMzA2MiwzNSBAQCB2b2lkIHRzdF9RV2ViUGFnZTo6dGhp
cmRQYXJ0eUNvb2tpZVBvbGljeSgpCiAgICAgUVZFUklGWShtX3BhZ2UtPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCktPmNvb2tpZUphcigpKTsKIAogICAgIC8vIFRoZXNlIGFyZSBhbGwgZmlyc3QtcGFy
dHkgY29va2llcywgc28gc2hvdWxkIHBhc3MuCi0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklG
WShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5leGFtcGxlLmNv
bSIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jb20iKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAg
IFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lB
bGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhh
bXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2RvYy5leGFtcGxlLmNvbSIpKSk7Ci0gICAgUVZFUklG
WShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNv
b2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0
cDovL2FhYS53d3cuZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2RvYy5leGFtcGxlLmNvbSIp
KSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAg
ICAgICAgUVVybCgiaHR0cDovL2V4YW1wbGUuY29tIiksIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBs
ZS5jb20iKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFy
dHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwK
ICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRw
Oi8vZXhhbXBsZS5jby51ayIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2Ut
PmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5leGFtcGxlLmNvLnVrIiks
IFFVcmwoImh0dHA6Ly9kb2MuZXhhbXBsZS5jby51ayIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisg
ICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2FhYS53
d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZG9jLmV4YW1wbGUuY28udWsiKSkpOwot
ICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xp
Y3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRo
aXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAg
IFFVcmwoImh0dHA6Ly9leGFtcGxlLmNvLnVrIiksIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5j
by51ayIpKSk7CiAKICAgICAvLyBUaGVzZSBhcmUgYWxsIHRoaXJkLXBhcnR5IGNvb2tpZXMsIHNv
IHNob3VsZCBmYWlsLgotICAgIFFWRVJJRlkoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGly
ZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKG1fcGFnZSwKKyAgICBRVkVSSUZZKCFEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRs
ZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLCBRVXJsKCJo
dHRwOi8vc2xhc2hkb3Qub3JnIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSgh
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9w
YWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9leGFtcGxlLmNvbSIpLCBR
VXJsKCJodHRwOi8vYW5vdGhlcmV4YW1wbGUuY29tIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisg
ICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xp
Y3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9hbm90
aGVyZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2V4YW1wbGUuY29tIikpKTsKLSAgICBRVkVS
SUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93
cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFy
dHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwo
Imh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vc2xhc2hkb3QuY28udWsi
KSkpOwotICAgIFFWRVJJRlkoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29v
a2llUG9saWN5QWxsb3dzKG1fcGFnZSwKKyAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAg
ICAgICAgICAgUVVybCgiaHR0cDovL2V4YW1wbGUuY28udWsiKSwgUVVybCgiaHR0cDovL2Fub3Ro
ZXJleGFtcGxlLmNvLnVrIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdl
LT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9hbm90aGVyZXhhbXBsZS5jby51
ayIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jby51ayIpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL3F0L01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3Bw
CmluZGV4IDFlMWNlMmIzZDAxNWFkMzgwNTJjOWVmNTA2MTg4ZGUzOTRhYzQ1MzYuLjA5OTBjMDFm
ODcyNDhmNWMwNTQyMjBjYWJiMTg5ZDc0NGEyMzYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL3F0L01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcApAQCAt
NDIsOSArNDIsMTAgQEAgdHlwZWRlZiBRQXBwbGljYXRpb24gQXBwbGljYXRpb25UeXBlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIFFfREVDTF9JTVBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1
aUFwcGxpY2F0aW9uKik7Ci0jaWYgZGVmaW5lZChIQVZFX1dFQktJVDEpCi1RX0RFQ0xfSU1QT1JU
IHZvaWQgaW5pdGlhbGl6ZVdlYktpdDJUaGVtZSgpOworI2lmICFkZWZpbmVkKFFUX05PX1dJREdF
VFMpCitRX0RFQ0xfSU1QT1JUIHZvaWQgaW5pdGlhbGl6ZVdlYktpdFdpZGdldHMoKTsKICNlbmRp
ZgorUV9ERUNMX0lNUE9SVCB2b2lkIGluaXRpYWxpemVXZWJLaXRRdCgpOwogfQogCiAjaWYgIWRl
ZmluZWQoTkRFQlVHKSAmJiBkZWZpbmVkKFFfT1NfVU5JWCkKQEAgLTgyLDE1ICs4MywyMyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgfQogI2VuZGlmCiAKLSNpZiBkZWZp
bmVkKEhBVkVfV0VCS0lUMSkKLSAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXQyVGhlbWUoKTsK
LSNlbmRpZgotCiAgICAgLy8gSGFzIHRvIGJlIGRvbmUgYmVmb3JlIFFBcHBsaWNhdGlvbiBpcyBj
b25zdHJ1Y3RlZCBpbiBjYXNlCiAgICAgLy8gUUFwcGxpY2F0aW9uIGl0c2VsZiBwcm9kdWNlcyBk
ZWJ1ZyBvdXRwdXQuCiAgICAgUUJ5dGVBcnJheSBzdXBwcmVzc091dHB1dCA9IHFnZXRlbnYoIlFU
X1dFQktJVF9TVVBQUkVTU19XRUJfUFJPQ0VTU19PVVRQVVQiKTsKICAgICBpZiAoIXN1cHByZXNz
T3V0cHV0LmlzRW1wdHkoKSAmJiBzdXBwcmVzc091dHB1dCAhPSAiMCIpCiAgICAgICAgIHFJbnN0
YWxsTWVzc2FnZUhhbmRsZXIobWVzc2FnZUhhbmRsZXIpOwogCi0gICAgcmV0dXJuIFdlYktpdDo6
V2ViUHJvY2Vzc01haW5RdChuZXcgQXBwbGljYXRpb25UeXBlKGFyZ2MsIGFyZ3YpKTsKKyAgICAv
LyBRQXBwbGljYXRpb24gbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB3ZSBjYWxsIGluaXRpYWxpemVX
ZWJLaXRXaWRnZXRzKCkgc28gdGhhdAorICAgIC8vIHRoZSBzdGFuZGFyZCBwaXhtYXBzIGNhbiBi
ZSBmZXRjaGVkIGZyb20gdGhlIHN0eWxlLgorICAgIEFwcGxpY2F0aW9uVHlwZSogYXBwSW5zdGFu
Y2UgPSBuZXcgQXBwbGljYXRpb25UeXBlKGFyZ2MsIGFyZ3YpOworCisjaWYgIWRlZmluZWQoUVRf
Tk9fV0lER0VUUykKKyAgICBpZiAocWdldGVudigiUVRfV0VCS0lUX1RIRU1FX05BTUUiKSA9PSAi
cXN0eWxlIikKKyAgICAgICAgV2ViS2l0Ojppbml0aWFsaXplV2ViS2l0V2lkZ2V0cygpOworICAg
IGVsc2UKKyNlbmRpZgorICAgICAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRRdCgpOworCisK
KyAgICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KGFwcEluc3RhbmNlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9hcGkucHJpIGIvU291cmNlL2FwaS5wcmkKaW5kZXggYTQ3YjczNTlk
ZThmOGI3OWMxYjc5MDNjYzBjOTA4NTU5ZDI5YWFiYi4uZjZjM2MzYzc1Zjc2ZjIwZGVlMTUzZDhj
NDYyMDU5NDYzOGYxNDA2OSAxMDA2NDQKLS0tIGEvU291cmNlL2FwaS5wcmkKKysrIGIvU291cmNl
L2FwaS5wcmkKQEAgLTE0LDEyICsxNCwxNSBAQCBXRUJLSVRfREVTVERJUiA9ICQke1JPT1RfQlVJ
TERfRElSfS9saWIKIAogV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29yZSB3ZWJjb3JlCiAKLWJ1
aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdDEKK2J1aWxkPyh3ZWJraXQxKTogV0VCS0lU
ICs9IHdlYmtpdHdpZGdldHMgd2Via2l0MQogYnVpbGQ/KHdlYmtpdDIpOiBXRUJLSVQgKz0gd2Vi
a2l0MgogCiAjIEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhlIFdlYktpdDEgYW5kIFdlYktpdDIg
QVBJIHdpbGwgdHJpZ2dlciBhIHFtYWtlIG9mIHRoaXMKICMgZmlsZSwgd2hpY2ggaW4gdHVybiBy
dW5zIHN5bmNxdCB0byB1cGRhdGUgdGhlIGZvcndhcmRpbmcgaGVhZGVycy4KLWJ1aWxkPyh3ZWJr
aXQxKTogUU1BS0VfSU5URVJOQUxfSU5DTFVERURfRklMRVMgKj0gV2ViS2l0L1dlYktpdDEucHJv
CitidWlsZD8od2Via2l0MSk6IHsKKyAgICBRTUFLRV9JTlRFUk5BTF9JTkNMVURFRF9GSUxFUyAq
PSBXZWJLaXQvV2ViS2l0MS5wcm8KKyAgICBRTUFLRV9JTlRFUk5BTF9JTkNMVURFRF9GSUxFUyAq
PSBXZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KK30KIGJ1aWxkPyh3ZWJraXQyKTogUU1BS0VfSU5U
RVJOQUxfSU5DTFVERURfRklMRVMgKj0gV2ViS2l0Mi9UYXJnZXQucHJpCiAKIHVzZT8oM0RfR1JB
UEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWVRdC5jcHAKaW5kZXggMzRlZTVhZDRhMWU1MjNlNThhMzdmMzAxMjBiOTA3Zjc5OWIy
YTg2NS4uMmMyNDJlMWYwNDdhODMwY2EyNmU0MDZhNzM0ZWVkZTMwMjBjNTM1YyAxMDA3NTUKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKQEAgLTQxLDcgKzQxLDcg
QEAKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyUXQuaCIKICNpbmNsdWRlICJ0ZXN0cGx1
Z2luLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KKyNpbmNsdWRlICJJbml0V2ViS2l0UXQu
aCIKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUJ1ZmZlcj4KICNpbmNsdWRl
IDxRQ3J5cHRvZ3JhcGhpY0hhc2g+CkBAIC0yMDYsOSArMjA2LDkgQEAgdm9pZCBXZWJQYWdlOjpy
ZXNldFNldHRpbmdzKCkKICAgICBRV2ViU2V0dGluZ3M6OnNldE1heGltdW1QYWdlc0luQ2FjaGUo
MCk7IC8vIHJlc2V0IHRvIGRlZmF1bHQKICAgICBzZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVl
dFVybChRVXJsKCkpOyAvLyByZXNldCB0byBkZWZhdWx0CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwodGhpcywgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmRlZmF1bHRNaW5pbXVtVGltZXJJbnRlcnZhbCgpKTsKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoaGFuZGxlKCksIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpkZWZhdWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKSk7CiAKLSAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcm5hbHNPYmplY3QobWFpbkZyYW1lKCkpOwor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVybmFsc09iamVjdChtYWluRnJh
bWUoKS0+aGFuZGxlKCkpOwogCiAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5jbGVh
cigpOwogfQpAQCAtMzk5LDYgKzM5OSw3IEBAIER1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJl
ZSgpCiAgICAgaWYgKHZpZXdNb2RlID09ICJncmFwaGljcyIpCiAgICAgICAgIHNldEdyYXBoaWNz
QmFzZWQodHJ1ZSk7CiAKKyAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRXaWRnZXRzKCk7CiAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluaXRpYWxpemUoKTsKIAogICAgIC8vIFNldCBy
dW5uaW5nIGluIERSVCBtb2RlIGZvciBxd2VicGFnZSB0byBjcmVhdGUgdGVzdGFibGUgb2JqZWN0
cy4KQEAgLTQyMSw3ICs0MjIsNyBAQCBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoKQog
ICAgIH0KICAgICAvLyBVc2UgYSBmcmFtZSBncm91cCBuYW1lIGZvciBhbGwgcGFnZXMgY3JlYXRl
ZCBieSBEdW1wUmVuZGVyVHJlZSB0byBhbGxvdwogICAgIC8vIHRlc3Rpbmcgb2YgY3Jvc3MtcGFn
ZSBmcmFtZSBsb29rdXAuCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRH
cm91cE5hbWUobV9wYWdlLCAib3JnLndlYmtpdC5xdC5EdW1wUmVuZGVyVHJlZSIpOworICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHBhZ2VBZGFwdGVyKCks
ICJvcmcud2Via2l0LnF0LkR1bXBSZW5kZXJUcmVlIik7CiAKICAgICBtX21haW5WaWV3LT5zZXRD
b250ZXh0TWVudVBvbGljeShRdDo6Tm9Db250ZXh0TWVudSk7CiAgICAgbV9tYWluVmlldy0+cmVz
aXplKFFTaXplKFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6bWF4Vmlld0hl
aWdodCkpOwpAQCAtNDcwLDcgKzQ3MSw3IEBAIER1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJl
ZSgpCiAgICAgUU9iamVjdDo6Y29ubmVjdCh0aGlzLCBTSUdOQUwocXVpdCgpKSwgcUFwcCwgU0xP
VChxdWl0KCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZCh0cnVlKTsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQod2Vi
UGFnZSgpLCB0cnVlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0SW50ZXJhY3Rp
dmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQocGFnZUFkYXB0ZXIoKSwgdHJ1ZSk7CiAgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmVuYWJsZU1vY2tTY3JvbGxiYXJzKCk7CiAKICAgICBRRm9jdXNF
dmVudCBldmVudChRRXZlbnQ6OkZvY3VzSW4sIFF0OjpBY3RpdmVXaW5kb3dGb2N1c1JlYXNvbik7
CkBAIC01NDEsOSArNTQyLDkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cmVzZXRUb0NvbnNpc3Rl
bnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3QgUVVybCYgdXJsKQogI2VuZGlmCiAKICAgICBjbGVh
ckhpc3RvcnkobV9wYWdlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2NhbGVQYWdl
QnkobV9wYWdlLT5tYWluRnJhbWUoKSwgMSwgUVBvaW50KDAsIDApKTsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6Y2xlYXJGcmFtZU5hbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhtX3BhZ2UpOwor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzY2FsZVBhZ2VCeShtYWluRnJhbWVBZGFwdGVy
KCksIDEsIFFQb2ludCgwLCAwKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFy
RnJhbWVOYW1lKG1haW5GcmFtZUFkYXB0ZXIoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhwYWdlQWRhcHRlcigpKTsKIAogICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwsIFF0OjpTY3JvbGxC
YXJBc05lZWRlZCk7CiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+c2V0U2Nyb2xsQmFyUG9saWN5
KFF0OjpIb3Jpem9udGFsLCBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOwpAQCAtNTYxLDcgKzU2Miw3
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0
aW5nKGNvbnN0IFFVcmwmIHVybCkKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNl
dE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKTsKIAotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRXaW5kb3dzQmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihtX3BhZ2UpOworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaW5kb3dzQmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihw
YWdlQWRhcHRlcigpKTsKIAogICAgIFFMb2NhbGU6OnNldERlZmF1bHQoUUxvY2FsZTo6YygpKTsK
IApAQCAtNTcwLDcgKzU3MSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0
ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0IFFVcmwmIHVybCkKICAgICBzZXRsb2NhbGUoTENf
QUxMLCAiIik7CiAjZW5kaWYKIAotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhck9w
ZW5lcihtX3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
Y2xlYXJPcGVuZXIobWFpbkZyYW1lQWRhcHRlcigpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNHbG9i
YWxIaXN0b3J5VGVzdChjb25zdCBRVXJsJiB1cmwpCkBAIC03MzksNyArNzQwLDcgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZTo6aW5pdEpTT2JqZWN0cygpCiAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlw
dFdpbmRvd09iamVjdChRTGF0aW4xU3RyaW5nKCJldmVudFNlbmRlciIpLCBtX2V2ZW50U2VuZGVy
KTsKICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KFFMYXRpbjFTdHJpbmco
InRleHRJbnB1dENvbnRyb2xsZXIiKSwgbV90ZXh0SW5wdXRDb250cm9sbGVyKTsKICAgICBmcmFt
ZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KFFMYXRpbjFTdHJpbmcoIkdDQ29udHJvbGxl
ciIpLCBtX2djQ29udHJvbGxlcik7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVj
dEludGVybmFsc09iamVjdChmcmFtZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Omlu
amVjdEludGVybmFsc09iamVjdChmcmFtZS0+aGFuZGxlKCkpOwogfQogCiB2b2lkIER1bXBSZW5k
ZXJUcmVlOjpzaG93UGFnZSgpCkBAIC03NTcsNyArNzU4LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6aGlkZVBhZ2UoKQogCiBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wRnJhbWVTY3JvbGxQ
b3NpdGlvbihRV2ViRnJhbWUqIGZyYW1lKQogewotICAgIGlmICghZnJhbWUgfHwgIUR1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpoYXNEb2N1bWVudEVsZW1lbnQoZnJhbWUpKQorICAgIGlmICghZnJh
bWUgfHwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpoYXNEb2N1bWVudEVsZW1lbnQoZnJhbWUt
PmhhbmRsZSgpKSkKICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIAogICAgIFFTdHJpbmcgcmVz
dWx0OwpAQCAtNzc5LDcgKzc4MCw3IEBAIFFTdHJpbmcgRHVtcFJlbmRlclRyZWU6OmR1bXBGcmFt
ZVNjcm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpCiAKIFFTdHJpbmcgRHVtcFJlbmRlclRy
ZWU6OmR1bXBGcmFtZXNBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIWZyYW1l
IHx8ICFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9jdW1lbnRFbGVtZW50KGZyYW1lKSkK
KyAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9jdW1lbnRF
bGVtZW50KGZyYW1lLT5oYW5kbGUoKSkpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKICAg
ICBRU3RyaW5nIHJlc3VsdDsKQEAgLTkwNyw3ICs5MDgsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
OjpkdW1wKCkKICAgICAgICAgZnByaW50ZihzdGRvdXQsICJTb3VyY2U6XG5cbiVzXG4iLCBtYXJr
dXAudG9VdGY4KCkuY29uc3REYXRhKCkpOwogICAgIH0KIAotICAgIFFTdHJpbmcgbWltZVR5cGUg
PSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzcG9uc2VNaW1lVHlwZShtYWluRnJhbWUpOwor
ICAgIFFTdHJpbmcgbWltZVR5cGUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzcG9uc2VN
aW1lVHlwZShtYWluRnJhbWUtPmhhbmRsZSgpKTsKICAgICBpZiAobWltZVR5cGUgPT0gInRleHQv
cGxhaW4iKQogICAgICAgICBtX2NvbnRyb2xsZXItPmR1bXBBc1RleHQoKTsKIApAQCAtOTQ3LDEx
ICs5NDgsMTEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgpCiAgICAgICAgICAgICBtYWlu
RnJhbWUtPnJlbmRlcigmcGFpbnRlcik7CiAgICAgICAgICAgICBwYWludGVyLmVuZCgpOwogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGltYWdlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnBhaW50UGFnZXNXaXRoQm91bmRhcmllcyhtYWluRnJhbWUpOworICAgICAgICAgICAgaW1hZ2Ug
PSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFpbnRQYWdlc1dpdGhCb3VuZGFyaWVzKG1haW5G
cmFtZS0+aGFuZGxlKCkpOwogCi0gICAgICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
dHJhY2tSZXBhaW50UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0cmFja1JlcGFpbnRSZWN0cyhtYWluRnJhbWVBZGFwdGVy
KCkpKSB7CiAgICAgICAgICAgICBRVmVjdG9yPFFSZWN0PiByZXBhaW50UmVjdHM7Ci0gICAgICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhtX3Bh
Z2UtPm1haW5GcmFtZSgpLCByZXBhaW50UmVjdHMpOworICAgICAgICAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmdldFRyYWNrZWRSZXBhaW50UmVjdHMobWFpbkZyYW1lQWRhcHRlcigpLCBy
ZXBhaW50UmVjdHMpOwogICAgICAgICAgICAgUUltYWdlIG1hc2soaW1hZ2Uuc2l6ZSgpLCBpbWFn
ZS5mb3JtYXQoKSk7CiAgICAgICAgICAgICBtYXNrLmZpbGwoUUNvbG9yKDAsIDAsIDAsIDAuNjYg
KiAyNTUpKTsKIApAQCAtOTYzLDcgKzk2NCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmR1bXAo
KQogICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmaW1hZ2UpOwogICAgICAgICAgICAgcGFp
bnRlci5kcmF3SW1hZ2UoaW1hZ2UucmVjdCgpLCBtYXNrKTsKIAotICAgICAgICAgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldFRyYWNrUmVwYWludFJlY3RzKG1fcGFnZS0+bWFpbkZyYW1l
KCksIGZhbHNlKTsKKyAgICAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRUcmFj
a1JlcGFpbnRSZWN0cyhtYWluRnJhbWVBZGFwdGVyKCksIGZhbHNlKTsKICAgICAgICAgfQogCiAg
ICAgICAgIFFDcnlwdG9ncmFwaGljSGFzaCBoYXNoKFFDcnlwdG9ncmFwaGljSGFzaDo6TWQ1KTsK
QEAgLTEwOTgsNyArMTA5OSw3IEBAIFFXZWJQYWdlICpEdW1wUmVuZGVyVHJlZTo6Y3JlYXRlV2lu
ZG93KCkKIAogICAgIC8vIFVzZSBhIGZyYW1lIGdyb3VwIG5hbWUgZm9yIGFsbCBwYWdlcyBjcmVh
dGVkIGJ5IER1bXBSZW5kZXJUcmVlIHRvIGFsbG93CiAgICAgLy8gdGVzdGluZyBvZiBjcm9zcy1w
YWdlIGZyYW1lIGxvb2t1cC4KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNl
dEdyb3VwTmFtZShwYWdlLCAib3JnLndlYmtpdC5xdC5EdW1wUmVuZGVyVHJlZSIpOworICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHBhZ2UtPmhhbmRsZSgp
LCAib3JnLndlYmtpdC5xdC5EdW1wUmVuZGVyVHJlZSIpOwogCiAgICAgcmV0dXJuIHBhZ2U7CiB9
CkBAIC0xMTM0LDYgKzExMzUsMTYgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6c3dpdGNoRm9jdXMo
Ym9vbCBmb2N1c2VkKQogCiB9CiAKK1FXZWJQYWdlQWRhcHRlciAqRHVtcFJlbmRlclRyZWU6OnBh
Z2VBZGFwdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5oYW5kbGUoKTsKK30KKwor
UVdlYkZyYW1lQWRhcHRlciAqRHVtcFJlbmRlclRyZWU6Om1haW5GcmFtZUFkYXB0ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZSgpLT5oYW5kbGUoKTsKK30KKwogUUxp
c3Q8V2ViUGFnZSo+IER1bXBSZW5kZXJUcmVlOjpnZXRBbGxQYWdlcygpIGNvbnN0CiB7CiAgICAg
UUxpc3Q8V2ViUGFnZSo+IHBhZ2VzOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5oCmluZGV4IDk4NDI5YzQ0ZWM5MzExMzIwMDdlNGQ4ZjNhYWNhZTRkYzlmOTY2Nzgu
LjViODhiNTI3NjYyODJjYTQwNjA4ODBiNGI3Y2VlZjQyNTM2NGEwZjAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKQEAgLTUzLDcgKzUzLDggQEAgY2xhc3Mg
UVVybDsKIGNsYXNzIFFGaWxlOwogUVRfRU5EX05BTUVTUEFDRQogCi1jbGFzcyBRV2ViRnJhbWU7
CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogCiBjbGFz
cyBUZXN0UnVubmVyOwogY2xhc3MgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ7CkBAIC05Nyw2ICs5
OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3aXRjaEZvY3VzKGJvb2wgZm9jdXNlZCk7CiAKICAg
ICBXZWJQYWdlICp3ZWJQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisgICAgUVdlYlBh
Z2VBZGFwdGVyICpwYWdlQWRhcHRlcigpIGNvbnN0OworICAgIFFXZWJGcmFtZUFkYXB0ZXIgKm1h
aW5GcmFtZUFkYXB0ZXIoKSBjb25zdDsKKwogICAgIFFMaXN0PFdlYlBhZ2UqPiBnZXRBbGxQYWdl
cygpIGNvbnN0OwogCiAgICAgdm9pZCBwcm9jZXNzQXJnc0xpbmUoY29uc3QgUVN0cmluZ0xpc3Qm
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHAKaW5kZXggZGNmOWYx
YmIyMTBlOWMwMWZjNTU5YmJjNDgzZGEyYzQ1Y2Y5MGE0MC4uODBiZTEzMTc4OGQyYjliMjA4ZjUz
ZjhkZDY1NTc3NDQxYThjYWQxMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQv
RXZlbnRTZW5kZXJRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5k
ZXJRdC5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCBRU3RyaW5nTGlzdCBFdmVudFNlbmRlcjo6Y29u
dGV4dENsaWNrKCkKICAgICAgICAgUUNvbnRleHRNZW51RXZlbnQgY3R4RXZlbnQoUUNvbnRleHRN
ZW51RXZlbnQ6Ok1vdXNlLCBtX21vdXNlUG9zKTsKICAgICAgICAgc2VuZEV2ZW50KG1fcGFnZS0+
dmlldygpLCAmY3R4RXZlbnQpOwogICAgIH0KLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmNvbnRleHRNZW51KG1fcGFnZSk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojpjb250ZXh0TWVudShtX3BhZ2UtPmhhbmRsZSgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCkBAIC02MTYsNyArNjE2LDcgQEAgdm9p
ZCBFdmVudFNlbmRlcjo6dGV4dFpvb21PdXQoKQogdm9pZCBFdmVudFNlbmRlcjo6c2NhbGVQYWdl
QnkoZmxvYXQgc2NhbGVGYWN0b3IsIGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgaWYgKFFXZWJG
cmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2NhbGVQYWdlQnkoZnJhbWUsIHNjYWxlRmFjdG9yLCBRUG9pbnQoeCwgeSkp
OworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2NhbGVQYWdlQnkoZnJhbWUtPmhh
bmRsZSgpLCBzY2FsZUZhY3RvciwgUVBvaW50KHgsIHkpKTsKIH0KIAogUVdlYkZyYW1lKiBFdmVu
dFNlbmRlcjo6ZnJhbWVVbmRlck1vdXNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9U
ZXN0UnVubmVyUXQuY3BwCmluZGV4IDYwNjc1MTRmMDU1MDk1ZWI3MjNhNGU4NDExYTIyZGFiNjJl
YmQ4ZjEuLmQ5MzUwNWZjNWZhZjVmYzEzZmE0MWZlZmVmOTZhNWEwODM2NDU5MWUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lk
IFRlc3RSdW5uZXI6OnJlc2V0KCkKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q3Vz
dG9tUG9saWN5RGVsZWdhdGUoZmFsc2UsIGZhbHNlKTsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZHVtcEhpc3RvcnlDYWxsYmFja3MoZmFsc2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKGZhbHNlKTsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2sobV9kcnQtPndlYlBhZ2UoKSk7Cisg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0R2VvbG9jYXRpb25Nb2NrKG1fZHJ0LT5w
YWdlQWRhcHRlcigpKTsKICAgICBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKICAgICBj
bGVhckFsbERhdGFiYXNlcygpOwogICAgIC8vIFRoZSBkZWZhdWx0IHN0YXRlIGZvciBEUlQgaXMg
dG8gYmxvY2sgdGhpcmQtcGFydHkgY29va2llcywgbWltaWNpbmcgdGhlIE1hYyBwb3J0CkBAIC0y
NDMsNyArMjQzLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNh
dGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRpdGxlKQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3Bs
YXkoKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRUcmFja1JlcGFpbnRSZWN0
cyhtX3RvcExvYWRpbmdGcmFtZSwgdHJ1ZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldFRyYWNrUmVwYWludFJlY3RzKG1fdG9wTG9hZGluZ0ZyYW1lLT5oYW5kbGUoKSwgdHJ1ZSk7
CiAgICAgZW1pdCBzaG93UGFnZSgpOwogfQogCkBAIC00MTcsNyArNDE3LDcgQEAgUVN0cmluZyBU
ZXN0UnVubmVyOjpkZWNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0KQogCiB2b2lkIFRl
c3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UobV9kcnQtPndlYlBhZ2UoKSk7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKG1fZHJ0LT5wYWdlQWRhcHRlcigpKTsK
ICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBmYWxzZSk7CiB9CiAKQEAgLTQzNCwyNyArNDM0
LDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoYm9vbCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7CiAgICAgbV9k
cnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZCwgdHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OndlYkluc3BlY3RvclNob3cobV9kcnQtPndlYlBhZ2UoKSk7CisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3cobV9kcnQtPnBhZ2VBZGFwdGVyKCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0
IFFTdHJpbmcmIHNjcmlwdCkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5z
cGVjdG9yRXhlY3V0ZVNjcmlwdChtX2RydC0+d2ViUGFnZSgpLCBjYWxsSWQsIHNjcmlwdCk7Cisg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQobV9k
cnQtPnBhZ2VBZGFwdGVyKCksIGNhbGxJZCwgc2NyaXB0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChtX2RydC0+d2ViUGFn
ZSgpLCBlbmFibGVkKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RnJhbWVGbGF0
dGVuaW5nRW5hYmxlZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z29C
YWNrKG1fZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0Jh
Y2sobV9kcnQtPnBhZ2VBZGFwdGVyKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBmbGFnKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRE
ZWZlcnNMb2FkaW5nKG1fZHJ0LT53ZWJQYWdlKCksIGZsYWcpOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBmbGFnKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJM
cyhib29sIGVuYWJsZWQpCkBAIC01NDQsNyArNTQ0LDcgQEAgYm9vbCBUZXN0UnVubmVyOjpwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBhbmltYXRpb25O
YW0KIHsKICAgICBRV2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1l
KCk7CiAgICAgUV9BU1NFUlQoZnJhbWUpOwotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUsIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJ
ZCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihm
cmFtZS0+aGFuZGxlKCksIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7CiB9CiAKIGJv
b2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0
IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwKQEAgLTU1MywxNCArNTUzLDE0IEBAIGJvb2wgVGVzdFJ1
bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcm
IHByb3BlcnR5TmFtCiB7CiAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJUKGZyYW1lKTsKLSAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoZnJhbWUsIHByb3BlcnR5
TmFtZSwgdGltZSwgZWxlbWVudElkKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoZnJhbWUtPmhhbmRsZSgpLCBwcm9wZXJ0eU5h
bWUsIHRpbWUsIGVsZW1lbnRJZCk7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0
LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJUKGZyYW1lKTsKLSAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhmcmFt
ZSk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZkFjdGl2ZUFu
aW1hdGlvbnMoZnJhbWUtPmhhbmRsZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNhYmxl
SW1hZ2VMb2FkaW5nKCkKQEAgLTY5OCwxMiArNjk4LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJiB1cmwpCiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQobV9kcnQtPndlYlBhZ2Uo
KSwgdmFsdWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDYXJldEJyb3dzaW5n
RW5hYmxlZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKG1fZHJ0
LT53ZWJQYWdlKCksIHZhbHVlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIHZhbHVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVk
KQpAQCAtNzI4LDcgKzcyOCw3IEBAIGludCBUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCgp
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKIHsKLSAgICBy
ZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNob3VsZENsb3NlKG1fZHJ0LT53ZWJQYWdl
KCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNo
b3VsZENsb3NlKG1fZHJ0LT5tYWluRnJhbWVBZGFwdGVyKCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFNjcm9sbGJhclBvbGljeShjb25zdCBRU3RyaW5nJiBvcmllbnRhdGlvbiwgY29uc3Qg
UVN0cmluZyYgcG9saWN5KQpAQCAtNzU3LDI3ICs3NTcsMjcgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNvbnN0IFFTdHJp
bmcmIHAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9v
bCBlbmFibGUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGUpOworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQobV9kcnQtPnBhZ2VBZGFw
dGVyKCksIGVuYWJsZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZChib29sIGVuYWJsZSkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChtX2RydC0+d2ViUGFnZSgp
LCBlbmFibGUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBlbmFibGUpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFT
dHJpbmcmIHZhbHVlKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpleGVjdXRlQ29y
ZUNvbW1hbmRCeU5hbWUobV9kcnQtPndlYlBhZ2UoKSwgbmFtZSwgdmFsdWUpOworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUobV9kcnQtPnBhZ2VB
ZGFwdGVyKCksIG5hbWUsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRF
bmFibGVkKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojppc0NvbW1hbmRFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIG5hbWUp
OworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNDb21tYW5kRW5hYmxlZCht
X2RydC0+cGFnZUFkYXB0ZXIoKSwgbmFtZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0
cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJpbmdMaXN0JiBvcHRpb25BcnJh
eSkKIHsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZpbmRTdHJpbmcobV9k
cnQtPndlYlBhZ2UoKSwgc3RyaW5nLCBvcHRpb25BcnJheSk7CisgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBzdHJpbmcs
IG9wdGlvbkFycmF5KTsKIH0KIAogUVN0cmluZyBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlz
dEl0ZW0oY29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKQpAQCAtNzkyLDcgKzc5Miw3IEBAIFFW
YXJpYW50TWFwIFRlc3RSdW5uZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhj
b25zdCBRV2ViRWxlbWVudCYgZWxlCiAKIGJvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKIHsKLSAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
Rm9yRWxlbWVudFdpdGhJZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgZWxlbWVudElk
KTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZChtX2RydC0+bWFpbkZyYW1lQWRhcHRlcigpLCBlbGVtZW50
SWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oY29uc3QgUVN0
cmluZyYsIGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJikKQEAgLTgxMiw3ICs4MTIsNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3Zp
ZGVBbHBoYSwgZG91YmxlIGFscGhhLCBibwogewogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2Uq
PiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwogICAgIGZvcmVhY2ggKFdlYkNvcmU6Oldl
YlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKHBhZ2UsIGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblBy
b3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKKyAgICAgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihwYWdlLT5oYW5kbGUo
KSwgY2FuUHJvdmlkZUFscGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3Zp
ZGVHYW1tYSwgZ2FtbWEpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbihib29sIGFsbG93KQpAQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiAgICAgc2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFn
ZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdl
KiBwYWdlLCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tH
ZW9sb2NhdGlvblBlcm1pc3Npb24ocGFnZSwgYWxsb3cpOworICAgICAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbihwYWdlLT5oYW5kbGUoKSwg
YWxsb3cpOwogfQogCiBpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMoKQpAQCAtODI4LDcgKzgyOCw3IEBAIGludCBUZXN0UnVubmVyOjpu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiAgICAgaW50IHBl
bmRpbmdQZXJtaXNzaW9uQ291bnQgPSAwOwogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBw
YWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwogICAgIGZvcmVhY2ggKFdlYkNvcmU6OldlYlBh
Z2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBwZW5kaW5nUGVybWlzc2lvbkNvdW50ICs9IER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0cyhwYWdlKTsKKyAgICAgICAgcGVuZGluZ1Blcm1pc3Npb25Db3VudCArPSBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHMocGFnZS0+aGFuZGxlKCkpOwogCiAgICAgcmV0dXJuIHBlbmRpbmdQZXJtaXNzaW9uQ291
bnQ7CiB9CkBAIC04NDMsMTQgKzg0MywxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBRU3RyaW5nJiBtZXNzYQogewog
ICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygp
OwogICAgIGZvcmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKHBhZ2UsIG1lc3NhZ2UpOworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHBhZ2UtPmhhbmRs
ZSgpLCBtZXNzYWdlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFj
eSkKIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxs
UGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAg
ICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KHBhZ2UsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5KTsKKyAgICAgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKHBhZ2UtPmhhbmRsZSgp
LCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNv
bmZpZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKQpAQCAtODc4LDEyICs4NzgsMTIgQEAg
dm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKGludCB3b3JsZElELCBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOworICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2Ry
dC0+bWFpbkZyYW1lQWRhcHRlcigpLCB3b3JsZElELCBzY3JpcHQpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpCiB7Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVzZXJTdHlsZVNoZWV0KG1fZHJ0LT53ZWJQ
YWdlKCksIHNvdXJjZUNvZGUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVc2Vy
U3R5bGVTaGVldChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgc291cmNlQ29kZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKQEAgLTkwMCw3ICs5MDAsNyBAQCB2
b2lkIFRlc3RSdW5uZXI6OmFkZFVSTFRvUmVkaXJlY3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBj
b25zdCBRU3RyaW5nJiBkZXN0aW5hdAogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobV9kcnQtPndlYlBhZ2UoKSwg
bWluaW11bVRpbWVySW50ZXJ2YWwpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgbWluaW11bVRpbWVySW50
ZXJ2YWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1RleHRJbnB1dENvbnRyb2xsZXJR
dC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRDb250cm9sbGVyUXQuY3Bw
CmluZGV4IGQ1NjQ1YTUyM2U5MmRjOWQ1MzY2MmM2OWM0ZTBiY2IwNGZhMDY3ZmMuLjM4ZTQ4OWQ3
OGY3MzZmMzI0MGI1MDEyMzEyZmY3MDVjZGM3NDVmMTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L1RleHRJbnB1dENvbnRyb2xsZXJRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmNwcApAQCAtMTQ5LDE1ICsxNDksMTUg
QEAgdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjppbnNlcnRUZXh0KGNvbnN0IFFTdHJpbmcmIHN0
cmluZykKIAogUVZhcmlhbnRMaXN0IFRleHRJbnB1dENvbnRyb2xsZXI6OnNlbGVjdGVkUmFuZ2Uo
KQogewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2VsZWN0ZWRSYW5nZShx
b2JqZWN0X2Nhc3Q8UVdlYlBhZ2UqPihwYXJlbnQoKSkpOworICAgIHJldHVybiBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2VsZWN0ZWRSYW5nZShxb2JqZWN0X2Nhc3Q8UVdlYlBhZ2UqPihwYXJl
bnQoKSktPmhhbmRsZSgpKTsKIH0KIAogUVZhcmlhbnRMaXN0IFRleHRJbnB1dENvbnRyb2xsZXI6
OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkKIHsK
LSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlKHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHBhcmVudCgpKSwgbG9jYXRpb24sIGxlbmd0
aCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZShxb2JqZWN0X2Nhc3Q8UVdlYlBhZ2UqPihwYXJlbnQoKSktPmhhbmRsZSgpLCBs
b2NhdGlvbiwgbGVuZ3RoKTsKIH0KIAogdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjp1bm1hcmtU
ZXh0KCkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29uZmlybUNvbXBvc2l0aW9u
KHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHBhcmVudCgpKSwgMCk7CisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihxb2JqZWN0X2Nhc3Q8UVdlYlBhZ2UqPihw
YXJlbnQoKSktPmhhbmRsZSgpLCAwKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L1dvcmtRdWV1ZUl0ZW1RdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9Xb3Jr
UXVldWVJdGVtUXQuY3BwCmluZGV4IGIwOTMzNjY2NzYwNjg2M2M4Nzc0YTliNDkzZWYyOGIwMzU4
ZjY5ZWEuLjdjZjlmY2FmMTAyZTBmNjBhMDBkNmYwN2U2MjA1Zjc1OWViMGRjZDMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1dvcmtRdWV1ZUl0ZW1RdC5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNwcApAQCAtODEsNyArODEsNyBA
QCBib29sIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nSXRlbTo6aW52b2tlKCkgY29uc3QKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0QWx0ZXJuYXRlSHRtbChmcmFtZSwgbV9jb250ZW50LCBRVXJsKG1fYmFzZVVS
TCksIFFVcmwobV9mYWlsaW5nVVJMKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEFsdGVybmF0ZUh0bWwoZnJhbWUtPmhhbmRsZSgpLCBtX2NvbnRlbnQsIFFVcmwobV9iYXNlVVJM
KSwgUVVybChtX2ZhaWxpbmdVUkwpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmIGIvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmCmluZGV4IDQ3NzZkMWQ5MjA5
ZDI1ZmJkYWY5YTk0YWEwYWNjYzM1NWIyZWZmZmYuLjljMGYzMjMyZjliZGI2MDNkODkzYTRhN2E3
MGM3MzQ4ZjZiZmZhZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZGVmYXVsdF9wb3N0LnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1
bHRfcG9zdC5wcmYKQEAgLTE3Nyw3ICsxNzcsNyBAQCBjb250YWlucyhRVCwgd2Via2l0d2lkZ2V0
cykgewogICAgICMgbmVlZCB0byBsaW5rIHRvIGFueSBpbnRlcm1lZGlhdGUgc2hhcmVkIGxpYnJh
cmllcy4KICAgICBmb3JjZV9zdGF0aWNfbGlic19hc19zaGFyZWQgewogICAgICAgICBXRUJLSVQg
Kz0gd3RmIGphdmFzY3JpcHRjb3JlIHdlYmNvcmUKLSAgICAgICAgYnVpbGQ/KHdlYmtpdDEpOiBX
RUJLSVQgKz0gd2Via2l0MQorICAgICAgICBidWlsZD8od2Via2l0MSk6IFdFQktJVCArPSB3ZWJr
aXR3aWRnZXRzIHdlYmtpdDEKICAgICAgICAgYnVpbGQ/KHdlYmtpdDIpOiBXRUJLSVQgKz0gd2Vi
a2l0MgogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9w
cm9kdWN0aW9uX2J1aWxkLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvcHJvZHVj
dGlvbl9idWlsZC5wcmYKaW5kZXggYjNmMzZhYmI0ODUzOTQxM2ZjMjdiNjY5YWYyNjE1YjY3MDcz
OTU0ZC4uNDIzNTEwMjY4YjM4YTEzN2YxODRlNmI2NGEzZmI4Yzk0NDQyYmQxNSAxMDA2NDQKLS0t
IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnByZgorKysg
Yi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3Byb2R1Y3Rpb25fYnVpbGQucHJmCkBAIC03
LDggKzcsOCBAQCBDT05GSUcgKj0gdXNlX2FsbF9pbl9vbmVfZmlsZXMKICMgcmVzdWx0aW5nIGlu
IHRoZSBuZWVkIG9mIHNldmVyYWwgZ2lnYWJ5dGVzIG9mIG1lbW9yeSBhdCBsaW5rLXRpbWUuIFJl
ZHVjZSB0aGUgcHJlc3N1cmUKICMgYnkgY29tcGlsaW5nIGFueSBzdGF0aWMgbGlicmFyeSBsaWtl
IFdURiBvciBKU0Mgd2l0aCByZWxlYXNlIGZsYWdzIGluc3RlYWQgYW5kIGtlZXAgZGVidWcKICMg
c3ltYm9scyBmb3IgdGhlIHN0YXRpYyBsaWJyYXJpZXMgdGhhdCBpbXBsZW1lbnQgQVBJLgotbGlu
dXgtKnx3aW4zMi1nKysqOmlmKENPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFzZSl8Y29udGFpbnMo
UVRfQ09ORklHLHNlcGFyYXRlX2RlYnVnX2luZm8pKTpjb250YWlucyhURU1QTEFURSwgbGliKTpz
dGF0aWNsaWIgewotICAgICFlcXVhbHMoVEFSR0VULCBXZWJLaXQyKTohZXF1YWxzKFRBUkdFVCwg
V2ViS2l0MSkgeworbGludXgtKnx3aW4zMi1nKysqOkNPTkZJRyhkZWJ1ZywgZGVidWd8cmVsZWFz
ZSk6Y29udGFpbnMoVEVNUExBVEUsIGxpYik6c3RhdGljbGliIHsKKyAgICAhZXF1YWxzKFRBUkdF
VCwgV2ViS2l0Mik6IWVxdWFscyhUQVJHRVQsIFdlYktpdFdpZGdldHMpIHsKICAgICAgICAgQ09O
RklHICs9IG5vX2RlYnVnX2luZm8KICAgICAgICAgQ09ORklHIC09IHNlcGFyYXRlX2RlYnVnX2lu
Zm8KICAgICAgICAgUU1BS0VfQ0ZMQUdTICs9ICQkUU1BS0VfQ0ZMQUdTX1JFTEVBU0UKZGlmZiAt
LWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVsZXMucHJmIGIv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJraXRfbW9kdWxlcy5wcmYKaW5kZXggYjJm
MzM1MzY0OGQ3MDhmYjE2MmI1OTE1MDYwMWIzY2FmZGY1OWFkMi4uNTA1YjgyNjU4ZTIxOGQ2MjY2
MGZkMjgxYmY1NmFlOWIxNzY5MzBhMyAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9m
ZWF0dXJlcy93ZWJraXRfbW9kdWxlcy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy93ZWJraXRfbW9kdWxlcy5wcmYKQEAgLTcsNyArNyw3IEBACiAKICMgUmVvcmRlciBsaWJy
YXJpZXMgc28gdGhhdCB0aGUgbGluayBhbmQgaW5jbHVkZSBvcmRlciBpcyBjb3JyZWN0LAogIyBh
bmQgbWFrZSBzdXJlIHRoZSBjYXNlIG1hdGNoZXMgdGhlIG9yaWdpbmFsIGNhc2UuCi1saWJyYXJp
ZXMgPSBXZWJLaXQxIFdlYktpdDIgV2ViQ29yZSBBTkdMRSBKYXZhU2NyaXB0Q29yZSBXVEYKK2xp
YnJhcmllcyA9IFdlYktpdFdpZGdldHMgV2ViS2l0MSBXZWJLaXQyIFdlYkNvcmUgQU5HTEUgSmF2
YVNjcmlwdENvcmUgV1RGCiBmb3IobGlicmFyeSwgbGlicmFyaWVzKSB7CiAgICAgY29udGFpbnMo
V0VCS0lULCAkJGxvd2VyKCQkbGlicmFyeSkpIHsKICAgICAgICAgV0VCS0lUIC09ICQkbG93ZXIo
JCRsaWJyYXJ5KQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3dlYmtp
dHdpZGdldHMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3dlYmtpdHdpZGdldHMu
cHJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNhMTY0M2M4ZGYwMDEwZGZhZDI3NWEzNGQzYjYxOGI5YWZmYmQxZGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL21vZHVsZXMvd2Via2l0d2lk
Z2V0cy5wcmYKQEAgLTAsMCArMSw5IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTW9kdWxlIGZpbGUgZm9y
IFdlYktpdFdpZGdldCwgdXNlZCBieSB0YXJnZXRzIHRoYXQgZGVwZW5kIG9uIFdlYktpdFdpZGdl
dAorIworIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBi
dWlsZCBzeXN0ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXRUJLSVQud2Via2l0d2lkZ2V0cy5yb290X3Nv
dXJjZV9kaXIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQKKworaW5jbHVkZSgk
JHtXRUJLSVQud2Via2l0d2lkZ2V0cy5yb290X3NvdXJjZV9kaXJ9L1dlYktpdFdpZGdldHMucHJp
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXggODc2ZDU1NDEyNjYz
OGI4YWJkYTdmZGU4ZTkxMTQ2ZDFjNTdlZWY2Yy4uZmJhNWI5OTdhYzdiMzI0MTg2ZGU3NzU5NzFl
M2QzZDBiOWExYzA0NiAxMDA2NDQKLS0tIGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJvCkBA
IC0zMiw2ICszMiwxMCBAQCBidWlsZD8od2Via2l0MSkgewogICAgIHdlYmtpdDEuZmlsZSA9IFNv
dXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KICAgICB3ZWJraXQxLm1ha2VmaWxlID0gTWFrZWZpbGUu
V2ViS2l0MQogICAgIFNVQkRJUlMgKz0gd2Via2l0MQorCisgICAgd2Via2l0d2lkZ2V0cy5maWxl
ID0gU291cmNlL1dlYktpdC9XZWJLaXRXaWRnZXRzLnBybworICAgIHdlYmtpdHdpZGdldHMubWFr
ZWZpbGUgPSBNYWtlZmlsZS5XZWJLaXRXaWRnZXRzCisgICAgU1VCRElSUyArPSB3ZWJraXR3aWRn
ZXRzCiB9CiAKIGJ1aWxkPyh3ZWJraXQyKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175224</attachid>
            <date>2012-11-20 08:14:49 -0800</date>
            <delta_ts>2012-11-21 01:24:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102800-20121120171338.patch</filename>
            <type>text/plain</type>
            <size>340409</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UVdlYlBhZ2VDbGllbnQuaAppbmRleCBjZGEwYjBmNGQ2M2I1Y2U1NDU3ZWUxYjNhMjAxNmUzYjFj
Nzg5MDE2Li5hZTNmYjRlMmZhMGRiMjRiZDNlNGJlYWMyMThhMjE5NjAyYmRlNzFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJlcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFFX
aWRnZXQqIG93bmVyV2lkZ2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUU9iamVjdCogb3du
ZXJXaWRnZXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeVJlbGF0aXZl
VG9Pd25lcldpZGdldCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2lu
UGFyZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBy
aSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcmkKaW5kZXggNTYyNmYwNzA4NDA4Y2E4ODEzNzI0
MTc3OTQ3NjYwMTA4MDQ5YTZhZi4uYWYwMjE1ZjRhZWM4Y2VjOTY0NDZhNmIzMTE5NzY0NjA5ZjM1
MjUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJpCkBAIC04LDcgKzgsNiBAQAogU09VUkNFX0RJUiA9ICQke1JPT1Rf
V0VCS0lUX0RJUn0vU291cmNlL1dlYktpdAogCiBJTkNMVURFUEFUSCArPSBcCi0gICAgJCRTT1VS
Q0VfRElSL3F0L0FwaSBcCiAgICAgJCRTT1VSQ0VfRElSL3F0L1dlYkNvcmVTdXBwb3J0IFwKICAg
ICAkJFJPT1RfV0VCS0lUX0RJUi9Tb3VyY2UvV1RGL3d0Zi9xdAogCkBAIC0xOCwyMCArMTcsOSBA
QCBlbmFibGU/KERFVklDRV9PUklFTlRBVElPTil8ZW5hYmxlPyhPUklFTlRBVElPTl9FVkVOVFMp
IHsKIAogZW5hYmxlPyhHRU9MT0NBVElPTik6IFFUICs9IGxvY2F0aW9uCiAKLXVzZT8oUVRfTVVM
VElNRURJQSk6IFFUICo9IG11bHRpbWVkaWF3aWRnZXRzCi0KIGNvbnRhaW5zKENPTkZJRywgdGV4
bWFwKTogREVGSU5FUyArPSBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSPTEKIAogdXNlPyhQTFVHSU5f
QkFDS0VORF9YTElCKTogUEtHQ09ORklHICs9IHgxMQogCi1RVCArPSBuZXR3b3JrIHdpZGdldHMK
LWhhdmU/KFFUUVVJQ0spOiBRVCArPSBxdWljawotaGF2ZT8oUVRQUklOVFNVUFBPUlQpOiBRVCAr
PSBwcmludHN1cHBvcnQKLQotdXNlPyhURVhUVVJFX01BUFBFUl9HTCl8ZW5hYmxlPyhXRUJHTCkg
ewotICAgIFFUICo9IG9wZW5nbAotICAgICMgTWFrZSBzdXJlIE9wZW5HTCBsaWJzIGFyZSBhZnRl
ciB0aGUgd2ViY29yZSBsaWIgc28gTWluR1cgY2FuIHJlc29sdmUgc3ltYm9scwotICAgIHdpbjMy
Kjohd2luMzItbXN2Yyo6IExJQlMgKz0gJCRRTUFLRV9MSUJTX09QRU5HTAotfQotCitRVCArPSBu
ZXR3b3JrCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8gYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJvCmluZGV4IDc1ZDRkNzlkZTVhYzRjZTNlYzY5MmVlZDJmOTVkNWQ3
ZGY5NGI0MzkuLmZlZTk5ZTg4NTFiZmZkNjExOGNmNGNhYTBmMjI2YjEyZGI0Yjc0NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KKysrIGIvU291cmNlL1dlYktpdC9XZWJL
aXQxLnBybwpAQCAtMTUsMzAgKzE1LDIwIEBAIFFUICs9IGd1aQogQ09ORklHICs9IHN0YXRpY2xp
YgogCiBTT1VSQ0VTICs9IFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBcCi0gICAg
JCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdl
YnBhZ2UuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnZpZXcuY3BwIFwKKyAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNw
cCBcCiAgICAgJCRQV0QvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBcCiAgICAgJCRQV0QvcXQvQXBp
L3F3ZWJoaXN0b3J5LmNwcCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAog
ICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5jcHAgXAotICAgICQkUFdEL3F0
L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYnBsdWdp
bmZhY3RvcnkuY3BwIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcCBc
CisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAogICAgICQkUFdEL3F0L0FwaS9x
d2Vic2NyaXB0d29ybGQuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNwcCBc
Ci0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkv
cXdlYmtpdHZlcnNpb24uY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwK
LSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmNwcCBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRRdC5jcHAgXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9T
dGVwUXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29u
dGV4dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQuY3BwIFwKQEAgLTQ2LDY3ICszNiw3MiBAQCBTT1VSQ0VTICs9IFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcCBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgXAogICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvUVN0eWxlRmFjYWRlSW1wLmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJG
cmFtZUFkYXB0ZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFk
YXB0ZXIuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVR
dC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQu
Y3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5j
cHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwIFwKICAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCiAKIEhFQURFUlMg
Kz0gXAotICAgICQkUFdEL3F0L0FwaS9xd2ViZnJhbWUuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3
ZWJmcmFtZV9wLmggXAotICAgICQkUFdEL3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmggXAotICAg
ICQkUFdEL3F0L0FwaS9xd2Via2l0Z2xvYmFsLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJwYWdlLmggXAotICAgICQk
UFdEL3F0L0FwaS9xd2Vidmlldy5oIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaCBcCiAgICAgJCRQV0QvcXQv
QXBpL3F3ZWJlbGVtZW50LmggXAogICAgICQkUFdEL3F0L0FwaS9xd2ViZWxlbWVudF9wLmggXAot
ICAgICQkUFdEL3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIFwKICAgICAkJFBXRC9xdC9BcGkv
cXdlYmhpc3RvcnkuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaCBcCi0gICAg
JCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2VicGx1
Z2luZGF0YWJhc2VfcC5oIFwKLSAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggXAotICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmggXAotICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFdlYkNvbWJvQm94LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeV9wLmgg
XAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZWN1cml0
eW9yaWdpbi5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmggXAorICAgICQkUFdE
L3F0L0FwaS9xd2Vic2NyaXB0d29ybGRfcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0
TWVudUNsaWVudFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRR
dC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oIFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5oIFwKICAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmggXAorICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmggXAotICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RU3R5bGVGYWNhZGVJ
bXAuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFkYXB0ZXIuaCBcCisg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5oIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuaCBcCiAgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9V
bmRvU3RlcFF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVy
c2lvbi5oCiAKLWNvbnRhaW5zKFFUX0NPTkZJRyxhY2Nlc3NpYmlsaXR5KSB7Ci0gICAgU09VUkNF
UyArPSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nlc3NpYmxlLmNwcAotICAgIEhFQURFUlMgKz0g
JCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZV9wLmggCi19Ci0KIElOQ0xVREVQQVRIICs9
IFwKLSAgICAkJFBXRC9xdC9BcGkgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0CiAKLWVu
YWJsZT8oVklERU8pIHsKLSAgICAhdXNlPyhRVEtJVCk6IXVzZT8oR1NUUkVBTUVSKTp1c2U/KFFU
X01VTFRJTUVESUEpIHsKLSAgICAgICAgSEVBREVSUyArPSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaAotICAgICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5jcHAKLSAgICB9Cit1c2U/KDNEX0dS
QVBISUNTKTogV0VCS0lUICs9IGFuZ2xlCiAKK2VuYWJsZT8oR0VPTE9DQVRJT04pIHsKKyAgICAg
SEVBREVSUyArPSBcCisgICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
Q2xpZW50UXQuaAorICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKK30KKworZW5hYmxlPyhJQ09OREFUQUJBU0Up
IHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2VDbGllbnQuaCBcCisgICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0
L0ljb25EYXRhYmFzZUNsaWVudFF0LmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRRdC5jcHAKK30KKworZW5hYmxl
PyhWSURFTykgewogICAgIHVzZT8oUVRLSVQpIHwgdXNlPyhHU1RSRUFNRVIpIHwgdXNlPyhRVF9N
VUxUSU1FRElBKSB7CiAgICAgICAgIEhFQURFUlMgKz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
RnVsbFNjcmVlblZpZGVvUXQuaAogICAgICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcApAQCAtMTM0LDIxICsxMjksNCBAQCBlbmFibGU/
KFZJREVPKSB7CiAgICAgfQogfQogCi1lbmFibGU/KElDT05EQVRBQkFTRSkgewotICAgIEhFQURF
UlMgKz0gXAotICAgICAgICAkJFBXRC8uLi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUNsaWVudC5oIFwKLSAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNl
Q2xpZW50UXQuaAotCi0gICAgU09VUkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudFF0LmNwcAotfQotCi1lbmFibGU/KEdFT0xPQ0FUSU9O
KSB7Ci0gICAgIEhFQURFUlMgKz0gXAotICAgICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvbkNsaWVudFF0LmgKLSAgICAgU09VUkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCi19Ci0KLXVzZT8oM0RfR1JB
UEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXRXaWRnZXRzLnByaSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcmkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGMxNjgzMDExMDVlMWU4MjU2ZTYxYzA0YWQzNDQ1Y2MyNmJlNmE0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcmkKQEAgLTAsMCArMSwzNyBAQAor
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisjIFRoaXMgZmlsZSBjb250YWlucyBzaGFyZWQgcnVsZXMgdXNlZCBib3Ro
IHdoZW4gYnVpbGRpbmcgV2ViS2l0V2lkZ2V0cworIyBpdHNlbGYsIGFuZCBieSB0YXJnZXRzIHRo
YXQgdXNlIFdlYktpdFdpZGdldHMuCisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3Ig
YW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NPVVJDRV9E
SVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQKKworSU5DTFVERVBBVEggKz0g
XAorICAgICQkU09VUkNFX0RJUi9xdC9BcGkgXAorICAgICQkU09VUkNFX0RJUi9xdC9XZWJDb3Jl
U3VwcG9ydCBcCisgICAgJCRST09UX1dFQktJVF9ESVIvU291cmNlL1dURi93dGYvcXQKKworZW5h
YmxlPyhERVZJQ0VfT1JJRU5UQVRJT04pfGVuYWJsZT8oT1JJRU5UQVRJT05fRVZFTlRTKSB7Cisg
ICAgUVQgKz0gc2Vuc29ycworfQorCitlbmFibGU/KEdFT0xPQ0FUSU9OKTogUVQgKz0gbG9jYXRp
b24KKwordXNlPyhRVF9NVUxUSU1FRElBKTogUVQgKj0gbXVsdGltZWRpYXdpZGdldHMKKworY29u
dGFpbnMoQ09ORklHLCB0ZXhtYXApOiBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9
MQorCit1c2U/KFBMVUdJTl9CQUNLRU5EX1hMSUIpOiBQS0dDT05GSUcgKz0geDExCisKK1FUICs9
IG5ldHdvcmsgd2lkZ2V0cworaGF2ZT8oUVRRVUlDSyk6IFFUICs9IHF1aWNrCitoYXZlPyhRVFBS
SU5UU1VQUE9SVCk6IFFUICs9IHByaW50c3VwcG9ydAorCit1c2U/KFRFWFRVUkVfTUFQUEVSX0dM
KXxlbmFibGU/KFdFQkdMKSB7CisgICAgUVQgKj0gb3BlbmdsCisgICAgIyBNYWtlIHN1cmUgT3Bl
bkdMIGxpYnMgYXJlIGFmdGVyIHRoZSB3ZWJjb3JlIGxpYiBzbyBNaW5HVyBjYW4gcmVzb2x2ZSBz
eW1ib2xzCisgICAgd2luMzIqOiF3aW4zMi1tc3ZjKjogTElCUyArPSAkJFFNQUtFX0xJQlNfT1BF
TkdMCit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXRXaWRnZXRzLnBybyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNhNzU0MTkyYjc0
MjBmOThmY2ViMmRiOWRhZTUxNTk1M2NjYzVkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KQEAgLTAsMCArMSw3NSBAQAorIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj
IFRhcmdldCBmaWxlIGZvciB0aGUgV2ViS2l0V2lkZ2V0cyBzdGF0aWMgbGlicmFyeQorIworIyBT
ZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0
ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitURU1QTEFURSA9IGxpYgorVEFSR0VUID0gV2ViS2l0V2lkZ2V0
cworCitpbmNsdWRlKFdlYktpdFdpZGdldHMucHJpKQorCitXRUJLSVQgKz0gd3RmIGphdmFzY3Jp
cHRjb3JlIHdlYmNvcmUgd2Via2l0MQorUVQgKz0gZ3VpCisKK0NPTkZJRyArPSBzdGF0aWNsaWIK
KworU09VUkNFUyArPSBcCisgICAgJCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIFwK
KyAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJw
YWdlLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3LmNwcCBcCisgICAgJCRQV0QvcXQv
QXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaW5zcGVj
dG9yLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmNwcCBcCisgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcCBcCisgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1FXZWJVbmRvQ29tbWFuZC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNwcCBcCisgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FTdHls
ZUZhY2FkZUltcC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGwuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0
UGx1Z2luSW1wbC5jcHAKKworSEVBREVSUyArPSBcCisgICAgJCRQV0QvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJmcmFtZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYmZyYW1lX3AuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXRnbG9iYWwuaCBc
CisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYnBhZ2UuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJwYWdlX3AuaCBcCisgICAg
JCRQV0QvcXQvQXBpL3F3ZWJ2aWV3LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaW5zcGVjdG9y
LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2Via2l0dmVyc2lvbi5oIFwKKyAgICAkJFBXRC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlX3AuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
SW5pdFdlYktpdFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFdlYlBhZ2UuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxs
YmFja1dlYlBvcHVwLmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9C
b3guaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmggXAor
ICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmggXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L1FTdHlsZUZhY2FkZUltcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9RV2lkZ2V0UGx1Z2luSW1wbC5oCisKK2NvbnRhaW5zKFFUX0NPTkZJRywgYWNj
ZXNzaWJpbGl0eSkgeworICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNz
aWJsZS5jcHAKKyAgICBIRUFERVJTICs9ICQkUFdEL3F0L0FwaS9xd2Vidmlld2FjY2Vzc2libGVf
cC5oIAorfQorCitJTkNMVURFUEFUSCArPSBcCisgICAgJCRQV0QvcXQvQXBpIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydAorCitlbmFibGU/KFZJREVPKSB7CisgICAgIXVzZT8oUVRLSVQp
OiF1c2U/KEdTVFJFQU1FUik6dXNlPyhRVF9NVUxUSU1FRElBKSB7CisgICAgICAgIEhFQURFUlMg
Kz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgKKyAgICAg
ICAgU09VUkNFUyArPSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRn
ZXQuY3BwCisgICAgfQorfQorCit1c2U/KDNEX0dSQVBISUNTKTogV0VCS0lUICs9IGFuZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IGVmNDJjOTUxODZl
MGU2NGRkM2NkNzE3ZjExOGM3ODg4ZmYzN2E1MjEuLjg0YjRlODAxYmQxYWNkZjZmZmJmNzMyOTY0
Yzk4ZWNhZTMzYTQxNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcu
Y3BwCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQqIHBhZ2VDbGllbnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQqPiAocGFnZS0+ZC0+Y2xpZW50
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQqPiAocGFnZS0+ZC0+Y2xpZW50LmRhdGEoKSk7CiAgICAgfSAKIH07CiAK
QEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpkZXRhY2hD
dXJyZW50UGFnZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHBhZ2UtPmQtPnZpZXcgPSAwOwot
ICAgIHBhZ2UtPmQtPmNsaWVudCA9IG51bGxwdHI7CisgICAgcGFnZS0+ZC0+Y2xpZW50LnJlc2V0
KCk7CiAKICAgICAvLyBpZiB0aGUgcGFnZSB3YXMgY3JlYXRlZCBieSB1cywgd2Ugb3duIGl0IGFu
ZCBuZWVkIHRvCiAgICAgLy8gZGVzdHJveSBpdCBhcyB3ZWxsLgpAQCAtNTAxLDcgKzUwMSw3IEBA
IHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6c2V0UGFnZShRV2ViUGFnZSogcGFnZSkKICAgICBpZiAo
IWQtPnBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGQtPnBhZ2UtPmQtPmNsaWVudCA9IGFk
b3B0UHRyKG5ldyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KHRoaXMsIHBhZ2UpKTsKKyAgICBk
LT5wYWdlLT5kLT5jbGllbnQucmVzZXQobmV3IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQodGhp
cywgcGFnZSkpOwogCiAgICAgaWYgKGQtPm92ZXJsYXkoKSkKICAgICAgICAgZC0+b3ZlcmxheSgp
LT5wcmVwYXJlR3JhcGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJlbGVtZW50LmNwcAppbmRleCAxMDhiOWIwNmYxZGYzYmYzM2QxYzRlMzc1ZDg4ZmRiM2Y4MGQ4
M2QzLi44MmY1NzlkOTU1MGEzYWNmZDk5ZDQzMGQxZDVjZmEwNzhmZWU4MzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSlNI
VE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKKyNpbmNsdWRlIDxRV2ViRnJhbWVBZGFwdGVyLmg+CiAjaW5jbHVkZSA8cGFy
c2VyL1NvdXJjZUNvZGUuaD4KICNpbmNsdWRlICJxdF9ydW50aW1lLmgiCiAjaW5jbHVkZSAiTm9k
ZUxpc3QuaCIKQEAgLTQ3LDggKzQ4LDYgQEAKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRl
ICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInJ1bnRp
bWVfcm9vdC5oIgogI2luY2x1ZGUgPEpTRG9jdW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC03MDYsNyArNzA1LDggQEAgUVdlYkZyYW1lICpRV2ViRWxlbWVudDo6d2ViRnJhbWUo
KSBjb25zdAogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZnJhbWUpOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lQWRhcHRlciA9IFFXZWJGcmFt
ZUFkYXB0ZXI6OmtpdChmcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lQWRhcHRlci0+YXBpSGFuZGxl
KCk7CiB9CiAKIHN0YXRpYyBib29sIHNldHVwU2NyaXB0Q29udGV4dChXZWJDb3JlOjpFbGVtZW50
KiBlbGVtZW50LCBKU0M6OkpTVmFsdWUmIHRoaXNWYWx1ZSwgU2NyaXB0U3RhdGUqJiBzdGF0ZSwg
U2NyaXB0Q29udHJvbGxlciomIHNjcmlwdENvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCAwYWNjZDMzNjJkZDY4NzM0Y2ZkZjIxMzg1ZWMzODA2NGYyYzEzMWJmLi5j
ZGI0ZDU5MTc3YjQ5OGRlM2JmYjA5ZGU2ZjUxMTdjOTM1ZGE0YWI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKQEAgLTEwNiw1NCArMTA2LDYgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCiBl
eHRlcm4gUV9HVUlfRVhQT1JUIGludCBxdF9kZWZhdWx0RHBpKCk7CiBRVF9FTkRfTkFNRVNQQUNF
CiAKLXN0YXRpYyBpbmxpbmUgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVMb2FkQ29u
dHJvbFRvQ2FjaGVQb2xpY3kodWludCBjYWNoZUxvYWRDb250cm9sKQotewotICAgIHN3aXRjaCAo
Y2FjaGVMb2FkQ29udHJvbCkgewotICAgIGNhc2UgUU5ldHdvcmtSZXF1ZXN0OjpBbHdheXNOZXR3
b3JrOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7Ci0g
ICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6OlByZWZlckNhY2hlOgotICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ7Ci0gICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6
OkFsd2F5c0NhY2hlOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRG9u
dExvYWQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJDb3JlOjpVc2VQcm90b2NvbENhY2hlUG9saWN5OwotfQotCi1RV2ViRnJhbWVEYXRhOjpRV2Vi
RnJhbWVEYXRhKFdlYkNvcmU6OlBhZ2UqIHBhcmVudFBhZ2UsIFdlYkNvcmU6OkZyYW1lKiBwYXJl
bnRGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckZyYW1lRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSkKLSAgICA6IG5hbWUoZnJhbWVOYW1l
KQotICAgICwgb3duZXJFbGVtZW50KG93bmVyRnJhbWVFbGVtZW50KQotICAgICwgcGFnZShwYXJl
bnRQYWdlKQotICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCi0gICAgLCBtYXJnaW5XaWR0aCgw
KQotICAgICwgbWFyZ2luSGVpZ2h0KDApCi17Ci0gICAgZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcg
RnJhbWVMb2FkZXJDbGllbnRRdCgpOwotICAgIGZyYW1lID0gRnJhbWU6OmNyZWF0ZShwYWdlLCBv
d25lckVsZW1lbnQsIGZyYW1lTG9hZGVyQ2xpZW50KTsKLQotICAgIC8vIEZJWE1FOiBBbGwgb2Yg
dGhlIGJlbG93IHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCBvdmVyIGludG8gV2ViQ29yZQotICAg
IGZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7Ci0gICAgaWYgKHBhcmVudEZyYW1lKQotICAg
ICAgICBwYXJlbnRGcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChmcmFtZSk7Ci19Ci0KLXZvaWQg
UVdlYkZyYW1lUHJpdmF0ZTo6aW5pdChRV2ViRnJhbWUgKnFmcmFtZSwgUVdlYkZyYW1lRGF0YSAq
ZnJhbWVEYXRhKQotewotICAgIHEgPSBxZnJhbWU7Ci0KLSAgICBhbGxvd3NTY3JvbGxpbmcgPSBm
cmFtZURhdGEtPmFsbG93c1Njcm9sbGluZzsKLSAgICBtYXJnaW5XaWR0aCA9IGZyYW1lRGF0YS0+
bWFyZ2luV2lkdGg7Ci0gICAgbWFyZ2luSGVpZ2h0ID0gZnJhbWVEYXRhLT5tYXJnaW5IZWlnaHQ7
Ci0gICAgZnJhbWUgPSBmcmFtZURhdGEtPmZyYW1lLmdldCgpOwotICAgIGZyYW1lTG9hZGVyQ2xp
ZW50ID0gZnJhbWVEYXRhLT5mcmFtZUxvYWRlckNsaWVudDsKLSAgICBmcmFtZUxvYWRlckNsaWVu
dC0+c2V0RnJhbWUocWZyYW1lLCBmcmFtZSk7Ci0KLSAgICBmcmFtZS0+aW5pdCgpOwotfQotCiB2
b2lkIFFXZWJGcmFtZVByaXZhdGU6OnNldFBhZ2UoUVdlYlBhZ2UqIG5ld1BhZ2UpCiB7CiAgICAg
aWYgKHBhZ2UgPT0gbmV3UGFnZSkKQEAgLTE2Niw2ICsxMTgsNyBAQCB2b2lkIFFXZWJGcmFtZVBy
aXZhdGU6OnNldFBhZ2UoUVdlYlBhZ2UqIG5ld1BhZ2UpCiAgICAgICAgIHEtPnNldFBhcmVudChu
ZXdQYWdlKTsKIAogICAgIHBhZ2UgPSBuZXdQYWdlOworICAgIHBhZ2VBZGFwdGVyID0gbmV3UGFn
ZS0+aGFuZGxlKCk7CiAgICAgZW1pdCBxLT5wYWdlQ2hhbmdlZCgpOwogfQogCkBAIC0zNzUsNiAr
MzI4LDExIEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6ZW1pdFVybENoYW5nZWQoKQogICAgIGVt
aXQgcS0+dXJsQ2hhbmdlZCh1cmwpOwogfQogCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6OmRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkKCkKK3sKKyAgICBlbWl0IHEtPnByb3Zpc2lvbmFsTG9hZCgpOwor
fQorCiB2b2lkIFFXZWJGcmFtZVByaXZhdGU6Ol9xX29yaWVudGF0aW9uQ2hhbmdlZCgpCiB7CiAj
aWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKQEAgLTQwOSw2ICszNjcsNjUgQEAgdm9pZCBR
V2ViRnJhbWVQcml2YXRlOjpkaWRDbGVhcldpbmRvd09iamVjdCgpCiAgICAgZW1pdCBxLT5qYXZh
U2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpOwogfQogCitib29sIFFXZWJGcmFtZVByaXZhdGU6
OmhhbmRsZVByb2dyZXNzRmluaXNoZWQoUVBvaW50ICpsb2NhbFBvcykKK3sKKyAgICBRV2lkZ2V0
ICp2aWV3ID0gcS0+cGFnZSgpLT52aWV3KCk7CisgICAgaWYgKCF2aWV3IHx8ICFsb2NhbFBvcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpsb2NhbFBvcyA9IHZpZXctPm1hcEZyb21HbG9i
YWwoUUN1cnNvcjo6cG9zKCkpOworICAgIHJldHVybiB2aWV3LT5oYXNGb2N1cygpICYmIHZpZXct
PnJlY3QoKS5jb250YWlucygqbG9jYWxQb3MpOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6
OmVtaXRJbml0aWFsTGF5b3V0Q29tcGxldGVkKCkKK3sKKyAgICBlbWl0IHEtPmluaXRpYWxMYXlv
dXRDb21wbGV0ZWQoKTsKK30KKwordm9pZCBRV2ViRnJhbWVQcml2YXRlOjplbWl0SWNvbkNoYW5n
ZWQoKQoreworICAgIGVtaXQgcS0+aWNvbkNoYW5nZWQoKTsKK30KKwordm9pZCBRV2ViRnJhbWVQ
cml2YXRlOjplbWl0TG9hZFN0YXJ0ZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQpCit7CisgICAgaWYg
KHBhZ2UgJiYgb3JpZ2luYXRpbmdMb2FkKQorICAgICAgICBlbWl0IHBhZ2UtPmxvYWRTdGFydGVk
KCk7CisgICAgZW1pdCBxLT5sb2FkU3RhcnRlZCgpOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQsIGJvb2wgb2spCit7Cisg
ICAgaWYgKHBhZ2UgJiYgb3JpZ2luYXRpbmdMb2FkKQorICAgICAgICBlbWl0IHBhZ2UtPmxvYWRG
aW5pc2hlZChvayk7CisgICAgZW1pdCBxLT5sb2FkRmluaXNoZWQob2spOworfQorCitRV2ViRnJh
bWVBZGFwdGVyICpRV2ViRnJhbWVQcml2YXRlOjpjcmVhdGVXZWJGcmFtZShRV2ViRnJhbWVBZGFw
dGVyICpwYXJlbnRBZGFwdGVyKQoreworICAgIFFXZWJGcmFtZSAqbmV3RnJhbWUgPSBuZXcgUVdl
YkZyYW1lKFFXZWJGcmFtZVByaXZhdGU6OmtpdChwYXJlbnRBZGFwdGVyKSk7CisgICAgcmV0dXJu
IG5ld0ZyYW1lLT5kOworfQorCitRV2ViRnJhbWUgKlFXZWJGcmFtZVByaXZhdGU6OmFwaUhhbmRs
ZSgpCit7CisgICAgcmV0dXJuIHE7Cit9CisKK1FPYmplY3QgKlFXZWJGcmFtZVByaXZhdGU6Omhh
bmRsZSgpCit7CisgICAgcmV0dXJuIHE7Cit9CisKK3ZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6Y29u
dGVudHNTaXplRGlkQ2hhbmdlKGNvbnN0IFFTaXplICZzaXplKQoreworICAgIGVtaXQgcS0+Y29u
dGVudHNTaXplQ2hhbmdlZChzaXplKTsKK30KKworaW50IFFXZWJGcmFtZVByaXZhdGU6OnNjcm9s
bEJhclBvbGljeShRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIChpbnQpIHEtPnNjcm9sbEJhclBvbGljeShvcmllbnRhdGlvbik7Cit9CisKIC8qIQogICAg
IFxjbGFzcyBRV2ViRnJhbWUKICAgICBcc2luY2UgNC40CkBAIC00NzIsMjkgKzQ4OSwyNyBAQCB2
b2lkIFFXZWJGcmFtZVByaXZhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0KCkKICAgICBcdmFsdWUg
QWxsTGF5ZXJzIEluY2x1ZGVzIGFsbCB0aGUgYWJvdmUgbGF5ZXJzCiAqLwogCi1RV2ViRnJhbWU6
OlFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpCi0g
ICAgOiBRT2JqZWN0KHBhcmVudCkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJQYWdlICpwYXJl
bnRQYWdlLCBRV2ViUGFnZUFkYXB0ZXIgKnBhZ2VBZGFwdGVyKQorICAgIDogUU9iamVjdChwYXJl
bnRQYWdlKQogICAgICwgZChuZXcgUVdlYkZyYW1lUHJpdmF0ZSkKIHsKLSAgICBkLT5wYWdlID0g
cGFyZW50OwotICAgIGQtPmluaXQodGhpcywgZnJhbWVEYXRhKTsKKyAgICBkLT5wYWdlID0gcGFy
ZW50UGFnZTsKKyAgICBkLT5wYWdlQWRhcHRlciA9IHBhcmVudFBhZ2UtPmhhbmRsZSgpOworICAg
IGQtPnEgPSB0aGlzOworICAgIHBhZ2VBZGFwdGVyLT5pbml0RnJhbWUoZCk7CiAKLSAgICBpZiAo
IWZyYW1lRGF0YS0+dXJsLmlzRW1wdHkoKSkgewotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdChmcmFtZURhdGEtPnVybCwgZnJhbWVEYXRhLT5yZWZlcnJlcik7Ci0gICAg
ICAgIGQtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBmcmFtZURhdGEtPm5hbWUsIGZh
bHNlKTsKLSAgICB9CiAjaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKICAgICBjb25uZWN0
KCZkLT5tX29yaWVudGF0aW9uLCBTSUdOQUwocmVhZGluZ0NoYW5nZWQoKSksIHRoaXMsIFNMT1Qo
X3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkpKTsKICAgICBkLT5tX29yaWVudGF0aW9uLnN0YXJ0KCk7
CiAjZW5kaWYKIH0KIAotUVdlYkZyYW1lOjpRV2ViRnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFX
ZWJGcmFtZURhdGEgKmZyYW1lRGF0YSkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJGcmFtZSAq
cGFyZW50KQogICAgIDogUU9iamVjdChwYXJlbnQpCiAgICAgLCBkKG5ldyBRV2ViRnJhbWVQcml2
YXRlKQogewogICAgIGQtPnBhZ2UgPSBwYXJlbnQtPmQtPnBhZ2U7Ci0gICAgZC0+aW5pdCh0aGlz
LCBmcmFtZURhdGEpOworICAgIGQtPnEgPSB0aGlzOwogI2lmIEVOQUJMRShPUklFTlRBVElPTl9F
VkVOVFMpCiAgICAgY29ubmVjdCgmZC0+bV9vcmllbnRhdGlvbiwgU0lHTkFMKHJlYWRpbmdDaGFu
Z2VkKCkpLCB0aGlzLCBTTE9UKF9xX29yaWVudGF0aW9uQ2hhbmdlZCgpKSk7CiAgICAgZC0+bV9v
cmllbnRhdGlvbi5zdGFydCgpOwpAQCAtNTAzLDkgKzUxOCw2IEBAIFFXZWJGcmFtZTo6UVdlYkZy
YW1lKFFXZWJGcmFtZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpCiAKIFFXZWJG
cmFtZTo6flFXZWJGcmFtZSgpCiB7Ci0gICAgaWYgKGQtPmZyYW1lICYmIGQtPmZyYW1lLT5sb2Fk
ZXIoKSAmJiBkLT5mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKQotICAgICAgICBzdGF0aWNfY2Fz
dDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZC0+ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPm1f
d2ViRnJhbWUgPSAwOwotCiAgICAgZGVsZXRlIGQ7CiB9CiAKQEAgLTY3NCwyMiArNjg2LDYgQEAg
c3RhdGljIGlubGluZSBib29sIGlzQ29yZUZyYW1lQ2xlYXIoV2ViQ29yZTo6RnJhbWUqIGZyYW1l
KQogICAgIHJldHVybiBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuaXNFbXB0eSgpOwogfQogCi1z
dGF0aWMgaW5saW5lIFFVcmwgZW5zdXJlQWJzb2x1dGVVcmwoY29uc3QgUVVybCAmdXJsKQotewot
ICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLmlzUmVsYXRpdmUoKSkKLSAgICAgICAgcmV0
dXJuIHVybDsKLQotICAgIC8vIFRoaXMgY29udGFpbnMgdGhlIFVSTCB3aXRoIGFic29sdXRlIHBh
dGggYnV0IHdpdGhvdXQgCi0gICAgLy8gdGhlIHF1ZXJ5IGFuZCB0aGUgZnJhZ21lbnQgcGFydC4K
LSAgICBRVXJsIGJhc2VVcmwgPSBRVXJsOjpmcm9tTG9jYWxGaWxlKFFGaWxlSW5mbyh1cmwudG9M
b2NhbEZpbGUoKSkuYWJzb2x1dGVGaWxlUGF0aCgpKTsgCi0KLSAgICAvLyBUaGUgcGF0aCBpcyBy
ZW1vdmVkIHNvIHRoZSBxdWVyeSBhbmQgdGhlIGZyYWdtZW50IHBhcnRzIGFyZSB0aGVyZS4KLSAg
ICBRU3RyaW5nIHBhdGhSZW1vdmVkID0gdXJsLnRvU3RyaW5nKFFVcmw6OlJlbW92ZVBhdGgpOwot
ICAgIFFVcmwgdG9SZXNvbHZlKHBhdGhSZW1vdmVkKTsKLSAgICAKLSAgICByZXR1cm4gYmFzZVVy
bC5yZXNvbHZlZCh0b1Jlc29sdmUpOwotfQotCiAvKiEKICAgICBccHJvcGVydHkgUVdlYkZyYW1l
Ojp1cmwKICAgICBcYnJpZWYgdGhlIHVybCBvZiB0aGUgZnJhbWUgY3VycmVudGx5IHZpZXdlZApA
QCAtNzA0LDcgKzcwMCw3IEBAIHN0YXRpYyBpbmxpbmUgUVVybCBlbnN1cmVBYnNvbHV0ZVVybChj
b25zdCBRVXJsICZ1cmwpCiB2b2lkIFFXZWJGcmFtZTo6c2V0VXJsKGNvbnN0IFFVcmwgJnVybCkK
IHsKICAgICBjbGVhckNvcmVGcmFtZShkLT5mcmFtZSk7Ci0gICAgY29uc3QgUVVybCBhYnNvbHV0
ZSA9IGVuc3VyZUFic29sdXRlVXJsKHVybCk7CisgICAgY29uc3QgUVVybCBhYnNvbHV0ZSA9IFFX
ZWJGcmFtZUFkYXB0ZXI6OmVuc3VyZUFic29sdXRlVXJsKHVybCk7CiAgICAgZC0+dXJsID0gYWJz
b2x1dGU7CiAgICAgbG9hZChhYnNvbHV0ZSk7CiB9CkBAIC03OTgsNTggKzc5NCw3IEBAIHZvaWQg
UVdlYkZyYW1lOjpsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxLAogICAgICAgICAgICAg
ICAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUUJ5dGVBcnJheSAmYm9keSkKIHsKLSAgICBpZiAoZC0+
cGFyZW50RnJhbWUoKSkKLSAgICAgICAgZC0+cGFnZS0+ZC0+aW5zaWRlT3BlbkNhbGwgPSB0cnVl
OwotCi0gICAgUVVybCB1cmwgPSBlbnN1cmVBYnNvbHV0ZVVybChyZXEudXJsKCkpOwotCi0gICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLQotICAgIHN3aXRjaCAob3Bl
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpIZWFkT3BlcmF0
aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJIRUFEIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJh
dGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlB1dE9wZXJh
dGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUFVUIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlBvc3RPcGVy
YXRpb246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBPU1QiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6RGVsZXRl
T3BlcmF0aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJERUxFVEUiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
Q3VzdG9tT3BlcmF0aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKHJlcS5h
dHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpDdXN0b21WZXJiQXR0cmlidXRlKS50b0J5dGVBcnJh
eSgpLmNvbnN0RGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3
b3JrQWNjZXNzTWFuYWdlcjo6VW5rbm93bk9wZXJhdGlvbjoKLSAgICAgICAgICAgIC8vIGVoPwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUVZhcmlhbnQgY2FjaGVMb2FkID0gcmVx
LmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OkNhY2hlTG9hZENvbnRyb2xBdHRyaWJ1dGUpOwot
ICAgIGlmIChjYWNoZUxvYWQuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAg
IHVpbnQgY2FjaGVMb2FkVmFsdWUgPSBjYWNoZUxvYWQudG9VSW50KCZvayk7Ci0gICAgICAgIGlm
IChvaykKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY2FjaGVMb2FkQ29udHJv
bFRvQ2FjaGVQb2xpY3koY2FjaGVMb2FkVmFsdWUpKTsKLSAgICB9Ci0KLSAgICBRTGlzdDxRQnl0
ZUFycmF5PiBodHRwSGVhZGVycyA9IHJlcS5yYXdIZWFkZXJMaXN0KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBodHRwSGVhZGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBRQnl0
ZUFycmF5ICZoZWFkZXJOYW1lID0gaHR0cEhlYWRlcnMuYXQoaSk7Ci0gICAgICAgIHJlcXVlc3Qu
YWRkSFRUUEhlYWRlckZpZWxkKFFTdHJpbmc6OmZyb21MYXRpbjEoaGVhZGVyTmFtZSksIFFTdHJp
bmc6OmZyb21MYXRpbjEocmVxLnJhd0hlYWRlcihoZWFkZXJOYW1lKSkpOwotICAgIH0KLQotICAg
IGlmICghYm9keS5pc0VtcHR5KCkpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoV2ViQ29y
ZTo6Rm9ybURhdGE6OmNyZWF0ZShib2R5LmNvbnN0RGF0YSgpLCBib2R5LnNpemUoKSkpOwotCi0g
ICAgZC0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIGZhbHNlKTsKLQotICAgIGlmIChk
LT5wYXJlbnRGcmFtZSgpKQotICAgICAgICBkLT5wYWdlLT5kLT5pbnNpZGVPcGVuQ2FsbCA9IGZh
bHNlOworICAgIGQtPmxvYWQocmVxLCBvcGVyYXRpb24sIGJvZHkpOwogfQogCiAvKiEKQEAgLTEw
ODgsMTAgKzEwMzMsNyBAQCB2b2lkIFFXZWJGcmFtZTo6c2Nyb2xsKGludCBkeCwgaW50IGR5KQog
CiBRUG9pbnQgUVdlYkZyYW1lOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFk
LT5mcmFtZS0+dmlldygpKQotICAgICAgICByZXR1cm4gUVBvaW50KDAsIDApOwotCi0gICAgSW50
U2l6ZSBvZnMgPSBkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKTsKKyAgICBJbnRTaXpl
IG9mcyA9IGQtPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIFFQb2ludChvZnMud2lkdGgo
KSwgb2ZzLmhlaWdodCgpKTsKIH0KIApAQCAtMTI0OCw5ICsxMTkwLDcgQEAgUVBvaW50IFFXZWJG
cmFtZTo6cG9zKCkgY29uc3QKICovCiBRUmVjdCBRV2ViRnJhbWU6Omdlb21ldHJ5KCkgY29uc3QK
IHsKLSAgICBpZiAoIWQtPmZyYW1lLT52aWV3KCkpCi0gICAgICAgIHJldHVybiBRUmVjdCgpOwot
ICAgIHJldHVybiBkLT5mcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKTsKKyAgICByZXR1cm4gZC0+
ZnJhbWVSZWN0KCk7CiB9CiAKIC8qIQpAQCAtMTQ3OSw2ICsxNDE5LDExIEBAIFFXZWJGcmFtZSog
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUpCiAg
ICAgcmV0dXJuIHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihjb3JlRnJhbWUtPmxvYWRlcigpLT5u
ZXR3b3JraW5nQ29udGV4dCgpLT5vcmlnaW5hdGluZ09iamVjdCgpKTsKIH0KIAorUVdlYkZyYW1l
ICpRV2ViRnJhbWVQcml2YXRlOjpraXQoY29uc3QgUVdlYkZyYW1lQWRhcHRlciogZnJhbWVBZGFw
dGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBRV2ViRnJhbWVQcml2YXRlKj4o
ZnJhbWVBZGFwdGVyKS0+cTsKK30KKwogCiAvKiEKICAgICBcZm4gdm9pZCBRV2ViRnJhbWU6Omph
dmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkKQEAgLTE4NTcsNCArMTgwMiwxMiBAQCBRV2Vi
RnJhbWUgKlFXZWJIaXRUZXN0UmVzdWx0OjpmcmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIGQtPmZy
YW1lLmRhdGEoKTsKIH0KIAorLyohCisgKiBcaW50ZXJuYWwKKyAqLworUVdlYkZyYW1lQWRhcHRl
ciAqUVdlYkZyYW1lOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBkOworfQorCiAjaW5j
bHVkZSAibW9jX3F3ZWJmcmFtZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCmluZGV4IGNh
OTY2NjFlMzVjYWM1MjY2ZDU1ZjBmNDE4NzNjNTY2NzBkYzM5OTEuLmFhZTNjNzFmNzE4OTlkMWI2
MzQzNTRjYTg4MjRmNzFmYThjNmRjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCkBAIC00
MSw4ICs0MSwxMCBAQCBjbGFzcyBRUHJpbnRlcjsKIFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3Mg
UVdlYk5ldHdvcmtSZXF1ZXN0OworY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKIGNsYXNzIFFXZWJG
cmFtZVByaXZhdGU7CiBjbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIGNs
YXNzIFFXZWJIaXRUZXN0UmVzdWx0OwogY2xhc3MgUVdlYkhpc3RvcnlJdGVtOwogY2xhc3MgUVdl
YlNlY3VyaXR5T3JpZ2luOwpAQCAtMTE1LDggKzExNyw4IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JU
IFFXZWJGcmFtZSA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX1BST1BFUlRZKFFQb2ludCBzY3Jv
bGxQb3NpdGlvbiBSRUFEIHNjcm9sbFBvc2l0aW9uIFdSSVRFIHNldFNjcm9sbFBvc2l0aW9uKQog
ICAgIFFfUFJPUEVSVFkoYm9vbCBmb2N1cyBSRUFEIGhhc0ZvY3VzKQogcHJpdmF0ZToKLSAgICBR
V2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKTsKLSAg
ICBRV2ViRnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7
CisgICAgUVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnRQYWdlLCBRV2ViUGFnZUFkYXB0ZXIgKik7
CisgICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50KTsKICAgICB+UVdlYkZyYW1lKCk7CiAK
IHB1YmxpYzoKQEAgLTIwMCw2ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGV2
ZW50KFFFdmVudCAqKTsKIAogICAgIFFXZWJTZWN1cml0eU9yaWdpbiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0OworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGhhbmRsZSgpIGNvbnN0OwogCiBwdWJsaWMg
UV9TTE9UUzoKICAgICBRVmFyaWFudCBldmFsdWF0ZUphdmFTY3JpcHQoY29uc3QgUVN0cmluZyYg
c2NyaXB0U291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IGQ2Nzc5ZjJi
YzU5OTMxMzliYzdkMGZlYzRiNjRlMTZlYmY1MDlkMzYuLjEzNzM4YzdmMzE2ODBjY2M3M2E4ODUw
YWRlY2QyMzdmNDIwZmQ3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMjEs
MjQgKzIxLDI1IEBACiAjaWZuZGVmIFFXRUJGUkFNRV9QX0gKICNkZWZpbmUgUVdFQkZSQU1FX1Bf
SAogCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorCiAjaW5jbHVkZSAicXdlYmZyYW1l
LmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKICNpbmNsdWRlICJx
b3JpZW50YXRpb25zZW5zb3IuaCIKICNlbmRpZiAvLyBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRT
KS4KICNpbmNsdWRlICJxd2ViZWxlbWVudC5oIgotI2luY2x1ZGUgInd0Zi9SZWZQdHIuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKICNlbmRpZgorI2luY2x1ZGUg
IlZpZXdwb3J0QXJndW1lbnRzLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDQy
ICs1MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiBjbGFzcyBRV2ViUGFnZTsKIAotY2xh
c3MgUVdlYkZyYW1lRGF0YSB7Ci1wdWJsaWM6Ci0gICAgUVdlYkZyYW1lRGF0YShXZWJDb3JlOjpQ
YWdlKiwgV2ViQ29yZTo6RnJhbWUqIHBhcmVudEZyYW1lID0gMCwKLSAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogPSAwLAotICAgICAgICAgICAgICAgICAg
Y29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSA9IFdURjo6U3RyaW5nKCkpOwotCi0gICAgV2Vi
Q29yZTo6S1VSTCB1cmw7Ci0gICAgV1RGOjpTdHJpbmcgbmFtZTsKLSAgICBXZWJDb3JlOjpIVE1M
RnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudDsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdl
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdCogZnJhbWVMb2FkZXJDbGllbnQ7Ci0KLSAgICBXVEY6OlN0cmluZyByZWZl
cnJlcjsKLSAgICBib29sIGFsbG93c1Njcm9sbGluZzsKLSAgICBpbnQgbWFyZ2luV2lkdGg7Ci0g
ICAgaW50IG1hcmdpbkhlaWdodDsKLX07Ci0KLWNsYXNzIFFXZWJGcmFtZVByaXZhdGUgeworY2xh
c3MgUVdlYkZyYW1lUHJpdmF0ZSA6IHB1YmxpYyBRV2ViRnJhbWVBZGFwdGVyIHsKIHB1YmxpYzoK
ICAgICBRV2ViRnJhbWVQcml2YXRlKCkKICAgICAgICAgOiBxKDApCiAgICAgICAgICwgaG9yaXpv
bnRhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpCiAgICAgICAgICwgdmVy
dGljYWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9sbEJhckFzTmVlZGVkKQotICAgICAgICAsIGZy
YW1lTG9hZGVyQ2xpZW50KDApCi0gICAgICAgICwgZnJhbWUoMCkKICAgICAgICAgLCBwYWdlKDAp
Ci0gICAgICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCi0gICAgICAgICwgbWFyZ2luV2lkdGgo
LTEpCi0gICAgICAgICwgbWFyZ2luSGVpZ2h0KC0xKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICAgICAgLCByb290VGV4dHVyZU1hcHBlckxheWVyKDApCiAjZW5kaWYKICAg
ICAgICAge30KLSAgICB2b2lkIGluaXQoUVdlYkZyYW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEq
IGZyYW1lRGF0YSk7CiAgICAgdm9pZCBzZXRQYWdlKFFXZWJQYWdlKik7CiAKICAgICBpbmxpbmUg
UVdlYkZyYW1lICpwYXJlbnRGcmFtZSgpIHsgcmV0dXJuIHFvYmplY3RfY2FzdDxRV2ViRnJhbWUq
PihxLT5wYXJlbnQoKSk7IH0KQEAgLTk1LDYgKzcxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFdlYkNvcmU6OkZyYW1lKiBjb3JlKGNvbnN0IFFXZWJGcmFtZSopOwogICAgIHN0YXRpYyBRV2Vi
RnJhbWUqIGtpdChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworICAgIHN0YXRpYyBRV2ViRnJhbWUq
IGtpdChjb25zdCBRV2ViRnJhbWVBZGFwdGVyKik7CiAKICAgICB2b2lkIHJlbmRlclJlbGF0aXZl
Q29vcmRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIFFGbGFnczxRV2ViRnJhbWU6OlJlbmRl
ckxheWVyPiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCkBAIC0xMDUsMjIgKzgyLDI5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlckNvbXBvc2l0
ZWRMYXllcnMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcCk7CiAjZW5kaWYKICAgICB2b2lkIHJlbmRlckZyYW1lRXh0cmFzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCosIFFGbGFnczxRV2ViRnJhbWU6OlJlbmRlckxheWVyPiwgY29uc3QgUVJl
Z2lvbiYgY2xpcCk7Ci0gICAgdm9pZCBlbWl0VXJsQ2hhbmdlZCgpOwogICAgIHZvaWQgX3Ffb3Jp
ZW50YXRpb25DaGFuZ2VkKCk7CiAKLSAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KCk7CisK
KyAgICAvLyBBZGFwdGVyIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBRV2ViRnJhbWUqIGFw
aUhhbmRsZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUU9iamVjdCogaGFuZGxlKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZURpZENoYW5nZShjb25zdCBRU2l6ZSAm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJQb2xpY3koUXQ6Ok9yaWVudGF0
aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFVybENoYW5nZWQoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUHJvZ3Jlc3NGaW5pc2hlZChRUG9pbnQqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEljb25DaGFuZ2VkKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGVtaXRMb2FkU3RhcnRlZChib29sIG9yaWdpbmF0aW5nTG9hZCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGVtaXRMb2FkRmluaXNoZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQs
IGJvb2wgb2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgUVdlYkZyYW1lQWRhcHRlciogY3JlYXRl
V2ViRnJhbWUoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOwogCiAgICAgUVdlYkZyYW1lICpx
OwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgaG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeTsKICAg
ICBRdDo6U2Nyb2xsQmFyUG9saWN5IHZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5OwotICAgIFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQgKmZyYW1lTG9hZGVyQ2xpZW50OwotICAgIFdlYkNvcmU6
OkZyYW1lICpmcmFtZTsKICAgICBRV2ViUGFnZSAqcGFnZTsKLSAgICBXZWJDb3JlOjpLVVJMIHVy
bDsKIAotICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOwotICAgIGludCBtYXJnaW5XaWR0aDsKLSAg
ICBpbnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAg
ICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKaW5kZXggZjc4NDk2NjZlMGZjYmQxOGNjZjJhZWJkMWUy
NzNjNzJiNzk5Mjc0MC4uYTk0NWI1OTJiYjI5MGUxODZjNTZiMDM5YzBkYmM4ZTY1NTJiZDkyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApAQCAtMjAsMTUgKzIwLDE2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKICNpbmNsdWRlICJx
d2ViaGlzdG9yeV9wLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKIAogI2luY2x1ZGUgIkJh
Y2tGb3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkljb25E
YXRhYmFzZUJhc2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgorI2luY2x1ZGUgPFFXZWJQYWdlQWRhcHRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiAjaW5jbHVkZSA8UVNoYXJlZERhdGE+CkBAIC01NTIsOSArNTUzLDkgQEAg
UURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oUURhdGFTdHJlYW0mIHNvdXJjZSwgUVdlYkhpc3Rvcnkm
IGhpc3RvcnkpCiAgICAgcmV0dXJuIHNvdXJjZTsKIH0KIAotUVdlYlBhZ2VQcml2YXRlKiBRV2Vi
SGlzdG9yeVByaXZhdGU6OnBhZ2UoKQorUVdlYlBhZ2VBZGFwdGVyKiBRV2ViSGlzdG9yeVByaXZh
dGU6OnBhZ2UoKQogewotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KGxzdCktPnBhZ2UoKS0+bWFpbkZyYW1l
KCkpLT5wYWdlKCktPmhhbmRsZSgpOworICAgIHJldHVybiBRV2ViUGFnZUFkYXB0ZXI6OmtpdChz
dGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4obHN0KS0+cGFnZSgpKTsK
IH0KIAogV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFFXZWJIaXN0b3J5SXRlbVByaXZhdGU6OmNvcmUo
Y29uc3QgUVdlYkhpc3RvcnlJdGVtKiBxKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmhpc3RvcnlfcC5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlfcC5o
CmluZGV4IGFhZWUzODYzMjljMDVmYzU3YzE3MmRiNmU2ODM2OTYyMWIyYWZiMzEuLjE3NjM0ZWJj
MDg4ZGU4ZTk0YjU2NDgxNWNjZDQ4OWMwOWYwNjMyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJoaXN0b3J5X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
aGlzdG9yeV9wLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5o
PgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogCi1jbGFzcyBRV2ViUGFnZVByaXZh
dGU7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJI
aXN0b3J5SXRlbVByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgewogcHVibGljOgpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGxzdC0+ZGVyZWYoKTsKICAgICB9CiAKLSAgICBR
V2ViUGFnZVByaXZhdGUqIHBhZ2UoKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UoKTsKIAog
ICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqIGxzdDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IDJmYmJhYjI0OWEwNDFjMzZhY2ZjZDJjOGVhNzZj
ODEyNjhmNmYyNWQuLjU1MDg5ZTFhMWZjZWU4Y2RlOTQzOWJkOTUyY2NiYzViMzMxNmVmOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCkBAIC0xODQsMTIgKzE4NCwxMiBA
QCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGV2ZW50KQogfQog
CiAvKiEgXGludGVybmFsICovCi12b2lkIFFXZWJJbnNwZWN0b3JQcml2YXRlOjpzZXRGcm9udGVu
ZChRV2lkZ2V0KiBuZXdGcm9udGVuZCkKK3ZvaWQgUVdlYkluc3BlY3RvclByaXZhdGU6OnNldEZy
b250ZW5kKFFPYmplY3QqIG5ld0Zyb250ZW5kKQogewogICAgIGlmIChmcm9udGVuZCkKICAgICAg
ICAgZnJvbnRlbmQtPnNldFBhcmVudCgwKTsKIAotICAgIGZyb250ZW5kID0gbmV3RnJvbnRlbmQ7
CisgICAgZnJvbnRlbmQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG5ld0Zyb250ZW5kKTsKIAog
ICAgIGlmIChmcm9udGVuZCkgewogICAgICAgICBmcm9udGVuZC0+c2V0UGFyZW50KHEpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvcl9wLmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3AuaAppbmRleCA0ZDMyN2NjNWE5MTFmN2U1MjI5
ODA0ZjFkOGUyNzlhNDU0OGVkNzU3Li45MDhkZTg0ZWRjMWQ5YWI3YTA3MTE4ZGRkYjU5MmY0YWUx
YmYyNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3Au
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3AuaApAQCAtMzUsNyAr
MzUsNyBAQCBwdWJsaWM6CiAgICAgLCBmcm9udGVuZCgwKQogICAgIHt9CiAKLSAgICB2b2lkIHNl
dEZyb250ZW5kKFFXaWRnZXQqIG5ld0Zyb250ZW5kKTsKKyAgICB2b2lkIHNldEZyb250ZW5kKFFP
YmplY3QqIG5ld0Zyb250ZW5kKTsKICAgICB2b2lkIGFkanVzdEZyb250ZW5kU2l6ZShjb25zdCBR
U2l6ZSYgc2l6ZSk7CiAKICAgICBRV2ViSW5zcGVjdG9yKiBxOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwCmluZGV4IGFkZTQ5NmZhNDRhZTNkN2VlOGQ2NzEzNDQ0NjU5OGNmMmRhZjQ0YmIuLjhj
Zjc4ODc5MjM3Y2NhN2ZlMzE0ZmNlMmZkNjYzZjkzNDg4ZmVkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKQEAgLTIyLDE4ICsyMiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAicXdlYnBhZ2UuaCIKIAotI2luY2x1ZGUgInF3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXdl
YmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9w
LmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKLSNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgi
Ci0jaW5jbHVkZSAicXdlYmluc3BlY3Rvci5oIgotI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3JfcC5o
IgotI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgotI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oIgotI2luY2x1ZGUgInF3ZWJraXR2ZXJzaW9uLmgiCi0KICNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRl
ICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgpAQCAtNDUsNiArMzMsOSBAQAogI2luY2x1ZGUg
IkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRRdC5oIgogI2luY2x1
ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2lmIFVTRShRVF9NVUxUSU1FRElBKQorI2lu
Y2x1ZGUgIkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmgiCisjZW5kaWYKICNpZiBFTkFC
TEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2luY2x1ZGUgIkRldmljZU1vdGlvbkNsaWVudFF0Lmgi
CiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgiCkBAIC02Miw3ICs1Myw2
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKQEAgLTc4LDggKzY4LDkgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJJbml0V2ViQ29yZVF0LmgiCisjaW5jbHVkZSAiSW5pdFdlYktpdFF0LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRXZWJQYWdl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clNlcnZlclF0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtODgsMjEgKzc5LDIzIEBACiAjaW5j
bHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGFnZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFzdGVi
b2FyZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJRR3JhcGhpY3NXaWRn
ZXRQbHVnaW5JbXBsLmgiCisjaW5jbHVkZSAiUXRGYWxsYmFja1dlYlBvcHVwLmgiCiAjaW5jbHVk
ZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgorI2luY2x1ZGUgIlFXZWJVbmRvQ29tbWFuZC5oIgorI2lu
Y2x1ZGUgIlFXaWRnZXRQbHVnaW5JbXBsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnku
aCIKQEAgLTExNCwxNiArMTA3LDMwIEBACiAjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogI2VuZGlm
IC8vIFFfT1NfV0lOMzIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJVbmRv
U3RlcFF0LmgiCiAjaW5jbHVkZSAiVXNlckFnZW50UXQuaCIKICNpbmNsdWRlICJXZWJFdmVudENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJXZWJLaXRWZXJzaW9uLmgiCiAjaW5jbHVkZSAiV2luZG93
RmVhdHVyZXMuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKIAorI2luY2x1ZGUgInF3ZWJm
cmFtZS5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCisjaW5jbHVkZSAicXdlYmhpc3Rvcnku
aCIKKyNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCisjaW5jbHVkZSAicXdlYmluc3BlY3Rvci5o
IgorI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3JfcC5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9y
bXBsdWdpbi5oIgorI2luY2x1ZGUgInF3ZWJraXR2ZXJzaW9uLmgiCisjaW5jbHVkZSAicXdlYnBh
Z2VfcC5oIgorI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgorI2luY2x1ZGUgInF3ZWJ2aWV3Lmgi
CisKICNpbmNsdWRlIDxRQWN0aW9uPgogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KICNpbmNsdWRl
IDxRQmFzaWNUaW1lcj4KICNpbmNsdWRlIDxRQml0QXJyYXk+CisjaW5jbHVkZSA8UUNsaXBib2Fy
ZD4KICNpbmNsdWRlIDxRQ29sb3JEaWFsb2c+CiAjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUg
PFFEZXNrdG9wV2lkZ2V0PgpAQCAtMTM3LDI0ICsxNDQsMjUgQEAKICNpbmNsdWRlIDxRTGFiZWw+
CiAjaW5jbHVkZSA8UU1lbnU+CiAjaW5jbHVkZSA8UU1lc3NhZ2VCb3g+CisjaW5jbHVkZSA8UU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFOZXR3b3JrUHJveHk+Ci0jaW5jbHVkZSA8
UVVuZG9TdGFjaz4KLSNpbmNsdWRlIDxRVXJsPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4K
ICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRQ2xpcGJvYXJkPgogI2luY2x1ZGUgPFFT
c2xTb2NrZXQ+CiAjaW5jbHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPFFTeXNJbmZvPgorI2lmIFVT
RShRVF9NT0JJTElUWV9TWVNURU1JTkZPKQorI2luY2x1ZGUgPHFzeXN0ZW1pbmZvLmg+CisjZW5k
aWYKKyNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAjaW5jbHVkZSA8UVRleHRDaGFyRm9ybWF0
PgorI2luY2x1ZGUgPFFUb29sVGlwPgogI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgotI2luY2x1ZGUg
PFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisjaW5j
bHVkZSA8UVVuZG9TdGFjaz4KKyNpbmNsdWRlIDxRVXJsPgogI2lmIGRlZmluZWQoUV9XU19YMTEp
CiAjaW5jbHVkZSA8UVgxMUluZm8+CiAjZW5kaWYKLSNpZiBVU0UoUVRfTU9CSUxJVFlfU1lTVEVN
SU5GTykKLSNpbmNsdWRlIDxxc3lzdGVtaW5mby5oPgotI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC0xNjMsOCArMTcxLDYgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCiBleHRl
cm4gUV9HVUlfRVhQT1JUIGludCBxdF9kZWZhdWx0RHBpKCk7CiBRVF9FTkRfTkFNRVNQQUNFCiAK
LWJvb2wgUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW4gPSBmYWxzZTsKLQogLy8gTG9va3VwIHRhYmxl
IG1hcHBpbmcgUVdlYlBhZ2U6OldlYkFjdGlvbnMgdG8gdGhlIGFzc29jaWF0ZWQgRWRpdG9yIGNv
bW1hbmRzCiBzdGF0aWMgY29uc3QgY2hhciogZWRpdG9yQ29tbWFuZFdlYkFjdGlvbnNbXSA9CiB7
CkBAIC0zMDAsMjMgKzMwNiwxNSBAQCBzdGF0aWMgaW5saW5lIFF0OjpEcm9wQWN0aW9uIGRyYWdP
cFRvRHJvcEFjdGlvbih1bnNpZ25lZCBhY3Rpb25zKQogCiBRV2ViUGFnZVByaXZhdGU6OlFXZWJQ
YWdlUHJpdmF0ZShRV2ViUGFnZSAqcXEpCiAgICAgOiBxKHFxKQotICAgICwgcGFnZSgwKQogI2lm
bmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICAsIHVuZG9TdGFjaygwKQogI2VuZGlmCi0gICAgLCBp
bnNpZGVPcGVuQ2FsbChmYWxzZSkKICAgICAsIG1fdG90YWxCeXRlcygwKQogICAgICwgbV9ieXRl
c1JlY2VpdmVkKCkKICAgICAsIGNsaWNrQ2F1c2VkRm9jdXMoZmFsc2UpCi0gICAgLCBuZXR3b3Jr
TWFuYWdlcigwKQotICAgICwgZm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudChmYWxzZSkKLSAgICAs
IHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCh0cnVlKQotICAgICwgc2VsZWN0VHJhaWxpbmdXaGl0
ZXNwYWNlRW5hYmxlZChmYWxzZSkKICAgICAsIGxpbmtQb2xpY3koUVdlYlBhZ2U6OkRvbnREZWxl
Z2F0ZUxpbmtzKQotICAgICwgdmlld3BvcnRTaXplKFFTaXplKDAsIDApKQotICAgICwgc2V0dGlu
Z3MoMCkKKyAgICAsIG1fdmlld3BvcnRTaXplKFFTaXplKDAsIDApKQogICAgICwgdXNlRml4ZWRM
YXlvdXQoZmFsc2UpCi0gICAgLCBwbHVnaW5GYWN0b3J5KDApCiAgICAgLCBpbnNwZWN0b3JGcm9u
dGVuZCgwKQogICAgICwgaW5zcGVjdG9yKDApCiAgICAgLCBpbnNwZWN0b3JJc0ludGVybmFsT25s
eShmYWxzZSkKQEAgLTMyNiwxNCArMzI0LDE0IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQ
cml2YXRlKFFXZWJQYWdlICpxcSkKICAgICBib29sIHVzZU1vY2sgPSBRV2ViUGFnZVByaXZhdGU6
OmRydFJ1bjsKICNlbmRpZgogCi0gICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwor
ICAgIFdlYktpdDo6aW5pdGlhbGl6ZVdlYktpdFdpZGdldHMoKTsKIAogICAgIFBhZ2U6OlBhZ2VD
bGllbnRzIHBhZ2VDbGllbnRzOwotICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IG5ldyBD
aHJvbWVDbGllbnRRdChxKTsKKyAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQgPSBuZXcgQ2hy
b21lQ2xpZW50UXQodGhpcyk7CiAgICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGllbnQgPSBu
ZXcgQ29udGV4dE1lbnVDbGllbnRRdCgpOwotICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9
IG5ldyBFZGl0b3JDbGllbnRRdChxKTsKLSAgICBwYWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gbmV3
IERyYWdDbGllbnRRdChxKTsKLSAgICBwYWdlQ2xpZW50cy5pbnNwZWN0b3JDbGllbnQgPSBuZXcg
SW5zcGVjdG9yQ2xpZW50UXQocSk7CisgICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gbmV3
IEVkaXRvckNsaWVudFF0KHRoaXMpOworICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcg
RHJhZ0NsaWVudFF0KHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCk7CisgICAgcGFnZUNsaWVudHMu
aW5zcGVjdG9yQ2xpZW50ID0gbmV3IEluc3BlY3RvckNsaWVudFF0KHRoaXMpOwogICAgIHBhZ2Ug
PSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAgIGlm
ICh1c2VNb2NrKSB7CkBAIC0zNDIsNyArMzQwLDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFn
ZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogICAgICAgICBXZWJDb3JlOjpwcm92aWRlR2VvbG9jYXRp
b25UbyhwYWdlLCBtb2NrKTsKICAgICAgICAgbW9jay0+c2V0Q29udHJvbGxlcihXZWJDb3JlOjpH
ZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSkpOwogICAgIH0gZWxzZQotICAgICAgICBX
ZWJDb3JlOjpwcm92aWRlR2VvbG9jYXRpb25UbyhwYWdlLCBuZXcgR2VvbG9jYXRpb25DbGllbnRR
dChxKSk7CisgICAgICAgIFdlYkNvcmU6OnByb3ZpZGVHZW9sb2NhdGlvblRvKHBhZ2UsIG5ldyBH
ZW9sb2NhdGlvbkNsaWVudFF0KHRoaXMpKTsKICNlbmRpZgogI2lmIEVOQUJMRShERVZJQ0VfT1JJ
RU5UQVRJT04pCiAgICAgaWYgKHVzZU1vY2spCkBAIC0zNTEsOSArMzQ5LDYgQEAgUVdlYlBhZ2VQ
cml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogICAgICAgICBXZWJDb3JlOjpw
cm92aWRlRGV2aWNlT3JpZW50YXRpb25UbyhwYWdlLCBuZXcgRGV2aWNlT3JpZW50YXRpb25DbGll
bnRRdCk7CiAgICAgV2ViQ29yZTo6cHJvdmlkZURldmljZU1vdGlvblRvKHBhZ2UsIG5ldyBEZXZp
Y2VNb3Rpb25DbGllbnRRdCk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwg
RU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIFdlYkNvcmU6OnByb3ZpZGVOb3RpZmlj
YXRpb24ocGFnZSwgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblBy
ZXNlbnRlcigpKTsKLSNlbmRpZgogCiAgICAgLy8gQnkgZGVmYXVsdCBlYWNoIHBhZ2UgaXMgcHV0
IGludG8gdGhlaXIgb3duIHVuaXF1ZSBwYWdlIGdyb3VwLCB3aGljaCBhZmZlY3RzIHBvcHVwIHdp
bmRvd3MKICAgICAvLyBhbmQgdmlzaXRlZCBsaW5rcy4gUGFnZSBncm91cHMgKHBlciBwcm9jZXNz
IG9ubHkpIGlzIGEgZmVhdHVyZSBtYWtpbmcgaXQgcG9zc2libGUgdG8gdXNlCkBAIC0zNjQsNyAr
MzU5LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQog
CiAgICAgcGFnZS0+YWRkTGF5b3V0TWlsZXN0b25lcyhEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXQpOwogCi0gICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdzKHBhZ2UtPnNldHRpbmdz
KCkpOworICAgIFFXZWJQYWdlQWRhcHRlcjo6aW5pdChwYWdlKTsKIAogICAgIGhpc3RvcnkuZCA9
IG5ldyBRV2ViSGlzdG9yeVByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0SW1wbCo+KHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKSk7CiAgICAgbWVtc2V0KGFjdGlvbnMs
IDAsIHNpemVvZihhY3Rpb25zKSk7CkBAIC0zNzIsOCArMzY3LDEzIEBAIFFXZWJQYWdlUHJpdmF0
ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkKICAgICBQYWdlR3JvdXA6OnNldFNob3Vs
ZFRyYWNrVmlzaXRlZExpbmtzKHRydWUpOwogICAgIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05T
KSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5hZGRDbGllbnQoKTsKLSNlbmRp
ZgorICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KiBwcmVzZW50ZXIgPSBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CisgICAgcHJl
c2VudGVyLT5hZGRDbGllbnQoKTsKKyNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04KKyAgICBp
ZiAoIXByZXNlbnRlci0+aGFzU3lzdGVtVHJheUljb24oKSkKKyAgICAgICAgcHJlc2VudGVyLT5z
ZXRTeXN0ZW1UcmF5SWNvbihuZXcgUVN5c3RlbVRyYXlJY29uKTsKKyNlbmRpZiAvLyBRVF9OT19T
WVNURU1UUkFZSUNPTgorI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUo
TEVHQUNZX05PVElGSUNBVElPTlMpCiB9CiAKIFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJp
dmF0ZSgpCkBAIC0zODQsOCArMzg0LDYgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2
YXRlKCkKICNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCiAgICAgZGVsZXRlIHVuZG9TdGFjazsKICNl
bmRpZgotICAgIGRlbGV0ZSBzZXR0aW5nczsKLSAgICBkZWxldGUgcGFnZTsKICAgICAKICAgICBp
ZiAoaW5zcGVjdG9yKSB7CiAgICAgICAgIC8vIElmIHRoZSBpbnNwZWN0b3IgaXMgb3VycywgZGVs
ZXRlIGl0LCBvdGhlcndpc2UganVzdCBkZXRhY2ggZnJvbSBpdC4KQEAgLTM5NCw0MSArMzkyLDIy
MCBAQCBRV2ViUGFnZVByaXZhdGU6On5RV2ViUGFnZVByaXZhdGUoKQogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBpbnNwZWN0b3ItPnNldFBhZ2UoMCk7CiAgICAgfQorICAgIC8vIEV4cGxpY2l0
bHkgZGVzdHJ1Y3QgdGhlIFdlYkNvcmUgcGFnZSBhdCB0aGlzIHBvaW50IHdoZW4gdGhlCisgICAg
Ly8gUVdlYlBhZ2VQcml2YXRlIC8gUVdlYlBhZ2VBZGFwYXRlciB2dGFibGVzIGFyZSBzdGlsbCBp
bnRhY3QsCisgICAgLy8gaW4gb3JkZXIgZm9yIHZhcmlvdXMgZGVzdHJ1Y3Rpb24gY2FsbGJhY2tz
IG91dCBvZiBXZWJDb3JlIHRvCisgICAgLy8gd29yay4KKyAgICBkZWxldGVQYWdlKCk7Cit9CiAK
LSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05T
KQotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50
ZXIoKS0+cmVtb3ZlQ2xpZW50KCk7CitXZWJDb3JlOjpQYWdlKiBRV2ViUGFnZVByaXZhdGU6OmNv
cmUoY29uc3QgUVdlYlBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIHBhZ2UtPmQtPnBhZ2U7Cit9
CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpzaG93KCkKK3sKKyAgICBpZiAoIXZpZXcpCisgICAg
ICAgIHJldHVybjsKKyAgICB2aWV3LT53aW5kb3coKS0+c2hvdygpOworfQorCit2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6c2V0Rm9jdXMoKQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIHZpZXctPnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjp1bmZv
Y3VzKCkKK3sKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3LT5jbGVh
ckZvY3VzKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpzZXRXaW5kb3dSZWN0KGNvbnN0
IFFSZWN0ICZyZWN0KQoreworICAgIGVtaXQgcS0+Z2VvbWV0cnlDaGFuZ2VSZXF1ZXN0ZWQocmVj
dCk7Cit9CisKK1FTaXplIFFXZWJQYWdlUHJpdmF0ZTo6dmlld3BvcnRTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcS0+dmlld3BvcnRTaXplKCk7Cit9CisKK1FXZWJQYWdlQWRhcHRlciAqUVdl
YlBhZ2VQcml2YXRlOjpjcmVhdGVXaW5kb3coYm9vbCBkaWFsb2cpCit7CisgICAgUVdlYlBhZ2Ug
Km5ld1BhZ2UgPSBxLT5jcmVhdGVXaW5kb3coZGlhbG9nID8gUVdlYlBhZ2U6OldlYk1vZGFsRGlh
bG9nIDogUVdlYlBhZ2U6OldlYkJyb3dzZXJXaW5kb3cpOworICAgIGlmICghbmV3UGFnZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBtYWluIGZyYW1lIGV4aXN0cywg
YXMgV2ViQ29yZSBleHBlY3RzIGl0IHdoZW4gcmV0dXJuaW5nIGZyb20gdGhpcyBDaHJvbWVDbGll
bnQ6OmNyZWF0ZVdpbmRvdygpCisgICAgbmV3UGFnZS0+ZC0+Y3JlYXRlTWFpbkZyYW1lKCk7Cisg
ICAgcmV0dXJuIG5ld1BhZ2UtPmQ7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpqYXZhU2Ny
aXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgUVN0cmluZyAmbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFFTdHJpbmcgJnNvdXJjZUlEKQoreworICAgIHEtPmphdmFTY3JpcHRDb25zb2xlTWVz
c2FnZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQ
cml2YXRlOjpqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUsIGNvbnN0IFFT
dHJpbmcmIG1zZykKK3sKKyAgICBxLT5qYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lUHJpdmF0ZTo6
a2l0KGZyYW1lKSwgbXNnKTsKK30KKworYm9vbCBRV2ViUGFnZVByaXZhdGU6OmphdmFTY3JpcHRD
b25maXJtKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2cpCit7Cisg
ICAgcmV0dXJuIHEtPmphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFt
ZSksIG1zZyk7Cit9CisKK2Jvb2wgUVdlYlBhZ2VQcml2YXRlOjpqYXZhU2NyaXB0UHJvbXB0KFFX
ZWJGcmFtZUFkYXB0ZXIgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZtc2csIGNvbnN0IFFTdHJpbmcg
JmRlZmF1bHRWYWx1ZSwgUVN0cmluZyAqcmVzdWx0KQoreworICAgIHJldHVybiBxLT5qYXZhU2Ny
aXB0UHJvbXB0KFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIG1zZywgZGVmYXVsdFZhbHVl
LCByZXN1bHQpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6cHJpbnRSZXF1ZXN0ZWQoUVdl
YkZyYW1lQWRhcHRlciAqZnJhbWUpCit7CisgICAgZW1pdCBxLT5wcmludFJlcXVlc3RlZChRV2Vi
RnJhbWVQcml2YXRlOjpraXQoZnJhbWUpKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmRh
dGFiYXNlUXVvdGFFeGNlZWRlZChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSwgY29uc3QgUVN0cmlu
ZyYgZGF0YWJhc2VOYW1lKQoreworICAgIGVtaXQgcS0+ZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFFX
ZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIGRhdGFiYXNlTmFtZSk7Cit9CisKK3ZvaWQgUVdl
YlBhZ2VQcml2YXRlOjphcHBsaWNhdGlvbkNhY2hlUXVvdGFFeGNlZWRlZChRV2ViU2VjdXJpdHlP
cmlnaW4gKm9yaWdpbiwgcXVpbnQ2NCBkZWZhdWx0T3JpZ2luUXVvdGEsIHF1aW50NjQgYykKK3sK
KyAgICBlbWl0IHEtPmFwcGxpY2F0aW9uQ2FjaGVRdW90YUV4Y2VlZGVkKG9yaWdpbiwgZGVmYXVs
dE9yaWdpblF1b3RhLCBkZWZhdWx0T3JpZ2luUXVvdGEpOworfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6c2V0VG9vbFRpcChjb25zdCBRU3RyaW5nICZ0aXApCit7CisjaWZuZGVmIFFUX05PX1RP
T0xUSVAKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0aXAuaXNF
bXB0eSgpKSB7CisgICAgICAgIHZpZXctPnNldFRvb2xUaXAoUVN0cmluZygpKTsKKyAgICAgICAg
UVRvb2xUaXA6OmhpZGVUZXh0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUVN0cmluZyBkdGlw
ID0gUUxhdGluMVN0cmluZygiPHA+IikgKyBRU3RyaW5nKHRpcCkudG9IdG1sRXNjYXBlZCgpICsg
UUxhdGluMVN0cmluZygiPC9wPiIpOworICAgICAgICB2aWV3LT5zZXRUb29sVGlwKGR0aXApOwor
ICAgIH0KKyNlbHNlCisgICAgUV9VTlVTRUQodGlwKTsKICNlbmRpZgogfQogCi1XZWJDb3JlOjpW
aWV3cG9ydEFyZ3VtZW50cyBRV2ViUGFnZVByaXZhdGU6OnZpZXdwb3J0QXJndW1lbnRzKCkKKyNp
ZiBVU0UoUVRfTVVMVElNRURJQSkKK1FXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyICpRV2ViUGFn
ZVByaXZhdGU6OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQogewotICAgIHJldHVybiBw
YWdlID8gcGFnZS0+dmlld3BvcnRBcmd1bWVudHMoKSA6IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzKCk7CisgICAgcmV0dXJuIG5ldyBXZWJLaXQ6OkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyOwogfQorI2VuZGlmCiAKLVdlYkNvcmU6OlBhZ2UqIFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShj
b25zdCBRV2ViUGFnZSogcGFnZSkKK1FXZWJGcmFtZUFkYXB0ZXIgKlFXZWJQYWdlUHJpdmF0ZTo6
bWFpbkZyYW1lQWRhcHRlcigpCiB7Ci0gICAgcmV0dXJuIHBhZ2UtPmQtPnBhZ2U7CisgICAgcmV0
dXJuIHEtPm1haW5GcmFtZSgpLT5kOwogfQogCi1RV2ViUGFnZVByaXZhdGUqIFFXZWJQYWdlUHJp
dmF0ZTo6cHJpdihRV2ViUGFnZSogcGFnZSkKK1FTdHJpbmdMaXN0IFFXZWJQYWdlUHJpdmF0ZTo6
Y2hvb3NlRmlsZXMoUVdlYkZyYW1lQWRhcHRlciAqZnJhbWUsIGJvb2wgYWxsb3dNdWx0aXBsZSwg
Y29uc3QgUVN0cmluZ0xpc3QgJnN1Z2dlc3RlZEZpbGVOYW1lcykKIHsKLSAgICByZXR1cm4gcGFn
ZS0+ZDsKKyAgICBpZiAoYWxsb3dNdWx0aXBsZSAmJiBxLT5zdXBwb3J0c0V4dGVuc2lvbihRV2Vi
UGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbikpIHsKKyAgICAgICAgUVdlYlBhZ2U6
OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb25PcHRpb24gb3B0aW9uOworICAgICAgICBvcHRp
b24ucGFyZW50RnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOworICAgICAgICBv
cHRpb24uc3VnZ2VzdGVkRmlsZU5hbWVzID0gc3VnZ2VzdGVkRmlsZU5hbWVzOworCisgICAgICAg
IFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uUmV0dXJuIG91dHB1dDsKKyAg
ICAgICAgcS0+ZXh0ZW5zaW9uKFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9u
LCAmb3B0aW9uLCAmb3V0cHV0KTsKKworICAgICAgICByZXR1cm4gb3V0cHV0LmZpbGVOYW1lczsK
KyAgICB9CisgICAgLy8gU2luZ2xlIGZpbGUKKyAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CisgICAg
UVN0cmluZyBzdWdnZXN0ZWRGaWxlOworICAgIGlmICghc3VnZ2VzdGVkRmlsZU5hbWVzLmlzRW1w
dHkoKSkKKyAgICAgICAgc3VnZ2VzdGVkRmlsZSA9IHN1Z2dlc3RlZEZpbGVOYW1lcy5maXJzdCgp
OworICAgIFFTdHJpbmcgZmlsZSA9IHEtPmNob29zZUZpbGUoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0
KGZyYW1lKSwgc3VnZ2VzdGVkRmlsZSk7CisgICAgaWYgKCFmaWxlLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmVzdWx0IDw8IGZpbGU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBRV2ViUGFn
ZVByaXZhdGU6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlIHR5cGUp
Citib29sIFFXZWJQYWdlUHJpdmF0ZTo6YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1l
QWRhcHRlciAqZnJhbWVBZGFwdGVyLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIGlu
dCB0eXBlKQogeworICAgIFFXZWJGcmFtZSAqZnJhbWUgPSBmcmFtZUFkYXB0ZXIgPyBRV2ViRnJh
bWVQcml2YXRlOjpraXQoZnJhbWVBZGFwdGVyKTogMDsKICAgICBpZiAoaW5zaWRlT3BlbkNhbGwK
ICAgICAgICAgJiYgZnJhbWUgPT0gbWFpbkZyYW1lLmRhdGEoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIHEtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KGZyYW1lLCByZXF1ZXN0
LCB0eXBlKTsKKyAgICByZXR1cm4gcS0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoZnJhbWUsIHJl
cXVlc3QsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZSh0eXBlKSk7Cit9CisKK3ZvaWQgUVdlYlBh
Z2VQcml2YXRlOjplbWl0UmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRl
ciAqZnJhbWUpCit7CisgICAgZW1pdCBxLT5yZXN0b3JlRnJhbWVTdGF0ZVJlcXVlc3RlZChRV2Vi
RnJhbWVQcml2YXRlOjpraXQoZnJhbWUpKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmVt
aXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyICpmcmFtZSwgUVdlYkhp
c3RvcnlJdGVtICppdGVtKQoreworICAgIGVtaXQgcS0+c2F2ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQo
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgaXRlbSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQ
cml2YXRlOjplbWl0RG93bmxvYWRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1
ZXN0KQoreworICAgIGVtaXQgcS0+ZG93bmxvYWRSZXF1ZXN0ZWQocmVxdWVzdCk7Cit9CisKK3Zv
aWQgUVdlYlBhZ2VQcml2YXRlOjplbWl0RnJhbWVDcmVhdGVkKFFXZWJGcmFtZUFkYXB0ZXIgKmZy
YW1lKQoreworICAgIGVtaXQgcS0+ZnJhbWVDcmVhdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChm
cmFtZSkpOworfQorCitib29sIFFXZWJQYWdlUHJpdmF0ZTo6ZXJyb3JQYWdlRXh0ZW5zaW9uKFFX
ZWJQYWdlQWRhcHRlcjo6RXJyb3JQYWdlT3B0aW9uICpvcHQsIFFXZWJQYWdlQWRhcHRlcjo6RXJy
b3JQYWdlUmV0dXJuICpvdXQpCit7CisgICAgUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvbk9w
dGlvbiBvcHRpb247CisgICAgaWYgKG9wdC0+ZG9tYWluID09IFFMYXRpbjFTdHJpbmcoIlF0TmV0
d29yayIpKQorICAgICAgICBvcHRpb24uZG9tYWluID0gUVdlYlBhZ2U6OlF0TmV0d29yazsKKyAg
ICBlbHNlIGlmIChvcHQtPmRvbWFpbiA9PSBRTGF0aW4xU3RyaW5nKCJIVFRQIikpCisgICAgICAg
IG9wdGlvbi5kb21haW4gPSBRV2ViUGFnZTo6SHR0cDsKKyAgICBlbHNlIGlmIChvcHQtPmRvbWFp
biA9PSBRTGF0aW4xU3RyaW5nKCJXZWJLaXQiKSkKKyAgICAgICAgb3B0aW9uLmRvbWFpbiA9IFFX
ZWJQYWdlOjpXZWJLaXQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgb3B0
aW9uLnVybCA9IG9wdC0+dXJsOworICAgIG9wdGlvbi5mcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6
OmtpdChvcHQtPmZyYW1lKTsKKyAgICBvcHRpb24uZXJyb3IgPSBvcHQtPmVycm9yOworICAgIG9w
dGlvbi5lcnJvclN0cmluZyA9IG9wdC0+ZXJyb3JTdHJpbmc7CisgICAgUVdlYlBhZ2U6OkVycm9y
UGFnZUV4dGVuc2lvblJldHVybiBvdXRwdXQ7CisgICAgaWYgKCFxLT5leHRlbnNpb24oUVdlYlBh
Z2U6OkVycm9yUGFnZUV4dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBvdXQtPmJhc2VVcmwgPSBvdXRwdXQuYmFzZVVybDsKKyAgICBvdXQtPmNv
bnRlbnQgPSBvdXRwdXQuY29udGVudDsKKyAgICBvdXQtPmNvbnRlbnRUeXBlID0gb3V0cHV0LmNv
bnRlbnRUeXBlOworICAgIG91dC0+ZW5jb2RpbmcgPSBvdXRwdXQuZW5jb2Rpbmc7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1F0UGx1Z2luV2lkZ2V0QWRhcHRlciAqUVdlYlBhZ2VQcml2YXRlOjpj
cmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyAmY2xhc3NpZCwgY29uc3QgUVVybCAmdXJsLCBjb25z
dCBRU3RyaW5nTGlzdCAmcGFyYW1OYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtVmFsdWVz
KQoreworICAgIFFPYmplY3QgKndpZGdldCA9IHEtPmNyZWF0ZVBsdWdpbihjbGFzc2lkLCB1cmws
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICByZXR1cm4gYWRhcHRlckZvcldpZGdldCh3
aWRnZXQpOworfQorCitRdFBsdWdpbldpZGdldEFkYXB0ZXIgKlFXZWJQYWdlUHJpdmF0ZTo6YWRh
cHRlckZvcldpZGdldChRT2JqZWN0ICpvYmplY3QpIGNvbnN0Cit7CisgICAgaWYgKFFXaWRnZXQg
KndpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ob2JqZWN0KSkKKyAgICAgICAgcmV0dXJu
IG5ldyBRV2lkZ2V0UGx1Z2luSW1wbCh3aWRnZXQpOworICAgIGlmIChRR3JhcGhpY3NXaWRnZXQg
KndpZGdldCA9IHFvYmplY3RfY2FzdDxRR3JhcGhpY3NXaWRnZXQqPihvYmplY3QpKQorICAgICAg
ICByZXR1cm4gbmV3IFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGwod2lkZ2V0KTsKKyAgICByZXR1
cm4gMDsKIH0KIAogdm9pZCBRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZU1haW5GcmFtZSgpCiB7CiAg
ICAgaWYgKCFtYWluRnJhbWUpIHsKLSAgICAgICAgUVdlYkZyYW1lRGF0YSBmcmFtZURhdGEocGFn
ZSk7Ci0gICAgICAgIG1haW5GcmFtZSA9IG5ldyBRV2ViRnJhbWUocSwgJmZyYW1lRGF0YSk7Ci0K
KyAgICAgICAgbWFpbkZyYW1lID0gbmV3IFFXZWJGcmFtZShxLCB0aGlzKTsKICAgICAgICAgZW1p
dCBxLT5mcmFtZUNyZWF0ZWQobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgfQogfQpAQCAtNDc1LDQ5
ICs2NTIsNDkgQEAgUU1lbnUgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlQ29udGV4dE1lbnUoY29u
c3QgV2ViQ29yZTo6Q29udGV4dE1lbnUgKndlYmNvcmVNZW4KICAgICBpZiAoIWNsaWVudCB8fCAh
d2ViY29yZU1lbnUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUU1lbnUqIG1lbnUgPSBuZXcg
UU1lbnUoY2xpZW50LT5vd25lcldpZGdldCgpKTsKKyAgICBRTWVudSogbWVudSA9IG5ldyBRTWVu
dShxLT52aWV3KCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMtPmNvdW50KCk7ICsr
aSkgewogICAgICAgICBjb25zdCBDb250ZXh0TWVudUl0ZW0gJml0ZW0gPSBpdGVtcy0+YXQoaSk7
CiAgICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViQ29y
ZTo6Q2hlY2thYmxlQWN0aW9uVHlwZTogLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBj
YXNlIFdlYkNvcmU6OkFjdGlvblR5cGU6IHsKLSAgICAgICAgICAgICAgICBRV2ViUGFnZTo6V2Vi
QWN0aW9uIGFjdGlvbiA9IHdlYkFjdGlvbkZvckNvbnRleHRNZW51QWN0aW9uKGl0ZW0uYWN0aW9u
KCkpOwotICAgICAgICAgICAgICAgIFFBY3Rpb24gKmEgPSBxLT5hY3Rpb24oYWN0aW9uKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYSkgewotICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0
ZW0gaXQoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXQpOwotICAgICAgICAgICAgICAgICAgICBQ
bGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gZGVzYyA9IGl0LnJlbGVhc2VQbGF0Zm9ybURlc2Ny
aXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGEtPnNldEVuYWJsZWQoZGVzYy5lbmFibGVk
KTsKLSAgICAgICAgICAgICAgICAgICAgYS0+c2V0Q2hlY2tlZChkZXNjLmNoZWNrZWQpOwotICAg
ICAgICAgICAgICAgICAgICBhLT5zZXRDaGVja2FibGUoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6
Q2hlY2thYmxlQWN0aW9uVHlwZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVudS0+YWRkQWN0
aW9uKGEpOwotICAgICAgICAgICAgICAgICAgICB2aXNpdGVkV2ViQWN0aW9ucy0+c2V0Qml0KGFj
dGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkNoZWNrYWJsZUFjdGlvblR5cGU6IC8qIGZhbGwgdGhyb3VnaCAqLwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkFjdGlvblR5cGU6IHsKKyAgICAgICAgICAgIFFXZWJQYWdl
OjpXZWJBY3Rpb24gYWN0aW9uID0gd2ViQWN0aW9uRm9yQ29udGV4dE1lbnVBY3Rpb24oaXRlbS5h
Y3Rpb24oKSk7CisgICAgICAgICAgICBRQWN0aW9uICphID0gcS0+YWN0aW9uKGFjdGlvbik7Cisg
ICAgICAgICAgICBpZiAoYSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdChp
dGVtKTsKKyAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2hl
Y2tPckVuYWJsZUlmTmVlZGVkKGl0KTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24gZGVzYyA9IGl0LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CisgICAg
ICAgICAgICAgICAgYS0+c2V0RW5hYmxlZChkZXNjLmVuYWJsZWQpOworICAgICAgICAgICAgICAg
IGEtPnNldENoZWNrZWQoZGVzYy5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICBhLT5zZXRDaGVj
a2FibGUoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZSk7CisKKyAg
ICAgICAgICAgICAgICBtZW51LT5hZGRBY3Rpb24oYSk7CisgICAgICAgICAgICAgICAgdmlzaXRl
ZFdlYkFjdGlvbnMtPnNldEJpdChhY3Rpb24pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTZXBhcmF0b3JUeXBlOgotICAgICAgICAgICAgICAgIG1lbnUtPmFkZFNl
cGFyYXRvcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJD
b3JlOjpTdWJtZW51VHlwZTogewotICAgICAgICAgICAgICAgIFFNZW51ICpzdWJNZW51ID0gY3Jl
YXRlQ29udGV4dE1lbnUod2ViY29yZU1lbnUsIGl0ZW0ucGxhdGZvcm1TdWJNZW51KCksIHZpc2l0
ZWRXZWJBY3Rpb25zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6U2VwYXJhdG9yVHlwZToKKyAgICAgICAgICAgIG1lbnUtPmFkZFNlcGFyYXRv
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6U3VibWVudVR5
cGU6IHsKKyAgICAgICAgICAgIFFNZW51ICpzdWJNZW51ID0gY3JlYXRlQ29udGV4dE1lbnUod2Vi
Y29yZU1lbnUsIGl0ZW0ucGxhdGZvcm1TdWJNZW51KCksIHZpc2l0ZWRXZWJBY3Rpb25zKTsKIAot
ICAgICAgICAgICAgICAgIGJvb2wgYW55RW5hYmxlZEFjdGlvbiA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBhbnlFbmFibGVkQWN0aW9uID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBRTGlz
dDxRQWN0aW9uICo+IGFjdGlvbnMgPSBzdWJNZW51LT5hY3Rpb25zKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLmNvdW50KCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYWN0aW9ucy5hdChpKS0+aXNWaXNpYmxlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhbnlFbmFibGVkQWN0aW9uIHw9IGFjdGlvbnMuYXQoaSktPmlzRW5hYmxlZCgp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGRvbid0IHNob3cgc3Vi
LW1lbnVzIHdpdGgganVzdCBkaXNhYmxlZCBhY3Rpb25zCi0gICAgICAgICAgICAgICAgaWYgKGFu
eUVuYWJsZWRBY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ViTWVudS0+c2V0VGl0bGUo
aXRlbS50aXRsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVudS0+YWRkQWN0aW9uKHN1Yk1l
bnUtPm1lbnVBY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBzdWJNZW51OwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zID0gc3ViTWVudS0+YWN0aW9ucygpOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLmNvdW50KCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChhY3Rpb25zLmF0KGkpLT5pc1Zpc2libGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYW55RW5hYmxlZEFjdGlvbiB8PSBhY3Rpb25zLmF0KGkpLT5pc0VuYWJsZWQoKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZG9uJ3Qgc2hvdyBzdWItbWVudXMgd2l0aCBq
dXN0IGRpc2FibGVkIGFjdGlvbnMKKyAgICAgICAgICAgIGlmIChhbnlFbmFibGVkQWN0aW9uKSB7
CisgICAgICAgICAgICAgICAgc3ViTWVudS0+c2V0VGl0bGUoaXRlbS50aXRsZSgpKTsKKyAgICAg
ICAgICAgICAgICBtZW51LT5hZGRBY3Rpb24oc3ViTWVudS0+bWVudUFjdGlvbigpKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGRlbGV0ZSBzdWJNZW51OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbWVudTsK
QEAgLTYxOSw2ICs3OTYsNjUgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OnVwZGF0ZU5hdmlnYXRp
b25BY3Rpb25zKCkKICAgICB1cGRhdGVBY3Rpb24oUVdlYlBhZ2U6OlJlbG9hZEFuZEJ5cGFzc0Nh
Y2hlKTsKIH0KIAorUU9iamVjdCAqUVdlYlBhZ2VQcml2YXRlOjppbnNwZWN0b3JIYW5kbGUoKQor
eworICAgIHJldHVybiBnZXRPckNyZWF0ZUluc3BlY3RvcigpOworfQorCit2b2lkIFFXZWJQYWdl
UHJpdmF0ZTo6c2V0SW5zcGVjdG9yRnJvbnRlbmQoUU9iamVjdCogZnJvbnRlbmQpCit7CisgICAg
aW5zcGVjdG9yRnJvbnRlbmQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KGZyb250ZW5kKTsKKyAg
ICBpZiAoaW5zcGVjdG9yKQorICAgICAgICBpbnNwZWN0b3ItPmQtPnNldEZyb250ZW5kKGZyb250
ZW5kKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OnNldEluc3BlY3RvcldpbmRvd1RpdGxl
KGNvbnN0IFFTdHJpbmcmIHRpdGxlKQoreworICAgIGlmIChpbnNwZWN0b3IpCisgICAgICAgIGlu
c3BlY3Rvci0+c2V0V2luZG93VGl0bGUodGl0bGUpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6Y3JlYXRlV2ViSW5zcGVjdG9yKFFPYmplY3QqKiBpbnNwZWN0b3JWaWV3LCBRV2ViUGFnZUFk
YXB0ZXIqKiBpbnNwZWN0b3JQYWdlKQoreworICAgIFFXZWJQYWdlKiBwYWdlID0gbmV3IFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50V2ViUGFnZTsKKyAgICAqaW5zcGVjdG9yVmlldyA9IHBhZ2UtPnZp
ZXcoKTsKKyAgICAqaW5zcGVjdG9yUGFnZSA9IHBhZ2UtPmQ7Cit9CisKKyNpZm5kZWYgUVRfTk9f
TUVOVQorc3RhdGljIFFTdHJpbmdMaXN0IGl0ZXJhdGVDb250ZXh0TWVudShRTWVudSogbWVudSkK
K3sKKyAgICBpZiAoIW1lbnUpCisgICAgICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOworCisgICAg
UVN0cmluZ0xpc3QgaXRlbXM7CisgICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zID0gbWVudS0+
YWN0aW9ucygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5jb3VudCgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGFjdGlvbnMuYXQoaSktPmlzU2VwYXJhdG9yKCkpCisgICAgICAgICAg
ICBpdGVtcyA8PCBRTGF0aW4xU3RyaW5nKCI8c2VwYXJhdG9yPiIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBpdGVtcyA8PCBhY3Rpb25zLmF0KGkpLT50ZXh0KCk7CisgICAgICAgIGlmIChh
Y3Rpb25zLmF0KGkpLT5tZW51KCkpCisgICAgICAgICAgICBpdGVtcyA8PCBpdGVyYXRlQ29udGV4
dE1lbnUoYWN0aW9ucy5hdChpKS0+bWVudSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGl0ZW1zOwor
fQorI2VuZGlmCisKK1FTdHJpbmdMaXN0IFFXZWJQYWdlUHJpdmF0ZTo6bWVudUFjdGlvbnNBc1Rl
eHQoKQoreworI2lmbmRlZiBRVF9OT19NRU5VCisgICAgcmV0dXJuIGl0ZXJhdGVDb250ZXh0TWVu
dShjdXJyZW50Q29udGV4dE1lbnUuZGF0YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIFFTdHJpbmdM
aXN0KCk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmVtaXRWaWV3cG9ydENo
YW5nZVJlcXVlc3RlZCgpCit7CisgICAgZW1pdCBxLT52aWV3cG9ydENoYW5nZVJlcXVlc3RlZCgp
OworfQorCiB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlRWRpdG9yQWN0aW9ucygpCiB7CiAg
ICAgdXBkYXRlQWN0aW9uKFFXZWJQYWdlOjpDdXQpOwpAQCAtNjgyLDggKzkxOCw3IEBAIHZvaWQg
UVdlYlBhZ2VQcml2YXRlOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICpldikKICAgICAgICAgcS0+
dGltZXJFdmVudChldik7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6bW91c2VNb3ZlRXZlbnQoVCogZXYpCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VN
b3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgaWYgKCFmcmFt
ZS0+dmlldygpKQpAQCAtNjkzLDggKzkyOCw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3Vz
ZU1vdmVFdmVudChUKiBldikKICAgICBldi0+c2V0QWNjZXB0ZWQoYWNjZXB0ZWQpOwogfQogCi10
ZW1wbGF0ZTxjbGFzcyBUPgotdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlUHJlc3NFdmVudChU
KiBldikKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQq
IGV2KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpAQCAtNzI5LDgg
Kzk2Myw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVByZXNzRXZlbnQoVCogZXYpCiAg
ICAgICAgIGNsaWNrQ2F1c2VkRm9jdXMgPSB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBUPgot
dm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChUICpldikKK3ZvaWQg
UVdlYlBhZ2VQcml2YXRlOjptb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKmV2KQog
ewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobWFp
bkZyYW1lLmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpAQCAtNzQ3LDggKzk4MCw3
IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZURvdWJsZUNsaWNrRXZlbnQoVCAqZXYpCiAg
ICAgdHJpcGxlQ2xpY2sgPSBRUG9pbnRGKGV2LT5wb3MoKSkudG9Qb2ludCgpOwogfQogCi10ZW1w
bGF0ZTxjbGFzcyBUPgotdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlVHJpcGxlQ2xpY2tFdmVu
dChUICpldikKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVRyaXBsZUNsaWNrRXZlbnQoUU1v
dXNlRXZlbnQgKmV2KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpA
QCAtNzYyLDggKzk5NCw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVRyaXBsZUNsaWNr
RXZlbnQoVCAqZXYpCiAgICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKIH0KIAotdGVtcGxh
dGU8Y2xhc3MgVD4KLXZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVJlbGVhc2VFdmVudChUICpl
dikKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCAq
ZXYpCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29y
ZShtYWluRnJhbWUuZGF0YSgpKTsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkpCkBAIC03OTAsNyAr
MTAyMSw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTb2Z0d2FyZUlucHV0UGFuZWwo
UXQ6Ok1vdXNlQnV0dG9uIGJ1dHRvbiwgY29uc3QgUVBvCiAgICAgICAgICYmIGZyYW1lLT5kb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpCiAgICAgICAgICYmIGJ1dHRvbiA9PSBRdDo6TGVmdEJ1dHRv
biAmJiBxQXBwLT5hdXRvU2lwRW5hYmxlZCgpKSB7CiAgICAgICAgIFFTdHlsZTo6UmVxdWVzdFNv
ZnR3YXJlSW5wdXRQYW5lbCBiZWhhdmlvciA9IFFTdHlsZTo6UmVxdWVzdFNvZnR3YXJlSW5wdXRQ
YW5lbCgKLSAgICAgICAgICAgIGNsaWVudC0+b3duZXJXaWRnZXQoKS0+c3R5bGUoKS0+c3R5bGVI
aW50KFFTdHlsZTo6U0hfUmVxdWVzdFNvZnR3YXJlSW5wdXRQYW5lbCkpOworICAgICAgICAgICAg
Y2xpZW50LT5zdHlsZSgpLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9SZXF1ZXN0U29mdHdhcmVJbnB1
dFBhbmVsKSk7CiAgICAgICAgIGlmICghY2xpY2tDYXVzZWRGb2N1cyB8fCBiZWhhdmlvciA9PSBR
U3R5bGU6OlJTSVBfT25Nb3VzZUNsaWNrKSB7CiAgICAgICAgICAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoZnJhbWUt
PnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb3MpLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpIHsKQEAgLTgzMywxNCArMTA2NCwxMyBAQCBRTWVu
dSAqUVdlYlBhZ2U6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKQogfQogCiAjaWZuZGVmIFFU
X05PX1dIRUVMRVZFTlQKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIFFXZWJQYWdlUHJpdmF0ZTo6
d2hlZWxFdmVudChUICpldikKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjp3aGVlbEV2ZW50KFFXaGVl
bEV2ZW50ICpldikKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkpOwogICAgIGlmICghZnJhbWUtPnZpZXcoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBldiA9IGNvbnZlcnRXaGVl
bEV2ZW50KGV2KTsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGV2ID0gY29udmVydFdoZWVsRXZl
bnQoZXYsIFFBcHBsaWNhdGlvbjo6d2hlZWxTY3JvbGxMaW5lcygpKTsKICAgICBib29sIGFjY2Vw
dGVkID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHBldik7CiAgICAg
ZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKIH0KQEAgLTEzNDAsMzMgKzE1NzAsMzkgQEAgYm9v
bCBRV2ViUGFnZVByaXZhdGU6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogCiBib29s
IFFXZWJQYWdlUHJpdmF0ZTo6Z2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZlbnQqIGV2ZW50KQogewot
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBR
V2ViRnJhbWVQcml2YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkpOwotICAgIGlmICghZnJhbWUt
PnZpZXcoKSkKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSA9IG1haW5GcmFtZS5kYXRhKCkt
PmQ7CisgICAgaWYgKCFmcmFtZS0+aGFzVmlldygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
ICAgICAvLyBRR2VzdHVyZUV2ZW50cyBjYW4gY29udGFpbiB1cGRhdGVzIGZvciBtdWx0aXBsZSBn
ZXN0dXJlcy4KICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCisgICAgLy8gUUdlc3R1cmVFdmVudCBsaXZlcyBpbiBXaWRnZXRzLCB3ZSdsbCBuZWVk
IGEgZHVtbXkgc3RydWN0IHRvIG11bGUgdGhlIGluZm8gaXQgY29udGFpbnMgdG8gdGhlICJvdGhl
ciBzaWRlIgorICAgIFFHZXN0dXJlRXZlbnRGYWNhZGUgZ2VzdHVyZUZhY2FkZTsKKwogICAgIFFH
ZXN0dXJlKiBnZXN0dXJlID0gZXZlbnQtPmdlc3R1cmUoUXQ6OlRhcEdlc3R1cmUpOwogICAgIC8v
IEJld2FyZSB0aGF0IGdlc3R1cmVzIHNlbmQgYnkgRHVtcFJlbmRlclRyZWUgd2lsbCBoYXZlIHN0
YXRlIFF0OjpOb0dlc3R1cmUsCiAgICAgLy8gZHVlIHRvIG5vdCBvcmlnaW5hdGluZyBmcm9tIGEg
R2VzdHVyZVJlY29nbml6ZXIuCiAgICAgaWYgKGdlc3R1cmUgJiYgKGdlc3R1cmUtPnN0YXRlKCkg
PT0gUXQ6Okdlc3R1cmVTdGFydGVkIHx8IGdlc3R1cmUtPnN0YXRlKCkgPT0gUXQ6Ok5vR2VzdHVy
ZSkpIHsKLSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQo
Y29udmVydEdlc3R1cmUoZXZlbnQsIGdlc3R1cmUpKTsKLSAgICAgICAgZXZlbnQtPnNldEFjY2Vw
dGVkKHRydWUpOworICAgICAgICBnZXN0dXJlRmFjYWRlLnR5cGUgPSBRdDo6VGFwR2VzdHVyZTsK
KyAgICAgICAgUVBvaW50RiBnbG9iYWxQb3MgPSBzdGF0aWNfY2FzdDxjb25zdCBRVGFwR2VzdHVy
ZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOworICAgICAgICBnZXN0dXJlRmFjYWRlLmdsb2JhbFBv
cyA9IGdsb2JhbFBvcy50b1BvaW50KCk7CisgICAgICAgIGdlc3R1cmVGYWNhZGUucG9zID0gZXZl
bnQtPndpZGdldCgpLT5tYXBGcm9tR2xvYmFsKGdsb2JhbFBvcy50b1BvaW50KCkpOworICAgICAg
ICBmcmFtZS0+aGFuZGxlR2VzdHVyZUV2ZW50KCZnZXN0dXJlRmFjYWRlKTsKICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CiAgICAgfQogICAgIGdlc3R1cmUgPSBldmVudC0+Z2VzdHVyZShRdDo6VGFw
QW5kSG9sZEdlc3R1cmUpOwogICAgIGlmIChnZXN0dXJlICYmIChnZXN0dXJlLT5zdGF0ZSgpID09
IFF0OjpHZXN0dXJlU3RhcnRlZCB8fCBnZXN0dXJlLT5zdGF0ZSgpID09IFF0OjpOb0dlc3R1cmUp
KSB7Ci0gICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnRG
b3JHZXN0dXJlKGNvbnZlcnRHZXN0dXJlKGV2ZW50LCBnZXN0dXJlKSk7Ci0gICAgICAgIGV2ZW50
LT5zZXRBY2NlcHRlZCh0cnVlKTsKKyAgICAgICAgZ2VzdHVyZUZhY2FkZS50eXBlID0gUXQ6OlRh
cEFuZEhvbGRHZXN0dXJlOworICAgICAgICBRUG9pbnRGIGdsb2JhbFBvcyA9IHN0YXRpY19jYXN0
PGNvbnN0IFFUYXBBbmRIb2xkR2VzdHVyZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOworICAgICAg
ICBnZXN0dXJlRmFjYWRlLmdsb2JhbFBvcyA9IGdsb2JhbFBvcy50b1BvaW50KCk7CisgICAgICAg
IGdlc3R1cmVGYWNhZGUucG9zID0gZXZlbnQtPndpZGdldCgpLT5tYXBGcm9tR2xvYmFsKGdsb2Jh
bFBvcy50b1BvaW50KCkpOworICAgICAgICBmcmFtZS0+aGFuZGxlR2VzdHVyZUV2ZW50KCZnZXN0
dXJlRmFjYWRlKTsKICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKIAorICAgIGV2ZW50LT5zZXRBY2NlcHRlZChoYW5kbGVkKTsK
ICAgICByZXR1cm4gaGFuZGxlZDsKLSNlbHNlCi0gICAgZXZlbnQtPmlnbm9yZSgpOwotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiAvKiEKQEAgLTIwMzcsMTIgKzIyNzMsMTIgQEAgdm9p
ZCBRV2ViUGFnZTo6c2V0VmlldyhRV2lkZ2V0KiB2aWV3KQogCiAgICAgaWYgKGQtPmNsaWVudCkg
ewogICAgICAgICBpZiAoZC0+Y2xpZW50LT5pc1FXaWRnZXRDbGllbnQoKSkKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PFBhZ2VDbGllbnRRV2lkZ2V0Kj4oZC0+Y2xpZW50LmdldCgpKS0+dmlldyA9
IHZpZXc7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UVdpZGdldCo+KGQtPmNs
aWVudC5kYXRhKCkpLT52aWV3ID0gdmlldzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmICh2aWV3KQotICAgICAgICBkLT5jbGllbnQgPSBhZG9wdFB0cihuZXcgUGFnZUNsaWVudFFX
aWRnZXQodmlldywgdGhpcykpOworICAgICAgICBkLT5jbGllbnQucmVzZXQobmV3IFBhZ2VDbGll
bnRRV2lkZ2V0KHZpZXcsIHRoaXMpKTsKIH0KIAogLyohCkBAIC0yMDg4LDggKzIzMjQsNyBAQCB2
b2lkIFFXZWJQYWdlOjpqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUVN0
cmluZyYgbXNnKQogewogICAgIFFfVU5VU0VEKGZyYW1lKQogI2lmbmRlZiBRVF9OT19NRVNTQUdF
Qk9YCi0gICAgUVdpZGdldCogcGFyZW50ID0gKGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVy
V2lkZ2V0KCkgOiAwOwotICAgIFFNZXNzYWdlQm94IGJveChwYXJlbnQpOworICAgIFFNZXNzYWdl
Qm94IGJveCh2aWV3KCkpOwogICAgIGJveC5zZXRXaW5kb3dUaXRsZSh0cigiSmF2YVNjcmlwdCBB
bGVydCAtICUxIikuYXJnKG1haW5GcmFtZSgpLT51cmwoKS5ob3N0KCkpKTsKICAgICBib3guc2V0
VGV4dEZvcm1hdChRdDo6UGxhaW5UZXh0KTsKICAgICBib3guc2V0VGV4dChtc2cpOwpAQCAtMjEx
MCw4ICsyMzQ1LDcgQEAgYm9vbCBRV2ViUGFnZTo6amF2YVNjcmlwdENvbmZpcm0oUVdlYkZyYW1l
ICpmcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnKQogI2lmZGVmIFFUX05PX01FU1NBR0VCT1gKICAg
ICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAgUVdpZGdldCogcGFyZW50ID0gKGQtPmNsaWVudCkg
PyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIFFNZXNzYWdlQm94IGJveChwYXJl
bnQpOworICAgIFFNZXNzYWdlQm94IGJveCh2aWV3KCkpOwogICAgIGJveC5zZXRXaW5kb3dUaXRs
ZSh0cigiSmF2YVNjcmlwdCBDb25maXJtIC0gJTEiKS5hcmcobWFpbkZyYW1lKCktPnVybCgpLmhv
c3QoKSkpOwogICAgIGJveC5zZXRUZXh0Rm9ybWF0KFF0OjpQbGFpblRleHQpOwogICAgIGJveC5z
ZXRUZXh0KG1zZyk7CkBAIC0yMTM2LDggKzIzNzAsNyBAQCBib29sIFFXZWJQYWdlOjpqYXZhU2Ny
aXB0UHJvbXB0KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZywgY29uc3QgUVN0
cgogICAgIGJvb2wgb2sgPSBmYWxzZTsKICNpZm5kZWYgUVRfTk9fSU5QVVRESUFMT0cKIAotICAg
IFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgp
IDogMDsKLSAgICBRSW5wdXREaWFsb2cgZGxnKHBhcmVudCk7CisgICAgUUlucHV0RGlhbG9nIGRs
Zyh2aWV3KCkpOwogICAgIGRsZy5zZXRXaW5kb3dUaXRsZSh0cigiSmF2YVNjcmlwdCBQcm9tcHQg
LSAlMSIpLmFyZyhtYWluRnJhbWUoKS0+dXJsKCkuaG9zdCgpKSk7CiAKICAgICAvLyBIYWNrIHRv
IGZvcmNlIHRoZSBkaWFsb2cncyBRTGFiZWwgaW50byBwbGFpbiB0ZXh0IG1vZGUKQEAgLTIxODEs
OCArMjQxNCw3IEBAIGJvb2wgUVdlYlBhZ2U6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKQog
I2lmZGVmIFFUX05PX01FU1NBR0VCT1gKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgIFFX
aWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpIDog
MDsKLSAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRp
b24ocGFyZW50LCB0cigiSmF2YVNjcmlwdCBQcm9ibGVtIC0gJTEiKS5hcmcobWFpbkZyYW1lKCkt
PnVybCgpLmhvc3QoKSksIHRyKCJUaGUgc2NyaXB0IG9uIHRoaXMgcGFnZSBhcHBlYXJzIHRvIGhh
dmUgYSBwcm9ibGVtLiBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBzY3JpcHQ/IiksIFFNZXNzYWdl
Qm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7CisgICAgcmV0dXJuIFFNZXNzYWdlQm94OjpZZXMg
PT0gUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHZpZXcoKSwgdHIoIkphdmFTY3JpcHQgUHJvYmxl
bSAtICUxIikuYXJnKG1haW5GcmFtZSgpLT51cmwoKS5ob3N0KCkpLCB0cigiVGhlIHNjcmlwdCBv
biB0aGlzIHBhZ2UgYXBwZWFycyB0byBoYXZlIGEgcHJvYmxlbS4gRG8geW91IHdhbnQgdG8gc3Rv
cCB0aGUgc2NyaXB0PyIpLCBRTWVzc2FnZUJveDo6WWVzLCBRTWVzc2FnZUJveDo6Tm8pOwogI2Vu
ZGlmCiB9CiAKQEAgLTIxOTcsNyArMjQyOSw4IEBAIHZvaWQgUVdlYlBhZ2U6OnNldEZlYXR1cmVQ
ZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIEZlYXR1cmUgZmVhdHVyZSwgUGVybWlzc2lvCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2VvbG9jYXRpb246CiAjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQotICAgICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50KCktPnNldFBlcm1pc3Npb24oZnJhbWUsIHBvbGljeSk7CisgICAgICAg
IGlmIChwb2xpY3kgIT0gUGVybWlzc2lvblVua25vd24pCisgICAgICAgICAgICBHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnNldFBl
cm1pc3Npb24oZnJhbWUtPmQsIChwb2xpY3kgPT0gUGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpKTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKIApAQCAtMjQ2MSwyMCArMjY5NCwxNDYgQEAgUUNvbG9y
IFFXZWJQYWdlUHJpdmF0ZTo6Y29sb3JTZWxlY3Rpb25SZXF1ZXN0ZWQoY29uc3QgUUNvbG9yICZz
ZWxlY3RlZENvbG9yKQogewogICAgIFFDb2xvciByZXQgPSBzZWxlY3RlZENvbG9yOwogI2lmbmRl
ZiBRVF9OT19DT0xPUkRJQUxPRwotICAgIFFXaWRnZXQqIHBhcmVudCA9IChjbGllbnQpID8gY2xp
ZW50LT5vd25lcldpZGdldCgpIDogMDsKLSAgICByZXQgPSBRQ29sb3JEaWFsb2c6OmdldENvbG9y
KHNlbGVjdGVkQ29sb3IsIHBhcmVudCk7CisgICAgcmV0ID0gUUNvbG9yRGlhbG9nOjpnZXRDb2xv
cihzZWxlY3RlZENvbG9yLCBxLT52aWV3KCkpOwogICAgIGlmICghcmV0LmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0ID0gc2VsZWN0ZWRDb2xvcjsKICNlbmRpZgogICAgIHJldHVybiByZXQ7CiB9CiAK
K1FXZWJTZWxlY3RNZXRob2QgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlU2VsZWN0UG9wdXAoKQor
eworICAgIHJldHVybiBuZXcgUXRGYWxsYmFja1dlYlBvcHVwKHRoaXMpOworfQorCitRUmVjdCBR
V2ViUGFnZVByaXZhdGU6OnZpZXdSZWN0UmVsYXRpdmVUb1dpbmRvdygpCit7CisKKyAgICBRV2lk
Z2V0KiBvd25lcldpZGdldD0gY2xpZW50LmlzTnVsbCgpID8gMCA6IHFvYmplY3RfY2FzdDxRV2lk
Z2V0Kj4oY2xpZW50LT5vd25lcldpZGdldCgpKTsKKyAgICBpZiAoIW93bmVyV2lkZ2V0KQorICAg
ICAgICByZXR1cm4gUVJlY3QoKTsKKyAgICBRV2lkZ2V0KiB0b3BMZXZlbFdpZGdldCA9IG93bmVy
V2lkZ2V0LT53aW5kb3coKTsKKworICAgIFFQb2ludCB0b3BMZWZ0Q29ybmVyID0gdG9wTGV2ZWxX
aWRnZXQtPm1hcEZyb20ob3duZXJXaWRnZXQsIFFQb2ludCgwLCAwKSk7CisgICAgcmV0dXJuIFFS
ZWN0KHRvcExlZnRDb3JuZXIsIG93bmVyV2lkZ2V0LT5zaXplKCkpOworfQorCit2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdGVkKFFXZWJGcmFtZUFkYXB0
ZXIqIGZyYW1lKQoreworICAgIGVtaXQgcS0+ZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0ZWQoUVdl
YkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgUVdlYlBhZ2U6Okdlb2xvY2F0aW9uKTsKK30KKwor
dm9pZCBRV2ViUGFnZVByaXZhdGU6Omdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDYW5jZWxs
ZWQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUpCit7CisgICAgZW1pdCBxLT5mZWF0dXJlUGVybWlz
c2lvblJlcXVlc3RDYW5jZWxlZChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpLCBRV2ViUGFn
ZTo6R2VvbG9jYXRpb24pOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bm90aWZpY2F0aW9u
c1Blcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUpCit7CisgICAgZW1p
dCBxLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJh
bWUpLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9ucyk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRl
Ojpub3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3RDYW5jZWxsZWQoUVdlYkZyYW1lQWRhcHRl
ciogZnJhbWUpCit7CisgICAgZW1pdCBxLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RDYW5jZWxl
ZChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9ucyk7
Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQor
eworICAgIHVwZGF0ZUVkaXRvckFjdGlvbnMoKTsKKworICAgIGVtaXQgcS0+Y29udGVudHNDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKCkKK3sKKyAgICB1cGRhdGVFZGl0b3JBY3Rpb25zKCk7CisgICAgZW1pdCBxLT5zZWxlY3Rp
b25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjptaWNyb0ZvY3VzQ2hhbmdl
ZCgpCit7CisgICAgZW1pdCBxLT5taWNyb0ZvY3VzQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6dHJpZ2dlckNvcHlBY3Rpb24oKQoreworICAgIHEtPnRyaWdnZXJBY3Rpb24o
UVdlYlBhZ2U6OkNvcHkpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dHJpZ2dlckFjdGlv
bkZvcktleUV2ZW50KFFLZXlFdmVudCogZXZlbnQpCit7CisgICAgUVdlYlBhZ2U6OldlYkFjdGlv
biBhY3Rpb24gPSBlZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChldmVudCk7CisgICAgcS0+dHJpZ2dl
ckFjdGlvbihhY3Rpb24pOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJVbmRvU3Rh
Y2soKQoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBpZiAodW5kb1N0YWNrKQorICAg
ICAgICB1bmRvU3RhY2stPmNsZWFyKCk7CisjZW5kaWYKK30KKworYm9vbCBRV2ViUGFnZVByaXZh
dGU6OmNhblVuZG8oKSBjb25zdAoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBpZiAo
IXVuZG9TdGFjaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB1bmRvU3RhY2st
PmNhblVuZG8oKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2Jvb2wg
UVdlYlBhZ2VQcml2YXRlOjpjYW5SZWRvKCkgY29uc3QKK3sKKyNpZm5kZWYgUVRfTk9fVU5ET1NU
QUNLCisgICAgaWYgKCF1bmRvU3RhY2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdW5kb1N0YWNrLT5jYW5SZWRvKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dW5kbygpCit7CisjaWZuZGVmIFFUX05PX1VO
RE9TVEFDSworICAgIGlmICh1bmRvU3RhY2spCisgICAgICAgIHVuZG9TdGFjay0+dW5kbygpOwor
I2VuZGlmCit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpyZWRvKCkKK3sKKyNpZm5kZWYgUVRf
Tk9fVU5ET1NUQUNLCisgICAgaWYgKHVuZG9TdGFjaykKKyAgICAgICAgdW5kb1N0YWNrLT5yZWRv
KCk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZVVuZG9TdGVwKFFT
aGFyZWRQb2ludGVyPFVuZG9TdGVwUXQ+IHN0ZXApCit7CisjaWZuZGVmIFFUX05PX1VORE9TVEFD
SworICAgIC8vIENhbGwgdW5kb1N0YWNrKCkgZ2V0dGVyIGZpcnN0IHRvIGVuc3VyZSBzdGFjayBp
cyBjcmVhdGVkCisgICAgLy8gaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuCisgICAgcS0+dW5kb1N0
YWNrKCktPnB1c2gobmV3IFFXZWJVbmRvQ29tbWFuZChzdGVwKSk7CisjZW5kaWYKK30KKworY29u
c3QgY2hhciAqUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JDb21tYW5kRm9yS2V5RXZlbnQoUUtleUV2
ZW50KiBldmVudCkKK3sKKyAgICBRV2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlvbiA9IGVkaXRvckFj
dGlvbkZvcktleUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gZWRpdG9yQ29tbWFuZEZvcldlYkFj
dGlvbnMoYWN0aW9uKTsKK30KKwogUVNpemUgUVdlYlBhZ2U6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGQtPm1haW5GcmFtZSAmJiBkLT5tYWluRnJhbWUuZGF0YSgpLT5kLT5mcmFt
ZS0+dmlldygpKQogICAgICAgICByZXR1cm4gZC0+bWFpbkZyYW1lLmRhdGEoKS0+ZC0+ZnJhbWUt
PnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpOwogCi0gICAgcmV0dXJuIGQtPnZpZXdwb3J0U2l6
ZTsKKyAgICByZXR1cm4gZC0+bV92aWV3cG9ydFNpemU7CiB9CiAKIC8qIQpAQCAtMjQ5MSw3ICsy
ODUwLDcgQEAgUVNpemUgUVdlYlBhZ2U6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0CiAqLwogdm9pZCBR
V2ViUGFnZTo6c2V0Vmlld3BvcnRTaXplKGNvbnN0IFFTaXplICZzaXplKSBjb25zdAogewotICAg
IGQtPnZpZXdwb3J0U2l6ZSA9IHNpemU7CisgICAgZC0+bV92aWV3cG9ydFNpemUgPSBzaXplOwog
CiAgICAgUVdlYkZyYW1lICpmcmFtZSA9IG1haW5GcmFtZSgpOwogICAgIGlmIChmcmFtZS0+ZC0+
ZnJhbWUgJiYgZnJhbWUtPmQtPmZyYW1lLT52aWV3KCkpIHsKQEAgLTI1NzcsNyArMjkzNiw3IEBA
IFFXZWJQYWdlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgUVdlYlBhZ2U6OnZpZXdwb3J0QXR0cmlidXRl
c0ZvclNpemUoY29uc3QgUVNpemUmIGF2CiAKICAgICAvLyBCb3RoIGVudmlyb25tZW50IHZhcmlh
YmxlcyBuZWVkIHRvIGJlIHNldCAtIG9yIHRoZXkgd2lsbCBiZSBpZ25vcmVkLgogICAgIGlmIChk
ZXZpY2VXaWR0aCA8IDAgJiYgZGV2aWNlSGVpZ2h0IDwgMCkgewotICAgICAgICBRU2l6ZSBzaXpl
ID0gcXVlcnlEZXZpY2VTaXplRm9yU2NyZWVuQ29udGFpbmluZ1dpZGdldCgoZC0+Y2xpZW50KSA/
IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDApOworICAgICAgICBRU2l6ZSBzaXplID0gcXVl
cnlEZXZpY2VTaXplRm9yU2NyZWVuQ29udGFpbmluZ1dpZGdldCh2aWV3KCkpOwogICAgICAgICBk
ZXZpY2VXaWR0aCA9IHNpemUud2lkdGgoKTsKICAgICAgICAgZGV2aWNlSGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQoKTsKICAgICB9CkBAIC0zMDkzLDE4ICszNDUyLDM0IEBAIGJvb2wgUVdlYlBhZ2U6OmV2
ZW50KFFFdmVudCAqZXYpCiAgICAgICAgIGQtPm1vdXNlUmVsZWFzZUV2ZW50KHN0YXRpY19jYXN0
PFFNb3VzZUV2ZW50Kj4oZXYpKTsKICAgICAgICAgYnJlYWs7CiAjaWYgIWRlZmluZWQoUVRfTk9f
R1JBUEhJQ1NWSUVXKQotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VNb3ZlOgot
ICAgICAgICBkLT5tb3VzZU1vdmVFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNl
RXZlbnQqPihldikpOworICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VNb3ZlOiB7
CisgICAgICAgIFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCAqZ3NFdiA9IHN0YXRpY19jYXN0PFFH
cmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KTsKKyAgICAgICAgUU1vdXNlRXZlbnQgZHVtbXlF
dmVudChRRXZlbnQ6Ok1vdXNlTW92ZSwgZ3NFdi0+cG9zKCksIGdzRXYtPnNjcmVlblBvcygpLCBn
c0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygpLCBnc0V2LT5tb2RpZmllcnMoKSk7CisgICAg
ICAgIGQtPm1vdXNlTW92ZUV2ZW50KCZkdW1teUV2ZW50KTsKKyAgICAgICAgZXYtPnNldEFjY2Vw
dGVkKGR1bW15RXZlbnQuaXNBY2NlcHRlZCgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBR
RXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVByZXNzOgotICAgICAgICBkLT5tb3VzZVByZXNzRXZl
bnQoc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICB9Cisg
ICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVJlbGVhc2U6IHsKKyAgICAgICAgUUdy
YXBoaWNzU2NlbmVNb3VzZUV2ZW50ICpnc0V2ID0gc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVN
b3VzZUV2ZW50Kj4oZXYpOworICAgICAgICBRTW91c2VFdmVudCBkdW1teUV2ZW50KFFFdmVudDo6
TW91c2VCdXR0b25SZWxlYXNlLCBnc0V2LT5wb3MoKSwgZ3NFdi0+c2NyZWVuUG9zKCksIGdzRXYt
PmJ1dHRvbigpLCBnc0V2LT5idXR0b25zKCksIGdzRXYtPm1vZGlmaWVycygpKTsKKyAgICAgICAg
ZC0+bW91c2VSZWxlYXNlRXZlbnQoJmR1bW15RXZlbnQpOworICAgICAgICBldi0+c2V0QWNjZXB0
ZWQoZHVtbXlFdmVudC5pc0FjY2VwdGVkKCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFFF
dmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlRG91YmxlQ2xpY2s6Ci0gICAgICAgIGQtPm1vdXNlRG91
YmxlQ2xpY2tFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldikp
OworICAgIH0KKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlUHJlc3M6IHsKKyAg
ICAgICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50ICpnc0V2ID0gc3RhdGljX2Nhc3Q8UUdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpOworICAgICAgICBRTW91c2VFdmVudCBkdW1teUV2ZW50
KFFFdmVudDo6TW91c2VCdXR0b25QcmVzcywgZ3NFdi0+cG9zKCksIGdzRXYtPnNjcmVlblBvcygp
LCBnc0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygpLCBnc0V2LT5tb2RpZmllcnMoKSk7Cisg
ICAgICAgIGQtPm1vdXNlUHJlc3NFdmVudCgmZHVtbXlFdmVudCk7CisgICAgICAgIGV2LT5zZXRB
Y2NlcHRlZChkdW1teUV2ZW50LmlzQWNjZXB0ZWQoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VSZWxlYXNlOgotICAgICAgICBkLT5tb3VzZVJl
bGVhc2VFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldikpOwor
ICAgIH0KKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlRG91YmxlQ2xpY2s6IHsK
KyAgICAgICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50ICpnc0V2ID0gc3RhdGljX2Nhc3Q8UUdy
YXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpOworICAgICAgICBRTW91c2VFdmVudCBkdW1teUV2
ZW50KFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaywgZ3NFdi0+cG9zKCksIGdzRXYtPnNjcmVl
blBvcygpLCBnc0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygpLCBnc0V2LT5tb2RpZmllcnMo
KSk7CisgICAgICAgIGQtPm1vdXNlRG91YmxlQ2xpY2tFdmVudCgmZHVtbXlFdmVudCk7CisgICAg
ICAgIGV2LT5zZXRBY2NlcHRlZChkdW1teUV2ZW50LmlzQWNjZXB0ZWQoKSk7CiAgICAgICAgIGJy
ZWFrOworICAgIH0KICNlbmRpZgogI2lmbmRlZiBRVF9OT19DT05URVhUTUVOVQogICAgIGNhc2Ug
UUV2ZW50OjpDb250ZXh0TWVudToKQEAgLTMxMjEsOSArMzQ5NiwxMyBAQCBib29sIFFXZWJQYWdl
OjpldmVudChRRXZlbnQgKmV2KQogICAgICAgICBkLT53aGVlbEV2ZW50KHN0YXRpY19jYXN0PFFX
aGVlbEV2ZW50Kj4oZXYpKTsKICAgICAgICAgYnJlYWs7CiAjaWYgIWRlZmluZWQoUVRfTk9fR1JB
UEhJQ1NWSUVXKQotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lV2hlZWw6Ci0gICAgICAg
IGQtPndoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50Kj4oZXYp
KTsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZVdoZWVsOiB7CisgICAgICAgIFFHcmFw
aGljc1NjZW5lV2hlZWxFdmVudCAqZ3NFdiA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lV2hl
ZWxFdmVudCo+KGV2KTsKKyAgICAgICAgUVdoZWVsRXZlbnQgZHVtbXlFdmVudChnc0V2LT5wb3Mo
KSwgZ3NFdi0+c2NyZWVuUG9zKCksIGdzRXYtPmRlbHRhKCksIGdzRXYtPmJ1dHRvbnMoKSwgZ3NF
di0+bW9kaWZpZXJzKCksIGdzRXYtPm9yaWVudGF0aW9uKCkpOworICAgICAgICBkLT53aGVlbEV2
ZW50KCZkdW1teUV2ZW50KTsKKyAgICAgICAgZXYtPnNldEFjY2VwdGVkKGR1bW15RXZlbnQuaXNB
Y2NlcHRlZCgpKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogI2VuZGlmCiAjZW5kaWYKICAgICBj
YXNlIFFFdmVudDo6S2V5UHJlc3M6CkBAIC0zNjM5LDggKzQwMTgsNyBAQCBib29sIFFXZWJQYWdl
OjpleHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbiwgY29uc3QgRXh0ZW5zaW9uT3B0aW9uICpv
cHRpb24sIEV4dAogICAgIGlmIChleHRlbnNpb24gPT0gQ2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVu
c2lvbikgewogICAgICAgICAvLyBGSVhNRTogZG8gbm90IGlnbm9yZSBzdWdnZXN0ZWRGaWxlcwog
ICAgICAgICBRU3RyaW5nTGlzdCBzdWdnZXN0ZWRGaWxlcyA9IHN0YXRpY19jYXN0PGNvbnN0IENo
b29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb25PcHRpb24qPihvcHRpb24pLT5zdWdnZXN0ZWRGaWxl
TmFtZXM7Ci0gICAgICAgIFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50
LT5vd25lcldpZGdldCgpIDogMDsKLSAgICAgICAgUVN0cmluZ0xpc3QgbmFtZXMgPSBRRmlsZURp
YWxvZzo6Z2V0T3BlbkZpbGVOYW1lcyhwYXJlbnQsIFFTdHJpbmc6Om51bGwpOworICAgICAgICBR
U3RyaW5nTGlzdCBuYW1lcyA9IFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWVzKHZpZXcoKSwg
UVN0cmluZzo6bnVsbCk7CiAgICAgICAgIHN0YXRpY19jYXN0PENob29zZU11bHRpcGxlRmlsZXNF
eHRlbnNpb25SZXR1cm4qPihvdXRwdXQpLT5maWxlTmFtZXMgPSBuYW1lczsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzY2NSw2ICs0MDQzLDE0IEBAIGJvb2wgUVdlYlBhZ2U6OnN1
cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0CiB9CiAKIC8qIQorICog
XGludGVybmFsCisgKi8KK1FXZWJQYWdlQWRhcHRlciAqUVdlYlBhZ2U6OmhhbmRsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGQ7Cit9CisKKy8qIQogICAgIEZpbmRzIHRoZSBzcGVjaWZpZWQgc3Ry
aW5nLCBcYSBzdWJTdHJpbmcsIGluIHRoZSBwYWdlLCB1c2luZyB0aGUgZ2l2ZW4gXGEgb3B0aW9u
cy4KIAogICAgIElmIHRoZSBIaWdobGlnaHRBbGxPY2N1cnJlbmNlcyBmbGFnIGlzIHBhc3NlZCwg
dGhlIGZ1bmN0aW9uIHdpbGwgaGlnaGxpZ2h0IGFsbCBvY2N1cnJlbmNlcwpAQCAtMzczMiw4ICs0
MTE4LDcgQEAgUVN0cmluZyBRV2ViUGFnZTo6Y2hvb3NlRmlsZShRV2ViRnJhbWUgKnBhcmVudEZy
YW1lLCBjb25zdCBRU3RyaW5nJiBzdWdnZXN0ZWRGaWwKIHsKICAgICBRX1VOVVNFRChwYXJlbnRG
cmFtZSkKICNpZm5kZWYgUVRfTk9fRklMRURJQUxPRwotICAgIFFXaWRnZXQqIHBhcmVudCA9IChk
LT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpIDogMDsKLSAgICByZXR1cm4gUUZp
bGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZShwYXJlbnQsIFFTdHJpbmc6Om51bGwsIHN1Z2dlc3Rl
ZEZpbGUpOworICAgIHJldHVybiBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKHZpZXcoKSwg
UVN0cmluZzo6bnVsbCwgc3VnZ2VzdGVkRmlsZSk7CiAjZWxzZQogICAgIHJldHVybiBRU3RyaW5n
OjpudWxsOwogI2VuZGlmCkBAIC0zNzUwLDExICs0MTM1LDcgQEAgUVN0cmluZyBRV2ViUGFnZTo6
Y2hvb3NlRmlsZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lLCBjb25zdCBRU3RyaW5nJiBzdWdnZXN0
ZWRGaWwKICovCiB2b2lkIFFXZWJQYWdlOjpzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29y
a0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpCiB7Ci0gICAgaWYgKG1hbmFnZXIgPT0gZC0+bmV0d29y
a01hbmFnZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZC0+bmV0d29ya01hbmFnZXIgJiYg
ZC0+bmV0d29ya01hbmFnZXItPnBhcmVudCgpID09IHRoaXMpCi0gICAgICAgIGRlbGV0ZSBkLT5u
ZXR3b3JrTWFuYWdlcjsKLSAgICBkLT5uZXR3b3JrTWFuYWdlciA9IG1hbmFnZXI7CisgICAgZC0+
c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIobWFuYWdlcik7CiB9CiAKIC8qIQpAQCAtMzc2NSwxMSAr
NDE0Niw3IEBAIHZvaWQgUVdlYlBhZ2U6OnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFOZXR3b3Jr
QWNjZXNzTWFuYWdlciAqbWFuYWdlcikKICovCiBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKlFXZWJQ
YWdlOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0CiB7Ci0gICAgaWYgKCFkLT5uZXR3b3Jr
TWFuYWdlcikgewotICAgICAgICBRV2ViUGFnZSAqdGhhdCA9IGNvbnN0X2Nhc3Q8UVdlYlBhZ2Ug
Kj4odGhpcyk7Ci0gICAgICAgIHRoYXQtPmQtPm5ldHdvcmtNYW5hZ2VyID0gbmV3IFFOZXR3b3Jr
QWNjZXNzTWFuYWdlcih0aGF0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGQtPm5ldHdvcmtNYW5hZ2Vy
OworICAgIHJldHVybiBkLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOwogfQogCiAvKiEKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5oCmluZGV4IGIyY2FhMTMxZGVhNjUwNWU1ZjBhYjQ3ZGNkNDkxNzVjMjVl
MTgxN2MuLmY5NzVhYjA1Njc3Y2NmNWJkMzJiM2QyYTVmN2Y0YjRhMTVjYjdiN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuaApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBRV2ViRnJhbWVEYXRhOwog
Y2xhc3MgUVdlYkhpc3RvcnlJdGVtOwogY2xhc3MgUVdlYkhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBR
V2ViTmV0d29ya0ludGVyZmFjZTsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIGNsYXNzIFFXZWJQ
YWdlUHJpdmF0ZTsKIGNsYXNzIFFXZWJQbHVnaW5GYWN0b3J5OwogY2xhc3MgUVdlYlNlY3VyaXR5
T3JpZ2luOwpAQCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZXh0
ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24sIGNvbnN0IEV4dGVuc2lvbk9wdGlvbiAqb3B0aW9u
ID0gMCwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Q7CiAKLSAgICBpbmxpbmUg
UVdlYlBhZ2VQcml2YXRlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBkOyB9CisgICAgUVdlYlBh
Z2VBZGFwdGVyKiBoYW5kbGUoKSBjb25zdDsKIAogcHVibGljIFFfU0xPVFM6CiAgICAgYm9vbCBz
aG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKaW5k
ZXggNzk0MzIyOTkxMzIxYmY3YTAwYzM2NjJiOWFiOTI2ZjgwN2RjMzQwMi4uMjEzNmUzY2JjMTU5
ZTg1MmEyY2Y1MmFhOTU2N2FhNTA3ZDc5YzlkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3Au
aApAQCAtMjEsMjkgKzIxLDIyIEBACiAjaWZuZGVmIFFXRUJQQUdFX1BfSAogI2RlZmluZSBRV0VC
UEFHRV9QX0gKIAotI2luY2x1ZGUgPFFQb2ludGVyPgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRl
ci5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIK
KyNpbmNsdWRlICJxd2VicGFnZS5oIgogCisjaW5jbHVkZSA8UVBvaW50ZXI+CiAjaW5jbHVkZSA8
cWJhc2ljdGltZXIuaD4KLSNpbmNsdWRlIDxxbmV0d29ya3Byb3h5Lmg+CiAjaW5jbHVkZSA8cWV2
ZW50Lmg+CiAjaW5jbHVkZSA8cWdlc3R1cmUuaD4KICNpbmNsdWRlIDxxZ3JhcGhpY3NzY2VuZWV2
ZW50Lmg+CisjaW5jbHVkZSA8cWdyYXBoaWNzd2lkZ2V0Lmg+CisjaW5jbHVkZSA8cW5ldHdvcmtw
cm94eS5oPgogCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxd2ViaGlzdG9yeS5o
IgotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNs
dWRlICJLVVJMLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSAiVmll
d3BvcnRBcmd1bWVudHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIENocm9t
ZUNsaWVudFF0OwogICAgIGNsYXNzIENvbnRleHRNZW51Q2xpZW50UXQ7CiAgICAgY2xhc3MgQ29u
dGV4dE1lbnVJdGVtOwogICAgIGNsYXNzIENvbnRleHRNZW51OwpAQCAtNTQsNyArNDcsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBOb2RlOwog
ICAgIGNsYXNzIE5vZGVMaXN0OwotICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgRnJhbWU7CiB9
CiAKQEAgLTY0LDggKzU2LDEwIEBAIGNsYXNzIFFNZW51OwogY2xhc3MgUUJpdEFycmF5OwogUVRf
RU5EX05BTUVTUEFDRQogCitjbGFzcyBRdFBsdWdpbldpZGdldEFkYXB0ZXI7CiBjbGFzcyBRV2Vi
SW5zcGVjdG9yOwotY2xhc3MgUVdlYlBhZ2VDbGllbnQ7CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVy
OworY2xhc3MgVW5kb1N0ZXBRdDsKIAogY2xhc3MgUXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRl
IDogcHVibGljIFFTaGFyZWREYXRhIHsKIHB1YmxpYzoKQEAgLTc2LDEzICs3MCw3MyBAQCBwdWJs
aWM6CiAgICAgUVdlYlBhZ2U6OlZpZXdwb3J0QXR0cmlidXRlcyogcTsKIH07CiAKLWNsYXNzIFFX
ZWJQYWdlUHJpdmF0ZSB7CitjbGFzcyBRV2ViUGFnZVByaXZhdGUgOiBwdWJsaWMgUVdlYlBhZ2VB
ZGFwdGVyIHsKIHB1YmxpYzoKICAgICBRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UqKTsKICAgICB+
UVdlYlBhZ2VQcml2YXRlKCk7CiAKICAgICBzdGF0aWMgV2ViQ29yZTo6UGFnZSogY29yZShjb25z
dCBRV2ViUGFnZSopOwotICAgIHN0YXRpYyBRV2ViUGFnZVByaXZhdGUqIHByaXYoUVdlYlBhZ2Uq
KTsKKworICAgIC8vIEFkYXB0ZXIgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc2hv
dygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCB1bmZvY3VzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFdp
bmRvd1JlY3QoY29uc3QgUVJlY3QgJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRU2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFFXZWJQYWdlQWRhcHRlciog
Y3JlYXRlV2luZG93KGJvb2wgLypkaWFsb2cqLykgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRT2Jq
ZWN0KiBoYW5kbGUoKSBPVkVSUklERSB7IHJldHVybiBxOyB9CisgICAgdmlydHVhbCB2b2lkIGph
dmFTY3JpcHRDb25zb2xlTWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51
bWJlciwgY29uc3QgUVN0cmluZyYgc291cmNlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFTdHJpbmcmIG1zZykg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZUFk
YXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBtc2cpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBq
YXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBtc2csIGNv
bnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUVN0cmluZyogcmVzdWx0KSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1lQWRhcHRl
ciosIGNvbnN0IFFTdHJpbmcmIGRhdGFiYXNlTmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFwcGxpY2F0aW9uQ2FjaGVRdW90YUV4Y2VlZGVkKFFXZWJTZWN1cml0eU9yaWdpbiosIHF1
aW50NjQgZGVmYXVsdE9yaWdpblF1b3RhLCBxdWludDY0IHRvdGFsU3BhY2VOZWVkZWQpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFFTdHJpbmcmKSBPVkVSUklE
RTsKKyNpZiBVU0UoUVRfTVVMVElNRURJQSkKKyAgICB2aXJ0dWFsIFFXZWJGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkgT1ZFUlJJREU7CisjZW5k
aWYKKyAgICB2aXJ0dWFsIFFXZWJGcmFtZUFkYXB0ZXIqIG1haW5GcmFtZUFkYXB0ZXIoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGNob29zZUZpbGVzKFFXZWJGcmFtZUFkYXB0
ZXIqLCBib29sIGFsbG93TXVsdGlwbGUsIGNvbnN0IFFTdHJpbmdMaXN0JiBzdWdnZXN0ZWRGaWxl
TmFtZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUUNvbG9yIGNvbG9yU2VsZWN0aW9uUmVxdWVz
dGVkKGNvbnN0IFFDb2xvciYgc2VsZWN0ZWRDb2xvcikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBR
V2ViU2VsZWN0TWV0aG9kKiBjcmVhdGVTZWxlY3RQb3B1cCgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgUVJlY3Qgdmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RD
YW5jZWxsZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBu
b3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdENhbmNl
bGxlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgbWljcm9G
b2N1c0NoYW5nZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJpZ2dlckNvcHlBY3Rp
b24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJpZ2dlckFjdGlvbkZvcktleUV2ZW50
KFFLZXlFdmVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9TdGFjaygp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBib29sIGNhblJlZG8oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5kbygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWRvKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVuZG9TdGVwKFFTaGFyZWRQb2ludGVyPFVuZG9TdGVwUXQ+
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGVkaXRvckNvbW1hbmRGb3JLZXlF
dmVudChRS2V5RXZlbnQqKSBPVkVSUklERTsKKworICAgIHZvaWQgdXBkYXRlTmF2aWdhdGlvbkFj
dGlvbnMoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUU9iamVjdCogaW5zcGVjdG9ySGFuZGxl
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kKFFPYmpl
Y3QqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdG9yV2luZG93VGl0bGUo
Y29uc3QgUVN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVXZWJJbnNw
ZWN0b3IoUU9iamVjdCoqIGluc3BlY3RvclZpZXcsIFFXZWJQYWdlQWRhcHRlcioqIGluc3BlY3Rv
clBhZ2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgbWVudUFjdGlvbnNBc1Rl
eHQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFZpZXdwb3J0Q2hhbmdlUmVxdWVz
dGVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0
KFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBpbnQgdHlwZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXRSZXN0b3JlRnJhbWVTdGF0ZVJlcXVlc3RlZChR
V2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXRTYXZlRnJh
bWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKiwgUVdlYkhpc3RvcnlJdGVtKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXREb3dubG9hZFJlcXVlc3RlZChjb25zdCBRTmV0
d29ya1JlcXVlc3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEZyYW1lQ3JlYXRl
ZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRU3RyaW5nIHVzZXJB
Z2VudEZvclVybChjb25zdCBRVXJsICZ1cmwpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHEtPnVz
ZXJBZ2VudEZvclVybCh1cmwpOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXJyb3JQYWdl
RXh0ZW5zaW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gcS0+c3VwcG9ydHNFeHRlbnNpb24o
UVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvbik7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZXJyb3JQ
YWdlRXh0ZW5zaW9uKEVycm9yUGFnZU9wdGlvbiAqLCBFcnJvclBhZ2VSZXR1cm4gKikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBRdFBsdWdpbldpZGdldEFkYXB0ZXIqIGNyZWF0ZVBsdWdpbihjb25z
dCBRU3RyaW5nICYsIGNvbnN0IFFVcmwgJiwgY29uc3QgUVN0cmluZ0xpc3QgJiwgY29uc3QgUVN0
cmluZ0xpc3QgJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRdFBsdWdpbldpZGdldEFkYXB0ZXIq
IGFkYXB0ZXJGb3JXaWRnZXQoUU9iamVjdCAqKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZvaWQg
Y3JlYXRlTWFpbkZyYW1lKCk7CiAjaWZuZGVmIFFUX05PX0NPTlRFWFRNRU5VCkBAIC05MiwyMyAr
MTQ2LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIF9xX3dlYkFjdGlvblRyaWdnZXJlZChib29sIGNo
ZWNrZWQpOwogICAgIHZvaWQgX3FfY2xlYW51cExlYWtNZXNzYWdlcygpOwogICAgIHZvaWQgdXBk
YXRlQWN0aW9uKFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uKTsKLSAgICB2b2lkIHVwZGF0ZU5h
dmlnYXRpb25BY3Rpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVFZGl0b3JBY3Rpb25zKCk7CiAKLSAg
ICBRQ29sb3IgY29sb3JTZWxlY3Rpb25SZXF1ZXN0ZWQoY29uc3QgUUNvbG9yJiBzZWxlY3RlZENv
bG9yKTsKLQogICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCopOwogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgVD4gdm9pZCBtb3VzZU1vdmVFdmVudChUKik7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gdm9pZCBtb3VzZVByZXNzRXZlbnQoVCopOwotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQg
bW91c2VEb3VibGVDbGlja0V2ZW50KFQqKTsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIG1v
dXNlVHJpcGxlQ2xpY2tFdmVudChUKik7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBtb3Vz
ZVJlbGVhc2VFdmVudChUKik7CisgICAgdm9pZCBtb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCop
OworICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBtb3Vz
ZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIG1vdXNlVHJpcGxlQ2xp
Y2tFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUU1vdXNl
RXZlbnQqKTsKICNpZm5kZWYgUVRfTk9fQ09OVEVYVE1FTlUKICAgICB2b2lkIGNvbnRleHRNZW51
RXZlbnQoY29uc3QgUVBvaW50JiBnbG9iYWxQb3MpOwogI2VuZGlmCiAjaWZuZGVmIFFUX05PX1dI
RUVMRVZFTlQKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHdoZWVsRXZlbnQoVCopOworICAg
IHZvaWQgd2hlZWxFdmVudChRV2hlZWxFdmVudCopOwogI2VuZGlmCiAgICAgdm9pZCBrZXlQcmVz
c0V2ZW50KFFLZXlFdmVudCopOwogICAgIHZvaWQga2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCop
OwpAQCAtMTU5LDE2ICsyMTAsMTIgQEAgcHVibGljOgogICAgIFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBxdWludDE2IGluc3BlY3RvclNl
cnZlclBvcnQoKTsKIAotICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJn
dW1lbnRzKCk7Ci0KICNpZm5kZWYgUVRfTk9fU0hPUlRDVVQKICAgICBzdGF0aWMgUVdlYlBhZ2U6
OldlYkFjdGlvbiBlZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChRS2V5RXZlbnQqIGV2ZW50KTsKICNl
bmRpZgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yV2ViQWN0aW9ucyhR
V2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlvbik7CiAKICAgICBRV2ViUGFnZSAqcTsKLSAgICBXZWJD
b3JlOjpQYWdlICpwYWdlOwotICAgIE93blB0cjxRV2ViUGFnZUNsaWVudD4gY2xpZW50OwogICAg
IFFQb2ludGVyPFFXZWJGcmFtZT4gbWFpbkZyYW1lOwogCiAjaWZuZGVmIFFUX05PX1VORE9TVEFD
SwpAQCAtMTc3LDcgKzIyNCw2IEBAIHB1YmxpYzoKIAogICAgIFFQb2ludGVyPFFXaWRnZXQ+IHZp
ZXc7CiAKLSAgICBib29sIGluc2lkZU9wZW5DYWxsOwogICAgIHF1aW50NjQgbV90b3RhbEJ5dGVz
OwogICAgIHF1aW50NjQgbV9ieXRlc1JlY2VpdmVkOwogCkBAIC0xODYsMTUgKzIzMiw5IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgY2xpY2tDYXVzZWRGb2N1czsKIAotICAgIGJvb2wgYWNjZXB0TmF2
aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZy
ZXF1ZXN0LCBRV2ViUGFnZTo6TmF2aWdhdGlvblR5cGUgdHlwZSk7Ci0gICAgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyICpuZXR3b3JrTWFuYWdlcjsKLQotICAgIGJvb2wgZm9yd2FyZFVuc3VwcG9ydGVk
Q29udGVudDsKLSAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKLSAgICBib29sIHNl
bGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiAgICAgUVdlYlBhZ2U6OkxpbmtEZWxlZ2F0
aW9uUG9saWN5IGxpbmtQb2xpY3k7CiAKLSAgICBRU2l6ZSB2aWV3cG9ydFNpemU7CisgICAgUVNp
emUgbV92aWV3cG9ydFNpemU7CiAgICAgUVNpemUgZml4ZWRMYXlvdXRTaXplOwogCiAgICAgUVdl
Ykhpc3RvcnkgaGlzdG9yeTsKQEAgLTIwMiwyMCArMjQyLDE1IEBAIHB1YmxpYzoKICNpZm5kZWYg
UVRfTk9fQ09OVEVYVE1FTlUKICAgICBRUG9pbnRlcjxRTWVudT4gY3VycmVudENvbnRleHRNZW51
OwogI2VuZGlmCi0gICAgUVdlYlNldHRpbmdzICpzZXR0aW5nczsKICAgICBRUGFsZXR0ZSBwYWxl
dHRlOwogICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQ7CiAKICAgICBRQWN0aW9uICphY3Rpb25zW1FX
ZWJQYWdlOjpXZWJBY3Rpb25Db3VudF07CiAKLSAgICBRV2ViUGx1Z2luRmFjdG9yeSAqcGx1Z2lu
RmFjdG9yeTsKLQogICAgIFFXaWRnZXQqIGluc3BlY3RvckZyb250ZW5kOwogICAgIFFXZWJJbnNw
ZWN0b3IqIGluc3BlY3RvcjsKICAgICBib29sIGluc3BlY3RvcklzSW50ZXJuYWxPbmx5OyAvLyBU
cnVlIGlmIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSW5zcGVjdCBjb250ZXh0IG1lbnUgYWN0aW9uCiAg
ICAgUXQ6OkRyb3BBY3Rpb24gbV9sYXN0RHJvcEFjdGlvbjsKLQotICAgIHN0YXRpYyBib29sIGRy
dFJ1bjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKaW5k
ZXggNzY4YzgwMjU2ZWMxMjY2MTFkM2E4ZjgyN2NkMWVjOTMxNzJmM2E4My4uNzRkODUyNGQ4YzUy
ZTNjODA4NTU1ZGU1NDkzMjYxY2YzODQzZjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0
dGluZ3MuY3BwCkBAIC0yMCw0MSArMjAsMzkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJxd2Vic2V0dGluZ3MuaCIKIAotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5jbHVkZSAi
cXdlYnBhZ2VfcC5oIgogI2luY2x1ZGUgInF3ZWJwbHVnaW5kYXRhYmFzZV9wLmgiCiAKICNpbmNs
dWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiSWNv
bkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNF
KQogI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVudFF0LmgiCiAjZW5kaWYKICNpbmNsdWRlICJJ
bml0V2ViQ29yZVF0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVy
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgotI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkljb25EYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0j
aW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
IDxRRGlyPgorI2luY2x1ZGUgPFFGaWxlSW5mbz4KKyNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRl
IDxRR3VpQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUhhc2g+CiAjaW5jbHVkZSA8UVNoYXJlZERh
dGE+CisjaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+CiAjaW5jbHVkZSA8UVVybD4KLSNpbmNsdWRl
IDxRRmlsZUluZm8+Ci0jaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCiAKLSNpbmNsdWRlICJOZXR3b3JrU3RhdGVOb3RpZmllci5oIgogCiB2b2lkIFFX
RUJLSVRfRVhQT1JUIHF0X25ldHdvcmtBY2Nlc3NBbGxvd2VkKGJvb2wgaXNBbGxvd2VkKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAppbmRleCA1ZTdkM2UxYjRkM2Q0YzgxMzU2ODEy
YzkyYjFmODRiNTA4ZDQwZTM5Li40OTcyMWI3Y2I5M2QyYzU4ZWY2ZTRhNDg4YzNkNzBiMmIwNWM0
YjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaApAQCAtMTYzLDYgKzE2Myw3IEBA
IHB1YmxpYzoKICAgICBpbmxpbmUgUVdlYlNldHRpbmdzUHJpdmF0ZSogaGFuZGxlKCkgY29uc3Qg
eyByZXR1cm4gZDsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZUFkYXB0
ZXI7CiAgICAgZnJpZW5kIGNsYXNzIFFXZWJQYWdlUHJpdmF0ZTsKICAgICBmcmllbmQgY2xhc3Mg
UVdlYlNldHRpbmdzUHJpdmF0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwCmluZGV4IDlm
MmFmNTc4N2VlY2JjZGUwMjJhOGUwMWZiZmIwNWNjNTBiMWM0NTYuLjJlZGE2YTE4ZWZkMTc4MjU4
NDYyZjE1Y2I5Mjk1MTRkOGQwMDkzMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKQEAg
LTIyNyw5ICsyMjcsOSBAQCB2b2lkIFFXZWJWaWV3UHJpdmF0ZTo6ZGV0YWNoQ3VycmVudFBhZ2Uo
KQogICAgIC8vIHRvIGRlc3Ryb3kgaXQuCiAKICAgICBpZiAocGFnZS0+ZC0+Y2xpZW50ICYmIHBh
Z2UtPmQtPmNsaWVudC0+aXNRV2lkZ2V0Q2xpZW50KCkpCi0gICAgICAgIHBhZ2UtPmQtPmNsaWVu
dC5jbGVhcigpOworICAgICAgICBwYWdlLT5kLT5jbGllbnQucmVzZXQoKTsKIAotICAgIHBhZ2Ut
PmQtPmNsaWVudC5yZWxlYXNlKCk7CisgICAgcGFnZS0+ZC0+Y2xpZW50LnRha2UoKTsKIAogICAg
IC8vIGlmIHRoZSBwYWdlIHdhcyBjcmVhdGVkIGJ5IHVzLCB3ZSBvd24gaXQgYW5kIG5lZWQgdG8K
ICAgICAvLyBkZXN0cm95IGl0IGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGVhYWViMDEyZjg2ZDBhNTMxMTBi
NTc5NzczZjZkNWI4YzA1ZDkzNDIuLjk4MjM2M2U0MjQ5NTg1ODg0MzU2YTZlZDkzMWU0MDJkMDVk
NmVlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuY3BwCkBAIC01MywyNyArNTMsMjUgQEAKICNpbmNsdWRlICJOZXR3b3JraW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudVF0LmgiCi0jaW5j
bHVkZSAiUXRGYWxsYmFja1dlYlBvcHVwLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIK
KyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVy
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1l
bnVRdC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNr
aW5nU3RvcmUuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIldp
bmRvd0ZlYXR1cmVzLmgiCiAKLSNpbmNsdWRlICJxZ3JhcGhpY3N3ZWJ2aWV3LmgiCi0jaW5jbHVk
ZSAicXdlYmZyYW1lX3AuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJw
YWdlX3AuaCIKLSNpbmNsdWRlICJxd2Vic2VjdXJpdHlvcmlnaW4uaCIKLSNpbmNsdWRlICJxd2Vi
c2VjdXJpdHlvcmlnaW5fcC5oIgotI2luY2x1ZGUgInF3ZWJ2aWV3LmgiCisjaW5jbHVkZSAiLi4v
QXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Vic2VjdXJp
dHlvcmlnaW4uaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luX3AuaCIKKyNp
bmNsdWRlICIuLi9BcGkvcXdlYnNldHRpbmdzLmgiCiAjaW5jbHVkZSA8cWFic3RyYWN0YW5pbWF0
aW9uLmg+CiAjaW5jbHVkZSA8cWRlYnVnLmg+CiAjaW5jbHVkZSA8cWV2ZW50bG9vcC5oPgotI2lu
Y2x1ZGUgPHF0b29sdGlwLmg+CisjaW5jbHVkZSA8cXdpbmRvdy5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KIAogI2lmIEVOQUJMRShWSURFTykgJiYgKChVU0UoR1NUUkVBTUVSKSAmJiAhZGVm
aW5lZChHU1RfQVBJX1ZFUlNJT05fMSkpIHx8IFVTRShRVF9NVUxUSU1FRElBKSB8fCBVU0UoUVRL
SVQpKQpAQCAtMTI0LDggKzEyMiw4IEBAIHByaXZhdGU6CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6
OmR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3MgPSBmYWxzZTsKIAotQ2hyb21lQ2xpZW50UXQ6OkNo
cm9tZUNsaWVudFF0KFFXZWJQYWdlKiB3ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2Up
CitDaHJvbWVDbGllbnRRdDo6Q2hyb21lQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKiB3ZWJQYWdl
QWRhcHRlcikKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlQWRhcHRlcikKICAgICAsIG1fZXZlbnRM
b29wKDApCiAjaWYgRU5BQkxFKFZJREVPKSAmJiAoKFVTRShHU1RSRUFNRVIpICYmICFkZWZpbmVk
KEdTVF9BUElfVkVSU0lPTl8xKSkgfHwgVVNFKFFUX01VTFRJTUVESUEpIHx8IFVTRShRVEtJVCkp
CiAgICAgLCBtX2Z1bGxTY3JlZW5WaWRlbygwKQpAQCAtMTQ4LDggKzE0Niw4IEBAIHZvaWQgQ2hy
b21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAg
IGlmICghbV93ZWJQYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPmdl
b21ldHJ5Q2hhbmdlUmVxdWVzdGVkKFFSZWN0KHFSb3VuZChyZWN0LngoKSksIHFSb3VuZChyZWN0
LnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcVJvdW5kKHJlY3Qud2lkdGgoKSks
IHFSb3VuZChyZWN0LmhlaWdodCgpKSkpOworICAgIG1fd2ViUGFnZS0+c2V0V2luZG93UmVjdChR
UmVjdChxUm91bmQocmVjdC54KCkpLCBxUm91bmQocmVjdC55KCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBxUm91bmQocmVjdC53aWR0aCgpKSwgcVJvdW5kKHJlY3QuaGVp
Z2h0KCkpKSk7CiB9CiAKIC8qIQpAQCAtMTgyLDExICsxODAsNyBAQCB2b2lkIENocm9tZUNsaWVu
dFF0Ojpmb2N1cygpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAg
ICBRV2lkZ2V0KiB2aWV3ID0gbV93ZWJQYWdlLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB2aWV3LT5zZXRGb2N1cygpOworICAgIG1fd2ViUGFnZS0+c2V0
Rm9jdXMoKTsKIH0KIAogCkBAIC0xOTQsMTAgKzE4OCw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnVuZm9jdXMoKQogewogICAgIGlmICghbV93ZWJQYWdlKQogICAgICAgICByZXR1cm47Ci0gICAg
UVdpZGdldCogdmlldyA9IG1fd2ViUGFnZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAg
ICAgcmV0dXJuOwotICAgIHZpZXctPmNsZWFyRm9jdXMoKTsKKyAgICBtX3dlYlBhZ2UtPnVuZm9j
dXMoKTsKIH0KIAogYm9vbCBDaHJvbWVDbGllbnRRdDo6Y2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0
aW9uKQpAQCAtMjI3LDI0ICsyMTgsMTggQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6Zm9jdXNlZEZy
YW1lQ2hhbmdlZChGcmFtZSopCiAKIFBhZ2UqIENocm9tZUNsaWVudFF0OjpjcmVhdGVXaW5kb3co
RnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXaW5kb3dGZWF0
dXJlcyYgZmVhdHVyZXMsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKQogewotICAgIFFXZWJQYWdl
KiBuZXdQYWdlID0gbV93ZWJQYWdlLT5jcmVhdGVXaW5kb3coZmVhdHVyZXMuZGlhbG9nID8gUVdl
YlBhZ2U6OldlYk1vZGFsRGlhbG9nIDogUVdlYlBhZ2U6OldlYkJyb3dzZXJXaW5kb3cpOworICAg
IFFXZWJQYWdlQWRhcHRlciogbmV3UGFnZSA9IG1fd2ViUGFnZS0+Y3JlYXRlV2luZG93KGZlYXR1
cmVzLmRpYWxvZyk7CiAgICAgaWYgKCFuZXdQYWdlKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IC8vIEEgY2FsbCB0byBRV2ViUGFnZTo6bWFpbkZyYW1lKCkgaW1wbGljaXRseSBjcmVhdGVzIHRo
ZSBtYWluIGZyYW1lLgotICAgIC8vIE1ha2Ugc3VyZSBpdCBleGlzdHMsIGFzIFdlYkNvcmUgZXhw
ZWN0cyBpdCB3aGVuIHJldHVybmluZyBmcm9tIHRoaXMgY2FsbC4KLSAgICBuZXdQYWdlLT5tYWlu
RnJhbWUoKTsKLSAgICByZXR1cm4gbmV3UGFnZS0+ZC0+cGFnZTsKKyAgICByZXR1cm4gbmV3UGFn
ZS0+cGFnZTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2hvdygpCiB7CiAgICAgaWYgKCFt
X3dlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBRV2lkZ2V0KiB2aWV3ID0gbV93ZWJQYWdl
LT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+d2lu
ZG93KCktPnNob3coKTsKKyAgICBtX3dlYlBhZ2UtPnNob3coKTsKIH0KIAogCkBAIC0yNjYsNyAr
MjUxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6cnVuTW9kYWwoKQogdm9pZCBDaHJvbWVDbGll
bnRRdDo6c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICB0b29sQmFyc1Zp
c2libGUgPSB2aXNpYmxlOwotICAgIGVtaXQgbV93ZWJQYWdlLT50b29sQmFyVmlzaWJpbGl0eUNo
YW5nZVJlcXVlc3RlZCh2aXNpYmxlKTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1f
d2ViUGFnZS0+aGFuZGxlKCksICJ0b29sQmFyVmlzaWJpbGl0eUNoYW5nZVJlcXVlc3RlZCIsIFFf
QVJHKGJvb2wsIHZpc2libGUpKTsKIH0KIAogCkBAIC0yNzgsNyArMjYzLDcgQEAgYm9vbCBDaHJv
bWVDbGllbnRRdDo6dG9vbGJhcnNWaXNpYmxlKCkKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0
U3RhdHVzYmFyVmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnN0
YXR1c0JhclZpc2liaWxpdHlDaGFuZ2VSZXF1ZXN0ZWQodmlzaWJsZSk7CisgICAgUU1ldGFPYmpl
Y3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAic3RhdHVzQmFyVmlzaWJpbGl0
eUNoYW5nZVJlcXVlc3RlZCIsIFFfQVJHKGJvb2wsIHZpc2libGUpKTsKICAgICBzdGF0dXNCYXJW
aXNpYmxlID0gdmlzaWJsZTsKIH0KIApAQCAtMzA1LDcgKzI5MCw3IEBAIGJvb2wgQ2hyb21lQ2xp
ZW50UXQ6OnNjcm9sbGJhcnNWaXNpYmxlKCkKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldE1lbnVi
YXJWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBtZW51QmFyVmlzaWJsZSA9IHZpc2libGU7
Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPm1lbnVCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVzdGVkKHZp
c2libGUpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUo
KSwgIm1lbnVCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVzdGVkIiwgUV9BUkcoYm9vbCwgdmlzaWJs
ZSkpOwogfQogCiBib29sIENocm9tZUNsaWVudFF0OjptZW51YmFyVmlzaWJsZSgpCkBAIC0zNDMs
MzAgKzMyOCwyNiBAQCBib29sIENocm9tZUNsaWVudFF0OjpydW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSogZgogCiB2b2lkIENocm9tZUNsaWVu
dFF0OjpjbG9zZVdpbmRvd1Nvb24oKQogewotICAgIG1fd2ViUGFnZS0+ZC0+cGFnZS0+c2V0R3Jv
dXBOYW1lKFN0cmluZygpKTsKLSAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5kLT5mcmFtZS0+
bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPndpbmRvd0Ns
b3NlUmVxdWVzdGVkKCk7CisgICAgbV93ZWJQYWdlLT5wYWdlLT5zZXRHcm91cE5hbWUoU3RyaW5n
KCkpOworICAgIG1fd2ViUGFnZS0+cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5zdG9wQWxs
TG9hZGVycygpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5k
bGUoKSwgIndpbmRvd0Nsb3NlUmVxdWVzdGVkIik7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnJ1bkphdmFTY3JpcHRBbGVydChGcmFtZSogZiwgY29uc3QgU3RyaW5nJiBtc2cpCiB7Ci0gICAg
UVN0cmluZyB4ID0gbXNnOwotICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBxb2JqZWN0X2Nhc3Q8
UVdlYkZyYW1lKj4oZi0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm9yaWdpbmF0aW5n
T2JqZWN0KCkpOwotICAgIG1fd2ViUGFnZS0+amF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLCB4KTsK
KyAgICBtX3dlYlBhZ2UtPmphdmFTY3JpcHRBbGVydChRV2ViRnJhbWVBZGFwdGVyOjpraXQoZiks
IG1zZyk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZy
YW1lKiBmLCBjb25zdCBTdHJpbmcmIG1zZykKIHsKLSAgICBRU3RyaW5nIHggPSBtc2c7Ci0gICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihmLT5sb2FkZXIo
KS0+bmV0d29ya2luZ0NvbnRleHQoKS0+b3JpZ2luYXRpbmdPYmplY3QoKSk7Ci0gICAgcmV0dXJu
IG1fd2ViUGFnZS0+amF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUsIHgpOworICAgIHJldHVybiBt
X3dlYlBhZ2UtPmphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmKSwgbXNn
KTsKIH0KIAogYm9vbCBDaHJvbWVDbGllbnRRdDo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSog
ZiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3Ry
aW5nJiByZXN1bHQpCiB7CiAgICAgUVN0cmluZyB4ID0gcmVzdWx0OwotICAgIFFXZWJGcmFtZSog
d2ViRnJhbWUgPSBxb2JqZWN0X2Nhc3Q8UVdlYkZyYW1lKj4oZi0+bG9hZGVyKCktPm5ldHdvcmtp
bmdDb250ZXh0KCktPm9yaWdpbmF0aW5nT2JqZWN0KCkpOwotICAgIGJvb2wgcmMgPSBtX3dlYlBh
Z2UtPmphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUsIChRU3RyaW5nKW1lc3NhZ2UsIChRU3RyaW5n
KWRlZmF1bHRWYWx1ZSwgJngpOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lID0gUVdl
YkZyYW1lQWRhcHRlcjo6a2l0KGYpOworICAgIGJvb2wgcmMgPSBtX3dlYlBhZ2UtPmphdmFTY3Jp
cHRQcm9tcHQod2ViRnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgJngpOwogCiAgICAgLy8g
Rml4IHVwIGEgcXVpcmsgaW4gdGhlIFFJbnB1dERpYWxvZyBjbGFzcy4gSWYgbm8gaW5wdXQgaGFw
cGVuZWQgdGhlIHN0cmluZyBzaG91bGQgYmUgZW1wdHkKICAgICAvLyBidXQgaXQgaXMgbnVsbC4g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDkxNC4KQEAgLTM4
MSwxOSArMzYyLDE5IEBAIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQo
RnJhbWUqIGYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QKIHZvaWQgQ2hyb21lQ2xpZW50
UXQ6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBtc2cpCiB7CiAgICAgUVN0cmluZyB4
ID0gbXNnOwotICAgIGVtaXQgbV93ZWJQYWdlLT5zdGF0dXNCYXJNZXNzYWdlKHgpOworICAgIFFN
ZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInN0YXR1c0Jhck1l
c3NhZ2UiLCBRX0FSRyhRU3RyaW5nLCB4KSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnNo
b3VsZEludGVycnVwdEphdmFTY3JpcHQoKQogewogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0ID0g
ZmFsc2U7Ci0gICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UsICJzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0IiwgUXQ6OkRpcmVjdENvbm5lY3Rpb24sIFFfUkVUVVJOX0FSRyhi
b29sLCBzaG91bGRJbnRlcnJ1cHQpKTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1f
d2ViUGFnZS0+aGFuZGxlKCksICJzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0IiwgUXQ6OkRpcmVj
dENvbm5lY3Rpb24sIFFfUkVUVVJOX0FSRyhib29sLCBzaG91bGRJbnRlcnJ1cHQpKTsKICAgICBy
ZXR1cm4gc2hvdWxkSW50ZXJydXB0OwogfQogCiBLZXlib2FyZFVJTW9kZSBDaHJvbWVDbGllbnRR
dDo6a2V5Ym9hcmRVSU1vZGUoKQogewotICAgIHJldHVybiBtX3dlYlBhZ2UtPnNldHRpbmdzKCkt
PnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKQor
ICAgIHJldHVybiBtX3dlYlBhZ2UtPnNldHRpbmdzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5n
czo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbikKICAgICAgICAgPyBLZXlib2FyZEFjY2Vzc1Rh
YnNUb0xpbmtzIDogS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OwogfQogCkBAIC00MDcsMTEgKzM4OCwx
MCBAQCBJbnRSZWN0IENocm9tZUNsaWVudFF0Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0CiAg
ICAgaWYgKCFwYWdlQ2xpZW50KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgUVdp
ZGdldCogb3duZXJXaWRnZXQgPSBwYWdlQ2xpZW50LT5vd25lcldpZGdldCgpOwotICAgIGlmICgh
b3duZXJXaWRnZXQpCisgICAgUVdpbmRvdyogdG9wTGV2ZWxXaWRnZXQgPSBwYWdlQ2xpZW50LT5v
d25lcldpbmRvdygpOworICAgIGlmICghdG9wTGV2ZWxXaWRnZXQpCiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CiAKLSAgICBRV2lkZ2V0KiB0b3BMZXZlbFdpZGdldCA9IG93bmVyV2lkZ2V0LT53
aW5kb3coKTsKICAgICBRUmVjdCB0b3BMZXZlbEdlb21ldHJ5KHRvcExldmVsV2lkZ2V0LT5nZW9t
ZXRyeSgpKTsKIAogICAgIC8vIFRoZXJlJ3Mgbm8gQVBJIGluIFF0IHRvIHF1ZXJ5IGZvciB0aGUg
c2l6ZSBvZiB0aGUgcmVzaXplciwgc28gd2UgYXNzdW1lCkBAIC00MjMsMTIgKzQwMywxMyBAQCBJ
bnRSZWN0IENocm9tZUNsaWVudFF0Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0CiAgICAgLy8g
aXQgbWlnaHQgZXZlbiBiZSBvbiB0aGUgbG93ZXIgbGVmdCBzaWRlIG9mIHRoZSB3aW5kb3csIGJ1
dCBpbiBXZWJLaXQgd2UKICAgICAvLyBhbHdheXMgZHJhdyBzY3JvbGxiYXJzIG9uIHRoZSByaWdo
dCBoYW5kIHNpZGUsIHNvIHdlIGFzc3VtZSB0aGlzIHRvIGJlIHRoZQogICAgIC8vIGxvY2F0aW9u
IHdoZW4gY29tcHV0aW5nIHRoZSByZXNpemUgcmVjdCB0byByZXNlcnZlIGZvciBXZWJLaXQuCi0g
ICAgUVBvaW50IHJlc2l6ZUNvcm5lclRvcExlZnQgPSBvd25lcldpZGdldC0+bWFwRnJvbSh0b3BM
ZXZlbFdpZGdldCwKLSAgICAgICAgICAgIFFQb2ludCh0b3BMZXZlbEdlb21ldHJ5LndpZHRoKCks
IHRvcExldmVsR2VvbWV0cnkuaGVpZ2h0KCkpCi0gICAgICAgICAgICAtIFFQb2ludChzY29sbGJh
clRoaWNrbmVzcywgc2NvbGxiYXJUaGlja25lc3MpKTsKKyAgICBRUG9pbnQgcmVzaXplQ29ybmVy
VG9wTGVmdCA9IFFQb2ludCh0b3BMZXZlbEdlb21ldHJ5LndpZHRoKCksIHRvcExldmVsR2VvbWV0
cnkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFFQb2ludChz
Y29sbGJhclRoaWNrbmVzcywgc2NvbGxiYXJUaGlja25lc3MpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLSBtX3dlYlBhZ2UtPnZpZXdSZWN0UmVsYXRpdmVUb1dpbmRvdygpLnRv
cExlZnQoKTsKIAogICAgIFFSZWN0IHJlc2l6ZUNvcm5lclJlY3QgPSBRUmVjdChyZXNpemVDb3Ju
ZXJUb3BMZWZ0LCBRU2l6ZShzY29sbGJhclRoaWNrbmVzcywgc2NvbGxiYXJUaGlja25lc3MpKTsK
ICAgICByZXR1cm4gcmVzaXplQ29ybmVyUmVjdC5pbnRlcnNlY3RlZChwYWdlQ2xpZW50LT5nZW9t
ZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdldCgpKTsKKwogI2Vsc2UKICAgICByZXR1cm4gSW50UmVj
dCgpOwogI2VuZGlmCkBAIC00MzgsNyArNDE5LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6aW52
YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wpCiB7CiAjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKSB7
Ci0gICAgICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBRV2Vi
RnJhbWVQcml2YXRlOjpjb3JlKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpLT50aWxlZEJhY2tpbmdT
dG9yZSgpOworICAgICAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3Jl
ID0gbV93ZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmZyYW1lLT50aWxlZEJhY2tpbmdTdG9y
ZSgpOwogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgYmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKHdpbmRvd1JlY3QpOwpAQCAtNDQ4LDcgKzQy
OSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmludmFsaWRhdGVSb290Vmlldyhjb25zdCBJbnRS
ZWN0JiB3aW5kb3dSZWN0LCBib29sKQogI2VuZGlmCiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50UXQ6
OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3Qs
IGJvb2wgaW1tZWRpYXRlKQordm9pZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0ZUNvbnRlbnRz
QW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCkKIHsKICAgICAvLyBO
byBkb3VibGUgYnVmZmVyLCBzbyBvbmx5IHVwZGF0ZSB0aGUgUVdpZGdldCBpZiBjb250ZW50IGNo
YW5nZWQuCiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKSB7CkBAIC00NTcsNyArNDM4LDcg
QEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29u
c3QgSW50UmVjdCYgd2luZG93UmVjdCwgYm8KICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHBsYXRmb3JtUGFnZUNsaWVudCgpLT51cGRhdGUocmVjdCk7CiAgICAgfQot
ICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLCAicmVwYWludFJlcXVlc3Rl
ZCIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uLCBRX0FSRyhRUmVjdCwgd2luZG93UmVjdCkpOworICAg
IFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInJlcGFpbnRS
ZXF1ZXN0ZWQiLCBRdDo6UXVldWVkQ29ubmVjdGlvbiwgUV9BUkcoUVJlY3QsIHdpbmRvd1JlY3Qp
KTsKIAogICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyAiaW1tZWRpYXRlIiBzdXBwb3J0IGZvciB3
aW5kb3cgcGFpbnRpbmcuICBUaGlzIHNob3VsZCBiZSBkb25lIGFsd2F5cyB3aGVuZXZlciB0aGUg
ZmxhZwogICAgIC8vIGlzIHNldC4KQEAgLTQ3MiwxNCArNDUzLDE4IEBAIHZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
Vmlld1JlY3QsCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQogICAgICAgICBwbGF0
Zm9ybVBhZ2VDbGllbnQoKS0+c2Nyb2xsKGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpLCBz
Y3JvbGxWaWV3UmVjdCk7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnNjcm9sbFJlcXVlc3RlZChkZWx0
YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QpOworICAgIFFNZXRhT2Jq
ZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIs
IFFfQVJHKGludCwgZGVsdGEud2lkdGgoKSksIFFfQVJHKGludCwgZGVsdGEuaGVpZ2h0KCkpLCBR
X0FSRyhRUmVjdCwgc2Nyb2xsVmlld1JlY3QpKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6ZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNv
bnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBRUG9pbnQgY3VycmVudFBvc2l0aW9uKG1fd2Vi
UGFnZS0+bWFpbkZyYW1lKCktPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGVtaXQgbV93ZWJQYWdl
LT5zY3JvbGxSZXF1ZXN0ZWQocG9pbnQueCgpIC0gY3VycmVudFBvc2l0aW9uLngoKSwgcG9pbnQu
eSgpIC0gY3VycmVudFBvc2l0aW9uLnkoKSwgUVJlY3QoUVBvaW50KDAsIDApLCBtX3dlYlBhZ2Ut
PnZpZXdwb3J0U2l6ZSgpKSk7CisKKyAgICBJbnRTaXplIGN1cnJlbnRQb3NpdGlvbiA9IG1fd2Vi
UGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGludCB4ID0g
cG9pbnQueCgpIC0gY3VycmVudFBvc2l0aW9uLndpZHRoKCk7CisgICAgaW50IHkgPSBwb2ludC55
KCkgLSBjdXJyZW50UG9zaXRpb24uaGVpZ2h0KCk7CisgICAgY29uc3QgUVJlY3QgcmVjdChRUG9p
bnQoMCwgMCksIG1fd2ViUGFnZS0+dmlld3BvcnRTaXplKCkpOworICAgIFFNZXRhT2JqZWN0Ojpp
bnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJH
KGludCwgeCksIFFfQVJHKGludCwgeSksIFFfQVJHKFFSZWN0LCByZWN0KSk7CiB9CiAjZW5kaWYK
IApAQCAtNDg5LDEyICs0NzQsMTIgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6cm9vdFZpZXdU
b1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkK
ICAgICAgICAgcmV0dXJuIHJlY3Q7CiAKLSAgICBRV2lkZ2V0KiBvd25lcldpZGdldCA9IHBhZ2VD
bGllbnQtPm93bmVyV2lkZ2V0KCk7Ci0gICAgaWYgKCFvd25lcldpZGdldCkKKyAgICBRV2luZG93
KiBvd25lcldpbmRvdyA9IHBhZ2VDbGllbnQtPm93bmVyV2luZG93KCk7CisgICAgaWYgKCFvd25l
cldpbmRvdykKICAgICAgICByZXR1cm4gcmVjdDsKIAogICAgIFFSZWN0IHNjcmVlblJlY3QocmVj
dCk7Ci0gICAgc2NyZWVuUmVjdC50cmFuc2xhdGUob3duZXJXaWRnZXQtPm1hcFRvR2xvYmFsKFFQ
b2ludCgwLCAwKSkpOworICAgIHNjcmVlblJlY3QudHJhbnNsYXRlKG93bmVyV2luZG93LT5tYXBU
b0dsb2JhbChtX3dlYlBhZ2UtPnZpZXdSZWN0UmVsYXRpdmVUb1dpbmRvdygpLnRvcExlZnQoKSkp
OwogCiAgICAgcmV0dXJuIHNjcmVlblJlY3Q7CiB9CkBAIC01MDUsMjIgKzQ5MCwyMiBAQCBJbnRQ
b2ludCBDaHJvbWVDbGllbnRRdDo6c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0CiAgICAgaWYgKCFwYWdlQ2xpZW50KQogICAgICAgICByZXR1cm4gcG9pbnQ7CiAK
LSAgICBRV2lkZ2V0KiBvd25lcldpZGdldCA9IHBhZ2VDbGllbnQtPm93bmVyV2lkZ2V0KCk7Ci0g
ICAgaWYgKCFvd25lcldpZGdldCkKKyAgICBRV2luZG93KiBvd25lcldpbmRvdyA9IHBhZ2VDbGll
bnQtPm93bmVyV2luZG93KCk7CisgICAgaWYgKCFvd25lcldpbmRvdykKICAgICAgICAgcmV0dXJu
IHBvaW50OwogCi0gICAgcmV0dXJuIG93bmVyV2lkZ2V0LT5tYXBGcm9tR2xvYmFsKHBvaW50KTsK
KyAgICByZXR1cm4gb3duZXJXaW5kb3ctPm1hcEZyb21HbG9iYWwocG9pbnQpIC0gbV93ZWJQYWdl
LT52aWV3UmVjdFJlbGF0aXZlVG9XaW5kb3coKS50b3BMZWZ0KCkgOwogfQogCiBQbGF0Zm9ybVBh
Z2VDbGllbnQgQ2hyb21lQ2xpZW50UXQ6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+Y2xpZW50LmdldCgpOworICAgIHJldHVybiBtX3dlYlBh
Z2UtPmNsaWVudC5kYXRhKCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmNvbnRlbnRzU2l6
ZUNoYW5nZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAg
IGlmIChmcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpCi0gICAgICAgIFFXZWJG
cmFtZVByaXZhdGU6OmtpdChmcmFtZSktPmNvbnRlbnRzU2l6ZUNoYW5nZWQoc2l6ZSk7CisgICAg
ICAgIFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmcmFtZSktPmNvbnRlbnRzU2l6ZURpZENoYW5nZShz
aXplKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKQEAgLTUzMiwzMyArNTE3LDE5
IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduCiAgICAgICAgIGxhc3RIb3ZlclVSTCA9IHJlc3Vs
dC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICAgICAgbGFzdEhvdmVyVGl0bGUgPSByZXN1bHQudGl0
bGUoZGlyKTsKICAgICAgICAgbGFzdEhvdmVyQ29udGVudCA9IHJlc3VsdC50ZXh0Q29udGVudCgp
OwotICAgICAgICBlbWl0IG1fd2ViUGFnZS0+bGlua0hvdmVyZWQobGFzdEhvdmVyVVJMLnN0cmlu
ZygpLAotICAgICAgICAgICAgICAgIGxhc3RIb3ZlclRpdGxlLCBsYXN0SG92ZXJDb250ZW50KTsK
KyAgICAgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAi
bGlua0hvdmVyZWQiLCBRX0FSRyhRU3RyaW5nLCBsYXN0SG92ZXJVUkwuc3RyaW5nKCkpLAorICAg
ICAgICAgICAgICAgIFFfQVJHKFFTdHJpbmcsIGxhc3RIb3ZlclRpdGxlKSwgUV9BUkcoUVN0cmlu
ZywgbGFzdEhvdmVyQ29udGVudCkpOwogICAgIH0KIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6
c2V0VG9vbFRpcChjb25zdCBTdHJpbmcgJnRpcCwgVGV4dERpcmVjdGlvbikKIHsKLSNpZm5kZWYg
UVRfTk9fVE9PTFRJUAotICAgIFFXaWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsKLSAg
ICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0aXAuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHZpZXctPnNldFRvb2xUaXAoUVN0cmluZygpKTsKLSAgICAgICAgUVRvb2xUaXA6
OmhpZGVUZXh0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUVN0cmluZyBkdGlwID0gUUxhdGlu
MVN0cmluZygiPHA+IikgKyBRU3RyaW5nKHRpcCkudG9IdG1sRXNjYXBlZCgpICsgUUxhdGluMVN0
cmluZygiPC9wPiIpOwotICAgICAgICB2aWV3LT5zZXRUb29sVGlwKGR0aXApOwotICAgIH0KLSNl
bHNlCi0gICAgUV9VTlVTRUQodGlwKTsKLSNlbmRpZgorICAgIG1fd2ViUGFnZS0+c2V0VG9vbFRp
cCh0aXApOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpwcmludChGcmFtZSogZnJhbWUpCiB7
Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnByaW50UmVxdWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6Omtp
dChmcmFtZSkpOworICAgIGVtaXQgbV93ZWJQYWdlLT5wcmludFJlcXVlc3RlZChRV2ViRnJhbWVB
ZGFwdGVyOjpraXQoZnJhbWUpKTsKIH0KIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCkBAIC01
NjksNyArNTQwLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6ZXhjZWVkZWREYXRhYmFzZVF1b3Rh
KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU4KICAgICBpZiAoIURhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmhhc0VudHJ5Rm9yT3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpKSkKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0
UXVvdGEoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHF1b3RhKTsKIAotICAg
IGVtaXQgbV93ZWJQYWdlLT5kYXRhYmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1lUHJpdmF0ZTo6
a2l0KGZyYW1lKSwgZGF0YWJhc2VOYW1lKTsKKyAgICBtX3dlYlBhZ2UtPmRhdGFiYXNlUXVvdGFF
eGNlZWRlZChRV2ViRnJhbWVBZGFwdGVyOjpraXQoZnJhbWUpLCBkYXRhYmFzZU5hbWUpOwogfQog
I2VuZGlmCiAKQEAgLTU5Niw3ICs1NjcsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpyZWFjaGVk
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sCiAjaWYg
RU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiBQYXNzT3duUHRyPENvbG9yQ2hvb3Nlcj4gQ2hyb21l
Q2xpZW50UXQ6OmNyZWF0ZUNvbG9yQ2hvb3NlcihDb2xvckNob29zZXJDbGllbnQqIGNsaWVudCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGNvbnN0IFFDb2xvciBzZWxlY3RlZENvbG9yID0g
bV93ZWJQYWdlLT5kLT5jb2xvclNlbGVjdGlvblJlcXVlc3RlZChRQ29sb3IoY29sb3IpKTsKKyAg
ICBjb25zdCBRQ29sb3Igc2VsZWN0ZWRDb2xvciA9IG1fd2ViUGFnZS0+Y29sb3JTZWxlY3Rpb25S
ZXF1ZXN0ZWQoUUNvbG9yKGNvbG9yKSk7CiAgICAgY2xpZW50LT5kaWRDaG9vc2VDb2xvcihzZWxl
Y3RlZENvbG9yKTsKICAgICBjbGllbnQtPmRpZEVuZENob29zZXIoKTsKICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTYwNiwzMiArNTc3LDIyIEBAIFBhc3NPd25QdHI8Q29sb3JDaG9vc2VyPiBDaHJv
bWVDbGllbnRRdDo6Y3JlYXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCoKIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OnJ1bk9wZW5QYW5lbChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8Rmls
ZUNob29zZXI+IHBycEZpbGVDaG9vc2VyKQogewogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gZmls
ZUNob29zZXIgPSBwcnBGaWxlQ2hvb3NlcjsKLSAgICBib29sIHN1cHBvcnRNdWx0aSA9IG1fd2Vi
UGFnZS0+c3VwcG9ydHNFeHRlbnNpb24oUVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRl
bnNpb24pOwotCi0gICAgaWYgKGZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRpcGxl
RmlsZXMgJiYgc3VwcG9ydE11bHRpKSB7Ci0gICAgICAgIFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBs
ZUZpbGVzRXh0ZW5zaW9uT3B0aW9uIG9wdGlvbjsKLSAgICAgICAgb3B0aW9uLnBhcmVudEZyYW1l
ID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsKIAotICAgICAgICBpZiAoIWZpbGVDaG9v
c2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmls
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgb3B0aW9uLnN1Z2dlc3RlZEZpbGVOYW1l
cyArPSBmaWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzW2ldOworICAgIFFTdHJp
bmdMaXN0IHN1Z2dlc3RlZEZpbGVOYW1lczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZUNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgc3VnZ2VzdGVkRmlsZU5hbWVzICs9IGZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVk
RmlsZXNbaV07CiAKLSAgICAgICAgUVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNp
b25SZXR1cm4gb3V0cHV0OwotICAgICAgICBtX3dlYlBhZ2UtPmV4dGVuc2lvbihRV2ViUGFnZTo6
Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCk7CisgICAgY29u
c3QgYm9vbCBhbGxvd011bHRpcGxlID0gZmlsZUNob29zZXItPnNldHRpbmdzKCkuYWxsb3dzTXVs
dGlwbGVGaWxlczsKIAotICAgICAgICBpZiAoIW91dHB1dC5maWxlTmFtZXMuaXNFbXB0eSgpKSB7
CisgICAgUVN0cmluZ0xpc3QgcmVzdWx0ID0gbV93ZWJQYWdlLT5jaG9vc2VGaWxlcyhRV2ViRnJh
bWVBZGFwdGVyOjpraXQoZnJhbWUpLCBhbGxvd011bHRpcGxlLCBzdWdnZXN0ZWRGaWxlTmFtZXMp
OworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYWxsb3dNdWx0aXBs
ZSkgewogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG91dHB1dC5maWxlTmFtZXMuY291bnQoKTsgKytpKQotICAgICAgICAg
ICAgICAgIG5hbWVzLmFwcGVuZChvdXRwdXQuZmlsZU5hbWVzLmF0KGkpKTsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0LmNvdW50KCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBuYW1lcy5hcHBlbmQocmVzdWx0LmF0KGkpKTsKICAgICAgICAgICAgIGZpbGVDaG9vc2VyLT5j
aG9vc2VGaWxlcyhuYW1lcyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBRU3Ry
aW5nIHN1Z2dlc3RlZEZpbGU7Ci0gICAgICAgIGlmICghZmlsZUNob29zZXItPnNldHRpbmdzKCku
c2VsZWN0ZWRGaWxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzdWdnZXN0ZWRGaWxlID0gZmls
ZUNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlc1swXTsKLSAgICAgICAgUVN0cmluZyBm
aWxlID0gbV93ZWJQYWdlLT5jaG9vc2VGaWxlKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSks
IHN1Z2dlc3RlZEZpbGUpOwotICAgICAgICBpZiAoIWZpbGUuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgZmlsZUNob29zZXItPmNob29zZUZpbGUoZmlsZSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZmlsZUNob29zZXItPmNob29zZUZpbGUocmVzdWx0LmZpcnN0KCkpOwogICAgIH0KIH0K
IApAQCAtNjYyLDcgKzYyMyw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNjaGVkdWxlQW5pbWF0
aW9uKCkKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucygp
CiB7Ci0gICAgbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+ZC0+ZnJhbWUtPnZpZXcoKS0+c2Vydmlj
ZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRU
aW1lKCkpKTsKKyAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWUtPnZpZXco
KS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1w
KGN1cnJlbnRUaW1lKCkpKTsKIH0KICNlbmRpZgogCkBAIC03MDMsOCArNjY0LDEwIEBAIEludFJl
Y3QgQ2hyb21lQ2xpZW50UXQ6OnZpc2libGVSZWN0Rm9yVGlsZWRCYWNraW5nU3RvcmUoKSBjb25z
dAogICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCkgfHwgIW1fd2ViUGFnZSkKICAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKIAotICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCktPnZpZXdS
ZXNpemVzVG9Db250ZW50c0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFFSZWN0KG1fd2ViUGFn
ZS0+bWFpbkZyYW1lKCktPnNjcm9sbFBvc2l0aW9uKCksIG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkt
Pmdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBpZiAoIXBsYXRmb3JtUGFnZUNsaWVudCgpLT52aWV3
UmVzaXplc1RvQ29udGVudHNFbmFibGVkKCkpIHsKKyAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBt
X3dlYlBhZ2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAg
cmV0dXJuIFFSZWN0KFFQb2ludChvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKSwgbV93
ZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgfQog
CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHBsYXRmb3JtUGFnZUNsaWVu
dCgpLT5ncmFwaGljc0l0ZW1WaXNpYmxlUmVjdCgpKSk7CiB9CkBAIC03NTEsNyArNzE0LDcgQEAg
UGFzc093blB0cjxRV2ViU2VsZWN0TWV0aG9kPiBDaHJvbWVDbGllbnRRdDo6Y3JlYXRlU2VsZWN0
UG9wdXAoKSBjb25zdAogICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIAogI2lmICFk
ZWZpbmVkKFFUX05PX0NPTUJPQk9YKQotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUXRGYWxsYmFj
a1dlYlBvcHVwKHRoaXMpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobV93ZWJQYWdlLT5jcmVhdGVT
ZWxlY3RQb3B1cCgpKTsKICNlbHNlCiAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKQEAgLTc1
OSw5ICs3MjIsMTkgQEAgUGFzc093blB0cjxRV2ViU2VsZWN0TWV0aG9kPiBDaHJvbWVDbGllbnRR
dDo6Y3JlYXRlU2VsZWN0UG9wdXAoKSBjb25zdAogCiB2b2lkIENocm9tZUNsaWVudFF0OjpkaXNw
YXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYp
IGNvbnN0CiB7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCk7
CisgICAgbV93ZWJQYWdlLT5lbWl0Vmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKTsKIH0KIAorI2lm
IFVTRShRVF9NVUxUSU1FRElBKQorUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgKkNocm9tZUNs
aWVudFF0OjpjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlciogaGFuZGxlciA9IG1fcGxhdGZvcm1QbHVnaW4uY3JlYXRlRnVsbFNj
cmVlblZpZGVvSGFuZGxlcigpLmxlYWtQdHIoKTsKKyAgICBpZiAoIWhhbmRsZXIpCisgICAgICAg
IGhhbmRsZXIgPSBtX3dlYlBhZ2UtPmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAg
ICByZXR1cm4gaGFuZGxlcjsKK30KKyNlbmRpZgorCiBib29sIENocm9tZUNsaWVudFF0OjpzZWxl
Y3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNzk0LDcgKzc2Nyw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnBvcHVsYXRlVmlzaXRlZExp
bmtzKCkKICAgICAvLyBpbiBhIHNlcGFyYXRlIGRhdGFiYXNlCiAgICAgaWYgKGR1bXBWaXNpdGVk
TGlua3NDYWxsYmFja3MpIHsKICAgICAgICAgcHJpbnRmKCJBc2tlZCB0byBwb3B1bGF0ZSB2aXNp
dGVkIGxpbmtzIGZvciBXZWJWaWV3IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICBxUHJpbnRh
YmxlKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnVybCgpLnRvU3RyaW5nKCkpKTsKKyAgICAgICAg
ICAgICAgICBxUHJpbnRhYmxlKFFVcmwobV93ZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPnVy
bCkudG9TdHJpbmcoKSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCmluZGV4IGY3MzU5ZDJlMjg3NGE3NTUxOWMyZjUz
ODc2ODEzMjk4MGFlNGI5Y2QuLjk2MDczMDVjMzZlNTA4YzdmZjljMjYwYmUxZjFiYWJhOWNhYmZj
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmgKQEAgLTQyLDYgKzQyLDggQEAgY2xhc3MgUUV2ZW50TG9vcDsKIFFUX0VORF9OQU1FU1BB
Q0UKIAogY2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CitjbGFzcyBRV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OSw3
ICs2MSw3IEBAIGNsYXNzIEZ1bGxTY3JlZW5WaWRlb1F0OwogCiBjbGFzcyBDaHJvbWVDbGllbnRR
dCA6IHB1YmxpYyBDaHJvbWVDbGllbnQgewogcHVibGljOgotICAgIENocm9tZUNsaWVudFF0KFFX
ZWJQYWdlKik7CisgICAgQ2hyb21lQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgdmly
dHVhbCB+Q2hyb21lQ2xpZW50UXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVk
KCk7CiAKQEAgLTE5OCw3ICsyMDAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hh
bmdlZCh1bnNpZ25lZCkgeyB9CiAKLSAgICBRV2ViUGFnZSogbV93ZWJQYWdlOworICAgIFFXZWJG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisK
KyAgICBRV2ViUGFnZUFkYXB0ZXIqIG1fd2ViUGFnZTsKICAgICBLVVJMIGxhc3RIb3ZlclVSTDsK
ICAgICBTdHJpbmcgbGFzdEhvdmVyVGl0bGU7CiAgICAgU3RyaW5nIGxhc3RIb3ZlckNvbnRlbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTI0ZThiZDUy
MzUyNWJhYzliYTgyMjQ5ODdhM2I2YzZjZTE3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNw
cApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIuaCIKKworI2lmIFVT
RShRVF9NVUxUSU1FRElBKQorCisjaW5jbHVkZSAiRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2Jvb2wgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hh
bmRsZXI6OnNfc2hvdWxkRm9yY2VGdWxsU2NyZWVuVmlkZW9QbGF5YmFjayA9IGZhbHNlOworCitE
ZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXIoKQorICAgIDogUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgICwgbV9mdWxsU2Ny
ZWVuV2lkZ2V0KG5ldyBGdWxsU2NyZWVuVmlkZW9XaWRnZXQpCit7CisgICAgY29ubmVjdChtX2Z1
bGxTY3JlZW5XaWRnZXQsIFNJR05BTChkaWRFeGl0RnVsbFNjcmVlbigpKSwgdGhpcywgU0lHTkFM
KGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIG1fZnVsbFNjcmVlbldpZGdldC0+aGlkZSgpOwor
CisgICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5jbG9zZSgpOworfQorCitEZWZhdWx0RnVsbFNjcmVl
blZpZGVvSGFuZGxlcjo6fkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBk
ZWxldGUgbV9mdWxsU2NyZWVuV2lkZ2V0OworfQorCitib29sIERlZmF1bHRGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QKK3sK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6
ZWQpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBmb3JjZUZ1bGxTY3JlZW4gPSBxZ2V0ZW52KCJRVF9X
RUJLSVRfRk9SQ0VfRlVMTFNDUkVFTl9WSURFTyIpOworICAgICAgICBpZiAoIWZvcmNlRnVsbFNj
cmVlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVv
UGxheWJhY2sgPSB0cnVlOworCisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gc19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrOworfQorCit2
b2lkIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlh
UGxheWVyKiBwbGF5ZXIpCit7CisgICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5zaG93KHBsYXllcik7
Cit9CisKK3ZvaWQgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVu
KCkKK3sKKyAgICBtX2Z1bGxTY3JlZW5XaWRnZXQtPmNsb3NlKCk7Cit9CisjZW5kaWYKKworCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1
bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE5Mjk4YWZkNTQ1OTI3ZTRm
M2E4ZmM4ZmVkMWQzN2Y3ODc1ZDI4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIuaApAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2lmbmRlZiBEZWZhdWx0RnVsbFNjcmVlblZp
ZGVvSGFuZGxlcl9oCisjZGVmaW5lIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyX2gKKwor
I2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIEZ1bGxTY3JlZW5WaWRlb1dpZGdldDsKKworLy8gV2UgZG8gbm90IHVz
ZSBFTkFCTEUgb3IgVVNFIGJlY2F1c2UgbW9jIGRvZXMgbm90IGV4cGFuZCB0aGVzZSBtYWNyb3Mu
CisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElN
RURJQQorY2xhc3MgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBwdWJsaWMgUVdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgRGVmYXVs
dEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICB2aXJ0dWFsIH5EZWZhdWx0RnVsbFNjcmVl
blZpZGVvSGFuZGxlcigpOworICAgIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5
YmFjaygpIGNvbnN0OworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIGVudGVyRnVsbFNjcmVl
bihRTWVkaWFQbGF5ZXIqKTsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGJvb2wgc19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrOwor
ICAgIEZ1bGxTY3JlZW5WaWRlb1dpZGdldCAqbV9mdWxsU2NyZWVuV2lkZ2V0OworfTsKKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIERlZmF1bHRGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFF0LmNwcAppbmRleCBjYjYzMjgzNDAwOTg5NGNjOTU2MzYyNjAzODVkNDAwYTA1NzMw
ZjQ3Li41ZWEzZWY5NDFlYzRhYjE3MjdjN2ViZDBkMTIyZGU3ZDQ2YzdhNTdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCkBAIC0yNywx
MSArMjcsMTIgQEAKICNpbmNsdWRlICJEcmFnQ2xpZW50UXQuaCIKIAogI2luY2x1ZGUgIkNsaXBi
b2FyZFF0LmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgorI2luY2x1ZGUg
PFFXZWJQYWdlQ2xpZW50Lmg+CiAKICNpbmNsdWRlIDxRRHJhZz4KICNpbmNsdWRlIDxRTWltZURh
dGE+CkBAIC05Myw3ICs5NCw3IEBAIHZvaWQgRHJhZ0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0lt
YWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQCiAjaWZuZGVmIFFU
X05PX0RSQUdBTkREUk9QCiAgICAgUU1pbWVEYXRhKiBjbGlwYm9hcmREYXRhID0gc3RhdGljX2Nh
c3Q8Q2xpcGJvYXJkUXQqPihjbGlwYm9hcmQpLT5jbGlwYm9hcmREYXRhKCk7CiAgICAgc3RhdGlj
X2Nhc3Q8Q2xpcGJvYXJkUXQqPihjbGlwYm9hcmQpLT5pbnZhbGlkYXRlV3JpdGFibGVEYXRhKCk7
Ci0gICAgUVdpZGdldCogdmlldyA9IG1fd2ViUGFnZS0+dmlldygpOworICAgIFFPYmplY3QqIHZp
ZXcgPSBtX2Nocm9tZUNsaWVudC0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPm93bmVyV2lkZ2V0KCk7
CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgUURyYWcqIGRyYWcgPSBuZXcgUURyYWcodmlldyk7
CiAgICAgICAgIGlmIChkcmFnSW1hZ2UpCkBAIC0xMDUsNyArMTA2LDcgQEAgdm9pZCBEcmFnQ2xp
ZW50UXQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFAKICAgICAgICAgUXQ6OkRyb3BBY3Rpb24gYWN0dWFsRHJvcEFjdGlvbiA9IGRy
YWctPmV4ZWMoZHJhZ09wZXJhdGlvbnNUb0Ryb3BBY3Rpb25zKGRyYWdPcGVyYXRpb25NYXNrKSk7
CiAKICAgICAgICAgLy8gU2VuZCBkcmFnRW5kIGV2ZW50Ci0gICAgICAgIFBsYXRmb3JtTW91c2VF
dmVudCBtZShtX3dlYlBhZ2UtPnZpZXcoKS0+bWFwRnJvbUdsb2JhbChRQ3Vyc29yOjpwb3MoKSks
IFFDdXJzb3I6OnBvcygpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAw
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7CisgICAgICAgIFBsYXRmb3JtTW91c2VF
dmVudCBtZShtX2Nocm9tZUNsaWVudC0+c2NyZWVuVG9Sb290VmlldyhRQ3Vyc29yOjpwb3MoKSks
IFFDdXJzb3I6OnBvcygpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAw
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7CiAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+ZHJhZ1NvdXJjZUVuZGVkQXQobWUsIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24o
YWN0dWFsRHJvcEFjdGlvbikpOwogICAgIH0KICAgICBmcmFtZS0+cGFnZSgpLT5kcmFnQ29udHJv
bGxlcigpLT5kcmFnRW5kZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0RyYWdDbGllbnRRdC5oCmluZGV4IDE1NzI0ZjFlMTQ4NTYzZjNlNmVlMDE4NTUzYTdlZDNlYzg0
Y2MxNTguLjQyNzU0ODE2MGZkYmY1YjZjMzUxY2FlNDJhN2JkYmNmMmU2MDc0ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuaApAQCAtMjgsMTMg
KzI4LDEzIEBACiAKICNpbmNsdWRlICJEcmFnQ2xpZW50LmgiCiAKLWNsYXNzIFFXZWJQYWdlOwot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENocm9tZUNsaWVudDsKKwogY2xhc3MgRHJh
Z0NsaWVudFF0IDogcHVibGljIERyYWdDbGllbnQgewogcHVibGljOgotICAgIERyYWdDbGllbnRR
dChRV2ViUGFnZSogd2ViUGFnZSkgOiBtX3dlYlBhZ2Uod2ViUGFnZSkge307CisgICAgRHJhZ0Ns
aWVudFF0KENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50KSA6IG1fY2hyb21lQ2xpZW50KGNocm9t
ZUNsaWVudCkge307CiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKTsKICAgICB2aXJ0dWFsIERy
YWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopOwogICAgIHZp
cnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwpAQCAtNDIsNyArNDIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFn
U291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopOyAgICAKICAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFn
ZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJv
b2wgbGlua0RyYWcgPSBmYWxzZSk7CiBwcml2YXRlOgotICAgIFFXZWJQYWdlKiBtX3dlYlBhZ2U7
CisgICAgQ2hyb21lQ2xpZW50KiBtX2Nocm9tZUNsaWVudDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQu
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5jcHAKaW5kZXggZWRmMjBhNDYwNTAzMzE3NjRkNzlkYmZmMGQzM2JjOTA3YmNiZjY3Yy4u
MjU1YTRiZGJhOGE2NDViYzAwZDVlODNmYjg4OWUxZmU1ZGVmM2U1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5jcHAKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIK
LSNpbmNsdWRlICJJbml0V2ViQ29yZVF0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQuaCIKQEAgLTYzLDYgKzYyLDggQEAKICNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CiAjaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgor
I2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1Rl
eHQuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgpAQCAtNzgsMjIgKzc5LDE2IEBACiAj
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAK
LSNpbmNsdWRlICJxd2ViZWxlbWVudC5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1
ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKLSNpbmNsdWRlICJx
d2ViaGlzdG9yeV9wLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFn
ZV9wLmgiCi0jaW5jbHVkZSAicXdlYnNjcmlwdHdvcmxkLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3
ZWJlbGVtZW50LmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJoaXN0b3J5LmgiCisjaW5jbHVkZSAi
Li4vQXBpL3F3ZWJoaXN0b3J5X3AuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNjcmlwdHdvcmxk
LmgiCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogI2luY2x1ZGUg
IkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdC5oIgog
I2VuZGlmCiAKLSNpbmNsdWRlIDxRQWN0aW9uPgotI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUg
PFFQYWludGVyPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTEwMyw3ICs5OCw3IEBA
IFFNYXA8aW50LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogI2lmIEVOQUJMRShHRU9M
T0NBVElPTikKIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogdG9HZW9sb2NhdGlvbkNsaWVudE1vY2so
R2VvbG9jYXRpb25DbGllbnQqIGNsaWVudCkKIHsKLSAgICAgQVNTRVJUKFFXZWJQYWdlUHJpdmF0
ZTo6ZHJ0UnVuKTsKKyAgICAgQVNTRVJUKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKTsKICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNsaWVudCk7CiB9CiAj
ZW5kaWYKQEAgLTExMSw3ICsxMDYsNyBAQCBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIHRvR2VvbG9j
YXRpb25DbGllbnRNb2NrKEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQpCiAjaWYgRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKIERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogdG9EZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2soRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGNsaWVudCkKIHsK
LSAgICBBU1NFUlQoUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW4pOworICAgIEFTU0VSVChRV2ViUGFn
ZUFkYXB0ZXI6OmRydFJ1bik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jayo+KGNsaWVudCk7CiB9CiAjZW5kaWYKQEAgLTE5OCw3ICsxOTMsNiBAQCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6fkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0KCkKIAogdm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgV2ViQ29yZTo6
aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwogICAgIFF0RFJUTm9kZVJ1bnRpbWU6OmluaXRpYWxpemUo
KTsKIH0KIApAQCAtMjI1LDU4ICsyMTksNTggQEAgaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
Ojp3b3JrZXJUaHJlYWRDb3VudCgpCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoYm9vbCBiKQogewotICAgIFFXZWJQYWdlUHJpdmF0
ZTo6ZHJ0UnVuID0gYjsKKyAgICBRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1biA9IGI7CiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmIGRlZmluZWQoWFBfVU5JWCkKICAgICAvLyBQbHVn
aW5WaWV3UXQgKFgxMSkgbmVlZHMgYSBmZXcgd29ya2Fyb3VuZHMgd2hlbiBydW5uaW5nIHVuZGVy
IERSVAogICAgIFBsdWdpblZpZXc6OnNldElzUnVubmluZ1VuZGVyRFJUKGIpOwogI2VuZGlmCiB9
CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJs
ZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVy
LCBib29sIGVuYWJsZWQpCiB7Ci0gICAgUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpLT5zZXR0
aW5ncygpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGVuYWJsZWQpOworICAgIGFkYXB0ZXIt
PnBhZ2UtPnNldHRpbmdzKCktPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUoUVdl
YlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIGdyb3VwTmFtZSkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVy
LCBjb25zdCBRU3RyaW5nJiBncm91cE5hbWUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2Ut
PnNldEdyb3VwTmFtZShncm91cE5hbWUpOworICAgIGFkYXB0ZXItPnBhZ2UtPnNldEdyb3VwTmFt
ZShncm91cE5hbWUpOwogfQogCi1RU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQ
YWdlR3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlKQorUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6d2ViUGFnZUdyb3VwTmFtZShRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAg
cmV0dXJuIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5ncm91cE5hbWUoKTsKKyAgICByZXR1cm4gYWRh
cHRlci0+cGFnZS0+Z3JvdXBOYW1lKCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OndlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQoUVdlYlBhZ2UqIHBhZ2UsIGxvbmcgY2FsbElk
LCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3
ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgbG9uZyBj
YWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmICghcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAg
ICBpZiAoIWFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY2FsbElkLCBzY3JpcHQpOworICAgIGFkYXB0ZXItPnBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxs
SWQsIHNjcmlwdCk7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
d2ViSW5zcGVjdG9yQ2xvc2UoUVdlYlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlcikKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmICghcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKSkKKyAgICBpZiAoIWFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisgICAgYWRhcHRlci0+cGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5zaG93KCk7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6d2ViSW5zcGVjdG9yU2hvdyhRV2ViUGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKFFXZWJQYWdlQWRhcHRlciogYWRhcHRl
cikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmICghcGFnZS0+aGFuZGxlKCktPnBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICBpZiAoIWFkYXB0ZXItPnBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmhhbmRsZSgpLT5w
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNob3coKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAjZW5kaWYKIH0KIAotYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9jdW1lbnRFbGVtZW50KFFXZWJGcmFtZSogZnJhbWUpCiti
b29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpoYXNEb2N1bWVudEVsZW1lbnQoUVdlYkZyYW1l
QWRhcHRlciAqYWRhcHRlcikKIHsKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShm
cmFtZSktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworICAgIHJldHVybiBhZGFwdGVy
LT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CiB9CiAKIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1l
bnQsIGJvb2wgaXNBdXRvZmlsbGVkKQpAQCAtMzA2LDkgKzMwMCw5IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldFZhbHVlRm9yVXNlcihjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QKIC8vIFBhdXNlIGEgZ2l2ZW4gQ1NTIGFuaW1hdGlvbiBvciB0cmFuc2l0aW9uIG9u
IHRoZSB0YXJnZXQgbm9kZSBhdCBhIHNwZWNpZmljIHRpbWUuCiAvLyBJZiB0aGUgYW5pbWF0aW9u
IG9yIHRyYW5zaXRpb24gaXMgYWxyZWFkeSBwYXVzZWQsIGl0IHdpbGwgdXBkYXRlIGl0cyBwYXVz
ZSB0aW1lLgogLy8gVGhpcyBtZXRob2QgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0
ZXN0aW5nIHRoZSBDU1MgYW5pbWF0aW9uIGFuZCB0cmFuc2l0aW9uIHN5c3RlbS4KLWJvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9uKFFXZWJGcmFtZSAqZnJhbWUsIGNv
bnN0IFFTdHJpbmcgJmFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nICZl
bGVtZW50SWQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihR
V2ViRnJhbWVBZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3RyaW5nICZhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZSwgY29uc3QgUVN0cmluZyAmZWxlbWVudElkKQogewotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzI2LDkgKzMyMCw5IEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnBhdXNlQW5pbWF0aW9uKFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJmFuCiAg
ICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvcmVOb2RlLT5yZW5k
ZXJlcigpLCBhbmltYXRpb25OYW1lLCB0aW1lKTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShRV2ViRnJhbWUgKmZyYW1lLCBjb25z
dCBRU3RyaW5nICZwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nICZlbGVt
ZW50SWQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlBy
b3BlcnR5KFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcgJnByb3BlcnR5
TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcgJmVsZW1lbnRJZCkKIHsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTM0Nyw5ICszNDEsOSBAQCBib29sIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KFFXZWJGcmFtZSAqZnJhbWUsIGNv
bnN0CiB9CiAKIC8vIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmlu
ZyBhbmltYXRpb25zIChpbmNsdWRlcyBib3RoIENTUyB0cmFuc2l0aW9ucyBhbmQgQ1NTIGFuaW1h
dGlvbnMpLgotaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZkFjdGl2ZUFuaW1h
dGlvbnMoUVdlYkZyYW1lICpmcmFtZSkKK2ludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNjAsOSArMzU0LDkgQEAgaW50IER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoUVdlYkZyYW1lICpmcmFtZSkK
ICAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFy
RnJhbWVOYW1lKFFXZWJGcmFtZSogZnJhbWUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpjbGVhckZyYW1lTmFtZShRV2ViRnJhbWVBZGFwdGVyICphZGFwdGVyKQogewotICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgY29yZUZyYW1lLT50cmVlKCktPmNsZWFy
TmFtZSgpOwogfQogCkBAIC0zODEsMjQgKzM3NSw2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0
CiAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRl
YnVnZ2luZyh3YWl0VW50aWxEb25lKTsKIH0KIAotLy8gU3VzcGVuZCBhY3RpdmUgRE9NIG9iamVj
dHMgaW4gdGhpcyBmcmFtZS4KLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwotICAgIGlmIChjb3JlRnJhbWUtPmRv
Y3VtZW50KCkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjaGFu
Z2VkIHRha2UgYSBSZWFzb25Gb3JTdXNwZW5zaW9uIHBhcmFtZXRlciAKLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzMyCi0gICAgICAgIGNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0
OjpKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQpOwotfQotCi0vLyBSZXN1bWUgYWN0aXZlIERPTSBv
YmplY3RzIGluIHRoaXMgZnJhbWUuCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXN1
bWVBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgRnJhbWUqIGNvcmVG
cmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwotICAgIGlmIChjb3JlRnJhbWUt
PmRvY3VtZW50KCkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVzdW1lQWN0aXZl
RE9NT2JqZWN0cygpOwotfQotCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3aGl0ZUxp
c3RBY2Nlc3NGcm9tT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0
cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0
LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQogewogICAgIFNlY3VyaXR5UG9saWN5
OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZy
b21TdHJpbmcoc291cmNlT3JpZ2luKSwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25I
b3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CkBAIC00MTksMzkgKzM5NSwzOSBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lKGJvb2wgZm9yYgogICAgIFNjaGVtZVJlZ2lzdHJ5OjpzZXREb21haW5SZWxh
eGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lKTsKIH0KIAotdm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoUVdlYlBh
Z2UqIHBhZ2UsIGJvb2wgdmFsdWUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRD
YXJldEJyb3dzaW5nRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgdmFsdWUp
CiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPnNldHRpbmdzKCktPnNldENhcmV0QnJvd3Np
bmdFbmFibGVkKHZhbHVlKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZCh2YWx1ZSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIHZh
bHVlKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBib29sIHZhbHVlKQogewotICAgIHBh
Z2UtPmhhbmRsZSgpLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5h
YmxlZCh2YWx1ZSk7CisgICAgYWRhcHRlci0+cGFnZS0+c2V0dGluZ3MoKS0+c2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQodmFsdWUpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5h
YmxlZCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBw
YWdlLT5kLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSBlbmFibGVkOworICAgIHN0YXRpY19j
YXN0PEVkaXRvckNsaWVudFF0Kj4oYWRhcHRlci0+cGFnZS0+ZWRpdG9yQ2xpZW50KCkpLT5zZXRT
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIAotdm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChRV2ViUGFn
ZSogcGFnZSwgYm9vbCBlbmFibGVkKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIs
IGJvb2wgZW5hYmxlZCkKIHsKLSAgICBwYWdlLT5kLT5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkID0gZW5hYmxlZDsKKyAgICBzdGF0aWNfY2FzdDxFZGl0b3JDbGllbnRRdCo+KGFkYXB0
ZXItPnBhZ2UtPmVkaXRvckNsaWVudCgpKS0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZChlbmFibGVkKTsKIH0KIAogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpleGVj
dXRlQ29yZUNvbW1hbmRCeU5hbWUoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIG5hbWUs
IGNvbnN0IFFTdHJpbmcmIHZhbHVlKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXhl
Y3V0ZUNvcmVDb21tYW5kQnlOYW1lKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0
cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCkt
PnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCkt
PmNvbW1hbmQobmFtZSkuZXhlY3V0ZSh2YWx1ZSk7CisgICAgYWRhcHRlci0+cGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1l
KS5leGVjdXRlKHZhbHVlKTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXND
b21tYW5kRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgbmFtZSkKK2Jvb2wg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVy
ICphZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBuYW1lKQogewotICAgIHJldHVybiBwYWdlLT5oYW5k
bGUoKS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0
b3IoKS0+Y29tbWFuZChuYW1lKS5pc0VuYWJsZWQoKTsKKyAgICByZXR1cm4gYWRhcHRlci0+cGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29t
bWFuZChuYW1lKS5pc0VuYWJsZWQoKTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZmluZFN0cmluZyhRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25z
dCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpmaW5kU3RyaW5nKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlciwgY29uc3QgUVN0cmluZyYgc3Ry
aW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCiB7CiAgICAgLy8gMS4gUGFyc2Ug
dGhlIG9wdGlvbnMgZnJvbSB0aGUgYXJyYXkKICAgICBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRp
b25zID0gMDsKQEAgLTQ3Myw3ICs0NDksNyBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpmaW5kU3RyaW5nKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBzdHJpbmcsCiAgICAg
fQogCiAgICAgLy8gMi4gZmluZCB0aGUgc3RyaW5nCi0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1l
ID0gcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBhZGFwdGVyLT5wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgcmV0dXJuIGZyYW1lICYm
IGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcsIG9wdGlvbnMpOwogfQogCkBAIC01
MTQsOSArNDkwLDkgQEAgUVZhcmlhbnRNYXAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbXB1
dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBRV2UKICAgICByZXR1cm4gcmVzOwog
fQogCi1RVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2Uo
UVdlYlBhZ2UqIHBhZ2UpCitRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
bGVjdGVkUmFuZ2UoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZy
YW1lKiBmcmFtZSA9IHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gYWRhcHRlci0+
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIFFWYXJp
YW50TGlzdCBzZWxlY3RlZFJhbmdlOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+
c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CiAKQEAgLTUzOCw5ICs1MTQs
OSBAQCBRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2Uo
UVdlYlBhZ2UqIHBhZ2UpCiAKIH0KIAotUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2ViUGFnZSogcGFnZSwgaW50IGxvY2F0
aW9uLCBpbnQgbGVuZ3RoKQorUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCkKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBwYWdl
LT5oYW5kbGUoKS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGFkYXB0ZXItPnBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBRVmFyaWFudExpc3QgcmVjdDsKIAog
ICAgIGlmICgobG9jYXRpb24gKyBsZW5ndGggPCBsb2NhdGlvbikgJiYgKGxvY2F0aW9uICsgbGVu
Z3RoKSkKQEAgLTU1Niw5ICs1MzIsOSBAQCBRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKFFXZWJQYWdlKiBwYWdlLAogICAgIHJl
dHVybiByZWN0OwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjplbGVtZW50RG9l
c0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0
cmluZyYgZWxlbWVudElkKQorYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZWxlbWVudERv
ZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIs
IGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gUVdl
YkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0
ZXItPmZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTU3NCw5ICs1NTAsOSBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjplbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdlYkZyYW1lKgogICAgIHJldHVybiBp
bnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkgJiYgIWlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZp
ZWxkKCkgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBdXRvY29tcGxldGUoKTsKIH0KIAotdm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2luZG93c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZp
b3IoUVdlYlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaW5k
b3dzQmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7
Ci0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAg
UGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIGlmICghY29yZVBhZ2UpCiAgICAg
ICAgIHJldHVybjsKICAgICBjb3JlUGFnZS0+c2V0dGluZ3MoKS0+c2V0RWRpdGluZ0JlaGF2aW9y
VHlwZShFZGl0aW5nV2luZG93c0JlaGF2aW9yKTsKQEAgLTY3Niw5ICs2NTIsOSBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpY2F0aW9uKGJvb2wgYikKICNlbmRpZgog
fQogCi1RU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp2aWV3cG9ydEFzVGV4dChRV2Vi
UGFnZSogcGFnZSwgaW50IGRldmljZURQSSwgY29uc3QgUVNpemUmIGRldmljZVNpemUsIGNvbnN0
IFFTaXplJiBhdmFpbGFibGVTaXplKQorUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
dmlld3BvcnRBc1RleHQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBpbnQgZGV2aWNlRFBJLCBj
b25zdCBRU2l6ZSYgZGV2aWNlU2l6ZSwgY29uc3QgUVNpemUmIGF2YWlsYWJsZVNpemUpCiB7Ci0g
ICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJncyA9IHBhZ2UtPmQtPnZpZXdwb3J0QXJn
dW1lbnRzKCk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJncyA9IGFkYXB0ZXIt
PnZpZXdwb3J0QXJndW1lbnRzKCk7CiAKICAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvID0gZGV2
aWNlRFBJIC8gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OmRlcHJlY2F0ZWRUYXJnZXREUEk7
CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGNvbmYgPSBXZWJDb3JlOjpjb21wdXRl
Vmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3MsCkBAIC03MDIsNjIgKzY3OCw2MiBAQCBRU3RyaW5nIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp2aWV3cG9ydEFzVGV4dChRV2ViUGFnZSogcGFnZSwgaW50
IGRldmljZURQSSwgYwogICAgIHJldHVybiByZXM7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KFFXZWJGcmFtZSogZnJhbWUsIGZsb2F0IHNjYWxlZmFjdG9y
LCBjb25zdCBRUG9pbnQmIG9yaWdpbikKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNj
YWxlUGFnZUJ5KFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIsIGZsb2F0IHNjYWxlZmFjdG9yLCBj
b25zdCBRUG9pbnQmIG9yaWdpbikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0g
UVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVG
cmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5w
YWdlKCkpCiAgICAgICAgIHBhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZWZhY3Rvciwgb3Jp
Z2luKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0RldmljZU9y
aWVudGF0aW9uKFFXZWJQYWdlKiBwYWdlLCBib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFs
cGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2Ft
bWEsIGRvdWJsZSBnYW1tYSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgY2FuUHJvdmlk
ZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBi
b29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogI2lmIEVOQUJMRShERVZJQ0Vf
T1JJRU5UQVRJT04pCi0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUo
cGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIERldmljZU9y
aWVudGF0aW9uQ2xpZW50TW9jayogbW9ja0NsaWVudCA9IHRvRGV2aWNlT3JpZW50YXRpb25DbGll
bnRNb2NrKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6ZnJvbShjb3JlUGFnZSktPmRldmlj
ZU9yaWVudGF0aW9uQ2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNldE9yaWVudGF0aW9uKERl
dmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblBy
b3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKSk7CiAjZW5kaWYKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2soUVdlYlBh
Z2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEdlb2xvY2F0aW9u
TW9jayhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9O
KQotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAg
IFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVudE1v
Y2sqIG1vY2tDbGllbnQgPSB0b0dlb2xvY2F0aW9uQ2xpZW50TW9jayhHZW9sb2NhdGlvbkNvbnRy
b2xsZXI6OmZyb20oY29yZVBhZ2UpLT5jbGllbnQoKSk7CiAgICAgbW9ja0NsaWVudC0+cmVzZXQo
KTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2Vv
bG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQYWdlKiBwYWdlLCBib29sIGFsbG93ZWQpCit2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQ
YWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCBhbGxvd2VkKQogewogI2lmIEVOQUJMRShHRU9MT0NB
VElPTikKLSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsK
KyAgICBQYWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGll
bnRNb2NrKiBtb2NrQ2xpZW50ID0gdG9HZW9sb2NhdGlvbkNsaWVudE1vY2soR2VvbG9jYXRpb25D
b250cm9sbGVyOjpmcm9tKGNvcmVQYWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNl
dFBlcm1pc3Npb24oYWxsb3dlZCk7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oUVdlYlBhZ2UqIHBhZ2UsIGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQordm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oUVdlYlBhZ2VB
ZGFwdGVyKiBhZGFwdGVyLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSkKIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUGFnZSogY29yZVBh
Z2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBh
ZGFwdGVyLT5wYWdlOwogICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9ja0NsaWVudCA9IHRv
R2VvbG9jYXRpb25DbGllbnRNb2NrKEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShjb3JlUGFn
ZSktPmNsaWVudCgpKTsKICAgICBtb2NrQ2xpZW50LT5zZXRQb3NpdGlvbihHZW9sb2NhdGlvblBv
c2l0aW9uOjpjcmVhdGUoY3VycmVudFRpbWUoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJh
Y3kpKTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0
IFFTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2VBZGFwdGVyKiBhZGFw
dGVyLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQogewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
LSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKyAgICBQ
YWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGllbnRNb2Nr
KiBtb2NrQ2xpZW50ID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oR2VvbG9j
YXRpb25Db250cm9sbGVyOjpmcm9tKGNvcmVQYWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGll
bnQtPnNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlKTsKICNlbmRpZgogfQogCi1p
bnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKFFXZWJQYWdlKiBwYWdlKQoraW50IER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhRV2ViUGFn
ZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFBhZ2Uq
IGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQ
YWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2tDbGll
bnQgPSB0b0dlb2xvY2F0aW9uQ2xpZW50TW9jayhHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20o
Y29yZVBhZ2UpLT5jbGllbnQoKSk7CiAgICAgcmV0dXJuIG1vY2tDbGllbnQtPm51bWJlck9mUGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cygpOwogI2Vsc2UKQEAgLTc5NCw5ICs3NzAsOSBAQCBRTWFw
PFFTdHJpbmcsIFFXZWJIaXN0b3J5SXRlbT4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdldENo
aWxkSGlzdG9yeUl0ZW1zKGNvbgogICAgIHJldHVybiBraWRzOwogfQogCi1ib29sIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShRV2ViRnJhbWUqIGZyYW1lKQorYm9vbCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2hvdWxkQ2xvc2UoUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRl
cikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZy
YW1lOwogICAgIHJldHVybiBjb3JlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRDbG9zZSgpOwogfQog
CkBAIC04MDUsNyArNzgxLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJT
Y3JpcHRXb3JsZHMoKQogICAgIG1fd29ybGRNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoUVdlYkZyYW1l
KiBmcmFtZSwgaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFt
ZUFkYXB0ZXIgKmFkYXB0ZXIsIGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7
CiAgICAgUVdlYlNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZDsKICAgICBpZiAoIXdvcmxkSUQpIHsK
QEAgLTgxNiw3ICs3OTIsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbgogICAgIH0gZWxzZQog
ICAgICAgICBzY3JpcHRXb3JsZCA9IG1fd29ybGRNYXAudmFsdWUod29ybGRJRCk7CiAKLSAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogCiAgICAg
U2NyaXB0Q29udHJvbGxlciogcHJveHkgPSBjb3JlRnJhbWUtPnNjcmlwdCgpOwogCkBAIC04MjUs
MTQgKzgwMSwxNCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbgogICAgIHByb3h5LT5leGVjdXRl
U2NyaXB0SW5Xb3JsZChzY3JpcHRXb3JsZC0+d29ybGQoKSwgc2NyaXB0LCB0cnVlKTsKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQoUVdlYlBhZ2Uq
IHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGNvbnN0
IFFTdHJpbmcmIHNvdXJjZUNvZGUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmdyb3Vw
KCkuYWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzb3Vy
Y2VDb2RlLCBRVXJsKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIFdlYkNv
cmU6OkluamVjdEluQWxsRnJhbWVzKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5ncm91cCgpLmFkZFVz
ZXJTdHlsZVNoZWV0VG9Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc291cmNlQ29kZSwg
UVVybCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBXZWJDb3JlOjpJbmpl
Y3RJbkFsbEZyYW1lcyk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92
ZVVzZXJTdHlsZVNoZWV0cyhRV2ViUGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7
Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmdyb3VwKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRz
RnJvbVdvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5n
cm91cCgpLnJlbW92ZVVzZXJTdHlsZVNoZWV0c0Zyb21Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNpbXVsYXRlRGVza3Rv
cE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRpdGxlKQpAQCAtODQyLDMxICs4MTgs
MzEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2ltdWxhdGVEZXNrdG9wTm90aWZp
Y2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGkKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKFFXZWJQYWdlKiBwYWdlLCBib29sIGZs
YWcpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKFFXZWJQ
YWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCBmbGFnKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0g
UVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRl
ci0+cGFnZTsKICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQYWdlLT5zZXREZWZlcnNM
b2FkaW5nKGZsYWcpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2so
UVdlYlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2soUVdl
YlBhZ2VBZGFwdGVyKiBhZGFwdGVyKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQ
cml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsK
ICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQYWdlLT5nb0JhY2soKTsKIH0KIAogLy8g
QVBJIENhbmRpZGF0ZT8KLVFTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc3BvbnNl
TWltZVR5cGUoUVdlYkZyYW1lKiBmcmFtZSkKK1FTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnJlc3BvbnNlTWltZVR5cGUoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcikKIHsKLSAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIgPSBjb3JlRnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpOwogICAgIHJldHVybiBkb2NMb2FkZXItPnJlc3BvbnNlTUlNRVR5cGUo
KTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIoUVdlYkZy
YW1lKiBmcmFtZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyT3BlbmVyKFFX
ZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFt
ZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBj
b3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5zZXRP
cGVuZXIoMCk7CiB9CiAKQEAgLTg3NSw0MCArODUxLDE2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmFkZFVSTFRvUmVkaXJlY3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBjb25zdCBR
U3RyCiAgICAgRnJhbWVMb2FkZXJDbGllbnRRdDo6VVJMc1RvUmVkaXJlY3Rbb3JpZ2luXSA9IGRl
c3RpbmF0aW9uOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRJbnRlcmFj
dGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGUpCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9u
RW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFBh
Z2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNv
cmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQ
YWdlLT5zZXR0aW5ncygpLT5zZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChlbmFi
bGUpOwogfQogCi0jaWZuZGVmIFFUX05PX01FTlUKLXN0YXRpYyBRU3RyaW5nTGlzdCBpdGVyYXRl
Q29udGV4dE1lbnUoUU1lbnUqIG1lbnUpCi17Ci0gICAgaWYgKCFtZW51KQotICAgICAgICByZXR1
cm4gUVN0cmluZ0xpc3QoKTsKLQotICAgIFFTdHJpbmdMaXN0IGl0ZW1zOwotICAgIFFMaXN0PFFB
Y3Rpb24gKj4gYWN0aW9ucyA9IG1lbnUtPmFjdGlvbnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFjdGlvbnMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhY3Rpb25zLmF0KGkpLT5p
c1NlcGFyYXRvcigpKQotICAgICAgICAgICAgaXRlbXMgPDwgUUxhdGluMVN0cmluZygiPHNlcGFy
YXRvcj4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXRlbXMgPDwgYWN0aW9ucy5hdChp
KS0+dGV4dCgpOwotICAgICAgICBpZiAoYWN0aW9ucy5hdChpKS0+bWVudSgpKQotICAgICAgICAg
ICAgaXRlbXMgPDwgaXRlcmF0ZUNvbnRleHRNZW51KGFjdGlvbnMuYXQoaSktPm1lbnUoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBpdGVtczsKLX0KLSNlbmRpZgotCi1RU3RyaW5nTGlzdCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Y29udGV4dE1lbnUoUVdlYlBhZ2UqIHBhZ2UpCitRU3RyaW5nTGlz
dCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29udGV4dE1lbnUoUVdlYlBhZ2VBZGFwdGVyKiBw
YWdlKQogewotI2lmbmRlZiBRVF9OT19DT05URVhUTUVOVQotICAgIHJldHVybiBpdGVyYXRlQ29u
dGV4dE1lbnUocGFnZS0+ZC0+Y3VycmVudENvbnRleHRNZW51LmRhdGEoKSk7Ci0jZWxzZQotICAg
IHJldHVybiBRU3RyaW5nTGlzdCgpOwotI2VuZGlmCisgICAgcmV0dXJuIHBhZ2UtPm1lbnVBY3Rp
b25zQXNUZXh0KCk7CiB9CiAKIGRvdWJsZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVmYXVs
dE1pbmltdW1UaW1lckludGVydmFsKCkKQEAgLTkxNiwxOCArODY4LDE4IEBAIGRvdWJsZSBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVmYXVsdE1pbmltdW1UaW1lckludGVydmFsKCkKICAgICBy
ZXR1cm4gU2V0dGluZ3M6OmRlZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CiB9CiAKLXZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFsKFFXZWJQYWdl
KiBwYWdlLCBkb3VibGUgaW50ZXJ2YWwpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRNaW5pbXVtVGltZXJJbnRlcnZhbChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGRvdWJsZSBp
bnRlcnZhbCkKIHsKLSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShw
YWdlKTsKKyAgICBQYWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgaWYgKCFjb3Jl
UGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29yZVBhZ2UtPnNldHRpbmdzKCktPnNldE1p
bkRPTVRpbWVySW50ZXJ2YWwoaW50ZXJ2YWwpOwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKFFXZWJQYWdlICpwYWdlLCBjb25z
dCBRVXJsJiB1cmwsIGNvbnN0IFFVcmwmIGZpcnN0UGFydHlVcmwpCitib29sIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKFFXZWJQYWdlQWRhcHRl
ciAqYWRhcHRlciwgY29uc3QgUVVybCYgdXJsLCBjb25zdCBRVXJsJiBmaXJzdFBhcnR5VXJsKQog
ewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAg
IFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICByZXR1cm4gdGhpcmRQYXJ0eUNv
b2tpZVBvbGljeVBlcm1pdHMoY29yZVBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bmV0d29y
a2luZ0NvbnRleHQoKSwgdXJsLCBmaXJzdFBhcnR5VXJsKTsKIH0KIApAQCAtOTM2LDEyICs4ODgs
MTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZW5hYmxlTW9ja1Njcm9sbGJhcnMo
KQogICAgIFNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQodHJ1ZSk7CiB9CiAKLVFV
cmwgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKK1FVcmwgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6Om1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFXZWJGcmFtZUFkYXB0
ZXIqIGFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKIHsKICAgICBRVXJsIHJlczsK
IAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCi0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuIHJlczsKIApAQCAtOTY3LDEwICs5MTksMTAgQEAgUVVybCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6bWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QK
IH0KIAogLy8gQVBJIENhbmRpZGF0ZT8KLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29u
c3QgUVVybCYgYmFzZVVybCwgY29uc3QgUVVybCYgZmFpbGluZ1VybCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRl
ciwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYgYmFzZVVybCwgY29uc3QgUVVybCYg
ZmFpbGluZ1VybCkKIHsKICAgICBLVVJMIGt1cmwoYmFzZVVybCk7Ci0gICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIFdlYkNv
cmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChrdXJsKTsKICAgICBjb25zdCBRQnl0ZUFycmF5IHV0ZjggPSBo
dG1sLnRvVXRmOCgpOwogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0
YSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHV0ZjguY29uc3REYXRhKCksIHV0Zjgu
bGVuZ3RoKCkpOwpAQCAtOTc4LDkgKzkzMCw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYKICAg
ICBjb3JlRnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxz
ZSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlv
bihRV2ViUGFnZSogcGFnZSwgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGNv
bnN0IGNoYXIqIHRleHQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFnZS0+aGFuZGxlKCktPnBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBhZGFwdGVyLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OTcsMTUgKzk0
OSw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihR
V2ViUGFnZSogcGFnZSwgY29uc3QgY2hhciogdGV4CiAgICAgICAgIGVkaXRvci0+aW5zZXJ0VGV4
dChTdHJpbmc6OmZyb21VVEY4KHRleHQpLCAwKTsKIH0KIAotUVN0cmluZyBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6bGF5ZXJUcmVlQXNUZXh0KFFXZWJGcmFtZSogZnJhbWUpCit2b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lQWRhcHRl
ciogYWRhcHRlcikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1l
UHJpdmF0ZTo6Y29yZShmcmFtZSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+bGF5ZXJUcmVlQXNU
ZXh0KCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFs
c09iamVjdChRV2ViRnJhbWUqIGZyYW1lKQotewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJh
bWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSog
Y29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRv
SlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9B
U1NFUlQod2luZG93KTsKIApAQCAtMTAyMiw5ICs5NjgsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiAg
ICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiB9
CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KFFX
ZWJGcmFtZSogZnJhbWUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVy
bmFsc09iamVjdChRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZy
YW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJD
b3JlOjpGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIApAQCAtMTA0MSw5ICs5ODcsOSBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNv
bnRleHQpOwogfQogCi1RSW1hZ2UgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhaW50UGFnZXNX
aXRoQm91bmRhcmllcyhRV2ViRnJhbWUqIHFmcmFtZSkKK1FJbWFnZSBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cGFpbnRQYWdlc1dpdGhCb3VuZGFyaWVzKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0
ZXIpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxZnJhbWUp
OworICAgIEZyYW1lKiBmcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIFByaW50Q29udGV4dCBw
cmludENvbnRleHQoZnJhbWUpOwogCiAgICAgUVJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCktPmZy
YW1lUmVjdCgpOwpAQCAtMTA4NCwxMTkgKzEwMzAsMjEgQEAgUUltYWdlIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpwYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMoUVdlYkZyYW1lKiBxZnJhbWUpCiAg
ICAgcmV0dXJuIGltYWdlOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRU
cmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWUqIGZyYW1lLCBib29sIGVuYWJsZSkKK3ZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZUFkYXB0
ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpLT52aWV3KCktPnNldFRyYWNrc1JlcGFpbnRzKGVuYWJsZSk7CisgICAgYWRhcHRlci0+
ZnJhbWUtPnZpZXcoKS0+c2V0VHJhY2tzUmVwYWludHMoZW5hYmxlKTsKIH0KIAotYm9vbCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6dHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lKiBmcmFtZSkK
K2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFt
ZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpLT52aWV3KCktPmlzVHJhY2tpbmdSZXBhaW50cygpOworICAgIHJldHVybiBhZGFwdGVy
LT5mcmFtZS0+dmlldygpLT5pc1RyYWNraW5nUmVwYWludHMoKTsKIH0KIAotdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Z2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWUqIGZyYW1l
LCBRVmVjdG9yPFFSZWN0PiYgcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
Z2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyLCBRVmVjdG9y
PFFSZWN0PiYgcmVzdWx0KQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7
CiAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IGNvcmVGcmFtZS0+dmlldygpLT50
cmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgcmVzdWx0LnJlc2l6ZShyZWN0cy5zaXplKCkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVjdHNbaV0pOwogfQotCi0vLyBQcm92aWRlIGEgYmFja3dhcmQgY29tcGF0
aWJpbGl0eSB3aXRoIHByZXZpb3VzbHkgZXhwb3J0ZWQgcHJpdmF0ZSBzeW1ib2xzIGFzIG9mIFF0
V2ViS2l0IDQuNiByZWxlYXNlCi0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfcmVzdW1lQWN0aXZl
RE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VY
UE9SVCBxdF9zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhmcmFtZSk7
Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X2NsZWFyRnJhbWVOYW1lKFFXZWJGcmFt
ZSogZnJhbWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyRnJhbWVOYW1l
KGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfZ2FyYmFnZUNvbGxlY3Rv
cl9jb2xsZWN0KCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2FyYmFnZUNvbGxl
Y3RvckNvbGxlY3QoKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfZ2FyYmFnZUNv
bGxlY3Rvcl9jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0
ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwotfQotCi1pbnQgUVdFQktJVF9FWFBPUlQgcXRf
ZHJ0X2phdmFTY3JpcHRPYmplY3RzQ291bnQoKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpOwotfQotCi1pbnQgUVdFQktJVF9F
WFBPUlQgcXRfZHJ0X251bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhRV2ViRnJhbWUqIGZyYW1lKQot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmlt
YXRpb25zKGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfb3ZlcndyaXRl
UGx1Z2luRGlyZWN0b3JpZXMoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpvdmVy
d3JpdGVQbHVnaW5EaXJlY3RvcmllcygpOwotfQotCi1ib29sIFFXRUJLSVRfRVhQT1JUIHF0X2Ry
dF9wYXVzZUFuaW1hdGlvbihRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQotewotICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUsIGFuaW1h
dGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Ci19Ci0KLWJvb2wgUVdFQktJVF9FWFBPUlQgcXRf
ZHJ0X3BhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0
cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyAmZWxlbWVudElk
KQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VUcmFuc2l0aW9u
T2ZQcm9wZXJ0eShmcmFtZSwgcHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQpOwotfQotCi12
b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9yZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKQot
ewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlz
dHMoKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfcnVuKGJvb2wgYikKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZChi
KTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfd2hpdGVMaXN0QWNjZXNzRnJvbU9y
aWdpbihjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0
aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucykKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2hp
dGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW4sIGRlc3RpbmF0aW9uUHJvdG9jb2ws
IGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQotCi1RU3Ry
aW5nIFFXRUJLSVRfRVhQT1JUIHF0X3dlYnBhZ2VfZ3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlKQot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZShw
YWdlKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF93ZWJwYWdlX3NldEdyb3VwTmFtZShR
V2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgZ3JvdXBOYW1lKQotewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHBhZ2UsIGdyb3VwTmFtZSk7Ci19
Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9mcmFtZV9sb2FkZXIoYm9vbCBiKQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIoYik7Ci19Ci0KLXZv
aWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9yZXNvdXJjZV9sb2FkX2NhbGxiYWNrcyhib29sIGIp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFj
a3MoYik7Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9lZGl0aW5nX2NhbGxiYWNr
cyhib29sIGIpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKGIpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2R1bXBfc2V0X2FjY2VwdHNf
ZWRpdGluZyhib29sIGIpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBTZXRB
Y2NlcHRzRWRpdGluZyhiKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCmluZGV4IGQwNjAwZmZhN2Rh
ZTQ0OWYxODEwNTIyYTljNjA5ZjgzNDIxYTYzYzkuLjMxOGFmMWIzYzJlZmU3NDY0ZDAyZGYyODMz
OTQyODM1ZTE3NGE5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNp
Zm5kZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXRfaAogI2RlZmluZSBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdF9oCiAKLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSAiLi4vQXBp
L3F3ZWJraXRnbG9iYWwuaCIKICNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZUphcj4KICNpbmNsdWRl
IDxRVmFyaWFudD4KICNpbmNsdWRlIDxRVmVjdG9yPgpAQCAtNDMsNyArNDMsOCBAQCBjbGFzcyBR
dERSVE5vZGVSdW50aW1lOwogCiBjbGFzcyBRV2ViRWxlbWVudDsKIGNsYXNzIFFXZWJGcmFtZTsK
LWNsYXNzIFFXZWJQYWdlOworY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKK2NsYXNzIFFXZWJQYWdl
QWRhcHRlcjsKIGNsYXNzIFFXZWJIaXN0b3J5SXRlbTsKIGNsYXNzIFFXZWJTY3JpcHRXb3JsZDsK
IApAQCAtODksMjQgKzkwLDIyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoKTsKIAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShRV2ViUGFn
ZSogcGFnZSwgY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOwotICAg
IHN0YXRpYyBib29sIGlzQ29tbWFuZEVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJp
bmcmIG5hbWUpOwotICAgIHN0YXRpYyBib29sIGZpbmRTdHJpbmcoUVdlYlBhZ2UqIHBhZ2UsIGNv
bnN0IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFycmF5KTsKLSAg
ICBzdGF0aWMgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2Us
IGJvb2wgZW5hYmxlZCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGVkKTsKLSAgICBzdGF0aWMgUVZh
cmlhbnRMaXN0IHNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UpOwotICAgIHN0YXRpYyBRVmFy
aWFudExpc3QgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UsIGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
KFFXZWJQYWdlKiwgY29uc3QgY2hhciogdGV4dCk7CisgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUNv
cmVDb21tYW5kQnlOYW1lKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYg
bmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGlzQ29tbWFuZEVu
YWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBuYW1lKTsKKyAg
ICBzdGF0aWMgYm9vbCBmaW5kU3RyaW5nKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3Qg
UVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpOworICAgIHN0
YXRpYyB2b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFk
YXB0ZXIsIGJvb2wgZW5hYmxlZCk7CisgICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlZCk7
CisgICAgc3RhdGljIFFWYXJpYW50TGlzdCBzZWxlY3RlZFJhbmdlKFFXZWJQYWdlQWRhcHRlciog
YWRhcHRlcik7CisgICAgc3RhdGljIFFWYXJpYW50TGlzdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCk7
CisgICAgc3RhdGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFFXZWJQYWdlQWRhcHRlciosIGNv
bnN0IGNoYXIqIHRleHQpOwogCi0gICAgc3RhdGljIGJvb2wgcGF1c2VBbmltYXRpb24oUVdlYkZy
YW1lKiwgY29uc3QgUVN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcmIGVs
ZW1lbnRJZCk7Ci0gICAgc3RhdGljIGJvb2wgcGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShRV2Vi
RnJhbWUqLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYg
ZWxlbWVudElkKTsKLSAgICBzdGF0aWMgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhRV2Vi
RnJhbWUqIGZyYW1lKTsKLSAgICBzdGF0aWMgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzKFFX
ZWJGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBib29sIHBhdXNlQW5pbWF0aW9uKFFXZWJGcmFt
ZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmlu
ZyYgZWxlbWVudElkKTsKKyAgICBzdGF0aWMgYm9vbCBwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5
KFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZSwgY29u
c3QgUVN0cmluZyYgZWxlbWVudElkKTsKIAogICAgIHN0YXRpYyB2b2lkIHNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcm
IHNjaGVtZSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChRV2Vi
UGFnZSosIGJvb2wpOwotICAgIHN0YXRpYyB2b2lkIHNldENhcmV0QnJvd3NpbmdFbmFibGVkKFFX
ZWJQYWdlKiBwYWdlLCBib29sIHZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZChRV2ViUGFnZSosIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldEZy
YW1lRmxhdHRlbmluZ0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyLCBib29sKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFk
YXB0ZXIsIGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlciwgYm9vbCk7CiAgICAgc3RhdGljIHZv
aWQgc2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZChib29sIGIpOwogCiAgICAgc3RhdGljIHZv
aWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsKQEAgLTExNSwyMCArMTE0LDIwIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVsZW1lbnQmLCBj
b25zdCBRU3RyaW5nJiB2YWx1ZSk7CiAgICAgc3RhdGljIGludCBqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50KCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXJTY3JpcHRXb3JsZHMoKTsKLSAgICBzdGF0aWMg
dm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbnQg
d29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKKyAgICBzdGF0aWMgdm9pZCBldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyLCBpbnQgd29y
bGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKIAotICAgIHN0YXRpYyB2b2lkIHdlYkluc3Bl
Y3RvckV4ZWN1dGVTY3JpcHQoUVdlYlBhZ2UqIHBhZ2UsIGxvbmcgY2FsbElkLCBjb25zdCBRU3Ry
aW5nJiBzY3JpcHQpOwotICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3RvclNob3coUVdlYlBhZ2Uq
IHBhZ2UpOwotICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3RvckNsb3NlKFFXZWJQYWdlKiBwYWdl
KTsKKyAgICBzdGF0aWMgdm9pZCB3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KFFXZWJQYWdlQWRh
cHRlciAqYWRhcHRlciwgbG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CisgICAg
c3RhdGljIHZvaWQgd2ViSW5zcGVjdG9yU2hvdyhRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIpOwor
ICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3RvckNsb3NlKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRl
cik7CiAKLSAgICBzdGF0aWMgUVN0cmluZyB3ZWJQYWdlR3JvdXBOYW1lKFFXZWJQYWdlICpwYWdl
KTsKLSAgICBzdGF0aWMgdm9pZCB3ZWJQYWdlU2V0R3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlLCBj
b25zdCBRU3RyaW5nJiBncm91cE5hbWUpOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyRnJhbWVOYW1l
KFFXZWJGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBRU3RyaW5nIHdlYlBhZ2VHcm91cE5hbWUo
UVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyKTsKKyAgICBzdGF0aWMgdm9pZCB3ZWJQYWdlU2V0R3Jv
dXBOYW1lKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgZ3JvdXBOYW1l
KTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckZyYW1lTmFtZShRV2ViRnJhbWVBZGFwdGVyICphZGFw
dGVyKTsKICAgICBzdGF0aWMgdm9pZCBvdmVyd3JpdGVQbHVnaW5EaXJlY3RvcmllcygpOwotICAg
IHN0YXRpYyBpbnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZSopOwotICAgIHN0
YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChRV2ViRnJhbWUqIGZyYW1lKTsKLSAgICBzdGF0
aWMgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdlYkZyYW1l
KiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRX
aW5kb3dzQmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihRV2ViUGFnZSopOworICAgIHN0YXRpYyBp
bnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZUFkYXB0ZXIqKTsKKyAgICBzdGF0
aWMgYm9vbCBoYXNEb2N1bWVudEVsZW1lbnQoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcik7Cisg
ICAgc3RhdGljIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFX
ZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCk7CisgICAg
c3RhdGljIHZvaWQgc2V0V2luZG93c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IoUVdlYlBhZ2VB
ZGFwdGVyKik7CiAKICAgICBzdGF0aWMgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7
CiAKQEAgLTEzNiwxMyArMTM1LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVX
aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29u
c3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRp
b25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKICAgICBzdGF0aWMgdm9p
ZCByZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKTsKIAotICAgIHN0YXRpYyB2b2lkIHNldE1v
Y2tEZXZpY2VPcmllbnRhdGlvbihRV2ViUGFnZSosIGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3Vi
bGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3Zp
ZGVHYW1tYSwgZG91YmxlIGdhbW1hKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrRGV2aWNlT3Jp
ZW50YXRpb24oUVdlYlBhZ2VBZGFwdGVyKiwgYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBh
bHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdh
bW1hLCBkb3VibGUgZ2FtbWEpOwogCi0gICAgc3RhdGljIHZvaWQgcmVzZXRHZW9sb2NhdGlvbk1v
Y2soUVdlYlBhZ2UqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNz
aW9uKFFXZWJQYWdlKiwgYm9vbCBhbGxvd2VkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbihRV2ViUGFnZSosIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2UqLCBjb25zdCBRU3RyaW5nJiBtZXNz
YWdlKTsKLSAgICBzdGF0aWMgaW50IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKFFXZWJQYWdlKik7CisgICAgc3RhdGljIHZvaWQgcmVzZXRHZW9sb2NhdGlvbk1v
Y2soUVdlYlBhZ2VBZGFwdGVyKik7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9u
UGVybWlzc2lvbihRV2ViUGFnZUFkYXB0ZXIqLCBib29sIGFsbG93ZWQpOworICAgIHN0YXRpYyB2
b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKFFXZWJQYWdlQWRhcHRlciosIGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2VB
ZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7CisgICAgc3RhdGljIGludCBudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhRV2ViUGFnZUFkYXB0ZXIqKTsK
IAogICAgIHN0YXRpYyBpbnQgd29ya2VyVGhyZWFkQ291bnQoKTsKIApAQCAtMTY4LDU0ICsxNjcs
NTIgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBTZXRBY2NlcHRzRWRpdGluZyhib29s
IGIpOwogCiAgICAgc3RhdGljIHZvaWQgZHVtcE5vdGlmaWNhdGlvbihib29sIGIpOworICAgIHN0
YXRpYyBRU3RyaW5nIHZpZXdwb3J0QXNUZXh0KFFXZWJQYWdlQWRhcHRlciosIGludCBkZXZpY2VE
UEksIGNvbnN0IFFTaXplJiBkZXZpY2VTaXplLCBjb25zdCBRU2l6ZSYgYXZhaWxhYmxlU2l6ZSk7
CiAKICAgICBzdGF0aWMgUU1hcDxRU3RyaW5nLCBRV2ViSGlzdG9yeUl0ZW0+IGdldENoaWxkSGlz
dG9yeUl0ZW1zKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwogICAgIHN0YXRp
YyBib29sIGlzVGFyZ2V0SXRlbShjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsK
ICAgICBzdGF0aWMgUVN0cmluZyBoaXN0b3J5SXRlbVRhcmdldChjb25zdCBRV2ViSGlzdG9yeUl0
ZW0mIGhpc3RvcnlJdGVtKTsKIAotICAgIHN0YXRpYyBib29sIHNob3VsZENsb3NlKFFXZWJGcmFt
ZSogZnJhbWUpOworICAgIHN0YXRpYyBib29sIHNob3VsZENsb3NlKFFXZWJGcmFtZUFkYXB0ZXIq
IGFkYXB0ZXIpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9v
bCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkVXNlclN0
eWxlU2hlZXQoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOwotICAg
IHN0YXRpYyB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0cyhRV2ViUGFnZSopOworICAgIHN0YXRp
YyB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgY29uc3Qg
UVN0cmluZyYgc291cmNlQ29kZSk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hl
ZXRzKFFXZWJQYWdlQWRhcHRlciopOwogICAgIHN0YXRpYyB2b2lkIHNpbXVsYXRlRGVza3RvcE5v
dGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgUVN0cmlu
ZyB2aWV3cG9ydEFzVGV4dChRV2ViUGFnZSosIGludCBkZXZpY2VEUEksIGNvbnN0IFFTaXplJiBk
ZXZpY2VTaXplLCBjb25zdCBRU2l6ZSYgYXZhaWxhYmxlU2l6ZSk7CiAKLSAgICBzdGF0aWMgdm9p
ZCBzY2FsZVBhZ2VCeShRV2ViRnJhbWUqLCBmbG9hdCBzY2FsZSwgY29uc3QgUVBvaW50JiBvcmln
aW4pOworICAgIHN0YXRpYyB2b2lkIHNjYWxlUGFnZUJ5KFFXZWJGcmFtZUFkYXB0ZXIqLCBmbG9h
dCBzY2FsZSwgY29uc3QgUVBvaW50JiBvcmlnaW4pOwogCi0gICAgc3RhdGljIFFTdHJpbmcgcmVz
cG9uc2VNaW1lVHlwZShRV2ViRnJhbWUqKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhck9wZW5lcihR
V2ViRnJhbWUqKTsKKyAgICBzdGF0aWMgUVN0cmluZyByZXNwb25zZU1pbWVUeXBlKFFXZWJGcmFt
ZUFkYXB0ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhck9wZW5lcihRV2ViRnJhbWVBZGFwdGVy
Kik7CiAgICAgc3RhdGljIHZvaWQgYWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmln
aW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKTsKLSAgICBzdGF0aWMgUVN0cmluZ0xpc3Qg
Y29udGV4dE1lbnUoUVdlYlBhZ2UqKTsKKyAgICBzdGF0aWMgUVN0cmluZ0xpc3QgY29udGV4dE1l
bnUoUVdlYlBhZ2VBZGFwdGVyKik7CiAKICAgICBzdGF0aWMgZG91YmxlIGRlZmF1bHRNaW5pbXVt
VGltZXJJbnRlcnZhbCgpOyAvLyBOb3QgcmVhbGx5IHRpZWQgdG8gV2ViVmlldwotICAgIHN0YXRp
YyB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKFFXZWJQYWdlKiwgZG91YmxlKTsKKyAgICBz
dGF0aWMgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChRV2ViUGFnZUFkYXB0ZXIqLCBkb3Vi
bGUpOwogCi0gICAgc3RhdGljIFFVcmwgbWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQoUVdlYkZy
YW1lKiwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRBbHRl
cm5hdGVIdG1sKFFXZWJGcmFtZSosIGNvbnN0IFFTdHJpbmcmIGh0bWwsIGNvbnN0IFFVcmwmIGJh
c2VVcmwsIGNvbnN0IFFVcmwmIGZhaWxpbmdVcmwpOworICAgIHN0YXRpYyBRVXJsIG1lZGlhQ29u
dGVudFVybEJ5RWxlbWVudElkKFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBlbGVt
ZW50SWQpOworICAgIHN0YXRpYyB2b2lkIHNldEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lQWRhcHRl
ciosIGNvbnN0IFFTdHJpbmcmIGh0bWwsIGNvbnN0IFFVcmwmIGJhc2VVcmwsIGNvbnN0IFFVcmwm
IGZhaWxpbmdVcmwpOwogCi0gICAgc3RhdGljIFFTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KFFXZWJG
cmFtZSopOwotCi0gICAgc3RhdGljIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFt
ZSopOworICAgIHN0YXRpYyB2b2lkIGluamVjdEludGVybmFsc09iamVjdChRV2ViRnJhbWVBZGFw
dGVyKik7CiAgICAgc3RhdGljIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJl
Zik7Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lKik7Cisg
ICAgc3RhdGljIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lQWRhcHRlciopOwog
ICAgIHN0YXRpYyB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChRV2ViUGFn
ZSosIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25F
bmFibGVkKFFXZWJQYWdlQWRhcHRlciosIGJvb2wpOwogCi0gICAgc3RhdGljIHZvaWQgc2V0RGVm
ZXJzTG9hZGluZyhRV2ViUGFnZSosIGJvb2wgZmxhZyk7Ci0gICAgc3RhdGljIHZvaWQgZ29CYWNr
KFFXZWJQYWdlKik7CisgICAgc3RhdGljIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhRV2ViUGFnZUFk
YXB0ZXIqLCBib29sIGZsYWcpOworICAgIHN0YXRpYyB2b2lkIGdvQmFjayhRV2ViUGFnZUFkYXB0
ZXIqKTsKIAotICAgIHN0YXRpYyBib29sIHRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MoUVdl
YlBhZ2UqLCBjb25zdCBRVXJsJiwgY29uc3QgUVVybCYgZmlyc3RQYXJ0eVVybCk7CisgICAgc3Rh
dGljIGJvb2wgdGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhRV2ViUGFnZUFkYXB0ZXIqLCBj
b25zdCBRVXJsJiwgY29uc3QgUVVybCYgZmlyc3RQYXJ0eVVybCk7CiAKICAgICBzdGF0aWMgdm9p
ZCBlbmFibGVNb2NrU2Nyb2xsYmFycygpOwogCi0gICAgc3RhdGljIFFJbWFnZSBwYWludFBhZ2Vz
V2l0aEJvdW5kYXJpZXMoUVdlYkZyYW1lKik7CisgICAgc3RhdGljIFFJbWFnZSBwYWludFBhZ2Vz
V2l0aEJvdW5kYXJpZXMoUVdlYkZyYW1lQWRhcHRlciopOwogCi0gICAgc3RhdGljIHZvaWQgc2V0
VHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lKiwgYm9vbCBlbmFibGUpOwotICAgIHN0YXRpYyBi
b29sIHRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZSopOwotICAgIHN0YXRpYyB2b2lkIGdldFRy
YWNrZWRSZXBhaW50UmVjdHMoUVdlYkZyYW1lKiwgUVZlY3RvcjxRUmVjdD4mIHJlc3VsdCk7Cisg
ICAgc3RhdGljIHZvaWQgc2V0VHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lQWRhcHRlciosIGJv
b2wgZW5hYmxlKTsKKyAgICBzdGF0aWMgYm9vbCB0cmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWVB
ZGFwdGVyKik7CisgICAgc3RhdGljIHZvaWQgZ2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJh
bWVBZGFwdGVyKiwgUVZlY3RvcjxRUmVjdD4mIHJlc3VsdCk7CiB9OwogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKaW5k
ZXggZWI3M2M5ZTlkNDU1MTZjMWM5NzdiNGIzY2I3YzA5NWNmZDVlZjVjZC4uNzE2M2ViODMyN2U3
NmI0ZmYxZmU0ZmFkYjU4ZmRmYzgxYWJhZTYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJFZGl0b3JDbGllbnRRdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJVbmRvU3RlcFF0LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTQ0LDYgKzQzLDcgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUg
IlFXZWJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgpAQCAtNTEsMTEgKzUxLDEwIEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgog
I2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAicWd1aWFwcGxpY2F0
aW9uLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAK
ICNpbmNsdWRlIDxRQ2xpcGJvYXJkPgotI2luY2x1ZGUgPFFVbmRvU3RhY2s+CisjaW5jbHVkZSA8
UUtleUV2ZW50PgorI2luY2x1ZGUgPFFLZXlTZXF1ZW5jZT4KICNpbmNsdWRlIDxzdGRpby5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtMTA0LDcgKzEwMyw3IEBAIGJvb2wgRWRpdG9y
Q2xpZW50UXQ6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkKIAogYm9vbCBFZGl0b3JD
bGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBpZiAoUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW4pCisgICAgaWYgKFFXZWJQYWdlQWRh
cHRlcjo6ZHJ0UnVuKQogICAgICAgICByZXR1cm4gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikgPT0gIm5lZWRzRGVsZXRpb25VSSI7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTk5
LDkgKzE5OCw4IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50
cygpCiB7CiAgICAgaWYgKGR1bXBFZGl0aW5nQ2FsbGJhY2tzKQogICAgICAgICBwcmludGYoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvblxuIik7Ci0gICAgbV9wYWdlLT5kLT51cGRhdGVFZGl0b3JBY3Rpb25zKCk7CiAKLSAgICBl
bWl0IG1fcGFnZS0+Y29udGVudHNDaGFuZ2VkKCk7CisgICAgZW1pdCBtX3BhZ2UtPnJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cygpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKQEAgLTIyMCw4ICsyMTgsNyBAQCB2b2lkIEVk
aXRvckNsaWVudFF0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAg
ICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+c2V0U2VsZWN0aW9uTW9kZShv
bGRTZWxlY3Rpb25Nb2RlKTsKICAgICB9CiAKLSAgICBtX3BhZ2UtPmQtPnVwZGF0ZUVkaXRvckFj
dGlvbnMoKTsKLSAgICBlbWl0IG1fcGFnZS0+c2VsZWN0aW9uQ2hhbmdlZCgpOworICAgIG1fcGFn
ZS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWUtPmVkaXRvcigp
LT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpKQogICAgICAgICBlbWl0IG1fcGFn
ZS0+bWljcm9Gb2N1c0NoYW5nZWQoKTsKIH0KQEAgLTI1MCwxMCArMjQ3LDEwIEBAIGJvb2wgRWRp
dG9yQ2xpZW50UXQ6OnNlbGVjdFdvcmRCZWZvcmVNZW51RXZlbnQoKQogdm9pZCBFZGl0b3JDbGll
bnRRdDo6cmVnaXN0ZXJVbmRvU3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+
IHN0ZXApCiB7CiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwotICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChtX2luVW5kb1JlZG8gfHwgKGZyYW1lICYmICFmcmFt
ZS0+ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpIC8qIEhBQ0shISBEb24ndCByZWNyZWF0ZSB1
bmRvcyAqLykpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3BhZ2UtPnVuZG9TdGFjaygpLT5wdXNo
KG5ldyBVbmRvU3RlcFF0KHN0ZXApKTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyVW5kb1N0ZXAoc3Rl
cCk7CiAjZW5kaWYgLy8gUVRfTk9fVU5ET1NUQUNLCiB9CiAKQEAgLTI2NCw3ICsyNjEsNyBAQCB2
b2lkIEVkaXRvckNsaWVudFF0OjpyZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpVbmRvU3RlcD4pCiB2b2lkIEVkaXRvckNsaWVudFF0OjpjbGVhclVuZG9SZWRvT3BlcmF0
aW9ucygpCiB7CiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwotICAgIHJldHVybiBtX3BhZ2UtPnVu
ZG9TdGFjaygpLT5jbGVhcigpOworICAgIHJldHVybiBtX3BhZ2UtPmNsZWFyVW5kb1N0YWNrKCk7
CiAjZW5kaWYKIH0KIApAQCAtMjgzLDcgKzI4MCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmNh
blVuZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VORE9TVEFDSwogICAgIHJldHVybiBmYWxzZTsK
ICNlbHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5kb1N0YWNrKCktPmNhblVuZG8oKTsKKyAgICBy
ZXR1cm4gbV9wYWdlLT5jYW5VbmRvKCk7CiAjZW5kaWYKIH0KIApAQCAtMjkyLDcgKzI4OSw3IEBA
IGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmNhblJlZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VORE9T
VEFDSwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5kb1N0
YWNrKCktPmNhblJlZG8oKTsKKyAgICByZXR1cm4gbV9wYWdlLT5jYW5SZWRvKCk7CiAjZW5kaWYK
IH0KIApAQCAtMzAwLDcgKzI5Nyw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVuZG8oKQogewog
I2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBtX2luVW5kb1JlZG8gPSB0cnVlOwotICAgIG1f
cGFnZS0+dW5kb1N0YWNrKCktPnVuZG8oKTsKKyAgICBtX3BhZ2UtPnVuZG8oKTsKICAgICBtX2lu
VW5kb1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpAQCAtMzA5LDcgKzMwNiw3IEBAIHZvaWQgRWRp
dG9yQ2xpZW50UXQ6OnJlZG8oKQogewogI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBtX2lu
VW5kb1JlZG8gPSB0cnVlOwotICAgIG1fcGFnZS0+dW5kb1N0YWNrKCktPnJlZG8oKTsKKyAgICBt
X3BhZ2UtPnJlZG8oKTsKICAgICBtX2luVW5kb1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpAQCAt
MzM2LDE4ICszMzMsMTggQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6cGFnZURlc3Ryb3llZCgpCiAK
IGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCiB7Ci0gICAg
cmV0dXJuIG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkOworICAgIHJldHVybiBt
X3NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9n
Z2xlU21hcnRJbnNlcnREZWxldGUoKQogewotICAgIGJvb2wgY3VycmVudCA9IG1fcGFnZS0+ZC0+
c21hcnRJbnNlcnREZWxldGVFbmFibGVkOwotICAgIG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxl
dGVFbmFibGVkID0gIWN1cnJlbnQ7CisgICAgYm9vbCBjdXJyZW50ID0gbV9zbWFydEluc2VydERl
bGV0ZUVuYWJsZWQ7CisgICAgbV9zbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSAhY3VycmVudDsK
IH0KIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5kLT5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkOworICAgIHJldHVybiBtX3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiB9
CiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkK
QEAgLTQxNiw3ICs0MTMsNyBAQCBjb25zdCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yS2V5RG93bkV2
ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2ZW50KQogCiB2b2lkIEVkaXRvckNsaWVudFF0Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEZyYW1lKiBm
cmFtZSA9IG1fcGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNDQ0LDE3ICs0NDEsMTYgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAgICAgfQogCiAjaWZuZGVmIFFU
X05PX1NIT1JUQ1VUCi0gICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gUVdlYlBh
Z2VQcml2YXRlOjplZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQoKSk7Ci0g
ICAgICAgIGlmIChhY3Rpb24gIT0gUVdlYlBhZ2U6Ok5vV2ViQWN0aW9uICYmICFkb1NwYXRpYWxO
YXZpZ2F0aW9uKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjbWQgPSBRV2ViUGFnZVByaXZh
dGU6OmVkaXRvckNvbW1hbmRGb3JXZWJBY3Rpb25zKGFjdGlvbik7CisgICAgICAgIGNvbnN0IGNo
YXIqIGNtZCA9IG1fcGFnZS0+ZWRpdG9yQ29tbWFuZEZvcktleUV2ZW50KGtldmVudC0+cXRFdmVu
dCgpKTsKKyAgICAgICAgaWYgKGNtZCAmJiAhZG9TcGF0aWFsTmF2aWdhdGlvbikgewogICAgICAg
ICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9k
ZSB0byBkZWNpZGUgaG93IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRl
ZCB2aWEgRWRpdG9yIHNob3VsZCBiZSB0cmVhdGVkLAogICAgICAgICAgICAgLy8gc28gd2UgbGVh
dmUgaXQgdXBvbiBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5n
LiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5l
cmF0ZWQKICAgICAgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFj
dGVyLCBvciBFbnRlcikuCi0gICAgICAgICAgICBpZiAoY21kICYmIGZyYW1lLT5lZGl0b3IoKS0+
Y29tbWFuZChjbWQpLmlzVGV4dEluc2VydGlvbigpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVk
aXRvcigpLT5jb21tYW5kKGNtZCkuaXNUZXh0SW5zZXJ0aW9uKCkKICAgICAgICAgICAgICAgICAm
JiBrZXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlv
bik7CisgICAgICAgICAgICBtX3BhZ2UtPnRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQt
PnF0RXZlbnQoKSk7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIApAQCAtNTAxLDcgKzQ5Nyw3IEBAIHZv
aWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZl
bnQpCiAgICAgfQogCiAgICAgLy8gTm9uIGVkaXRhYmxlIGNvbnRlbnQuCi0gICAgaWYgKG1fcGFn
ZS0+aGFuZGxlKCktPnBhZ2UtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpIHsK
KyAgICBpZiAobV9wYWdlLT5wYWdlLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgp
KSB7CiAgICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewog
ICAgICAgICBjYXNlIFZLX0xFRlQ6CiAgICAgICAgIGNhc2UgVktfUklHSFQ6CkBAIC01MTEsOSAr
NTA3LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCkKICAgICAgICAgY2FzZSBWS19FTkQ6CiAgICAgICAgICAgICB7CiAjaWZu
ZGVmIFFUX05PX1NIT1JUQ1VUCi0gICAgICAgICAgICAgICAgUVdlYlBhZ2U6OldlYkFjdGlvbiBh
Y3Rpb24gPSBRV2ViUGFnZVByaXZhdGU6OmVkaXRvckFjdGlvbkZvcktleUV2ZW50KGtldmVudC0+
cXRFdmVudCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aW9uICE9IFFXZWJQYWdlOjpO
b1dlYkFjdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlv
bik7CisgICAgICAgICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uRm9yS2V5RXZlbnQoa2V2
ZW50LT5xdEV2ZW50KCkpOwogICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTMyLDcgKzUyNiw3IEBA
IHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCiAKICNpZm5kZWYgUVRfTk9fU0hPUlRDVVQKICAgICBpZiAoa2V2ZW50LT5xdEV2ZW50
KCkgPT0gUUtleVNlcXVlbmNlOjpDb3B5KSB7Ci0gICAgICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlv
bihRV2ViUGFnZTo6Q29weSk7CisgICAgICAgIG1fcGFnZS0+dHJpZ2dlckNvcHlBY3Rpb24oKTsK
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC01NDMsOCArNTM3LDEyIEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUlucHV0
TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KikKIHsKIH0KIAotRWRpdG9yQ2xpZW50UXQ6OkVk
aXRvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpLCBtX2VkaXRp
bmcoZmFsc2UpLCBtX2luVW5kb1JlZG8oZmFsc2UpCitFZGl0b3JDbGllbnRRdDo6RWRpdG9yQ2xp
ZW50UXQoUVdlYlBhZ2VBZGFwdGVyKiBwYWdlQWRhcHRlcikKKyAgICA6IG1fcGFnZShwYWdlQWRh
cHRlcikKKyAgICAsIG1fZWRpdGluZyhmYWxzZSkKKyAgICAsIG1faW5VbmRvUmVkbyhmYWxzZSkK
KyAgICAsIG1fc21hcnRJbnNlcnREZWxldGVFbmFibGVkKHRydWUpCisgICAgLCBtX3NlbGVjdFRy
YWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTYwNywxMiArNjA1LDEy
IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkKIAogdm9p
ZCBFZGl0b3JDbGllbnRRdDo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKIHsKLSAg
ICBRV2ViUGFnZUNsaWVudCogd2ViUGFnZUNsaWVudCA9IG1fcGFnZS0+ZC0+Y2xpZW50LmdldCgp
OworICAgIFFXZWJQYWdlQ2xpZW50KiB3ZWJQYWdlQ2xpZW50ID0gbV9wYWdlLT5jbGllbnQuZGF0
YSgpOwogICAgIGlmICh3ZWJQYWdlQ2xpZW50KSB7CiAgICAgICAgIFF0OjpJbnB1dE1ldGhvZEhp
bnRzIGhpbnRzOwogCiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IDA7
Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2Ut
PnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAgICAg
aWYgKGZyYW1lICYmIGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpKQogICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKQogICAgICAgICAgICAgICAgIGlu
cHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmcmFtZS0+ZG9jdW1l
bnQoKS0+Zm9jdXNlZE5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmgKaW5kZXggODYzYzY3YjcxODdkZmQ2NTAzZjYwY2M2ZDk3NDZl
ZTEwNmVlNDIwNi4uYzQ5YmU0YTQwMzczNmVmMGFjODA2MmIzMWI5MGRlMjE4OTVkMjE5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaApA
QCAtMzYsMTIgKzM2LDEzIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogY2xhc3Mg
UVdlYlBhZ2U7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRWRpdG9yQ2xpZW50UXQgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoK
LSAgICBFZGl0b3JDbGllbnRRdChRV2ViUGFnZSogcGFnZSk7CisgICAgRWRpdG9yQ2xpZW50UXQo
UVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVXaWxsRGV0YWNoUGFnZShGcmFtZSopIHsgfQpAQCAt
MTA5LDE0ICsxMTAsMTkgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsK
IAorICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgYikgeyBtX3NtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCA9IGI7IH0KKyAgICB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQoYm9vbCBiKSB7IG1fc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZCA9IGI7IH0KKwogICAgIHN0YXRpYyBib29sIGR1bXBFZGl0aW5nQ2FsbGJhY2tzOwogICAgIHN0
YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nOwogCiBwcml2YXRlOgogICAgIFRleHRDaGVja2VyQ2xp
ZW50UXQgbV90ZXh0Q2hlY2tlckNsaWVudDsKLSAgICBRV2ViUGFnZSogbV9wYWdlOworICAgIFFX
ZWJQYWdlQWRhcHRlciogbV9wYWdlOwogICAgIGJvb2wgbV9lZGl0aW5nOwogICAgIGJvb2wgbV9p
blVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAtIGRvbid0IHJl
LWVudGVyIQorICAgIGJvb2wgbV9zbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7CisgICAgYm9vbCBt
X3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApp
bmRleCAwNzMxZDkzMTU4YTE2Zjk3MzBlODQxZTIwODE3YTg4MjJiNGU2MTQ4Li4xYTRmYTBjMjRk
N2ExMmU0YjBiNzQxYzE3ZjM1OGMyZTA4NmQwMGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKQEAgLTY3LDI0
ICs2NywyNSBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2lu
Y2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnlfcC5oIgotI2luY2x1
ZGUgInF3ZWJoaXN0b3J5aW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNs
dWRlICJxd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKKyNpbmNs
dWRlICIuLi9BcGkvcXdlYmhpc3RvcnkuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmhpc3Rvcnlf
cC5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1ZGUg
Ii4uL0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIgorCisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRB
ZGFwdGVyLmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQ
YWdlQWRhcHRlci5oIgogCiAjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxR
RGVidWc+CiAjaW5jbHVkZSA8UUZpbGVJbmZvPgotI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgot
I2luY2x1ZGUgPFFHcmFwaGljc1dpZGdldD4KICNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgogI2lu
Y2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRTW91c2VFdmVudD4KICNpbmNsdWRl
IDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTkzLDEwICs5NCwx
MCBAQCBzdGF0aWMgUU1hcDx1bnNpZ25lZCBsb25nLCBRU3RyaW5nPiBkdW1wQXNzaWduZWRVcmxz
OwogLy8gQ29tcGFyZSB3aXRoIHRoZSBmaWxlICJXZWJLaXQvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tIi4KIHN0YXRpYyBRU3RyaW5nIGRydERlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KFdlYkNvcmU6OkZyYW1lKiB3ZWJDb3JlRnJhbWUpCiB7Ci0g
ICAgUVdlYkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdCh3ZWJDb3JlRnJhbWUp
OwotICAgIFFTdHJpbmcgbmFtZSA9IGZyYW1lLT5mcmFtZU5hbWUoKTsKKyAgICBRV2ViRnJhbWVB
ZGFwdGVyKiBmcmFtZSA9IFFXZWJGcmFtZUFkYXB0ZXI6OmtpdCh3ZWJDb3JlRnJhbWUpOworICAg
IFFTdHJpbmcgbmFtZSA9IHdlYkNvcmVGcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CiAKLSAg
ICBib29sIGlzTWFpbkZyYW1lID0gZnJhbWUgPT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCk7
CisgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lID09IGZyYW1lLT5wYWdlQWRhcHRlci0+bWFp
bkZyYW1lQWRhcHRlcigpOwogICAgIGlmIChpc01haW5GcmFtZSkgewogICAgICAgICBpZiAoIW5h
bWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZyb21MYXRpbjEoIm1h
aW4gZnJhbWUgXCIlMVwiIikuYXJnKG5hbWUpOwpAQCAtMjA0LDcgKzIwNSw2IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBuYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKE5hdmlnYXRpb25UeXBlIHR5cGUpCiAK
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OkZyYW1lTG9hZGVyQ2xpZW50UXQoKQogICAgIDogbV9mcmFt
ZSgwKQotICAgICwgbV93ZWJGcmFtZSgwKQogICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBt
X2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKGZhbHNlKQogICAgICwgbV9pc09yaWdpbmF0aW5nTG9h
ZChmYWxzZSkKQEAgLTIxNiwyNCArMjE2LDI0IEBAIEZyYW1lTG9hZGVyQ2xpZW50UXQ6On5GcmFt
ZUxvYWRlckNsaWVudFF0KCkKIHsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRG
cmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBGcmFtZSogZnJhbWUpCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OnNldEZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBGcmFtZSogZnJh
bWUpCiB7CiAgICAgbV93ZWJGcmFtZSA9IHdlYkZyYW1lOwogICAgIG1fZnJhbWUgPSBmcmFtZTsK
IAotICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJGcmFtZS0+cGFnZSgpKSB7CisgICAgaWYg
KCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5wYWdlQWRhcHRlcikgewogICAgICAgICBxV2Fy
bmluZygiRnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0RnJhbWUgZnJhbWUgd2l0aG91dCBQYWdlISIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9h
ZFByb2dyZXNzKGludCkpLAotICAgICAgICAgICAgbV93ZWJGcmFtZS0+cGFnZSgpLCBTSUdOQUwo
bG9hZFByb2dyZXNzKGludCkpKTsKKyAgICAgICAgICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVy
LT5oYW5kbGUoKSwgU0lHTkFMKGxvYWRQcm9ncmVzcyhpbnQpKSk7CiAKICAgICBjb25uZWN0KHRo
aXMsIFNJR05BTCh1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSopKSwKLSAgICAgICAg
ICAgIG1fd2ViRnJhbWUtPnBhZ2UoKSwgU0lHTkFMKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29y
a1JlcGx5KikpKTsKKyAgICAgICAgICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5oYW5kbGUo
KSwgU0lHTkFMKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29ya1JlcGx5KikpKTsKIAogICAgIGNv
bm5lY3QodGhpcywgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSksCi0gICAgICAgICAgICBt
X3dlYkZyYW1lLCBTSUdOQUwodGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSk7CisgICAgICAgICAgICBt
X3dlYkZyYW1lLT5oYW5kbGUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSkpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbGxQb2xpY3lGdW5jdGlvbihGcmFtZVBvbGlj
eUZ1bmN0aW9uIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKQpAQCAtMjU5LDEzICsyNTks
MTIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9t
Q2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFu
c2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7Ci0g
ICAgQVNTRVJUKG1fd2ViRnJhbWUpOwogCi0gICAgUUJydXNoIGJydXNoID0gbV93ZWJGcmFtZS0+
cGFnZSgpLT5wYWxldHRlKCkuYnJ1c2goUVBhbGV0dGU6OkJhc2UpOworICAgIFFPYmplY3QqIHFX
ZWJQYWdlID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmhhbmRsZSgpOworICAgIFFCcnVzaCBi
cnVzaCA9IHFXZWJQYWdlLT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQYWxldHRlPigpLmJy
dXNoKFFQYWxldHRlOjpCYXNlKTsKICAgICBRQ29sb3IgYmFja2dyb3VuZENvbG9yID0gYnJ1c2gu
c3R5bGUoKSA9PSBRdDo6U29saWRQYXR0ZXJuID8gYnJ1c2guY29sb3IoKSA6IFFDb2xvcigpOwog
Ci0gICAgUVdlYlBhZ2UqIHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgY29uc3QgUVNp
emUgcHJlZmVycmVkTGF5b3V0U2l6ZSA9IHBhZ2UtPnByZWZlcnJlZENvbnRlbnRzU2l6ZSgpOwor
ICAgIGNvbnN0IFFTaXplIHByZWZlcnJlZExheW91dFNpemUgPSBxV2ViUGFnZS0+cHJvcGVydHko
InByZWZlcnJlZENvbnRlbnRzU2l6ZSIpLnRvU2l6ZSgpOwogCiAgICAgU2Nyb2xsYmFyTW9kZSBo
U2Nyb2xsYmFyID0gKFNjcm9sbGJhck1vZGUpIG1fd2ViRnJhbWUtPnNjcm9sbEJhclBvbGljeShR
dDo6SG9yaXpvbnRhbCk7CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyID0gKFNjcm9sbGJh
ck1vZGUpIG1fd2ViRnJhbWUtPnNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwpOwpAQCAtMjc1
LDcgKzI3NCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6dHJhbnNpdGlvblRvQ29tbWl0
dGVkRm9yTmV3UGFnZSgpCiAgICAgLy8gVGhlIEhpc3RvcnlDb250cm9sbGVyIHdpbGwgdXBkYXRl
IHRoZSBzY3JvbGwgcG9zaXRpb24gbGF0ZXIgaWYgbmVlZGVkLgogICAgIEludFJlY3QgY3VycmVu
dFZpc2libGVDb250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKSA/IEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV9mcmFtZS0+dmlldygpLT5maXhlZFZpc2libGVDb250ZW50UmVjdCgpLnNpemUo
KSkgOiBJbnRSZWN0KCk7CiAKLSAgICBtX2ZyYW1lLT5jcmVhdGVWaWV3KG1fd2ViRnJhbWUtPnBh
Z2UoKS0+dmlld3BvcnRTaXplKCksCisgICAgbV9mcmFtZS0+Y3JlYXRlVmlldyhxV2ViUGFnZS0+
cHJvcGVydHkoInZpZXdwb3J0U2l6ZSIpLnRvU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgYmFja2dyb3VuZENvbG9yLCAhYmFja2dyb3VuZENvbG9yLmFscGhhKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmVmZXJyZWRMYXlvdXRTaXplLmlzVmFsaWQoKSA/IEludFNpemUocHJl
ZmVycmVkTGF5b3V0U2l6ZSkgOiBJbnRTaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50VmlzaWJsZUNvbnRlbnRSZWN0LApAQCAtMjg0LDggKzI4Myw5IEBAIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRRdDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB2U2Nyb2xsYmFyLCB2TG9jayk7CiAKICAgICBib29sIGlzTWFpbkZy
YW1lID0gbV9mcmFtZSA9PSBtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpOwotICAgIGlmIChp
c01haW5GcmFtZSAmJiBwYWdlLT5kLT5jbGllbnQpIHsKLSAgICAgICAgYm9vbCByZXNpemVzVG9D
b250ZW50cyA9IHBhZ2UtPmQtPmNsaWVudC0+dmlld1Jlc2l6ZXNUb0NvbnRlbnRzRW5hYmxlZCgp
OworICAgIGlmIChpc01haW5GcmFtZSAmJm1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5jbGllbnQp
IHsKKyAgICAgICAgYm9vbCByZXNpemVzVG9Db250ZW50cyA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFw
dGVyLT5jbGllbnQtPnZpZXdSZXNpemVzVG9Db250ZW50c0VuYWJsZWQoKTsKKwogICAgICAgICBt
X2ZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHJlc2l6ZXNUb0NvbnRlbnRz
KTsKICAgICAgICAgbV9mcmFtZS0+dmlldygpLT5zZXREZWxlZ2F0ZXNTY3JvbGxpbmcocmVzaXpl
c1RvQ29udGVudHMpOwogICAgIH0KQEAgLTM5Miw4ICszOTIsOCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkKICAgICBpZiAo
IW1fd2ViRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViRnJhbWUtPmQtPmVtaXRV
cmxDaGFuZ2VkKCk7Ci0gICAgbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9u
QWN0aW9ucygpOworICAgIG1fd2ViRnJhbWUtPmVtaXRVcmxDaGFuZ2VkKCk7CisgICAgbV93ZWJG
cmFtZS0+cGFnZUFkYXB0ZXItPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiB9CiAKIApAQCAt
NDQwLDcgKzQ0MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgICAgIHJldHVybjsKICAgICBlbWl0TG9hZFN0YXJ0ZWQo
KTsKICAgICBwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKTsKLSAgICBl
bWl0IG1fd2ViRnJhbWUtPnByb3Zpc2lvbmFsTG9hZCgpOworICAgIG1fd2ViRnJhbWUtPmRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkKCk7CiB9CiAKIApAQCAtNDc4LDggKzQ3OCw4IEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKICAgICBpZiAobV9mcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKSB8fCAhbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV93ZWJGcmFtZS0+ZC0+ZW1pdFVybENoYW5nZWQoKTsKLSAgICBtX3dlYkZyYW1lLT5wYWdl
KCktPmQtPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+ZW1pdFVy
bENoYW5nZWQoKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlv
bkFjdGlvbnMoKTsKIAogICAgIC8vIFdlIHNob3VsZCBhc3N1bWUgZmlyc3QgdGhlIGZyYW1lIGhh
cyBubyB0aXRsZS4gSWYgaXQgaGFzLCB0aGVuIHRoZSBhYm92ZSBkaXNwYXRjaERpZFJlY2VpdmVU
aXRsZSgpCiAgICAgLy8gd2lsbCBiZSBjYWxsZWQgdmVyeSBzb29uIHdpdGggdGhlIGNvcnJlY3Qg
dGl0bGUuCkBAIC00OTAsNyArNDkwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNw
YXRjaERpZENvbW1pdExvYWQoKQogICAgIGlmICghaXNNYWluRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGVtaXQgbV93ZWJGcmFtZS0+cGFnZSgpLT52aWV3cG9ydENoYW5nZVJlcXVlc3Rl
ZCgpOworICAgIGVtaXQgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmVtaXRWaWV3cG9ydENoYW5n
ZVJlcXVlc3RlZCgpOwogfQogCiAKQEAgLTQ5OSw3ICs0OTksNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKICAgICBpZiAoZHVtcEZy
YW1lTG9hZGVyQ2FsbGJhY2tzKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWVcbiIsIHFQcmludGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQobV9mcmFtZSkpKTsKIAotICAgIGlmIChRV2ViUGFnZVByaXZhdGU6OmRydFJ1bikg
eworICAgIGlmIChRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1bikgewogICAgICAgICBpbnQgdW5sb2Fk
RXZlbnRDb3VudCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5wZW5kaW5nVW5s
b2FkRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgaWYgKHVubG9hZEV2ZW50Q291bnQpCiAgICAg
ICAgICAgICBwcmludGYoIiVzIC0gaGFzICV1IG9udW5sb2FkIGhhbmRsZXIocylcbiIsIHFQcmlu
dGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQobV9mcmFtZSkpLCB1bmxv
YWRFdmVudENvdW50KTsKQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKICAgICBpZiAobV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKSB8fCAhbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93
ZWJGcmFtZS0+cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2Vi
RnJhbWUtPnBhZ2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiAKQEAg
LTUyMCw3ICs1MjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkRmlu
aXNoTG9hZCgpCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3dlYkZyYW1lLT5wYWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CisgICAgbV93
ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiAgICAgZW1p
dExvYWRGaW5pc2hlZCh0cnVlKTsKIH0KIApAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3Rv
bmVzKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobWlsZXN0b25lcyAmIERpZEZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dCkKLSAgICAgICAgZW1pdCBtX3dlYkZyYW1lLT5pbml0aWFsTGF5
b3V0Q29tcGxldGVkKCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmVtaXRJbml0aWFsTGF5b3V0Q29t
cGxldGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hTaG93KCkK
QEAgLTU2MCw3ICs1NjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKQogICAgICAgICBtX2lzT3JpZ2luYXRpbmdMb2FkID0gdHJ1
ZTsKICAgICBpZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSB8fCAhbV93ZWJGcmFtZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+dXBkYXRlTmF2aWdhdGlv
bkFjdGlvbnMoKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlv
bkFjdGlvbnMoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NF
c3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQpAQCAtNTc3LDE0ICs1NzcsMTEgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiAg
ICAgLy8gU2VuZCBhIG1vdXNlbW92ZSBldmVudCB0bzoKICAgICAvLyAoMSkgdXBkYXRlIHRoZSBj
dXJzb3IgdG8gY2hhbmdlIGFjY29yZGluZyB0byB3aGF0ZXZlciBpcyB1bmRlcm5lYXRoIHRoZSBt
b3VzZSBjdXJzb3IgcmlnaHQgbm93OwogICAgIC8vICgyKSBkaXNwbGF5IHRoZSB0b29sIHRpcCBp
ZiB0aGUgbW91c2UgaG92ZXJzIGEgbm9kZSB3aGljaCBoYXMgYSB0b29sIHRpcC4KLSAgICBpZiAo
bV9mcmFtZSAmJiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKSAmJiBtX3dlYkZyYW1lLT5wYWdlKCkp
IHsKLSAgICAgICAgUVdpZGdldCogdmlldyA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+dmlldygpOwot
ICAgICAgICBpZiAodmlldyAmJiB2aWV3LT5oYXNGb2N1cygpKSB7Ci0gICAgICAgICAgICBRUG9p
bnQgbG9jYWxQb3MgPSB2aWV3LT5tYXBGcm9tR2xvYmFsKFFDdXJzb3I6OnBvcygpKTsKLSAgICAg
ICAgICAgIGlmICh2aWV3LT5yZWN0KCkuY29udGFpbnMobG9jYWxQb3MpKSB7CisgICAgaWYgKG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCkgJiYgbV93ZWJGcmFtZSkgeworICAgICAg
ICBRUG9pbnQgbG9jYWxQb3M7CisgICAgICAgIGlmIChtX3dlYkZyYW1lLT5oYW5kbGVQcm9ncmVz
c0ZpbmlzaGVkKCZsb2NhbFBvcykpIHsKICAgICAgICAgICAgICAgICBRTW91c2VFdmVudCBldmVu
dChRRXZlbnQ6Ok1vdXNlTW92ZSwgbG9jYWxQb3MsIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9u
LCBRdDo6Tm9Nb2RpZmllcik7CiAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPm1vdXNlTW92ZWQoY29udmVydE1vdXNlRXZlbnQoJmV2ZW50LCAwKSk7Ci0gICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02NTUsNyArNjUyLDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudFF0OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQogICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9u
QWN0aW9ucygpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9u
QWN0aW9ucygpOwogfQogCiAKQEAgLTY2Myw3ICs2NjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OnJlc3RvcmVWaWV3U3RhdGUoKQogewogICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGVtaXQgbV93ZWJGcmFtZS0+cGFnZSgpLT5yZXN0b3JlRnJhbWVTdGF0
ZVJlcXVlc3RlZChtX3dlYkZyYW1lKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1p
dFJlc3RvcmVGcmFtZVN0YXRlUmVxdWVzdGVkKG1fd2ViRnJhbWUpOwogfQogCiAKQEAgLTcwMSw3
ICs2OTgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnNldFRpdGxlKGNvbnN0IFN0cmlu
Z1dpdGhEaXJlY3Rpb24mIHRpdGxlLCBjb25zdCBLVVJMJgogU3RyaW5nIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKG1fd2ViRnJhbWUp
IHsKLSAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50Rm9yVXJsKHVy
bCkucmVtb3ZlKFFMYXRpbjFDaGFyKCdcbicpKS5yZW1vdmUoUUxhdGluMUNoYXIoJ1xyJykpOwor
ICAgICAgICByZXR1cm4gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPnVzZXJBZ2VudEZvclVybCh1
cmwpLnJlbW92ZShRTGF0aW4xQ2hhcignXG4nKSkucmVtb3ZlKFFMYXRpbjFDaGFyKCdccicpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtNzA5LDEyICs3MDYsMTUgQEAgU3Ry
aW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogewogICAgIGlm
IChtX3dlYkZyYW1lKQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmljb25DaGFuZ2VkKCk7Cisg
ICAgICAgIG1fd2ViRnJhbWUtPmVtaXRJY29uQ2hhbmdlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKIHsKLSAgICBkZWxldGUgbV93ZWJG
cmFtZTsKKyAgICAvLyBEZWxldGUgUVdlYkZyYW1lIChoYW5kbGUoKSksIHdoaWNoIG93bnMgUVdl
YkZyYW1lUHJpdmF0ZSwgd2hpY2gKKyAgICAvLyBfaXNfIGEgUVdlYkZyYW1lQWRhcHRlci4KKyAg
ICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgZGVsZXRlIG1fd2ViRnJhbWUtPmhhbmRsZSgpOwog
ICAgIG1fZnJhbWUgPSAwOwogICAgIG1fd2ViRnJhbWUgPSAwOwogCkBAIC03MzIsNyArNzMyLDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHcKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
d2ViRnJhbWUpCi0gICAgICAgIG1fd2ViRnJhbWUtPmQtPmRpZENsZWFyV2luZG93T2JqZWN0KCk7
CisgICAgICAgIG1fd2ViRnJhbWUtPmRpZENsZWFyV2luZG93T2JqZWN0KCk7CiB9CiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRRdDo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkKQEAgLTc0NCw3
ICs3NDQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpZFBlcmZvcm1GaXJzdE5hdmln
YXRpb24oKSBjb25zdAogewogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpIHx8ICFt
X3dlYkZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51
cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT51
cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIHNob3VsZFJlZ2lzdGVyKQpAQCAtNzYw
LDggKzc2MCw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6cmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
Om9uSWNvbkxvYWRlZEZvclBhZ2VVUkwoY29uc3QgUVN0cmluZyYgdXJsKQogewogI2lmIEVOQUJM
RShJQ09OREFUQUJBU0UpCi0gICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+dXJsKCkg
PT0gdXJsKQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmljb25DaGFuZ2VkKCk7CisgICAgaWYg
KG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+dXJsID09IHVybCkKKyAgICAgICAgbV93ZWJGcmFt
ZS0+ZW1pdEljb25DaGFuZ2VkKCk7CiAjZW5kaWYKIH0KIApAQCAtODUwLDcgKzg1MCw3IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlkRGV0ZWN0WFNTKGNvbnN0IEtVUkwmLCBib29sKQog
dm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzYXZlVmlld1N0YXRlVG9JdGVtKFdlYkNvcmU6Okhp
c3RvcnlJdGVtKiBpdGVtKQogewogICAgIFFXZWJIaXN0b3J5SXRlbSBoaXN0b3J5SXRlbShuZXcg
UVdlYkhpc3RvcnlJdGVtUHJpdmF0ZShpdGVtKSk7Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdl
KCktPnNhdmVGcmFtZVN0YXRlUmVxdWVzdGVkKG1fd2ViRnJhbWUsICZoaXN0b3J5SXRlbSk7Cisg
ICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZCht
X3dlYkZyYW1lLCAmaGlzdG9yeUl0ZW0pOwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmNhbkNhY2hlUGFnZSgpIGNvbnN0CkBAIC05OTEsOCArOTkxLDcgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFF0Ojpkb3dubG9hZChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBXZWJDb3IKICAgICBRTmV0d29ya1JlcGx5SGFuZGxlciogaGFuZGxlciA9IGhhbmRsZS0+Z2V0
SW50ZXJuYWwoKS0+bV9qb2I7CiAgICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBoYW5kbGVyLT5y
ZWxlYXNlKCk7CiAgICAgaWYgKHJlcGx5KSB7Ci0gICAgICAgIFFXZWJQYWdlKiBwYWdlID0gbV93
ZWJGcmFtZS0+cGFnZSgpOwotICAgICAgICBpZiAocGFnZS0+Zm9yd2FyZFVuc3VwcG9ydGVkQ29u
dGVudCgpKQorICAgICAgICBpZiAobV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmZvcndhcmRVbnN1
cHBvcnRlZENvbnRlbnQpCiAgICAgICAgICAgICBlbWl0IHVuc3VwcG9ydGVkQ29udGVudChyZXBs
eSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcGx5LT5hYm9ydCgpOwpAQCAtMTA0Mywx
MSArMTA0MiwxMSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoV2lsbFNlbmRS
ZXF1ZXN0KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaQogICAgIFFTdHJpbmcgaG9zdCA9
IHVybC5ob3N0KCk7CiAgICAgUVN0cmluZyB1cmxTY2hlbWUgPSB1cmwuc2NoZW1lKCkudG9Mb3dl
cigpOwogCi0gICAgaWYgKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuCisgICAgaWYgKFFXZWJQYWdl
QWRhcHRlcjo6ZHJ0UnVuCiAgICAgICAgICYmICFob3N0LmlzRW1wdHkoKQogICAgICAgICAmJiAo
dXJsU2NoZW1lID09IFFMYXRpbjFTdHJpbmcoImh0dHAiKSB8fCB1cmxTY2hlbWUgPT0gUUxhdGlu
MVN0cmluZygiaHR0cHMiKSkpIHsKIAotICAgICAgICBRVXJsIHRlc3RVUkwgPSBtX3dlYkZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLT5yZXF1ZXN0ZWRVcmwoKTsKKyAgICAgICAgUVVybCB0ZXN0
VVJMID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWVM
b2FkZXJDbGllbnQtPmxhc3RSZXF1ZXN0ZWRVcmwoKTsKICAgICAgICAgUVN0cmluZyB0ZXN0SG9z
dCA9IHRlc3RVUkwuaG9zdCgpOwogICAgICAgICBRU3RyaW5nIHRlc3RVUkxTY2hlbWUgPSB0ZXN0
VVJMLnNjaGVtZSgpLnRvTG93ZXIoKTsKIApAQCAtMTA2Myw3ICsxMDYyLDcgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciosIHVuc2kKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlbmRSZXF1ZXN0Q2xlYXJI
ZWFkZXJzLnNpemUoKTsgKytpKQogICAgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKHNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzLmF0KGkpLnRvTG9jYWw4Qml0KCkuY29uc3REYXRh
KCksIFFTdHJpbmcoKSk7CiAKLSAgICBpZiAoUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW4pIHsKKyAg
ICBpZiAoUVdlYlBhZ2VBZGFwdGVyOjpkcnRSdW4pIHsKICAgICAgICAgUU1hcDxRU3RyaW5nLCBR
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBVUkxzVG9SZWRpcmVjdC5jb25zdEZpbmQodXJs
LnRvU3RyaW5nKCkpOwogICAgICAgICBpZiAoaXQgIT0gVVJMc1RvUmVkaXJlY3QuY29uc3RFbmQo
KSkKICAgICAgICAgICAgIG5ld1JlcXVlc3Quc2V0VVJMKFFVcmwoaXQudmFsdWUoKSkpOwpAQCAt
MTEzNSwyNyArMTEzNCwxOSBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlk
TG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6OkRvY3VtZQogCiBib29sIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNhbGxFcnJvclBhZ2VFeHRlbnNpb24oY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgUVdlYlBhZ2UqIHBhZ2UgPSBtX3dlYkZyYW1lLT5w
YWdlKCk7Ci0gICAgaWYgKCFwYWdlLT5zdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6RXJyb3JQ
YWdlRXh0ZW5zaW9uKSkKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBtX3dlYkZyYW1lLT5w
YWdlQWRhcHRlcjsKKyAgICBpZiAoIXBhZ2UtPnN1cHBvcnRzRXJyb3JQYWdlRXh0ZW5zaW9uKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNp
b25PcHRpb24gb3B0aW9uOwotICAgIGlmIChlcnJvci5kb21haW4oKSA9PSAiUXROZXR3b3JrIikK
LSAgICAgICAgb3B0aW9uLmRvbWFpbiA9IFFXZWJQYWdlOjpRdE5ldHdvcms7Ci0gICAgZWxzZSBp
ZiAoZXJyb3IuZG9tYWluKCkgPT0gIkhUVFAiKQotICAgICAgICBvcHRpb24uZG9tYWluID0gUVdl
YlBhZ2U6Okh0dHA7Ci0gICAgZWxzZSBpZiAoZXJyb3IuZG9tYWluKCkgPT0gIldlYktpdCIpCi0g
ICAgICAgIG9wdGlvbi5kb21haW4gPSBRV2ViUGFnZTo6V2ViS2l0OwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCisgICAgUVdlYlBhZ2VBZGFwdGVyOjpFcnJvclBhZ2VPcHRpb24g
b3B0aW9uOwogICAgIG9wdGlvbi51cmwgPSBRVXJsKGVycm9yLmZhaWxpbmdVUkwoKSk7CiAgICAg
b3B0aW9uLmZyYW1lID0gbV93ZWJGcmFtZTsKKyAgICBvcHRpb24uZG9tYWluID0gZXJyb3IuZG9t
YWluKCk7CiAgICAgb3B0aW9uLmVycm9yID0gZXJyb3IuZXJyb3JDb2RlKCk7CiAgICAgb3B0aW9u
LmVycm9yU3RyaW5nID0gZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKTsKIAotICAgIFFXZWJQ
YWdlOjpFcnJvclBhZ2VFeHRlbnNpb25SZXR1cm4gb3V0cHV0OwotICAgIGlmICghcGFnZS0+ZXh0
ZW5zaW9uKFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24sICZvcHRpb24sICZvdXRwdXQpKQor
ICAgIFFXZWJQYWdlQWRhcHRlcjo6RXJyb3JQYWdlUmV0dXJuIG91dHB1dDsKKworICAgIGlmICgh
cGFnZS0+ZXJyb3JQYWdlRXh0ZW5zaW9uKCZvcHRpb24sICZvdXRwdXQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBLVVJMIGJhc2VVcmwob3V0cHV0LmJhc2VVcmwpOwpAQCAtMTIwMCwx
MCArMTE5MSwxMCBAQCBXZWJDb3JlOjpGcmFtZSogRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0
Y2hDcmVhdGVQYWdlKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpbwogewogICAgIGlmICghbV93ZWJG
cmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUVdlYlBhZ2UgKm5ld1BhZ2UgPSBtX3dlYkZy
YW1lLT5wYWdlKCktPmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViQnJvd3NlcldpbmRvdyk7Cisg
ICAgUVdlYlBhZ2VBZGFwdGVyICpuZXdQYWdlID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNy
ZWF0ZVdpbmRvdygvKiBtb2RhbERpYWxvZyA9ICovIGZhbHNlKTsKICAgICBpZiAoIW5ld1BhZ2Up
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBuZXdQYWdlLT5tYWluRnJhbWUoKS0+ZC0+
ZnJhbWU7CisgICAgcmV0dXJuIG5ld1BhZ2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWU7CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNw
b25zZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKQEAg
LTEyMzAsOSArMTIyMSw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jCiB7CiAgICAgUV9BU1NF
UlQobV93ZWJGcmFtZSk7CiAgICAgUU5ldHdvcmtSZXF1ZXN0IHIocmVxdWVzdC50b05ldHdvcmtS
ZXF1ZXN0KG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKSk7Ci0gICAgUVdl
YlBhZ2UqIHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7CiAKLSAgICBpZiAoIXBhZ2UtPmQtPmFj
Y2VwdE5hdmlnYXRpb25SZXF1ZXN0KDAsIHIsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZShhY3Rp
b24udHlwZSgpKSkpIHsKKyAgICBpZiAoIW1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5hY2NlcHRO
YXZpZ2F0aW9uUmVxdWVzdCgwLCByLCAoaW50KWFjdGlvbi50eXBlKCkpKSB7CiAgICAgICAgIGlm
IChhY3Rpb24udHlwZSgpID09IE5hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCB8fCBhY3Rpb24u
dHlwZSgpID09IE5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkKQogICAgICAgICAgICAgbV9m
cmFtZS0+bG9hZGVyKCktPnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsK
IApAQCAtMTI1MSw3ICsxMjQxLDYgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW4KIHsKICAgICBR
X0FTU0VSVChtX3dlYkZyYW1lKTsKICAgICBRTmV0d29ya1JlcXVlc3QgcihyZXF1ZXN0LnRvTmV0
d29ya1JlcXVlc3QobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpKTsKLSAg
ICBRV2ViUGFnZSpwYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwogICAgIFBvbGljeUFjdGlvbiBy
ZXN1bHQ7CiAKICAgICAvLyBDdXJyZW50bHksIHRoaXMgaXMgb25seSBlbmFibGVkIGJ5IERSVC4K
QEAgLTEyNjAsNyArMTI0OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuCiAgICAgICAgIGZv
ciAoY29uc3QgRXZlbnQqIGV2ZW50ID0gYWN0aW9uLmV2ZW50KCk7IGV2ZW50OyBldmVudCA9IGV2
ZW50LT51bmRlcmx5aW5nRXZlbnQoKSkgewogICAgICAgICAgICAgaWYgKGV2ZW50LT5pc01vdXNl
RXZlbnQoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQg
PSAgc3RhdGljX2Nhc3Q8Y29uc3QgTW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgICAgICAg
ICBub2RlID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtX3dlYkZyYW1lKS0+ZXZlbnRIYW5kbGVy
KCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KAorICAgICAgICAgICAgICAgIG5vZGUgPSBtX3dlYkZy
YW1lLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KAogICAgICAg
ICAgICAgICAgICAgICBtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlKS5pbm5l
ck5vblNoYXJlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTEyNzUsMTIgKzEyNjQsMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW4KICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gUG9saWN5SWdub3JlOwogCi0gICAgICAgIHBhZ2Ut
PmQtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KG1fd2ViRnJhbWUsIHIsIFFXZWJQYWdlOjpOYXZp
Z2F0aW9uVHlwZShhY3Rpb24udHlwZSgpKSk7CisgICAgICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFw
dGVyLT5hY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChtX3dlYkZyYW1lLCByLCAoaW50KWFjdGlvbi50
eXBlKCkpOwogICAgICAgICBjYWxsUG9saWN5RnVuY3Rpb24oZnVuY3Rpb24sIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXBhZ2UtPmQtPmFjY2VwdE5hdmlnYXRp
b25SZXF1ZXN0KG1fd2ViRnJhbWUsIHIsIFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZShhY3Rpb24u
dHlwZSgpKSkpIHsKKyAgICBpZiAoIW1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5hY2NlcHROYXZp
Z2F0aW9uUmVxdWVzdChtX3dlYkZyYW1lLCByLCAoaW50KWFjdGlvbi50eXBlKCkpKSB7CiAgICAg
ICAgIGlmIChhY3Rpb24udHlwZSgpID09IE5hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCB8fCBh
Y3Rpb24udHlwZSgpID09IE5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkKQogICAgICAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rp
b24oKTsKIApAQCAtMTMwNSw3ICsxMjk0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpz
dGFydERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKICAg
ICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVtaXQgbV93ZWJGcmFt
ZS0+cGFnZSgpLT5kb3dubG9hZFJlcXVlc3RlZChyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9m
cmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpKTsKKyAgICBtX3dlYkZyYW1lLT5w
YWdlQWRhcHRlci0+ZW1pdERvd25sb2FkUmVxdWVzdGVkKHJlcXVlc3QudG9OZXR3b3JrUmVxdWVz
dChtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSkpOwogfQogCiBQYXNzUmVm
UHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsCkBAIC0xMzI2LDE1ICsxMzE1LDE2IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nCiAgICAg
ZnJhbWVEYXRhLm1hcmdpbldpZHRoID0gbWFyZ2luV2lkdGg7CiAgICAgZnJhbWVEYXRhLm1hcmdp
bkhlaWdodCA9IG1hcmdpbkhlaWdodDsKIAotICAgIFFQb2ludGVyPFFXZWJGcmFtZT4gd2ViRnJh
bWUgPSBuZXcgUVdlYkZyYW1lKG1fd2ViRnJhbWUsICZmcmFtZURhdGEpOworICAgIFFXZWJGcmFt
ZUFkYXB0ZXIqIHdlYkZyYW1lID0gbV93ZWJGcmFtZS0+Y3JlYXRlRnJhbWUoJmZyYW1lRGF0YSk7
CiAgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSBydW4gYXJiaXRyYXJ5
IEphdmFTY3JpcHQgdGhhdCByZW1vdmVkIGl0IGZyb20gdGhlIHBhZ2UgYWxyZWFkeS4KLSAgICBp
ZiAoIXdlYkZyYW1lLmRhdGEoKS0+ZC0+ZnJhbWUtPnBhZ2UoKSkgeworICAgIGlmICghd2ViRnJh
bWUtPmZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgUVBvaW50ZXI8UU9iamVjdD4gcVdlYkZyYW1l
ID0gcmVpbnRlcnByZXRfY2FzdDxRT2JqZWN0Kj4od2ViRnJhbWUtPmhhbmRsZSgpKTsKICAgICAg
ICAgZnJhbWVEYXRhLmZyYW1lLnJlbGVhc2UoKTsKLSAgICAgICAgQVNTRVJUKHdlYkZyYW1lLmlz
TnVsbCgpKTsKKyAgICAgICAgQVNTRVJUKCFxV2ViRnJhbWUpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBlbWl0IG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZnJhbWVDcmVhdGVkKHdlYkZy
YW1lLmRhdGEoKSk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmVtaXRGcmFtZUNyZWF0
ZWQod2ViRnJhbWUpOwogCiAgICAgLy8gRklYTUU6IFNldCBvdmVycmlkZSBlbmNvZGluZyBpZiB3
ZSBoYXZlIG9uZS4KIApAQCAtMTQwMiw0MSArMTM5Miw0MyBAQCBjb25zdCB1bnNpZ25lZCBudW1x
U3R5bGVTaGVldFByb3BlcnRpZXMgPSBzaXplb2YocXN0eWxlU2hlZXRQcm9wZXJ0aWVzKSAvIHNp
emVvZgogY2xhc3MgUXRQbHVnaW5XaWRnZXQ6IHB1YmxpYyBXaWRnZXQKIHsKIHB1YmxpYzoKLSAg
ICBRdFBsdWdpbldpZGdldChRV2lkZ2V0KiB3ID0gMCk6IFdpZGdldCh3KSB7fQorICAgIFF0UGx1
Z2luV2lkZ2V0KFF0UGx1Z2luV2lkZ2V0QWRhcHRlciogdykKKyAgICAgICAgOiBXaWRnZXQody0+
aGFuZGxlKCkpCisgICAgICAgICwgbV9hZGFwdGVyKHcpCisgICAgeworICAgICAgICBzZXRCaW5k
aW5nT2JqZWN0KHctPmhhbmRsZSgpKTsKKyAgICB9CisKICAgICB+UXRQbHVnaW5XaWRnZXQoKQog
ICAgIHsKLSAgICAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgICAgICBwbGF0Zm9y
bVdpZGdldCgpLT5kZWxldGVMYXRlcigpOworICAgICAgICBkZWxldGUgbV9hZGFwdGVyOwogICAg
IH0KKworICAgIGlubGluZSBRdFBsdWdpbldpZGdldEFkYXB0ZXIqIHdpZGdldEFkYXB0ZXIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWRhcHRlcjsKKyAgICB9CisKICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICB7IAogICAgICAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFFXaWRnZXQq
PihwbGF0Zm9ybVdpZGdldCgpKS0+dXBkYXRlKHIpOworICAgICAgICAgICAgd2lkZ2V0QWRhcHRl
cigpLT51cGRhdGUocik7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdl
ZCgpCiAgICAgewotICAgICAgICBRV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0
Kj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgICAgIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciogd2lk
Z2V0ID0gd2lkZ2V0QWRhcHRlcigpOwogICAgICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IHdpbmRvd1JlY3QgPSBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KEludFJlY3QoMCwgMCwgZnJhbWVSZWN0KCkud2lkdGgoKSwgZnJhbWVSZWN0KCku
aGVpZ2h0KCkpKTsKLSAgICAgICAgd2lkZ2V0LT5zZXRHZW9tZXRyeSh3aW5kb3dSZWN0KTsKKyAg
ICAgICAgUVJlY3Qgd2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVj
dCgwLCAwLCBmcmFtZVJlY3QoKS53aWR0aCgpLCBmcmFtZVJlY3QoKS5oZWlnaHQoKSkpOwogCiAg
ICAgICAgIFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKTsKLSAgICAgICAg
aWYgKCFwYXJlbnRTY3JvbGxWaWV3KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFT
U0VSVChwYXJlbnRTY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKTsKLSAgICAgICAgSW50UmVjdCBj
bGlwUmVjdChzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnRTY3JvbGxWaWV3KS0+d2luZG93
Q2xpcFJlY3QoKSk7Ci0gICAgICAgIGNsaXBSZWN0Lm1vdmUoLXdpbmRvd1JlY3QueCgpLCAtd2lu
ZG93UmVjdC55KCkpOwotICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3Qod2lkZ2V0LT5yZWN0KCkp
OwotCi0gICAgICAgIFFSZWdpb24gY2xpcFJlZ2lvbiA9IFFSZWdpb24oY2xpcFJlY3QpOwotICAg
ICAgICB3aWRnZXQtPnNldE1hc2soY2xpcFJlZ2lvbik7Ci0KLSAgICAgICAgaGFuZGxlVmlzaWJp
bGl0eSgpOwotCi0gICAgICAgIHdpZGdldC0+dXBkYXRlKCk7CisgICAgICAgIFFSZWN0IGNsaXBS
ZWN0OworICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldykgeworICAgICAgICAgICAgQVNTRVJU
KHBhcmVudFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpOworICAgICAgICAgICAgY2xpcFJlY3Qg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnRTY3JvbGxWaWV3KS0+d2luZG93Q2xpcFJl
Y3QoKTsKKyAgICAgICAgICAgIGNsaXBSZWN0LnRyYW5zbGF0ZSgtd2luZG93UmVjdC54KCksIC13
aW5kb3dSZWN0LnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgd2lkZ2V0LT5zZXRHZW9tZXRyeUFu
ZENsaXAod2luZG93UmVjdCwgY2xpcFJlY3QsIGlzVmlzaWJsZSgpKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2hvdygpCkBAIC0xNDQ0LDcyICsxNDM2LDIzIEBAIHB1YmxpYzoKICAgICAg
ICAgV2lkZ2V0OjpzaG93KCk7CiAgICAgICAgIGhhbmRsZVZpc2liaWxpdHkoKTsKICAgICB9Cisg
ICAgdmlydHVhbCB2b2lkIGhpZGUoKQorICAgIHsKKyAgICAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0
KCkpCisgICAgICAgICAgICB3aWRnZXRBZGFwdGVyKCktPnNldFZpc2libGUoZmFsc2UpOworICAg
IH0KIAogcHJpdmF0ZToKKyAgICBRdFBsdWdpbldpZGdldEFkYXB0ZXIqIG1fYWRhcHRlcjsKKwog
ICAgIHZvaWQgaGFuZGxlVmlzaWJpbGl0eSgpCiAgICAgewogICAgICAgICBpZiAoIWlzVmlzaWJs
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFFXaWRnZXQqIHdpZGdldCA9IHN0
YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVdpZGdldCgpKTsKLSAgICAgICAgLy8gSWYgc2V0
TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAg
ICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsYXRmb3Jt
V2lkZ2V0LgotICAgICAgICBRUmVnaW9uIG1hc2sgPSB3aWRnZXQtPm1hc2soKTsKLSAgICAgICAg
d2lkZ2V0LT5zZXRWaXNpYmxlKCFtYXNrLmlzRW1wdHkoKSk7CisgICAgICAgIHdpZGdldEFkYXB0
ZXIoKS0+c2V0VmlzaWJsZSh0cnVlKTsKICAgICB9CiB9OwogCi0jaWYgIWRlZmluZWQoUVRfTk9f
R1JBUEhJQ1NWSUVXKQotY2xhc3MgUXRQbHVnaW5HcmFwaGljc1dpZGdldDogcHVibGljIFdpZGdl
dAotewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8UXRQbHVnaW5HcmFwaGljc1dpZGdldD4g
Y3JlYXRlKFFHcmFwaGljc1dpZGdldCogdyA9IDApCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFF0UGx1Z2luR3JhcGhpY3NXaWRnZXQodykpOwotICAgIH0KLQotICAgIH5RdFBs
dWdpbkdyYXBoaWNzV2lkZ2V0KCkKLSAgICB7Ci0gICAgICAgIGlmIChncmFwaGljc1dpZGdldCkK
LSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5kZWxldGVMYXRlcigpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKLSAgICB7Ci0gICAg
ICAgIFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGdyYXBoaWNzV2lkZ2V0ID8gZ3JhcGhpY3NXaWRn
ZXQtPnNjZW5lKCkgOiAwOwotICAgICAgICBpZiAoc2NlbmUpCi0gICAgICAgICAgICBzY2VuZS0+
dXBkYXRlKFFSZWN0KHIpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFu
Z2VkKCkKLSAgICB7Ci0gICAgICAgIGlmICghZ3JhcGhpY3NXaWRnZXQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gY29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhJbnRSZWN0KDAsIDAsIGZyYW1lUmVjdCgpLndpZHRoKCksIGZyYW1lUmVjdCgpLmhl
aWdodCgpKSk7Ci0gICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5zZXRHZW9tZXRyeShRUmVjdCh3aW5k
b3dSZWN0KSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlIGNvZGUgaGFuZGxlIGNsaXBw
aW5nIG9mIGdyYXBoaWNzIHdpZGdldHMuCi0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkK
LSAgICB7Ci0gICAgICAgIGlmIChncmFwaGljc1dpZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNz
V2lkZ2V0LT5zaG93KCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBoaWRlKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChncmFwaGljc1dpZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5o
aWRlKCk7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBRdFBsdWdpbkdyYXBoaWNzV2lkZ2V0KFFHcmFw
aGljc1dpZGdldCogdyA9IDApCi0gICAgICAgIDogV2lkZ2V0KDApCi0gICAgICAgICwgZ3JhcGhp
Y3NXaWRnZXQodykKLSAgICB7Ci0gICAgICAgIHNldEJpbmRpbmdPYmplY3QoZ3JhcGhpY3NXaWRn
ZXQpOwotICAgIH0KLQotICAgIFFHcmFwaGljc1dpZGdldCogZ3JhcGhpY3NXaWRnZXQ7Ci19Owot
I2VuZGlmIC8vIFFUX05PX0dSQVBISUNTVklFVwogCiBQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEhU
TUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKQEAgLTE1MzUsNzIgKzE0NzgsNTUgQEAgUGFzc1Jl
ZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRT
aXplJiBwbHVnaW5TaXplLAogICAgIFFTdHJpbmcgdXJsU3RyKHVybC5zdHJpbmcoKSk7CiAgICAg
UVVybCBxdXJsID0gdXJsU3RyOwogCi0gICAgUU9iamVjdCogb2JqZWN0ID0gMDsKKyAgICBRT2Jq
ZWN0KiBwbHVnaW5BZGFwdGVyID0gMDsKIAogICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRp
b24veC1xdC1wbHVnaW4iIHx8IG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXF0LXN0eWxlZC13
aWRnZXQiKSB7Ci0gICAgICAgIG9iamVjdCA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+Y3JlYXRlUGx1
Z2luKGNsYXNzaWQsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKKyAgICAgICAgcGx1Z2luQWRhcHRl
ciA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5jcmVhdGVQbHVnaW4oY2xhc3NpZCwgcXVybCwg
cGFyYW1zLCB2YWx1ZXMpOwogI2lmbmRlZiBRVF9OT19TVFlMRV9TVFlMRVNIRUVUCi0gICAgICAg
IFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ob2JqZWN0KTsKKyAgICAg
ICAgUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UXRQbHVnaW5X
aWRnZXRBZGFwdGVyKj4ocGx1Z2luQWRhcHRlcik7CiAgICAgICAgIGlmICh3aWRnZXQgJiYgbWlt
ZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtcXQtc3R5bGVkLXdpZGdldCIpIHsKIAotICAgICAgICAg
ICAgUVN0cmluZyBzdHlsZVNoZWV0ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJzdHlsZSIpOwor
ICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHlsZVNoZWV0OworICAgICAgICAgICAgc3R5bGVT
aGVldC5hcHBlbmQoZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJzdHlsZSIpKTsKICAgICAgICAgICAg
IGlmICghc3R5bGVTaGVldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc3R5bGVTaGVldCAr
PSBRTGF0aW4xQ2hhcignOycpOworICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQuYXBwZW5kKCc7
Jyk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1xU3R5bGVTaGVl
dFByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkgPSBxc3R5bGVTaGVldFByb3BlcnRpZXNbaV07CiAKLSAgICAgICAgICAgICAgICBzdHlsZVNo
ZWV0ICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KSk7Ci0g
ICAgICAgICAgICAgICAgc3R5bGVTaGVldCArPSBRTGF0aW4xQ2hhcignOicpOwotICAgICAgICAg
ICAgICAgIHN0eWxlU2hlZXQgKz0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
ZWxlbWVudCktPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpOwotICAgICAgICAgICAgICAgIHN0
eWxlU2hlZXQgKz0gUUxhdGluMUNoYXIoJzsnKTsKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0
LmFwcGVuZChnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkpKTsKKyAgICAgICAgICAgICAgICBzdHls
ZVNoZWV0LmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQuYXBwZW5kKENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZh
bHVlKHByb3BlcnR5KSk7CisgICAgICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoJzsnKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgd2lkZ2V0LT5zZXRTdHlsZVNoZWV0KHN0eWxl
U2hlZXQpOworICAgICAgICAgICAgd2lkZ2V0LT5zZXRTdHlsZVNoZWV0KHN0eWxlU2hlZXQudG9T
dHJpbmcoKSk7CiAgICAgICAgIH0KICNlbmRpZiAvLyBRVF9OT19TVFlMRV9TVFlMRVNIRUVUCiAg
ICAgfQogCi0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZh
Y3RvcnkgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnBsdWdpbkZhY3RvcnkoKTsKKyAgICBpZiAoIXBs
dWdpbkFkYXB0ZXIpIHsKKyAgICAgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dl
YkZyYW1lLT5wYWdlQWRhcHRlci0+cGx1Z2luRmFjdG9yeTsKICAgICAgICAgaWYgKGZhY3Rvcnkp
Ci0gICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWltZVR5cGUsIHF1cmwsIHBh
cmFtcywgdmFsdWVzKTsKKyAgICAgICAgICAgIHBsdWdpbkFkYXB0ZXIgPSBtX3dlYkZyYW1lLT5w
YWdlQWRhcHRlci0+YWRhcHRlckZvcldpZGdldChmYWN0b3J5LT5jcmVhdGUobWltZVR5cGUsIHF1
cmwsIHBhcmFtcywgdmFsdWVzKSk7CiAgICAgfQotCi0gICAgaWYgKG9iamVjdCkgewotICAgICAg
ICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG9iamVjdCk7CisgICAg
aWYgKHBsdWdpbkFkYXB0ZXIpIHsKKyAgICAgICAgUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiB3aWRn
ZXQgPSBxb2JqZWN0X2Nhc3Q8UXRQbHVnaW5XaWRnZXRBZGFwdGVyKj4ocGx1Z2luQWRhcHRlcik7
CiAgICAgICAgIGlmICh3aWRnZXQpIHsKLSAgICAgICAgICAgIFFXaWRnZXQqIHBhcmVudFdpZGdl
dCA9IDA7Ci0gICAgICAgICAgICBpZiAobV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5jbGllbnQpCi0g
ICAgICAgICAgICAgICAgcGFyZW50V2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPihtX3dl
YkZyYW1lLT5wYWdlKCktPmQtPmNsaWVudC0+cGx1Z2luUGFyZW50KCkpOworICAgICAgICAgICAg
UU9iamVjdCogcGFyZW50V2lkZ2V0ID0gMDsKKyAgICAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5w
YWdlQWRhcHRlci0+Y2xpZW50KQorICAgICAgICAgICAgICAgIHBhcmVudFdpZGdldCA9IG1fd2Vi
RnJhbWUtPnBhZ2VBZGFwdGVyLT5jbGllbnQtPnBsdWdpblBhcmVudCgpOwogICAgICAgICAgICAg
aWYgKHBhcmVudFdpZGdldCkgLy8gRG9uJ3QgcmVwYXJlbnQgdG8gbm90aGluZyAoaS5lLiBrZWVw
IHdoYXRldmVyIHBhcmVudCBRV2ViUGFnZTo6Y3JlYXRlUGx1Z2luKCkgY2hvc2UuCi0gICAgICAg
ICAgICAgICAgd2lkZ2V0LT5zZXRQYXJlbnQocGFyZW50V2lkZ2V0KTsKLSAgICAgICAgICAgIHdp
ZGdldC0+aGlkZSgpOwotICAgICAgICAgICAgUmVmUHRyPFF0UGx1Z2luV2lkZ2V0PiB3ID0gYWRv
cHRSZWYobmV3IFF0UGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICAgICAgdy0+c2V0UGxhdGZvcm1X
aWRnZXQod2lkZ2V0KTsKKyAgICAgICAgICAgICAgICB3aWRnZXQtPnNldFdpZGdldFBhcmVudChw
YXJlbnRXaWRnZXQpOworICAgICAgICAgICAgd2lkZ2V0LT5zZXRWaXNpYmxlKGZhbHNlKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxRdFBsdWdpbldpZGdldD4gdyA9IGFkb3B0UmVmKG5ldyBRdFBsdWdp
bldpZGdldCh3aWRnZXQpKTsKICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGludmlzaWJs
ZSB1bnRpbCBwcm9wZXJseSBwbGFjZWQgaW50byB0aGUgbGF5b3V0LgogICAgICAgICAgICAgdy0+
c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgMCwgMCkpOwogICAgICAgICAgICAgcmV0dXJuIHc7
CiAgICAgICAgIH0KIAotI2lmICFkZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKLSAgICAgICAg
UUdyYXBoaWNzV2lkZ2V0KiBncmFwaGljc1dpZGdldCA9IHFvYmplY3RfY2FzdDxRR3JhcGhpY3NX
aWRnZXQqPihvYmplY3QpOwotICAgICAgICBpZiAoZ3JhcGhpY3NXaWRnZXQpIHsKLSAgICAgICAg
ICAgIFFHcmFwaGljc09iamVjdCogcGFyZW50V2lkZ2V0ID0gMDsKLSAgICAgICAgICAgIGlmICht
X3dlYkZyYW1lLT5wYWdlKCktPmQtPmNsaWVudCkKLSAgICAgICAgICAgICAgICBwYXJlbnRXaWRn
ZXQgPSBxb2JqZWN0X2Nhc3Q8UUdyYXBoaWNzT2JqZWN0Kj4obV93ZWJGcmFtZS0+cGFnZSgpLT5k
LT5jbGllbnQtPnBsdWdpblBhcmVudCgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5o
aWRlKCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50V2lkZ2V0KSAvLyBEb24ndCByZXBhcmVudCB0
byBub3RoaW5nIChpLmUuIGtlZXAgd2hhdGV2ZXIgcGFyZW50IFFXZWJQYWdlOjpjcmVhdGVQbHVn
aW4oKSBjaG9zZS4KLSAgICAgICAgICAgICAgICBncmFwaGljc1dpZGdldC0+c2V0UGFyZW50SXRl
bShwYXJlbnRXaWRnZXQpOwotICAgICAgICAgICAgUmVmUHRyPFF0UGx1Z2luR3JhcGhpY3NXaWRn
ZXQ+IHcgPSBRdFBsdWdpbkdyYXBoaWNzV2lkZ2V0OjpjcmVhdGUoZ3JhcGhpY3NXaWRnZXQpOwot
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGl0J3MgaW52aXNpYmxlIHVudGlsIHByb3Blcmx5IHBs
YWNlZCBpbnRvIHRoZSBsYXlvdXQuCi0gICAgICAgICAgICB3LT5zZXRGcmFtZVJlY3QoSW50UmVj
dCgwLCAwLCAwLCAwKSk7Ci0gICAgICAgICAgICByZXR1cm4gdzsKLSAgICAgICAgfQotI2VuZGlm
IC8vIFFUX05PX0dSQVBISUNTVklFVwotCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaW5ncyB3
b3JrIGZvciB3aWRnZXRsZXNzIHBsdWdpbnMgYXMgd2VsbC4KLSAgICAgICAgZGVsZXRlIG9iamVj
dDsKKyAgICAgICAgZGVsZXRlIHBsdWdpbkFkYXB0ZXI7CiAgICAgfQogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIGVsc2UgeyAvLyBOUEFQSSBQbHVnaW5zCkBAIC0xNjQ1LDIz
ICsxNTcxLDI2IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudFF0OjpvdmVycmlkZU1lZGlhVHlw
ZSgpIGNvbnN0CiAKIFFTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2hvb3NlRmlsZShjb25z
dCBRU3RyaW5nJiBvbGRGaWxlKQogewotICAgIHJldHVybiBtX3dlYkZyYW1lLT5wYWdlKCktPmNo
b29zZUZpbGUobV93ZWJGcmFtZSwgb2xkRmlsZSk7CisgICAgUVN0cmluZ0xpc3QgcmVzdWx0ID0g
bV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNob29zZUZpbGVzKG1fd2ViRnJhbWUsIC8qYWxsb3dN
dWx0aSovIGZhbHNlLCAoUVN0cmluZ0xpc3QoKSA8PCBvbGRGaWxlKSk7CisgICAgcmV0dXJuIHJl
c3VsdC5pc0VtcHR5KCkgPyBRU3RyaW5nKCkgOiByZXN1bHQuZmlyc3QoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVO
ZXR3b3JraW5nQ29udGV4dCgpCiB7Ci0gICAgUVZhcmlhbnQgdmFsdWUgPSBtX3dlYkZyYW1lLT5w
YWdlKCktPnByb3BlcnR5KCJfcV9NSU1FU25pZmZpbmdEaXNhYmxlZCIpOworICAgIFFWYXJpYW50
IHZhbHVlID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmhhbmRsZSgpLT5wcm9wZXJ0eSgiX3Ff
TUlNRVNuaWZmaW5nRGlzYWJsZWQiKTsKICAgICBib29sIE1JTUVTbmlmZmluZ0Rpc2FibGVkID0g
dmFsdWUuaXNWYWxpZCgpICYmIHZhbHVlLnRvQm9vbCgpOwogCi0gICAgcmV0dXJuIEZyYW1lTmV0
d29ya2luZ0NvbnRleHRRdDo6Y3JlYXRlKG1fZnJhbWUsIG1fd2ViRnJhbWUsICFNSU1FU25pZmZp
bmdEaXNhYmxlZCwgbV93ZWJGcmFtZS0+cGFnZSgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpKTsK
KyAgICByZXR1cm4gRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0OjpjcmVhdGUobV9mcmFtZSwgbV93
ZWJGcmFtZS0+aGFuZGxlKCksICFNSU1FU25pZmZpbmdEaXNhYmxlZCk7Cit9CisKK1FXZWJGcmFt
ZUFkYXB0ZXIqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OndlYkZyYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV93ZWJGcmFtZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjplbWl0TG9h
ZFN0YXJ0ZWQoKQogewotICAgIFFXZWJQYWdlKiB3ZWJQYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgp
OwotICAgIGlmIChtX2lzT3JpZ2luYXRpbmdMb2FkICYmIHdlYlBhZ2UpCi0gICAgICAgIGVtaXQg
d2ViUGFnZS0+bG9hZFN0YXJ0ZWQoKTsKLSAgICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRTdGFydGVk
KCk7CisgICAgbV93ZWJGcmFtZS0+ZW1pdExvYWRTdGFydGVkKG1faXNPcmlnaW5hdGluZ0xvYWQp
OwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBv
aykKQEAgLTE2NzAsMTAgKzE1OTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRM
b2FkRmluaXNoZWQoYm9vbCBvaykKICAgICBjb25zdCBib29sIHdhc09yaWdpbmF0aW5nTG9hZCA9
IG1faXNPcmlnaW5hdGluZ0xvYWQ7CiAgICAgbV9pc09yaWdpbmF0aW5nTG9hZCA9IGZhbHNlOwog
Ci0gICAgUVdlYlBhZ2UqIHdlYlBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKHdh
c09yaWdpbmF0aW5nTG9hZCAmJiB3ZWJQYWdlKQotICAgICAgICBlbWl0IHdlYlBhZ2UtPmxvYWRG
aW5pc2hlZChvayk7Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5sb2FkRmluaXNoZWQob2spOworICAg
IG1fd2ViRnJhbWUtPmVtaXRMb2FkRmluaXNoZWQod2FzT3JpZ2luYXRpbmdMb2FkLCBvayk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmgKaW5kZXggMDMxMDJkZTNlMmIzYWNmYzY4NzRiMGVlOGJhMTU1MGNkYTRi
YTMyYy4uOTJmY2M4MzFkNWRiNDVkOWU2NDJkYzg3YTk5ZTBhYTVmZWMxMmY3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmgKQEAgLTMwLDEwICszMCwxMiBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVudFF0X2gKICNk
ZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorCisjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCkBAIC00OSw2ICs1MSw3IEBAIGNsYXNzIFFOZXR3b3Jr
UmVwbHk7CiBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJG
cmFtZUFkYXB0ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjUsNyArNjgsNyBAQCBz
dHJ1Y3QgTG9hZEVycm9yUmVzZXRUb2tlbjsKIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQgOiBw
dWJsaWMgUU9iamVjdCwgcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBRX09CSkVDVAog
Ci0gICAgZnJpZW5kIGNsYXNzIDo6UVdlYkZyYW1lOworICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJG
cmFtZUFkYXB0ZXI7CiAgICAgdm9pZCBjYWxsUG9saWN5RnVuY3Rpb24oRnJhbWVQb2xpY3lGdW5j
dGlvbiBmdW5jdGlvbiwgUG9saWN5QWN0aW9uIGFjdGlvbik7CiAgICAgYm9vbCBjYWxsRXJyb3JQ
YWdlRXh0ZW5zaW9uKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIApAQCAtNzksNyArODIsNyBAQCBw
dWJsaWM6CiAgICAgfkZyYW1lTG9hZGVyQ2xpZW50UXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVMb2FkZXJEZXN0cm95ZWQoKTsKIAotICAgIHZvaWQgc2V0RnJhbWUoUVdlYkZyYW1lKiB3ZWJG
cmFtZSwgRnJhbWUqIGZyYW1lKTsKKyAgICB2b2lkIHNldEZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIg
KndlYkZyYW1lLCBGcmFtZSogZnJhbWUpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXco
KSBjb25zdDsgLy8gbWFpbmx5IGZvciBhc3NlcnRpb25zCiAKQEAgLTIyNyw2ICsyMzAsOSBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBLVVJMJiBsYXN0UmVxdWVzdGVkVXJsKCkgY29uc3QgeyByZXR1
cm4gbV9sYXN0UmVxdWVzdGVkVXJsOyB9CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHZpcnR1YWwg
a2V5d29yZCBvbmNlIEZyYW1lTG9hZGVyQ2xpZW5RdCBoYXMgbW92ZWQgZnJvbSBXS1dpZGdldHMg
dG8gV0sxLgorICAgIHZpcnR1YWwgUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUoKSBjb25zdDsK
KwogICAgIHN0YXRpYyBib29sIGR1bXBGcmFtZUxvYWRlckNhbGxiYWNrczsKICAgICBzdGF0aWMg
Ym9vbCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwogICAgIHN0YXRpYyBib29sIGR1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkZXJDYWxsYmFja3M7CkBAIC0yNTEsNyArMjU3LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGVtaXRMb2FkRmluaXNoZWQoYm9vbCBvayk7CiAKICAgICBGcmFtZSAq
bV9mcmFtZTsKLSAgICBRV2ViRnJhbWUgKm1fd2ViRnJhbWU7CisgICAgUVdlYkZyYW1lQWRhcHRl
ciAqbV93ZWJGcmFtZTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAKICAgICAv
LyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5jcHAK
aW5kZXggN2U5OTYyNGI1ODM5NjMxMDRjMjA2MDY2MTZlZjlmZGVlMGUwMGZjYS4uNTczOWVjMDVh
ODhkNzc1NGZhNWRkN2FkZDVjMTA5NGIzYTRmZjQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmNw
cApAQCAtMTgsMjkgKzE4LDI2IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNs
dWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5o
IgotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNs
dWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CiAjaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+CiAj
aW5jbHVkZSA8UU5ldHdvcmtDb29raWVKYXI+CisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgi
CisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJzZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KEZy
YW1lKiBmcmFtZSwgUU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5n
RW5hYmxlZCwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcikKK0Zy
YW1lTmV0d29ya2luZ0NvbnRleHRRdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KEZyYW1lKiBm
cmFtZSwgUU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxl
ZCkKICAgICA6IEZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUpCiAgICAgLCBtX29yaWdpbmF0
aW5nT2JqZWN0KG9yaWdpbmF0aW5nT2JqZWN0KQotICAgICwgbV9uZXR3b3JrQWNjZXNzTWFuYWdl
cihuZXR3b3JrQWNjZXNzTWFuYWdlcikKICAgICAsIG1fbWltZVNuaWZmaW5nRW5hYmxlZChtaW1l
U25pZmZpbmdFbmFibGVkKQogewogfQogCi1QYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRl
eHRRdD4gRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBRT2Jq
ZWN0KiBvcmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZpbmdFbmFibGVkLCBRTmV0d29y
a0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKQorUGFzc1JlZlB0cjxGcmFtZU5l
dHdvcmtpbmdDb250ZXh0UXQ+IEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6Y3JlYXRlKEZyYW1l
KiBmcmFtZSwgUU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5h
YmxlZCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lTmV0d29ya2luZ0NvbnRleHRR
dChmcmFtZSwgb3JpZ2luYXRpbmdPYmplY3QsIG1pbWVTbmlmZmluZ0VuYWJsZWQsIG5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtpbmdD
b250ZXh0UXQoZnJhbWUsIG9yaWdpbmF0aW5nT2JqZWN0LCBtaW1lU25pZmZpbmdFbmFibGVkKSk7
CiB9CiAKIFFPYmplY3QqIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6b3JpZ2luYXRpbmdPYmpl
Y3QoKSBjb25zdApAQCAtNTAsNyArNDcsNyBAQCBRT2JqZWN0KiBGcmFtZU5ldHdvcmtpbmdDb250
ZXh0UXQ6Om9yaWdpbmF0aW5nT2JqZWN0KCkgY29uc3QKIAogUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gKHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihtX29yaWdpbmF0aW5nT2Jq
ZWN0KSktPnBhZ2UoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKKyAgICByZXR1cm4gUVdlYlBh
Z2VBZGFwdGVyOjpraXQoZnJhbWUoKS0+cGFnZSgpKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsK
IH0KIAogYm9vbCBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6Om1pbWVTbmlmZmluZ0VuYWJsZWQo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZU5ldHdvcmtpbmdDb250ZXh0UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmgKaW5kZXggYzk1ZTYzMGFjMjE0ZGRkYzlkNjg4YTkz
M2MwYzc5ZWY2OTg4NGQwYS4uYjU4YWJlNDhkOWI4YmU3ZmY5YTNhYjU2ZGQwNzAzNTA2ZjUwY2Zj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdv
cmtpbmdDb250ZXh0UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTmV0d29ya2luZ0NvbnRleHRRdC5oCkBAIC0yNiwxMCArMjYsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQgOiBwdWJsaWMgRnJhbWVO
ZXR3b3JraW5nQ29udGV4dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVO
ZXR3b3JraW5nQ29udGV4dFF0PiBjcmVhdGUoRnJhbWUqLCBRT2JqZWN0KiBvcmlnaW5hdGluZ09i
amVjdCwgYm9vbCBtaW1lU25pZmZpbmdFbmFibGVkLCBRTmV0d29ya0FjY2Vzc01hbmFnZXIqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ+IGNyZWF0ZShG
cmFtZSosIFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJs
ZWQpOwogCiBwcml2YXRlOgotICAgIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdChGcmFtZSosIFFP
YmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJsZWQsIFFOZXR3
b3JrQWNjZXNzTWFuYWdlciopOworICAgIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdChGcmFtZSos
IFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJsZWQpOwog
CiAgICAgdmlydHVhbCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0
OwpAQCAtMzcsNyArMzcsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB0aGlyZFBhcnR5
Q29va2llUG9saWN5UGVybWlzc2lvbihjb25zdCBRVXJsJikgY29uc3Q7CiAKICAgICBRT2JqZWN0
KiBtX29yaWdpbmF0aW5nT2JqZWN0OwotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbV9uZXR3
b3JrQWNjZXNzTWFuYWdlcjsKICAgICBib29sIG1fbWltZVNuaWZmaW5nRW5hYmxlZDsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZp
ZGVvUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlk
ZW9RdC5jcHAKaW5kZXggM2IyNDRjNjU3MzMyZjk4MjkwNzg2MWQ1ZTQ3NGQ4NGY3YTExNGFkMi4u
MjVlMzU3YWJhNTJkNDJlYzZhMWRlYmU3M2EyOTBlODdiOWQ0MzY0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAKQEAg
LTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAjaWYgVVNFKFFU
X01VTFRJTUVESUEpCi0jaW5jbHVkZSAiRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKICNlbmRpZgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgpAQCAtNDAsMTAgKzM5LDggQEAKICNlbmRpZgogCiAjaWYgVVNFKFFUX01VTFRJTUVESUEpCi0j
aW5jbHVkZSA8UUdyYXBoaWNzVmlkZW9JdGVtPgogI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KICNl
bmRpZgotI2luY2x1ZGUgPFFXaWRnZXQ+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTAs
NDkgKzg3LDYgQEAgdm9pZCBHU3RyZWFtZXJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVs
bFNjcmVlbigpCiB9CiAjZW5kaWYKIAotI2lmIFVTRShRVF9NVUxUSU1FRElBKQotYm9vbCBEZWZh
dWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6c19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1Bs
YXliYWNrID0gZmFsc2U7Ci0KLURlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpEZWZhdWx0
RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCi0gICAgOiBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxl
cigpCi0gICAgLCBtX2Z1bGxTY3JlZW5XaWRnZXQobmV3IEZ1bGxTY3JlZW5WaWRlb1dpZGdldCkK
LXsKLSAgICBjb25uZWN0KG1fZnVsbFNjcmVlbldpZGdldCwgU0lHTkFMKGRpZEV4aXRGdWxsU2Ny
ZWVuKCkpLCB0aGlzLCBTSUdOQUwoZnVsbFNjcmVlbkNsb3NlZCgpKSk7Ci0gICAgbV9mdWxsU2Ny
ZWVuV2lkZ2V0LT5oaWRlKCk7Ci0KLSAgICBtX2Z1bGxTY3JlZW5XaWRnZXQtPmNsb3NlKCk7Ci19
Ci0KLURlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjp+RGVmYXVsdEZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIoKQotewotICAgIGRlbGV0ZSBtX2Z1bGxTY3JlZW5XaWRnZXQ7Ci19Ci0KLWJvb2wg
RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVv
UGxheWJhY2soKSBjb25zdAotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7
Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBRQnl0ZUFycmF5IGZvcmNlRnVsbFNj
cmVlbiA9IHFnZXRlbnYoIlFUX1dFQktJVF9GT1JDRV9GVUxMU0NSRUVOX1ZJREVPIik7Ci0gICAg
ICAgIGlmICghZm9yY2VGdWxsU2NyZWVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNfc2hvdWxk
Rm9yY2VGdWxsU2NyZWVuVmlkZW9QbGF5YmFjayA9IHRydWU7Ci0KLSAgICAgICAgaW5pdGlhbGl6
ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZp
ZGVvUGxheWJhY2s7Ci19Ci0KLXZvaWQgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVu
dGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqIHBsYXllcikKLXsKLSAgICBtX2Z1bGxTY3JlZW5X
aWRnZXQtPnNob3cocGxheWVyKTsKLX0KLQotdm9pZCBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFu
ZGxlcjo6ZXhpdEZ1bGxTY3JlZW4oKQotewotICAgIG1fZnVsbFNjcmVlbldpZGdldC0+Y2xvc2Uo
KTsKLX0KLSNlbmRpZgotCiBGdWxsU2NyZWVuVmlkZW9RdDo6RnVsbFNjcmVlblZpZGVvUXQoQ2hy
b21lQ2xpZW50UXQqIGNocm9tZUNsaWVudCkKICAgICA6IG1fY2hyb21lQ2xpZW50KGNocm9tZUNs
aWVudCkKICAgICAsIG1fdmlkZW9FbGVtZW50KDApCkBAIC0xNDAsMTAgKzk0LDcgQEAgRnVsbFNj
cmVlblZpZGVvUXQ6OkZ1bGxTY3JlZW5WaWRlb1F0KENocm9tZUNsaWVudFF0KiBjaHJvbWVDbGll
bnQpCiAgICAgUV9BU1NFUlQobV9jaHJvbWVDbGllbnQpOwogCiAjaWYgVVNFKFFUX01VTFRJTUVE
SUEpCi0gICAgbV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyID0gbV9jaHJvbWVDbGllbnQtPm1fcGxh
dGZvcm1QbHVnaW4uY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpLmxlYWtQdHIoKTsKLSAg
ICBpZiAoIW1fRnVsbFNjcmVlblZpZGVvSGFuZGxlcikKLSAgICAgICAgbV9GdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyID0gbmV3IERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwotCisgICAgbV9G
dWxsU2NyZWVuVmlkZW9IYW5kbGVyID0gbV9jaHJvbWVDbGllbnQtPmNyZWF0ZUZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIoKTsKICAgICBpZiAobV9GdWxsU2NyZWVuVmlkZW9IYW5kbGVyKQogICAgICAg
ICBjb25uZWN0KG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlciwgU0lHTkFMKGZ1bGxTY3JlZW5DbG9z
ZWQoKSksIHRoaXMsIFNMT1QoYWJvdXRUb0Nsb3NlKCkpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCmluZGV4IDM0
YmM5MGMwZDhjOTNjZWE1NmRmZDA0ZmQ4MThiYTY0NWY3NDFhMTkuLmRjZTNlNWZlMWMxMGEyMGFl
ODUwOGZhMWJlY2RlOWFjYjY5MmJmMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5k
ZWYgRnVsbFNjcmVlblZpZGVvUXRfaAogI2RlZmluZSBGdWxsU2NyZWVuVmlkZW9RdF9oCiAKLSNp
bmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgiCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KIApAQCAtNjUsMjUgKzY1LDYgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYKIAotLy8g
V2UgZG8gbm90IHVzZSBFTkFCTEUgb3IgVVNFIGJlY2F1c2UgbW9jIGRvZXMgbm90IGV4cGFuZCB0
aGVzZSBtYWNyb3MuCi0jaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdURl9V
U0VfUVRfTVVMVElNRURJQQotY2xhc3MgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgOiBw
dWJsaWMgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6
Ci0gICAgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKLSAgICB2aXJ0dWFsIH5EZWZh
dWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwotICAgIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVu
Rm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0OwotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICB2b2lkIGVu
dGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKTsKLSAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7
Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgc19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRl
b1BsYXliYWNrOwotICAgIEZ1bGxTY3JlZW5WaWRlb1dpZGdldCAqbV9mdWxsU2NyZWVuV2lkZ2V0
OwotfTsKLSNlbmRpZgotCiBjbGFzcyBGdWxsU2NyZWVuVmlkZW9RdCA6IHB1YmxpYyBRT2JqZWN0
IHsKICAgICBRX09CSkVDVAogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuY3BwCmluZGV4IGJiNWUyYjlm
NjEyZjY1NTBjYmZlZDEyZmQ4M2JiM2MwN2U3NTc0NGIuLjk5OWM3YmY1NmNkNjcxYzViNjBlNDgw
YjEyN2E0NzU4ZmI1OWM3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAK
IAogc3RhdGljIGNvbnN0IGludCBnSGlkZU1vdXNlQ3Vyc29yRGVsYXkgPSAzMDAwOwogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgV2ViS2l0IHsKIAogRnVsbFNjcmVlblZpZGVvV2lk
Z2V0OjpGdWxsU2NyZWVuVmlkZW9XaWRnZXQoKQogICAgIDogUVZpZGVvV2lkZ2V0KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lk
Z2V0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dp
ZGdldC5oCmluZGV4IDdlN2Y4ZGYxYzZlMWMwMjcwMDMxODNmYjYyM2NiZTE4MDEyY2Q5ZGIuLjIw
MWNjNDlkMWU0MTJlOTg3YjZlNDFjYzUwM2RkMjJlM2Q0NzZhMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaApA
QCAtMzUsNyArMzUsNyBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFNZWRpYVBsYXllcjsK
IFFUX0VORF9OQU1FU1BBQ0UKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIEZ1bGxTY3JlZW5WaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQg
ewogICAgIFFfT0JKRUNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcAppbmRleCBiNmI0ZDcwYmQxMGE4N2M4MzE5ZmUx
OTc4Yzc2OWQxMmI2OTk5Mzg2Li4wNWE4ODI4NWMyYzZhM2VlNjQzN2I0ZTZlN2FmYmFlNGI1ZTUy
NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0
aW9uQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRRdC5jcHAKQEAgLTMzLDEwICszMyw4IEBACiAjaW5jbHVkZSAiR2VvbG9j
YXRpb25Qb3NpdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWVfcC5o
IgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgorI2luY2x1
ZGUgIlFXZWJGcmFtZUFkYXB0ZXIuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKIAog
I2luY2x1ZGUgPFF0TG9jYXRpb24vUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZT4KIApAQCAtNDQsOCAr
NDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGZhaWxlZFRv
U3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlW10gPSAiRmFpbGVkIHRvIHN0YXJ0IEdlb2xvY2F0aW9u
IHNlcnZpY2UiOwogCi1HZW9sb2NhdGlvbkNsaWVudFF0OjpHZW9sb2NhdGlvbkNsaWVudFF0KGNv
bnN0IFFXZWJQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCitHZW9sb2NhdGlvbkNsaWVu
dFF0OjpHZW9sb2NhdGlvbkNsaWVudFF0KGNvbnN0IFFXZWJQYWdlQWRhcHRlciogcGFnZSkKKyAg
ICA6IG1fd2ViUGFnZShwYWdlKQogICAgICwgbV9sYXN0UG9zaXRpb24oMCkKICAgICAsIG1fbG9j
YXRpb24oMCkKIHsKQEAgLTkwLDcgKzg4LDcgQEAgdm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0Ojpw
b3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyYgZ2VvUG9zaXRpb24pCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNBbHRp
dHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlk
ZXNTcGVlZCwgc3BlZWQpOwogCi0gICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IFFXZWJQYWdlUHJp
dmF0ZTo6Y29yZShtX3BhZ2UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2Ut
PnBhZ2U7CiAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9tKHBhZ2UpLT5wb3NpdGlvbkNo
YW5nZWQobV9sYXN0UG9zaXRpb24uZ2V0KCkpOwogfQogCkBAIC0xMDAsNyArOTgsNyBAQCB2b2lk
IEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0YXJ0VXBkYXRpbmcoKQogICAgICAgICBjb25uZWN0KG1f
bG9jYXRpb24sIFNJR05BTChwb3NpdGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9uSW5mbykpLCB0aGlz
LCBTTE9UKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRpb25JbmZvKSkpOwogCiAgICAgaWYgKCFt
X2xvY2F0aW9uKSB7Ci0gICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBRV2ViUGFnZVByaXZh
dGU6OmNvcmUobV9wYWdlKTsKKyAgICAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IG1fd2ViUGFn
ZS0+cGFnZTsKICAgICAgICAgUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+IGVycm9y
ID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKEdlb2xvY2F0aW9uRXJyb3I6OlBvc2l0aW9uVW5h
dmFpbGFibGUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKTsKICAgICAgICAgR2Vv
bG9jYXRpb25Db250cm9sbGVyOjpmcm9tKHBhZ2UpLT5lcnJvck9jY3VycmVkKGVycm9yLmdldCgp
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTI0LDE0ICsxMjIsMTQgQEAgdm9pZCBHZW9sb2NhdGlv
bkNsaWVudFF0OjpzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCkKIHZvaWQgR2VvbG9jYXRpb25D
bGllbnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewog
ICAgIEFTU0VSVChnZW9sb2NhdGlvbik7Ci0gICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJG
cmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+ZnJhbWUoKSk7CisgICAgUVdlYkZyYW1lQWRh
cHRlciogd2ViRnJhbWUgPSBRV2ViRnJhbWVBZGFwdGVyOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1l
KCkpOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKHdlYkZy
YW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6Y2FuY2Vs
UGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewogICAgIEFTU0VS
VChnZW9sb2NhdGlvbik7Ci0gICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZh
dGU6OmtpdChnZW9sb2NhdGlvbi0+ZnJhbWUoKSk7CisgICAgUVdlYkZyYW1lQWRhcHRlciogd2Vi
RnJhbWUgPSBRV2ViRnJhbWVBZGFwdGVyOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOwogICAg
IEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1l
LCBnZW9sb2NhdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKaW5kZXggMmU5NGJkZWJjMmJkNTc4ZDVmMWY0
MWZjZjZiMWIwMzMwMzgzMmFmMi4uZDNhNjNlYzAzOGRkMjE1OTQyZjQ3ZTg4NmNjOTY2Zjc5Yjhh
MDEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2Nh
dGlvbkNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudFF0LmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgUUdlb1Bvc2l0aW9uSW5m
b1NvdXJjZTsKIFFUX0VORF9OQU1FU1BBQ0UKIAogCi1jbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFX
ZWJQYWdlQWRhcHRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw3ICs0Niw3IEBA
IGNsYXNzIEdlb2xvY2F0aW9uQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIEdlb2xv
Y2F0aW9uQ2xpZW50IHsKICAgICBRX09CSkVDVAogCiBwdWJsaWM6Ci0gICAgR2VvbG9jYXRpb25D
bGllbnRRdChjb25zdCBRV2ViUGFnZSopOworICAgIEdlb2xvY2F0aW9uQ2xpZW50UXQoY29uc3Qg
UVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgdmlydHVhbCB+R2VvbG9jYXRpb25DbGllbnRRdCgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uRGVzdHJveWVkKCk7CkBAIC02Myw3ICs2Myw3
IEBAIHByaXZhdGUgUV9TTE9UUzoKICAgICB2b2lkIHBvc2l0aW9uVXBkYXRlZChjb25zdCBRR2Vv
UG9zaXRpb25JbmZvJik7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgUVdlYlBhZ2UqIG1fcGFnZTsK
KyAgICBjb25zdCBRV2ViUGFnZUFkYXB0ZXIqIG1fd2ViUGFnZTsKICAgICBSZWZQdHI8R2VvbG9j
YXRpb25Qb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247CiAgICAgUUdlb1Bvc2l0aW9uSW5mb1NvdXJj
ZSogbV9sb2NhdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwCmluZGV4
IDc1MDBlOTkzZmRiOWZmYmVlMTBhM2Y4NmEwNjhjNTNmZDgzZDg4OWYuLmEzODI0NTFkMTliMzFh
MzRiYTkwZDNmNjUyODVjMzdjYTE0MGUzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQuY3BwCkBAIC0zMyw5ICszMyw5IEBACiAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogCi0j
aW5jbHVkZSAicXdlYmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1
ZGUgInF3ZWJwYWdlLmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUg
IlFXZWJQYWdlQWRhcHRlci5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0Z2xvYmFsLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMzYgKzYwLDMwIEBAIEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKQogewogfQog
Ci12b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3Rl
bmVyKQordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0
aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBHZW9sb2Nh
dGlvbiogbGlzdGVuZXIpCiB7CiAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmluc2Vy
dCh3ZWJGcmFtZSwgbGlzdGVuZXIpOwogCi0gICAgUVdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+
cGFnZSgpOwotICAgIGVtaXQgcGFnZS0+ZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0ZWQod2ViRnJh
bWUsIFFXZWJQYWdlOjpHZW9sb2NhdGlvbik7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlID0g
UVdlYlBhZ2VBZGFwdGVyOjpraXQod2ViRnJhbWUtPmZyYW1lLT5wYWdlKCkpOworICAgIHBhZ2Ut
Pmdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RlZCh3ZWJGcmFtZSk7CiB9CiAKIAotdm9pZCBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZSogd2ViRnJhbWUsIEdlb2xvY2F0aW9uKiBsaXN0ZW5l
cikKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWVBZGFwdGVyKiB3ZWJGcmFtZSwgR2Vv
bG9jYXRpb24qIGxpc3RlbmVyKQogewogICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5y
ZW1vdmUod2ViRnJhbWUpOwogCi0gICAgUVdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgp
OwotICAgIGVtaXQgcGFnZS0+ZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQod2ViRnJh
bWUsIFFXZWJQYWdlOjpHZW9sb2NhdGlvbik7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlID0g
UVdlYlBhZ2VBZGFwdGVyOjpraXQod2ViRnJhbWUtPmZyYW1lLT5wYWdlKCkpOworICAgIHBhZ2Ut
Pmdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDYW5jZWxsZWQod2ViRnJhbWUpOwogfQogCi12
b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFt
ZSogd2ViRnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5IHBlcm1pc3Npb24pCit2b2lk
IEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZUFk
YXB0ZXIqIHdlYkZyYW1lLCBib29sIGdyYW50ZWQpCiB7ICAKICAgICBpZiAoIW1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cy5jb250YWlucyh3ZWJGcmFtZSkpIAogICAgICAgICByZXR1cm47CiAK
ICAgICBHZW9sb2NhdGlvbiogbGlzdGVuZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMu
dmFsdWUod2ViRnJhbWUpOwotCi0gICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1p
c3Npb25HcmFudGVkQnlVc2VyKQotICAgICAgICBsaXN0ZW5lci0+c2V0SXNBbGxvd2VkKHRydWUp
OwotICAgIGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWRC
eVVzZXIpCi0gICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuOworICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZ3JhbnRlZCk7CiAK
ICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKHdlYkZyYW1lKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAppbmRleCAxYjQ1NDBkODdiNjQ0Yjc2YmFjNTBjYmRj
MDkwMmYxMDdkZGNjNTdhLi43MTE4M2I0OTdmYTk3OGNjNTAwY2M1NTg3NjYxZTk3N2EwNDA5NTFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCkBAIC0zNCwxMiArMzQsMTEgQEAKICNp
ZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1
ZGUgInF3ZWJwYWdlLmgiCiAKICNpbmNsdWRlIDxRSGFzaD4KIAotY2xhc3MgUVdlYkZyYW1lOwot
Y2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgUVdlYlBhZ2VB
ZGFwdGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDEzICs0NywxMyBAQCBwdWJs
aWM6CiAgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKTsKICAgICB+R2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQoKTsKIAotICAgIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0aW9uKik7Ci0gICAgdm9pZCBjYW5j
ZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoUVdlYkZyYW1lKiwgR2VvbG9j
YXRpb24qKTsKLSAgICB2b2lkIHNldFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBl
cm1pc3Npb25Qb2xpY3kpOworICAgIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZv
ckZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqLCBHZW9sb2NhdGlvbiopOworICAgIHZvaWQgY2FuY2Vs
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqLCBH
ZW9sb2NhdGlvbiopOworICAgIHZvaWQgc2V0UGVybWlzc2lvbihRV2ViRnJhbWVBZGFwdGVyKiwg
Ym9vbCAvKmdyYW50ZWQqLyk7CiAKICAgICBzdGF0aWMgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQqIGdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpOwogcHJpdmF0ZToKLSAgICBRSGFz
aDxRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbio+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsK
KyAgICBRSGFzaDxRV2ViRnJhbWVBZGFwdGVyKiwgR2VvbG9jYXRpb24qPiBtX3BlbmRpbmdQZXJt
aXNzaW9uUmVxdWVzdHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcAppbmRleCBkNjA2NWMxNGU1YTY0MjE5Y2MxMTQ5NTBh
YzljNzZjNzJkOTU0YTE1Li45MDkzOWQ2YTI5N2ExM2NiMDk5YWNiNjg0NWZmZjFhYWY3ZGNkMjQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3Jl
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVR
dC5jcHAKQEAgLTQyLDIxICs0MiwzMyBAQAogI2luY2x1ZGUgIldlYlN5c3RlbUludGVyZmFjZS5o
IgogI2VuZGlmCiAKLSNpbmNsdWRlICJxd2ViZWxlbWVudF9wLmgiCisjaW5jbHVkZSAiLi4vQXBp
L3F3ZWJlbGVtZW50X3AuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UVN0
eWxlPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci0vLyBDYWxsZWQgYWxzbyBmcm9tIFdlYktpdDIncyBXZWJQcm9jZXNzLgotUV9ERUNMX0VYUE9S
VCB2b2lkIGluaXRpYWxpemVXZWJLaXQyVGhlbWUoKQorc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVu
Y3Rpb24gaW5pdENhbGxiYWNrID0gMDsKKwordm9pZCBzZXRXZWJLaXRXaWRnZXRzSW5pdENhbGxi
YWNrKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgaWYgKHFnZXRlbnYo
IlFUX1dFQktJVF9USEVNRV9OQU1FIikgPT0gInFzdHlsZSIpIHsKLSAgICAgICAgV2ViQ29yZTo6
UmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKFdlYktpdDo6UVN0eWxl
RmFjYWRlSW1wOjpjcmVhdGUpOworICAgIGluaXRDYWxsYmFjayA9IGNhbGxiYWNrOworfQorCisv
LyBDYWxsZWQgYWxzbyBmcm9tIFdlYktpdDIncyBXZWJQcm9jZXNzCitRX0RFQ0xfRVhQT1JUIHZv
aWQgaW5pdGlhbGl6ZVdlYktpdFF0KCkKK3sKKyAgICBpZiAoaW5pdENhbGxiYWNrKSB7CisgICAg
ICAgIFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRTdHlsZUZhY3RvcnlGdW5jdGlvbihp
bml0Q2FsbGJhY2spOwogICAgICAgICBXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRDdXN0b21U
aGVtZShXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlLCBuZXcgV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVRU3R5bGUpOwogICAgIH0KKworICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJD
b3JlUXQoKTsKK30KKworUV9ERUNMX0VYUE9SVCB2b2lkIHNldEltYWdlUGxhdGZvcm1SZXNvdXJj
ZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBRUGl4bWFwJiBwaXhtYXApCit7CisgICAgV2ViQ29y
ZTo6SW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UobmFtZSwgcGl4bWFwKTsKIH0KIAogfQpAQCAt
NzksMTggKzkxLDEwIEBAIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAgICAgUGxhdGZvcm1T
dHJhdGVnaWVzUXQ6OmluaXRpYWxpemUoKTsKICAgICBRdFdlYkVsZW1lbnRSdW50aW1lOjppbml0
aWFsaXplKCk7CiAKLSAgICBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rp
b24oV2ViS2l0OjpRU3R5bGVGYWNhZGVJbXA6OmNyZWF0ZSk7Ci0gICAgUmVuZGVyVGhlbWVRdDo6
c2V0Q3VzdG9tVGhlbWUoUmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZSwgbmV3IFNjcm9sbGJhclRo
ZW1lUVN0eWxlKTsKLQogI2lmIFVTRShRVEtJVCkKICAgICBJbml0V2ViQ29yZVN5c3RlbUludGVy
ZmFjZSgpOwogI2VuZGlmCiAKLSAgICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRv
bkdyYXBoaWMKLSAgICBJbWFnZTo6c2V0UGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0
dG9uIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0Rp
YWxvZ0Nsb3NlQnV0dG9uKSk7Ci0gICAgLy8gUVdlYlNldHRpbmdzOjpTZWFyY2hDYW5jZWxCdXR0
b25QcmVzc2VkR3JhcGhpYwotICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hD
YW5jZWxCdXR0b25QcmVzc2VkIiwgUUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1h
cChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKSk7Ci0KICAgICBpbml0aWFsaXplZCA9IHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5p
dFdlYkNvcmVRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29y
ZVF0LmgKaW5kZXggZGYxYWFmNzc2MjcxZmZiNzhhZjAyMDc0MzNkY2JiYTVmNzRkOGJkYy4uZTg0
ZTBkYWQyZWQ1NTFiOWVjYzgyNjllZDg4YTU5OWRlMWJmNzhhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmgKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmgKQEAgLTMwLDYgKzMwLDIyIEBA
CiAjaWZuZGVmIEluaXRXZWJDb3JlUXRfaAogI2RlZmluZSBJbml0V2ViQ29yZVF0X2gKIAorI2lu
Y2x1ZGUgInFpbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOworY2xh
c3MgUVN0eWxlRmFjYWRlOworfQordHlwZWRlZiBXZWJDb3JlOjpRU3R5bGVGYWNhZGUqICgqUXRT
dHlsZUZhY3RvcnlGdW5jdGlvbikoV2ViQ29yZTo6UGFnZSopOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBzZXRXZWJLaXRXaWRnZXRzSW5pdENhbGxiYWNrKFF0U3R5bGVGYWN0b3J5RnVu
Y3Rpb24pOwordm9pZCBpbml0aWFsaXplV2ViS2l0UXQoKTsKK3ZvaWQgc2V0SW1hZ2VQbGF0Zm9y
bVJlc291cmNlKGNvbnN0IGNoYXIqIC8qIG5hbWUgKi8sIGNvbnN0IFFQaXhtYXAmKTsKKworfQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYxMTZjNjcwZTdjZjA4ZDljZjIwNjg2NGQxYjEzYjA5NjIxYTA4NDkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJLaXRRdC5j
cHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMg
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworCisjaW5jbHVkZSAiSW5pdFdlYktpdFF0
LmgiCisjaW5jbHVkZSAiSW5pdFdlYkNvcmVRdC5oIgorCisjaW5jbHVkZSAiUVN0eWxlRmFjYWRl
SW1wLmgiCisKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UVN0eWxlPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworUV9ERUNMX0VYUE9SVCB2b2lkIGluaXRpYWxpemVXZWJLaXRX
aWRnZXRzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlm
IChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0V2ViS2l0V2lkZ2V0c0lu
aXRDYWxsYmFjayhRU3R5bGVGYWNhZGVJbXA6OmNyZWF0ZSk7CisgICAgaW5pdGlhbGl6ZVdlYktp
dFF0KCk7CisKKyAgICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRvbkdyYXBoaWMK
KyAgICBzZXRJbWFnZVBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvbiIsIFFBcHBs
aWNhdGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1
dHRvbikpOworICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZEdy
YXBoaWMKKyAgICBzZXRJbWFnZVBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvblBy
ZXNzZWQiLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFwKFFTdHlsZTo6U1Bf
RGlhbG9nQ2xvc2VCdXR0b24pKTsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQu
aCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjJmNTcxMWE4MTM4MTFmMjcxYTY4NzdlNmI1MWRiZGQwYTE4NTE5NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmgK
QEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBJbml0V2ViS2l0UXRfaAorI2Rl
ZmluZSBJbml0V2ViS2l0UXRfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBpbml0aWFs
aXplV2ViS2l0V2lkZ2V0cygpOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKaW5kZXggMDI1YWQ2NTlk
YTAzMmEzMjhjNjFhYzZlZjQ5MTQ4MDQwMDM4OThmYy4uYTgwOWIyZjY1M2QxZGE3NjRiMzBjYjU3
MDJlZTRiNWJlYWI5YzNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKQEAgLTM4LDYyICszOCwyMiBAQAogI2luY2x1
ZGUgIkluc3BlY3RvclNlcnZlclF0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUg
IlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCi0jaW5j
bHVkZSAicXdlYmluc3BlY3Rvci5oIgotI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3JfcC5oIgotI2lu
Y2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInF3
ZWJ2aWV3LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPFF0Q29y
ZS9RQ29yZUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFF0Q29yZS9RRmlsZT4KLSNpbmNsdWRlIDxR
dENvcmUvUVNldHRpbmdzPgotI2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFudD4KKyNpbmNsdWRlIDxR
Q29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVx
dWVzdD4KKyNpbmNsdWRlIDxRU2V0dGluZ3M+CisjaW5jbHVkZSA8UVVybD4KKyNpbmNsdWRlIDxR
VmFyaWFudD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgUUxhdGluMVN0
cmluZyBzZXR0aW5nU3RvcmFnZVByZWZpeCgiUXQvUXRXZWJLaXQvUVdlYkluc3BlY3Rvci8iKTsK
IHN0YXRpYyBjb25zdCBRTGF0aW4xU3RyaW5nIHNldHRpbmdTdG9yYWdlVHlwZVN1ZmZpeCgiLnR5
cGUiKTsKIAotY2xhc3MgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZSB7
Ci0gICAgUV9PQkpFQ1QKLSAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7Ci1wdWJs
aWM6Ci0gICAgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQgPSAwKQotICAg
ICAgICA6IFFXZWJQYWdlKHBhcmVudCkKLSAgICB7Ci0gICAgICAgIGNvbm5lY3QobWFpbkZyYW1l
KCksIFNJR05BTChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSwgU0xPVChqYXZhU2Ny
aXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSk7Ci0gICAgfQotCi0gICAgUVdlYlBhZ2UqIGNyZWF0
ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSkKLSAgICB7Ci0gICAgICAgIFFXZWJWaWV3
KiB2aWV3ID0gbmV3IFFXZWJWaWV3OwotICAgICAgICBRV2ViUGFnZSogcGFnZSA9IG5ldyBRV2Vi
UGFnZTsKLSAgICAgICAgdmlldy0+c2V0UGFnZShwYWdlKTsKLSAgICAgICAgdmlldy0+c2V0QXR0
cmlidXRlKFF0OjpXQV9EZWxldGVPbkNsb3NlKTsKLSAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAg
fQotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICB2b2lkIGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVh
cmVkKCkgCi0gICAgewotI2lmbmRlZiBRVF9OT19QUk9QRVJUSUVTCi0gICAgICAgIFFWYXJpYW50
IGluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzID0gcHJvcGVydHkoIl9xX2luc3BlY3Rv
ckphdmFTY3JpcHRXaW5kb3dPYmplY3RzIik7Ci0gICAgICAgIGlmICghaW5zcGVjdG9ySmF2YVNj
cmlwdFdpbmRvd09iamVjdHMuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBRTWFwPFFTdHJpbmcsIFFWYXJpYW50PiBqYXZhU2NyaXB0TmFtZU9iamVjdE1hcCA9IGluc3Bl
Y3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzLnRvTWFwKCk7Ci0gICAgICAgIFFXZWJGcmFtZSog
ZnJhbWUgPSBtYWluRnJhbWUoKTsKLSAgICAgICAgUU1hcDxRU3RyaW5nLCBRVmFyaWFudD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gamF2YVNjcmlwdE5hbWVPYmplY3RNYXAuY29uc3RCZWdpbigpOwot
ICAgICAgICBmb3IgKCA7IGl0ICE9IGphdmFTY3JpcHROYW1lT2JqZWN0TWFwLmNvbnN0RW5kKCk7
ICsraXQpIHsKLSAgICAgICAgICAgIFFTdHJpbmcgbmFtZSA9IGl0LmtleSgpOwotICAgICAgICAg
ICAgUVZhcmlhbnQgdmFsdWUgPSBpdC52YWx1ZSgpOwotICAgICAgICAgICAgUU9iamVjdCogb2Jq
ID0gdmFsdWUudmFsdWU8UU9iamVjdCo+KCk7Ci0gICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZh
U2NyaXB0V2luZG93T2JqZWN0KG5hbWUsIG9iaik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0K
LX07Ci0KIG5hbWVzcGFjZSB7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTc1LDcgKzEz
NSw3IEBAIHByaXZhdGU6CiAKIH0KIAotSW5zcGVjdG9yQ2xpZW50UXQ6Okluc3BlY3RvckNsaWVu
dFF0KFFXZWJQYWdlKiBwYWdlKQorSW5zcGVjdG9yQ2xpZW50UXQ6Okluc3BlY3RvckNsaWVudFF0
KFFXZWJQYWdlQWRhcHRlciogcGFnZSkKICAgICA6IG1faW5zcGVjdGVkV2ViUGFnZShwYWdlKQog
ICAgICwgbV9mcm9udGVuZFdlYlBhZ2UoMCkKICAgICAsIG1fZnJvbnRlbmRDbGllbnQoMCkKQEAg
LTIwNCwxMiArMTY0LDEyIEBAIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogSW5z
cGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDCiB7CiAgICAgV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSAwOwogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3ID0gYWRv
cHRQdHIobmV3IFFXZWJWaWV3KTsKLSAgICAvLyBGSVhNRTogV2hlcmUgZG9lcyBpbnNwZWN0b3JQ
YWdlIGdldCBkZWxldGVkPwotICAgIEluc3BlY3RvckNsaWVudFdlYlBhZ2UqIGluc3BlY3RvclBh
Z2UgPSBuZXcgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0b3JWaWV3LmdldCgpKTsKLSAg
ICBpbnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOworICAgIFFPYmplY3QqIHZp
ZXcgPSAwOworICAgIFFXZWJQYWdlQWRhcHRlciogaW5zcGVjdG9yUGFnZSA9IDA7CisgICAgbV9p
bnNwZWN0ZWRXZWJQYWdlLT5jcmVhdGVXZWJJbnNwZWN0b3IoJnZpZXcsICZpbnNwZWN0b3JQYWdl
KTsKKyAgICBPd25QdHI8UU9iamVjdD4gaW5zcGVjdG9yVmlldyA9IGFkb3B0UHRyKHZpZXcpOwog
Ci0gICAgUVdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5n
ZXRPckNyZWF0ZUluc3BlY3RvcigpOworICAgIFFPYmplY3QqIGluc3BlY3RvciA9IG1faW5zcGVj
dGVkV2ViUGFnZS0+aW5zcGVjdG9ySGFuZGxlKCk7CiAgICAgLy8gUmVtb3RlIGZyb250ZW5kIHdh
cyBhdHRhY2hlZC4KICAgICBpZiAobV9yZW1vdGVGcm9udEVuZENoYW5uZWwpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjI4LDIxICsxODgsMjAgQEAgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkMKICNp
Zm5kZWYgUVRfTk9fUFJPUEVSVElFUwogICAgIFFWYXJpYW50IGluc3BlY3RvckphdmFTY3JpcHRX
aW5kb3dPYmplY3RzID0gaW5zcGVjdG9yLT5wcm9wZXJ0eSgiX3FfaW5zcGVjdG9ySmF2YVNjcmlw
dFdpbmRvd09iamVjdHMiKTsKICAgICBpZiAoaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVj
dHMuaXNWYWxpZCgpKQotICAgICAgICBpbnNwZWN0b3JQYWdlLT5zZXRQcm9wZXJ0eSgiX3FfaW5z
cGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiLCBpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93
T2JqZWN0cyk7CisgICAgICAgIGluc3BlY3RvclBhZ2UtPmhhbmRsZSgpLT5zZXRQcm9wZXJ0eSgi
X3FfaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiLCBpbnNwZWN0b3JKYXZhU2NyaXB0
V2luZG93T2JqZWN0cyk7CiAjZW5kaWYKLSAgICBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPm1haW5G
cmFtZSgpLT5sb2FkKGluc3BlY3RvclVybCk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5p
bnNwZWN0b3JGcm9udGVuZCA9IGluc3BlY3RvclZpZXcuZ2V0KCk7Ci0gICAgaW5zcGVjdG9yLT5k
LT5zZXRGcm9udGVuZChpbnNwZWN0b3JWaWV3LmdldCgpKTsKKyAgICBpbnNwZWN0b3JQYWdlLT5t
YWluRnJhbWVBZGFwdGVyKCktPmxvYWQoUU5ldHdvcmtSZXF1ZXN0KGluc3BlY3RvclVybCkpOwor
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+c2V0SW5zcGVjdG9yRnJvbnRlbmQoaW5zcGVjdG9yVmll
dy5nZXQoKSk7CiAKICAgICAvLyBJcyAnY29udHJvbGxlcicgdGhlIHNhbWUgb2JqZWN0IGFzICdp
bnNwZWN0b3JDb250cm9sbGVyJyAod2hpY2ggYXBwZWFycyB0byBiZSB1bnVzZWQpPwotICAgIElu
c3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQt
PnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdD4gZnJvbnRlbmRDbGllbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcucmVsZWFzZSgpLCB0
aGlzKSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IGluc3BlY3RvclBh
Z2UtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdD4gZnJvbnRlbmRDbGllbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcucmVsZWFzZSgp
LCBpbnNwZWN0b3JQYWdlLT5wYWdlLCB0aGlzKSk7CiAgICAgbV9mcm9udGVuZENsaWVudCA9IGZy
b250ZW5kQ2xpZW50LmdldCgpOwogICAgIGNvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KGZyb250ZW5kQ2xpZW50LnJlbGVhc2UoKSk7CiAgICAgbV9mcm9udGVuZFdlYlBhZ2Ug
PSBpbnNwZWN0b3JQYWdlOwogCiAgICAgLy8gV2ViIEluc3BlY3RvciBzaG91bGQgbm90IGJlbG9u
ZyB0byBhbnkgb3RoZXIgcGFnZSBncm91cHMgc2luY2UgaXQgaXMgYSBzcGVjaWFsaXplZCBkZWJ1
Z2dlciB3aW5kb3cuCi0gICAgbV9mcm9udGVuZFdlYlBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5zZXRH
cm91cE5hbWUoIl9fV2ViSW5zcGVjdG9yUGFnZUdyb3VwX18iKTsKKyAgICBtX2Zyb250ZW5kV2Vi
UGFnZS0+cGFnZS0+c2V0R3JvdXBOYW1lKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91cF9fIik7CiAg
ICAgZnJvbnRlbmRDaGFubmVsID0gdGhpczsKICNlbmRpZgogICAgIHJldHVybiBmcm9udGVuZENo
YW5uZWw7CkBAIC0yNzMsNyArMjMyLDcgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6YXR0YWNo
QW5kUmVwbGFjZVJlbW90ZUZyb250ZW5kKEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW4KIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIG1fcmVtb3RlRnJvbnRFbmRDaGFubmVsID0gY2hhbm5l
bDsKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y29u
bmVjdEZyb250ZW5kKHRoaXMpOworICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+cGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5jb25uZWN0RnJvbnRlbmQodGhpcyk7CiAjZW5kaWYKIH0KIApAQCAt
MjgxLDcgKzI0MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmRldGFjaFJlbW90ZUZyb250
ZW5kKCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIG1fcmVtb3RlRnJvbnRFbmRDaGFu
bmVsID0gMDsKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9udGVuZCgpOwogI2VuZGlmCiB9CiAK
QEAgLTI5Miw5ICsyNTEsOSBAQCB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdobGlnaHQoKQog
CiB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWRlSGlnaGxpZ2h0KCkKIHsKLSAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPnBhZ2UtPm1haW5GcmFtZSgp
OworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG1faW5zcGVjdGVkV2ViUGFnZS0+cGFnZS0+
bWFpbkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBtX2lu
c3BlY3RlZFdlYlBhZ2UtPm1haW5GcmFtZSgpLT5nZW9tZXRyeSgpOworICAgICAgICBRUmVjdCBy
ZWN0ID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmZyYW1lUmVjdCgp
OwogICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgZnJhbWUtPnZpZXco
KS0+aW52YWxpZGF0ZVJlY3QocmVjdCk7CiAgICAgfQpAQCAtMzExLDcgKzI3MCw3IEBAIGJvb2wg
SW5zcGVjdG9yQ2xpZW50UXQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiAgICAgaWYgKCFtX2Zyb250ZW5kV2ViUGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUGFnZSogZnJvbnRlbmRQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKG1fZnJv
bnRlbmRXZWJQYWdlKTsKKyAgICBQYWdlKiBmcm9udGVuZFBhZ2UgPSBtX2Zyb250ZW5kV2ViUGFn
ZS0+cGFnZTsKICAgICByZXR1cm4gZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZShmcm9u
dGVuZFBhZ2UsIG1lc3NhZ2UpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTksOCAr
Mjc4LDggQEAgYm9vbCBJbnNwZWN0b3JDbGllbnRRdDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1JbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFXZWJQYWdlKiBp
bnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3LCBJbnNw
ZWN0b3JDbGllbnRRdCogaW5zcGVjdG9yQ2xpZW50KQotICAgIDogSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbChpbnNwZWN0ZWRXZWJQYWdlLT5kLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCksIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZSwgYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckZyb250ZW5kU2V0dGluZ3NRdCgpKSkKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKiBpbnNwZWN0ZWRXZWJQYWdlLCBQ
YXNzT3duUHRyPFFPYmplY3Q+IGluc3BlY3RvclZpZXcsIFdlYkNvcmU6OlBhZ2UqIGluc3BlY3Rv
clBhZ2UsIEluc3BlY3RvckNsaWVudFF0KiBpbnNwZWN0b3JDbGllbnQpCisgICAgOiBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RlZFdlYlBhZ2UtPnBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKSwgaW5zcGVjdG9yUGFnZSwgYWRvcHRQdHIobmV3IEluc3BlY3RvckZyb250ZW5k
U2V0dGluZ3NRdCgpKSkKICAgICAsIG1faW5zcGVjdGVkV2ViUGFnZShpbnNwZWN0ZWRXZWJQYWdl
KQogICAgICwgbV9pbnNwZWN0b3JWaWV3KGluc3BlY3RvclZpZXcpCiAgICAgLCBtX2Rlc3Ryb3lp
bmdJbnNwZWN0b3JWaWV3KGZhbHNlKQpAQCAtMzg2LDEwICszNDUsOCBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdV
UkwpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUo
KQogewotICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgewotICAgICAg
ICBRU3RyaW5nIGNhcHRpb24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdl
IiwgIldlYiBJbnNwZWN0b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7Ci0gICAgICAgIG1f
aW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0aW9uKTsK
LSAgICB9CisgICAgUVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRl
KCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOwor
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+c2V0SW5zcGVjdG9yV2luZG93VGl0bGUoY2FwdGlvbik7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGVzdHJveUluc3BlY3RvclZp
ZXcoYm9vbCBub3RpZnlJbnNwZWN0b3JDb250cm9sbGVyKQpAQCAtMzk5LDIwICszNTYsMjAgQEAg
dm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpkZXN0cm95SW5zcGVjdG9yVmlldyhib29s
IG5vdGlmeUluc3BlY3RvckNvbnRyb2wKICAgICBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3ID0g
dHJ1ZTsKIAogICAgIC8vIEluc3BlY3RlZCBwYWdlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBkZXN0
cm95ZWQuCi0gICAgaWYgKG1faW5zcGVjdGVkV2ViUGFnZSAmJiBtX2luc3BlY3RlZFdlYlBhZ2Ut
PmQtPmluc3BlY3RvcikgeworICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UpIHsKICAgICAgICAg
Ly8gQ2xlYXIgcmVmZXJlbmNlIGZyb20gUVdlYkluc3BlY3RvciB0byB0aGUgZnJvbnRlbmQgdmll
dy4KLSAgICAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3ItPmQtPnNldEZyb250
ZW5kKDApOworICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPnNldEluc3BlY3RvckZyb250ZW5k
KDApOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG5vdGlmeUluc3Bl
Y3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRX
ZWJQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9udGVuZCgp
OwogI2VuZGlmCiAgICAgaWYgKG1faW5zcGVjdG9yQ2xpZW50KQogICAgICAgICBtX2luc3BlY3Rv
ckNsaWVudC0+cmVsZWFzZUZyb250ZW5kUGFnZSgpOwogCiAgICAgLy8gQ2xlYXIgcG9pbnRlciBi
ZWZvcmUgZGVsZXRpbmcgV2ViVmlldyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgdG8gaXRzIGRl
c3RydWN0b3IuCi0gICAgT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0
b3JWaWV3LnJlbGVhc2UoKTsKKyAgICBPd25QdHI8UU9iamVjdD4gaW5zcGVjdG9yVmlldyA9IG1f
aW5zcGVjdG9yVmlldy5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRRdDo6aW5zcGVjdG9yQ2xpZW50RGVzdHJveWVkKCkKQEAgLTQyNCw0ICszODEsMyBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3RvckNsaWVudERlc3Ryb3llZCgpCiAj
ZW5kaWYKIH0KIAotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFF0Lm1vYyIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaCBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaAppbmRleCA0
OWJhMDAwYWQxYTBkZWRmYzQ1ZmE0ZThlZTMyOGVmYWJlODdhNzM2Li5hYjJlZGI2NTFjMjEyNmMw
NmJmMDJhNGVmYzFkNTEwNDAwYjNiYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCkBAIC0zMywxMSArMzMsMTQgQEAKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCisjaW5j
bHVkZSA8UXRDb3JlL1FPYmplY3Q+CiAjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CisjaW5jbHVk
ZSA8UU9iamVjdD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCitjbGFzcyBRV2ViUGFnZUFkYXB0
ZXI7CiBjbGFzcyBRV2ViUGFnZTsKIGNsYXNzIFFXZWJWaWV3OwogCkBAIC00OCw3ICs1MSw3IEBA
IGNsYXNzIFBhZ2U7CiAKIGNsYXNzIEluc3BlY3RvckNsaWVudFF0IDogcHVibGljIEluc3BlY3Rv
ckNsaWVudCwgcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCB7CiBwdWJsaWM6Ci0gICAg
SW5zcGVjdG9yQ2xpZW50UXQoUVdlYlBhZ2UqKTsKKyAgICBJbnNwZWN0b3JDbGllbnRRdChRV2Vi
UGFnZUFkYXB0ZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsK
IApAQCAtNjcsOCArNzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2hSZW1vdGVGcm9udGVu
ZCgpOwogCiBwcml2YXRlOgotICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7Ci0gICAg
UVdlYlBhZ2UqIG1fZnJvbnRlbmRXZWJQYWdlOworICAgIFFXZWJQYWdlQWRhcHRlciogbV9pbnNw
ZWN0ZWRXZWJQYWdlOworICAgIFFXZWJQYWdlQWRhcHRlciogbV9mcm9udGVuZFdlYlBhZ2U7CiAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCogbV9mcm9udGVuZENsaWVudDsKICAgICBib29s
IG1fcmVtb3RlSW5zcGVjdG9yOwogICAgIEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQq
IG1fcmVtb3RlRnJvbnRFbmRDaGFubmVsOwpAQCAtNzgsNyArODEsNyBAQCBwcml2YXRlOgogCiBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0IDogcHVibGljIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwgewogcHVibGljOgotICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdl
YlBhZ2UqIGluc3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25QdHI8UVdlYlZpZXc+IGluc3BlY3RvclZp
ZXcsIEluc3BlY3RvckNsaWVudFF0KiBpbnNwZWN0b3JDbGllbnQpOworICAgIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3du
UHRyPFFPYmplY3Q+IGluc3BlY3RvclZpZXcsIFdlYkNvcmU6OlBhZ2UqIGluc3BlY3RvclBhZ2Us
IEluc3BlY3RvckNsaWVudFF0KiBpbnNwZWN0b3JDbGllbnQpOwogICAgIHZpcnR1YWwgfkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRl
ZCgpOwpAQCAtMTAyLDggKzEwNSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRh
dGVXaW5kb3dUaXRsZSgpOwogICAgIHZvaWQgZGVzdHJveUluc3BlY3RvclZpZXcoYm9vbCBub3Rp
ZnlJbnNwZWN0b3JDb250cm9sbGVyKTsKLSAgICBRV2ViUGFnZSogbV9pbnNwZWN0ZWRXZWJQYWdl
OwotICAgIE93blB0cjxRV2ViVmlldz4gbV9pbnNwZWN0b3JWaWV3OworICAgIFFXZWJQYWdlQWRh
cHRlciogbV9pbnNwZWN0ZWRXZWJQYWdlOworICAgIE93blB0cjxRT2JqZWN0PiBtX2luc3BlY3Rv
clZpZXc7CiAgICAgUVN0cmluZyBtX2luc3BlY3RlZFVSTDsKICAgICBib29sIG1fZGVzdHJveWlu
Z0luc3BlY3RvclZpZXc7CiAgICAgSW5zcGVjdG9yQ2xpZW50UXQqIG1faW5zcGVjdG9yQ2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRXZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50V2ViUGFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM0NzMwYjMyOTU4NTg3OGMwNTJlNGFm
YjE5ODViYTA0YmUzNzQzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5jcHAKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRX
ZWJQYWdlLmgiCisKKyNpbmNsdWRlIDxxd2ViZnJhbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworSW5zcGVjdG9yQ2xpZW50V2ViUGFnZTo6SW5zcGVjdG9yQ2xpZW50V2ViUGFnZSgp
Cit7CisgICAgUVdlYlZpZXcqIHZpZXcgPSBuZXcgUVdlYlZpZXc7CisgICAgdmlldy0+c2V0UGFn
ZSh0aGlzKTsKKyAgICBzZXRQYXJlbnQodmlldyk7CisgICAgY29ubmVjdChtYWluRnJhbWUoKSwg
U0lHTkFMKGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkpLCBTTE9UKGphdmFTY3JpcHRX
aW5kb3dPYmplY3RDbGVhcmVkKCkpKTsKK30KKworUVdlYlBhZ2UqIEluc3BlY3RvckNsaWVudFdl
YlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSkKK3sKKyAgICBRV2Vi
VmlldyogdmlldyA9IG5ldyBRV2ViVmlldzsKKyAgICBRV2ViUGFnZSogcGFnZSA9IG5ldyBRV2Vi
UGFnZTsKKyAgICB2aWV3LT5zZXRQYWdlKHBhZ2UpOworICAgIHZpZXctPnNldEF0dHJpYnV0ZShR
dDo6V0FfRGVsZXRlT25DbG9zZSk7CisgICAgcmV0dXJuIHBhZ2U7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ2xpZW50V2ViUGFnZTo6amF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKQoreworICAg
IFFWYXJpYW50IGluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzID0gcHJvcGVydHkoIl9x
X2luc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzIik7CisgICAgaWYgKCFpbnNwZWN0b3JK
YXZhU2NyaXB0V2luZG93T2JqZWN0cy5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBR
TWFwPFFTdHJpbmcsIFFWYXJpYW50PiBqYXZhU2NyaXB0TmFtZU9iamVjdE1hcCA9IGluc3BlY3Rv
ckphdmFTY3JpcHRXaW5kb3dPYmplY3RzLnRvTWFwKCk7CisgICAgUVdlYkZyYW1lKiBmcmFtZSA9
IG1haW5GcmFtZSgpOworICAgIFFNYXA8UVN0cmluZywgUVZhcmlhbnQ+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGphdmFTY3JpcHROYW1lT2JqZWN0TWFwLmNvbnN0QmVnaW4oKTsKKyAgICBmb3IgKCA7
IGl0ICE9IGphdmFTY3JpcHROYW1lT2JqZWN0TWFwLmNvbnN0RW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgUVN0cmluZyBuYW1lID0gaXQua2V5KCk7CisgICAgICAgIFFWYXJpYW50IHZhbHVlID0gaXQu
dmFsdWUoKTsKKyAgICAgICAgUU9iamVjdCogb2JqID0gdmFsdWUudmFsdWU8UU9iamVjdCo+KCk7
CisgICAgICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QobmFtZSwgb2JqKTsK
KyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXZWJQYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg3ZjI5YjBjZjUyMTlkZmFh
MDRmYjNlOGZjNTc4ZmRkYWVhMDhhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2lmbmRlZiBJbnNwZWN0b3JDbGllbnRXZWJQYWdlX2gKKyNkZWZpbmUgSW5z
cGVjdG9yQ2xpZW50V2ViUGFnZV9oCisKKyNpbmNsdWRlIDxxd2VicGFnZS5oPgorI2luY2x1ZGUg
PHF3ZWJ2aWV3Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBJbnNwZWN0b3JDbGll
bnRXZWJQYWdlIDogcHVibGljIFFXZWJQYWdlIHsKKyAgICBRX09CSkVDVAorICAgIGZyaWVuZCBj
bGFzcyBJbnNwZWN0b3JDbGllbnRRdDsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JDbGllbnRXZWJQ
YWdlKCk7CisKKyAgICBRV2ViUGFnZSogY3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dU
eXBlKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCBqYXZhU2NyaXB0V2luZG93T2JqZWN0
Q2xlYXJlZCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBJbnNw
ZWN0b3JDbGllbnRXZWJQYWdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKaW5kZXggNjViYmFkMGYwOTQwZDdkZGZkYjU2
NWQ3Njg3MTlmNGIwNDUwYjkwYy4uNDY1MWY3NTVjYTdiNGJhMjM2NGFiYzM5NDRjN2VhMzA0ZWUz
NjhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JTZXJ2ZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JTZXJ2ZXJRdC5jcHAKQEAgLTIyLDE3ICsyMiwxNiBAQAogCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ2xpZW50UXQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJxaHR0cGhlYWRlcl9wLmgiCi0jaW5jbHVkZSAicXdl
YnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFnZV9wLmgiCisjaW5jbHVkZSAiLi4vQXBpL3FodHRw
aGVhZGVyX3AuaCIKICNpbmNsdWRlIDxRRmlsZT4KICNpbmNsdWRlIDxRU3RyaW5nPgogI2luY2x1
ZGUgPFFTdHJpbmdMaXN0PgogI2luY2x1ZGUgPFFUY3BTZXJ2ZXI+CiAjaW5jbHVkZSA8UVRjcFNv
Y2tldD4KICNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8cWVu
ZGlhbi5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CkBAIC0yMjksNyArMjI4LDcgQEAgdm9pZCBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxl
clF0Ojp0Y3BSZWFkeVJlYWQoKQogICAgICAgICAgICAgICAgICArK2l0KSB7CiAgICAgICAgICAg
ICAgICAgaW5kZXhIdG1sLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0aW4xKCI8bGk+PGEgaHJlZj1c
Ii93ZWJraXQvaW5zcGVjdG9yL2luc3BlY3Rvci5odG1sP3BhZ2U9JTFcIj4lMjwvbGk+XG4iKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhpdC5rZXkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoaXQudmFsdWUoKS0+bV9pbnNwZWN0ZWRXZWJQ
YWdlLT5tYWluRnJhbWUoKS0+dXJsKCkudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhRVXJsKGl0LnZhbHVlKCktPm1faW5zcGVjdGVkV2ViUGFnZS0+
bWFpbkZyYW1lQWRhcHRlcigpLT51cmwpLnRvU3RyaW5nKCkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGluZGV4SHRtbC5hcHBlbmQoUUxhdGluMVN0cmluZygiPC91bD48L2JvZHk+PC9o
dG1sPiIpKTsKICAgICAgICAgICAgIHJlc3BvbnNlID0gaW5kZXhIdG1sLnRvTGF0aW4xKCk7CkBA
IC0zNTYsNyArMzU1LDcgQEAgdm9pZCBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxlclF0Ojp3
ZWJTb2NrZXRSZWFkeVJlYWQoKQogICAgICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAg
ICAgICBpZiAobV9pbnNwZWN0b3JDbGllbnQpIHsKLSAgICAgICAgICBJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gbV9pbnNwZWN0b3JDbGllbnQtPm1faW5zcGVjdGVk
V2ViUGFnZS0+ZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgICAgICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBtX2luc3BlY3RvckNsaWVudC0+
bV9pbnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgICAg
ICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKFFTdHJp
bmc6OmZyb21VdGY4KHBheWxvYWQpKTsKICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQuY3BwCmluZGV4IDU2ZWQwYjRjYjdjZTI2NWI2YmJjY2FhMzM4ZjZjZDdk
M2Y0NDVjYTAuLjg0MWMyNjk2Zjc1MmMzMjU4NWUzNDNiMTQwN2Q3YTkzNmE1YTRiMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCkBAIC0zMywxOCArMzMsMTcgQEAKICNpbmNs
dWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisj
aW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1
cmVJbmRpY2F0b3IuaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdl
YmtpdGdsb2JhbC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3
ZWJraXRnbG9iYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MiwxMCArNzEsNiBA
QCBOb3RpZmljYXRpb25XcmFwcGVyOjpOb3RpZmljYXRpb25XcmFwcGVyKCkKICAgICAsIG1fZGlz
cGxheUV2ZW50VGltZXIodGhpcywgJk5vdGlmaWNhdGlvbldyYXBwZXI6OnNlbmREaXNwbGF5RXZl
bnQpCiB7CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJ
Q0FUSU9OUykKLQotI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgotICAgIG1fbm90aWZpY2F0
aW9uSWNvbiA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBtX3ByZXNlbnRlciA9IG51bGxwdHI7CiAj
ZW5kaWYKIH0KQEAgLTIwOSw3ICsyMDQsNiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0OjpkaXNwbGF5Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aQogI2lm
bmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgogICAgICAgICBpZiAoIWR1bXBOb3RpZmljYXRpb24p
CiAgICAgICAgICAgICB3cmFwcGVyLT5tX2Nsb3NlVGltZXIuc3RhcnRPbmVTaG90KG5vdGlmaWNh
dGlvblRpbWVvdXQpOwotICAgICAgICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29uID0g
YWRvcHRQdHIobmV3IFFTeXN0ZW1UcmF5SWNvbigpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjI3
LDkgKzIyMSw5IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmRpc3BsYXlO
b3RpZmljYXRpb24oTm90aWZpY2F0aW9uKiBub3RpZmljYXRpCiAgICAgfQogCiAjaWZuZGVmIFFU
X05PX1NZU1RFTVRSQVlJQ09OCi0gICAgd3JhcHBlci0+Y29ubmVjdCh3cmFwcGVyLT5tX25vdGlm
aWNhdGlvbkljb24uZ2V0KCksIFNJR05BTChtZXNzYWdlQ2xpY2tlZCgpKSwgd3JhcHBlciwgU0xP
VChub3RpZmljYXRpb25DbGlja2VkKCkpKTsKLSAgICB3cmFwcGVyLT5tX25vdGlmaWNhdGlvbklj
b24tPnNob3coKTsKLSAgICB3cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24tPnNob3dNZXNzYWdl
KG5vdGlmaWNhdGlvbi0+dGl0bGUoKSwgbm90aWZpY2F0aW9uLT5ib2R5KCkpOworICAgIHdyYXBw
ZXItPmNvbm5lY3QobV9zeXN0ZW1UcmF5SWNvbi5kYXRhKCksIFNJR05BTChtZXNzYWdlQ2xpY2tl
ZCgpKSwgd3JhcHBlciwgU0xPVChub3RpZmljYXRpb25DbGlja2VkKCkpKTsKKyAgICBRTWV0YU9i
amVjdDo6aW52b2tlTWV0aG9kKG1fc3lzdGVtVHJheUljb24uZGF0YSgpLCAic2hvdyIpOworICAg
IFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV9zeXN0ZW1UcmF5SWNvbi5kYXRhKCksICJzaG93
TWVzc2FnZSIsIFFfQVJHKFFTdHJpbmcsIG5vdGlmaWNhdGlvbi0+dGl0bGUoKSksIFFfQVJHKFFT
dHJpbmcsIG5vdGlmaWNhdGlvbi0+Ym9keSgpKSk7CiAjZW5kaWYKIH0KIApAQCAtMzI0LDExICsz
MTgsMTAgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVxdWVzdFBlcm1p
c3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28KICAgICAgICAgQ2FsbGJhY2tzSW5mbyBp
bmZvOwogICAgICAgICBpbmZvLm1fZnJhbWUgPSB0b0ZyYW1lKGNvbnRleHQpOwogICAgICAgICBp
bmZvLm1fY2FsbGJhY2tzLmFwcGVuZChjYik7Ci0gICAgICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5pbnNlcnQoY29udGV4dCwgaW5mbyk7CiAKICAgICAgICAgaWYgKHRvUGFnZShjb250
ZXh0KSAmJiB0b0ZyYW1lKGNvbnRleHQpKSB7CiAgICAgICAgICAgICBtX3BlbmRpbmdQZXJtaXNz
aW9uUmVxdWVzdHMuaW5zZXJ0KGNvbnRleHQsIGluZm8pOwotICAgICAgICAgICAgZW1pdCB0b1Bh
Z2UoY29udGV4dCktPmZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdGVkKHRvRnJhbWUoY29udGV4dCks
IFFXZWJQYWdlOjpOb3RpZmljYXRpb25zKTsKKyAgICAgICAgICAgIHRvUGFnZShjb250ZXh0KS0+
bm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1ZXN0ZWQodG9GcmFtZShjb250ZXh0KSk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0zNDYsMTAgKzMzOSwxMCBAQCB2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oU2NyaXB0RXhlY3V0
aW9uQwogICAgIGlmIChpdGVyID09IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUVdlYkZyYW1lKiBmcmFtZSA9IGl0ZXIudmFsdWUoKS5t
X2ZyYW1lOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lID0gaXRlci52YWx1ZSgpLm1fZnJh
bWU7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIFFXZWJQYWdlKiBwYWdl
ID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFk
YXB0ZXI6OmtpdChmcmFtZS0+ZnJhbWUtPnBhZ2UoKSk7CiAgICAgbV9wZW5kaW5nUGVybWlzc2lv
blJlcXVlc3RzLmVyYXNlKGl0ZXIpOwogCiAgICAgaWYgKCFwYWdlKQpAQCAtMzU4LDcgKzM1MSw3
IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNlbFJlcXVlc3RzRm9y
UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25DCiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCiAg
ICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNUIENB
TkNFTExFRDogJXNcbiIsIFFTdHJpbmcoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCkpOwogCi0gICAgZW1pdCBwYWdlLT5mZWF0dXJlUGVy
bWlzc2lvblJlcXVlc3RDYW5jZWxlZChmcmFtZSwgUVdlYlBhZ2U6Ok5vdGlmaWNhdGlvbnMpOwor
ICAgIHBhZ2UtPm5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGxlZChmcmFtZSk7
CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0
aW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQpAQCAtNDQyLDcgKzQzNSw3IEBAIHZvaWQgTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmR1bXBTaG93VGV4dChOb3RpZmljYXRpb24qIG5vdGlm
aWNhdGlvbikKICAgICB9CiB9CiAKLVFXZWJQYWdlKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6dG9QYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitRV2ViUGFnZUFk
YXB0ZXIqIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDUzLDEwICs0NDYsMTAgQEAg
UVdlYlBhZ2UqIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UtPm1haW5GcmFt
ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpr
aXQocGFnZS0+bWFpbkZyYW1lKCkpLT5wYWdlKCk7CisgICAgcmV0dXJuIFFXZWJQYWdlQWRhcHRl
cjo6a2l0KHBhZ2UpOwogfQogCi1RV2ViRnJhbWUqIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0Ojp0b0ZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitRV2ViRnJhbWVB
ZGFwdGVyKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9GcmFtZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NjUsNyArNDU4LDcgQEAg
UVdlYkZyYW1lKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9GcmFtZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXgKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+
ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0
ZTo6a2l0KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICByZXR1cm4gUVdlYkZyYW1lQWRhcHRlcjo6
a2l0KGRvY3VtZW50LT5mcmFtZSgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJ
T05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmgKaW5kZXggNTgxOWI0ZDgwMTNjNDA4NmQwMWU3MjYxNmJhZjRmZWE3ZGE2ODliNy4u
MzEwMzQ3NjQyODFlODU4NTdlMWZhZTZkNDUzOTk3MjhjOTI1ZjI4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQuaApAQCAtMzcsMTMgKzM3LDEzIEBACiAjaW5jbHVkZSAiUXRQbGF0Zm9y
bVBsdWdpbi5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKLSNpbmNsdWRlICJxd2Via2l0cGxhdGZv
cm1wbHVnaW4uaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCiAK
ICNpbmNsdWRlIDxRTXVsdGlIYXNoPgotI2luY2x1ZGUgPFFTeXN0ZW1UcmF5SWNvbj4KKyNpbmNs
dWRlIDxRU2NvcGVkUG9pbnRlcj4KIAotY2xhc3MgUVdlYkZyYW1lOwotY2xhc3MgUVdlYlBhZ2U7
CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY5LDE0ICs2OSwxMiBAQCBwdWJsaWMgUV9TTE9UUzoKICAg
ICB2b2lkIG5vdGlmaWNhdGlvbkNsb3NlZCgpOwogICAgIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tl
ZCgpOwogCi1wdWJsaWM6Ci0jaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCi0gICAgT3duUHRy
PFFTeXN0ZW1UcmF5SWNvbj4gbV9ub3RpZmljYXRpb25JY29uOwotI2VuZGlmCi0KK3ByaXZhdGU6
CiAgICAgT3duUHRyPFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI+IG1fcHJlc2VudGVyOwogICAg
IFRpbWVyPE5vdGlmaWNhdGlvbldyYXBwZXI+IG1fY2xvc2VUaW1lcjsKICAgICBUaW1lcjxOb3Rp
ZmljYXRpb25XcmFwcGVyPiBtX2Rpc3BsYXlFdmVudFRpbWVyOworCisgICAgZnJpZW5kIGNsYXNz
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OwogfTsKIAogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCkBAIC0xMDksNiArMTA3LDEw
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkdW1wTm90aWZpY2F0aW9uOwogCiAgICAgdm9p
ZCBhZGRDbGllbnQoKSB7IG1fY2xpZW50Q291bnQrKzsgfQorI2lmbmRlZiBRVF9OT19TWVNURU1U
UkFZSUNPTgorICAgIGJvb2wgaGFzU3lzdGVtVHJheUljb24oKSBjb25zdCB7IHJldHVybiAhbV9z
eXN0ZW1UcmF5SWNvbi5pc051bGwoKTsgfQorICAgIHZvaWQgc2V0U3lzdGVtVHJheUljb24oUU9i
amVjdCogaWNvbikgeyBtX3N5c3RlbVRyYXlJY29uLnJlc2V0KGljb24pOyB9CisjZW5kaWYKICAg
ICB2b2lkIHJlbW92ZUNsaWVudCgpOwogICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdCogbm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CiAKQEAgLTEyNCwxMiArMTI2LDEyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkZXRhY2hOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uKik7CiAg
ICAgdm9pZCBkdW1wUmVwbGFjZWRJZFRleHQoTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1w
U2hvd1RleHQoTm90aWZpY2F0aW9uKik7Ci0gICAgUVdlYlBhZ2UqIHRvUGFnZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7Ci0gICAgUVdlYkZyYW1lKiB0b0ZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHRvUGFnZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CisgICAgUVdlYkZyYW1lQWRhcHRlciogdG9GcmFtZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CiAKICAgICBpbnQgbV9jbGllbnRDb3VudDsKICAgICBzdHJ1Y3QgQ2FsbGJhY2tzSW5m
byB7Ci0gICAgICAgIFFXZWJGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgUVdlYkZyYW1lQWRhcHRl
ciogbV9mcmFtZTsKICAgICAgICAgUUxpc3Q8UmVmUHRyPFZvaWRDYWxsYmFjaz4gPiBtX2NhbGxi
YWNrczsKICAgICB9OwogICAgIFFIYXNoPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCAgQ2FsbGJh
Y2tzSW5mbyA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKQEAgLTEzNywxMCArMTM5LDEz
IEBAIHByaXZhdGU6CiAKICAgICBOb3RpZmljYXRpb25zUXVldWUgbV9ub3RpZmljYXRpb25zOwog
ICAgIFF0UGxhdGZvcm1QbHVnaW4gbV9wbGF0Zm9ybVBsdWdpbjsKKyNpZm5kZWYgUVRfTk9fU1lT
VEVNVFJBWUlDT04KKyAgICBRU2NvcGVkUG9pbnRlcjxRT2JqZWN0PiBtX3N5c3RlbVRyYXlJY29u
OworI2VuZGlmCiB9OwogCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykg
fHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8v
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCAxNDFmOThlMzA4MmMyMTI3YzZm
OTQxZTFkOTIwY2U3N2UwOTI5YTA1Li43MTgyZTUzZDMzZDEwYjQxYzliYzBkNWQ1MmUwMzI3MmVi
Y2M3YzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VD
bGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0RGcm9tV2lkZ2V0KFFXaWRnZXQqIHdpZGdldCwgUGxhdGZvcm1HCiAKIFFX
aW5kb3cqIFFXZWJQYWdlQ2xpZW50Ojpvd25lcldpbmRvdygpIGNvbnN0CiB7Ci0gICAgUVdpZGdl
dCogd2lkZ2V0ID0gb3duZXJXaWRnZXQoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0
X2Nhc3Q8UVdpZGdldCo+KG93bmVyV2lkZ2V0KCkpOwogICAgIGlmICghd2lkZ2V0KQogICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAoUVdpbmRvdyAqd2luZG93ID0gd2lkZ2V0LT53aW5kb3dIYW5k
bGUoKSkKQEAgLTIwNCw3ICsyMDQsNyBAQCBpbnQgUGFnZUNsaWVudFFXaWRnZXQ6OnNjcmVlbk51
bWJlcigpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVFXaWRnZXQqIFBhZ2VDbGllbnRRV2lk
Z2V0Ojpvd25lcldpZGdldCgpIGNvbnN0CitRT2JqZWN0ICpQYWdlQ2xpZW50UVdpZGdldDo6b3du
ZXJXaWRnZXQoKSBjb25zdAogewogICAgIHJldHVybiB2aWV3OwogfQpAQCAtMzYzLDcgKzM2Myw3
IEBAIGludCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIoKSBjb25zdAog
ICAgIHJldHVybiAwOwogfQogCi1RV2lkZ2V0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpv
d25lcldpZGdldCgpIGNvbnN0CitRT2JqZWN0ICpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpv
d25lcldpZGdldCgpIGNvbnN0CiB7CiAgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZp
ZXctPnNjZW5lKCkpIHsKICAgICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdz
ID0gc2NlbmUtPnZpZXdzKCk7CkBAIC00MzIsNyArNDMyLDcgQEAgdm9pZCBQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjpjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtR3Jh
cGhpY3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFPYmplY3QqKiBzdXJmYWNlT3duZXIpCiB7Ci0gICAgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzREZyb21XaWRnZXQob3duZXJXaWRnZXQoKSwgY29udGV4dCwgc3VyZmFjZSwgc3VyZmFj
ZU93bmVyKTsKKyAgICBjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJvbVdpZGdldChx
b2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG93bmVyV2lkZ2V0KCkpLCBjb250ZXh0LCBzdXJmYWNlLCBz
dXJmYWNlT3duZXIpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IGU2YjllMTY5NGQ0NmE0MmNlMzIyNDc5MjhkNjk4
OWRkYmU1OTg3ZWUuLjhlZDYzOGM5ZjA0NDU1MjdjZTdmOGNjYzc2YWJhNjE1M2ZjMzUzOGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAt
ODYsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFFQYWxldHRlIHBhbGV0dGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCBzY3JlZW5OdW1iZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFFXaWRnZXQqIG93bmVyV2lkZ2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBRT2JqZWN0KiBvd25l
cldpZGdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUVJlY3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3du
ZXJXaWRnZXQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2luUGFyZW50KCkg
Y29uc3Q7CkBAIC0xOTcsNyArMTk3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBRUGFsZXR0
ZSBwYWxldHRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgc2NyZWVuTnVtYmVyKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBRV2lkZ2V0KiBvd25lcldpZGdldCgpIGNvbnN0OworICAgIHZpcnR1YWwg
UU9iamVjdCogb3duZXJXaWRnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFFSZWN0IGdlb21ldHJ5
UmVsYXRpdmVUb093bmVyV2lkZ2V0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFFPYmplY3QqIHBs
dWdpblBhcmVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAppbmRleCBjMzFkOWIwMDc1MDc3ZDkw
MTY5YjY3Njc5MTRhZGFkMjlhZjZhZTFjLi5mZGZiYzlkOGU1ZTQxMjRiOTc4NmEzNTVlNjU2ZDU1
YzU4YzU1NmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcApAQCAtMzksMTEgKzM5LDEyIEBACiAjaW5jbHVk
ZSA8UGx1Z2luRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1
ZGUgPFFMb2NhbGU+Ci0jaW5jbHVkZSA8cXdlYmhpc3RvcnlpbnRlcmZhY2UuaD4KLSNpbmNsdWRl
IDxxd2VicGFnZS5oPgotI2luY2x1ZGUgPHF3ZWJwbHVnaW5mYWN0b3J5Lmg+CiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KIAorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgorI2luY2x1
ZGUgIi4uL0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Vi
cGx1Z2luZmFjdG9yeS5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdm9pZCBQbGF0
Zm9ybVN0cmF0ZWdpZXNRdDo6aW5pdGlhbGl6ZSgpCkBAIC05OSw5ICsxMDAsOSBAQCB2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1F0OjpyZWZyZXNoUGx1Z2lucygpCiAKIHZvaWQgUGxhdGZvcm1TdHJh
dGVnaWVzUXQ6OmdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9y
PFdlYkNvcmU6OlBsdWdpbkluZm8+JiBvdXRQbHVnaW5zKQogewotICAgIFFXZWJQYWdlKiBxUGFn
ZSA9IHN0YXRpY19jYXN0PENocm9tZUNsaWVudFF0Kj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgp
KS0+bV93ZWJQYWdlOworICAgIFFXZWJQYWdlQWRhcHRlciogcVBhZ2UgPSBzdGF0aWNfY2FzdDxD
aHJvbWVDbGllbnRRdCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPm1fd2ViUGFnZTsKICAg
ICBRV2ViUGx1Z2luRmFjdG9yeSogZmFjdG9yeTsKLSAgICBpZiAocVBhZ2UgJiYgKGZhY3Rvcnkg
PSBxUGFnZS0+cGx1Z2luRmFjdG9yeSgpKSkgeworICAgIGlmIChxUGFnZSAmJiAoZmFjdG9yeSA9
IHFQYWdlLT5wbHVnaW5GYWN0b3J5KSkgewogCiAgICAgICAgIFFMaXN0PFFXZWJQbHVnaW5GYWN0
b3J5OjpQbHVnaW4+IHFwbHVnaW5zID0gZmFjdG9yeS0+cGx1Z2lucygpOwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHFwbHVnaW5zLmNvdW50KCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAppbmRleCAyOWU0NjI0ZWJkM2Uy
MTRjNWZmYTc2ZDYwZjY0MmY3ZjYwZGI4YTE0Li5iMTdhMjhkZmRhNDM3OTFmYTJhZTIyOWRhMGEx
MmQ1ZTQzNDQxODBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Bv
cHVwTWVudVF0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogCi0jaW5jbHVkZSAicXdlYmtpdHBsYXRmb3Jt
cGx1Z2luLmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogCiBj
bGFzcyBTZWxlY3REYXRhIDogcHVibGljIFFXZWJTZWxlY3REYXRhIHsKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUUdyYXBoaWNzV2lkZ2V0UGx1
Z2luSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwMmFmZmMzNzQ5NmE2OWViNTI3M2Y5OWFm
ZTcyMDM5YjQzZWIwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuY3BwCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmgiCisKKyNp
bmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KKyNpbmNsdWRlIDxRR3JhcGhpY3NXaWRnZXQ+CisKKyNp
Zm5kZWYgUVRfTk9fR1JBUEhJQ1NWSUVXCisKK1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6On5R
R3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsKCkKK3sKKyAgICBtX2dyYXBoaWNzV2lkZ2V0LT5kZWxl
dGVMYXRlcigpOworfQorCit2b2lkIFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6OnVwZGF0ZShj
b25zdCBRUmVjdCAmcmVjdCkKK3sKKyAgICBRR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBtX2dyYXBo
aWNzV2lkZ2V0LT5zY2VuZSgpOworICAgIGlmIChzY2VuZSkKKyAgICAgICAgc2NlbmUtPnVwZGF0
ZShyZWN0KTsKK30KKwordm9pZCBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjpzZXRHZW9tZXRy
eUFuZENsaXAoY29uc3QgUVJlY3QgJmdlb21ldHJ5LCBjb25zdCBRUmVjdCAmLCBib29sKQorewor
ICAgIG1fZ3JhcGhpY3NXaWRnZXQtPnNldEdlb21ldHJ5KGdlb21ldHJ5KTsKKyAgICAvLyBGSVhN
RTogTWFrZSB0aGUgY29kZSBoYW5kbGUgY2xpcHBpbmcgb2YgZ3JhcGhpY3Mgd2lkZ2V0cy4KK30K
Kwordm9pZCBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKK3sKKyAgICBtX2dyYXBoaWNzV2lkZ2V0LT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2
b2lkIFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6OnNldFdpZGdldFBhcmVudChRT2JqZWN0ICpw
YXJlbnQpCit7CisgICAgUUdyYXBoaWNzT2JqZWN0ICpwYXJlbnRJdGVtID0gcW9iamVjdF9jYXN0
PFFHcmFwaGljc09iamVjdCo+KHBhcmVudCk7CisgICAgaWYgKHBhcmVudEl0ZW0pCisgICAgICAg
IG1fZ3JhcGhpY3NXaWRnZXQtPnNldFBhcmVudEl0ZW0ocGFyZW50SXRlbSk7Cit9CisKK1FPYmpl
Y3QgKlFHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZ3JhcGhpY3NXaWRnZXQ7Cit9CisKKyNlbmRpZiAvLyAhZGVmaW5lZChRVF9OT19HUkFQ
SElDU1ZJRVcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FH
cmFwaGljc1dpZGdldFBsdWdpbkltcGwuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyNWNmMzg5ZGVlNjFl
OWNkOGVmNDMxYjg1MTRlOTVmZmM4ZmRmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuaApAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsX2gK
KyNkZWZpbmUgUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbF9oCisjaWZuZGVmIFFUX05PX0dSQVBI
SUNTVklFVworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRB
ZGFwdGVyLmgiCisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUdyYXBoaWNzV2lkZ2V0Owor
UVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsIDogcHVi
bGljIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBR
R3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsKFFHcmFwaGljc1dpZGdldCAqdykgOiBtX2dyYXBoaWNz
V2lkZ2V0KHcpIHt9CisgICAgdmlydHVhbCB+UUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbCgpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QgJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldEdlb21ldHJ5QW5kQ2xpcChjb25zdCBRUmVjdCYsIGNvbnN0IFFSZWN0Jiwg
Ym9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCk7CisgICAg
dmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYpIE9WRVJSSURFIHt9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFdpZGdldFBhcmVudChRT2JqZWN0KikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBRT2JqZWN0KiBoYW5kbGUoKSBjb25zdCBPVkVSUklERTsKK3ByaXZhdGU6CisgICAg
UUdyYXBoaWNzV2lkZ2V0ICptX2dyYXBoaWNzV2lkZ2V0OworfTsKKyNlbmRpZiAvLyAhZGVmaW5l
ZChRVF9OT19HUkFQSElDU1ZJRVcpCisjZW5kaWYgLy8gUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1w
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFt
ZUFkYXB0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVB
ZGFwdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTJlMWMxYTE5MDA5NDZjMGZkZTY5ZjlhNWNjY2IxYzI3
YmE5NTJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RV2ViRnJhbWVBZGFwdGVyLmNwcApAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIuaCIKKworI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUg
IlFXZWJQYWdlQWRhcHRlci5oIgorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRl
ICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2luY2x1ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5o
IgorI2VuZGlmCisKKyNpbmNsdWRlIDxRRmlsZUluZm8+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1
ZXN0PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIGlubGluZSBSZXNvdXJj
ZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZUxvYWRDb250cm9sVG9DYWNoZVBvbGljeSh1aW50IGNh
Y2hlTG9hZENvbnRyb2wpCit7CisgICAgc3dpdGNoIChjYWNoZUxvYWRDb250cm9sKSB7CisgICAg
Y2FzZSBRTmV0d29ya1JlcXVlc3Q6OkFsd2F5c05ldHdvcms6CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YTsKKyAgICBjYXNlIFFOZXR3b3JrUmVxdWVzdDo6
UHJlZmVyQ2FjaGU6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFFbHNl
TG9hZDsKKyAgICBjYXNlIFFOZXR3b3JrUmVxdWVzdDo6QWx3YXlzQ2FjaGU6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFEb250TG9hZDsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFdlYkNvcmU6OlVzZVByb3RvY29sQ2FjaGVQ
b2xpY3k7Cit9CisKK1FXZWJGcmFtZURhdGE6OlFXZWJGcmFtZURhdGEoV2ViQ29yZTo6UGFnZSog
cGFyZW50UGFnZSwgV2ViQ29yZTo6RnJhbWUqIHBhcmVudEZyYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRnJhbWVF
bGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYg
ZnJhbWVOYW1lKQorICAgIDogbmFtZShmcmFtZU5hbWUpCisgICAgLCBvd25lckVsZW1lbnQob3du
ZXJGcmFtZUVsZW1lbnQpCisgICAgLCBwYWdlKHBhcmVudFBhZ2UpCisgICAgLCBhbGxvd3NTY3Jv
bGxpbmcodHJ1ZSkKKyAgICAsIG1hcmdpbldpZHRoKDApCisgICAgLCBtYXJnaW5IZWlnaHQoMCkK
K3sKKyAgICBmcmFtZUxvYWRlckNsaWVudCA9IG5ldyBGcmFtZUxvYWRlckNsaWVudFF0KCk7Cisg
ICAgZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKHBhZ2UsIG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXJD
bGllbnQpOworCisgICAgLy8gRklYTUU6IEFsbCBvZiB0aGUgYmVsb3cgc2hvdWxkIHByb2JhYmx5
IGJlIG1vdmVkIG92ZXIgaW50byBXZWJDb3JlCisgICAgZnJhbWUtPnRyZWUoKS0+c2V0TmFtZShu
YW1lKTsKKyAgICBpZiAocGFyZW50RnJhbWUpCisgICAgICAgIHBhcmVudEZyYW1lLT50cmVlKCkt
PmFwcGVuZENoaWxkKGZyYW1lKTsKK30KKworUVdlYkZyYW1lQWRhcHRlcjo6UVdlYkZyYW1lQWRh
cHRlcigpCisgICAgOiBwYWdlQWRhcHRlcigwKQorICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUp
CisgICAgLCBtYXJnaW5XaWR0aCgtMSkKKyAgICAsIG1hcmdpbkhlaWdodCgtMSkKKyAgICAsIGZy
YW1lKDApCisgICAgLCBmcmFtZUxvYWRlckNsaWVudCgwKQoreworfQorCitRV2ViRnJhbWVBZGFw
dGVyOjp+UVdlYkZyYW1lQWRhcHRlcigpCit7CisgICAgaWYgKGZyYW1lTG9hZGVyQ2xpZW50KQor
ICAgICAgICBmcmFtZUxvYWRlckNsaWVudC0+bV93ZWJGcmFtZSA9IDA7Cit9CisKK3ZvaWQgUVdl
YkZyYW1lQWRhcHRlcjo6bG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBRQnl0ZUFycmF5JiBib2R5
KQoreworICAgIGlmIChmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgcGFnZUFkYXB0
ZXItPmluc2lkZU9wZW5DYWxsID0gdHJ1ZTsKKworICAgIFFVcmwgdXJsID0gZW5zdXJlQWJzb2x1
dGVVcmwocmVxLnVybCgpKTsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KHVybCk7CisKKyAgICBzd2l0Y2ggKG9wZXJhdGlvbikgeworICAgICAgICBjYXNlIFFOZXR3b3Jr
QWNjZXNzTWFuYWdlcjo6SGVhZE9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRU
UE1ldGhvZCgiSEVBRCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb246CisgICAgICAgICAgICByZXF1ZXN0LnNldEhU
VFBNZXRob2QoIkdFVCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyOjpQdXRPcGVyYXRpb246CisgICAgICAgICAgICByZXF1ZXN0LnNldEhU
VFBNZXRob2QoIlBVVCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyOjpQb3N0T3BlcmF0aW9uOgorICAgICAgICAgICAgcmVxdWVzdC5zZXRI
VFRQTWV0aG9kKCJQT1NUIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OkRlbGV0ZU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlcXVlc3Qu
c2V0SFRUUE1ldGhvZCgiREVMRVRFIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkN1c3RvbU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJl
cXVlc3Quc2V0SFRUUE1ldGhvZChyZXEuYXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6Q3VzdG9t
VmVyYkF0dHJpYnV0ZSkudG9CeXRlQXJyYXkoKS5jb25zdERhdGEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRp
b246CisgICAgICAgICAgICAvLyBlaD8KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IFFWYXJpYW50IGNhY2hlTG9hZCA9IHJlcS5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpDYWNo
ZUxvYWRDb250cm9sQXR0cmlidXRlKTsKKyAgICBpZiAoY2FjaGVMb2FkLmlzVmFsaWQoKSkgewor
ICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IGNhY2hlTG9hZFZhbHVlID0gY2FjaGVMb2Fk
LnRvVUludCgmb2spOworICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXF1ZXN0LnNldENh
Y2hlUG9saWN5KGNhY2hlTG9hZENvbnRyb2xUb0NhY2hlUG9saWN5KGNhY2hlTG9hZFZhbHVlKSk7
CisgICAgfQorCisgICAgUUxpc3Q8UUJ5dGVBcnJheT4gaHR0cEhlYWRlcnMgPSByZXEucmF3SGVh
ZGVyTGlzdCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaHR0cEhlYWRlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgUUJ5dGVBcnJheSAmaGVhZGVyTmFtZSA9IGh0dHBIZWFkZXJz
LmF0KGkpOworICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9t
TGF0aW4xKGhlYWRlck5hbWUpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKHJlcS5yYXdIZWFkZXIoaGVh
ZGVyTmFtZSkpKTsKKyAgICB9CisKKyAgICBpZiAoIWJvZHkuaXNFbXB0eSgpKQorICAgICAgICBy
ZXF1ZXN0LnNldEhUVFBCb2R5KFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUoYm9keS5jb25zdERh
dGEoKSwgYm9keS5zaXplKCkpKTsKKworICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0
LCBmYWxzZSk7CisKKyAgICBpZiAoZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAgICAgIHBh
Z2VBZGFwdGVyLT5pbnNpZGVPcGVuQ2FsbCA9IGZhbHNlOworfQorCitRV2ViRnJhbWVBZGFwdGVy
ICpRV2ViRnJhbWVBZGFwdGVyOjpjcmVhdGVGcmFtZShRV2ViRnJhbWVEYXRhICpkYXRhKQorewor
ICAgIFFXZWJGcmFtZUFkYXB0ZXIqIG5ld0ZyYW1lID0gY3JlYXRlV2ViRnJhbWUodGhpcyk7Cisg
ICAgbmV3RnJhbWUtPnBhZ2VBZGFwdGVyID0gcGFnZUFkYXB0ZXI7CisgICAgbmV3RnJhbWUtPmlu
aXQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ZyYW1lOworfQorCisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQordm9pZCBRV2ViRnJhbWVBZGFwdGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoUUdlc3R1
cmVFdmVudEZhY2FkZSogZ2VzdHVyZUV2ZW50KQoreworICAgIEFTU0VSVChoYXNWaWV3KCkpOwor
ICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBRdDo6VGFwR2VzdHVy
ZToKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoY29u
dmVydEdlc3R1cmUoZ2VzdHVyZUV2ZW50KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUXQ6
OlRhcEFuZEhvbGRHZXN0dXJlOgorICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRD
b250ZXh0TWVudUV2ZW50Rm9yR2VzdHVyZShjb252ZXJ0R2VzdHVyZShnZXN0dXJlRXZlbnQpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorI2VuZGlmCisKK1dlYkNvcmU6OkludFNpemUgUVdlYkZyYW1lQWRhcHRl
cjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGlmICghaGFzVmlldygpKQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOworICAgIHJldHVybiBmcmFtZS0+dmlldygpLT5zY3JvbGxPZmZz
ZXQoKTsKK30KKworSW50UmVjdCBRV2ViRnJhbWVBZGFwdGVyOjpmcmFtZVJlY3QoKSBjb25zdAor
eworICAgIGlmICghaGFzVmlldygpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJl
dHVybiBmcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKTsKK30KKwordm9pZCBRV2ViRnJhbWVBZGFw
dGVyOjppbml0KFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSkKK3sKKyAgICBhbGxvd3NTY3JvbGxp
bmcgPSBmcmFtZURhdGEtPmFsbG93c1Njcm9sbGluZzsKKyAgICBtYXJnaW5XaWR0aCA9IGZyYW1l
RGF0YS0+bWFyZ2luV2lkdGg7CisgICAgbWFyZ2luSGVpZ2h0ID0gZnJhbWVEYXRhLT5tYXJnaW5I
ZWlnaHQ7CisgICAgZnJhbWUgPSBmcmFtZURhdGEtPmZyYW1lLmdldCgpOworICAgIGZyYW1lTG9h
ZGVyQ2xpZW50ID0gZnJhbWVEYXRhLT5mcmFtZUxvYWRlckNsaWVudDsKKyAgICBmcmFtZUxvYWRl
ckNsaWVudC0+c2V0RnJhbWUodGhpcywgZnJhbWUpOworCisgICAgZnJhbWUtPmluaXQoKTsKK30K
KworUVdlYkZyYW1lQWRhcHRlciAqUVdlYkZyYW1lQWRhcHRlcjo6a2l0KGNvbnN0IEZyYW1lKiBm
cmFtZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+KGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT53ZWJGcmFtZSgpOworfQorCitRVXJsIFFXZWJGcmFt
ZUFkYXB0ZXI6OmVuc3VyZUFic29sdXRlVXJsKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBpZiAo
IXVybC5pc1ZhbGlkKCkgfHwgIXVybC5pc1JlbGF0aXZlKCkpCisgICAgICAgIHJldHVybiB1cmw7
CisKKyAgICAvLyBUaGlzIGNvbnRhaW5zIHRoZSBVUkwgd2l0aCBhYnNvbHV0ZSBwYXRoIGJ1dCB3
aXRob3V0CisgICAgLy8gdGhlIHF1ZXJ5IGFuZCB0aGUgZnJhZ21lbnQgcGFydC4KKyAgICBRVXJs
IGJhc2VVcmwgPSBRVXJsOjpmcm9tTG9jYWxGaWxlKFFGaWxlSW5mbyh1cmwudG9Mb2NhbEZpbGUo
KSkuYWJzb2x1dGVGaWxlUGF0aCgpKTsKKworICAgIC8vIFRoZSBwYXRoIGlzIHJlbW92ZWQgc28g
dGhlIHF1ZXJ5IGFuZCB0aGUgZnJhZ21lbnQgcGFydHMgYXJlIHRoZXJlLgorICAgIFFTdHJpbmcg
cGF0aFJlbW92ZWQgPSB1cmwudG9TdHJpbmcoUVVybDo6UmVtb3ZlUGF0aCk7CisgICAgUVVybCB0
b1Jlc29sdmUocGF0aFJlbW92ZWQpOworCisgICAgcmV0dXJuIGJhc2VVcmwucmVzb2x2ZWQodG9S
ZXNvbHZlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UVdlYkZyYW1lQWRhcHRlci5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2Vi
RnJhbWVBZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY3NjEyYzI5ZTI2NDU3ODcwZGQ0ZGM0NDIzMGEw
YTUwY2QyM2I5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lm
bmRlZiBRV2ViRnJhbWVBZGFwdGVyX2gKKyNkZWZpbmUgUVdlYkZyYW1lQWRhcHRlcl9oCisKKyNp
bmNsdWRlIDxGcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8SW50
U2l6ZS5oPgorI2luY2x1ZGUgPEtVUkwuaD4KKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1FdmVudC5oIgorCisjaW5jbHVkZSA8UVNpemU+CisjaW5j
bHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBGcmFtZTsKK30KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnQ7CitRVF9FTkRf
TkFNRVNQQUNFCisKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitjbGFzcyBRR2VzdHVyZUV2
ZW50RmFjYWRlOworI2VuZGlmCitjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBRV2ViUGFnZUFkYXB0
ZXI7CisKK2NsYXNzIFFXZWJGcmFtZURhdGEgeworcHVibGljOgorICAgIFFXZWJGcmFtZURhdGEo
V2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRGcmFtZSA9IDAsCisgICAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqID0gMCwKKyAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBmcmFtZU5hbWUgPSBXVEY6OlN0cmluZygpKTsK
KworICAgIFdlYkNvcmU6OktVUkwgdXJsOworICAgIFdURjo6U3RyaW5nIG5hbWU7CisgICAgV2Vi
Q29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQ7CisgICAgV2ViQ29yZTo6
UGFnZSogcGFnZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGZyYW1lOworICAgIFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQqIGZyYW1lTG9hZGVyQ2xpZW50OworCisgICAgV1RGOjpT
dHJpbmcgcmVmZXJyZXI7CisgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmc7CisgICAgaW50IG1hcmdp
bldpZHRoOworICAgIGludCBtYXJnaW5IZWlnaHQ7Cit9OworCitjbGFzcyBRV2ViRnJhbWVBZGFw
dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUVVybCBlbnN1cmVBYnNvbHV0ZVVybChjb25zdCBR
VXJsJiB1cmwpOworCisgICAgUVdlYkZyYW1lQWRhcHRlcigpOworICAgIHZpcnR1YWwgflFXZWJG
cmFtZUFkYXB0ZXIoKTsKKworICAgIHZpcnR1YWwgUVdlYkZyYW1lKiBhcGlIYW5kbGUoKSA9IDA7
CisgICAgdmlydHVhbCBRT2JqZWN0KiBoYW5kbGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRzU2l6ZURpZENoYW5nZShjb25zdCBRU2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIGludCBz
Y3JvbGxCYXJQb2xpY3koUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGVtaXRVcmxDaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFByb3Zp
c2lvbmFsTG9hZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3Qo
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVByb2dyZXNzRmluaXNoZWQoUVBvaW50Kikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0SW5pdGlhbExheW91dENvbXBsZXRlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZW1pdEljb25DaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBlbWl0TG9hZFN0YXJ0ZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZW1pdExvYWRGaW5pc2hlZChib29sIG9yaWdpbmF0aW5nTG9hZCwgYm9vbCBvaykgPSAw
OworICAgIHZpcnR1YWwgUVdlYkZyYW1lQWRhcHRlciogY3JlYXRlV2ViRnJhbWUoUVdlYkZyYW1l
QWRhcHRlciopID0gMDsKKworICAgIHZvaWQgbG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJl
cSwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uID0gUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb24sIGNvbnN0IFFCeXRlQXJyYXkmIGJvZHkgPSBRQnl0
ZUFycmF5KCkpOworICAgIGlubGluZSBib29sIGhhc1ZpZXcoKSBjb25zdCB7IHJldHVybiBmcmFt
ZSAmJiBmcmFtZS0+dmlldygpOyB9CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHZv
aWQgaGFuZGxlR2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZlbnRGYWNhZGUqKTsKKyNlbmRpZgorICAg
IFFXZWJGcmFtZUFkYXB0ZXIqIGNyZWF0ZUZyYW1lKFFXZWJGcmFtZURhdGEgKmRhdGEpOworCisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIFdlYkNvcmU6
OkludFJlY3QgZnJhbWVSZWN0KCkgY29uc3Q7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlQWRh
cHRlcjsKKworLy9wcm90ZWN0ZWQ6CisgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmc7CisgICAgaW50
IG1hcmdpbldpZHRoOworICAgIGludCBtYXJnaW5IZWlnaHQ7CisKKy8vcHJpdmF0ZToKKyAgICB2
b2lkIGluaXQoUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKTsKKworICAgIFdlYkNvcmU6OkZyYW1l
ICpmcmFtZTsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0ICpmcmFtZUxvYWRlckNs
aWVudDsKKyAgICBXZWJDb3JlOjpLVVJMIHVybDsKKworICAgIHN0YXRpYyBRV2ViRnJhbWVBZGFw
dGVyKiBraXQoY29uc3QgV2ViQ29yZTo6RnJhbWUqKTsKKworLy8gICAgZnJpZW5kIGNsYXNzIENo
cm9tZUNsaWVudFF0OworfTsKKworI2VuZGlmIC8vIFFXZWJGcmFtZUFkYXB0ZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcxNmU0ZmZmM2NlYzQyMDJkNzU1MjMwMDhhNjcwYzk0OTQyODJlMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJQYWdlQWRh
cHRlci5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGln
aWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisjaW5jbHVkZSAi
VW5kb1N0ZXBRdC5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIi4uL0FwaS9xd2Vic2V0dGluZ3MuaCIKKworI2luY2x1ZGUgPFBhZ2UuaD4KKworI2lu
Y2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2Jvb2wgUVdlYlBhZ2VBZGFwdGVyOjpkcnRSdW4gPSBmYWxzZTsKKworUVdlYlBhZ2VBZGFw
dGVyOjpRV2ViUGFnZUFkYXB0ZXIoKQorICAgIDogc2V0dGluZ3MoMCkKKyAgICAsIHBhZ2UoMCkK
KyAgICAsIHBsdWdpbkZhY3RvcnkoMCkKKyAgICAsIGZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQo
ZmFsc2UpCisgICAgLCBpbnNpZGVPcGVuQ2FsbChmYWxzZSkKKyAgICAsIG5ldHdvcmtNYW5hZ2Vy
KDApCit7Cit9CisKK1FXZWJQYWdlQWRhcHRlcjo6flFXZWJQYWdlQWRhcHRlcigpCit7CisgICAg
ZGVsZXRlIHBhZ2U7CisgICAgZGVsZXRlIHNldHRpbmdzOworCisjaWYgRU5BQkxFKE5PVElGSUNB
VElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAgICBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnJlbW92ZUNsaWVudCgp
OworI2VuZGlmCit9CisKK3ZvaWQgUVdlYlBhZ2VBZGFwdGVyOjppbml0KFBhZ2UqIHBhZ2UpCit7
CisgICAgdGhpcy0+cGFnZSA9IHBhZ2U7CisgICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdz
KHBhZ2UtPnNldHRpbmdzKCkpOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJM
RShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAgICBXZWJDb3JlOjpwcm92aWRlTm90aWZpY2F0aW9u
KHBhZ2UsIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50
ZXIoKSk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZUFkYXB0ZXI6OmRlbGV0ZVBhZ2UoKQor
eworICAgIGRlbGV0ZSBwYWdlOworICAgIHBhZ2UgPSAwOworfQorCitRV2ViUGFnZUFkYXB0ZXIq
IFFXZWJQYWdlQWRhcHRlcjo6a2l0KFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENocm9tZUNsaWVudFF0Kj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdl
OworfQorCitWaWV3cG9ydEFyZ3VtZW50cyBRV2ViUGFnZUFkYXB0ZXI6OnZpZXdwb3J0QXJndW1l
bnRzKCkKK3sKKyAgICAgICAgcmV0dXJuIHBhZ2UgPyBwYWdlLT52aWV3cG9ydEFyZ3VtZW50cygp
IDogV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMoKTsKK30KKworCit2b2lkIFFXZWJQYWdlQWRh
cHRlcjo6cmVnaXN0ZXJVbmRvU3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+
IHN0ZXApCit7CisgICAgY3JlYXRlVW5kb1N0ZXAoUVNoYXJlZFBvaW50ZXI8VW5kb1N0ZXBRdD4o
bmV3IFVuZG9TdGVwUXQoc3RlcCkpKTsKK30KKwordm9pZCBRV2ViUGFnZUFkYXB0ZXI6OnNldE5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdlcikKK3sKKyAg
ICBpZiAobWFuYWdlciA9PSBuZXR3b3JrTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChuZXR3b3JrTWFuYWdlciAmJiBuZXR3b3JrTWFuYWdlci0+cGFyZW50KCkgPT0gaGFuZGxlKCkp
CisgICAgICAgIGRlbGV0ZSBuZXR3b3JrTWFuYWdlcjsKKyAgICBuZXR3b3JrTWFuYWdlciA9IG1h
bmFnZXI7Cit9CisKK1FOZXR3b3JrQWNjZXNzTWFuYWdlciAqUVdlYlBhZ2VBZGFwdGVyOjpuZXR3
b3JrQWNjZXNzTWFuYWdlcigpCit7CisgICAgaWYgKCFuZXR3b3JrTWFuYWdlcikKKyAgICAgICAg
bmV0d29ya01hbmFnZXIgPSBuZXcgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKGhhbmRsZSgpKTsKKyAg
ICByZXR1cm4gbmV0d29ya01hbmFnZXI7Cit9CisKK3ZvaWQgUVdlYlBhZ2VBZGFwdGVyOjppbml0
RnJhbWUoUVdlYkZyYW1lQWRhcHRlciAqZnJhbWUpCit7CisgICAgUVdlYkZyYW1lRGF0YSBmcmFt
ZURhdGEocGFnZSk7CisgICAgZnJhbWUtPmluaXQoJmZyYW1lRGF0YSk7CisKKyAgICBpZiAoIWZy
YW1lRGF0YS51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KGZyYW1lRGF0YS51cmwsIGZyYW1lRGF0YS5yZWZlcnJlcik7CisgICAgICAgIGZy
YW1lLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgZnJhbWVEYXRhLm5hbWUsIGZhbHNl
KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1FXZWJQYWdlQWRhcHRlci5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2Vi
UGFnZUFkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzlhODE2OTQ5ZmZlOGNkNmI1NjFjNWIwYzM1YmQy
MjJlNDA4Y2VkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9RV2ViUGFnZUFkYXB0ZXIuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5k
ZWYgUVdlYlBhZ2VBZGFwdGVyX2gKKyNkZWZpbmUgUVdlYlBhZ2VBZGFwdGVyX2gKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8cW5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8
cXJlY3QuaD4KKyNpbmNsdWRlIDxxc2NvcGVkcG9pbnRlci5oPgorI2luY2x1ZGUgPHFzaGFyZWRw
b2ludGVyLmg+CisjaW5jbHVkZSA8cXN0cmluZy5oPgorI2luY2x1ZGUgPHF1cmwuaD4KKworI2lu
Y2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIK
KworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRS2V5RXZlbnQ7CitjbGFzcyBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFBhZ2U7CitjbGFzcyBDaHJvbWVDbGllbnRRdDsKK2NsYXNzIEdlb2xvY2F0aW9uQ2xpZW50
UXQ7CitjbGFzcyBVbmRvU3RlcDsKK30KKworY2xhc3MgUXRQbHVnaW5XaWRnZXRBZGFwdGVyOwor
Y2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKK2NsYXNzIFFXZWJIaXN0b3J5SXRlbTsKK2NsYXNzIFFX
ZWJQYWdlQ2xpZW50OworY2xhc3MgUVdlYlBsdWdpbkZhY3Rvcnk7CitjbGFzcyBRV2ViU2VjdXJp
dHlPcmlnaW47CitjbGFzcyBRV2ViU2VsZWN0TWV0aG9kOworY2xhc3MgUVdlYlNldHRpbmdzOwor
Y2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI7CitjbGFzcyBVbmRvU3RlcFF0OworCisK
K2NsYXNzIFFXZWJQYWdlQWRhcHRlciB7CitwdWJsaWM6CisgICAgUVdlYlBhZ2VBZGFwdGVyKCk7
CisgICAgdmlydHVhbCB+UVdlYlBhZ2VBZGFwdGVyKCk7CisKKyAgICB2b2lkIGluaXQoV2ViQ29y
ZTo6UGFnZSogcGFnZSk7CisgICAgLy8gQ2FsbGVkIG1hbnVhbGx5IGZyb20gflFXZWJQYWdlIGRl
c3RydWN0b3IgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGUgUVdlYlBhZ2VBZGFwdGVyIGFuZCB0
aGUgUVdlYlBhZ2VQcml2YXRlIGFyZSBpbnRhY3Qgd2hlbgorICAgIC8vIHZhcmlvdXMgZGVzdHJ1
Y3Rpb24gY2FsbGJhY2tzIGZyb20gV2ViQ29yZTo6UGFnZTo6flBhZ2UoKSBoaXQgdXMuCisgICAg
dm9pZCBkZWxldGVQYWdlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdygpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgUVJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCBRU2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBR
V2ViUGFnZUFkYXB0ZXIqIGNyZWF0ZVdpbmRvdyhib29sIC8qZGlhbG9nKi8pID0gMDsKKyAgICB2
aXJ0dWFsIFFPYmplY3QqIGhhbmRsZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgamF2YVNjcmlw
dENvbnNvbGVNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBRU3RyaW5nJiBzb3VyY2VJRCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0
QWxlcnQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBqYXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWVBZGFwdGVyKiBmcmFt
ZSwgY29uc3QgUVN0cmluZyYgbXNnKSA9IDA7CisgICAgdmlydHVhbCBib29sIGphdmFTY3JpcHRQ
cm9tcHQoUVdlYkZyYW1lQWRhcHRlciAqZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZywgY29uc3Qg
UVN0cmluZyYgZGVmYXVsdFZhbHVlLCBRU3RyaW5nKiByZXN1bHQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1l
LCBjb25zdCBRU3RyaW5nJiBkYXRhYmFzZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bGljYXRpb25DYWNoZVF1b3RhRXhjZWVkZWQoUVdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHF1
aW50NjQgZGVmYXVsdE9yaWdpblF1b3RhLCBxdWludDY0IHRvdGFsU3BhY2VOZWVkZWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBRU3RyaW5nJikgPSAwOworICAgIHZp
cnR1YWwgUVN0cmluZ0xpc3QgY2hvb3NlRmlsZXMoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUsIGJv
b2wgYWxsb3dNdWx0aXBsZSwgY29uc3QgUVN0cmluZ0xpc3QmIHN1Z2dlc3RlZEZpbGVOYW1lcykg
PSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGNvbG9yU2VsZWN0aW9uUmVxdWVzdGVkKGNvbnN0IFFD
b2xvciYgc2VsZWN0ZWRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgUVdlYlNlbGVjdE1ldGhvZCog
Y3JlYXRlU2VsZWN0UG9wdXAoKSA9IDA7CisgICAgdmlydHVhbCBRUmVjdCB2aWV3UmVjdFJlbGF0
aXZlVG9XaW5kb3coKSA9IDA7CisKKyNpZiBVU0UoUVRfTVVMVElNRURJQSkKKyAgICB2aXJ0dWFs
IFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KCkgPSAwOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsbGVkKFFXZWJGcmFtZUFkYXB0ZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdGVkKFFXZWJGcmFt
ZUFkYXB0ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbnNQZXJtaXNzaW9u
UmVxdWVzdENhbmNlbGxlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWljcm9Gb2N1
c0NoYW5nZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyaWdnZXJDb3B5QWN0aW9uKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB0cmlnZ2VyQWN0aW9uRm9yS2V5RXZlbnQoUUtleUV2ZW50Kikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9TdGFjaygpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuVW5kbygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5kbygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVkbygpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGVkaXRvckNvbW1hbmRGb3JLZXlF
dmVudChRS2V5RXZlbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVuZG9TdGVwKFFT
aGFyZWRQb2ludGVyPFVuZG9TdGVwUXQ+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
TmF2aWdhdGlvbkFjdGlvbnMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIFFXZWJGcmFtZUFkYXB0ZXIq
IG1haW5GcmFtZUFkYXB0ZXIoKSA9IDA7CisKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGluc3BlY3Rv
ckhhbmRsZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmQoUU9i
amVjdCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdG9yV2luZG93VGl0bGUoY29u
c3QgUVN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV2ViSW5zcGVjdG9yKFFP
YmplY3QqKiBpbnNwZWN0b3JWaWV3LCBRV2ViUGFnZUFkYXB0ZXIqKiBpbnNwZWN0b3JQYWdlKSA9
IDA7CisgICAgdmlydHVhbCBRU3RyaW5nTGlzdCBtZW51QWN0aW9uc0FzVGV4dCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW1pdFZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBhY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWVBZGFwdGVyICpmcmFt
ZSwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBpbnQgdHlwZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBlbWl0UmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRl
ciAqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChR
V2ViRnJhbWVBZGFwdGVyICosIFFXZWJIaXN0b3J5SXRlbSopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW1pdERvd25sb2FkUmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW1pdEZyYW1lQ3JlYXRlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOwor
ICAgIHZpcnR1YWwgUVN0cmluZyB1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFcnJvclBhZ2VFeHRlbnNpb24oKSBjb25zdCA9
IDA7CisgICAgc3RydWN0IEVycm9yUGFnZU9wdGlvbiB7CisgICAgICAgIFFVcmwgdXJsOworICAg
ICAgICBRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZTsKKyAgICAgICAgUVN0cmluZyBkb21haW47Cisg
ICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgUVN0cmluZyBlcnJvclN0cmluZzsKKyAgICB9Owor
ICAgIHN0cnVjdCBFcnJvclBhZ2VSZXR1cm4geworICAgICAgICBRU3RyaW5nIGNvbnRlbnRUeXBl
OworICAgICAgICBRU3RyaW5nIGVuY29kaW5nOworICAgICAgICBRVXJsIGJhc2VVcmw7CisgICAg
ICAgIFFCeXRlQXJyYXkgY29udGVudDsKKyAgICB9OworICAgIHZpcnR1YWwgYm9vbCBlcnJvclBh
Z2VFeHRlbnNpb24oRXJyb3JQYWdlT3B0aW9uKiwgRXJyb3JQYWdlUmV0dXJuKikgPSAwOworICAg
IHZpcnR1YWwgUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiBjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmlu
ZyYsIGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0Jikg
PSAwOworICAgIHZpcnR1YWwgUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiBhZGFwdGVyRm9yV2lkZ2V0
KFFPYmplY3QqKSBjb25zdCA9IDA7CisKKworICAgIHN0YXRpYyBRV2ViUGFnZUFkYXB0ZXIqIGtp
dChXZWJDb3JlOjpQYWdlKik7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3Bv
cnRBcmd1bWVudHMoKTsKKyAgICB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OlVuZG9TdGVwPik7CisgICAgdm9pZCBpbml0RnJhbWUoUVdlYkZyYW1lQWRhcHRl
ciopOworCisgICAgdm9pZCBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01h
bmFnZXIqIG1hbmFnZXIpOworICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vz
c01hbmFnZXIoKTsKKworICAgIFFXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisKKyAgICBXZWJDb3Jl
OjpQYWdlICpwYWdlOworICAgIFFTY29wZWRQb2ludGVyPFFXZWJQYWdlQ2xpZW50PiBjbGllbnQ7
CisKKyAgICBRV2ViUGx1Z2luRmFjdG9yeSAqcGx1Z2luRmFjdG9yeTsKKworICAgIGJvb2wgZm9y
d2FyZFVuc3VwcG9ydGVkQ29udGVudDsKKyAgICBib29sIGluc2lkZU9wZW5DYWxsOworCitwcml2
YXRlOgorICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya01hbmFnZXI7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBkcnRSdW47CisKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6
Q2hyb21lQ2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xp
ZW50UXQ7Cit9OworCisjZW5kaWYgLy8gUVdlYlBhZ2VBZGFwdGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44ZDhiY2EwNjkzNjc2NjhlZDcwMjIxNjcwNzYwNDVlMjUzZGM3ZjlmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViVW5kb0NvbW1hbmQuY3Bw
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaW5jbHVkZSAiUVdlYlVuZG9Db21tYW5kLmgi
CisjaW5jbHVkZSAiVW5kb1N0ZXBRdC5oIgorCisjaWZuZGVmIFFUX05PX1VORE9DT01NQU5ECitR
V2ViVW5kb0NvbW1hbmQ6OlFXZWJVbmRvQ29tbWFuZChRU2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0
PiB1bmRvU3RlcCwgUVVuZG9Db21tYW5kKiBwYXJlbnQpCisgICAgOiBRVW5kb0NvbW1hbmQocGFy
ZW50KQorICAgICwgbV9zdGVwKHVuZG9TdGVwKQoreworICAgIFFfQVNTRVJUKHVuZG9TdGVwKTsK
KyAgICBzZXRUZXh0KG1fc3RlcC0+dGV4dCgpKTsKK30KKwordm9pZCBRV2ViVW5kb0NvbW1hbmQ6
OnVuZG8oKQoreworICAgIG1fc3RlcC0+dW5kbygpOworfQorCit2b2lkIFFXZWJVbmRvQ29tbWFu
ZDo6cmVkbygpCit7CisgICAgbV9zdGVwLT5yZWRvKCk7Cit9CisKKyNlbmRpZiAvLyBRVF9OT19V
TkRPQ09NTUFORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
V2ViVW5kb0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVu
ZG9Db21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJhODUyZmMxZTM3OTllZDI5NWRiMzVjMWY1NjQ4NzRl
MWMwZGEyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUVdlYlVuZG9Db21tYW5kLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYg
UVdlYlVuZG9Db21tYW5kX2gKKyNkZWZpbmUgUVdlYlVuZG9Db21tYW5kX2gKKworI2luY2x1ZGUg
PHFzaGFyZWRwb2ludGVyLmg+CisjaW5jbHVkZSA8cXVuZG9zdGFjay5oPgorCitjbGFzcyBVbmRv
U3RlcFF0OworCisjaWZuZGVmIFFUX05PX1VORE9DT01NQU5ECisKK2NsYXNzIFFXZWJVbmRvQ29t
bWFuZCA6IHB1YmxpYyBRVW5kb0NvbW1hbmQKK3sKK3B1YmxpYzoKKyAgICBRV2ViVW5kb0NvbW1h
bmQoUVNoYXJlZFBvaW50ZXI8VW5kb1N0ZXBRdD4gdW5kb1N0ZXAsIFFVbmRvQ29tbWFuZCAqcGFy
ZW50ID0gMCk7CisKKyAgICB2b2lkIHVuZG8oKTsKKyAgICB2b2lkIHJlZG8oKTsKKworcHJpdmF0
ZToKKyAgICBRU2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0PiBtX3N0ZXA7Cit9OworCisjZW5kaWYg
Ly8gUVRfTk9fVU5ET0NPTU1BTkQKKworI2VuZGlmIC8vIFFXZWJVbmRvQ29tbWFuZF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5JbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg5ZDMyNTZlMmFkNWY4MjY0MGFlYTk3MzQ0ZWQ0Mjc0OGI0NjdkZmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRn
ZXRQbHVnaW5JbXBsLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
UVdpZGdldFBsdWdpbkltcGwuaCIKKworI2luY2x1ZGUgPFFXaWRnZXQ+CisKK1FXaWRnZXRQbHVn
aW5JbXBsOjp+UVdpZGdldFBsdWdpbkltcGwoKQoreworICAgICAgICBtX3dpZGdldC0+ZGVsZXRl
TGF0ZXIoKTsKK30KKwordm9pZCBRV2lkZ2V0UGx1Z2luSW1wbDo6dXBkYXRlKGNvbnN0IFFSZWN0
ICZyZWN0KQoreworICAgIG1fd2lkZ2V0LT51cGRhdGUocmVjdCk7Cit9CisKK3ZvaWQgUVdpZGdl
dFBsdWdpbkltcGw6OnNldEdlb21ldHJ5QW5kQ2xpcChjb25zdCBRUmVjdCAmZ2VvbWV0cnksIGNv
bnN0IFFSZWN0ICZjbGlwUmVjdCwgYm9vbCBpc1Zpc2libGUpCit7CisgICAgbV93aWRnZXQtPnNl
dEdlb21ldHJ5KGdlb21ldHJ5KTsKKyAgICBpZiAoIWNsaXBSZWN0LmlzTnVsbCgpKSB7CisgICAg
ICAgIFFSZWN0IGNsaXAoY2xpcFJlY3QuaW50ZXJzZWN0ZWQobV93aWRnZXQtPnJlY3QoKSkpOwor
ICAgICAgICBtX3dpZGdldC0+c2V0TWFzayhRUmVnaW9uKGNsaXApKTsKKyAgICB9CisgICAgbV93
aWRnZXQtPnVwZGF0ZSgpOworICAgIHNldFZpc2libGUoaXNWaXNpYmxlKTsKK30KKwordm9pZCBR
V2lkZ2V0UGx1Z2luSW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgLy8gSWYg
c2V0TWFzayBpcyBzZXQgd2l0aCBhbiBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCisg
ICAgLy8gYmUgcGVyZm9ybWVkLCBzbyBpbiB0aGF0IGNhc2Ugd2UgaGlkZSB0aGUgcGxhdGZvcm1X
aWRnZXQuCisgICAgUVJlZ2lvbiBtYXNrID0gbV93aWRnZXQtPm1hc2soKTsKKyAgICBtX3dpZGdl
dC0+c2V0VmlzaWJsZSh2aXNpYmxlICYmICFtYXNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgUVdp
ZGdldFBsdWdpbkltcGw6OnNldFN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyAmc3R5bGVzaGVldCkK
K3sKKyAgICBtX3dpZGdldC0+c2V0U3R5bGVTaGVldChzdHlsZXNoZWV0KTsKK30KKwordm9pZCBR
V2lkZ2V0UGx1Z2luSW1wbDo6c2V0V2lkZ2V0UGFyZW50KFFPYmplY3QgKnBhcmVudCkKK3sKKyAg
ICBpZiAoIXBhcmVudC0+aXNXaWRnZXRUeXBlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dp
ZGdldC0+c2V0UGFyZW50KHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ocGFyZW50KSk7Cit9CisKK1FP
YmplY3QgKlFXaWRnZXRQbHVnaW5JbXBsOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3dpZGdldDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UVdpZGdldFBsdWdpbkltcGwuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdp
ZGdldFBsdWdpbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDNkODI2YWEzNjNjNDRlOTBlNzY0NDg1MmVj
N2Q0OWExNWM1MzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RV2lkZ2V0UGx1Z2luSW1wbC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisj
aWZuZGVmIFFXaWRnZXRQbHVnaW5JbXBsX2gKKyNkZWZpbmUgUVdpZGdldFBsdWdpbkltcGxfaAor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgi
CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVdpZGdldDsKK1FUX0VORF9OQU1FU1BBQ0UK
KworY2xhc3MgUVdpZGdldFBsdWdpbkltcGwgOiBwdWJsaWMgUXRQbHVnaW5XaWRnZXRBZGFwdGVy
IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXaWRnZXRQbHVnaW5JbXBsKFFXaWRnZXQg
KncpIDogbV93aWRnZXQodykge30KKyAgICB2aXJ0dWFsIH5RV2lkZ2V0UGx1Z2luSW1wbCgpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QgJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldEdlb21ldHJ5QW5kQ2xpcChjb25zdCBRUmVjdCYsIGNvbnN0IFFSZWN0Jiwg
Ym9vbCBpc1Zpc2libGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJv
b2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFFTdHJp
bmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0UGFyZW50KFFPYmplY3Qg
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRT2JqZWN0KiBoYW5kbGUoKSBjb25zdCBPVkVSUklE
RTsKK3ByaXZhdGU6CisgICAgUVdpZGdldCAqbV93aWRnZXQ7Cit9OworCisjZW5kaWYgLy9RV2lk
Z2V0UGx1Z2luSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5jcHAKaW5kZXggY2RjNmVlMGM5OTZkMDYzMjZkMTU1NzUx
ZGQ1ODk1OTVhZGU0NTI5Yi4uOGJmZmNmZTUyNTcxODRlMzcwMzAzMDcxNjEyNjY3ODlkNjZmNjZi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNr
V2ViUG9wdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxs
YmFja1dlYlBvcHVwLmNwcApAQCAtMjMsMTggKzIzLDE4IEBACiAKICNpZm5kZWYgUVRfTk9fQ09N
Qk9CT1gKIAotI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUXRXZWJDb21i
b0JveC5oIgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VB
ZGFwdGVyLmgiCiAjaW5jbHVkZSAicWdyYXBoaWNzd2Vidmlldy5oIgogI2luY2x1ZGUgPFFHcmFw
aGljc1Byb3h5V2lkZ2V0PgogI2luY2x1ZGUgPFF0R3VpL1FTdGFuZGFyZEl0ZW1Nb2RlbD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1RdEZhbGxiYWNrV2ViUG9wdXA6OlF0RmFsbGJhY2tXZWJQ
b3B1cChjb25zdCBDaHJvbWVDbGllbnRRdCogY2hyb21lQ2xpZW50KQorUXRGYWxsYmFja1dlYlBv
cHVwOjpRdEZhbGxiYWNrV2ViUG9wdXAoY29uc3QgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlKQogICAg
IDogbV9jb21ibygwKQotICAgICwgbV9jaHJvbWVDbGllbnQoY2hyb21lQ2xpZW50KQorICAgICwg
bV9wYWdlKHBhZ2UpCiB7CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBRdEZhbGxiYWNrV2Vi
UG9wdXA6OnNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCiAgICAgICAgIHByb3h5LT5z
ZXRXaWRnZXQobV9jb21ibyk7CiAgICAgICAgIHByb3h5LT5zZXRHZW9tZXRyeShyZWN0KTsKICAg
ICB9IGVsc2UgewotICAgICAgICBtX2NvbWJvLT5zZXRQYXJlbnQocGFnZUNsaWVudCgpLT5vd25l
cldpZGdldCgpKTsKKyAgICAgICAgbV9jb21iby0+c2V0UGFyZW50KHFvYmplY3RfY2FzdDxRV2lk
Z2V0Kj4ocGFnZUNsaWVudCgpLT5vd25lcldpZGdldCgpKSk7CiAgICAgICAgIG1fY29tYm8tPnNl
dEdlb21ldHJ5KFFSZWN0KHJlY3QubGVmdCgpLCByZWN0LnRvcCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgbV9jb21iby0+c2l6ZUhpbnQoKS5oZWlnaHQo
KSkpOwogICAgIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFF0RmFsbGJhY2tXZWJQb3B1cDo6
ZGVsZXRlQ29tYm9Cb3goKQogCiBRV2ViUGFnZUNsaWVudCogUXRGYWxsYmFja1dlYlBvcHVwOjpw
YWdlQ2xpZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jaHJvbWVDbGllbnQtPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOworICAgIHJldHVybiBtX3BhZ2UtPmNsaWVudC5kYXRhKCk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dl
YlBvcHVwLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQ
b3B1cC5oCmluZGV4IGY3NTMzNzNiZTQzNWRjOTNlOWM0ZGU2MGI0NzRkYjExOTQ4MzI0NGQuLjY5
YjQ5YmRiZjg4NTE4NmFmNTQ1ZjZlZGJhMzkwYzY1NzU1NWYwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuaApAQCAtMjMs
OCArMjMsNiBAQAogI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgogCi0jaW5jbHVkZSA8UUNvbWJvQm94PgotCiAjaWZuZGVmIFFUX05P
X0NPTUJPQk9YCiAKIFFUX0JFR0lOX05BTUVTUEFDRQpAQCAtMzIsMTYgKzMwLDE2IEBAIGNsYXNz
IFFHcmFwaGljc1Byb3h5V2lkZ2V0OwogUVRfRU5EX05BTUVTUEFDRQogCiBjbGFzcyBRV2ViUGFn
ZUNsaWVudDsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBDaHJvbWVDbGllbnRRdDsKIGNsYXNzIFF0V2ViQ29tYm9Cb3g7CiAKIGNsYXNzIFF0
RmFsbGJhY2tXZWJQb3B1cCA6IHB1YmxpYyBRV2ViU2VsZWN0TWV0aG9kIHsKICAgICBRX09CSkVD
VAogcHVibGljOgotICAgIFF0RmFsbGJhY2tXZWJQb3B1cChjb25zdCBDaHJvbWVDbGllbnRRdCop
OworICAgIFF0RmFsbGJhY2tXZWJQb3B1cChjb25zdCBRV2ViUGFnZUFkYXB0ZXIqKTsKICAgICB+
UXRGYWxsYmFja1dlYlBvcHVwKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBRV2Vi
U2VsZWN0RGF0YSYpOwpAQCAtNTksNyArNTcsNyBAQCBwcml2YXRlIFFfU0xPVFM6CiAKIHByaXZh
dGU6CiAgICAgUXRXZWJDb21ib0JveCogbV9jb21ibzsKLSAgICBjb25zdCBDaHJvbWVDbGllbnRR
dCogbV9jaHJvbWVDbGllbnQ7CisgICAgY29uc3QgUVdlYlBhZ2VBZGFwdGVyKiBtX3BhZ2U7CiAg
ICAgUVJlY3QgbV9nZW9tZXRyeTsKICAgICBRRm9udCBtX2ZvbnQ7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCmluZGV4IDdk
ODY4OGI5NTllY2M3YjNiMTBlYmM1OTAzZmJhY2Q0YjVjMmI0MWUuLjIzYjQwYjRhZTY1MWFiYmU1
YzdmZTNmZTEyMWY0ZDhkYjA2ZWM1NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKIAotI2luY2x1
ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0cGxh
dGZvcm1wbHVnaW4uaCIKIAogI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8
UURpcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbHVn
aW5XaWRnZXRBZGFwdGVyLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGx1
Z2luV2lkZ2V0QWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0ZTkzYzM0NzAwYWNkMjU4ODlkMzRjMjQx
OWZhOTM0MmFkOGU2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1F0UGx1Z2luV2lkZ2V0QWRhcHRlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisjaWZuZGVmIFF0UGx1Z2luV2lkZ2V0QWRhcHRlcl9oCisjZGVmaW5lIFF0UGx1Z2luV2lk
Z2V0QWRhcHRlcl9oCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFTdHJpbmc+Cisj
aW5jbHVkZSA8UVJlY3Q+CisKK2NsYXNzIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciA6IHB1YmxpYyBR
T2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
Y29uc3QgUVJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5QW5kQ2xpcChj
b25zdCBRUmVjdCYsIGNvbnN0IFFSZWN0JiwgYm9vbCBpc1Zpc2libGUgPSBmYWxzZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U3R5bGVTaGVldChjb25zdCBRU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRX
aWRnZXRQYXJlbnQoUU9iamVjdCopID0gMDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGhhbmRsZSgp
IGNvbnN0ID0gMDsKK307CisKKyNlbmRpZiAvLyBRdFBsdWdpbldpZGdldEFkYXB0ZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVu
dFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50
UXQuaAppbmRleCBiZjlkZWQ0NjU4ZDk0NTU2NTRhYWE3N2NkZjk0YzdhZTBmODM3YzlhLi5lYTZk
NGQzMTU2MjAwNDQ4YTUxNDgyZDBhMTBlN2M0ZDY0ZjIwNTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaApAQCAtMzEs
NyArMzEsNyBAQAogCiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgogI2luY2x1ZGUgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisj
aW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmNwcAppbmRleCAxNWRmMmVlNTAyYzYxZjFjMTQ4
ZGJjZTczMGE0MzkwOWQ2OTI2ZWRkLi4xN2VmYTY2NjlkYjg0Y2E0NmRjYmZjNzMwZTcyZDgxOWY2
OTM2OTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9T
dGVwUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVW5kb1N0ZXBR
dC5jcHAKQEAgLTE5LDEwICsxOSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVW5kb1N0ZXBRdC5oIgorI2luY2x1ZGUgPHFvYmplY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLSNpZm5kZWYgUVRfTk9fVU5ET0NPTU1BTkQKIHN0YXRpYyBRU3RyaW5nIHVu
ZG9OYW1lRm9yRWRpdEFjdGlvbihjb25zdCBFZGl0QWN0aW9uIGVkaXRBY3Rpb24pCiB7CiAgICAg
c3dpdGNoIChlZGl0QWN0aW9uKSB7CkBAIC0xMDYsMjYgKzEwNiwxOCBAQCBzdGF0aWMgUVN0cmlu
ZyB1bmRvTmFtZUZvckVkaXRBY3Rpb24oY29uc3QgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQogICAg
IHJldHVybiBRU3RyaW5nKCk7CiB9CiAKLVVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQ
dHI8VW5kb1N0ZXA+IHN0ZXAsIFFVbmRvQ29tbWFuZCAqcGFyZW50KQotICAgIDogUVVuZG9Db21t
YW5kKHBhcmVudCkKLSAgICAsIG1fc3RlcChzdGVwKQotICAgICwgbV9maXJzdCh0cnVlKQotewot
ICAgIHNldFRleHQodW5kb05hbWVGb3JFZGl0QWN0aW9uKHN0ZXAtPmVkaXRpbmdBY3Rpb24oKSkp
OwotfQotI2Vsc2UKIFVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+
IHN0ZXApCiAgICAgOiBtX3N0ZXAoc3RlcCkKICAgICAsIG1fZmlyc3QodHJ1ZSkKIHsKKyAgICBt
X3RleHQgPSB1bmRvTmFtZUZvckVkaXRBY3Rpb24oc3RlcC0+ZWRpdGluZ0FjdGlvbigpKTsKIH0K
LSNlbmRpZgorCiAKIFVuZG9TdGVwUXQ6On5VbmRvU3RlcFF0KCkKIHsKIH0KIAotCiB2b2lkIFVu
ZG9TdGVwUXQ6OnJlZG8oKQogewogICAgIGlmIChtX2ZpcnN0KSB7CkBAIC0xNDUsMyArMTM3LDkg
QEAgdm9pZCBVbmRvU3RlcFF0Ojp1bmRvKCkKIAogCiAvLyB2aW06IHRzPTQgc3c9NCBldAorCisK
K1FTdHJpbmcgVW5kb1N0ZXBRdDo6dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dDsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVW5kb1N0ZXBR
dC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgKaW5kZXgg
M2MxNDM0MDNhNzdkZjI4ZGI5MTRjMmNmMzg5ODQzZWU2M2UxMWMxZi4uMzQ2NzNlYTQ1ZWYxN2Qz
MWYwYjdjMTM4Y2FkOWRhYmM4ODFhYzliNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9VbmRvU3RlcFF0LmgKQEAgLTIwLDI5ICsyMCwyNSBAQAogI2lmbmRlZiBVbmRvU3Rl
cFF0X2gKICNkZWZpbmUgVW5kb1N0ZXBRdF9oCiAKLSNpbmNsdWRlIDxRVW5kb0NvbW1hbmQ+Cisj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8VW5kb1N0ZXAuaD4KKworI2luY2x1ZGUgPHFz
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLWNsYXNzIFVuZG9TdGVwUXQKLSNp
Zm5kZWYgUVRfTk9fVU5ET0NPTU1BTkQKLSAgICA6IHB1YmxpYyBRVW5kb0NvbW1hbmQKLSNlbmRp
ZgoteworY2xhc3MgVW5kb1N0ZXBRdCB7CiAgICAgcHVibGljOgotI2lmbmRlZiBRVF9OT19VTkRP
Q09NTUFORAotICAgICAgICBVbmRvU3RlcFF0KFdURjo6UmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVw
PiBzdGVwLCBRVW5kb0NvbW1hbmQgKnBhcmVudCA9IDApOwotI2Vsc2UKICAgICAgICAgVW5kb1N0
ZXBRdChXVEY6OlJlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4gc3RlcCk7Ci0jZW5kaWYKICAgICAg
ICAgflVuZG9TdGVwUXQoKTsKIAogICAgICAgICB2b2lkIHJlZG8oKTsKICAgICAgICAgdm9pZCB1
bmRvKCk7CisgICAgICAgIFFTdHJpbmcgdGV4dCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+IG1fc3RlcDsKICAgICAgICAgYm9v
bCBtX2ZpcnN0OworICAgICAgICBRU3RyaW5nIG1fdGV4dDsKIH07CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24u
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24u
Y3BwCmluZGV4IGQ2MTU5MjQxZTRmYzY0ZTk3Zjc1NzBiNWUwNDMyYWIzYzI0MzQ5MDMuLjQ0NDlj
MTU1NzBlZWRiM2E5ZThmZWU0OTY5NjAzMDRlNDFjMzhlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTI3
LDEzICsyNyw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Ub3VjaFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0j
aW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFHZXN0dXJlPgotI2luY2x1ZGUgPFFH
ZXN0dXJlRXZlbnQ+Ci0jaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgogI2luY2x1
ZGUgPFFUb3VjaEV2ZW50PgogI2luY2x1ZGUgPFFXaGVlbEV2ZW50PgotI2luY2x1ZGUgPFFXaWRn
ZXQ+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTUzLDU0ICs0OCwyOCBAQCBzdGF0aWMgdm9pZCBtb3VzZUV2ZW50TW9kaWZpZXJzRnJvbVF0
S2V5Ym9hcmRNb2RpZmllcnMoUXQ6OktleWJvYXJkTW9kaWZpZXJzIGtleQogCiBzdGF0aWMgdm9p
ZCBtb3VzZUV2ZW50VHlwZUFuZE1vdXNlQnV0dG9uRnJvbVFFdmVudChjb25zdCBRRXZlbnQqIGV2
ZW50LCBQbGF0Zm9ybUV2ZW50OjpUeXBlJiBtb3VzZUV2ZW50VHlwZSwgTW91c2VCdXR0b24mIG1v
dXNlQnV0dG9uKQogewotICAgIGVudW0geyBNb3VzZUV2ZW50LCBHcmFwaGljc1NjZW5lTW91c2VF
dmVudCB9IGZyYW1ld29ya01vdXNlRXZlbnRUeXBlOwogICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUo
KSkgewogICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrOgogICAgIGNhc2UgUUV2
ZW50OjpNb3VzZUJ1dHRvblByZXNzOgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9
IE1vdXNlRXZlbnQ7CiAgICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91
c2VQcmVzc2VkOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25S
ZWxlYXNlOgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IE1vdXNlRXZlbnQ7CiAg
ICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAgZnJhbWV3
b3JrTW91c2VFdmVudFR5cGUgPSBNb3VzZUV2ZW50OwotICAgICAgICBtb3VzZUV2ZW50VHlwZSA9
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2
ZW50OjpHcmFwaGljc1NjZW5lTW91c2VEb3VibGVDbGljazoKLSAgICBjYXNlIFFFdmVudDo6R3Jh
cGhpY3NTY2VuZU1vdXNlUHJlc3M6Ci0gICAgICAgIGZyYW1ld29ya01vdXNlRXZlbnRUeXBlID0g
R3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ7Ci0gICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZv
cm1FdmVudDo6TW91c2VQcmVzc2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFFdmVudDo6
R3JhcGhpY3NTY2VuZU1vdXNlUmVsZWFzZToKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVudFR5
cGUgPSBHcmFwaGljc1NjZW5lTW91c2VFdmVudDsKLSAgICAgICAgbW91c2VFdmVudFR5cGUgPSBQ
bGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFF
dmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlTW92ZToKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVu
dFR5cGUgPSBHcmFwaGljc1NjZW5lTW91c2VFdmVudDsKICAgICAgICAgbW91c2VFdmVudFR5cGUg
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgZnJhbWV3b3JrTW91c2VF
dmVudFR5cGUgPSBNb3VzZUV2ZW50OwogICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlTW92ZWQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFF0OjpNb3Vz
ZUJ1dHRvbnMgbW91c2VCdXR0b25zOwotICAgIHN3aXRjaCAoZnJhbWV3b3JrTW91c2VFdmVudFR5
cGUpIHsKLSAgICBjYXNlIE1vdXNlRXZlbnQ6IHsKLSAgICAgICAgY29uc3QgUU1vdXNlRXZlbnQq
IG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBRTW91c2VFdmVudCo+KGV2ZW50KTsKLSAg
ICAgICAgbW91c2VCdXR0b25zID0gbW91c2VFdmVudFR5cGUgPT0gUGxhdGZvcm1FdmVudDo6TW91
c2VNb3ZlZCA/IG1vdXNlRXZlbnQtPmJ1dHRvbnMoKSA6IG1vdXNlRXZlbnQtPmJ1dHRvbigpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc1NjZW5lTW91c2VFdmVudDog
ewotICAgICAgICBjb25zdCBRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBz
dGF0aWNfY2FzdDxjb25zdCBRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAg
ICAgIG1vdXNlQnV0dG9ucyA9IG1vdXNlRXZlbnRUeXBlID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
TW92ZWQgPyBtb3VzZUV2ZW50LT5idXR0b25zKCkgOiBtb3VzZUV2ZW50LT5idXR0b24oKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KKworICAgIGNvbnN0IFFNb3VzZUV2ZW50KiBtb3Vz
ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUU1vdXNlRXZlbnQqPihldmVudCk7CisgICAgbW91
c2VCdXR0b25zID0gbW91c2VFdmVudFR5cGUgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCA/
IG1vdXNlRXZlbnQtPmJ1dHRvbnMoKSA6IG1vdXNlRXZlbnQtPmJ1dHRvbigpOworCiAKICAgICBp
ZiAobW91c2VCdXR0b25zICYgUXQ6OkxlZnRCdXR0b24pCiAgICAgICAgIG1vdXNlQnV0dG9uID0g
TGVmdEJ1dHRvbjsKQEAgLTExNCwyNyArODMsOSBAQCBzdGF0aWMgdm9pZCBtb3VzZUV2ZW50VHlw
ZUFuZE1vdXNlQnV0dG9uRnJvbVFFdmVudChjb25zdCBRRXZlbnQqIGV2ZW50LCBQbGF0Zm9ybQog
CiBjbGFzcyBXZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2
ZW50IHsKIHB1YmxpYzoKLSAgICBXZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQoUUdyYXBoaWNzU2Nl
bmVNb3VzZUV2ZW50KiwgaW50IGNsaWNrQ291bnQpOwogICAgIFdlYktpdFBsYXRmb3JtTW91c2VF
dmVudChRSW5wdXRFdmVudCosIGludCBjbGlja0NvdW50KTsKIH07CiAKLVdlYktpdFBsYXRmb3Jt
TW91c2VFdmVudDo6V2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VF
dmVudCogZXZlbnQsIGludCBjbGlja0NvdW50KQotewotICAgIG1fdGltZXN0YW1wID0gV1RGOjpj
dXJyZW50VGltZSgpOwotCi0gICAgLy8gRklYTUU6IFdoeSBkb24ndCB3ZSBoYW5kbGUgYSBjb250
ZXh0IG1lbnUgZXZlbnQgaGVyZSBhcyB3ZSBkbyBpbiBQbGF0Zm9ybU1vdXNlRXZlbnQoUUlucHV0
RXZlbnQqLCBpbnQpPwotICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwNzI4Pi4KLSAgICBQbGF0Zm9ybUV2ZW50OjpUeXBlIHR5cGU7Ci0gICAgbW91
c2VFdmVudFR5cGVBbmRNb3VzZUJ1dHRvbkZyb21RRXZlbnQoZXZlbnQsIHR5cGUsIG1fYnV0dG9u
KTsKLQotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KGV2ZW50
LT5wb3MoKS50b1BvaW50KCkpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChldmVu
dC0+c2NyZWVuUG9zKCkpOwotCi0gICAgbV9jbGlja0NvdW50ID0gY2xpY2tDb3VudDsKLSAgICBt
b3VzZUV2ZW50TW9kaWZpZXJzRnJvbVF0S2V5Ym9hcmRNb2RpZmllcnMoZXZlbnQtPm1vZGlmaWVy
cygpLCBtX21vZGlmaWVycyk7Ci19Ci0KIFdlYktpdFBsYXRmb3JtTW91c2VFdmVudDo6V2ViS2l0
UGxhdGZvcm1Nb3VzZUV2ZW50KFFJbnB1dEV2ZW50KiBldmVudCwgaW50IGNsaWNrQ291bnQpCiB7
CiAgICAgbV90aW1lc3RhbXAgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CkBAIC0xNjksMjEgKzEyMCwx
NSBAQCBQbGF0Zm9ybU1vdXNlRXZlbnQgY29udmVydE1vdXNlRXZlbnQoUUlucHV0RXZlbnQqIGV2
ZW50LCBpbnQgY2xpY2tDb3VudCkKICAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50
KGV2ZW50LCBjbGlja0NvdW50KTsKIH0KIAotUGxhdGZvcm1Nb3VzZUV2ZW50IGNvbnZlcnRNb3Vz
ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQsIGludCBjbGlja0NvdW50KQot
ewotICAgIHJldHVybiBXZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIGNsaWNrQ291bnQp
OwotfQotCiBjbGFzcyBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1X
aGVlbEV2ZW50IHsKIHB1YmxpYzoKLSAgICBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoUUdyYXBo
aWNzU2NlbmVXaGVlbEV2ZW50Kik7Ci0gICAgV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVl
bEV2ZW50Kik7CisgICAgV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiwgaW50
IHdoZWVsU2Nyb2xsTGluZXMpOwogCiBwcml2YXRlOgotICAgIHZvaWQgYXBwbHlEZWx0YShpbnQg
ZGVsdGEsIFF0OjpPcmllbnRhdGlvbik7CisgICAgdm9pZCBhcHBseURlbHRhKGludCBkZWx0YSwg
UXQ6Ok9yaWVudGF0aW9uLCBpbnQgd2hlZWxTY3JvbGxMaW5lcyk7CiB9OwogCi12b2lkIFdlYktp
dFBsYXRmb3JtV2hlZWxFdmVudDo6YXBwbHlEZWx0YShpbnQgZGVsdGEsIFF0OjpPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKK3ZvaWQgV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjphcHBseURlbHRh
KGludCBkZWx0YSwgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBpbnQgd2hlZWxTY3JvbGxM
aW5lcykKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gUXQ6Okhvcml6b250YWwpIHsKICAgICAg
ICAgbV9kZWx0YVggPSBkZWx0YTsKQEAgLTE5OCwyMiArMTQzLDExIEBAIHZvaWQgV2ViS2l0UGxh
dGZvcm1XaGVlbEV2ZW50OjphcHBseURlbHRhKGludCBkZWx0YSwgUXQ6Ok9yaWVudGF0aW9uIG9y
aWVudGF0aW9uCiAgICAgLy8gU2luY2Ugd2UgcmVxdWVzdCB0aGUgc2Nyb2xsIGRlbHRhIGJ5IHRo
ZSBwaXhlbCwgY29udmVydCB0aGUgd2hlZWwgZGVsdGEgdG8gcGl4ZWwgZGVsdGEgdXNpbmcgdGhl
IHN0YW5kYXJkIHNjcm9sbCBzdGVwLgogICAgIC8vIFVzZSB0aGUgc2FtZSBzaW5nbGUgc2Nyb2xs
IHN0ZXAgYXMgUVRleHRFZGl0IChpbiBRVGV4dEVkaXRQcml2YXRlOjppbml0IFtoLHZdYmFyLT5z
ZXRTaW5nbGVTdGVwKQogICAgIHN0YXRpYyBjb25zdCBmbG9hdCBjRGVmYXVsdFF0U2Nyb2xsU3Rl
cCA9IDIwLmY7Ci0gICAgbV9kZWx0YVggPSBtX3doZWVsVGlja3NYICogUUFwcGxpY2F0aW9uOjp3
aGVlbFNjcm9sbExpbmVzKCkgKiBjRGVmYXVsdFF0U2Nyb2xsU3RlcDsKLSAgICBtX2RlbHRhWSA9
IG1fd2hlZWxUaWNrc1kgKiBRQXBwbGljYXRpb246OndoZWVsU2Nyb2xsTGluZXMoKSAqIGNEZWZh
dWx0UXRTY3JvbGxTdGVwOworICAgIG1fZGVsdGFYID0gbV93aGVlbFRpY2tzWCAqIHdoZWVsU2Ny
b2xsTGluZXMgKiBjRGVmYXVsdFF0U2Nyb2xsU3RlcDsKKyAgICBtX2RlbHRhWSA9IG1fd2hlZWxU
aWNrc1kgKiB3aGVlbFNjcm9sbExpbmVzICogY0RlZmF1bHRRdFNjcm9sbFN0ZXA7CiB9CiAKLVdl
YktpdFBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFHcmFwaGlj
c1NjZW5lV2hlZWxFdmVudCogZSkKLXsKLSAgICBtX3RpbWVzdGFtcCA9IFdURjo6Y3VycmVudFRp
bWUoKTsKLSAgICBtb3VzZUV2ZW50TW9kaWZpZXJzRnJvbVF0S2V5Ym9hcmRNb2RpZmllcnMoZS0+
bW9kaWZpZXJzKCksIG1fbW9kaWZpZXJzKTsKLSAgICBtX3Bvc2l0aW9uID0gZS0+cG9zKCkudG9Q
b2ludCgpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBlLT5zY3JlZW5Qb3MoKTsKLSAgICBtX2dy
YW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7Ci0gICAgbV9kaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UgPSBmYWxzZTsKLSAgICBhcHBseURlbHRhKGUtPmRlbHRhKCksIGUtPm9y
aWVudGF0aW9uKCkpOwotfQotCi1XZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6OldlYktpdFBsYXRm
b3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCogZSkKK1dlYktpdFBsYXRmb3JtV2hlZWxFdmVudDo6
V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBlLCBpbnQgd2hlZWxTY3JvbGxM
aW5lcykKIHsKICAgICBtX3RpbWVzdGFtcCA9IFdURjo6Y3VycmVudFRpbWUoKTsKICAgICBtb3Vz
ZUV2ZW50TW9kaWZpZXJzRnJvbVF0S2V5Ym9hcmRNb2RpZmllcnMoZS0+bW9kaWZpZXJzKCksIG1f
bW9kaWZpZXJzKTsKQEAgLTIyMSw3ICsxNTUsNyBAQCBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6
OldlYktpdFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCogZSkKICAgICBtX2dsb2JhbFBv
c2l0aW9uID0gZS0+Z2xvYmFsUG9zKCk7CiAgICAgbV9ncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4
ZWxXaGVlbEV2ZW50OwogICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gZmFsc2U7
Ci0gICAgYXBwbHlEZWx0YShlLT5kZWx0YSgpLCBlLT5vcmllbnRhdGlvbigpKTsKKyAgICBhcHBs
eURlbHRhKGUtPmRlbHRhKCksIGUtPm9yaWVudGF0aW9uKCksIHdoZWVsU2Nyb2xsTGluZXMpOwog
fQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTMwOSw0MyArMjQzLDM1IEBAIFdlYktp
dFBsYXRmb3JtVG91Y2hQb2ludDo6V2ViS2l0UGxhdGZvcm1Ub3VjaFBvaW50KGNvbnN0IFFUb3Vj
aEV2ZW50OjpUb3VjaFBvaW50CiAjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQogY2xhc3MgV2Vi
S2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlRXZlbnQgewog
cHVibGljOgotICAgIFdlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KGNvbnN0IFFHZXN0dXJlRXZl
bnQqLCBjb25zdCBRR2VzdHVyZSopOworICAgIFdlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KFFH
ZXN0dXJlRXZlbnRGYWNhZGUqKTsKIH07CiAKLVdlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpX
ZWJLaXRQbGF0Zm9ybUdlc3R1cmVFdmVudChjb25zdCBRR2VzdHVyZUV2ZW50KiBldmVudCwgY29u
c3QgUUdlc3R1cmUqIGdlc3R1cmUpCitzdGF0aWMgaW5saW5lIFBsYXRmb3JtRXZlbnQ6OlR5cGUg
dG9QbGF0Zm9ybUV2ZW50VHlwZShRdDo6R2VzdHVyZVR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2gg
KGdlc3R1cmUtPmdlc3R1cmVUeXBlKCkpIHsKLSAgICBjYXNlIFF0OjpUYXBHZXN0dXJlOiB7Ci0g
ICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA7Ci0gICAgICAgIFFQb2lu
dEYgZ2xvYmFsUG9zID0gc3RhdGljX2Nhc3Q8Y29uc3QgUVRhcEdlc3R1cmUqPihnZXN0dXJlKS0+
cG9zaXRpb24oKTsKLSAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvcy50b1BvaW50
KCk7Ci0gICAgICAgIG1fcG9zaXRpb24gPSBldmVudC0+d2lkZ2V0KCktPm1hcEZyb21HbG9iYWwo
Z2xvYmFsUG9zLnRvUG9pbnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFF0
OjpUYXBBbmRIb2xkR2VzdHVyZTogewotICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpH
ZXN0dXJlTG9uZ1ByZXNzOwotICAgICAgICBRUG9pbnRGIGdsb2JhbFBvcyA9IHN0YXRpY19jYXN0
PGNvbnN0IFFUYXBBbmRIb2xkR2VzdHVyZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOwotICAgICAg
ICBtX2dsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9zLnRvUG9pbnQoKTsKLSAgICAgICAgbV9wb3Np
dGlvbiA9IGV2ZW50LT53aWRnZXQoKS0+bWFwRnJvbUdsb2JhbChnbG9iYWxQb3MudG9Qb2ludCgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
UXQ6OlRhcEdlc3R1cmU6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFw
OworICAgIGNhc2UgUXQ6OlRhcEFuZEhvbGRHZXN0dXJlOgorICAgICAgICByZXR1cm4gUGxhdGZv
cm1FdmVudDo6R2VzdHVyZUxvbmdQcmVzczsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2
ZW50OjpOb1R5cGU7CiAgICAgfQotICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJyZW50VGltZSgp
OwogfQogCi0jZW5kaWYKLQotUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFX
aGVlbEV2ZW50KiBldmVudCkKK1dlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpXZWJLaXRQbGF0
Zm9ybUdlc3R1cmVFdmVudChRR2VzdHVyZUV2ZW50RmFjYWRlKiBldmVudCkKIHsKLSAgICByZXR1
cm4gV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KGV2ZW50KTsKKyAgICBtX3R5cGUgPSB0b1BsYXRm
b3JtRXZlbnRUeXBlKGV2ZW50LT50eXBlKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gZXZlbnQt
Pmdsb2JhbFBvczsKKyAgICBtX3Bvc2l0aW9uID0gZXZlbnQtPnBvczsKKyAgICBtX3RpbWVzdGFt
cCA9IFdURjo6Y3VycmVudFRpbWUoKTsKIH0KIAotUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRX
aGVlbEV2ZW50KFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCogZXZlbnQpCisjZW5kaWYKKworUGxh
dGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldmVudCwgaW50
IHdoZWVsU2Nyb2xsTGluZXMpCiB7Ci0gICAgcmV0dXJuIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVu
dChldmVudCk7CisgICAgcmV0dXJuIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudChldmVudCwgd2hl
ZWxTY3JvbGxMaW5lcyk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzU2LDEw
ICsyODIsOSBAQCBQbGF0Zm9ybVRvdWNoRXZlbnQgY29udmVydFRvdWNoRXZlbnQoUVRvdWNoRXZl
bnQqIGV2ZW50KQogI2VuZGlmCiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCi1QbGF0Zm9y
bUdlc3R1cmVFdmVudCBjb252ZXJ0R2VzdHVyZShRR2VzdHVyZUV2ZW50KiBldmVudCwgUUdlc3R1
cmUqIGdlc3R1cmUpCitQbGF0Zm9ybUdlc3R1cmVFdmVudCBjb252ZXJ0R2VzdHVyZShRR2VzdHVy
ZUV2ZW50RmFjYWRlKiBldmVudCkKIHsKLSAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1HZXN0dXJl
RXZlbnQoZXZlbnQsIGdlc3R1cmUpOworICAgIHJldHVybiBXZWJLaXRQbGF0Zm9ybUdlc3R1cmVF
dmVudChldmVudCk7CiB9CiAjZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmgKaW5kZXggMzIyNGVlZTkwOTZmZWQ0
ZTU0MjdhN2NkZTUwMjUzMTBiZTBjMmRiYy4uOTEzNWUzYjkwODcwZjE1ZmQ2ZWNiODJmZDcxZDU2
Y2Y2OTJkMmVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9X
ZWJFdmVudENvbnZlcnNpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1dlYkV2ZW50Q29udmVyc2lvbi5oCkBAIC0yMCwyNiArMjAsMjcgQEAKICovCiAKICNpbmNsdWRl
IDxxZ2xvYmFsLmg+CisjaW5jbHVkZSA8UVBvaW50PgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNs
YXNzIFFJbnB1dEV2ZW50OwotY2xhc3MgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50OwogY2xhc3Mg
UVdoZWVsRXZlbnQ7Ci1jbGFzcyBRR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQ7CiBjbGFzcyBRVG91
Y2hFdmVudDsKLWNsYXNzIFFHZXN0dXJlOwotY2xhc3MgUUdlc3R1cmVFdmVudDsKIFFUX0VORF9O
QU1FU1BBQ0UKIAorc3RydWN0IFFHZXN0dXJlRXZlbnRGYWNhZGUgeworICAgIFF0OjpHZXN0dXJl
VHlwZSB0eXBlOworICAgIFFQb2ludCBnbG9iYWxQb3M7CisgICAgUVBvaW50IHBvczsKK307CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3Mg
UGxhdGZvcm1XaGVlbEV2ZW50OwogCiBQbGF0Zm9ybU1vdXNlRXZlbnQgY29udmVydE1vdXNlRXZl
bnQoUUlucHV0RXZlbnQqLCBpbnQgY2xpY2tDb3VudCk7Ci1QbGF0Zm9ybU1vdXNlRXZlbnQgY29u
dmVydE1vdXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiwgaW50IGNsaWNrQ291bnQp
OwotUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50Kik7Ci1Q
bGF0Zm9ybVdoZWVsRXZlbnQgY29udmVydFdoZWVsRXZlbnQoUUdyYXBoaWNzU2NlbmVXaGVlbEV2
ZW50Kik7CitQbGF0Zm9ybVdoZWVsRXZlbnQgY29udmVydFdoZWVsRXZlbnQoUVdoZWVsRXZlbnQq
LCBpbnQgd2hlZWxTY3JvbGxMaW5lcyk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogY2xh
c3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwpAQCAtNDgsNiArNDksNiBAQCBQbGF0Zm9ybVRvdWNoRXZl
bnQgY29udmVydFRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsKIAogI2lmIEVOQUJMRShHRVNUVVJF
X0VWRU5UUykKIGNsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwotUGxhdGZvcm1HZXN0dXJlRXZl
bnQgY29udmVydEdlc3R1cmUoUUdlc3R1cmVFdmVudCosIFFHZXN0dXJlKik7CitQbGF0Zm9ybUdl
c3R1cmVFdmVudCBjb252ZXJ0R2VzdHVyZShRR2VzdHVyZUV2ZW50RmFjYWRlKik7CiAjZW5kaWYK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJw
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNw
cAppbmRleCBmZjQwYjU1ZjAzOWJhNzUyMmE5YWYzMzJiMWRkZjM3OTc4ZTkzNmM3Li5mZDgyYzI4
NzYxNGM5MWVhNjc5MjUxOGY4Njc5NWU3MjIzNDFiYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCkBAIC01NDgsNyArNTQ4LDcgQEAg
dm9pZCB0c3RfUVdlYlBhZ2U6OmxvYWRIdG1sNVZpZGVvKCkKICAgICBRQnl0ZUFycmF5IHVybCgi
aHR0cDovL2RvZXMubm90L2V4aXN0P2E9MSUyQ2I9MiIpOwogICAgIG1fdmlldy0+c2V0SHRtbCgi
PHA+PHZpZGVvIGlkID0ndmlkZW8nIHNyYz0nIiArIHVybCArICInIGF1dG9wbGF5Lz48L3A+Iik7
CiAgICAgUVRlc3Q6OnFXYWl0KDIwMDApOwotICAgIFFVcmwgbVVybCA9IER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjptZWRpYUNvbnRlbnRVcmxCeUVsZW1lbnRJZChtX3BhZ2UtPm1haW5GcmFtZSgp
LCAidmlkZW8iKTsKKyAgICBRVXJsIG1VcmwgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bWVk
aWFDb250ZW50VXJsQnlFbGVtZW50SWQobV9wYWdlLT5tYWluRnJhbWUoKS0+aGFuZGxlKCksICJ2
aWRlbyIpOwogICAgIFFFWFBFQ1RfRkFJTCgiIiwgImh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NTQ1MiIsIENvbnRpbnVlKTsKICAgICBRQ09NUEFSRShtVXJsLnRvRW5j
b2RlZCgpLCB1cmwpOwogI2Vsc2UKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAgdm9pZCB0c3RfUVdl
YlBhZ2U6Om11bHRpcGxlUGFnZUdyb3Vwc0FuZExvY2FsU3RvcmFnZSgpCiAKICAgICB2aWV3MS5w
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3RvcmFn
ZUVuYWJsZWQsIHRydWUpOwogICAgIHZpZXcxLnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0TG9jYWxT
dG9yYWdlUGF0aChRRGlyOjp0b05hdGl2ZVNlcGFyYXRvcnModG1wRGlyUGF0aCgpICsgIi9wYXRo
MSIpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZSh2
aWV3MS5wYWdlKCksICJncm91cDEiKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2Vi
UGFnZVNldEdyb3VwTmFtZSh2aWV3MS5wYWdlKCktPmhhbmRsZSgpLCAiZ3JvdXAxIik7CiAgICAg
dmlldzIucGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2Nh
bFN0b3JhZ2VFbmFibGVkLCB0cnVlKTsgICAgCiAgICAgdmlldzIucGFnZSgpLT5zZXR0aW5ncygp
LT5zZXRMb2NhbFN0b3JhZ2VQYXRoKFFEaXI6OnRvTmF0aXZlU2VwYXJhdG9ycyh0bXBEaXJQYXRo
KCkgKyAiL3BhdGgyIikpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0
R3JvdXBOYW1lKHZpZXcyLnBhZ2UoKSwgImdyb3VwMiIpOwotICAgIFFDT01QQVJFKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBOYW1lKHZpZXcxLnBhZ2UoKSksIFFTdHJpbmco
Imdyb3VwMSIpKTsKLSAgICBRQ09NUEFSRShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFn
ZUdyb3VwTmFtZSh2aWV3Mi5wYWdlKCkpLCBRU3RyaW5nKCJncm91cDIiKSk7CisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUodmlldzIucGFnZSgpLT5oYW5k
bGUoKSwgImdyb3VwMiIpOworICAgIFFDT01QQVJFKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3
ZWJQYWdlR3JvdXBOYW1lKHZpZXcxLnBhZ2UoKS0+aGFuZGxlKCkpLCBRU3RyaW5nKCJncm91cDEi
KSk7CisgICAgUUNPTVBBUkUoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VHcm91cE5h
bWUodmlldzIucGFnZSgpLT5oYW5kbGUoKSksIFFTdHJpbmcoImdyb3VwMiIpKTsKIAogCiAgICAg
dmlldzEuc2V0SHRtbChRU3RyaW5nKCI8aHRtbD48Ym9keT4gPC9ib2R5PjwvaHRtbD4iKSwgUVVy
bCgiaHR0cDovL3d3dy5teWV4YW1wbGUuY29tIikpOwpAQCAtMzA2MiwzNSArMzA2MiwzNSBAQCB2
b2lkIHRzdF9RV2ViUGFnZTo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeSgpCiAgICAgUVZFUklGWSht
X3BhZ2UtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpKTsKIAogICAgIC8vIFRo
ZXNlIGFyZSBhbGwgZmlyc3QtcGFydHkgY29va2llcywgc28gc2hvdWxkIHBhc3MuCi0gICAgUVZF
UklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93
cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0
eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgi
aHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jb20iKSkpOwot
ICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xp
Y3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRo
aXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAg
IFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2RvYy5leGFtcGxl
LmNvbSIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0
eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAog
ICAgICAgICAgICAgUVVybCgiaHR0cDovL2FhYS53d3cuZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0
cDovL2RvYy5leGFtcGxlLmNvbSIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3Bh
Z2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2V4YW1wbGUuY29tIiksIFFV
cmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFW
RVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxv
d3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBs
ZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jby51ayIpKSk7Ci0gICAgUVZFUklGWShE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3Bh
Z2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDov
L3d3dy5leGFtcGxlLmNvLnVrIiksIFFVcmwoImh0dHA6Ly9kb2MuZXhhbXBsZS5jby51ayIpKSk7
Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBv
bGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAg
ICAgUVVybCgiaHR0cDovL2FhYS53d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZG9j
LmV4YW1wbGUuY28udWsiKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5o
YW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9leGFtcGxlLmNvLnVrIiksIFFVcmwo
Imh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpKSk7CiAKICAgICAvLyBUaGVzZSBhcmUgYWxsIHRo
aXJkLXBhcnR5IGNvb2tpZXMsIHNvIHNob3VsZCBmYWlsLgotICAgIFFWRVJJRlkoIUR1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKG1fcGFnZSwKKyAg
ICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5l
eGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vc2xhc2hkb3Qub3JnIikpKTsKLSAgICBRVkVSSUZZ
KCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlD
b29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0
dHA6Ly9leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vYW5vdGhlcmV4YW1wbGUuY29tIikpKTsK
LSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBv
bGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAg
ICAgIFFVcmwoImh0dHA6Ly9hbm90aGVyZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2V4YW1w
bGUuY29tIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUo
KSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJo
dHRwOi8vc2xhc2hkb3QuY28udWsiKSkpOwotICAgIFFWRVJJRlkoIUR1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKG1fcGFnZSwKKyAgICBRVkVSSUZZ
KCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2V4YW1wbGUuY28udWsi
KSwgUVVybCgiaHR0cDovL2Fub3RoZXJleGFtcGxlLmNvLnVrIikpKTsKLSAgICBRVkVSSUZZKCFE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3Bh
Z2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29r
aWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6
Ly9hbm90aGVyZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jby51ayIpKSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9xdC9NYWluUXQuY3BwCmluZGV4IDFlMWNlMmIzZDAxNWFkMzgwNTJjOWVmNTA2MTg4
ZGUzOTRhYzQ1MzYuLjA5OTBjMDFmODcyNDhmNWMwNTQyMjBjYWJiMTg5ZDc0NGEyMzYzMTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvcXQvTWFpblF0LmNwcApAQCAtNDIsOSArNDIsMTAgQEAgdHlwZWRlZiBRQXBwbGljYXRpb24g
QXBwbGljYXRpb25UeXBlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIFFfREVDTF9JTVBPUlQgaW50
IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0aW9uKik7Ci0jaWYgZGVmaW5lZChIQVZFX1dF
QktJVDEpCi1RX0RFQ0xfSU1QT1JUIHZvaWQgaW5pdGlhbGl6ZVdlYktpdDJUaGVtZSgpOworI2lm
ICFkZWZpbmVkKFFUX05PX1dJREdFVFMpCitRX0RFQ0xfSU1QT1JUIHZvaWQgaW5pdGlhbGl6ZVdl
YktpdFdpZGdldHMoKTsKICNlbmRpZgorUV9ERUNMX0lNUE9SVCB2b2lkIGluaXRpYWxpemVXZWJL
aXRRdCgpOwogfQogCiAjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiBkZWZpbmVkKFFfT1NfVU5JWCkK
QEAgLTgyLDE1ICs4MywyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
fQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMSkKLSAgICBXZWJLaXQ6OmluaXRp
YWxpemVXZWJLaXQyVGhlbWUoKTsKLSNlbmRpZgotCiAgICAgLy8gSGFzIHRvIGJlIGRvbmUgYmVm
b3JlIFFBcHBsaWNhdGlvbiBpcyBjb25zdHJ1Y3RlZCBpbiBjYXNlCiAgICAgLy8gUUFwcGxpY2F0
aW9uIGl0c2VsZiBwcm9kdWNlcyBkZWJ1ZyBvdXRwdXQuCiAgICAgUUJ5dGVBcnJheSBzdXBwcmVz
c091dHB1dCA9IHFnZXRlbnYoIlFUX1dFQktJVF9TVVBQUkVTU19XRUJfUFJPQ0VTU19PVVRQVVQi
KTsKICAgICBpZiAoIXN1cHByZXNzT3V0cHV0LmlzRW1wdHkoKSAmJiBzdXBwcmVzc091dHB1dCAh
PSAiMCIpCiAgICAgICAgIHFJbnN0YWxsTWVzc2FnZUhhbmRsZXIobWVzc2FnZUhhbmRsZXIpOwog
Ci0gICAgcmV0dXJuIFdlYktpdDo6V2ViUHJvY2Vzc01haW5RdChuZXcgQXBwbGljYXRpb25UeXBl
KGFyZ2MsIGFyZ3YpKTsKKyAgICAvLyBRQXBwbGljYXRpb24gbXVzdCBiZSBjcmVhdGVkIGJlZm9y
ZSB3ZSBjYWxsIGluaXRpYWxpemVXZWJLaXRXaWRnZXRzKCkgc28gdGhhdAorICAgIC8vIHRoZSBz
dGFuZGFyZCBwaXhtYXBzIGNhbiBiZSBmZXRjaGVkIGZyb20gdGhlIHN0eWxlLgorICAgIEFwcGxp
Y2F0aW9uVHlwZSogYXBwSW5zdGFuY2UgPSBuZXcgQXBwbGljYXRpb25UeXBlKGFyZ2MsIGFyZ3Yp
OworCisjaWYgIWRlZmluZWQoUVRfTk9fV0lER0VUUykKKyAgICBpZiAocWdldGVudigiUVRfV0VC
S0lUX1RIRU1FX05BTUUiKSA9PSAicXN0eWxlIikKKyAgICAgICAgV2ViS2l0Ojppbml0aWFsaXpl
V2ViS2l0V2lkZ2V0cygpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBXZWJLaXQ6OmluaXRp
YWxpemVXZWJLaXRRdCgpOworCisKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0
KGFwcEluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9hcGkucHJpIGIvU291cmNlL2Fw
aS5wcmkKaW5kZXggYTQ3YjczNTlkZThmOGI3OWMxYjc5MDNjYzBjOTA4NTU5ZDI5YWFiYi4uZjZj
M2MzYzc1Zjc2ZjIwZGVlMTUzZDhjNDYyMDU5NDYzOGYxNDA2OSAxMDA2NDQKLS0tIGEvU291cmNl
L2FwaS5wcmkKKysrIGIvU291cmNlL2FwaS5wcmkKQEAgLTE0LDEyICsxNCwxNSBAQCBXRUJLSVRf
REVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9saWIKIAogV0VCS0lUICs9IHd0ZiBqYXZhc2Ny
aXB0Y29yZSB3ZWJjb3JlCiAKLWJ1aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdDEKK2J1
aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdHdpZGdldHMgd2Via2l0MQogYnVpbGQ/KHdl
YmtpdDIpOiBXRUJLSVQgKz0gd2Via2l0MgogCiAjIEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhl
IFdlYktpdDEgYW5kIFdlYktpdDIgQVBJIHdpbGwgdHJpZ2dlciBhIHFtYWtlIG9mIHRoaXMKICMg
ZmlsZSwgd2hpY2ggaW4gdHVybiBydW5zIHN5bmNxdCB0byB1cGRhdGUgdGhlIGZvcndhcmRpbmcg
aGVhZGVycy4KLWJ1aWxkPyh3ZWJraXQxKTogUU1BS0VfSU5URVJOQUxfSU5DTFVERURfRklMRVMg
Kj0gV2ViS2l0L1dlYktpdDEucHJvCitidWlsZD8od2Via2l0MSk6IHsKKyAgICBRTUFLRV9JTlRF
Uk5BTF9JTkNMVURFRF9GSUxFUyAqPSBXZWJLaXQvV2ViS2l0MS5wcm8KKyAgICBRTUFLRV9JTlRF
Uk5BTF9JTkNMVURFRF9GSUxFUyAqPSBXZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KK30KIGJ1aWxk
Pyh3ZWJraXQyKTogUU1BS0VfSU5URVJOQUxfSU5DTFVERURfRklMRVMgKj0gV2ViS2l0Mi9UYXJn
ZXQucHJpCiAKIHVzZT8oM0RfR1JBUEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMzRlZTVhZDRhMWU1MjNl
NThhMzdmMzAxMjBiOTA3Zjc5OWIyYTg2NS4uMTZjMjM3ODY2ZTE3NWFjOGQyZTk4OGM5NjI1ZGM1
NDQ3MGM1OTA5YyAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVR
dC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dC5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyUXQuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXJR
dC5oIgorI2luY2x1ZGUgIkluaXRXZWJLaXRRdC5oIgogI2luY2x1ZGUgIlF0VGVzdFN1cHBvcnQu
aCIKICNpbmNsdWRlICJUZXN0UnVubmVyUXQuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9s
bGVyUXQuaCIKQEAgLTYyLDE5ICs2MywxNCBAQAogI2luY2x1ZGUgPFFQcm9ncmVzc0Jhcj4KICNp
bmNsdWRlIDxRVW5kb1N0YWNrPgogI2luY2x1ZGUgPFFVcmw+Ci0KLSNpbmNsdWRlIDxxd2Vic2V0
dGluZ3MuaD4KLSNpbmNsdWRlIDxxd2Vic2VjdXJpdHlvcmlnaW4uaD4KLQogI2luY2x1ZGUgPGxp
bWl0cy5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgotCisjaW5jbHVkZSA8cXdlYnNlY3VyaXR5b3Jp
Z2luLmg+CisjaW5jbHVkZSA8cXdlYnNldHRpbmdzLmg+CiAjaWZuZGVmIFFfT1NfV0lOCiAjaW5j
bHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPHFkZWJ1Zy5oPgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNvbnN0IGludCBkYXRhYmFzZURlZmF1bHRRdW90YSA9IDUgKiAxMDI0
ICogMTAyNDsKQEAgLTIwNiwxNCArMjAyLDE0IEBAIHZvaWQgV2ViUGFnZTo6cmVzZXRTZXR0aW5n
cygpCiAgICAgUVdlYlNldHRpbmdzOjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hlKDApOyAvLyByZXNl
dCB0byBkZWZhdWx0CiAgICAgc2V0dGluZ3MoKS0+c2V0VXNlclN0eWxlU2hlZXRVcmwoUVVybCgp
KTsgLy8gcmVzZXQgdG8gZGVmYXVsdAogCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dE1pbmltdW1UaW1lckludGVydmFsKHRoaXMsIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWZh
dWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldE1pbmltdW1UaW1lckludGVydmFsKGhhbmRsZSgpLCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZGVmYXVsdE1pbmltdW1UaW1lckludGVydmFsKCkpOwogCi0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KG1haW5GcmFtZSgpKTsKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcm5hbHNPYmplY3QobWFpbkZyYW1lKCktPmhhbmRs
ZSgpKTsKIAogICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIoKTsKIH0KIAot
UVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSkK
K1FXZWJQYWdlKiBXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUp
CiB7CiAgICAgcmV0dXJuIG1fZHJ0LT5jcmVhdGVXaW5kb3coKTsKIH0KQEAgLTM5OSw2ICszOTUs
NyBAQCBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoKQogICAgIGlmICh2aWV3TW9kZSA9
PSAiZ3JhcGhpY3MiKQogICAgICAgICBzZXRHcmFwaGljc0Jhc2VkKHRydWUpOwogCisgICAgV2Vi
S2l0Ojppbml0aWFsaXplV2ViS2l0V2lkZ2V0cygpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0Ojppbml0aWFsaXplKCk7CiAKICAgICAvLyBTZXQgcnVubmluZyBpbiBEUlQgbW9kZSBmb3Ig
cXdlYnBhZ2UgdG8gY3JlYXRlIHRlc3RhYmxlIG9iamVjdHMuCkBAIC00MjEsNyArNDE4LDcgQEAg
RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICB9CiAgICAgLy8gVXNlIGEgZnJh
bWUgZ3JvdXAgbmFtZSBmb3IgYWxsIHBhZ2VzIGNyZWF0ZWQgYnkgRHVtcFJlbmRlclRyZWUgdG8g
YWxsb3cKICAgICAvLyB0ZXN0aW5nIG9mIGNyb3NzLXBhZ2UgZnJhbWUgbG9va3VwLgotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKG1fcGFnZSwgIm9yZy53
ZWJraXQucXQuRHVtcFJlbmRlclRyZWUiKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
d2ViUGFnZVNldEdyb3VwTmFtZShwYWdlQWRhcHRlcigpLCAib3JnLndlYmtpdC5xdC5EdW1wUmVu
ZGVyVHJlZSIpOwogCiAgICAgbV9tYWluVmlldy0+c2V0Q29udGV4dE1lbnVQb2xpY3koUXQ6Ok5v
Q29udGV4dE1lbnUpOwogICAgIG1fbWFpblZpZXctPnJlc2l6ZShRU2l6ZShUZXN0UnVubmVyOjpt
YXhWaWV3V2lkdGgsIFRlc3RSdW5uZXI6Om1heFZpZXdIZWlnaHQpKTsKQEAgLTQ3MCw3ICs0Njcs
NyBAQCBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoKQogICAgIFFPYmplY3Q6OmNvbm5l
Y3QodGhpcywgU0lHTkFMKHF1aXQoKSksIHFBcHAsIFNMT1QocXVpdCgpKSwgUXQ6OlF1ZXVlZENv
bm5lY3Rpb24pOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldER1bXBSZW5kZXJU
cmVlTW9kZUVuYWJsZWQodHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldElu
dGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKHdlYlBhZ2UoKSwgdHJ1ZSk7CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVk
KHBhZ2VBZGFwdGVyKCksIHRydWUpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjplbmFi
bGVNb2NrU2Nyb2xsYmFycygpOwogCiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoUUV2ZW50OjpGb2N1
c0luLCBRdDo6QWN0aXZlV2luZG93Rm9jdXNSZWFzb24pOwpAQCAtNTQxLDkgKzUzOCw5IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNv
bnN0IFFVcmwmIHVybCkKICNlbmRpZgogCiAgICAgY2xlYXJIaXN0b3J5KG1fcGFnZSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KG1fcGFnZS0+bWFpbkZyYW1lKCks
IDEsIFFQb2ludCgwLCAwKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyRnJh
bWVOYW1lKG1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpyZW1vdmVVc2VyU3R5bGVTaGVldHMobV9wYWdlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2NhbGVQYWdlQnkobWFpbkZyYW1lQWRhcHRlcigpLCAxLCBRUG9pbnQoMCwgMCkpOwor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckZyYW1lTmFtZShtYWluRnJhbWVBZGFw
dGVyKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZW1vdmVVc2VyU3R5bGVTaGVl
dHMocGFnZUFkYXB0ZXIoKSk7CiAKICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5zZXRTY3JvbGxC
YXJQb2xpY3koUXQ6OlZlcnRpY2FsLCBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOwogICAgIG1fcGFn
ZS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6SG9yaXpvbnRhbCwgUXQ6OlNj
cm9sbEJhckFzTmVlZGVkKTsKQEAgLTU2MSw3ICs1NTgsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
OjpyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJsJiB1cmwpCiAK
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZUxpc3Rz
KCk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2luZG93c0JlaGF2aW9yQXNF
ZGl0aW5nQmVoYXZpb3IobV9wYWdlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
V2luZG93c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IocGFnZUFkYXB0ZXIoKSk7CiAKICAgICBR
TG9jYWxlOjpzZXREZWZhdWx0KFFMb2NhbGU6OmMoKSk7CiAKQEAgLTU3MCw3ICs1NjcsNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhj
b25zdCBRVXJsJiB1cmwpCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogI2VuZGlmCiAKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIobV9wYWdlLT5tYWluRnJhbWUo
KSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyT3BlbmVyKG1haW5GcmFtZUFk
YXB0ZXIoKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgUVVy
bCYgdXJsKQpAQCAtNzM5LDcgKzczNiw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmluaXRKU09i
amVjdHMoKQogICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoUUxhdGluMVN0
cmluZygiZXZlbnRTZW5kZXIiKSwgbV9ldmVudFNlbmRlcik7CiAgICAgZnJhbWUtPmFkZFRvSmF2
YVNjcmlwdFdpbmRvd09iamVjdChRTGF0aW4xU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVyIiks
IG1fdGV4dElucHV0Q29udHJvbGxlcik7CiAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRv
d09iamVjdChRTGF0aW4xU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSwgbV9nY0NvbnRyb2xsZXIpOwot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoZnJhbWUp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoZnJh
bWUtPmhhbmRsZSgpKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2hvd1BhZ2UoKQpAQCAt
NzU3LDcgKzc1NCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmhpZGVQYWdlKCkKIAogUVN0cmlu
ZyBEdW1wUmVuZGVyVHJlZTo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oUVdlYkZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9j
dW1lbnRFbGVtZW50KGZyYW1lKSkKKyAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6aGFzRG9jdW1lbnRFbGVtZW50KGZyYW1lLT5oYW5kbGUoKSkpCiAgICAgICAgIHJl
dHVybiBRU3RyaW5nKCk7CiAKICAgICBRU3RyaW5nIHJlc3VsdDsKQEAgLTc3OSw3ICs3NzYsNyBA
QCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihRV2ViRnJh
bWUqIGZyYW1lKQogCiBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wRnJhbWVzQXNUZXh0KFFX
ZWJGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFmcmFtZSB8fCAhRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6Omhhc0RvY3VtZW50RWxlbWVudChmcmFtZSkpCisgICAgaWYgKCFmcmFtZSB8fCAhRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6Omhhc0RvY3VtZW50RWxlbWVudChmcmFtZS0+aGFuZGxlKCkp
KQogICAgICAgICByZXR1cm4gUVN0cmluZygpOwogCiAgICAgUVN0cmluZyByZXN1bHQ7CkBAIC05
MDcsNyArOTA0LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgpCiAgICAgICAgIGZwcmlu
dGYoc3Rkb3V0LCAiU291cmNlOlxuXG4lc1xuIiwgbWFya3VwLnRvVXRmOCgpLmNvbnN0RGF0YSgp
KTsKICAgICB9CiAKLSAgICBRU3RyaW5nIG1pbWVUeXBlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnJlc3BvbnNlTWltZVR5cGUobWFpbkZyYW1lKTsKKyAgICBRU3RyaW5nIG1pbWVUeXBlID0g
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc3BvbnNlTWltZVR5cGUobWFpbkZyYW1lLT5oYW5k
bGUoKSk7CiAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikKICAgICAgICAgbV9jb250
cm9sbGVyLT5kdW1wQXNUZXh0KCk7CiAKQEAgLTk0NywxMSArOTQ0LDExIEBAIHZvaWQgRHVtcFJl
bmRlclRyZWU6OmR1bXAoKQogICAgICAgICAgICAgbWFpbkZyYW1lLT5yZW5kZXIoJnBhaW50ZXIp
OwogICAgICAgICAgICAgcGFpbnRlci5lbmQoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBpbWFnZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWludFBhZ2VzV2l0aEJvdW5kYXJp
ZXMobWFpbkZyYW1lKTsKKyAgICAgICAgICAgIGltYWdlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnBhaW50UGFnZXNXaXRoQm91bmRhcmllcyhtYWluRnJhbWUtPmhhbmRsZSgpKTsKIAotICAg
ICAgICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRyYWNrUmVwYWludFJlY3RzKG1fcGFn
ZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
dHJhY2tSZXBhaW50UmVjdHMobWFpbkZyYW1lQWRhcHRlcigpKSkgewogICAgICAgICAgICAgUVZl
Y3RvcjxRUmVjdD4gcmVwYWludFJlY3RzOwotICAgICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmdldFRyYWNrZWRSZXBhaW50UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKSwgcmVwYWlu
dFJlY3RzKTsKKyAgICAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRUcmFja2Vk
UmVwYWludFJlY3RzKG1haW5GcmFtZUFkYXB0ZXIoKSwgcmVwYWludFJlY3RzKTsKICAgICAgICAg
ICAgIFFJbWFnZSBtYXNrKGltYWdlLnNpemUoKSwgaW1hZ2UuZm9ybWF0KCkpOwogICAgICAgICAg
ICAgbWFzay5maWxsKFFDb2xvcigwLCAwLCAwLCAwLjY2ICogMjU1KSk7CiAKQEAgLTk2Myw3ICs5
NjAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpkdW1wKCkKICAgICAgICAgICAgIFFQYWludGVy
IHBhaW50ZXIoJmltYWdlKTsKICAgICAgICAgICAgIHBhaW50ZXIuZHJhd0ltYWdlKGltYWdlLnJl
Y3QoKSwgbWFzayk7CiAKLSAgICAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRU
cmFja1JlcGFpbnRSZWN0cyhtX3BhZ2UtPm1haW5GcmFtZSgpLCBmYWxzZSk7CisgICAgICAgICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0VHJhY2tSZXBhaW50UmVjdHMobWFpbkZyYW1l
QWRhcHRlcigpLCBmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBRQ3J5cHRvZ3JhcGhpY0hh
c2ggaGFzaChRQ3J5cHRvZ3JhcGhpY0hhc2g6Ok1kNSk7CkBAIC0xMDk4LDcgKzEwOTUsNyBAQCBR
V2ViUGFnZSAqRHVtcFJlbmRlclRyZWU6OmNyZWF0ZVdpbmRvdygpCiAKICAgICAvLyBVc2UgYSBm
cmFtZSBncm91cCBuYW1lIGZvciBhbGwgcGFnZXMgY3JlYXRlZCBieSBEdW1wUmVuZGVyVHJlZSB0
byBhbGxvdwogICAgIC8vIHRlc3Rpbmcgb2YgY3Jvc3MtcGFnZSBmcmFtZSBsb29rdXAuCi0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUocGFnZSwgIm9yZy53
ZWJraXQucXQuRHVtcFJlbmRlclRyZWUiKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
d2ViUGFnZVNldEdyb3VwTmFtZShwYWdlLT5oYW5kbGUoKSwgIm9yZy53ZWJraXQucXQuRHVtcFJl
bmRlclRyZWUiKTsKIAogICAgIHJldHVybiBwYWdlOwogfQpAQCAtMTEzNCw2ICsxMTMxLDE2IEBA
IHZvaWQgRHVtcFJlbmRlclRyZWU6OnN3aXRjaEZvY3VzKGJvb2wgZm9jdXNlZCkKIAogfQogCitR
V2ViUGFnZUFkYXB0ZXIqIER1bXBSZW5kZXJUcmVlOjpwYWdlQWRhcHRlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGFnZS0+aGFuZGxlKCk7Cit9CisKK1FXZWJGcmFtZUFkYXB0ZXIqIER1bXBS
ZW5kZXJUcmVlOjptYWluRnJhbWVBZGFwdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdl
LT5tYWluRnJhbWUoKS0+aGFuZGxlKCk7Cit9CisKIFFMaXN0PFdlYlBhZ2UqPiBEdW1wUmVuZGVy
VHJlZTo6Z2V0QWxsUGFnZXMoKSBjb25zdAogewogICAgIFFMaXN0PFdlYlBhZ2UqPiBwYWdlczsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAppbmRleCA5ODQyOWM0
NGVjOTMxMTMyMDA3ZTRkOGYzYWFjYWU0ZGM5Zjk2Njc4Li41Yjg4YjUyNzY2MjgyY2E0MDYwODgw
YjRiN2NlZWY0MjUzNjRhMGYwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5oCkBAIC01Myw3ICs1Myw4IEBAIGNsYXNzIFFVcmw7CiBjbGFzcyBRRmlsZTsKIFFU
X0VORF9OQU1FU1BBQ0UKIAotY2xhc3MgUVdlYkZyYW1lOworY2xhc3MgUVdlYkZyYW1lQWRhcHRl
cjsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIAogY2xhc3MgVGVzdFJ1bm5lcjsKIGNsYXNzIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OwpAQCAtOTcsNiArOTgsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQpOwogCiAgICAgV2ViUGFnZSAqd2ViUGFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIFFXZWJQYWdlQWRhcHRlciAqcGFnZUFkYXB0ZXIo
KSBjb25zdDsKKyAgICBRV2ViRnJhbWVBZGFwdGVyICptYWluRnJhbWVBZGFwdGVyKCkgY29uc3Q7
CisKICAgICBRTGlzdDxXZWJQYWdlKj4gZ2V0QWxsUGFnZXMoKSBjb25zdDsKIAogICAgIHZvaWQg
cHJvY2Vzc0FyZ3NMaW5lKGNvbnN0IFFTdHJpbmdMaXN0Jik7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0V2ZW50U2VuZGVyUXQuY3BwCmluZGV4IGRjZjlmMWJiMjEwZTljMDFmYzU1OWJiYzQ4M2Rh
MmM0NWNmOTBhNDAuLjgwYmUxMzE3ODhkMmI5YjIwOGY1M2Y4ZGQ2NTU3NzQ0MWE4Y2FkMTIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuY3BwCkBAIC00MzEsNyArNDMx
LDcgQEAgUVN0cmluZ0xpc3QgRXZlbnRTZW5kZXI6OmNvbnRleHRDbGljaygpCiAgICAgICAgIFFD
b250ZXh0TWVudUV2ZW50IGN0eEV2ZW50KFFDb250ZXh0TWVudUV2ZW50OjpNb3VzZSwgbV9tb3Vz
ZVBvcyk7CiAgICAgICAgIHNlbmRFdmVudChtX3BhZ2UtPnZpZXcoKSwgJmN0eEV2ZW50KTsKICAg
ICB9Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb250ZXh0TWVudShtX3Bh
Z2UpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29udGV4dE1lbnUobV9w
YWdlLT5oYW5kbGUoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9u
b3VzQ2xpY2soKQpAQCAtNjE2LDcgKzYxNiw3IEBAIHZvaWQgRXZlbnRTZW5kZXI6OnRleHRab29t
T3V0KCkKIHZvaWQgRXZlbnRTZW5kZXI6OnNjYWxlUGFnZUJ5KGZsb2F0IHNjYWxlRmFjdG9yLCBm
bG9hdCB4LCBmbG9hdCB5KQogewogICAgIGlmIChRV2ViRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5t
YWluRnJhbWUoKSkKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5
KGZyYW1lLCBzY2FsZUZhY3RvciwgUVBvaW50KHgsIHkpKTsKKyAgICAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KGZyYW1lLT5oYW5kbGUoKSwgc2NhbGVGYWN0b3IsIFFQ
b2ludCh4LCB5KSk7CiB9CiAKIFFXZWJGcmFtZSogRXZlbnRTZW5kZXI6OmZyYW1lVW5kZXJNb3Vz
ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVy
UXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcAppbmRleCA2
MDY3NTE0ZjA1NTA5NWViNzIzYTRlODQxMWEyMmRhYjYyZWJkOGYxLi5kOTM1MDVmYzVmYWY1ZmMx
M2ZhNDFmZWZlZjk2YTVhMDgzNjQ1OTFlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9UZXN0UnVubmVyUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RS
dW5uZXJRdC5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldCgpCiAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGZhbHNl
LCBmYWxzZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5Q2FsbGJh
Y2tzKGZhbHNlKTsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFZpc2l0ZWRMaW5r
c0NhbGxiYWNrcyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0R2Vv
bG9jYXRpb25Nb2NrKG1fZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpyZXNldEdlb2xvY2F0aW9uTW9jayhtX2RydC0+cGFnZUFkYXB0ZXIoKSk7CiAgICAgc2V0
SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CiAgICAgY2xlYXJBbGxEYXRhYmFzZXMoKTsKICAg
ICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBmb3IgRFJUIGlzIHRvIGJsb2NrIHRoaXJkLXBhcnR5IGNv
b2tpZXMsIG1pbWljaW5nIHRoZSBNYWMgcG9ydApAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5n
JiB0aXRsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0VHJhY2tSZXBhaW50UmVjdHMobV90b3BMb2FkaW5nRnJhbWUsIHRy
dWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRUcmFja1JlcGFpbnRSZWN0cyht
X3RvcExvYWRpbmdGcmFtZS0+aGFuZGxlKCksIHRydWUpOwogICAgIGVtaXQgc2hvd1BhZ2UoKTsK
IH0KIApAQCAtNDE3LDcgKzQxNyw3IEBAIFFTdHJpbmcgVGVzdFJ1bm5lcjo6ZGVjb2RlSG9zdE5h
bWUoY29uc3QgUVN0cmluZyYgaG9zdCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3Bl
Y3RvcigpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3Nl
KG1fZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNw
ZWN0b3JDbG9zZShtX2RydC0+cGFnZUFkYXB0ZXIoKSk7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCwgZmFsc2UpOwogfQogCkBAIC00MzQsMjcgKzQzNCwyNyBAQCB2b2lkIFRlc3RSdW5uZXI6
OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiB2b2lkIFRlc3RSdW5u
ZXI6OnNob3dXZWJJbnNwZWN0b3IoKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdz
KCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIHRy
dWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KG1fZHJ0
LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JT
aG93KG1fZHJ0LT5wYWdlQWRhcHRlcigpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0
ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQobV9k
cnQtPndlYlBhZ2UoKSwgY2FsbElkLCBzY3JpcHQpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBjYWxs
SWQsIHNjcmlwdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZy
YW1lRmxhdHRlbmluZ0VuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlZCk7CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQobV9kcnQtPnBh
Z2VBZGFwdGVyKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdvQmFjayhtX2RydC0+d2ViUGFnZSgpKTsK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z29CYWNrKG1fZHJ0LT5wYWdlQWRhcHRlcigp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZmxhZykKIHsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJzTG9hZGluZyhtX2RydC0+d2Vi
UGFnZSgpLCBmbGFnKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJzTG9h
ZGluZyhtX2RydC0+cGFnZUFkYXB0ZXIoKSwgZmxhZyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTQ0
LDcgKzU0NCw3IEBAIGJvb2wgVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQoY29uc3QgUVN0cmluZyYgYW5pbWF0aW9uTmFtCiB7CiAgICAgUVdlYkZyYW1lKiBm
cmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJUKGZyYW1l
KTsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9uKGZy
YW1lLCBhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpOworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUtPmhhbmRsZSgpLCBhbmltYXRp
b25OYW1lLCB0aW1lLCBlbGVtZW50SWQpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
CkBAIC01NTMsMTQgKzU1MywxNCBAQCBib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbQogewogICAgIFFX
ZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBRX0FT
U0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRy
YW5zaXRpb25PZlByb3BlcnR5KGZyYW1lLCBwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7
CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlBy
b3BlcnR5KGZyYW1lLT5oYW5kbGUoKSwgcHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQpOwog
fQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25z
dAogewogICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUo
KTsKICAgICBRX0FTU0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUpOworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lLT5oYW5kbGUo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCkBAIC02OTgs
MTIgKzY5OCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
Y29uc3QgUVN0cmluZyYgdXJsKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhcmV0QnJvd3NpbmdF
bmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldENh
cmV0QnJvd3NpbmdFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIHZhbHVlKTsKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQobV9kcnQtPnBhZ2VBZGFw
dGVyKCksIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZChib29sIHZhbHVlKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCB2YWx1ZSk7Cisg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KG1fZHJ0LT5wYWdlQWRhcHRlcigpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKQEAgLTcyOCw3ICs3MjgsNyBAQCBp
bnQgVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQoKQogCiBib29sIFRlc3RSdW5uZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzaG91bGRDbG9zZShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSk7CisgICAg
cmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShtX2RydC0+bWFpbkZy
YW1lQWRhcHRlcigpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3ko
Y29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNvbnN0IFFTdHJpbmcmIHBvbGljeSkKQEAgLTc1
NywyNyArNzU3LDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0
IFFTdHJpbmcmIG9yaWVudGF0aW9uLCBjb25zdCBRU3RyaW5nJiBwCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZW5hYmxlKQogewotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQobV9kcnQtPndl
YlBhZ2UoKSwgZW5hYmxlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21hcnRJ
bnNlcnREZWxldGVFbmFibGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBlbmFibGUpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBl
bmFibGUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChtX2Ry
dC0+cGFnZUFkYXB0ZXIoKSwgZW5hYmxlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpleGVjQ29t
bWFuZChjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKG1fZHJ0LT53
ZWJQYWdlKCksIG5hbWUsIHZhbHVlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXhl
Y3V0ZUNvcmVDb21tYW5kQnlOYW1lKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBuYW1lLCB2YWx1ZSk7
CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChjb25zdCBRU3RyaW5nJiBu
YW1lKSBjb25zdAogewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNDb21t
YW5kRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBuYW1lKTsKKyAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIG5h
bWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoY29uc3QgUVN0cmluZyYgc3Ry
aW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCiB7Ci0gICAgcmV0dXJuIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKG1fZHJ0LT53ZWJQYWdlKCksIHN0cmluZywg
b3B0aW9uQXJyYXkpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZmluZFN0
cmluZyhtX2RydC0+cGFnZUFkYXB0ZXIoKSwgc3RyaW5nLCBvcHRpb25BcnJheSk7CiB9CiAKIFFT
dHJpbmcgVGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IFFXZWJFbGVtZW50
JiBsaXN0SXRlbSkKQEAgLTc5Miw3ICs3OTIsNyBAQCBRVmFyaWFudE1hcCBUZXN0UnVubmVyOjpj
b21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29uc3QgUVdlYkVsZW1lbnQmIGVsZQog
CiBib29sIFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJ
ZChjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpCiB7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobV9kcnQt
PndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIGVsZW1lbnRJZCk7CisgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQo
bV9kcnQtPm1haW5GcmFtZUFkYXB0ZXIoKSwgZWxlbWVudElkKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjphdXRoZW50aWNhdGVTZXNzaW9uKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiwg
Y29uc3QgUVN0cmluZyYpCkBAIC04MTIsNyArODEyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRN
b2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwg
Ym8KIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxs
UGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAg
ICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihw
YWdlLCBjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwgYmV0YSwgY2FuUHJv
dmlkZUdhbW1hLCBnYW1tYSk7CisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRN
b2NrRGV2aWNlT3JpZW50YXRpb24ocGFnZS0+aGFuZGxlKCksIGNhblByb3ZpZGVBbHBoYSwgYWxw
aGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKQEAg
LTgyMCw3ICs4MjAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihib29sIGFsbG93KQogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7
CiAgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2Vz
KCk7CiAgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKHBh
Z2UsIGFsbG93KTsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9s
b2NhdGlvblBlcm1pc3Npb24ocGFnZS0+aGFuZGxlKCksIGFsbG93KTsKIH0KIAogaW50IFRlc3RS
dW5uZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKQEAg
LTgyOCw3ICs4MjgsNyBAQCBpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogICAgIGludCBwZW5kaW5nUGVybWlzc2lvbkNvdW50ID0g
MDsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFn
ZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAgICAg
ICAgcGVuZGluZ1Blcm1pc3Npb25Db3VudCArPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVt
YmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMocGFnZSk7CisgICAgICAg
IHBlbmRpbmdQZXJtaXNzaW9uQ291bnQgKz0gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJl
ck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKHBhZ2UtPmhhbmRsZSgpKTsK
IAogICAgIHJldHVybiBwZW5kaW5nUGVybWlzc2lvbkNvdW50OwogfQpAQCAtODQzLDE0ICs4NDMs
MTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoY29uc3QgUVN0cmluZyYgbWVzc2EKIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQ
YWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3Jl
OjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihwYWdlLCBtZXNzYWdl
KTsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uVW5hdmFpbGFibGVFcnJvcihwYWdlLT5oYW5kbGUoKSwgbWVzc2FnZSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAgUUxpc3Q8V2ViQ29y
ZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CiAgICAgZm9yZWFjaCAo
V2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLCBsYXRpdHVkZSwgbG9uZ2l0
dWRlLCBhY2N1cmFjeSk7CisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLT5oYW5kbGUoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwg
YWNjdXJhY3kpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3Vs
dChjb25zdCBRU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBRU3RyaW5n
JiBsYW5ndWFnZSkKQEAgLTg3OCwxMiArODc4LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJRCwgY29uc3QK
IAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29y
bGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFnZSgpLT5tYWlu
RnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQobV9kcnQtPm1haW5GcmFtZUFkYXB0ZXIoKSwg
d29ybGRJRCwgc2NyaXB0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVl
dChjb25zdCBRU3RyaW5nJiBzb3VyY2VDb2RlKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjphZGRVc2VyU3R5bGVTaGVldChtX2RydC0+d2ViUGFnZSgpLCBzb3VyY2VDb2RlKTsKKyAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQobV9kcnQtPnBhZ2VB
ZGFwdGVyKCksIHNvdXJjZUNvZGUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZp
c2l0ZWRMaW5rcygpCkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjphZGRVUkxU
b1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXQK
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11
bVRpbWVySW50ZXJ2YWwpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmlt
dW1UaW1lckludGVydmFsKG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFsKTsK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobV9k
cnQtPnBhZ2VBZGFwdGVyKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmNwcAppbmRleCBkNTY0NWE1MjNlOTJkYzlk
NTM2NjJjNjljNGUwYmNiMDRmYTA2N2ZjLi4zOGU0ODlkNzhmNzM2ZjMyNDBiNTAxMjMxMmZmNzA1
Y2RjNzQ1ZjE0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRD
b250cm9sbGVyUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1RleHRJbnB1dENv
bnRyb2xsZXJRdC5jcHAKQEAgLTE0OSwxNSArMTQ5LDE1IEBAIHZvaWQgVGV4dElucHV0Q29udHJv
bGxlcjo6aW5zZXJ0VGV4dChjb25zdCBRU3RyaW5nJiBzdHJpbmcpCiAKIFFWYXJpYW50TGlzdCBU
ZXh0SW5wdXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2UocW9iamVjdF9jYXN0PFFXZWJQYWdlKj4o
cGFyZW50KCkpKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVk
UmFuZ2UocW9iamVjdF9jYXN0PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSk7CiB9CiAK
IFFWYXJpYW50TGlzdCBUZXh0SW5wdXRDb250cm9sbGVyOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShxb2JqZWN0X2Nhc3Q8UVdl
YlBhZ2UqPihwYXJlbnQoKSksIGxvY2F0aW9uLCBsZW5ndGgpOworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UocW9iamVjdF9jYXN0
PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSwgbG9jYXRpb24sIGxlbmd0aCk7CiB9CiAK
IHZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJrVGV4dCgpCiB7Ci0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihxb2JqZWN0X2Nhc3Q8UVdlYlBhZ2Uq
PihwYXJlbnQoKSksIDApOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb25maXJtQ29t
cG9zaXRpb24ocW9iamVjdF9jYXN0PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSwgMCk7
CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9Xb3JrUXVldWVJdGVtUXQu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNwcAppbmRleCBi
MDkzMzY2Njc2MDY4NjNjODc3NGE5YjQ5M2VmMjhiMDM1OGY2OWVhLi43Y2Y5ZmNhZjEwMmUwZjYw
YTAwZDZmMDdlNjIwNWY3NTllYjBkY2QzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9Xb3JrUXVldWVJdGVtUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1dv
cmtRdWV1ZUl0ZW1RdC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBMb2FkQWx0ZXJuYXRlSFRN
TFN0cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0ZUh0
bWwoZnJhbWUsIG1fY29udGVudCwgUVVybChtX2Jhc2VVUkwpLCBRVXJsKG1fZmFpbGluZ1VSTCkp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBbHRlcm5hdGVIdG1sKGZyYW1lLT5o
YW5kbGUoKSwgbV9jb250ZW50LCBRVXJsKG1fYmFzZVVSTCksIFFVcmwobV9mYWlsaW5nVVJMKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZGVmYXVsdF9wb3N0LnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZGVmYXVsdF9wb3N0LnByZgppbmRleCA0Nzc2ZDFkOTIwOWQyNWZiZGFmOWE5NGFhMGFjY2MzNTVi
MmVmZmZmLi45YzBmMzIzMmY5YmRiNjAzZDg5M2E0YTdhNzBjNzM0OGY2YmZmYWQ5IDEwMDY0NAot
LS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKKysrIGIv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmCkBAIC0xNzcsNyAr
MTc3LDcgQEAgY29udGFpbnMoUVQsIHdlYmtpdHdpZGdldHMpIHsKICAgICAjIG5lZWQgdG8gbGlu
ayB0byBhbnkgaW50ZXJtZWRpYXRlIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgZm9yY2Vfc3RhdGlj
X2xpYnNfYXNfc2hhcmVkIHsKICAgICAgICAgV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29yZSB3
ZWJjb3JlCi0gICAgICAgIGJ1aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdDEKKyAgICAg
ICAgYnVpbGQ/KHdlYmtpdDEpOiBXRUJLSVQgKz0gd2Via2l0d2lkZ2V0cyB3ZWJraXQxCiAgICAg
ICAgIGJ1aWxkPyh3ZWJraXQyKTogV0VCS0lUICs9IHdlYmtpdDIKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvcHJvZHVjdGlvbl9idWlsZC5wcmYgYi9U
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3Byb2R1Y3Rpb25fYnVpbGQucHJmCmluZGV4IGIz
ZjM2YWJiNDg1Mzk0MTNmYzI3YjY2OWFmMjYxNWI2NzA3Mzk1NGQuLjQyMzUxMDI2OGIzOGExMzdm
MTg0ZTZiNjRhM2ZiOGM5NDQ0MmJkMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvcHJvZHVjdGlvbl9idWlsZC5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9m
ZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnByZgpAQCAtNyw4ICs3LDggQEAgQ09ORklHICo9IHVz
ZV9hbGxfaW5fb25lX2ZpbGVzCiAjIHJlc3VsdGluZyBpbiB0aGUgbmVlZCBvZiBzZXZlcmFsIGdp
Z2FieXRlcyBvZiBtZW1vcnkgYXQgbGluay10aW1lLiBSZWR1Y2UgdGhlIHByZXNzdXJlCiAjIGJ5
IGNvbXBpbGluZyBhbnkgc3RhdGljIGxpYnJhcnkgbGlrZSBXVEYgb3IgSlNDIHdpdGggcmVsZWFz
ZSBmbGFncyBpbnN0ZWFkIGFuZCBrZWVwIGRlYnVnCiAjIHN5bWJvbHMgZm9yIHRoZSBzdGF0aWMg
bGlicmFyaWVzIHRoYXQgaW1wbGVtZW50IEFQSS4KLWxpbnV4LSp8d2luMzItZysrKjppZihDT05G
SUcoZGVidWcsIGRlYnVnfHJlbGVhc2UpfGNvbnRhaW5zKFFUX0NPTkZJRyxzZXBhcmF0ZV9kZWJ1
Z19pbmZvKSk6Y29udGFpbnMoVEVNUExBVEUsIGxpYik6c3RhdGljbGliIHsKLSAgICAhZXF1YWxz
KFRBUkdFVCwgV2ViS2l0Mik6IWVxdWFscyhUQVJHRVQsIFdlYktpdDEpIHsKK2xpbnV4LSp8d2lu
MzItZysrKjpDT05GSUcoZGVidWcsIGRlYnVnfHJlbGVhc2UpOmNvbnRhaW5zKFRFTVBMQVRFLCBs
aWIpOnN0YXRpY2xpYiB7CisgICAgIWVxdWFscyhUQVJHRVQsIFdlYktpdDIpOiFlcXVhbHMoVEFS
R0VULCBXZWJLaXRXaWRnZXRzKSB7CiAgICAgICAgIENPTkZJRyArPSBub19kZWJ1Z19pbmZvCiAg
ICAgICAgIENPTkZJRyAtPSBzZXBhcmF0ZV9kZWJ1Z19pbmZvCiAgICAgICAgIFFNQUtFX0NGTEFH
UyArPSAkJFFNQUtFX0NGTEFHU19SRUxFQVNFCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL3dlYmtpdF9tb2R1bGVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvd2Via2l0X21vZHVsZXMucHJmCmluZGV4IGIyZjMzNTM2NDhkNzA4ZmIxNjJiNTkxNTA2
MDFiM2NhZmRmNTlhZDIuLjUwNWI4MjY1OGUyMThkNjI2NjBmZDI4MWJmNTZhZTliMTc2OTMwYTMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVsZXMu
cHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVsZXMucHJm
CkBAIC03LDcgKzcsNyBAQAogCiAjIFJlb3JkZXIgbGlicmFyaWVzIHNvIHRoYXQgdGhlIGxpbmsg
YW5kIGluY2x1ZGUgb3JkZXIgaXMgY29ycmVjdCwKICMgYW5kIG1ha2Ugc3VyZSB0aGUgY2FzZSBt
YXRjaGVzIHRoZSBvcmlnaW5hbCBjYXNlLgotbGlicmFyaWVzID0gV2ViS2l0MSBXZWJLaXQyIFdl
YkNvcmUgQU5HTEUgSmF2YVNjcmlwdENvcmUgV1RGCitsaWJyYXJpZXMgPSBXZWJLaXRXaWRnZXRz
IFdlYktpdDEgV2ViS2l0MiBXZWJDb3JlIEFOR0xFIEphdmFTY3JpcHRDb3JlIFdURgogZm9yKGxp
YnJhcnksIGxpYnJhcmllcykgewogICAgIGNvbnRhaW5zKFdFQktJVCwgJCRsb3dlcigkJGxpYnJh
cnkpKSB7CiAgICAgICAgIFdFQktJVCAtPSAkJGxvd2VyKCQkbGlicmFyeSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL3FtYWtlL21rc3BlY3MvbW9kdWxlcy93ZWJraXR3aWRnZXRzLnByZiBiL1Rvb2xzL3Ft
YWtlL21rc3BlY3MvbW9kdWxlcy93ZWJraXR3aWRnZXRzLnByZgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTE2NDNj
OGRmMDAxMGRmYWQyNzVhMzRkM2I2MThiOWFmZmJkMWRjCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3dlYmtpdHdpZGdldHMucHJmCkBAIC0wLDAgKzEsOSBA
QAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisjIE1vZHVsZSBmaWxlIGZvciBXZWJLaXRXaWRnZXQsIHVzZWQgYnkg
dGFyZ2V0cyB0aGF0IGRlcGVuZCBvbiBXZWJLaXRXaWRnZXQKKyMKKyMgU2VlICdUb29scy9xbWFr
ZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCisjIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworV0VCS0lULndlYmtpdHdpZGdldHMucm9vdF9zb3VyY2VfZGlyID0gJCR7Uk9PVF9XRUJL
SVRfRElSfS9Tb3VyY2UvV2ViS2l0CisKK2luY2x1ZGUoJCR7V0VCS0lULndlYmtpdHdpZGdldHMu
cm9vdF9zb3VyY2VfZGlyfS9XZWJLaXRXaWRnZXRzLnByaSkKZGlmZiAtLWdpdCBhL1dlYktpdC5w
cm8gYi9XZWJLaXQucHJvCmluZGV4IDg3NmQ1NTQxMjY2MzhiOGFiZGE3ZmRlOGU5MTE0NmQxYzU3
ZWVmNmMuLmZiYTViOTk3YWM3YjMyNDE4NmRlNzc1OTcxZTNkM2QwYjlhMWMwNDYgMTAwNjQ0Ci0t
LSBhL1dlYktpdC5wcm8KKysrIGIvV2ViS2l0LnBybwpAQCAtMzIsNiArMzIsMTAgQEAgYnVpbGQ/
KHdlYmtpdDEpIHsKICAgICB3ZWJraXQxLmZpbGUgPSBTb3VyY2UvV2ViS2l0L1dlYktpdDEucHJv
CiAgICAgd2Via2l0MS5tYWtlZmlsZSA9IE1ha2VmaWxlLldlYktpdDEKICAgICBTVUJESVJTICs9
IHdlYmtpdDEKKworICAgIHdlYmtpdHdpZGdldHMuZmlsZSA9IFNvdXJjZS9XZWJLaXQvV2ViS2l0
V2lkZ2V0cy5wcm8KKyAgICB3ZWJraXR3aWRnZXRzLm1ha2VmaWxlID0gTWFrZWZpbGUuV2ViS2l0
V2lkZ2V0cworICAgIFNVQkRJUlMgKz0gd2Via2l0d2lkZ2V0cwogfQogCiBidWlsZD8od2Via2l0
Mikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175369</attachid>
            <date>2012-11-21 01:24:31 -0800</date>
            <delta_ts>2012-11-22 03:44:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102800-20121121102320.patch</filename>
            <type>text/plain</type>
            <size>377177</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UVdlYlBhZ2VDbGllbnQuaAppbmRleCBjZGEwYjBmNGQ2M2I1Y2U1NDU3ZWUxYjNhMjAxNmUzYjFj
Nzg5MDE2Li5hZTNmYjRlMmZhMGRiMjRiZDNlNGJlYWMyMThhMjE5NjAyYmRlNzFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJlcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFFX
aWRnZXQqIG93bmVyV2lkZ2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUU9iamVjdCogb3du
ZXJXaWRnZXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeVJlbGF0aXZl
VG9Pd25lcldpZGdldCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2lu
UGFyZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBy
aSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcmkKaW5kZXggNTYyNmYwNzA4NDA4Y2E4ODEzNzI0
MTc3OTQ3NjYwMTA4MDQ5YTZhZi4uYWYwMjE1ZjRhZWM4Y2VjOTY0NDZhNmIzMTE5NzY0NjA5ZjM1
MjUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJpCkBAIC04LDcgKzgsNiBAQAogU09VUkNFX0RJUiA9ICQke1JPT1Rf
V0VCS0lUX0RJUn0vU291cmNlL1dlYktpdAogCiBJTkNMVURFUEFUSCArPSBcCi0gICAgJCRTT1VS
Q0VfRElSL3F0L0FwaSBcCiAgICAgJCRTT1VSQ0VfRElSL3F0L1dlYkNvcmVTdXBwb3J0IFwKICAg
ICAkJFJPT1RfV0VCS0lUX0RJUi9Tb3VyY2UvV1RGL3d0Zi9xdAogCkBAIC0xOCwyMCArMTcsOSBA
QCBlbmFibGU/KERFVklDRV9PUklFTlRBVElPTil8ZW5hYmxlPyhPUklFTlRBVElPTl9FVkVOVFMp
IHsKIAogZW5hYmxlPyhHRU9MT0NBVElPTik6IFFUICs9IGxvY2F0aW9uCiAKLXVzZT8oUVRfTVVM
VElNRURJQSk6IFFUICo9IG11bHRpbWVkaWF3aWRnZXRzCi0KIGNvbnRhaW5zKENPTkZJRywgdGV4
bWFwKTogREVGSU5FUyArPSBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSPTEKIAogdXNlPyhQTFVHSU5f
QkFDS0VORF9YTElCKTogUEtHQ09ORklHICs9IHgxMQogCi1RVCArPSBuZXR3b3JrIHdpZGdldHMK
LWhhdmU/KFFUUVVJQ0spOiBRVCArPSBxdWljawotaGF2ZT8oUVRQUklOVFNVUFBPUlQpOiBRVCAr
PSBwcmludHN1cHBvcnQKLQotdXNlPyhURVhUVVJFX01BUFBFUl9HTCl8ZW5hYmxlPyhXRUJHTCkg
ewotICAgIFFUICo9IG9wZW5nbAotICAgICMgTWFrZSBzdXJlIE9wZW5HTCBsaWJzIGFyZSBhZnRl
ciB0aGUgd2ViY29yZSBsaWIgc28gTWluR1cgY2FuIHJlc29sdmUgc3ltYm9scwotICAgIHdpbjMy
Kjohd2luMzItbXN2Yyo6IExJQlMgKz0gJCRRTUFLRV9MSUJTX09QRU5HTAotfQotCitRVCArPSBu
ZXR3b3JrCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8gYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJvCmluZGV4IDc1ZDRkNzlkZTVhYzRjZTNlYzY5MmVlZDJmOTVkNWQ3
ZGY5NGI0MzkuLmZlZTk5ZTg4NTFiZmZkNjExOGNmNGNhYTBmMjI2YjEyZGI0Yjc0NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KKysrIGIvU291cmNlL1dlYktpdC9XZWJL
aXQxLnBybwpAQCAtMTUsMzAgKzE1LDIwIEBAIFFUICs9IGd1aQogQ09ORklHICs9IHN0YXRpY2xp
YgogCiBTT1VSQ0VTICs9IFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBcCi0gICAg
JCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdl
YnBhZ2UuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnZpZXcuY3BwIFwKKyAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNw
cCBcCiAgICAgJCRQV0QvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBcCiAgICAgJCRQV0QvcXQvQXBp
L3F3ZWJoaXN0b3J5LmNwcCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAog
ICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5jcHAgXAotICAgICQkUFdEL3F0
L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYnBsdWdp
bmZhY3RvcnkuY3BwIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcCBc
CisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAogICAgICQkUFdEL3F0L0FwaS9x
d2Vic2NyaXB0d29ybGQuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNwcCBc
Ci0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkv
cXdlYmtpdHZlcnNpb24uY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwK
LSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmNwcCBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRRdC5jcHAgXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9T
dGVwUXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29u
dGV4dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQuY3BwIFwKQEAgLTQ2LDY3ICszNiw3MiBAQCBTT1VSQ0VTICs9IFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcCBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgXAogICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvUVN0eWxlRmFjYWRlSW1wLmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJG
cmFtZUFkYXB0ZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFk
YXB0ZXIuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVR
dC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQu
Y3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5j
cHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwIFwKICAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCiAKIEhFQURFUlMg
Kz0gXAotICAgICQkUFdEL3F0L0FwaS9xd2ViZnJhbWUuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3
ZWJmcmFtZV9wLmggXAotICAgICQkUFdEL3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmggXAotICAg
ICQkUFdEL3F0L0FwaS9xd2Via2l0Z2xvYmFsLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJwYWdlLmggXAotICAgICQk
UFdEL3F0L0FwaS9xd2Vidmlldy5oIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaCBcCiAgICAgJCRQV0QvcXQv
QXBpL3F3ZWJlbGVtZW50LmggXAogICAgICQkUFdEL3F0L0FwaS9xd2ViZWxlbWVudF9wLmggXAot
ICAgICQkUFdEL3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIFwKICAgICAkJFBXRC9xdC9BcGkv
cXdlYmhpc3RvcnkuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaCBcCi0gICAg
JCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2VicGx1
Z2luZGF0YWJhc2VfcC5oIFwKLSAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggXAotICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmggXAotICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFdlYkNvbWJvQm94LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeV9wLmgg
XAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZWN1cml0
eW9yaWdpbi5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmggXAorICAgICQkUFdE
L3F0L0FwaS9xd2Vic2NyaXB0d29ybGRfcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0
TWVudUNsaWVudFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRR
dC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oIFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5oIFwKICAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmggXAorICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmggXAotICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RU3R5bGVGYWNhZGVJ
bXAuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFkYXB0ZXIuaCBcCisg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5oIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuaCBcCiAgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9V
bmRvU3RlcFF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVy
c2lvbi5oCiAKLWNvbnRhaW5zKFFUX0NPTkZJRyxhY2Nlc3NpYmlsaXR5KSB7Ci0gICAgU09VUkNF
UyArPSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nlc3NpYmxlLmNwcAotICAgIEhFQURFUlMgKz0g
JCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZV9wLmggCi19Ci0KIElOQ0xVREVQQVRIICs9
IFwKLSAgICAkJFBXRC9xdC9BcGkgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0CiAKLWVu
YWJsZT8oVklERU8pIHsKLSAgICAhdXNlPyhRVEtJVCk6IXVzZT8oR1NUUkVBTUVSKTp1c2U/KFFU
X01VTFRJTUVESUEpIHsKLSAgICAgICAgSEVBREVSUyArPSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaAotICAgICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5jcHAKLSAgICB9Cit1c2U/KDNEX0dS
QVBISUNTKTogV0VCS0lUICs9IGFuZ2xlCiAKK2VuYWJsZT8oR0VPTE9DQVRJT04pIHsKKyAgICAg
SEVBREVSUyArPSBcCisgICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
Q2xpZW50UXQuaAorICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKK30KKworZW5hYmxlPyhJQ09OREFUQUJBU0Up
IHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2VDbGllbnQuaCBcCisgICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0
L0ljb25EYXRhYmFzZUNsaWVudFF0LmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRRdC5jcHAKK30KKworZW5hYmxl
PyhWSURFTykgewogICAgIHVzZT8oUVRLSVQpIHwgdXNlPyhHU1RSRUFNRVIpIHwgdXNlPyhRVF9N
VUxUSU1FRElBKSB7CiAgICAgICAgIEhFQURFUlMgKz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
RnVsbFNjcmVlblZpZGVvUXQuaAogICAgICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcApAQCAtMTM0LDIxICsxMjksNCBAQCBlbmFibGU/
KFZJREVPKSB7CiAgICAgfQogfQogCi1lbmFibGU/KElDT05EQVRBQkFTRSkgewotICAgIEhFQURF
UlMgKz0gXAotICAgICAgICAkJFBXRC8uLi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUNsaWVudC5oIFwKLSAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNl
Q2xpZW50UXQuaAotCi0gICAgU09VUkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudFF0LmNwcAotfQotCi1lbmFibGU/KEdFT0xPQ0FUSU9O
KSB7Ci0gICAgIEhFQURFUlMgKz0gXAotICAgICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvbkNsaWVudFF0LmgKLSAgICAgU09VUkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCi19Ci0KLXVzZT8oM0RfR1JB
UEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXRXaWRnZXRzLnByaSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcmkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGMxNjgzMDExMDVlMWU4MjU2ZTYxYzA0YWQzNDQ1Y2MyNmJlNmE0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcmkKQEAgLTAsMCArMSwzNyBAQAor
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisjIFRoaXMgZmlsZSBjb250YWlucyBzaGFyZWQgcnVsZXMgdXNlZCBib3Ro
IHdoZW4gYnVpbGRpbmcgV2ViS2l0V2lkZ2V0cworIyBpdHNlbGYsIGFuZCBieSB0YXJnZXRzIHRo
YXQgdXNlIFdlYktpdFdpZGdldHMuCisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3Ig
YW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NPVVJDRV9E
SVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQKKworSU5DTFVERVBBVEggKz0g
XAorICAgICQkU09VUkNFX0RJUi9xdC9BcGkgXAorICAgICQkU09VUkNFX0RJUi9xdC9XZWJDb3Jl
U3VwcG9ydCBcCisgICAgJCRST09UX1dFQktJVF9ESVIvU291cmNlL1dURi93dGYvcXQKKworZW5h
YmxlPyhERVZJQ0VfT1JJRU5UQVRJT04pfGVuYWJsZT8oT1JJRU5UQVRJT05fRVZFTlRTKSB7Cisg
ICAgUVQgKz0gc2Vuc29ycworfQorCitlbmFibGU/KEdFT0xPQ0FUSU9OKTogUVQgKz0gbG9jYXRp
b24KKwordXNlPyhRVF9NVUxUSU1FRElBKTogUVQgKj0gbXVsdGltZWRpYXdpZGdldHMKKworY29u
dGFpbnMoQ09ORklHLCB0ZXhtYXApOiBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9
MQorCit1c2U/KFBMVUdJTl9CQUNLRU5EX1hMSUIpOiBQS0dDT05GSUcgKz0geDExCisKK1FUICs9
IG5ldHdvcmsgd2lkZ2V0cworaGF2ZT8oUVRRVUlDSyk6IFFUICs9IHF1aWNrCitoYXZlPyhRVFBS
SU5UU1VQUE9SVCk6IFFUICs9IHByaW50c3VwcG9ydAorCit1c2U/KFRFWFRVUkVfTUFQUEVSX0dM
KXxlbmFibGU/KFdFQkdMKSB7CisgICAgUVQgKj0gb3BlbmdsCisgICAgIyBNYWtlIHN1cmUgT3Bl
bkdMIGxpYnMgYXJlIGFmdGVyIHRoZSB3ZWJjb3JlIGxpYiBzbyBNaW5HVyBjYW4gcmVzb2x2ZSBz
eW1ib2xzCisgICAgd2luMzIqOiF3aW4zMi1tc3ZjKjogTElCUyArPSAkJFFNQUtFX0xJQlNfT1BF
TkdMCit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXRXaWRnZXRzLnBybyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNhNzU0MTkyYjc0
MjBmOThmY2ViMmRiOWRhZTUxNTk1M2NjYzVkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KQEAgLTAsMCArMSw3NSBAQAorIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj
IFRhcmdldCBmaWxlIGZvciB0aGUgV2ViS2l0V2lkZ2V0cyBzdGF0aWMgbGlicmFyeQorIworIyBT
ZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0
ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitURU1QTEFURSA9IGxpYgorVEFSR0VUID0gV2ViS2l0V2lkZ2V0
cworCitpbmNsdWRlKFdlYktpdFdpZGdldHMucHJpKQorCitXRUJLSVQgKz0gd3RmIGphdmFzY3Jp
cHRjb3JlIHdlYmNvcmUgd2Via2l0MQorUVQgKz0gZ3VpCisKK0NPTkZJRyArPSBzdGF0aWNsaWIK
KworU09VUkNFUyArPSBcCisgICAgJCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIFwK
KyAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJw
YWdlLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3LmNwcCBcCisgICAgJCRQV0QvcXQv
QXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaW5zcGVj
dG9yLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmNwcCBcCisgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcCBcCisgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1FXZWJVbmRvQ29tbWFuZC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNwcCBcCisgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FTdHls
ZUZhY2FkZUltcC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGwuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0
UGx1Z2luSW1wbC5jcHAKKworSEVBREVSUyArPSBcCisgICAgJCRQV0QvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJmcmFtZS5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYmZyYW1lX3AuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXRnbG9iYWwuaCBc
CisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIFwKKyAgICAkJFBXRC9x
dC9BcGkvcXdlYnBhZ2UuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJwYWdlX3AuaCBcCisgICAg
JCRQV0QvcXQvQXBpL3F3ZWJ2aWV3LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaW5zcGVjdG9y
LmggXAorICAgICQkUFdEL3F0L0FwaS9xd2Via2l0dmVyc2lvbi5oIFwKKyAgICAkJFBXRC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlX3AuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
SW5pdFdlYktpdFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFdlYlBhZ2UuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxs
YmFja1dlYlBvcHVwLmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9C
b3guaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmggXAor
ICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmggXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L1FTdHlsZUZhY2FkZUltcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9RV2lkZ2V0UGx1Z2luSW1wbC5oCisKK2NvbnRhaW5zKFFUX0NPTkZJRywgYWNj
ZXNzaWJpbGl0eSkgeworICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNz
aWJsZS5jcHAKKyAgICBIRUFERVJTICs9ICQkUFdEL3F0L0FwaS9xd2Vidmlld2FjY2Vzc2libGVf
cC5oIAorfQorCitJTkNMVURFUEFUSCArPSBcCisgICAgJCRQV0QvcXQvQXBpIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydAorCitlbmFibGU/KFZJREVPKSB7CisgICAgIXVzZT8oUVRLSVQp
OiF1c2U/KEdTVFJFQU1FUik6dXNlPyhRVF9NVUxUSU1FRElBKSB7CisgICAgICAgIEhFQURFUlMg
Kz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgKKyAgICAg
ICAgU09VUkNFUyArPSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRn
ZXQuY3BwCisgICAgfQorfQorCit1c2U/KDNEX0dSQVBISUNTKTogV0VCS0lUICs9IGFuZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IGVmNDJjOTUxODZl
MGU2NGRkM2NkNzE3ZjExOGM3ODg4ZmYzN2E1MjEuLjg0YjRlODAxYmQxYWNkZjZmZmJmNzMyOTY0
Yzk4ZWNhZTMzYTQxNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcu
Y3BwCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogICAgIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQqIHBhZ2VDbGllbnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQqPiAocGFnZS0+ZC0+Y2xpZW50
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQqPiAocGFnZS0+ZC0+Y2xpZW50LmRhdGEoKSk7CiAgICAgfSAKIH07CiAK
QEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpkZXRhY2hD
dXJyZW50UGFnZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHBhZ2UtPmQtPnZpZXcgPSAwOwot
ICAgIHBhZ2UtPmQtPmNsaWVudCA9IG51bGxwdHI7CisgICAgcGFnZS0+ZC0+Y2xpZW50LnJlc2V0
KCk7CiAKICAgICAvLyBpZiB0aGUgcGFnZSB3YXMgY3JlYXRlZCBieSB1cywgd2Ugb3duIGl0IGFu
ZCBuZWVkIHRvCiAgICAgLy8gZGVzdHJveSBpdCBhcyB3ZWxsLgpAQCAtNTAxLDcgKzUwMSw3IEBA
IHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6c2V0UGFnZShRV2ViUGFnZSogcGFnZSkKICAgICBpZiAo
IWQtPnBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGQtPnBhZ2UtPmQtPmNsaWVudCA9IGFk
b3B0UHRyKG5ldyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KHRoaXMsIHBhZ2UpKTsKKyAgICBk
LT5wYWdlLT5kLT5jbGllbnQucmVzZXQobmV3IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQodGhp
cywgcGFnZSkpOwogCiAgICAgaWYgKGQtPm92ZXJsYXkoKSkKICAgICAgICAgZC0+b3ZlcmxheSgp
LT5wcmVwYXJlR3JhcGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJlbGVtZW50LmNwcAppbmRleCAxMDhiOWIwNmYxZGYzYmYzM2QxYzRlMzc1ZDg4ZmRiM2Y4MGQ4
M2QzLi44MmY1NzlkOTU1MGEzYWNmZDk5ZDQzMGQxZDVjZmEwNzhmZWU4MzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSlNI
VE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKKyNpbmNsdWRlIDxRV2ViRnJhbWVBZGFwdGVyLmg+CiAjaW5jbHVkZSA8cGFy
c2VyL1NvdXJjZUNvZGUuaD4KICNpbmNsdWRlICJxdF9ydW50aW1lLmgiCiAjaW5jbHVkZSAiTm9k
ZUxpc3QuaCIKQEAgLTQ3LDggKzQ4LDYgQEAKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRl
ICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInJ1bnRp
bWVfcm9vdC5oIgogI2luY2x1ZGUgPEpTRG9jdW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC03MDYsNyArNzA1LDggQEAgUVdlYkZyYW1lICpRV2ViRWxlbWVudDo6d2ViRnJhbWUo
KSBjb25zdAogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZnJhbWUpOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lQWRhcHRlciA9IFFXZWJGcmFt
ZUFkYXB0ZXI6OmtpdChmcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lQWRhcHRlci0+YXBpSGFuZGxl
KCk7CiB9CiAKIHN0YXRpYyBib29sIHNldHVwU2NyaXB0Q29udGV4dChXZWJDb3JlOjpFbGVtZW50
KiBlbGVtZW50LCBKU0M6OkpTVmFsdWUmIHRoaXNWYWx1ZSwgU2NyaXB0U3RhdGUqJiBzdGF0ZSwg
U2NyaXB0Q29udHJvbGxlciomIHNjcmlwdENvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCAwYWNjZDMzNjJkZDY4NzM0Y2ZkZjIxMzg1ZWMzODA2NGYyYzEzMWJmLi5j
ZGI0ZDU5MTc3YjQ5OGRlM2JmYjA5ZGU2ZjUxMTdjOTM1ZGE0YWI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKQEAgLTEwNiw1NCArMTA2LDYgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCiBl
eHRlcm4gUV9HVUlfRVhQT1JUIGludCBxdF9kZWZhdWx0RHBpKCk7CiBRVF9FTkRfTkFNRVNQQUNF
CiAKLXN0YXRpYyBpbmxpbmUgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVMb2FkQ29u
dHJvbFRvQ2FjaGVQb2xpY3kodWludCBjYWNoZUxvYWRDb250cm9sKQotewotICAgIHN3aXRjaCAo
Y2FjaGVMb2FkQ29udHJvbCkgewotICAgIGNhc2UgUU5ldHdvcmtSZXF1ZXN0OjpBbHdheXNOZXR3
b3JrOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7Ci0g
ICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6OlByZWZlckNhY2hlOgotICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ7Ci0gICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6
OkFsd2F5c0NhY2hlOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRG9u
dExvYWQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJDb3JlOjpVc2VQcm90b2NvbENhY2hlUG9saWN5OwotfQotCi1RV2ViRnJhbWVEYXRhOjpRV2Vi
RnJhbWVEYXRhKFdlYkNvcmU6OlBhZ2UqIHBhcmVudFBhZ2UsIFdlYkNvcmU6OkZyYW1lKiBwYXJl
bnRGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckZyYW1lRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSkKLSAgICA6IG5hbWUoZnJhbWVOYW1l
KQotICAgICwgb3duZXJFbGVtZW50KG93bmVyRnJhbWVFbGVtZW50KQotICAgICwgcGFnZShwYXJl
bnRQYWdlKQotICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCi0gICAgLCBtYXJnaW5XaWR0aCgw
KQotICAgICwgbWFyZ2luSGVpZ2h0KDApCi17Ci0gICAgZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcg
RnJhbWVMb2FkZXJDbGllbnRRdCgpOwotICAgIGZyYW1lID0gRnJhbWU6OmNyZWF0ZShwYWdlLCBv
d25lckVsZW1lbnQsIGZyYW1lTG9hZGVyQ2xpZW50KTsKLQotICAgIC8vIEZJWE1FOiBBbGwgb2Yg
dGhlIGJlbG93IHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCBvdmVyIGludG8gV2ViQ29yZQotICAg
IGZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7Ci0gICAgaWYgKHBhcmVudEZyYW1lKQotICAg
ICAgICBwYXJlbnRGcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChmcmFtZSk7Ci19Ci0KLXZvaWQg
UVdlYkZyYW1lUHJpdmF0ZTo6aW5pdChRV2ViRnJhbWUgKnFmcmFtZSwgUVdlYkZyYW1lRGF0YSAq
ZnJhbWVEYXRhKQotewotICAgIHEgPSBxZnJhbWU7Ci0KLSAgICBhbGxvd3NTY3JvbGxpbmcgPSBm
cmFtZURhdGEtPmFsbG93c1Njcm9sbGluZzsKLSAgICBtYXJnaW5XaWR0aCA9IGZyYW1lRGF0YS0+
bWFyZ2luV2lkdGg7Ci0gICAgbWFyZ2luSGVpZ2h0ID0gZnJhbWVEYXRhLT5tYXJnaW5IZWlnaHQ7
Ci0gICAgZnJhbWUgPSBmcmFtZURhdGEtPmZyYW1lLmdldCgpOwotICAgIGZyYW1lTG9hZGVyQ2xp
ZW50ID0gZnJhbWVEYXRhLT5mcmFtZUxvYWRlckNsaWVudDsKLSAgICBmcmFtZUxvYWRlckNsaWVu
dC0+c2V0RnJhbWUocWZyYW1lLCBmcmFtZSk7Ci0KLSAgICBmcmFtZS0+aW5pdCgpOwotfQotCiB2
b2lkIFFXZWJGcmFtZVByaXZhdGU6OnNldFBhZ2UoUVdlYlBhZ2UqIG5ld1BhZ2UpCiB7CiAgICAg
aWYgKHBhZ2UgPT0gbmV3UGFnZSkKQEAgLTE2Niw2ICsxMTgsNyBAQCB2b2lkIFFXZWJGcmFtZVBy
aXZhdGU6OnNldFBhZ2UoUVdlYlBhZ2UqIG5ld1BhZ2UpCiAgICAgICAgIHEtPnNldFBhcmVudChu
ZXdQYWdlKTsKIAogICAgIHBhZ2UgPSBuZXdQYWdlOworICAgIHBhZ2VBZGFwdGVyID0gbmV3UGFn
ZS0+aGFuZGxlKCk7CiAgICAgZW1pdCBxLT5wYWdlQ2hhbmdlZCgpOwogfQogCkBAIC0zNzUsNiAr
MzI4LDExIEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6ZW1pdFVybENoYW5nZWQoKQogICAgIGVt
aXQgcS0+dXJsQ2hhbmdlZCh1cmwpOwogfQogCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6OmRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkKCkKK3sKKyAgICBlbWl0IHEtPnByb3Zpc2lvbmFsTG9hZCgpOwor
fQorCiB2b2lkIFFXZWJGcmFtZVByaXZhdGU6Ol9xX29yaWVudGF0aW9uQ2hhbmdlZCgpCiB7CiAj
aWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKQEAgLTQwOSw2ICszNjcsNjUgQEAgdm9pZCBR
V2ViRnJhbWVQcml2YXRlOjpkaWRDbGVhcldpbmRvd09iamVjdCgpCiAgICAgZW1pdCBxLT5qYXZh
U2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpOwogfQogCitib29sIFFXZWJGcmFtZVByaXZhdGU6
OmhhbmRsZVByb2dyZXNzRmluaXNoZWQoUVBvaW50ICpsb2NhbFBvcykKK3sKKyAgICBRV2lkZ2V0
ICp2aWV3ID0gcS0+cGFnZSgpLT52aWV3KCk7CisgICAgaWYgKCF2aWV3IHx8ICFsb2NhbFBvcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpsb2NhbFBvcyA9IHZpZXctPm1hcEZyb21HbG9i
YWwoUUN1cnNvcjo6cG9zKCkpOworICAgIHJldHVybiB2aWV3LT5oYXNGb2N1cygpICYmIHZpZXct
PnJlY3QoKS5jb250YWlucygqbG9jYWxQb3MpOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6
OmVtaXRJbml0aWFsTGF5b3V0Q29tcGxldGVkKCkKK3sKKyAgICBlbWl0IHEtPmluaXRpYWxMYXlv
dXRDb21wbGV0ZWQoKTsKK30KKwordm9pZCBRV2ViRnJhbWVQcml2YXRlOjplbWl0SWNvbkNoYW5n
ZWQoKQoreworICAgIGVtaXQgcS0+aWNvbkNoYW5nZWQoKTsKK30KKwordm9pZCBRV2ViRnJhbWVQ
cml2YXRlOjplbWl0TG9hZFN0YXJ0ZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQpCit7CisgICAgaWYg
KHBhZ2UgJiYgb3JpZ2luYXRpbmdMb2FkKQorICAgICAgICBlbWl0IHBhZ2UtPmxvYWRTdGFydGVk
KCk7CisgICAgZW1pdCBxLT5sb2FkU3RhcnRlZCgpOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQsIGJvb2wgb2spCit7Cisg
ICAgaWYgKHBhZ2UgJiYgb3JpZ2luYXRpbmdMb2FkKQorICAgICAgICBlbWl0IHBhZ2UtPmxvYWRG
aW5pc2hlZChvayk7CisgICAgZW1pdCBxLT5sb2FkRmluaXNoZWQob2spOworfQorCitRV2ViRnJh
bWVBZGFwdGVyICpRV2ViRnJhbWVQcml2YXRlOjpjcmVhdGVXZWJGcmFtZShRV2ViRnJhbWVBZGFw
dGVyICpwYXJlbnRBZGFwdGVyKQoreworICAgIFFXZWJGcmFtZSAqbmV3RnJhbWUgPSBuZXcgUVdl
YkZyYW1lKFFXZWJGcmFtZVByaXZhdGU6OmtpdChwYXJlbnRBZGFwdGVyKSk7CisgICAgcmV0dXJu
IG5ld0ZyYW1lLT5kOworfQorCitRV2ViRnJhbWUgKlFXZWJGcmFtZVByaXZhdGU6OmFwaUhhbmRs
ZSgpCit7CisgICAgcmV0dXJuIHE7Cit9CisKK1FPYmplY3QgKlFXZWJGcmFtZVByaXZhdGU6Omhh
bmRsZSgpCit7CisgICAgcmV0dXJuIHE7Cit9CisKK3ZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6Y29u
dGVudHNTaXplRGlkQ2hhbmdlKGNvbnN0IFFTaXplICZzaXplKQoreworICAgIGVtaXQgcS0+Y29u
dGVudHNTaXplQ2hhbmdlZChzaXplKTsKK30KKworaW50IFFXZWJGcmFtZVByaXZhdGU6OnNjcm9s
bEJhclBvbGljeShRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIChpbnQpIHEtPnNjcm9sbEJhclBvbGljeShvcmllbnRhdGlvbik7Cit9CisKIC8qIQogICAg
IFxjbGFzcyBRV2ViRnJhbWUKICAgICBcc2luY2UgNC40CkBAIC00NzIsMjkgKzQ4OSwyNyBAQCB2
b2lkIFFXZWJGcmFtZVByaXZhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0KCkKICAgICBcdmFsdWUg
QWxsTGF5ZXJzIEluY2x1ZGVzIGFsbCB0aGUgYWJvdmUgbGF5ZXJzCiAqLwogCi1RV2ViRnJhbWU6
OlFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpCi0g
ICAgOiBRT2JqZWN0KHBhcmVudCkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJQYWdlICpwYXJl
bnRQYWdlLCBRV2ViUGFnZUFkYXB0ZXIgKnBhZ2VBZGFwdGVyKQorICAgIDogUU9iamVjdChwYXJl
bnRQYWdlKQogICAgICwgZChuZXcgUVdlYkZyYW1lUHJpdmF0ZSkKIHsKLSAgICBkLT5wYWdlID0g
cGFyZW50OwotICAgIGQtPmluaXQodGhpcywgZnJhbWVEYXRhKTsKKyAgICBkLT5wYWdlID0gcGFy
ZW50UGFnZTsKKyAgICBkLT5wYWdlQWRhcHRlciA9IHBhcmVudFBhZ2UtPmhhbmRsZSgpOworICAg
IGQtPnEgPSB0aGlzOworICAgIHBhZ2VBZGFwdGVyLT5pbml0RnJhbWUoZCk7CiAKLSAgICBpZiAo
IWZyYW1lRGF0YS0+dXJsLmlzRW1wdHkoKSkgewotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdChmcmFtZURhdGEtPnVybCwgZnJhbWVEYXRhLT5yZWZlcnJlcik7Ci0gICAg
ICAgIGQtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBmcmFtZURhdGEtPm5hbWUsIGZh
bHNlKTsKLSAgICB9CiAjaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKICAgICBjb25uZWN0
KCZkLT5tX29yaWVudGF0aW9uLCBTSUdOQUwocmVhZGluZ0NoYW5nZWQoKSksIHRoaXMsIFNMT1Qo
X3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkpKTsKICAgICBkLT5tX29yaWVudGF0aW9uLnN0YXJ0KCk7
CiAjZW5kaWYKIH0KIAotUVdlYkZyYW1lOjpRV2ViRnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFX
ZWJGcmFtZURhdGEgKmZyYW1lRGF0YSkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJGcmFtZSAq
cGFyZW50KQogICAgIDogUU9iamVjdChwYXJlbnQpCiAgICAgLCBkKG5ldyBRV2ViRnJhbWVQcml2
YXRlKQogewogICAgIGQtPnBhZ2UgPSBwYXJlbnQtPmQtPnBhZ2U7Ci0gICAgZC0+aW5pdCh0aGlz
LCBmcmFtZURhdGEpOworICAgIGQtPnEgPSB0aGlzOwogI2lmIEVOQUJMRShPUklFTlRBVElPTl9F
VkVOVFMpCiAgICAgY29ubmVjdCgmZC0+bV9vcmllbnRhdGlvbiwgU0lHTkFMKHJlYWRpbmdDaGFu
Z2VkKCkpLCB0aGlzLCBTTE9UKF9xX29yaWVudGF0aW9uQ2hhbmdlZCgpKSk7CiAgICAgZC0+bV9v
cmllbnRhdGlvbi5zdGFydCgpOwpAQCAtNTAzLDkgKzUxOCw2IEBAIFFXZWJGcmFtZTo6UVdlYkZy
YW1lKFFXZWJGcmFtZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpCiAKIFFXZWJG
cmFtZTo6flFXZWJGcmFtZSgpCiB7Ci0gICAgaWYgKGQtPmZyYW1lICYmIGQtPmZyYW1lLT5sb2Fk
ZXIoKSAmJiBkLT5mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKQotICAgICAgICBzdGF0aWNfY2Fz
dDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZC0+ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPm1f
d2ViRnJhbWUgPSAwOwotCiAgICAgZGVsZXRlIGQ7CiB9CiAKQEAgLTY3NCwyMiArNjg2LDYgQEAg
c3RhdGljIGlubGluZSBib29sIGlzQ29yZUZyYW1lQ2xlYXIoV2ViQ29yZTo6RnJhbWUqIGZyYW1l
KQogICAgIHJldHVybiBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuaXNFbXB0eSgpOwogfQogCi1z
dGF0aWMgaW5saW5lIFFVcmwgZW5zdXJlQWJzb2x1dGVVcmwoY29uc3QgUVVybCAmdXJsKQotewot
ICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLmlzUmVsYXRpdmUoKSkKLSAgICAgICAgcmV0
dXJuIHVybDsKLQotICAgIC8vIFRoaXMgY29udGFpbnMgdGhlIFVSTCB3aXRoIGFic29sdXRlIHBh
dGggYnV0IHdpdGhvdXQgCi0gICAgLy8gdGhlIHF1ZXJ5IGFuZCB0aGUgZnJhZ21lbnQgcGFydC4K
LSAgICBRVXJsIGJhc2VVcmwgPSBRVXJsOjpmcm9tTG9jYWxGaWxlKFFGaWxlSW5mbyh1cmwudG9M
b2NhbEZpbGUoKSkuYWJzb2x1dGVGaWxlUGF0aCgpKTsgCi0KLSAgICAvLyBUaGUgcGF0aCBpcyBy
ZW1vdmVkIHNvIHRoZSBxdWVyeSBhbmQgdGhlIGZyYWdtZW50IHBhcnRzIGFyZSB0aGVyZS4KLSAg
ICBRU3RyaW5nIHBhdGhSZW1vdmVkID0gdXJsLnRvU3RyaW5nKFFVcmw6OlJlbW92ZVBhdGgpOwot
ICAgIFFVcmwgdG9SZXNvbHZlKHBhdGhSZW1vdmVkKTsKLSAgICAKLSAgICByZXR1cm4gYmFzZVVy
bC5yZXNvbHZlZCh0b1Jlc29sdmUpOwotfQotCiAvKiEKICAgICBccHJvcGVydHkgUVdlYkZyYW1l
Ojp1cmwKICAgICBcYnJpZWYgdGhlIHVybCBvZiB0aGUgZnJhbWUgY3VycmVudGx5IHZpZXdlZApA
QCAtNzA0LDcgKzcwMCw3IEBAIHN0YXRpYyBpbmxpbmUgUVVybCBlbnN1cmVBYnNvbHV0ZVVybChj
b25zdCBRVXJsICZ1cmwpCiB2b2lkIFFXZWJGcmFtZTo6c2V0VXJsKGNvbnN0IFFVcmwgJnVybCkK
IHsKICAgICBjbGVhckNvcmVGcmFtZShkLT5mcmFtZSk7Ci0gICAgY29uc3QgUVVybCBhYnNvbHV0
ZSA9IGVuc3VyZUFic29sdXRlVXJsKHVybCk7CisgICAgY29uc3QgUVVybCBhYnNvbHV0ZSA9IFFX
ZWJGcmFtZUFkYXB0ZXI6OmVuc3VyZUFic29sdXRlVXJsKHVybCk7CiAgICAgZC0+dXJsID0gYWJz
b2x1dGU7CiAgICAgbG9hZChhYnNvbHV0ZSk7CiB9CkBAIC03OTgsNTggKzc5NCw3IEBAIHZvaWQg
UVdlYkZyYW1lOjpsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxLAogICAgICAgICAgICAg
ICAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUUJ5dGVBcnJheSAmYm9keSkKIHsKLSAgICBpZiAoZC0+
cGFyZW50RnJhbWUoKSkKLSAgICAgICAgZC0+cGFnZS0+ZC0+aW5zaWRlT3BlbkNhbGwgPSB0cnVl
OwotCi0gICAgUVVybCB1cmwgPSBlbnN1cmVBYnNvbHV0ZVVybChyZXEudXJsKCkpOwotCi0gICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLQotICAgIHN3aXRjaCAob3Bl
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpIZWFkT3BlcmF0
aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJIRUFEIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJh
dGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlB1dE9wZXJh
dGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUFVUIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlBvc3RPcGVy
YXRpb246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBPU1QiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6RGVsZXRl
T3BlcmF0aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJERUxFVEUiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
Q3VzdG9tT3BlcmF0aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKHJlcS5h
dHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpDdXN0b21WZXJiQXR0cmlidXRlKS50b0J5dGVBcnJh
eSgpLmNvbnN0RGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3
b3JrQWNjZXNzTWFuYWdlcjo6VW5rbm93bk9wZXJhdGlvbjoKLSAgICAgICAgICAgIC8vIGVoPwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUVZhcmlhbnQgY2FjaGVMb2FkID0gcmVx
LmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OkNhY2hlTG9hZENvbnRyb2xBdHRyaWJ1dGUpOwot
ICAgIGlmIChjYWNoZUxvYWQuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAg
IHVpbnQgY2FjaGVMb2FkVmFsdWUgPSBjYWNoZUxvYWQudG9VSW50KCZvayk7Ci0gICAgICAgIGlm
IChvaykKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY2FjaGVMb2FkQ29udHJv
bFRvQ2FjaGVQb2xpY3koY2FjaGVMb2FkVmFsdWUpKTsKLSAgICB9Ci0KLSAgICBRTGlzdDxRQnl0
ZUFycmF5PiBodHRwSGVhZGVycyA9IHJlcS5yYXdIZWFkZXJMaXN0KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBodHRwSGVhZGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBRQnl0
ZUFycmF5ICZoZWFkZXJOYW1lID0gaHR0cEhlYWRlcnMuYXQoaSk7Ci0gICAgICAgIHJlcXVlc3Qu
YWRkSFRUUEhlYWRlckZpZWxkKFFTdHJpbmc6OmZyb21MYXRpbjEoaGVhZGVyTmFtZSksIFFTdHJp
bmc6OmZyb21MYXRpbjEocmVxLnJhd0hlYWRlcihoZWFkZXJOYW1lKSkpOwotICAgIH0KLQotICAg
IGlmICghYm9keS5pc0VtcHR5KCkpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoV2ViQ29y
ZTo6Rm9ybURhdGE6OmNyZWF0ZShib2R5LmNvbnN0RGF0YSgpLCBib2R5LnNpemUoKSkpOwotCi0g
ICAgZC0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIGZhbHNlKTsKLQotICAgIGlmIChk
LT5wYXJlbnRGcmFtZSgpKQotICAgICAgICBkLT5wYWdlLT5kLT5pbnNpZGVPcGVuQ2FsbCA9IGZh
bHNlOworICAgIGQtPmxvYWQocmVxLCBvcGVyYXRpb24sIGJvZHkpOwogfQogCiAvKiEKQEAgLTEw
ODgsMTAgKzEwMzMsNyBAQCB2b2lkIFFXZWJGcmFtZTo6c2Nyb2xsKGludCBkeCwgaW50IGR5KQog
CiBRUG9pbnQgUVdlYkZyYW1lOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFk
LT5mcmFtZS0+dmlldygpKQotICAgICAgICByZXR1cm4gUVBvaW50KDAsIDApOwotCi0gICAgSW50
U2l6ZSBvZnMgPSBkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKTsKKyAgICBJbnRTaXpl
IG9mcyA9IGQtPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIFFQb2ludChvZnMud2lkdGgo
KSwgb2ZzLmhlaWdodCgpKTsKIH0KIApAQCAtMTI0OCw5ICsxMTkwLDcgQEAgUVBvaW50IFFXZWJG
cmFtZTo6cG9zKCkgY29uc3QKICovCiBRUmVjdCBRV2ViRnJhbWU6Omdlb21ldHJ5KCkgY29uc3QK
IHsKLSAgICBpZiAoIWQtPmZyYW1lLT52aWV3KCkpCi0gICAgICAgIHJldHVybiBRUmVjdCgpOwot
ICAgIHJldHVybiBkLT5mcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKTsKKyAgICByZXR1cm4gZC0+
ZnJhbWVSZWN0KCk7CiB9CiAKIC8qIQpAQCAtMTQ3OSw2ICsxNDE5LDExIEBAIFFXZWJGcmFtZSog
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUpCiAg
ICAgcmV0dXJuIHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihjb3JlRnJhbWUtPmxvYWRlcigpLT5u
ZXR3b3JraW5nQ29udGV4dCgpLT5vcmlnaW5hdGluZ09iamVjdCgpKTsKIH0KIAorUVdlYkZyYW1l
ICpRV2ViRnJhbWVQcml2YXRlOjpraXQoY29uc3QgUVdlYkZyYW1lQWRhcHRlciogZnJhbWVBZGFw
dGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBRV2ViRnJhbWVQcml2YXRlKj4o
ZnJhbWVBZGFwdGVyKS0+cTsKK30KKwogCiAvKiEKICAgICBcZm4gdm9pZCBRV2ViRnJhbWU6Omph
dmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkKQEAgLTE4NTcsNCArMTgwMiwxMiBAQCBRV2Vi
RnJhbWUgKlFXZWJIaXRUZXN0UmVzdWx0OjpmcmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIGQtPmZy
YW1lLmRhdGEoKTsKIH0KIAorLyohCisgKiBcaW50ZXJuYWwKKyAqLworUVdlYkZyYW1lQWRhcHRl
ciAqUVdlYkZyYW1lOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBkOworfQorCiAjaW5j
bHVkZSAibW9jX3F3ZWJmcmFtZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCmluZGV4IGNh
OTY2NjFlMzVjYWM1MjY2ZDU1ZjBmNDE4NzNjNTY2NzBkYzM5OTEuLmFhZTNjNzFmNzE4OTlkMWI2
MzQzNTRjYTg4MjRmNzFmYThjNmRjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCkBAIC00
MSw4ICs0MSwxMCBAQCBjbGFzcyBRUHJpbnRlcjsKIFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3Mg
UVdlYk5ldHdvcmtSZXF1ZXN0OworY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKIGNsYXNzIFFXZWJG
cmFtZVByaXZhdGU7CiBjbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIGNs
YXNzIFFXZWJIaXRUZXN0UmVzdWx0OwogY2xhc3MgUVdlYkhpc3RvcnlJdGVtOwogY2xhc3MgUVdl
YlNlY3VyaXR5T3JpZ2luOwpAQCAtMTE1LDggKzExNyw4IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JU
IFFXZWJGcmFtZSA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX1BST1BFUlRZKFFQb2ludCBzY3Jv
bGxQb3NpdGlvbiBSRUFEIHNjcm9sbFBvc2l0aW9uIFdSSVRFIHNldFNjcm9sbFBvc2l0aW9uKQog
ICAgIFFfUFJPUEVSVFkoYm9vbCBmb2N1cyBSRUFEIGhhc0ZvY3VzKQogcHJpdmF0ZToKLSAgICBR
V2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKTsKLSAg
ICBRV2ViRnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7
CisgICAgUVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnRQYWdlLCBRV2ViUGFnZUFkYXB0ZXIgKik7
CisgICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50KTsKICAgICB+UVdlYkZyYW1lKCk7CiAK
IHB1YmxpYzoKQEAgLTIwMCw2ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGV2
ZW50KFFFdmVudCAqKTsKIAogICAgIFFXZWJTZWN1cml0eU9yaWdpbiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0OworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGhhbmRsZSgpIGNvbnN0OwogCiBwdWJsaWMg
UV9TTE9UUzoKICAgICBRVmFyaWFudCBldmFsdWF0ZUphdmFTY3JpcHQoY29uc3QgUVN0cmluZyYg
c2NyaXB0U291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IGQ2Nzc5ZjJi
YzU5OTMxMzliYzdkMGZlYzRiNjRlMTZlYmY1MDlkMzYuLjEzNzM4YzdmMzE2ODBjY2M3M2E4ODUw
YWRlY2QyMzdmNDIwZmQ3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMjEs
MjQgKzIxLDI1IEBACiAjaWZuZGVmIFFXRUJGUkFNRV9QX0gKICNkZWZpbmUgUVdFQkZSQU1FX1Bf
SAogCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorCiAjaW5jbHVkZSAicXdlYmZyYW1l
LmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKICNpbmNsdWRlICJx
b3JpZW50YXRpb25zZW5zb3IuaCIKICNlbmRpZiAvLyBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRT
KS4KICNpbmNsdWRlICJxd2ViZWxlbWVudC5oIgotI2luY2x1ZGUgInd0Zi9SZWZQdHIuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKICNlbmRpZgorI2luY2x1ZGUg
IlZpZXdwb3J0QXJndW1lbnRzLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDQy
ICs1MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiBjbGFzcyBRV2ViUGFnZTsKIAotY2xh
c3MgUVdlYkZyYW1lRGF0YSB7Ci1wdWJsaWM6Ci0gICAgUVdlYkZyYW1lRGF0YShXZWJDb3JlOjpQ
YWdlKiwgV2ViQ29yZTo6RnJhbWUqIHBhcmVudEZyYW1lID0gMCwKLSAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogPSAwLAotICAgICAgICAgICAgICAgICAg
Y29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSA9IFdURjo6U3RyaW5nKCkpOwotCi0gICAgV2Vi
Q29yZTo6S1VSTCB1cmw7Ci0gICAgV1RGOjpTdHJpbmcgbmFtZTsKLSAgICBXZWJDb3JlOjpIVE1M
RnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudDsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdl
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdCogZnJhbWVMb2FkZXJDbGllbnQ7Ci0KLSAgICBXVEY6OlN0cmluZyByZWZl
cnJlcjsKLSAgICBib29sIGFsbG93c1Njcm9sbGluZzsKLSAgICBpbnQgbWFyZ2luV2lkdGg7Ci0g
ICAgaW50IG1hcmdpbkhlaWdodDsKLX07Ci0KLWNsYXNzIFFXZWJGcmFtZVByaXZhdGUgeworY2xh
c3MgUVdlYkZyYW1lUHJpdmF0ZSA6IHB1YmxpYyBRV2ViRnJhbWVBZGFwdGVyIHsKIHB1YmxpYzoK
ICAgICBRV2ViRnJhbWVQcml2YXRlKCkKICAgICAgICAgOiBxKDApCiAgICAgICAgICwgaG9yaXpv
bnRhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpCiAgICAgICAgICwgdmVy
dGljYWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9sbEJhckFzTmVlZGVkKQotICAgICAgICAsIGZy
YW1lTG9hZGVyQ2xpZW50KDApCi0gICAgICAgICwgZnJhbWUoMCkKICAgICAgICAgLCBwYWdlKDAp
Ci0gICAgICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCi0gICAgICAgICwgbWFyZ2luV2lkdGgo
LTEpCi0gICAgICAgICwgbWFyZ2luSGVpZ2h0KC0xKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICAgICAgLCByb290VGV4dHVyZU1hcHBlckxheWVyKDApCiAjZW5kaWYKICAg
ICAgICAge30KLSAgICB2b2lkIGluaXQoUVdlYkZyYW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEq
IGZyYW1lRGF0YSk7CiAgICAgdm9pZCBzZXRQYWdlKFFXZWJQYWdlKik7CiAKICAgICBpbmxpbmUg
UVdlYkZyYW1lICpwYXJlbnRGcmFtZSgpIHsgcmV0dXJuIHFvYmplY3RfY2FzdDxRV2ViRnJhbWUq
PihxLT5wYXJlbnQoKSk7IH0KQEAgLTk1LDYgKzcxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFdlYkNvcmU6OkZyYW1lKiBjb3JlKGNvbnN0IFFXZWJGcmFtZSopOwogICAgIHN0YXRpYyBRV2Vi
RnJhbWUqIGtpdChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworICAgIHN0YXRpYyBRV2ViRnJhbWUq
IGtpdChjb25zdCBRV2ViRnJhbWVBZGFwdGVyKik7CiAKICAgICB2b2lkIHJlbmRlclJlbGF0aXZl
Q29vcmRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIFFGbGFnczxRV2ViRnJhbWU6OlJlbmRl
ckxheWVyPiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCkBAIC0xMDUsMjIgKzgyLDI5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlckNvbXBvc2l0
ZWRMYXllcnMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcCk7CiAjZW5kaWYKICAgICB2b2lkIHJlbmRlckZyYW1lRXh0cmFzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCosIFFGbGFnczxRV2ViRnJhbWU6OlJlbmRlckxheWVyPiwgY29uc3QgUVJl
Z2lvbiYgY2xpcCk7Ci0gICAgdm9pZCBlbWl0VXJsQ2hhbmdlZCgpOwogICAgIHZvaWQgX3Ffb3Jp
ZW50YXRpb25DaGFuZ2VkKCk7CiAKLSAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KCk7CisK
KyAgICAvLyBBZGFwdGVyIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBRV2ViRnJhbWUqIGFw
aUhhbmRsZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUU9iamVjdCogaGFuZGxlKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZURpZENoYW5nZShjb25zdCBRU2l6ZSAm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJQb2xpY3koUXQ6Ok9yaWVudGF0
aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFVybENoYW5nZWQoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUHJvZ3Jlc3NGaW5pc2hlZChRUG9pbnQqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEljb25DaGFuZ2VkKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGVtaXRMb2FkU3RhcnRlZChib29sIG9yaWdpbmF0aW5nTG9hZCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGVtaXRMb2FkRmluaXNoZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQs
IGJvb2wgb2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgUVdlYkZyYW1lQWRhcHRlciogY3JlYXRl
V2ViRnJhbWUoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOwogCiAgICAgUVdlYkZyYW1lICpx
OwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgaG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeTsKICAg
ICBRdDo6U2Nyb2xsQmFyUG9saWN5IHZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5OwotICAgIFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQgKmZyYW1lTG9hZGVyQ2xpZW50OwotICAgIFdlYkNvcmU6
OkZyYW1lICpmcmFtZTsKICAgICBRV2ViUGFnZSAqcGFnZTsKLSAgICBXZWJDb3JlOjpLVVJMIHVy
bDsKIAotICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOwotICAgIGludCBtYXJnaW5XaWR0aDsKLSAg
ICBpbnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAg
ICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKaW5kZXggZjc4NDk2NjZlMGZjYmQxOGNjZjJhZWJkMWUy
NzNjNzJiNzk5Mjc0MC4uYTk0NWI1OTJiYjI5MGUxODZjNTZiMDM5YzBkYmM4ZTY1NTJiZDkyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApAQCAtMjAsMTUgKzIwLDE2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKICNpbmNsdWRlICJx
d2ViaGlzdG9yeV9wLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKIAogI2luY2x1ZGUgIkJh
Y2tGb3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkljb25E
YXRhYmFzZUJhc2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgorI2luY2x1ZGUgPFFXZWJQYWdlQWRhcHRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiAjaW5jbHVkZSA8UVNoYXJlZERhdGE+CkBAIC01NTIsOSArNTUzLDkgQEAg
UURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oUURhdGFTdHJlYW0mIHNvdXJjZSwgUVdlYkhpc3Rvcnkm
IGhpc3RvcnkpCiAgICAgcmV0dXJuIHNvdXJjZTsKIH0KIAotUVdlYlBhZ2VQcml2YXRlKiBRV2Vi
SGlzdG9yeVByaXZhdGU6OnBhZ2UoKQorUVdlYlBhZ2VBZGFwdGVyKiBRV2ViSGlzdG9yeVByaXZh
dGU6OnBhZ2UoKQogewotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KGxzdCktPnBhZ2UoKS0+bWFpbkZyYW1l
KCkpLT5wYWdlKCktPmhhbmRsZSgpOworICAgIHJldHVybiBRV2ViUGFnZUFkYXB0ZXI6OmtpdChz
dGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4obHN0KS0+cGFnZSgpKTsK
IH0KIAogV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFFXZWJIaXN0b3J5SXRlbVByaXZhdGU6OmNvcmUo
Y29uc3QgUVdlYkhpc3RvcnlJdGVtKiBxKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmhpc3RvcnlfcC5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlfcC5o
CmluZGV4IGFhZWUzODYzMjljMDVmYzU3YzE3MmRiNmU2ODM2OTYyMWIyYWZiMzEuLjE3NjM0ZWJj
MDg4ZGU4ZTk0YjU2NDgxNWNjZDQ4OWMwOWYwNjMyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJoaXN0b3J5X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
aGlzdG9yeV9wLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5o
PgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogCi1jbGFzcyBRV2ViUGFnZVByaXZh
dGU7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJI
aXN0b3J5SXRlbVByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgewogcHVibGljOgpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGxzdC0+ZGVyZWYoKTsKICAgICB9CiAKLSAgICBR
V2ViUGFnZVByaXZhdGUqIHBhZ2UoKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UoKTsKIAog
ICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqIGxzdDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IDJmYmJhYjI0OWEwNDFjMzZhY2ZjZDJjOGVhNzZj
ODEyNjhmNmYyNWQuLjU1MDg5ZTFhMWZjZWU4Y2RlOTQzOWJkOTUyY2NiYzViMzMxNmVmOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCkBAIC0xODQsMTIgKzE4NCwxMiBA
QCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGV2ZW50KQogfQog
CiAvKiEgXGludGVybmFsICovCi12b2lkIFFXZWJJbnNwZWN0b3JQcml2YXRlOjpzZXRGcm9udGVu
ZChRV2lkZ2V0KiBuZXdGcm9udGVuZCkKK3ZvaWQgUVdlYkluc3BlY3RvclByaXZhdGU6OnNldEZy
b250ZW5kKFFPYmplY3QqIG5ld0Zyb250ZW5kKQogewogICAgIGlmIChmcm9udGVuZCkKICAgICAg
ICAgZnJvbnRlbmQtPnNldFBhcmVudCgwKTsKIAotICAgIGZyb250ZW5kID0gbmV3RnJvbnRlbmQ7
CisgICAgZnJvbnRlbmQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG5ld0Zyb250ZW5kKTsKIAog
ICAgIGlmIChmcm9udGVuZCkgewogICAgICAgICBmcm9udGVuZC0+c2V0UGFyZW50KHEpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvcl9wLmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3AuaAppbmRleCA0ZDMyN2NjNWE5MTFmN2U1MjI5
ODA0ZjFkOGUyNzlhNDU0OGVkNzU3Li45MDhkZTg0ZWRjMWQ5YWI3YTA3MTE4ZGRkYjU5MmY0YWUx
YmYyNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3Au
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yX3AuaApAQCAtMzUsNyAr
MzUsNyBAQCBwdWJsaWM6CiAgICAgLCBmcm9udGVuZCgwKQogICAgIHt9CiAKLSAgICB2b2lkIHNl
dEZyb250ZW5kKFFXaWRnZXQqIG5ld0Zyb250ZW5kKTsKKyAgICB2b2lkIHNldEZyb250ZW5kKFFP
YmplY3QqIG5ld0Zyb250ZW5kKTsKICAgICB2b2lkIGFkanVzdEZyb250ZW5kU2l6ZShjb25zdCBR
U2l6ZSYgc2l6ZSk7CiAKICAgICBRV2ViSW5zcGVjdG9yKiBxOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwCmluZGV4IGFkZTQ5NmZhNDRhZTNkN2VlOGQ2NzEzNDQ0NjU5OGNmMmRhZjQ0YmIuLjU4
MzJiY2M4MWExZDgwNmZiOGVhYmY4ZDQ3NDlhMjM5YTI0NzllYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKQEAgLTIyLDE4ICsyMiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAicXdlYnBhZ2UuaCIKIAotI2luY2x1ZGUgInF3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXdl
YmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9w
LmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKLSNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgi
Ci0jaW5jbHVkZSAicXdlYmluc3BlY3Rvci5oIgotI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3JfcC5o
IgotI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgotI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBs
dWdpbi5oIgotI2luY2x1ZGUgInF3ZWJraXR2ZXJzaW9uLmgiCi0KICNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRl
ICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgpAQCAtNDUsNiArMzMsOSBAQAogI2luY2x1ZGUg
IkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRRdC5oIgogI2luY2x1
ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2lmIFVTRShRVF9NVUxUSU1FRElBKQorI2lu
Y2x1ZGUgIkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmgiCisjZW5kaWYKICNpZiBFTkFC
TEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2luY2x1ZGUgIkRldmljZU1vdGlvbkNsaWVudFF0Lmgi
CiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgiCkBAIC02Miw3ICs1Myw2
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKQEAgLTc4LDggKzY4LDkgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJJbml0V2ViQ29yZVF0LmgiCisjaW5jbHVkZSAiSW5pdFdlYktpdFF0LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRXZWJQYWdl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clNlcnZlclF0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtODgsMjAgKzc5LDIyIEBACiAjaW5j
bHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGFnZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFzdGVi
b2FyZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJRR3JhcGhpY3NXaWRn
ZXRQbHVnaW5JbXBsLmgiCisjaW5jbHVkZSAiUVdlYlVuZG9Db21tYW5kLmgiCisjaW5jbHVkZSAi
UVdpZGdldFBsdWdpbkltcGwuaCIKKyNpbmNsdWRlICJRdEZhbGxiYWNrV2ViUG9wdXAuaCIKICNp
bmNsdWRlICJRdFBsYXRmb3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCkBAIC0xMTQsMTYgKzEwNywzMCBAQAogI2lu
Y2x1ZGUgIlN5c3RlbUluZm8uaCIKICNlbmRpZiAvLyBRX09TX1dJTjMyCiAjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVW5kb1N0ZXBRdC5oIgogI2luY2x1ZGUgIlVzZXJBZ2Vu
dFF0LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiV2ViS2l0
VmVyc2lvbi5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV29ya2Vy
VGhyZWFkLmgiCiAKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWVf
cC5oIgorI2luY2x1ZGUgInF3ZWJoaXN0b3J5LmgiCisjaW5jbHVkZSAicXdlYmhpc3RvcnlfcC5o
IgorI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3IuaCIKKyNpbmNsdWRlICJxd2ViaW5zcGVjdG9yX3Au
aCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRlICJxd2Via2l0
dmVyc2lvbi5oIgorI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxd2Vic2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJxd2Vidmlldy5oIgorCiAjaW5jbHVkZSA8UUFjdGlvbj4KICNpbmNs
dWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUJhc2ljVGltZXI+CiAjaW5jbHVkZSA8UUJp
dEFycmF5PgorI2luY2x1ZGUgPFFDbGlwYm9hcmQ+CiAjaW5jbHVkZSA8UUNvbG9yRGlhbG9nPgog
I2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxRRGVza3RvcFdpZGdldD4KQEAgLTEzNywyNCAr
MTQ0LDI1IEBACiAjaW5jbHVkZSA8UUxhYmVsPgogI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUg
PFFNZXNzYWdlQm94PgorI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KICNpbmNsdWRl
IDxRTmV0d29ya1Byb3h5PgotI2luY2x1ZGUgPFFVbmRvU3RhY2s+Ci0jaW5jbHVkZSA8UVVybD4K
KyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CiAjaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVk
ZSA8UUNsaXBib2FyZD4KICNpbmNsdWRlIDxRU3NsU29ja2V0PgogI2luY2x1ZGUgPFFTdHlsZT4K
ICNpbmNsdWRlIDxRU3lzSW5mbz4KKyNpZiBVU0UoUVRfTU9CSUxJVFlfU1lTVEVNSU5GTykKKyNp
bmNsdWRlIDxxc3lzdGVtaW5mby5oPgorI2VuZGlmCisjaW5jbHVkZSA8UVN5c3RlbVRyYXlJY29u
PgogI2luY2x1ZGUgPFFUZXh0Q2hhckZvcm1hdD4KKyNpbmNsdWRlIDxRVG9vbFRpcD4KICNpbmNs
dWRlIDxRVG91Y2hFdmVudD4KLSNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+Ci0jaW5j
bHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPFFVbmRvU3RhY2s+CisjaW5jbHVkZSA8
UVVybD4KICNpZiBkZWZpbmVkKFFfV1NfWDExKQogI2luY2x1ZGUgPFFYMTFJbmZvPgogI2VuZGlm
Ci0jaWYgVVNFKFFUX01PQklMSVRZX1NZU1RFTUlORk8pCi0jaW5jbHVkZSA8cXN5c3RlbWluZm8u
aD4KLSNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTYzLDggKzE3MSw2
IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogZXh0ZXJuIFFfR1VJX0VYUE9SVCBpbnQgcXRfZGVmYXVs
dERwaSgpOwogUVRfRU5EX05BTUVTUEFDRQogCi1ib29sIFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVu
ID0gZmFsc2U7Ci0KIC8vIExvb2t1cCB0YWJsZSBtYXBwaW5nIFFXZWJQYWdlOjpXZWJBY3Rpb25z
IHRvIHRoZSBhc3NvY2lhdGVkIEVkaXRvciBjb21tYW5kcwogc3RhdGljIGNvbnN0IGNoYXIqIGVk
aXRvckNvbW1hbmRXZWJBY3Rpb25zW10gPQogewpAQCAtMzAwLDIzICszMDYsMTUgQEAgc3RhdGlj
IGlubGluZSBRdDo6RHJvcEFjdGlvbiBkcmFnT3BUb0Ryb3BBY3Rpb24odW5zaWduZWQgYWN0aW9u
cykKIAogUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogICAg
IDogcShxcSkKLSAgICAsIHBhZ2UoMCkKICNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCiAgICAgLCB1
bmRvU3RhY2soMCkKICNlbmRpZgotICAgICwgaW5zaWRlT3BlbkNhbGwoZmFsc2UpCiAgICAgLCBt
X3RvdGFsQnl0ZXMoMCkKICAgICAsIG1fYnl0ZXNSZWNlaXZlZCgpCiAgICAgLCBjbGlja0NhdXNl
ZEZvY3VzKGZhbHNlKQotICAgICwgbmV0d29ya01hbmFnZXIoMCkKLSAgICAsIGZvcndhcmRVbnN1
cHBvcnRlZENvbnRlbnQoZmFsc2UpCi0gICAgLCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQodHJ1
ZSkKLSAgICAsIHNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoZmFsc2UpCiAgICAgLCBs
aW5rUG9saWN5KFFXZWJQYWdlOjpEb250RGVsZWdhdGVMaW5rcykKLSAgICAsIHZpZXdwb3J0U2l6
ZShRU2l6ZSgwLCAwKSkKLSAgICAsIHNldHRpbmdzKDApCisgICAgLCBtX3ZpZXdwb3J0U2l6ZShR
U2l6ZSgwLCAwKSkKICAgICAsIHVzZUZpeGVkTGF5b3V0KGZhbHNlKQotICAgICwgcGx1Z2luRmFj
dG9yeSgwKQogICAgICwgaW5zcGVjdG9yRnJvbnRlbmQoMCkKICAgICAsIGluc3BlY3RvcigwKQog
ICAgICwgaW5zcGVjdG9ySXNJbnRlcm5hbE9ubHkoZmFsc2UpCkBAIC0zMjYsMTQgKzMyNCwxNCBA
QCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnZSAqcXEpCiAgICAgYm9v
bCB1c2VNb2NrID0gUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW47CiAjZW5kaWYKIAotICAgIFdlYkNv
cmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsKKyAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRX
aWRnZXRzKCk7CiAKICAgICBQYWdlOjpQYWdlQ2xpZW50cyBwYWdlQ2xpZW50czsKLSAgICBwYWdl
Q2xpZW50cy5jaHJvbWVDbGllbnQgPSBuZXcgQ2hyb21lQ2xpZW50UXQocSk7CisgICAgcGFnZUNs
aWVudHMuY2hyb21lQ2xpZW50ID0gbmV3IENocm9tZUNsaWVudFF0KHRoaXMpOwogICAgIHBhZ2VD
bGllbnRzLmNvbnRleHRNZW51Q2xpZW50ID0gbmV3IENvbnRleHRNZW51Q2xpZW50UXQoKTsKLSAg
ICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBuZXcgRWRpdG9yQ2xpZW50UXQocSk7Ci0gICAg
cGFnZUNsaWVudHMuZHJhZ0NsaWVudCA9IG5ldyBEcmFnQ2xpZW50UXQocSk7Ci0gICAgcGFnZUNs
aWVudHMuaW5zcGVjdG9yQ2xpZW50ID0gbmV3IEluc3BlY3RvckNsaWVudFF0KHEpOworICAgIHBh
Z2VDbGllbnRzLmVkaXRvckNsaWVudCA9IG5ldyBFZGl0b3JDbGllbnRRdCh0aGlzKTsKKyAgICBw
YWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gbmV3IERyYWdDbGllbnRRdChwYWdlQ2xpZW50cy5jaHJv
bWVDbGllbnQpOworICAgIHBhZ2VDbGllbnRzLmluc3BlY3RvckNsaWVudCA9IG5ldyBJbnNwZWN0
b3JDbGllbnRRdCh0aGlzKTsKICAgICBwYWdlID0gbmV3IFBhZ2UocGFnZUNsaWVudHMpOwogI2lm
IEVOQUJMRShHRU9MT0NBVElPTikKICAgICBpZiAodXNlTW9jaykgewpAQCAtMzQyLDcgKzM0MCw3
IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkKICAgICAg
ICAgV2ViQ29yZTo6cHJvdmlkZUdlb2xvY2F0aW9uVG8ocGFnZSwgbW9jayk7CiAgICAgICAgIG1v
Y2stPnNldENvbnRyb2xsZXIoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9tKHBh
Z2UpKTsKICAgICB9IGVsc2UKLSAgICAgICAgV2ViQ29yZTo6cHJvdmlkZUdlb2xvY2F0aW9uVG8o
cGFnZSwgbmV3IEdlb2xvY2F0aW9uQ2xpZW50UXQocSkpOworICAgICAgICBXZWJDb3JlOjpwcm92
aWRlR2VvbG9jYXRpb25UbyhwYWdlLCBuZXcgR2VvbG9jYXRpb25DbGllbnRRdCh0aGlzKSk7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIGlmICh1c2VNb2NrKQpA
QCAtMzUxLDkgKzM0OSw2IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQ
YWdlICpxcSkKICAgICAgICAgV2ViQ29yZTo6cHJvdmlkZURldmljZU9yaWVudGF0aW9uVG8ocGFn
ZSwgbmV3IERldmljZU9yaWVudGF0aW9uQ2xpZW50UXQpOwogICAgIFdlYkNvcmU6OnByb3ZpZGVE
ZXZpY2VNb3Rpb25UbyhwYWdlLCBuZXcgRGV2aWNlTW90aW9uQ2xpZW50UXQpOwogI2VuZGlmCi0j
aWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykK
LSAgICBXZWJDb3JlOjpwcm92aWRlTm90aWZpY2F0aW9uKHBhZ2UsIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKSk7Ci0jZW5kaWYKIAogICAgIC8v
IEJ5IGRlZmF1bHQgZWFjaCBwYWdlIGlzIHB1dCBpbnRvIHRoZWlyIG93biB1bmlxdWUgcGFnZSBn
cm91cCwgd2hpY2ggYWZmZWN0cyBwb3B1cCB3aW5kb3dzCiAgICAgLy8gYW5kIHZpc2l0ZWQgbGlu
a3MuIFBhZ2UgZ3JvdXBzIChwZXIgcHJvY2VzcyBvbmx5KSBpcyBhIGZlYXR1cmUgbWFraW5nIGl0
IHBvc3NpYmxlIHRvIHVzZQpAQCAtMzY0LDcgKzM1OSw3IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdl
YlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkKIAogICAgIHBhZ2UtPmFkZExheW91dE1pbGVzdG9u
ZXMoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKIAotICAgIHNldHRpbmdzID0gbmV3
IFFXZWJTZXR0aW5ncyhwYWdlLT5zZXR0aW5ncygpKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXI6Omlu
aXQocGFnZSk7CiAKICAgICBoaXN0b3J5LmQgPSBuZXcgUVdlYkhpc3RvcnlQcml2YXRlKHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwYWdlLT5iYWNrRm9yd2FyZExp
c3QoKSkpOwogICAgIG1lbXNldChhY3Rpb25zLCAwLCBzaXplb2YoYWN0aW9ucykpOwpAQCAtMzcy
LDggKzM2NywxMyBAQCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnZSAq
cXEpCiAgICAgUGFnZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyh0cnVlKTsKICAg
ICAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJ
T05TKQotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVz
ZW50ZXIoKS0+YWRkQ2xpZW50KCk7Ci0jZW5kaWYKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdCogcHJlc2VudGVyID0gTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlm
aWNhdGlvblByZXNlbnRlcigpOworICAgIHByZXNlbnRlci0+YWRkQ2xpZW50KCk7CisjaWZuZGVm
IFFUX05PX1NZU1RFTVRSQVlJQ09OCisgICAgaWYgKCFwcmVzZW50ZXItPmhhc1N5c3RlbVRyYXlJ
Y29uKCkpCisgICAgICAgIHByZXNlbnRlci0+c2V0U3lzdGVtVHJheUljb24obmV3IFFTeXN0ZW1U
cmF5SWNvbik7CisjZW5kaWYgLy8gUVRfTk9fU1lTVEVNVFJBWUlDT04KKyNlbmRpZiAvLyBFTkFC
TEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogfQogCiBR
V2ViUGFnZVByaXZhdGU6On5RV2ViUGFnZVByaXZhdGUoKQpAQCAtMzg0LDggKzM4NCw2IEBAIFFX
ZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgpCiAjaWZuZGVmIFFUX05PX1VORE9TVEFD
SwogICAgIGRlbGV0ZSB1bmRvU3RhY2s7CiAjZW5kaWYKLSAgICBkZWxldGUgc2V0dGluZ3M7Ci0g
ICAgZGVsZXRlIHBhZ2U7CiAgICAgCiAgICAgaWYgKGluc3BlY3RvcikgewogICAgICAgICAvLyBJ
ZiB0aGUgaW5zcGVjdG9yIGlzIG91cnMsIGRlbGV0ZSBpdCwgb3RoZXJ3aXNlIGp1c3QgZGV0YWNo
IGZyb20gaXQuCkBAIC0zOTQsNDEgKzM5MiwyMjAgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBh
Z2VQcml2YXRlKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5zcGVjdG9yLT5zZXRQYWdl
KDApOwogICAgIH0KKyAgICAvLyBFeHBsaWNpdGx5IGRlc3RydWN0IHRoZSBXZWJDb3JlIHBhZ2Ug
YXQgdGhpcyBwb2ludCB3aGVuIHRoZQorICAgIC8vIFFXZWJQYWdlUHJpdmF0ZSAvIFFXZWJQYWdl
QWRhcGF0ZXIgdnRhYmxlcyBhcmUgc3RpbGwgaW50YWN0LAorICAgIC8vIGluIG9yZGVyIGZvciB2
YXJpb3VzIGRlc3RydWN0aW9uIGNhbGxiYWNrcyBvdXQgb2YgV2ViQ29yZSB0bworICAgIC8vIHdv
cmsuCisgICAgZGVsZXRlUGFnZSgpOworfQogCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8
IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLSAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnJlbW92ZUNsaWVudCgpOworV2ViQ29y
ZTo6UGFnZSogUVdlYlBhZ2VQcml2YXRlOjpjb3JlKGNvbnN0IFFXZWJQYWdlKiBwYWdlKQorewor
ICAgIHJldHVybiBwYWdlLT5kLT5wYWdlOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6c2hv
dygpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgdmlldy0+d2luZG93
KCktPnNob3coKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OnNldEZvY3VzKCkKK3sKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3LT5zZXRGb2N1cygpOworfQor
Cit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dW5mb2N1cygpCit7CisgICAgaWYgKCF2aWV3KQorICAg
ICAgICByZXR1cm47CisgICAgdmlldy0+Y2xlYXJGb2N1cygpOworfQorCit2b2lkIFFXZWJQYWdl
UHJpdmF0ZTo6c2V0V2luZG93UmVjdChjb25zdCBRUmVjdCAmcmVjdCkKK3sKKyAgICBlbWl0IHEt
Pmdlb21ldHJ5Q2hhbmdlUmVxdWVzdGVkKHJlY3QpOworfQorCitRU2l6ZSBRV2ViUGFnZVByaXZh
dGU6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHEtPnZpZXdwb3J0U2l6ZSgp
OworfQorCitRV2ViUGFnZUFkYXB0ZXIgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlV2luZG93KGJv
b2wgZGlhbG9nKQoreworICAgIFFXZWJQYWdlICpuZXdQYWdlID0gcS0+Y3JlYXRlV2luZG93KGRp
YWxvZyA/IFFXZWJQYWdlOjpXZWJNb2RhbERpYWxvZyA6IFFXZWJQYWdlOjpXZWJCcm93c2VyV2lu
ZG93KTsKKyAgICBpZiAoIW5ld1BhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgbWFpbiBmcmFtZSBleGlzdHMsIGFzIFdlYkNvcmUgZXhwZWN0cyBpdCB3aGVuIHJl
dHVybmluZyBmcm9tIHRoaXMgQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coKQorICAgIG5ld1Bh
Z2UtPmQtPmNyZWF0ZU1haW5GcmFtZSgpOworICAgIHJldHVybiBuZXdQYWdlLT5kOworfQorCit2
b2lkIFFXZWJQYWdlUHJpdmF0ZTo6amF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IFFTdHJp
bmcgJm1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBRU3RyaW5nICZzb3VyY2VJRCkKK3sK
KyAgICBxLT5qYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UobWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlSUQpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6amF2YVNjcmlwdEFsZXJ0KFFXZWJG
cmFtZUFkYXB0ZXIqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2cpCit7CisgICAgcS0+amF2YVNj
cmlwdEFsZXJ0KFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIG1zZyk7Cit9CisKK2Jvb2wg
UVdlYlBhZ2VQcml2YXRlOjpqYXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWVBZGFwdGVyKiBmcmFt
ZSwgY29uc3QgUVN0cmluZyYgbXNnKQoreworICAgIHJldHVybiBxLT5qYXZhU2NyaXB0Q29uZmly
bShRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpLCBtc2cpOworfQorCitib29sIFFXZWJQYWdl
UHJpdmF0ZTo6amF2YVNjcmlwdFByb21wdChRV2ViRnJhbWVBZGFwdGVyICpmcmFtZSwgY29uc3Qg
UVN0cmluZyAmbXNnLCBjb25zdCBRU3RyaW5nICZkZWZhdWx0VmFsdWUsIFFTdHJpbmcgKnJlc3Vs
dCkKK3sKKyAgICByZXR1cm4gcS0+amF2YVNjcmlwdFByb21wdChRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZnJhbWUpLCBtc2csIGRlZmF1bHRWYWx1ZSwgcmVzdWx0KTsKK30KKwordm9pZCBRV2ViUGFn
ZVByaXZhdGU6OnByaW50UmVxdWVzdGVkKFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lKQoreworICAg
IGVtaXQgcS0+cHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSk7Cit9
CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpkYXRhYmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1l
QWRhcHRlciogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGRhdGFiYXNlTmFtZSkKK3sKKyAgICBlbWl0
IHEtPmRhdGFiYXNlUXVvdGFFeGNlZWRlZChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpLCBk
YXRhYmFzZU5hbWUpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6YXBwbGljYXRpb25DYWNo
ZVF1b3RhRXhjZWVkZWQoUVdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIHF1aW50NjQgZGVmYXVs
dE9yaWdpblF1b3RhLCBxdWludDY0IGMpCit7CisgICAgZW1pdCBxLT5hcHBsaWNhdGlvbkNhY2hl
UXVvdGFFeGNlZWRlZChvcmlnaW4sIGRlZmF1bHRPcmlnaW5RdW90YSwgZGVmYXVsdE9yaWdpblF1
b3RhKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OnNldFRvb2xUaXAoY29uc3QgUVN0cmlu
ZyAmdGlwKQoreworI2lmbmRlZiBRVF9OT19UT09MVElQCisgICAgaWYgKCF2aWV3KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAodGlwLmlzRW1wdHkoKSkgeworICAgICAgICB2aWV3LT5zZXRU
b29sVGlwKFFTdHJpbmcoKSk7CisgICAgICAgIFFUb29sVGlwOjpoaWRlVGV4dCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFFTdHJpbmcgZHRpcCA9IFFMYXRpbjFTdHJpbmcoIjxwPiIpICsgUVN0
cmluZyh0aXApLnRvSHRtbEVzY2FwZWQoKSArIFFMYXRpbjFTdHJpbmcoIjwvcD4iKTsKKyAgICAg
ICAgdmlldy0+c2V0VG9vbFRpcChkdGlwKTsKKyAgICB9CisjZWxzZQorICAgIFFfVU5VU0VEKHRp
cCk7CiAjZW5kaWYKIH0KIAotV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgUVdlYlBhZ2VQcml2
YXRlOjp2aWV3cG9ydEFyZ3VtZW50cygpCisjaWYgVVNFKFFUX01VTFRJTUVESUEpCitRV2ViRnVs
bFNjcmVlblZpZGVvSGFuZGxlciAqUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKCkKIHsKLSAgICByZXR1cm4gcGFnZSA/IHBhZ2UtPnZpZXdwb3J0QXJndW1lbnRz
KCkgOiBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cygpOworICAgIHJldHVybiBuZXcgV2ViS2l0
OjpEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKIH0KKyNlbmRpZgogCi1XZWJDb3JlOjpQ
YWdlKiBRV2ViUGFnZVByaXZhdGU6OmNvcmUoY29uc3QgUVdlYlBhZ2UqIHBhZ2UpCitRV2ViRnJh
bWVBZGFwdGVyICpRV2ViUGFnZVByaXZhdGU6Om1haW5GcmFtZUFkYXB0ZXIoKQogewotICAgIHJl
dHVybiBwYWdlLT5kLT5wYWdlOworICAgIHJldHVybiBxLT5tYWluRnJhbWUoKS0+ZDsKIH0KIAot
UVdlYlBhZ2VQcml2YXRlKiBRV2ViUGFnZVByaXZhdGU6OnByaXYoUVdlYlBhZ2UqIHBhZ2UpCitR
U3RyaW5nTGlzdCBRV2ViUGFnZVByaXZhdGU6OmNob29zZUZpbGVzKFFXZWJGcmFtZUFkYXB0ZXIg
KmZyYW1lLCBib29sIGFsbG93TXVsdGlwbGUsIGNvbnN0IFFTdHJpbmdMaXN0ICZzdWdnZXN0ZWRG
aWxlTmFtZXMpCiB7Ci0gICAgcmV0dXJuIHBhZ2UtPmQ7CisgICAgaWYgKGFsbG93TXVsdGlwbGUg
JiYgcS0+c3VwcG9ydHNFeHRlbnNpb24oUVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRl
bnNpb24pKSB7CisgICAgICAgIFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9u
T3B0aW9uIG9wdGlvbjsKKyAgICAgICAgb3B0aW9uLnBhcmVudEZyYW1lID0gUVdlYkZyYW1lUHJp
dmF0ZTo6a2l0KGZyYW1lKTsKKyAgICAgICAgb3B0aW9uLnN1Z2dlc3RlZEZpbGVOYW1lcyA9IHN1
Z2dlc3RlZEZpbGVOYW1lczsKKworICAgICAgICBRV2ViUGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxl
c0V4dGVuc2lvblJldHVybiBvdXRwdXQ7CisgICAgICAgIHEtPmV4dGVuc2lvbihRV2ViUGFnZTo6
Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCk7CisKKyAgICAg
ICAgcmV0dXJuIG91dHB1dC5maWxlTmFtZXM7CisgICAgfQorICAgIC8vIFNpbmdsZSBmaWxlCisg
ICAgUVN0cmluZ0xpc3QgcmVzdWx0OworICAgIFFTdHJpbmcgc3VnZ2VzdGVkRmlsZTsKKyAgICBp
ZiAoIXN1Z2dlc3RlZEZpbGVOYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHN1Z2dlc3RlZEZpbGUg
PSBzdWdnZXN0ZWRGaWxlTmFtZXMuZmlyc3QoKTsKKyAgICBRU3RyaW5nIGZpbGUgPSBxLT5jaG9v
c2VGaWxlKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIHN1Z2dlc3RlZEZpbGUpOworICAg
IGlmICghZmlsZS5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdCA8PCBmaWxlOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLWJvb2wgUVdlYlBhZ2VQcml2YXRlOjphY2NlcHROYXZpZ2F0aW9uUmVx
dWVzdChRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFX
ZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZSB0eXBlKQorYm9vbCBRV2ViUGFnZVByaXZhdGU6OmFjY2Vw
dE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lQWRhcHRlciwgY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBpbnQgdHlwZSkKIHsKKyAgICBRV2ViRnJhbWUgKmZy
YW1lID0gZnJhbWVBZGFwdGVyID8gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lQWRhcHRlcik6
IDA7CiAgICAgaWYgKGluc2lkZU9wZW5DYWxsCiAgICAgICAgICYmIGZyYW1lID09IG1haW5GcmFt
ZS5kYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBxLT5hY2NlcHROYXZp
Z2F0aW9uUmVxdWVzdChmcmFtZSwgcmVxdWVzdCwgdHlwZSk7CisgICAgcmV0dXJuIHEtPmFjY2Vw
dE5hdmlnYXRpb25SZXF1ZXN0KGZyYW1lLCByZXF1ZXN0LCBRV2ViUGFnZTo6TmF2aWdhdGlvblR5
cGUodHlwZSkpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZW1pdFJlc3RvcmVGcmFtZVN0
YXRlUmVxdWVzdGVkKFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lKQoreworICAgIGVtaXQgcS0+cmVz
dG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSk7Cit9
CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjplbWl0U2F2ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdl
YkZyYW1lQWRhcHRlciAqZnJhbWUsIFFXZWJIaXN0b3J5SXRlbSAqaXRlbSkKK3sKKyAgICBlbWl0
IHEtPnNhdmVGcmFtZVN0YXRlUmVxdWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSks
IGl0ZW0pOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZW1pdERvd25sb2FkUmVxdWVzdGVk
KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCkKK3sKKyAgICBlbWl0IHEtPmRvd25sb2Fk
UmVxdWVzdGVkKHJlcXVlc3QpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZW1pdEZyYW1l
Q3JlYXRlZChRV2ViRnJhbWVBZGFwdGVyICpmcmFtZSkKK3sKKyAgICBlbWl0IHEtPmZyYW1lQ3Jl
YXRlZChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpKTsKK30KKworYm9vbCBRV2ViUGFnZVBy
aXZhdGU6OmVycm9yUGFnZUV4dGVuc2lvbihRV2ViUGFnZUFkYXB0ZXI6OkVycm9yUGFnZU9wdGlv
biAqb3B0LCBRV2ViUGFnZUFkYXB0ZXI6OkVycm9yUGFnZVJldHVybiAqb3V0KQoreworICAgIFFX
ZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb25PcHRpb24gb3B0aW9uOworICAgIGlmIChvcHQtPmRv
bWFpbiA9PSBRTGF0aW4xU3RyaW5nKCJRdE5ldHdvcmsiKSkKKyAgICAgICAgb3B0aW9uLmRvbWFp
biA9IFFXZWJQYWdlOjpRdE5ldHdvcms7CisgICAgZWxzZSBpZiAob3B0LT5kb21haW4gPT0gUUxh
dGluMVN0cmluZygiSFRUUCIpKQorICAgICAgICBvcHRpb24uZG9tYWluID0gUVdlYlBhZ2U6Okh0
dHA7CisgICAgZWxzZSBpZiAob3B0LT5kb21haW4gPT0gUUxhdGluMVN0cmluZygiV2ViS2l0Iikp
CisgICAgICAgIG9wdGlvbi5kb21haW4gPSBRV2ViUGFnZTo6V2ViS2l0OworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIG9wdGlvbi51cmwgPSBvcHQtPnVybDsKKyAgICBvcHRp
b24uZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQob3B0LT5mcmFtZSk7CisgICAgb3B0aW9u
LmVycm9yID0gb3B0LT5lcnJvcjsKKyAgICBvcHRpb24uZXJyb3JTdHJpbmcgPSBvcHQtPmVycm9y
U3RyaW5nOworICAgIFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb25SZXR1cm4gb3V0cHV0Owor
ICAgIGlmICghcS0+ZXh0ZW5zaW9uKFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24sICZvcHRp
b24sICZvdXRwdXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgb3V0LT5iYXNlVXJsID0g
b3V0cHV0LmJhc2VVcmw7CisgICAgb3V0LT5jb250ZW50ID0gb3V0cHV0LmNvbnRlbnQ7CisgICAg
b3V0LT5jb250ZW50VHlwZSA9IG91dHB1dC5jb250ZW50VHlwZTsKKyAgICBvdXQtPmVuY29kaW5n
ID0gb3V0cHV0LmVuY29kaW5nOworICAgIHJldHVybiB0cnVlOworfQorCitRdFBsdWdpbldpZGdl
dEFkYXB0ZXIgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJpbmcgJmNs
YXNzaWQsIGNvbnN0IFFVcmwgJnVybCwgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMsIGNv
bnN0IFFTdHJpbmdMaXN0ICZwYXJhbVZhbHVlcykKK3sKKyAgICBRT2JqZWN0ICp3aWRnZXQgPSBx
LT5jcmVhdGVQbHVnaW4oY2xhc3NpZCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Cisg
ICAgcmV0dXJuIGFkYXB0ZXJGb3JXaWRnZXQod2lkZ2V0KTsKK30KKworUXRQbHVnaW5XaWRnZXRB
ZGFwdGVyICpRV2ViUGFnZVByaXZhdGU6OmFkYXB0ZXJGb3JXaWRnZXQoUU9iamVjdCAqb2JqZWN0
KSBjb25zdAoreworICAgIGlmIChRV2lkZ2V0ICp3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdl
dCo+KG9iamVjdCkpCisgICAgICAgIHJldHVybiBuZXcgUVdpZGdldFBsdWdpbkltcGwod2lkZ2V0
KTsKKyAgICBpZiAoUUdyYXBoaWNzV2lkZ2V0ICp3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UUdyYXBo
aWNzV2lkZ2V0Kj4ob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG5ldyBRR3JhcGhpY3NXaWRnZXRQ
bHVnaW5JbXBsKHdpZGdldCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgUVdlYlBhZ2VQcml2
YXRlOjpjcmVhdGVNYWluRnJhbWUoKQogewogICAgIGlmICghbWFpbkZyYW1lKSB7Ci0gICAgICAg
IFFXZWJGcmFtZURhdGEgZnJhbWVEYXRhKHBhZ2UpOwotICAgICAgICBtYWluRnJhbWUgPSBuZXcg
UVdlYkZyYW1lKHEsICZmcmFtZURhdGEpOwotCisgICAgICAgIG1haW5GcmFtZSA9IG5ldyBRV2Vi
RnJhbWUocSwgdGhpcyk7CiAgICAgICAgIGVtaXQgcS0+ZnJhbWVDcmVhdGVkKG1haW5GcmFtZS5k
YXRhKCkpOwogICAgIH0KIH0KQEAgLTQ3NSw0OSArNjUyLDQ5IEBAIFFNZW51ICpRV2ViUGFnZVBy
aXZhdGU6OmNyZWF0ZUNvbnRleHRNZW51KGNvbnN0IFdlYkNvcmU6OkNvbnRleHRNZW51ICp3ZWJj
b3JlTWVuCiAgICAgaWYgKCFjbGllbnQgfHwgIXdlYmNvcmVNZW51KQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIFFNZW51KiBtZW51ID0gbmV3IFFNZW51KGNsaWVudC0+b3duZXJXaWRnZXQoKSk7
CisgICAgUU1lbnUqIG1lbnUgPSBuZXcgUU1lbnUocS0+dmlldygpKTsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGl0ZW1zLT5jb3VudCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgQ29udGV4dE1l
bnVJdGVtICZpdGVtID0gaXRlbXMtPmF0KGkpOwogICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkNvcmU6OkNoZWNrYWJsZUFjdGlvblR5cGU6IC8qIGZh
bGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSBXZWJDb3JlOjpBY3Rpb25UeXBlOiB7Ci0g
ICAgICAgICAgICAgICAgUVdlYlBhZ2U6OldlYkFjdGlvbiBhY3Rpb24gPSB3ZWJBY3Rpb25Gb3JD
b250ZXh0TWVudUFjdGlvbihpdGVtLmFjdGlvbigpKTsKLSAgICAgICAgICAgICAgICBRQWN0aW9u
ICphID0gcS0+YWN0aW9uKGFjdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0KGl0ZW0pOwotICAgICAgICAgICAgICAg
ICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVk
KGl0KTsKLSAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGRl
c2MgPSBpdC5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgICAgICAg
ICBhLT5zZXRFbmFibGVkKGRlc2MuZW5hYmxlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGEtPnNl
dENoZWNrZWQoZGVzYy5jaGVja2VkKTsKLSAgICAgICAgICAgICAgICAgICAgYS0+c2V0Q2hlY2th
YmxlKGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkNoZWNrYWJsZUFjdGlvblR5cGUpOwotCi0gICAg
ICAgICAgICAgICAgICAgIG1lbnUtPmFkZEFjdGlvbihhKTsKLSAgICAgICAgICAgICAgICAgICAg
dmlzaXRlZFdlYkFjdGlvbnMtPnNldEJpdChhY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpDaGVja2FibGVBY3Rp
b25UeXBlOiAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBXZWJDb3JlOjpBY3Rpb25U
eXBlOiB7CisgICAgICAgICAgICBRV2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlvbiA9IHdlYkFjdGlv
bkZvckNvbnRleHRNZW51QWN0aW9uKGl0ZW0uYWN0aW9uKCkpOworICAgICAgICAgICAgUUFjdGlv
biAqYSA9IHEtPmFjdGlvbihhY3Rpb24pOworICAgICAgICAgICAgaWYgKGEpIHsKKyAgICAgICAg
ICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXQoaXRlbSk7CisgICAgICAgICAgICAgICAgcGFnZS0+
Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNoZWNrT3JFbmFibGVJZk5lZWRlZChpdCk7CisgICAg
ICAgICAgICAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGRlc2MgPSBpdC5yZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbigpOworICAgICAgICAgICAgICAgIGEtPnNldEVuYWJsZWQoZGVz
Yy5lbmFibGVkKTsKKyAgICAgICAgICAgICAgICBhLT5zZXRDaGVja2VkKGRlc2MuY2hlY2tlZCk7
CisgICAgICAgICAgICAgICAgYS0+c2V0Q2hlY2thYmxlKGl0ZW0udHlwZSgpID09IFdlYkNvcmU6
OkNoZWNrYWJsZUFjdGlvblR5cGUpOworCisgICAgICAgICAgICAgICAgbWVudS0+YWRkQWN0aW9u
KGEpOworICAgICAgICAgICAgICAgIHZpc2l0ZWRXZWJBY3Rpb25zLT5zZXRCaXQoYWN0aW9uKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViQ29yZTo6U2VwYXJhdG9yVHlwZToK
LSAgICAgICAgICAgICAgICBtZW51LT5hZGRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViQ29yZTo6U3VibWVudVR5cGU6IHsKLSAgICAgICAg
ICAgICAgICBRTWVudSAqc3ViTWVudSA9IGNyZWF0ZUNvbnRleHRNZW51KHdlYmNvcmVNZW51LCBp
dGVtLnBsYXRmb3JtU3ViTWVudSgpLCB2aXNpdGVkV2ViQWN0aW9ucyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYkNvcmU6OlNlcGFyYXRvclR5cGU6Cisg
ICAgICAgICAgICBtZW51LT5hZGRTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OlN1Ym1lbnVUeXBlOiB7CisgICAgICAgICAgICBRTWVudSAqc3Vi
TWVudSA9IGNyZWF0ZUNvbnRleHRNZW51KHdlYmNvcmVNZW51LCBpdGVtLnBsYXRmb3JtU3ViTWVu
dSgpLCB2aXNpdGVkV2ViQWN0aW9ucyk7CiAKLSAgICAgICAgICAgICAgICBib29sIGFueUVuYWJs
ZWRBY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgYW55RW5hYmxlZEFjdGlvbiA9IGZh
bHNlOwogCi0gICAgICAgICAgICAgICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zID0gc3ViTWVu
dS0+YWN0aW9ucygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9u
cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbnMuYXQoaSkt
PmlzVmlzaWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYW55RW5hYmxlZEFjdGlvbiB8
PSBhY3Rpb25zLmF0KGkpLT5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBkb24ndCBzaG93IHN1Yi1tZW51cyB3aXRoIGp1c3QgZGlzYWJsZWQgYWN0
aW9ucwotICAgICAgICAgICAgICAgIGlmIChhbnlFbmFibGVkQWN0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN1Yk1lbnUtPnNldFRpdGxlKGl0ZW0udGl0bGUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1lbnUtPmFkZEFjdGlvbihzdWJNZW51LT5tZW51QWN0aW9uKCkpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgc3ViTWVudTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFFMaXN0PFFBY3Rpb24gKj4gYWN0aW9ucyA9
IHN1Yk1lbnUtPmFjdGlvbnMoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0
aW9ucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9ucy5hdChpKS0+
aXNWaXNpYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIGFueUVuYWJsZWRBY3Rpb24gfD0gYWN0
aW9ucy5hdChpKS0+aXNFbmFibGVkKCk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGRvbid0IHNob3cgc3ViLW1lbnVzIHdpdGgganVzdCBkaXNhYmxlZCBhY3Rpb25zCisgICAgICAg
ICAgICBpZiAoYW55RW5hYmxlZEFjdGlvbikgeworICAgICAgICAgICAgICAgIHN1Yk1lbnUtPnNl
dFRpdGxlKGl0ZW0udGl0bGUoKSk7CisgICAgICAgICAgICAgICAgbWVudS0+YWRkQWN0aW9uKHN1
Yk1lbnUtPm1lbnVBY3Rpb24oKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBkZWxldGUgc3ViTWVudTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAgICAgcmV0dXJuIG1lbnU7CkBAIC02MTksNiArNzk2LDY1IEBAIHZvaWQgUVdl
YlBhZ2VQcml2YXRlOjp1cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpCiAgICAgdXBkYXRlQWN0aW9u
KFFXZWJQYWdlOjpSZWxvYWRBbmRCeXBhc3NDYWNoZSk7CiB9CiAKK1FPYmplY3QgKlFXZWJQYWdl
UHJpdmF0ZTo6aW5zcGVjdG9ySGFuZGxlKCkKK3sKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGVJbnNw
ZWN0b3IoKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OnNldEluc3BlY3RvckZyb250ZW5k
KFFPYmplY3QqIGZyb250ZW5kKQoreworICAgIGluc3BlY3RvckZyb250ZW5kID0gcW9iamVjdF9j
YXN0PFFXaWRnZXQqPihmcm9udGVuZCk7CisgICAgaWYgKGluc3BlY3RvcikKKyAgICAgICAgaW5z
cGVjdG9yLT5kLT5zZXRGcm9udGVuZChmcm9udGVuZCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2
YXRlOjpzZXRJbnNwZWN0b3JXaW5kb3dUaXRsZShjb25zdCBRU3RyaW5nJiB0aXRsZSkKK3sKKyAg
ICBpZiAoaW5zcGVjdG9yKQorICAgICAgICBpbnNwZWN0b3ItPnNldFdpbmRvd1RpdGxlKHRpdGxl
KTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZVdlYkluc3BlY3RvcihRT2JqZWN0
KiogaW5zcGVjdG9yVmlldywgUVdlYlBhZ2VBZGFwdGVyKiogaW5zcGVjdG9yUGFnZSkKK3sKKyAg
ICBRV2ViUGFnZSogcGFnZSA9IG5ldyBXZWJLaXQ6Okluc3BlY3RvckNsaWVudFdlYlBhZ2U7Cisg
ICAgKmluc3BlY3RvclZpZXcgPSBwYWdlLT52aWV3KCk7CisgICAgKmluc3BlY3RvclBhZ2UgPSBw
YWdlLT5kOworfQorCisjaWZuZGVmIFFUX05PX01FTlUKK3N0YXRpYyBRU3RyaW5nTGlzdCBpdGVy
YXRlQ29udGV4dE1lbnUoUU1lbnUqIG1lbnUpCit7CisgICAgaWYgKCFtZW51KQorICAgICAgICBy
ZXR1cm4gUVN0cmluZ0xpc3QoKTsKKworICAgIFFTdHJpbmdMaXN0IGl0ZW1zOworICAgIFFMaXN0
PFFBY3Rpb24gKj4gYWN0aW9ucyA9IG1lbnUtPmFjdGlvbnMoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGFjdGlvbnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChhY3Rpb25zLmF0KGkp
LT5pc1NlcGFyYXRvcigpKQorICAgICAgICAgICAgaXRlbXMgPDwgUUxhdGluMVN0cmluZygiPHNl
cGFyYXRvcj4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbXMgPDwgYWN0aW9ucy5h
dChpKS0+dGV4dCgpOworICAgICAgICBpZiAoYWN0aW9ucy5hdChpKS0+bWVudSgpKQorICAgICAg
ICAgICAgaXRlbXMgPDwgaXRlcmF0ZUNvbnRleHRNZW51KGFjdGlvbnMuYXQoaSktPm1lbnUoKSk7
CisgICAgfQorICAgIHJldHVybiBpdGVtczsKK30KKyNlbmRpZgorCitRU3RyaW5nTGlzdCBRV2Vi
UGFnZVByaXZhdGU6Om1lbnVBY3Rpb25zQXNUZXh0KCkKK3sKKyNpZm5kZWYgUVRfTk9fTUVOVQor
ICAgIHJldHVybiBpdGVyYXRlQ29udGV4dE1lbnUoY3VycmVudENvbnRleHRNZW51LmRhdGEoKSk7
CisjZWxzZQorICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOworI2VuZGlmCit9CisKK3ZvaWQgUVdl
YlBhZ2VQcml2YXRlOjplbWl0Vmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKQoreworICAgIGVtaXQg
cS0+dmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKTsKK30KKwogdm9pZCBRV2ViUGFnZVByaXZhdGU6
OnVwZGF0ZUVkaXRvckFjdGlvbnMoKQogewogICAgIHVwZGF0ZUFjdGlvbihRV2ViUGFnZTo6Q3V0
KTsKQEAgLTY4Miw4ICs5MTgsNyBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dGltZXJFdmVudChR
VGltZXJFdmVudCAqZXYpCiAgICAgICAgIHEtPnRpbWVyRXZlbnQoZXYpOwogfQogCi10ZW1wbGF0
ZTxjbGFzcyBUPgotdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlTW92ZUV2ZW50KFQqIGV2KQor
dm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiBldikKIHsK
ICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1haW5G
cmFtZS5kYXRhKCkpOwogICAgIGlmICghZnJhbWUtPnZpZXcoKSkKQEAgLTY5Myw4ICs5MjgsNyBA
QCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VNb3ZlRXZlbnQoVCogZXYpCiAgICAgZXYtPnNl
dEFjY2VwdGVkKGFjY2VwdGVkKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgVD4KLXZvaWQgUVdlYlBh
Z2VQcml2YXRlOjptb3VzZVByZXNzRXZlbnQoVCogZXYpCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6
bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldikKIHsKICAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkpOwogICAgIGlm
ICghZnJhbWUtPnZpZXcoKSkKQEAgLTcyOSw4ICs5NjMsNyBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6bW91c2VQcmVzc0V2ZW50KFQqIGV2KQogICAgICAgICBjbGlja0NhdXNlZEZvY3VzID0gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgVD4KLXZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZURv
dWJsZUNsaWNrRXZlbnQoVCAqZXYpCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VEb3VibGVD
bGlja0V2ZW50KFFNb3VzZUV2ZW50ICpldikKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUg
PSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkpOwogICAgIGlmICghZnJh
bWUtPnZpZXcoKSkKQEAgLTc0Nyw4ICs5ODAsNyBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91
c2VEb3VibGVDbGlja0V2ZW50KFQgKmV2KQogICAgIHRyaXBsZUNsaWNrID0gUVBvaW50Rihldi0+
cG9zKCkpLnRvUG9pbnQoKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgVD4KLXZvaWQgUVdlYlBhZ2VQ
cml2YXRlOjptb3VzZVRyaXBsZUNsaWNrRXZlbnQoVCAqZXYpCit2b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6bW91c2VUcmlwbGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50ICpldikKIHsKICAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkp
OwogICAgIGlmICghZnJhbWUtPnZpZXcoKSkKQEAgLTc2Miw4ICs5OTQsNyBAQCB2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6bW91c2VUcmlwbGVDbGlja0V2ZW50KFQgKmV2KQogICAgIGV2LT5zZXRBY2Nl
cHRlZChhY2NlcHRlZCk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6bW91c2VSZWxlYXNlRXZlbnQoVCAqZXYpCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91
c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQgKmV2KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBm
cmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgaWYg
KCFmcmFtZS0+dmlldygpKQpAQCAtNzkwLDcgKzEwMjEsNyBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6aGFuZGxlU29mdHdhcmVJbnB1dFBhbmVsKFF0OjpNb3VzZUJ1dHRvbiBidXR0b24sIGNvbnN0
IFFQbwogICAgICAgICAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKQogICAgICAg
ICAmJiBidXR0b24gPT0gUXQ6OkxlZnRCdXR0b24gJiYgcUFwcC0+YXV0b1NpcEVuYWJsZWQoKSkg
ewogICAgICAgICBRU3R5bGU6OlJlcXVlc3RTb2Z0d2FyZUlucHV0UGFuZWwgYmVoYXZpb3IgPSBR
U3R5bGU6OlJlcXVlc3RTb2Z0d2FyZUlucHV0UGFuZWwoCi0gICAgICAgICAgICBjbGllbnQtPm93
bmVyV2lkZ2V0KCktPnN0eWxlKCktPnN0eWxlSGludChRU3R5bGU6OlNIX1JlcXVlc3RTb2Z0d2Fy
ZUlucHV0UGFuZWwpKTsKKyAgICAgICAgICAgIGNsaWVudC0+c3R5bGUoKS0+c3R5bGVIaW50KFFT
dHlsZTo6U0hfUmVxdWVzdFNvZnR3YXJlSW5wdXRQYW5lbCkpOwogICAgICAgICBpZiAoIWNsaWNr
Q2F1c2VkRm9jdXMgfHwgYmVoYXZpb3IgPT0gUVN0eWxlOjpSU0lQX09uTW91c2VDbGljaykgewog
ICAgICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmhpdFRlc3RSZXN1bHRBdFBvaW50KGZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9z
KSwgZmFsc2UpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7
CkBAIC04MzMsMTQgKzEwNjQsMTMgQEAgUU1lbnUgKlFXZWJQYWdlOjpjcmVhdGVTdGFuZGFyZENv
bnRleHRNZW51KCkKIH0KIAogI2lmbmRlZiBRVF9OT19XSEVFTEVWRU5UCi10ZW1wbGF0ZTxjbGFz
cyBUPgotdm9pZCBRV2ViUGFnZVByaXZhdGU6OndoZWVsRXZlbnQoVCAqZXYpCit2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6d2hlZWxFdmVudChRV2hlZWxFdmVudCAqZXYpCiB7CiAgICAgV2ViQ29yZTo6
RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtYWluRnJhbWUuZGF0YSgpKTsK
ICAgICBpZiAoIWZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3Jt
V2hlZWxFdmVudCBwZXYgPSBjb252ZXJ0V2hlZWxFdmVudChldik7CisgICAgUGxhdGZvcm1XaGVl
bEV2ZW50IHBldiA9IGNvbnZlcnRXaGVlbEV2ZW50KGV2LCBRQXBwbGljYXRpb246OndoZWVsU2Ny
b2xsTGluZXMoKSk7CiAgICAgYm9vbCBhY2NlcHRlZCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlV2hlZWxFdmVudChwZXYpOwogICAgIGV2LT5zZXRBY2NlcHRlZChhY2NlcHRlZCk7CiB9
CkBAIC0xMzQwLDMzICsxNTcwLDM5IEBAIGJvb2wgUVdlYlBhZ2VQcml2YXRlOjp0b3VjaEV2ZW50
KFFUb3VjaEV2ZW50KiBldmVudCkKIAogYm9vbCBRV2ViUGFnZVByaXZhdGU6Omdlc3R1cmVFdmVu
dChRR2VzdHVyZUV2ZW50KiBldmVudCkKIHsKLSNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCi0g
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtYWluRnJh
bWUuZGF0YSgpKTsKLSAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAgUVdlYkZyYW1lQWRhcHRl
ciogZnJhbWUgPSBtYWluRnJhbWUuZGF0YSgpLT5kOworICAgIGlmICghZnJhbWUtPmhhc1ZpZXco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgLy8gUUdlc3R1cmVFdmVudHMgY2FuIGNv
bnRhaW4gdXBkYXRlcyBmb3IgbXVsdGlwbGUgZ2VzdHVyZXMuCiAgICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIC8vIFFHZXN0dXJlRXZlbnQg
bGl2ZXMgaW4gV2lkZ2V0cywgd2UnbGwgbmVlZCBhIGR1bW15IHN0cnVjdCB0byBtdWxlIHRoZSBp
bmZvIGl0IGNvbnRhaW5zIHRvIHRoZSAib3RoZXIgc2lkZSIKKyAgICBRR2VzdHVyZUV2ZW50RmFj
YWRlIGdlc3R1cmVGYWNhZGU7CisKICAgICBRR2VzdHVyZSogZ2VzdHVyZSA9IGV2ZW50LT5nZXN0
dXJlKFF0OjpUYXBHZXN0dXJlKTsKICAgICAvLyBCZXdhcmUgdGhhdCBnZXN0dXJlcyBzZW5kIGJ5
IER1bXBSZW5kZXJUcmVlIHdpbGwgaGF2ZSBzdGF0ZSBRdDo6Tm9HZXN0dXJlLAogICAgIC8vIGR1
ZSB0byBub3Qgb3JpZ2luYXRpbmcgZnJvbSBhIEdlc3R1cmVSZWNvZ25pemVyLgogICAgIGlmIChn
ZXN0dXJlICYmIChnZXN0dXJlLT5zdGF0ZSgpID09IFF0OjpHZXN0dXJlU3RhcnRlZCB8fCBnZXN0
dXJlLT5zdGF0ZSgpID09IFF0OjpOb0dlc3R1cmUpKSB7Ci0gICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnZlcnRHZXN0dXJlKGV2ZW50LCBnZXN0dXJl
KSk7Ci0gICAgICAgIGV2ZW50LT5zZXRBY2NlcHRlZCh0cnVlKTsKKyAgICAgICAgZ2VzdHVyZUZh
Y2FkZS50eXBlID0gUXQ6OlRhcEdlc3R1cmU7CisgICAgICAgIFFQb2ludEYgZ2xvYmFsUG9zID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUVRhcEdlc3R1cmUqPihnZXN0dXJlKS0+cG9zaXRpb24oKTsKKyAg
ICAgICAgZ2VzdHVyZUZhY2FkZS5nbG9iYWxQb3MgPSBnbG9iYWxQb3MudG9Qb2ludCgpOworICAg
ICAgICBnZXN0dXJlRmFjYWRlLnBvcyA9IGV2ZW50LT53aWRnZXQoKS0+bWFwRnJvbUdsb2JhbChn
bG9iYWxQb3MudG9Qb2ludCgpKTsKKyAgICAgICAgZnJhbWUtPmhhbmRsZUdlc3R1cmVFdmVudCgm
Z2VzdHVyZUZhY2FkZSk7CiAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgIH0KICAgICBnZXN0
dXJlID0gZXZlbnQtPmdlc3R1cmUoUXQ6OlRhcEFuZEhvbGRHZXN0dXJlKTsKICAgICBpZiAoZ2Vz
dHVyZSAmJiAoZ2VzdHVyZS0+c3RhdGUoKSA9PSBRdDo6R2VzdHVyZVN0YXJ0ZWQgfHwgZ2VzdHVy
ZS0+c3RhdGUoKSA9PSBRdDo6Tm9HZXN0dXJlKSkgewotICAgICAgICBmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50Rm9yR2VzdHVyZShjb252ZXJ0R2VzdHVyZShldmVu
dCwgZ2VzdHVyZSkpOwotICAgICAgICBldmVudC0+c2V0QWNjZXB0ZWQodHJ1ZSk7CisgICAgICAg
IGdlc3R1cmVGYWNhZGUudHlwZSA9IFF0OjpUYXBBbmRIb2xkR2VzdHVyZTsKKyAgICAgICAgUVBv
aW50RiBnbG9iYWxQb3MgPSBzdGF0aWNfY2FzdDxjb25zdCBRVGFwQW5kSG9sZEdlc3R1cmUqPihn
ZXN0dXJlKS0+cG9zaXRpb24oKTsKKyAgICAgICAgZ2VzdHVyZUZhY2FkZS5nbG9iYWxQb3MgPSBn
bG9iYWxQb3MudG9Qb2ludCgpOworICAgICAgICBnZXN0dXJlRmFjYWRlLnBvcyA9IGV2ZW50LT53
aWRnZXQoKS0+bWFwRnJvbUdsb2JhbChnbG9iYWxQb3MudG9Qb2ludCgpKTsKKyAgICAgICAgZnJh
bWUtPmhhbmRsZUdlc3R1cmVFdmVudCgmZ2VzdHVyZUZhY2FkZSk7CiAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwogICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAKKyAgICBl
dmVudC0+c2V0QWNjZXB0ZWQoaGFuZGxlZCk7CiAgICAgcmV0dXJuIGhhbmRsZWQ7Ci0jZWxzZQot
ICAgIGV2ZW50LT5pZ25vcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKIH0KIAogLyoh
CkBAIC0yMDM3LDEyICsyMjczLDEyIEBAIHZvaWQgUVdlYlBhZ2U6OnNldFZpZXcoUVdpZGdldCog
dmlldykKIAogICAgIGlmIChkLT5jbGllbnQpIHsKICAgICAgICAgaWYgKGQtPmNsaWVudC0+aXNR
V2lkZ2V0Q2xpZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UVdpZGdl
dCo+KGQtPmNsaWVudC5nZXQoKSktPnZpZXcgPSB2aWV3OworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UGFnZUNsaWVudFFXaWRnZXQqPihkLT5jbGllbnQuZGF0YSgpKS0+dmlldyA9IHZpZXc7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAodmlldykKLSAgICAgICAgZC0+Y2xpZW50
ID0gYWRvcHRQdHIobmV3IFBhZ2VDbGllbnRRV2lkZ2V0KHZpZXcsIHRoaXMpKTsKKyAgICAgICAg
ZC0+Y2xpZW50LnJlc2V0KG5ldyBQYWdlQ2xpZW50UVdpZGdldCh2aWV3LCB0aGlzKSk7CiB9CiAK
IC8qIQpAQCAtMjA4OCw4ICsyMzI0LDcgQEAgdm9pZCBRV2ViUGFnZTo6amF2YVNjcmlwdEFsZXJ0
KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKIHsKICAgICBRX1VOVVNFRChm
cmFtZSkKICNpZm5kZWYgUVRfTk9fTUVTU0FHRUJPWAotICAgIFFXaWRnZXQqIHBhcmVudCA9IChk
LT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpIDogMDsKLSAgICBRTWVzc2FnZUJv
eCBib3gocGFyZW50KTsKKyAgICBRTWVzc2FnZUJveCBib3godmlldygpKTsKICAgICBib3guc2V0
V2luZG93VGl0bGUodHIoIkphdmFTY3JpcHQgQWxlcnQgLSAlMSIpLmFyZyhtYWluRnJhbWUoKS0+
dXJsKCkuaG9zdCgpKSk7CiAgICAgYm94LnNldFRleHRGb3JtYXQoUXQ6OlBsYWluVGV4dCk7CiAg
ICAgYm94LnNldFRleHQobXNnKTsKQEAgLTIxMTAsOCArMjM0NSw3IEBAIGJvb2wgUVdlYlBhZ2U6
OmphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykK
ICNpZmRlZiBRVF9OT19NRVNTQUdFQk9YCiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAgIFFX
aWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpIDog
MDsKLSAgICBRTWVzc2FnZUJveCBib3gocGFyZW50KTsKKyAgICBRTWVzc2FnZUJveCBib3godmll
dygpKTsKICAgICBib3guc2V0V2luZG93VGl0bGUodHIoIkphdmFTY3JpcHQgQ29uZmlybSAtICUx
IikuYXJnKG1haW5GcmFtZSgpLT51cmwoKS5ob3N0KCkpKTsKICAgICBib3guc2V0VGV4dEZvcm1h
dChRdDo6UGxhaW5UZXh0KTsKICAgICBib3guc2V0VGV4dChtc2cpOwpAQCAtMjEzNiw4ICsyMzcw
LDcgQEAgYm9vbCBRV2ViUGFnZTo6amF2YVNjcmlwdFByb21wdChRV2ViRnJhbWUgKmZyYW1lLCBj
b25zdCBRU3RyaW5nJiBtc2csIGNvbnN0IFFTdHIKICAgICBib29sIG9rID0gZmFsc2U7CiAjaWZu
ZGVmIFFUX05PX0lOUFVURElBTE9HCiAKLSAgICBRV2lkZ2V0KiBwYXJlbnQgPSAoZC0+Y2xpZW50
KSA/IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDA7Ci0gICAgUUlucHV0RGlhbG9nIGRsZyhw
YXJlbnQpOworICAgIFFJbnB1dERpYWxvZyBkbGcodmlldygpKTsKICAgICBkbGcuc2V0V2luZG93
VGl0bGUodHIoIkphdmFTY3JpcHQgUHJvbXB0IC0gJTEiKS5hcmcobWFpbkZyYW1lKCktPnVybCgp
Lmhvc3QoKSkpOwogCiAgICAgLy8gSGFjayB0byBmb3JjZSB0aGUgZGlhbG9nJ3MgUUxhYmVsIGlu
dG8gcGxhaW4gdGV4dCBtb2RlCkBAIC0yMTgxLDggKzI0MTQsNyBAQCBib29sIFFXZWJQYWdlOjpz
aG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKICNpZmRlZiBRVF9OT19NRVNTQUdFQk9YCiAgICAg
cmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICBRV2lkZ2V0KiBwYXJlbnQgPSAoZC0+Y2xpZW50KSA/
IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDA7Ci0gICAgcmV0dXJuIFFNZXNzYWdlQm94OjpZ
ZXMgPT0gUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHBhcmVudCwgdHIoIkphdmFTY3JpcHQgUHJv
YmxlbSAtICUxIikuYXJnKG1haW5GcmFtZSgpLT51cmwoKS5ob3N0KCkpLCB0cigiVGhlIHNjcmlw
dCBvbiB0aGlzIHBhZ2UgYXBwZWFycyB0byBoYXZlIGEgcHJvYmxlbS4gRG8geW91IHdhbnQgdG8g
c3RvcCB0aGUgc2NyaXB0PyIpLCBRTWVzc2FnZUJveDo6WWVzLCBRTWVzc2FnZUJveDo6Tm8pOwor
ICAgIHJldHVybiBRTWVzc2FnZUJveDo6WWVzID09IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih2
aWV3KCksIHRyKCJKYXZhU2NyaXB0IFByb2JsZW0gLSAlMSIpLmFyZyhtYWluRnJhbWUoKS0+dXJs
KCkuaG9zdCgpKSwgdHIoIlRoZSBzY3JpcHQgb24gdGhpcyBwYWdlIGFwcGVhcnMgdG8gaGF2ZSBh
IHByb2JsZW0uIERvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHNjcmlwdD8iKSwgUU1lc3NhZ2VCb3g6
OlllcywgUU1lc3NhZ2VCb3g6Ok5vKTsKICNlbmRpZgogfQogCkBAIC0yMTk3LDcgKzI0MjksOCBA
QCB2b2lkIFFXZWJQYWdlOjpzZXRGZWF0dXJlUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBG
ZWF0dXJlIGZlYXR1cmUsIFBlcm1pc3NpbwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdlb2xv
Y2F0aW9uOgogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICAgICAgR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5zZXRQZXJtaXNz
aW9uKGZyYW1lLCBwb2xpY3kpOworICAgICAgICBpZiAocG9saWN5ICE9IFBlcm1pc3Npb25Vbmtu
b3duKQorICAgICAgICAgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudCgpLT5zZXRQZXJtaXNzaW9uKGZyYW1lLT5kLCAocG9saWN5ID09
IFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKSk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAKQEAg
LTI0NjEsMjAgKzI2OTQsMTQ2IEBAIFFDb2xvciBRV2ViUGFnZVByaXZhdGU6OmNvbG9yU2VsZWN0
aW9uUmVxdWVzdGVkKGNvbnN0IFFDb2xvciAmc2VsZWN0ZWRDb2xvcikKIHsKICAgICBRQ29sb3Ig
cmV0ID0gc2VsZWN0ZWRDb2xvcjsKICNpZm5kZWYgUVRfTk9fQ09MT1JESUFMT0cKLSAgICBRV2lk
Z2V0KiBwYXJlbnQgPSAoY2xpZW50KSA/IGNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDA7Ci0gICAg
cmV0ID0gUUNvbG9yRGlhbG9nOjpnZXRDb2xvcihzZWxlY3RlZENvbG9yLCBwYXJlbnQpOworICAg
IHJldCA9IFFDb2xvckRpYWxvZzo6Z2V0Q29sb3Ioc2VsZWN0ZWRDb2xvciwgcS0+dmlldygpKTsK
ICAgICBpZiAoIXJldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldCA9IHNlbGVjdGVkQ29sb3I7CiAj
ZW5kaWYKICAgICByZXR1cm4gcmV0OwogfQogCitRV2ViU2VsZWN0TWV0aG9kICpRV2ViUGFnZVBy
aXZhdGU6OmNyZWF0ZVNlbGVjdFBvcHVwKCkKK3sKKyAgICByZXR1cm4gbmV3IFF0RmFsbGJhY2tX
ZWJQb3B1cCh0aGlzKTsKK30KKworUVJlY3QgUVdlYlBhZ2VQcml2YXRlOjp2aWV3UmVjdFJlbGF0
aXZlVG9XaW5kb3coKQoreworCisgICAgUVdpZGdldCogb3duZXJXaWRnZXQ9IGNsaWVudC5pc051
bGwoKSA/IDAgOiBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KGNsaWVudC0+b3duZXJXaWRnZXQoKSk7
CisgICAgaWYgKCFvd25lcldpZGdldCkKKyAgICAgICAgcmV0dXJuIFFSZWN0KCk7CisgICAgUVdp
ZGdldCogdG9wTGV2ZWxXaWRnZXQgPSBvd25lcldpZGdldC0+d2luZG93KCk7CisKKyAgICBRUG9p
bnQgdG9wTGVmdENvcm5lciA9IHRvcExldmVsV2lkZ2V0LT5tYXBGcm9tKG93bmVyV2lkZ2V0LCBR
UG9pbnQoMCwgMCkpOworICAgIHJldHVybiBRUmVjdCh0b3BMZWZ0Q29ybmVyLCBvd25lcldpZGdl
dC0+c2l6ZSgpKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6Omdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSkKK3sKKyAgICBlbWl0IHEtPmZl
YXR1cmVQZXJtaXNzaW9uUmVxdWVzdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIFFX
ZWJQYWdlOjpHZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpnZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsbGVkKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lKQor
eworICAgIGVtaXQgcS0+ZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQoUVdlYkZyYW1l
UHJpdmF0ZTo6a2l0KGZyYW1lKSwgUVdlYlBhZ2U6Okdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBR
V2ViUGFnZVByaXZhdGU6Om5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uUmVxdWVzdGVkKFFXZWJGcmFt
ZUFkYXB0ZXIqIGZyYW1lKQoreworICAgIGVtaXQgcS0+ZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0
ZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgUVdlYlBhZ2U6Ok5vdGlmaWNhdGlvbnMp
OworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1
ZXN0Q2FuY2VsbGVkKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lKQoreworICAgIGVtaXQgcS0+ZmVh
dHVyZVBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1l
KSwgUVdlYlBhZ2U6Ok5vdGlmaWNhdGlvbnMpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKK3sKKyAgICB1cGRhdGVFZGl0b3JBY3Rpb25zKCk7
CisKKyAgICBlbWl0IHEtPmNvbnRlbnRzQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpCit7CisgICAgdXBkYXRlRWRpdG9yQWN0
aW9ucygpOworICAgIGVtaXQgcS0+c2VsZWN0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6bWljcm9Gb2N1c0NoYW5nZWQoKQoreworICAgIGVtaXQgcS0+bWljcm9Gb2N1
c0NoYW5nZWQoKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OnRyaWdnZXJDb3B5QWN0aW9u
KCkKK3sKKyAgICBxLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpDb3B5KTsKK30KKwordm9pZCBR
V2ViUGFnZVByaXZhdGU6OnRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChRS2V5RXZlbnQqIGV2ZW50
KQoreworICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gZWRpdG9yQWN0aW9uRm9yS2V5
RXZlbnQoZXZlbnQpOworICAgIHEtPnRyaWdnZXJBY3Rpb24oYWN0aW9uKTsKK30KKwordm9pZCBR
V2ViUGFnZVByaXZhdGU6OmNsZWFyVW5kb1N0YWNrKCkKK3sKKyNpZm5kZWYgUVRfTk9fVU5ET1NU
QUNLCisgICAgaWYgKHVuZG9TdGFjaykKKyAgICAgICAgdW5kb1N0YWNrLT5jbGVhcigpOworI2Vu
ZGlmCit9CisKK2Jvb2wgUVdlYlBhZ2VQcml2YXRlOjpjYW5VbmRvKCkgY29uc3QKK3sKKyNpZm5k
ZWYgUVRfTk9fVU5ET1NUQUNLCisgICAgaWYgKCF1bmRvU3RhY2spCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdW5kb1N0YWNrLT5jYW5VbmRvKCk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFFXZWJQYWdlUHJpdmF0ZTo6Y2FuUmVkbygpIGNv
bnN0Cit7CisjaWZuZGVmIFFUX05PX1VORE9TVEFDSworICAgIGlmICghdW5kb1N0YWNrKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHVuZG9TdGFjay0+Y2FuUmVkbygpOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6
OnVuZG8oKQoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBpZiAodW5kb1N0YWNrKQor
ICAgICAgICB1bmRvU3RhY2stPnVuZG8oKTsKKyNlbmRpZgorfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6cmVkbygpCit7CisjaWZuZGVmIFFUX05PX1VORE9TVEFDSworICAgIGlmICh1bmRvU3Rh
Y2spCisgICAgICAgIHVuZG9TdGFjay0+cmVkbygpOworI2VuZGlmCit9CisKK3ZvaWQgUVdlYlBh
Z2VQcml2YXRlOjpjcmVhdGVVbmRvU3RlcChRU2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0PiBzdGVw
KQoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICAvLyBDYWxsIHVuZG9TdGFjaygpIGdl
dHRlciBmaXJzdCB0byBlbnN1cmUgc3RhY2sgaXMgY3JlYXRlZAorICAgIC8vIGlmIGl0IGRvZXNu
J3QgZXhpc3QgeWV0LgorICAgIHEtPnVuZG9TdGFjaygpLT5wdXNoKG5ldyBRV2ViVW5kb0NvbW1h
bmQoc3RlcCkpOworI2VuZGlmCit9CisKK2NvbnN0IGNoYXIgKlFXZWJQYWdlUHJpdmF0ZTo6ZWRp
dG9yQ29tbWFuZEZvcktleUV2ZW50KFFLZXlFdmVudCogZXZlbnQpCit7CisgICAgUVdlYlBhZ2U6
OldlYkFjdGlvbiBhY3Rpb24gPSBlZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChldmVudCk7CisgICAg
cmV0dXJuIGVkaXRvckNvbW1hbmRGb3JXZWJBY3Rpb25zKGFjdGlvbik7Cit9CisKIFFTaXplIFFX
ZWJQYWdlOjp2aWV3cG9ydFNpemUoKSBjb25zdAogewogICAgIGlmIChkLT5tYWluRnJhbWUgJiYg
ZC0+bWFpbkZyYW1lLmRhdGEoKS0+ZC0+ZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIGQt
Pm1haW5GcmFtZS5kYXRhKCktPmQtPmZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgpLnNpemUoKTsK
IAotICAgIHJldHVybiBkLT52aWV3cG9ydFNpemU7CisgICAgcmV0dXJuIGQtPm1fdmlld3BvcnRT
aXplOwogfQogCiAvKiEKQEAgLTI0OTEsNyArMjg1MCw3IEBAIFFTaXplIFFXZWJQYWdlOjp2aWV3
cG9ydFNpemUoKSBjb25zdAogKi8KIHZvaWQgUVdlYlBhZ2U6OnNldFZpZXdwb3J0U2l6ZShjb25z
dCBRU2l6ZSAmc2l6ZSkgY29uc3QKIHsKLSAgICBkLT52aWV3cG9ydFNpemUgPSBzaXplOworICAg
IGQtPm1fdmlld3BvcnRTaXplID0gc2l6ZTsKIAogICAgIFFXZWJGcmFtZSAqZnJhbWUgPSBtYWlu
RnJhbWUoKTsKICAgICBpZiAoZnJhbWUtPmQtPmZyYW1lICYmIGZyYW1lLT5kLT5mcmFtZS0+dmll
dygpKSB7CkBAIC0yNTc3LDcgKzI5MzYsNyBAQCBRV2ViUGFnZTo6Vmlld3BvcnRBdHRyaWJ1dGVz
IFFXZWJQYWdlOjp2aWV3cG9ydEF0dHJpYnV0ZXNGb3JTaXplKGNvbnN0IFFTaXplJiBhdgogCiAg
ICAgLy8gQm90aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbmVlZCB0byBiZSBzZXQgLSBvciB0aGV5
IHdpbGwgYmUgaWdub3JlZC4KICAgICBpZiAoZGV2aWNlV2lkdGggPCAwICYmIGRldmljZUhlaWdo
dCA8IDApIHsKLSAgICAgICAgUVNpemUgc2l6ZSA9IHF1ZXJ5RGV2aWNlU2l6ZUZvclNjcmVlbkNv
bnRhaW5pbmdXaWRnZXQoKGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAw
KTsKKyAgICAgICAgUVNpemUgc2l6ZSA9IHF1ZXJ5RGV2aWNlU2l6ZUZvclNjcmVlbkNvbnRhaW5p
bmdXaWRnZXQodmlldygpKTsKICAgICAgICAgZGV2aWNlV2lkdGggPSBzaXplLndpZHRoKCk7CiAg
ICAgICAgIGRldmljZUhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CiAgICAgfQpAQCAtMzA5MywxOCAr
MzQ1MiwzNCBAQCBib29sIFFXZWJQYWdlOjpldmVudChRRXZlbnQgKmV2KQogICAgICAgICBkLT5t
b3VzZVJlbGVhc2VFdmVudChzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7CiAgICAgICAg
IGJyZWFrOwogI2lmICFkZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKLSAgICBjYXNlIFFFdmVu
dDo6R3JhcGhpY3NTY2VuZU1vdXNlTW92ZToKLSAgICAgICAgZC0+bW91c2VNb3ZlRXZlbnQoc3Rh
dGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVu
dDo6R3JhcGhpY3NTY2VuZU1vdXNlTW92ZTogeworICAgICAgICBRR3JhcGhpY3NTY2VuZU1vdXNl
RXZlbnQgKmdzRXYgPSBzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldik7
CisgICAgICAgIFFNb3VzZUV2ZW50IGR1bW15RXZlbnQoUUV2ZW50OjpNb3VzZU1vdmUsIGdzRXYt
PnBvcygpLCBnc0V2LT5zY3JlZW5Qb3MoKSwgZ3NFdi0+YnV0dG9uKCksIGdzRXYtPmJ1dHRvbnMo
KSwgZ3NFdi0+bW9kaWZpZXJzKCkpOworICAgICAgICBkLT5tb3VzZU1vdmVFdmVudCgmZHVtbXlF
dmVudCk7CisgICAgICAgIGV2LT5zZXRBY2NlcHRlZChkdW1teUV2ZW50LmlzQWNjZXB0ZWQoKSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VQcmVz
czoKLSAgICAgICAgZC0+bW91c2VQcmVzc0V2ZW50KHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5l
TW91c2VFdmVudCo+KGV2KSk7CisgICAgfQorICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5l
TW91c2VSZWxlYXNlOiB7CisgICAgICAgIFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCAqZ3NFdiA9
IHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KTsKKyAgICAgICAgUU1v
dXNlRXZlbnQgZHVtbXlFdmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSwgZ3NFdi0+cG9z
KCksIGdzRXYtPnNjcmVlblBvcygpLCBnc0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygpLCBn
c0V2LT5tb2RpZmllcnMoKSk7CisgICAgICAgIGQtPm1vdXNlUmVsZWFzZUV2ZW50KCZkdW1teUV2
ZW50KTsKKyAgICAgICAgZXYtPnNldEFjY2VwdGVkKGR1bW15RXZlbnQuaXNBY2NlcHRlZCgpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZURvdWJs
ZUNsaWNrOgotICAgICAgICBkLT5tb3VzZURvdWJsZUNsaWNrRXZlbnQoc3RhdGljX2Nhc3Q8UUdy
YXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICB9CisgICAgY2FzZSBRRXZlbnQ6Okdy
YXBoaWNzU2NlbmVNb3VzZVByZXNzOiB7CisgICAgICAgIFFHcmFwaGljc1NjZW5lTW91c2VFdmVu
dCAqZ3NFdiA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KTsKKyAg
ICAgICAgUU1vdXNlRXZlbnQgZHVtbXlFdmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3MsIGdz
RXYtPnBvcygpLCBnc0V2LT5zY3JlZW5Qb3MoKSwgZ3NFdi0+YnV0dG9uKCksIGdzRXYtPmJ1dHRv
bnMoKSwgZ3NFdi0+bW9kaWZpZXJzKCkpOworICAgICAgICBkLT5tb3VzZVByZXNzRXZlbnQoJmR1
bW15RXZlbnQpOworICAgICAgICBldi0+c2V0QWNjZXB0ZWQoZHVtbXlFdmVudC5pc0FjY2VwdGVk
KCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNl
UmVsZWFzZToKLSAgICAgICAgZC0+bW91c2VSZWxlYXNlRXZlbnQoc3RhdGljX2Nhc3Q8UUdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICB9CisgICAgY2FzZSBRRXZlbnQ6OkdyYXBo
aWNzU2NlbmVNb3VzZURvdWJsZUNsaWNrOiB7CisgICAgICAgIFFHcmFwaGljc1NjZW5lTW91c2VF
dmVudCAqZ3NFdiA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KTsK
KyAgICAgICAgUU1vdXNlRXZlbnQgZHVtbXlFdmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xp
Y2ssIGdzRXYtPnBvcygpLCBnc0V2LT5zY3JlZW5Qb3MoKSwgZ3NFdi0+YnV0dG9uKCksIGdzRXYt
PmJ1dHRvbnMoKSwgZ3NFdi0+bW9kaWZpZXJzKCkpOworICAgICAgICBkLT5tb3VzZURvdWJsZUNs
aWNrRXZlbnQoJmR1bW15RXZlbnQpOworICAgICAgICBldi0+c2V0QWNjZXB0ZWQoZHVtbXlFdmVu
dC5pc0FjY2VwdGVkKCkpOwogICAgICAgICBicmVhazsKKyAgICB9CiAjZW5kaWYKICNpZm5kZWYg
UVRfTk9fQ09OVEVYVE1FTlUKICAgICBjYXNlIFFFdmVudDo6Q29udGV4dE1lbnU6CkBAIC0zMTIx
LDkgKzM0OTYsMTMgQEAgYm9vbCBRV2ViUGFnZTo6ZXZlbnQoUUV2ZW50ICpldikKICAgICAgICAg
ZC0+d2hlZWxFdmVudChzdGF0aWNfY2FzdDxRV2hlZWxFdmVudCo+KGV2KSk7CiAgICAgICAgIGJy
ZWFrOwogI2lmICFkZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKLSAgICBjYXNlIFFFdmVudDo6
R3JhcGhpY3NTY2VuZVdoZWVsOgotICAgICAgICBkLT53aGVlbEV2ZW50KHN0YXRpY19jYXN0PFFH
cmFwaGljc1NjZW5lV2hlZWxFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNz
U2NlbmVXaGVlbDogeworICAgICAgICBRR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQgKmdzRXYgPSBz
dGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQqPihldik7CisgICAgICAgIFFXaGVl
bEV2ZW50IGR1bW15RXZlbnQoZ3NFdi0+cG9zKCksIGdzRXYtPnNjcmVlblBvcygpLCBnc0V2LT5k
ZWx0YSgpLCBnc0V2LT5idXR0b25zKCksIGdzRXYtPm1vZGlmaWVycygpLCBnc0V2LT5vcmllbnRh
dGlvbigpKTsKKyAgICAgICAgZC0+d2hlZWxFdmVudCgmZHVtbXlFdmVudCk7CisgICAgICAgIGV2
LT5zZXRBY2NlcHRlZChkdW1teUV2ZW50LmlzQWNjZXB0ZWQoKSk7CiAgICAgICAgIGJyZWFrOwor
ICAgIH0KICNlbmRpZgogI2VuZGlmCiAgICAgY2FzZSBRRXZlbnQ6OktleVByZXNzOgpAQCAtMzYz
OSw4ICs0MDE4LDcgQEAgYm9vbCBRV2ViUGFnZTo6ZXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNp
b24sIGNvbnN0IEV4dGVuc2lvbk9wdGlvbiAqb3B0aW9uLCBFeHQKICAgICBpZiAoZXh0ZW5zaW9u
ID09IENob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb24pIHsKICAgICAgICAgLy8gRklYTUU6IGRv
IG5vdCBpZ25vcmUgc3VnZ2VzdGVkRmlsZXMKICAgICAgICAgUVN0cmluZ0xpc3Qgc3VnZ2VzdGVk
RmlsZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uT3B0
aW9uKj4ob3B0aW9uKS0+c3VnZ2VzdGVkRmlsZU5hbWVzOwotICAgICAgICBRV2lkZ2V0KiBwYXJl
bnQgPSAoZC0+Y2xpZW50KSA/IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDA7Ci0gICAgICAg
IFFTdHJpbmdMaXN0IG5hbWVzID0gUUZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZXMocGFyZW50
LCBRU3RyaW5nOjpudWxsKTsKKyAgICAgICAgUVN0cmluZ0xpc3QgbmFtZXMgPSBRRmlsZURpYWxv
Zzo6Z2V0T3BlbkZpbGVOYW1lcyh2aWV3KCksIFFTdHJpbmc6Om51bGwpOwogICAgICAgICBzdGF0
aWNfY2FzdDxDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uUmV0dXJuKj4ob3V0cHV0KS0+Zmls
ZU5hbWVzID0gbmFtZXM7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM2NjUsNiAr
NDA0MywxNCBAQCBib29sIFFXZWJQYWdlOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0
ZW5zaW9uKSBjb25zdAogfQogCiAvKiEKKyAqIFxpbnRlcm5hbAorICovCitRV2ViUGFnZUFkYXB0
ZXIgKlFXZWJQYWdlOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBkOworfQorCisvKiEK
ICAgICBGaW5kcyB0aGUgc3BlY2lmaWVkIHN0cmluZywgXGEgc3ViU3RyaW5nLCBpbiB0aGUgcGFn
ZSwgdXNpbmcgdGhlIGdpdmVuIFxhIG9wdGlvbnMuCiAKICAgICBJZiB0aGUgSGlnaGxpZ2h0QWxs
T2NjdXJyZW5jZXMgZmxhZyBpcyBwYXNzZWQsIHRoZSBmdW5jdGlvbiB3aWxsIGhpZ2hsaWdodCBh
bGwgb2NjdXJyZW5jZXMKQEAgLTM3MzIsOCArNDExOCw3IEBAIFFTdHJpbmcgUVdlYlBhZ2U6OmNo
b29zZUZpbGUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSwgY29uc3QgUVN0cmluZyYgc3VnZ2VzdGVk
RmlsCiB7CiAgICAgUV9VTlVTRUQocGFyZW50RnJhbWUpCiAjaWZuZGVmIFFUX05PX0ZJTEVESUFM
T0cKLSAgICBRV2lkZ2V0KiBwYXJlbnQgPSAoZC0+Y2xpZW50KSA/IGQtPmNsaWVudC0+b3duZXJX
aWRnZXQoKSA6IDA7Ci0gICAgcmV0dXJuIFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUocGFy
ZW50LCBRU3RyaW5nOjpudWxsLCBzdWdnZXN0ZWRGaWxlKTsKKyAgICByZXR1cm4gUUZpbGVEaWFs
b2c6OmdldE9wZW5GaWxlTmFtZSh2aWV3KCksIFFTdHJpbmc6Om51bGwsIHN1Z2dlc3RlZEZpbGUp
OwogI2Vsc2UKICAgICByZXR1cm4gUVN0cmluZzo6bnVsbDsKICNlbmRpZgpAQCAtMzc1MCwxMSAr
NDEzNSw3IEBAIFFTdHJpbmcgUVdlYlBhZ2U6OmNob29zZUZpbGUoUVdlYkZyYW1lICpwYXJlbnRG
cmFtZSwgY29uc3QgUVN0cmluZyYgc3VnZ2VzdGVkRmlsCiAqLwogdm9pZCBRV2ViUGFnZTo6c2V0
TmV0d29ya0FjY2Vzc01hbmFnZXIoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2VyKQogewot
ICAgIGlmIChtYW5hZ2VyID09IGQtPm5ldHdvcmtNYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGQtPm5ldHdvcmtNYW5hZ2VyICYmIGQtPm5ldHdvcmtNYW5hZ2VyLT5wYXJlbnQoKSA9
PSB0aGlzKQotICAgICAgICBkZWxldGUgZC0+bmV0d29ya01hbmFnZXI7Ci0gICAgZC0+bmV0d29y
a01hbmFnZXIgPSBtYW5hZ2VyOworICAgIGQtPnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKG1hbmFn
ZXIpOwogfQogCiAvKiEKQEAgLTM3NjUsMTEgKzQxNDYsNyBAQCB2b2lkIFFXZWJQYWdlOjpzZXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpCiAqLwog
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpRV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKSBj
b25zdAogewotICAgIGlmICghZC0+bmV0d29ya01hbmFnZXIpIHsKLSAgICAgICAgUVdlYlBhZ2Ug
KnRoYXQgPSBjb25zdF9jYXN0PFFXZWJQYWdlICo+KHRoaXMpOwotICAgICAgICB0aGF0LT5kLT5u
ZXR3b3JrTWFuYWdlciA9IG5ldyBRTmV0d29ya0FjY2Vzc01hbmFnZXIodGhhdCk7Ci0gICAgfQot
ICAgIHJldHVybiBkLT5uZXR3b3JrTWFuYWdlcjsKKyAgICByZXR1cm4gZC0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKTsKIH0KIAogLyohCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRleCBiMmNhYTEz
MWRlYTY1MDVlNWYwYWI0N2RjZDQ5MTc1YzI1ZTE4MTdjLi5mOTc1YWIwNTY3N2NjZjViZDMyYjNk
MmE1ZjdmNGI0YTE1Y2I3YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTQ2LDYgKzQ2
LDcgQEAgY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXN0b3J5SXRlbTsKIGNsYXNz
IFFXZWJIaXRUZXN0UmVzdWx0OwogY2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2U7CitjbGFzcyBR
V2ViUGFnZUFkYXB0ZXI7CiBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CiBjbGFzcyBRV2ViUGx1Z2lu
RmFjdG9yeTsKIGNsYXNzIFFXZWJTZWN1cml0eU9yaWdpbjsKQEAgLTM2NSw3ICszNjYsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBj
b25zdCBFeHRlbnNpb25PcHRpb24gKm9wdGlvbiA9IDAsIEV4dGVuc2lvblJldHVybiAqb3V0cHV0
ID0gMCk7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRl
bnNpb24pIGNvbnN0OwogCi0gICAgaW5saW5lIFFXZWJQYWdlUHJpdmF0ZSogaGFuZGxlKCkgY29u
c3QgeyByZXR1cm4gZDsgfQorICAgIFFXZWJQYWdlQWRhcHRlciogaGFuZGxlKCkgY29uc3Q7CiAK
IHB1YmxpYyBRX1NMT1RTOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCmluZGV4IDc5NDMyMjk5MTMyMWJmN2EwMGMzNjYyYjlh
YjkyNmY4MDdkYzM0MDIuLjIxMzZlM2NiYzE1OWU4NTJhMmNmNTJhYTk1NjdhYTUwN2Q3OWM5ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKQEAgLTIxLDI5ICsyMSwyMiBAQAogI2lmbmRl
ZiBRV0VCUEFHRV9QX0gKICNkZWZpbmUgUVdFQlBBR0VfUF9ICiAKLSNpbmNsdWRlIDxRUG9pbnRl
cj4KKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKKworI2luY2x1ZGUgInF3ZWJmcmFtZS5o
IgorI2luY2x1ZGUgInF3ZWJoaXN0b3J5LmgiCisjaW5jbHVkZSAicXdlYnBhZ2UuaCIKIAorI2lu
Y2x1ZGUgPFFQb2ludGVyPgogI2luY2x1ZGUgPHFiYXNpY3RpbWVyLmg+Ci0jaW5jbHVkZSA8cW5l
dHdvcmtwcm94eS5oPgogI2luY2x1ZGUgPHFldmVudC5oPgogI2luY2x1ZGUgPHFnZXN0dXJlLmg+
CiAjaW5jbHVkZSA8cWdyYXBoaWNzc2NlbmVldmVudC5oPgorI2luY2x1ZGUgPHFncmFwaGljc3dp
ZGdldC5oPgorI2luY2x1ZGUgPHFuZXR3b3JrcHJveHkuaD4KIAotI2luY2x1ZGUgInF3ZWJwYWdl
LmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWUuaCIKLQot
I2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotCi0jaW5jbHVkZSA8d3Rm
L093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKICAgICBjbGFzcyBDb250ZXh0
TWVudUNsaWVudFF0OwogICAgIGNsYXNzIENvbnRleHRNZW51SXRlbTsKICAgICBjbGFzcyBDb250
ZXh0TWVudTsKQEAgLTU0LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEludFJlY3Q7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBOb2RlTGlzdDsKLSAgICBjbGFz
cyBQYWdlOwogICAgIGNsYXNzIEZyYW1lOwogfQogCkBAIC02NCw4ICs1NiwxMCBAQCBjbGFzcyBR
TWVudTsKIGNsYXNzIFFCaXRBcnJheTsKIFFUX0VORF9OQU1FU1BBQ0UKIAorY2xhc3MgUXRQbHVn
aW5XaWRnZXRBZGFwdGVyOwogY2xhc3MgUVdlYkluc3BlY3RvcjsKLWNsYXNzIFFXZWJQYWdlQ2xp
ZW50OworY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKK2NsYXNzIFVuZG9TdGVwUXQ7CiAKIGNsYXNz
IFF0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7CiBwdWJs
aWM6CkBAIC03NiwxMyArNzAsNzMgQEAgcHVibGljOgogICAgIFFXZWJQYWdlOjpWaWV3cG9ydEF0
dHJpYnV0ZXMqIHE7CiB9OwogCi1jbGFzcyBRV2ViUGFnZVByaXZhdGUgeworY2xhc3MgUVdlYlBh
Z2VQcml2YXRlIDogcHVibGljIFFXZWJQYWdlQWRhcHRlciB7CiBwdWJsaWM6CiAgICAgUVdlYlBh
Z2VQcml2YXRlKFFXZWJQYWdlKik7CiAgICAgflFXZWJQYWdlUHJpdmF0ZSgpOwogCiAgICAgc3Rh
dGljIFdlYkNvcmU6OlBhZ2UqIGNvcmUoY29uc3QgUVdlYlBhZ2UqKTsKLSAgICBzdGF0aWMgUVdl
YlBhZ2VQcml2YXRlKiBwcml2KFFXZWJQYWdlKik7CisKKyAgICAvLyBBZGFwdGVyIGltcGxlbWVu
dGF0aW9uCisgICAgdmlydHVhbCB2b2lkIHNob3coKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Rm9jdXMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFFSZWN0ICYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUVNpemUgdmlld3BvcnRTaXplKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBRV2ViUGFnZUFkYXB0ZXIqIGNyZWF0ZVdpbmRvdyhib29sIC8qZGlhbG9nKi8p
IE9WRVJSSURFOworICAgIHZpcnR1YWwgUU9iamVjdCogaGFuZGxlKCkgT1ZFUlJJREUgeyByZXR1
cm4gcTsgfQorICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3Qg
UVN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUlE
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgamF2YVNjcmlwdEFsZXJ0KFFXZWJGcmFtZUFk
YXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBtc2cpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBq
YXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWVBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbXNnKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgamF2YVNjcmlwdFByb21wdChRV2ViRnJhbWVBZGFw
dGVyKiwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFT
dHJpbmcqIHJlc3VsdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHByaW50UmVxdWVzdGVk
KFFXZWJGcmFtZUFkYXB0ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VR
dW90YUV4Y2VlZGVkKFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBkYXRhYmFzZU5h
bWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBsaWNhdGlvbkNhY2hlUXVvdGFFeGNl
ZWRlZChRV2ViU2VjdXJpdHlPcmlnaW4qLCBxdWludDY0IGRlZmF1bHRPcmlnaW5RdW90YSwgcXVp
bnQ2NCB0b3RhbFNwYWNlTmVlZGVkKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9v
bFRpcChjb25zdCBRU3RyaW5nJikgT1ZFUlJJREU7CisjaWYgVVNFKFFUX01VTFRJTUVESUEpCisg
ICAgdmlydHVhbCBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbFNjcmVlblZp
ZGVvSGFuZGxlcigpIE9WRVJSSURFOworI2VuZGlmCisgICAgdmlydHVhbCBRV2ViRnJhbWVBZGFw
dGVyKiBtYWluRnJhbWVBZGFwdGVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRU3RyaW5nTGlz
dCBjaG9vc2VGaWxlcyhRV2ViRnJhbWVBZGFwdGVyKiwgYm9vbCBhbGxvd011bHRpcGxlLCBjb25z
dCBRU3RyaW5nTGlzdCYgc3VnZ2VzdGVkRmlsZU5hbWVzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFFDb2xvciBjb2xvclNlbGVjdGlvblJlcXVlc3RlZChjb25zdCBRQ29sb3ImIHNlbGVjdGVkQ29s
b3IpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUVdlYlNlbGVjdE1ldGhvZCogY3JlYXRlU2VsZWN0
UG9wdXAoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFFSZWN0IHZpZXdSZWN0UmVsYXRpdmVUb1dp
bmRvdygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBn
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsbGVkKFFXZWJGcmFtZUFkYXB0ZXIqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1ZXN0
ZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBub3RpZmlj
YXRpb25zUGVybWlzc2lvblJlcXVlc3RDYW5jZWxsZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIG1pY3JvRm9jdXNDaGFuZ2VkKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHRyaWdnZXJDb3B5QWN0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChRS2V5RXZlbnQqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJVbmRvU3RhY2soKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y2FuVW5kbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjYW5SZWRvKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVuZG8oKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVkbygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVbmRvU3Rl
cChRU2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0PikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yS2V5RXZlbnQoUUtleUV2ZW50KikgT1ZFUlJJREU7CisK
KyAgICB2b2lkIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIFFPYmplY3QqIGluc3BlY3RvckhhbmRsZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZChRT2JqZWN0KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldEluc3BlY3RvcldpbmRvd1RpdGxlKGNvbnN0IFFTdHJpbmcmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlV2ViSW5zcGVjdG9yKFFPYmplY3QqKiBpbnNwZWN0b3JWaWV3
LCBRV2ViUGFnZUFkYXB0ZXIqKiBpbnNwZWN0b3JQYWdlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFFTdHJpbmdMaXN0IG1lbnVBY3Rpb25zQXNUZXh0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGVtaXRWaWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBhY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWVBZGFwdGVyKiwgY29uc3QgUU5l
dHdvcmtSZXF1ZXN0JiwgaW50IHR5cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbWl0
UmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBlbWl0U2F2ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRh
cHRlciosIFFXZWJIaXN0b3J5SXRlbSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbWl0
RG93bmxvYWRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGVtaXRGcmFtZUNyZWF0ZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgUVN0cmluZyB1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCAmdXJsKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBxLT51c2VyQWdlbnRGb3JVcmwodXJsKTsgfQorICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Vycm9yUGFnZUV4dGVuc2lvbigpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHEtPnN1cHBvcnRzRXh0ZW5zaW9uKFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24p
OyB9CisgICAgdmlydHVhbCBib29sIGVycm9yUGFnZUV4dGVuc2lvbihFcnJvclBhZ2VPcHRpb24g
KiwgRXJyb3JQYWdlUmV0dXJuICopIE9WRVJSSURFOworICAgIHZpcnR1YWwgUXRQbHVnaW5XaWRn
ZXRBZGFwdGVyKiBjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyAmLCBjb25zdCBRVXJsICYsIGNv
bnN0IFFTdHJpbmdMaXN0ICYsIGNvbnN0IFFTdHJpbmdMaXN0ICYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiBhZGFwdGVyRm9yV2lkZ2V0KFFPYmplY3QgKikg
Y29uc3QgT1ZFUlJJREU7CiAKICAgICB2b2lkIGNyZWF0ZU1haW5GcmFtZSgpOwogI2lmbmRlZiBR
VF9OT19DT05URVhUTUVOVQpAQCAtOTIsMjMgKzE0NiwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBf
cV93ZWJBY3Rpb25UcmlnZ2VyZWQoYm9vbCBjaGVja2VkKTsKICAgICB2b2lkIF9xX2NsZWFudXBM
ZWFrTWVzc2FnZXMoKTsKICAgICB2b2lkIHVwZGF0ZUFjdGlvbihRV2ViUGFnZTo6V2ViQWN0aW9u
IGFjdGlvbik7Ci0gICAgdm9pZCB1cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogICAgIHZvaWQg
dXBkYXRlRWRpdG9yQWN0aW9ucygpOwogCi0gICAgUUNvbG9yIGNvbG9yU2VsZWN0aW9uUmVxdWVz
dGVkKGNvbnN0IFFDb2xvciYgc2VsZWN0ZWRDb2xvcik7Ci0KICAgICB2b2lkIHRpbWVyRXZlbnQo
UVRpbWVyRXZlbnQqKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgbW91c2VNb3ZlRXZl
bnQoVCopOwotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgbW91c2VQcmVzc0V2ZW50KFQqKTsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChUKik7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBtb3VzZVRyaXBsZUNsaWNrRXZlbnQoVCopOwotICAg
IHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoVCopOworICAgIHZvaWQg
bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIG1vdXNlUHJlc3NFdmVudChR
TW91c2VFdmVudCopOworICAgIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50
Kik7CisgICAgdm9pZCBtb3VzZVRyaXBsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2
b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50Kik7CiAjaWZuZGVmIFFUX05PX0NPTlRF
WFRNRU5VCiAgICAgdm9pZCBjb250ZXh0TWVudUV2ZW50KGNvbnN0IFFQb2ludCYgZ2xvYmFsUG9z
KTsKICNlbmRpZgogI2lmbmRlZiBRVF9OT19XSEVFTEVWRU5UCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gdm9pZCB3aGVlbEV2ZW50KFQqKTsKKyAgICB2b2lkIHdoZWVsRXZlbnQoUVdoZWVsRXZlbnQq
KTsKICNlbmRpZgogICAgIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKICAgICB2b2lk
IGtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQqKTsKQEAgLTE1OSwxNiArMjEwLDEyIEBAIHB1Ymxp
YzoKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KCk7CiAgICAgcXVpbnQxNiBpbnNwZWN0b3JTZXJ2ZXJQb3J0KCk7CiAKLSAgICBXZWJDb3JlOjpW
aWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cygpOwotCiAjaWZuZGVmIFFUX05PX1NI
T1JUQ1VUCiAgICAgc3RhdGljIFFXZWJQYWdlOjpXZWJBY3Rpb24gZWRpdG9yQWN0aW9uRm9yS2V5
RXZlbnQoUUtleUV2ZW50KiBldmVudCk7CiAjZW5kaWYKICAgICBzdGF0aWMgY29uc3QgY2hhciog
ZWRpdG9yQ29tbWFuZEZvcldlYkFjdGlvbnMoUVdlYlBhZ2U6OldlYkFjdGlvbiBhY3Rpb24pOwog
CiAgICAgUVdlYlBhZ2UgKnE7Ci0gICAgV2ViQ29yZTo6UGFnZSAqcGFnZTsKLSAgICBPd25QdHI8
UVdlYlBhZ2VDbGllbnQ+IGNsaWVudDsKICAgICBRUG9pbnRlcjxRV2ViRnJhbWU+IG1haW5GcmFt
ZTsKIAogI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKQEAgLTE3Nyw3ICsyMjQsNiBAQCBwdWJsaWM6
CiAKICAgICBRUG9pbnRlcjxRV2lkZ2V0PiB2aWV3OwogCi0gICAgYm9vbCBpbnNpZGVPcGVuQ2Fs
bDsKICAgICBxdWludDY0IG1fdG90YWxCeXRlczsKICAgICBxdWludDY0IG1fYnl0ZXNSZWNlaXZl
ZDsKIApAQCAtMTg2LDE1ICsyMzIsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGNsaWNrQ2F1c2Vk
Rm9jdXM7CiAKLSAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJh
bWUsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25U
eXBlIHR5cGUpOwotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya01hbmFnZXI7Ci0K
LSAgICBib29sIGZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQ7Ci0gICAgYm9vbCBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQ7Ci0gICAgYm9vbCBzZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVk
OwogICAgIFFXZWJQYWdlOjpMaW5rRGVsZWdhdGlvblBvbGljeSBsaW5rUG9saWN5OwogCi0gICAg
UVNpemUgdmlld3BvcnRTaXplOworICAgIFFTaXplIG1fdmlld3BvcnRTaXplOwogICAgIFFTaXpl
IGZpeGVkTGF5b3V0U2l6ZTsKIAogICAgIFFXZWJIaXN0b3J5IGhpc3Rvcnk7CkBAIC0yMDIsMjAg
KzI0MiwxNSBAQCBwdWJsaWM6CiAjaWZuZGVmIFFUX05PX0NPTlRFWFRNRU5VCiAgICAgUVBvaW50
ZXI8UU1lbnU+IGN1cnJlbnRDb250ZXh0TWVudTsKICNlbmRpZgotICAgIFFXZWJTZXR0aW5ncyAq
c2V0dGluZ3M7CiAgICAgUVBhbGV0dGUgcGFsZXR0ZTsKICAgICBib29sIHVzZUZpeGVkTGF5b3V0
OwogCiAgICAgUUFjdGlvbiAqYWN0aW9uc1tRV2ViUGFnZTo6V2ViQWN0aW9uQ291bnRdOwogCi0g
ICAgUVdlYlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3Rvcnk7Ci0KICAgICBRV2lkZ2V0KiBpbnNw
ZWN0b3JGcm9udGVuZDsKICAgICBRV2ViSW5zcGVjdG9yKiBpbnNwZWN0b3I7CiAgICAgYm9vbCBp
bnNwZWN0b3JJc0ludGVybmFsT25seTsgLy8gVHJ1ZSBpZiBjcmVhdGVkIHRocm91Z2ggdGhlIElu
c3BlY3QgY29udGV4dCBtZW51IGFjdGlvbgogICAgIFF0OjpEcm9wQWN0aW9uIG1fbGFzdERyb3BB
Y3Rpb247Ci0KLSAgICBzdGF0aWMgYm9vbCBkcnRSdW47CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IDc2OGM4MDI1NmVjMTI2NjExZDNhOGY4Mjdj
ZDFlYzkzMTcyZjNhODMuLjc0ZDg1MjRkOGM1MmUzYzgwODU1NWRlNTQ5MzI2MWNmMzg0M2YyNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcApAQCAtMjAsNDEgKzIwLDM5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCiAKLSNpbmNs
dWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxd2Vi
cGx1Z2luZGF0YWJhc2VfcC5oIgogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotI2lu
Y2x1ZGUgIk1lbW9yeUNhY2hlLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
aCIKICNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIkltYWdl
LmgiCiAjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKICNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGll
bnRRdC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiSW5pdFdlYkNvcmVRdC5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNp
bmNsdWRlICJOZXR3b3JrU3RhdGVOb3RpZmllci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWdlQ2FjaGUuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIktVUkwu
aCIKLSNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCi0j
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFTdGFuZGFyZFBhdGhzPgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRRmlsZUluZm8+
CisjaW5jbHVkZSA8UUZvbnQ+CisjaW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUg
PFFIYXNoPgogI2luY2x1ZGUgPFFTaGFyZWREYXRhPgorI2luY2x1ZGUgPFFTdGFuZGFyZFBhdGhz
PgogI2luY2x1ZGUgPFFVcmw+Ci0jaW5jbHVkZSA8UUZpbGVJbmZvPgotI2luY2x1ZGUgPFFTdHls
ZT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogCi0jaW5jbHVkZSAiTmV0d29y
a1N0YXRlTm90aWZpZXIuaCIKIAogdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9uZXR3b3JrQWNjZXNz
QWxsb3dlZChib29sIGlzQWxsb3dlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgK
aW5kZXggNWU3ZDNlMWI0ZDNkNGM4MTM1NjgxMmM5MmIxZjg0YjUwOGQ0MGUzOS4uNDk3MjFiN2Ni
OTNkMmM1OGVmNmU0YTQ4OGMzZDcwYjJiMDVjNGIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNl
dHRpbmdzLmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgaW5saW5lIFFXZWJTZXR0
aW5nc1ByaXZhdGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFn
ZVByaXZhdGU7CiAgICAgZnJpZW5kIGNsYXNzIFFXZWJTZXR0aW5nc1ByaXZhdGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJ2aWV3LmNwcAppbmRleCA5ZjJhZjU3ODdlZWNiY2RlMDIyYThlMDFmYmZiMDVj
YzUwYjFjNDU2Li4yZWRhNmExOGVmZDE3ODI1ODQ2MmYxNWNiOTI5NTE0ZDhkMDA5MzIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwCkBAIC0yMjcsOSArMjI3LDkgQEAgdm9pZCBRV2ViVmll
d1ByaXZhdGU6OmRldGFjaEN1cnJlbnRQYWdlKCkKICAgICAvLyB0byBkZXN0cm95IGl0LgogCiAg
ICAgaWYgKHBhZ2UtPmQtPmNsaWVudCAmJiBwYWdlLT5kLT5jbGllbnQtPmlzUVdpZGdldENsaWVu
dCgpKQotICAgICAgICBwYWdlLT5kLT5jbGllbnQuY2xlYXIoKTsKKyAgICAgICAgcGFnZS0+ZC0+
Y2xpZW50LnJlc2V0KCk7CiAKLSAgICBwYWdlLT5kLT5jbGllbnQucmVsZWFzZSgpOworICAgIHBh
Z2UtPmQtPmNsaWVudC50YWtlKCk7CiAKICAgICAvLyBpZiB0aGUgcGFnZSB3YXMgY3JlYXRlZCBi
eSB1cywgd2Ugb3duIGl0IGFuZCBuZWVkIHRvCiAgICAgLy8gZGVzdHJveSBpdCBhcyB3ZWxsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNw
cAppbmRleCBlYWFlYjAxMmY4NmQwYTUzMTEwYjU3OTc3M2Y2ZDViOGMwNWQ5MzQyLi42YWVlN2Y5
MWZkOTkwMDkwNGMyYjllYmRhYWRhZWI4MzBhNmI2YzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcApAQCAtMzAsNiArMzAsMTAg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgogCisj
aW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorI2luY2x1ZGUgIi4uL0Fw
aS9xd2Vic2VjdXJpdHlvcmlnaW4uaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNlY3VyaXR5b3Jp
Z2luX3AuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNldHRpbmdzLmgiCiAjaW5jbHVkZSAiQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJDb2xvckNob29zZXIuaCIKICNpbmNs
dWRlICJDb2xvckNob29zZXJDbGllbnQuaCIKQEAgLTUzLDI3ICs1NywyMSBAQAogI2luY2x1ZGUg
Ik5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUG9wdXBN
ZW51UXQuaCIKLSNpbmNsdWRlICJRdEZhbGxiYWNrV2ViUG9wdXAuaCIKKyNpbmNsdWRlICJRV2Vi
RnJhbWVBZGFwdGVyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAi
UVdlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUg
IlNlYXJjaFBvcHVwTWVudVF0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNs
dWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgi
CiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAotI2luY2x1ZGUgInFncmFwaGljc3dlYnZp
ZXcuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0j
aW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbi5oIgot
I2luY2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbl9wLmgiCi0jaW5jbHVkZSAicXdlYnZpZXcuaCIK
ICNpbmNsdWRlIDxxYWJzdHJhY3RhbmltYXRpb24uaD4KICNpbmNsdWRlIDxxZGVidWcuaD4KICNp
bmNsdWRlIDxxZXZlbnRsb29wLmg+Ci0jaW5jbHVkZSA8cXRvb2x0aXAuaD4KKyNpbmNsdWRlIDxx
d2luZG93Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiAoKFVTRShHU1RSRUFNRVIpICYmICFkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKSkgfHwgVVNF
KFFUX01VTFRJTUVESUEpIHx8IFVTRShRVEtJVCkpCkBAIC0xMjQsOCArMTIyLDggQEAgcHJpdmF0
ZToKIAogYm9vbCBDaHJvbWVDbGllbnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyA9IGZh
bHNlOwogCi1DaHJvbWVDbGllbnRRdDo6Q2hyb21lQ2xpZW50UXQoUVdlYlBhZ2UqIHdlYlBhZ2Up
Ci0gICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK0Nocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRR
dChRV2ViUGFnZUFkYXB0ZXIqIHdlYlBhZ2VBZGFwdGVyKQorICAgIDogbV93ZWJQYWdlKHdlYlBh
Z2VBZGFwdGVyKQogICAgICwgbV9ldmVudExvb3AoMCkKICNpZiBFTkFCTEUoVklERU8pICYmICgo
VVNFKEdTVFJFQU1FUikgJiYgIWRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpKSB8fCBVU0UoUVRf
TVVMVElNRURJQSkgfHwgVVNFKFFUS0lUKSkKICAgICAsIG1fZnVsbFNjcmVlblZpZGVvKDApCkBA
IC0xNDgsOCArMTQ2LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0V2luZG93UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVy
bjsKLSAgICBlbWl0IG1fd2ViUGFnZS0+Z2VvbWV0cnlDaGFuZ2VSZXF1ZXN0ZWQoUVJlY3QocVJv
dW5kKHJlY3QueCgpKSwgcVJvdW5kKHJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxUm91bmQocmVjdC53aWR0aCgpKSwgcVJvdW5kKHJlY3QuaGVpZ2h0KCkpKSk7CisgICAg
bV93ZWJQYWdlLT5zZXRXaW5kb3dSZWN0KFFSZWN0KHFSb3VuZChyZWN0LngoKSksIHFSb3VuZChy
ZWN0LnkoKSksIHFSb3VuZChyZWN0LndpZHRoKCkpLCBxUm91bmQocmVjdC5oZWlnaHQoKSkpKTsK
IH0KIAogLyohCkBAIC0xODIsMTEgKzE3OSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmZvY3Vz
KCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIFFXaWRnZXQq
IHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHZpZXctPnNldEZvY3VzKCk7CisgICAgbV93ZWJQYWdlLT5zZXRGb2N1cygpOwog
fQogCiAKQEAgLTE5NCwxMCArMTg3LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6dW5mb2N1cygp
CiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBRV2lkZ2V0KiB2
aWV3ID0gbV93ZWJQYWdlLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47
Ci0gICAgdmlldy0+Y2xlYXJGb2N1cygpOworICAgIG1fd2ViUGFnZS0+dW5mb2N1cygpOwogfQog
CiBib29sIENocm9tZUNsaWVudFF0OjpjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCkBAIC0y
MjcsMjQgKzIxNywxOCBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpmb2N1c2VkRnJhbWVDaGFuZ2Vk
KEZyYW1lKikKIAogUGFnZSogQ2hyb21lQ2xpZW50UXQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSosIGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiBmZWF0
dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpCiB7Ci0gICAgUVdlYlBhZ2UqIG5ld1BhZ2Ug
PSBtX3dlYlBhZ2UtPmNyZWF0ZVdpbmRvdyhmZWF0dXJlcy5kaWFsb2cgPyBRV2ViUGFnZTo6V2Vi
TW9kYWxEaWFsb2cgOiBRV2ViUGFnZTo6V2ViQnJvd3NlcldpbmRvdyk7CisgICAgUVdlYlBhZ2VB
ZGFwdGVyKiBuZXdQYWdlID0gbV93ZWJQYWdlLT5jcmVhdGVXaW5kb3coZmVhdHVyZXMuZGlhbG9n
KTsKICAgICBpZiAoIW5ld1BhZ2UpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gQSBjYWxs
IHRvIFFXZWJQYWdlOjptYWluRnJhbWUoKSBpbXBsaWNpdGx5IGNyZWF0ZXMgdGhlIG1haW4gZnJh
bWUuCi0gICAgLy8gTWFrZSBzdXJlIGl0IGV4aXN0cywgYXMgV2ViQ29yZSBleHBlY3RzIGl0IHdo
ZW4gcmV0dXJuaW5nIGZyb20gdGhpcyBjYWxsLgotICAgIG5ld1BhZ2UtPm1haW5GcmFtZSgpOwot
ICAgIHJldHVybiBuZXdQYWdlLT5kLT5wYWdlOworICAgIHJldHVybiBuZXdQYWdlLT5wYWdlOwog
fQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzaG93KCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFFXaWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICB2aWV3LT53aW5kb3coKS0+c2hv
dygpOworICAgIG1fd2ViUGFnZS0+c2hvdygpOwogfQogCiAKQEAgLTI2Niw3ICsyNTAsNyBAQCB2
b2lkIENocm9tZUNsaWVudFF0OjpydW5Nb2RhbCgpCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRU
b29sYmFyc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIHRvb2xCYXJzVmlzaWJsZSA9IHZp
c2libGU7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnRvb2xCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVz
dGVkKHZpc2libGUpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLT5o
YW5kbGUoKSwgInRvb2xCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVzdGVkIiwgUV9BUkcoYm9vbCwg
dmlzaWJsZSkpOwogfQogCiAKQEAgLTI3OCw3ICsyNjIsNyBAQCBib29sIENocm9tZUNsaWVudFF0
Ojp0b29sYmFyc1Zpc2libGUoKQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRTdGF0dXNiYXJW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSAgICBlbWl0IG1fd2ViUGFnZS0+c3RhdHVzQmFyVmlz
aWJpbGl0eUNoYW5nZVJlcXVlc3RlZCh2aXNpYmxlKTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tl
TWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJzdGF0dXNCYXJWaXNpYmlsaXR5Q2hhbmdlUmVx
dWVzdGVkIiwgUV9BUkcoYm9vbCwgdmlzaWJsZSkpOwogICAgIHN0YXR1c0JhclZpc2libGUgPSB2
aXNpYmxlOwogfQogCkBAIC0zMDUsNyArMjg5LDcgQEAgYm9vbCBDaHJvbWVDbGllbnRRdDo6c2Ny
b2xsYmFyc1Zpc2libGUoKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0TWVudWJhclZpc2libGUo
Ym9vbCB2aXNpYmxlKQogewogICAgIG1lbnVCYXJWaXNpYmxlID0gdmlzaWJsZTsKLSAgICBlbWl0
IG1fd2ViUGFnZS0+bWVudUJhclZpc2liaWxpdHlDaGFuZ2VSZXF1ZXN0ZWQodmlzaWJsZSk7Cisg
ICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAibWVudUJh
clZpc2liaWxpdHlDaGFuZ2VSZXF1ZXN0ZWQiLCBRX0FSRyhib29sLCB2aXNpYmxlKSk7CiB9CiAK
IGJvb2wgQ2hyb21lQ2xpZW50UXQ6Om1lbnViYXJWaXNpYmxlKCkKQEAgLTMxOCw4ICszMDIsNyBA
QCB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRSZXNpemFibGUoYm9vbCkKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudFF0OjphZGRNZXNzYWdlVG9Db25zb2xlKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCit2b2lkIENocm9tZUNsaWVu
dFF0OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKICAgICBRU3RyaW5nIHggPSBtZXNzYWdlOwogICAgIFFT
dHJpbmcgeSA9IHNvdXJjZUlEOwpAQCAtMzQzLDMwICszMjYsMjYgQEAgYm9vbCBDaHJvbWVDbGll
bnRRdDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
RnJhbWUqIGYKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6Y2xvc2VXaW5kb3dTb29uKCkKIHsKLSAg
ICBtX3dlYlBhZ2UtPmQtPnBhZ2UtPnNldEdyb3VwTmFtZShTdHJpbmcoKSk7Ci0gICAgbV93ZWJQ
YWdlLT5tYWluRnJhbWUoKS0+ZC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOwot
ICAgIGVtaXQgbV93ZWJQYWdlLT53aW5kb3dDbG9zZVJlcXVlc3RlZCgpOworICAgIG1fd2ViUGFn
ZS0+cGFnZS0+c2V0R3JvdXBOYW1lKFN0cmluZygpKTsKKyAgICBtX3dlYlBhZ2UtPnBhZ2UtPm1h
aW5GcmFtZSgpLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKKyAgICBRTWV0YU9iamVjdDo6
aW52b2tlTWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJ3aW5kb3dDbG9zZVJlcXVlc3RlZCIp
OwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpydW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqIGYs
IGNvbnN0IFN0cmluZyYgbXNnKQogewotICAgIFFTdHJpbmcgeCA9IG1zZzsKLSAgICBRV2ViRnJh
bWUqIHdlYkZyYW1lID0gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KGYtPmxvYWRlcigpLT5uZXR3
b3JraW5nQ29udGV4dCgpLT5vcmlnaW5hdGluZ09iamVjdCgpKTsKLSAgICBtX3dlYlBhZ2UtPmph
dmFTY3JpcHRBbGVydCh3ZWJGcmFtZSwgeCk7CisgICAgbV93ZWJQYWdlLT5qYXZhU2NyaXB0QWxl
cnQoUVdlYkZyYW1lQWRhcHRlcjo6a2l0KGYpLCBtc2cpOwogfQogCiBib29sIENocm9tZUNsaWVu
dFF0OjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSogZiwgY29uc3QgU3RyaW5nJiBtc2cpCiB7
Ci0gICAgUVN0cmluZyB4ID0gbXNnOwotICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBxb2JqZWN0
X2Nhc3Q8UVdlYkZyYW1lKj4oZi0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm9yaWdp
bmF0aW5nT2JqZWN0KCkpOwotICAgIHJldHVybiBtX3dlYlBhZ2UtPmphdmFTY3JpcHRDb25maXJt
KHdlYkZyYW1lLCB4KTsKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5qYXZhU2NyaXB0Q29uZmlybShR
V2ViRnJhbWVBZGFwdGVyOjpraXQoZiksIG1zZyk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6
OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqIGYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KQogewogICAgIFFTdHJpbmcg
eCA9IHJlc3VsdDsKLSAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gcW9iamVjdF9jYXN0PFFXZWJG
cmFtZSo+KGYtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLT5vcmlnaW5hdGluZ09iamVj
dCgpKTsKLSAgICBib29sIHJjID0gbV93ZWJQYWdlLT5qYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1l
LCAoUVN0cmluZyltZXNzYWdlLCAoUVN0cmluZylkZWZhdWx0VmFsdWUsICZ4KTsKKyAgICBRV2Vi
RnJhbWVBZGFwdGVyKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmKTsKKyAgICBi
b29sIHJjID0gbV93ZWJQYWdlLT5qYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLCBtZXNzYWdlLCBk
ZWZhdWx0VmFsdWUsICZ4KTsKIAogICAgIC8vIEZpeCB1cCBhIHF1aXJrIGluIHRoZSBRSW5wdXRE
aWFsb2cgY2xhc3MuIElmIG5vIGlucHV0IGhhcHBlbmVkIHRoZSBzdHJpbmcgc2hvdWxkIGJlIGVt
cHR5CiAgICAgLy8gYnV0IGl0IGlzIG51bGwuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzA5MTQuCkBAIC0zODEsMTkgKzM2MCwxOSBAQCBib29sIENocm9tZUNs
aWVudFF0OjpydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiBmLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIGNvbnN0CiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0
cmluZyYgbXNnKQogewogICAgIFFTdHJpbmcgeCA9IG1zZzsKLSAgICBlbWl0IG1fd2ViUGFnZS0+
c3RhdHVzQmFyTWVzc2FnZSh4KTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1fd2Vi
UGFnZS0+aGFuZGxlKCksICJzdGF0dXNCYXJNZXNzYWdlIiwgUV9BUkcoUVN0cmluZywgeCkpOwog
fQogCiBib29sIENocm9tZUNsaWVudFF0OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKIHsK
ICAgICBib29sIHNob3VsZEludGVycnVwdCA9IGZhbHNlOwotICAgIFFNZXRhT2JqZWN0OjppbnZv
a2VNZXRob2QobV93ZWJQYWdlLCAic2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCIsIFF0OjpEaXJl
Y3RDb25uZWN0aW9uLCBRX1JFVFVSTl9BUkcoYm9vbCwgc2hvdWxkSW50ZXJydXB0KSk7CisgICAg
UU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAic2hvdWxkSW50
ZXJydXB0SmF2YVNjcmlwdCIsIFF0OjpEaXJlY3RDb25uZWN0aW9uLCBRX1JFVFVSTl9BUkcoYm9v
bCwgc2hvdWxkSW50ZXJydXB0KSk7CiAgICAgcmV0dXJuIHNob3VsZEludGVycnVwdDsKIH0KIAog
S2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50UXQ6OmtleWJvYXJkVUlNb2RlKCkKIHsKLSAgICBy
ZXR1cm4gbV93ZWJQYWdlLT5zZXR0aW5ncygpLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbikKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5zZXR0aW5n
cy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4p
CiAgICAgICAgID8gS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcyA6IEtleWJvYXJkQWNjZXNzRGVm
YXVsdDsKIH0KIApAQCAtNDA3LDExICszODYsMTAgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6
d2luZG93UmVzaXplclJlY3QoKSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkKICAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKIAotICAgIFFXaWRnZXQqIG93bmVyV2lkZ2V0ID0gcGFnZUNsaWVu
dC0+b3duZXJXaWRnZXQoKTsKLSAgICBpZiAoIW93bmVyV2lkZ2V0KQorICAgIFFXaW5kb3cqIHRv
cExldmVsV2lkZ2V0ID0gcGFnZUNsaWVudC0+b3duZXJXaW5kb3coKTsKKyAgICBpZiAoIXRvcExl
dmVsV2lkZ2V0KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgUVdpZGdldCogdG9w
TGV2ZWxXaWRnZXQgPSBvd25lcldpZGdldC0+d2luZG93KCk7CiAgICAgUVJlY3QgdG9wTGV2ZWxH
ZW9tZXRyeSh0b3BMZXZlbFdpZGdldC0+Z2VvbWV0cnkoKSk7CiAKICAgICAvLyBUaGVyZSdzIG5v
IEFQSSBpbiBRdCB0byBxdWVyeSBmb3IgdGhlIHNpemUgb2YgdGhlIHJlc2l6ZXIsIHNvIHdlIGFz
c3VtZQpAQCAtNDIzLDEyICs0MDEsMTMgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6d2luZG93
UmVzaXplclJlY3QoKSBjb25zdAogICAgIC8vIGl0IG1pZ2h0IGV2ZW4gYmUgb24gdGhlIGxvd2Vy
IGxlZnQgc2lkZSBvZiB0aGUgd2luZG93LCBidXQgaW4gV2ViS2l0IHdlCiAgICAgLy8gYWx3YXlz
IGRyYXcgc2Nyb2xsYmFycyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlLCBzbyB3ZSBhc3N1bWUgdGhp
cyB0byBiZSB0aGUKICAgICAvLyBsb2NhdGlvbiB3aGVuIGNvbXB1dGluZyB0aGUgcmVzaXplIHJl
Y3QgdG8gcmVzZXJ2ZSBmb3IgV2ViS2l0LgotICAgIFFQb2ludCByZXNpemVDb3JuZXJUb3BMZWZ0
ID0gb3duZXJXaWRnZXQtPm1hcEZyb20odG9wTGV2ZWxXaWRnZXQsCi0gICAgICAgICAgICBRUG9p
bnQodG9wTGV2ZWxHZW9tZXRyeS53aWR0aCgpLCB0b3BMZXZlbEdlb21ldHJ5LmhlaWdodCgpKQot
ICAgICAgICAgICAgLSBRUG9pbnQoc2NvbGxiYXJUaGlja25lc3MsIHNjb2xsYmFyVGhpY2tuZXNz
KSk7CisgICAgUVBvaW50IHJlc2l6ZUNvcm5lclRvcExlZnQgPSBRUG9pbnQodG9wTGV2ZWxHZW9t
ZXRyeS53aWR0aCgpLCB0b3BMZXZlbEdlb21ldHJ5LmhlaWdodCgpKQorICAgICAgICAtIFFQb2lu
dChzY29sbGJhclRoaWNrbmVzcywgc2NvbGxiYXJUaGlja25lc3MpKQorICAgICAgICAtIG1fd2Vi
UGFnZS0+dmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkudG9wTGVmdCgpOwogCiAgICAgUVJlY3Qg
cmVzaXplQ29ybmVyUmVjdCA9IFFSZWN0KHJlc2l6ZUNvcm5lclRvcExlZnQsIFFTaXplKHNjb2xs
YmFyVGhpY2tuZXNzLCBzY29sbGJhclRoaWNrbmVzcykpOwogICAgIHJldHVybiByZXNpemVDb3Ju
ZXJSZWN0LmludGVyc2VjdGVkKHBhZ2VDbGllbnQtPmdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lk
Z2V0KCkpOworCiAjZWxzZQogICAgIHJldHVybiBJbnRSZWN0KCk7CiAjZW5kaWYKQEAgLTQzOCw3
ICs0MTcsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjppbnZhbGlkYXRlUm9vdFZpZXcoY29uc3Qg
SW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCkKIHsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKICAgICBpZiAocGxhdGZvcm1QYWdlQ2xpZW50KCkpIHsKLSAgICAgICAgV2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobV93
ZWJQYWdlLT5tYWluRnJhbWUoKSktPnRpbGVkQmFja2luZ1N0b3JlKCk7CisgICAgICAgIFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX3dlYlBhZ2UtPm1haW5GcmFt
ZUFkYXB0ZXIoKS0+ZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCk7CiAgICAgICAgIGlmICghYmFj
a2luZ1N0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBiYWNraW5nU3RvcmUtPmlu
dmFsaWRhdGUod2luZG93UmVjdCk7CkBAIC00NDgsNyArNDI3LDcgQEAgdm9pZCBDaHJvbWVDbGll
bnRRdDo6aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wp
CiAjZW5kaWYKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5k
Um9vdFZpZXcoY29uc3QgSW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCBpbW1lZGlhdGUpCit2b2lk
IENocm9tZUNsaWVudFF0OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRS
ZWN0JiB3aW5kb3dSZWN0LCBib29sKQogewogICAgIC8vIE5vIGRvdWJsZSBidWZmZXIsIHNvIG9u
bHkgdXBkYXRlIHRoZSBRV2lkZ2V0IGlmIGNvbnRlbnQgY2hhbmdlZC4KICAgICBpZiAocGxhdGZv
cm1QYWdlQ2xpZW50KCkpIHsKQEAgLTQ1Nyw5ICs0MzYsOSBAQCB2b2lkIENocm9tZUNsaWVudFF0
OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0
LCBibwogICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcGxhdGZvcm1Q
YWdlQ2xpZW50KCktPnVwZGF0ZShyZWN0KTsKICAgICB9Ci0gICAgUU1ldGFPYmplY3Q6Omludm9r
ZU1ldGhvZChtX3dlYlBhZ2UsICJyZXBhaW50UmVxdWVzdGVkIiwgUXQ6OlF1ZXVlZENvbm5lY3Rp
b24sIFFfQVJHKFFSZWN0LCB3aW5kb3dSZWN0KSk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1l
dGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAicmVwYWludFJlcXVlc3RlZCIsIFF0OjpRdWV1ZWRD
b25uZWN0aW9uLCBRX0FSRyhRUmVjdCwgd2luZG93UmVjdCkpOwogCi0gICAgLy8gRklYTUU6IFRo
ZXJlIGlzIG5vICJpbW1lZGlhdGUiIHN1cHBvcnQgZm9yIHdpbmRvdyBwYWludGluZy4gIFRoaXMg
c2hvdWxkIGJlIGRvbmUgYWx3YXlzIHdoZW5ldmVyIHRoZSBmbGFnCisgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIG5vICJpbW1lZGlhdGUiIHN1cHBvcnQgZm9yIHdpbmRvdyBwYWludGluZy4gVGhpcyBz
aG91bGQgYmUgZG9uZSBhbHdheXMgd2hlbmV2ZXIgdGhlIGZsYWcKICAgICAvLyBpcyBzZXQuCiB9
CiAKQEAgLTQ3MiwxNCArNDUxLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNjcm9sbChjb25z
dCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsCiB7CiAgICAg
aWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQogICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+
c2Nyb2xsKGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpLCBzY3JvbGxWaWV3UmVjdCk7Ci0g
ICAgZW1pdCBtX3dlYlBhZ2UtPnNjcm9sbFJlcXVlc3RlZChkZWx0YS53aWR0aCgpLCBkZWx0YS5o
ZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2Qo
bV93ZWJQYWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJHKGludCwgZGVsdGEu
d2lkdGgoKSksIFFfQVJHKGludCwgZGVsdGEuaGVpZ2h0KCkpLCBRX0FSRyhRUmVjdCwgc2Nyb2xs
Vmlld1JlY3QpKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogdm9pZCBDaHJv
bWVDbGllbnRRdDo6ZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IEludFBvaW50JiBwb2lu
dCkKIHsKLSAgICBRUG9pbnQgY3VycmVudFBvc2l0aW9uKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkt
PnNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGVtaXQgbV93ZWJQYWdlLT5zY3JvbGxSZXF1ZXN0ZWQo
cG9pbnQueCgpIC0gY3VycmVudFBvc2l0aW9uLngoKSwgcG9pbnQueSgpIC0gY3VycmVudFBvc2l0
aW9uLnkoKSwgUVJlY3QoUVBvaW50KDAsIDApLCBtX3dlYlBhZ2UtPnZpZXdwb3J0U2l6ZSgpKSk7
CisKKyAgICBJbnRTaXplIGN1cnJlbnRQb3NpdGlvbiA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lQWRh
cHRlcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGludCB4ID0gcG9pbnQueCgpIC0gY3VycmVu
dFBvc2l0aW9uLndpZHRoKCk7CisgICAgaW50IHkgPSBwb2ludC55KCkgLSBjdXJyZW50UG9zaXRp
b24uaGVpZ2h0KCk7CisgICAgY29uc3QgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIG1fd2ViUGFn
ZS0+dmlld3BvcnRTaXplKCkpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQ
YWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJHKGludCwgeCksIFFfQVJHKGlu
dCwgeSksIFFfQVJHKFFSZWN0LCByZWN0KSk7CiB9CiAjZW5kaWYKIApAQCAtNDg5LDEyICs0NzIs
MTIgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRS
ZWN0JiByZWN0KSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkKICAgICAgICAgcmV0dXJuIHJl
Y3Q7CiAKLSAgICBRV2lkZ2V0KiBvd25lcldpZGdldCA9IHBhZ2VDbGllbnQtPm93bmVyV2lkZ2V0
KCk7Ci0gICAgaWYgKCFvd25lcldpZGdldCkKLSAgICAgICByZXR1cm4gcmVjdDsKKyAgICBRV2lu
ZG93KiBvd25lcldpbmRvdyA9IHBhZ2VDbGllbnQtPm93bmVyV2luZG93KCk7CisgICAgaWYgKCFv
d25lcldpbmRvdykKKyAgICAgICAgcmV0dXJuIHJlY3Q7CiAKICAgICBRUmVjdCBzY3JlZW5SZWN0
KHJlY3QpOwotICAgIHNjcmVlblJlY3QudHJhbnNsYXRlKG93bmVyV2lkZ2V0LT5tYXBUb0dsb2Jh
bChRUG9pbnQoMCwgMCkpKTsKKyAgICBzY3JlZW5SZWN0LnRyYW5zbGF0ZShvd25lcldpbmRvdy0+
bWFwVG9HbG9iYWwobV93ZWJQYWdlLT52aWV3UmVjdFJlbGF0aXZlVG9XaW5kb3coKS50b3BMZWZ0
KCkpKTsKIAogICAgIHJldHVybiBzY3JlZW5SZWN0OwogfQpAQCAtNTA1LDIyICs0ODgsMjIgQEAg
SW50UG9pbnQgQ2hyb21lQ2xpZW50UXQ6OnNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkKICAgICAgICAgcmV0dXJuIHBvaW50
OwogCi0gICAgUVdpZGdldCogb3duZXJXaWRnZXQgPSBwYWdlQ2xpZW50LT5vd25lcldpZGdldCgp
OwotICAgIGlmICghb3duZXJXaWRnZXQpCisgICAgUVdpbmRvdyogb3duZXJXaW5kb3cgPSBwYWdl
Q2xpZW50LT5vd25lcldpbmRvdygpOworICAgIGlmICghb3duZXJXaW5kb3cpCiAgICAgICAgIHJl
dHVybiBwb2ludDsKIAotICAgIHJldHVybiBvd25lcldpZGdldC0+bWFwRnJvbUdsb2JhbChwb2lu
dCk7CisgICAgcmV0dXJuIG93bmVyV2luZG93LT5tYXBGcm9tR2xvYmFsKHBvaW50KSAtIG1fd2Vi
UGFnZS0+dmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkudG9wTGVmdCgpOwogfQogCiBQbGF0Zm9y
bVBhZ2VDbGllbnQgQ2hyb21lQ2xpZW50UXQ6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+Y2xpZW50LmdldCgpOworICAgIHJldHVybiBtX3dl
YlBhZ2UtPmNsaWVudC5kYXRhKCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmNvbnRlbnRz
U2l6ZUNoYW5nZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewog
ICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpCi0gICAgICAgIFFX
ZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSktPmNvbnRlbnRzU2l6ZUNoYW5nZWQoc2l6ZSk7Cisg
ICAgICAgIFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmcmFtZSktPmNvbnRlbnRzU2l6ZURpZENoYW5n
ZShzaXplKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKQEAgLTUzMiwzMyArNTE1
LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduCiAgICAgICAgIGxhc3RIb3ZlclVSTCA9IHJl
c3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICAgICAgbGFzdEhvdmVyVGl0bGUgPSByZXN1bHQu
dGl0bGUoZGlyKTsKICAgICAgICAgbGFzdEhvdmVyQ29udGVudCA9IHJlc3VsdC50ZXh0Q29udGVu
dCgpOwotICAgICAgICBlbWl0IG1fd2ViUGFnZS0+bGlua0hvdmVyZWQobGFzdEhvdmVyVVJMLnN0
cmluZygpLAotICAgICAgICAgICAgICAgIGxhc3RIb3ZlclRpdGxlLCBsYXN0SG92ZXJDb250ZW50
KTsKKyAgICAgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgp
LCAibGlua0hvdmVyZWQiLCBRX0FSRyhRU3RyaW5nLCBsYXN0SG92ZXJVUkwuc3RyaW5nKCkpLAor
ICAgICAgICAgICAgUV9BUkcoUVN0cmluZywgbGFzdEhvdmVyVGl0bGUpLCBRX0FSRyhRU3RyaW5n
LCBsYXN0SG92ZXJDb250ZW50KSk7CiAgICAgfQogfQogCiB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRUb29sVGlwKGNvbnN0IFN0cmluZyAmdGlwLCBUZXh0RGlyZWN0aW9uKQogewotI2lmbmRlZiBR
VF9OT19UT09MVElQCi0gICAgUVdpZGdldCogdmlldyA9IG1fd2ViUGFnZS0+dmlldygpOwotICAg
IGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRpcC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgdmlldy0+c2V0VG9vbFRpcChRU3RyaW5nKCkpOwotICAgICAgICBRVG9vbFRpcDo6
aGlkZVRleHQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBRU3RyaW5nIGR0aXAgPSBRTGF0aW4x
U3RyaW5nKCI8cD4iKSArIFFTdHJpbmcodGlwKS50b0h0bWxFc2NhcGVkKCkgKyBRTGF0aW4xU3Ry
aW5nKCI8L3A+Iik7Ci0gICAgICAgIHZpZXctPnNldFRvb2xUaXAoZHRpcCk7Ci0gICAgfQotI2Vs
c2UKLSAgICBRX1VOVVNFRCh0aXApOwotI2VuZGlmCisgICAgbV93ZWJQYWdlLT5zZXRUb29sVGlw
KHRpcCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnByaW50KEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBlbWl0IG1fd2ViUGFnZS0+cHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0
KGZyYW1lKSk7CisgICAgZW1pdCBtX3dlYlBhZ2UtPnByaW50UmVxdWVzdGVkKFFXZWJGcmFtZUFk
YXB0ZXI6OmtpdChmcmFtZSkpOwogfQogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKQEAgLTU2
OSw3ICs1MzgsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpleGNlZWRlZERhdGFiYXNlUXVvdGEo
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTgogICAgIGlmICghRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuaGFzRW50cnlGb3JPcmlnaW4oZnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCkpKQogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRR
dW90YShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgcXVvdGEpOwogCi0gICAg
ZW1pdCBtX3dlYlBhZ2UtPmRhdGFiYXNlUXVvdGFFeGNlZWRlZChRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZnJhbWUpLCBkYXRhYmFzZU5hbWUpOworICAgIG1fd2ViUGFnZS0+ZGF0YWJhc2VRdW90YUV4
Y2VlZGVkKFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmcmFtZSksIGRhdGFiYXNlTmFtZSk7CiB9CiAj
ZW5kaWYKIApAQCAtNTg4LDcgKzU1Nyw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlYWNoZWRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwKICAgICBR
V2ViU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gbmV3IFFXZWJTZWN1cml0eU9yaWdp
bihwcml2KTsKIAogICAgIGlmICghV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuY2FsY3VsYXRlUXVv
dGFGb3JPcmlnaW4ob3JpZ2luLCBxdW90YSkpCi0gICAgICAgV2ViQ29yZTo6Y2FjaGVTdG9yYWdl
KCkuc3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBkZWZhdWx0T3JpZ2luUXVvdGEp
OworICAgICAgICBXZWJDb3JlOjpjYWNoZVN0b3JhZ2UoKS5zdG9yZVVwZGF0ZWRRdW90YUZvck9y
aWdpbihvcmlnaW4sIGRlZmF1bHRPcmlnaW5RdW90YSk7CiAKICAgICBlbWl0IG1fd2ViUGFnZS0+
YXBwbGljYXRpb25DYWNoZVF1b3RhRXhjZWVkZWQoc2VjdXJpdHlPcmlnaW4sIGRlZmF1bHRPcmln
aW5RdW90YSwgc3RhdGljX2Nhc3Q8cXVpbnQ2ND4odG90YWxTcGFjZU5lZWRlZCkpOwogfQpAQCAt
NTk2LDcgKzU2NSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwKICNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9DT0xPUikKIFBhc3NPd25QdHI8Q29sb3JDaG9vc2VyPiBDaHJvbWVDbGllbnRRdDo6Y3Jl
YXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgY29uc3QgUUNvbG9yIHNlbGVjdGVkQ29sb3IgPSBtX3dlYlBhZ2UtPmQt
PmNvbG9yU2VsZWN0aW9uUmVxdWVzdGVkKFFDb2xvcihjb2xvcikpOworICAgIGNvbnN0IFFDb2xv
ciBzZWxlY3RlZENvbG9yID0gbV93ZWJQYWdlLT5jb2xvclNlbGVjdGlvblJlcXVlc3RlZChRQ29s
b3IoY29sb3IpKTsKICAgICBjbGllbnQtPmRpZENob29zZUNvbG9yKHNlbGVjdGVkQ29sb3IpOwog
ICAgIGNsaWVudC0+ZGlkRW5kQ2hvb3NlcigpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtNjA2
LDMyICs1NzUsMjIgQEAgUGFzc093blB0cjxDb2xvckNob29zZXI+IENocm9tZUNsaWVudFF0Ojpj
cmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xpZW50Kgogdm9pZCBDaHJvbWVDbGllbnRR
dDo6cnVuT3BlblBhbmVsKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJw
RmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3NlciA9IHBy
cEZpbGVDaG9vc2VyOwotICAgIGJvb2wgc3VwcG9ydE11bHRpID0gbV93ZWJQYWdlLT5zdXBwb3J0
c0V4dGVuc2lvbihRV2ViUGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbik7CiAKLSAg
ICBpZiAoZmlsZUNob29zZXItPnNldHRpbmdzKCkuYWxsb3dzTXVsdGlwbGVGaWxlcyAmJiBzdXBw
b3J0TXVsdGkpIHsKLSAgICAgICAgUVdlYlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNp
b25PcHRpb24gb3B0aW9uOwotICAgICAgICBvcHRpb24ucGFyZW50RnJhbWUgPSBRV2ViRnJhbWVQ
cml2YXRlOjpraXQoZnJhbWUpOworICAgIFFTdHJpbmdMaXN0IHN1Z2dlc3RlZEZpbGVOYW1lczsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsZUNob29zZXItPnNldHRpbmdzKCkuc2Vs
ZWN0ZWRGaWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgc3VnZ2VzdGVkRmlsZU5hbWVzICs9IGZp
bGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXNbaV07CiAKLSAgICAgICAgaWYgKCFm
aWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxl
Y3RlZEZpbGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG9wdGlvbi5zdWdnZXN0ZWRG
aWxlTmFtZXMgKz0gZmlsZUNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlc1tpXTsKKyAg
ICBjb25zdCBib29sIGFsbG93TXVsdGlwbGUgPSBmaWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxv
d3NNdWx0aXBsZUZpbGVzOwogCi0gICAgICAgIFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVz
RXh0ZW5zaW9uUmV0dXJuIG91dHB1dDsKLSAgICAgICAgbV93ZWJQYWdlLT5leHRlbnNpb24oUVdl
YlBhZ2U6OkNob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb24sICZvcHRpb24sICZvdXRwdXQpOwot
Ci0gICAgICAgIGlmICghb3V0cHV0LmZpbGVOYW1lcy5pc0VtcHR5KCkpIHsKKyAgICBRU3RyaW5n
TGlzdCByZXN1bHQgPSBtX3dlYlBhZ2UtPmNob29zZUZpbGVzKFFXZWJGcmFtZUFkYXB0ZXI6Omtp
dChmcmFtZSksIGFsbG93TXVsdGlwbGUsIHN1Z2dlc3RlZEZpbGVOYW1lcyk7CisgICAgaWYgKCFy
ZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChhbGxvd011bHRpcGxlKSB7CiAgICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgb3V0cHV0LmZpbGVOYW1lcy5jb3VudCgpOyArK2kpCi0gICAgICAgICAgICAgICAgbmFtZXMu
YXBwZW5kKG91dHB1dC5maWxlTmFtZXMuYXQoaSkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCByZXN1bHQuY291bnQoKTsgKytpKQorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVu
ZChyZXN1bHQuYXQoaSkpOwogICAgICAgICAgICAgZmlsZUNob29zZXItPmNob29zZUZpbGVzKG5h
bWVzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFFTdHJpbmcgc3VnZ2VzdGVk
RmlsZTsKLSAgICAgICAgaWYgKCFmaWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVz
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN1Z2dlc3RlZEZpbGUgPSBmaWxlQ2hvb3Nlci0+c2V0
dGluZ3MoKS5zZWxlY3RlZEZpbGVzWzBdOwotICAgICAgICBRU3RyaW5nIGZpbGUgPSBtX3dlYlBh
Z2UtPmNob29zZUZpbGUoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgc3VnZ2VzdGVkRmls
ZSk7Ci0gICAgICAgIGlmICghZmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBmaWxlQ2hvb3Nl
ci0+Y2hvb3NlRmlsZShmaWxlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmaWxlQ2hv
b3Nlci0+Y2hvb3NlRmlsZShyZXN1bHQuZmlyc3QoKSk7CiAgICAgfQogfQogCkBAIC02NjIsNyAr
NjIxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2NoZWR1bGVBbmltYXRpb24oKQogCiB2b2lk
IENocm9tZUNsaWVudFF0OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsKLSAgICBtX3dl
YlBhZ2UtPm1haW5GcmFtZSgpLT5kLT5mcmFtZS0+dmlldygpLT5zZXJ2aWNlU2NyaXB0ZWRBbmlt
YXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOworICAg
IG1fd2ViUGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5mcmFtZS0+dmlldygpLT5zZXJ2aWNlU2Ny
aXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUo
KSkpOwogfQogI2VuZGlmCiAKQEAgLTcwMyw4ICs2NjIsMTAgQEAgSW50UmVjdCBDaHJvbWVDbGll
bnRRdDo6dmlzaWJsZVJlY3RGb3JUaWxlZEJhY2tpbmdTdG9yZSgpIGNvbnN0CiAgICAgaWYgKCFw
bGF0Zm9ybVBhZ2VDbGllbnQoKSB8fCAhbV93ZWJQYWdlKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgaWYgKCFwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+dmlld1Jlc2l6ZXNUb0NvbnRl
bnRzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gUVJlY3QobV93ZWJQYWdlLT5tYWluRnJhbWUo
KS0+c2Nyb2xsUG9zaXRpb24oKSwgbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Z2VvbWV0cnkoKS5z
aXplKCkpOworICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCktPnZpZXdSZXNpemVzVG9Db250
ZW50c0VuYWJsZWQoKSkgeworICAgICAgICBJbnRTaXplIG9mZnNldCA9IG1fd2ViUGFnZS0+bWFp
bkZyYW1lQWRhcHRlcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICByZXR1cm4gUVJlY3Qo
UVBvaW50KG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCBtX3dlYlBhZ2UtPm1haW5G
cmFtZUFkYXB0ZXIoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyAgICB9CiAKICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocGxhdGZvcm1QYWdlQ2xpZW50KCktPmdyYXBoaWNz
SXRlbVZpc2libGVSZWN0KCkpKTsKIH0KQEAgLTc1MSw3ICs3MTIsNyBAQCBQYXNzT3duUHRyPFFX
ZWJTZWxlY3RNZXRob2Q+IENocm9tZUNsaWVudFF0OjpjcmVhdGVTZWxlY3RQb3B1cCgpIGNvbnN0
CiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogCiAjaWYgIWRlZmluZWQoUVRfTk9f
Q09NQk9CT1gpCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBRdEZhbGxiYWNrV2ViUG9wdXAodGhp
cykpOworICAgIHJldHVybiBhZG9wdFB0cihtX3dlYlBhZ2UtPmNyZWF0ZVNlbGVjdFBvcHVwKCkp
OwogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgpAQCAtNzU5LDkgKzcyMCwxOSBA
QCBQYXNzT3duUHRyPFFXZWJTZWxlY3RNZXRob2Q+IENocm9tZUNsaWVudFF0OjpjcmVhdGVTZWxl
Y3RQb3B1cCgpIGNvbnN0CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmRpc3BhdGNoVmlld3BvcnRQ
cm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJikgY29uc3QKIHsKLSAg
ICBlbWl0IG1fd2ViUGFnZS0+dmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKTsKKyAgICBtX3dlYlBh
Z2UtPmVtaXRWaWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpOwogfQogCisjaWYgVVNFKFFUX01VTFRJ
TUVESUEpCitRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogQ2hyb21lQ2xpZW50UXQ6OmNyZWF0
ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKiBoYW5kbGVyID0gbV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKCkubGVha1B0cigpOworICAgIGlmICghaGFuZGxlcikKKyAgICAgICAgaGFuZGxlciA9IG1f
d2ViUGFnZS0+Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIHJldHVybiBoYW5k
bGVyOworfQorI2VuZGlmCisKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnNlbGVjdEl0ZW1Xcml0aW5n
RGlyZWN0aW9uSXNOYXR1cmFsKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC03OTQsNyArNzY1
LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQogICAgIC8v
IGluIGEgc2VwYXJhdGUgZGF0YWJhc2UKICAgICBpZiAoZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNr
cykgewogICAgICAgICBwcmludGYoIkFza2VkIHRvIHBvcHVsYXRlIHZpc2l0ZWQgbGlua3MgZm9y
IFdlYlZpZXcgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIHFQcmludGFibGUobV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+dXJsKCkudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgcVByaW50YWJs
ZShRVXJsKG1fd2ViUGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT51cmwpLnRvU3RyaW5nKCkpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuaAppbmRleCBmNzM1OWQyZTI4NzRhNzU1MTljMmY1Mzg3NjgxMzI5ODBhZTRiOWNk
Li45NmQ4NjI1YzA1MDEzZjI3ZWFiMjk3NDIzNGZlZWI3YThkM2FmZmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCkBAIC00Miw2ICs0
Miw4IEBAIGNsYXNzIFFFdmVudExvb3A7CiBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFXZWJQ
YWdlOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOworY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hh
bmRsZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTksNyArNjEsNyBAQCBjbGFzcyBG
dWxsU2NyZWVuVmlkZW9RdDsKIAogY2xhc3MgQ2hyb21lQ2xpZW50UXQgOiBwdWJsaWMgQ2hyb21l
Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBDaHJvbWVDbGllbnRRdChRV2ViUGFnZSopOworICAgIENo
cm9tZUNsaWVudFF0KFFXZWJQYWdlQWRhcHRlciopOwogICAgIHZpcnR1YWwgfkNocm9tZUNsaWVu
dFF0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCkBAIC05OCw3ICsx
MDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CisgICAgdmlydHVhbCB2b2lk
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUlEKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRD
b25maXJtUGFuZWwoKTsKICAgICB2aXJ0dWFsIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqKTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBw
dWJsaWM6CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRv
dWNoRXZlbnRzKGJvb2wpIHsgfQogI2VuZGlmCi0gCisKICNpZiBFTkFCTEUoVklERU8pICYmIChV
U0UoR1NUUkVBTUVSKSB8fCBVU0UoUVRfTVVMVElNRURJQSkgfHwgVVNFKFFUS0lUKSkKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKik7CiAgICAg
dmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOwpAQCAtMTY5LDggKzE3
MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q29sb3JDaG9vc2VyPiBjcmVh
dGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xpZW50KiwgY29uc3QgQ29sb3ImKTsKICNlbmRp
ZgogCi0gICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZp
bGVDaG9vc2VyPik7Ci0gICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgRmlsZUljb25Mb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuT3Bl
blBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUljb25Mb2FkZXIq
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsg
fQogCkBAIC0xOTgsNyArMjAwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRS
dWJiZXJCYW5kSW5EaXJlY3Rpb24oV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5n
ZWQodW5zaWduZWQpIHsgfQogCi0gICAgUVdlYlBhZ2UqIG1fd2ViUGFnZTsKKyAgICBRV2ViRnVs
bFNjcmVlblZpZGVvSGFuZGxlciogY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworCisg
ICAgUVdlYlBhZ2VBZGFwdGVyKiBtX3dlYlBhZ2U7CiAgICAgS1VSTCBsYXN0SG92ZXJVUkw7CiAg
ICAgU3RyaW5nIGxhc3RIb3ZlclRpdGxlOwogICAgIFN0cmluZyBsYXN0SG92ZXJDb250ZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNs
aWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRRdC5jcHAKaW5kZXggMjkxODBlMDYyODRjMTliZjc3YzFhMTllOTI2Y2YxMTE5YzMyZDhi
My4uZDI5ODRjM2Q0ZjA2OGRmOTZmYjA1ZTBkN2Y2MDk4NDExNTA5NDhhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50UXQu
Y3BwCkBAIC0zMCw5ICszMCw4IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKLSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRRdC5oIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmgKaW5kZXggMDQyMGY4
ZDRhOWNhZDYzOTIwMGQyZTE5NDVkMjEyYjQxZDhmZTIxYy4uZWFiYWMxYjFhNGYxMDMwYWQ2ZjAz
ZWMyYWEwMTRmMjhlMjZkYmY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZ2V0Q3VzdG9tTWVudUZyb21E
ZWZhdWx0SXRlbXMoQ29udGV4dE1lbnUqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBkb3dubG9hZFVSTChjb25zdCBLVVJMJiB1cmwpOworICAgIHZpcnR1YWwg
dm9pZCBkb3dubG9hZFVSTChjb25zdCBLVVJMJik7CiAgICAgdmlydHVhbCB2b2lkIGxvb2tVcElu
RGljdGlvbmFyeShGcmFtZSopOwogICAgIHZpcnR1YWwgdm9pZCBzcGVhayhjb25zdCBTdHJpbmcm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGVha2luZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmUyNGU4YmQ1MjM1MjViYWM5YmE4MjI0OTg3YTNiNmM2
Y2UxN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlci5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlZmF1bHRG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyLmgiCisKKyNpZiBVU0UoUVRfTVVMVElNRURJQSkKKworI2lu
Y2x1ZGUgIkZ1bGxTY3JlZW5WaWRlb1dpZGdldC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitib29sIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpzX3Nob3VsZEZvcmNlRnVs
bFNjcmVlblZpZGVvUGxheWJhY2sgPSBmYWxzZTsKKworRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hh
bmRsZXI6OkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKKyAgICA6IFFXZWJGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCkKKyAgICAsIG1fZnVsbFNjcmVlbldpZGdldChuZXcgRnVsbFNjcmVl
blZpZGVvV2lkZ2V0KQoreworICAgIGNvbm5lY3QobV9mdWxsU2NyZWVuV2lkZ2V0LCBTSUdOQUwo
ZGlkRXhpdEZ1bGxTY3JlZW4oKSksIHRoaXMsIFNJR05BTChmdWxsU2NyZWVuQ2xvc2VkKCkpKTsK
KyAgICBtX2Z1bGxTY3JlZW5XaWRnZXQtPmhpZGUoKTsKKworICAgIG1fZnVsbFNjcmVlbldpZGdl
dC0+Y2xvc2UoKTsKK30KKworRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5EZWZhdWx0
RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCit7CisgICAgZGVsZXRlIG1fZnVsbFNjcmVlbldpZGdl
dDsKK30KKworYm9vbCBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxs
U2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0Cit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIFFCeXRlQXJy
YXkgZm9yY2VGdWxsU2NyZWVuID0gcWdldGVudigiUVRfV0VCS0lUX0ZPUkNFX0ZVTExTQ1JFRU5f
VklERU8iKTsKKyAgICAgICAgaWYgKCFmb3JjZUZ1bGxTY3JlZW4uaXNFbXB0eSgpKQorICAgICAg
ICAgICAgc19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRlb1BsYXliYWNrID0gdHJ1ZTsKKworICAg
ICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHNfc2hvdWxkRm9y
Y2VGdWxsU2NyZWVuVmlkZW9QbGF5YmFjazsKK30KKwordm9pZCBEZWZhdWx0RnVsbFNjcmVlblZp
ZGVvSGFuZGxlcjo6ZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXllciogcGxheWVyKQoreworICAg
IG1fZnVsbFNjcmVlbldpZGdldC0+c2hvdyhwbGF5ZXIpOworfQorCit2b2lkIERlZmF1bHRGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNjcmVlbigpCit7CisgICAgbV9mdWxsU2NyZWVu
V2lkZ2V0LT5jbG9zZSgpOworfQorI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlci5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMxOTI5OGFmZDU0NTkyN2U0ZjNhOGZjOGZlZDFkMzdmNzg3NWQyOGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1
bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKyNpZm5kZWYgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXJfaAorI2RlZmluZSBE
ZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcl9oCisKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBGdWxsU2Ny
ZWVuVmlkZW9XaWRnZXQ7CisKKy8vIFdlIGRvIG5vdCB1c2UgRU5BQkxFIG9yIFVTRSBiZWNhdXNl
IG1vYyBkb2VzIG5vdCBleHBhbmQgdGhlc2UgbWFjcm9zLgorI2lmIGRlZmluZWQoV1RGX1VTRV9R
VF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01VTFRJTUVESUEKK2NsYXNzIERlZmF1bHRGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIHsK
KyAgICBRX09CSkVDVAorcHVibGljOgorICAgIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KCk7CisgICAgdmlydHVhbCB+RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBi
b29sIHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdDsKKworcHVibGlj
IFFfU0xPVFM6CisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKik7CisgICAg
dm9pZCBleGl0RnVsbFNjcmVlbigpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHNfc2hv
dWxkRm9yY2VGdWxsU2NyZWVuVmlkZW9QbGF5YmFjazsKKyAgICBGdWxsU2NyZWVuVmlkZW9XaWRn
ZXQgKm1fZnVsbFNjcmVlbldpZGdldDsKK307CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKaW5kZXggY2I2
MzI4MzQwMDk4OTRjYzk1NjM2MjYwMzg1ZDQwMGEwNTczMGY0Ny4uMmUwZDA1ZWQxMjM0OGYwNGVm
Nzk0ZjA1MmFiM2FlNjlhMTI5MzRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcApAQCAtMjYsMTYgKzI2LDE2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudFF0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRRdC5oIgogI2luY2x1ZGUgIkRyYWdDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKIAogI2luY2x1ZGUg
PFFEcmFnPgogI2luY2x1ZGUgPFFNaW1lRGF0YT4KLQorI2luY2x1ZGUgPFFXZWJQYWdlQ2xpZW50
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIERyYWdD
bGllbnRRdDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50
JiwgY29uc3QgSW50UAogI2lmbmRlZiBRVF9OT19EUkFHQU5ERFJPUAogICAgIFFNaW1lRGF0YSog
Y2xpcGJvYXJkRGF0YSA9IHN0YXRpY19jYXN0PENsaXBib2FyZFF0Kj4oY2xpcGJvYXJkKS0+Y2xp
cGJvYXJkRGF0YSgpOwogICAgIHN0YXRpY19jYXN0PENsaXBib2FyZFF0Kj4oY2xpcGJvYXJkKS0+
aW52YWxpZGF0ZVdyaXRhYmxlRGF0YSgpOwotICAgIFFXaWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2Ut
PnZpZXcoKTsKKyAgICBRT2JqZWN0KiB2aWV3ID0gbV9jaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFn
ZUNsaWVudCgpLT5vd25lcldpZGdldCgpOwogICAgIGlmICh2aWV3KSB7CiAgICAgICAgIFFEcmFn
KiBkcmFnID0gbmV3IFFEcmFnKHZpZXcpOwogICAgICAgICBpZiAoZHJhZ0ltYWdlKQpAQCAtMTA1
LDcgKzEwNSw3IEBAIHZvaWQgRHJhZ0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRy
YWdJbWFnZSwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQCiAgICAgICAgIFF0OjpEcm9wQWN0
aW9uIGFjdHVhbERyb3BBY3Rpb24gPSBkcmFnLT5leGVjKGRyYWdPcGVyYXRpb25zVG9Ecm9wQWN0
aW9ucyhkcmFnT3BlcmF0aW9uTWFzaykpOwogCiAgICAgICAgIC8vIFNlbmQgZHJhZ0VuZCBldmVu
dAotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbWUobV93ZWJQYWdlLT52aWV3KCktPm1hcEZy
b21HbG9iYWwoUUN1cnNvcjo6cG9zKCkpLCBRQ3Vyc29yOjpwb3MoKSwgTGVmdEJ1dHRvbiwgUGxh
dGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAp
OworICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbWUobV9jaHJvbWVDbGllbnQtPnNjcmVlblRv
Um9vdFZpZXcoUUN1cnNvcjo6cG9zKCkpLCBRQ3Vyc29yOjpwb3MoKSwgTGVmdEJ1dHRvbiwgUGxh
dGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAp
OwogICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmRyYWdTb3VyY2VFbmRlZEF0KG1lLCBk
cm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGFjdHVhbERyb3BBY3Rpb24pKTsKICAgICB9CiAgICAg
ZnJhbWUtPnBhZ2UoKS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VuZGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuaAppbmRleCAxNTcyNGYxZTE0
ODU2M2YzZTZlZTAxODU1M2E3ZWQzZWM4NGNjMTU4Li5hYThiODA4NWI4MTUwZjBhMTY0MzRkYzM2
NDU1ZmFjNTFkN2MyZTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0RyYWdDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHJhZ0NsaWVudFF0LmgKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaW5jbHVkZSAiRHJhZ0NsaWVu
dC5oIgogCi1jbGFzcyBRV2ViUGFnZTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
aHJvbWVDbGllbnQ7CisKIGNsYXNzIERyYWdDbGllbnRRdCA6IHB1YmxpYyBEcmFnQ2xpZW50IHsK
IHB1YmxpYzoKLSAgICBEcmFnQ2xpZW50UXQoUVdlYlBhZ2UqIHdlYlBhZ2UpIDogbV93ZWJQYWdl
KHdlYlBhZ2UpIHt9OworICAgIERyYWdDbGllbnRRdChDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVu
dCkgOiBtX2Nocm9tZUNsaWVudChjaHJvbWVDbGllbnQpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBE
cmFnRGF0YSopOwogICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKERyYWdEYXRhKik7CiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJv
eWVkKCk7CkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50Jiwg
Q2xpcGJvYXJkKik7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVm
LCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQ
b3MsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKTsKIHByaXZhdGU6
Ci0gICAgUVdlYlBhZ2UqIG1fd2ViUGFnZTsKKyAgICBDaHJvbWVDbGllbnQqIG1fY2hyb21lQ2xp
ZW50OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAppbmRleCBlZGYyMGE0NjA1MDMzMTc2
NGQ3OWRiZmYwZDMzYmM5MDdiY2JmNjdjLi5lODM4MDVmZTI3MzUyZTRmNTI3MmYxNzgzMmFiNGY3
MTdlMDI2ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcApAQCAtMjMsNiArMjMsMTAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgog
CisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJlbGVtZW50LmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJo
aXN0b3J5LmgiCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJoaXN0b3J5X3AuaCIKKyNpbmNsdWRlICIu
Li9BcGkvcXdlYnNjcmlwdHdvcmxkLmgiCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgiCkBAIC00Myw4ICs0Nyw2IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGll
bnRRdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5o
IgotI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKICNpbmNsdWRl
ICJHZW9sb2NhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50TW9jay5o
IgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgpAQCAtNTMsOCArNTUsOCBAQAog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgIkluaXRXZWJDb3JlUXQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCiAj
aW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTYzLDYgKzY1LDggQEAKICNpbmNsdWRlICJQ
bHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgogI2luY2x1ZGUgIlByaW50
Q29udGV4dC5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIuaCIKKyNpbmNsdWRlICJRV2Vi
UGFnZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJl
bmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgpAQCAtNzYsMjUg
KzgwLDE1IEBACiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgotI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgotCi0jaW5jbHVkZSAicXdlYmVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgotI2luY2x1ZGUgInF3ZWJo
aXN0b3J5LmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnlfcC5oIgotI2luY2x1ZGUgInF3ZWJwYWdl
LmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInF3ZWJzY3JpcHR3b3JsZC5o
IgorI2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKFFU
X01VTFRJTUVESUEpCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgogI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPFFBY3Rpb24+Ci0jaW5j
bHVkZSA8UU1lbnU+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xMDMsMTUgKzk3LDE1IEBA
IFFNYXA8aW50LCBRV2ViU2NyaXB0V29ybGQqPiBtX3dvcmxkTWFwOwogI2lmIEVOQUJMRShHRU9M
T0NBVElPTikKIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogdG9HZW9sb2NhdGlvbkNsaWVudE1vY2so
R2VvbG9jYXRpb25DbGllbnQqIGNsaWVudCkKIHsKLSAgICAgQVNTRVJUKFFXZWJQYWdlUHJpdmF0
ZTo6ZHJ0UnVuKTsKLSAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9j
ayo+KGNsaWVudCk7CisgICAgQVNTRVJUKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oY2xpZW50KTsKIH0KICNl
bmRpZgogCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKIERldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jayogdG9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soRGV2aWNlT3JpZW50YXRp
b25DbGllbnQqIGNsaWVudCkKIHsKLSAgICBBU1NFUlQoUVdlYlBhZ2VQcml2YXRlOjpkcnRSdW4p
OworICAgIEFTU0VSVChRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1bik7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayo+KGNsaWVudCk7CiB9CiAjZW5kaWYK
QEAgLTE5OCw3ICsxOTIsNiBAQCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6fkR1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0KCkKIAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aW5pdGlhbGl6
ZSgpCiB7Ci0gICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOwogICAgIFF0RFJUTm9k
ZVJ1bnRpbWU6OmluaXRpYWxpemUoKTsKIH0KIApAQCAtMjI1LDU4ICsyMTgsNTggQEAgaW50IER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3b3JrZXJUaHJlYWRDb3VudCgpCiAKIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoYm9vbCBiKQog
ewotICAgIFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuID0gYjsKKyAgICBRV2ViUGFnZUFkYXB0ZXI6
OmRydFJ1biA9IGI7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmIGRlZmluZWQo
WFBfVU5JWCkKICAgICAvLyBQbHVnaW5WaWV3UXQgKFgxMSkgbmVlZHMgYSBmZXcgd29ya2Fyb3Vu
ZHMgd2hlbiBydW5uaW5nIHVuZGVyIERSVAogICAgIFBsdWdpblZpZXc6OnNldElzUnVubmluZ1Vu
ZGVyRFJUKGIpOwogI2VuZGlmCiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKK3Zv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoUVdl
YlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgUVdlYlBhZ2VQcml2
YXRlOjpjb3JlKHBhZ2UpLT5zZXR0aW5ncygpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGVu
YWJsZWQpOworICAgIGFkYXB0ZXItPnBhZ2UtPnNldHRpbmdzKCktPnNldEZyYW1lRmxhdHRlbmlu
Z0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Ondl
YlBhZ2VTZXRHcm91cE5hbWUoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIGdyb3VwTmFt
ZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUoUVdl
YlBhZ2VBZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBncm91cE5hbWUpCiB7Ci0gICAg
cGFnZS0+aGFuZGxlKCktPnBhZ2UtPnNldEdyb3VwTmFtZShncm91cE5hbWUpOworICAgIGFkYXB0
ZXItPnBhZ2UtPnNldEdyb3VwTmFtZShncm91cE5hbWUpOwogfQogCi1RU3RyaW5nIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlKQorUVN0cmlu
ZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZShRV2ViUGFnZUFkYXB0
ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgcmV0dXJuIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5ncm91cE5h
bWUoKTsKKyAgICByZXR1cm4gYWRhcHRlci0+cGFnZS0+Z3JvdXBOYW1lKCk7CiB9CiAKLXZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQoUVdlYlBh
Z2UqIHBhZ2UsIGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit2b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KFFXZWJQYWdlQWRh
cHRlciogYWRhcHRlciwgbG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmICghcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKSkKKyAgICBpZiAoIWFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY2FsbElkLCBzY3Jp
cHQpOworICAgIGFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UoUVdlYlBhZ2UqIHBhZ2UpCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KFFXZWJQYWdlQWRh
cHRlciogYWRhcHRlcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmICghcGFnZS0+
aGFuZGxlKCktPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICBpZiAoIWFkYXB0ZXIt
PnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBhZ2Ut
PmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisgICAgYWRh
cHRlci0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zaG93KCk7CiAjZW5kaWYKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yU2hvdyhRV2ViUGFnZSog
cGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKFFX
ZWJQYWdlQWRhcHRlciogYWRhcHRlcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlm
ICghcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICBpZiAo
IWFkYXB0ZXItPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNob3coKTsK
KyAgICBhZGFwdGVyLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAjZW5k
aWYKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9jdW1lbnRFbGVtZW50
KFFXZWJGcmFtZSogZnJhbWUpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpoYXNEb2N1
bWVudEVsZW1lbnQoUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRlcikKIHsKLSAgICByZXR1cm4gUVdl
YkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
OworICAgIHJldHVybiBhZGFwdGVyLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQoY29u
c3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgaXNBdXRvZmlsbGVkKQpAQCAtMzA2LDkgKzI5
OSw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFZhbHVlRm9yVXNlcihjb25z
dCBRV2ViRWxlbWVudCYgZWxlbWVudCwgY29uc3QKIC8vIFBhdXNlIGEgZ2l2ZW4gQ1NTIGFuaW1h
dGlvbiBvciB0cmFuc2l0aW9uIG9uIHRoZSB0YXJnZXQgbm9kZSBhdCBhIHNwZWNpZmljIHRpbWUu
CiAvLyBJZiB0aGUgYW5pbWF0aW9uIG9yIHRyYW5zaXRpb24gaXMgYWxyZWFkeSBwYXVzZWQsIGl0
IHdpbGwgdXBkYXRlIGl0cyBwYXVzZSB0aW1lLgogLy8gVGhpcyBtZXRob2QgaXMgb25seSBpbnRl
bmRlZCB0byBiZSB1c2VkIGZvciB0ZXN0aW5nIHRoZSBDU1MgYW5pbWF0aW9uIGFuZCB0cmFuc2l0
aW9uIHN5c3RlbS4KLWJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9u
KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJmFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lLCBjb25zdCBRU3RyaW5nICZlbGVtZW50SWQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpwYXVzZUFuaW1hdGlvbihRV2ViRnJhbWVBZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3Ry
aW5nICZhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyAmZWxlbWVudElk
KQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1l
KTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgaWYgKCFjb3Jl
RnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzI2LDkgKzMxOSw5IEBAIGJvb2wg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9uKFFXZWJGcmFtZSAqZnJhbWUs
IGNvbnN0IFFTdHJpbmcgJmFuCiAgICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9u
QXRUaW1lKGNvcmVOb2RlLT5yZW5kZXJlcigpLCBhbmltYXRpb25OYW1lLCB0aW1lKTsKIH0KIAot
Ym9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShR
V2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1l
LCBjb25zdCBRU3RyaW5nICZlbGVtZW50SWQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIsIGNv
bnN0IFFTdHJpbmcgJnByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcgJmVs
ZW1lbnRJZCkKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29y
ZShmcmFtZSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM0Nyw5ICszNDAsOSBA
QCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5
KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0CiB9CiAKIC8vIFJldHVybnMgdGhlIHRvdGFsIG51bWJl
ciBvZiBjdXJyZW50bHkgcnVubmluZyBhbmltYXRpb25zIChpbmNsdWRlcyBib3RoIENTUyB0cmFu
c2l0aW9ucyBhbmQgQ1NTIGFuaW1hdGlvbnMpLgotaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoUVdlYkZyYW1lICpmcmFtZSkKK2ludCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZUFkYXB0
ZXIgKmFkYXB0ZXIpCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6
OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAg
ICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNjAsOSArMzUz
LDkgQEAgaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoUVdlYkZyYW1lICpmcmFtZSkKICAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmNsZWFyRnJhbWVOYW1lKFFXZWJGcmFtZSogZnJhbWUpCit2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckZyYW1lTmFtZShRV2ViRnJhbWVBZGFwdGVyICph
ZGFwdGVyKQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgY29y
ZUZyYW1lLT50cmVlKCktPmNsZWFyTmFtZSgpOwogfQogCkBAIC0zODEsMjQgKzM3NCw2IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRl
cm5hdGVUaHJlYWQoYm9vbCB3YWl0CiAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RP
bkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25lKTsKIH0KIAotLy8gU3Vz
cGVuZCBhY3RpdmUgRE9NIG9iamVjdHMgaW4gdGhpcyBmcmFtZS4KLXZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCi17
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwot
ICAgIGlmIChjb3JlRnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIHNob3VsZCBiZSBjaGFuZ2VkIHRha2UgYSBSZWFzb25Gb3JTdXNwZW5zaW9uIHBhcmFt
ZXRlciAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1NzMyCi0gICAgICAgIGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoQWN0aXZlRE9NT2JqZWN0OjpKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQpOwotfQotCi0v
LyBSZXN1bWUgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUuCi12b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUp
Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUp
OwotICAgIGlmIChjb3JlRnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZG9j
dW1lbnQoKS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOwotfQotCiB2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojp3aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHNv
dXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0
cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQog
ewogICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoc291cmNlT3JpZ2luKSwgZGVzdGluYXRpb25Q
cm90b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CkBA
IC00MTksMzkgKzM5NCwzOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREb21h
aW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYgogICAgIFNjaGVtZVJl
Z2lzdHJ5OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRl
biwgc2NoZW1lKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRC
cm93c2luZ0VuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgdmFsdWUpCit2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIq
IGFkYXB0ZXIsIGJvb2wgdmFsdWUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPnNldHRp
bmdzKCktPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKHZhbHVlKTsKKyAgICBhZGFwdGVyLT5wYWdl
LT5zZXR0aW5ncygpLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZCh2YWx1ZSk7CiB9CiAKLXZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFFX
ZWJQYWdlKiBwYWdlLCBib29sIHZhbHVlKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBi
b29sIHZhbHVlKQogewotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCh2YWx1ZSk7CisgICAgYWRhcHRlci0+cGFnZS0+c2V0
dGluZ3MoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQodmFsdWUpOwogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoUVdl
YlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGJv
b2wgZW5hYmxlZCkKIHsKLSAgICBwYWdlLT5kLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSBl
bmFibGVkOworICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudFF0Kj4oYWRhcHRlci0+cGFnZS0+
ZWRpdG9yQ2xpZW50KCkpLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0
ZXNwYWNlRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGVkKQordm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChRV2Vi
UGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBwYWdlLT5kLT5zZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkID0gZW5hYmxlZDsKKyAgICBzdGF0aWNfY2FzdDxF
ZGl0b3JDbGllbnRRdCo+KGFkYXB0ZXItPnBhZ2UtPmVkaXRvckNsaWVudCgpKS0+c2V0U2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChlbmFibGVkKTsKIH0KIAogCi12b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUoUVdlYlBhZ2UqIHBhZ2Us
IGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQordm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKFFXZWJQYWdlQWRhcHRl
ciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpCiB7
Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuZXhlY3V0ZSh2YWx1ZSk7CisgICAg
YWRhcHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5l
ZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5leGVjdXRlKHZhbHVlKTsKIH0KIAotYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6aXNDb21tYW5kRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgY29uc3Qg
UVN0cmluZyYgbmFtZSkKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVu
YWJsZWQoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBuYW1lKQogewot
ICAgIHJldHVybiBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5pc0VuYWJsZWQoKTsKKyAg
ICByZXR1cm4gYWRhcHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5pc0VuYWJsZWQoKTsKIH0KIAotYm9vbCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZmluZFN0cmluZyhRV2ViUGFnZSogcGFnZSwgY29uc3Qg
UVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCitib29sIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRl
ciwgY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkp
CiB7CiAgICAgLy8gMS4gUGFyc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUgYXJyYXkKICAgICBXZWJD
b3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKQEAgLTQ3Myw3ICs0NDgsNyBAQCBib29sIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBR
U3RyaW5nJiBzdHJpbmcsCiAgICAgfQogCiAgICAgLy8gMi4gZmluZCB0aGUgc3RyaW5nCi0gICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUg
PSBhZGFwdGVyLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcs
IG9wdGlvbnMpOwogfQogCkBAIC01MTQsOSArNDg5LDkgQEAgUVZhcmlhbnRNYXAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBR
V2UKICAgICByZXR1cm4gcmVzOwogfQogCi1RVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UpCitRVmFyaWFudExpc3QgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVy
KQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gYWRhcHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogICAgIFFWYXJpYW50TGlzdCBzZWxlY3RlZFJhbmdlOwogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCk7CiAKQEAgLTUzOCw5ICs1MTMsOSBAQCBRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnNlbGVjdGVkUmFuZ2UoUVdlYlBhZ2UqIHBhZ2UpCiAKIH0KIAotUVZhcmlhbnRMaXN0
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2Vi
UGFnZSogcGFnZSwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKQorUVZhcmlhbnRMaXN0IER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2ViUGFnZUFk
YXB0ZXIgKmFkYXB0ZXIsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkKIHsKLSAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGFkYXB0
ZXItPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBR
VmFyaWFudExpc3QgcmVjdDsKIAogICAgIGlmICgobG9jYXRpb24gKyBsZW5ndGggPCBsb2NhdGlv
bikgJiYgKGxvY2F0aW9uICsgbGVuZ3RoKSkKQEAgLTU1Niw5ICs1MzEsOSBAQCBRVmFyaWFudExp
c3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKFFX
ZWJQYWdlKiBwYWdlLAogICAgIHJldHVybiByZWN0OwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQorYm9vbCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFXZWJG
cmFtZUFkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKIHsKLSAgICBG
cmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU3NCw5ICs1NDksOSBAQCBib29sIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdl
YkZyYW1lKgogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkgJiYgIWlucHV0
RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBdXRvY29t
cGxldGUoKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2luZG93c0Jl
aGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IoUVdlYlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRXaW5kb3dzQmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihRV2ViUGFn
ZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZh
dGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAg
IGlmICghY29yZVBhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBjb3JlUGFnZS0+c2V0dGluZ3Mo
KS0+c2V0RWRpdGluZ0JlaGF2aW9yVHlwZShFZGl0aW5nV2luZG93c0JlaGF2aW9yKTsKQEAgLTY3
NiwxNSArNjUxLDE1IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmlj
YXRpb24oYm9vbCBiKQogI2VuZGlmCiB9CiAKLVFTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnZpZXdwb3J0QXNUZXh0KFFXZWJQYWdlKiBwYWdlLCBpbnQgZGV2aWNlRFBJLCBjb25zdCBR
U2l6ZSYgZGV2aWNlU2l6ZSwgY29uc3QgUVNpemUmIGF2YWlsYWJsZVNpemUpCitRU3RyaW5nIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp2aWV3cG9ydEFzVGV4dChRV2ViUGFnZUFkYXB0ZXIqIGFk
YXB0ZXIsIGludCBkZXZpY2VEUEksIGNvbnN0IFFTaXplJiBkZXZpY2VTaXplLCBjb25zdCBRU2l6
ZSYgYXZhaWxhYmxlU2l6ZSkKIHsKLSAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyBhcmdz
ID0gcGFnZS0+ZC0+dmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50cyBhcmdzID0gYWRhcHRlci0+dmlld3BvcnRBcmd1bWVudHMoKTsKIAogICAgIGZsb2F0
IGRldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VEUEkgLyBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50
czo6ZGVwcmVjYXRlZFRhcmdldERQSTsKICAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMg
Y29uZiA9IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMoYXJncywKLSAgICAgICAg
LyogZGVza3RvcC13aWR0aCAgICAqLyA5ODAsCi0gICAgICAgIC8qIGRldmljZS13aWR0aCAgICAg
Ki8gZGV2aWNlU2l6ZS53aWR0aCgpLAotICAgICAgICAvKiBkZXZpY2UtaGVpZ2h0ICAgICovIGRl
dmljZVNpemUuaGVpZ2h0KCksCisgICAgICAgIC8qIGRlc2t0b3Atd2lkdGggICAgKi85ODAsCisg
ICAgICAgIC8qIGRldmljZS13aWR0aCAgICAgKi9kZXZpY2VTaXplLndpZHRoKCksCisgICAgICAg
IC8qIGRldmljZS1oZWlnaHQgICAgKi9kZXZpY2VTaXplLmhlaWdodCgpLAogICAgICAgICBkZXZp
Y2VQaXhlbFJhdGlvLAogICAgICAgICBhdmFpbGFibGVTaXplKTsKICAgICBXZWJDb3JlOjpyZXN0
cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3BvcnRTaXplKGNvbmYsIGF2YWlsYWJsZVNpemUs
IGRldmljZVBpeGVsUmF0aW8pOwpAQCAtNjkyLDcyICs2NjcsNzIgQEAgUVN0cmluZyBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dmlld3BvcnRBc1RleHQoUVdlYlBhZ2UqIHBhZ2UsIGludCBkZXZp
Y2VEUEksIGMKIAogICAgIFFTdHJpbmcgcmVzOwogICAgIHJlcyA9IHJlcy5zcHJpbnRmKCJ2aWV3
cG9ydCBzaXplICVkeCVkIHNjYWxlICVmIHdpdGggbGltaXRzIFslZiwgJWZdIGFuZCB1c2VyU2Nh
bGFibGUgJWZcbiIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvbmYubGF5b3V0U2l6
ZS53aWR0aCgpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oY29uZi5sYXlvdXRTaXpl
LmhlaWdodCgpKSwKLSAgICAgICAgICAgIGNvbmYuaW5pdGlhbFNjYWxlLAotICAgICAgICAgICAg
Y29uZi5taW5pbXVtU2NhbGUsCi0gICAgICAgICAgICBjb25mLm1heGltdW1TY2FsZSwKLSAgICAg
ICAgICAgIGNvbmYudXNlclNjYWxhYmxlKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb25m
LmxheW91dFNpemUud2lkdGgoKSksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4oY29uZi5sYXlv
dXRTaXplLmhlaWdodCgpKSwKKyAgICAgICAgY29uZi5pbml0aWFsU2NhbGUsCisgICAgICAgIGNv
bmYubWluaW11bVNjYWxlLAorICAgICAgICBjb25mLm1heGltdW1TY2FsZSwKKyAgICAgICAgY29u
Zi51c2VyU2NhbGFibGUpOwogCiAgICAgcmV0dXJuIHJlczsKIH0KIAotdm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2NhbGVQYWdlQnkoUVdlYkZyYW1lKiBmcmFtZSwgZmxvYXQgc2NhbGVm
YWN0b3IsIGNvbnN0IFFQb2ludCYgb3JpZ2luKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2NhbGVQYWdlQnkoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlciwgZmxvYXQgc2NhbGVmYWN0
b3IsIGNvbnN0IFFQb2ludCYgb3JpZ2luKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJh
bWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSog
Y29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJh
bWUtPnBhZ2UoKSkKICAgICAgICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlZmFjdG9y
LCBvcmlnaW4pOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrRGV2
aWNlT3JpZW50YXRpb24oUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3Vi
bGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3Zp
ZGVHYW1tYSwgZG91YmxlIGdhbW1hKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCBjYW5Q
cm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJl
dGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCiB7CiAjaWYgRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKLSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6
Y29yZShwYWdlKTsKKyAgICBQYWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgRGV2
aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKiBtb2NrQ2xpZW50ID0gdG9EZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2soRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpmcm9tKGNvcmVQYWdlKS0+
ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKSk7CiAgICAgbW9ja0NsaWVudC0+c2V0T3JpZW50YXRp
b24oRGV2aWNlT3JpZW50YXRpb25EYXRhOjpjcmVhdGUoY2FuUHJvdmlkZUFscGhhLCBhbHBoYSwg
Y2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEpKTsKICNlbmRpZgog
fQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEdlb2xvY2F0aW9uTW9jayhR
V2ViUGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0R2VvbG9j
YXRpb25Nb2NrKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlcikKIHsKICNpZiBFTkFCTEUoR0VPTE9D
QVRJT04pCi0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7
CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jayogbW9ja0NsaWVudCA9IHRvR2VvbG9jYXRpb25DbGllbnRNb2NrKEdlb2xvY2F0aW9u
Q29udHJvbGxlcjo6ZnJvbShjb3JlUGFnZSktPmNsaWVudCgpKTsKICAgICBtb2NrQ2xpZW50LT5y
ZXNldCgpOwogI2VuZGlmCiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1v
Y2tHZW9sb2NhdGlvblBlcm1pc3Npb24oUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgYWxsb3dlZCkKK3Zv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24o
UVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBib29sIGFsbG93ZWQpCiB7CiAjaWYgRU5BQkxFKEdF
T0xPQ0FUSU9OKQotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBh
Z2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlv
bkNsaWVudE1vY2sqIG1vY2tDbGllbnQgPSB0b0dlb2xvY2F0aW9uQ2xpZW50TW9jayhHZW9sb2Nh
dGlvbkNvbnRyb2xsZXI6OmZyb20oY29yZVBhZ2UpLT5jbGllbnQoKSk7CiAgICAgbW9ja0NsaWVu
dC0+c2V0UGVybWlzc2lvbihhbGxvd2VkKTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihRV2ViUGFnZSogcGFnZSwg
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCit2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihRV2Vi
UGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5KQogewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICBQYWdlKiBj
b3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKyAgICBQYWdlKiBjb3JlUGFn
ZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGllbnRNb2NrKiBtb2NrQ2xpZW50
ID0gdG9HZW9sb2NhdGlvbkNsaWVudE1vY2soR2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9tKGNv
cmVQYWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNldFBvc2l0aW9uKEdlb2xvY2F0
aW9uUG9zaXRpb246OmNyZWF0ZShjdXJyZW50VGltZSgpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBh
Y2N1cmFjeSkpOwogI2VuZGlmCiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihRV2ViUGFnZSogcGFnZSwg
Y29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihRV2ViUGFnZUFkYXB0ZXIq
IGFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOwor
ICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVu
dE1vY2sqIG1vY2tDbGllbnQgPSBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihH
ZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20oY29yZVBhZ2UpLT5jbGllbnQoKSk7CiAgICAgbW9j
a0NsaWVudC0+c2V0UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKG1lc3NhZ2UpOwogI2VuZGlmCiB9
CiAKLWludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoUVdlYlBhZ2UqIHBhZ2UpCitpbnQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFFX
ZWJQYWdlQWRhcHRlciogYWRhcHRlcikKIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAg
UGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSog
Y29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9j
a0NsaWVudCA9IHRvR2VvbG9jYXRpb25DbGllbnRNb2NrKEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6
ZnJvbShjb3JlUGFnZSktPmNsaWVudCgpKTsKICAgICByZXR1cm4gbW9ja0NsaWVudC0+bnVtYmVy
T2ZQZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzKCk7CiAjZWxzZQpAQCAtNzk0LDkgKzc2OSw5IEBA
IFFNYXA8UVN0cmluZywgUVdlYkhpc3RvcnlJdGVtPiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
Z2V0Q2hpbGRIaXN0b3J5SXRlbXMoY29uCiAgICAgcmV0dXJuIGtpZHM7CiB9CiAKLWJvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNob3VsZENsb3NlKFFXZWJGcmFtZSogZnJhbWUpCitib29s
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShRV2ViRnJhbWVBZGFwdGVyICph
ZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gYWRhcHRl
ci0+ZnJhbWU7CiAgICAgcmV0dXJuIGNvcmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZENsb3NlKCk7
CiB9CiAKQEAgLTgwNSw3ICs3ODAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpj
bGVhclNjcmlwdFdvcmxkcygpCiAgICAgbV93b3JsZE1hcC5jbGVhcigpOwogfQogCi12b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2Vi
RnJhbWUqIGZyYW1lLCBpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQordm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoUVdl
YkZyYW1lQWRhcHRlciAqYWRhcHRlciwgaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlw
dCkKIHsKICAgICBRV2ViU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkOwogICAgIGlmICghd29ybGRJ
RCkgewpAQCAtODE2LDcgKzc5MSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFtZSogZnJhbWUsIGluCiAgICAgfSBl
bHNlCiAgICAgICAgIHNjcmlwdFdvcmxkID0gbV93b3JsZE1hcC52YWx1ZSh3b3JsZElEKTsKIAot
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZy
YW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAK
ICAgICBTY3JpcHRDb250cm9sbGVyKiBwcm94eSA9IGNvcmVGcmFtZS0+c2NyaXB0KCk7CiAKQEAg
LTgyNSwxNCArODAwLDE0IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFtZSogZnJhbWUsIGluCiAgICAgcHJveHktPmV4
ZWN1dGVTY3JpcHRJbldvcmxkKHNjcmlwdFdvcmxkLT53b3JsZCgpLCBzY3JpcHQsIHRydWUpOwog
fQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChRV2Vi
UGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmFkZFVzZXJTdHlsZVNoZWV0KFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwg
Y29uc3QgUVN0cmluZyYgc291cmNlQ29kZSkKIHsKLSAgICBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+
Z3JvdXAoKS5hZGRVc2VyU3R5bGVTaGVldFRvV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCks
IHNvdXJjZUNvZGUsIFFVcmwoKSwgVmVjdG9yPFN0cmluZz4oKSwgVmVjdG9yPFN0cmluZz4oKSwg
V2ViQ29yZTo6SW5qZWN0SW5BbGxGcmFtZXMpOworICAgIGFkYXB0ZXItPnBhZ2UtPmdyb3VwKCku
YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzb3VyY2VD
b2RlLCBRVXJsKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIFdlYkNvcmU6
OkluamVjdEluQWxsRnJhbWVzKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
cmVtb3ZlVXNlclN0eWxlU2hlZXRzKFFXZWJQYWdlKiBwYWdlKQordm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzKFFXZWJQYWdlQWRhcHRlciogYWRhcHRl
cikKIHsKLSAgICBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Z3JvdXAoKS5yZW1vdmVVc2VyU3R5bGVT
aGVldHNGcm9tV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIGFkYXB0ZXItPnBh
Z2UtPmdyb3VwKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRzRnJvbVdvcmxkKG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2ltdWxhdGVE
ZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGl0bGUpCkBAIC04NDIsMzEg
KzgxNywzMSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaW11bGF0ZURlc2t0b3BO
b3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0aQogI2VuZGlmCiB9CiAKLXZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyc0xvYWRpbmcoUVdlYlBhZ2UqIHBhZ2UsIGJv
b2wgZmxhZykKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyc0xvYWRpbmco
UVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVyLCBib29sIGZsYWcpCiB7Ci0gICAgUGFnZSogY29yZVBh
Z2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBh
ZGFwdGVyLT5wYWdlOwogICAgIGlmIChjb3JlUGFnZSkKICAgICAgICAgY29yZVBhZ2UtPnNldERl
ZmVyc0xvYWRpbmcoZmxhZyk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Omdv
QmFjayhRV2ViUGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdvQmFj
ayhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2Vi
UGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5w
YWdlOwogICAgIGlmIChjb3JlUGFnZSkKICAgICAgICAgY29yZVBhZ2UtPmdvQmFjaygpOwogfQog
CiAvLyBBUEkgQ2FuZGlkYXRlPwotUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVz
cG9uc2VNaW1lVHlwZShRV2ViRnJhbWUqIGZyYW1lKQorUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cmVzcG9uc2VNaW1lVHlwZShRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyKQogewot
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZy
YW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAg
ICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGRvY0xvYWRlciA9IGNvcmVGcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgcmV0dXJuIGRvY0xvYWRlci0+cmVzcG9uc2VNSU1F
VHlwZSgpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhck9wZW5lcihR
V2ViRnJhbWUqIGZyYW1lKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVu
ZXIoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29y
ZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGNvcmVGcmFtZS0+bG9hZGVyKCkt
PnNldE9wZW5lcigwKTsKIH0KIApAQCAtODc1LDQwICs4NTAsMTYgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6YWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFFTdHIKICAgICBGcmFtZUxvYWRlckNsaWVudFF0OjpVUkxzVG9SZWRpcmVjdFtvcmlnaW5d
ID0gZGVzdGluYXRpb247CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldElu
dGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJs
ZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEludGVyYWN0aXZlRm9ybVZhbGlk
YXRpb25FbmFibGVkKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCBlbmFibGUpCiB7Ci0g
ICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFn
ZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIGlmIChjb3JlUGFnZSkKICAgICAgICAg
Y29yZVBhZ2UtPnNldHRpbmdzKCktPnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVk
KGVuYWJsZSk7CiB9CiAKLSNpZm5kZWYgUVRfTk9fTUVOVQotc3RhdGljIFFTdHJpbmdMaXN0IGl0
ZXJhdGVDb250ZXh0TWVudShRTWVudSogbWVudSkKLXsKLSAgICBpZiAoIW1lbnUpCi0gICAgICAg
IHJldHVybiBRU3RyaW5nTGlzdCgpOwotCi0gICAgUVN0cmluZ0xpc3QgaXRlbXM7Ci0gICAgUUxp
c3Q8UUFjdGlvbiAqPiBhY3Rpb25zID0gbWVudS0+YWN0aW9ucygpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYWN0aW9ucy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFjdGlvbnMuYXQo
aSktPmlzU2VwYXJhdG9yKCkpCi0gICAgICAgICAgICBpdGVtcyA8PCBRTGF0aW4xU3RyaW5nKCI8
c2VwYXJhdG9yPiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpdGVtcyA8PCBhY3Rpb25z
LmF0KGkpLT50ZXh0KCk7Ci0gICAgICAgIGlmIChhY3Rpb25zLmF0KGkpLT5tZW51KCkpCi0gICAg
ICAgICAgICBpdGVtcyA8PCBpdGVyYXRlQ29udGV4dE1lbnUoYWN0aW9ucy5hdChpKS0+bWVudSgp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGl0ZW1zOwotfQotI2VuZGlmCi0KLVFTdHJpbmdMaXN0IER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb250ZXh0TWVudShRV2ViUGFnZSogcGFnZSkKK1FTdHJp
bmdMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb250ZXh0TWVudShRV2ViUGFnZUFkYXB0
ZXIqIHBhZ2UpCiB7Ci0jaWZuZGVmIFFUX05PX0NPTlRFWFRNRU5VCi0gICAgcmV0dXJuIGl0ZXJh
dGVDb250ZXh0TWVudShwYWdlLT5kLT5jdXJyZW50Q29udGV4dE1lbnUuZGF0YSgpKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gcGFnZS0+bWVu
dUFjdGlvbnNBc1RleHQoKTsKIH0KIAogZG91YmxlIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpk
ZWZhdWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKQpAQCAtOTE2LDE4ICs4NjcsMTggQEAgZG91Ymxl
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWZhdWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKQog
ICAgIHJldHVybiBTZXR0aW5nczo6ZGVmYXVsdE1pbkRPTVRpbWVySW50ZXJ2YWwoKTsKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoUVdl
YlBhZ2UqIHBhZ2UsIGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFsKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgZG91
YmxlIGludGVydmFsKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpj
b3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBpZiAo
IWNvcmVQYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBjb3JlUGFnZS0+c2V0dGluZ3MoKS0+
c2V0TWluRE9NVGltZXJJbnRlcnZhbChpbnRlcnZhbCk7CiB9CiAKLWJvb2wgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MoUVdlYlBhZ2UgKnBhZ2Us
IGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVVybCYgZmlyc3RQYXJ0eVVybCkKK2Jvb2wgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MoUVdlYlBhZ2VB
ZGFwdGVyICphZGFwdGVyLCBjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFVcmwmIGZpcnN0UGFydHlV
cmwpCiB7Ci0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7
CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIHJldHVybiB0aGlyZFBh
cnR5Q29va2llUG9saWN5UGVybWl0cyhjb3JlUGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5u
ZXR3b3JraW5nQ29udGV4dCgpLCB1cmwsIGZpcnN0UGFydHlVcmwpOwogfQogCkBAIC05MzYsMTIg
Kzg4NywxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjplbmFibGVNb2NrU2Nyb2xs
YmFycygpCiAgICAgU2V0dGluZ3M6OnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZCh0cnVlKTsKIH0K
IAotUVVybCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bWVkaWFDb250ZW50VXJsQnlFbGVtZW50
SWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQorUVVybCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6bWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQoUVdlYkZyYW1l
QWRhcHRlciogYWRhcHRlciwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQogewogICAgIFFVcmwg
cmVzOwogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAg
ICByZXR1cm4gcmVzOwogCkBAIC05NjcsMTAgKzkxOCwxMCBAQCBRVXJsIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjptZWRpYUNvbnRlbnRVcmxCeUVsZW1lbnRJZChRV2ViRnJhbWUqIGZyYW1lLCBj
b25zdAogfQogCiAvLyBBUEkgQ2FuZGlkYXRlPwotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2V0QWx0ZXJuYXRlSHRtbChRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBodG1s
LCBjb25zdCBRVXJsJiBiYXNlVXJsLCBjb25zdCBRVXJsJiBmYWlsaW5nVXJsKQordm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QWx0ZXJuYXRlSHRtbChRV2ViRnJhbWVBZGFwdGVyKiBh
ZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBodG1sLCBjb25zdCBRVXJsJiBiYXNlVXJsLCBjb25zdCBR
VXJsJiBmYWlsaW5nVXJsKQogewogICAgIEtVUkwga3VybChiYXNlVXJsKTsKLSAgICBXZWJDb3Jl
OjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGt1cmwpOwogICAgIGNvbnN0IFFCeXRlQXJyYXkgdXRm
OCA9IGh0bWwudG9VdGY4KCk7CiAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiBkYXRhID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUodXRmOC5jb25zdERhdGEoKSwg
dXRmOC5sZW5ndGgoKSk7CkBAIC05NzgsOSArOTI5LDkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0QWx0ZXJuYXRlSHRtbChRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5n
JgogICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEs
IGZhbHNlKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29uZmlybUNvbXBv
c2l0aW9uKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBjaGFyKiB0ZXh0KQordm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6Y29uZmlybUNvbXBvc2l0aW9uKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRl
ciwgY29uc3QgY2hhciogdGV4dCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBwYWdlLT5oYW5kbGUo
KS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEZy
YW1lKiBmcmFtZSA9IGFkYXB0ZXItPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTk5Nywx
NSArOTQ4LDkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29uZmlybUNvbXBvc2l0
aW9uKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBjaGFyKiB0ZXgKICAgICAgICAgZWRpdG9yLT5pbnNl
cnRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dCksIDApOwogfQogCi1RU3RyaW5nIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpsYXllclRyZWVBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSkKLXsKLSAg
ICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFt
ZSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+bGF5ZXJUcmVlQXNUZXh0KCk7Ci19Ci0KLXZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChRV2ViRnJhbWUq
IGZyYW1lKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aW5qZWN0SW50ZXJuYWxzT2Jq
ZWN0KFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNv
cmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIFdlYkNvcmU6OkZy
YW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBKU0RPTVdpbmRvdyogd2luZG93
ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAg
ICBRX0FTU0VSVCh3aW5kb3cpOwogCkBAIC0xMDIyLDkgKzk2Nyw5IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4
dCkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0
KTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcm5hbHNPYmpl
Y3QoUVdlYkZyYW1lKiBmcmFtZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0
SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgV2ViQ29y
ZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAg
IFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBKU0RPTVdp
bmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCkBAIC0xMDQxLDkgKzk4Niw5IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmpl
Y3QoY29udGV4dCk7CiB9CiAKLVFJbWFnZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFpbnRQ
YWdlc1dpdGhCb3VuZGFyaWVzKFFXZWJGcmFtZSogcWZyYW1lKQorUUltYWdlIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpwYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMoUVdlYkZyYW1lQWRhcHRlciog
YWRhcHRlcikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHFm
cmFtZSk7CisgICAgRnJhbWUqIGZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgUHJpbnRDb250
ZXh0IHByaW50Q29udGV4dChmcmFtZSk7CiAKICAgICBRUmVjdCByZWN0ID0gZnJhbWUtPnZpZXco
KS0+ZnJhbWVSZWN0KCk7CkBAIC0xMDg0LDExOSArMTAyOSwyMSBAQCBRSW1hZ2UgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnBhaW50UGFnZXNXaXRoQm91bmRhcmllcyhRV2ViRnJhbWUqIHFmcmFt
ZSkKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldFRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZSogZnJhbWUsIGJvb2wgZW5hYmxlKQordm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0VHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1l
QWRhcHRlciogYWRhcHRlciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSktPnZpZXcoKS0+c2V0VHJhY2tzUmVwYWludHMoZW5hYmxlKTsKKyAgICBhZGFw
dGVyLT5mcmFtZS0+dmlldygpLT5zZXRUcmFja3NSZXBhaW50cyhlbmFibGUpOwogfQogCi1ib29s
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0cmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWUqIGZy
YW1lKQorYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dHJhY2tSZXBhaW50UmVjdHMoUVdl
YkZyYW1lQWRhcHRlciogYWRhcHRlcikKIHsKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSktPnZpZXcoKS0+aXNUcmFja2luZ1JlcGFpbnRzKCk7CisgICAgcmV0dXJuIGFk
YXB0ZXItPmZyYW1lLT52aWV3KCktPmlzVHJhY2tpbmdSZXBhaW50cygpOwogfQogCi12b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRUcmFja2VkUmVwYWludFJlY3RzKFFXZWJGcmFtZSog
ZnJhbWUsIFFWZWN0b3I8UVJlY3Q+JiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpnZXRUcmFja2VkUmVwYWludFJlY3RzKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIsIFFW
ZWN0b3I8UVJlY3Q+JiByZXN1bHQpCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5m
cmFtZTsKICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gY29yZUZyYW1lLT52aWV3
KCktPnRyYWNrZWRSZXBhaW50UmVjdHMoKTsKICAgICByZXN1bHQucmVzaXplKHJlY3RzLnNpemUo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkKICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZWN0c1tpXSk7CiB9Ci0KLS8vIFByb3ZpZGUgYSBiYWNrd2FyZCBj
b21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXNseSBleHBvcnRlZCBwcml2YXRlIHN5bWJvbHMgYXMg
b2YgUXRXZWJLaXQgNC42IHJlbGVhc2UKLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9yZXN1bWVB
Y3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoZnJhbWUpOwotfQotCi12b2lkIFFXRUJL
SVRfRVhQT1JUIHF0X3N1c3BlbmRBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCi17
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKGZy
YW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfY2xlYXJGcmFtZU5hbWUoUVdl
YkZyYW1lKiBmcmFtZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJGcmFt
ZU5hbWUoZnJhbWUpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9nYXJiYWdlQ29s
bGVjdG9yX2NvbGxlY3QoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnYXJiYWdl
Q29sbGVjdG9yQ29sbGVjdCgpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9nYXJi
YWdlQ29sbGVjdG9yX2NvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7Ci19Ci0KLWludCBRV0VCS0lUX0VYUE9S
VCBxdF9kcnRfamF2YVNjcmlwdE9iamVjdHNDb3VudCgpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7Ci19Ci0KLWludCBRV0VC
S0lUX0VYUE9SVCBxdF9kcnRfbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZSogZnJh
bWUpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoZnJhbWUpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9vdmVy
d3JpdGVQbHVnaW5EaXJlY3RvcmllcygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
Om92ZXJ3cml0ZVBsdWdpbkRpcmVjdG9yaWVzKCk7Ci19Ci0KLWJvb2wgUVdFQktJVF9FWFBPUlQg
cXRfZHJ0X3BhdXNlQW5pbWF0aW9uKFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGFu
aW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0g
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihmcmFtZSwg
YW5pbWF0aW9uTmFtZSwgdGltZSwgZWxlbWVudElkKTsKLX0KLQotYm9vbCBRV0VCS0lUX0VYUE9S
VCBxdF9kcnRfcGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShRV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nICZlbGVt
ZW50SWQpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5z
aXRpb25PZlByb3BlcnR5KGZyYW1lLCBwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Ci19
Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X3Jlc2V0T3JpZ2luQWNjZXNzV2hpdGVMaXN0
cygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0T3JpZ2luQWNjZXNzV2hp
dGVMaXN0cygpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9ydW4oYm9vbCBiKQot
ewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREdW1wUmVuZGVyVHJlZU1vZGVFbmFi
bGVkKGIpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF93aGl0ZUxpc3RBY2Nlc3NG
cm9tT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVz
dGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
Ojp3aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbiwgZGVzdGluYXRpb25Qcm90
b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0K
LVFTdHJpbmcgUVdFQktJVF9FWFBPUlQgcXRfd2VicGFnZV9ncm91cE5hbWUoUVdlYlBhZ2UqIHBh
Z2UpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBO
YW1lKHBhZ2UpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X3dlYnBhZ2Vfc2V0R3JvdXBO
YW1lKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBncm91cE5hbWUpCi17Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUocGFnZSwgZ3JvdXBOYW1l
KTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kdW1wX2ZyYW1lX2xvYWRlcihib29sIGIp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcihiKTsKLX0K
LQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kdW1wX3Jlc291cmNlX2xvYWRfY2FsbGJhY2tzKGJv
b2wgYikKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNlTG9hZENh
bGxiYWNrcyhiKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kdW1wX2VkaXRpbmdfY2Fs
bGJhY2tzKGJvb2wgYikKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEVkaXRp
bmdDYWxsYmFja3MoYik7Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9zZXRfYWNj
ZXB0c19lZGl0aW5nKGJvb2wgYikKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVt
cFNldEFjY2VwdHNFZGl0aW5nKGIpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmggYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKaW5kZXggZDA2MDBm
ZmE3ZGFlNDQ5ZjE4MTA1MjJhOWM2MDlmODM0MjFhNjNjOS4uY2NhNjE1ZGM0NWEyY2YyMGU2NjJh
OGMzNzhkNjRiMjYyNjk2YjQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaApAQCAtMjMsNyArMjMsNyBA
QAogI2lmbmRlZiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdF9oCiAjZGVmaW5lIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0X2gKIAotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlICIu
Li9BcGkvcXdlYmtpdGdsb2JhbC5oIgogI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgogI2lu
Y2x1ZGUgPFFWYXJpYW50PgogI2luY2x1ZGUgPFFWZWN0b3I+CkBAIC00Myw3ICs0Myw4IEBAIGNs
YXNzIFF0RFJUTm9kZVJ1bnRpbWU7CiAKIGNsYXNzIFFXZWJFbGVtZW50OwogY2xhc3MgUVdlYkZy
YW1lOwotY2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgUVdl
YlBhZ2VBZGFwdGVyOwogY2xhc3MgUVdlYkhpc3RvcnlJdGVtOwogY2xhc3MgUVdlYlNjcmlwdFdv
cmxkOwogCkBAIC04OSwyNSArOTAsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZSgpOwogCi0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKFFX
ZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSk7
Ci0gICAgc3RhdGljIGJvb2wgaXNDb21tYW5kRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgY29uc3Qg
UVN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgZmluZFN0cmluZyhRV2ViUGFnZSogcGFn
ZSwgY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkp
OwotICAgIHN0YXRpYyB2b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChRV2ViUGFnZSog
cGFnZSwgYm9vbCBlbmFibGVkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTZWxlY3RUcmFpbGluZ1do
aXRlc3BhY2VFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJsZWQpOwotICAgIHN0YXRp
YyBRVmFyaWFudExpc3Qgc2VsZWN0ZWRSYW5nZShRV2ViUGFnZSogcGFnZSk7Ci0gICAgc3RhdGlj
IFFWYXJpYW50TGlzdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2ViUGFnZSogcGFnZSwg
aW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgdm9pZCBjb25maXJtQ29tcG9z
aXRpb24oUVdlYlBhZ2UqLCBjb25zdCBjaGFyKiB0ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBleGVj
dXRlQ29yZUNvbW1hbmRCeU5hbWUoUVdlYlBhZ2VBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbmFt
ZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGlzQ29tbWFuZEVuYWJs
ZWQoUVdlYlBhZ2VBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbmFtZSk7CisgICAgc3RhdGljIGJv
b2wgZmluZFN0cmluZyhRV2ViUGFnZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0
cmluZ0xpc3QmIG9wdGlvbkFycmF5KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiwgYm9vbCBlbmFibGVkKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKFFXZWJQYWdlQWRhcHRlcios
IGJvb2wgZW5hYmxlZCk7CisgICAgc3RhdGljIFFWYXJpYW50TGlzdCBzZWxlY3RlZFJhbmdlKFFX
ZWJQYWdlQWRhcHRlciopOworICAgIHN0YXRpYyBRVmFyaWFudExpc3QgZmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2UoUVdlYlBhZ2VBZGFwdGVyKiwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oUVdlYlBhZ2VBZGFwdGVyKiwgY29u
c3QgY2hhciogdGV4dCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXVzZUFuaW1hdGlvbihRV2ViRnJh
bWUqLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxl
bWVudElkKTsKLSAgICBzdGF0aWMgYm9vbCBwYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KFFXZWJG
cmFtZSosIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nJiBl
bGVtZW50SWQpOwotICAgIHN0YXRpYyB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzKFFXZWJG
cmFtZSogZnJhbWUpOwotICAgIHN0YXRpYyB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHMoUVdl
YkZyYW1lKiBmcmFtZSk7CisgICAgc3RhdGljIGJvb2wgcGF1c2VBbmltYXRpb24oUVdlYkZyYW1l
QWRhcHRlciosIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5n
JiBlbGVtZW50SWQpOworICAgIHN0YXRpYyBib29sIHBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHko
UVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lLCBjb25z
dCBRU3RyaW5nJiBlbGVtZW50SWQpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgY29uc3QgUVN0cmluZyYg
c2NoZW1lKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKFFXZWJQ
YWdlKiwgYm9vbCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoUVdl
YlBhZ2UqIHBhZ2UsIGJvb2wgdmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIHNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkKFFXZWJQYWdlKiwgYm9vbCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0RHVt
cFJlbmRlclRyZWVNb2RlRW5hYmxlZChib29sIGIpOworICAgIHN0YXRpYyB2b2lkIHNldEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiwgYm9vbCk7CisgICAgc3RhdGljIHZv
aWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiwgYm9vbCB2YWx1ZSk7
CisgICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoUVdlYlBhZ2VB
ZGFwdGVyKiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0RHVtcFJlbmRlclRyZWVNb2RlRW5h
YmxlZChib29sKTsKIAogICAgIHN0YXRpYyB2b2lkIGdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0KCk7
CiAgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3RPbkFsdGVybmF0ZVRocmVh
ZChib29sIHdhaXRVbnRpbERvbmUpOwpAQCAtMTE1LDIwICsxMTQsMjAgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBRV2ViRWxlbWVudCYsIGNvbnN0IFFT
dHJpbmcmIHZhbHVlKTsKICAgICBzdGF0aWMgaW50IGphdmFTY3JpcHRPYmplY3RzQ291bnQoKTsK
ICAgICBzdGF0aWMgdm9pZCBjbGVhclNjcmlwdFdvcmxkcygpOwotICAgIHN0YXRpYyB2b2lkIGV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFtZSogZnJhbWUsIGludCB3b3JsZElE
LCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOworICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFtZUFkYXB0ZXIqLCBpbnQgd29ybGRJRCwgY29uc3QgUVN0
cmluZyYgc2NyaXB0KTsKIAotICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3RvckV4ZWN1dGVTY3Jp
cHQoUVdlYlBhZ2UqIHBhZ2UsIGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwot
ICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3RvclNob3coUVdlYlBhZ2UqIHBhZ2UpOwotICAgIHN0
YXRpYyB2b2lkIHdlYkluc3BlY3RvckNsb3NlKFFXZWJQYWdlKiBwYWdlKTsKKyAgICBzdGF0aWMg
dm9pZCB3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KFFXZWJQYWdlQWRhcHRlciosIGxvbmcgY2Fs
bElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOworICAgIHN0YXRpYyB2b2lkIHdlYkluc3BlY3Rv
clNob3coUVdlYlBhZ2VBZGFwdGVyKik7CisgICAgc3RhdGljIHZvaWQgd2ViSW5zcGVjdG9yQ2xv
c2UoUVdlYlBhZ2VBZGFwdGVyKik7CiAKLSAgICBzdGF0aWMgUVN0cmluZyB3ZWJQYWdlR3JvdXBO
YW1lKFFXZWJQYWdlICpwYWdlKTsKLSAgICBzdGF0aWMgdm9pZCB3ZWJQYWdlU2V0R3JvdXBOYW1l
KFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBncm91cE5hbWUpOwotICAgIHN0YXRpYyB2
b2lkIGNsZWFyRnJhbWVOYW1lKFFXZWJGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBRU3RyaW5n
IHdlYlBhZ2VHcm91cE5hbWUoUVdlYlBhZ2VBZGFwdGVyKik7CisgICAgc3RhdGljIHZvaWQgd2Vi
UGFnZVNldEdyb3VwTmFtZShRV2ViUGFnZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBncm91cE5h
bWUpOworICAgIHN0YXRpYyB2b2lkIGNsZWFyRnJhbWVOYW1lKFFXZWJGcmFtZUFkYXB0ZXIqKTsK
ICAgICBzdGF0aWMgdm9pZCBvdmVyd3JpdGVQbHVnaW5EaXJlY3RvcmllcygpOwotICAgIHN0YXRp
YyBpbnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZSopOwotICAgIHN0YXRpYyBi
b29sIGhhc0RvY3VtZW50RWxlbWVudChRV2ViRnJhbWUqIGZyYW1lKTsKLSAgICBzdGF0aWMgYm9v
bCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoUVdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRXaW5kb3dz
QmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihRV2ViUGFnZSopOworICAgIHN0YXRpYyBpbnQgbnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZUFkYXB0ZXIqKTsKKyAgICBzdGF0aWMgYm9v
bCBoYXNEb2N1bWVudEVsZW1lbnQoUVdlYkZyYW1lQWRhcHRlciopOworICAgIHN0YXRpYyBib29s
IGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChRV2ViRnJhbWVBZGFwdGVy
KiwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRXaW5kb3dz
QmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvcihRV2ViUGFnZUFkYXB0ZXIqKTsKIAogICAgIHN0YXRp
YyB2b2lkIGNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKTsKIApAQCAtMTM2LDg2ICsxMzUsODQg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZVdoaXRlTGlzdEFjY2Vzc0Zyb21Pcmln
aW4oY29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlv
blByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpOwogICAgIHN0YXRpYyB2b2lkIHJlc2V0T3JpZ2luQWNjZXNzV2hp
dGVMaXN0cygpOwogCi0gICAgc3RhdGljIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKFFX
ZWJQYWdlKiwgYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92
aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEp
OworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihRV2ViUGFnZUFkYXB0
ZXIqLCBib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVC
ZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7CiAK
LSAgICBzdGF0aWMgdm9pZCByZXNldEdlb2xvY2F0aW9uTW9jayhRV2ViUGFnZSopOwotICAgIHN0
YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24oUVdlYlBhZ2UqLCBib29sIGFs
bG93ZWQpOwotICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKFFXZWJQ
YWdlKiwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kp
OwotICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVF
cnJvcihRV2ViUGFnZSosIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHN0YXRpYyBpbnQg
bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoUVdlYlBhZ2UqKTsK
KyAgICBzdGF0aWMgdm9pZCByZXNldEdlb2xvY2F0aW9uTW9jayhRV2ViUGFnZUFkYXB0ZXIqKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQYWdlQWRh
cHRlciosIGJvb2wgYWxsb3dlZCk7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oUVdlYlBhZ2VBZGFwdGVyKiwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3kpOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihRV2ViUGFnZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5n
JiBtZXNzYWdlKTsKKyAgICBzdGF0aWMgaW50IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKFFXZWJQYWdlQWRhcHRlciopOwogCiAgICAgc3RhdGljIGludCB3b3Jr
ZXJUaHJlYWRDb3VudCgpOwogCiAgICAgc3RhdGljIFFTdHJpbmcgbWFya2VyVGV4dEZvckxpc3RJ
dGVtKGNvbnN0IFFXZWJFbGVtZW50JiBsaXN0SXRlbSk7Ci0gICAgc3RhdGljIFFWYXJpYW50TWFw
IGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxl
bWVudCk7CisgICAgc3RhdGljIFFWYXJpYW50TWFwIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNp
dGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYpOwogCi0gICAgc3RhdGljIHZvaWQgZHVtcEZyYW1l
TG9hZGVyKGJvb2wgYik7CisgICAgc3RhdGljIHZvaWQgZHVtcEZyYW1lTG9hZGVyKGJvb2wpOwog
ICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soYm9vbCk7Ci0gICAg
c3RhdGljIHZvaWQgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlcihib29sIGIpOwotICAgIHN0
YXRpYyB2b2lkIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoYm9vbCBiKTsKLSAgICBzdGF0aWMg
dm9pZCBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhib29sIGIpOworICAgIHN0YXRpYyB2
b2lkIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkZXIoYm9vbCk7CisgICAgc3RhdGljIHZvaWQg
ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyhib29sKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcyhib29sKTsKICAgICBzdGF0aWMgdm9pZCBkdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzUGF0aChjb25zdCBRU3RyaW5nJiBwYXRoKTsKICAgICBzdGF0aWMgdm9p
ZCBkdW1wV2lsbENhY2hlUmVzcG9uc2VDYWxsYmFja3MoYm9vbCk7Ci0gICAgc3RhdGljIHZvaWQg
c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgYik7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCBiKTsKLSAgICBzdGF0
aWMgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoY29uc3QgUVN0cmluZ0xpc3Qm
IGhlYWRlcnMpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBIaXN0b3J5Q2FsbGJhY2tzKGJvb2wgYik7
Ci0gICAgc3RhdGljIHZvaWQgZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyhib29sIGIpOworICAg
IHN0YXRpYyB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChib29s
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoY29uc3QgUVN0
cmluZ0xpc3QmKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUNhbGxiYWNrcyhib29sKTsK
KyAgICBzdGF0aWMgdm9pZCBkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKGJvb2wpOwogCi0gICAg
c3RhdGljIHZvaWQgc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29sIGIpOworICAgIHN0
YXRpYyB2b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCk7CiAKLSAgICBzdGF0
aWMgdm9pZCBkdW1wRWRpdGluZ0NhbGxiYWNrcyhib29sIGIpOwotICAgIHN0YXRpYyB2b2lkIGR1
bXBTZXRBY2NlcHRzRWRpdGluZyhib29sIGIpOworICAgIHN0YXRpYyB2b2lkIGR1bXBFZGl0aW5n
Q2FsbGJhY2tzKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIGR1bXBTZXRBY2NlcHRzRWRpdGluZyhi
b29sKTsKIAotICAgIHN0YXRpYyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCBiKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wTm90aWZpY2F0aW9uKGJvb2wpOworICAgIHN0YXRpYyBRU3RyaW5nIHZp
ZXdwb3J0QXNUZXh0KFFXZWJQYWdlQWRhcHRlciosIGludCBkZXZpY2VEUEksIGNvbnN0IFFTaXpl
JiBkZXZpY2VTaXplLCBjb25zdCBRU2l6ZSYgYXZhaWxhYmxlU2l6ZSk7CiAKLSAgICBzdGF0aWMg
UU1hcDxRU3RyaW5nLCBRV2ViSGlzdG9yeUl0ZW0+IGdldENoaWxkSGlzdG9yeUl0ZW1zKGNvbnN0
IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwotICAgIHN0YXRpYyBib29sIGlzVGFyZ2V0
SXRlbShjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKTsKLSAgICBzdGF0aWMgUVN0
cmluZyBoaXN0b3J5SXRlbVRhcmdldChjb25zdCBRV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVt
KTsKKyAgICBzdGF0aWMgUU1hcDxRU3RyaW5nLCBRV2ViSGlzdG9yeUl0ZW0+IGdldENoaWxkSGlz
dG9yeUl0ZW1zKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYpOworICAgIHN0YXRpYyBib29sIGlzVGFy
Z2V0SXRlbShjb25zdCBRV2ViSGlzdG9yeUl0ZW0mKTsKKyAgICBzdGF0aWMgUVN0cmluZyBoaXN0
b3J5SXRlbVRhcmdldChjb25zdCBRV2ViSGlzdG9yeUl0ZW0mKTsKIAotICAgIHN0YXRpYyBib29s
IHNob3VsZENsb3NlKFFXZWJGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBib29sIHNob3VsZENs
b3NlKFFXZWJGcmFtZUFkYXB0ZXIqKTsKIAogICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFkZFVzZXJTdHlsZVNoZWV0KFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBzb3Vy
Y2VDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldHMoUVdlYlBhZ2Uq
KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChRV2ViUGFnZUFkYXB0ZXIqLCBj
b25zdCBRU3RyaW5nJiBzb3VyY2VDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVVc2VyU3R5
bGVTaGVldHMoUVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgc3RhdGljIHZvaWQgc2ltdWxhdGVEZXNr
dG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGl0bGUpOwotICAgIHN0YXRpYyBR
U3RyaW5nIHZpZXdwb3J0QXNUZXh0KFFXZWJQYWdlKiwgaW50IGRldmljZURQSSwgY29uc3QgUVNp
emUmIGRldmljZVNpemUsIGNvbnN0IFFTaXplJiBhdmFpbGFibGVTaXplKTsKIAotICAgIHN0YXRp
YyB2b2lkIHNjYWxlUGFnZUJ5KFFXZWJGcmFtZSosIGZsb2F0IHNjYWxlLCBjb25zdCBRUG9pbnQm
IG9yaWdpbik7CisgICAgc3RhdGljIHZvaWQgc2NhbGVQYWdlQnkoUVdlYkZyYW1lQWRhcHRlcios
IGZsb2F0IHNjYWxlLCBjb25zdCBRUG9pbnQmIG9yaWdpbik7CiAKLSAgICBzdGF0aWMgUVN0cmlu
ZyByZXNwb25zZU1pbWVUeXBlKFFXZWJGcmFtZSopOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyT3Bl
bmVyKFFXZWJGcmFtZSopOworICAgIHN0YXRpYyBRU3RyaW5nIHJlc3BvbnNlTWltZVR5cGUoUVdl
YkZyYW1lQWRhcHRlciopOworICAgIHN0YXRpYyB2b2lkIGNsZWFyT3BlbmVyKFFXZWJGcmFtZUFk
YXB0ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBhZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcm
IG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pOwotICAgIHN0YXRpYyBRU3RyaW5n
TGlzdCBjb250ZXh0TWVudShRV2ViUGFnZSopOworICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBjb250
ZXh0TWVudShRV2ViUGFnZUFkYXB0ZXIqKTsKIAogICAgIHN0YXRpYyBkb3VibGUgZGVmYXVsdE1p
bmltdW1UaW1lckludGVydmFsKCk7IC8vIE5vdCByZWFsbHkgdGllZCB0byBXZWJWaWV3Ci0gICAg
c3RhdGljIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoUVdlYlBhZ2UqLCBkb3VibGUpOwor
ICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKFFXZWJQYWdlQWRhcHRlcios
IGRvdWJsZSk7CiAKLSAgICBzdGF0aWMgUVVybCBtZWRpYUNvbnRlbnRVcmxCeUVsZW1lbnRJZChR
V2ViRnJhbWUqLCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOwotICAgIHN0YXRpYyB2b2lkIHNl
dEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lKiwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVy
bCYgYmFzZVVybCwgY29uc3QgUVVybCYgZmFpbGluZ1VybCk7CisgICAgc3RhdGljIFFVcmwgbWVk
aWFDb250ZW50VXJsQnlFbGVtZW50SWQoUVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFTdHJpbmcm
IGVsZW1lbnRJZCk7CisgICAgc3RhdGljIHZvaWQgc2V0QWx0ZXJuYXRlSHRtbChRV2ViRnJhbWVB
ZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYgYmFzZVVybCwgY29uc3Qg
UVVybCYgZmFpbGluZ1VybCk7CiAKLSAgICBzdGF0aWMgUVN0cmluZyBsYXllclRyZWVBc1RleHQo
UVdlYkZyYW1lKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoUVdl
YkZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFt
ZUFkYXB0ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250
ZXh0UmVmKTsKLSAgICBzdGF0aWMgdm9pZCByZXNldEludGVybmFsc09iamVjdChRV2ViRnJhbWUq
KTsKKyAgICBzdGF0aWMgdm9pZCByZXNldEludGVybmFsc09iamVjdChRV2ViRnJhbWVBZGFwdGVy
Kik7CiAgICAgc3RhdGljIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmKTsK
IAotICAgIHN0YXRpYyB2b2lkIHNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKFFX
ZWJQYWdlKiwgYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRh
dGlvbkVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiwgYm9vbCk7CiAKLSAgICBzdGF0aWMgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKFFXZWJQYWdlKiwgYm9vbCBmbGFnKTsKLSAgICBzdGF0aWMgdm9pZCBn
b0JhY2soUVdlYlBhZ2UqKTsKKyAgICBzdGF0aWMgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFFXZWJQ
YWdlQWRhcHRlciosIGJvb2wgZmxhZyk7CisgICAgc3RhdGljIHZvaWQgZ29CYWNrKFFXZWJQYWdl
QWRhcHRlciopOwogCi0gICAgc3RhdGljIGJvb2wgdGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93
cyhRV2ViUGFnZSosIGNvbnN0IFFVcmwmLCBjb25zdCBRVXJsJiBmaXJzdFBhcnR5VXJsKTsKKyAg
ICBzdGF0aWMgYm9vbCB0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKFFXZWJQYWdlQWRhcHRl
ciosIGNvbnN0IFFVcmwmLCBjb25zdCBRVXJsJiBmaXJzdFBhcnR5VXJsKTsKIAogICAgIHN0YXRp
YyB2b2lkIGVuYWJsZU1vY2tTY3JvbGxiYXJzKCk7CiAKLSAgICBzdGF0aWMgUUltYWdlIHBhaW50
UGFnZXNXaXRoQm91bmRhcmllcyhRV2ViRnJhbWUqKTsKKyAgICBzdGF0aWMgUUltYWdlIHBhaW50
UGFnZXNXaXRoQm91bmRhcmllcyhRV2ViRnJhbWVBZGFwdGVyKik7CiAKLSAgICBzdGF0aWMgdm9p
ZCBzZXRUcmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWUqLCBib29sIGVuYWJsZSk7Ci0gICAgc3Rh
dGljIGJvb2wgdHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lKik7Ci0gICAgc3RhdGljIHZvaWQg
Z2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWUqLCBRVmVjdG9yPFFSZWN0PiYgcmVzdWx0
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUcmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWVBZGFwdGVy
KiwgYm9vbCBlbmFibGUpOworICAgIHN0YXRpYyBib29sIHRyYWNrUmVwYWludFJlY3RzKFFXZWJG
cmFtZUFkYXB0ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUcmFja2VkUmVwYWludFJlY3RzKFFX
ZWJGcmFtZUFkYXB0ZXIqLCBRVmVjdG9yPFFSZWN0PiYgcmVzdWx0KTsKIH07CiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNw
cAppbmRleCBlYjczYzllOWQ0NTUxNmMxYzk3N2I0YjNjYjdjMDk1Y2ZkNWVmNWNkLi40ZjM0NDFh
NWI1MWM5ZTZmYTY3OTc5Njg0YmNlNmE2ODQ1YzNmMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcApAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkVkaXRvckNsaWVudFF0LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlVuZG9TdGVwUXQuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDQsNiArNDMsNyBAQAog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAjaW5j
bHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCkBAIC01MSwxMSArNTEsMTAgQEAKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0
LmgiCiAjaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKICNpbmNsdWRlICJxZ3VpYXBw
bGljYXRpb24uaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlX3Au
aCIKIAogI2luY2x1ZGUgPFFDbGlwYm9hcmQ+Ci0jaW5jbHVkZSA8UVVuZG9TdGFjaz4KKyNpbmNs
dWRlIDxRS2V5RXZlbnQ+CisjaW5jbHVkZSA8UUtleVNlcXVlbmNlPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC04MCw4ICs3OSw4IEBAIHN0YXRpYyBR
U3RyaW5nIGR1bXBSYW5nZShXZWJDb3JlOjpSYW5nZSAqcmFuZ2UpCiAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBjb2RlOwogCiAgICAgUVN0cmluZyBzdHIgPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJyYW5nZSBmcm9tICUxIG9mICUyIHRvICUzIG9mICU0IikKLSAgICAgICAgICAgIC5hcmcocmFu
Z2UtPnN0YXJ0T2Zmc2V0KGNvZGUpKS5hcmcoZHVtcFBhdGgocmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KGNvZGUpKSkKLSAgICAgICAgICAgIC5hcmcocmFuZ2UtPmVuZE9mZnNldChjb2RlKSkuYXJnKGR1
bXBQYXRoKHJhbmdlLT5lbmRDb250YWluZXIoY29kZSkpKTsKKyAgICAgICAgLmFyZyhyYW5nZS0+
c3RhcnRPZmZzZXQoY29kZSkpLmFyZyhkdW1wUGF0aChyYW5nZS0+c3RhcnRDb250YWluZXIoY29k
ZSkpKQorICAgICAgICAuYXJnKHJhbmdlLT5lbmRPZmZzZXQoY29kZSkpLmFyZyhkdW1wUGF0aChy
YW5nZS0+ZW5kQ29udGFpbmVyKGNvZGUpKSk7CiAKICAgICByZXR1cm4gc3RyOwogfQpAQCAtMTA0
LDcgKzEwMyw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdl
KiByYW5nZSkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFj
ZShIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoUVdlYlBhZ2VQcml2YXRlOjpkcnRS
dW4pCisgICAgaWYgKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKQogICAgICAgICByZXR1cm4gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gIm5lZWRzRGVsZXRpb25VSSI7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpAQCAtMTQ4LDcgKzE0Nyw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6
OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJhbmdlKiByYW5nZSwgRWRp
dG9yCiAgICAgICAgIH07CiAKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRJbnNlcnRUZXh0OiVzIHJlcGxhY2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLAot
ICAgICAgICAgICAgICAgUVN0cmluZyhzdHJpbmcpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLCBkdW1w
UmFuZ2UocmFuZ2UpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0
aW9uXSk7CisgICAgICAgICAgICBRU3RyaW5nKHN0cmluZykudG9VdGY4KCkuY29uc3REYXRhKCks
IGR1bXBSYW5nZShyYW5nZSkudG9VdGY4KCkuY29uc3REYXRhKCksIGluc2VydGFjdGlvbnN0cmlu
Z1thY3Rpb25dKTsKICAgICB9CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQpAQCAtMTY2
LDE5ICsxNjUsMTggQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShSYW5nZSogY3VycmVudFJhbmdlLCBSYW5nZSogcHJvcG8KICAgICAgICAgfTsKIAogICAg
ICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6JXMgdG9ET01SYW5nZTolcyBhZmZpbml0eTolcyBzdGlsbFNlbGVjdGluZzolc1xuIiwKLSAg
ICAgICAgICAgICAgIGR1bXBSYW5nZShjdXJyZW50UmFuZ2UpLnRvVXRmOCgpLmNvbnN0RGF0YSgp
LAotICAgICAgICAgICAgICAgZHVtcFJhbmdlKHByb3Bvc2VkUmFuZ2UpLnRvVXRmOCgpLmNvbnN0
RGF0YSgpLAotICAgICAgICAgICAgICAgYWZmaW5pdHlzdHJpbmdbc2VsZWN0aW9uQWZmaW5pdHld
LCBib29sc3RyaW5nW3N0aWxsU2VsZWN0aW5nXSk7CisgICAgICAgICAgICBkdW1wUmFuZ2UoY3Vy
cmVudFJhbmdlKS50b1V0ZjgoKS5jb25zdERhdGEoKSwKKyAgICAgICAgICAgIGR1bXBSYW5nZShw
cm9wb3NlZFJhbmdlKS50b1V0ZjgoKS5jb25zdERhdGEoKSwKKyAgICAgICAgICAgIGFmZmluaXR5
c3RyaW5nW3NlbGVjdGlvbkFmZmluaXR5XSwgYm9vbHN0cmluZ1tzdGlsbFNlbGVjdGluZ10pOwog
ICAgIH0KICAgICByZXR1cm4gYWNjZXB0c0VkaXRpbmc7CiB9CiAKLWJvb2wgRWRpdG9yQ2xpZW50
UXQ6OnNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlJhbmdlKiByYW5n
ZSkKK2Jvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0eVNldCogc3R5bGUsIFdlYkNvcmU6OlJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoZHVt
cEVkaXRpbmdDYWxsYmFja3MpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hv
dWxkQXBwbHlTdHlsZTolcyB0b0VsZW1lbnRzSW5ET01SYW5nZTolc1xuIiwKLSAgICAgICAgICAg
ICAgIFFTdHJpbmcoc3R5bGUtPmFzVGV4dCgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgZHVtcFJh
bmdlKHJhbmdlKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgICAgICAgICBRU3RyaW5nKHN0
eWxlLT5hc1RleHQoKSkudG9VdGY4KCkuY29uc3REYXRhKCksIGR1bXBSYW5nZShyYW5nZSkudG9V
dGY4KCkuY29uc3REYXRhKCkpOwogICAgIHJldHVybiBhY2NlcHRzRWRpdGluZzsKIH0KIApAQCAt
MTk5LDkgKzE5Nyw4IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cygpCiB7CiAgICAgaWYgKGR1bXBFZGl0aW5nQ2FsbGJhY2tzKQogICAgICAgICBwcmludGYo
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlm
aWNhdGlvblxuIik7Ci0gICAgbV9wYWdlLT5kLT51cGRhdGVFZGl0b3JBY3Rpb25zKCk7CiAKLSAg
ICBlbWl0IG1fcGFnZS0+Y29udGVudHNDaGFuZ2VkKCk7CisgICAgZW1pdCBtX3BhZ2UtPnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cygpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKQEAgLTIyMCw4ICsyMTcsNyBAQCB2b2lk
IEVkaXRvckNsaWVudFF0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkK
ICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+c2V0U2VsZWN0aW9uTW9k
ZShvbGRTZWxlY3Rpb25Nb2RlKTsKICAgICB9CiAKLSAgICBtX3BhZ2UtPmQtPnVwZGF0ZUVkaXRv
ckFjdGlvbnMoKTsKLSAgICBlbWl0IG1fcGFnZS0+c2VsZWN0aW9uQ2hhbmdlZCgpOworICAgIG1f
cGFnZS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWUtPmVkaXRv
cigpLT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpKQogICAgICAgICBlbWl0IG1f
cGFnZS0+bWljcm9Gb2N1c0NoYW5nZWQoKTsKIH0KQEAgLTI1MCwxMCArMjQ2LDEwIEBAIGJvb2wg
RWRpdG9yQ2xpZW50UXQ6OnNlbGVjdFdvcmRCZWZvcmVNZW51RXZlbnQoKQogdm9pZCBFZGl0b3JD
bGllbnRRdDo6cmVnaXN0ZXJVbmRvU3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0
ZXA+IHN0ZXApCiB7CiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwotICAgIEZyYW1lKiBmcmFtZSA9
IG1fcGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChtX2luVW5kb1JlZG8gfHwgKGZyYW1lICYmICFm
cmFtZS0+ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpIC8qIEhBQ0shISBEb24ndCByZWNyZWF0
ZSB1bmRvcyAqLykpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3BhZ2UtPnVuZG9TdGFjaygpLT5w
dXNoKG5ldyBVbmRvU3RlcFF0KHN0ZXApKTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyVW5kb1N0ZXAo
c3RlcCk7CiAjZW5kaWYgLy8gUVRfTk9fVU5ET1NUQUNLCiB9CiAKQEAgLTI2NCw3ICsyNjAsNyBA
QCB2b2lkIEVkaXRvckNsaWVudFF0OjpyZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpVbmRvU3RlcD4pCiB2b2lkIEVkaXRvckNsaWVudFF0OjpjbGVhclVuZG9SZWRvT3Bl
cmF0aW9ucygpCiB7CiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwotICAgIHJldHVybiBtX3BhZ2Ut
PnVuZG9TdGFjaygpLT5jbGVhcigpOworICAgIHJldHVybiBtX3BhZ2UtPmNsZWFyVW5kb1N0YWNr
KCk7CiAjZW5kaWYKIH0KIApAQCAtMjgzLDcgKzI3OSw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6
OmNhblVuZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VORE9TVEFDSwogICAgIHJldHVybiBmYWxz
ZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5kb1N0YWNrKCktPmNhblVuZG8oKTsKKyAg
ICByZXR1cm4gbV9wYWdlLT5jYW5VbmRvKCk7CiAjZW5kaWYKIH0KIApAQCAtMjkyLDcgKzI4OCw3
IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmNhblJlZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VO
RE9TVEFDSwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5k
b1N0YWNrKCktPmNhblJlZG8oKTsKKyAgICByZXR1cm4gbV9wYWdlLT5jYW5SZWRvKCk7CiAjZW5k
aWYKIH0KIApAQCAtMzAwLDcgKzI5Niw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVuZG8oKQog
ewogI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBtX2luVW5kb1JlZG8gPSB0cnVlOwotICAg
IG1fcGFnZS0+dW5kb1N0YWNrKCktPnVuZG8oKTsKKyAgICBtX3BhZ2UtPnVuZG8oKTsKICAgICBt
X2luVW5kb1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpAQCAtMzA5LDcgKzMwNSw3IEBAIHZvaWQg
RWRpdG9yQ2xpZW50UXQ6OnJlZG8oKQogewogI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBt
X2luVW5kb1JlZG8gPSB0cnVlOwotICAgIG1fcGFnZS0+dW5kb1N0YWNrKCktPnJlZG8oKTsKKyAg
ICBtX3BhZ2UtPnJlZG8oKTsKICAgICBtX2luVW5kb1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpA
QCAtMzI0LDcgKzMyMCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZEluc2VydE5vZGUo
Tm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3RpCiAgICAgICAgIH07CiAK
ICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiVzIHJl
cGxhY2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLCBkdW1wUGF0aChub2RlKS50b1V0
ZjgoKS5jb25zdERhdGEoKSwKLSAgICAgICAgICAgICAgIGR1bXBSYW5nZShyYW5nZSkudG9VdGY4
KCkuY29uc3REYXRhKCksIGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKKyAgICAgICAgICAg
IGR1bXBSYW5nZShyYW5nZSkudG9VdGY4KCkuY29uc3REYXRhKCksIGluc2VydGFjdGlvbnN0cmlu
Z1thY3Rpb25dKTsKICAgICB9CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQpAQCAtMzM2
LDE4ICszMzIsMTggQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6cGFnZURlc3Ryb3llZCgpCiAKIGJv
b2wgRWRpdG9yQ2xpZW50UXQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCiB7Ci0gICAgcmV0
dXJuIG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkOworICAgIHJldHVybiBtX3Nt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xl
U21hcnRJbnNlcnREZWxldGUoKQogewotICAgIGJvb2wgY3VycmVudCA9IG1fcGFnZS0+ZC0+c21h
cnRJbnNlcnREZWxldGVFbmFibGVkOwotICAgIG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVF
bmFibGVkID0gIWN1cnJlbnQ7CisgICAgYm9vbCBjdXJyZW50ID0gbV9zbWFydEluc2VydERlbGV0
ZUVuYWJsZWQ7CisgICAgbV9zbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSAhY3VycmVudDsKIH0K
IAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVk
KCkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5kLT5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkOworICAgIHJldHVybiBtX3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiB9CiAK
IHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKQEAg
LTQxNiw3ICs0MTIsNyBAQCBjb25zdCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yS2V5RG93bkV2ZW50
KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2ZW50KQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEZyYW1lKiBmcmFt
ZSA9IG1fcGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNDQ0LDIwICs0NDAsMTkgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9h
cmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAgICAgfQogCiAjaWZuZGVmIFFUX05P
X1NIT1JUQ1VUCi0gICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gUVdlYlBhZ2VQ
cml2YXRlOjplZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQoKSk7Ci0gICAg
ICAgIGlmIChhY3Rpb24gIT0gUVdlYlBhZ2U6Ok5vV2ViQWN0aW9uICYmICFkb1NwYXRpYWxOYXZp
Z2F0aW9uKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjbWQgPSBRV2ViUGFnZVByaXZhdGU6
OmVkaXRvckNvbW1hbmRGb3JXZWJBY3Rpb25zKGFjdGlvbik7CisgICAgICAgIGNvbnN0IGNoYXIq
IGNtZCA9IG1fcGFnZS0+ZWRpdG9yQ29tbWFuZEZvcktleUV2ZW50KGtldmVudC0+cXRFdmVudCgp
KTsKKyAgICAgICAgaWYgKGNtZCAmJiAhZG9TcGF0aWFsTmF2aWdhdGlvbikgewogICAgICAgICAg
ICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0
byBkZWNpZGUgaG93IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2
aWEgRWRpdG9yIHNob3VsZCBiZSB0cmVhdGVkLAogICAgICAgICAgICAgLy8gc28gd2UgbGVhdmUg
aXQgdXBvbiBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBU
YWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0
ZWQKICAgICAgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVy
LCBvciBFbnRlcikuCi0gICAgICAgICAgICBpZiAoY21kICYmIGZyYW1lLT5lZGl0b3IoKS0+Y29t
bWFuZChjbWQpLmlzVGV4dEluc2VydGlvbigpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRv
cigpLT5jb21tYW5kKGNtZCkuaXNUZXh0SW5zZXJ0aW9uKCkKICAgICAgICAgICAgICAgICAmJiBr
ZXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlvbik7
CisgICAgICAgICAgICBtX3BhZ2UtPnRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0
RXZlbnQoKSk7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIAorICAgICAgICB9CiAjZW5kaWYgLy8gUVRf
Tk9fU0hPUlRDVVQKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIGNvbW1hbmROYW1lID0g
ZWRpdG9yQ29tbWFuZEZvcktleURvd25FdmVudChldmVudCk7CkBAIC01MDEsNyArNDk2LDcgQEAg
dm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBl
dmVudCkKICAgICB9CiAKICAgICAvLyBOb24gZWRpdGFibGUgY29udGVudC4KLSAgICBpZiAobV9w
YWdlLT5oYW5kbGUoKS0+cGFnZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKSkg
eworICAgIGlmIChtX3BhZ2UtPnBhZ2UtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVk
KCkpIHsKICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7
CiAgICAgICAgIGNhc2UgVktfTEVGVDoKICAgICAgICAgY2FzZSBWS19SSUdIVDoKQEAgLTUxMSwx
NSArNTA2LDEzIEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIGNhc2UgVktfRU5EOgogICAgICAgICAgICAgewog
I2lmbmRlZiBRVF9OT19TSE9SVENVVAotICAgICAgICAgICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rp
b24gYWN0aW9uID0gUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChrZXZl
bnQtPnF0RXZlbnQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGFjdGlvbiAhPSBRV2ViUGFn
ZTo6Tm9XZWJBY3Rpb24pOwotICAgICAgICAgICAgICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbihh
Y3Rpb24pOworICAgICAgICAgICAgICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbkZvcktleUV2ZW50
KGtldmVudC0+cXRFdmVudCgpKTsKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBWS19QUklPUjogLy8gUGFnZVVwCi0gICAgICAgIGNhc2UgVktfTkVYVDog
IC8vIFBhZ2VEb3duCisgICAgICAgIGNhc2UgVktfTkVYVDogLy8gUGFnZURvd24KICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgY29tbWFuZE5hbWUgPSBlZGl0b3JDb21tYW5k
Rm9yS2V5RG93bkV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWNvbW1hbmRO
YW1lLmlzRW1wdHkoKSk7CkBAIC01MzIsNyArNTI1LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6
aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIAogI2lmbmRlZiBRVF9O
T19TSE9SVENVVAogICAgIGlmIChrZXZlbnQtPnF0RXZlbnQoKSA9PSBRS2V5U2VxdWVuY2U6OkNv
cHkpIHsKLSAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpDb3B5KTsKKyAg
ICAgICAgbV9wYWdlLT50cmlnZ2VyQ29weUFjdGlvbigpOwogICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU0Myw4ICs1MzYsMTIg
QEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJk
RXZlbnQqKQogewogfQogCi1FZGl0b3JDbGllbnRRdDo6RWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2Uq
IHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSksIG1fZWRpdGluZyhmYWxzZSksIG1faW5VbmRvUmVk
byhmYWxzZSkKK0VkaXRvckNsaWVudFF0OjpFZGl0b3JDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIq
IHBhZ2VBZGFwdGVyKQorICAgIDogbV9wYWdlKHBhZ2VBZGFwdGVyKQorICAgICwgbV9lZGl0aW5n
KGZhbHNlKQorICAgICwgbV9pblVuZG9SZWRvKGZhbHNlKQorICAgICwgbV9zbWFydEluc2VydERl
bGV0ZUVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChmYWxzZSkKIHsKIH0KIApAQCAtNjA3LDEyICs2MDQsMTIgQEAgdm9pZCBFZGl0b3JDbGllbnRR
dDo6d2lsbFNldElucHV0TWV0aG9kU3RhdGUoKQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgYWN0aXZlKQogewotICAgIFFXZWJQYWdlQ2xpZW50KiB3ZWJQ
YWdlQ2xpZW50ID0gbV9wYWdlLT5kLT5jbGllbnQuZ2V0KCk7CisgICAgUVdlYlBhZ2VDbGllbnQq
IHdlYlBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNsaWVudC5kYXRhKCk7CiAgICAgaWYgKHdlYlBhZ2VD
bGllbnQpIHsKICAgICAgICAgUXQ6OklucHV0TWV0aG9kSGludHMgaGludHM7CiAKICAgICAgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gMDsKLSAgICAgICAgRnJhbWUqIGZyYW1l
ID0gbV9wYWdlLT5kLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1l
KCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmRv
Y3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpCiAgICAgICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjppbnB1dFRhZykpCiAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaApp
bmRleCA4NjNjNjdiNzE4N2RmZDY1MDNmNjBjYzZkOTc0NmVlMTA2ZWU0MjA2Li5jNDliZTRhNDAz
NzM2ZWYwYWM4MDYyYjMxYjkwZGUyMTg5NWQyMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCkBAIC0zNiwxMiArMzYsMTMgQEAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBjbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFXZWJQ
YWdlQWRhcHRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFZGl0b3JDbGllbnRR
dCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewogcHVibGljOgotICAgIEVkaXRvckNsaWVudFF0KFFX
ZWJQYWdlKiBwYWdlKTsKKyAgICBFZGl0b3JDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIqKTsKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwogICAgIHZpcnR1YWwgdm9pZCBm
cmFtZVdpbGxEZXRhY2hQYWdlKEZyYW1lKikgeyB9CkBAIC0xMDksMTQgKzExMCwxOSBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzRWRpdGluZygpIGNvbnN0OwogCisgICAgdm9pZCBzZXRTbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoYm9vbCBiKSB7IG1fc21hcnRJbnNlcnREZWxldGVFbmFibGVkID0g
YjsgfQorICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGIp
IHsgbV9zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkID0gYjsgfQorCiAgICAgc3RhdGlj
IGJvb2wgZHVtcEVkaXRpbmdDYWxsYmFja3M7CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRp
bmc7CiAKIHByaXZhdGU6CiAgICAgVGV4dENoZWNrZXJDbGllbnRRdCBtX3RleHRDaGVja2VyQ2xp
ZW50OwotICAgIFFXZWJQYWdlKiBtX3BhZ2U7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBtX3BhZ2U7
CiAgICAgYm9vbCBtX2VkaXRpbmc7CiAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRv
IHN0YWNrIHdvcmtzIGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCisgICAgYm9vbCBtX3Nt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKKyAgICBib29sIG1fc2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IDA3MzFkOTMxNThhMTZmOTcz
MGU4NDFlMjA4MTdhODgyMmI0ZTYxNDguLjcwNGM5OGE2Mjc3NzkyNzhiNjg4NzU3MDBiODE2MGQy
ZjgwNjZiMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCiAKKyNpbmNsdWRlICIu
Li9BcGkvcXdlYmhpc3RvcnkuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmhpc3RvcnlfcC5oIgor
I2luY2x1ZGUgIi4uL0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1ZGUgIi4uL0Fw
aS9xd2VicGx1Z2luZmFjdG9yeS5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgpAQCAtNTksNyArNjMsMTAgQEAKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlFOZXR3b3JrUmVwbHlI
YW5kbGVyLmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQ
YWdlQWRhcHRlci5oIgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUXRQ
bHVnaW5XaWRnZXRBZGFwdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgpA
QCAtNzAsMzMgKzc3LDI1IEBACiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2lu
Y2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdlYmhpc3RvcnlfcC5oIgotI2luY2x1
ZGUgInF3ZWJoaXN0b3J5aW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNs
dWRlICJxd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKLQogI2lu
Y2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPFFG
aWxlSW5mbz4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KLSNpbmNsdWRlIDxRR3JhcGhpY3NX
aWRnZXQ+CisjaW5jbHVkZSA8UU1vdXNlRXZlbnQ+CiAjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4K
ICNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogc3RhdGljIFFNYXA8dW5zaWduZWQgbG9uZywgUVN0cmluZz4gZHVtcEFzc2lnbmVkVXJsczsK
IAogLy8gQ29tcGFyZSB3aXRoIHRoZSBmaWxlICJXZWJLaXQvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tIi4KIHN0YXRpYyBRU3RyaW5nIGRydERlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KFdlYkNvcmU6OkZyYW1lKiB3ZWJDb3JlRnJhbWUpCiB7Ci0g
ICAgUVdlYkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdCh3ZWJDb3JlRnJhbWUp
OwotICAgIFFTdHJpbmcgbmFtZSA9IGZyYW1lLT5mcmFtZU5hbWUoKTsKKyAgICBRV2ViRnJhbWVB
ZGFwdGVyKiBmcmFtZSA9IFFXZWJGcmFtZUFkYXB0ZXI6OmtpdCh3ZWJDb3JlRnJhbWUpOworICAg
IFFTdHJpbmcgbmFtZSA9IHdlYkNvcmVGcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CiAKLSAg
ICBib29sIGlzTWFpbkZyYW1lID0gZnJhbWUgPT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCk7
CisgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lID09IGZyYW1lLT5wYWdlQWRhcHRlci0+bWFp
bkZyYW1lQWRhcHRlcigpOwogICAgIGlmIChpc01haW5GcmFtZSkgewogICAgICAgICBpZiAoIW5h
bWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZyb21MYXRpbjEoIm1h
aW4gZnJhbWUgXCIlMVwiIikuYXJnKG5hbWUpOwpAQCAtMjA0LDcgKzIwMyw2IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBuYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKE5hdmlnYXRpb25UeXBlIHR5cGUpCiAK
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OkZyYW1lTG9hZGVyQ2xpZW50UXQoKQogICAgIDogbV9mcmFt
ZSgwKQotICAgICwgbV93ZWJGcmFtZSgwKQogICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBt
X2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKGZhbHNlKQogICAgICwgbV9pc09yaWdpbmF0aW5nTG9h
ZChmYWxzZSkKQEAgLTIxNiwyNCArMjE0LDI0IEBAIEZyYW1lTG9hZGVyQ2xpZW50UXQ6On5GcmFt
ZUxvYWRlckNsaWVudFF0KCkKIHsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRG
cmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBGcmFtZSogZnJhbWUpCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OnNldEZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBGcmFtZSogZnJh
bWUpCiB7CiAgICAgbV93ZWJGcmFtZSA9IHdlYkZyYW1lOwogICAgIG1fZnJhbWUgPSBmcmFtZTsK
IAotICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJGcmFtZS0+cGFnZSgpKSB7CisgICAgaWYg
KCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5wYWdlQWRhcHRlcikgewogICAgICAgICBxV2Fy
bmluZygiRnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0RnJhbWUgZnJhbWUgd2l0aG91dCBQYWdlISIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9h
ZFByb2dyZXNzKGludCkpLAotICAgICAgICAgICAgbV93ZWJGcmFtZS0+cGFnZSgpLCBTSUdOQUwo
bG9hZFByb2dyZXNzKGludCkpKTsKKyAgICAgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmhh
bmRsZSgpLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkpKTsKIAogICAgIGNvbm5lY3QodGhpcywg
U0lHTkFMKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29ya1JlcGx5KikpLAotICAgICAgICAgICAg
bV93ZWJGcmFtZS0+cGFnZSgpLCBTSUdOQUwodW5zdXBwb3J0ZWRDb250ZW50KFFOZXR3b3JrUmVw
bHkqKSkpOworICAgICAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+aGFuZGxlKCksIFNJR05B
TCh1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSopKSk7CiAKICAgICBjb25uZWN0KHRo
aXMsIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLAotICAgICAgICAgICAgbV93ZWJGcmFt
ZSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSkpOworICAgICAgICBtX3dlYkZyYW1lLT5o
YW5kbGUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSkpOwogfQogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNhbGxQb2xpY3lGdW5jdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1
bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKQpAQCAtMjU5LDEzICsyNTcsMTIgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUo
Q2FjaGVkRnJhbWUqKQogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21t
aXR0ZWRGb3JOZXdQYWdlKCkKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7Ci0gICAgQVNTRVJUKG1f
d2ViRnJhbWUpOwogCi0gICAgUUJydXNoIGJydXNoID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wYWxl
dHRlKCkuYnJ1c2goUVBhbGV0dGU6OkJhc2UpOworICAgIFFPYmplY3QqIHFXZWJQYWdlID0gbV93
ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmhhbmRsZSgpOworICAgIFFCcnVzaCBicnVzaCA9IHFXZWJQ
YWdlLT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQYWxldHRlPigpLmJydXNoKFFQYWxldHRl
OjpCYXNlKTsKICAgICBRQ29sb3IgYmFja2dyb3VuZENvbG9yID0gYnJ1c2guc3R5bGUoKSA9PSBR
dDo6U29saWRQYXR0ZXJuID8gYnJ1c2guY29sb3IoKSA6IFFDb2xvcigpOwogCi0gICAgUVdlYlBh
Z2UqIHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgY29uc3QgUVNpemUgcHJlZmVycmVk
TGF5b3V0U2l6ZSA9IHBhZ2UtPnByZWZlcnJlZENvbnRlbnRzU2l6ZSgpOworICAgIGNvbnN0IFFT
aXplIHByZWZlcnJlZExheW91dFNpemUgPSBxV2ViUGFnZS0+cHJvcGVydHkoInByZWZlcnJlZENv
bnRlbnRzU2l6ZSIpLnRvU2l6ZSgpOwogCiAgICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsYmFyID0g
KFNjcm9sbGJhck1vZGUpIG1fd2ViRnJhbWUtPnNjcm9sbEJhclBvbGljeShRdDo6SG9yaXpvbnRh
bCk7CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyID0gKFNjcm9sbGJhck1vZGUpIG1fd2Vi
RnJhbWUtPnNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwpOwpAQCAtMjc1LDE3ICsyNzIsMTgg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQ
YWdlKCkKICAgICAvLyBUaGUgSGlzdG9yeUNvbnRyb2xsZXIgd2lsbCB1cGRhdGUgdGhlIHNjcm9s
bCBwb3NpdGlvbiBsYXRlciBpZiBuZWVkZWQuCiAgICAgSW50UmVjdCBjdXJyZW50VmlzaWJsZUNv
bnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpID8gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBt
X2ZyYW1lLT52aWV3KCktPmZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKSA6IEludFJl
Y3QoKTsKIAotICAgIG1fZnJhbWUtPmNyZWF0ZVZpZXcobV93ZWJGcmFtZS0+cGFnZSgpLT52aWV3
cG9ydFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciwgIWJh
Y2tncm91bmRDb2xvci5hbHBoYSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVk
TGF5b3V0U2l6ZS5pc1ZhbGlkKCkgPyBJbnRTaXplKHByZWZlcnJlZExheW91dFNpemUpIDogSW50
U2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpc2libGVDb250ZW50UmVj
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZExheW91dFNpemUuaXNWYWxpZCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgaFNjcm9sbGJhciwgaExvY2ssCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2U2Nyb2xsYmFyLCB2TG9jayk7CisgICAgbV9mcmFtZS0+Y3JlYXRlVmll
dyhxV2ViUGFnZS0+cHJvcGVydHkoInZpZXdwb3J0U2l6ZSIpLnRvU2l6ZSgpLAorICAgICAgICBi
YWNrZ3JvdW5kQ29sb3IsICFiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSwKKyAgICAgICAgcHJlZmVy
cmVkTGF5b3V0U2l6ZS5pc1ZhbGlkKCkgPyBJbnRTaXplKHByZWZlcnJlZExheW91dFNpemUpIDog
SW50U2l6ZSgpLAorICAgICAgICBjdXJyZW50VmlzaWJsZUNvbnRlbnRSZWN0LAorICAgICAgICBw
cmVmZXJyZWRMYXlvdXRTaXplLmlzVmFsaWQoKSwKKyAgICAgICAgaFNjcm9sbGJhciwgaExvY2ss
CisgICAgICAgIHZTY3JvbGxiYXIsIHZMb2NrKTsKIAogICAgIGJvb2wgaXNNYWluRnJhbWUgPSBt
X2ZyYW1lID09IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKGlzTWFpbkZy
YW1lICYmIHBhZ2UtPmQtPmNsaWVudCkgewotICAgICAgICBib29sIHJlc2l6ZXNUb0NvbnRlbnRz
ID0gcGFnZS0+ZC0+Y2xpZW50LT52aWV3UmVzaXplc1RvQ29udGVudHNFbmFibGVkKCk7CisgICAg
aWYgKGlzTWFpbkZyYW1lICYmbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNsaWVudCkgeworICAg
ICAgICBib29sIHJlc2l6ZXNUb0NvbnRlbnRzID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNs
aWVudC0+dmlld1Jlc2l6ZXNUb0NvbnRlbnRzRW5hYmxlZCgpOworCiAgICAgICAgIG1fZnJhbWUt
PnZpZXcoKS0+c2V0UGFpbnRzRW50aXJlQ29udGVudHMocmVzaXplc1RvQ29udGVudHMpOwogICAg
ICAgICBtX2ZyYW1lLT52aWV3KCktPnNldERlbGVnYXRlc1Njcm9sbGluZyhyZXNpemVzVG9Db250
ZW50cyk7CiAgICAgfQpAQCAtMzkyLDggKzM5MCw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRR
dDo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKQogICAgIGlmICghbV93ZWJG
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJGcmFtZS0+ZC0+ZW1pdFVybENoYW5n
ZWQoKTsKLSAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25z
KCk7CisgICAgbV93ZWJGcmFtZS0+ZW1pdFVybENoYW5nZWQoKTsKKyAgICBtX3dlYkZyYW1lLT5w
YWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKIH0KIAogCkBAIC00NDAsNyAr
NDM4LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkKCkKICAgICAgICAgcmV0dXJuOwogICAgIGVtaXRMb2FkU3RhcnRlZCgpOwogICAg
IHBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpOwotICAgIGVtaXQgbV93
ZWJGcmFtZS0+cHJvdmlzaW9uYWxMb2FkKCk7CisgICAgbV93ZWJGcmFtZS0+ZGlkU3RhcnRQcm92
aXNpb25hbExvYWQoKTsKIH0KIAogCkBAIC00NzgsOCArNDc2LDggQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFF0OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQogICAgIGlmIChtX2ZyYW1lLT50cmVl
KCktPnBhcmVudCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dl
YkZyYW1lLT5kLT5lbWl0VXJsQ2hhbmdlZCgpOwotICAgIG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+
dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKKyAgICBtX3dlYkZyYW1lLT5lbWl0VXJsQ2hhbmdl
ZCgpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9u
cygpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGFzc3VtZSBmaXJzdCB0aGUgZnJhbWUgaGFzIG5vIHRp
dGxlLiBJZiBpdCBoYXMsIHRoZW4gdGhlIGFib3ZlIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKCkK
ICAgICAvLyB3aWxsIGJlIGNhbGxlZCB2ZXJ5IHNvb24gd2l0aCB0aGUgY29ycmVjdCB0aXRsZS4K
QEAgLTQ5MCw3ICs0ODgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlk
Q29tbWl0TG9hZCgpCiAgICAgaWYgKCFpc01haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCk7Cisg
ICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1pdFZpZXdwb3J0Q2hhbmdlUmVxdWVz
dGVkKCk7CiB9CiAKIApAQCAtNDk5LDcgKzQ5Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRR
dDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogICAgIGlmIChkdW1wRnJhbWVMb2Fk
ZXJDYWxsYmFja3MpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JGcmFtZVxuIiwgcVByaW50YWJsZShkcnREZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChtX2ZyYW1lKSkpOwogCi0gICAgaWYgKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuKSB7CisgICAg
aWYgKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKSB7CiAgICAgICAgIGludCB1bmxvYWRFdmVudENv
dW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnBlbmRpbmdVbmxvYWRFdmVu
dExpc3RlbmVycygpOwogICAgICAgICBpZiAodW5sb2FkRXZlbnRDb3VudCkKICAgICAgICAgICAg
IHByaW50ZigiJXMgLSBoYXMgJXUgb251bmxvYWQgaGFuZGxlcihzKVxuIiwgcVByaW50YWJsZShk
cnREZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChtX2ZyYW1lKSksIHVubG9hZEV2ZW50
Q291bnQpOwpAQCAtNTA4LDcgKzUwNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBh
cmVudCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYkZyYW1l
LT5wYWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+
cGFnZUFkYXB0ZXItPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiB9CiAKIApAQCAtNTIwLDcg
KzUxOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2Fk
KCkKICAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViRnJh
bWUtPnBhZ2UoKS0+ZC0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKKyAgICBtX3dlYkZyYW1l
LT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKICAgICBlbWl0TG9hZEZp
bmlzaGVkKHRydWUpOwogfQogCkBAIC01MzAsNyArNTI4LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtaWxlc3RvbmVzICYgRGlkRmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0KQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmluaXRpYWxMYXlvdXRDb21w
bGV0ZWQoKTsKKyAgICAgICAgbV93ZWJGcmFtZS0+ZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQo
KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaFNob3coKQpAQCAtNTQ1
LDggKzU0Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsUG9saWN5Q2hlY2so
KQogfQogCiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9y
bShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBzdXJlbHkgdG9vIHNpbXBsZS4KQEAgLTU2MCw3
ICs1NTcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnBvc3RQcm9ncmVzc1N0YXJ0ZWRO
b3RpZmljYXRpb24oKQogICAgICAgICBtX2lzT3JpZ2luYXRpbmdMb2FkID0gdHJ1ZTsKICAgICBp
ZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSB8fCAhbV93ZWJGcmFtZSkKICAgICAgICAgcmV0
dXJuOwotICAgIG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMo
KTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMo
KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNo
YW5nZWROb3RpZmljYXRpb24oKQpAQCAtNTc3LDE0ICs1NzQsMTEgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiAgICAgLy8gU2Vu
ZCBhIG1vdXNlbW92ZSBldmVudCB0bzoKICAgICAvLyAoMSkgdXBkYXRlIHRoZSBjdXJzb3IgdG8g
Y2hhbmdlIGFjY29yZGluZyB0byB3aGF0ZXZlciBpcyB1bmRlcm5lYXRoIHRoZSBtb3VzZSBjdXJz
b3IgcmlnaHQgbm93OwogICAgIC8vICgyKSBkaXNwbGF5IHRoZSB0b29sIHRpcCBpZiB0aGUgbW91
c2UgaG92ZXJzIGEgbm9kZSB3aGljaCBoYXMgYSB0b29sIHRpcC4KLSAgICBpZiAobV9mcmFtZSAm
JiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKSAmJiBtX3dlYkZyYW1lLT5wYWdlKCkpIHsKLSAgICAg
ICAgUVdpZGdldCogdmlldyA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+dmlldygpOwotICAgICAgICBp
ZiAodmlldyAmJiB2aWV3LT5oYXNGb2N1cygpKSB7Ci0gICAgICAgICAgICBRUG9pbnQgbG9jYWxQ
b3MgPSB2aWV3LT5tYXBGcm9tR2xvYmFsKFFDdXJzb3I6OnBvcygpKTsKLSAgICAgICAgICAgIGlm
ICh2aWV3LT5yZWN0KCkuY29udGFpbnMobG9jYWxQb3MpKSB7Ci0gICAgICAgICAgICAgICAgUU1v
dXNlRXZlbnQgZXZlbnQoUUV2ZW50OjpNb3VzZU1vdmUsIGxvY2FsUG9zLCBRdDo6Tm9CdXR0b24s
IFF0OjpOb0J1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOwotICAgICAgICAgICAgICAgIG1fZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGNvbnZlcnRNb3VzZUV2ZW50KCZldmVudCwgMCkp
OwotICAgICAgICAgICAgfQorICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmV2ZW50SGFuZGxl
cigpICYmIG1fd2ViRnJhbWUpIHsKKyAgICAgICAgUVBvaW50IGxvY2FsUG9zOworICAgICAgICBp
ZiAobV93ZWJGcmFtZS0+aGFuZGxlUHJvZ3Jlc3NGaW5pc2hlZCgmbG9jYWxQb3MpKSB7CisgICAg
ICAgICAgICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlTW92ZSwgbG9jYWxQb3MsIFF0
OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7CisgICAgICAgICAgICBt
X2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChjb252ZXJ0TW91c2VFdmVudCgmZXZl
bnQsIDApKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTY1NSw3ICs2NDksNyBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZENvbXBsZXRlZCgpCiAgICAgLy8gTm90ZSB0aGF0
IHRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KICAgICBpZiAoIW1fd2ViRnJhbWUp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQtPnVwZGF0ZU5hdmln
YXRpb25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPnVwZGF0ZU5hdmln
YXRpb25BY3Rpb25zKCk7CiB9CiAKIApAQCAtNjYzLDcgKzY1Nyw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRRdDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiB7CiAgICAgaWYgKCFtX3dlYkZyYW1lKQog
ICAgICAgICByZXR1cm47Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnJlc3RvcmVGcmFt
ZVN0YXRlUmVxdWVzdGVkKG1fd2ViRnJhbWUpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVy
LT5lbWl0UmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQobV93ZWJGcmFtZSk7CiB9CiAKIApAQCAt
NzAwLDIxICs2OTQsMjMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRUaXRsZShjb25z
dCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwgY29uc3QgS1VSTCYKIAogU3RyaW5nIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYgKG1f
d2ViRnJhbWUpIHsKLSAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50
Rm9yVXJsKHVybCkucmVtb3ZlKFFMYXRpbjFDaGFyKCdcbicpKS5yZW1vdmUoUUxhdGluMUNoYXIo
J1xyJykpOwotICAgIH0KKyAgICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fd2Vi
RnJhbWUtPnBhZ2VBZGFwdGVyLT51c2VyQWdlbnRGb3JVcmwodXJsKS5yZW1vdmUoUUxhdGluMUNo
YXIoJ1xuJykpLnJlbW92ZShRTGF0aW4xQ2hhcignXHInKSk7CiAgICAgcmV0dXJuIFN0cmluZygp
OwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24o
KQogewogICAgIGlmIChtX3dlYkZyYW1lKQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmljb25D
aGFuZ2VkKCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmVtaXRJY29uQ2hhbmdlZCgpOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKIHsKLSAgICBk
ZWxldGUgbV93ZWJGcmFtZTsKKyAgICAvLyBEZWxldGUgUVdlYkZyYW1lIChoYW5kbGUoKSksIHdo
aWNoIG93bnMgUVdlYkZyYW1lUHJpdmF0ZSwgd2hpY2gKKyAgICAvLyBfaXNfIGEgUVdlYkZyYW1l
QWRhcHRlci4KKyAgICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgZGVsZXRlIG1fd2ViRnJhbWUt
PmhhbmRsZSgpOwogICAgIG1fZnJhbWUgPSAwOwogICAgIG1fd2ViRnJhbWUgPSAwOwogCkBAIC03
MzIsNyArNzI4LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHcKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1fd2ViRnJhbWUpCi0gICAgICAgIG1fd2ViRnJhbWUtPmQtPmRpZENsZWFyV2lu
ZG93T2JqZWN0KCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmRpZENsZWFyV2luZG93T2JqZWN0KCk7
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxl
KCkKQEAgLTc0NCw3ICs3NDAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpZFBlcmZv
cm1GaXJzdE5hdmlnYXRpb24oKSBjb25zdAogewogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBh
cmVudCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgbV93ZWJGcmFtZS0+
cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2ViRnJhbWUtPnBh
Z2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIHNob3VsZFJlZ2lz
dGVyKQpAQCAtNzYwLDggKzc1Niw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6cmVnaXN0
ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6Om9uSWNvbkxvYWRlZEZvclBhZ2VVUkwoY29uc3QgUVN0cmluZyYgdXJsKQog
ewogI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCi0gICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJG
cmFtZS0+dXJsKCkgPT0gdXJsKQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmljb25DaGFuZ2Vk
KCk7CisgICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+dXJsID09IHVybCkKKyAgICAg
ICAgbV93ZWJGcmFtZS0+ZW1pdEljb25DaGFuZ2VkKCk7CiAjZW5kaWYKIH0KIApAQCAtNzk5LDE2
ICs3OTUsMTYgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp1cGRhdGVHbG9iYWxIaXN0b3J5
UmVkaXJlY3RMaW5rcygpCiAgICAgaWYgKCFsb2FkZXItPmNsaWVudFJlZGlyZWN0U291cmNlRm9y
SGlzdG9yeSgpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChkdW1wSGlzdG9yeUNhbGxiYWNrcykg
ewogICAgICAgICAgICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVj
dCBmcm9tIFwiJXNcIiB0byBcIiVzXCIuXG4iLAotICAgICAgICAgICAgICAgICAgcVByaW50YWJs
ZShRU3RyaW5nKGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkpKSwKLSAg
ICAgICAgICAgICAgICAgIHFQcmludGFibGUoUVN0cmluZyhsb2FkZXItPmNsaWVudFJlZGlyZWN0
RGVzdGluYXRpb25Gb3JIaXN0b3J5KCkpKSk7CisgICAgICAgICAgICAgICAgcVByaW50YWJsZShR
U3RyaW5nKGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkpKSwKKyAgICAg
ICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcobG9hZGVyLT5jbGllbnRSZWRpcmVjdERlc3Rp
bmF0aW9uRm9ySGlzdG9yeSgpKSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFsb2Fk
ZXItPnNlcnZlclJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLmlzTnVsbCgpKSB7CiAgICAgICAg
IGlmIChkdW1wSGlzdG9yeUNhbGxiYWNrcykgewogICAgICAgICAgICAgcHJpbnRmKCJXZWJWaWV3
IHBlcmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCBmcm9tIFwiJXNcIiB0byBcIiVzXCIuXG4iLAot
ICAgICAgICAgICAgICAgICAgcVByaW50YWJsZShRU3RyaW5nKGxvYWRlci0+c2VydmVyUmVkaXJl
Y3RTb3VyY2VGb3JIaXN0b3J5KCkpKSwKLSAgICAgICAgICAgICAgICAgIHFQcmludGFibGUoUVN0
cmluZyhsb2FkZXItPnNlcnZlclJlZGlyZWN0RGVzdGluYXRpb25Gb3JIaXN0b3J5KCkpKSk7Cisg
ICAgICAgICAgICAgICAgcVByaW50YWJsZShRU3RyaW5nKGxvYWRlci0+c2VydmVyUmVkaXJlY3RT
b3VyY2VGb3JIaXN0b3J5KCkpKSwKKyAgICAgICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmco
bG9hZGVyLT5zZXJ2ZXJSZWRpcmVjdERlc3RpbmF0aW9uRm9ySGlzdG9yeSgpKSkpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtODUwLDcgKzg0Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRR
dDo6ZGlkRGV0ZWN0WFNTKGNvbnN0IEtVUkwmLCBib29sKQogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpzYXZlVmlld1N0YXRlVG9JdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQogewog
ICAgIFFXZWJIaXN0b3J5SXRlbSBoaXN0b3J5SXRlbShuZXcgUVdlYkhpc3RvcnlJdGVtUHJpdmF0
ZShpdGVtKSk7Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnNhdmVGcmFtZVN0YXRlUmVx
dWVzdGVkKG1fd2ViRnJhbWUsICZoaXN0b3J5SXRlbSk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFk
YXB0ZXItPmVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChtX3dlYkZyYW1lLCAmaGlzdG9yeUl0
ZW0pOwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbkNhY2hlUGFnZSgpIGNvbnN0
CkBAIC04OTYsNyArODkyLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpjb21taXR0ZWRM
b2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGMKIFdlYkNvcmU6OlJl
c291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIFJlc291cmNlRXJyb3IgZXJy
b3IgPSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5OjpPcGVyYXRpb25D
YW5jZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAotICAgICAgICAgICAgUUNvcmVB
cHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiUmVxdWVzdCBjYW5jZWxsZWQiLCAw
KSk7CisgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJl
cXVlc3QgY2FuY2VsbGVkIiwgMCkpOwogICAgIGVycm9yLnNldElzQ2FuY2VsbGF0aW9uKHRydWUp
OwogICAgIHJldHVybiBlcnJvcjsKIH0KQEAgLTkxNiwzOCArOTEyLDM4IEBAIGVudW0gewogV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0OjpibG9ja2VkRXJyb3IoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKCJXZWJLaXRFcnJvckRvbWFpbiIsIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJp
Y3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksCi0gICAgICAgICAgICBRQ29yZUFwcGxp
Y2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJSZXF1ZXN0IGJsb2NrZWQiLCAwKSk7Cisg
ICAgICAgIFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJlcXVlc3Qg
YmxvY2tlZCIsIDApKTsKIH0KIAogCiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIldlYktpdEVycm9yRG9t
YWluIiwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAot
ICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiQ2Fu
bm90IHNob3cgVVJMIiwgMCkpOworICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUo
IlFXZWJGcmFtZSIsICJDYW5ub3Qgc2hvdyBVUkwiLCAwKSk7CiB9CiAKIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRRdDo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VF
cnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0
dXJuIFJlc291cmNlRXJyb3IoIldlYktpdEVycm9yRG9tYWluIiwgV2ViS2l0RXJyb3JGcmFtZUxv
YWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAotICAg
ICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiRnJhbWUg
bG9hZCBpbnRlcnJ1cHRlZCBieSBwb2xpY3kgY2hhbmdlIiwgMCkpOworICAgICAgICBRQ29yZUFw
cGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJGcmFtZSBsb2FkIGludGVycnVwdGVk
IGJ5IHBvbGljeSBjaGFuZ2UiLCAwKSk7CiB9CiAKIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgRnJh
bWVMb2FkZXJDbGllbnRRdDo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
IldlYktpdEVycm9yRG9tYWluIiwgV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUsIHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpLAotICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNs
YXRlKCJRV2ViRnJhbWUiLCAiQ2Fubm90IHNob3cgbWltZXR5cGUiLCAwKSk7CisgICAgICAgIFFD
b3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIkNhbm5vdCBzaG93IG1pbWV0
eXBlIiwgMCkpOwogfQogCiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKICAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiUXROZXR3b3JrIiwgUU5l
dHdvcmtSZXBseTo6Q29udGVudE5vdEZvdW5kRXJyb3IsIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LAotICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAi
RmlsZSBkb2VzIG5vdCBleGlzdCIsIDApKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJh
bnNsYXRlKCJRV2ViRnJhbWUiLCAiRmlsZSBkb2VzIG5vdCBleGlzdCIsIDApKTsKIH0KIAogV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0OjpwbHVnaW5XaWxsSGFuZGxl
TG9hZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewog
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJXZWJLaXQiLCBXZWJLaXRFcnJvclBsdWdpbldpbGxI
YW5kbGVMb2FkLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJMb2FkaW5nIGlz
IGhhbmRsZWQgYnkgdGhlIG1lZGlhIGVuZ2luZSIsIDApKTsKKyAgICAgICAgUUNvcmVBcHBsaWNh
dGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiTG9hZGluZyBpcyBoYW5kbGVkIGJ5IHRoZSBt
ZWRpYSBlbmdpbmUiLCAwKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6c2hvdWxk
RmFsbEJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC05OTEsOCAr
OTg3LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpkb3dubG9hZChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBXZWJDb3IKICAgICBRTmV0d29ya1JlcGx5SGFuZGxl
ciogaGFuZGxlciA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2I7CiAgICAgUU5ldHdvcmtS
ZXBseSogcmVwbHkgPSBoYW5kbGVyLT5yZWxlYXNlKCk7CiAgICAgaWYgKHJlcGx5KSB7Ci0gICAg
ICAgIFFXZWJQYWdlKiBwYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwotICAgICAgICBpZiAocGFn
ZS0+Zm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudCgpKQorICAgICAgICBpZiAobV93ZWJGcmFtZS0+
cGFnZUFkYXB0ZXItPmZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQpCiAgICAgICAgICAgICBlbWl0
IHVuc3VwcG9ydGVkQ29udGVudChyZXBseSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl
cGx5LT5hYm9ydCgpOwpAQCAtMTAyNCw5ICsxMDE5LDkgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVu
c2kKIHsKICAgICBpZiAoZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICAgICAgcHJpbnRm
KCIlcyAtIHdpbGxTZW5kUmVxdWVzdCAlcyByZWRpcmVjdFJlc3BvbnNlICVzXG4iLAotICAgICAg
ICAgICAgICAgcVByaW50YWJsZShkdW1wQXNzaWduZWRVcmxzW2lkZW50aWZpZXJdKSwKLSAgICAg
ICAgICAgICAgIHFQcmludGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
bmV3UmVxdWVzdCkpLAotICAgICAgICAgICAgICAgKHJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkp
ID8gIihudWxsKSIgOiBxUHJpbnRhYmxlKGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHJlZGlyZWN0UmVzcG9uc2UpKSk7CisgICAgICAgICAgICBxUHJpbnRhYmxlKGR1bXBBc3Np
Z25lZFVybHNbaWRlbnRpZmllcl0pLAorICAgICAgICAgICAgcVByaW50YWJsZShkcnREZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChuZXdSZXF1ZXN0KSksCisgICAgICAgICAgICAocmVk
aXJlY3RSZXNwb25zZS5pc051bGwoKSkgPyAiKG51bGwpIiA6IHFQcmludGFibGUoZHJ0RGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVkaXJlY3RSZXNwb25zZSkpKTsKIAogICAgIGlm
IChzZW5kUmVxdWVzdFJldHVybnNOdWxsKSB7CiAgICAgICAgIGJsb2NrUmVxdWVzdChuZXdSZXF1
ZXN0KTsKQEAgLTEwNDMsMTEgKzEwMzgsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpk
aXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2kKICAg
ICBRU3RyaW5nIGhvc3QgPSB1cmwuaG9zdCgpOwogICAgIFFTdHJpbmcgdXJsU2NoZW1lID0gdXJs
LnNjaGVtZSgpLnRvTG93ZXIoKTsKIAotICAgIGlmIChRV2ViUGFnZVByaXZhdGU6OmRydFJ1bgor
ICAgIGlmIChRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1bgogICAgICAgICAmJiAhaG9zdC5pc0VtcHR5
KCkKICAgICAgICAgJiYgKHVybFNjaGVtZSA9PSBRTGF0aW4xU3RyaW5nKCJodHRwIikgfHwgdXJs
U2NoZW1lID09IFFMYXRpbjFTdHJpbmcoImh0dHBzIikpKSB7CiAKLSAgICAgICAgUVVybCB0ZXN0
VVJMID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+cmVxdWVzdGVkVXJsKCk7Cisg
ICAgICAgIFFVcmwgdGVzdFVSTCA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5tYWluRnJhbWVB
ZGFwdGVyKCktPmZyYW1lTG9hZGVyQ2xpZW50LT5sYXN0UmVxdWVzdGVkVXJsKCk7CiAgICAgICAg
IFFTdHJpbmcgdGVzdEhvc3QgPSB0ZXN0VVJMLmhvc3QoKTsKICAgICAgICAgUVN0cmluZyB0ZXN0
VVJMU2NoZW1lID0gdGVzdFVSTC5zY2hlbWUoKS50b0xvd2VyKCk7CiAKQEAgLTEwNjEsOSArMTA1
Niw5IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3Qo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpCiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzZW5kUmVxdWVzdENsZWFySGVhZGVycy5zaXplKCk7ICsraSkKLSAgICAgICAgICBu
ZXdSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChzZW5kUmVxdWVzdENsZWFySGVhZGVycy5hdChp
KS50b0xvY2FsOEJpdCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKCkpOworICAgICAgICBuZXdSZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChzZW5kUmVxdWVzdENsZWFySGVhZGVycy5hdChpKS50b0xv
Y2FsOEJpdCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKCkpOwogCi0gICAgaWYgKFFXZWJQYWdlUHJp
dmF0ZTo6ZHJ0UnVuKSB7CisgICAgaWYgKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKSB7CiAgICAg
ICAgIFFNYXA8UVN0cmluZywgUVN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gVVJMc1RvUmVk
aXJlY3QuY29uc3RGaW5kKHVybC50b1N0cmluZygpKTsKICAgICAgICAgaWYgKGl0ICE9IFVSTHNU
b1JlZGlyZWN0LmNvbnN0RW5kKCkpCiAgICAgICAgICAgICBuZXdSZXF1ZXN0LnNldFVSTChRVXJs
KGl0LnZhbHVlKCkpKTsKQEAgLTEwOTQsMTcgKzEwODksMTcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpEb2N1bWVudExvYWRl
ciosIHUKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgaWYgKGR1bXBXaWxsQ2FjaGVS
ZXNwb25zZUNhbGxiYWNrcykKICAgICAgICAgcHJpbnRmKCIlcyAtIHdpbGxDYWNoZVJlc3BvbnNl
OiBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgICBxUHJpbnRhYmxlKGR1bXBBc3NpZ25lZFVybHNb
aWRlbnRpZmllcl0pKTsKKyAgICAgICAgICAgIHFQcmludGFibGUoZHVtcEFzc2lnbmVkVXJsc1tp
ZGVudGlmaWVyXSkpOwogCiAgICAgaWYgKGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiAgICAg
ICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlUmVzcG9uc2UgJXNcbiIsCi0gICAgICAgICAgICAg
ICBxUHJpbnRhYmxlKGR1bXBBc3NpZ25lZFVybHNbaWRlbnRpZmllcl0pLAotICAgICAgICAgICAg
ICAgcVByaW50YWJsZShkcnREZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25z
ZSkpKTsKKyAgICAgICAgICAgIHFQcmludGFibGUoZHVtcEFzc2lnbmVkVXJsc1tpZGVudGlmaWVy
XSksCisgICAgICAgICAgICBxUHJpbnRhYmxlKGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHJlc3BvbnNlKSkpOwogCiAgICAgaWYgKGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5
cGVzKSB7CiAgICAgICAgIHByaW50ZigiJXMgaGFzIE1JTUUgdHlwZSAlc1xuIiwKLSAgICAgICAg
ICAgICAgIHFQcmludGFibGUoUVN0cmluZyhyZXNwb25zZS51cmwoKS5sYXN0UGF0aENvbXBvbmVu
dCgpKSksCi0gICAgICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcocmVzcG9uc2UubWltZVR5
cGUoKSkpKTsKKyAgICAgICAgICAgIHFQcmludGFibGUoUVN0cmluZyhyZXNwb25zZS51cmwoKS5s
YXN0UGF0aENvbXBvbmVudCgpKSksCisgICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcocmVz
cG9uc2UubWltZVR5cGUoKSkpKTsKICAgICB9CiB9CiAKQEAgLTExMTYsMTUgKzExMTEsMTUgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnMKIHsKICAgICBpZiAoZHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcykKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZpbmlzaExvYWRpbmdcbiIsCi0gICAgICAg
ICAgICAgICAoZHVtcEFzc2lnbmVkVXJscy5jb250YWlucyhpZGVudGlmaWVyKSA/IHFQcmludGFi
bGUoZHVtcEFzc2lnbmVkVXJsc1tpZGVudGlmaWVyXSkgOiAiPHVua25vd24+IikpOworICAgICAg
ICAgICAgKGR1bXBBc3NpZ25lZFVybHMuY29udGFpbnMoaWRlbnRpZmllcikgPyBxUHJpbnRhYmxl
KGR1bXBBc3NpZ25lZFVybHNbaWRlbnRpZmllcl0pIDogIjx1bmtub3duPiIpKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgaWYgKGR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjog
JXNcbiIsCi0gICAgICAgICAgICAgICAoZHVtcEFzc2lnbmVkVXJscy5jb250YWlucyhpZGVudGlm
aWVyKSA/IHFQcmludGFibGUoZHVtcEFzc2lnbmVkVXJsc1tpZGVudGlmaWVyXSkgOiAiPHVua25v
d24+IiksCi0gICAgICAgICAgICAgICBxUHJpbnRhYmxlKGRydERlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KGVycm9yKSkpOworICAgICAgICAgICAgKGR1bXBBc3NpZ25lZFVybHMuY29u
dGFpbnMoaWRlbnRpZmllcikgPyBxUHJpbnRhYmxlKGR1bXBBc3NpZ25lZFVybHNbaWRlbnRpZmll
cl0pIDogIjx1bmtub3duPiIpLAorICAgICAgICAgICAgcVByaW50YWJsZShkcnREZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChlcnJvcikpKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpE
b2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBpbnQpCkBAIC0xMTM1LDI3ICsxMTMwLDE5IEBAIGJv
b2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5
Q2FjaGUoV2ViQ29yZTo6RG9jdW1lCiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FsbEVy
cm9yUGFnZUV4dGVuc2lvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsK
LSAgICBRV2ViUGFnZSogcGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Ut
PnN1cHBvcnRzRXh0ZW5zaW9uKFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBRV2ViUGFnZTo6RXJyb3JQYWdlRXh0ZW5zaW9uT3B0aW9u
IG9wdGlvbjsKLSAgICBpZiAoZXJyb3IuZG9tYWluKCkgPT0gIlF0TmV0d29yayIpCi0gICAgICAg
IG9wdGlvbi5kb21haW4gPSBRV2ViUGFnZTo6UXROZXR3b3JrOwotICAgIGVsc2UgaWYgKGVycm9y
LmRvbWFpbigpID09ICJIVFRQIikKLSAgICAgICAgb3B0aW9uLmRvbWFpbiA9IFFXZWJQYWdlOjpI
dHRwOwotICAgIGVsc2UgaWYgKGVycm9yLmRvbWFpbigpID09ICJXZWJLaXQiKQotICAgICAgICBv
cHRpb24uZG9tYWluID0gUVdlYlBhZ2U6OldlYktpdDsKLSAgICBlbHNlCisgICAgUVdlYlBhZ2VB
ZGFwdGVyKiBwYWdlID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXI7CisgICAgaWYgKCFwYWdlLT5z
dXBwb3J0c0Vycm9yUGFnZUV4dGVuc2lvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAg
ICBRV2ViUGFnZUFkYXB0ZXI6OkVycm9yUGFnZU9wdGlvbiBvcHRpb247CiAgICAgb3B0aW9uLnVy
bCA9IFFVcmwoZXJyb3IuZmFpbGluZ1VSTCgpKTsKICAgICBvcHRpb24uZnJhbWUgPSBtX3dlYkZy
YW1lOworICAgIG9wdGlvbi5kb21haW4gPSBlcnJvci5kb21haW4oKTsKICAgICBvcHRpb24uZXJy
b3IgPSBlcnJvci5lcnJvckNvZGUoKTsKICAgICBvcHRpb24uZXJyb3JTdHJpbmcgPSBlcnJvci5s
b2NhbGl6ZWREZXNjcmlwdGlvbigpOwogCi0gICAgUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lv
blJldHVybiBvdXRwdXQ7Ci0gICAgaWYgKCFwYWdlLT5leHRlbnNpb24oUVdlYlBhZ2U6OkVycm9y
UGFnZUV4dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCkpCisgICAgUVdlYlBhZ2VBZGFwdGVyOjpF
cnJvclBhZ2VSZXR1cm4gb3V0cHV0OworCisgICAgaWYgKCFwYWdlLT5lcnJvclBhZ2VFeHRlbnNp
b24oJm9wdGlvbiwgJm91dHB1dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEtVUkwg
YmFzZVVybChvdXRwdXQuYmFzZVVybCk7CkBAIC0xMjAwLDEwICsxMTg3LDEwIEBAIFdlYkNvcmU6
OkZyYW1lKiBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgV2Vi
Q29yZTo6TmF2aWdhdGlvCiB7CiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBRV2ViUGFnZSAqbmV3UGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+Y3JlYXRlV2lu
ZG93KFFXZWJQYWdlOjpXZWJCcm93c2VyV2luZG93KTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIG5l
d1BhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Y3JlYXRlV2luZG93KC8qIG1vZGFsRGlh
bG9nID0gKi8gZmFsc2UpOwogICAgIGlmICghbmV3UGFnZSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIG5ld1BhZ2UtPm1haW5GcmFtZSgpLT5kLT5mcmFtZTsKKyAgICByZXR1cm4gbmV3
UGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5mcmFtZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKEZyYW1lUG9saWN5RnVuY3Rp
b24gZnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQpAQCAtMTIzMCw5ICsxMjE3LDggQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbihGcmFtZVBvbGljeUZ1bmMKIHsKICAgICBRX0FTU0VSVChtX3dlYkZyYW1lKTsKICAgICBR
TmV0d29ya1JlcXVlc3QgcihyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9mcmFtZS0+bG9hZGVy
KCktPm5ldHdvcmtpbmdDb250ZXh0KCkpKTsKLSAgICBRV2ViUGFnZSogcGFnZSA9IG1fd2ViRnJh
bWUtPnBhZ2UoKTsKIAotICAgIGlmICghcGFnZS0+ZC0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3Qo
MCwgciwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlKGFjdGlvbi50eXBlKCkpKSkgeworICAgIGlm
ICghbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KDAsIHIs
IChpbnQpYWN0aW9uLnR5cGUoKSkpIHsKICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gTmF2
aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkIHx8IGFjdGlvbi50eXBlKCkgPT0gTmF2aWdhdGlvblR5
cGVGb3JtUmVzdWJtaXR0ZWQpCiAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cmVzZXRN
dWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwogCkBAIC0xMjUxLDcgKzEyMzcsNiBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bgogewogICAgIFFfQVNTRVJUKG1fd2ViRnJhbWUpOwog
ICAgIFFOZXR3b3JrUmVxdWVzdCByKHJlcXVlc3QudG9OZXR3b3JrUmVxdWVzdChtX2ZyYW1lLT5s
b2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSkpOwotICAgIFFXZWJQYWdlKnBhZ2UgPSBtX3dl
YkZyYW1lLT5wYWdlKCk7CiAgICAgUG9saWN5QWN0aW9uIHJlc3VsdDsKIAogICAgIC8vIEN1cnJl
bnRseSwgdGhpcyBpcyBvbmx5IGVuYWJsZWQgYnkgRFJULgpAQCAtMTI2MCwyNyArMTI0NSwyNyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bgogICAgICAgICBmb3IgKGNvbnN0IEV2ZW50KiBldmVu
dCA9IGFjdGlvbi5ldmVudCgpOyBldmVudDsgZXZlbnQgPSBldmVudC0+dW5kZXJseWluZ0V2ZW50
KCkpIHsKICAgICAgICAgICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKICAgICAgICAg
ICAgICAgICBjb25zdCBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gIHN0YXRpY19jYXN0PGNvbnN0
IE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUobV93ZWJGcmFtZSktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQ
b2ludCgKKyAgICAgICAgICAgICAgICBub2RlID0gbV93ZWJGcmFtZS0+ZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludCgKICAgICAgICAgICAgICAgICAgICAgbW91c2VF
dmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSkuaW5uZXJOb25TaGFyZWROb2RlKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBwcmludGYoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICVzIHdpdGggbmF2aWdh
dGlvbiB0eXBlICclcyclc1xuIiwKLSAgICAgICAgICAgICAgIHFQcmludGFibGUoZHJ0RGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC51cmwoKSkpLCBuYXZpZ2F0aW9uVHlw
ZVRvU3RyaW5nKGFjdGlvbi50eXBlKCkpLAotICAgICAgICAgICAgICAgKG5vZGUpID8gcVByaW50
YWJsZShRU3RyaW5nOjpmcm9tTGF0aW4xKCIgb3JpZ2luYXRpbmcgZnJvbSAiKSArIGRydERlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KG5vZGUsIDApKSA6ICIiKTsKKyAgICAgICAgICAg
IHFQcmludGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC51
cmwoKSkpLCBuYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKGFjdGlvbi50eXBlKCkpLAorICAgICAgICAg
ICAgKG5vZGUpID8gcVByaW50YWJsZShRU3RyaW5nOjpmcm9tTGF0aW4xKCIgb3JpZ2luYXRpbmcg
ZnJvbSAiKSArIGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KG5vZGUsIDApKSA6
ICIiKTsKIAogICAgICAgICBpZiAocG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlKQogICAgICAgICAg
ICAgcmVzdWx0ID0gUG9saWN5VXNlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBQb2xpY3lJZ25vcmU7CiAKLSAgICAgICAgcGFnZS0+ZC0+YWNjZXB0TmF2aWdhdGlvblJlcXVl
c3QobV93ZWJGcmFtZSwgciwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlKGFjdGlvbi50eXBlKCkp
KTsKKyAgICAgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmFjY2VwdE5hdmlnYXRpb25SZXF1
ZXN0KG1fd2ViRnJhbWUsIHIsIChpbnQpYWN0aW9uLnR5cGUoKSk7CiAgICAgICAgIGNhbGxQb2xp
Y3lGdW5jdGlvbihmdW5jdGlvbiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghcGFnZS0+ZC0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QobV93ZWJGcmFtZSwgciwg
UVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlKGFjdGlvbi50eXBlKCkpKSkgeworICAgIGlmICghbV93
ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KG1fd2ViRnJhbWUs
IHIsIChpbnQpYWN0aW9uLnR5cGUoKSkpIHsKICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0g
TmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkIHx8IGFjdGlvbi50eXBlKCkgPT0gTmF2aWdhdGlv
blR5cGVGb3JtUmVzdWJtaXR0ZWQpCiAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cmVz
ZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwogCkBAIC0xMzA1LDExICsxMjkw
LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6c3RhcnREb3dubG9hZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBlbWl0IG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZG93bmxvYWRSZXF1
ZXN0ZWQocmVxdWVzdC50b05ldHdvcmtSZXF1ZXN0KG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3Jr
aW5nQ29udGV4dCgpKSk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmVtaXREb3dubG9h
ZFJlcXVlc3RlZChyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9mcmFtZS0+bG9hZGVyKCktPm5l
dHdvcmtpbmdDb250ZXh0KCkpKTsKIH0KIAotUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJD
bGllbnRRdDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dz
U2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCitQYXNzUmVmUHRy
PEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2lu
V2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCiB7CiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTEzMjYsMTUgKzEzMTAsMTYgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJh
bWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcKICAgICBmcmFtZURhdGEubWFyZ2luV2lkdGggPSBtYXJnaW5XaWR0aDsKICAgICBmcmFtZURh
dGEubWFyZ2luSGVpZ2h0ID0gbWFyZ2luSGVpZ2h0OwogCi0gICAgUVBvaW50ZXI8UVdlYkZyYW1l
PiB3ZWJGcmFtZSA9IG5ldyBRV2ViRnJhbWUobV93ZWJGcmFtZSwgJmZyYW1lRGF0YSk7CisgICAg
UVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBtX3dlYkZyYW1lLT5jcmVhdGVGcmFtZSgmZnJh
bWVEYXRhKTsKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1biBh
cmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJlYWR5
LgotICAgIGlmICghd2ViRnJhbWUuZGF0YSgpLT5kLT5mcmFtZS0+cGFnZSgpKSB7CisgICAgaWYg
KCF3ZWJGcmFtZS0+ZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBRUG9pbnRlcjxRT2JqZWN0PiBx
V2ViRnJhbWUgPSByZWludGVycHJldF9jYXN0PFFPYmplY3QqPih3ZWJGcmFtZS0+aGFuZGxlKCkp
OwogICAgICAgICBmcmFtZURhdGEuZnJhbWUucmVsZWFzZSgpOwotICAgICAgICBBU1NFUlQod2Vi
RnJhbWUuaXNOdWxsKCkpOworICAgICAgICBBU1NFUlQoIXFXZWJGcmFtZSk7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIGVtaXQgbV93ZWJGcmFtZS0+cGFnZSgpLT5mcmFtZUNyZWF0
ZWQod2ViRnJhbWUuZGF0YSgpKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1pdEZy
YW1lQ3JlYXRlZCh3ZWJGcmFtZSk7CiAKICAgICAvLyBGSVhNRTogU2V0IG92ZXJyaWRlIGVuY29k
aW5nIGlmIHdlIGhhdmUgb25lLgogCkBAIC0xMzk5LDQ0ICsxMzg0LDQ1IEBAIHN0YXRpYyBjb25z
dCBDU1NQcm9wZXJ0eUlEIHFzdHlsZVNoZWV0UHJvcGVydGllc1tdID0gewogCiBjb25zdCB1bnNp
Z25lZCBudW1xU3R5bGVTaGVldFByb3BlcnRpZXMgPSBzaXplb2YocXN0eWxlU2hlZXRQcm9wZXJ0
aWVzKSAvIHNpemVvZihxc3R5bGVTaGVldFByb3BlcnRpZXNbMF0pOwogCi1jbGFzcyBRdFBsdWdp
bldpZGdldDogcHVibGljIFdpZGdldAoteworY2xhc3MgUXRQbHVnaW5XaWRnZXQ6IHB1YmxpYyBX
aWRnZXQgewogcHVibGljOgotICAgIFF0UGx1Z2luV2lkZ2V0KFFXaWRnZXQqIHcgPSAwKTogV2lk
Z2V0KHcpIHt9CisgICAgUXRQbHVnaW5XaWRnZXQoUXRQbHVnaW5XaWRnZXRBZGFwdGVyKiB3KQor
ICAgICAgICA6IFdpZGdldCh3LT5oYW5kbGUoKSkKKyAgICAgICAgLCBtX2FkYXB0ZXIodykKKyAg
ICB7CisgICAgICAgIHNldEJpbmRpbmdPYmplY3Qody0+aGFuZGxlKCkpOworICAgIH0KKwogICAg
IH5RdFBsdWdpbldpZGdldCgpCiAgICAgewotICAgICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkK
LSAgICAgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPmRlbGV0ZUxhdGVyKCk7CisgICAgICAgIGRl
bGV0ZSBtX2FkYXB0ZXI7CisgICAgfQorCisgICAgaW5saW5lIFF0UGx1Z2luV2lkZ2V0QWRhcHRl
ciogd2lkZ2V0QWRhcHRlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hZGFwdGVy
OwogICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0
JiByKQogICAgIHsgCiAgICAgICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8UVdpZGdldCo+KHBsYXRmb3JtV2lkZ2V0KCkpLT51cGRhdGUocik7CisgICAg
ICAgICAgICB3aWRnZXRBZGFwdGVyKCktPnVwZGF0ZShyKTsKICAgICB9CiAgICAgdmlydHVhbCB2
b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkKICAgICB7Ci0gICAgICAgIFFXaWRnZXQqIHdpZGdldCA9
IHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICAgICAgUXRQbHVn
aW5XaWRnZXRBZGFwdGVyKiB3aWRnZXQgPSB3aWRnZXRBZGFwdGVyKCk7CiAgICAgICAgIGlmICgh
d2lkZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJlY3Qgd2luZG93UmVj
dCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVjdCgwLCAwLCBmcmFtZVJlY3QoKS53
aWR0aCgpLCBmcmFtZVJlY3QoKS5oZWlnaHQoKSkpOwotICAgICAgICB3aWRnZXQtPnNldEdlb21l
dHJ5KHdpbmRvd1JlY3QpOworICAgICAgICBRUmVjdCB3aW5kb3dSZWN0ID0gY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAsIGZyYW1lUmVjdCgpLndpZHRoKCksIGZyYW1lUmVj
dCgpLmhlaWdodCgpKSk7CiAKICAgICAgICAgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9
IHBhcmVudCgpOwotICAgICAgICBpZiAoIXBhcmVudFNjcm9sbFZpZXcpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgQVNTRVJUKHBhcmVudFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkp
OwotICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVu
dFNjcm9sbFZpZXcpLT53aW5kb3dDbGlwUmVjdCgpKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZSgt
d2luZG93UmVjdC54KCksIC13aW5kb3dSZWN0LnkoKSk7Ci0gICAgICAgIGNsaXBSZWN0LmludGVy
c2VjdCh3aWRnZXQtPnJlY3QoKSk7Ci0KLSAgICAgICAgUVJlZ2lvbiBjbGlwUmVnaW9uID0gUVJl
Z2lvbihjbGlwUmVjdCk7Ci0gICAgICAgIHdpZGdldC0+c2V0TWFzayhjbGlwUmVnaW9uKTsKLQot
ICAgICAgICBoYW5kbGVWaXNpYmlsaXR5KCk7Ci0KLSAgICAgICAgd2lkZ2V0LT51cGRhdGUoKTsK
KyAgICAgICAgUVJlY3QgY2xpcFJlY3Q7CisgICAgICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3KSB7
CisgICAgICAgICAgICBBU1NFUlQocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSk7Cisg
ICAgICAgICAgICBjbGlwUmVjdCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudFNjcm9s
bFZpZXcpLT53aW5kb3dDbGlwUmVjdCgpOworICAgICAgICAgICAgY2xpcFJlY3QudHJhbnNsYXRl
KC13aW5kb3dSZWN0LngoKSwgLXdpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgfQorICAgICAgICB3
aWRnZXQtPnNldEdlb21ldHJ5QW5kQ2xpcCh3aW5kb3dSZWN0LCBjbGlwUmVjdCwgaXNWaXNpYmxl
KCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBzaG93KCkKQEAgLTE0NDQsNzUgKzE0MzAs
MjUgQEAgcHVibGljOgogICAgICAgICBXaWRnZXQ6OnNob3coKTsKICAgICAgICAgaGFuZGxlVmlz
aWJpbGl0eSgpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpCisgICAgeworICAgICAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgICAgIHdpZGdldEFkYXB0ZXIoKS0+c2V0
VmlzaWJsZShmYWxzZSk7CisgICAgfQogCiBwcml2YXRlOgorICAgIFF0UGx1Z2luV2lkZ2V0QWRh
cHRlciogbV9hZGFwdGVyOworCiAgICAgdm9pZCBoYW5kbGVWaXNpYmlsaXR5KCkKICAgICB7CiAg
ICAgICAgIGlmICghaXNWaXNpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UVdpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KHBsYXRmb3JtV2lkZ2V0KCkp
OwotICAgICAgICAvLyBJZiBzZXRNYXNrIGlzIHNldCB3aXRoIGFuIGVtcHR5IFFSZWdpb24sIG5v
IGNsaXBwaW5nIHdpbGwKLSAgICAgICAgLy8gYmUgcGVyZm9ybWVkLCBzbyBpbiB0aGF0IGNhc2Ug
d2UgaGlkZSB0aGUgcGxhdGZvcm1XaWRnZXQuCi0gICAgICAgIFFSZWdpb24gbWFzayA9IHdpZGdl
dC0+bWFzaygpOwotICAgICAgICB3aWRnZXQtPnNldFZpc2libGUoIW1hc2suaXNFbXB0eSgpKTsK
KyAgICAgICAgd2lkZ2V0QWRhcHRlcigpLT5zZXRWaXNpYmxlKHRydWUpOwogICAgIH0KIH07CiAK
LSNpZiAhZGVmaW5lZChRVF9OT19HUkFQSElDU1ZJRVcpCi1jbGFzcyBRdFBsdWdpbkdyYXBoaWNz
V2lkZ2V0OiBwdWJsaWMgV2lkZ2V0Ci17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxRdFBs
dWdpbkdyYXBoaWNzV2lkZ2V0PiBjcmVhdGUoUUdyYXBoaWNzV2lkZ2V0KiB3ID0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXRQbHVnaW5HcmFwaGljc1dpZGdldCh3KSk7
Ci0gICAgfQotCi0gICAgflF0UGx1Z2luR3JhcGhpY3NXaWRnZXQoKQotICAgIHsKLSAgICAgICAg
aWYgKGdyYXBoaWNzV2lkZ2V0KQotICAgICAgICAgICAgZ3JhcGhpY3NXaWRnZXQtPmRlbGV0ZUxh
dGVyKCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRS
ZWN0JiByKQotICAgIHsKLSAgICAgICAgUUdyYXBoaWNzU2NlbmUqIHNjZW5lID0gZ3JhcGhpY3NX
aWRnZXQgPyBncmFwaGljc1dpZGdldC0+c2NlbmUoKSA6IDA7Ci0gICAgICAgIGlmIChzY2VuZSkK
LSAgICAgICAgICAgIHNjZW5lLT51cGRhdGUoUVJlY3QocikpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKQotICAgIHsKLSAgICAgICAgaWYgKCFncmFwaGljc1dp
ZGdldCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IHdpbmRvd1JlY3Qg
PSBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgZnJhbWVSZWN0KCkud2lk
dGgoKSwgZnJhbWVSZWN0KCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgZ3JhcGhpY3NXaWRnZXQtPnNl
dEdlb21ldHJ5KFFSZWN0KHdpbmRvd1JlY3QpKTsKIAotICAgICAgICAvLyBGSVhNRTogTWFrZSB0
aGUgY29kZSBoYW5kbGUgY2xpcHBpbmcgb2YgZ3JhcGhpY3Mgd2lkZ2V0cy4KLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgaWYgKGdyYXBoaWNzV2lkZ2V0KQot
ICAgICAgICAgICAgZ3JhcGhpY3NXaWRnZXQtPnNob3coKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIGhpZGUoKQotICAgIHsKLSAgICAgICAgaWYgKGdyYXBoaWNzV2lkZ2V0KQotICAgICAgICAg
ICAgZ3JhcGhpY3NXaWRnZXQtPmhpZGUoKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIFF0UGx1Z2lu
R3JhcGhpY3NXaWRnZXQoUUdyYXBoaWNzV2lkZ2V0KiB3ID0gMCkKLSAgICAgICAgOiBXaWRnZXQo
MCkKLSAgICAgICAgLCBncmFwaGljc1dpZGdldCh3KQotICAgIHsKLSAgICAgICAgc2V0QmluZGlu
Z09iamVjdChncmFwaGljc1dpZGdldCk7Ci0gICAgfQotCi0gICAgUUdyYXBoaWNzV2lkZ2V0KiBn
cmFwaGljc1dpZGdldDsKLX07Ci0jZW5kaWYgLy8gUVRfTk9fR1JBUEhJQ1NWSUVXCi0KLVBhc3NS
ZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50
U2l6ZSYgcGx1Z2luU2l6ZSwgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorUGFzc1JlZlB0
cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXpl
JiBwbHVnaW5TaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkK
IHsKICAgICAvLyBxRGVidWcoKTw8Ii0tLS0tLSBDcmVhdGluZyBwbHVnaW4gaW4gRnJhbWVMb2Fk
ZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luIGZvciAiPDx1cmwuc3RyaW5nKCkgPDwgbWltZVR5cGU7
CiAgICAgLy8gcURlYnVnKCk8PCItLS0tLS1cdCB1cmwgPSAiPDx1cmwuc3RyaW5nKCk7CkBAIC0x
NTM1LDcyICsxNDcxLDU1IEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudFF0
OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwKICAgICBRU3RyaW5nIHVy
bFN0cih1cmwuc3RyaW5nKCkpOwogICAgIFFVcmwgcXVybCA9IHVybFN0cjsKIAotICAgIFFPYmpl
Y3QqIG9iamVjdCA9IDA7CisgICAgUU9iamVjdCogcGx1Z2luQWRhcHRlciA9IDA7CiAKICAgICBp
ZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtcXQtcGx1Z2luIiB8fCBtaW1lVHlwZSA9PSAi
YXBwbGljYXRpb24veC1xdC1zdHlsZWQtd2lkZ2V0IikgewotICAgICAgICBvYmplY3QgPSBtX3dl
YkZyYW1lLT5wYWdlKCktPmNyZWF0ZVBsdWdpbihjbGFzc2lkLCBxdXJsLCBwYXJhbXMsIHZhbHVl
cyk7CisgICAgICAgIHBsdWdpbkFkYXB0ZXIgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Y3Jl
YXRlUGx1Z2luKGNsYXNzaWQsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKICNpZm5kZWYgUVRfTk9f
U1RZTEVfU1RZTEVTSEVFVAotICAgICAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8
UVdpZGdldCo+KG9iamVjdCk7CisgICAgICAgIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciogd2lkZ2V0
ID0gcW9iamVjdF9jYXN0PFF0UGx1Z2luV2lkZ2V0QWRhcHRlcio+KHBsdWdpbkFkYXB0ZXIpOwog
ICAgICAgICBpZiAod2lkZ2V0ICYmIG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXF0LXN0eWxl
ZC13aWRnZXQiKSB7CiAKLSAgICAgICAgICAgIFFTdHJpbmcgc3R5bGVTaGVldCA9IGVsZW1lbnQt
PmdldEF0dHJpYnV0ZSgic3R5bGUiKTsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3R5bGVT
aGVldDsKKyAgICAgICAgICAgIHN0eWxlU2hlZXQuYXBwZW5kKGVsZW1lbnQtPmdldEF0dHJpYnV0
ZSgic3R5bGUiKSk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlU2hlZXQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIHN0eWxlU2hlZXQgKz0gUUxhdGluMUNoYXIoJzsnKTsKKyAgICAgICAgICAg
ICAgICBzdHlsZVNoZWV0LmFwcGVuZCgnOycpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtcVN0eWxlU2hlZXRQcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gcXN0eWxlU2hlZXRQcm9wZXJ0aWVzW2ldOwog
Ci0gICAgICAgICAgICAgICAgc3R5bGVTaGVldCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKGdldFBy
b3BlcnR5TmFtZShwcm9wZXJ0eSkpOwotICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQgKz0gUUxh
dGluMUNoYXIoJzonKTsKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0ICs9IENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5KTsKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0ICs9IFFMYXRpbjFDaGFyKCc7Jyk7Cisg
ICAgICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5
KSk7CisgICAgICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoJzonKTsKKyAgICAgICAgICAg
ICAgICBzdHlsZVNoZWV0LmFwcGVuZChDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZShlbGVtZW50KS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSkpOworICAgICAgICAgICAgICAg
IHN0eWxlU2hlZXQuYXBwZW5kKCc7Jyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdp
ZGdldC0+c2V0U3R5bGVTaGVldChzdHlsZVNoZWV0KTsKKyAgICAgICAgICAgIHdpZGdldC0+c2V0
U3R5bGVTaGVldChzdHlsZVNoZWV0LnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAjZW5kaWYgLy8g
UVRfTk9fU1RZTEVfU1RZTEVTSEVFVAogICAgIH0KIAotICAgIGlmICghb2JqZWN0KSB7Ci0gICAg
ICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0b3J5ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wbHVn
aW5GYWN0b3J5KCk7CisgICAgaWYgKCFwbHVnaW5BZGFwdGVyKSB7CisgICAgICAgIFFXZWJQbHVn
aW5GYWN0b3J5KiBmYWN0b3J5ID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPnBsdWdpbkZhY3Rv
cnk7CiAgICAgICAgIGlmIChmYWN0b3J5KQotICAgICAgICAgICAgb2JqZWN0ID0gZmFjdG9yeS0+
Y3JlYXRlKG1pbWVUeXBlLCBxdXJsLCBwYXJhbXMsIHZhbHVlcyk7CisgICAgICAgICAgICBwbHVn
aW5BZGFwdGVyID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmFkYXB0ZXJGb3JXaWRnZXQoZmFj
dG9yeS0+Y3JlYXRlKG1pbWVUeXBlLCBxdXJsLCBwYXJhbXMsIHZhbHVlcykpOwogICAgIH0KLQot
ICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0
PFFXaWRnZXQqPihvYmplY3QpOworICAgIGlmIChwbHVnaW5BZGFwdGVyKSB7CisgICAgICAgIFF0
UGx1Z2luV2lkZ2V0QWRhcHRlciogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFF0UGx1Z2luV2lkZ2V0
QWRhcHRlcio+KHBsdWdpbkFkYXB0ZXIpOwogICAgICAgICBpZiAod2lkZ2V0KSB7Ci0gICAgICAg
ICAgICBRV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSAwOwotICAgICAgICAgICAgaWYgKG1fd2ViRnJh
bWUtPnBhZ2UoKS0+ZC0+Y2xpZW50KQotICAgICAgICAgICAgICAgIHBhcmVudFdpZGdldCA9IHFv
YmplY3RfY2FzdDxRV2lkZ2V0Kj4obV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5jbGllbnQtPnBsdWdp
blBhcmVudCgpKTsKKyAgICAgICAgICAgIFFPYmplY3QqIHBhcmVudFdpZGdldCA9IDA7CisgICAg
ICAgICAgICBpZiAobV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNsaWVudCkKKyAgICAgICAgICAg
ICAgICBwYXJlbnRXaWRnZXQgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Y2xpZW50LT5wbHVn
aW5QYXJlbnQoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnRXaWRnZXQpIC8vIERvbid0IHJlcGFy
ZW50IHRvIG5vdGhpbmcgKGkuZS4ga2VlcCB3aGF0ZXZlciBwYXJlbnQgUVdlYlBhZ2U6OmNyZWF0
ZVBsdWdpbigpIGNob3NlLgotICAgICAgICAgICAgICAgIHdpZGdldC0+c2V0UGFyZW50KHBhcmVu
dFdpZGdldCk7Ci0gICAgICAgICAgICB3aWRnZXQtPmhpZGUoKTsKLSAgICAgICAgICAgIFJlZlB0
cjxRdFBsdWdpbldpZGdldD4gdyA9IGFkb3B0UmVmKG5ldyBRdFBsdWdpbldpZGdldCgpKTsKLSAg
ICAgICAgICAgIHctPnNldFBsYXRmb3JtV2lkZ2V0KHdpZGdldCk7CisgICAgICAgICAgICAgICAg
d2lkZ2V0LT5zZXRXaWRnZXRQYXJlbnQocGFyZW50V2lkZ2V0KTsKKyAgICAgICAgICAgIHdpZGdl
dC0+c2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgICAgICBSZWZQdHI8UXRQbHVnaW5XaWRnZXQ+
IHcgPSBhZG9wdFJlZihuZXcgUXRQbHVnaW5XaWRnZXQod2lkZ2V0KSk7CiAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgaXQncyBpbnZpc2libGUgdW50aWwgcHJvcGVybHkgcGxhY2VkIGludG8gdGhl
IGxheW91dC4KICAgICAgICAgICAgIHctPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIDAsIDAp
KTsKICAgICAgICAgICAgIHJldHVybiB3OwogICAgICAgICB9CiAKLSNpZiAhZGVmaW5lZChRVF9O
T19HUkFQSElDU1ZJRVcpCi0gICAgICAgIFFHcmFwaGljc1dpZGdldCogZ3JhcGhpY3NXaWRnZXQg
PSBxb2JqZWN0X2Nhc3Q8UUdyYXBoaWNzV2lkZ2V0Kj4ob2JqZWN0KTsKLSAgICAgICAgaWYgKGdy
YXBoaWNzV2lkZ2V0KSB7Ci0gICAgICAgICAgICBRR3JhcGhpY3NPYmplY3QqIHBhcmVudFdpZGdl
dCA9IDA7Ci0gICAgICAgICAgICBpZiAobV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5jbGllbnQpCi0g
ICAgICAgICAgICAgICAgcGFyZW50V2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFHcmFwaGljc09iamVj
dCo+KG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+Y2xpZW50LT5wbHVnaW5QYXJlbnQoKSk7Ci0gICAg
ICAgICAgICBncmFwaGljc1dpZGdldC0+aGlkZSgpOwotICAgICAgICAgICAgaWYgKHBhcmVudFdp
ZGdldCkgLy8gRG9uJ3QgcmVwYXJlbnQgdG8gbm90aGluZyAoaS5lLiBrZWVwIHdoYXRldmVyIHBh
cmVudCBRV2ViUGFnZTo6Y3JlYXRlUGx1Z2luKCkgY2hvc2UuCi0gICAgICAgICAgICAgICAgZ3Jh
cGhpY3NXaWRnZXQtPnNldFBhcmVudEl0ZW0ocGFyZW50V2lkZ2V0KTsKLSAgICAgICAgICAgIFJl
ZlB0cjxRdFBsdWdpbkdyYXBoaWNzV2lkZ2V0PiB3ID0gUXRQbHVnaW5HcmFwaGljc1dpZGdldDo6
Y3JlYXRlKGdyYXBoaWNzV2lkZ2V0KTsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGlu
dmlzaWJsZSB1bnRpbCBwcm9wZXJseSBwbGFjZWQgaW50byB0aGUgbGF5b3V0LgotICAgICAgICAg
ICAgdy0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgcmV0
dXJuIHc7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBRVF9OT19HUkFQSElDU1ZJRVcKLQogICAgICAg
ICAvLyBGSVhNRTogTWFrZSB0aGluZ3Mgd29yayBmb3Igd2lkZ2V0bGVzcyBwbHVnaW5zIGFzIHdl
bGwuCi0gICAgICAgIGRlbGV0ZSBvYmplY3Q7CisgICAgICAgIGRlbGV0ZSBwbHVnaW5BZGFwdGVy
OwogICAgIH0KICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBlbHNlIHsgLy8g
TlBBUEkgUGx1Z2lucwpAQCAtMTYzMiw4ICsxNTUxLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKICAgICAgICAg
bV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPFdpZGdl
dD4gRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRT
aXplJiBwbHVnaW5TaXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYg
dXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMpCitQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3Jl
YXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBIVE1MQXBwbGV0
RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewogICAgIHJl
dHVybiBjcmVhdGVQbHVnaW4ocGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcywgImFwcGxpY2F0aW9uL3gtamF2YS1hcHBsZXQiLCB0cnVlKTsKIH0KQEAgLTE2
NDUsMjMgKzE1NjMsMjYgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om92ZXJyaWRlTWVk
aWFUeXBlKCkgY29uc3QKIAogUVN0cmluZyBGcmFtZUxvYWRlckNsaWVudFF0OjpjaG9vc2VGaWxl
KGNvbnN0IFFTdHJpbmcmIG9sZEZpbGUpCiB7Ci0gICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2Uo
KS0+Y2hvb3NlRmlsZShtX3dlYkZyYW1lLCBvbGRGaWxlKTsKKyAgICBRU3RyaW5nTGlzdCByZXN1
bHQgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Y2hvb3NlRmlsZXMobV93ZWJGcmFtZSwgLyph
bGxvd011bHRpKi8gZmFsc2UsIChRU3RyaW5nTGlzdCgpIDw8IG9sZEZpbGUpKTsKKyAgICByZXR1
cm4gcmVzdWx0LmlzRW1wdHkoKSA/IFFTdHJpbmcoKSA6IHJlc3VsdC5maXJzdCgpOwogfQogCiBQ
YXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNy
ZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkKIHsKLSAgICBRVmFyaWFudCB2YWx1ZSA9IG1fd2ViRnJh
bWUtPnBhZ2UoKS0+cHJvcGVydHkoIl9xX01JTUVTbmlmZmluZ0Rpc2FibGVkIik7CisgICAgUVZh
cmlhbnQgdmFsdWUgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+aGFuZGxlKCktPnByb3BlcnR5
KCJfcV9NSU1FU25pZmZpbmdEaXNhYmxlZCIpOwogICAgIGJvb2wgTUlNRVNuaWZmaW5nRGlzYWJs
ZWQgPSB2YWx1ZS5pc1ZhbGlkKCkgJiYgdmFsdWUudG9Cb29sKCk7CiAKLSAgICByZXR1cm4gRnJh
bWVOZXR3b3JraW5nQ29udGV4dFF0OjpjcmVhdGUobV9mcmFtZSwgbV93ZWJGcmFtZSwgIU1JTUVT
bmlmZmluZ0Rpc2FibGVkLCBtX3dlYkZyYW1lLT5wYWdlKCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCkpOworICAgIHJldHVybiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6OmNyZWF0ZShtX2ZyYW1l
LCBtX3dlYkZyYW1lLT5oYW5kbGUoKSwgIU1JTUVTbmlmZmluZ0Rpc2FibGVkKTsKK30KKworUVdl
YkZyYW1lQWRhcHRlciogRnJhbWVMb2FkZXJDbGllbnRRdDo6d2ViRnJhbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3dlYkZyYW1lOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVt
aXRMb2FkU3RhcnRlZCgpCiB7Ci0gICAgUVdlYlBhZ2UqIHdlYlBhZ2UgPSBtX3dlYkZyYW1lLT5w
YWdlKCk7Ci0gICAgaWYgKG1faXNPcmlnaW5hdGluZ0xvYWQgJiYgd2ViUGFnZSkKLSAgICAgICAg
ZW1pdCB3ZWJQYWdlLT5sb2FkU3RhcnRlZCgpOwotICAgIGVtaXQgbV93ZWJGcmFtZS0+bG9hZFN0
YXJ0ZWQoKTsKKyAgICBtX3dlYkZyYW1lLT5lbWl0TG9hZFN0YXJ0ZWQobV9pc09yaWdpbmF0aW5n
TG9hZCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZW1pdExvYWRGaW5pc2hlZChi
b29sIG9rKQpAQCAtMTY3MCwxMCArMTU5MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZW1pdExvYWRGaW5pc2hlZChib29sIG9rKQogICAgIGNvbnN0IGJvb2wgd2FzT3JpZ2luYXRpbmdM
b2FkID0gbV9pc09yaWdpbmF0aW5nTG9hZDsKICAgICBtX2lzT3JpZ2luYXRpbmdMb2FkID0gZmFs
c2U7CiAKLSAgICBRV2ViUGFnZSogd2ViUGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKTsKLSAgICBp
ZiAod2FzT3JpZ2luYXRpbmdMb2FkICYmIHdlYlBhZ2UpCi0gICAgICAgIGVtaXQgd2ViUGFnZS0+
bG9hZEZpbmlzaGVkKG9rKTsKLSAgICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRGaW5pc2hlZChvayk7
CisgICAgbV93ZWJGcmFtZS0+ZW1pdExvYWRGaW5pc2hlZCh3YXNPcmlnaW5hdGluZ0xvYWQsIG9r
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuaAppbmRleCAwMzEwMmRlM2UyYjNhY2ZjNjg3NGIwZWU4YmExNTUw
Y2RhNGJhMzJjLi5mYjNhNmFhMTQ5ZmFjMTFjZGY4YWNkYzJmYTRmMmY1NWZhMjFhNTJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaApAQCAtMzAsMTQgKzMwLDEzIEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50UXRf
aAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudFF0X2gKIAotCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIldlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKKyNpbmNsdWRlICJXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIgogI2luY2x1ZGUg
PFFVcmw+CiAjaW5jbHVkZSA8cW9iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC00OSw2ICs0OCw3IEBAIGNsYXNzIFFOZXR3b3JrUmVwbHk7CiBRVF9FTkRfTkFNRVNQQUNFCiAK
IGNsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXI7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjUsOCArNjUsOCBAQCBzdHJ1Y3QgTG9hZEVycm9yUmVzZXRUb2tlbjsK
IGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIEZyYW1l
TG9hZGVyQ2xpZW50IHsKICAgICBRX09CSkVDVAogCi0gICAgZnJpZW5kIGNsYXNzIDo6UVdlYkZy
YW1lOwotICAgIHZvaWQgY2FsbFBvbGljeUZ1bmN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVu
Y3Rpb24sIFBvbGljeUFjdGlvbiBhY3Rpb24pOworICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJGcmFt
ZUFkYXB0ZXI7CisgICAgdm9pZCBjYWxsUG9saWN5RnVuY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlv
biwgUG9saWN5QWN0aW9uKTsKICAgICBib29sIGNhbGxFcnJvclBhZ2VFeHRlbnNpb24oY29uc3Qg
UmVzb3VyY2VFcnJvciYpOwogCiBRX1NJR05BTFM6CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoK
ICAgICB+RnJhbWVMb2FkZXJDbGllbnRRdCgpOwogICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRl
ckRlc3Ryb3llZCgpOwogCi0gICAgdm9pZCBzZXRGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBG
cmFtZSogZnJhbWUpOworICAgIHZvaWQgc2V0RnJhbWUoUVdlYkZyYW1lQWRhcHRlciosIEZyYW1l
Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OyAvLyBtYWlubHkgZm9y
IGFzc2VydGlvbnMKIApAQCAtMTI4LDkgKzEyOCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlv
bkFjdGlvbiYpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFNob3coKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKEZyYW1lUG9saWN5RnVuY3Rp
b24gZnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29u
c3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1l
UG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24m
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4p
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKEZyYW1l
UG9saWN5RnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgV2Vi
Q29yZTo6TmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5
RnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwogICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxQb2xpY3lDaGVjaygpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5h
YmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwpAQCAt
MjA0LDggKzIwNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVGcmFt
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBvd25lckVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwg
aW50IG1hcmdpbkhlaWdodCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVG
cmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1h
cmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2lk
Z2V0PiBjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29u
c3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBj
b25zdCBTdHJpbmcmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGVQbHVnaW4oV2lk
Z2V0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCog
cGx1Z2luV2lkZ2V0KTsKQEAgLTIyNyw2ICsyMjYsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBL
VVJMJiBsYXN0UmVxdWVzdGVkVXJsKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdGVkVXJs
OyB9CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHZpcnR1YWwga2V5d29yZCBvbmNlIEZyYW1lTG9h
ZGVyQ2xpZW5RdCBoYXMgbW92ZWQgZnJvbSBXS1dpZGdldHMgdG8gV0sxLgorICAgIHZpcnR1YWwg
UVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUoKSBjb25zdDsKKwogICAgIHN0YXRpYyBib29sIGR1
bXBGcmFtZUxvYWRlckNhbGxiYWNrczsKICAgICBzdGF0aWMgYm9vbCBkdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrOwogICAgIHN0YXRpYyBib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
ZXJDYWxsYmFja3M7CkBAIC0yNTEsNyArMjUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRM
b2FkRmluaXNoZWQoYm9vbCBvayk7CiAKICAgICBGcmFtZSAqbV9mcmFtZTsKLSAgICBRV2ViRnJh
bWUgKm1fd2ViRnJhbWU7CisgICAgUVdlYkZyYW1lQWRhcHRlciAqbV93ZWJGcmFtZTsKICAgICBS
ZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAKICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRp
cmVjdCBkYXRhIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5jcHAKaW5kZXggN2U5OTYyNGI1ODM5NjMx
MDRjMjA2MDY2MTZlZjlmZGVlMGUwMGZjYS4uMGY2Y2UwMTI5NTcwYzNmMjE0ZjRlNjAzNmZmYjg2
NzU4ZTNhYTYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmNwcApAQCAtMTgsMjkgKzE4LDI3IEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0UXQuaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJmcmFt
ZV9wLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYnNldHRp
bmdzLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCisKICNpbmNsdWRlIDxRTmV0d29y
a0FjY2Vzc01hbmFnZXI+CiAjaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+CiAjaW5jbHVkZSA8UU5l
dHdvcmtDb29raWVKYXI+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhbWVOZXR3b3JraW5n
Q29udGV4dFF0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQoRnJhbWUqIGZyYW1lLCBRT2JqZWN0
KiBvcmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZpbmdFbmFibGVkLCBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKQorRnJhbWVOZXR3b3JraW5nQ29udGV4
dFF0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQoRnJhbWUqIGZyYW1lLCBRT2JqZWN0KiBvcmln
aW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZpbmdFbmFibGVkKQogICAgIDogRnJhbWVOZXR3
b3JraW5nQ29udGV4dChmcmFtZSkKICAgICAsIG1fb3JpZ2luYXRpbmdPYmplY3Qob3JpZ2luYXRp
bmdPYmplY3QpCi0gICAgLCBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyKG5ldHdvcmtBY2Nlc3NNYW5h
Z2VyKQogICAgICwgbV9taW1lU25pZmZpbmdFbmFibGVkKG1pbWVTbmlmZmluZ0VuYWJsZWQpCiB7
CiB9CiAKLVBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0PiBGcmFtZU5ldHdvcmtp
bmdDb250ZXh0UXQ6OmNyZWF0ZShGcmFtZSogZnJhbWUsIFFPYmplY3QqIG9yaWdpbmF0aW5nT2Jq
ZWN0LCBib29sIG1pbWVTbmlmZmluZ0VuYWJsZWQsIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0
d29ya0FjY2Vzc01hbmFnZXIpCitQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdD4g
RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBRT2JqZWN0KiBv
cmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZpbmdFbmFibGVkKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KGZyYW1lLCBvcmlnaW5hdGlu
Z09iamVjdCwgbWltZVNuaWZmaW5nRW5hYmxlZCwgbmV0d29ya0FjY2Vzc01hbmFnZXIpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdChmcmFtZSwgb3Jp
Z2luYXRpbmdPYmplY3QsIG1pbWVTbmlmZmluZ0VuYWJsZWQpKTsKIH0KIAogUU9iamVjdCogRnJh
bWVOZXR3b3JraW5nQ29udGV4dFF0OjpvcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0CkBAIC01MCw3
ICs0OCw3IEBAIFFPYmplY3QqIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6b3JpZ2luYXRpbmdP
YmplY3QoKSBjb25zdAogCiBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIEZyYW1lTmV0d29ya2luZ0Nv
bnRleHRRdDo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdAogewotICAgIHJldHVybiAocW9i
amVjdF9jYXN0PFFXZWJGcmFtZSo+KG1fb3JpZ2luYXRpbmdPYmplY3QpKS0+cGFnZSgpLT5uZXR3
b3JrQWNjZXNzTWFuYWdlcigpOworICAgIHJldHVybiBRV2ViUGFnZUFkYXB0ZXI6OmtpdChmcmFt
ZSgpLT5wYWdlKCkpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOwogfQogCiBib29sIEZyYW1lTmV0
d29ya2luZ0NvbnRleHRRdDo6bWltZVNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRR
dC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250
ZXh0UXQuaAppbmRleCBjOTVlNjMwYWMyMTRkZGRjOWQ2ODhhOTMzYzBjNzllZjY5ODg0ZDBhLi5i
NThhYmU0OGQ5YjhiZTdmZjlhM2FiNTZkZDA3MDM1MDZmNTBjZmMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4
dFF0LmgKQEAgLTI2LDEwICsyNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZy
YW1lTmV0d29ya2luZ0NvbnRleHRRdCA6IHB1YmxpYyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ+
IGNyZWF0ZShGcmFtZSosIFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1pbWVTbmlm
ZmluZ0VuYWJsZWQsIFFOZXR3b3JrQWNjZXNzTWFuYWdlciopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdD4gY3JlYXRlKEZyYW1lKiwgUU9iamVjdCogb3Jp
Z2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCk7CiAKIHByaXZhdGU6Ci0g
ICAgRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KEZyYW1lKiwgUU9iamVjdCogb3JpZ2luYXRpbmdP
YmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKik7
CisgICAgRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0KEZyYW1lKiwgUU9iamVjdCogb3JpZ2luYXRp
bmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCk7CiAKICAgICB2aXJ0dWFsIFFPYmpl
Y3QqIG9yaWdpbmF0aW5nT2JqZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBRTmV0d29ya0FjY2Vz
c01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3Q7CkBAIC0zNyw3ICszNyw2IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXNz
aW9uKGNvbnN0IFFVcmwmKSBjb25zdDsKIAogICAgIFFPYmplY3QqIG1fb3JpZ2luYXRpbmdPYmpl
Y3Q7Ci0gICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyOwog
ICAgIGJvb2wgbV9taW1lU25pZmZpbmdFbmFibGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcAppbmRleCAzYjI0
NGM2NTczMzJmOTgyOTA3ODYxZDVlNDc0ZDg0ZjdhMTE0YWQyLi4yNWUzNTdhYmE1MmQ0MmVjNmEx
ZGViZTczYTI5MGU4N2I5ZDQzNjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcApAQCAtMjMsNyArMjMsNiBAQAogCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKICNpZiBVU0UoUVRfTVVMVElNRURJQSkKLSNpbmNs
dWRlICJGdWxsU2NyZWVuVmlkZW9XaWRnZXQuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVRdC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00MCwxMCArMzksOCBA
QAogI2VuZGlmCiAKICNpZiBVU0UoUVRfTVVMVElNRURJQSkKLSNpbmNsdWRlIDxRR3JhcGhpY3NW
aWRlb0l0ZW0+CiAjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgogI2VuZGlmCi0jaW5jbHVkZSA8UVdp
ZGdldD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MCw0OSArODcsNiBAQCB2b2lkIEdT
dHJlYW1lckZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkKIH0KICNlbmRp
ZgogCi0jaWYgVVNFKFFUX01VTFRJTUVESUEpCi1ib29sIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyOjpzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2sgPSBmYWxzZTsKLQot
RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKCkKLSAgICA6IFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKLSAgICAsIG1fZnVsbFNj
cmVlbldpZGdldChuZXcgRnVsbFNjcmVlblZpZGVvV2lkZ2V0KQotewotICAgIGNvbm5lY3QobV9m
dWxsU2NyZWVuV2lkZ2V0LCBTSUdOQUwoZGlkRXhpdEZ1bGxTY3JlZW4oKSksIHRoaXMsIFNJR05B
TChmdWxsU2NyZWVuQ2xvc2VkKCkpKTsKLSAgICBtX2Z1bGxTY3JlZW5XaWRnZXQtPmhpZGUoKTsK
LQotICAgIG1fZnVsbFNjcmVlbldpZGdldC0+Y2xvc2UoKTsKLX0KLQotRGVmYXVsdEZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXI6On5EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCi17Ci0gICAg
ZGVsZXRlIG1fZnVsbFNjcmVlbldpZGdldDsKLX0KLQotYm9vbCBEZWZhdWx0RnVsbFNjcmVlblZp
ZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0Ci17
Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWluaXRpYWxp
emVkKSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgZm9yY2VGdWxsU2NyZWVuID0gcWdldGVudigiUVRf
V0VCS0lUX0ZPUkNFX0ZVTExTQ1JFRU5fVklERU8iKTsKLSAgICAgICAgaWYgKCFmb3JjZUZ1bGxT
Y3JlZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgc19zaG91bGRGb3JjZUZ1bGxTY3JlZW5WaWRl
b1BsYXliYWNrID0gdHJ1ZTsKLQotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHNfc2hvdWxkRm9yY2VGdWxsU2NyZWVuVmlkZW9QbGF5YmFjazsKLX0KLQot
dm9pZCBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsU2NyZWVuKFFNZWRp
YVBsYXllciogcGxheWVyKQotewotICAgIG1fZnVsbFNjcmVlbldpZGdldC0+c2hvdyhwbGF5ZXIp
OwotfQotCi12b2lkIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpleGl0RnVsbFNjcmVl
bigpCi17Ci0gICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5jbG9zZSgpOwotfQotI2VuZGlmCi0KIEZ1
bGxTY3JlZW5WaWRlb1F0OjpGdWxsU2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCogY2hyb21l
Q2xpZW50KQogICAgIDogbV9jaHJvbWVDbGllbnQoY2hyb21lQ2xpZW50KQogICAgICwgbV92aWRl
b0VsZW1lbnQoMCkKQEAgLTE0MCwxMCArOTQsNyBAQCBGdWxsU2NyZWVuVmlkZW9RdDo6RnVsbFNj
cmVlblZpZGVvUXQoQ2hyb21lQ2xpZW50UXQqIGNocm9tZUNsaWVudCkKICAgICBRX0FTU0VSVCht
X2Nocm9tZUNsaWVudCk7CiAKICNpZiBVU0UoUVRfTVVMVElNRURJQSkKLSAgICBtX0Z1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIgPSBtX2Nocm9tZUNsaWVudC0+bV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkubGVha1B0cigpOwotICAgIGlmICghbV9GdWxsU2NyZWVu
VmlkZW9IYW5kbGVyKQotICAgICAgICBtX0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXIgPSBuZXcgRGVm
YXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI7Ci0KKyAgICBtX0Z1bGxTY3JlZW5WaWRlb0hhbmRs
ZXIgPSBtX2Nocm9tZUNsaWVudC0+Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwogICAg
IGlmIChtX0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXIpCiAgICAgICAgIGNvbm5lY3QobV9GdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyLCBTSUdOQUwoZnVsbFNjcmVlbkNsb3NlZCgpKSwgdGhpcywgU0xPVChh
Ym91dFRvQ2xvc2UoKSkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmgKaW5kZXggMzRiYzkwYzBkOGM5M2NlYTU2ZGZk
MDRmZDgxOGJhNjQ1Zjc0MWExOS4uZGNlM2U1ZmUxYzEwYTIwYWU4NTA4ZmExYmVjZGU5YWNiNjky
YmYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2Ny
ZWVuVmlkZW9RdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNj
cmVlblZpZGVvUXQuaApAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBGdWxsU2NyZWVuVmlkZW9R
dF9oCiAjZGVmaW5lIEZ1bGxTY3JlZW5WaWRlb1F0X2gKIAotI2luY2x1ZGUgInF3ZWJraXRwbGF0
Zm9ybXBsdWdpbi5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIK
ICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCkBAIC02NSwy
NSArNjUsNiBAQCBwcml2YXRlOgogfTsKICNlbmRpZgogCi0vLyBXZSBkbyBub3QgdXNlIEVOQUJM
RSBvciBVU0UgYmVjYXVzZSBtb2MgZG9lcyBub3QgZXhwYW5kIHRoZXNlIG1hY3Jvcy4KLSNpZiBk
ZWZpbmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCi1j
bGFzcyBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVl
blZpZGVvSGFuZGxlciB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBEZWZhdWx0RnVsbFNj
cmVlblZpZGVvSGFuZGxlcigpOwotICAgIHZpcnR1YWwgfkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyKCk7Ci0gICAgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkg
Y29uc3Q7Ci0KLXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRp
YVBsYXllciopOwotICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKLQotcHJpdmF0ZToKLSAgICBz
dGF0aWMgYm9vbCBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2s7Ci0gICAgRnVs
bFNjcmVlblZpZGVvV2lkZ2V0ICptX2Z1bGxTY3JlZW5XaWRnZXQ7Ci19OwotI2VuZGlmCi0KIGNs
YXNzIEZ1bGxTY3JlZW5WaWRlb1F0IDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JKRUNUCiBw
dWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxT
Y3JlZW5WaWRlb1dpZGdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1
bGxTY3JlZW5WaWRlb1dpZGdldC5jcHAKaW5kZXggYmI1ZTJiOWY2MTJmNjU1MGNiZmVkMTJmZDgz
YmIzYzA3ZTc1NzQ0Yi4uNDEwNWQwMmM2MjI1N2M1NDk5MDZmZWM1MTVmNGY3NmQ0ZWE4YjdkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlk
ZW9XaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNj
cmVlblZpZGVvV2lkZ2V0LmNwcApAQCAtMjUsNiArMjUsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCisjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnVsbFNjcmVlblZpZGVvV2lkZ2V0
LmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CkBAIC0zNSw3ICszNiw3IEBACiAKIHN0YXRp
YyBjb25zdCBpbnQgZ0hpZGVNb3VzZUN1cnNvckRlbGF5ID0gMzAwMDsKIAotbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIFdlYktpdCB7CiAKIEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6RnVs
bFNjcmVlblZpZGVvV2lkZ2V0KCkKICAgICA6IFFWaWRlb1dpZGdldCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaApp
bmRleCA3ZTdmOGRmMWM2ZTFjMDI3MDAzMTgzZmI2MjNjYmUxODAxMmNkOWRiLi4yMDFjYzQ5ZDFl
NDEyZTk4N2I2ZTQxY2M1MDNkZDIyZTNkNDc2YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgKQEAgLTM1LDcg
KzM1LDcgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRTWVkaWFQbGF5ZXI7CiBRVF9FTkRf
TkFNRVNQQUNFCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBGdWxsU2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsKICAgICBR
X09CSkVDVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRRdC5jcHAKaW5kZXggYjZiNGQ3MGJkMTBhODdjODMxOWZlMTk3OGM3Njlk
MTJiNjk5OTM4Ni4uMjZkMWI0MDdhOGNiMDNiZTE1NWZjODE4ZmU5Mjg2Y2M4NjUzYTNkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVu
dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
Q2xpZW50UXQuY3BwCkBAIC0zMywxMCArMzMsOCBAQAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9z
aXRpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAicXdlYmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKLSNpbmNs
dWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJRV2Vi
RnJhbWVBZGFwdGVyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAKICNpbmNsdWRl
IDxRdExvY2F0aW9uL1FHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+CiAKQEAgLTQ0LDggKzQyLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciBmYWlsZWRUb1N0YXJ0U2Vy
dmljZUVycm9yTWVzc2FnZVtdID0gIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNl
IjsKIAotR2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdChjb25zdCBRV2Vi
UGFnZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQorR2VvbG9jYXRpb25DbGllbnRRdDo6R2Vv
bG9jYXRpb25DbGllbnRRdChjb25zdCBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UpCisgICAgOiBtX3dl
YlBhZ2UocGFnZSkKICAgICAsIG1fbGFzdFBvc2l0aW9uKDApCiAgICAgLCBtX2xvY2F0aW9uKDAp
CiB7CkBAIC04NSwxMiArODMsOSBAQCB2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnBvc2l0aW9u
VXBkYXRlZChjb25zdCBRR2VvUG9zaXRpb25JbmZvJiBnZW9Qb3NpdGlvbikKIAogICAgIGRvdWJs
ZSB0aW1lU3RhbXBJblNlY29uZHMgPSBnZW9Qb3NpdGlvbi50aW1lc3RhbXAoKS50b01TZWNzU2lu
Y2VFcG9jaCgpIC8gMTAwMDsKIAotICAgIG1fbGFzdFBvc2l0aW9uID0gR2VvbG9jYXRpb25Qb3Np
dGlvbjo6Y3JlYXRlKHRpbWVTdGFtcEluU2Vjb25kcywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeSwg
cHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFj
Y3VyYWN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworICAgIG1f
bGFzdFBvc2l0aW9uID0gR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3JlYXRlKHRpbWVTdGFtcEluU2Vj
b25kcywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFs
dGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3Zp
ZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOwogCi0gICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShtX3BhZ2UpOworICAgIFdlYkNv
cmU6OlBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25Db250cm9s
bGVyOjpmcm9tKHBhZ2UpLT5wb3NpdGlvbkNoYW5nZWQobV9sYXN0UG9zaXRpb24uZ2V0KCkpOwog
fQogCkBAIC0xMDAsNyArOTUsNyBAQCB2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0YXJ0VXBk
YXRpbmcoKQogICAgICAgICBjb25uZWN0KG1fbG9jYXRpb24sIFNJR05BTChwb3NpdGlvblVwZGF0
ZWQoUUdlb1Bvc2l0aW9uSW5mbykpLCB0aGlzLCBTTE9UKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9z
aXRpb25JbmZvKSkpOwogCiAgICAgaWYgKCFtX2xvY2F0aW9uKSB7Ci0gICAgICAgIFdlYkNvcmU6
OlBhZ2UqIHBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUobV9wYWdlKTsKKyAgICAgICAgV2Vi
Q29yZTo6UGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+cGFnZTsKICAgICAgICAgUmVmUHRyPFdlYkNv
cmU6Okdlb2xvY2F0aW9uRXJyb3I+IGVycm9yID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKEdl
b2xvY2F0aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNl
RXJyb3JNZXNzYWdlKTsKICAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9tKHBhZ2Up
LT5lcnJvck9jY3VycmVkKGVycm9yLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTI0LDE0
ICsxMTksMTQgQEAgdm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpzZXRFbmFibGVIaWdoQWNjdXJh
Y3koYm9vbCkKIHZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oR2Vv
bG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewogICAgIEFTU0VSVChnZW9sb2NhdGlvbik7Ci0gICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+
ZnJhbWUoKSk7CisgICAgUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBRV2ViRnJhbWVBZGFw
dGVyOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0
aW9uUGVybWlzc2lvbkZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKIHZvaWQg
R2VvbG9jYXRpb25DbGllbnRRdDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24q
IGdlb2xvY2F0aW9uKQogewogICAgIEFTU0VSVChnZW9sb2NhdGlvbik7Ci0gICAgUVdlYkZyYW1l
KiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+ZnJhbWUoKSk7
CisgICAgUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBRV2ViRnJhbWVBZGFwdGVyOjpraXQo
Z2VvbG9jYXRpb24tPmZyYW1lKCkpOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5o
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgK
aW5kZXggMmU5NGJkZWJjMmJkNTc4ZDVmMWY0MWZjZjZiMWIwMzMwMzgzMmFmMi4uYzIyODc4Njdm
YmU5MGQ5Y2Y0NzYxMDNhMzZjN2UyMzgzYmQzNjRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKQEAgLTI4LDE2ICsy
OCwxNiBAQAogCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnQuaCIKIAorI2luY2x1ZGUgPFFH
ZW9Qb3NpdGlvbkluZm8+CiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKLSNpbmNsdWRlIDxRdExvY2F0aW9uL1FHZW9Qb3NpdGlvbkluZm8+CiBRVF9CRUdJTl9O
QU1FU1BBQ0UKIGNsYXNzIFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U7CiBRVF9FTkRfTkFNRVNQQUNF
CiAKIAotY2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBHZW9sb2NhdGlvbkNsaWVudFF0
IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBHZW9sb2NhdGlvbkNsaWVudCB7CiAgICAgUV9PQkpF
Q1QKIAogcHVibGljOgotICAgIEdlb2xvY2F0aW9uQ2xpZW50UXQoY29uc3QgUVdlYlBhZ2UqKTsK
KyAgICBHZW9sb2NhdGlvbkNsaWVudFF0KGNvbnN0IFFXZWJQYWdlQWRhcHRlciopOwogICAgIHZp
cnR1YWwgfkdlb2xvY2F0aW9uQ2xpZW50UXQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW9sb2Nh
dGlvbkRlc3Ryb3llZCgpOwpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlIFFfU0xPVFM6CiAgICAg
dm9pZCBwb3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyYpOwogCiBwcml2YXRl
OgotICAgIGNvbnN0IFFXZWJQYWdlKiBtX3BhZ2U7CisgICAgY29uc3QgUVdlYlBhZ2VBZGFwdGVy
KiBtX3dlYlBhZ2U7CiAgICAgUmVmUHRyPEdlb2xvY2F0aW9uUG9zaXRpb24+IG1fbGFzdFBvc2l0
aW9uOwogICAgIFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRpb247CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAppbmRleCA3NTAwZTk5M2ZkYjlmZmJlZTEwYTNmODZh
MDY4YzUzZmQ4M2Q4ODlmLi45N2VmOTI2YTcxOTIwYzBkYWE1MmM5NGFlNGYzYzAwMzU3Mjg1NDFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcApAQCAtMzEsMTEgKzMxLDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQuaCIKIAorI2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0Z2xvYmFsLmgiCiAjaW5jbHVkZSAi
R2VvbG9jYXRpb24uaCIKLQotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJr
aXRnbG9iYWwuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFk
YXB0ZXIuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02MCwzNiArNTksMzAgQEAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6
On5HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpCiB7CiB9CiAKLXZvaWQgR2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFt
ZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVuZXIpCit2b2lkIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUsIEdlb2xvY2F0aW9uKiBsaXN0ZW5lcikK
IHsKICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5zZXJ0KHdlYkZyYW1lLCBsaXN0
ZW5lcik7CiAKLSAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7Ci0gICAgZW1p
dCBwYWdlLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZCh3ZWJGcmFtZSwgUVdlYlBhZ2U6Okdl
b2xvY2F0aW9uKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFkYXB0ZXI6
OmtpdCh3ZWJGcmFtZS0+ZnJhbWUtPnBhZ2UoKSk7CisgICAgcGFnZS0+Z2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdGVkKHdlYkZyYW1lKTsKIH0KIAogCi12b2lkIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUo
UVdlYkZyYW1lKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQordm9pZCBHZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dEZvckZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVu
ZXIpCiB7CiAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJGcmFtZSk7
CiAKLSAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7Ci0gICAgZW1pdCBwYWdl
LT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RDYW5jZWxlZCh3ZWJGcmFtZSwgUVdlYlBhZ2U6Okdl
b2xvY2F0aW9uKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFkYXB0ZXI6
OmtpdCh3ZWJGcmFtZS0+ZnJhbWUtPnBhZ2UoKSk7CisgICAgcGFnZS0+Z2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdENhbmNlbGxlZCh3ZWJGcmFtZSk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24oUVdlYkZyYW1lKiB3ZWJGcmFtZSwgUVdl
YlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kgcGVybWlzc2lvbikKK3ZvaWQgR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24oUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUs
IGJvb2wgZ3JhbnRlZCkKIHsgIAogICAgIGlmICghbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3Rz
LmNvbnRhaW5zKHdlYkZyYW1lKSkgCiAgICAgICAgIHJldHVybjsKIAogICAgIEdlb2xvY2F0aW9u
KiBsaXN0ZW5lciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy52YWx1ZSh3ZWJGcmFtZSk7
Ci0KLSAgICBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWRCeVVz
ZXIpCi0gICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQodHJ1ZSk7Ci0gICAgZWxzZSBpZiAo
cGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkRlbmllZEJ5VXNlcikKLSAgICAgICAg
bGlzdGVuZXItPnNldElzQWxsb3dlZChmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47
CisgICAgbGlzdGVuZXItPnNldElzQWxsb3dlZChncmFudGVkKTsKIAogICAgIG1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUod2ViRnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5o
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdC5oCmluZGV4IDFiNDU0MGQ4N2I2NDRiNzZiYWM1MGNiZGMwOTAyZjEwN2RkY2M1N2Eu
LjcxMTgzYjQ5N2ZhOTc4Y2M1MDBjYzU1ODc2NjFlOTc3YTA0MDk1MWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0LmgKQEAgLTM0LDEyICszNCwxMSBAQAogI2lmIEVOQUJMRShHRU9MT0NB
VElPTikKIAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIK
IAogI2luY2x1ZGUgPFFIYXNoPgogCi1jbGFzcyBRV2ViRnJhbWU7Ci1jbGFzcyBRV2ViUGFnZTsK
K2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXI7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsMTMgKzQ3LDEzIEBAIHB1YmxpYzoKICAgICBHZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdCgpOwogICAgIH5HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdCgpOwogCi0gICAgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUo
UVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKLSAgICB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbiopOwotICAgIHZv
aWQgc2V0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSk7
CisgICAgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1l
QWRhcHRlciosIEdlb2xvY2F0aW9uKik7CisgICAgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0Rm9yRnJhbWUoUVdlYkZyYW1lQWRhcHRlciosIEdlb2xvY2F0aW9uKik7Cisg
ICAgdm9pZCBzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZUFkYXB0ZXIqLCBib29sIC8qZ3JhbnRlZCov
KTsKIAogICAgIHN0YXRpYyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogZ2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50KCk7CiBwcml2YXRlOgotICAgIFFIYXNoPFFXZWJGcmFtZSosIEdl
b2xvY2F0aW9uKj4gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzOworICAgIFFIYXNoPFFXZWJG
cmFtZUFkYXB0ZXIqLCBHZW9sb2NhdGlvbio+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5p
dFdlYkNvcmVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJD
b3JlUXQuY3BwCmluZGV4IGQ2MDY1YzE0ZTVhNjQyMTljYzExNDk1MGFjOWM3NmM3MmQ5NTRhMTUu
LjkwOTM5ZDZhMjk3YTEzY2IwOTlhY2I2ODQ1ZmZmMWFhZjdkY2QyNDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApAQCAtNDIsMjEg
KzQyLDMzIEBACiAjaW5jbHVkZSAiV2ViU3lzdGVtSW50ZXJmYWNlLmgiCiAjZW5kaWYKIAotI2lu
Y2x1ZGUgInF3ZWJlbGVtZW50X3AuaCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmVsZW1lbnRfcC5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5o
PgotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRU3R5bGU+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIENhbGxlZCBhbHNv
IGZyb20gV2ViS2l0MidzIFdlYlByb2Nlc3MuCi1RX0RFQ0xfRVhQT1JUIHZvaWQgaW5pdGlhbGl6
ZVdlYktpdDJUaGVtZSgpCitzdGF0aWMgUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBpbml0Q2FsbGJh
Y2sgPSAwOworCit2b2lkIHNldFdlYktpdFdpZGdldHNJbml0Q2FsbGJhY2soUXRTdHlsZUZhY3Rv
cnlGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICBpZiAocWdldGVudigiUVRfV0VCS0lUX1RIRU1F
X05BTUUiKSA9PSAicXN0eWxlIikgewotICAgICAgICBXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHls
ZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rpb24oV2ViS2l0OjpRU3R5bGVGYWNhZGVJbXA6OmNyZWF0
ZSk7CisgICAgaW5pdENhbGxiYWNrID0gY2FsbGJhY2s7Cit9CisKKy8vIENhbGxlZCBhbHNvIGZy
b20gV2ViS2l0MidzIFdlYlByb2Nlc3MKK1FfREVDTF9FWFBPUlQgdm9pZCBpbml0aWFsaXplV2Vi
S2l0UXQoKQoreworICAgIGlmIChpbml0Q2FsbGJhY2spIHsKKyAgICAgICAgV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKGluaXRDYWxsYmFjayk7CiAg
ICAgICAgIFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldEN1c3RvbVRoZW1lKFdlYkNvcmU6OlJl
bmRlclRoZW1lUVN0eWxlOjpjcmVhdGUsIG5ldyBXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHls
ZSk7CiAgICAgfQorCisgICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOworfQorCitR
X0RFQ0xfRVhQT1JUIHZvaWQgc2V0SW1hZ2VQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKK3sKKyAgICBXZWJDb3JlOjpJbWFnZTo6c2V0UGxh
dGZvcm1SZXNvdXJjZShuYW1lLCBwaXhtYXApOwogfQogCiB9CkBAIC03OSwxOCArOTEsMTAgQEAg
dm9pZCBpbml0aWFsaXplV2ViQ29yZVF0KCkKICAgICBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6aW5p
dGlhbGl6ZSgpOwogICAgIFF0V2ViRWxlbWVudFJ1bnRpbWU6OmluaXRpYWxpemUoKTsKIAotICAg
IFJlbmRlclRoZW1lUVN0eWxlOjpzZXRTdHlsZUZhY3RvcnlGdW5jdGlvbihXZWJLaXQ6OlFTdHls
ZUZhY2FkZUltcDo6Y3JlYXRlKTsKLSAgICBSZW5kZXJUaGVtZVF0OjpzZXRDdXN0b21UaGVtZShS
ZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlLCBuZXcgU2Nyb2xsYmFyVGhlbWVRU3R5bGUpOwotCiAj
aWYgVVNFKFFUS0lUKQogICAgIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKCk7CiAjZW5kaWYK
IAotICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uR3JhcGhpYwotICAgIElt
YWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b24iLCBRQXBwbGljYXRp
b246OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFwKFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24p
KTsKLSAgICAvLyBRV2ViU2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRvblByZXNzZWRHcmFwaGlj
Ci0gICAgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvblByZXNz
ZWQiLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0YW5kYXJkUGl4bWFwKFFTdHlsZTo6U1BfRGlh
bG9nQ2xvc2VCdXR0b24pKTsKLQogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmggYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuaAppbmRleCBkZjFh
YWY3NzYyNzFmZmI3OGFmMDIwNzQzM2RjYmJhNWY3NGQ4YmRjLi5lODRlMGRhZDJlZDU1MWI5ZWNj
ODI2OWVkODhhNTk5ZGUxYmY3OGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luaXRXZWJDb3JlUXQuaApAQCAtMzAsNiArMzAsMjIgQEAKICNpZm5kZWYgSW5pdFdl
YkNvcmVRdF9oCiAjZGVmaW5lIEluaXRXZWJDb3JlUXRfaAogCisjaW5jbHVkZSAicWltYWdlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7CitjbGFzcyBRU3R5bGVGYWNhZGU7
Cit9Cit0eXBlZGVmIFdlYkNvcmU6OlFTdHlsZUZhY2FkZSogKCpRdFN0eWxlRmFjdG9yeUZ1bmN0
aW9uKShXZWJDb3JlOjpQYWdlKik7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIHNldFdl
YktpdFdpZGdldHNJbml0Q2FsbGJhY2soUXRTdHlsZUZhY3RvcnlGdW5jdGlvbik7Cit2b2lkIGlu
aXRpYWxpemVXZWJLaXRRdCgpOwordm9pZCBzZXRJbWFnZVBsYXRmb3JtUmVzb3VyY2UoY29uc3Qg
Y2hhciogLyogbmFtZSAqLywgY29uc3QgUVBpeG1hcCYpOworCit9CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBpbml0aWFsaXplV2ViQ29yZVF0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJLaXRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJLaXRRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE4ODYwMzdk
YTVmOGMxMjVmNjUwNTRjZmU4Y2ZmMTc3MTRkZTRlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmNwcApAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5pdFdlYktp
dFF0LmgiCisKKyNpbmNsdWRlICJJbml0V2ViQ29yZVF0LmgiCisKKyNpbmNsdWRlICJRU3R5bGVG
YWNhZGVJbXAuaCIKKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRU3R5bGU+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRX0RFQ0xfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZVdl
YktpdFdpZGdldHMoKQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Cisg
ICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRXZWJLaXRXaWRn
ZXRzSW5pdENhbGxiYWNrKFFTdHlsZUZhY2FkZUltcDo6Y3JlYXRlKTsKKyAgICBpbml0aWFsaXpl
V2ViS2l0UXQoKTsKKworICAgIC8vIFFXZWJTZXR0aW5nczo6U2VhcmNoQ2FuY2VsQnV0dG9uR3Jh
cGhpYworICAgIHNldEltYWdlUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uIiwg
UUFwcGxpY2F0aW9uOjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Ns
b3NlQnV0dG9uKSk7CisgICAgLy8gUVdlYlNldHRpbmdzOjpTZWFyY2hDYW5jZWxCdXR0b25QcmVz
c2VkR3JhcGhpYworICAgIHNldEltYWdlUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0
dG9uUHJlc3NlZCIsIFFBcHBsaWNhdGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxl
OjpTUF9EaWFsb2dDbG9zZUJ1dHRvbikpOworCisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJL
aXRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMmY1NzExYTgxMzgxMWYyNzFhNjg3N2U2YjUxZGJkZDBhMTg1MTk3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViS2l0
UXQuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBs
YyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEluaXRXZWJLaXRRdF9o
CisjZGVmaW5lIEluaXRXZWJLaXRRdF9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIGlu
aXRpYWxpemVXZWJLaXRXaWRnZXRzKCk7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcAppbmRleCAwMjVh
ZDY1OWRhMDMyYTMyOGM2MWFjNmVmNDkxNDgwNDAwMzg5OGZjLi4xYmZhYTdiNzA3OGZmMGQ3Njkx
OGFmOWU2MjQxMTE3Mjg3Nzc3MmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcApAQCAtMzgsNjIgKzM4LDIyIEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9yU2VydmVyUXQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisjaW5j
bHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIK
LSNpbmNsdWRlICJxd2ViaW5zcGVjdG9yLmgiCi0jaW5jbHVkZSAicXdlYmluc3BlY3Rvcl9wLmgi
Ci0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxd2VicGFnZV9wLmgiCi0jaW5jbHVk
ZSAicXdlYnZpZXcuaCIKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFG
aWxlPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRU2V0dGluZ3M+Cisj
aW5jbHVkZSA8UVVybD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8UXRDb3JlL1FDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8
UXRDb3JlL1FGaWxlPgotI2luY2x1ZGUgPFF0Q29yZS9RU2V0dGluZ3M+Ci0jaW5jbHVkZSA8UXRD
b3JlL1FWYXJpYW50PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBRTGF0
aW4xU3RyaW5nIHNldHRpbmdTdG9yYWdlUHJlZml4KCJRdC9RdFdlYktpdC9RV2ViSW5zcGVjdG9y
LyIpOwogc3RhdGljIGNvbnN0IFFMYXRpbjFTdHJpbmcgc2V0dGluZ1N0b3JhZ2VUeXBlU3VmZml4
KCIudHlwZSIpOwogCi1jbGFzcyBJbnNwZWN0b3JDbGllbnRXZWJQYWdlIDogcHVibGljIFFXZWJQ
YWdlIHsKLSAgICBRX09CSkVDVAotICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JDbGllbnRRdDsK
LXB1YmxpYzoKLSAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKFFPYmplY3QqIHBhcmVudCA9IDAp
Ci0gICAgICAgIDogUVdlYlBhZ2UocGFyZW50KQotICAgIHsKLSAgICAgICAgY29ubmVjdChtYWlu
RnJhbWUoKSwgU0lHTkFMKGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkpLCBTTE9UKGph
dmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkpKTsKLSAgICB9Ci0KLSAgICBRV2ViUGFnZSog
Y3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlKQotICAgIHsKLSAgICAgICAgUVdl
YlZpZXcqIHZpZXcgPSBuZXcgUVdlYlZpZXc7Ci0gICAgICAgIFFXZWJQYWdlKiBwYWdlID0gbmV3
IFFXZWJQYWdlOwotICAgICAgICB2aWV3LT5zZXRQYWdlKHBhZ2UpOwotICAgICAgICB2aWV3LT5z
ZXRBdHRyaWJ1dGUoUXQ6OldBX0RlbGV0ZU9uQ2xvc2UpOwotICAgICAgICByZXR1cm4gcGFnZTsK
LSAgICB9Ci0KLXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgamF2YVNjcmlwdFdpbmRvd09iamVj
dENsZWFyZWQoKSAKLSAgICB7Ci0jaWZuZGVmIFFUX05PX1BST1BFUlRJRVMKLSAgICAgICAgUVZh
cmlhbnQgaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMgPSBwcm9wZXJ0eSgiX3FfaW5z
cGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiKTsKLSAgICAgICAgaWYgKCFpbnNwZWN0b3JK
YXZhU2NyaXB0V2luZG93T2JqZWN0cy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIFFNYXA8UVN0cmluZywgUVZhcmlhbnQ+IGphdmFTY3JpcHROYW1lT2JqZWN0TWFwID0g
aW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMudG9NYXAoKTsKLSAgICAgICAgUVdlYkZy
YW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOwotICAgICAgICBRTWFwPFFTdHJpbmcsIFFWYXJpYW50
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqYXZhU2NyaXB0TmFtZU9iamVjdE1hcC5jb25zdEJlZ2lu
KCk7Ci0gICAgICAgIGZvciAoIDsgaXQgIT0gamF2YVNjcmlwdE5hbWVPYmplY3RNYXAuY29uc3RF
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgUVN0cmluZyBuYW1lID0gaXQua2V5KCk7Ci0gICAg
ICAgICAgICBRVmFyaWFudCB2YWx1ZSA9IGl0LnZhbHVlKCk7Ci0gICAgICAgICAgICBRT2JqZWN0
KiBvYmogPSB2YWx1ZS52YWx1ZTxRT2JqZWN0Kj4oKTsKLSAgICAgICAgICAgIGZyYW1lLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QobmFtZSwgb2JqKTsKLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgfQotfTsKLQogbmFtZXNwYWNlIHsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0xMTIs
NyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChxc2V0dGluZ3Muc3RhdHVzKCkgPT0gUVNl
dHRpbmdzOjpBY2Nlc3NFcnJvcikgewogICAgICAgICAgICAgLy8gUUNvcmVBcHBsaWNhdGlvbjo6
c2V0T3JnYW5pemF0aW9uTmFtZSBhbmQgUUNvcmVBcHBsaWNhdGlvbjo6c2V0QXBwbGljYXRpb25O
YW1lIGhhdmVuJ3QgYmVlbiBjYWxsZWQKICAgICAgICAgICAgIHFXYXJuaW5nKCJRV2ViSW5zcGVj
dG9yOiBRU2V0dGluZ3MgY291bGRuJ3QgcmVhZCBjb25maWd1cmF0aW9uIHNldHRpbmcgWyVzXS4i
LAotICAgICAgICAgICAgICAgICAgICAgcVByaW50YWJsZShzdGF0aWNfY2FzdDxRU3RyaW5nPihu
YW1lKSkpOworICAgICAgICAgICAgICAgIHFQcmludGFibGUoc3RhdGljX2Nhc3Q8UVN0cmluZz4o
bmFtZSkpKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQogCkBAIC0x
MzQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFFTZXR0aW5ncyBxc2V0dGluZ3M7CiAgICAg
ICAgIGlmIChxc2V0dGluZ3Muc3RhdHVzKCkgPT0gUVNldHRpbmdzOjpBY2Nlc3NFcnJvcikgewog
ICAgICAgICAgICAgcVdhcm5pbmcoIlFXZWJJbnNwZWN0b3I6IFFTZXR0aW5ncyBjb3VsZG4ndCBw
ZXJzaXN0IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBbJXNdLiIsCi0gICAgICAgICAgICAgICAgICAg
ICBxUHJpbnRhYmxlKHN0YXRpY19jYXN0PFFTdHJpbmc+KG5hbWUpKSk7CisgICAgICAgICAgICAg
ICAgcVByaW50YWJsZShzdGF0aWNfY2FzdDxRU3RyaW5nPihuYW1lKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE3NSw3ICsxMzUsNyBAQCBwcml2YXRlOgogCiB9CiAK
LUluc3BlY3RvckNsaWVudFF0OjpJbnNwZWN0b3JDbGllbnRRdChRV2ViUGFnZSogcGFnZSkKK0lu
c3BlY3RvckNsaWVudFF0OjpJbnNwZWN0b3JDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIqIHBhZ2Up
CiAgICAgOiBtX2luc3BlY3RlZFdlYlBhZ2UocGFnZSkKICAgICAsIG1fZnJvbnRlbmRXZWJQYWdl
KDApCiAgICAgLCBtX2Zyb250ZW5kQ2xpZW50KDApCkBAIC0yMDQsMTIgKzE2NCwxMiBAQCBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIEluc3BlY3RvckNsaWVudFF0OjpvcGVuSW5z
cGVjdG9yRnJvbnRlbmQoV2ViQwogewogICAgIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZnJvbnRlbmRDaGFubmVsID0gMDsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIE93
blB0cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldyA9IGFkb3B0UHRyKG5ldyBRV2ViVmlldyk7Ci0g
ICAgLy8gRklYTUU6IFdoZXJlIGRvZXMgaW5zcGVjdG9yUGFnZSBnZXQgZGVsZXRlZD8KLSAgICBJ
bnNwZWN0b3JDbGllbnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0gbmV3IEluc3BlY3RvckNsaWVu
dFdlYlBhZ2UoaW5zcGVjdG9yVmlldy5nZXQoKSk7Ci0gICAgaW5zcGVjdG9yVmlldy0+c2V0UGFn
ZShpbnNwZWN0b3JQYWdlKTsKKyAgICBRT2JqZWN0KiB2aWV3ID0gMDsKKyAgICBRV2ViUGFnZUFk
YXB0ZXIqIGluc3BlY3RvclBhZ2UgPSAwOworICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+Y3JlYXRl
V2ViSW5zcGVjdG9yKCZ2aWV3LCAmaW5zcGVjdG9yUGFnZSk7CisgICAgT3duUHRyPFFPYmplY3Q+
IGluc3BlY3RvclZpZXcgPSBhZG9wdFB0cih2aWV3KTsKIAotICAgIFFXZWJJbnNwZWN0b3IqIGlu
c3BlY3RvciA9IG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+Z2V0T3JDcmVhdGVJbnNwZWN0b3IoKTsK
KyAgICBRT2JqZWN0KiBpbnNwZWN0b3IgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPmluc3BlY3Rvckhh
bmRsZSgpOwogICAgIC8vIFJlbW90ZSBmcm9udGVuZCB3YXMgYXR0YWNoZWQuCiAgICAgaWYgKG1f
cmVtb3RlRnJvbnRFbmRDaGFubmVsKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIyOCwyMSArMTg4
LDIwIEBAIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogSW5zcGVjdG9yQ2xpZW50
UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDCiAjaWZuZGVmIFFUX05PX1BST1BFUlRJRVMK
ICAgICBRVmFyaWFudCBpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93T2JqZWN0cyA9IGluc3BlY3Rv
ci0+cHJvcGVydHkoIl9xX2luc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzIik7CiAgICAg
aWYgKGluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzLmlzVmFsaWQoKSkKLSAgICAgICAg
aW5zcGVjdG9yUGFnZS0+c2V0UHJvcGVydHkoIl9xX2luc3BlY3RvckphdmFTY3JpcHRXaW5kb3dP
YmplY3RzIiwgaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMpOworICAgICAgICBpbnNw
ZWN0b3JQYWdlLT5oYW5kbGUoKS0+c2V0UHJvcGVydHkoIl9xX2luc3BlY3RvckphdmFTY3JpcHRX
aW5kb3dPYmplY3RzIiwgaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMpOwogI2VuZGlm
Ci0gICAgaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZChpbnNwZWN0b3JV
cmwpOwotICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yRnJvbnRlbmQgPSBpbnNw
ZWN0b3JWaWV3LmdldCgpOwotICAgIGluc3BlY3Rvci0+ZC0+c2V0RnJvbnRlbmQoaW5zcGVjdG9y
Vmlldy5nZXQoKSk7CisgICAgaW5zcGVjdG9yUGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5sb2Fk
KFFOZXR3b3JrUmVxdWVzdChpbnNwZWN0b3JVcmwpKTsKKyAgICBtX2luc3BlY3RlZFdlYlBhZ2Ut
PnNldEluc3BlY3RvckZyb250ZW5kKGluc3BlY3RvclZpZXcuZ2V0KCkpOwogCiAgICAgLy8gSXMg
J2NvbnRyb2xsZXInIHRoZSBzYW1lIG9iamVjdCBhcyAnaW5zcGVjdG9yQ29udHJvbGxlcicgKHdo
aWNoIGFwcGVhcnMgdG8gYmUgdW51c2VkKT8KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250
cm9sbGVyID0gaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5kLT5wYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCk7Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ+IGZyb250ZW5kQ2xp
ZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQobV9pbnNwZWN0ZWRX
ZWJQYWdlLCBpbnNwZWN0b3JWaWV3LnJlbGVhc2UoKSwgdGhpcykpOworICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBpbnNwZWN0b3JQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCk7CisgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ+IGZyb250ZW5k
Q2xpZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQobV9pbnNwZWN0
ZWRXZWJQYWdlLCBpbnNwZWN0b3JWaWV3LnJlbGVhc2UoKSwgaW5zcGVjdG9yUGFnZS0+cGFnZSwg
dGhpcykpOwogICAgIG1fZnJvbnRlbmRDbGllbnQgPSBmcm9udGVuZENsaWVudC5nZXQoKTsKICAg
ICBjb250cm9sbGVyLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChmcm9udGVuZENsaWVudC5y
ZWxlYXNlKCkpOwogICAgIG1fZnJvbnRlbmRXZWJQYWdlID0gaW5zcGVjdG9yUGFnZTsKIAogICAg
IC8vIFdlYiBJbnNwZWN0b3Igc2hvdWxkIG5vdCBiZWxvbmcgdG8gYW55IG90aGVyIHBhZ2UgZ3Jv
dXBzIHNpbmNlIGl0IGlzIGEgc3BlY2lhbGl6ZWQgZGVidWdnZXIgd2luZG93LgotICAgIG1fZnJv
bnRlbmRXZWJQYWdlLT5oYW5kbGUoKS0+cGFnZS0+c2V0R3JvdXBOYW1lKCJfX1dlYkluc3BlY3Rv
clBhZ2VHcm91cF9fIik7CisgICAgbV9mcm9udGVuZFdlYlBhZ2UtPnBhZ2UtPnNldEdyb3VwTmFt
ZSgiX19XZWJJbnNwZWN0b3JQYWdlR3JvdXBfXyIpOwogICAgIGZyb250ZW5kQ2hhbm5lbCA9IHRo
aXM7CiAjZW5kaWYKICAgICByZXR1cm4gZnJvbnRlbmRDaGFubmVsOwpAQCAtMjczLDcgKzIzMiw3
IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmF0dGFjaEFuZFJlcGxhY2VSZW1vdGVGcm9udGVu
ZChJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBtX3JlbW90ZUZyb250RW5kQ2hhbm5lbCA9IGNoYW5uZWw7Ci0gICAgbV9pbnNwZWN0ZWRXZWJQ
YWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNvbm5lY3RGcm9udGVuZCh0aGlzKTsKKyAg
ICBtX2luc3BlY3RlZFdlYlBhZ2UtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y29ubmVj
dEZyb250ZW5kKHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTI4MSw3ICsyNDAsNyBAQCB2b2lkIElu
c3BlY3RvckNsaWVudFF0OjpkZXRhY2hSZW1vdGVGcm9udGVuZCgpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBtX3JlbW90ZUZyb250RW5kQ2hhbm5lbCA9IDA7Ci0gICAgbV9pbnNwZWN0
ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9udGVuZCgp
OworICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5k
aXNjb25uZWN0RnJvbnRlbmQoKTsKICNlbmRpZgogfQogCkBAIC0yOTIsOSArMjUxLDkgQEAgdm9p
ZCBJbnNwZWN0b3JDbGllbnRRdDo6aGlnaGxpZ2h0KCkKIAogdm9pZCBJbnNwZWN0b3JDbGllbnRR
dDo6aGlkZUhpZ2hsaWdodCgpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbV9pbnNw
ZWN0ZWRXZWJQYWdlLT5kLT5wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPnBhZ2UtPm1haW5GcmFtZSgpOwogICAgIGlmIChm
cmFtZSkgewotICAgICAgICBRUmVjdCByZWN0ID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5tYWluRnJh
bWUoKS0+Z2VvbWV0cnkoKTsKKyAgICAgICAgUVJlY3QgcmVjdCA9IG1faW5zcGVjdGVkV2ViUGFn
ZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5mcmFtZVJlY3QoKTsKICAgICAgICAgaWYgKCFyZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPmludmFsaWRhdGVSZWN0KHJlY3Qp
OwogICAgIH0KQEAgLTMxMSw3ICsyNzAsNyBAQCBib29sIEluc3BlY3RvckNsaWVudFF0OjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGlmICghbV9mcm9u
dGVuZFdlYlBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBhZ2UqIGZyb250ZW5k
UGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShtX2Zyb250ZW5kV2ViUGFnZSk7CisgICAgUGFn
ZSogZnJvbnRlbmRQYWdlID0gbV9mcm9udGVuZFdlYlBhZ2UtPnBhZ2U7CiAgICAgcmV0dXJuIGRv
RGlzcGF0Y2hNZXNzYWdlT25Gcm9udGVuZFBhZ2UoZnJvbnRlbmRQYWdlLCBtZXNzYWdlKTsKICNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE5LDggKzI3OCw4IEBAIGJvb2wgSW5zcGVjdG9y
Q2xpZW50UXQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB9
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5zcGVjdGVkV2ViUGFnZSwgUGFzc093
blB0cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldywgSW5zcGVjdG9yQ2xpZW50UXQqIGluc3BlY3Rv
ckNsaWVudCkKLSAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2Vi
UGFnZS0+ZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JWaWV3LT5wYWdl
KCktPmQtPnBhZ2UsIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JGcm9udGVuZFNldHRpbmdzUXQoKSkp
CitJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFX
ZWJQYWdlQWRhcHRlciogaW5zcGVjdGVkV2ViUGFnZSwgUGFzc093blB0cjxRT2JqZWN0PiBpbnNw
ZWN0b3JWaWV3LCBXZWJDb3JlOjpQYWdlKiBpbnNwZWN0b3JQYWdlLCBJbnNwZWN0b3JDbGllbnRR
dCogaW5zcGVjdG9yQ2xpZW50KQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChp
bnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclBh
Z2UsIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JGcm9udGVuZFNldHRpbmdzUXQoKSkpCiAgICAgLCBt
X2luc3BlY3RlZFdlYlBhZ2UoaW5zcGVjdGVkV2ViUGFnZSkKICAgICAsIG1faW5zcGVjdG9yVmll
dyhpbnNwZWN0b3JWaWV3KQogICAgICwgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyhmYWxzZSkK
QEAgLTM4NiwxMCArMzQ1LDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0
ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKLSAgICAgICAgUVN0cmluZyBjYXB0aW9uID0gUUNv
cmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIi
KS5hcmcobV9pbnNwZWN0ZWRVUkwpOwotICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmlu
c3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlvbik7Ci0gICAgfQorICAgIFFTdHJpbmcgY2Fw
dGlvbiA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2UiLCAiV2ViIEluc3Bl
Y3RvciAtICUyIikuYXJnKG1faW5zcGVjdGVkVVJMKTsKKyAgICBtX2luc3BlY3RlZFdlYlBhZ2Ut
PnNldEluc3BlY3RvcldpbmRvd1RpdGxlKGNhcHRpb24pOwogfQogCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KGJvb2wgbm90aWZ5SW5zcGVjdG9y
Q29udHJvbGxlcikKQEAgLTM5OSwyMCArMzU2LDIwIEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdDo6ZGVzdHJveUluc3BlY3RvclZpZXcoYm9vbCBub3RpZnlJbnNwZWN0b3JDb250cm9s
CiAgICAgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IHRydWU7CiAKICAgICAvLyBJbnNwZWN0
ZWQgcGFnZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLgotICAgIGlmIChtX2luc3Bl
Y3RlZFdlYlBhZ2UgJiYgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKKyAgICBp
ZiAobV9pbnNwZWN0ZWRXZWJQYWdlKSB7CiAgICAgICAgIC8vIENsZWFyIHJlZmVyZW5jZSBmcm9t
IFFXZWJJbnNwZWN0b3IgdG8gdGhlIGZyb250ZW5kIHZpZXcuCi0gICAgICAgIG1faW5zcGVjdGVk
V2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5kLT5zZXRGcm9udGVuZCgwKTsKKyAgICAgICAgbV9pbnNw
ZWN0ZWRXZWJQYWdlLT5zZXRJbnNwZWN0b3JGcm9udGVuZCgwKTsKICAgICB9CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogICAgIGlmIChub3RpZnlJbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAg
ICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzY29ubmVj
dEZyb250ZW5kKCk7CisgICAgICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+cGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKICNlbmRpZgogICAgIGlmIChtX2lu
c3BlY3RvckNsaWVudCkKICAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPnJlbGVhc2VGcm9udGVu
ZFBhZ2UoKTsKIAogICAgIC8vIENsZWFyIHBvaW50ZXIgYmVmb3JlIGRlbGV0aW5nIFdlYlZpZXcg
dG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIGl0cyBkZXN0cnVjdG9yLgotICAgIE93blB0cjxR
V2ViVmlldz4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldy5yZWxlYXNlKCk7CisgICAg
T3duUHRyPFFPYmplY3Q+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXcucmVsZWFzZSgp
OwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3RvckNsaWVudERl
c3Ryb3llZCgpCkBAIC00MjQsNCArMzgxLDMgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dFF0OjppbnNwZWN0b3JDbGllbnREZXN0cm95ZWQoKQogI2VuZGlmCiB9CiAKLSNpbmNsdWRlICJJ
bnNwZWN0b3JDbGllbnRRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKaW5kZXggNDliYTAwMGFkMWEwZGVkZmM0NWZhNGU4
ZWUzMjhlZmFiZTg3YTczNi4uYzZkYTRkNjFjNTc0MjdkODRiNzVjYTdiODcwYzZiZTMxYWFjZDQ4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50UXQuaApAQCAtMzMsMTEgKzMzLDE0IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgotI2luY2x1ZGUgPFF0Q29yZS9RU3RyaW5nPgor
CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRU3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIGNsYXNzIFFXZWJQYWdlOwogY2xhc3Mg
UVdlYlZpZXc7CiAKQEAgLTQ4LDcgKzUxLDcgQEAgY2xhc3MgUGFnZTsKIAogY2xhc3MgSW5zcGVj
dG9yQ2xpZW50UXQgOiBwdWJsaWMgSW5zcGVjdG9yQ2xpZW50LCBwdWJsaWMgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsIHsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JDbGllbnRRdChRV2ViUGFnZSop
OworICAgIEluc3BlY3RvckNsaWVudFF0KFFXZWJQYWdlQWRhcHRlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCkBAIC02Nyw4ICs3MCw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRldGFjaFJlbW90ZUZyb250ZW5kKCk7CiAKIHByaXZhdGU6Ci0gICAgUVdlYlBh
Z2UqIG1faW5zcGVjdGVkV2ViUGFnZTsKLSAgICBRV2ViUGFnZSogbV9mcm9udGVuZFdlYlBhZ2U7
CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBtX2luc3BlY3RlZFdlYlBhZ2U7CisgICAgUVdlYlBhZ2VB
ZGFwdGVyKiBtX2Zyb250ZW5kV2ViUGFnZTsKICAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0
KiBtX2Zyb250ZW5kQ2xpZW50OwogICAgIGJvb2wgbV9yZW1vdGVJbnNwZWN0b3I7CiAgICAgSW5z
cGVjdG9yU2VydmVyUmVxdWVzdEhhbmRsZXJRdCogbV9yZW1vdGVGcm9udEVuZENoYW5uZWw7CkBA
IC03OCw3ICs4MSw3IEBAIHByaXZhdGU6CiAKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
UXQgOiBwdWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB7CiBwdWJsaWM6Ci0gICAg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5zcGVjdGVkV2ViUGFnZSwgUGFz
c093blB0cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldywgSW5zcGVjdG9yQ2xpZW50UXQqIGluc3Bl
Y3RvckNsaWVudCk7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZUFkYXB0
ZXIqIGluc3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25QdHI8UU9iamVjdD4gaW5zcGVjdG9yVmlldywg
V2ViQ29yZTo6UGFnZSogaW5zcGVjdG9yUGFnZSwgSW5zcGVjdG9yQ2xpZW50UXQqKTsKICAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZnJvbnRlbmRMb2FkZWQoKTsKQEAgLTkzLDcgKzk2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hXaW5kb3coKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwog
CiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdV
UkwpOwogCkBAIC0xMDIsOCArMTA1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZVdpbmRvd1RpdGxlKCk7CiAgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmlldyhib29sIG5v
dGlmeUluc3BlY3RvckNvbnRyb2xsZXIpOwotICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBh
Z2U7Ci0gICAgT3duUHRyPFFXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7CisgICAgUVdlYlBhZ2VB
ZGFwdGVyKiBtX2luc3BlY3RlZFdlYlBhZ2U7CisgICAgT3duUHRyPFFPYmplY3Q+IG1faW5zcGVj
dG9yVmlldzsKICAgICBRU3RyaW5nIG1faW5zcGVjdGVkVVJMOwogICAgIGJvb2wgbV9kZXN0cm95
aW5nSW5zcGVjdG9yVmlldzsKICAgICBJbnNwZWN0b3JDbGllbnRRdCogbV9pbnNwZWN0b3JDbGll
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudFdlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXZWJQYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzQ3MzBiMzI5NTg1ODc4YzA1MmU0
YWZiMTk4NWJhMDRiZTM3NDNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXZWJQYWdlLmNwcApAQCAtMCwwICsxLDcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVu
dFdlYlBhZ2UuaCIKKworI2luY2x1ZGUgPHF3ZWJmcmFtZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCitJbnNwZWN0b3JDbGllbnRXZWJQYWdlOjpJbnNwZWN0b3JDbGllbnRXZWJQYWdl
KCkKK3sKKyAgICBRV2ViVmlldyogdmlldyA9IG5ldyBRV2ViVmlldzsKKyAgICB2aWV3LT5zZXRQ
YWdlKHRoaXMpOworICAgIHNldFBhcmVudCh2aWV3KTsKKyAgICBjb25uZWN0KG1haW5GcmFtZSgp
LCBTSUdOQUwoamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKSksIFNMT1QoamF2YVNjcmlw
dFdpbmRvd09iamVjdENsZWFyZWQoKSkpOworfQorCitRV2ViUGFnZSogSW5zcGVjdG9yQ2xpZW50
V2ViUGFnZTo6Y3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlKQoreworICAgIFFX
ZWJWaWV3KiB2aWV3ID0gbmV3IFFXZWJWaWV3OworICAgIFFXZWJQYWdlKiBwYWdlID0gbmV3IFFX
ZWJQYWdlOworICAgIHZpZXctPnNldFBhZ2UocGFnZSk7CisgICAgdmlldy0+c2V0QXR0cmlidXRl
KFF0OjpXQV9EZWxldGVPbkNsb3NlKTsKKyAgICByZXR1cm4gcGFnZTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDbGllbnRXZWJQYWdlOjpqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpCit7Cisg
ICAgUVZhcmlhbnQgaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMgPSBwcm9wZXJ0eSgi
X3FfaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiKTsKKyAgICBpZiAoIWluc3BlY3Rv
ckphdmFTY3JpcHRXaW5kb3dPYmplY3RzLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFFNYXA8UVN0cmluZywgUVZhcmlhbnQ+IGphdmFTY3JpcHROYW1lT2JqZWN0TWFwID0gaW5zcGVj
dG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMudG9NYXAoKTsKKyAgICBRV2ViRnJhbWUqIGZyYW1l
ID0gbWFpbkZyYW1lKCk7CisgICAgUU1hcDxRU3RyaW5nLCBRVmFyaWFudD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gamF2YVNjcmlwdE5hbWVPYmplY3RNYXAuY29uc3RCZWdpbigpOworICAgIGZvciAo
IDsgaXQgIT0gamF2YVNjcmlwdE5hbWVPYmplY3RNYXAuY29uc3RFbmQoKTsgKytpdCkgeworICAg
ICAgICBRU3RyaW5nIG5hbWUgPSBpdC5rZXkoKTsKKyAgICAgICAgUVZhcmlhbnQgdmFsdWUgPSBp
dC52YWx1ZSgpOworICAgICAgICBRT2JqZWN0KiBvYmogPSB2YWx1ZS52YWx1ZTxRT2JqZWN0Kj4o
KTsKKyAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChuYW1lLCBvYmop
OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudFdlYlBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODdmMjliMGNmNTIxOWRm
YWEwNGZiM2U4ZmM1NzhmZGRhZWEwOGFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXZWJQYWdlLmgKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIEluc3BlY3RvckNsaWVudFdlYlBhZ2VfaAorI2RlZmluZSBJ
bnNwZWN0b3JDbGllbnRXZWJQYWdlX2gKKworI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVk
ZSA8cXdlYnZpZXcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEluc3BlY3RvckNs
aWVudFdlYlBhZ2UgOiBwdWJsaWMgUVdlYlBhZ2UgeworICAgIFFfT0JKRUNUCisgICAgZnJpZW5k
IGNsYXNzIEluc3BlY3RvckNsaWVudFF0OworcHVibGljOgorICAgIEluc3BlY3RvckNsaWVudFdl
YlBhZ2UoKTsKKworICAgIFFXZWJQYWdlKiBjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRv
d1R5cGUpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIGphdmFTY3JpcHRXaW5kb3dPYmpl
Y3RDbGVhcmVkKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIElu
c3BlY3RvckNsaWVudFdlYlBhZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcAppbmRleCA2NWJiYWQwZjA5NDBkN2RkZmRi
NTY1ZDc2ODcxOWY0YjA0NTBiOTBjLi5lZGNmZGE3MmI4ZWE2NTcwMzUwODc0MjlhMzJkODkwMGU5
YjRlMDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvclNlcnZlclF0LmNwcApAQCAtMjAsMTkgKzIwLDE4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU2VydmVyUXQuaCIKIAorI2luY2x1ZGUgIi4uL0FwaS9x
aHR0cGhlYWRlcl9wLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgInFo
dHRwaGVhZGVyX3AuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdl
X3AuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VB
ZGFwdGVyLmgiCiAjaW5jbHVkZSA8UUZpbGU+CiAjaW5jbHVkZSA8UVN0cmluZz4KICNpbmNsdWRl
IDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVGNwU2VydmVyPgogI2luY2x1ZGUgPFFUY3BTb2Nr
ZXQ+CiAjaW5jbHVkZSA8UVVybD4KLSNpbmNsdWRlIDxRV2lkZ2V0PgogI2luY2x1ZGUgPHFlbmRp
YW4uaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgpAQCAtMjI0LDEyICsyMjMsMTEgQEAgdm9pZCBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxl
clF0Ojp0Y3BSZWFkeVJlYWQoKQogICAgICAgICAvLyBJZiBubyBwYXRoIGlzIHNwZWNpZmllZCwg
Z2VuZXJhdGUgYW4gaW5kZXggcGFnZS4KICAgICAgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkgfHwg
KG1fcGF0aCA9PSBRU3RyaW5nKFFMYXRpbjFDaGFyKCcvJykpKSkgewogICAgICAgICAgICAgUVN0
cmluZyBpbmRleEh0bWwgPSBRTGF0aW4xU3RyaW5nKCI8aHRtbD48aGVhZD48dGl0bGU+UmVtb3Rl
IFdlYiBJbnNwZWN0b3I8L3RpdGxlPjwvaGVhZD48Ym9keT48dWw+XG4iKTsKLSAgICAgICAgICAg
IGZvciAoUU1hcDxpbnQsIEluc3BlY3RvckNsaWVudFF0KiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc2VydmVyLT5tX2luc3BlY3RvckNsaWVudHMuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAg
aXQgIT0gbV9zZXJ2ZXItPm1faW5zcGVjdG9yQ2xpZW50cy5lbmQoKTsgCi0gICAgICAgICAgICAg
ICAgICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoUU1hcDxpbnQsIEluc3BlY3RvckNsaWVudFF0
KiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2VydmVyLT5tX2luc3BlY3RvckNsaWVudHMuYmVn
aW4oKTsgaXQgIT0gbV9zZXJ2ZXItPm1faW5zcGVjdG9yQ2xpZW50cy5lbmQoKTsgKytpdCkgewor
CiAgICAgICAgICAgICAgICAgaW5kZXhIdG1sLmFwcGVuZChRU3RyaW5nOjpmcm9tTGF0aW4xKCI8
bGk+PGEgaHJlZj1cIi93ZWJraXQvaW5zcGVjdG9yL2luc3BlY3Rvci5odG1sP3BhZ2U9JTFcIj4l
MjwvbGk+XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhpdC5rZXko
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoaXQudmFsdWUoKS0+bV9p
bnNwZWN0ZWRXZWJQYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkudG9TdHJpbmcoKSkpOworICAgICAg
ICAgICAgICAgICAgICAuYXJnKGl0LmtleSgpKQorICAgICAgICAgICAgICAgICAgICAuYXJnKFFV
cmwoaXQudmFsdWUoKS0+bV9pbnNwZWN0ZWRXZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPnVy
bCkudG9TdHJpbmcoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5kZXhIdG1sLmFw
cGVuZChRTGF0aW4xU3RyaW5nKCI8L3VsPjwvYm9keT48L2h0bWw+IikpOwogICAgICAgICAgICAg
cmVzcG9uc2UgPSBpbmRleEh0bWwudG9MYXRpbjEoKTsKQEAgLTM1Niw4ICszNTQsOCBAQCB2b2lk
IEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQ6OndlYlNvY2tldFJlYWR5UmVhZCgpCiAg
ICAgICAgIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIGlmIChtX2luc3BlY3RvckNs
aWVudCkgewotICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIgPSBtX2luc3BlY3RvckNsaWVudC0+bV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5wYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzcGF0
Y2hNZXNzYWdlRnJvbUZyb250ZW5kKFFTdHJpbmc6OmZyb21VdGY4KHBheWxvYWQpKTsKKyAgICAg
ICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBtX2luc3Bl
Y3RvckNsaWVudC0+bV9pbnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCk7CisgICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaXNwYXRjaE1lc3NhZ2VGcm9t
RnJvbnRlbmQoUVN0cmluZzo6ZnJvbVV0ZjgocGF5bG9hZCkpOwogICAgICAgICB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JT
ZXJ2ZXJRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2
ZXJRdC5oCmluZGV4IGIwYmIwYzc5ZDU4YzE5NTI4ZmM0ODhjYjA5NDg1YjkwMjM3ODViYTUuLjI3
NTRiNThkOTA3Zjk1M2ZjMmQ3MjA1OGQ0ZmIxMDg4ODU4YTZiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmgKQEAgLTQ1LDgg
KzQ1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBsaXN0ZW4ocXVpbnQxNiBwb3J0KTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJDbGllbnQoSW5zcGVjdG9yQ2xpZW50UXQqIGNsaWVudCk7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyQ2xpZW50KEluc3BlY3RvckNsaWVudFF0KiBjbGllbnQpOworICAgIHZvaWQg
cmVnaXN0ZXJDbGllbnQoSW5zcGVjdG9yQ2xpZW50UXQqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJD
bGllbnQoSW5zcGVjdG9yQ2xpZW50UXQqKTsKIAogICAgIHZvaWQgY2xvc2UoKTsKICAgICBJbnNw
ZWN0b3JDbGllbnRRdCogaW5zcGVjdG9yQ2xpZW50Rm9yUGFnZShpbnQgcGFnZU51bSk7CkBAIC03
MCw3ICs3MCw3IEBAIGNsYXNzIEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQgOiBwdWJs
aWMgUU9iamVjdCB7CiAgICAgUV9PQkpFQ1QKIHB1YmxpYzoKIAotICAgIEluc3BlY3RvclNlcnZl
clJlcXVlc3RIYW5kbGVyUXQoUVRjcFNvY2tldCAqdGNwQ29ubmVjdGlvbiwgSW5zcGVjdG9yU2Vy
dmVyUXQgKnNlcnZlcik7CisgICAgSW5zcGVjdG9yU2VydmVyUmVxdWVzdEhhbmRsZXJRdChRVGNw
U29ja2V0KiB0Y3BDb25uZWN0aW9uLCBJbnNwZWN0b3JTZXJ2ZXJRdCopOwogICAgIHZpcnR1YWwg
fkluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQoKTsKICAgICB2aXJ0dWFsIGludCB3ZWJT
b2NrZXRTZW5kKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwogICAgIHZpcnR1YWwgaW50IHdlYlNv
Y2tldFNlbmQoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuY3BwCmluZGV4IDU2ZWQwYjRjYjdjZTI2NWI2YmJjY2FhMzM4ZjZj
ZDdkM2Y0NDVjYTAuLmMyZTZiYjc2NzYxNzRkZTMzYjZhMDZiZWI5OWQzZmIwM2U1MDg1M2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCkBAIC0zMiwyMCArMzIsMTggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dC5oIgogCisjaW5jbHVkZSAiLi4vQXBpL3F3ZWJraXRnbG9iYWwuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgog
I2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJVc2VyR2Vz
dHVyZUluZGljYXRvci5oIgogCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKLSNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJ
Q0FUSU9OUykKQEAgLTcyLDEwICs3MCw2IEBAIE5vdGlmaWNhdGlvbldyYXBwZXI6Ok5vdGlmaWNh
dGlvbldyYXBwZXIoKQogICAgICwgbV9kaXNwbGF5RXZlbnRUaW1lcih0aGlzLCAmTm90aWZpY2F0
aW9uV3JhcHBlcjo6c2VuZERpc3BsYXlFdmVudCkKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9O
UykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotCi0jaWZuZGVmIFFUX05PX1NZU1RF
TVRSQVlJQ09OCi0gICAgbV9ub3RpZmljYXRpb25JY29uID0gbnVsbHB0cjsKLSNlbmRpZgogICAg
IG1fcHJlc2VudGVyID0gbnVsbHB0cjsKICNlbmRpZgogfQpAQCAtMjA5LDcgKzIwMyw2IEBAIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmRpc3BsYXlOb3RpZmljYXRpb24oTm90
aWZpY2F0aW9uKiBub3RpZmljYXRpCiAjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCiAgICAg
ICAgIGlmICghZHVtcE5vdGlmaWNhdGlvbikKICAgICAgICAgICAgIHdyYXBwZXItPm1fY2xvc2VU
aW1lci5zdGFydE9uZVNob3Qobm90aWZpY2F0aW9uVGltZW91dCk7Ci0gICAgICAgICAgICB3cmFw
cGVyLT5tX25vdGlmaWNhdGlvbkljb24gPSBhZG9wdFB0cihuZXcgUVN5c3RlbVRyYXlJY29uKCkp
OwogI2VuZGlmCiAgICAgfQogCkBAIC0yMjcsOSArMjIwLDkgQEAgdm9pZCBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6ZGlzcGxheU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24qIG5vdGlm
aWNhdGkKICAgICB9CiAKICNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04KLSAgICB3cmFwcGVy
LT5jb25uZWN0KHdyYXBwZXItPm1fbm90aWZpY2F0aW9uSWNvbi5nZXQoKSwgU0lHTkFMKG1lc3Nh
Z2VDbGlja2VkKCkpLCB3cmFwcGVyLCBTTE9UKG5vdGlmaWNhdGlvbkNsaWNrZWQoKSkpOwotICAg
IHdyYXBwZXItPm1fbm90aWZpY2F0aW9uSWNvbi0+c2hvdygpOwotICAgIHdyYXBwZXItPm1fbm90
aWZpY2F0aW9uSWNvbi0+c2hvd01lc3NhZ2Uobm90aWZpY2F0aW9uLT50aXRsZSgpLCBub3RpZmlj
YXRpb24tPmJvZHkoKSk7CisgICAgd3JhcHBlci0+Y29ubmVjdChtX3N5c3RlbVRyYXlJY29uLmRh
dGEoKSwgU0lHTkFMKG1lc3NhZ2VDbGlja2VkKCkpLCB3cmFwcGVyLCBTTE9UKG5vdGlmaWNhdGlv
bkNsaWNrZWQoKSkpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV9zeXN0ZW1UcmF5
SWNvbi5kYXRhKCksICJzaG93Iik7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3N5
c3RlbVRyYXlJY29uLmRhdGEoKSwgInNob3dNZXNzYWdlIiwgUV9BUkcoUVN0cmluZywgbm90aWZp
Y2F0aW9uLT50aXRsZSgpKSwgUV9BUkcoUVN0cmluZywgbm90aWZpY2F0aW9uLT5ib2R5KCkpKTsK
ICNlbmRpZgogfQogCkBAIC0zMjQsMTEgKzMxNywxMCBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
bwogICAgICAgICBDYWxsYmFja3NJbmZvIGluZm87CiAgICAgICAgIGluZm8ubV9mcmFtZSA9IHRv
RnJhbWUoY29udGV4dCk7CiAgICAgICAgIGluZm8ubV9jYWxsYmFja3MuYXBwZW5kKGNiKTsKLSAg
ICAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmluc2VydChjb250ZXh0LCBpbmZvKTsK
IAogICAgICAgICBpZiAodG9QYWdlKGNvbnRleHQpICYmIHRvRnJhbWUoY29udGV4dCkpIHsKICAg
ICAgICAgICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQoY29udGV4dCwgaW5m
byk7Ci0gICAgICAgICAgICBlbWl0IHRvUGFnZShjb250ZXh0KS0+ZmVhdHVyZVBlcm1pc3Npb25S
ZXF1ZXN0ZWQodG9GcmFtZShjb250ZXh0KSwgUVdlYlBhZ2U6Ok5vdGlmaWNhdGlvbnMpOworICAg
ICAgICAgICAgdG9QYWdlKGNvbnRleHQpLT5ub3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3Rl
ZCh0b0ZyYW1lKGNvbnRleHQpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTM0NiwxMCArMzM4
LDEwIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNlbFJlcXVlc3Rz
Rm9yUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25DCiAgICAgaWYgKGl0ZXIgPT0gbV9wZW5kaW5n
UGVybWlzc2lvblJlcXVlc3RzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRV2ViRnJh
bWUqIGZyYW1lID0gaXRlci52YWx1ZSgpLm1fZnJhbWU7CisgICAgUVdlYkZyYW1lQWRhcHRlciog
ZnJhbWUgPSBpdGVyLnZhbHVlKCkubV9mcmFtZTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUVdlYlBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIFFXZWJQYWdl
QWRhcHRlciogcGFnZSA9IFFXZWJQYWdlQWRhcHRlcjo6a2l0KGZyYW1lLT5mcmFtZS0+cGFnZSgp
KTsKICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZXJhc2UoaXRlcik7CiAKICAgICBp
ZiAoIXBhZ2UpCkBAIC0zNTgsNyArMzUwLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdDo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkMKICAg
ICBpZiAoZHVtcE5vdGlmaWNhdGlvbikKICAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNB
VElPTiBQRVJNSVNTSU9OIFJFUVVFU1QgQ0FOQ0VMTEVEOiAlc1xuIiwgUVN0cmluZyhjb250ZXh0
LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CiAK
LSAgICBlbWl0IHBhZ2UtPmZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVkKGZyYW1lLCBR
V2ViUGFnZTo6Tm90aWZpY2F0aW9ucyk7CisgICAgcGFnZS0+bm90aWZpY2F0aW9uc1Blcm1pc3Np
b25SZXF1ZXN0Q2FuY2VsbGVkKGZyYW1lKTsKIH0KIAogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdDo6YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFtZShGcmFtZSogZnJhbWUpCkBAIC00
MzYsMTMgKzQyOCwxMyBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1w
U2hvd1RleHQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHByaW50ZigiREVT
S1RPUCBOT1RJRklDQVRJT046IGNvbnRlbnRzIGF0ICVzXG4iLCBRU3RyaW5nKG5vdGlmaWNhdGlv
bi0+dXJsKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKICAgICBlbHNlIHsKICAg
ICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTjolcyBpY29uICVzLCB0aXRsZSAlcywg
dGV4dCAlc1xuIiwKLSAgICAgICAgICAgICAgICBub3RpZmljYXRpb24tPmRpcigpID09ICJydGwi
ID8gIihSVEwpIiA6ICIiLAorICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAicnRs
IiA/ICIoUlRMKSIgOiAiIiwKICAgICAgICAgICAgIFFTdHJpbmcobm90aWZpY2F0aW9uLT5pY29u
VVJMKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKG5vdGlmaWNhdGlv
bi0+dGl0bGUoKSkudG9VdGY4KCkuY29uc3REYXRhKCksCiAgICAgICAgICAgICBRU3RyaW5nKG5v
dGlmaWNhdGlvbi0+Ym9keSgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CiAgICAgfQogfQogCi1R
V2ViUGFnZSogTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnRvUGFnZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorUVdlYlBhZ2VBZGFwdGVyKiBOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdDo6dG9QYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTQ1MywxMCArNDQ1LDEwIEBAIFFXZWJQYWdlKiBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6dG9QYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CiAgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KHBhZ2UtPm1haW5GcmFtZSgpKS0+
cGFnZSgpOworICAgIHJldHVybiBRV2ViUGFnZUFkYXB0ZXI6OmtpdChwYWdlKTsKIH0KIAotUVdl
YkZyYW1lKiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6dG9GcmFtZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorUVdlYkZyYW1lQWRhcHRlciogTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OnRvRnJhbWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
IHsKICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtNDY1LDcgKzQ1Nyw3IEBAIFFXZWJGcmFtZSogTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQ6OnRvRnJhbWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmtpdChkb2N1bWVudC0+ZnJhbWUo
KSk7CisgICAgcmV0dXJuIFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChkb2N1bWVudC0+ZnJhbWUoKSk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9O
T1RJRklDQVRJT05TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCmluZGV4IDU4MTliNGQ4
MDEzYzQwODZkMDFlNzI2MTZiYWY0ZmVhN2RhNjg5YjcuLjNkY2UwOTc2MmY0YTQ0MDRiNWVjNWMy
ZGQyYmQxNDI3MTJkZjA5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgKQEAgLTMy
LDE4ICszMiwxNyBAQAogI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdF9oCiAj
ZGVmaW5lIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0X2gKIAorI2luY2x1ZGUgIi4uL0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb24uaCIKICNp
bmNsdWRlICJOb3RpZmljYXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJRdFBsYXRmb3JtUGx1Z2lu
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAotI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oIgotCiAjaW5jbHVkZSA8UU11bHRpSGFzaD4KLSNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+
CisjaW5jbHVkZSA8UVNjb3BlZFBvaW50ZXI+CiAKLWNsYXNzIFFXZWJGcmFtZTsKLWNsYXNzIFFX
ZWJQYWdlOworY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSw3ICs1NCw3IEBAIGNsYXNzIE5vdGlmaWNh
dGlvbldyYXBwZXIgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJOb3RpZmljYXRpb25EYXRh
IHsKICAgICBRX09CSkVDVAogcHVibGljOgogICAgIE5vdGlmaWNhdGlvbldyYXBwZXIoKTsKLSAg
ICB+Tm90aWZpY2F0aW9uV3JhcHBlcigpIHt9CisgICAgfk5vdGlmaWNhdGlvbldyYXBwZXIoKSB7
IH0KIAogICAgIHZvaWQgY2xvc2UoKTsKICAgICB2b2lkIGNsb3NlKFRpbWVyPE5vdGlmaWNhdGlv
bldyYXBwZXI+Kik7CkBAIC02OSwxNCArNjgsMTIgQEAgcHVibGljIFFfU0xPVFM6CiAgICAgdm9p
ZCBub3RpZmljYXRpb25DbG9zZWQoKTsKICAgICB2b2lkIG5vdGlmaWNhdGlvbkNsaWNrZWQoKTsK
IAotcHVibGljOgotI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgotICAgIE93blB0cjxRU3lz
dGVtVHJheUljb24+IG1fbm90aWZpY2F0aW9uSWNvbjsKLSNlbmRpZgotCitwcml2YXRlOgogICAg
IE93blB0cjxRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyPiBtX3ByZXNlbnRlcjsKICAgICBUaW1l
cjxOb3RpZmljYXRpb25XcmFwcGVyPiBtX2Nsb3NlVGltZXI7CiAgICAgVGltZXI8Tm90aWZpY2F0
aW9uV3JhcHBlcj4gbV9kaXNwbGF5RXZlbnRUaW1lcjsKKworICAgIGZyaWVuZCBjbGFzcyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKIH07CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9O
UykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQpAQCAtMTA5LDYgKzEwNiwxMCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNhdGlvbjsKIAogICAgIHZvaWQgYWRk
Q2xpZW50KCkgeyBtX2NsaWVudENvdW50Kys7IH0KKyNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlD
T04KKyAgICBib29sIGhhc1N5c3RlbVRyYXlJY29uKCkgY29uc3QgeyByZXR1cm4gIW1fc3lzdGVt
VHJheUljb24uaXNOdWxsKCk7IH0KKyAgICB2b2lkIHNldFN5c3RlbVRyYXlJY29uKFFPYmplY3Qq
IGljb24pIHsgbV9zeXN0ZW1UcmF5SWNvbi5yZXNldChpY29uKTsgfQorI2VuZGlmCiAgICAgdm9p
ZCByZW1vdmVDbGllbnQoKTsKICAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogCkBAIC0xMjQsMTIgKzEyNSwxMiBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGV0YWNoTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiopOwogICAgIHZv
aWQgZHVtcFJlcGxhY2VkSWRUZXh0KE5vdGlmaWNhdGlvbiopOwogICAgIHZvaWQgZHVtcFNob3dU
ZXh0KE5vdGlmaWNhdGlvbiopOwotICAgIFFXZWJQYWdlKiB0b1BhZ2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOwotICAgIFFXZWJGcmFtZSogdG9GcmFtZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiB0b1BhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIHRvRnJhbWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogCiAgICAgaW50IG1fY2xpZW50Q291bnQ7CiAgICAgc3RydWN0IENhbGxiYWNrc0luZm8gewot
ICAgICAgICBRV2ViRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFFXZWJGcmFtZUFkYXB0ZXIqIG1f
ZnJhbWU7CiAgICAgICAgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+ID4gbV9jYWxsYmFja3M7
CiAgICAgfTsKICAgICBRSGFzaDxTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgIENhbGxiYWNrc0lu
Zm8gPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHM7CkBAIC0xMzcsMTAgKzEzOCwxMyBAQCBw
cml2YXRlOgogCiAgICAgTm90aWZpY2F0aW9uc1F1ZXVlIG1fbm90aWZpY2F0aW9uczsKICAgICBR
dFBsYXRmb3JtUGx1Z2luIG1fcGxhdGZvcm1QbHVnaW47CisjaWZuZGVmIFFUX05PX1NZU1RFTVRS
QVlJQ09OCisgICAgUVNjb3BlZFBvaW50ZXI8UU9iamVjdD4gbV9zeXN0ZW1UcmF5SWNvbjsKKyNl
bmRpZgogfTsKIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVO
QUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKIAogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggMTQxZjk4ZTMwODJjMjEyN2M2Zjk0MWUx
ZDkyMGNlNzdlMDkyOWEwNS4uOTJhYjg0YjY0YTVlODQ0YmRlOTg5ZTBmM2Y0MWMxMDVlMmJiNDE5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0
LmNwcApAQCAtMzUsOCArMzUsNyBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKICNpbmNsdWRlIDxR
V2luZG93PgogCi1zdGF0aWMgdm9pZCBjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJv
bVdpZGdldChRV2lkZ2V0KiB3aWRnZXQsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLCBRT2JqZWN0Kiogc3VyZmFjZU93
bmVyKQorc3RhdGljIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzREZyb21XaWRn
ZXQoUVdpZGdldCogd2lkZ2V0LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQ
bGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLCBRT2JqZWN0Kiogc3VyZmFjZU93bmVy
KQogewogI2lmZGVmIFFUX09QRU5HTF9MSUIKICAgICAqY29udGV4dCA9IDA7CkBAIC03Myw3ICs3
Miw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lk
Z2V0KFFXaWRnZXQqIHdpZGdldCwgUGxhdGZvcm1HCiAKIFFXaW5kb3cqIFFXZWJQYWdlQ2xpZW50
Ojpvd25lcldpbmRvdygpIGNvbnN0CiB7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0gb3duZXJXaWRn
ZXQoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG93bmVy
V2lkZ2V0KCkpOwogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAo
UVdpbmRvdyAqd2luZG93ID0gd2lkZ2V0LT53aW5kb3dIYW5kbGUoKSkKQEAgLTIwNCw3ICsyMDMs
NyBAQCBpbnQgUGFnZUNsaWVudFFXaWRnZXQ6OnNjcmVlbk51bWJlcigpIGNvbnN0CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVFXaWRnZXQqIFBhZ2VDbGllbnRRV2lkZ2V0Ojpvd25lcldpZGdldCgpIGNv
bnN0CitRT2JqZWN0KiBQYWdlQ2xpZW50UVdpZGdldDo6b3duZXJXaWRnZXQoKSBjb25zdAogewog
ICAgIHJldHVybiB2aWV3OwogfQpAQCAtMjM4LDkgKzIzNyw3IEBAIHZvaWQgUGFnZUNsaWVudFFX
aWRnZXQ6OnNldFdpZGdldFZpc2libGUoV2lkZ2V0KiB3aWRnZXQsIGJvb2wgdmlzaWJsZSkKIH0K
IAogI2lmIFVTRSgzRF9HUkFQSElDUykKLXZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OmNyZWF0ZVBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCogc3VyZmFjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU9iamVjdCoqIHN1cmZhY2VP
d25lcikKK3ZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OmNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm1HcmFwaGlj
c1N1cmZhY2UzRCogc3VyZmFjZSwgUU9iamVjdCoqIHN1cmZhY2VPd25lcikKIHsKICAgICBjcmVh
dGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJvbVdpZGdldCh2aWV3LCBjb250ZXh0LCBzdXJm
YWNlLCBzdXJmYWNlT3duZXIpOwogfQpAQCAtMzYzLDcgKzM2MCw3IEBAIGludCBQYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIoKSBjb25zdAogICAgIHJldHVybiAwOwogfQog
Ci1RV2lkZ2V0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25lcldpZGdldCgpIGNvbnN0
CitRT2JqZWN0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25lcldpZGdldCgpIGNvbnN0
CiB7CiAgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZpZXctPnNjZW5lKCkpIHsKICAg
ICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7
CkBAIC00MjgsMTEgKzQyNSw5IEBAIFFSZWN0RiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp3
aW5kb3dSZWN0KCkgY29uc3QKICNlbmRpZiAvLyBRVF9OT19HUkFQSElDU1ZJRVcKIAogI2lmIFVT
RSgzRF9HUkFQSElDUykKLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlM0QqIHN1cmZhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU9i
amVjdCoqIHN1cmZhY2VPd25lcikKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3Jl
YXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLCBRT2JqZWN0Kiogc3Vy
ZmFjZU93bmVyKQogewotICAgIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lk
Z2V0KG93bmVyV2lkZ2V0KCksIGNvbnRleHQsIHN1cmZhY2UsIHN1cmZhY2VPd25lcik7CisgICAg
Y3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzREZyb21XaWRnZXQocW9iamVjdF9jYXN0PFFX
aWRnZXQqPihvd25lcldpZGdldCgpKSwgY29udGV4dCwgc3VyZmFjZSwgc3VyZmFjZU93bmVyKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BhZ2VDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaAppbmRleCBlNmI5ZTE2OTRkNDZhNDJjZTMyMjQ3OTI4ZDY5ODlkZGJlNTk4N2VlLi43
MmRjYTQyYzE1YmVhYzIwMzhiODBjMTk2YzAwN2JkZTcxODMyZjI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAgLTMxLDE1ICszMSwxNCBA
QAogI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNs
dWRlICJxd2VicGFnZV9wLmgiCisjaW5jbHVkZSA8U2V0dGluZ3MuaD4KICNpbmNsdWRlIDxxZ3Jh
cGhpY3NzY2VuZS5oPgogI2luY2x1ZGUgPHFncmFwaGljc3ZpZXcuaD4KICNpbmNsdWRlIDxxZ3Jh
cGhpY3N3aWRnZXQuaD4KKyNpbmNsdWRlIDxxbWV0YW9iamVjdC5oPgogI2luY2x1ZGUgPHFzY3Jv
bGxiYXIuaD4KICNpbmNsdWRlIDxxc3R5bGVvcHRpb24uaD4KICNpbmNsdWRlIDxxd2lkZ2V0Lmg+
Ci0jaW5jbHVkZSA8UXRDb3JlL3FtZXRhb2JqZWN0Lmg+Ci0KLSNpbmNsdWRlIDxTZXR0aW5ncy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc1LDE4ICs3NCwxOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVuYWJsZSk7CisgICAgdmlydHVh
bCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgaW5w
dXRNZXRob2RFbmFibGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9k
SGludHMoUXQ6OklucHV0TWV0aG9kSGludHMgaGludHMpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZEhpbnRzKFF0OjpJbnB1dE1ldGhvZEhpbnRzKTsKIAogI2lmbmRlZiBRVF9OT19D
VVJTT1IKICAgICB2aXJ0dWFsIFFDdXJzb3IgY3Vyc29yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBjdXJzb3IpOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDdXJzb3IoY29uc3QgUUN1cnNvciYpOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIFFQ
YWxldHRlIHBhbGV0dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBzY3JlZW5OdW1iZXIoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFFXaWRnZXQqIG93bmVyV2lkZ2V0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBRT2JqZWN0KiBvd25lcldpZGdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUVJlY3QgZ2Vv
bWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUU9iamVj
dCogcGx1Z2luUGFyZW50KCkgY29uc3Q7CkBAIC0xMDAsOSArOTksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldFdpZGdldFZpc2libGUoV2lkZ2V0KiwgYm9vbCB2aXNpYmxlKTsKIAog
I2lmIFVTRSgzRF9HUkFQSElDUykKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFj
ZTNEKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR
T2JqZWN0KiopOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNE
KiwgUU9iamVjdCoqKTsKICNlbmRpZgogCiAgICAgUVdpZGdldCogdmlldzsKQEAgLTEzMiw5ICsx
MjksOSBAQCBwdWJsaWM6CiBjbGFzcyBRR3JhcGhpY3NJdGVtT3ZlcmxheSA6IHB1YmxpYyBRR3Jh
cGhpY3NPYmplY3QgewogICAgIHB1YmxpYzoKICAgICBRR3JhcGhpY3NJdGVtT3ZlcmxheShRR3Jh
cGhpY3NXaWRnZXQqIHZpZXcsIFFXZWJQYWdlKiBwKQotICAgICAgICAgICAgOlFHcmFwaGljc09i
amVjdCh2aWV3KQotICAgICAgICAgICAgLCBxKHZpZXcpCi0gICAgICAgICAgICAsIHBhZ2UocCkK
KyAgICAgICAgOiBRR3JhcGhpY3NPYmplY3QodmlldykKKyAgICAgICAgLCBxKHZpZXcpCisgICAg
ICAgICwgcGFnZShwKQogICAgIHsKICAgICAgICAgc2V0UG9zKDAsIDApOwogICAgICAgICBzZXRG
bGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7CkBA
IC0xNzIsNyArMTY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICwgb3ZlcmxheSgwKQog
ICAgIHsKLSAgICAgICBRX0FTU0VSVCh2aWV3KTsKKyAgICAgICAgUV9BU1NFUlQodmlldyk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAgICAvLyB0aGUgb3ZlcmxheSBh
bmQgc3RheXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZgogICAgICAgICAvLyB0aGlzIFFHcmFw
aGljc1dlYlZpZXcgYXMgdGhlIHNjcm9sbGJhcnMgYXJlIG5lZWRlZCB3aGVuIHRoZXJlJ3Mgbm8g
Y29tcG9zaXRpbmcKQEAgLTE4NiwxOCArMTgzLDE4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZShjb25zdCBRUmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5wdXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgYm9vbCBpbnB1dE1ldGhvZEVuYWJs
ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5w
dXRNZXRob2RIaW50cyBoaW50cyk7CisgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kSGlu
dHMoUXQ6OklucHV0TWV0aG9kSGludHMpOwogCiAjaWZuZGVmIFFUX05PX0NVUlNPUgogICAgIHZp
cnR1YWwgUUN1cnNvciBjdXJzb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ3Vy
c29yKGNvbnN0IFFDdXJzb3ImIGN1cnNvcik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnNv
cihjb25zdCBRQ3Vyc29yJik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgUVBhbGV0dGUgcGFsZXR0
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJlcigpIGNvbnN0OwotICAgIHZp
cnR1YWwgUVdpZGdldCogb3duZXJXaWRnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFPYmplY3Qq
IG93bmVyV2lkZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeVJlbGF0aXZl
VG9Pd25lcldpZGdldCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBRT2JqZWN0KiBwbHVnaW5QYXJl
bnQoKSBjb25zdDsKQEAgLTIwOSw5ICsyMDYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldFdpZGdldFZpc2libGUoV2lkZ2V0KiwgYm9vbCk7CiAKICNpZiBVU0UoM0RfR1JBUEhJQ1Mp
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCosCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU9iamVjdCoqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKiwgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCosIFFPYmplY3QqKik7CiAjZW5k
aWYKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAppbmRleCBj
MzFkOWIwMDc1MDc3ZDkwMTY5YjY3Njc5MTRhZGFkMjlhZjZhZTFjLi42MjU4MjVmZmFiZjI0YjEx
ODc3MmUzZGI3M2FiY2MzMjNmNzNiMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcApAQCAtMzAsMTggKzMw
LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVz
UXQuaCIKIAorI2luY2x1ZGUgIi4uL0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1
ZGUgIi4uL0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCisK
ICNpbmNsdWRlIDxJbnRTaXplLmg+Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlIDxOb3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFBhZ2UuaD4KICNpbmNsdWRlIDxQYWdl
R3JvdXAuaD4KICNpbmNsdWRlIDxQbHVnaW5EYXRhYmFzZS5oPgogI2luY2x1ZGUgPFFDb3JlQXBw
bGljYXRpb24+CiAjaW5jbHVkZSA8UUxvY2FsZT4KLSNpbmNsdWRlIDxxd2ViaGlzdG9yeWludGVy
ZmFjZS5oPgotI2luY2x1ZGUgPHF3ZWJwYWdlLmg+Ci0jaW5jbHVkZSA8cXdlYnBsdWdpbmZhY3Rv
cnkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTk5LDkgKzEwMCw5IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OnJlZnJl
c2hQbHVnaW5zKCkKIAogdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyhj
b25zdCBXZWJDb3JlOjpQYWdlKiBwYWdlLCBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mIG91
dFBsdWdpbnMpCiB7Ci0gICAgUVdlYlBhZ2UqIHFQYWdlID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xp
ZW50UXQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CisgICAgUVdlYlBh
Z2VBZGFwdGVyKiBxUGFnZSA9IHN0YXRpY19jYXN0PENocm9tZUNsaWVudFF0Kj4ocGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdlOwogICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0
b3J5OwotICAgIGlmIChxUGFnZSAmJiAoZmFjdG9yeSA9IHFQYWdlLT5wbHVnaW5GYWN0b3J5KCkp
KSB7CisgICAgaWYgKHFQYWdlICYmIChmYWN0b3J5ID0gcVBhZ2UtPnBsdWdpbkZhY3RvcnkpKSB7
CiAKICAgICAgICAgUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4gcXBsdWdpbnMgPSBm
YWN0b3J5LT5wbHVnaW5zKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcXBsdWdpbnMu
Y291bnQoKTsgKytpKSB7CkBAIC0xMTcsNyArMTE4LDcgQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdp
ZXNRdDo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiBwYWdlLCBWZWN0b3I8V2Vi
Q28KICAgICAgICAgICAgICAgICBtaW1lSW5mby50eXBlID0gbWltZVR5cGUubmFtZTsKICAgICAg
ICAgICAgICAgICBtaW1lSW5mby5kZXNjID0gbWltZVR5cGUuZGVzY3JpcHRpb247CiAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBtaW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5jb3Vu
dCgpOyArK2spCi0gICAgICAgICAgICAgICAgICBtaW1lSW5mby5leHRlbnNpb25zLmFwcGVuZCht
aW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5hdChrKSk7CisgICAgICAgICAgICAgICAgICAgIG1pbWVJ
bmZvLmV4dGVuc2lvbnMuYXBwZW5kKG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmF0KGspKTsKIAog
ICAgICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWVJbmZvKTsKICAgICAgICAgICAg
IH0KQEAgLTEzMCw3ICsxMzEsNyBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVn
aW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDbwogCiAgICAgb3V0
UGx1Z2lucy5yZXNpemUocGx1Z2lucy5zaXplKCkpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFBsdWdpbkluZm8gaW5mbzsKICAgICAg
ICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNbaV07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAKaW5kZXggMjllNDYyNGViZDNl
MjE0YzVmZmE3NmQ2MGY2NDJmN2Y2MGRiOGExNC4uNjAzYTliNDA1YmIyZTVhODNhZThiYTU5NzNi
Y2E0MWE0NmIwZmFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVRdC5jcHAKQEAgLTI2LDE1ICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBvcHVwTWVudVF0LmgiCiAKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmtpdHBsYXRm
b3JtcGx1Z2luLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKIAotI2luY2x1ZGUgInF3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oIgotCiBjbGFzcyBTZWxlY3REYXRhIDogcHVibGljIFFXZWJTZWxl
Y3REYXRhIHsKIHB1YmxpYzoKLSAgICBTZWxlY3REYXRhKFdlYkNvcmU6OlBvcHVwTWVudUNsaWVu
dComIGRhdGEpIDogZChkYXRhKSB7fQorICAgIFNlbGVjdERhdGEoV2ViQ29yZTo6UG9wdXBNZW51
Q2xpZW50KiYgZGF0YSkgOiBkKGRhdGEpIHsgfQogCiAgICAgdmlydHVhbCBJdGVtVHlwZSBpdGVt
VHlwZShpbnQpIGNvbnN0OwogICAgIHZpcnR1YWwgUVN0cmluZyBpdGVtVGV4dChpbnQgaWR4KSBj
b25zdCB7IHJldHVybiBRU3RyaW5nKGQgPyBkLT5pdGVtVGV4dChpZHgpIDogIiIpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBs
dWdpbkltcGwuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NX
aWRnZXRQbHVnaW5JbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTM3OTMzYTBmYWFlNzRkNTI3ZTE5Nzcz
MzhkZTM2NWEyMzc1NWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmNwcApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUUdyYXBoaWNzV2lk
Z2V0UGx1Z2luSW1wbC5oIgorCisjaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmU+CisjaW5jbHVkZSA8
UUdyYXBoaWNzV2lkZ2V0PgorCisjaWZuZGVmIFFUX05PX0dSQVBISUNTVklFVworCitRR3JhcGhp
Y3NXaWRnZXRQbHVnaW5JbXBsOjp+UUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbCgpCit7CisgICAg
bV9ncmFwaGljc1dpZGdldC0+ZGVsZXRlTGF0ZXIoKTsKK30KKwordm9pZCBRR3JhcGhpY3NXaWRn
ZXRQbHVnaW5JbXBsOjp1cGRhdGUoY29uc3QgUVJlY3QgJnJlY3QpCit7CisgICAgUUdyYXBoaWNz
U2NlbmUqIHNjZW5lID0gbV9ncmFwaGljc1dpZGdldC0+c2NlbmUoKTsKKyAgICBpZiAoc2NlbmUp
CisgICAgICAgIHNjZW5lLT51cGRhdGUocmVjdCk7Cit9CisKK3ZvaWQgUUdyYXBoaWNzV2lkZ2V0
UGx1Z2luSW1wbDo6c2V0R2VvbWV0cnlBbmRDbGlwKGNvbnN0IFFSZWN0ICZnZW9tZXRyeSwgY29u
c3QgUVJlY3QgJiwgYm9vbCkKK3sKKyAgICBtX2dyYXBoaWNzV2lkZ2V0LT5zZXRHZW9tZXRyeShn
ZW9tZXRyeSk7CisgICAgLy8gRklYTUU6IE1ha2UgdGhlIGNvZGUgaGFuZGxlIGNsaXBwaW5nIG9m
IGdyYXBoaWNzIHdpZGdldHMuCit9CisKK3ZvaWQgUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbDo6
c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9ncmFwaGljc1dpZGdldC0+c2V0Vmlz
aWJsZSh2aXNpYmxlKTsKK30KKwordm9pZCBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjpzZXRX
aWRnZXRQYXJlbnQoUU9iamVjdCogcGFyZW50KQoreworICAgIFFHcmFwaGljc09iamVjdCogcGFy
ZW50SXRlbSA9IHFvYmplY3RfY2FzdDxRR3JhcGhpY3NPYmplY3QqPihwYXJlbnQpOworICAgIGlm
IChwYXJlbnRJdGVtKQorICAgICAgICBtX2dyYXBoaWNzV2lkZ2V0LT5zZXRQYXJlbnRJdGVtKHBh
cmVudEl0ZW0pOworfQorCitRT2JqZWN0KiBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjpoYW5k
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2dyYXBoaWNzV2lkZ2V0OworfQorCisjaW5jbHVk
ZSAibW9jX1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuY3BwIgorCisjZW5kaWYgLy8gIWRlZmlu
ZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
Zjc1ODIyNmM0ZjgwZjNiZjQwYTU1ZGZiNjk5YzVlODRmYmE5MjNlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5J
bXBsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQ
bGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUUdyYXBoaWNzV2lkZ2V0
UGx1Z2luSW1wbF9oCisjZGVmaW5lIFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGxfaAorCisjaWZu
ZGVmIFFUX05PX0dSQVBISUNTVklFVworCisjaW5jbHVkZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVy
LmgiCisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUdyYXBoaWNzV2lkZ2V0OworUVRfRU5E
X05BTUVTUEFDRQorCitjbGFzcyBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsIDogcHVibGljIFF0
UGx1Z2luV2lkZ2V0QWRhcHRlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRR3JhcGhp
Y3NXaWRnZXRQbHVnaW5JbXBsKFFHcmFwaGljc1dpZGdldCAqdykgOiBtX2dyYXBoaWNzV2lkZ2V0
KHcpIHsgfQorICAgIHZpcnR1YWwgflFHcmFwaGljc1dpZGdldFBsdWdpbkltcGwoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0IFFSZWN0ICYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRHZW9tZXRyeUFuZENsaXAoY29uc3QgUVJlY3QmLCBjb25zdCBRUmVjdCYsIGJvb2wp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmKSBPVkVSUklERSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0UGFyZW50KFFPYmplY3QqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFFPYmplY3QqIGhhbmRsZSgpIGNvbnN0IE9WRVJSSURFOworcHJpdmF0ZToKKyAgICBRR3Jh
cGhpY3NXaWRnZXQgKm1fZ3JhcGhpY3NXaWRnZXQ7Cit9OworI2VuZGlmIC8vICFkZWZpbmVkKFFU
X05PX0dSQVBISUNTVklFVykKKworI2VuZGlmIC8vIFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVB
ZGFwdGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRh
cHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgwOGI4YTMzZTQ0OGIzNmJlMzQ3YzU5ZmY3YTU1MDExNzg3
YTExZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UVdlYkZyYW1lQWRhcHRlci5jcHAKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJR
V2ViUGFnZUFkYXB0ZXIuaCIKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisjaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIK
KyNlbmRpZgorCisjaW5jbHVkZSA8UUZpbGVJbmZvPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVz
dD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBpbmxpbmUgUmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVMb2FkQ29udHJvbFRvQ2FjaGVQb2xpY3kodWludCBjYWNo
ZUxvYWRDb250cm9sKQoreworICAgIHN3aXRjaCAoY2FjaGVMb2FkQ29udHJvbCkgeworICAgIGNh
c2UgUU5ldHdvcmtSZXF1ZXN0OjpBbHdheXNOZXR3b3JrOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7CisgICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6OlBy
ZWZlckNhY2hlOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxv
YWQ7CisgICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6OkFsd2F5c0NhY2hlOgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQ7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBXZWJDb3JlOjpVc2VQcm90b2NvbENhY2hlUG9s
aWN5OworfQorCitRV2ViRnJhbWVEYXRhOjpRV2ViRnJhbWVEYXRhKFdlYkNvcmU6OlBhZ2UqIHBh
cmVudFBhZ2UsIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRGcmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckZyYW1lRWxlbWVudCwgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1l
TmFtZSkKKyAgICA6IG5hbWUoZnJhbWVOYW1lKQorICAgICwgb3duZXJFbGVtZW50KG93bmVyRnJh
bWVFbGVtZW50KQorICAgICwgcGFnZShwYXJlbnRQYWdlKQorICAgICwgYWxsb3dzU2Nyb2xsaW5n
KHRydWUpCisgICAgLCBtYXJnaW5XaWR0aCgwKQorICAgICwgbWFyZ2luSGVpZ2h0KDApCit7Cisg
ICAgZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcgRnJhbWVMb2FkZXJDbGllbnRRdCgpOworICAgIGZy
YW1lID0gRnJhbWU6OmNyZWF0ZShwYWdlLCBvd25lckVsZW1lbnQsIGZyYW1lTG9hZGVyQ2xpZW50
KTsKKworICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlIGJlbG93IHNob3VsZCBwcm9iYWJseSBiZSBt
b3ZlZCBvdmVyIGludG8gV2ViQ29yZQorICAgIGZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7
CisgICAgaWYgKHBhcmVudEZyYW1lKQorICAgICAgICBwYXJlbnRGcmFtZS0+dHJlZSgpLT5hcHBl
bmRDaGlsZChmcmFtZSk7Cit9CisKK1FXZWJGcmFtZUFkYXB0ZXI6OlFXZWJGcmFtZUFkYXB0ZXIo
KQorICAgIDogcGFnZUFkYXB0ZXIoMCkKKyAgICAsIGFsbG93c1Njcm9sbGluZyh0cnVlKQorICAg
ICwgbWFyZ2luV2lkdGgoLTEpCisgICAgLCBtYXJnaW5IZWlnaHQoLTEpCisgICAgLCBmcmFtZSgw
KQorICAgICwgZnJhbWVMb2FkZXJDbGllbnQoMCkKK3sKK30KKworUVdlYkZyYW1lQWRhcHRlcjo6
flFXZWJGcmFtZUFkYXB0ZXIoKQoreworICAgIGlmIChmcmFtZUxvYWRlckNsaWVudCkKKyAgICAg
ICAgZnJhbWVMb2FkZXJDbGllbnQtPm1fd2ViRnJhbWUgPSAwOworfQorCit2b2lkIFFXZWJGcmFt
ZUFkYXB0ZXI6OmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXEsIFFOZXR3b3JrQWNjZXNz
TWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJhdGlvbiwgY29uc3QgUUJ5dGVBcnJheSYgYm9keSkKK3sK
KyAgICBpZiAoZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAgICAgIHBhZ2VBZGFwdGVyLT5p
bnNpZGVPcGVuQ2FsbCA9IHRydWU7CisKKyAgICBRVXJsIHVybCA9IGVuc3VyZUFic29sdXRlVXJs
KHJlcS51cmwoKSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwp
OworCisgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFu
YWdlcjo6SGVhZE9wZXJhdGlvbjoKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJIRUFE
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRP
cGVyYXRpb246CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQdXRPcGVyYXRpb246Cisg
ICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUFVUIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQb3N0T3BlcmF0aW9uOgorICAgICAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OkRlbGV0ZU9wZXJhdGlvbjoKKyAgICAgICAgcmVxdWVzdC5zZXRI
VFRQTWV0aG9kKCJERUxFVEUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI6OkN1c3RvbU9wZXJhdGlvbjoKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKHJlcS5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpDdXN0b21WZXJiQXR0cmlidXRlKS50
b0J5dGVBcnJheSgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRpb246CisgICAgICAgIC8vIGVoPworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBRVmFyaWFudCBjYWNoZUxvYWQgPSByZXEuYXR0cmli
dXRlKFFOZXR3b3JrUmVxdWVzdDo6Q2FjaGVMb2FkQ29udHJvbEF0dHJpYnV0ZSk7CisgICAgaWYg
KGNhY2hlTG9hZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCBj
YWNoZUxvYWRWYWx1ZSA9IGNhY2hlTG9hZC50b1VJbnQoJm9rKTsKKyAgICAgICAgaWYgKG9rKQor
ICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZUxvYWRDb250cm9sVG9DYWNo
ZVBvbGljeShjYWNoZUxvYWRWYWx1ZSkpOworICAgIH0KKworICAgIFFMaXN0PFFCeXRlQXJyYXk+
IGh0dHBIZWFkZXJzID0gcmVxLnJhd0hlYWRlckxpc3QoKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGh0dHBIZWFkZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFCeXRlQXJyYXkg
JmhlYWRlck5hbWUgPSBodHRwSGVhZGVycy5hdChpKTsKKyAgICAgICAgcmVxdWVzdC5hZGRIVFRQ
SGVhZGVyRmllbGQoUVN0cmluZzo6ZnJvbUxhdGluMShoZWFkZXJOYW1lKSwgUVN0cmluZzo6ZnJv
bUxhdGluMShyZXEucmF3SGVhZGVyKGhlYWRlck5hbWUpKSk7CisgICAgfQorCisgICAgaWYgKCFi
b2R5LmlzRW1wdHkoKSkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShXZWJDb3JlOjpGb3Jt
RGF0YTo6Y3JlYXRlKGJvZHkuY29uc3REYXRhKCksIGJvZHkuc2l6ZSgpKSk7CisKKyAgICBmcmFt
ZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgZmFsc2UpOworCisgICAgaWYgKGZyYW1lLT50cmVl
KCktPnBhcmVudCgpKQorICAgICAgICBwYWdlQWRhcHRlci0+aW5zaWRlT3BlbkNhbGwgPSBmYWxz
ZTsKK30KKworUVdlYkZyYW1lQWRhcHRlciogUVdlYkZyYW1lQWRhcHRlcjo6Y3JlYXRlRnJhbWUo
UVdlYkZyYW1lRGF0YSAqZGF0YSkKK3sKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiBuZXdGcmFtZSA9
IGNyZWF0ZVdlYkZyYW1lKHRoaXMpOworICAgIG5ld0ZyYW1lLT5wYWdlQWRhcHRlciA9IHBhZ2VB
ZGFwdGVyOworICAgIG5ld0ZyYW1lLT5pbml0KGRhdGEpOworICAgIHJldHVybiBuZXdGcmFtZTsK
K30KKworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK3ZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6
aGFuZGxlR2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZlbnRGYWNhZGUqIGdlc3R1cmVFdmVudCkKK3sK
KyAgICBBU1NFUlQoaGFzVmlldygpKTsKKyAgICBzd2l0Y2ggKGdlc3R1cmVFdmVudC0+dHlwZSkg
eworICAgIGNhc2UgUXQ6OlRhcEdlc3R1cmU6CisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnZlcnRHZXN0dXJlKGdlc3R1cmVFdmVudCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFF0OjpUYXBBbmRIb2xkR2VzdHVyZToKKyAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudEZvckdlc3R1cmUoY29udmVy
dEdlc3R1cmUoZ2VzdHVyZUV2ZW50KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKyNlbmRpZgorCitXZWJDb3Jl
OjpJbnRTaXplIFFXZWJGcmFtZUFkYXB0ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWhhc1ZpZXcoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4g
ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7Cit9CisKK0ludFJlY3QgUVdlYkZyYW1lQWRh
cHRlcjo6ZnJhbWVSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc1ZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCk7
Cit9CisKK3ZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6aW5pdChRV2ViRnJhbWVEYXRhICpmcmFtZURh
dGEpCit7CisgICAgYWxsb3dzU2Nyb2xsaW5nID0gZnJhbWVEYXRhLT5hbGxvd3NTY3JvbGxpbmc7
CisgICAgbWFyZ2luV2lkdGggPSBmcmFtZURhdGEtPm1hcmdpbldpZHRoOworICAgIG1hcmdpbkhl
aWdodCA9IGZyYW1lRGF0YS0+bWFyZ2luSGVpZ2h0OworICAgIGZyYW1lID0gZnJhbWVEYXRhLT5m
cmFtZS5nZXQoKTsKKyAgICBmcmFtZUxvYWRlckNsaWVudCA9IGZyYW1lRGF0YS0+ZnJhbWVMb2Fk
ZXJDbGllbnQ7CisgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldEZyYW1lKHRoaXMsIGZyYW1lKTsK
KworICAgIGZyYW1lLT5pbml0KCk7Cit9CisKK1FXZWJGcmFtZUFkYXB0ZXIqIFFXZWJGcmFtZUFk
YXB0ZXI6OmtpdChjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEZyYW1lTG9hZGVyQ2xpZW50UXQqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+d2ViRnJh
bWUoKTsKK30KKworUVVybCBRV2ViRnJhbWVBZGFwdGVyOjplbnN1cmVBYnNvbHV0ZVVybChjb25z
dCBRVXJsJiB1cmwpCit7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICF1cmwuaXNSZWxhdGl2
ZSgpKQorICAgICAgICByZXR1cm4gdXJsOworCisgICAgLy8gVGhpcyBjb250YWlucyB0aGUgVVJM
IHdpdGggYWJzb2x1dGUgcGF0aCBidXQgd2l0aG91dAorICAgIC8vIHRoZSBxdWVyeSBhbmQgdGhl
IGZyYWdtZW50IHBhcnQuCisgICAgUVVybCBiYXNlVXJsID0gUVVybDo6ZnJvbUxvY2FsRmlsZShR
RmlsZUluZm8odXJsLnRvTG9jYWxGaWxlKCkpLmFic29sdXRlRmlsZVBhdGgoKSk7CisKKyAgICAv
LyBUaGUgcGF0aCBpcyByZW1vdmVkIHNvIHRoZSBxdWVyeSBhbmQgdGhlIGZyYWdtZW50IHBhcnRz
IGFyZSB0aGVyZS4KKyAgICBRU3RyaW5nIHBhdGhSZW1vdmVkID0gdXJsLnRvU3RyaW5nKFFVcmw6
OlJlbW92ZVBhdGgpOworICAgIFFVcmwgdG9SZXNvbHZlKHBhdGhSZW1vdmVkKTsKKworICAgIHJl
dHVybiBiYXNlVXJsLnJlc29sdmVkKHRvUmVzb2x2ZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuaCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlZjU2
ZjlhMDIzZmFlODRkZDg3MWUyZDU5NGRiOTcxNmQzMjllZTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuaApAQCAtMCww
ICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdlYkZyYW1lQWRhcHRlcl9oCisjZGVmaW5l
IFFXZWJGcmFtZUFkYXB0ZXJfaAorCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtRXZlbnQuaCIKKworI2luY2x1ZGUgPEZyYW1lVmlldy5oPgorI2lu
Y2x1ZGUgPEludFJlY3QuaD4KKyNpbmNsdWRlIDxJbnRTaXplLmg+CisjaW5jbHVkZSA8S1VSTC5o
PgorCisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFTaXplPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsKK30KKworUVRfQkVHSU5fTkFNRVNQ
QUNFCitjbGFzcyBRUG9pbnQ7CitRVF9FTkRfTkFNRVNQQUNFCisKKyNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCitjbGFzcyBRR2VzdHVyZUV2ZW50RmFjYWRlOworI2VuZGlmCitjbGFzcyBRV2Vi
RnJhbWU7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CisKK2NsYXNzIFFXZWJGcmFtZURhdGEgewor
cHVibGljOgorICAgIFFXZWJGcmFtZURhdGEoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkZyYW1l
KiBwYXJlbnRGcmFtZSA9IDAsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogPSAwLCBj
b25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lID0gV1RGOjpTdHJpbmcoKSk7CisKKyAgICBXZWJD
b3JlOjpLVVJMIHVybDsKKyAgICBXVEY6OlN0cmluZyBuYW1lOworICAgIFdlYkNvcmU6OkhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50OworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBmcmFtZTsKKyAgICBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0KiBmcmFtZUxvYWRlckNsaWVudDsKKworICAgIFdURjo6U3RyaW5nIHJlZmVy
cmVyOworICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOworICAgIGludCBtYXJnaW5XaWR0aDsKKyAg
ICBpbnQgbWFyZ2luSGVpZ2h0OworfTsKKworY2xhc3MgUVdlYkZyYW1lQWRhcHRlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFFVcmwgZW5zdXJlQWJzb2x1dGVVcmwoY29uc3QgUVVybCYpOworCisg
ICAgUVdlYkZyYW1lQWRhcHRlcigpOworICAgIHZpcnR1YWwgflFXZWJGcmFtZUFkYXB0ZXIoKTsK
KworICAgIHZpcnR1YWwgUVdlYkZyYW1lKiBhcGlIYW5kbGUoKSA9IDA7CisgICAgdmlydHVhbCBR
T2JqZWN0KiBoYW5kbGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZURpZENo
YW5nZShjb25zdCBRU2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJQb2xpY3ko
UXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVtaXRVcmxDaGFu
Z2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZVByb2dyZXNzRmluaXNoZWQoUVBvaW50KikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBlbWl0SW5pdGlhbExheW91dENvbXBsZXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW1pdEljb25DaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0TG9hZFN0YXJ0
ZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdExvYWRG
aW5pc2hlZChib29sIG9yaWdpbmF0aW5nTG9hZCwgYm9vbCBvaykgPSAwOworICAgIHZpcnR1YWwg
UVdlYkZyYW1lQWRhcHRlciogY3JlYXRlV2ViRnJhbWUoUVdlYkZyYW1lQWRhcHRlciopID0gMDsK
KworICAgIHZvaWQgbG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRTmV0d29ya0FjY2Vzc01h
bmFnZXI6Ok9wZXJhdGlvbiA9IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uLCBj
b25zdCBRQnl0ZUFycmF5JiBib2R5ID0gUUJ5dGVBcnJheSgpKTsKKyAgICBpbmxpbmUgYm9vbCBo
YXNWaWV3KCkgY29uc3QgeyByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnZpZXcoKTsgfQorI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChRR2VzdHVy
ZUV2ZW50RmFjYWRlKik7CisjZW5kaWYKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiBjcmVhdGVGcmFt
ZShRV2ViRnJhbWVEYXRhKik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNjcm9sbFBvc2l0aW9u
KCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsKKyAgICBR
V2ViUGFnZUFkYXB0ZXIqIHBhZ2VBZGFwdGVyOworCisvLyBwcm90ZWN0ZWQ6CisgICAgYm9vbCBh
bGxvd3NTY3JvbGxpbmc7CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGludCBtYXJnaW5IZWln
aHQ7CisKKy8vIHByaXZhdGU6CisgICAgdm9pZCBpbml0KFFXZWJGcmFtZURhdGEqKTsKKworICAg
IFdlYkNvcmU6OkZyYW1lICpmcmFtZTsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0
ICpmcmFtZUxvYWRlckNsaWVudDsKKyAgICBXZWJDb3JlOjpLVVJMIHVybDsKKworICAgIHN0YXRp
YyBRV2ViRnJhbWVBZGFwdGVyKiBraXQoY29uc3QgV2ViQ29yZTo6RnJhbWUqKTsKKworLy8gICAg
ZnJpZW5kIGNsYXNzIENocm9tZUNsaWVudFF0OworfTsKKworI2VuZGlmIC8vIFFXZWJGcmFtZUFk
YXB0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2Vi
UGFnZUFkYXB0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFn
ZUFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2OTJlZDllY2JhNzRhZmMwNDEwNDM4YjQwMTg2MmZh
MTFiNTdmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1FXZWJQYWdlQWRhcHRlci5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKKworI2luY2x1
ZGUgIi4uL0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIgorI2luY2x1ZGUgIi4uL0FwaS9xd2Vic2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5o
IgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAi
UVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlVuZG9TdGVwUXQuaCIKKyNpbmNsdWRlIDxQ
YWdlLmg+CisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworYm9vbCBRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1biA9IGZhbHNlOworCitR
V2ViUGFnZUFkYXB0ZXI6OlFXZWJQYWdlQWRhcHRlcigpCisgICAgOiBzZXR0aW5ncygwKQorICAg
ICwgcGFnZSgwKQorICAgICwgcGx1Z2luRmFjdG9yeSgwKQorICAgICwgZm9yd2FyZFVuc3VwcG9y
dGVkQ29udGVudChmYWxzZSkKKyAgICAsIGluc2lkZU9wZW5DYWxsKGZhbHNlKQorICAgICwgbmV0
d29ya01hbmFnZXIoMCkKK3sKK30KKworUVdlYlBhZ2VBZGFwdGVyOjp+UVdlYlBhZ2VBZGFwdGVy
KCkKK3sKKyAgICBkZWxldGUgcGFnZTsKKyAgICBkZWxldGUgc2V0dGluZ3M7CisKKyNpZiBFTkFC
TEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgIE5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+cmVt
b3ZlQ2xpZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZUFkYXB0ZXI6OmluaXQoUGFn
ZSogcGFnZSkKK3sKKyAgICB0aGlzLT5wYWdlID0gcGFnZTsKKyAgICBzZXR0aW5ncyA9IG5ldyBR
V2ViU2V0dGluZ3MocGFnZS0+c2V0dGluZ3MoKSk7CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9O
UykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgIFdlYkNvcmU6OnByb3ZpZGVO
b3RpZmljYXRpb24ocGFnZSwgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNh
dGlvblByZXNlbnRlcigpKTsKKyNlbmRpZgorfQorCit2b2lkIFFXZWJQYWdlQWRhcHRlcjo6ZGVs
ZXRlUGFnZSgpCit7CisgICAgZGVsZXRlIHBhZ2U7CisgICAgcGFnZSA9IDA7Cit9CisKK1FXZWJQ
YWdlQWRhcHRlciogUVdlYlBhZ2VBZGFwdGVyOjpraXQoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50UXQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkp
LT5tX3dlYlBhZ2U7Cit9CisKK1ZpZXdwb3J0QXJndW1lbnRzIFFXZWJQYWdlQWRhcHRlcjo6dmll
d3BvcnRBcmd1bWVudHMoKQoreworICAgIHJldHVybiBwYWdlID8gcGFnZS0+dmlld3BvcnRBcmd1
bWVudHMoKSA6IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzKCk7Cit9CisKKwordm9pZCBRV2Vi
UGFnZUFkYXB0ZXI6OnJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVu
ZG9TdGVwPiBzdGVwKQoreworICAgIGNyZWF0ZVVuZG9TdGVwKFFTaGFyZWRQb2ludGVyPFVuZG9T
dGVwUXQ+KG5ldyBVbmRvU3RlcFF0KHN0ZXApKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VBZGFwdGVy
OjpzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIp
Cit7CisgICAgaWYgKG1hbmFnZXIgPT0gbmV0d29ya01hbmFnZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAobmV0d29ya01hbmFnZXIgJiYgbmV0d29ya01hbmFnZXItPnBhcmVudCgpID09IGhh
bmRsZSgpKQorICAgICAgICBkZWxldGUgbmV0d29ya01hbmFnZXI7CisgICAgbmV0d29ya01hbmFn
ZXIgPSBtYW5hZ2VyOworfQorCitRTmV0d29ya0FjY2Vzc01hbmFnZXIqIFFXZWJQYWdlQWRhcHRl
cjo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKQoreworICAgIGlmICghbmV0d29ya01hbmFnZXIpCisg
ICAgICAgIG5ldHdvcmtNYW5hZ2VyID0gbmV3IFFOZXR3b3JrQWNjZXNzTWFuYWdlcihoYW5kbGUo
KSk7CisgICAgcmV0dXJuIG5ldHdvcmtNYW5hZ2VyOworfQorCit2b2lkIFFXZWJQYWdlQWRhcHRl
cjo6aW5pdEZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lKQoreworICAgIFFXZWJGcmFtZURh
dGEgZnJhbWVEYXRhKHBhZ2UpOworICAgIGZyYW1lLT5pbml0KCZmcmFtZURhdGEpOworCisgICAg
aWYgKCFmcmFtZURhdGEudXJsLmlzRW1wdHkoKSkgeworICAgICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChmcmFtZURhdGEudXJsLCBmcmFtZURhdGEucmVmZXJyZXIpOworICAg
ICAgICBmcmFtZS0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIGZyYW1lRGF0YS5uYW1l
LCBmYWxzZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUVdlYlBhZ2VBZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI1OGZmM2Q4ODJiYmNlMTlkZDJhNTEx
MGRiMzEzZGRjMjMwYTRkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUVdlYlBhZ2VBZGFwdGVyLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisjaWZuZGVmIFFXZWJQYWdlQWRhcHRlcl9oCisjZGVmaW5lIFFXZWJQYWdlQWRhcHRlcl9oCisK
KyNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRz
LmgiCisKKyNpbmNsdWRlIDxxbmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDxxcmVjdC5oPgor
I2luY2x1ZGUgPHFzY29wZWRwb2ludGVyLmg+CisjaW5jbHVkZSA8cXNoYXJlZHBvaW50ZXIuaD4K
KyNpbmNsdWRlIDxxc3RyaW5nLmg+CisjaW5jbHVkZSA8cXVybC5oPgorCitRVF9CRUdJTl9OQU1F
U1BBQ0UKK2NsYXNzIFFLZXlFdmVudDsKK2NsYXNzIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsKK1FU
X0VORF9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUGFnZTsKK2NsYXNz
IENocm9tZUNsaWVudFF0OworY2xhc3MgR2VvbG9jYXRpb25DbGllbnRRdDsKK2NsYXNzIFVuZG9T
dGVwOworfQorCitjbGFzcyBRdFBsdWdpbldpZGdldEFkYXB0ZXI7CitjbGFzcyBRV2ViRnJhbWVB
ZGFwdGVyOworY2xhc3MgUVdlYkhpc3RvcnlJdGVtOworY2xhc3MgUVdlYlBhZ2VDbGllbnQ7Citj
bGFzcyBRV2ViUGx1Z2luRmFjdG9yeTsKK2NsYXNzIFFXZWJTZWN1cml0eU9yaWdpbjsKK2NsYXNz
IFFXZWJTZWxlY3RNZXRob2Q7CitjbGFzcyBRV2ViU2V0dGluZ3M7CitjbGFzcyBRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlcjsKK2NsYXNzIFVuZG9TdGVwUXQ7CisKKworY2xhc3MgUVdlYlBhZ2VB
ZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBRV2ViUGFnZUFkYXB0ZXIoKTsKKyAgICB2aXJ0dWFsIH5R
V2ViUGFnZUFkYXB0ZXIoKTsKKworICAgIHZvaWQgaW5pdChXZWJDb3JlOjpQYWdlKik7CisgICAg
Ly8gQ2FsbGVkIG1hbnVhbGx5IGZyb20gflFXZWJQYWdlIGRlc3RydWN0b3IgdG8gZW5zdXJlIHRo
YXQKKyAgICAvLyB0aGUgUVdlYlBhZ2VBZGFwdGVyIGFuZCB0aGUgUVdlYlBhZ2VQcml2YXRlIGFy
ZSBpbnRhY3Qgd2hlbgorICAgIC8vIHZhcmlvdXMgZGVzdHJ1Y3Rpb24gY2FsbGJhY2tzIGZyb20g
V2ViQ29yZTo6UGFnZTo6flBhZ2UoKSBoaXQgdXMuCisgICAgdm9pZCBkZWxldGVQYWdlKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2hvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldFdpbmRvd1JlY3QoY29uc3QgUVJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBRU2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBRV2ViUGFnZUFkYXB0ZXIqIGNyZWF0
ZVdpbmRvdyhib29sIC8qZGlhbG9nKi8pID0gMDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGhhbmRs
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgamF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0
IFFTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBRU3RyaW5nJiBzb3VyY2VJ
RCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRl
ciosIGNvbnN0IFFTdHJpbmcmIG1zZykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBqYXZhU2NyaXB0
Q29uZmlybShRV2ViRnJhbWVBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbXNnKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGphdmFTY3JpcHRQcm9tcHQoUVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFT
dHJpbmcmIG1zZywgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBRU3RyaW5nKiByZXN1bHQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFFXZWJGcmFtZUFk
YXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBkYXRhYmFzZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbGljYXRpb25DYWNoZVF1b3RhRXhjZWVkZWQoUVdlYlNlY3VyaXR5T3JpZ2luKiwgcXVp
bnQ2NCBkZWZhdWx0T3JpZ2luUXVvdGEsIHF1aW50NjQgdG90YWxTcGFjZU5lZWRlZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFFTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCBRU3RyaW5nTGlzdCBjaG9vc2VGaWxlcyhRV2ViRnJhbWVBZGFwdGVyKiwgYm9vbCBhbGxv
d011bHRpcGxlLCBjb25zdCBRU3RyaW5nTGlzdCYgc3VnZ2VzdGVkRmlsZU5hbWVzKSA9IDA7Cisg
ICAgdmlydHVhbCBRQ29sb3IgY29sb3JTZWxlY3Rpb25SZXF1ZXN0ZWQoY29uc3QgUUNvbG9yJiBz
ZWxlY3RlZENvbG9yKSA9IDA7CisgICAgdmlydHVhbCBRV2ViU2VsZWN0TWV0aG9kKiBjcmVhdGVT
ZWxlY3RQb3B1cCgpID0gMDsKKyAgICB2aXJ0dWFsIFFSZWN0IHZpZXdSZWN0UmVsYXRpdmVUb1dp
bmRvdygpID0gMDsKKworI2lmIFVTRShRVF9NVUxUSU1FRElBKQorICAgIHZpcnR1YWwgUVdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXIqIGNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSA9IDA7
CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdGVk
KFFXZWJGcmFtZUFkYXB0ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RDYW5jZWxsZWQoUVdlYkZyYW1lQWRhcHRlciopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRl
ciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1ZXN0
Q2FuY2VsbGVkKFFXZWJGcmFtZUFkYXB0ZXIqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtaWNyb0ZvY3VzQ2hhbmdl
ZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJpZ2dlckNvcHlBY3Rpb24oKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChRS2V5RXZlbnQqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1N0YWNrKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBj
YW5VbmRvKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5SZWRvKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1bmRvKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWRvKCkg
PSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZWRpdG9yQ29tbWFuZEZvcktleUV2ZW50KFFL
ZXlFdmVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVW5kb1N0ZXAoUVNoYXJlZFBv
aW50ZXI8VW5kb1N0ZXBRdD4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYXZpZ2F0
aW9uQWN0aW9ucygpID0gMDsKKworICAgIHZpcnR1YWwgUVdlYkZyYW1lQWRhcHRlciogbWFpbkZy
YW1lQWRhcHRlcigpID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogaW5zcGVjdG9ySGFuZGxl
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZChRT2JqZWN0Kikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNwZWN0b3JXaW5kb3dUaXRsZShjb25zdCBRU3Ry
aW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVXZWJJbnNwZWN0b3IoUU9iamVjdCoq
IGluc3BlY3RvclZpZXcsIFFXZWJQYWdlQWRhcHRlcioqIGluc3BlY3RvclBhZ2UpID0gMDsKKyAg
ICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1lbnVBY3Rpb25zQXNUZXh0KCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBlbWl0Vmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRTmV0
d29ya1JlcXVlc3QmLCBpbnQgdHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0UmVzdG9y
ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciAqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyICosIFFX
ZWJIaXN0b3J5SXRlbSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdERvd25sb2FkUmVxdWVz
dGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdEZy
YW1lQ3JlYXRlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZyB1
c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNFcnJvclBhZ2VFeHRlbnNpb24oKSBjb25zdCA9IDA7CisgICAgc3RydWN0IEVycm9y
UGFnZU9wdGlvbiB7CisgICAgICAgIFFVcmwgdXJsOworICAgICAgICBRV2ViRnJhbWVBZGFwdGVy
KiBmcmFtZTsKKyAgICAgICAgUVN0cmluZyBkb21haW47CisgICAgICAgIGludCBlcnJvcjsKKyAg
ICAgICAgUVN0cmluZyBlcnJvclN0cmluZzsKKyAgICB9OworICAgIHN0cnVjdCBFcnJvclBhZ2VS
ZXR1cm4geworICAgICAgICBRU3RyaW5nIGNvbnRlbnRUeXBlOworICAgICAgICBRU3RyaW5nIGVu
Y29kaW5nOworICAgICAgICBRVXJsIGJhc2VVcmw7CisgICAgICAgIFFCeXRlQXJyYXkgY29udGVu
dDsKKyAgICB9OworICAgIHZpcnR1YWwgYm9vbCBlcnJvclBhZ2VFeHRlbnNpb24oRXJyb3JQYWdl
T3B0aW9uKiwgRXJyb3JQYWdlUmV0dXJuKikgPSAwOworICAgIHZpcnR1YWwgUXRQbHVnaW5XaWRn
ZXRBZGFwdGVyKiBjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyYsIGNvbnN0IFFVcmwmLCBjb25z
dCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0JikgPSAwOworICAgIHZpcnR1YWwgUXRQ
bHVnaW5XaWRnZXRBZGFwdGVyKiBhZGFwdGVyRm9yV2lkZ2V0KFFPYmplY3QqKSBjb25zdCA9IDA7
CisKKworICAgIHN0YXRpYyBRV2ViUGFnZUFkYXB0ZXIqIGtpdChXZWJDb3JlOjpQYWdlKik7Cisg
ICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICB2
b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPik7
CisgICAgdm9pZCBpbml0RnJhbWUoUVdlYkZyYW1lQWRhcHRlciopOworCisgICAgdm9pZCBzZXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIqKTsKKyAgICBRTmV0d29y
a0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7CisKKyAgICBRV2ViU2V0dGlu
Z3MgKnNldHRpbmdzOworCisgICAgV2ViQ29yZTo6UGFnZSAqcGFnZTsKKyAgICBRU2NvcGVkUG9p
bnRlcjxRV2ViUGFnZUNsaWVudD4gY2xpZW50OworCisgICAgUVdlYlBsdWdpbkZhY3RvcnkgKnBs
dWdpbkZhY3Rvcnk7CisKKyAgICBib29sIGZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQ7CisgICAg
Ym9vbCBpbnNpZGVPcGVuQ2FsbDsKKworcHJpdmF0ZToKKyAgICBRTmV0d29ya0FjY2Vzc01hbmFn
ZXIgKm5ldHdvcmtNYW5hZ2VyOworCitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgZHJ0UnVuOwor
CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OworICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OworfTsKKworI2VuZGlmIC8vIFFXZWJQ
YWdlQWRhcHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1FXZWJVbmRvQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FX
ZWJVbmRvQ29tbWFuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE5NmRmNTBkNzQ1ZDA0NjkyOTg5YjA4NGRk
NzhlNGZhYmM2ZGQzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlFXZWJVbmRvQ29tbWFuZC5oIgorCisjaW5j
bHVkZSAiVW5kb1N0ZXBRdC5oIgorCisjaWZuZGVmIFFUX05PX1VORE9DT01NQU5ECitRV2ViVW5k
b0NvbW1hbmQ6OlFXZWJVbmRvQ29tbWFuZChRU2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0PiB1bmRv
U3RlcCwgUVVuZG9Db21tYW5kKiBwYXJlbnQpCisgICAgOiBRVW5kb0NvbW1hbmQocGFyZW50KQor
ICAgICwgbV9zdGVwKHVuZG9TdGVwKQoreworICAgIFFfQVNTRVJUKHVuZG9TdGVwKTsKKyAgICBz
ZXRUZXh0KG1fc3RlcC0+dGV4dCgpKTsKK30KKwordm9pZCBRV2ViVW5kb0NvbW1hbmQ6OnVuZG8o
KQoreworICAgIG1fc3RlcC0+dW5kbygpOworfQorCit2b2lkIFFXZWJVbmRvQ29tbWFuZDo6cmVk
bygpCit7CisgICAgbV9zdGVwLT5yZWRvKCk7Cit9CisKKyNlbmRpZiAvLyBRVF9OT19VTkRPQ09N
TUFORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViVW5k
b0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlVuZG9Db21t
YW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmU2MTIxYWRjMjkxMTBiZjAzNDkxN2YyZjBkY2FhY2Q0Y2U2NGZk
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdl
YlVuZG9Db21tYW5kLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdlYlVu
ZG9Db21tYW5kX2gKKyNkZWZpbmUgUVdlYlVuZG9Db21tYW5kX2gKKworI2luY2x1ZGUgPHFzaGFy
ZWRwb2ludGVyLmg+CisjaW5jbHVkZSA8cXVuZG9zdGFjay5oPgorCitjbGFzcyBVbmRvU3RlcFF0
OworCisjaWZuZGVmIFFUX05PX1VORE9DT01NQU5ECisKK2NsYXNzIFFXZWJVbmRvQ29tbWFuZCA6
IHB1YmxpYyBRVW5kb0NvbW1hbmQgeworcHVibGljOgorICAgIFFXZWJVbmRvQ29tbWFuZChRU2hh
cmVkUG9pbnRlcjxVbmRvU3RlcFF0PiwgUVVuZG9Db21tYW5kICpwYXJlbnQgPSAwKTsKKworICAg
IHZvaWQgdW5kbygpOworICAgIHZvaWQgcmVkbygpOworCitwcml2YXRlOgorICAgIFFTaGFyZWRQ
b2ludGVyPFVuZG9TdGVwUXQ+IG1fc3RlcDsKK307CisKKyNlbmRpZiAvLyBRVF9OT19VTkRPQ09N
TUFORAorCisjZW5kaWYgLy8gUVdlYlVuZG9Db21tYW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0UGx1Z2luSW1wbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmJlYWJmMWQwODU4NmNkNTUzNDM4YjcyMDhmYThhMzE1ZmJlMTliMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuY3Bw
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJRV2lkZ2V0UGx1Z2luSW1wbC5oIgorCisjaW5jbHVkZSA8UVdpZGdldD4KKworUVdpZGdl
dFBsdWdpbkltcGw6On5RV2lkZ2V0UGx1Z2luSW1wbCgpCit7CisgICAgbV93aWRnZXQtPmRlbGV0
ZUxhdGVyKCk7Cit9CisKK3ZvaWQgUVdpZGdldFBsdWdpbkltcGw6OnVwZGF0ZShjb25zdCBRUmVj
dCAmcmVjdCkKK3sKKyAgICBtX3dpZGdldC0+dXBkYXRlKHJlY3QpOworfQorCit2b2lkIFFXaWRn
ZXRQbHVnaW5JbXBsOjpzZXRHZW9tZXRyeUFuZENsaXAoY29uc3QgUVJlY3QgJmdlb21ldHJ5LCBj
b25zdCBRUmVjdCAmY2xpcFJlY3QsIGJvb2wgaXNWaXNpYmxlKQoreworICAgIG1fd2lkZ2V0LT5z
ZXRHZW9tZXRyeShnZW9tZXRyeSk7CisgICAgaWYgKCFjbGlwUmVjdC5pc051bGwoKSkgeworICAg
ICAgICBRUmVjdCBjbGlwKGNsaXBSZWN0LmludGVyc2VjdGVkKG1fd2lkZ2V0LT5yZWN0KCkpKTsK
KyAgICAgICAgbV93aWRnZXQtPnNldE1hc2soUVJlZ2lvbihjbGlwKSk7CisgICAgfQorICAgIG1f
d2lkZ2V0LT51cGRhdGUoKTsKKyAgICBzZXRWaXNpYmxlKGlzVmlzaWJsZSk7Cit9CisKK3ZvaWQg
UVdpZGdldFBsdWdpbkltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIC8vIElm
IHNldE1hc2sgaXMgc2V0IHdpdGggYW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAor
ICAgIC8vIGJlIHBlcmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsYXRmb3Jt
V2lkZ2V0LgorICAgIFFSZWdpb24gbWFzayA9IG1fd2lkZ2V0LT5tYXNrKCk7CisgICAgbV93aWRn
ZXQtPnNldFZpc2libGUodmlzaWJsZSAmJiAhbWFzay5pc0VtcHR5KCkpOworfQorCit2b2lkIFFX
aWRnZXRQbHVnaW5JbXBsOjpzZXRTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcgJnN0eWxlc2hlZXQp
Cit7CisgICAgbV93aWRnZXQtPnNldFN0eWxlU2hlZXQoc3R5bGVzaGVldCk7Cit9CisKK3ZvaWQg
UVdpZGdldFBsdWdpbkltcGw6OnNldFdpZGdldFBhcmVudChRT2JqZWN0ICpwYXJlbnQpCit7Cisg
ICAgaWYgKCFwYXJlbnQtPmlzV2lkZ2V0VHlwZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV93
aWRnZXQtPnNldFBhcmVudChxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHBhcmVudCkpOworfQorCitR
T2JqZWN0KiBRV2lkZ2V0UGx1Z2luSW1wbDo6aGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV93aWRnZXQ7Cit9CisKKyNpbmNsdWRlICJtb2NfUVdpZGdldFBsdWdpbkltcGwuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0UGx1Z2luSW1w
bC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2lkZ2V0UGx1Z2luSW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc0NTliN2VmZjU4NzAxM2YzYWYyNDhmN2MyYzkxMjg2Y2Y3NDk5ZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQ
bHVnaW5JbXBsLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBE
aWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdpZGdldFBs
dWdpbkltcGxfaAorI2RlZmluZSBRV2lkZ2V0UGx1Z2luSW1wbF9oCisKKyNpbmNsdWRlICJRdFBs
dWdpbldpZGdldEFkYXB0ZXIuaCIKKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRV2lkZ2V0
OworUVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBRV2lkZ2V0UGx1Z2luSW1wbCA6IHB1YmxpYyBR
dFBsdWdpbldpZGdldEFkYXB0ZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdpZGdl
dFBsdWdpbkltcGwoUVdpZGdldCAqdykgOiBtX3dpZGdldCh3KSB7IH0KKyAgICB2aXJ0dWFsIH5R
V2lkZ2V0UGx1Z2luSW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3Qg
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5QW5kQ2xpcChjb25zdCBR
UmVjdCYsIGNvbnN0IFFSZWN0JiwgYm9vbCBpc1Zpc2libGUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRT
dHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
V2lkZ2V0UGFyZW50KFFPYmplY3QgKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRT2JqZWN0KiBo
YW5kbGUoKSBjb25zdCBPVkVSUklERTsKK3ByaXZhdGU6CisgICAgUVdpZGdldCAqbV93aWRnZXQ7
Cit9OworCisjZW5kaWYgLy8gUVdpZGdldFBsdWdpbkltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwCmluZGV4IGNk
YzZlZTBjOTk2ZDA2MzI2ZDE1NTc1MWRkNTg5NTk1YWRlNDUyOWIuLmIyZmJmNjI0YWE5NWJhZGQw
NDgwYWY1MzdiNWE0ZmRhMmQ5MjcwZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5jcHAKQEAgLTIzLDE4ICsyMywxOCBA
QAogCiAjaWZuZGVmIFFUX05PX0NPTUJPQk9YCiAKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5o
IgotI2luY2x1ZGUgIlF0V2ViQ29tYm9Cb3guaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIu
aCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlF0V2ViQ29tYm9Cb3gu
aCIKICNpbmNsdWRlICJxZ3JhcGhpY3N3ZWJ2aWV3LmgiCiAjaW5jbHVkZSA8UUdyYXBoaWNzUHJv
eHlXaWRnZXQ+CiAjaW5jbHVkZSA8UXRHdWkvUVN0YW5kYXJkSXRlbU1vZGVsPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVF0RmFsbGJhY2tXZWJQb3B1cDo6UXRGYWxsYmFja1dlYlBvcHVwKGNv
bnN0IENocm9tZUNsaWVudFF0KiBjaHJvbWVDbGllbnQpCitRdEZhbGxiYWNrV2ViUG9wdXA6OlF0
RmFsbGJhY2tXZWJQb3B1cChjb25zdCBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UpCiAgICAgOiBtX2Nv
bWJvKDApCi0gICAgLCBtX2Nocm9tZUNsaWVudChjaHJvbWVDbGllbnQpCisgICAgLCBtX3BhZ2Uo
cGFnZSkKIHsKIH0KIApAQCAtNjMsOSArNjMsOCBAQCB2b2lkIFF0RmFsbGJhY2tXZWJQb3B1cDo6
c2hvdyhjb25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0YSkKICAgICAgICAgcHJveHktPnNldFdpZGdl
dChtX2NvbWJvKTsKICAgICAgICAgcHJveHktPnNldEdlb21ldHJ5KHJlY3QpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1fY29tYm8tPnNldFBhcmVudChwYWdlQ2xpZW50KCktPm93bmVyV2lkZ2V0
KCkpOwotICAgICAgICBtX2NvbWJvLT5zZXRHZW9tZXRyeShRUmVjdChyZWN0LmxlZnQoKSwgcmVj
dC50b3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCksIG1f
Y29tYm8tPnNpemVIaW50KCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgbV9jb21iby0+c2V0UGFyZW50
KHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ocGFnZUNsaWVudCgpLT5vd25lcldpZGdldCgpKSk7Cisg
ICAgICAgIG1fY29tYm8tPnNldEdlb21ldHJ5KFFSZWN0KHJlY3QubGVmdCgpLCByZWN0LnRvcCgp
LCByZWN0LndpZHRoKCksIG1fY29tYm8tPnNpemVIaW50KCkuaGVpZ2h0KCkpKTsKICAgICB9CiAK
ICAgICBtX2NvbWJvLT5zaG93UG9wdXBBdEN1cnNvclBvc2l0aW9uKCk7CkBAIC0xMzEsNyArMTMw
LDcgQEAgdm9pZCBRdEZhbGxiYWNrV2ViUG9wdXA6OmRlbGV0ZUNvbWJvQm94KCkKIAogUVdlYlBh
Z2VDbGllbnQqIFF0RmFsbGJhY2tXZWJQb3B1cDo6cGFnZUNsaWVudCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fY2hyb21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICByZXR1cm4g
bV9wYWdlLT5jbGllbnQuZGF0YSgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuaAppbmRleCBmNzUzMzczYmU0MzVk
YzkzZTljNGRlNjBiNDc0ZGIxMTk0ODMyNDRkLi42OWI0OWJkYmY4ODUxODZhZjU0NWY2ZWRiYTM5
MGM2NTc1NTVmMDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1F0RmFsbGJhY2tXZWJQb3B1cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRGYWxsYmFja1dlYlBvcHVwLmgKQEAgLTIzLDggKzIzLDYgQEAKICNpbmNsdWRlICJxd2Vi
a2l0cGxhdGZvcm1wbHVnaW4uaCIKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2luY2x1
ZGUgPFFDb21ib0JveD4KLQogI2lmbmRlZiBRVF9OT19DT01CT0JPWAogCiBRVF9CRUdJTl9OQU1F
U1BBQ0UKQEAgLTMyLDE2ICszMCwxNiBAQCBjbGFzcyBRR3JhcGhpY3NQcm94eVdpZGdldDsKIFFU
X0VORF9OQU1FU1BBQ0UKIAogY2xhc3MgUVdlYlBhZ2VDbGllbnQ7CitjbGFzcyBRV2ViUGFnZUFk
YXB0ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2hyb21lQ2xpZW50UXQ7CiBj
bGFzcyBRdFdlYkNvbWJvQm94OwogCiBjbGFzcyBRdEZhbGxiYWNrV2ViUG9wdXAgOiBwdWJsaWMg
UVdlYlNlbGVjdE1ldGhvZCB7CiAgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBRdEZhbGxiYWNr
V2ViUG9wdXAoY29uc3QgQ2hyb21lQ2xpZW50UXQqKTsKKyAgICBRdEZhbGxiYWNrV2ViUG9wdXAo
Y29uc3QgUVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgflF0RmFsbGJhY2tXZWJQb3B1cCgpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKQEAgLTU5LDcgKzU3
LDcgQEAgcHJpdmF0ZSBRX1NMT1RTOgogCiBwcml2YXRlOgogICAgIFF0V2ViQ29tYm9Cb3gqIG1f
Y29tYm87Ci0gICAgY29uc3QgQ2hyb21lQ2xpZW50UXQqIG1fY2hyb21lQ2xpZW50OworICAgIGNv
bnN0IFFXZWJQYWdlQWRhcHRlciogbV9wYWdlOwogICAgIFFSZWN0IG1fZ2VvbWV0cnk7CiAgICAg
UUZvbnQgbV9mb250OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmNwcAppbmRleCA3ZDg2ODhiOTU5ZWNjN2IzYjEwZWJjNTkwM2Zi
YWNkNGI1YzJiNDFlLi4yM2I0MGI0YWU2NTFhYmJlNWM3ZmUzZmUxMjFmNGQ4ZGIwNmVjNTU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJRdFBsYXRmb3JtUGx1Z2luLmgiCiAKLSNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4u
aCIKKyNpbmNsdWRlICIuLi9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCiAKICNpbmNsdWRl
IDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEaXI+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGx1Z2luV2lkZ2V0QWRhcHRlci5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFkYXB0ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NDk0ZDNkYjJhOTg1NWY3NGJhOGE5N2ZjNWJjZDMzYTUzZTkyNGM2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFk
YXB0ZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lh
IFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRdFBsdWdpbldpZGdl
dEFkYXB0ZXJfaAorI2RlZmluZSBRdFBsdWdpbldpZGdldEFkYXB0ZXJfaAorCisjaW5jbHVkZSA8
UU9iamVjdD4KKyNpbmNsdWRlIDxRUmVjdD4KKyNpbmNsdWRlIDxRU3RyaW5nPgorCitjbGFzcyBR
dFBsdWdpbldpZGdldEFkYXB0ZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0IFFSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRHZW9tZXRyeUFuZENsaXAoY29uc3QgUVJlY3QmLCBjb25zdCBRUmVjdCYs
IGJvb2wgaXNWaXNpYmxlID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgUVN0cmlu
ZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0UGFyZW50KFFPYmplY3QqKSA9IDA7
CisgICAgdmlydHVhbCBRT2JqZWN0KiBoYW5kbGUoKSBjb25zdCA9IDA7Cit9OworCisjZW5kaWYg
Ly8gUXRQbHVnaW5XaWRnZXRBZGFwdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guY3BwCmluZGV4IGY1MjQ2NWYwZGM4M2QzNDNjYWZjNmVi
YzI1M2JjYzk5NWNiY2ZkNmYuLjJjMjJjZDQ3NmM2ZDU5YjM4MDIwYmZiZDMwMmQ1NzUyZDAyM2U3
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21i
b0JveC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJv
Qm94LmNwcApAQCAtNDEsOCArNDEsNyBAQCBRdFdlYkNvbWJvQm94OjpRdFdlYkNvbWJvQm94KCkK
IAogdm9pZCBRdFdlYkNvbWJvQm94OjpzaG93UG9wdXBBdEN1cnNvclBvc2l0aW9uKCkKIHsKLSAg
ICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3MsIFFDdXJzb3I6OnBv
cygpLCBRdDo6TGVmdEJ1dHRvbiwKLSAgICAgICAgICAgICAgICAgICAgICBRdDo6TGVmdEJ1dHRv
biwgUXQ6Ok5vTW9kaWZpZXIpOworICAgIFFNb3VzZUV2ZW50IGV2ZW50KFFFdmVudDo6TW91c2VC
dXR0b25QcmVzcywgUUN1cnNvcjo6cG9zKCksIFF0OjpMZWZ0QnV0dG9uLCBRdDo6TGVmdEJ1dHRv
biwgUXQ6Ok5vTW9kaWZpZXIpOwogICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudCh0aGlz
LCAmZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0V2ViQ29tYm9Cb3guaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRX
ZWJDb21ib0JveC5oCmluZGV4IDQyNjQ3NTc2Njc4MjI0YjQ1OGNiNjA2OTE1NTVlN2NiMGVkZGQz
OTkuLmUzMjQyN2VkZjRkNGI3Zjk3ZGVkZWI4ZThlZTRlMDI2MDRlZGM3NjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5oCkBAIC0yMSw5ICsy
MSw4IEBACiAjaWZuZGVmIFF0V2ViQ29tYm9Cb3hfaAogI2RlZmluZSBRdFdlYkNvbWJvQm94X2gK
IAotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCiAjaW5jbHVkZSA8UUNvbWJvQm94PgorI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiAjaWZuZGVmIFFUX05PX0NPTUJPQk9YCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQu
aCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaApp
bmRleCAxMWE5NjQxMDUyOGYwMTE1ZTJjMjcyYzIwZDM5YTA4YWRkZGE2YTNiLi40YWU4NTgyYTNm
MDQwZGJhMDllMTM1NjYzMjg2ZTcxNTY5MjkwOTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmgKKysrIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5oCkBAIC0yNyw3ICsyNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2VhcmNoUG9wdXBNZW51UXQgOiBwdWJsaWMg
U2VhcmNoUG9wdXBNZW51IHsKIHB1YmxpYzoKLSAgICBTZWFyY2hQb3B1cE1lbnVRdChQYXNzUmVm
UHRyPFBvcHVwTWVudT4gcG9wdXApOworICAgIFNlYXJjaFBvcHVwTWVudVF0KFBhc3NSZWZQdHI8
UG9wdXBNZW51Pik7CiAKICAgICB2aXJ0dWFsIFBvcHVwTWVudSogcG9wdXBNZW51KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oCmluZGV4IGJmOWRl
ZDQ2NThkOTQ1NTY1NGFhYTc3Y2RmOTRjN2FlMGY4MzdjOWEuLjk4MWZkYzBiOWU3NjQ1ZTc2OGUy
MDY4ZTg5MTE1ZjVkNzBkNDM4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oCkBAIC0yOSw5ICsyOSw5IEBACiAjaWZu
ZGVmIFRleHRDaGVja2VyQ2xpZW50UXRfaAogI2RlZmluZSBUZXh0Q2hlY2tlckNsaWVudFF0X2gK
IAorI2luY2x1ZGUgIi4uL0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKICNpbmNsdWRlICJR
dFBsYXRmb3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKLSNpbmNs
dWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvVW5kb1N0ZXBRdC5jcHAKaW5kZXggMTVkZjJlZTUwMmM2MWYxYzE0OGRiY2U3MzBhNDM5
MDlkNjkyNmVkZC4uMzhkMzc3YWU0ZDNkNDc0ZTg4NmY5ZjE2YTU2Mzk1YzdhZTFlMDNjZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwCkBAIC0y
MCw5ICsyMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlVuZG9TdGVwUXQu
aCIKIAorI2luY2x1ZGUgPHFvYmplY3QuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LSNpZm5kZWYgUVRfTk9fVU5ET0NPTU1BTkQKIHN0YXRpYyBRU3RyaW5nIHVuZG9OYW1lRm9yRWRp
dEFjdGlvbihjb25zdCBFZGl0QWN0aW9uIGVkaXRBY3Rpb24pCiB7CiAgICAgc3dpdGNoIChlZGl0
QWN0aW9uKSB7CkBAIC0xMDYsMjYgKzEwNywxOCBAQCBzdGF0aWMgUVN0cmluZyB1bmRvTmFtZUZv
ckVkaXRBY3Rpb24oY29uc3QgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQogICAgIHJldHVybiBRU3Ry
aW5nKCk7CiB9CiAKLVVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+
IHN0ZXAsIFFVbmRvQ29tbWFuZCAqcGFyZW50KQotICAgIDogUVVuZG9Db21tYW5kKHBhcmVudCkK
LSAgICAsIG1fc3RlcChzdGVwKQotICAgICwgbV9maXJzdCh0cnVlKQotewotICAgIHNldFRleHQo
dW5kb05hbWVGb3JFZGl0QWN0aW9uKHN0ZXAtPmVkaXRpbmdBY3Rpb24oKSkpOwotfQotI2Vsc2UK
IFVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+IHN0ZXApCiAgICAg
OiBtX3N0ZXAoc3RlcCkKICAgICAsIG1fZmlyc3QodHJ1ZSkKIHsKKyAgICBtX3RleHQgPSB1bmRv
TmFtZUZvckVkaXRBY3Rpb24oc3RlcC0+ZWRpdGluZ0FjdGlvbigpKTsKIH0KLSNlbmRpZgorCiAK
IFVuZG9TdGVwUXQ6On5VbmRvU3RlcFF0KCkKIHsKIH0KIAotCiB2b2lkIFVuZG9TdGVwUXQ6OnJl
ZG8oKQogewogICAgIGlmIChtX2ZpcnN0KSB7CkBAIC0xNDUsMyArMTM4LDkgQEAgdm9pZCBVbmRv
U3RlcFF0Ojp1bmRvKCkKIAogCiAvLyB2aW06IHRzPTQgc3c9NCBldAorCisKK1FTdHJpbmcgVW5k
b1N0ZXBRdDo6dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dDsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVW5kb1N0ZXBRdC5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgKaW5kZXggM2MxNDM0MDNhNzdk
ZjI4ZGI5MTRjMmNmMzg5ODQzZWU2M2UxMWMxZi4uODVkNzk5MWMzNzkzZjQzOGFmMTI4YmNiMmFm
OGFhOGM0YmQ0NDJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9VbmRvU3RlcFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRv
U3RlcFF0LmgKQEAgLTIwLDI5ICsyMCwyNCBAQAogI2lmbmRlZiBVbmRvU3RlcFF0X2gKICNkZWZp
bmUgVW5kb1N0ZXBRdF9oCiAKLSNpbmNsdWRlIDxRVW5kb0NvbW1hbmQ+CiAjaW5jbHVkZSA8VW5k
b1N0ZXAuaD4KKworI2luY2x1ZGUgPHFzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKLWNsYXNzIFVuZG9TdGVwUXQKLSNpZm5kZWYgUVRfTk9fVU5ET0NPTU1BTkQKLSAgICA6IHB1
YmxpYyBRVW5kb0NvbW1hbmQKLSNlbmRpZgoteworY2xhc3MgVW5kb1N0ZXBRdCB7CiAgICAgcHVi
bGljOgotI2lmbmRlZiBRVF9OT19VTkRPQ09NTUFORAotICAgICAgICBVbmRvU3RlcFF0KFdURjo6
UmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwLCBRVW5kb0NvbW1hbmQgKnBhcmVudCA9IDAp
OwotI2Vsc2UKLSAgICAgICAgVW5kb1N0ZXBRdChXVEY6OlJlZlB0cjxXZWJDb3JlOjpVbmRvU3Rl
cD4gc3RlcCk7Ci0jZW5kaWYKKyAgICAgICAgVW5kb1N0ZXBRdChXVEY6OlJlZlB0cjxXZWJDb3Jl
OjpVbmRvU3RlcD4pOwogICAgICAgICB+VW5kb1N0ZXBRdCgpOwogCiAgICAgICAgIHZvaWQgcmVk
bygpOwogICAgICAgICB2b2lkIHVuZG8oKTsKKyAgICAgICAgUVN0cmluZyB0ZXh0KCkgY29uc3Q7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4g
bV9zdGVwOwogICAgICAgICBib29sIG1fZmlyc3Q7CisgICAgICAgIFFTdHJpbmcgbV90ZXh0Owog
fTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZDYxNTkyNDFlNGZjNjRlOTdmNzU3MGI1ZTA0
MzJhYjNjMjQzNDkwMy4uNDQ0OWMxNTU3MGVlZGIzYTllOGZlZTQ5Njk2MDMwNGU0MWMzOGU2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRD
b252ZXJzaW9uLmNwcApAQCAtMjcsMTMgKzI3LDggQEAKICNpbmNsdWRlICJQbGF0Zm9ybVRvdWNo
RXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUdl
c3R1cmU+Ci0jaW5jbHVkZSA8UUdlc3R1cmVFdmVudD4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2Vu
ZU1vdXNlRXZlbnQ+CiAjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CiAjaW5jbHVkZSA8UVdoZWVsRXZl
bnQ+Ci0jaW5jbHVkZSA8UVdpZGdldD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsNTQgKzQ4LDI4IEBAIHN0YXRpYyB2b2lkIG1vdXNl
RXZlbnRNb2RpZmllcnNGcm9tUXRLZXlib2FyZE1vZGlmaWVycyhRdDo6S2V5Ym9hcmRNb2RpZmll
cnMga2V5CiAKIHN0YXRpYyB2b2lkIG1vdXNlRXZlbnRUeXBlQW5kTW91c2VCdXR0b25Gcm9tUUV2
ZW50KGNvbnN0IFFFdmVudCogZXZlbnQsIFBsYXRmb3JtRXZlbnQ6OlR5cGUmIG1vdXNlRXZlbnRU
eXBlLCBNb3VzZUJ1dHRvbiYgbW91c2VCdXR0b24pCiB7Ci0gICAgZW51bSB7IE1vdXNlRXZlbnQs
IEdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50IH0gZnJhbWV3b3JrTW91c2VFdmVudFR5cGU7CiAgICAg
c3dpdGNoIChldmVudC0+dHlwZSgpKSB7CiAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJs
Q2xpY2s6CiAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3M6Ci0gICAgICAgIGZyYW1l
d29ya01vdXNlRXZlbnRUeXBlID0gTW91c2VFdmVudDsKICAgICAgICAgbW91c2VFdmVudFR5cGUg
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U6Ci0gICAgICAgIGZyYW1ld29ya01vdXNlRXZlbnRU
eXBlID0gTW91c2VFdmVudDsKICAgICAgICAgbW91c2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50
OjpNb3VzZVJlbGVhc2VkOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFFFdmVudDo6TW91c2VN
b3ZlOgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IE1vdXNlRXZlbnQ7Ci0gICAg
ICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZURvdWJsZUNsaWNrOgot
ICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VQcmVzczoKLSAgICAgICAgZnJhbWV3
b3JrTW91c2VFdmVudFR5cGUgPSBHcmFwaGljc1NjZW5lTW91c2VFdmVudDsKLSAgICAgICAgbW91
c2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VSZWxlYXNlOgotICAgICAgICBm
cmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IEdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50OwotICAgICAg
ICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VNb3ZlOgotICAgICAg
ICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IEdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50OwogICAg
ICAgICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IE1vdXNlRXZlbnQ7CiAgICAgICAgIG1vdXNl
RXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgUXQ6Ok1vdXNlQnV0dG9ucyBtb3VzZUJ1dHRvbnM7Ci0gICAgc3dpdGNoIChm
cmFtZXdvcmtNb3VzZUV2ZW50VHlwZSkgewotICAgIGNhc2UgTW91c2VFdmVudDogewotICAgICAg
ICBjb25zdCBRTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PGNvbnN0IFFNb3Vz
ZUV2ZW50Kj4oZXZlbnQpOwotICAgICAgICBtb3VzZUJ1dHRvbnMgPSBtb3VzZUV2ZW50VHlwZSA9
PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkID8gbW91c2VFdmVudC0+YnV0dG9ucygpIDogbW91
c2VFdmVudC0+YnV0dG9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50OiB7Ci0gICAgICAgIGNvbnN0IFFHcmFwaGljc1NjZW5lTW91c2VF
dmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PGNvbnN0IFFHcmFwaGljc1NjZW5lTW91c2VF
dmVudCo+KGV2ZW50KTsKLSAgICAgICAgbW91c2VCdXR0b25zID0gbW91c2VFdmVudFR5cGUgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCA/IG1vdXNlRXZlbnQtPmJ1dHRvbnMoKSA6IG1vdXNl
RXZlbnQtPmJ1dHRvbigpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQorCisgICAgY29u
c3QgUU1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBRTW91c2VFdmVu
dCo+KGV2ZW50KTsKKyAgICBtb3VzZUJ1dHRvbnMgPSBtb3VzZUV2ZW50VHlwZSA9PSBQbGF0Zm9y
bUV2ZW50OjpNb3VzZU1vdmVkID8gbW91c2VFdmVudC0+YnV0dG9ucygpIDogbW91c2VFdmVudC0+
YnV0dG9uKCk7CisKIAogICAgIGlmIChtb3VzZUJ1dHRvbnMgJiBRdDo6TGVmdEJ1dHRvbikKICAg
ICAgICAgbW91c2VCdXR0b24gPSBMZWZ0QnV0dG9uOwpAQCAtMTE0LDI3ICs4Myw5IEBAIHN0YXRp
YyB2b2lkIG1vdXNlRXZlbnRUeXBlQW5kTW91c2VCdXR0b25Gcm9tUUV2ZW50KGNvbnN0IFFFdmVu
dCogZXZlbnQsIFBsYXRmb3JtCiAKIGNsYXNzIFdlYktpdFBsYXRmb3JtTW91c2VFdmVudCA6IHB1
YmxpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgewogcHVibGljOgotICAgIFdlYktpdFBsYXRmb3JtTW91
c2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqLCBpbnQgY2xpY2tDb3VudCk7CiAgICAg
V2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50KFFJbnB1dEV2ZW50KiwgaW50IGNsaWNrQ291bnQpOwog
fTsKIAotV2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50OjpXZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQo
UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCwgaW50IGNsaWNrQ291bnQpCi17Ci0gICAg
bV90aW1lc3RhbXAgPSBXVEY6OmN1cnJlbnRUaW1lKCk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGRv
bid0IHdlIGhhbmRsZSBhIGNvbnRleHQgbWVudSBldmVudCBoZXJlIGFzIHdlIGRvIGluIFBsYXRm
b3JtTW91c2VFdmVudChRSW5wdXRFdmVudCosIGludCk/Ci0gICAgLy8gU2VlIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA3Mjg+LgotICAgIFBsYXRmb3JtRXZlbnQ6
OlR5cGUgdHlwZTsKLSAgICBtb3VzZUV2ZW50VHlwZUFuZE1vdXNlQnV0dG9uRnJvbVFFdmVudChl
dmVudCwgdHlwZSwgbV9idXR0b24pOwotCi0gICAgbV90eXBlID0gdHlwZTsKLSAgICBtX3Bvc2l0
aW9uID0gSW50UG9pbnQoZXZlbnQtPnBvcygpLnRvUG9pbnQoKSk7Ci0gICAgbV9nbG9iYWxQb3Np
dGlvbiA9IEludFBvaW50KGV2ZW50LT5zY3JlZW5Qb3MoKSk7Ci0KLSAgICBtX2NsaWNrQ291bnQg
PSBjbGlja0NvdW50OwotICAgIG1vdXNlRXZlbnRNb2RpZmllcnNGcm9tUXRLZXlib2FyZE1vZGlm
aWVycyhldmVudC0+bW9kaWZpZXJzKCksIG1fbW9kaWZpZXJzKTsKLX0KLQogV2ViS2l0UGxhdGZv
cm1Nb3VzZUV2ZW50OjpXZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQoUUlucHV0RXZlbnQqIGV2ZW50
LCBpbnQgY2xpY2tDb3VudCkKIHsKICAgICBtX3RpbWVzdGFtcCA9IFdURjo6Y3VycmVudFRpbWUo
KTsKQEAgLTE2OSwyMSArMTIwLDE1IEBAIFBsYXRmb3JtTW91c2VFdmVudCBjb252ZXJ0TW91c2VF
dmVudChRSW5wdXRFdmVudCogZXZlbnQsIGludCBjbGlja0NvdW50KQogICAgIHJldHVybiBXZWJL
aXRQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIGNsaWNrQ291bnQpOwogfQogCi1QbGF0Zm9ybU1v
dXNlRXZlbnQgY29udmVydE1vdXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVu
dCwgaW50IGNsaWNrQ291bnQpCi17Ci0gICAgcmV0dXJuIFdlYktpdFBsYXRmb3JtTW91c2VFdmVu
dChldmVudCwgY2xpY2tDb3VudCk7Ci19Ci0KIGNsYXNzIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVu
dCA6IHB1YmxpYyBQbGF0Zm9ybVdoZWVsRXZlbnQgewogcHVibGljOgotICAgIFdlYktpdFBsYXRm
b3JtV2hlZWxFdmVudChRR3JhcGhpY3NTY2VuZVdoZWVsRXZlbnQqKTsKLSAgICBXZWJLaXRQbGF0
Zm9ybVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKKyAgICBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZl
bnQoUVdoZWVsRXZlbnQqLCBpbnQgd2hlZWxTY3JvbGxMaW5lcyk7CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBhcHBseURlbHRhKGludCBkZWx0YSwgUXQ6Ok9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGFw
cGx5RGVsdGEoaW50IGRlbHRhLCBRdDo6T3JpZW50YXRpb24sIGludCB3aGVlbFNjcm9sbExpbmVz
KTsKIH07CiAKLXZvaWQgV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjphcHBseURlbHRhKGludCBk
ZWx0YSwgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQordm9pZCBXZWJLaXRQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OmFwcGx5RGVsdGEoaW50IGRlbHRhLCBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRp
b24sIGludCB3aGVlbFNjcm9sbExpbmVzKQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBRdDo6
SG9yaXpvbnRhbCkgewogICAgICAgICBtX2RlbHRhWCA9IGRlbHRhOwpAQCAtMTk4LDIyICsxNDMs
MTEgQEAgdm9pZCBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6OmFwcGx5RGVsdGEoaW50IGRlbHRh
LCBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24KICAgICAvLyBTaW5jZSB3ZSByZXF1ZXN0IHRo
ZSBzY3JvbGwgZGVsdGEgYnkgdGhlIHBpeGVsLCBjb252ZXJ0IHRoZSB3aGVlbCBkZWx0YSB0byBw
aXhlbCBkZWx0YSB1c2luZyB0aGUgc3RhbmRhcmQgc2Nyb2xsIHN0ZXAuCiAgICAgLy8gVXNlIHRo
ZSBzYW1lIHNpbmdsZSBzY3JvbGwgc3RlcCBhcyBRVGV4dEVkaXQgKGluIFFUZXh0RWRpdFByaXZh
dGU6OmluaXQgW2gsdl1iYXItPnNldFNpbmdsZVN0ZXApCiAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IGNEZWZhdWx0UXRTY3JvbGxTdGVwID0gMjAuZjsKLSAgICBtX2RlbHRhWCA9IG1fd2hlZWxUaWNr
c1ggKiBRQXBwbGljYXRpb246OndoZWVsU2Nyb2xsTGluZXMoKSAqIGNEZWZhdWx0UXRTY3JvbGxT
dGVwOwotICAgIG1fZGVsdGFZID0gbV93aGVlbFRpY2tzWSAqIFFBcHBsaWNhdGlvbjo6d2hlZWxT
Y3JvbGxMaW5lcygpICogY0RlZmF1bHRRdFNjcm9sbFN0ZXA7CisgICAgbV9kZWx0YVggPSBtX3do
ZWVsVGlja3NYICogd2hlZWxTY3JvbGxMaW5lcyAqIGNEZWZhdWx0UXRTY3JvbGxTdGVwOworICAg
IG1fZGVsdGFZID0gbV93aGVlbFRpY2tzWSAqIHdoZWVsU2Nyb2xsTGluZXMgKiBjRGVmYXVsdFF0
U2Nyb2xsU3RlcDsKIH0KIAotV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjpXZWJLaXRQbGF0Zm9y
bVdoZWVsRXZlbnQoUUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50KiBlKQotewotICAgIG1fdGltZXN0
YW1wID0gV1RGOjpjdXJyZW50VGltZSgpOwotICAgIG1vdXNlRXZlbnRNb2RpZmllcnNGcm9tUXRL
ZXlib2FyZE1vZGlmaWVycyhlLT5tb2RpZmllcnMoKSwgbV9tb2RpZmllcnMpOwotICAgIG1fcG9z
aXRpb24gPSBlLT5wb3MoKS50b1BvaW50KCk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IGUtPnNj
cmVlblBvcygpOwotICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsK
LSAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSA9IGZhbHNlOwotICAgIGFwcGx5RGVs
dGEoZS0+ZGVsdGEoKSwgZS0+b3JpZW50YXRpb24oKSk7Ci19Ci0KLVdlYktpdFBsYXRmb3JtV2hl
ZWxFdmVudDo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBlKQorV2ViS2l0
UGxhdGZvcm1XaGVlbEV2ZW50OjpXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQq
IGUsIGludCB3aGVlbFNjcm9sbExpbmVzKQogewogICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJy
ZW50VGltZSgpOwogICAgIG1vdXNlRXZlbnRNb2RpZmllcnNGcm9tUXRLZXlib2FyZE1vZGlmaWVy
cyhlLT5tb2RpZmllcnMoKSwgbV9tb2RpZmllcnMpOwpAQCAtMjIxLDcgKzE1NSw3IEBAIFdlYktp
dFBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50
KiBlKQogICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBlLT5nbG9iYWxQb3MoKTsKICAgICBtX2dyYW51
bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CiAgICAgbV9kaXJlY3Rpb25JbnZlcnRl
ZEZyb21EZXZpY2UgPSBmYWxzZTsKLSAgICBhcHBseURlbHRhKGUtPmRlbHRhKCksIGUtPm9yaWVu
dGF0aW9uKCkpOworICAgIGFwcGx5RGVsdGEoZS0+ZGVsdGEoKSwgZS0+b3JpZW50YXRpb24oKSwg
d2hlZWxTY3JvbGxMaW5lcyk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzA5
LDQzICsyNDMsMzUgQEAgV2ViS2l0UGxhdGZvcm1Ub3VjaFBvaW50OjpXZWJLaXRQbGF0Zm9ybVRv
dWNoUG9pbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQKICNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCiBjbGFzcyBXZWJLaXRQbGF0Zm9ybUdlc3R1cmVFdmVudCA6IHB1YmxpYyBQbGF0
Zm9ybUdlc3R1cmVFdmVudCB7CiBwdWJsaWM6Ci0gICAgV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZl
bnQoY29uc3QgUUdlc3R1cmVFdmVudCosIGNvbnN0IFFHZXN0dXJlKik7CisgICAgV2ViS2l0UGxh
dGZvcm1HZXN0dXJlRXZlbnQoUUdlc3R1cmVFdmVudEZhY2FkZSopOwogfTsKIAotV2ViS2l0UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OldlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KGNvbnN0IFFHZXN0
dXJlRXZlbnQqIGV2ZW50LCBjb25zdCBRR2VzdHVyZSogZ2VzdHVyZSkKK3N0YXRpYyBpbmxpbmUg
UGxhdGZvcm1FdmVudDo6VHlwZSB0b1BsYXRmb3JtRXZlbnRUeXBlKFF0OjpHZXN0dXJlVHlwZSB0
eXBlKQogewotICAgIHN3aXRjaCAoZ2VzdHVyZS0+Z2VzdHVyZVR5cGUoKSkgewotICAgIGNhc2Ug
UXQ6OlRhcEdlc3R1cmU6IHsKLSAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6R2VzdHVy
ZVRhcDsKLSAgICAgICAgUVBvaW50RiBnbG9iYWxQb3MgPSBzdGF0aWNfY2FzdDxjb25zdCBRVGFw
R2VzdHVyZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOwotICAgICAgICBtX2dsb2JhbFBvc2l0aW9u
ID0gZ2xvYmFsUG9zLnRvUG9pbnQoKTsKLSAgICAgICAgbV9wb3NpdGlvbiA9IGV2ZW50LT53aWRn
ZXQoKS0+bWFwRnJvbUdsb2JhbChnbG9iYWxQb3MudG9Qb2ludCgpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUXQ6OlRhcEFuZEhvbGRHZXN0dXJlOiB7Ci0gICAgICAgIG1fdHlw
ZSA9IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVMb25nUHJlc3M7Ci0gICAgICAgIFFQb2ludEYgZ2xv
YmFsUG9zID0gc3RhdGljX2Nhc3Q8Y29uc3QgUVRhcEFuZEhvbGRHZXN0dXJlKj4oZ2VzdHVyZSkt
PnBvc2l0aW9uKCk7Ci0gICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBnbG9iYWxQb3MudG9Qb2lu
dCgpOwotICAgICAgICBtX3Bvc2l0aW9uID0gZXZlbnQtPndpZGdldCgpLT5tYXBGcm9tR2xvYmFs
KGdsb2JhbFBvcy50b1BvaW50KCkpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBRdDo6VGFwR2VzdHVyZToKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtRXZlbnQ6Okdlc3R1cmVUYXA7CisgICAgY2FzZSBRdDo6VGFwQW5kSG9sZEdlc3R1cmU6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZTsKICAgICB9Ci0gICAgbV90aW1lc3RhbXAg
PSBXVEY6OmN1cnJlbnRUaW1lKCk7CiB9CiAKLSNlbmRpZgotCi1QbGF0Zm9ybVdoZWVsRXZlbnQg
Y29udmVydFdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGV2ZW50KQorV2ViS2l0UGxhdGZvcm1HZXN0
dXJlRXZlbnQ6OldlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZlbnRGYWNhZGUq
IGV2ZW50KQogewotICAgIHJldHVybiBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoZXZlbnQpOwor
ICAgIG1fdHlwZSA9IHRvUGxhdGZvcm1FdmVudFR5cGUoZXZlbnQtPnR5cGUpOworICAgIG1fZ2xv
YmFsUG9zaXRpb24gPSBldmVudC0+Z2xvYmFsUG9zOworICAgIG1fcG9zaXRpb24gPSBldmVudC0+
cG9zOworICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJyZW50VGltZSgpOwogfQogCi1QbGF0Zm9y
bVdoZWVsRXZlbnQgY29udmVydFdoZWVsRXZlbnQoUUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50KiBl
dmVudCkKKyNlbmRpZgorCitQbGF0Zm9ybVdoZWVsRXZlbnQgY29udmVydFdoZWVsRXZlbnQoUVdo
ZWVsRXZlbnQqIGV2ZW50LCBpbnQgd2hlZWxTY3JvbGxMaW5lcykKIHsKLSAgICByZXR1cm4gV2Vi
S2l0UGxhdGZvcm1XaGVlbEV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1X
aGVlbEV2ZW50KGV2ZW50LCB3aGVlbFNjcm9sbExpbmVzKTsKIH0KIAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCkBAIC0zNTYsMTAgKzI4Miw5IEBAIFBsYXRmb3JtVG91Y2hFdmVudCBjb252ZXJ0
VG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKLVBsYXRmb3JtR2VzdHVyZUV2ZW50IGNvbnZlcnRHZXN0dXJlKFFHZXN0dXJl
RXZlbnQqIGV2ZW50LCBRR2VzdHVyZSogZ2VzdHVyZSkKK1BsYXRmb3JtR2VzdHVyZUV2ZW50IGNv
bnZlcnRHZXN0dXJlKFFHZXN0dXJlRXZlbnRGYWNhZGUqIGV2ZW50KQogewotICAgIHJldHVybiBX
ZWJLaXRQbGF0Zm9ybUdlc3R1cmVFdmVudChldmVudCwgZ2VzdHVyZSk7CisgICAgcmV0dXJuIFdl
YktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KGV2ZW50KTsKIH0KICNlbmRpZgotCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5o
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uaApp
bmRleCAzMjI0ZWVlOTA5NmZlZDRlNTQyN2E3Y2RlNTAyNTMxMGJlMGMyZGJjLi4wY2Y4Y2Q4NDk2
MDZlZGNjZDc1YmRkNGEzNDNhMWJiNjMzZTMwZjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmgKQEAgLTE5LDI3ICsxOSwz
MCBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogKi8KIAotI2luY2x1ZGUgPHFn
bG9iYWwuaD4KKyNpZm5kZWYgV2ViRXZlbnRDb252ZXJzaW9uX2gKKyNkZWZpbmUgV2ViRXZlbnRD
b252ZXJzaW9uX2gKKworI2luY2x1ZGUgPFFQb2ludD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCiBj
bGFzcyBRSW5wdXRFdmVudDsKLWNsYXNzIFFHcmFwaGljc1NjZW5lTW91c2VFdmVudDsKIGNsYXNz
IFFXaGVlbEV2ZW50OwotY2xhc3MgUUdyYXBoaWNzU2NlbmVXaGVlbEV2ZW50OwogY2xhc3MgUVRv
dWNoRXZlbnQ7Ci1jbGFzcyBRR2VzdHVyZTsKLWNsYXNzIFFHZXN0dXJlRXZlbnQ7CiBRVF9FTkRf
TkFNRVNQQUNFCiAKK3N0cnVjdCBRR2VzdHVyZUV2ZW50RmFjYWRlIHsKKyAgICBRdDo6R2VzdHVy
ZVR5cGUgdHlwZTsKKyAgICBRUG9pbnQgZ2xvYmFsUG9zOworICAgIFFQb2ludCBwb3M7Cit9Owor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudDsKIAogUGxhdGZvcm1Nb3VzZUV2ZW50IGNvbnZlcnRNb3VzZUV2
ZW50KFFJbnB1dEV2ZW50KiwgaW50IGNsaWNrQ291bnQpOwotUGxhdGZvcm1Nb3VzZUV2ZW50IGNv
bnZlcnRNb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCosIGludCBjbGlja0NvdW50
KTsKLVBsYXRmb3JtV2hlZWxFdmVudCBjb252ZXJ0V2hlZWxFdmVudChRV2hlZWxFdmVudCopOwot
UGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFHcmFwaGljc1NjZW5lV2hlZWxF
dmVudCopOworUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50
KiwgaW50IHdoZWVsU2Nyb2xsTGluZXMpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIGNs
YXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKQEAgLTQ4LDYgKzUxLDggQEAgUGxhdGZvcm1Ub3VjaEV2
ZW50IGNvbnZlcnRUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKICNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsKLVBsYXRmb3JtR2VzdHVyZUV2
ZW50IGNvbnZlcnRHZXN0dXJlKFFHZXN0dXJlRXZlbnQqLCBRR2VzdHVyZSopOworUGxhdGZvcm1H
ZXN0dXJlRXZlbnQgY29udmVydEdlc3R1cmUoUUdlc3R1cmVFdmVudEZhY2FkZSopOwogI2VuZGlm
CiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9XZWJTeXN0ZW1JbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
V2ViU3lzdGVtSW50ZXJmYWNlLmgKaW5kZXggNDY3YjViYTM3NGY1Y2MxMzM5ZTEwODQ1ODZjMmI3
Y2ZmZGI3MjI4Ni4uOWIwM2Q0YWZjYjJmODI0OTAxMDZkYjA0NDAyZDlhODhmYWFlOWU0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVy
ZmFjZS5oCkBAIC0yNiw2ICsyNiwxMSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWZuZGVmIFdl
YlN5c3RlbUludGVyZmFjZV9oCisjZGVmaW5lIFdlYlN5c3RlbUludGVyZmFjZV9oCisKICNpbmNs
dWRlIDxzdGRpbnQuaD4KIAogdm9pZCBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSgpOworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3
ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdl
LmNwcAppbmRleCBmZjQwYjU1ZjAzOWJhNzUyMmE5YWYzMzJiMWRkZjM3OTc4ZTkzNmM3Li5mZDgy
YzI4NzYxNGM5MWVhNjc5MjUxOGY4Njc5NWU3MjIzNDFiYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCkBAIC01NDgsNyArNTQ4LDcg
QEAgdm9pZCB0c3RfUVdlYlBhZ2U6OmxvYWRIdG1sNVZpZGVvKCkKICAgICBRQnl0ZUFycmF5IHVy
bCgiaHR0cDovL2RvZXMubm90L2V4aXN0P2E9MSUyQ2I9MiIpOwogICAgIG1fdmlldy0+c2V0SHRt
bCgiPHA+PHZpZGVvIGlkID0ndmlkZW8nIHNyYz0nIiArIHVybCArICInIGF1dG9wbGF5Lz48L3A+
Iik7CiAgICAgUVRlc3Q6OnFXYWl0KDIwMDApOwotICAgIFFVcmwgbVVybCA9IER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjptZWRpYUNvbnRlbnRVcmxCeUVsZW1lbnRJZChtX3BhZ2UtPm1haW5GcmFt
ZSgpLCAidmlkZW8iKTsKKyAgICBRVXJsIG1VcmwgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
bWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQobV9wYWdlLT5tYWluRnJhbWUoKS0+aGFuZGxlKCks
ICJ2aWRlbyIpOwogICAgIFFFWFBFQ1RfRkFJTCgiIiwgImh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTQ1MiIsIENvbnRpbnVlKTsKICAgICBRQ09NUEFSRShtVXJsLnRv
RW5jb2RlZCgpLCB1cmwpOwogI2Vsc2UKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAgdm9pZCB0c3Rf
UVdlYlBhZ2U6Om11bHRpcGxlUGFnZUdyb3Vwc0FuZExvY2FsU3RvcmFnZSgpCiAKICAgICB2aWV3
MS5wYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3Rv
cmFnZUVuYWJsZWQsIHRydWUpOwogICAgIHZpZXcxLnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0TG9j
YWxTdG9yYWdlUGF0aChRRGlyOjp0b05hdGl2ZVNlcGFyYXRvcnModG1wRGlyUGF0aCgpICsgIi9w
YXRoMSIpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFt
ZSh2aWV3MS5wYWdlKCksICJncm91cDEiKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
d2ViUGFnZVNldEdyb3VwTmFtZSh2aWV3MS5wYWdlKCktPmhhbmRsZSgpLCAiZ3JvdXAxIik7CiAg
ICAgdmlldzIucGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpM
b2NhbFN0b3JhZ2VFbmFibGVkLCB0cnVlKTsgICAgCiAgICAgdmlldzIucGFnZSgpLT5zZXR0aW5n
cygpLT5zZXRMb2NhbFN0b3JhZ2VQYXRoKFFEaXI6OnRvTmF0aXZlU2VwYXJhdG9ycyh0bXBEaXJQ
YXRoKCkgKyAiL3BhdGgyIikpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdl
U2V0R3JvdXBOYW1lKHZpZXcyLnBhZ2UoKSwgImdyb3VwMiIpOwotICAgIFFDT01QQVJFKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBOYW1lKHZpZXcxLnBhZ2UoKSksIFFTdHJp
bmcoImdyb3VwMSIpKTsKLSAgICBRQ09NUEFSRShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2Vi
UGFnZUdyb3VwTmFtZSh2aWV3Mi5wYWdlKCkpLCBRU3RyaW5nKCJncm91cDIiKSk7CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUodmlldzIucGFnZSgpLT5o
YW5kbGUoKSwgImdyb3VwMiIpOworICAgIFFDT01QQVJFKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
Ojp3ZWJQYWdlR3JvdXBOYW1lKHZpZXcxLnBhZ2UoKS0+aGFuZGxlKCkpLCBRU3RyaW5nKCJncm91
cDEiKSk7CisgICAgUUNPTVBBUkUoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VHcm91
cE5hbWUodmlldzIucGFnZSgpLT5oYW5kbGUoKSksIFFTdHJpbmcoImdyb3VwMiIpKTsKIAogCiAg
ICAgdmlldzEuc2V0SHRtbChRU3RyaW5nKCI8aHRtbD48Ym9keT4gPC9ib2R5PjwvaHRtbD4iKSwg
UVVybCgiaHR0cDovL3d3dy5teWV4YW1wbGUuY29tIikpOwpAQCAtMzA2MiwzNSArMzA2MiwzNSBA
QCB2b2lkIHRzdF9RV2ViUGFnZTo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeSgpCiAgICAgUVZFUklG
WShtX3BhZ2UtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpKTsKIAogICAgIC8v
IFRoZXNlIGFyZSBhbGwgZmlyc3QtcGFydHkgY29va2llcywgc28gc2hvdWxkIHBhc3MuCi0gICAg
UVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFs
bG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVy
bCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jb20iKSkp
OwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQ
b2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAg
ICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2RvYy5leGFt
cGxlLmNvbSIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgp
LAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2FhYS53d3cuZXhhbXBsZS5jb20iKSwgUVVybCgi
aHR0cDovL2RvYy5leGFtcGxlLmNvbSIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklG
WShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2V4YW1wbGUuY29tIiks
IFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAg
IFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lB
bGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhh
bXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jby51ayIpKSk7Ci0gICAgUVZFUklG
WShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNv
b2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0
cDovL3d3dy5leGFtcGxlLmNvLnVrIiksIFFVcmwoImh0dHA6Ly9kb2MuZXhhbXBsZS5jby51ayIp
KSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAg
ICAgICAgUVVybCgiaHR0cDovL2FhYS53d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8v
ZG9jLmV4YW1wbGUuY28udWsiKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdl
LT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9leGFtcGxlLmNvLnVrIiksIFFV
cmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpKSk7CiAKICAgICAvLyBUaGVzZSBhcmUgYWxs
IHRoaXJkLXBhcnR5IGNvb2tpZXMsIHNvIHNob3VsZCBmYWlsLgotICAgIFFWRVJJRlkoIUR1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKG1fcGFnZSwK
KyAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBv
bGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3
dy5leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vc2xhc2hkb3Qub3JnIikpKTsKLSAgICBRVkVS
SUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93
cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFy
dHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwo
Imh0dHA6Ly9leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vYW5vdGhlcmV4YW1wbGUuY29tIikp
KTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAg
ICAgICAgIFFVcmwoImh0dHA6Ly9hbm90aGVyZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2V4
YW1wbGUuY29tIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhp
cmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5k
bGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpLCBRVXJs
KCJodHRwOi8vc2xhc2hkb3QuY28udWsiKSkpOwotICAgIFFWRVJJRlkoIUR1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKG1fcGFnZSwKKyAgICBRVkVS
SUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93
cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2V4YW1wbGUuY28u
dWsiKSwgUVVybCgiaHR0cDovL2Fub3RoZXJleGFtcGxlLmNvLnVrIikpKTsKLSAgICBRVkVSSUZZ
KCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlD
b29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0
dHA6Ly9hbm90aGVyZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZXhhbXBsZS5jby51ayIp
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCmluZGV4IDFlMWNlMmIzZDAxNWFkMzgwNTJjOWVmNTA2
MTg4ZGUzOTRhYzQ1MzYuLjA5OTBjMDFmODcyNDhmNWMwNTQyMjBjYWJiMTg5ZDc0NGEyMzYzMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvcXQvTWFpblF0LmNwcApAQCAtNDIsOSArNDIsMTAgQEAgdHlwZWRlZiBRQXBwbGljYXRp
b24gQXBwbGljYXRpb25UeXBlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIFFfREVDTF9JTVBPUlQg
aW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0aW9uKik7Ci0jaWYgZGVmaW5lZChIQVZF
X1dFQktJVDEpCi1RX0RFQ0xfSU1QT1JUIHZvaWQgaW5pdGlhbGl6ZVdlYktpdDJUaGVtZSgpOwor
I2lmICFkZWZpbmVkKFFUX05PX1dJREdFVFMpCitRX0RFQ0xfSU1QT1JUIHZvaWQgaW5pdGlhbGl6
ZVdlYktpdFdpZGdldHMoKTsKICNlbmRpZgorUV9ERUNMX0lNUE9SVCB2b2lkIGluaXRpYWxpemVX
ZWJLaXRRdCgpOwogfQogCiAjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiBkZWZpbmVkKFFfT1NfVU5J
WCkKQEAgLTgyLDE1ICs4MywyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAg
ICAgfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMSkKLSAgICBXZWJLaXQ6Omlu
aXRpYWxpemVXZWJLaXQyVGhlbWUoKTsKLSNlbmRpZgotCiAgICAgLy8gSGFzIHRvIGJlIGRvbmUg
YmVmb3JlIFFBcHBsaWNhdGlvbiBpcyBjb25zdHJ1Y3RlZCBpbiBjYXNlCiAgICAgLy8gUUFwcGxp
Y2F0aW9uIGl0c2VsZiBwcm9kdWNlcyBkZWJ1ZyBvdXRwdXQuCiAgICAgUUJ5dGVBcnJheSBzdXBw
cmVzc091dHB1dCA9IHFnZXRlbnYoIlFUX1dFQktJVF9TVVBQUkVTU19XRUJfUFJPQ0VTU19PVVRQ
VVQiKTsKICAgICBpZiAoIXN1cHByZXNzT3V0cHV0LmlzRW1wdHkoKSAmJiBzdXBwcmVzc091dHB1
dCAhPSAiMCIpCiAgICAgICAgIHFJbnN0YWxsTWVzc2FnZUhhbmRsZXIobWVzc2FnZUhhbmRsZXIp
OwogCi0gICAgcmV0dXJuIFdlYktpdDo6V2ViUHJvY2Vzc01haW5RdChuZXcgQXBwbGljYXRpb25U
eXBlKGFyZ2MsIGFyZ3YpKTsKKyAgICAvLyBRQXBwbGljYXRpb24gbXVzdCBiZSBjcmVhdGVkIGJl
Zm9yZSB3ZSBjYWxsIGluaXRpYWxpemVXZWJLaXRXaWRnZXRzKCkgc28gdGhhdAorICAgIC8vIHRo
ZSBzdGFuZGFyZCBwaXhtYXBzIGNhbiBiZSBmZXRjaGVkIGZyb20gdGhlIHN0eWxlLgorICAgIEFw
cGxpY2F0aW9uVHlwZSogYXBwSW5zdGFuY2UgPSBuZXcgQXBwbGljYXRpb25UeXBlKGFyZ2MsIGFy
Z3YpOworCisjaWYgIWRlZmluZWQoUVRfTk9fV0lER0VUUykKKyAgICBpZiAocWdldGVudigiUVRf
V0VCS0lUX1RIRU1FX05BTUUiKSA9PSAicXN0eWxlIikKKyAgICAgICAgV2ViS2l0Ojppbml0aWFs
aXplV2ViS2l0V2lkZ2V0cygpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBXZWJLaXQ6Omlu
aXRpYWxpemVXZWJLaXRRdCgpOworCisKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFp
blF0KGFwcEluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9hcGkucHJpIGIvU291cmNl
L2FwaS5wcmkKaW5kZXggYTQ3YjczNTlkZThmOGI3OWMxYjc5MDNjYzBjOTA4NTU5ZDI5YWFiYi4u
ZjZjM2MzYzc1Zjc2ZjIwZGVlMTUzZDhjNDYyMDU5NDYzOGYxNDA2OSAxMDA2NDQKLS0tIGEvU291
cmNlL2FwaS5wcmkKKysrIGIvU291cmNlL2FwaS5wcmkKQEAgLTE0LDEyICsxNCwxNSBAQCBXRUJL
SVRfREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9saWIKIAogV0VCS0lUICs9IHd0ZiBqYXZh
c2NyaXB0Y29yZSB3ZWJjb3JlCiAKLWJ1aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdDEK
K2J1aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdHdpZGdldHMgd2Via2l0MQogYnVpbGQ/
KHdlYmtpdDIpOiBXRUJLSVQgKz0gd2Via2l0MgogCiAjIEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8g
dGhlIFdlYktpdDEgYW5kIFdlYktpdDIgQVBJIHdpbGwgdHJpZ2dlciBhIHFtYWtlIG9mIHRoaXMK
ICMgZmlsZSwgd2hpY2ggaW4gdHVybiBydW5zIHN5bmNxdCB0byB1cGRhdGUgdGhlIGZvcndhcmRp
bmcgaGVhZGVycy4KLWJ1aWxkPyh3ZWJraXQxKTogUU1BS0VfSU5URVJOQUxfSU5DTFVERURfRklM
RVMgKj0gV2ViS2l0L1dlYktpdDEucHJvCitidWlsZD8od2Via2l0MSk6IHsKKyAgICBRTUFLRV9J
TlRFUk5BTF9JTkNMVURFRF9GSUxFUyAqPSBXZWJLaXQvV2ViS2l0MS5wcm8KKyAgICBRTUFLRV9J
TlRFUk5BTF9JTkNMVURFRF9GSUxFUyAqPSBXZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KK30KIGJ1
aWxkPyh3ZWJraXQyKTogUU1BS0VfSU5URVJOQUxfSU5DTFVERURfRklMRVMgKj0gV2ViS2l0Mi9U
YXJnZXQucHJpCiAKIHVzZT8oM0RfR1JBUEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMzRlZTVhZDRhMWU1
MjNlNThhMzdmMzAxMjBiOTA3Zjc5OWIyYTg2NS4uMTZjMjM3ODY2ZTE3NWFjOGQyZTk4OGM5NjI1
ZGM1NDQ3MGM1OTA5YyAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyUXQuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xs
ZXJRdC5oIgorI2luY2x1ZGUgIkluaXRXZWJLaXRRdC5oIgogI2luY2x1ZGUgIlF0VGVzdFN1cHBv
cnQuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyUXQuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250
cm9sbGVyUXQuaCIKQEAgLTYyLDE5ICs2MywxNCBAQAogI2luY2x1ZGUgPFFQcm9ncmVzc0Jhcj4K
ICNpbmNsdWRlIDxRVW5kb1N0YWNrPgogI2luY2x1ZGUgPFFVcmw+Ci0KLSNpbmNsdWRlIDxxd2Vi
c2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxxd2Vic2VjdXJpdHlvcmlnaW4uaD4KLQogI2luY2x1ZGUg
PGxpbWl0cy5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgotCisjaW5jbHVkZSA8cXdlYnNlY3VyaXR5
b3JpZ2luLmg+CisjaW5jbHVkZSA8cXdlYnNldHRpbmdzLmg+CiAjaWZuZGVmIFFfT1NfV0lOCiAj
aW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPHFkZWJ1Zy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGludCBkYXRhYmFzZURlZmF1bHRRdW90YSA9IDUgKiAx
MDI0ICogMTAyNDsKQEAgLTIwNiwxNCArMjAyLDE0IEBAIHZvaWQgV2ViUGFnZTo6cmVzZXRTZXR0
aW5ncygpCiAgICAgUVdlYlNldHRpbmdzOjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hlKDApOyAvLyBy
ZXNldCB0byBkZWZhdWx0CiAgICAgc2V0dGluZ3MoKS0+c2V0VXNlclN0eWxlU2hlZXRVcmwoUVVy
bCgpKTsgLy8gcmVzZXQgdG8gZGVmYXVsdAogCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldE1pbmltdW1UaW1lckludGVydmFsKHRoaXMsIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpk
ZWZhdWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFsKGhhbmRsZSgpLCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZGVmYXVsdE1pbmltdW1UaW1lckludGVydmFsKCkpOwogCi0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KG1haW5GcmFtZSgpKTsKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcm5hbHNPYmplY3QobWFpbkZyYW1lKCktPmhh
bmRsZSgpKTsKIAogICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIoKTsKIH0K
IAotUVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlw
ZSkKK1FXZWJQYWdlKiBXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5
cGUpCiB7CiAgICAgcmV0dXJuIG1fZHJ0LT5jcmVhdGVXaW5kb3coKTsKIH0KQEAgLTM5OSw2ICsz
OTUsNyBAQCBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoKQogICAgIGlmICh2aWV3TW9k
ZSA9PSAiZ3JhcGhpY3MiKQogICAgICAgICBzZXRHcmFwaGljc0Jhc2VkKHRydWUpOwogCisgICAg
V2ViS2l0Ojppbml0aWFsaXplV2ViS2l0V2lkZ2V0cygpOwogICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojppbml0aWFsaXplKCk7CiAKICAgICAvLyBTZXQgcnVubmluZyBpbiBEUlQgbW9kZSBm
b3IgcXdlYnBhZ2UgdG8gY3JlYXRlIHRlc3RhYmxlIG9iamVjdHMuCkBAIC00MjEsNyArNDE4LDcg
QEAgRHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICB9CiAgICAgLy8gVXNlIGEg
ZnJhbWUgZ3JvdXAgbmFtZSBmb3IgYWxsIHBhZ2VzIGNyZWF0ZWQgYnkgRHVtcFJlbmRlclRyZWUg
dG8gYWxsb3cKICAgICAvLyB0ZXN0aW5nIG9mIGNyb3NzLXBhZ2UgZnJhbWUgbG9va3VwLgotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKG1fcGFnZSwgIm9y
Zy53ZWJraXQucXQuRHVtcFJlbmRlclRyZWUiKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6d2ViUGFnZVNldEdyb3VwTmFtZShwYWdlQWRhcHRlcigpLCAib3JnLndlYmtpdC5xdC5EdW1w
UmVuZGVyVHJlZSIpOwogCiAgICAgbV9tYWluVmlldy0+c2V0Q29udGV4dE1lbnVQb2xpY3koUXQ6
Ok5vQ29udGV4dE1lbnUpOwogICAgIG1fbWFpblZpZXctPnJlc2l6ZShRU2l6ZShUZXN0UnVubmVy
OjptYXhWaWV3V2lkdGgsIFRlc3RSdW5uZXI6Om1heFZpZXdIZWlnaHQpKTsKQEAgLTQ3MCw3ICs0
NjcsNyBAQCBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoKQogICAgIFFPYmplY3Q6OmNv
bm5lY3QodGhpcywgU0lHTkFMKHF1aXQoKSksIHFBcHAsIFNMT1QocXVpdCgpKSwgUXQ6OlF1ZXVl
ZENvbm5lY3Rpb24pOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldER1bXBSZW5k
ZXJUcmVlTW9kZUVuYWJsZWQodHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKHdlYlBhZ2UoKSwgdHJ1ZSk7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFi
bGVkKHBhZ2VBZGFwdGVyKCksIHRydWUpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpl
bmFibGVNb2NrU2Nyb2xsYmFycygpOwogCiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoUUV2ZW50OjpG
b2N1c0luLCBRdDo6QWN0aXZlV2luZG93Rm9jdXNSZWFzb24pOwpAQCAtNTQxLDkgKzUzOCw5IEBA
IHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5n
KGNvbnN0IFFVcmwmIHVybCkKICNlbmRpZgogCiAgICAgY2xlYXJIaXN0b3J5KG1fcGFnZSk7Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KG1fcGFnZS0+bWFpbkZyYW1l
KCksIDEsIFFQb2ludCgwLCAwKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFy
RnJhbWVOYW1lKG1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpyZW1vdmVVc2VyU3R5bGVTaGVldHMobV9wYWdlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2NhbGVQYWdlQnkobWFpbkZyYW1lQWRhcHRlcigpLCAxLCBRUG9pbnQoMCwgMCkp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckZyYW1lTmFtZShtYWluRnJhbWVB
ZGFwdGVyKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZW1vdmVVc2VyU3R5bGVT
aGVldHMocGFnZUFkYXB0ZXIoKSk7CiAKICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5zZXRTY3Jv
bGxCYXJQb2xpY3koUXQ6OlZlcnRpY2FsLCBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOwogICAgIG1f
cGFnZS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6SG9yaXpvbnRhbCwgUXQ6
OlNjcm9sbEJhckFzTmVlZGVkKTsKQEAgLTU2MSw3ICs1NTgsNyBAQCB2b2lkIER1bXBSZW5kZXJU
cmVlOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJsJiB1cmwp
CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZUxp
c3RzKCk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2luZG93c0JlaGF2aW9y
QXNFZGl0aW5nQmVoYXZpb3IobV9wYWdlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
c2V0V2luZG93c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IocGFnZUFkYXB0ZXIoKSk7CiAKICAg
ICBRTG9jYWxlOjpzZXREZWZhdWx0KFFMb2NhbGU6OmMoKSk7CiAKQEAgLTU3MCw3ICs1NjcsNyBA
QCB2b2lkIER1bXBSZW5kZXJUcmVlOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGlu
Zyhjb25zdCBRVXJsJiB1cmwpCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogI2VuZGlmCiAK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIobV9wYWdlLT5tYWluRnJh
bWUoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyT3BlbmVyKG1haW5GcmFt
ZUFkYXB0ZXIoKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3Qg
UVVybCYgdXJsKQpAQCAtNzM5LDcgKzczNiw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmluaXRK
U09iamVjdHMoKQogICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoUUxhdGlu
MVN0cmluZygiZXZlbnRTZW5kZXIiKSwgbV9ldmVudFNlbmRlcik7CiAgICAgZnJhbWUtPmFkZFRv
SmF2YVNjcmlwdFdpbmRvd09iamVjdChRTGF0aW4xU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVy
IiksIG1fdGV4dElucHV0Q29udHJvbGxlcik7CiAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdp
bmRvd09iamVjdChRTGF0aW4xU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSwgbV9nY0NvbnRyb2xsZXIp
OwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoZnJh
bWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3Qo
ZnJhbWUtPmhhbmRsZSgpKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2hvd1BhZ2UoKQpA
QCAtNzU3LDcgKzc1NCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmhpZGVQYWdlKCkKIAogUVN0
cmluZyBEdW1wUmVuZGVyVHJlZTo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oUVdlYkZyYW1lKiBm
cmFtZSkKIHsKLSAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFz
RG9jdW1lbnRFbGVtZW50KGZyYW1lKSkKKyAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6aGFzRG9jdW1lbnRFbGVtZW50KGZyYW1lLT5oYW5kbGUoKSkpCiAgICAgICAg
IHJldHVybiBRU3RyaW5nKCk7CiAKICAgICBRU3RyaW5nIHJlc3VsdDsKQEAgLTc3OSw3ICs3NzYs
NyBAQCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihRV2Vi
RnJhbWUqIGZyYW1lKQogCiBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wRnJhbWVzQXNUZXh0
KFFXZWJGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFmcmFtZSB8fCAhRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6Omhhc0RvY3VtZW50RWxlbWVudChmcmFtZSkpCisgICAgaWYgKCFmcmFtZSB8fCAh
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Omhhc0RvY3VtZW50RWxlbWVudChmcmFtZS0+aGFuZGxl
KCkpKQogICAgICAgICByZXR1cm4gUVN0cmluZygpOwogCiAgICAgUVN0cmluZyByZXN1bHQ7CkBA
IC05MDcsNyArOTA0LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgpCiAgICAgICAgIGZw
cmludGYoc3Rkb3V0LCAiU291cmNlOlxuXG4lc1xuIiwgbWFya3VwLnRvVXRmOCgpLmNvbnN0RGF0
YSgpKTsKICAgICB9CiAKLSAgICBRU3RyaW5nIG1pbWVUeXBlID0gRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnJlc3BvbnNlTWltZVR5cGUobWFpbkZyYW1lKTsKKyAgICBRU3RyaW5nIG1pbWVUeXBl
ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc3BvbnNlTWltZVR5cGUobWFpbkZyYW1lLT5o
YW5kbGUoKSk7CiAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikKICAgICAgICAgbV9j
b250cm9sbGVyLT5kdW1wQXNUZXh0KCk7CiAKQEAgLTk0NywxMSArOTQ0LDExIEBAIHZvaWQgRHVt
cFJlbmRlclRyZWU6OmR1bXAoKQogICAgICAgICAgICAgbWFpbkZyYW1lLT5yZW5kZXIoJnBhaW50
ZXIpOwogICAgICAgICAgICAgcGFpbnRlci5lbmQoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpbWFnZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWludFBhZ2VzV2l0aEJvdW5k
YXJpZXMobWFpbkZyYW1lKTsKKyAgICAgICAgICAgIGltYWdlID0gRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnBhaW50UGFnZXNXaXRoQm91bmRhcmllcyhtYWluRnJhbWUtPmhhbmRsZSgpKTsKIAot
ICAgICAgICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRyYWNrUmVwYWludFJlY3RzKG1f
cGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6dHJhY2tSZXBhaW50UmVjdHMobWFpbkZyYW1lQWRhcHRlcigpKSkgewogICAgICAgICAgICAg
UVZlY3RvcjxRUmVjdD4gcmVwYWludFJlY3RzOwotICAgICAgICAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmdldFRyYWNrZWRSZXBhaW50UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKSwgcmVw
YWludFJlY3RzKTsKKyAgICAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRUcmFj
a2VkUmVwYWludFJlY3RzKG1haW5GcmFtZUFkYXB0ZXIoKSwgcmVwYWludFJlY3RzKTsKICAgICAg
ICAgICAgIFFJbWFnZSBtYXNrKGltYWdlLnNpemUoKSwgaW1hZ2UuZm9ybWF0KCkpOwogICAgICAg
ICAgICAgbWFzay5maWxsKFFDb2xvcigwLCAwLCAwLCAwLjY2ICogMjU1KSk7CiAKQEAgLTk2Myw3
ICs5NjAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpkdW1wKCkKICAgICAgICAgICAgIFFQYWlu
dGVyIHBhaW50ZXIoJmltYWdlKTsKICAgICAgICAgICAgIHBhaW50ZXIuZHJhd0ltYWdlKGltYWdl
LnJlY3QoKSwgbWFzayk7CiAKLSAgICAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRUcmFja1JlcGFpbnRSZWN0cyhtX3BhZ2UtPm1haW5GcmFtZSgpLCBmYWxzZSk7CisgICAgICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0VHJhY2tSZXBhaW50UmVjdHMobWFpbkZy
YW1lQWRhcHRlcigpLCBmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBRQ3J5cHRvZ3JhcGhp
Y0hhc2ggaGFzaChRQ3J5cHRvZ3JhcGhpY0hhc2g6Ok1kNSk7CkBAIC0xMDk4LDcgKzEwOTUsNyBA
QCBRV2ViUGFnZSAqRHVtcFJlbmRlclRyZWU6OmNyZWF0ZVdpbmRvdygpCiAKICAgICAvLyBVc2Ug
YSBmcmFtZSBncm91cCBuYW1lIGZvciBhbGwgcGFnZXMgY3JlYXRlZCBieSBEdW1wUmVuZGVyVHJl
ZSB0byBhbGxvdwogICAgIC8vIHRlc3Rpbmcgb2YgY3Jvc3MtcGFnZSBmcmFtZSBsb29rdXAuCi0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUocGFnZSwgIm9y
Zy53ZWJraXQucXQuRHVtcFJlbmRlclRyZWUiKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6d2ViUGFnZVNldEdyb3VwTmFtZShwYWdlLT5oYW5kbGUoKSwgIm9yZy53ZWJraXQucXQuRHVt
cFJlbmRlclRyZWUiKTsKIAogICAgIHJldHVybiBwYWdlOwogfQpAQCAtMTEzNCw2ICsxMTMxLDE2
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnN3aXRjaEZvY3VzKGJvb2wgZm9jdXNlZCkKIAogfQog
CitRV2ViUGFnZUFkYXB0ZXIqIER1bXBSZW5kZXJUcmVlOjpwYWdlQWRhcHRlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGFnZS0+aGFuZGxlKCk7Cit9CisKK1FXZWJGcmFtZUFkYXB0ZXIqIER1
bXBSZW5kZXJUcmVlOjptYWluRnJhbWVBZGFwdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YWdlLT5tYWluRnJhbWUoKS0+aGFuZGxlKCk7Cit9CisKIFFMaXN0PFdlYlBhZ2UqPiBEdW1wUmVu
ZGVyVHJlZTo6Z2V0QWxsUGFnZXMoKSBjb25zdAogewogICAgIFFMaXN0PFdlYlBhZ2UqPiBwYWdl
czsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAppbmRleCA5ODQy
OWM0NGVjOTMxMTMyMDA3ZTRkOGYzYWFjYWU0ZGM5Zjk2Njc4Li41Yjg4YjUyNzY2MjgyY2E0MDYw
ODgwYjRiN2NlZWY0MjUzNjRhMGYwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9x
dC9EdW1wUmVuZGVyVHJlZVF0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWVRdC5oCkBAIC01Myw3ICs1Myw4IEBAIGNsYXNzIFFVcmw7CiBjbGFzcyBRRmlsZTsK
IFFUX0VORF9OQU1FU1BBQ0UKIAotY2xhc3MgUVdlYkZyYW1lOworY2xhc3MgUVdlYkZyYW1lQWRh
cHRlcjsKK2NsYXNzIFFXZWJQYWdlQWRhcHRlcjsKIAogY2xhc3MgVGVzdFJ1bm5lcjsKIGNsYXNz
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OwpAQCAtOTcsNiArOTgsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQpOwogCiAgICAgV2ViUGFnZSAqd2ViUGFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIFFXZWJQYWdlQWRhcHRlciAqcGFnZUFkYXB0
ZXIoKSBjb25zdDsKKyAgICBRV2ViRnJhbWVBZGFwdGVyICptYWluRnJhbWVBZGFwdGVyKCkgY29u
c3Q7CisKICAgICBRTGlzdDxXZWJQYWdlKj4gZ2V0QWxsUGFnZXMoKSBjb25zdDsKIAogICAgIHZv
aWQgcHJvY2Vzc0FyZ3NMaW5lKGNvbnN0IFFTdHJpbmdMaXN0Jik7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0V2ZW50U2VuZGVyUXQuY3BwCmluZGV4IGRjZjlmMWJiMjEwZTljMDFmYzU1OWJiYzQ4
M2RhMmM0NWNmOTBhNDAuLjgwYmUxMzE3ODhkMmI5YjIwOGY1M2Y4ZGQ2NTU3NzQ0MWE4Y2FkMTIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuY3BwCkBAIC00MzEsNyAr
NDMxLDcgQEAgUVN0cmluZ0xpc3QgRXZlbnRTZW5kZXI6OmNvbnRleHRDbGljaygpCiAgICAgICAg
IFFDb250ZXh0TWVudUV2ZW50IGN0eEV2ZW50KFFDb250ZXh0TWVudUV2ZW50OjpNb3VzZSwgbV9t
b3VzZVBvcyk7CiAgICAgICAgIHNlbmRFdmVudChtX3BhZ2UtPnZpZXcoKSwgJmN0eEV2ZW50KTsK
ICAgICB9Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb250ZXh0TWVudSht
X3BhZ2UpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29udGV4dE1lbnUo
bV9wYWdlLT5oYW5kbGUoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNo
cm9ub3VzQ2xpY2soKQpAQCAtNjE2LDcgKzYxNiw3IEBAIHZvaWQgRXZlbnRTZW5kZXI6OnRleHRa
b29tT3V0KCkKIHZvaWQgRXZlbnRTZW5kZXI6OnNjYWxlUGFnZUJ5KGZsb2F0IHNjYWxlRmFjdG9y
LCBmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGlmIChRV2ViRnJhbWUqIGZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKSkKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFn
ZUJ5KGZyYW1lLCBzY2FsZUZhY3RvciwgUVBvaW50KHgsIHkpKTsKKyAgICAgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KGZyYW1lLT5oYW5kbGUoKSwgc2NhbGVGYWN0b3Is
IFFQb2ludCh4LCB5KSk7CiB9CiAKIFFXZWJGcmFtZSogRXZlbnRTZW5kZXI6OmZyYW1lVW5kZXJN
b3VzZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVu
bmVyUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcAppbmRl
eCA2MDY3NTE0ZjA1NTA5NWViNzIzYTRlODQxMWEyMmRhYjYyZWJkOGYxLi5kOTM1MDVmYzVmYWY1
ZmMxM2ZhNDFmZWZlZjk2YTVhMDgzNjQ1OTFlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rl
c3RSdW5uZXJRdC5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldCgp
CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGZh
bHNlLCBmYWxzZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5Q2Fs
bGJhY2tzKGZhbHNlKTsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFZpc2l0ZWRM
aW5rc0NhbGxiYWNrcyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0
R2VvbG9jYXRpb25Nb2NrKG1fZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpyZXNldEdlb2xvY2F0aW9uTW9jayhtX2RydC0+cGFnZUFkYXB0ZXIoKSk7CiAgICAg
c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CiAgICAgY2xlYXJBbGxEYXRhYmFzZXMoKTsK
ICAgICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBmb3IgRFJUIGlzIHRvIGJsb2NrIHRoaXJkLXBhcnR5
IGNvb2tpZXMsIG1pbWljaW5nIHRoZSBNYWMgcG9ydApAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3Ry
aW5nJiB0aXRsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0VHJhY2tSZXBhaW50UmVjdHMobV90b3BMb2FkaW5nRnJhbWUs
IHRydWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRUcmFja1JlcGFpbnRSZWN0
cyhtX3RvcExvYWRpbmdGcmFtZS0+aGFuZGxlKCksIHRydWUpOwogICAgIGVtaXQgc2hvd1BhZ2Uo
KTsKIH0KIApAQCAtNDE3LDcgKzQxNyw3IEBAIFFTdHJpbmcgVGVzdFJ1bm5lcjo6ZGVjb2RlSG9z
dE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYklu
c3BlY3RvcigpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNs
b3NlKG1fZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJ
bnNwZWN0b3JDbG9zZShtX2RydC0+cGFnZUFkYXB0ZXIoKSk7CiAgICAgbV9kcnQtPndlYlBhZ2Uo
KS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZCwgZmFsc2UpOwogfQogCkBAIC00MzQsMjcgKzQzNCwyNyBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiB2b2lkIFRlc3RS
dW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRp
bmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQs
IHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KG1f
ZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0
b3JTaG93KG1fZHJ0LT5wYWdlQWRhcHRlcigpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFs
dWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQo
bV9kcnQtPndlYlBhZ2UoKSwgY2FsbElkLCBzY3JpcHQpOworICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBj
YWxsSWQsIHNjcmlwdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RnJhbWVGbGF0dGVuaW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlZCk7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQobV9kcnQt
PnBhZ2VBZGFwdGVyKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygp
CiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdvQmFjayhtX2RydC0+d2ViUGFnZSgp
KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z29CYWNrKG1fZHJ0LT5wYWdlQWRhcHRl
cigpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZmxhZykK
IHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJzTG9hZGluZyhtX2RydC0+
d2ViUGFnZSgpLCBmbGFnKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJz
TG9hZGluZyhtX2RydC0+cGFnZUFkYXB0ZXIoKSwgZmxhZyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAt
NTQ0LDcgKzU0NCw3IEBAIGJvb2wgVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYgYW5pbWF0aW9uTmFtCiB7CiAgICAgUVdlYkZyYW1l
KiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJUKGZy
YW1lKTsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlQW5pbWF0aW9u
KGZyYW1lLCBhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpOworICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUtPmhhbmRsZSgpLCBhbmlt
YXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5h
bWUsCkBAIC01NTMsMTQgKzU1MywxNCBAQCBib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbQogewogICAg
IFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBR
X0FTU0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVz
ZVRyYW5zaXRpb25PZlByb3BlcnR5KGZyYW1lLCBwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJ
ZCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25P
ZlByb3BlcnR5KGZyYW1lLT5oYW5kbGUoKSwgcHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQp
OwogfQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdAogewogICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJh
bWUoKTsKICAgICBRX0FTU0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUpOworICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lLT5oYW5k
bGUoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCkBAIC02
OTgsMTIgKzY5OCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oY29uc3QgUVN0cmluZyYgdXJsKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhcmV0QnJvd3Np
bmdFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIHZhbHVlKTsKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQobV9kcnQtPnBhZ2VB
ZGFwdGVyKCksIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZChib29sIHZhbHVlKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCB2YWx1ZSk7
CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKQEAgLTcyOCw3ICs3MjgsNyBA
QCBpbnQgVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQoKQogCiBib29sIFRlc3RSdW5uZXI6
OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzaG91bGRDbG9zZShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSk7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShtX2RydC0+bWFp
bkZyYW1lQWRhcHRlcigpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xp
Y3koY29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNvbnN0IFFTdHJpbmcmIHBvbGljeSkKQEAg
LTc1NywyNyArNzU3LDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KGNv
bnN0IFFTdHJpbmcmIG9yaWVudGF0aW9uLCBjb25zdCBRU3RyaW5nJiBwCiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZW5hYmxlKQogewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQobV9kcnQt
PndlYlBhZ2UoKSwgZW5hYmxlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21h
cnRJbnNlcnREZWxldGVFbmFibGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBlbmFibGUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9v
bCBlbmFibGUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWls
aW5nV2hpdGVzcGFjZUVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCht
X2RydC0+cGFnZUFkYXB0ZXIoKSwgZW5hYmxlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpleGVj
Q29tbWFuZChjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKG1fZHJ0
LT53ZWJQYWdlKCksIG5hbWUsIHZhbHVlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKG1fZHJ0LT5wYWdlQWRhcHRlcigpLCBuYW1lLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChjb25zdCBRU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXND
b21tYW5kRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBuYW1lKTsKKyAgICByZXR1cm4gRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQobV9kcnQtPnBhZ2VBZGFwdGVyKCks
IG5hbWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoY29uc3QgUVN0cmluZyYg
c3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCiB7Ci0gICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKG1fZHJ0LT53ZWJQYWdlKCksIHN0cmlu
Zywgb3B0aW9uQXJyYXkpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Zmlu
ZFN0cmluZyhtX2RydC0+cGFnZUFkYXB0ZXIoKSwgc3RyaW5nLCBvcHRpb25BcnJheSk7CiB9CiAK
IFFTdHJpbmcgVGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IFFXZWJFbGVt
ZW50JiBsaXN0SXRlbSkKQEAgLTc5Miw3ICs3OTIsNyBAQCBRVmFyaWFudE1hcCBUZXN0UnVubmVy
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29uc3QgUVdlYkVsZW1lbnQmIGVs
ZQogCiBib29sIFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdp
dGhJZChjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpCiB7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobV9k
cnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIGVsZW1lbnRJZCk7CisgICAgcmV0dXJuIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQobV9kcnQtPm1haW5GcmFtZUFkYXB0ZXIoKSwgZWxlbWVudElkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjphdXRoZW50aWNhdGVTZXNzaW9uKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5n
JiwgY29uc3QgUVN0cmluZyYpCkBAIC04MTIsNyArODEyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBo
YSwgYm8KIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0
QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykK
LSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlv
bihwYWdlLCBjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwgYmV0YSwgY2Fu
UHJvdmlkZUdhbW1hLCBnYW1tYSk7CisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRNb2NrRGV2aWNlT3JpZW50YXRpb24ocGFnZS0+aGFuZGxlKCksIGNhblByb3ZpZGVBbHBoYSwg
YWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykK
QEAgLTgyMCw3ICs4MjAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbihib29sIGFsbG93KQogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxv
dyk7CiAgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBh
Z2VzKCk7CiAgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAg
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9u
KHBhZ2UsIGFsbG93KTsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tH
ZW9sb2NhdGlvblBlcm1pc3Npb24ocGFnZS0+aGFuZGxlKCksIGFsbG93KTsKIH0KIAogaW50IFRl
c3RSdW5uZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkK
QEAgLTgyOCw3ICs4MjgsNyBAQCBpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQogICAgIGludCBwZW5kaW5nUGVybWlzc2lvbkNvdW50
ID0gMDsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxs
UGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAg
ICAgICAgcGVuZGluZ1Blcm1pc3Npb25Db3VudCArPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMocGFnZSk7CisgICAg
ICAgIHBlbmRpbmdQZXJtaXNzaW9uQ291bnQgKz0gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51
bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKHBhZ2UtPmhhbmRsZSgp
KTsKIAogICAgIHJldHVybiBwZW5kaW5nUGVybWlzc2lvbkNvdW50OwogfQpAQCAtODQzLDE0ICs4
NDMsMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZh
aWxhYmxlRXJyb3IoY29uc3QgUVN0cmluZyYgbWVzc2EKIHsKICAgICBRTGlzdDxXZWJDb3JlOjpX
ZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJD
b3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihwYWdlLCBtZXNz
YWdlKTsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihwYWdlLT5oYW5kbGUoKSwgbWVzc2FnZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAgUUxpc3Q8V2Vi
Q29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CiAgICAgZm9yZWFj
aCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLCBsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBhY2N1cmFjeSk7CisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLT5oYW5kbGUoKSwgbGF0aXR1ZGUsIGxvbmdpdHVk
ZSwgYWNjdXJhY3kpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJl
c3VsdChjb25zdCBRU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBRU3Ry
aW5nJiBsYW5ndWFnZSkKQEAgLTg3OCwxMiArODc4LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJRCwgY29u
c3QKIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQg
d29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFnZSgpLT5t
YWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQobV9kcnQtPm1haW5GcmFtZUFkYXB0ZXIo
KSwgd29ybGRJRCwgc2NyaXB0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVT
aGVldChjb25zdCBRU3RyaW5nJiBzb3VyY2VDb2RlKQogewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChtX2RydC0+d2ViUGFnZSgpLCBzb3VyY2VDb2RlKTsK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQobV9kcnQtPnBh
Z2VBZGFwdGVyKCksIHNvdXJjZUNvZGUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjphZGRV
UkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGlu
YXQKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWlu
aW11bVRpbWVySW50ZXJ2YWwpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1p
bmltdW1UaW1lckludGVydmFsKG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFs
KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwo
bV9kcnQtPnBhZ2VBZGFwdGVyKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmNwcAppbmRleCBkNTY0NWE1MjNlOTJk
YzlkNTM2NjJjNjljNGUwYmNiMDRmYTA2N2ZjLi4zOGU0ODlkNzhmNzM2ZjMyNDBiNTAxMjMxMmZm
NzA1Y2RjNzQ1ZjE0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5w
dXRDb250cm9sbGVyUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1RleHRJbnB1
dENvbnRyb2xsZXJRdC5jcHAKQEAgLTE0OSwxNSArMTQ5LDE1IEBAIHZvaWQgVGV4dElucHV0Q29u
dHJvbGxlcjo6aW5zZXJ0VGV4dChjb25zdCBRU3RyaW5nJiBzdHJpbmcpCiAKIFFWYXJpYW50TGlz
dCBUZXh0SW5wdXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVjdGVkUmFuZ2UocW9iamVjdF9jYXN0PFFXZWJQYWdl
Kj4ocGFyZW50KCkpKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNlbGVj
dGVkUmFuZ2UocW9iamVjdF9jYXN0PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSk7CiB9
CiAKIFFWYXJpYW50TGlzdCBUZXh0SW5wdXRDb250cm9sbGVyOjpmaXJzdFJlY3RGb3JDaGFyYWN0
ZXJSYW5nZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShxb2JqZWN0X2Nhc3Q8
UVdlYlBhZ2UqPihwYXJlbnQoKSksIGxvY2F0aW9uLCBsZW5ndGgpOworICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UocW9iamVjdF9j
YXN0PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSwgbG9jYXRpb24sIGxlbmd0aCk7CiB9
CiAKIHZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJrVGV4dCgpCiB7Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihxb2JqZWN0X2Nhc3Q8UVdlYlBh
Z2UqPihwYXJlbnQoKSksIDApOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb25maXJt
Q29tcG9zaXRpb24ocW9iamVjdF9jYXN0PFFXZWJQYWdlKj4ocGFyZW50KCkpLT5oYW5kbGUoKSwg
MCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9Xb3JrUXVldWVJdGVt
UXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNwcAppbmRl
eCBiMDkzMzY2Njc2MDY4NjNjODc3NGE5YjQ5M2VmMjhiMDM1OGY2OWVhLi43Y2Y5ZmNhZjEwMmUw
ZjYwYTAwZDZmMDdlNjIwNWY3NTllYjBkY2QzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC9Xb3JrUXVldWVJdGVtUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L1dvcmtRdWV1ZUl0ZW1RdC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBMb2FkQWx0ZXJuYXRl
SFRNTFN0cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0
ZUh0bWwoZnJhbWUsIG1fY29udGVudCwgUVVybChtX2Jhc2VVUkwpLCBRVXJsKG1fZmFpbGluZ1VS
TCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBbHRlcm5hdGVIdG1sKGZyYW1l
LT5oYW5kbGUoKSwgbV9jb250ZW50LCBRVXJsKG1fYmFzZVVSTCksIFFVcmwobV9mYWlsaW5nVVJM
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZGVmYXVsdF9wb3N0LnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZGVmYXVsdF9wb3N0LnByZgppbmRleCA0Nzc2ZDFkOTIwOWQyNWZiZGFmOWE5NGFhMGFjY2Mz
NTViMmVmZmZmLi45YzBmMzIzMmY5YmRiNjAzZDg5M2E0YTdhNzBjNzM0OGY2YmZmYWQ5IDEwMDY0
NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKKysr
IGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmCkBAIC0xNzcs
NyArMTc3LDcgQEAgY29udGFpbnMoUVQsIHdlYmtpdHdpZGdldHMpIHsKICAgICAjIG5lZWQgdG8g
bGluayB0byBhbnkgaW50ZXJtZWRpYXRlIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgZm9yY2Vfc3Rh
dGljX2xpYnNfYXNfc2hhcmVkIHsKICAgICAgICAgV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29y
ZSB3ZWJjb3JlCi0gICAgICAgIGJ1aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtpdDEKKyAg
ICAgICAgYnVpbGQ/KHdlYmtpdDEpOiBXRUJLSVQgKz0gd2Via2l0d2lkZ2V0cyB3ZWJraXQxCiAg
ICAgICAgIGJ1aWxkPyh3ZWJraXQyKTogV0VCS0lUICs9IHdlYmtpdDIKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvcHJvZHVjdGlvbl9idWlsZC5wcmYg
Yi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3Byb2R1Y3Rpb25fYnVpbGQucHJmCmluZGV4
IGIzZjM2YWJiNDg1Mzk0MTNmYzI3YjY2OWFmMjYxNWI2NzA3Mzk1NGQuLjQyMzUxMDI2OGIzOGEx
MzdmMTg0ZTZiNjRhM2ZiOGM5NDQ0MmJkMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvcHJvZHVjdGlvbl9idWlsZC5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnByZgpAQCAtNyw4ICs3LDggQEAgQ09ORklHICo9
IHVzZV9hbGxfaW5fb25lX2ZpbGVzCiAjIHJlc3VsdGluZyBpbiB0aGUgbmVlZCBvZiBzZXZlcmFs
IGdpZ2FieXRlcyBvZiBtZW1vcnkgYXQgbGluay10aW1lLiBSZWR1Y2UgdGhlIHByZXNzdXJlCiAj
IGJ5IGNvbXBpbGluZyBhbnkgc3RhdGljIGxpYnJhcnkgbGlrZSBXVEYgb3IgSlNDIHdpdGggcmVs
ZWFzZSBmbGFncyBpbnN0ZWFkIGFuZCBrZWVwIGRlYnVnCiAjIHN5bWJvbHMgZm9yIHRoZSBzdGF0
aWMgbGlicmFyaWVzIHRoYXQgaW1wbGVtZW50IEFQSS4KLWxpbnV4LSp8d2luMzItZysrKjppZihD
T05GSUcoZGVidWcsIGRlYnVnfHJlbGVhc2UpfGNvbnRhaW5zKFFUX0NPTkZJRyxzZXBhcmF0ZV9k
ZWJ1Z19pbmZvKSk6Y29udGFpbnMoVEVNUExBVEUsIGxpYik6c3RhdGljbGliIHsKLSAgICAhZXF1
YWxzKFRBUkdFVCwgV2ViS2l0Mik6IWVxdWFscyhUQVJHRVQsIFdlYktpdDEpIHsKK2xpbnV4LSp8
d2luMzItZysrKjpDT05GSUcoZGVidWcsIGRlYnVnfHJlbGVhc2UpOmNvbnRhaW5zKFRFTVBMQVRF
LCBsaWIpOnN0YXRpY2xpYiB7CisgICAgIWVxdWFscyhUQVJHRVQsIFdlYktpdDIpOiFlcXVhbHMo
VEFSR0VULCBXZWJLaXRXaWRnZXRzKSB7CiAgICAgICAgIENPTkZJRyArPSBub19kZWJ1Z19pbmZv
CiAgICAgICAgIENPTkZJRyAtPSBzZXBhcmF0ZV9kZWJ1Z19pbmZvCiAgICAgICAgIFFNQUtFX0NG
TEFHUyArPSAkJFFNQUtFX0NGTEFHU19SRUxFQVNFCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL3dlYmtpdF9tb2R1bGVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvd2Via2l0X21vZHVsZXMucHJmCmluZGV4IGIyZjMzNTM2NDhkNzA4ZmIxNjJiNTkx
NTA2MDFiM2NhZmRmNTlhZDIuLjUwNWI4MjY1OGUyMThkNjI2NjBmZDI4MWJmNTZhZTliMTc2OTMw
YTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVs
ZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVsZXMu
cHJmCkBAIC03LDcgKzcsNyBAQAogCiAjIFJlb3JkZXIgbGlicmFyaWVzIHNvIHRoYXQgdGhlIGxp
bmsgYW5kIGluY2x1ZGUgb3JkZXIgaXMgY29ycmVjdCwKICMgYW5kIG1ha2Ugc3VyZSB0aGUgY2Fz
ZSBtYXRjaGVzIHRoZSBvcmlnaW5hbCBjYXNlLgotbGlicmFyaWVzID0gV2ViS2l0MSBXZWJLaXQy
IFdlYkNvcmUgQU5HTEUgSmF2YVNjcmlwdENvcmUgV1RGCitsaWJyYXJpZXMgPSBXZWJLaXRXaWRn
ZXRzIFdlYktpdDEgV2ViS2l0MiBXZWJDb3JlIEFOR0xFIEphdmFTY3JpcHRDb3JlIFdURgogZm9y
KGxpYnJhcnksIGxpYnJhcmllcykgewogICAgIGNvbnRhaW5zKFdFQktJVCwgJCRsb3dlcigkJGxp
YnJhcnkpKSB7CiAgICAgICAgIFdFQktJVCAtPSAkJGxvd2VyKCQkbGlicmFyeSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvbW9kdWxlcy93ZWJraXR3aWRnZXRzLnByZiBiL1Rvb2xz
L3FtYWtlL21rc3BlY3MvbW9kdWxlcy93ZWJraXR3aWRnZXRzLnByZgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTE2
NDNjOGRmMDAxMGRmYWQyNzVhMzRkM2I2MThiOWFmZmJkMWRjCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3dlYmtpdHdpZGdldHMucHJmCkBAIC0wLDAgKzEs
OSBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisjIE1vZHVsZSBmaWxlIGZvciBXZWJLaXRXaWRnZXQsIHVzZWQg
YnkgdGFyZ2V0cyB0aGF0IGRlcGVuZCBvbiBXZWJLaXRXaWRnZXQKKyMKKyMgU2VlICdUb29scy9x
bWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCisjIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworV0VCS0lULndlYmtpdHdpZGdldHMucm9vdF9zb3VyY2VfZGlyID0gJCR7Uk9PVF9X
RUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0CisKK2luY2x1ZGUoJCR7V0VCS0lULndlYmtpdHdpZGdl
dHMucm9vdF9zb3VyY2VfZGlyfS9XZWJLaXRXaWRnZXRzLnByaSkKZGlmZiAtLWdpdCBhL1dlYktp
dC5wcm8gYi9XZWJLaXQucHJvCmluZGV4IDg3NmQ1NTQxMjY2MzhiOGFiZGE3ZmRlOGU5MTE0NmQx
YzU3ZWVmNmMuLmZiYTViOTk3YWM3YjMyNDE4NmRlNzc1OTcxZTNkM2QwYjlhMWMwNDYgMTAwNjQ0
Ci0tLSBhL1dlYktpdC5wcm8KKysrIGIvV2ViS2l0LnBybwpAQCAtMzIsNiArMzIsMTAgQEAgYnVp
bGQ/KHdlYmtpdDEpIHsKICAgICB3ZWJraXQxLmZpbGUgPSBTb3VyY2UvV2ViS2l0L1dlYktpdDEu
cHJvCiAgICAgd2Via2l0MS5tYWtlZmlsZSA9IE1ha2VmaWxlLldlYktpdDEKICAgICBTVUJESVJT
ICs9IHdlYmtpdDEKKworICAgIHdlYmtpdHdpZGdldHMuZmlsZSA9IFNvdXJjZS9XZWJLaXQvV2Vi
S2l0V2lkZ2V0cy5wcm8KKyAgICB3ZWJraXR3aWRnZXRzLm1ha2VmaWxlID0gTWFrZWZpbGUuV2Vi
S2l0V2lkZ2V0cworICAgIFNVQkRJUlMgKz0gd2Via2l0d2lkZ2V0cwogfQogCiBidWlsZD8od2Vi
a2l0Mikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175642</attachid>
            <date>2012-11-22 03:44:51 -0800</date>
            <delta_ts>2012-11-22 05:44:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102800-20121122124341.patch</filename>
            <type>text/plain</type>
            <size>415004</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJkOWVkYTVkMTMxZGIw
NGU4ZjJkNzMxMDA4MDBjYmY2OTA5ZGNhYy4uNDRmMGU2OGI2OGRhNWYxZWYwYzY2NDllZjhjZjZm
NDhkMTk4M2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTIyICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIFNl
cGFyYXRlIFFXaWRnZXQgZGVwZW5kYW50IGNvZGUgaW50byBzZXBhcmF0ZSBXZWJLaXRXaWRnZXRz
IHN0YXRpYyBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDI4MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIHNlcGFyYXRlcyBjb2RlIHRoYXQgbmVlZHMgdG8gdXNlIFFXaWRn
ZXQgcmVsYXRlZCBBUElzIGluCisgICAgICAgIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydCBhbmQg
QXBpIGZyb20gY29kZSB0aGF0IGRvZXNuJ3QuIFRoaXMgbWVhbnMgZm9yCisgICAgICAgIGV4YW1w
bGUgRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgcmVtYWlucyBpbiB0aGUgV2ViS2l0MSBzdGF0aWMg
bGlicmFyeSwKKyAgICAgICAgd2hpbGUgcXdlYnBhZ2UuY3BwIGFuZCBxd2ViZnJhbWUuY3BwIGJl
Y29tZSBwYXJ0IG9mIHRoZSBXZWJLaXRXaWRnZXRzCisgICAgICAgIHN0YXRpYyBsaWJyYXJ5LiBX
ZWJLaXQxIGlzIGNvbXBpbGVkIHdpdGhvdXQgUVQgKz0gd2lkZ2V0cyBhbmQgdGhlcmVmb3JlCisg
ICAgICAgIGFueSB3aWRnZXQgcmVsYXRlZCBkZXBlbmRlbmN5IGhhcyBiZWVuIG1vdmVkICJ1cCIg
YW5kIG91dCBvZiBXZWJLaXQxIGludG8KKyAgICAgICAgdGhlIFdlYktpdFdpZGdldHMgbGlicmFy
eS4KKworICAgICAgICBCZXR3ZWVuIHRoZSBjb2RlIGluIFdlYktpdC5hIGFuZCBXZWJLaXRXaWRn
ZXRzLmEgbmV3IGFkYXB0ZXJzIGFuZAorICAgICAgICBpbnRlcmZhY2VzIGhhdmUgYmVlbiBpbnRy
b2R1Y2VkLCBzdWNoIGFzIFFXZWJQYWdlQWRhcHRlciBhbmQKKyAgICAgICAgUVdlYkZyYW1lQWRh
cHRlci4gUVdlYlBhZ2VBZGFwdGVyLCB3aGVuIHVzZWQgZnJvbSBXZWJLaXQxLCBpcyBhIHdheSB0
bworICAgICAgICBjYWxsIG91dCBpbnRvIHRoZSBBUEkgbGF5ZXIsIGltcGxlbWVudGVkIGJ5IFFX
ZWJQYWdlIChRV2ViUGFnZVByaXZhdGUpLgorICAgICAgICBUaGUgb3RoZXIgd2F5IGFyb3VuZCBp
ZiBRV2ViUGFnZSB3YW50cyB0byBhY2Nlc3MgV2ViQ29yZSBvcgorICAgICAgICBXZWJDb3JlU3Vw
cG9ydCByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGl0IHdpbGwgZ28gdGhyb3VnaAorICAgICAgICBR
V2ViUGFnZUFkYXBhdGVyIChhcyBiYXNlIGNsYXNzKS4gVGhlIHNlcGFyYXRpb24gaW4gdGhlIGRp
cmVjdGlvbiB1cAorICAgICAgICBpbnRvIHRoZSBBUEkgbGF5ZXIgaXMgY29tcGxldGUgd2l0aCB0
aGlzIHBhdGNoLCBubyBjb2RlIGluIFdlYktpdDEKKyAgICAgICAgZGVwZW5kcyBvbiBRdFdpZGdl
dHMuIFRoZSBzZXBhcmF0aW9uIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBjb2RlIGluIHRoZQorICAg
ICAgICBBUEkgbGF5ZXIgbm90IHVzaW5nIGFueSBXZWJDb3JlIHR5cGVzLCBpcyBub3QgY29tcGxl
dGUgeWV0LgorCisgICAgICAgIFNvbWUgY2xhc3NlcyBzdWNoIGFzIFFXZWJTZXR0aW5ncywgUVdl
YkVsZW1lbnQgb3IKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQgcmVtYWluIGluIFdl
YktpdDEuIFdoaWxlIHRoZXkgYXJlIEFQSSBsYXllciwKKyAgICAgICAgdGhleSBkbyBub3QgZGVw
ZW5kIG9uIHdpZGdldCByZWxhdGVkIFF0IEFQSXMgYW5kIHRoZXkgbWFrZSBtdWNoIG1vcmUKKyAg
ICAgICAgdXNlIG9mIFdlYkNvcmUgaW50ZXJuYWwgQVBJcyBhbmQgdGhlcmVmb3JlIGFyZSBlYXNp
ZXIgdG8ga2VlcCBpbgorICAgICAgICBXZWJLaXQxLgorCisgICAgICAgIEluIHRoZSBmdXR1cmUg
d2UgcGxhbiB0byBwbGFjZSBhIHJlYWwgc2hhcmVkIGxpYnJhcnkgYm91bmRhcnkgYmV0d2Vlbgor
ICAgICAgICBXZWJLaXQxIGFuZCBXZWJLaXRXaWRnZXRzLCBieSBrZWVwaW5nIHRoZSBXZWJLaXQx
IHN0YXRpYyBsaWJyYXJ5IGFzCisgICAgICAgIHBhcnQgb2YgdGhlIFF0V2ViS2l0IHNoYXJlZCBs
aWJyYXJ5IGFuZCBieSB0dXJuaW5nIHRoZSBXZWJLaXRXaWRnZXRzCisgICAgICAgIHN0YXRpYyBs
aWJyYXJ5IGludG8gYSBzaGFyZWQgb25lLgorCisgICAgICAgICogcGxhdGZvcm0vcXQvUVdlYlBh
Z2VDbGllbnQuaDoKKyAgICAgICAgKFFXZWJQYWdlQ2xpZW50KToKKwogMjAxMi0xMS0yMiAgSGFy
YWxkIEFsdmVzdHJhbmQgIDxodGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBOYW1lIGVudW1lcmF0
b3IgZnVuY3Rpb24gZm9yIEdldFN0YXRzIFJUQ1N0YXRzRWxlbWVudApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2ZjM5
MjMwNmJhMGRjYzBjNWEzOWZiZGFkODJhOTg2MjYxNzhlNWQ3Li42MDg5YzgzYjZjNWZkMjI3N2U0
ODEwMmZjMjhmYzI1ZTU1MTdlMWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEx
LTIyICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAg
ICBbUXRdIFNlcGFyYXRlIFFXaWRnZXQgZGVwZW5kYW50IGNvZGUgaW50byBzZXBhcmF0ZSBXZWJL
aXRXaWRnZXRzIHN0YXRpYyBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDI4MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNlcGFyYXRlcyBjb2RlIHRoYXQgbmVlZHMgdG8g
dXNlIFFXaWRnZXQgcmVsYXRlZCBBUElzIGluCisgICAgICAgIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydCBhbmQgQXBpIGZyb20gY29kZSB0aGF0IGRvZXNuJ3QuIFRoaXMgbWVhbnMgZm9yCisgICAg
ICAgIGV4YW1wbGUgRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgcmVtYWlucyBpbiB0aGUgV2ViS2l0
MSBzdGF0aWMgbGlicmFyeSwKKyAgICAgICAgd2hpbGUgcXdlYnBhZ2UuY3BwIGFuZCBxd2ViZnJh
bWUuY3BwIGJlY29tZSBwYXJ0IG9mIHRoZSBXZWJLaXRXaWRnZXRzCisgICAgICAgIHN0YXRpYyBs
aWJyYXJ5LiBXZWJLaXQxIGlzIGNvbXBpbGVkIHdpdGhvdXQgUVQgKz0gd2lkZ2V0cyBhbmQgdGhl
cmVmb3JlCisgICAgICAgIGFueSB3aWRnZXQgcmVsYXRlZCBkZXBlbmRlbmN5IGhhcyBiZWVuIG1v
dmVkICJ1cCIgYW5kIG91dCBvZiBXZWJLaXQxIGludG8KKyAgICAgICAgdGhlIFdlYktpdFdpZGdl
dHMgbGlicmFyeS4KKworICAgICAgICBCZXR3ZWVuIHRoZSBjb2RlIGluIFdlYktpdC5hIGFuZCBX
ZWJLaXRXaWRnZXRzLmEgbmV3IGFkYXB0ZXJzIGFuZAorICAgICAgICBpbnRlcmZhY2VzIGhhdmUg
YmVlbiBpbnRyb2R1Y2VkLCBzdWNoIGFzIFFXZWJQYWdlQWRhcHRlciBhbmQKKyAgICAgICAgUVdl
YkZyYW1lQWRhcHRlci4gUVdlYlBhZ2VBZGFwdGVyLCB3aGVuIHVzZWQgZnJvbSBXZWJLaXQxLCBp
cyBhIHdheSB0bworICAgICAgICBjYWxsIG91dCBpbnRvIHRoZSBBUEkgbGF5ZXIsIGltcGxlbWVu
dGVkIGJ5IFFXZWJQYWdlIChRV2ViUGFnZVByaXZhdGUpLgorICAgICAgICBUaGUgb3RoZXIgd2F5
IGFyb3VuZCBpZiBRV2ViUGFnZSB3YW50cyB0byBhY2Nlc3MgV2ViQ29yZSBvcgorICAgICAgICBX
ZWJDb3JlU3VwcG9ydCByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGl0IHdpbGwgZ28gdGhyb3VnaAor
ICAgICAgICBRV2ViUGFnZUFkYXBhdGVyIChhcyBiYXNlIGNsYXNzKS4gVGhlIHNlcGFyYXRpb24g
aW4gdGhlIGRpcmVjdGlvbiB1cAorICAgICAgICBpbnRvIHRoZSBBUEkgbGF5ZXIgaXMgY29tcGxl
dGUgd2l0aCB0aGlzIHBhdGNoLCBubyBjb2RlIGluIFdlYktpdDEKKyAgICAgICAgZGVwZW5kcyBv
biBRdFdpZGdldHMuIFRoZSBzZXBhcmF0aW9uIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBjb2RlIGlu
IHRoZQorICAgICAgICBBUEkgbGF5ZXIgbm90IHVzaW5nIGFueSBXZWJDb3JlIHR5cGVzLCBpcyBu
b3QgY29tcGxldGUgeWV0LgorCisgICAgICAgIFNvbWUgY2xhc3NlcyBzdWNoIGFzIFFXZWJTZXR0
aW5ncywgUVdlYkVsZW1lbnQgb3IKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQgcmVt
YWluIGluIFdlYktpdDEuIFdoaWxlIHRoZXkgYXJlIEFQSSBsYXllciwKKyAgICAgICAgdGhleSBk
byBub3QgZGVwZW5kIG9uIHdpZGdldCByZWxhdGVkIFF0IEFQSXMgYW5kIHRoZXkgbWFrZSBtdWNo
IG1vcmUKKyAgICAgICAgdXNlIG9mIFdlYkNvcmUgaW50ZXJuYWwgQVBJcyBhbmQgdGhlcmVmb3Jl
IGFyZSBlYXNpZXIgdG8ga2VlcCBpbgorICAgICAgICBXZWJLaXQxLgorCisgICAgICAgIEluIHRo
ZSBmdXR1cmUgd2UgcGxhbiB0byBwbGFjZSBhIHJlYWwgc2hhcmVkIGxpYnJhcnkgYm91bmRhcnkg
YmV0d2VlbgorICAgICAgICBXZWJLaXQxIGFuZCBXZWJLaXRXaWRnZXRzLCBieSBrZWVwaW5nIHRo
ZSBXZWJLaXQxIHN0YXRpYyBsaWJyYXJ5IGFzCisgICAgICAgIHBhcnQgb2YgdGhlIFF0V2ViS2l0
IHNoYXJlZCBsaWJyYXJ5IGFuZCBieSB0dXJuaW5nIHRoZSBXZWJLaXRXaWRnZXRzCisgICAgICAg
IHN0YXRpYyBsaWJyYXJ5IGludG8gYSBzaGFyZWQgb25lLgorCisgICAgICAgICogV2ViS2l0MS5w
cmk6CisgICAgICAgICogV2ViS2l0MS5wcm86CisgICAgICAgICogV2ViS2l0V2lkZ2V0cy5wcmk6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcmkuCisgICAgICAgICogV2ViS2l0
V2lkZ2V0cy5wcm86IEFkZGVkLgorCiAyMDEyLTExLTIxICBLYWkgS29laG5lICA8a2FpLmtvZWhu
ZUBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBNaW5HVzogRG9uJ3QgYWRkIE9wZW5HTCBsaWJy
YXJ5IGRlcGVuZGVuY2llcyBoZXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGYwNzkxYmZjMDJmNTgyZTNj
Njc4MGMyOWViODc0MTI4ZjNlNTcwZTYuLmRjOTZkOGYxMzdmZmViNDU4ZGVhZTdjZTE5ZmNmMDQ5
ODY4ODBiN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTM4IEBACisyMDEyLTExLTIyICBT
aW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRd
IFNlcGFyYXRlIFFXaWRnZXQgZGVwZW5kYW50IGNvZGUgaW50byBzZXBhcmF0ZSBXZWJLaXRXaWRn
ZXRzIHN0YXRpYyBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDI4MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIHNlcGFyYXRlcyBjb2RlIHRoYXQgbmVlZHMgdG8gdXNlIFFX
aWRnZXQgcmVsYXRlZCBBUElzIGluCisgICAgICAgIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydCBh
bmQgQXBpIGZyb20gY29kZSB0aGF0IGRvZXNuJ3QuIFRoaXMgbWVhbnMgZm9yCisgICAgICAgIGV4
YW1wbGUgRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgcmVtYWlucyBpbiB0aGUgV2ViS2l0MSBzdGF0
aWMgbGlicmFyeSwKKyAgICAgICAgd2hpbGUgcXdlYnBhZ2UuY3BwIGFuZCBxd2ViZnJhbWUuY3Bw
IGJlY29tZSBwYXJ0IG9mIHRoZSBXZWJLaXRXaWRnZXRzCisgICAgICAgIHN0YXRpYyBsaWJyYXJ5
LiBXZWJLaXQxIGlzIGNvbXBpbGVkIHdpdGhvdXQgUVQgKz0gd2lkZ2V0cyBhbmQgdGhlcmVmb3Jl
CisgICAgICAgIGFueSB3aWRnZXQgcmVsYXRlZCBkZXBlbmRlbmN5IGhhcyBiZWVuIG1vdmVkICJ1
cCIgYW5kIG91dCBvZiBXZWJLaXQxIGludG8KKyAgICAgICAgdGhlIFdlYktpdFdpZGdldHMgbGli
cmFyeS4KKworICAgICAgICBCZXR3ZWVuIHRoZSBjb2RlIGluIFdlYktpdC5hIGFuZCBXZWJLaXRX
aWRnZXRzLmEgbmV3IGFkYXB0ZXJzIGFuZAorICAgICAgICBpbnRlcmZhY2VzIGhhdmUgYmVlbiBp
bnRyb2R1Y2VkLCBzdWNoIGFzIFFXZWJQYWdlQWRhcHRlciBhbmQKKyAgICAgICAgUVdlYkZyYW1l
QWRhcHRlci4gUVdlYlBhZ2VBZGFwdGVyLCB3aGVuIHVzZWQgZnJvbSBXZWJLaXQxLCBpcyBhIHdh
eSB0bworICAgICAgICBjYWxsIG91dCBpbnRvIHRoZSBBUEkgbGF5ZXIsIGltcGxlbWVudGVkIGJ5
IFFXZWJQYWdlIChRV2ViUGFnZVByaXZhdGUpLgorICAgICAgICBUaGUgb3RoZXIgd2F5IGFyb3Vu
ZCBpZiBRV2ViUGFnZSB3YW50cyB0byBhY2Nlc3MgV2ViQ29yZSBvcgorICAgICAgICBXZWJDb3Jl
U3VwcG9ydCByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGl0IHdpbGwgZ28gdGhyb3VnaAorICAgICAg
ICBRV2ViUGFnZUFkYXBhdGVyIChhcyBiYXNlIGNsYXNzKS4gVGhlIHNlcGFyYXRpb24gaW4gdGhl
IGRpcmVjdGlvbiB1cAorICAgICAgICBpbnRvIHRoZSBBUEkgbGF5ZXIgaXMgY29tcGxldGUgd2l0
aCB0aGlzIHBhdGNoLCBubyBjb2RlIGluIFdlYktpdDEKKyAgICAgICAgZGVwZW5kcyBvbiBRdFdp
ZGdldHMuIFRoZSBzZXBhcmF0aW9uIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBjb2RlIGluIHRoZQor
ICAgICAgICBBUEkgbGF5ZXIgbm90IHVzaW5nIGFueSBXZWJDb3JlIHR5cGVzLCBpcyBub3QgY29t
cGxldGUgeWV0LgorCisgICAgICAgIFNvbWUgY2xhc3NlcyBzdWNoIGFzIFFXZWJTZXR0aW5ncywg
UVdlYkVsZW1lbnQgb3IKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQgcmVtYWluIGlu
IFdlYktpdDEuIFdoaWxlIHRoZXkgYXJlIEFQSSBsYXllciwKKyAgICAgICAgdGhleSBkbyBub3Qg
ZGVwZW5kIG9uIHdpZGdldCByZWxhdGVkIFF0IEFQSXMgYW5kIHRoZXkgbWFrZSBtdWNoIG1vcmUK
KyAgICAgICAgdXNlIG9mIFdlYkNvcmUgaW50ZXJuYWwgQVBJcyBhbmQgdGhlcmVmb3JlIGFyZSBl
YXNpZXIgdG8ga2VlcCBpbgorICAgICAgICBXZWJLaXQxLgorCisgICAgICAgIEluIHRoZSBmdXR1
cmUgd2UgcGxhbiB0byBwbGFjZSBhIHJlYWwgc2hhcmVkIGxpYnJhcnkgYm91bmRhcnkgYmV0d2Vl
bgorICAgICAgICBXZWJLaXQxIGFuZCBXZWJLaXRXaWRnZXRzLCBieSBrZWVwaW5nIHRoZSBXZWJL
aXQxIHN0YXRpYyBsaWJyYXJ5IGFzCisgICAgICAgIHBhcnQgb2YgdGhlIFF0V2ViS2l0IHNoYXJl
ZCBsaWJyYXJ5IGFuZCBieSB0dXJuaW5nIHRoZSBXZWJLaXRXaWRnZXRzCisgICAgICAgIHN0YXRp
YyBsaWJyYXJ5IGludG8gYSBzaGFyZWQgb25lLgorCisKKyAgICAgICAgKiBBcGkvcWdyYXBoaWNz
d2Vidmlldy5jcHA6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6cGFnZUNsaWVu
dCk6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6ZGV0YWNoQ3VycmVudFBhZ2Up
OgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6c2V0UGFnZSk6CisgICAgICAgICogQXBpL3F3
ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKFFXZWJFbGVtZW50Ojp3ZWJGcmFtZSk6CisgICAgICAg
ICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpzZXRQYWdl
KToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKToK
KyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmhhbmRsZVByb2dyZXNzRmluaXNoZWQpOgorICAg
ICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6ZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQpOgorICAg
ICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6ZW1pdEljb25DaGFuZ2VkKToKKyAgICAgICAgKFFXZWJG
cmFtZVByaXZhdGU6OmVtaXRMb2FkU3RhcnRlZCk6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRl
OjplbWl0TG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmNyZWF0ZUNo
aWxkRnJhbWUpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6YXBpSGFuZGxlKToKKyAgICAg
ICAgKFFXZWJGcmFtZVByaXZhdGU6OmhhbmRsZSk6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRl
Ojpjb250ZW50c1NpemVEaWRDaGFuZ2UpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6c2Ny
b2xsQmFyUG9saWN5KToKKyAgICAgICAgKFFXZWJGcmFtZTo6UVdlYkZyYW1lKToKKyAgICAgICAg
KFFXZWJGcmFtZTo6flFXZWJGcmFtZSk6CisgICAgICAgIChRV2ViRnJhbWU6OnNldFVybCk6Cisg
ICAgICAgIChRV2ViRnJhbWU6OmxvYWQpOgorICAgICAgICAoUVdlYkZyYW1lOjpzY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChRV2ViRnJhbWU6Omdlb21ldHJ5KToKKyAgICAgICAgKFFXZWJGcmFt
ZVByaXZhdGU6OmtpdCk6CisgICAgICAgIChRV2ViRnJhbWU6OmhhbmRsZSk6CisgICAgICAgICog
QXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAo
UVdlYkZyYW1lUHJpdmF0ZTo6UVdlYkZyYW1lUHJpdmF0ZSk6CisgICAgICAgIChRV2ViRnJhbWVQ
cml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYmhpc3RvcnkuY3BwOgorICAgICAgICAoUVdlYkhp
c3RvcnlQcml2YXRlOjpwYWdlKToKKyAgICAgICAgKiBBcGkvcXdlYmhpc3RvcnlfcC5oOgorICAg
ICAgICAoUVdlYkhpc3RvcnlQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5j
cHA6CisgICAgICAgIChRV2ViSW5zcGVjdG9yUHJpdmF0ZTo6c2V0RnJvbnRlbmQpOgorICAgICAg
ICAqIEFwaS9xd2ViaW5zcGVjdG9yX3AuaDoKKyAgICAgICAgKFFXZWJJbnNwZWN0b3JQcml2YXRl
KToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRl
OjpRV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQ
cml2YXRlKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y29yZSk6CisgICAgICAgIChRV2Vi
UGFnZVByaXZhdGU6OnNob3cpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpzZXRGb2N1cyk6
CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnVuZm9jdXMpOgorICAgICAgICAoUVdlYlBhZ2VQ
cml2YXRlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6dmlld3Bv
cnRTaXplKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlV2luZG93KToKKyAgICAg
ICAgKFFXZWJQYWdlUHJpdmF0ZTo6amF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAg
KFFXZWJQYWdlUHJpdmF0ZTo6amF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFFXZWJQYWdlUHJp
dmF0ZTo6amF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpqYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6cHJpbnRSZXF1ZXN0ZWQp
OgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpkYXRhYmFzZVF1b3RhRXhjZWVkZWQpOgorICAg
ICAgICAoUVdlYlBhZ2VQcml2YXRlOjphcHBsaWNhdGlvbkNhY2hlUXVvdGFFeGNlZWRlZCk6Cisg
ICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnNldFRvb2xUaXApOgorICAgICAgICAoUVdlYlBhZ2VQ
cml2YXRlOjpjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKFFXZWJQYWdl
UHJpdmF0ZTo6bWFpbkZyYW1lQWRhcHRlcik6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNo
b29zZUZpbGVzKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6YWNjZXB0TmF2aWdhdGlvblJl
cXVlc3QpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjplbWl0UmVzdG9yZUZyYW1lU3RhdGVS
ZXF1ZXN0ZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjplbWl0U2F2ZUZyYW1lU3RhdGVS
ZXF1ZXN0ZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjplbWl0RG93bmxvYWRSZXF1ZXN0
ZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjplbWl0RnJhbWVDcmVhdGVkKToKKyAgICAg
ICAgKFFXZWJQYWdlUHJpdmF0ZTo6ZXJyb3JQYWdlRXh0ZW5zaW9uKToKKyAgICAgICAgKFFXZWJQ
YWdlUHJpdmF0ZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6YWRh
cHRlckZvcldpZGdldCk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZU1haW5GcmFt
ZSk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZUNvbnRleHRNZW51KToKKyAgICAg
ICAgKFFXZWJQYWdlUHJpdmF0ZTo6aW5zcGVjdG9ySGFuZGxlKToKKyAgICAgICAgKFFXZWJQYWdl
UHJpdmF0ZTo6c2V0SW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRl
OjpzZXRJbnNwZWN0b3JXaW5kb3dUaXRsZSk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNy
ZWF0ZVdlYkluc3BlY3Rvcik6CisgICAgICAgIChpdGVyYXRlQ29udGV4dE1lbnUpOgorICAgICAg
ICAoUVdlYlBhZ2VQcml2YXRlOjptZW51QWN0aW9uc0FzVGV4dCk6CisgICAgICAgIChRV2ViUGFn
ZVByaXZhdGU6OmVtaXRWaWV3cG9ydENoYW5nZVJlcXVlc3RlZCk6CisgICAgICAgIChRV2ViUGFn
ZVByaXZhdGU6Om1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6bW91
c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VEb3VibGVDbGlj
a0V2ZW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VUcmlwbGVDbGlja0V2ZW50
KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAg
ICAoUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTb2Z0d2FyZUlucHV0UGFuZWwpOgorICAgICAgICAo
UVdlYlBhZ2VQcml2YXRlOjp3aGVlbEV2ZW50KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6
Z2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRWaWV3KToKKyAgICAgICAgKFFX
ZWJQYWdlOjpqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoUVdlYlBhZ2U6Omph
dmFTY3JpcHRBbGVydCk6CisgICAgICAgIChRV2ViUGFnZTo6amF2YVNjcmlwdENvbmZpcm0pOgor
ICAgICAgICAoUVdlYlBhZ2U6OmphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoUVdlYlBhZ2U6
OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQpOgorICAgICAgICAoUVdlYlBhZ2U6OnNldEZlYXR1
cmVQZXJtaXNzaW9uKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y29sb3JTZWxlY3Rpb25S
ZXF1ZXN0ZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVTZWxlY3RQb3B1cCk6
CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnZpZXdSZWN0UmVsYXRpdmVUb1dpbmRvdyk6Cisg
ICAgICAgIChRV2ViUGFnZVByaXZhdGU6Omdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RlZCk6
CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6Omdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RD
YW5jZWxsZWQpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpub3RpZmljYXRpb25zUGVybWlz
c2lvblJlcXVlc3RlZCk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6Om5vdGlmaWNhdGlvbnNQ
ZXJtaXNzaW9uUmVxdWVzdENhbmNlbGxlZCk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnJl
c3BvbmRUb0NoYW5nZWRDb250ZW50cyk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjptaWNyb0Zv
Y3VzQ2hhbmdlZCk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnRyaWdnZXJDb3B5QWN0aW9u
KToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6dHJpZ2dlckFjdGlvbkZvcktleUV2ZW50KToK
KyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJVbmRvU3RhY2spOgorICAgICAgICAoUVdl
YlBhZ2VQcml2YXRlOjpjYW5VbmRvKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y2FuUmVk
byk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OnVuZG8pOgorICAgICAgICAoUVdlYlBhZ2VQ
cml2YXRlOjpyZWRvKToKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlVW5kb1N0ZXAp
OgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JDb21tYW5kRm9yS2V5RXZlbnQpOgor
ICAgICAgICAoUVdlYlBhZ2U6OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRV2ViUGFnZTo6c2V0
Vmlld3BvcnRTaXplKToKKyAgICAgICAgKFFXZWJQYWdlOjp2aWV3cG9ydEF0dHJpYnV0ZXNGb3JT
aXplKToKKyAgICAgICAgKFFXZWJQYWdlOjpldmVudCk6CisgICAgICAgIChRV2ViUGFnZTo6ZXh0
ZW5zaW9uKToKKyAgICAgICAgKFFXZWJQYWdlOjpoYW5kbGUpOgorICAgICAgICAoUVdlYlBhZ2U6
OmNob29zZUZpbGUpOgorICAgICAgICAoUVdlYlBhZ2U6OnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KToKKyAgICAgICAgKFFXZWJQYWdlOjpuZXR3b3JrQWNjZXNzTWFuYWdlcik6CisgICAgICAgICog
QXBpL3F3ZWJwYWdlLmg6CisgICAgICAgICogQXBpL3F3ZWJwYWdlX3AuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYnNl
dHRpbmdzLmNwcDoKKyAgICAgICAgKiBBcGkvcXdlYnNldHRpbmdzLmg6CisgICAgICAgICogQXBp
L3F3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFXZWJWaWV3UHJpdmF0ZTo6ZGV0YWNoQ3VycmVudFBh
Z2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpDaHJvbWVDbGllbnRRdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnRRdDo6Zm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50
UXQ6OnVuZm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNyZWF0ZVdp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2V0VG9vbGJhcnNWaXNpYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpzZXRTdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpzZXRNZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6Y2xvc2VXaW5kb3dTb29uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpzZXRTdGF0dXNiYXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudFF0OjprZXlib2FyZFVJTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnRRdDo6d2luZG93UmVzaXplclJlY3QpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisgICAgICAgIChDaHJvbWVDbGllbnRRdCk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRRdC5jcHA6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRRdC5oOgorICAgICAgICAoQ29udGV4dE1l
bnVDbGllbnRRdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERlZmF1bHRGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyOjpEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgIChEZWZhdWx0
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6fkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToK
KyAgICAgICAgKERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3Jl
ZW5Gb3JWaWRlb1BsYXliYWNrKToKKyAgICAgICAgKERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyOjplbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAoRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hh
bmRsZXI6OmV4aXRGdWxsU2NyZWVuKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EZWZhdWx0
RnVsbFNjcmVlblZpZGVvSGFuZGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRRdDo6c3Rh
cnREcmFnKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudFF0OjpEcmFnQ2xpZW50
UXQpOgorICAgICAgICAoRHJhZ0NsaWVudFF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6CisgICAgICAgICh0b0dlb2xvY2F0aW9uQ2xpZW50
TW9jayk6CisgICAgICAgICh0b0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZCk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZSk6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZSk6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlwdCk6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yU2hvdyk6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Omhhc0RvY3VtZW50RWxlbWVudCk6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJGcmFtZU5hbWUpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21hcnRJbnNl
cnREZWxldGVFbmFibGVkKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmZpbmRTdHJpbmcpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQpOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbmRvd3NCZWhhdmlvckFzRWRpdGluZ0JlaGF2
aW9yKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp2aWV3cG9ydEFzVGV4dCk6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2NhbGVQYWdlQnkpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbik6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2spOgor
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1p
c3Npb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RzKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZSk6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVzZXJTdHlsZVNo
ZWV0KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZW1vdmVVc2VyU3R5bGVT
aGVldHMpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyc0xvYWRp
bmcpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdvQmFjayk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzcG9uc2VNaW1lVHlwZSk6CisgICAgICAgIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKToKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb250ZXh0TWVudSk6CisgICAgICAgIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3Mp
OgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om1lZGlhQ29udGVudFVybEJ5RWxl
bWVudElkKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBbHRlcm5hdGVI
dG1sKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb25maXJtQ29tcG9zaXRp
b24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09i
amVjdCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcm5hbHNP
YmplY3QpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhaW50UGFnZXNXaXRo
Qm91bmRhcmllcyk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0VHJhY2tS
ZXBhaW50UmVjdHMpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRyYWNrUmVw
YWludFJlY3RzKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnZXRUcmFja2Vk
UmVwYWludFJlY3RzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcDoK
KyAgICAgICAgKGR1bXBSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6
c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRRdDo6c2hvdWxkSW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRR
dDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JD
bGllbnRRdDo6c2hvdWxkQXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRRdDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
ckNsaWVudFF0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvckNsaWVudFF0OjpyZWdpc3RlclVuZG9TdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudFF0OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRRdDo6Y2FuVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRRdDo6Y2FuUmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6dW5kbyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6cmVkbyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3JDbGllbnRRdDo6c2hvdWxkSW5zZXJ0Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRRdDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudFF0Ojp0b2dnbGVTbWFydEluc2VydERlbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpoYW5kbGVLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpFZGl0b3JDbGllbnRRdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6c2V0SW5wdXRNZXRob2RTdGF0ZSk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaDoKKyAgICAgICAgKEVk
aXRvckNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpzZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6
OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoZHJ0RGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRRdDo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6
dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRp
c3BhdGNoRGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZpbmlzaExvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRMYXlvdXQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NTdGFydGVk
Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OnBv
c3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZENvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0OjpyZXN0b3JlVmlld1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpZFBl
cmZvcm1GaXJzdE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRRdDo6b25JY29uTG9hZGVkRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0Ojp1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpzYXZlVmlld1N0YXRlVG9JdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbmNlbGxlZEVycm9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmJsb2NrZWRFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5ub3RTaG93VVJMRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6aW50ZXJydXB0ZWRGb3JQb2xp
Y3lDaGFuZ2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpj
YW5ub3RTaG93TUlNRVR5cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFF0OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdDo6cGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpkb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZpbmlz
aExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0
Y2hEaWRGYWlsTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0
OjpjYWxsRXJyb3JQYWdlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmRpc3BhdGNoQ3JlYXRlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRRdDo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OjpjcmVhdGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0
OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6
Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFF0OjpjaG9vc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6d2ViRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZW1pdExvYWRTdGFydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoZWQpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKyAgICAgICAgKEZyYW1lTG9h
ZGVyQ2xpZW50UXQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0Nv
bnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6
OkZyYW1lTmV0d29ya2luZ0NvbnRleHRRdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU5ldHdv
cmtpbmdDb250ZXh0UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU5ldHdvcmtp
bmdDb250ZXh0UXQ6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuaDoKKyAgICAgICAgKEZyYW1lTmV0d29ya2lu
Z0NvbnRleHRRdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGdWxsU2NyZWVuVmlk
ZW9RdDo6RnVsbFNjcmVlblZpZGVvUXQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Z1bGxT
Y3JlZW5WaWRlb1F0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xv
Y2F0aW9uQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRR
dDo6R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNs
aWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25D
bGllbnRRdDo6c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNs
aWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
bkNsaWVudFF0OjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5oOgorICAgICAgICAoR2VvbG9jYXRpb25DbGllbnRR
dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6
OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oOgorICAgICAgICAoR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQu
Y3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6c2V0V2ViS2l0V2lkZ2V0
c0luaXRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRRdCk6Cisg
ICAgICAgIChXZWJLaXQ6OnNldEltYWdlUGxhdGZvcm1SZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplV2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Jbml0
V2ViQ29yZVF0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojppbml0aWFsaXplV2ViS2l0V2lkZ2V0cyk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5oLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OjpJbnNw
ZWN0b3JDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDo6b3Bl
bkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0
OjphdHRhY2hBbmRSZXBsYWNlUmVtb3RlRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2xpZW50UXQ6OmRldGFjaFJlbW90ZUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudFF0OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNsaWVudFF0OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojp1cGRhdGVXaW5k
b3dUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpk
ZXN0cm95SW5zcGVjdG9yVmlldyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50UXQuaDoKKyAgICAgICAgKEluc3BlY3RvckNsaWVudFF0KToKKyAgICAgICAgKEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudFdlYlBhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckNsaWVudFdlYlBh
Z2U6Okluc3BlY3RvckNsaWVudFdlYlBhZ2UpOgorICAgICAgICAoSW5zcGVjdG9yQ2xpZW50V2Vi
UGFnZTo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKEluc3BlY3RvckNsaWVudFdlYlBhZ2U6Omph
dmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRXZWJQYWdlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLmguCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yU2VydmVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU2VydmVy
UmVxdWVzdEhhbmRsZXJRdDo6dGNwUmVhZHlSZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQ6OndlYlNvY2tldFJlYWR5UmVhZCk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuaDoKKyAgICAgICAgKEluc3BlY3Rv
clNlcnZlclF0KToKKyAgICAgICAgKEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVyUXQpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbldyYXBwZXI6Ok5vdGlmaWNhdGlvbldy
YXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OmRpc3BsYXlOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmR1bXBT
aG93VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dDo6dG9QYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0Ojp0b0ZyYW1lKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uV3JhcHBlcjo6
fk5vdGlmaWNhdGlvbldyYXBwZXIpOgorICAgICAgICAoTm90aWZpY2F0aW9uV3JhcHBlcik6Cisg
ICAgICAgIChOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3Jl
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6aGFzU3lzdGVtVHJheUljb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnNldFN5c3RlbVRy
YXlJY29uKToKKyAgICAgICAgKENhbGxiYWNrc0luZm8pOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKGNyZWF0
ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lkZ2V0KToKKyAgICAgICAgKFFXZWJQYWdl
Q2xpZW50Ojpvd25lcldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdl
dDo6b3duZXJXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OmNy
ZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6b3duZXJXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0Lmg6CisgICAgICAgIChQYWdl
Q2xpZW50UVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpRR3JhcGhpY3NJdGVtT3ZlcmxheTo6
UUdyYXBoaWNzSXRlbU92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisgICAgICAgIChQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNRdC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2lu
SW5mbyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwOgorICAgICAg
ICAoU2VsZWN0RGF0YTo6U2VsZWN0RGF0YSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUUdy
YXBoaWNzV2lkZ2V0UGx1Z2luSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUUdyYXBoaWNzV2lk
Z2V0UGx1Z2luSW1wbDo6flFHcmFwaGljc1dpZGdldFBsdWdpbkltcGwpOgorICAgICAgICAoUUdy
YXBoaWNzV2lkZ2V0UGx1Z2luSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKFFHcmFwaGljc1dpZGdl
dFBsdWdpbkltcGw6OnNldEdlb21ldHJ5QW5kQ2xpcCk6CisgICAgICAgIChRR3JhcGhpY3NXaWRn
ZXRQbHVnaW5JbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFFHcmFwaGljc1dpZGdldFBsdWdp
bkltcGw6OnNldFdpZGdldFBhcmVudCk6CisgICAgICAgIChRR3JhcGhpY3NXaWRnZXRQbHVnaW5J
bXBsOjpoYW5kbGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBs
dWdpbkltcGwuaDogQWRkZWQuCisgICAgICAgIChRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsKToK
KyAgICAgICAgKFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGw6OlFHcmFwaGljc1dpZGdldFBsdWdp
bkltcGwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKGNhY2hlTG9hZENvbnRyb2xUb0NhY2hlUG9saWN5KToKKyAgICAgICAg
KFFXZWJGcmFtZURhdGE6OlFXZWJGcmFtZURhdGEpOgorICAgICAgICAoUVdlYkZyYW1lQWRhcHRl
cjo6UVdlYkZyYW1lQWRhcHRlcik6CisgICAgICAgIChRV2ViRnJhbWVBZGFwdGVyOjp+UVdlYkZy
YW1lQWRhcHRlcik6CisgICAgICAgIChRV2ViRnJhbWVBZGFwdGVyOjpsb2FkKToKKyAgICAgICAg
KFFXZWJGcmFtZUFkYXB0ZXI6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChRV2ViRnJh
bWVBZGFwdGVyOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChRV2ViRnJhbWVBZGFwdGVyOjpm
cmFtZVJlY3QpOgorICAgICAgICAoUVdlYkZyYW1lQWRhcHRlcjo6aW5pdCk6CisgICAgICAgIChR
V2ViRnJhbWVBZGFwdGVyOjpraXQpOgorICAgICAgICAoUVdlYkZyYW1lQWRhcHRlcjo6ZW5zdXJl
QWJzb2x1dGVVcmwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFFXZWJGcmFtZURhdGEpOgor
ICAgICAgICAoUVdlYkZyYW1lQWRhcHRlcik6CisgICAgICAgIChRV2ViRnJhbWVBZGFwdGVyOjpo
YXNWaWV3KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFFXZWJQYWdlQWRhcHRlcjo6UVdlYlBhZ2VBZGFwdGVyKToKKyAgICAg
ICAgKFFXZWJQYWdlQWRhcHRlcjo6flFXZWJQYWdlQWRhcHRlcik6CisgICAgICAgIChRV2ViUGFn
ZUFkYXB0ZXI6OmluaXQpOgorICAgICAgICAoUVdlYlBhZ2VBZGFwdGVyOjpkZWxldGVQYWdlKToK
KyAgICAgICAgKFFXZWJQYWdlQWRhcHRlcjo6a2l0KToKKyAgICAgICAgKFFXZWJQYWdlQWRhcHRl
cjo6dmlld3BvcnRBcmd1bWVudHMpOgorICAgICAgICAoUVdlYlBhZ2VBZGFwdGVyOjpyZWdpc3Rl
clVuZG9TdGVwKToKKyAgICAgICAgKFFXZWJQYWdlQWRhcHRlcjo6c2V0TmV0d29ya0FjY2Vzc01h
bmFnZXIpOgorICAgICAgICAoUVdlYlBhZ2VBZGFwdGVyOjpuZXR3b3JrQWNjZXNzTWFuYWdlcik6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUVdlYlBhZ2VBZGFwdGVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChRV2ViUGFnZUFkYXB0ZXIpOgorICAgICAgICAoRXJy
b3JQYWdlT3B0aW9uKToKKyAgICAgICAgKEVycm9yUGFnZVJldHVybik6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmguCisgICAgICAgIChRV2ViVW5kb0Nv
bW1hbmQ6OlFXZWJVbmRvQ29tbWFuZCk6CisgICAgICAgIChRV2ViVW5kb0NvbW1hbmQ6OnVuZG8p
OgorICAgICAgICAoUVdlYlVuZG9Db21tYW5kOjpyZWRvKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9RV2ViVW5kb0NvbW1hbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmguCisgICAgICAgIChRV2ViVW5kb0NvbW1hbmQpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5JbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChRV2lkZ2V0UGx1Z2luSW1wbDo6flFXaWRnZXRQbHVnaW5JbXBsKToKKyAgICAgICAg
KFFXaWRnZXRQbHVnaW5JbXBsOjp1cGRhdGUpOgorICAgICAgICAoUVdpZGdldFBsdWdpbkltcGw6
OnNldEdlb21ldHJ5QW5kQ2xpcCk6CisgICAgICAgIChRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0Vmlz
aWJsZSk6CisgICAgICAgIChRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0U3R5bGVTaGVldCk6CisgICAg
ICAgIChRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0V2lkZ2V0UGFyZW50KToKKyAgICAgICAgKFFXaWRn
ZXRQbHVnaW5JbXBsOjpoYW5kbGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXaWRnZXRQ
bHVnaW5JbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UXRXZWJDb21ib0JveC5oLgorICAgICAgICAoUVdpZGdldFBsdWdpbkltcGwpOgorICAgICAgICAo
UVdpZGdldFBsdWdpbkltcGw6OlFXaWRnZXRQbHVnaW5JbXBsKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRGYWxs
YmFja1dlYlBvcHVwOjpRdEZhbGxiYWNrV2ViUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UXRG
YWxsYmFja1dlYlBvcHVwOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlF0RmFsbGJhY2tXZWJQ
b3B1cDo6cGFnZUNsaWVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dl
YlBvcHVwLmg6CisgICAgICAgIChRdEZhbGxiYWNrV2ViUG9wdXApOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1F0UGx1Z2luV2lkZ2V0QWRhcHRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guaC4KKyAgICAgICAgKFF0UGx1Z2lu
V2lkZ2V0QWRhcHRlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpRdFdlYkNvbWJvQm94OjpzaG93UG9wdXBBdEN1cnNvclBv
c2l0aW9uKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94Lmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaDoKKyAgICAgICAgKFNlYXJj
aFBvcHVwTWVudVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmNwcDoK
KyAgICAgICAgKFVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQpOgorICAgICAgICAoVW5kb1N0ZXBRdDo6
dGV4dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVW5kb1N0ZXBRdC5oOgorICAgICAgICAo
VW5kb1N0ZXBRdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1vdXNlRXZlbnRUeXBlQW5kTW91c2VCdXR0b25Gcm9t
UUV2ZW50KToKKyAgICAgICAgKFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6OmFwcGx5RGVsdGEpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjpXZWJLaXRQbGF0Zm9ybVdoZWVsRXZl
bnQpOgorICAgICAgICAoV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9QbGF0Zm9ybUV2ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRQbGF0
Zm9ybUdlc3R1cmVFdmVudDo6V2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0V2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0R2VzdHVyZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RXZlbnRDb252ZXJzaW9uLmg6CisgICAgICAgIChRR2VzdHVyZUV2ZW50RmFjYWRlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFj
ZS5oOgorICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6CisgICAgICAg
ICh0c3RfUVdlYlBhZ2U6OmxvYWRIdG1sNVZpZGVvKToKKyAgICAgICAgKHRzdF9RV2ViUGFnZTo6
bXVsdGlwbGVQYWdlR3JvdXBzQW5kTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKHRzdF9RV2ViUGFn
ZTo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeSk6CisKIDIwMTItMTEtMjEgIEFsbGFuIFNhbmRmZWxk
IEplbnNlbiAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAgICAgICAgUG9zaXRpb24gaW4g
UVdlYkhpdFRlc3RSZXN1bHQgZG9lcyBub3QgbWF0Y2ggZG9jdW1lbnRhdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGU0MTFlOTFhODhjMTE5MDBlYWM2ZWJlMjNlZmE5MzA0ZWI0YjBhNDEuLjUwNjg1NTYyZTg2
NTEwZjBjMjM0OTc4NDdhNzFkMWFmOGU0MWY1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxMi0xMS0yMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+
CisKKyAgICAgICAgW1F0XSBTZXBhcmF0ZSBRV2lkZ2V0IGRlcGVuZGFudCBjb2RlIGludG8gc2Vw
YXJhdGUgV2ViS2l0V2lkZ2V0cyBzdGF0aWMgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUg
Y2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rp
b24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBxdC9NYWluUXQuY3Bw
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTExLTIyICBFdW5t
aSBMZWUgIDxldW5taTE1LmxlZUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIENv
cnJlY3QgdGhlIHBhcmFtZXRlcnMgb2YgV2ViUGxhdGZvcm1Ub3VjaFBvaW50LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKaW5kZXggY2RhMGIwZjRkNjNiNWNl
NTQ1N2VlMWIzYTIwMTZlM2IxYzc4OTAxNi4uYWUzZmI0ZTJmYTBkYjI0YmQzZTRiZWFjMjE4YTIx
OTYwMmJkZTcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBh
Z2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVu
dC5oCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUVBhbGV0dGUgcGFs
ZXR0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JlZW5OdW1iZXIoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBRV2lkZ2V0KiBvd25lcldpZGdldCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFFPYmplY3QqIG93bmVyV2lkZ2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUVJl
Y3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0
dWFsIFFPYmplY3QqIHBsdWdpblBhcmVudCgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0MS5wcmkgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJpCmluZGV4IGY5
ODhiNGM2YmQ5OWFjZDEzNDExYTVhZDIyNTkxNDU5Mjk2NTNlMDIuLjAyOTdmY2M5MmQxZDI4OTYw
Zjk2N2RmOTc2MmFlOWY2YzJkYzYzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
MS5wcmkKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQxLnByaQpAQCAtMTgsMTYgKzE4LDkgQEAg
ZW5hYmxlPyhERVZJQ0VfT1JJRU5UQVRJT04pfGVuYWJsZT8oT1JJRU5UQVRJT05fRVZFTlRTKSB7
CiAKIGVuYWJsZT8oR0VPTE9DQVRJT04pOiBRVCArPSBsb2NhdGlvbgogCi11c2U/KFFUX01VTFRJ
TUVESUEpOiBRVCAqPSBtdWx0aW1lZGlhd2lkZ2V0cwotCiBjb250YWlucyhDT05GSUcsIHRleG1h
cCk6IERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUj0xCiAKIHVzZT8oUExVR0lOX0JB
Q0tFTkRfWExJQik6IFBLR0NPTkZJRyArPSB4MTEKIAotUVQgKz0gbmV0d29yayB3aWRnZXRzCi1o
YXZlPyhRVFFVSUNLKTogUVQgKz0gcXVpY2sKLWhhdmU/KFFUUFJJTlRTVVBQT1JUKTogUVQgKz0g
cHJpbnRzdXBwb3J0CitRVCArPSBuZXR3b3JrCiAKLXVzZT8oVEVYVFVSRV9NQVBQRVJfR0wpfGVu
YWJsZT8oV0VCR0wpIHsKLSAgICBRVCAqPSBvcGVuZ2wKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0MS5wcm8gYi9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCmluZGV4IDc1ZDRk
NzlkZTVhYzRjZTNlYzY5MmVlZDJmOTVkNWQ3ZGY5NGI0MzkuLmZlZTk5ZTg4NTFiZmZkNjExOGNm
NGNhYTBmMjI2YjEyZGI0Yjc0NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5w
cm8KKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybwpAQCAtMTUsMzAgKzE1LDIwIEBAIFFU
ICs9IGd1aQogQ09ORklHICs9IHN0YXRpY2xpYgogCiBTT1VSQ0VTICs9IFwKLSAgICAkJFBXRC9x
dC9BcGkvcXdlYmZyYW1lLmNwcCBcCi0gICAgJCRQV0QvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcu
Y3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYnBhZ2UuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkv
cXdlYnZpZXcuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwKKyAgICAk
JFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNwcCBcCiAgICAgJCRQV0QvcXQvQXBpL3F3ZWJlbGVt
ZW50LmNwcCBcCiAgICAgJCRQV0QvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcCBcCi0gICAgJCRQV0Qv
cXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAogICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9yeWlu
dGVyZmFjZS5jcHAgXAotICAgICQkUFdEL3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIFwK
ICAgICAkJFBXRC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwIFwKICAgICAkJFBXRC9xdC9B
cGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJzZXR0aW5n
cy5jcHAgXAogICAgICQkUFdEL3F0L0FwaS9xd2Vic2NyaXB0d29ybGQuY3BwIFwKLSAgICAkJFBX
RC9xdC9BcGkvcXdlYmRhdGFiYXNlLmNwcCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0
b3IuY3BwIFwKLSAgICAkJFBXRC9xdC9BcGkvcXdlYmtpdHZlcnNpb24uY3BwIFwKLSAgICAkJFBX
RC9xdC9BcGkvcWh0dHBoZWFkZXIuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9R
dEZhbGxiYWNrV2ViUG9wdXAuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdl
YkNvbWJvQm94LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0
LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBcCiAg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIFwK
ICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAgXAotICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwIFwKQEAgLTQ2LDY3
ICszNiw3MiBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
clNlcnZlclF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdl
Q2xpZW50UXQuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNw
cCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVN0eWxlRmFjYWRlSW1wLmNwcCBcCiAg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAorICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuY3BwIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFkYXB0ZXIuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1VuZG9TdGVwUXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVu
dENvbnZlcnNpb24uY3BwCiAKIEhFQURFUlMgKz0gXAotICAgICQkUFdEL3F0L0FwaS9xd2ViZnJh
bWUuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJmcmFtZV9wLmggXAotICAgICQkUFdEL3F0L0Fw
aS9xZ3JhcGhpY3N3ZWJ2aWV3LmggXAotICAgICQkUFdEL3F0L0FwaS9xd2Via2l0Z2xvYmFsLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCBcCi0gICAgJCRQV0Qv
cXQvQXBpL3F3ZWJwYWdlLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2Vidmlldy5oIFwKLSAgICAk
JFBXRC9xdC9BcGkvcXdlYnNldHRpbmdzLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9y
eWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKICAgICAk
JFBXRC9xdC9BcGkvcXdlYmRhdGFiYXNlLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2Vic2VjdXJp
dHlvcmlnaW4uaCBcCiAgICAgJCRQV0QvcXQvQXBpL3F3ZWJlbGVtZW50LmggXAogICAgICQkUFdE
L3F0L0FwaS9xd2ViZWxlbWVudF9wLmggXAotICAgICQkUFdEL3F0L0FwaS9xd2VicGx1Z2luZmFj
dG9yeS5oIFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYmhpc3RvcnkuaCBcCi0gICAgJCRQV0QvcXQv
QXBpL3F3ZWJpbnNwZWN0b3IuaCBcCi0gICAgJCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmgg
XAotICAgICQkUFdEL3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2VfcC5oIFwKLSAgICAkJFBXRC9x
dC9BcGkvcWh0dHBoZWFkZXJfcC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0
V2ViQ29yZVF0LmggXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZl
clF0LmggXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5o
IFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmggXAorICAgICQk
UFdEL3F0L0FwaS9xd2ViaGlzdG9yeV9wLmggXAorICAgICQkUFdEL3F0L0FwaS9xd2ViaGlzdG9y
eWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCisg
ICAgJCRQV0QvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oIFwKKyAgICAkJFBXRC9xdC9BcGkv
cXdlYnNldHRpbmdzLmggXAorICAgICQkUFdEL3F0L0FwaS9xd2Vic2NyaXB0d29ybGRfcC5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmggXAorICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0
d29ya2luZ0NvbnRleHRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9J
bml0V2ViQ29yZVF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFF0LmggXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0
LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmggXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwK
KyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5oIFwKLSAgICAkJFBXRC9xdC9X
ZWJDb3JlU3VwcG9ydC9RU3R5bGVGYWNhZGVJbXAuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9R
dFBsdWdpbldpZGdldEFkYXB0ZXIuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdl
YkZyYW1lQWRhcHRlci5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFnZUFk
YXB0ZXIuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQu
aCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oIFwK
LSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKKyAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmggXAogICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5oCiAKLWNvbnRhaW5zKFFUX0NPTkZJRyxh
Y2Nlc3NpYmlsaXR5KSB7Ci0gICAgU09VUkNFUyArPSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nl
c3NpYmxlLmNwcAotICAgIEhFQURFUlMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJs
ZV9wLmggCi19Ci0KIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFBXRC9xdC9BcGkgXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0CiAKLWVuYWJsZT8oVklERU8pIHsKLSAgICAhdXNlPyhRVEtJ
VCk6IXVzZT8oR1NUUkVBTUVSKTp1c2U/KFFUX01VTFRJTUVESUEpIHsKLSAgICAgICAgSEVBREVS
UyArPSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaAotICAg
ICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dp
ZGdldC5jcHAKLSAgICB9Cit1c2U/KDNEX0dSQVBISUNTKTogV0VCS0lUICs9IGFuZ2xlCiAKK2Vu
YWJsZT8oR0VPTE9DQVRJT04pIHsKKyAgICAgSEVBREVSUyArPSBcCisgICAgICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuaAorICAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAK
K30KKworZW5hYmxlPyhJQ09OREFUQUJBU0UpIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgICAg
JCRQV0QvLi4vV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VDbGllbnQuaCBcCisgICAg
ICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudFF0LmgKKworICAg
IFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJh
c2VDbGllbnRRdC5jcHAKK30KKworZW5hYmxlPyhWSURFTykgewogICAgIHVzZT8oUVRLSVQpIHwg
dXNlPyhHU1RSRUFNRVIpIHwgdXNlPyhRVF9NVUxUSU1FRElBKSB7CiAgICAgICAgIEhFQURFUlMg
Kz0gJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQuaAogICAgICAgICBT
T1VSQ0VTICs9ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmNwcApA
QCAtMTM0LDIxICsxMjksNCBAQCBlbmFibGU/KFZJREVPKSB7CiAgICAgfQogfQogCi1lbmFibGU/
KElDT05EQVRBQkFTRSkgewotICAgIEhFQURFUlMgKz0gXAotICAgICAgICAkJFBXRC8uLi9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUNsaWVudC5oIFwKLSAgICAgICAgJCRQV0QvcXQv
V2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50UXQuaAotCi0gICAgU09VUkNFUyArPSBc
Ci0gICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudFF0LmNw
cAotfQotCi1lbmFibGU/KEdFT0xPQ0FUSU9OKSB7Ci0gICAgIEhFQURFUlMgKz0gXAotICAgICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKLSAgICAgU09V
UkNFUyArPSBcCi0gICAgICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xp
ZW50UXQuY3BwCi19Ci0KLXVzZT8oM0RfR1JBUEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXRXaWRnZXRzLnByaSBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0V2lkZ2V0cy5wcmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRjNjE0ODVmMjc4ODRlYWI0MjQ2YmY0ZDIy
NjNhNzA0YmFhZTA3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0V2lk
Z2V0cy5wcmkKQEAgLTAsMCArMSwzMyBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgZmlsZSBjb250
YWlucyBzaGFyZWQgcnVsZXMgdXNlZCBib3RoIHdoZW4gYnVpbGRpbmcgV2ViS2l0V2lkZ2V0cwor
IyBpdHNlbGYsIGFuZCBieSB0YXJnZXRzIHRoYXQgdXNlIFdlYktpdFdpZGdldHMuCisjCisjIFNl
ZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3Rl
bQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK1NPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJj
ZS9XZWJLaXQKKworSU5DTFVERVBBVEggKz0gXAorICAgICQkU09VUkNFX0RJUi9xdC9BcGkgXAor
ICAgICQkU09VUkNFX0RJUi9xdC9XZWJDb3JlU3VwcG9ydCBcCisgICAgJCRST09UX1dFQktJVF9E
SVIvU291cmNlL1dURi93dGYvcXQKKworZW5hYmxlPyhERVZJQ0VfT1JJRU5UQVRJT04pfGVuYWJs
ZT8oT1JJRU5UQVRJT05fRVZFTlRTKSB7CisgICAgUVQgKz0gc2Vuc29ycworfQorCitlbmFibGU/
KEdFT0xPQ0FUSU9OKTogUVQgKz0gbG9jYXRpb24KKwordXNlPyhRVF9NVUxUSU1FRElBKTogUVQg
Kj0gbXVsdGltZWRpYXdpZGdldHMKKworY29udGFpbnMoQ09ORklHLCB0ZXhtYXApOiBERUZJTkVT
ICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9MQorCit1c2U/KFBMVUdJTl9CQUNLRU5EX1hMSUIp
OiBQS0dDT05GSUcgKz0geDExCisKK1FUICs9IG5ldHdvcmsgd2lkZ2V0cworaGF2ZT8oUVRRVUlD
Syk6IFFUICs9IHF1aWNrCitoYXZlPyhRVFBSSU5UU1VQUE9SVCk6IFFUICs9IHByaW50c3VwcG9y
dAorCit1c2U/KFRFWFRVUkVfTUFQUEVSX0dMKXxlbmFibGU/KFdFQkdMKSB7CisgICAgUVQgKj0g
b3BlbmdsCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdFdpZGdldHMucHJvIGIv
U291cmNlL1dlYktpdC9XZWJLaXRXaWRnZXRzLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2E3NTQxOTJiNzQy
MGY5OGZjZWIyZGI5ZGFlNTE1OTUzY2NjNWRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJLaXRXaWRnZXRzLnBybwpAQCAtMCwwICsxLDc1IEBACisjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMg
VGFyZ2V0IGZpbGUgZm9yIHRoZSBXZWJLaXRXaWRnZXRzIHN0YXRpYyBsaWJyYXJ5CisjCisjIFNl
ZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3Rl
bQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK1RFTVBMQVRFID0gbGliCitUQVJHRVQgPSBXZWJLaXRXaWRnZXRz
CisKK2luY2x1ZGUoV2ViS2l0V2lkZ2V0cy5wcmkpCisKK1dFQktJVCArPSB3dGYgamF2YXNjcmlw
dGNvcmUgd2ViY29yZSB3ZWJraXQxCitRVCArPSBndWkKKworQ09ORklHICs9IHN0YXRpY2xpYgor
CitTT1VSQ0VTICs9IFwKKyAgICAkJFBXRC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgXAor
ICAgICQkUFdEL3F0L0FwaS9xd2ViZnJhbWUuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnBh
Z2UuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnZpZXcuY3BwIFwKKyAgICAkJFBXRC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0
b3IuY3BwIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYmtpdHZlcnNpb24uY3BwIFwKKyAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwIFwKKyAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJvQm94LmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvUVdlYlVuZG9Db21tYW5kLmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9Jbml0V2ViS2l0UXQuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXZWJQYWdlLmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvUGFnZUNsaWVudFF0LmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVN0eWxl
RmFjYWRlSW1wLmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUUdyYXBoaWNzV2lk
Z2V0UGx1Z2luSW1wbC5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQ
bHVnaW5JbXBsLmNwcAorCitIRUFERVJTICs9IFwKKyAgICAkJFBXRC9xdC9BcGkvcWdyYXBoaWNz
d2Vidmlldy5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmggXAorICAgICQkUFdEL3F0
L0FwaS9xd2ViZnJhbWVfcC5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYmtpdGdsb2JhbC5oIFwK
KyAgICAkJFBXRC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggXAorICAgICQkUFdEL3F0
L0FwaS9xd2VicGFnZS5oIFwKKyAgICAkJFBXRC9xdC9BcGkvcXdlYnBhZ2VfcC5oIFwKKyAgICAk
JFBXRC9xdC9BcGkvcXdlYnZpZXcuaCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJpbnNwZWN0b3Iu
aCBcCisgICAgJCRQV0QvcXQvQXBpL3F3ZWJraXR2ZXJzaW9uLmggXAorICAgICQkUFdEL3F0L0Fw
aS9xd2VicGx1Z2luZGF0YWJhc2VfcC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9J
bml0V2ViS2l0UXQuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50V2ViUGFnZS5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9EZWZhdWx0RnVsbFNj
cmVlblZpZGVvSGFuZGxlci5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxi
YWNrV2ViUG9wdXAuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0Jv
eC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViVW5kb0NvbW1hbmQuaCBcCisg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggXAorICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuaCBcCisgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvUVN0eWxlRmFjYWRlSW1wLmggXAorICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5JbXBsLmgKKworY29udGFpbnMoUVRfQ09ORklHLCBhY2Nl
c3NpYmlsaXR5KSB7CisgICAgU09VUkNFUyArPSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nlc3Np
YmxlLmNwcAorICAgIEhFQURFUlMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZV9w
LmggCit9CisKK0lOQ0xVREVQQVRIICs9IFwKKyAgICAkJFBXRC9xdC9BcGkgXAorICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0CisKK2VuYWJsZT8oVklERU8pIHsKKyAgICAhdXNlPyhRVEtJVCk6
IXVzZT8oR1NUUkVBTUVSKTp1c2U/KFFUX01VTFRJTUVESUEpIHsKKyAgICAgICAgSEVBREVSUyAr
PSAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaAorICAgICAg
ICBTT1VSQ0VTICs9ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdl
dC5jcHAKKyAgICB9Cit9CisKK3VzZT8oM0RfR1JBUEhJQ1MpOiBXRUJLSVQgKz0gYW5nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKaW5kZXggZWY0MmM5NTE4NmUw
ZTY0ZGQzY2Q3MTdmMTE4Yzc4ODhmZjM3YTUyMS4uODRiNGU4MDFiZDFhY2RmNmZmYmY3MzI5NjRj
OThlY2FlMzNhNDE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNz
d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5j
cHAKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogCiAgICAgUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldCogcGFnZUNsaWVudCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+IChwYWdlLT5kLT5jbGllbnQu
Z2V0KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldCo+IChwYWdlLT5kLT5jbGllbnQuZGF0YSgpKTsKICAgICB9IAogfTsKIApA
QCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OmRldGFjaEN1
cnJlbnRQYWdlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFnZS0+ZC0+dmlldyA9IDA7Ci0g
ICAgcGFnZS0+ZC0+Y2xpZW50ID0gbnVsbHB0cjsKKyAgICBwYWdlLT5kLT5jbGllbnQucmVzZXQo
KTsKIAogICAgIC8vIGlmIHRoZSBwYWdlIHdhcyBjcmVhdGVkIGJ5IHVzLCB3ZSBvd24gaXQgYW5k
IG5lZWQgdG8KICAgICAvLyBkZXN0cm95IGl0IGFzIHdlbGwuCkBAIC01MDEsNyArNTAxLDcgQEAg
dm9pZCBRR3JhcGhpY3NXZWJWaWV3OjpzZXRQYWdlKFFXZWJQYWdlKiBwYWdlKQogICAgIGlmICgh
ZC0+cGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZC0+cGFnZS0+ZC0+Y2xpZW50ID0gYWRv
cHRQdHIobmV3IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQodGhpcywgcGFnZSkpOworICAgIGQt
PnBhZ2UtPmQtPmNsaWVudC5yZXNldChuZXcgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCh0aGlz
LCBwYWdlKSk7CiAKICAgICBpZiAoZC0+b3ZlcmxheSgpKQogICAgICAgICBkLT5vdmVybGF5KCkt
PnByZXBhcmVHcmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmVsZW1lbnQuY3BwCmluZGV4IDEwOGI5YjA2ZjFkZjNiZjMzZDFjNGUzNzVkODhmZGIzZjgwZDgz
ZDMuLjgyZjU3OWQ5NTUwYTNhY2ZkOTlkNDMwZDFkNWNmYTA3OGZlZTgzOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0hU
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWVBcnJheS5oIgorI2luY2x1ZGUgPFFXZWJGcmFtZUFkYXB0ZXIuaD4KICNpbmNsdWRlIDxwYXJz
ZXIvU291cmNlQ29kZS5oPgogI2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKICNpbmNsdWRlICJOb2Rl
TGlzdC5oIgpAQCAtNDcsOCArNDgsNiBAQAogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUg
InF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicnVudGlt
ZV9yb290LmgiCiAjaW5jbHVkZSA8SlNEb2N1bWVudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTcwNiw3ICs3MDUsOCBAQCBRV2ViRnJhbWUgKlFXZWJFbGVtZW50Ojp3ZWJGcmFtZSgp
IGNvbnN0CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6Omtp
dChmcmFtZSk7CisgICAgUVdlYkZyYW1lQWRhcHRlciogZnJhbWVBZGFwdGVyID0gUVdlYkZyYW1l
QWRhcHRlcjo6a2l0KGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVBZGFwdGVyLT5hcGlIYW5kbGUo
KTsKIH0KIAogc3RhdGljIGJvb2wgc2V0dXBTY3JpcHRDb250ZXh0KFdlYkNvcmU6OkVsZW1lbnQq
IGVsZW1lbnQsIEpTQzo6SlNWYWx1ZSYgdGhpc1ZhbHVlLCBTY3JpcHRTdGF0ZSomIHN0YXRlLCBT
Y3JpcHRDb250cm9sbGVyKiYgc2NyaXB0Q29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWUuY3BwCmluZGV4IDEzMTAzNDhlZDg5Nzk0OTBhYTJiYzBiMjJmZGMyZGMxNmQ1MWI2NWUuLjg5
NDc0ZGQyZTZiNWVlYTQ3Y2RkY2NhMTA2MjY2MWJjMTVjMzA0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmNwcApAQCAtMTA2LDU0ICsxMDYsNiBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGV4
dGVybiBRX0dVSV9FWFBPUlQgaW50IHF0X2RlZmF1bHREcGkoKTsKIFFUX0VORF9OQU1FU1BBQ0UK
IAotc3RhdGljIGlubGluZSBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZUxvYWRDb250
cm9sVG9DYWNoZVBvbGljeSh1aW50IGNhY2hlTG9hZENvbnRyb2wpCi17Ci0gICAgc3dpdGNoIChj
YWNoZUxvYWRDb250cm9sKSB7Ci0gICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6OkFsd2F5c05ldHdv
cms6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YTsKLSAg
ICBjYXNlIFFOZXR3b3JrUmVxdWVzdDo6UHJlZmVyQ2FjaGU6Ci0gICAgICAgIHJldHVybiBXZWJD
b3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKLSAgICBjYXNlIFFOZXR3b3JrUmVxdWVzdDo6
QWx3YXlzQ2FjaGU6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFEb250
TG9hZDsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3k7Ci19Ci0KLVFXZWJGcmFtZURhdGE6OlFXZWJG
cmFtZURhdGEoV2ViQ29yZTo6UGFnZSogcGFyZW50UGFnZSwgV2ViQ29yZTo6RnJhbWUqIHBhcmVu
dEZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRnJhbWVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lKQotICAgIDogbmFtZShmcmFtZU5hbWUp
Ci0gICAgLCBvd25lckVsZW1lbnQob3duZXJGcmFtZUVsZW1lbnQpCi0gICAgLCBwYWdlKHBhcmVu
dFBhZ2UpCi0gICAgLCBhbGxvd3NTY3JvbGxpbmcodHJ1ZSkKLSAgICAsIG1hcmdpbldpZHRoKDAp
Ci0gICAgLCBtYXJnaW5IZWlnaHQoMCkKLXsKLSAgICBmcmFtZUxvYWRlckNsaWVudCA9IG5ldyBG
cmFtZUxvYWRlckNsaWVudFF0KCk7Ci0gICAgZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKHBhZ2UsIG93
bmVyRWxlbWVudCwgZnJhbWVMb2FkZXJDbGllbnQpOwotCi0gICAgLy8gRklYTUU6IEFsbCBvZiB0
aGUgYmVsb3cgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIG92ZXIgaW50byBXZWJDb3JlCi0gICAg
ZnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKLSAgICBpZiAocGFyZW50RnJhbWUpCi0gICAg
ICAgIHBhcmVudEZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGZyYW1lKTsKLX0KLQotdm9pZCBR
V2ViRnJhbWVQcml2YXRlOjppbml0KFFXZWJGcmFtZSAqcWZyYW1lLCBRV2ViRnJhbWVEYXRhICpm
cmFtZURhdGEpCi17Ci0gICAgcSA9IHFmcmFtZTsKLQotICAgIGFsbG93c1Njcm9sbGluZyA9IGZy
YW1lRGF0YS0+YWxsb3dzU2Nyb2xsaW5nOwotICAgIG1hcmdpbldpZHRoID0gZnJhbWVEYXRhLT5t
YXJnaW5XaWR0aDsKLSAgICBtYXJnaW5IZWlnaHQgPSBmcmFtZURhdGEtPm1hcmdpbkhlaWdodDsK
LSAgICBmcmFtZSA9IGZyYW1lRGF0YS0+ZnJhbWUuZ2V0KCk7Ci0gICAgZnJhbWVMb2FkZXJDbGll
bnQgPSBmcmFtZURhdGEtPmZyYW1lTG9hZGVyQ2xpZW50OwotICAgIGZyYW1lTG9hZGVyQ2xpZW50
LT5zZXRGcmFtZShxZnJhbWUsIGZyYW1lKTsKLQotICAgIGZyYW1lLT5pbml0KCk7Ci19Ci0KIHZv
aWQgUVdlYkZyYW1lUHJpdmF0ZTo6c2V0UGFnZShRV2ViUGFnZSogbmV3UGFnZSkKIHsKICAgICBp
ZiAocGFnZSA9PSBuZXdQYWdlKQpAQCAtMTY2LDYgKzExOCw3IEBAIHZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6c2V0UGFnZShRV2ViUGFnZSogbmV3UGFnZSkKICAgICAgICAgcS0+c2V0UGFyZW50KG5l
d1BhZ2UpOwogCiAgICAgcGFnZSA9IG5ld1BhZ2U7CisgICAgcGFnZUFkYXB0ZXIgPSBuZXdQYWdl
LT5oYW5kbGUoKTsKICAgICBlbWl0IHEtPnBhZ2VDaGFuZ2VkKCk7CiB9CiAKQEAgLTM3NSw2ICsz
MjgsMTEgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjplbWl0VXJsQ2hhbmdlZCgpCiAgICAgZW1p
dCBxLT51cmxDaGFuZ2VkKHVybCk7CiB9CiAKK3ZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6ZGlkU3Rh
cnRQcm92aXNpb25hbExvYWQoKQoreworICAgIGVtaXQgcS0+cHJvdmlzaW9uYWxMb2FkKCk7Cit9
CisKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6X3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkKIHsKICNp
ZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQpAQCAtNDA5LDYgKzM2Nyw2NSBAQCB2b2lkIFFX
ZWJGcmFtZVByaXZhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0KCkKICAgICBlbWl0IHEtPmphdmFT
Y3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCk7CiB9CiAKK2Jvb2wgUVdlYkZyYW1lUHJpdmF0ZTo6
aGFuZGxlUHJvZ3Jlc3NGaW5pc2hlZChRUG9pbnQgKmxvY2FsUG9zKQoreworICAgIFFXaWRnZXQg
KnZpZXcgPSBxLT5wYWdlKCktPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcgfHwgIWxvY2FsUG9zKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmxvY2FsUG9zID0gdmlldy0+bWFwRnJvbUdsb2Jh
bChRQ3Vyc29yOjpwb3MoKSk7CisgICAgcmV0dXJuIHZpZXctPmhhc0ZvY3VzKCkgJiYgdmlldy0+
cmVjdCgpLmNvbnRhaW5zKCpsb2NhbFBvcyk7Cit9CisKK3ZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6
ZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKQoreworICAgIGVtaXQgcS0+aW5pdGlhbExheW91
dENvbXBsZXRlZCgpOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6OmVtaXRJY29uQ2hhbmdl
ZCgpCit7CisgICAgZW1pdCBxLT5pY29uQ2hhbmdlZCgpOworfQorCit2b2lkIFFXZWJGcmFtZVBy
aXZhdGU6OmVtaXRMb2FkU3RhcnRlZChib29sIG9yaWdpbmF0aW5nTG9hZCkKK3sKKyAgICBpZiAo
cGFnZSAmJiBvcmlnaW5hdGluZ0xvYWQpCisgICAgICAgIGVtaXQgcGFnZS0+bG9hZFN0YXJ0ZWQo
KTsKKyAgICBlbWl0IHEtPmxvYWRTdGFydGVkKCk7Cit9CisKK3ZvaWQgUVdlYkZyYW1lUHJpdmF0
ZTo6ZW1pdExvYWRGaW5pc2hlZChib29sIG9yaWdpbmF0aW5nTG9hZCwgYm9vbCBvaykKK3sKKyAg
ICBpZiAocGFnZSAmJiBvcmlnaW5hdGluZ0xvYWQpCisgICAgICAgIGVtaXQgcGFnZS0+bG9hZEZp
bmlzaGVkKG9rKTsKKyAgICBlbWl0IHEtPmxvYWRGaW5pc2hlZChvayk7Cit9CisKK1FXZWJGcmFt
ZUFkYXB0ZXIqIFFXZWJGcmFtZVByaXZhdGU6OmNyZWF0ZUNoaWxkRnJhbWUoUVdlYkZyYW1lRGF0
YSogZnJhbWVEYXRhKQoreworICAgIFFXZWJGcmFtZSogbmV3RnJhbWUgPSBuZXcgUVdlYkZyYW1l
KC8qcGFyZW50IGZyYW1lKi9xLCBmcmFtZURhdGEpOworICAgIHJldHVybiBuZXdGcmFtZS0+ZDsK
K30KKworUVdlYkZyYW1lICpRV2ViRnJhbWVQcml2YXRlOjphcGlIYW5kbGUoKQoreworICAgIHJl
dHVybiBxOworfQorCitRT2JqZWN0ICpRV2ViRnJhbWVQcml2YXRlOjpoYW5kbGUoKQoreworICAg
IHJldHVybiBxOworfQorCit2b2lkIFFXZWJGcmFtZVByaXZhdGU6OmNvbnRlbnRzU2l6ZURpZENo
YW5nZShjb25zdCBRU2l6ZSAmc2l6ZSkKK3sKKyAgICBlbWl0IHEtPmNvbnRlbnRzU2l6ZUNoYW5n
ZWQoc2l6ZSk7Cit9CisKK2ludCBRV2ViRnJhbWVQcml2YXRlOjpzY3JvbGxCYXJQb2xpY3koUXQ6
Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoaW50KSBxLT5z
Y3JvbGxCYXJQb2xpY3kob3JpZW50YXRpb24pOworfQorCiAvKiEKICAgICBcY2xhc3MgUVdlYkZy
YW1lCiAgICAgXHNpbmNlIDQuNApAQCAtNDcyLDI5ICs0ODksMjcgQEAgdm9pZCBRV2ViRnJhbWVQ
cml2YXRlOjpkaWRDbGVhcldpbmRvd09iamVjdCgpCiAgICAgXHZhbHVlIEFsbExheWVycyBJbmNs
dWRlcyBhbGwgdGhlIGFib3ZlIGxheWVycwogKi8KIAotUVdlYkZyYW1lOjpRV2ViRnJhbWUoUVdl
YlBhZ2UgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKQotICAgIDogUU9iamVjdChw
YXJlbnQpCitRV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50UGFnZSkKKyAgICA6
IFFPYmplY3QocGFyZW50UGFnZSkKICAgICAsIGQobmV3IFFXZWJGcmFtZVByaXZhdGUpCiB7Ci0g
ICAgZC0+cGFnZSA9IHBhcmVudDsKLSAgICBkLT5pbml0KHRoaXMsIGZyYW1lRGF0YSk7CisgICAg
ZC0+cGFnZSA9IHBhcmVudFBhZ2U7CisgICAgZC0+cSA9IHRoaXM7CisgICAgZC0+aW5pdCgvKnBh
Z2UgYWRhcHRlciovIHBhcmVudFBhZ2UtPmhhbmRsZSgpKTsKIAotICAgIGlmICghZnJhbWVEYXRh
LT51cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KGZyYW1lRGF0YS0+dXJsLCBmcmFtZURhdGEtPnJlZmVycmVyKTsKLSAgICAgICAgZC0+ZnJh
bWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIGZyYW1lRGF0YS0+bmFtZSwgZmFsc2UpOwotICAg
IH0KICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQogICAgIGNvbm5lY3QoJmQtPm1fb3Jp
ZW50YXRpb24sIFNJR05BTChyZWFkaW5nQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChfcV9vcmllbnRh
dGlvbkNoYW5nZWQoKSkpOwogICAgIGQtPm1fb3JpZW50YXRpb24uc3RhcnQoKTsKICNlbmRpZgog
fQogCi1RV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViRnJhbWUgKnBhcmVudCwgUVdlYkZyYW1lRGF0
YSAqZnJhbWVEYXRhKQorUVdlYkZyYW1lOjpRV2ViRnJhbWUoUVdlYkZyYW1lKiBwYXJlbnQsIFFX
ZWJGcmFtZURhdGEqIGZyYW1lRGF0YSkKICAgICA6IFFPYmplY3QocGFyZW50KQogICAgICwgZChu
ZXcgUVdlYkZyYW1lUHJpdmF0ZSkKIHsKICAgICBkLT5wYWdlID0gcGFyZW50LT5kLT5wYWdlOwot
ICAgIGQtPmluaXQodGhpcywgZnJhbWVEYXRhKTsKKyAgICBkLT5xID0gdGhpczsKKyAgICBkLT5p
bml0KHBhcmVudC0+ZC0+cGFnZUFkYXB0ZXIsIGZyYW1lRGF0YSk7CiAjaWYgRU5BQkxFKE9SSUVO
VEFUSU9OX0VWRU5UUykKICAgICBjb25uZWN0KCZkLT5tX29yaWVudGF0aW9uLCBTSUdOQUwocmVh
ZGluZ0NoYW5nZWQoKSksIHRoaXMsIFNMT1QoX3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkpKTsKICAg
ICBkLT5tX29yaWVudGF0aW9uLnN0YXJ0KCk7CkBAIC01MDMsOSArNTE4LDYgQEAgUVdlYkZyYW1l
OjpRV2ViRnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSkK
IAogUVdlYkZyYW1lOjp+UVdlYkZyYW1lKCkKIHsKLSAgICBpZiAoZC0+ZnJhbWUgJiYgZC0+ZnJh
bWUtPmxvYWRlcigpICYmIGQtPmZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpCi0gICAgICAgIHN0
YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50UXQqPihkLT5mcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpKS0+bV93ZWJGcmFtZSA9IDA7Ci0KICAgICBkZWxldGUgZDsKIH0KIApAQCAtNjc0LDIyICs2
ODYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb3JlRnJhbWVDbGVhcihXZWJDb3JlOjpGcmFt
ZSogZnJhbWUpCiAgICAgcmV0dXJuIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5pc0VtcHR5KCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUVVybCBlbnN1cmVBYnNvbHV0ZVVybChjb25zdCBRVXJsICZ1
cmwpCi17Ci0gICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICF1cmwuaXNSZWxhdGl2ZSgpKQotICAg
ICAgICByZXR1cm4gdXJsOwotCi0gICAgLy8gVGhpcyBjb250YWlucyB0aGUgVVJMIHdpdGggYWJz
b2x1dGUgcGF0aCBidXQgd2l0aG91dCAKLSAgICAvLyB0aGUgcXVlcnkgYW5kIHRoZSBmcmFnbWVu
dCBwYXJ0LgotICAgIFFVcmwgYmFzZVVybCA9IFFVcmw6OmZyb21Mb2NhbEZpbGUoUUZpbGVJbmZv
KHVybC50b0xvY2FsRmlsZSgpKS5hYnNvbHV0ZUZpbGVQYXRoKCkpOyAKLQotICAgIC8vIFRoZSBw
YXRoIGlzIHJlbW92ZWQgc28gdGhlIHF1ZXJ5IGFuZCB0aGUgZnJhZ21lbnQgcGFydHMgYXJlIHRo
ZXJlLgotICAgIFFTdHJpbmcgcGF0aFJlbW92ZWQgPSB1cmwudG9TdHJpbmcoUVVybDo6UmVtb3Zl
UGF0aCk7Ci0gICAgUVVybCB0b1Jlc29sdmUocGF0aFJlbW92ZWQpOwotICAgIAotICAgIHJldHVy
biBiYXNlVXJsLnJlc29sdmVkKHRvUmVzb2x2ZSk7Ci19Ci0KIC8qIQogICAgIFxwcm9wZXJ0eSBR
V2ViRnJhbWU6OnVybAogICAgIFxicmllZiB0aGUgdXJsIG9mIHRoZSBmcmFtZSBjdXJyZW50bHkg
dmlld2VkCkBAIC03MDQsNyArNzAwLDcgQEAgc3RhdGljIGlubGluZSBRVXJsIGVuc3VyZUFic29s
dXRlVXJsKGNvbnN0IFFVcmwgJnVybCkKIHZvaWQgUVdlYkZyYW1lOjpzZXRVcmwoY29uc3QgUVVy
bCAmdXJsKQogewogICAgIGNsZWFyQ29yZUZyYW1lKGQtPmZyYW1lKTsKLSAgICBjb25zdCBRVXJs
IGFic29sdXRlID0gZW5zdXJlQWJzb2x1dGVVcmwodXJsKTsKKyAgICBjb25zdCBRVXJsIGFic29s
dXRlID0gUVdlYkZyYW1lQWRhcHRlcjo6ZW5zdXJlQWJzb2x1dGVVcmwodXJsKTsKICAgICBkLT51
cmwgPSBhYnNvbHV0ZTsKICAgICBsb2FkKGFic29sdXRlKTsKIH0KQEAgLTc5OCw1OCArNzk0LDcg
QEAgdm9pZCBRV2ViRnJhbWU6OmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXEsCiAgICAg
ICAgICAgICAgICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRp
b24sCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnl0ZUFycmF5ICZib2R5KQogewotICAg
IGlmIChkLT5wYXJlbnRGcmFtZSgpKQotICAgICAgICBkLT5wYWdlLT5kLT5pbnNpZGVPcGVuQ2Fs
bCA9IHRydWU7Ci0KLSAgICBRVXJsIHVybCA9IGVuc3VyZUFic29sdXRlVXJsKHJlcS51cmwoKSk7
Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotCi0gICAgc3dp
dGNoIChvcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Okhl
YWRPcGVyYXRpb246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkhFQUQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
R2V0T3BlcmF0aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
UHV0T3BlcmF0aW9uOgotICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJQVVQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
UG9zdE9wZXJhdGlvbjoKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUE9TVCIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
OjpEZWxldGVPcGVyYXRpb246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkRF
TEVURSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyOjpDdXN0b21PcGVyYXRpb246Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRo
b2QocmVxLmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OkN1c3RvbVZlcmJBdHRyaWJ1dGUpLnRv
Qnl0ZUFycmF5KCkuY29uc3REYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpVbmtub3duT3BlcmF0aW9uOgotICAgICAgICAgICAg
Ly8gZWg/Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBRVmFyaWFudCBjYWNoZUxv
YWQgPSByZXEuYXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6Q2FjaGVMb2FkQ29udHJvbEF0dHJp
YnV0ZSk7Ci0gICAgaWYgKGNhY2hlTG9hZC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYm9vbCBvazsK
LSAgICAgICAgdWludCBjYWNoZUxvYWRWYWx1ZSA9IGNhY2hlTG9hZC50b1VJbnQoJm9rKTsKLSAg
ICAgICAgaWYgKG9rKQotICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZUxv
YWRDb250cm9sVG9DYWNoZVBvbGljeShjYWNoZUxvYWRWYWx1ZSkpOwotICAgIH0KLQotICAgIFFM
aXN0PFFCeXRlQXJyYXk+IGh0dHBIZWFkZXJzID0gcmVxLnJhd0hlYWRlckxpc3QoKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGh0dHBIZWFkZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFFCeXRlQXJyYXkgJmhlYWRlck5hbWUgPSBodHRwSGVhZGVycy5hdChpKTsKLSAgICAgICAg
cmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGQoUVN0cmluZzo6ZnJvbUxhdGluMShoZWFkZXJOYW1l
KSwgUVN0cmluZzo6ZnJvbUxhdGluMShyZXEucmF3SGVhZGVyKGhlYWRlck5hbWUpKSk7Ci0gICAg
fQotCi0gICAgaWYgKCFib2R5LmlzRW1wdHkoKSkKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9k
eShXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKGJvZHkuY29uc3REYXRhKCksIGJvZHkuc2l6ZSgp
KSk7Ci0KLSAgICBkLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgZmFsc2UpOwotCi0g
ICAgaWYgKGQtPnBhcmVudEZyYW1lKCkpCi0gICAgICAgIGQtPnBhZ2UtPmQtPmluc2lkZU9wZW5D
YWxsID0gZmFsc2U7CisgICAgZC0+bG9hZChyZXEsIG9wZXJhdGlvbiwgYm9keSk7CiB9CiAKIC8q
IQpAQCAtMTA4OCwxMCArMTAzMyw3IEBAIHZvaWQgUVdlYkZyYW1lOjpzY3JvbGwoaW50IGR4LCBp
bnQgZHkpCiAKIFFQb2ludCBRV2ViRnJhbWU6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAg
ICBpZiAoIWQtPmZyYW1lLT52aWV3KCkpCi0gICAgICAgIHJldHVybiBRUG9pbnQoMCwgMCk7Ci0K
LSAgICBJbnRTaXplIG9mcyA9IGQtPmZyYW1lLT52aWV3KCktPnNjcm9sbE9mZnNldCgpOworICAg
IEludFNpemUgb2ZzID0gZC0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICByZXR1cm4gUVBvaW50KG9m
cy53aWR0aCgpLCBvZnMuaGVpZ2h0KCkpOwogfQogCkBAIC0xMjQ4LDkgKzExOTAsNyBAQCBRUG9p
bnQgUVdlYkZyYW1lOjpwb3MoKSBjb25zdAogKi8KIFFSZWN0IFFXZWJGcmFtZTo6Z2VvbWV0cnko
KSBjb25zdAogewotICAgIGlmICghZC0+ZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIFFS
ZWN0KCk7Ci0gICAgcmV0dXJuIGQtPmZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgpOworICAgIHJl
dHVybiBkLT5mcmFtZVJlY3QoKTsKIH0KIAogLyohCkBAIC0xNDc5LDYgKzE0MTksMTEgQEAgUVdl
YkZyYW1lKiBRV2ViRnJhbWVQcml2YXRlOjpraXQoY29uc3QgV2ViQ29yZTo6RnJhbWUqIGNvcmVG
cmFtZSkKICAgICByZXR1cm4gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KGNvcmVGcmFtZS0+bG9h
ZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm9yaWdpbmF0aW5nT2JqZWN0KCkpOwogfQogCitR
V2ViRnJhbWUgKlFXZWJGcmFtZVByaXZhdGU6OmtpdChjb25zdCBRV2ViRnJhbWVBZGFwdGVyKiBm
cmFtZUFkYXB0ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFFXZWJGcmFtZVBy
aXZhdGUqPihmcmFtZUFkYXB0ZXIpLT5xOworfQorCiAKIC8qIQogICAgIFxmbiB2b2lkIFFXZWJG
cmFtZTo6amF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKQpAQCAtMTg1OSw0ICsxODA0LDEy
IEBAIFFXZWJGcmFtZSAqUVdlYkhpdFRlc3RSZXN1bHQ6OmZyYW1lKCkgY29uc3QKICAgICByZXR1
cm4gZC0+ZnJhbWUuZGF0YSgpOwogfQogCisvKiEKKyAqIFxpbnRlcm5hbAorICovCitRV2ViRnJh
bWVBZGFwdGVyICpRV2ViRnJhbWU6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQ7Cit9
CisKICNpbmNsdWRlICJtb2NfcXdlYmZyYW1lLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgK
aW5kZXggY2E5NjY2MWUzNWNhYzUyNjZkNTVmMGY0MTg3M2M1NjY3MGRjMzk5MS4uZmUwMGQ4MWY1
YTA0NTJhZDI0ODE4OTk2NjM5NDE5OGRjY2Q3ZmJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmgKQEAgLTQxLDggKzQxLDEwIEBAIGNsYXNzIFFQcmludGVyOwogUVRfRU5EX05BTUVTUEFDRQog
CiBjbGFzcyBRV2ViTmV0d29ya1JlcXVlc3Q7CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyOwogY2xh
c3MgUVdlYkZyYW1lUHJpdmF0ZTsKIGNsYXNzIFFXZWJQYWdlOworY2xhc3MgUVdlYlBhZ2VBZGFw
dGVyOwogY2xhc3MgUVdlYkhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBRV2ViSGlzdG9yeUl0ZW07CiBj
bGFzcyBRV2ViU2VjdXJpdHlPcmlnaW47CkBAIC0xMTUsOCArMTE3LDggQEAgY2xhc3MgUVdFQktJ
VF9FWFBPUlQgUVdlYkZyYW1lIDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFkoUVBv
aW50IHNjcm9sbFBvc2l0aW9uIFJFQUQgc2Nyb2xsUG9zaXRpb24gV1JJVEUgc2V0U2Nyb2xsUG9z
aXRpb24pCiAgICAgUV9QUk9QRVJUWShib29sIGZvY3VzIFJFQUQgaGFzRm9jdXMpCiBwcml2YXRl
OgotICAgIFFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURh
dGEpOwotICAgIFFXZWJGcmFtZShRV2ViRnJhbWUgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJh
bWVEYXRhKTsKKyAgICBRV2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudFBhZ2UpOworICAgIFFXZWJG
cmFtZShRV2ViRnJhbWUqIHBhcmVudCwgUVdlYkZyYW1lRGF0YSopOwogICAgIH5RV2ViRnJhbWUo
KTsKIAogcHVibGljOgpAQCAtMjAwLDYgKzIwMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgZXZlbnQoUUV2ZW50ICopOwogCiAgICAgUVdlYlNlY3VyaXR5T3JpZ2luIHNlY3VyaXR5T3Jp
Z2luKCkgY29uc3Q7CisgICAgUVdlYkZyYW1lQWRhcHRlciogaGFuZGxlKCkgY29uc3Q7CiAKIHB1
YmxpYyBRX1NMT1RTOgogICAgIFFWYXJpYW50IGV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3Ry
aW5nJiBzY3JpcHRTb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lX3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggZDY3
NzlmMmJjNTk5MzEzOWJjN2QwZmVjNGI2NGUxNmViZjUwOWQzNi4uZGJkY2JjODVhNDU4YjhlOTk0
NzlhNjA5NjhhNDhhODhjOGJlNzAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCkBA
IC0yMSwyNCArMjEsMjUgQEAKICNpZm5kZWYgUVdFQkZSQU1FX1BfSAogI2RlZmluZSBRV0VCRlJB
TUVfUF9ICiAKKyNpbmNsdWRlICJRV2ViRnJhbWVBZGFwdGVyLmgiCisKICNpbmNsdWRlICJxd2Vi
ZnJhbWUuaCIKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQogI2luY2x1
ZGUgInFvcmllbnRhdGlvbnNlbnNvci5oIgogI2VuZGlmIC8vIEVOQUJMRShPUklFTlRBVElPTl9F
VkVOVFMpLgogI2luY2x1ZGUgInF3ZWJlbGVtZW50LmgiCi0jaW5jbHVkZSAid3RmL1JlZlB0ci5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgogI2VuZGlmCisjaW5j
bHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTAsNDIgKzUxLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIH0KIGNsYXNzIFFXZWJQYWdlOwog
Ci1jbGFzcyBRV2ViRnJhbWVEYXRhIHsKLXB1YmxpYzoKLSAgICBRV2ViRnJhbWVEYXRhKFdlYkNv
cmU6OlBhZ2UqLCBXZWJDb3JlOjpGcmFtZSogcGFyZW50RnJhbWUgPSAwLAotICAgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiA9IDAsCi0gICAgICAgICAgICAg
ICAgICBjb25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lID0gV1RGOjpTdHJpbmcoKSk7Ci0KLSAg
ICBXZWJDb3JlOjpLVVJMIHVybDsKLSAgICBXVEY6OlN0cmluZyBuYW1lOwotICAgIFdlYkNvcmU6
OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50OwotICAgIFdlYkNvcmU6OlBhZ2Uq
IHBhZ2U7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBmcmFtZTsKLSAgICBXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0KiBmcmFtZUxvYWRlckNsaWVudDsKLQotICAgIFdURjo6U3RyaW5n
IHJlZmVycmVyOwotICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOwotICAgIGludCBtYXJnaW5XaWR0
aDsKLSAgICBpbnQgbWFyZ2luSGVpZ2h0OwotfTsKLQotY2xhc3MgUVdlYkZyYW1lUHJpdmF0ZSB7
CitjbGFzcyBRV2ViRnJhbWVQcml2YXRlIDogcHVibGljIFFXZWJGcmFtZUFkYXB0ZXIgewogcHVi
bGljOgogICAgIFFXZWJGcmFtZVByaXZhdGUoKQogICAgICAgICA6IHEoMCkKICAgICAgICAgLCBo
b3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5KFF0OjpTY3JvbGxCYXJBc05lZWRlZCkKICAgICAgICAg
LCB2ZXJ0aWNhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpCi0gICAgICAg
ICwgZnJhbWVMb2FkZXJDbGllbnQoMCkKLSAgICAgICAgLCBmcmFtZSgwKQogICAgICAgICAsIHBh
Z2UoMCkKLSAgICAgICAgLCBhbGxvd3NTY3JvbGxpbmcodHJ1ZSkKLSAgICAgICAgLCBtYXJnaW5X
aWR0aCgtMSkKLSAgICAgICAgLCBtYXJnaW5IZWlnaHQoLTEpCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogICAgICAgICAsIHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKICNlbmRp
ZgogICAgICAgICB7fQotICAgIHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1l
RGF0YSogZnJhbWVEYXRhKTsKICAgICB2b2lkIHNldFBhZ2UoUVdlYlBhZ2UqKTsKIAogICAgIGlu
bGluZSBRV2ViRnJhbWUgKnBhcmVudEZyYW1lKCkgeyByZXR1cm4gcW9iamVjdF9jYXN0PFFXZWJG
cmFtZSo+KHEtPnBhcmVudCgpKTsgfQpAQCAtOTUsNiArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgV2ViQ29yZTo6RnJhbWUqIGNvcmUoY29uc3QgUVdlYkZyYW1lKik7CiAgICAgc3RhdGlj
IFFXZWJGcmFtZSoga2l0KGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CisgICAgc3RhdGljIFFXZWJG
cmFtZSoga2l0KGNvbnN0IFFXZWJGcmFtZUFkYXB0ZXIqKTsKIAogICAgIHZvaWQgcmVuZGVyUmVs
YXRpdmVDb29yZHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgUUZsYWdzPFFXZWJGcmFtZTo6
UmVuZGVyTGF5ZXI+LCBjb25zdCBRUmVnaW9uJiBjbGlwKTsKICNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkKQEAgLTEwNSwyMiArODIsMjkgQEAgcHVibGljOgogICAgIHZvaWQgcmVuZGVyQ29t
cG9zaXRlZExheWVycyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwKTsKICNlbmRpZgogICAgIHZvaWQgcmVuZGVyRnJhbWVFeHRyYXMoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0KiwgUUZsYWdzPFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXI+LCBjb25z
dCBRUmVnaW9uJiBjbGlwKTsKLSAgICB2b2lkIGVtaXRVcmxDaGFuZ2VkKCk7CiAgICAgdm9pZCBf
cV9vcmllbnRhdGlvbkNoYW5nZWQoKTsKIAotICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3Qo
KTsKKworICAgIC8vIEFkYXB0ZXIgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIFFXZWJGcmFt
ZSogYXBpSGFuZGxlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRT2JqZWN0KiBoYW5kbGUoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplRGlkQ2hhbmdlKGNvbnN0IFFT
aXplICYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbEJhclBvbGljeShRdDo6T3Jp
ZW50YXRpb24pIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbWl0VXJsQ2hhbmdl
ZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdCgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVQcm9ncmVzc0ZpbmlzaGVkKFFQb2ludCopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbWl0SW5pdGlhbExheW91dENvbXBsZXRlZCgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbWl0SWNvbkNoYW5nZWQoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW1pdExvYWRTdGFydGVkKGJvb2wgb3JpZ2luYXRpbmdMb2FkKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdExvYWRGaW5pc2hlZChib29sIG9yaWdpbmF0aW5n
TG9hZCwgYm9vbCBvaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRV2ViRnJhbWVBZGFwdGVyKiBj
cmVhdGVDaGlsZEZyYW1lKFFXZWJGcmFtZURhdGEqKSBPVkVSUklERTsKIAogICAgIFFXZWJGcmFt
ZSAqcTsKICAgICBRdDo6U2Nyb2xsQmFyUG9saWN5IGhvcml6b250YWxTY3JvbGxCYXJQb2xpY3k7
CiAgICAgUXQ6OlNjcm9sbEJhclBvbGljeSB2ZXJ0aWNhbFNjcm9sbEJhclBvbGljeTsKLSAgICBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0ICpmcmFtZUxvYWRlckNsaWVudDsKLSAgICBXZWJD
b3JlOjpGcmFtZSAqZnJhbWU7CiAgICAgUVdlYlBhZ2UgKnBhZ2U7Ci0gICAgV2ViQ29yZTo6S1VS
TCB1cmw7CiAKLSAgICBib29sIGFsbG93c1Njcm9sbGluZzsKLSAgICBpbnQgbWFyZ2luV2lkdGg7
Ci0gICAgaW50IG1hcmdpbkhlaWdodDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiByb290VGV4dHVyZU1hcHBlckxheWVy
OwogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCmluZGV4IGY3ODQ5NjY2ZTBmY2JkMThjY2YyYWVi
ZDFlMjczYzcyYjc5OTI3NDAuLmE5NDViNTkyYmIyOTBlMTg2YzU2YjAzOWMwZGJjOGU2NTUyYmQ5
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKQEAgLTIwLDE1ICsyMCwxNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5LmgiCiAjaW5jbHVk
ZSAicXdlYmhpc3RvcnlfcC5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAKICNpbmNsdWRl
ICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJ
Y29uRGF0YWJhc2VCYXNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdl
R3JvdXAuaCIKKyNpbmNsdWRlIDxRV2ViUGFnZUFkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogI2luY2x1ZGUgPFFTaGFyZWREYXRhPgpAQCAtNTUyLDkgKzU1Myw5
IEBAIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRhU3RyZWFtJiBzb3VyY2UsIFFXZWJIaXN0
b3J5JiBoaXN0b3J5KQogICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLVFXZWJQYWdlUHJpdmF0ZSog
UVdlYkhpc3RvcnlQcml2YXRlOjpwYWdlKCkKK1FXZWJQYWdlQWRhcHRlciogUVdlYkhpc3RvcnlQ
cml2YXRlOjpwYWdlKCkKIHsKLSAgICByZXR1cm4gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihsc3QpLT5wYWdlKCktPm1haW5G
cmFtZSgpKS0+cGFnZSgpLT5oYW5kbGUoKTsKKyAgICByZXR1cm4gUVdlYlBhZ2VBZGFwdGVyOjpr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KGxzdCktPnBhZ2Uo
KSk7CiB9CiAKIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBRV2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjpj
b3JlKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSogcSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJoaXN0b3J5X3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5
X3AuaAppbmRleCBhYWVlMzg2MzI5YzA1ZmM1N2MxNzJkYjZlNjgzNjk2MjFiMmFmYjMxLi4xNzYz
NGViYzA4OGRlOGU5NGI1NjQ4MTVjY2Q0ODljMDlmMDYzMjc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmhpc3RvcnlfcC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8UXRDb3JlL3FnbG9i
YWwuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KIAotY2xhc3MgUVdlYlBhZ2VQ
cml2YXRlOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOwogCiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBR
V2ViSGlzdG9yeUl0ZW1Qcml2YXRlIDogcHVibGljIFFTaGFyZWREYXRhIHsKIHB1YmxpYzoKQEAg
LTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBsc3QtPmRlcmVmKCk7CiAgICAgfQogCi0g
ICAgUVdlYlBhZ2VQcml2YXRlKiBwYWdlKCk7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlKCk7
CiAKICAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKiBsc3Q7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcAppbmRleCAyZmJiYWIyNDlhMDQxYzM2YWNmY2QyYzhl
YTc2YzgxMjY4ZjZmMjVkLi41NTA4OWUxYTFmY2VlOGNkZTk0MzliZDk1MmNjYmM1YjMzMTZlZjkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcApAQCAtMTg0LDEyICsxODQs
MTIgQEAgdm9pZCBRV2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KFFDbG9zZUV2ZW50KiBldmVudCkK
IH0KIAogLyohIFxpbnRlcm5hbCAqLwotdm9pZCBRV2ViSW5zcGVjdG9yUHJpdmF0ZTo6c2V0RnJv
bnRlbmQoUVdpZGdldCogbmV3RnJvbnRlbmQpCit2b2lkIFFXZWJJbnNwZWN0b3JQcml2YXRlOjpz
ZXRGcm9udGVuZChRT2JqZWN0KiBuZXdGcm9udGVuZCkKIHsKICAgICBpZiAoZnJvbnRlbmQpCiAg
ICAgICAgIGZyb250ZW5kLT5zZXRQYXJlbnQoMCk7CiAKLSAgICBmcm9udGVuZCA9IG5ld0Zyb250
ZW5kOworICAgIGZyb250ZW5kID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPihuZXdGcm9udGVuZCk7
CiAKICAgICBpZiAoZnJvbnRlbmQpIHsKICAgICAgICAgZnJvbnRlbmQtPnNldFBhcmVudChxKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3JfcC5oIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvcl9wLmgKaW5kZXggNGQzMjdjYzVhOTExZjdl
NTIyOTgwNGYxZDhlMjc5YTQ1NDhlZDc1Ny4uOTA4ZGU4NGVkYzFkOWFiN2EwNzExOGRkZGI1OTJm
NGFlMWJmMjZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rv
cl9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvcl9wLmgKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgICwgZnJvbnRlbmQoMCkKICAgICB7fQogCi0gICAgdm9p
ZCBzZXRGcm9udGVuZChRV2lkZ2V0KiBuZXdGcm9udGVuZCk7CisgICAgdm9pZCBzZXRGcm9udGVu
ZChRT2JqZWN0KiBuZXdGcm9udGVuZCk7CiAgICAgdm9pZCBhZGp1c3RGcm9udGVuZFNpemUoY29u
c3QgUVNpemUmIHNpemUpOwogCiAgICAgUVdlYkluc3BlY3RvciogcTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcAppbmRleCAwMjM4M2FjNjc0MTU4NDkwNGQ4MmNhMGQ3ODJlYzk2NzI4OWRlODg4
Li42OGEzZmYxZjNlMjVlOTQwMjFiZWMwYmFjZjZiN2IyYmM0OTA2NjAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwCkBAIC0yMiwxOCArMjIsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAKLSNpbmNsdWRlICJxd2Vidmlldy5oIgotI2luY2x1ZGUg
InF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxd2ViZnJh
bWVfcC5oIgotI2luY2x1ZGUgInF3ZWJoaXN0b3J5LmgiCi0jaW5jbHVkZSAicXdlYmhpc3Rvcnlf
cC5oIgotI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3IuaCIKLSNpbmNsdWRlICJxd2ViaW5zcGVjdG9y
X3AuaCIKLSNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIKLSNpbmNsdWRlICJxd2Via2l0cGxhdGZv
cm1wbHVnaW4uaCIKLSNpbmNsdWRlICJxd2Via2l0dmVyc2lvbi5oIgotCiAjaW5jbHVkZSAiQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5j
bHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKQEAgLTQ1LDYgKzMzLDkgQEAKICNpbmNs
dWRlICJDb250ZXh0TWVudS5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50UXQuaCIKICNp
bmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKKyNpZiBVU0UoUVRfTVVMVElNRURJQSkK
KyNpbmNsdWRlICJEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlci5oIgorI2VuZGlmCiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICNpbmNsdWRlICJEZXZpY2VNb3Rpb25DbGllbnRR
dC5oIgogI2luY2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIgpAQCAtNjIsNyAr
NTMsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC03OCw4ICs2OCw5IEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0j
aW5jbHVkZSAiSW5pdFdlYkNvcmVRdC5oIgorI2luY2x1ZGUgIkluaXRXZWJLaXRRdC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudFF0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50V2Vi
UGFnZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JTZXJ2ZXJRdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTg4LDIwICs3OSwyMiBAQAog
I2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4
dC5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0jaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAiUUdyYXBoaWNz
V2lkZ2V0UGx1Z2luSW1wbC5oIgorI2luY2x1ZGUgIlFXZWJVbmRvQ29tbWFuZC5oIgorI2luY2x1
ZGUgIlFXaWRnZXRQbHVnaW5JbXBsLmgiCisjaW5jbHVkZSAiUXRGYWxsYmFja1dlYlBvcHVwLmgi
CiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250
cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgpAQCAtMTE0LDE2ICsxMDcsMzAgQEAK
ICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjZW5kaWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlVuZG9TdGVwUXQuaCIKICNpbmNsdWRlICJVc2Vy
QWdlbnRRdC5oIgogI2luY2x1ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldl
YktpdFZlcnNpb24uaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgogCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYmZy
YW1lX3AuaCIKKyNpbmNsdWRlICJxd2ViaGlzdG9yeS5oIgorI2luY2x1ZGUgInF3ZWJoaXN0b3J5
X3AuaCIKKyNpbmNsdWRlICJxd2ViaW5zcGVjdG9yLmgiCisjaW5jbHVkZSAicXdlYmluc3BlY3Rv
cl9wLmgiCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisjaW5jbHVkZSAicXdl
YmtpdHZlcnNpb24uaCIKKyNpbmNsdWRlICJxd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXdlYnNl
dHRpbmdzLmgiCisjaW5jbHVkZSAicXdlYnZpZXcuaCIKKwogI2luY2x1ZGUgPFFBY3Rpb24+CiAj
aW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFCYXNpY1RpbWVyPgogI2luY2x1ZGUg
PFFCaXRBcnJheT4KKyNpbmNsdWRlIDxRQ2xpcGJvYXJkPgogI2luY2x1ZGUgPFFDb2xvckRpYWxv
Zz4KICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+CkBAIC0xMzcs
MjQgKzE0NCwyNSBAQAogI2luY2x1ZGUgPFFMYWJlbD4KICNpbmNsdWRlIDxRTWVudT4KICNpbmNs
dWRlIDxRTWVzc2FnZUJveD4KKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CiAjaW5j
bHVkZSA8UU5ldHdvcmtQcm94eT4KLSNpbmNsdWRlIDxRVW5kb1N0YWNrPgotI2luY2x1ZGUgPFFV
cmw+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgogI2luY2x1ZGUgPFFQYWludGVyPgotI2lu
Y2x1ZGUgPFFDbGlwYm9hcmQ+CiAjaW5jbHVkZSA8UVNzbFNvY2tldD4KICNpbmNsdWRlIDxRU3R5
bGU+CiAjaW5jbHVkZSA8UVN5c0luZm8+CisjaWYgVVNFKFFUX01PQklMSVRZX1NZU1RFTUlORk8p
CisjaW5jbHVkZSA8cXN5c3RlbWluZm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPFFTeXN0ZW1UcmF5
SWNvbj4KICNpbmNsdWRlIDxRVGV4dENoYXJGb3JtYXQ+CisjaW5jbHVkZSA8UVRvb2xUaXA+CiAj
aW5jbHVkZSA8UVRvdWNoRXZlbnQ+Ci0jaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgot
I2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRVW5kb1N0YWNrPgorI2luY2x1
ZGUgPFFVcmw+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRlIDxRWDExSW5mbz4KICNl
bmRpZgotI2lmIFVTRShRVF9NT0JJTElUWV9TWVNURU1JTkZPKQotI2luY2x1ZGUgPHFzeXN0ZW1p
bmZvLmg+Ci0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE2Myw4ICsx
NzEsNiBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGV4dGVybiBRX0dVSV9FWFBPUlQgaW50IHF0X2Rl
ZmF1bHREcGkoKTsKIFFUX0VORF9OQU1FU1BBQ0UKIAotYm9vbCBRV2ViUGFnZVByaXZhdGU6OmRy
dFJ1biA9IGZhbHNlOwotCiAvLyBMb29rdXAgdGFibGUgbWFwcGluZyBRV2ViUGFnZTo6V2ViQWN0
aW9ucyB0byB0aGUgYXNzb2NpYXRlZCBFZGl0b3IgY29tbWFuZHMKIHN0YXRpYyBjb25zdCBjaGFy
KiBlZGl0b3JDb21tYW5kV2ViQWN0aW9uc1tdID0KIHsKQEAgLTMwMCw0MCArMzA2LDMyIEBAIHN0
YXRpYyBpbmxpbmUgUXQ6OkRyb3BBY3Rpb24gZHJhZ09wVG9Ecm9wQWN0aW9uKHVuc2lnbmVkIGFj
dGlvbnMpCiAKIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkK
ICAgICA6IHEocXEpCi0gICAgLCBwYWdlKDApCiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwogICAg
ICwgdW5kb1N0YWNrKDApCiAjZW5kaWYKLSAgICAsIGluc2lkZU9wZW5DYWxsKGZhbHNlKQogICAg
ICwgbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX2J5dGVzUmVjZWl2ZWQoKQogICAgICwgY2xpY2tD
YXVzZWRGb2N1cyhmYWxzZSkKLSAgICAsIG5ldHdvcmtNYW5hZ2VyKDApCi0gICAgLCBmb3J3YXJk
VW5zdXBwb3J0ZWRDb250ZW50KGZhbHNlKQotICAgICwgc21hcnRJbnNlcnREZWxldGVFbmFibGVk
KHRydWUpCi0gICAgLCBzZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZhbHNlKQogICAg
ICwgbGlua1BvbGljeShRV2ViUGFnZTo6RG9udERlbGVnYXRlTGlua3MpCi0gICAgLCB2aWV3cG9y
dFNpemUoUVNpemUoMCwgMCkpCi0gICAgLCBzZXR0aW5ncygwKQorICAgICwgbV92aWV3cG9ydFNp
emUoUVNpemUoMCwgMCkpCiAgICAgLCB1c2VGaXhlZExheW91dChmYWxzZSkKLSAgICAsIHBsdWdp
bkZhY3RvcnkoMCkKICAgICAsIGluc3BlY3RvckZyb250ZW5kKDApCiAgICAgLCBpbnNwZWN0b3Io
MCkKICAgICAsIGluc3BlY3RvcklzSW50ZXJuYWxPbmx5KGZhbHNlKQogICAgICwgbV9sYXN0RHJv
cEFjdGlvbihRdDo6SWdub3JlQWN0aW9uKQogewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikgfHwg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSAgICBib29sIHVzZU1vY2sgPSBRV2ViUGFnZVBy
aXZhdGU6OmRydFJ1bjsKKyAgICBib29sIHVzZU1vY2sgPSBRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1
bjsKICNlbmRpZgogCi0gICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCgpOworICAgIFdl
YktpdDo6aW5pdGlhbGl6ZVdlYktpdFdpZGdldHMoKTsKIAogICAgIFBhZ2U6OlBhZ2VDbGllbnRz
IHBhZ2VDbGllbnRzOwotICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IG5ldyBDaHJvbWVD
bGllbnRRdChxKTsKKyAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQgPSBuZXcgQ2hyb21lQ2xp
ZW50UXQodGhpcyk7CiAgICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGllbnQgPSBuZXcgQ29u
dGV4dE1lbnVDbGllbnRRdCgpOwotICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IG5ldyBF
ZGl0b3JDbGllbnRRdChxKTsKLSAgICBwYWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gbmV3IERyYWdD
bGllbnRRdChxKTsKLSAgICBwYWdlQ2xpZW50cy5pbnNwZWN0b3JDbGllbnQgPSBuZXcgSW5zcGVj
dG9yQ2xpZW50UXQocSk7CisgICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gbmV3IEVkaXRv
ckNsaWVudFF0KHRoaXMpOworICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcgRHJhZ0Ns
aWVudFF0KHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCk7CisgICAgcGFnZUNsaWVudHMuaW5zcGVj
dG9yQ2xpZW50ID0gbmV3IEluc3BlY3RvckNsaWVudFF0KHRoaXMpOwogICAgIHBhZ2UgPSBuZXcg
UGFnZShwYWdlQ2xpZW50cyk7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAgIGlmICh1c2VN
b2NrKSB7CkBAIC0zNDIsNyArMzQwLDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZh
dGUoUVdlYlBhZ2UgKnFxKQogICAgICAgICBXZWJDb3JlOjpwcm92aWRlR2VvbG9jYXRpb25Ubyhw
YWdlLCBtb2NrKTsKICAgICAgICAgbW9jay0+c2V0Q29udHJvbGxlcihXZWJDb3JlOjpHZW9sb2Nh
dGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSkpOwogICAgIH0gZWxzZQotICAgICAgICBXZWJDb3Jl
Ojpwcm92aWRlR2VvbG9jYXRpb25UbyhwYWdlLCBuZXcgR2VvbG9jYXRpb25DbGllbnRRdChxKSk7
CisgICAgICAgIFdlYkNvcmU6OnByb3ZpZGVHZW9sb2NhdGlvblRvKHBhZ2UsIG5ldyBHZW9sb2Nh
dGlvbkNsaWVudFF0KHRoaXMpKTsKICNlbmRpZgogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJ
T04pCiAgICAgaWYgKHVzZU1vY2spCkBAIC0zNTEsOSArMzQ5LDYgQEAgUVdlYlBhZ2VQcml2YXRl
OjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogICAgICAgICBXZWJDb3JlOjpwcm92aWRl
RGV2aWNlT3JpZW50YXRpb25UbyhwYWdlLCBuZXcgRGV2aWNlT3JpZW50YXRpb25DbGllbnRRdCk7
CiAgICAgV2ViQ29yZTo6cHJvdmlkZURldmljZU1vdGlvblRvKHBhZ2UsIG5ldyBEZXZpY2VNb3Rp
b25DbGllbnRRdCk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxF
KExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIFdlYkNvcmU6OnByb3ZpZGVOb3RpZmljYXRpb24o
cGFnZSwgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRl
cigpKTsKLSNlbmRpZgogCiAgICAgLy8gQnkgZGVmYXVsdCBlYWNoIHBhZ2UgaXMgcHV0IGludG8g
dGhlaXIgb3duIHVuaXF1ZSBwYWdlIGdyb3VwLCB3aGljaCBhZmZlY3RzIHBvcHVwIHdpbmRvd3MK
ICAgICAvLyBhbmQgdmlzaXRlZCBsaW5rcy4gUGFnZSBncm91cHMgKHBlciBwcm9jZXNzIG9ubHkp
IGlzIGEgZmVhdHVyZSBtYWtpbmcgaXQgcG9zc2libGUgdG8gdXNlCkBAIC0zNjQsNyArMzU5LDcg
QEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogCiAgICAg
cGFnZS0+YWRkTGF5b3V0TWlsZXN0b25lcyhEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQp
OwogCi0gICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdzKHBhZ2UtPnNldHRpbmdzKCkpOwor
ICAgIFFXZWJQYWdlQWRhcHRlcjo6aW5pdChwYWdlKTsKIAogICAgIGhpc3RvcnkuZCA9IG5ldyBR
V2ViSGlzdG9yeVByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1w
bCo+KHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKSk7CiAgICAgbWVtc2V0KGFjdGlvbnMsIDAsIHNp
emVvZihhY3Rpb25zKSk7CkBAIC0zNzIsOCArMzY3LDEzIEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdl
YlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkKICAgICBQYWdlR3JvdXA6OnNldFNob3VsZFRyYWNr
VmlzaXRlZExpbmtzKHRydWUpOwogICAgIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBF
TkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5hZGRDbGllbnQoKTsKLSNlbmRpZgorICAg
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KiBwcmVzZW50ZXIgPSBOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CisgICAgcHJlc2VudGVy
LT5hZGRDbGllbnQoKTsKKyNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04KKyAgICBpZiAoIXBy
ZXNlbnRlci0+aGFzU3lzdGVtVHJheUljb24oKSkKKyAgICAgICAgcHJlc2VudGVyLT5zZXRTeXN0
ZW1UcmF5SWNvbihuZXcgUVN5c3RlbVRyYXlJY29uKTsKKyNlbmRpZiAvLyBRVF9OT19TWVNURU1U
UkFZSUNPTgorI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZ
X05PVElGSUNBVElPTlMpCiB9CiAKIFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgp
CkBAIC0zODQsOCArMzg0LDYgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkK
ICNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCiAgICAgZGVsZXRlIHVuZG9TdGFjazsKICNlbmRpZgot
ICAgIGRlbGV0ZSBzZXR0aW5nczsKLSAgICBkZWxldGUgcGFnZTsKICAgICAKICAgICBpZiAoaW5z
cGVjdG9yKSB7CiAgICAgICAgIC8vIElmIHRoZSBpbnNwZWN0b3IgaXMgb3VycywgZGVsZXRlIGl0
LCBvdGhlcndpc2UganVzdCBkZXRhY2ggZnJvbSBpdC4KQEAgLTM5NCw0MSArMzkyLDIyMCBAQCBR
V2ViUGFnZVByaXZhdGU6On5RV2ViUGFnZVByaXZhdGUoKQogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBpbnNwZWN0b3ItPnNldFBhZ2UoMCk7CiAgICAgfQorICAgIC8vIEV4cGxpY2l0bHkgZGVz
dHJ1Y3QgdGhlIFdlYkNvcmUgcGFnZSBhdCB0aGlzIHBvaW50IHdoZW4gdGhlCisgICAgLy8gUVdl
YlBhZ2VQcml2YXRlIC8gUVdlYlBhZ2VBZGFwYXRlciB2dGFibGVzIGFyZSBzdGlsbCBpbnRhY3Qs
CisgICAgLy8gaW4gb3JkZXIgZm9yIHZhcmlvdXMgZGVzdHJ1Y3Rpb24gY2FsbGJhY2tzIG91dCBv
ZiBXZWJDb3JlIHRvCisgICAgLy8gd29yay4KKyAgICBkZWxldGVQYWdlKCk7Cit9CiAKLSNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAg
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+
cmVtb3ZlQ2xpZW50KCk7CitXZWJDb3JlOjpQYWdlKiBRV2ViUGFnZVByaXZhdGU6OmNvcmUoY29u
c3QgUVdlYlBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIHBhZ2UtPmQtPnBhZ2U7Cit9CisKK3Zv
aWQgUVdlYlBhZ2VQcml2YXRlOjpzaG93KCkKK3sKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICB2aWV3LT53aW5kb3coKS0+c2hvdygpOworfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6c2V0Rm9jdXMoKQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAg
IHZpZXctPnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjp1bmZvY3VzKCkK
K3sKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3LT5jbGVhckZvY3Vz
KCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpzZXRXaW5kb3dSZWN0KGNvbnN0IFFSZWN0
ICZyZWN0KQoreworICAgIGVtaXQgcS0+Z2VvbWV0cnlDaGFuZ2VSZXF1ZXN0ZWQocmVjdCk7Cit9
CisKK1FTaXplIFFXZWJQYWdlUHJpdmF0ZTo6dmlld3BvcnRTaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcS0+dmlld3BvcnRTaXplKCk7Cit9CisKK1FXZWJQYWdlQWRhcHRlciAqUVdlYlBhZ2VQ
cml2YXRlOjpjcmVhdGVXaW5kb3coYm9vbCBkaWFsb2cpCit7CisgICAgUVdlYlBhZ2UgKm5ld1Bh
Z2UgPSBxLT5jcmVhdGVXaW5kb3coZGlhbG9nID8gUVdlYlBhZ2U6OldlYk1vZGFsRGlhbG9nIDog
UVdlYlBhZ2U6OldlYkJyb3dzZXJXaW5kb3cpOworICAgIGlmICghbmV3UGFnZSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBtYWluIGZyYW1lIGV4aXN0cywgYXMgV2Vi
Q29yZSBleHBlY3RzIGl0IHdoZW4gcmV0dXJuaW5nIGZyb20gdGhpcyBDaHJvbWVDbGllbnQ6OmNy
ZWF0ZVdpbmRvdygpCisgICAgbmV3UGFnZS0+ZC0+Y3JlYXRlTWFpbkZyYW1lKCk7CisgICAgcmV0
dXJuIG5ld1BhZ2UtPmQ7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpqYXZhU2NyaXB0Q29u
c29sZU1lc3NhZ2UoY29uc3QgUVN0cmluZyAmbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IFFTdHJpbmcgJnNvdXJjZUlEKQoreworICAgIHEtPmphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSht
ZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRl
OjpqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUsIGNvbnN0IFFTdHJpbmcm
IG1zZykKK3sKKyAgICBxLT5qYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZy
YW1lKSwgbXNnKTsKK30KKworYm9vbCBRV2ViUGFnZVByaXZhdGU6OmphdmFTY3JpcHRDb25maXJt
KFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2cpCit7CisgICAgcmV0
dXJuIHEtPmphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIG1z
Zyk7Cit9CisKK2Jvb2wgUVdlYlBhZ2VQcml2YXRlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFt
ZUFkYXB0ZXIgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZtc2csIGNvbnN0IFFTdHJpbmcgJmRlZmF1
bHRWYWx1ZSwgUVN0cmluZyAqcmVzdWx0KQoreworICAgIHJldHVybiBxLT5qYXZhU2NyaXB0UHJv
bXB0KFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSksIG1zZywgZGVmYXVsdFZhbHVlLCByZXN1
bHQpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6cHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1l
QWRhcHRlciAqZnJhbWUpCit7CisgICAgZW1pdCBxLT5wcmludFJlcXVlc3RlZChRV2ViRnJhbWVQ
cml2YXRlOjpraXQoZnJhbWUpKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmRhdGFiYXNl
UXVvdGFFeGNlZWRlZChRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZGF0
YWJhc2VOYW1lKQoreworICAgIGVtaXQgcS0+ZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFFXZWJGcmFt
ZVByaXZhdGU6OmtpdChmcmFtZSksIGRhdGFiYXNlTmFtZSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQ
cml2YXRlOjphcHBsaWNhdGlvbkNhY2hlUXVvdGFFeGNlZWRlZChRV2ViU2VjdXJpdHlPcmlnaW4g
Km9yaWdpbiwgcXVpbnQ2NCBkZWZhdWx0T3JpZ2luUXVvdGEsIHF1aW50NjQgYykKK3sKKyAgICBl
bWl0IHEtPmFwcGxpY2F0aW9uQ2FjaGVRdW90YUV4Y2VlZGVkKG9yaWdpbiwgZGVmYXVsdE9yaWdp
blF1b3RhLCBkZWZhdWx0T3JpZ2luUXVvdGEpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6
c2V0VG9vbFRpcChjb25zdCBRU3RyaW5nICZ0aXApCit7CisjaWZuZGVmIFFUX05PX1RPT0xUSVAK
KyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0aXAuaXNFbXB0eSgp
KSB7CisgICAgICAgIHZpZXctPnNldFRvb2xUaXAoUVN0cmluZygpKTsKKyAgICAgICAgUVRvb2xU
aXA6OmhpZGVUZXh0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUVN0cmluZyBkdGlwID0gUUxh
dGluMVN0cmluZygiPHA+IikgKyBRU3RyaW5nKHRpcCkudG9IdG1sRXNjYXBlZCgpICsgUUxhdGlu
MVN0cmluZygiPC9wPiIpOworICAgICAgICB2aWV3LT5zZXRUb29sVGlwKGR0aXApOworICAgIH0K
KyNlbHNlCisgICAgUV9VTlVTRUQodGlwKTsKICNlbmRpZgogfQogCi1XZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50cyBRV2ViUGFnZVByaXZhdGU6OnZpZXdwb3J0QXJndW1lbnRzKCkKKyNpZiBVU0Uo
UVRfTVVMVElNRURJQSkKK1FXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyICpRV2ViUGFnZVByaXZh
dGU6OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQogewotICAgIHJldHVybiBwYWdlID8g
cGFnZS0+dmlld3BvcnRBcmd1bWVudHMoKSA6IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzKCk7
CisgICAgcmV0dXJuIG5ldyBXZWJLaXQ6OkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwog
fQorI2VuZGlmCiAKLVdlYkNvcmU6OlBhZ2UqIFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShjb25zdCBR
V2ViUGFnZSogcGFnZSkKK1FXZWJGcmFtZUFkYXB0ZXIgKlFXZWJQYWdlUHJpdmF0ZTo6bWFpbkZy
YW1lQWRhcHRlcigpCiB7Ci0gICAgcmV0dXJuIHBhZ2UtPmQtPnBhZ2U7CisgICAgcmV0dXJuIHEt
Pm1haW5GcmFtZSgpLT5kOwogfQogCi1RV2ViUGFnZVByaXZhdGUqIFFXZWJQYWdlUHJpdmF0ZTo6
cHJpdihRV2ViUGFnZSogcGFnZSkKK1FTdHJpbmdMaXN0IFFXZWJQYWdlUHJpdmF0ZTo6Y2hvb3Nl
RmlsZXMoUVdlYkZyYW1lQWRhcHRlciAqZnJhbWUsIGJvb2wgYWxsb3dNdWx0aXBsZSwgY29uc3Qg
UVN0cmluZ0xpc3QgJnN1Z2dlc3RlZEZpbGVOYW1lcykKIHsKLSAgICByZXR1cm4gcGFnZS0+ZDsK
KyAgICBpZiAoYWxsb3dNdWx0aXBsZSAmJiBxLT5zdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6
Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lvbikpIHsKKyAgICAgICAgUVdlYlBhZ2U6OkNob29z
ZU11bHRpcGxlRmlsZXNFeHRlbnNpb25PcHRpb24gb3B0aW9uOworICAgICAgICBvcHRpb24ucGFy
ZW50RnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOworICAgICAgICBvcHRpb24u
c3VnZ2VzdGVkRmlsZU5hbWVzID0gc3VnZ2VzdGVkRmlsZU5hbWVzOworCisgICAgICAgIFFXZWJQ
YWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uUmV0dXJuIG91dHB1dDsKKyAgICAgICAg
cS0+ZXh0ZW5zaW9uKFFXZWJQYWdlOjpDaG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uLCAmb3B0
aW9uLCAmb3V0cHV0KTsKKworICAgICAgICByZXR1cm4gb3V0cHV0LmZpbGVOYW1lczsKKyAgICB9
CisgICAgLy8gU2luZ2xlIGZpbGUKKyAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CisgICAgUVN0cmlu
ZyBzdWdnZXN0ZWRGaWxlOworICAgIGlmICghc3VnZ2VzdGVkRmlsZU5hbWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgc3VnZ2VzdGVkRmlsZSA9IHN1Z2dlc3RlZEZpbGVOYW1lcy5maXJzdCgpOworICAg
IFFTdHJpbmcgZmlsZSA9IHEtPmNob29zZUZpbGUoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1l
KSwgc3VnZ2VzdGVkRmlsZSk7CisgICAgaWYgKCFmaWxlLmlzRW1wdHkoKSkKKyAgICAgICAgcmVz
dWx0IDw8IGZpbGU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBRV2ViUGFnZVByaXZh
dGU6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFOZXR3
b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlIHR5cGUpCitib29s
IFFXZWJQYWdlUHJpdmF0ZTo6YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lQWRhcHRl
ciAqZnJhbWVBZGFwdGVyLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIGludCB0eXBl
KQogeworICAgIFFXZWJGcmFtZSAqZnJhbWUgPSBmcmFtZUFkYXB0ZXIgPyBRV2ViRnJhbWVQcml2
YXRlOjpraXQoZnJhbWVBZGFwdGVyKTogMDsKICAgICBpZiAoaW5zaWRlT3BlbkNhbGwKICAgICAg
ICAgJiYgZnJhbWUgPT0gbWFpbkZyYW1lLmRhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgcmV0dXJuIHEtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KGZyYW1lLCByZXF1ZXN0LCB0eXBl
KTsKKyAgICByZXR1cm4gcS0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoZnJhbWUsIHJlcXVlc3Qs
IFFXZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZSh0eXBlKSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2
YXRlOjplbWl0UmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciAqZnJh
bWUpCit7CisgICAgZW1pdCBxLT5yZXN0b3JlRnJhbWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVQ
cml2YXRlOjpraXQoZnJhbWUpKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmVtaXRTYXZl
RnJhbWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyICpmcmFtZSwgUVdlYkhpc3RvcnlJ
dGVtICppdGVtKQoreworICAgIGVtaXQgcS0+c2F2ZUZyYW1lU3RhdGVSZXF1ZXN0ZWQoUVdlYkZy
YW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgaXRlbSk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRl
OjplbWl0RG93bmxvYWRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0KQor
eworICAgIGVtaXQgcS0+ZG93bmxvYWRSZXF1ZXN0ZWQocmVxdWVzdCk7Cit9CisKK3ZvaWQgUVdl
YlBhZ2VQcml2YXRlOjplbWl0RnJhbWVDcmVhdGVkKFFXZWJGcmFtZUFkYXB0ZXIgKmZyYW1lKQor
eworICAgIGVtaXQgcS0+ZnJhbWVDcmVhdGVkKFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSkp
OworfQorCitib29sIFFXZWJQYWdlUHJpdmF0ZTo6ZXJyb3JQYWdlRXh0ZW5zaW9uKFFXZWJQYWdl
QWRhcHRlcjo6RXJyb3JQYWdlT3B0aW9uICpvcHQsIFFXZWJQYWdlQWRhcHRlcjo6RXJyb3JQYWdl
UmV0dXJuICpvdXQpCit7CisgICAgUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvbk9wdGlvbiBv
cHRpb247CisgICAgaWYgKG9wdC0+ZG9tYWluID09IFFMYXRpbjFTdHJpbmcoIlF0TmV0d29yayIp
KQorICAgICAgICBvcHRpb24uZG9tYWluID0gUVdlYlBhZ2U6OlF0TmV0d29yazsKKyAgICBlbHNl
IGlmIChvcHQtPmRvbWFpbiA9PSBRTGF0aW4xU3RyaW5nKCJIVFRQIikpCisgICAgICAgIG9wdGlv
bi5kb21haW4gPSBRV2ViUGFnZTo6SHR0cDsKKyAgICBlbHNlIGlmIChvcHQtPmRvbWFpbiA9PSBR
TGF0aW4xU3RyaW5nKCJXZWJLaXQiKSkKKyAgICAgICAgb3B0aW9uLmRvbWFpbiA9IFFXZWJQYWdl
OjpXZWJLaXQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgb3B0aW9uLnVy
bCA9IG9wdC0+dXJsOworICAgIG9wdGlvbi5mcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChv
cHQtPmZyYW1lKTsKKyAgICBvcHRpb24uZXJyb3IgPSBvcHQtPmVycm9yOworICAgIG9wdGlvbi5l
cnJvclN0cmluZyA9IG9wdC0+ZXJyb3JTdHJpbmc7CisgICAgUVdlYlBhZ2U6OkVycm9yUGFnZUV4
dGVuc2lvblJldHVybiBvdXRwdXQ7CisgICAgaWYgKCFxLT5leHRlbnNpb24oUVdlYlBhZ2U6OkVy
cm9yUGFnZUV4dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBvdXQtPmJhc2VVcmwgPSBvdXRwdXQuYmFzZVVybDsKKyAgICBvdXQtPmNvbnRlbnQg
PSBvdXRwdXQuY29udGVudDsKKyAgICBvdXQtPmNvbnRlbnRUeXBlID0gb3V0cHV0LmNvbnRlbnRU
eXBlOworICAgIG91dC0+ZW5jb2RpbmcgPSBvdXRwdXQuZW5jb2Rpbmc7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1F0UGx1Z2luV2lkZ2V0QWRhcHRlciAqUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVQ
bHVnaW4oY29uc3QgUVN0cmluZyAmY2xhc3NpZCwgY29uc3QgUVVybCAmdXJsLCBjb25zdCBRU3Ry
aW5nTGlzdCAmcGFyYW1OYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtVmFsdWVzKQorewor
ICAgIFFPYmplY3QgKndpZGdldCA9IHEtPmNyZWF0ZVBsdWdpbihjbGFzc2lkLCB1cmwsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICByZXR1cm4gYWRhcHRlckZvcldpZGdldCh3aWRnZXQp
OworfQorCitRdFBsdWdpbldpZGdldEFkYXB0ZXIgKlFXZWJQYWdlUHJpdmF0ZTo6YWRhcHRlckZv
cldpZGdldChRT2JqZWN0ICpvYmplY3QpIGNvbnN0Cit7CisgICAgaWYgKFFXaWRnZXQgKndpZGdl
dCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG5ldyBR
V2lkZ2V0UGx1Z2luSW1wbCh3aWRnZXQpOworICAgIGlmIChRR3JhcGhpY3NXaWRnZXQgKndpZGdl
dCA9IHFvYmplY3RfY2FzdDxRR3JhcGhpY3NXaWRnZXQqPihvYmplY3QpKQorICAgICAgICByZXR1
cm4gbmV3IFFHcmFwaGljc1dpZGdldFBsdWdpbkltcGwod2lkZ2V0KTsKKyAgICByZXR1cm4gMDsK
IH0KIAogdm9pZCBRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZU1haW5GcmFtZSgpCiB7CiAgICAgaWYg
KCFtYWluRnJhbWUpIHsKLSAgICAgICAgUVdlYkZyYW1lRGF0YSBmcmFtZURhdGEocGFnZSk7Ci0g
ICAgICAgIG1haW5GcmFtZSA9IG5ldyBRV2ViRnJhbWUocSwgJmZyYW1lRGF0YSk7Ci0KKyAgICAg
ICAgbWFpbkZyYW1lID0gbmV3IFFXZWJGcmFtZShxKTsKICAgICAgICAgZW1pdCBxLT5mcmFtZUNy
ZWF0ZWQobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgfQogfQpAQCAtNDc1LDQ5ICs2NTIsNDkgQEAg
UU1lbnUgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlQ29udGV4dE1lbnUoY29uc3QgV2ViQ29yZTo6
Q29udGV4dE1lbnUgKndlYmNvcmVNZW4KICAgICBpZiAoIWNsaWVudCB8fCAhd2ViY29yZU1lbnUp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUU1lbnUqIG1lbnUgPSBuZXcgUU1lbnUoY2xpZW50
LT5vd25lcldpZGdldCgpKTsKKyAgICBRTWVudSogbWVudSA9IG5ldyBRTWVudShxLT52aWV3KCkp
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMtPmNvdW50KCk7ICsraSkgewogICAgICAg
ICBjb25zdCBDb250ZXh0TWVudUl0ZW0gJml0ZW0gPSBpdGVtcy0+YXQoaSk7CiAgICAgICAgIHN3
aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViQ29yZTo6Q2hlY2thYmxl
QWN0aW9uVHlwZTogLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlIFdlYkNvcmU6
OkFjdGlvblR5cGU6IHsKLSAgICAgICAgICAgICAgICBRV2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlv
biA9IHdlYkFjdGlvbkZvckNvbnRleHRNZW51QWN0aW9uKGl0ZW0uYWN0aW9uKCkpOwotICAgICAg
ICAgICAgICAgIFFBY3Rpb24gKmEgPSBxLT5hY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgICAgICAg
ICBpZiAoYSkgewotICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXQoaXRlbSk7
Ci0gICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jaGVj
a09yRW5hYmxlSWZOZWVkZWQoaXQpOwotICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lbnVJ
dGVtRGVzY3JpcHRpb24gZGVzYyA9IGl0LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGEtPnNldEVuYWJsZWQoZGVzYy5lbmFibGVkKTsKLSAgICAgICAg
ICAgICAgICAgICAgYS0+c2V0Q2hlY2tlZChkZXNjLmNoZWNrZWQpOwotICAgICAgICAgICAgICAg
ICAgICBhLT5zZXRDaGVja2FibGUoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6Q2hlY2thYmxlQWN0
aW9uVHlwZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVudS0+YWRkQWN0aW9uKGEpOwotICAg
ICAgICAgICAgICAgICAgICB2aXNpdGVkV2ViQWN0aW9ucy0+c2V0Qml0KGFjdGlvbik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkNoZWNrYWJsZUFjdGlvblR5cGU6IC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBjYXNl
IFdlYkNvcmU6OkFjdGlvblR5cGU6IHsKKyAgICAgICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24g
YWN0aW9uID0gd2ViQWN0aW9uRm9yQ29udGV4dE1lbnVBY3Rpb24oaXRlbS5hY3Rpb24oKSk7Cisg
ICAgICAgICAgICBRQWN0aW9uICphID0gcS0+YWN0aW9uKGFjdGlvbik7CisgICAgICAgICAgICBp
ZiAoYSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdChpdGVtKTsKKyAgICAg
ICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2hlY2tPckVuYWJsZUlm
TmVlZGVkKGl0KTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24g
ZGVzYyA9IGl0LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICAgICAg
YS0+c2V0RW5hYmxlZChkZXNjLmVuYWJsZWQpOworICAgICAgICAgICAgICAgIGEtPnNldENoZWNr
ZWQoZGVzYy5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICBhLT5zZXRDaGVja2FibGUoaXRlbS50
eXBlKCkgPT0gV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZSk7CisKKyAgICAgICAgICAgICAg
ICBtZW51LT5hZGRBY3Rpb24oYSk7CisgICAgICAgICAgICAgICAgdmlzaXRlZFdlYkFjdGlvbnMt
PnNldEJpdChhY3Rpb24pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJDb3Jl
OjpTZXBhcmF0b3JUeXBlOgotICAgICAgICAgICAgICAgIG1lbnUtPmFkZFNlcGFyYXRvcigpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdWJtZW51
VHlwZTogewotICAgICAgICAgICAgICAgIFFNZW51ICpzdWJNZW51ID0gY3JlYXRlQ29udGV4dE1l
bnUod2ViY29yZU1lbnUsIGl0ZW0ucGxhdGZvcm1TdWJNZW51KCksIHZpc2l0ZWRXZWJBY3Rpb25z
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
U2VwYXJhdG9yVHlwZToKKyAgICAgICAgICAgIG1lbnUtPmFkZFNlcGFyYXRvcigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6U3VibWVudVR5cGU6IHsKKyAgICAg
ICAgICAgIFFNZW51ICpzdWJNZW51ID0gY3JlYXRlQ29udGV4dE1lbnUod2ViY29yZU1lbnUsIGl0
ZW0ucGxhdGZvcm1TdWJNZW51KCksIHZpc2l0ZWRXZWJBY3Rpb25zKTsKIAotICAgICAgICAgICAg
ICAgIGJvb2wgYW55RW5hYmxlZEFjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBhbnlF
bmFibGVkQWN0aW9uID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBRTGlzdDxRQWN0aW9uICo+
IGFjdGlvbnMgPSBzdWJNZW51LT5hY3Rpb25zKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhY3Rpb25zLmNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoYWN0aW9ucy5hdChpKS0+aXNWaXNpYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBh
bnlFbmFibGVkQWN0aW9uIHw9IGFjdGlvbnMuYXQoaSktPmlzRW5hYmxlZCgpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGRvbid0IHNob3cgc3ViLW1lbnVzIHdpdGgg
anVzdCBkaXNhYmxlZCBhY3Rpb25zCi0gICAgICAgICAgICAgICAgaWYgKGFueUVuYWJsZWRBY3Rp
b24pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ViTWVudS0+c2V0VGl0bGUoaXRlbS50aXRsZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbWVudS0+YWRkQWN0aW9uKHN1Yk1lbnUtPm1lbnVBY3Rp
b24oKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBzdWJNZW51OwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUUxpc3Q8UUFj
dGlvbiAqPiBhY3Rpb25zID0gc3ViTWVudS0+YWN0aW9ucygpOworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhY3Rpb25zLmNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlm
IChhY3Rpb25zLmF0KGkpLT5pc1Zpc2libGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYW55RW5h
YmxlZEFjdGlvbiB8PSBhY3Rpb25zLmF0KGkpLT5pc0VuYWJsZWQoKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gZG9uJ3Qgc2hvdyBzdWItbWVudXMgd2l0aCBqdXN0IGRpc2FibGVk
IGFjdGlvbnMKKyAgICAgICAgICAgIGlmIChhbnlFbmFibGVkQWN0aW9uKSB7CisgICAgICAgICAg
ICAgICAgc3ViTWVudS0+c2V0VGl0bGUoaXRlbS50aXRsZSgpKTsKKyAgICAgICAgICAgICAgICBt
ZW51LT5hZGRBY3Rpb24oc3ViTWVudS0+bWVudUFjdGlvbigpKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGRlbGV0ZSBzdWJNZW51OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbWVudTsKQEAgLTYxOSw2ICs3
OTYsNjUgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCkK
ICAgICB1cGRhdGVBY3Rpb24oUVdlYlBhZ2U6OlJlbG9hZEFuZEJ5cGFzc0NhY2hlKTsKIH0KIAor
UU9iamVjdCAqUVdlYlBhZ2VQcml2YXRlOjppbnNwZWN0b3JIYW5kbGUoKQoreworICAgIHJldHVy
biBnZXRPckNyZWF0ZUluc3BlY3RvcigpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6c2V0
SW5zcGVjdG9yRnJvbnRlbmQoUU9iamVjdCogZnJvbnRlbmQpCit7CisgICAgaW5zcGVjdG9yRnJv
bnRlbmQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KGZyb250ZW5kKTsKKyAgICBpZiAoaW5zcGVj
dG9yKQorICAgICAgICBpbnNwZWN0b3ItPmQtPnNldEZyb250ZW5kKGZyb250ZW5kKTsKK30KKwor
dm9pZCBRV2ViUGFnZVByaXZhdGU6OnNldEluc3BlY3RvcldpbmRvd1RpdGxlKGNvbnN0IFFTdHJp
bmcmIHRpdGxlKQoreworICAgIGlmIChpbnNwZWN0b3IpCisgICAgICAgIGluc3BlY3Rvci0+c2V0
V2luZG93VGl0bGUodGl0bGUpOworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlV2Vi
SW5zcGVjdG9yKFFPYmplY3QqKiBpbnNwZWN0b3JWaWV3LCBRV2ViUGFnZUFkYXB0ZXIqKiBpbnNw
ZWN0b3JQYWdlKQoreworICAgIFFXZWJQYWdlKiBwYWdlID0gbmV3IFdlYktpdDo6SW5zcGVjdG9y
Q2xpZW50V2ViUGFnZTsKKyAgICAqaW5zcGVjdG9yVmlldyA9IHBhZ2UtPnZpZXcoKTsKKyAgICAq
aW5zcGVjdG9yUGFnZSA9IHBhZ2UtPmQ7Cit9CisKKyNpZm5kZWYgUVRfTk9fTUVOVQorc3RhdGlj
IFFTdHJpbmdMaXN0IGl0ZXJhdGVDb250ZXh0TWVudShRTWVudSogbWVudSkKK3sKKyAgICBpZiAo
IW1lbnUpCisgICAgICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOworCisgICAgUVN0cmluZ0xpc3Qg
aXRlbXM7CisgICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zID0gbWVudS0+YWN0aW9ucygpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAg
aWYgKGFjdGlvbnMuYXQoaSktPmlzU2VwYXJhdG9yKCkpCisgICAgICAgICAgICBpdGVtcyA8PCBR
TGF0aW4xU3RyaW5nKCI8c2VwYXJhdG9yPiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
dGVtcyA8PCBhY3Rpb25zLmF0KGkpLT50ZXh0KCk7CisgICAgICAgIGlmIChhY3Rpb25zLmF0KGkp
LT5tZW51KCkpCisgICAgICAgICAgICBpdGVtcyA8PCBpdGVyYXRlQ29udGV4dE1lbnUoYWN0aW9u
cy5hdChpKS0+bWVudSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGl0ZW1zOworfQorI2VuZGlmCisK
K1FTdHJpbmdMaXN0IFFXZWJQYWdlUHJpdmF0ZTo6bWVudUFjdGlvbnNBc1RleHQoKQoreworI2lm
bmRlZiBRVF9OT19NRU5VCisgICAgcmV0dXJuIGl0ZXJhdGVDb250ZXh0TWVudShjdXJyZW50Q29u
dGV4dE1lbnUuZGF0YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7CisjZW5k
aWYKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6OmVtaXRWaWV3cG9ydENoYW5nZVJlcXVlc3Rl
ZCgpCit7CisgICAgZW1pdCBxLT52aWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpOworfQorCiB2b2lk
IFFXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlRWRpdG9yQWN0aW9ucygpCiB7CiAgICAgdXBkYXRlQWN0
aW9uKFFXZWJQYWdlOjpDdXQpOwpAQCAtNjgyLDggKzkxOCw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2
YXRlOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICpldikKICAgICAgICAgcS0+dGltZXJFdmVudChl
dik7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VN
b3ZlRXZlbnQoVCogZXYpCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6bW91c2VNb3ZlRXZlbnQoUU1v
dXNlRXZlbnQqIGV2KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUobWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpA
QCAtNjkzLDggKzkyOCw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZU1vdmVFdmVudChU
KiBldikKICAgICBldi0+c2V0QWNjZXB0ZWQoYWNjZXB0ZWQpOwogfQogCi10ZW1wbGF0ZTxjbGFz
cyBUPgotdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlUHJlc3NFdmVudChUKiBldikKK3ZvaWQg
UVdlYlBhZ2VQcml2YXRlOjptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQogewogICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobWFpbkZyYW1l
LmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpAQCAtNzI5LDggKzk2Myw3IEBAIHZv
aWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVByZXNzRXZlbnQoVCogZXYpCiAgICAgICAgIGNsaWNr
Q2F1c2VkRm9jdXMgPSB0cnVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBUPgotdm9pZCBRV2ViUGFn
ZVByaXZhdGU6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChUICpldikKK3ZvaWQgUVdlYlBhZ2VQcml2
YXRlOjptb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKmV2KQogewogICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUobWFpbkZyYW1lLmRhdGEo
KSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpAQCAtNzQ3LDggKzk4MCw3IEBAIHZvaWQgUVdl
YlBhZ2VQcml2YXRlOjptb3VzZURvdWJsZUNsaWNrRXZlbnQoVCAqZXYpCiAgICAgdHJpcGxlQ2xp
Y2sgPSBRUG9pbnRGKGV2LT5wb3MoKSkudG9Qb2ludCgpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBU
Pgotdm9pZCBRV2ViUGFnZVByaXZhdGU6Om1vdXNlVHJpcGxlQ2xpY2tFdmVudChUICpldikKK3Zv
aWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVRyaXBsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKmV2
KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
bWFpbkZyYW1lLmRhdGEoKSk7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQpAQCAtNzYyLDggKzk5
NCw3IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVRyaXBsZUNsaWNrRXZlbnQoVCAqZXYp
CiAgICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgVD4K
LXZvaWQgUVdlYlBhZ2VQcml2YXRlOjptb3VzZVJlbGVhc2VFdmVudChUICpldikKK3ZvaWQgUVdl
YlBhZ2VQcml2YXRlOjptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCAqZXYpCiB7CiAgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShtYWluRnJhbWUu
ZGF0YSgpKTsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkpCkBAIC03OTAsNyArMTAyMSw3IEBAIHZv
aWQgUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTb2Z0d2FyZUlucHV0UGFuZWwoUXQ6Ok1vdXNlQnV0
dG9uIGJ1dHRvbiwgY29uc3QgUVBvCiAgICAgICAgICYmIGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpCiAgICAgICAgICYmIGJ1dHRvbiA9PSBRdDo6TGVmdEJ1dHRvbiAmJiBxQXBwLT5h
dXRvU2lwRW5hYmxlZCgpKSB7CiAgICAgICAgIFFTdHlsZTo6UmVxdWVzdFNvZnR3YXJlSW5wdXRQ
YW5lbCBiZWhhdmlvciA9IFFTdHlsZTo6UmVxdWVzdFNvZnR3YXJlSW5wdXRQYW5lbCgKLSAgICAg
ICAgICAgIGNsaWVudC0+b3duZXJXaWRnZXQoKS0+c3R5bGUoKS0+c3R5bGVIaW50KFFTdHlsZTo6
U0hfUmVxdWVzdFNvZnR3YXJlSW5wdXRQYW5lbCkpOworICAgICAgICAgICAgY2xpZW50LT5zdHls
ZSgpLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9SZXF1ZXN0U29mdHdhcmVJbnB1dFBhbmVsKSk7CiAg
ICAgICAgIGlmICghY2xpY2tDYXVzZWRGb2N1cyB8fCBiZWhhdmlvciA9PSBRU3R5bGU6OlJTSVBf
T25Nb3VzZUNsaWNrKSB7CiAgICAgICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoZnJhbWUtPnZpZXcoKS0+d2lu
ZG93VG9Db250ZW50cyhwb3MpLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKQEAgLTgzMywxNCArMTA2NCwxMyBAQCBRTWVudSAqUVdlYlBhZ2U6
OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKQogfQogCiAjaWZuZGVmIFFUX05PX1dIRUVMRVZF
TlQKLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIFFXZWJQYWdlUHJpdmF0ZTo6d2hlZWxFdmVudChU
ICpldikKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50ICpldikK
IHsKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKG1h
aW5GcmFtZS5kYXRhKCkpOwogICAgIGlmICghZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBldiA9IGNvbnZlcnRXaGVlbEV2ZW50KGV2KTsK
KyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGV2ID0gY29udmVydFdoZWVsRXZlbnQoZXYsIFFBcHBs
aWNhdGlvbjo6d2hlZWxTY3JvbGxMaW5lcygpKTsKICAgICBib29sIGFjY2VwdGVkID0gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHBldik7CiAgICAgZXYtPnNldEFjY2Vw
dGVkKGFjY2VwdGVkKTsKIH0KQEAgLTEzNDAsMzMgKzE1NzAsMzkgQEAgYm9vbCBRV2ViUGFnZVBy
aXZhdGU6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogCiBib29sIFFXZWJQYWdlUHJp
dmF0ZTo6Z2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZlbnQqIGV2ZW50KQogewotI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKG1haW5GcmFtZS5kYXRhKCkpOwotICAgIGlmICghZnJhbWUtPnZpZXcoKSkKKyAg
ICBRV2ViRnJhbWVBZGFwdGVyKiBmcmFtZSA9IG1haW5GcmFtZS5kYXRhKCktPmQ7CisgICAgaWYg
KCFmcmFtZS0+aGFzVmlldygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBRR2Vz
dHVyZUV2ZW50cyBjYW4gY29udGFpbiB1cGRhdGVzIGZvciBtdWx0aXBsZSBnZXN0dXJlcy4KICAg
ICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAg
Ly8gUUdlc3R1cmVFdmVudCBsaXZlcyBpbiBXaWRnZXRzLCB3ZSdsbCBuZWVkIGEgZHVtbXkgc3Ry
dWN0IHRvIG11bGUgdGhlIGluZm8gaXQgY29udGFpbnMgdG8gdGhlICJvdGhlciBzaWRlIgorICAg
IFFHZXN0dXJlRXZlbnRGYWNhZGUgZ2VzdHVyZUZhY2FkZTsKKwogICAgIFFHZXN0dXJlKiBnZXN0
dXJlID0gZXZlbnQtPmdlc3R1cmUoUXQ6OlRhcEdlc3R1cmUpOwogICAgIC8vIEJld2FyZSB0aGF0
IGdlc3R1cmVzIHNlbmQgYnkgRHVtcFJlbmRlclRyZWUgd2lsbCBoYXZlIHN0YXRlIFF0OjpOb0dl
c3R1cmUsCiAgICAgLy8gZHVlIHRvIG5vdCBvcmlnaW5hdGluZyBmcm9tIGEgR2VzdHVyZVJlY29n
bml6ZXIuCiAgICAgaWYgKGdlc3R1cmUgJiYgKGdlc3R1cmUtPnN0YXRlKCkgPT0gUXQ6Okdlc3R1
cmVTdGFydGVkIHx8IGdlc3R1cmUtPnN0YXRlKCkgPT0gUXQ6Ok5vR2VzdHVyZSkpIHsKLSAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoY29udmVydEdlc3R1
cmUoZXZlbnQsIGdlc3R1cmUpKTsKLSAgICAgICAgZXZlbnQtPnNldEFjY2VwdGVkKHRydWUpOwor
ICAgICAgICBnZXN0dXJlRmFjYWRlLnR5cGUgPSBRdDo6VGFwR2VzdHVyZTsKKyAgICAgICAgUVBv
aW50RiBnbG9iYWxQb3MgPSBzdGF0aWNfY2FzdDxjb25zdCBRVGFwR2VzdHVyZSo+KGdlc3R1cmUp
LT5wb3NpdGlvbigpOworICAgICAgICBnZXN0dXJlRmFjYWRlLmdsb2JhbFBvcyA9IGdsb2JhbFBv
cy50b1BvaW50KCk7CisgICAgICAgIGdlc3R1cmVGYWNhZGUucG9zID0gZXZlbnQtPndpZGdldCgp
LT5tYXBGcm9tR2xvYmFsKGdsb2JhbFBvcy50b1BvaW50KCkpOworICAgICAgICBmcmFtZS0+aGFu
ZGxlR2VzdHVyZUV2ZW50KCZnZXN0dXJlRmFjYWRlKTsKICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgfQogICAgIGdlc3R1cmUgPSBldmVudC0+Z2VzdHVyZShRdDo6VGFwQW5kSG9sZEdlc3R1
cmUpOwogICAgIGlmIChnZXN0dXJlICYmIChnZXN0dXJlLT5zdGF0ZSgpID09IFF0OjpHZXN0dXJl
U3RhcnRlZCB8fCBnZXN0dXJlLT5zdGF0ZSgpID09IFF0OjpOb0dlc3R1cmUpKSB7Ci0gICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnRGb3JHZXN0dXJlKGNv
bnZlcnRHZXN0dXJlKGV2ZW50LCBnZXN0dXJlKSk7Ci0gICAgICAgIGV2ZW50LT5zZXRBY2NlcHRl
ZCh0cnVlKTsKKyAgICAgICAgZ2VzdHVyZUZhY2FkZS50eXBlID0gUXQ6OlRhcEFuZEhvbGRHZXN0
dXJlOworICAgICAgICBRUG9pbnRGIGdsb2JhbFBvcyA9IHN0YXRpY19jYXN0PGNvbnN0IFFUYXBB
bmRIb2xkR2VzdHVyZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOworICAgICAgICBnZXN0dXJlRmFj
YWRlLmdsb2JhbFBvcyA9IGdsb2JhbFBvcy50b1BvaW50KCk7CisgICAgICAgIGdlc3R1cmVGYWNh
ZGUucG9zID0gZXZlbnQtPndpZGdldCgpLT5tYXBGcm9tR2xvYmFsKGdsb2JhbFBvcy50b1BvaW50
KCkpOworICAgICAgICBmcmFtZS0+aGFuZGxlR2VzdHVyZUV2ZW50KCZnZXN0dXJlRmFjYWRlKTsK
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShHRVNUVVJF
X0VWRU5UUykKIAorICAgIGV2ZW50LT5zZXRBY2NlcHRlZChoYW5kbGVkKTsKICAgICByZXR1cm4g
aGFuZGxlZDsKLSNlbHNlCi0gICAgZXZlbnQtPmlnbm9yZSgpOwotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgogfQogCiAvKiEKQEAgLTIwMzcsMTIgKzIyNzMsMTIgQEAgdm9pZCBRV2ViUGFnZTo6
c2V0VmlldyhRV2lkZ2V0KiB2aWV3KQogCiAgICAgaWYgKGQtPmNsaWVudCkgewogICAgICAgICBp
ZiAoZC0+Y2xpZW50LT5pc1FXaWRnZXRDbGllbnQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PFBhZ2VDbGllbnRRV2lkZ2V0Kj4oZC0+Y2xpZW50LmdldCgpKS0+dmlldyA9IHZpZXc7CisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UVdpZGdldCo+KGQtPmNsaWVudC5kYXRhKCkp
LT52aWV3ID0gdmlldzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh2aWV3KQot
ICAgICAgICBkLT5jbGllbnQgPSBhZG9wdFB0cihuZXcgUGFnZUNsaWVudFFXaWRnZXQodmlldywg
dGhpcykpOworICAgICAgICBkLT5jbGllbnQucmVzZXQobmV3IFBhZ2VDbGllbnRRV2lkZ2V0KHZp
ZXcsIHRoaXMpKTsKIH0KIAogLyohCkBAIC0yMDY4LDcgKzIzMDQsNyBAQCB2b2lkIFFXZWJQYWdl
OjpqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgUVN0cmluZyYgbWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsCiAKICAgICAvLyBDYXRjaCBwbHVnaW4gbG9nRGVzdHJveSBtZXNzYWdlIGZvciBM
YXlvdXRUZXN0cy9wbHVnaW5zL29wZW4tYW5kLWNsb3NlLXdpbmRvdy13aXRoLXBsdWdpbi5odG1s
CiAgICAgLy8gQXQgdGhpcyBwb2ludCBEUlQncyBXZWJQYWdlIGhhcyBhbHJlYWR5IGJlZW4gZGVz
dHJveWVkCi0gICAgaWYgKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuKSB7CisgICAgaWYgKFFXZWJQ
YWdlQWRhcHRlcjo6ZHJ0UnVuKSB7CiAgICAgICAgIGlmIChtZXNzYWdlID09IFFMYXRpbjFTdHJp
bmcoIlBMVUdJTjogTlBQX0Rlc3Ryb3kiKSkgewogICAgICAgICAgICAgZnByaW50ZihzdGRvdXQs
ICJDT05TT0xFIE1FU1NBR0U6ICIpOwogICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIpCkBAIC0y
MDg4LDggKzIzMjQsNyBAQCB2b2lkIFFXZWJQYWdlOjpqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1l
ICpmcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnKQogewogICAgIFFfVU5VU0VEKGZyYW1lKQogI2lm
bmRlZiBRVF9OT19NRVNTQUdFQk9YCi0gICAgUVdpZGdldCogcGFyZW50ID0gKGQtPmNsaWVudCkg
PyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIFFNZXNzYWdlQm94IGJveChwYXJl
bnQpOworICAgIFFNZXNzYWdlQm94IGJveCh2aWV3KCkpOwogICAgIGJveC5zZXRXaW5kb3dUaXRs
ZSh0cigiSmF2YVNjcmlwdCBBbGVydCAtICUxIikuYXJnKG1haW5GcmFtZSgpLT51cmwoKS5ob3N0
KCkpKTsKICAgICBib3guc2V0VGV4dEZvcm1hdChRdDo6UGxhaW5UZXh0KTsKICAgICBib3guc2V0
VGV4dChtc2cpOwpAQCAtMjExMCw4ICsyMzQ1LDcgQEAgYm9vbCBRV2ViUGFnZTo6amF2YVNjcmlw
dENvbmZpcm0oUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnKQogI2lmZGVmIFFU
X05PX01FU1NBR0VCT1gKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAgUVdpZGdldCogcGFy
ZW50ID0gKGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIFFN
ZXNzYWdlQm94IGJveChwYXJlbnQpOworICAgIFFNZXNzYWdlQm94IGJveCh2aWV3KCkpOwogICAg
IGJveC5zZXRXaW5kb3dUaXRsZSh0cigiSmF2YVNjcmlwdCBDb25maXJtIC0gJTEiKS5hcmcobWFp
bkZyYW1lKCktPnVybCgpLmhvc3QoKSkpOwogICAgIGJveC5zZXRUZXh0Rm9ybWF0KFF0OjpQbGFp
blRleHQpOwogICAgIGJveC5zZXRUZXh0KG1zZyk7CkBAIC0yMTM2LDggKzIzNzAsNyBAQCBib29s
IFFXZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFTdHJp
bmcmIG1zZywgY29uc3QgUVN0cgogICAgIGJvb2wgb2sgPSBmYWxzZTsKICNpZm5kZWYgUVRfTk9f
SU5QVVRESUFMT0cKIAotICAgIFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xp
ZW50LT5vd25lcldpZGdldCgpIDogMDsKLSAgICBRSW5wdXREaWFsb2cgZGxnKHBhcmVudCk7Cisg
ICAgUUlucHV0RGlhbG9nIGRsZyh2aWV3KCkpOwogICAgIGRsZy5zZXRXaW5kb3dUaXRsZSh0cigi
SmF2YVNjcmlwdCBQcm9tcHQgLSAlMSIpLmFyZyhtYWluRnJhbWUoKS0+dXJsKCkuaG9zdCgpKSk7
CiAKICAgICAvLyBIYWNrIHRvIGZvcmNlIHRoZSBkaWFsb2cncyBRTGFiZWwgaW50byBwbGFpbiB0
ZXh0IG1vZGUKQEAgLTIxODEsOCArMjQxNCw3IEBAIGJvb2wgUVdlYlBhZ2U6OnNob3VsZEludGVy
cnVwdEphdmFTY3JpcHQoKQogI2lmZGVmIFFUX05PX01FU1NBR0VCT1gKICAgICByZXR1cm4gZmFs
c2U7CiAjZWxzZQotICAgIFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50
LT5vd25lcldpZGdldCgpIDogMDsKLSAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVz
c2FnZUJveDo6aW5mb3JtYXRpb24ocGFyZW50LCB0cigiSmF2YVNjcmlwdCBQcm9ibGVtIC0gJTEi
KS5hcmcobWFpbkZyYW1lKCktPnVybCgpLmhvc3QoKSksIHRyKCJUaGUgc2NyaXB0IG9uIHRoaXMg
cGFnZSBhcHBlYXJzIHRvIGhhdmUgYSBwcm9ibGVtLiBEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBz
Y3JpcHQ/IiksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7CisgICAgcmV0dXJu
IFFNZXNzYWdlQm94OjpZZXMgPT0gUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHZpZXcoKSwgdHIo
IkphdmFTY3JpcHQgUHJvYmxlbSAtICUxIikuYXJnKG1haW5GcmFtZSgpLT51cmwoKS5ob3N0KCkp
LCB0cigiVGhlIHNjcmlwdCBvbiB0aGlzIHBhZ2UgYXBwZWFycyB0byBoYXZlIGEgcHJvYmxlbS4g
RG8geW91IHdhbnQgdG8gc3RvcCB0aGUgc2NyaXB0PyIpLCBRTWVzc2FnZUJveDo6WWVzLCBRTWVz
c2FnZUJveDo6Tm8pOwogI2VuZGlmCiB9CiAKQEAgLTIxOTcsNyArMjQyOSw4IEBAIHZvaWQgUVdl
YlBhZ2U6OnNldEZlYXR1cmVQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIEZlYXR1cmUgZmVh
dHVyZSwgUGVybWlzc2lvCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2VvbG9jYXRpb246CiAj
aWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnNldFBlcm1pc3Npb24oZnJhbWUs
IHBvbGljeSk7CisgICAgICAgIGlmIChwb2xpY3kgIT0gUGVybWlzc2lvblVua25vd24pCisgICAg
ICAgICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50KCktPnNldFBlcm1pc3Npb24oZnJhbWUtPmQsIChwb2xpY3kgPT0gUGVybWlzc2lv
bkdyYW50ZWRCeVVzZXIpKTsKICNlbmRpZgogICAgICAgICBicmVhazsKIApAQCAtMjQ2MSwyMCAr
MjY5NCwxNDYgQEAgUUNvbG9yIFFXZWJQYWdlUHJpdmF0ZTo6Y29sb3JTZWxlY3Rpb25SZXF1ZXN0
ZWQoY29uc3QgUUNvbG9yICZzZWxlY3RlZENvbG9yKQogewogICAgIFFDb2xvciByZXQgPSBzZWxl
Y3RlZENvbG9yOwogI2lmbmRlZiBRVF9OT19DT0xPUkRJQUxPRwotICAgIFFXaWRnZXQqIHBhcmVu
dCA9IChjbGllbnQpID8gY2xpZW50LT5vd25lcldpZGdldCgpIDogMDsKLSAgICByZXQgPSBRQ29s
b3JEaWFsb2c6OmdldENvbG9yKHNlbGVjdGVkQ29sb3IsIHBhcmVudCk7CisgICAgcmV0ID0gUUNv
bG9yRGlhbG9nOjpnZXRDb2xvcihzZWxlY3RlZENvbG9yLCBxLT52aWV3KCkpOwogICAgIGlmICgh
cmV0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0ID0gc2VsZWN0ZWRDb2xvcjsKICNlbmRpZgogICAg
IHJldHVybiByZXQ7CiB9CiAKK1FXZWJTZWxlY3RNZXRob2QgKlFXZWJQYWdlUHJpdmF0ZTo6Y3Jl
YXRlU2VsZWN0UG9wdXAoKQoreworICAgIHJldHVybiBuZXcgUXRGYWxsYmFja1dlYlBvcHVwKHRo
aXMpOworfQorCitRUmVjdCBRV2ViUGFnZVByaXZhdGU6OnZpZXdSZWN0UmVsYXRpdmVUb1dpbmRv
dygpCit7CisKKyAgICBRV2lkZ2V0KiBvd25lcldpZGdldD0gY2xpZW50LmlzTnVsbCgpID8gMCA6
IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4oY2xpZW50LT5vd25lcldpZGdldCgpKTsKKyAgICBpZiAo
IW93bmVyV2lkZ2V0KQorICAgICAgICByZXR1cm4gUVJlY3QoKTsKKyAgICBRV2lkZ2V0KiB0b3BM
ZXZlbFdpZGdldCA9IG93bmVyV2lkZ2V0LT53aW5kb3coKTsKKworICAgIFFQb2ludCB0b3BMZWZ0
Q29ybmVyID0gb3duZXJXaWRnZXQtPm1hcEZyb20odG9wTGV2ZWxXaWRnZXQsIFFQb2ludCgwLCAw
KSk7CisgICAgcmV0dXJuIFFSZWN0KHRvcExlZnRDb3JuZXIsIG93bmVyV2lkZ2V0LT5zaXplKCkp
OworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dGVkKFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lKQoreworICAgIGVtaXQgcS0+ZmVhdHVyZVBlcm1p
c3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwgUVdlYlBhZ2U6Okdl
b2xvY2F0aW9uKTsKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6Omdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RDYW5jZWxsZWQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUpCit7CisgICAgZW1p
dCBxLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RDYW5jZWxlZChRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZnJhbWUpLCBRV2ViUGFnZTo6R2VvbG9jYXRpb24pOworfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6bm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lQWRhcHRlciog
ZnJhbWUpCit7CisgICAgZW1pdCBxLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJh
bWVQcml2YXRlOjpraXQoZnJhbWUpLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9ucyk7Cit9CisKK3Zv
aWQgUVdlYlBhZ2VQcml2YXRlOjpub3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3RDYW5jZWxs
ZWQoUVdlYkZyYW1lQWRhcHRlciogZnJhbWUpCit7CisgICAgZW1pdCBxLT5mZWF0dXJlUGVybWlz
c2lvblJlcXVlc3RDYW5jZWxlZChRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpLCBRV2ViUGFn
ZTo6Tm90aWZpY2F0aW9ucyk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpyZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoKQoreworICAgIHVwZGF0ZUVkaXRvckFjdGlvbnMoKTsKKworICAgIGVt
aXQgcS0+Y29udGVudHNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkKK3sKKyAgICB1cGRhdGVFZGl0b3JBY3Rpb25zKCk7Cisg
ICAgZW1pdCBxLT5zZWxlY3Rpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRl
OjptaWNyb0ZvY3VzQ2hhbmdlZCgpCit7CisgICAgZW1pdCBxLT5taWNyb0ZvY3VzQ2hhbmdlZCgp
OworfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dHJpZ2dlckNvcHlBY3Rpb24oKQoreworICAg
IHEtPnRyaWdnZXJBY3Rpb24oUVdlYlBhZ2U6OkNvcHkpOworfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6dHJpZ2dlckFjdGlvbkZvcktleUV2ZW50KFFLZXlFdmVudCogZXZlbnQpCit7CisgICAg
UVdlYlBhZ2U6OldlYkFjdGlvbiBhY3Rpb24gPSBlZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChldmVu
dCk7CisgICAgcS0+dHJpZ2dlckFjdGlvbihhY3Rpb24pOworfQorCit2b2lkIFFXZWJQYWdlUHJp
dmF0ZTo6Y2xlYXJVbmRvU3RhY2soKQoreworI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKKyAgICBp
ZiAodW5kb1N0YWNrKQorICAgICAgICB1bmRvU3RhY2stPmNsZWFyKCk7CisjZW5kaWYKK30KKwor
Ym9vbCBRV2ViUGFnZVByaXZhdGU6OmNhblVuZG8oKSBjb25zdAoreworI2lmbmRlZiBRVF9OT19V
TkRPU1RBQ0sKKyAgICBpZiAoIXVuZG9TdGFjaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB1bmRvU3RhY2stPmNhblVuZG8oKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKK2Jvb2wgUVdlYlBhZ2VQcml2YXRlOjpjYW5SZWRvKCkgY29uc3QKK3sKKyNp
Zm5kZWYgUVRfTk9fVU5ET1NUQUNLCisgICAgaWYgKCF1bmRvU3RhY2spCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdW5kb1N0YWNrLT5jYW5SZWRvKCk7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6dW5kbygpCit7
CisjaWZuZGVmIFFUX05PX1VORE9TVEFDSworICAgIGlmICh1bmRvU3RhY2spCisgICAgICAgIHVu
ZG9TdGFjay0+dW5kbygpOworI2VuZGlmCit9CisKK3ZvaWQgUVdlYlBhZ2VQcml2YXRlOjpyZWRv
KCkKK3sKKyNpZm5kZWYgUVRfTk9fVU5ET1NUQUNLCisgICAgaWYgKHVuZG9TdGFjaykKKyAgICAg
ICAgdW5kb1N0YWNrLT5yZWRvKCk7CisjZW5kaWYKK30KKwordm9pZCBRV2ViUGFnZVByaXZhdGU6
OmNyZWF0ZVVuZG9TdGVwKFFTaGFyZWRQb2ludGVyPFVuZG9TdGVwUXQ+IHN0ZXApCit7CisjaWZu
ZGVmIFFUX05PX1VORE9TVEFDSworICAgIC8vIENhbGwgdW5kb1N0YWNrKCkgZ2V0dGVyIGZpcnN0
IHRvIGVuc3VyZSBzdGFjayBpcyBjcmVhdGVkCisgICAgLy8gaWYgaXQgZG9lc24ndCBleGlzdCB5
ZXQuCisgICAgcS0+dW5kb1N0YWNrKCktPnB1c2gobmV3IFFXZWJVbmRvQ29tbWFuZChzdGVwKSk7
CisjZW5kaWYKK30KKworY29uc3QgY2hhciAqUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JDb21tYW5k
Rm9yS2V5RXZlbnQoUUtleUV2ZW50KiBldmVudCkKK3sKKyAgICBRV2ViUGFnZTo6V2ViQWN0aW9u
IGFjdGlvbiA9IGVkaXRvckFjdGlvbkZvcktleUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gZWRp
dG9yQ29tbWFuZEZvcldlYkFjdGlvbnMoYWN0aW9uKTsKK30KKwogUVNpemUgUVdlYlBhZ2U6OnZp
ZXdwb3J0U2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKGQtPm1haW5GcmFtZSAmJiBkLT5tYWluRnJh
bWUuZGF0YSgpLT5kLT5mcmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm4gZC0+bWFpbkZyYW1l
LmRhdGEoKS0+ZC0+ZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpOwogCi0gICAgcmV0
dXJuIGQtPnZpZXdwb3J0U2l6ZTsKKyAgICByZXR1cm4gZC0+bV92aWV3cG9ydFNpemU7CiB9CiAK
IC8qIQpAQCAtMjQ5MSw3ICsyODUwLDcgQEAgUVNpemUgUVdlYlBhZ2U6OnZpZXdwb3J0U2l6ZSgp
IGNvbnN0CiAqLwogdm9pZCBRV2ViUGFnZTo6c2V0Vmlld3BvcnRTaXplKGNvbnN0IFFTaXplICZz
aXplKSBjb25zdAogewotICAgIGQtPnZpZXdwb3J0U2l6ZSA9IHNpemU7CisgICAgZC0+bV92aWV3
cG9ydFNpemUgPSBzaXplOwogCiAgICAgUVdlYkZyYW1lICpmcmFtZSA9IG1haW5GcmFtZSgpOwog
ICAgIGlmIChmcmFtZS0+ZC0+ZnJhbWUgJiYgZnJhbWUtPmQtPmZyYW1lLT52aWV3KCkpIHsKQEAg
LTI1NzcsNyArMjkzNiw3IEBAIFFXZWJQYWdlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgUVdlYlBhZ2U6
OnZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUoY29uc3QgUVNpemUmIGF2CiAKICAgICAvLyBCb3Ro
IGVudmlyb25tZW50IHZhcmlhYmxlcyBuZWVkIHRvIGJlIHNldCAtIG9yIHRoZXkgd2lsbCBiZSBp
Z25vcmVkLgogICAgIGlmIChkZXZpY2VXaWR0aCA8IDAgJiYgZGV2aWNlSGVpZ2h0IDwgMCkgewot
ICAgICAgICBRU2l6ZSBzaXplID0gcXVlcnlEZXZpY2VTaXplRm9yU2NyZWVuQ29udGFpbmluZ1dp
ZGdldCgoZC0+Y2xpZW50KSA/IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDApOworICAgICAg
ICBRU2l6ZSBzaXplID0gcXVlcnlEZXZpY2VTaXplRm9yU2NyZWVuQ29udGFpbmluZ1dpZGdldCh2
aWV3KCkpOwogICAgICAgICBkZXZpY2VXaWR0aCA9IHNpemUud2lkdGgoKTsKICAgICAgICAgZGV2
aWNlSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKICAgICB9CkBAIC0zMDkzLDE4ICszNDUyLDM0IEBA
IGJvb2wgUVdlYlBhZ2U6OmV2ZW50KFFFdmVudCAqZXYpCiAgICAgICAgIGQtPm1vdXNlUmVsZWFz
ZUV2ZW50KHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKICAgICAgICAgYnJlYWs7CiAj
aWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGlj
c1NjZW5lTW91c2VNb3ZlOgotICAgICAgICBkLT5tb3VzZU1vdmVFdmVudChzdGF0aWNfY2FzdDxR
R3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqPihldikpOworICAgIGNhc2UgUUV2ZW50OjpHcmFwaGlj
c1NjZW5lTW91c2VNb3ZlOiB7CisgICAgICAgIFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCAqZ3NF
diA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2KTsKKyAgICAgICAg
UU1vdXNlRXZlbnQgZHVtbXlFdmVudChRRXZlbnQ6Ok1vdXNlTW92ZSwgZ3NFdi0+cG9zKCksIGdz
RXYtPnNjcmVlblBvcygpLCBnc0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygpLCBnc0V2LT5t
b2RpZmllcnMoKSk7CisgICAgICAgIGQtPm1vdXNlTW92ZUV2ZW50KCZkdW1teUV2ZW50KTsKKyAg
ICAgICAgZXYtPnNldEFjY2VwdGVkKGR1bW15RXZlbnQuaXNBY2NlcHRlZCgpKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVByZXNzOgotICAgICAg
ICBkLT5tb3VzZVByZXNzRXZlbnQoc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50
Kj4oZXYpKTsKKyAgICB9CisgICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVJlbGVh
c2U6IHsKKyAgICAgICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50ICpnc0V2ID0gc3RhdGljX2Nh
c3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpOworICAgICAgICBRTW91c2VFdmVudCBk
dW1teUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlLCBnc0V2LT5wb3MoKSwgZ3NFdi0+
c2NyZWVuUG9zKCksIGdzRXYtPmJ1dHRvbigpLCBnc0V2LT5idXR0b25zKCksIGdzRXYtPm1vZGlm
aWVycygpKTsKKyAgICAgICAgZC0+bW91c2VSZWxlYXNlRXZlbnQoJmR1bW15RXZlbnQpOworICAg
ICAgICBldi0+c2V0QWNjZXB0ZWQoZHVtbXlFdmVudC5pc0FjY2VwdGVkKCkpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlRG91YmxlQ2xpY2s6Ci0g
ICAgICAgIGQtPm1vdXNlRG91YmxlQ2xpY2tFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2Vu
ZU1vdXNlRXZlbnQqPihldikpOworICAgIH0KKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2Vu
ZU1vdXNlUHJlc3M6IHsKKyAgICAgICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50ICpnc0V2ID0g
c3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpOworICAgICAgICBRTW91
c2VFdmVudCBkdW1teUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25QcmVzcywgZ3NFdi0+cG9zKCks
IGdzRXYtPnNjcmVlblBvcygpLCBnc0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygpLCBnc0V2
LT5tb2RpZmllcnMoKSk7CisgICAgICAgIGQtPm1vdXNlUHJlc3NFdmVudCgmZHVtbXlFdmVudCk7
CisgICAgICAgIGV2LT5zZXRBY2NlcHRlZChkdW1teUV2ZW50LmlzQWNjZXB0ZWQoKSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91c2VSZWxlYXNlOgot
ICAgICAgICBkLT5tb3VzZVJlbGVhc2VFdmVudChzdGF0aWNfY2FzdDxRR3JhcGhpY3NTY2VuZU1v
dXNlRXZlbnQqPihldikpOworICAgIH0KKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1v
dXNlRG91YmxlQ2xpY2s6IHsKKyAgICAgICAgUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50ICpnc0V2
ID0gc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Kj4oZXYpOworICAgICAgICBR
TW91c2VFdmVudCBkdW1teUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaywgZ3NFdi0+
cG9zKCksIGdzRXYtPnNjcmVlblBvcygpLCBnc0V2LT5idXR0b24oKSwgZ3NFdi0+YnV0dG9ucygp
LCBnc0V2LT5tb2RpZmllcnMoKSk7CisgICAgICAgIGQtPm1vdXNlRG91YmxlQ2xpY2tFdmVudCgm
ZHVtbXlFdmVudCk7CisgICAgICAgIGV2LT5zZXRBY2NlcHRlZChkdW1teUV2ZW50LmlzQWNjZXB0
ZWQoKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICNlbmRpZgogI2lmbmRlZiBRVF9OT19DT05U
RVhUTUVOVQogICAgIGNhc2UgUUV2ZW50OjpDb250ZXh0TWVudToKQEAgLTMxMjEsOSArMzQ5Niwx
MyBAQCBib29sIFFXZWJQYWdlOjpldmVudChRRXZlbnQgKmV2KQogICAgICAgICBkLT53aGVlbEV2
ZW50KHN0YXRpY19jYXN0PFFXaGVlbEV2ZW50Kj4oZXYpKTsKICAgICAgICAgYnJlYWs7CiAjaWYg
IWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1Nj
ZW5lV2hlZWw6Ci0gICAgICAgIGQtPndoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8UUdyYXBoaWNzU2Nl
bmVXaGVlbEV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZVdoZWVs
OiB7CisgICAgICAgIFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCAqZ3NFdiA9IHN0YXRpY19jYXN0
PFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCo+KGV2KTsKKyAgICAgICAgUVdoZWVsRXZlbnQgZHVt
bXlFdmVudChnc0V2LT5wb3MoKSwgZ3NFdi0+c2NyZWVuUG9zKCksIGdzRXYtPmRlbHRhKCksIGdz
RXYtPmJ1dHRvbnMoKSwgZ3NFdi0+bW9kaWZpZXJzKCksIGdzRXYtPm9yaWVudGF0aW9uKCkpOwor
ICAgICAgICBkLT53aGVlbEV2ZW50KCZkdW1teUV2ZW50KTsKKyAgICAgICAgZXYtPnNldEFjY2Vw
dGVkKGR1bW15RXZlbnQuaXNBY2NlcHRlZCgpKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogI2Vu
ZGlmCiAjZW5kaWYKICAgICBjYXNlIFFFdmVudDo6S2V5UHJlc3M6CkBAIC0zNjM5LDggKzQwMTgs
NyBAQCBib29sIFFXZWJQYWdlOjpleHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbiwgY29uc3Qg
RXh0ZW5zaW9uT3B0aW9uICpvcHRpb24sIEV4dAogICAgIGlmIChleHRlbnNpb24gPT0gQ2hvb3Nl
TXVsdGlwbGVGaWxlc0V4dGVuc2lvbikgewogICAgICAgICAvLyBGSVhNRTogZG8gbm90IGlnbm9y
ZSBzdWdnZXN0ZWRGaWxlcwogICAgICAgICBRU3RyaW5nTGlzdCBzdWdnZXN0ZWRGaWxlcyA9IHN0
YXRpY19jYXN0PGNvbnN0IENob29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb25PcHRpb24qPihvcHRp
b24pLT5zdWdnZXN0ZWRGaWxlTmFtZXM7Ci0gICAgICAgIFFXaWRnZXQqIHBhcmVudCA9IChkLT5j
bGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpIDogMDsKLSAgICAgICAgUVN0cmluZ0xp
c3QgbmFtZXMgPSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lcyhwYXJlbnQsIFFTdHJpbmc6
Om51bGwpOworICAgICAgICBRU3RyaW5nTGlzdCBuYW1lcyA9IFFGaWxlRGlhbG9nOjpnZXRPcGVu
RmlsZU5hbWVzKHZpZXcoKSwgUVN0cmluZzo6bnVsbCk7CiAgICAgICAgIHN0YXRpY19jYXN0PENo
b29zZU11bHRpcGxlRmlsZXNFeHRlbnNpb25SZXR1cm4qPihvdXRwdXQpLT5maWxlTmFtZXMgPSBu
YW1lczsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY2NSw2ICs0MDQzLDE0IEBA
IGJvb2wgUVdlYlBhZ2U6OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNv
bnN0CiB9CiAKIC8qIQorICogXGludGVybmFsCisgKi8KK1FXZWJQYWdlQWRhcHRlciAqUVdlYlBh
Z2U6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQ7Cit9CisKKy8qIQogICAgIEZpbmRz
IHRoZSBzcGVjaWZpZWQgc3RyaW5nLCBcYSBzdWJTdHJpbmcsIGluIHRoZSBwYWdlLCB1c2luZyB0
aGUgZ2l2ZW4gXGEgb3B0aW9ucy4KIAogICAgIElmIHRoZSBIaWdobGlnaHRBbGxPY2N1cnJlbmNl
cyBmbGFnIGlzIHBhc3NlZCwgdGhlIGZ1bmN0aW9uIHdpbGwgaGlnaGxpZ2h0IGFsbCBvY2N1cnJl
bmNlcwpAQCAtMzczMiw4ICs0MTE4LDcgQEAgUVN0cmluZyBRV2ViUGFnZTo6Y2hvb3NlRmlsZShR
V2ViRnJhbWUgKnBhcmVudEZyYW1lLCBjb25zdCBRU3RyaW5nJiBzdWdnZXN0ZWRGaWwKIHsKICAg
ICBRX1VOVVNFRChwYXJlbnRGcmFtZSkKICNpZm5kZWYgUVRfTk9fRklMRURJQUxPRwotICAgIFFX
aWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpIDog
MDsKLSAgICByZXR1cm4gUUZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZShwYXJlbnQsIFFTdHJp
bmc6Om51bGwsIHN1Z2dlc3RlZEZpbGUpOworICAgIHJldHVybiBRRmlsZURpYWxvZzo6Z2V0T3Bl
bkZpbGVOYW1lKHZpZXcoKSwgUVN0cmluZzo6bnVsbCwgc3VnZ2VzdGVkRmlsZSk7CiAjZWxzZQog
ICAgIHJldHVybiBRU3RyaW5nOjpudWxsOwogI2VuZGlmCkBAIC0zNzUwLDExICs0MTM1LDcgQEAg
UVN0cmluZyBRV2ViUGFnZTo6Y2hvb3NlRmlsZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lLCBjb25z
dCBRU3RyaW5nJiBzdWdnZXN0ZWRGaWwKICovCiB2b2lkIFFXZWJQYWdlOjpzZXROZXR3b3JrQWNj
ZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpCiB7Ci0gICAgaWYgKG1h
bmFnZXIgPT0gZC0+bmV0d29ya01hbmFnZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZC0+
bmV0d29ya01hbmFnZXIgJiYgZC0+bmV0d29ya01hbmFnZXItPnBhcmVudCgpID09IHRoaXMpCi0g
ICAgICAgIGRlbGV0ZSBkLT5uZXR3b3JrTWFuYWdlcjsKLSAgICBkLT5uZXR3b3JrTWFuYWdlciA9
IG1hbmFnZXI7CisgICAgZC0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIobWFuYWdlcik7CiB9CiAK
IC8qIQpAQCAtMzc2NSwxMSArNDE0Niw3IEBAIHZvaWQgUVdlYlBhZ2U6OnNldE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdlcikKICovCiBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIgKlFXZWJQYWdlOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFkLT5uZXR3b3JrTWFuYWdlcikgewotICAgICAgICBRV2ViUGFnZSAqdGhhdCA9IGNv
bnN0X2Nhc3Q8UVdlYlBhZ2UgKj4odGhpcyk7Ci0gICAgICAgIHRoYXQtPmQtPm5ldHdvcmtNYW5h
Z2VyID0gbmV3IFFOZXR3b3JrQWNjZXNzTWFuYWdlcih0aGF0KTsKLSAgICB9Ci0gICAgcmV0dXJu
IGQtPm5ldHdvcmtNYW5hZ2VyOworICAgIHJldHVybiBkLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigp
OwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCmluZGV4IGIyY2FhMTMxZGVhNjUwNWU1
ZjBhYjQ3ZGNkNDkxNzVjMjVlMTgxN2MuLmY5NzVhYjA1Njc3Y2NmNWJkMzJiM2QyYTVmN2Y0YjRh
MTVjYjdiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaApAQCAtNDYsNiArNDYsNyBAQCBjbGFz
cyBRV2ViRnJhbWVEYXRhOwogY2xhc3MgUVdlYkhpc3RvcnlJdGVtOwogY2xhc3MgUVdlYkhpdFRl
c3RSZXN1bHQ7CiBjbGFzcyBRV2ViTmV0d29ya0ludGVyZmFjZTsKK2NsYXNzIFFXZWJQYWdlQWRh
cHRlcjsKIGNsYXNzIFFXZWJQYWdlUHJpdmF0ZTsKIGNsYXNzIFFXZWJQbHVnaW5GYWN0b3J5Owog
Y2xhc3MgUVdlYlNlY3VyaXR5T3JpZ2luOwpAQCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgZXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24sIGNvbnN0IEV4dGVu
c2lvbk9wdGlvbiAqb3B0aW9uID0gMCwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQgPSAwKTsKICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29u
c3Q7CiAKLSAgICBpbmxpbmUgUVdlYlBhZ2VQcml2YXRlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVy
biBkOyB9CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBoYW5kbGUoKSBjb25zdDsKIAogcHVibGljIFFf
U0xPVFM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZV9wLmgKaW5kZXggNzk0MzIyOTkxMzIxYmY3YTAwYzM2NjJiOWFiOTI2ZjgwN2Rj
MzQwMi4uMjEzNmUzY2JjMTU5ZTg1MmEyY2Y1MmFhOTU2N2FhNTA3ZDc5YzlkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlX3AuaApAQCAtMjEsMjkgKzIxLDIyIEBACiAjaWZuZGVmIFFXRUJQQUdF
X1BfSAogI2RlZmluZSBRV0VCUEFHRV9QX0gKIAotI2luY2x1ZGUgPFFQb2ludGVyPgorI2luY2x1
ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVk
ZSAicXdlYmhpc3RvcnkuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgogCisjaW5jbHVkZSA8UVBv
aW50ZXI+CiAjaW5jbHVkZSA8cWJhc2ljdGltZXIuaD4KLSNpbmNsdWRlIDxxbmV0d29ya3Byb3h5
Lmg+CiAjaW5jbHVkZSA8cWV2ZW50Lmg+CiAjaW5jbHVkZSA8cWdlc3R1cmUuaD4KICNpbmNsdWRl
IDxxZ3JhcGhpY3NzY2VuZWV2ZW50Lmg+CisjaW5jbHVkZSA8cWdyYXBoaWNzd2lkZ2V0Lmg+Cisj
aW5jbHVkZSA8cW5ldHdvcmtwcm94eS5oPgogCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLSNpbmNs
dWRlICJxd2ViaGlzdG9yeS5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotCi0jaW5jbHVkZSAi
SW50UG9pbnQuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi0jaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIGNsYXNzIENocm9tZUNsaWVudFF0OwogICAgIGNsYXNzIENvbnRleHRNZW51Q2xpZW50
UXQ7CiAgICAgY2xhc3MgQ29udGV4dE1lbnVJdGVtOwogICAgIGNsYXNzIENvbnRleHRNZW51OwpA
QCAtNTQsNyArNDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW50UmVjdDsK
ICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vZGVMaXN0OwotICAgIGNsYXNzIFBhZ2U7CiAg
ICAgY2xhc3MgRnJhbWU7CiB9CiAKQEAgLTY0LDggKzU2LDEwIEBAIGNsYXNzIFFNZW51OwogY2xh
c3MgUUJpdEFycmF5OwogUVRfRU5EX05BTUVTUEFDRQogCitjbGFzcyBRdFBsdWdpbldpZGdldEFk
YXB0ZXI7CiBjbGFzcyBRV2ViSW5zcGVjdG9yOwotY2xhc3MgUVdlYlBhZ2VDbGllbnQ7CitjbGFz
cyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgVW5kb1N0ZXBRdDsKIAogY2xhc3MgUXRWaWV3cG9y
dEF0dHJpYnV0ZXNQcml2YXRlIDogcHVibGljIFFTaGFyZWREYXRhIHsKIHB1YmxpYzoKQEAgLTc2
LDEzICs3MCw3MyBAQCBwdWJsaWM6CiAgICAgUVdlYlBhZ2U6OlZpZXdwb3J0QXR0cmlidXRlcyog
cTsKIH07CiAKLWNsYXNzIFFXZWJQYWdlUHJpdmF0ZSB7CitjbGFzcyBRV2ViUGFnZVByaXZhdGUg
OiBwdWJsaWMgUVdlYlBhZ2VBZGFwdGVyIHsKIHB1YmxpYzoKICAgICBRV2ViUGFnZVByaXZhdGUo
UVdlYlBhZ2UqKTsKICAgICB+UVdlYlBhZ2VQcml2YXRlKCk7CiAKICAgICBzdGF0aWMgV2ViQ29y
ZTo6UGFnZSogY29yZShjb25zdCBRV2ViUGFnZSopOwotICAgIHN0YXRpYyBRV2ViUGFnZVByaXZh
dGUqIHByaXYoUVdlYlBhZ2UqKTsKKworICAgIC8vIEFkYXB0ZXIgaW1wbGVtZW50YXRpb24KKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvdygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgUVJlY3QgJikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBRU2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFFXZWJQYWdlQWRhcHRlciogY3JlYXRlV2luZG93KGJvb2wgLypkaWFsb2cqLykgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBRT2JqZWN0KiBoYW5kbGUoKSBPVkVSUklERSB7IHJldHVybiBxOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGphdmFTY3JpcHRDb25zb2xlTWVzc2FnZShjb25zdCBRU3RyaW5nJiBt
ZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgUVN0cmluZyYgc291cmNlSUQpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRlciosIGNv
bnN0IFFTdHJpbmcmIG1zZykgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGphdmFTY3JpcHRD
b25maXJtKFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBtc2cpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25z
dCBRU3RyaW5nJiBtc2csIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUVN0cmluZyogcmVz
dWx0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1l
QWRhcHRlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZVF1b3RhRXhjZWVk
ZWQoUVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFTdHJpbmcmIGRhdGFiYXNlTmFtZSkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVRdW90YUV4Y2VlZGVkKFFXZWJT
ZWN1cml0eU9yaWdpbiosIHF1aW50NjQgZGVmYXVsdE9yaWdpblF1b3RhLCBxdWludDY0IHRvdGFs
U3BhY2VOZWVkZWQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0
IFFTdHJpbmcmKSBPVkVSUklERTsKKyNpZiBVU0UoUVRfTVVMVElNRURJQSkKKyAgICB2aXJ0dWFs
IFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KCkgT1ZFUlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIFFXZWJGcmFtZUFkYXB0ZXIqIG1haW5G
cmFtZUFkYXB0ZXIoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGNob29zZUZp
bGVzKFFXZWJGcmFtZUFkYXB0ZXIqLCBib29sIGFsbG93TXVsdGlwbGUsIGNvbnN0IFFTdHJpbmdM
aXN0JiBzdWdnZXN0ZWRGaWxlTmFtZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUUNvbG9yIGNv
bG9yU2VsZWN0aW9uUmVxdWVzdGVkKGNvbnN0IFFDb2xvciYgc2VsZWN0ZWRDb2xvcikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBRV2ViU2VsZWN0TWV0aG9kKiBjcmVhdGVTZWxlY3RQb3B1cCgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgUVJlY3Qgdmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RlZChR
V2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RDYW5jZWxsZWQoUVdlYkZyYW1lQWRhcHRlciopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJh
bWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbnNQZXJt
aXNzaW9uUmVxdWVzdENhbmNlbGxlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgbWljcm9Gb2N1c0NoYW5nZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgdHJpZ2dlckNvcHlBY3Rpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJpZ2dl
ckFjdGlvbkZvcktleUV2ZW50KFFLZXlFdmVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclVuZG9TdGFjaygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNhblJlZG8oKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5kbygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBy
ZWRvKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVuZG9TdGVwKFFTaGFyZWRQ
b2ludGVyPFVuZG9TdGVwUXQ+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGVk
aXRvckNvbW1hbmRGb3JLZXlFdmVudChRS2V5RXZlbnQqKSBPVkVSUklERTsKKworICAgIHZvaWQg
dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUU9iamVj
dCogaW5zcGVjdG9ySGFuZGxlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kKFFPYmplY3QqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5z
cGVjdG9yV2luZG93VGl0bGUoY29uc3QgUVN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVXZWJJbnNwZWN0b3IoUU9iamVjdCoqIGluc3BlY3RvclZpZXcsIFFXZWJQYWdl
QWRhcHRlcioqIGluc3BlY3RvclBhZ2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUVN0cmluZ0xp
c3QgbWVudUFjdGlvbnNBc1RleHQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdFZp
ZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGFjY2Vw
dE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRTmV0d29ya1JlcXVl
c3QmLCBpbnQgdHlwZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXRSZXN0b3JlRnJh
bWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKiwgUVdl
Ykhpc3RvcnlJdGVtKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGVtaXREb3dubG9hZFJl
cXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW1pdEZyYW1lQ3JlYXRlZChRV2ViRnJhbWVBZGFwdGVyKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBRU3RyaW5nIHVzZXJBZ2VudEZvclVybChjb25zdCBRVXJsICZ1cmwpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIHEtPnVzZXJBZ2VudEZvclVybCh1cmwpOyB9CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRXJyb3JQYWdlRXh0ZW5zaW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gcS0+
c3VwcG9ydHNFeHRlbnNpb24oUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvbik7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgZXJyb3JQYWdlRXh0ZW5zaW9uKEVycm9yUGFnZU9wdGlvbiAqLCBFcnJvclBh
Z2VSZXR1cm4gKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRdFBsdWdpbldpZGdldEFkYXB0ZXIq
IGNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nICYsIGNvbnN0IFFVcmwgJiwgY29uc3QgUVN0cmlu
Z0xpc3QgJiwgY29uc3QgUVN0cmluZ0xpc3QgJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBRdFBs
dWdpbldpZGdldEFkYXB0ZXIqIGFkYXB0ZXJGb3JXaWRnZXQoUU9iamVjdCAqKSBjb25zdCBPVkVS
UklERTsKIAogICAgIHZvaWQgY3JlYXRlTWFpbkZyYW1lKCk7CiAjaWZuZGVmIFFUX05PX0NPTlRF
WFRNRU5VCkBAIC05MiwyMyArMTQ2LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIF9xX3dlYkFjdGlv
blRyaWdnZXJlZChib29sIGNoZWNrZWQpOwogICAgIHZvaWQgX3FfY2xlYW51cExlYWtNZXNzYWdl
cygpOwogICAgIHZvaWQgdXBkYXRlQWN0aW9uKFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uKTsK
LSAgICB2b2lkIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVFZGl0
b3JBY3Rpb25zKCk7CiAKLSAgICBRQ29sb3IgY29sb3JTZWxlY3Rpb25SZXF1ZXN0ZWQoY29uc3Qg
UUNvbG9yJiBzZWxlY3RlZENvbG9yKTsKLQogICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVu
dCopOwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBtb3VzZU1vdmVFdmVudChUKik7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBtb3VzZVByZXNzRXZlbnQoVCopOwotICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFQqKTsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBUPiB2b2lkIG1vdXNlVHJpcGxlQ2xpY2tFdmVudChUKik7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4gdm9pZCBtb3VzZVJlbGVhc2VFdmVudChUKik7CisgICAgdm9pZCBtb3VzZU1vdmVF
dmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50
Kik7CisgICAgdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2
b2lkIG1vdXNlVHJpcGxlQ2xpY2tFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgbW91c2VS
ZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqKTsKICNpZm5kZWYgUVRfTk9fQ09OVEVYVE1FTlUKICAg
ICB2b2lkIGNvbnRleHRNZW51RXZlbnQoY29uc3QgUVBvaW50JiBnbG9iYWxQb3MpOwogI2VuZGlm
CiAjaWZuZGVmIFFUX05PX1dIRUVMRVZFTlQKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHdo
ZWVsRXZlbnQoVCopOworICAgIHZvaWQgd2hlZWxFdmVudChRV2hlZWxFdmVudCopOwogI2VuZGlm
CiAgICAgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOwogICAgIHZvaWQga2V5UmVsZWFz
ZUV2ZW50KFFLZXlFdmVudCopOwpAQCAtMTU5LDE2ICsyMTAsMTIgQEAgcHVibGljOgogICAgIFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBx
dWludDE2IGluc3BlY3RvclNlcnZlclBvcnQoKTsKIAotICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzKCk7Ci0KICNpZm5kZWYgUVRfTk9fU0hPUlRDVVQKICAg
ICBzdGF0aWMgUVdlYlBhZ2U6OldlYkFjdGlvbiBlZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChRS2V5
RXZlbnQqIGV2ZW50KTsKICNlbmRpZgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlZGl0b3JDb21t
YW5kRm9yV2ViQWN0aW9ucyhRV2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlvbik7CiAKICAgICBRV2Vi
UGFnZSAqcTsKLSAgICBXZWJDb3JlOjpQYWdlICpwYWdlOwotICAgIE93blB0cjxRV2ViUGFnZUNs
aWVudD4gY2xpZW50OwogICAgIFFQb2ludGVyPFFXZWJGcmFtZT4gbWFpbkZyYW1lOwogCiAjaWZu
ZGVmIFFUX05PX1VORE9TVEFDSwpAQCAtMTc3LDcgKzIyNCw2IEBAIHB1YmxpYzoKIAogICAgIFFQ
b2ludGVyPFFXaWRnZXQ+IHZpZXc7CiAKLSAgICBib29sIGluc2lkZU9wZW5DYWxsOwogICAgIHF1
aW50NjQgbV90b3RhbEJ5dGVzOwogICAgIHF1aW50NjQgbV9ieXRlc1JlY2VpdmVkOwogCkBAIC0x
ODYsMTUgKzIzMiw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2xpY2tDYXVzZWRGb2N1czsKIAot
ICAgIGJvb2wgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSwgY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBRV2ViUGFnZTo6TmF2aWdhdGlvblR5cGUgdHlwZSk7
Ci0gICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrTWFuYWdlcjsKLQotICAgIGJvb2wg
Zm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudDsKLSAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZDsKLSAgICBib29sIHNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiAgICAgUVdl
YlBhZ2U6OkxpbmtEZWxlZ2F0aW9uUG9saWN5IGxpbmtQb2xpY3k7CiAKLSAgICBRU2l6ZSB2aWV3
cG9ydFNpemU7CisgICAgUVNpemUgbV92aWV3cG9ydFNpemU7CiAgICAgUVNpemUgZml4ZWRMYXlv
dXRTaXplOwogCiAgICAgUVdlYkhpc3RvcnkgaGlzdG9yeTsKQEAgLTIwMiwyMCArMjQyLDE1IEBA
IHB1YmxpYzoKICNpZm5kZWYgUVRfTk9fQ09OVEVYVE1FTlUKICAgICBRUG9pbnRlcjxRTWVudT4g
Y3VycmVudENvbnRleHRNZW51OwogI2VuZGlmCi0gICAgUVdlYlNldHRpbmdzICpzZXR0aW5nczsK
ICAgICBRUGFsZXR0ZSBwYWxldHRlOwogICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQ7CiAKICAgICBR
QWN0aW9uICphY3Rpb25zW1FXZWJQYWdlOjpXZWJBY3Rpb25Db3VudF07CiAKLSAgICBRV2ViUGx1
Z2luRmFjdG9yeSAqcGx1Z2luRmFjdG9yeTsKLQogICAgIFFXaWRnZXQqIGluc3BlY3RvckZyb250
ZW5kOwogICAgIFFXZWJJbnNwZWN0b3IqIGluc3BlY3RvcjsKICAgICBib29sIGluc3BlY3Rvcklz
SW50ZXJuYWxPbmx5OyAvLyBUcnVlIGlmIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSW5zcGVjdCBjb250
ZXh0IG1lbnUgYWN0aW9uCiAgICAgUXQ6OkRyb3BBY3Rpb24gbV9sYXN0RHJvcEFjdGlvbjsKLQot
ICAgIHN0YXRpYyBib29sIGRydFJ1bjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJzZXR0aW5ncy5jcHAKaW5kZXggNzY4YzgwMjU2ZWMxMjY2MTFkM2E4ZjgyN2NkMWVjOTMxNzJm
M2E4My4uNzRkODUyNGQ4YzUyZTNjODA4NTU1ZGU1NDkzMjYxY2YzODQzZjI2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC0yMCw0MSArMjAsMzkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIKIAotI2luY2x1ZGUgInF3ZWJw
YWdlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogI2luY2x1ZGUgInF3ZWJwbHVnaW5kYXRh
YmFzZV9wLmgiCiAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTWVt
b3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2luY2x1
ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9udENhY2hl
LmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpZiBF
TkFCTEUoSUNPTkRBVEFCQVNFKQogI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVudFF0LmgiCiAj
ZW5kaWYKICNpbmNsdWRlICJJbml0V2ViQ29yZVF0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk5l
dHdvcmtTdGF0ZU5vdGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VD
YWNoZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1
ZGUgIkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVk
ZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRl
IDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+CisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlIDxRRGlyPgorI2luY2x1ZGUgPFFGaWxlSW5mbz4KKyNpbmNsdWRl
IDxRRm9udD4KKyNpbmNsdWRlIDxRR3VpQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUhhc2g+CiAj
aW5jbHVkZSA8UVNoYXJlZERhdGE+CisjaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+CiAjaW5jbHVk
ZSA8UVVybD4KLSNpbmNsdWRlIDxRRmlsZUluZm8+Ci0jaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCiAKLSNpbmNsdWRlICJOZXR3b3JrU3RhdGVOb3Rp
Zmllci5oIgogCiB2b2lkIFFXRUJLSVRfRVhQT1JUIHF0X25ldHdvcmtBY2Nlc3NBbGxvd2VkKGJv
b2wgaXNBbGxvd2VkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNl
dHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAppbmRleCA1ZTdk
M2UxYjRkM2Q0YzgxMzU2ODEyYzkyYjFmODRiNTA4ZDQwZTM5Li40OTcyMWI3Y2I5M2QyYzU4ZWY2
ZTRhNDg4YzNkNzBiMmIwNWM0YjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaApA
QCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgUVdlYlNldHRpbmdzUHJpdmF0
ZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gZDsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAgICAgZnJpZW5kIGNsYXNzIFFXZWJQYWdlUHJpdmF0ZTsK
ICAgICBmcmllbmQgY2xhc3MgUVdlYlNldHRpbmdzUHJpdmF0ZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnZpZXcuY3BwCmluZGV4IDlmMmFmNTc4N2VlY2JjZGUwMjJhOGUwMWZiZmIwNWNjNTBiMWM0NTYu
LjJlZGE2YTE4ZWZkMTc4MjU4NDYyZjE1Y2I5Mjk1MTRkOGQwMDkzMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Vidmlldy5jcHAKQEAgLTIyNyw5ICsyMjcsOSBAQCB2b2lkIFFXZWJWaWV3UHJpdmF0ZTo6
ZGV0YWNoQ3VycmVudFBhZ2UoKQogICAgIC8vIHRvIGRlc3Ryb3kgaXQuCiAKICAgICBpZiAocGFn
ZS0+ZC0+Y2xpZW50ICYmIHBhZ2UtPmQtPmNsaWVudC0+aXNRV2lkZ2V0Q2xpZW50KCkpCi0gICAg
ICAgIHBhZ2UtPmQtPmNsaWVudC5jbGVhcigpOworICAgICAgICBwYWdlLT5kLT5jbGllbnQucmVz
ZXQoKTsKIAotICAgIHBhZ2UtPmQtPmNsaWVudC5yZWxlYXNlKCk7CisgICAgcGFnZS0+ZC0+Y2xp
ZW50LnRha2UoKTsKIAogICAgIC8vIGlmIHRoZSBwYWdlIHdhcyBjcmVhdGVkIGJ5IHVzLCB3ZSBv
d24gaXQgYW5kIG5lZWQgdG8KICAgICAvLyBkZXN0cm95IGl0IGFzIHdlbGwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGVh
YWViMDEyZjg2ZDBhNTMxMTBiNTc5NzczZjZkNWI4YzA1ZDkzNDIuLmUzNjM1YzA0ZjkzZTg5MWM2
ZGNjOTQ4ZDJhOWFlMjkwNDg2N2MzODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCkBAIC01MywyNyArNTMsMjUgQEAKICNpbmNs
dWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIlBv
cHVwTWVudVF0LmgiCi0jaW5jbHVkZSAiUXRGYWxsYmFja1dlYlBvcHVwLmgiCisjaW5jbHVkZSAi
UVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1
ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNs
dWRlICJTZWFyY2hQb3B1cE1lbnVRdC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisj
aW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50
cy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCi0KLSNpbmNsdWRlICJxZ3JhcGhpY3N3
ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5o
IgotI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVn
aW4uaCIKICNpbmNsdWRlICJxd2Vic2VjdXJpdHlvcmlnaW4uaCIKICNpbmNsdWRlICJxd2Vic2Vj
dXJpdHlvcmlnaW5fcC5oIgotI2luY2x1ZGUgInF3ZWJ2aWV3LmgiCisjaW5jbHVkZSAicXdlYnNl
dHRpbmdzLmgiCisKICNpbmNsdWRlIDxxYWJzdHJhY3RhbmltYXRpb24uaD4KICNpbmNsdWRlIDxx
ZGVidWcuaD4KICNpbmNsdWRlIDxxZXZlbnRsb29wLmg+Ci0jaW5jbHVkZSA8cXRvb2x0aXAuaD4K
KyNpbmNsdWRlIDxxd2luZG93Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYgRU5B
QkxFKFZJREVPKSAmJiAoKFVTRShHU1RSRUFNRVIpICYmICFkZWZpbmVkKEdTVF9BUElfVkVSU0lP
Tl8xKSkgfHwgVVNFKFFUX01VTFRJTUVESUEpIHx8IFVTRShRVEtJVCkpCkBAIC0xMjQsOCArMTIy
LDggQEAgcHJpdmF0ZToKIAogYm9vbCBDaHJvbWVDbGllbnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0Nh
bGxiYWNrcyA9IGZhbHNlOwogCi1DaHJvbWVDbGllbnRRdDo6Q2hyb21lQ2xpZW50UXQoUVdlYlBh
Z2UqIHdlYlBhZ2UpCi0gICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK0Nocm9tZUNsaWVudFF0OjpD
aHJvbWVDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIqIHdlYlBhZ2VBZGFwdGVyKQorICAgIDogbV93
ZWJQYWdlKHdlYlBhZ2VBZGFwdGVyKQogICAgICwgbV9ldmVudExvb3AoMCkKICNpZiBFTkFCTEUo
VklERU8pICYmICgoVVNFKEdTVFJFQU1FUikgJiYgIWRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEp
KSB8fCBVU0UoUVRfTVVMVElNRURJQSkgfHwgVVNFKFFUS0lUKSkKICAgICAsIG1fZnVsbFNjcmVl
blZpZGVvKDApCkBAIC0xNDgsOCArMTQ2LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0V2lu
ZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0IG1fd2ViUGFnZS0+Z2VvbWV0cnlDaGFuZ2VSZXF1ZXN0
ZWQoUVJlY3QocVJvdW5kKHJlY3QueCgpKSwgcVJvdW5kKHJlY3QueSgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBxUm91bmQocmVjdC53aWR0aCgpKSwgcVJvdW5kKHJlY3QuaGVpZ2h0
KCkpKSk7CisgICAgbV93ZWJQYWdlLT5zZXRXaW5kb3dSZWN0KFFSZWN0KHFSb3VuZChyZWN0Lngo
KSksIHFSb3VuZChyZWN0LnkoKSksIHFSb3VuZChyZWN0LndpZHRoKCkpLCBxUm91bmQocmVjdC5o
ZWlnaHQoKSkpKTsKIH0KIAogLyohCkBAIC0xODIsMTEgKzE3OSw3IEBAIHZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OmZvY3VzKCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIFFXaWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHZpZXctPnNldEZvY3VzKCk7CisgICAgbV93ZWJQYWdlLT5z
ZXRGb2N1cygpOwogfQogCiAKQEAgLTE5NCwxMCArMTg3LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRR
dDo6dW5mb2N1cygpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAg
ICBRV2lkZ2V0KiB2aWV3ID0gbV93ZWJQYWdlLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAg
ICAgICByZXR1cm47Ci0gICAgdmlldy0+Y2xlYXJGb2N1cygpOworICAgIG1fd2ViUGFnZS0+dW5m
b2N1cygpOwogfQogCiBib29sIENocm9tZUNsaWVudFF0OjpjYW5UYWtlRm9jdXMoRm9jdXNEaXJl
Y3Rpb24pCkBAIC0yMjcsMjQgKzIxNywxOCBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpmb2N1c2Vk
RnJhbWVDaGFuZ2VkKEZyYW1lKikKIAogUGFnZSogQ2hyb21lQ2xpZW50UXQ6OmNyZWF0ZVdpbmRv
dyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdpbmRvd0Zl
YXR1cmVzJiBmZWF0dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpCiB7Ci0gICAgUVdlYlBh
Z2UqIG5ld1BhZ2UgPSBtX3dlYlBhZ2UtPmNyZWF0ZVdpbmRvdyhmZWF0dXJlcy5kaWFsb2cgPyBR
V2ViUGFnZTo6V2ViTW9kYWxEaWFsb2cgOiBRV2ViUGFnZTo6V2ViQnJvd3NlcldpbmRvdyk7Cisg
ICAgUVdlYlBhZ2VBZGFwdGVyKiBuZXdQYWdlID0gbV93ZWJQYWdlLT5jcmVhdGVXaW5kb3coZmVh
dHVyZXMuZGlhbG9nKTsKICAgICBpZiAoIW5ld1BhZ2UpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgLy8gQSBjYWxsIHRvIFFXZWJQYWdlOjptYWluRnJhbWUoKSBpbXBsaWNpdGx5IGNyZWF0ZXMg
dGhlIG1haW4gZnJhbWUuCi0gICAgLy8gTWFrZSBzdXJlIGl0IGV4aXN0cywgYXMgV2ViQ29yZSBl
eHBlY3RzIGl0IHdoZW4gcmV0dXJuaW5nIGZyb20gdGhpcyBjYWxsLgotICAgIG5ld1BhZ2UtPm1h
aW5GcmFtZSgpOwotICAgIHJldHVybiBuZXdQYWdlLT5kLT5wYWdlOworICAgIHJldHVybiBuZXdQ
YWdlLT5wYWdlOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzaG93KCkKIHsKICAgICBpZiAo
IW1fd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIFFXaWRnZXQqIHZpZXcgPSBtX3dlYlBh
Z2UtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICB2aWV3LT53
aW5kb3coKS0+c2hvdygpOworICAgIG1fd2ViUGFnZS0+c2hvdygpOwogfQogCiAKQEAgLTI2Niw3
ICsyNTAsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpydW5Nb2RhbCgpCiB2b2lkIENocm9tZUNs
aWVudFF0OjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIHRvb2xCYXJz
VmlzaWJsZSA9IHZpc2libGU7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnRvb2xCYXJWaXNpYmlsaXR5
Q2hhbmdlUmVxdWVzdGVkKHZpc2libGUpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2Qo
bV93ZWJQYWdlLT5oYW5kbGUoKSwgInRvb2xCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVzdGVkIiwg
UV9BUkcoYm9vbCwgdmlzaWJsZSkpOwogfQogCiAKQEAgLTI3OCw3ICsyNjIsNyBAQCBib29sIENo
cm9tZUNsaWVudFF0Ojp0b29sYmFyc1Zpc2libGUoKQogCiB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSAgICBlbWl0IG1fd2ViUGFnZS0+
c3RhdHVzQmFyVmlzaWJpbGl0eUNoYW5nZVJlcXVlc3RlZCh2aXNpYmxlKTsKKyAgICBRTWV0YU9i
amVjdDo6aW52b2tlTWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJzdGF0dXNCYXJWaXNpYmls
aXR5Q2hhbmdlUmVxdWVzdGVkIiwgUV9BUkcoYm9vbCwgdmlzaWJsZSkpOwogICAgIHN0YXR1c0Jh
clZpc2libGUgPSB2aXNpYmxlOwogfQogCkBAIC0zMDUsNyArMjg5LDcgQEAgYm9vbCBDaHJvbWVD
bGllbnRRdDo6c2Nyb2xsYmFyc1Zpc2libGUoKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0TWVu
dWJhclZpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1lbnVCYXJWaXNpYmxlID0gdmlzaWJs
ZTsKLSAgICBlbWl0IG1fd2ViUGFnZS0+bWVudUJhclZpc2liaWxpdHlDaGFuZ2VSZXF1ZXN0ZWQo
dmlzaWJsZSk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRs
ZSgpLCAibWVudUJhclZpc2liaWxpdHlDaGFuZ2VSZXF1ZXN0ZWQiLCBRX0FSRyhib29sLCB2aXNp
YmxlKSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6Om1lbnViYXJWaXNpYmxlKCkKQEAgLTMx
OCw4ICszMDIsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRSZXNpemFibGUoYm9vbCkKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudFF0OjphZGRNZXNzYWdl
VG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCit2b2lk
IENocm9tZUNsaWVudFF0OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKICAgICBRU3RyaW5nIHggPSBtZXNz
YWdlOwogICAgIFFTdHJpbmcgeSA9IHNvdXJjZUlEOwpAQCAtMzQzLDMwICszMjYsMjYgQEAgYm9v
bCBDaHJvbWVDbGllbnRRdDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgRnJhbWUqIGYKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6Y2xvc2VXaW5kb3dT
b29uKCkKIHsKLSAgICBtX3dlYlBhZ2UtPmQtPnBhZ2UtPnNldEdyb3VwTmFtZShTdHJpbmcoKSk7
Ci0gICAgbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+ZC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxs
TG9hZGVycygpOwotICAgIGVtaXQgbV93ZWJQYWdlLT53aW5kb3dDbG9zZVJlcXVlc3RlZCgpOwor
ICAgIG1fd2ViUGFnZS0+cGFnZS0+c2V0R3JvdXBOYW1lKFN0cmluZygpKTsKKyAgICBtX3dlYlBh
Z2UtPnBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKKyAgICBR
TWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJ3aW5kb3dDbG9z
ZVJlcXVlc3RlZCIpOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpydW5KYXZhU2NyaXB0QWxl
cnQoRnJhbWUqIGYsIGNvbnN0IFN0cmluZyYgbXNnKQogewotICAgIFFTdHJpbmcgeCA9IG1zZzsK
LSAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KGYtPmxv
YWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLT5vcmlnaW5hdGluZ09iamVjdCgpKTsKLSAgICBt
X3dlYlBhZ2UtPmphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZSwgeCk7CisgICAgbV93ZWJQYWdlLT5q
YXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lQWRhcHRlcjo6a2l0KGYpLCBtc2cpOwogfQogCiBib29s
IENocm9tZUNsaWVudFF0OjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSogZiwgY29uc3QgU3Ry
aW5nJiBtc2cpCiB7Ci0gICAgUVN0cmluZyB4ID0gbXNnOwotICAgIFFXZWJGcmFtZSogd2ViRnJh
bWUgPSBxb2JqZWN0X2Nhc3Q8UVdlYkZyYW1lKj4oZi0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250
ZXh0KCktPm9yaWdpbmF0aW5nT2JqZWN0KCkpOwotICAgIHJldHVybiBtX3dlYlBhZ2UtPmphdmFT
Y3JpcHRDb25maXJtKHdlYkZyYW1lLCB4KTsKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5qYXZhU2Ny
aXB0Q29uZmlybShRV2ViRnJhbWVBZGFwdGVyOjpraXQoZiksIG1zZyk7CiB9CiAKIGJvb2wgQ2hy
b21lQ2xpZW50UXQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqIGYsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KQogewog
ICAgIFFTdHJpbmcgeCA9IHJlc3VsdDsKLSAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gcW9iamVj
dF9jYXN0PFFXZWJGcmFtZSo+KGYtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLT5vcmln
aW5hdGluZ09iamVjdCgpKTsKLSAgICBib29sIHJjID0gbV93ZWJQYWdlLT5qYXZhU2NyaXB0UHJv
bXB0KHdlYkZyYW1lLCAoUVN0cmluZyltZXNzYWdlLCAoUVN0cmluZylkZWZhdWx0VmFsdWUsICZ4
KTsKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZUFkYXB0ZXI6Omtp
dChmKTsKKyAgICBib29sIHJjID0gbV93ZWJQYWdlLT5qYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1l
LCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsICZ4KTsKIAogICAgIC8vIEZpeCB1cCBhIHF1aXJrIGlu
IHRoZSBRSW5wdXREaWFsb2cgY2xhc3MuIElmIG5vIGlucHV0IGhhcHBlbmVkIHRoZSBzdHJpbmcg
c2hvdWxkIGJlIGVtcHR5CiAgICAgLy8gYnV0IGl0IGlzIG51bGwuIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA5MTQuCkBAIC0zODEsMTkgKzM2MCwxOSBAQCBi
b29sIENocm9tZUNsaWVudFF0OjpydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiBmLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0CiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRTdGF0dXNiYXJU
ZXh0KGNvbnN0IFN0cmluZyYgbXNnKQogewogICAgIFFTdHJpbmcgeCA9IG1zZzsKLSAgICBlbWl0
IG1fd2ViUGFnZS0+c3RhdHVzQmFyTWVzc2FnZSh4KTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tl
TWV0aG9kKG1fd2ViUGFnZS0+aGFuZGxlKCksICJzdGF0dXNCYXJNZXNzYWdlIiwgUV9BUkcoUVN0
cmluZywgeCkpOwogfQogCiBib29sIENocm9tZUNsaWVudFF0OjpzaG91bGRJbnRlcnJ1cHRKYXZh
U2NyaXB0KCkKIHsKICAgICBib29sIHNob3VsZEludGVycnVwdCA9IGZhbHNlOwotICAgIFFNZXRh
T2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLCAic2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dCIsIFF0OjpEaXJlY3RDb25uZWN0aW9uLCBRX1JFVFVSTl9BUkcoYm9vbCwgc2hvdWxkSW50ZXJy
dXB0KSk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgp
LCAic2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCIsIFF0OjpEaXJlY3RDb25uZWN0aW9uLCBRX1JF
VFVSTl9BUkcoYm9vbCwgc2hvdWxkSW50ZXJydXB0KSk7CiAgICAgcmV0dXJuIHNob3VsZEludGVy
cnVwdDsKIH0KIAogS2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50UXQ6OmtleWJvYXJkVUlNb2Rl
KCkKIHsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5zZXR0aW5ncygpLT50ZXN0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbikKKyAgICByZXR1cm4gbV93ZWJQ
YWdlLT5zZXR0aW5ncy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJ
bkZvY3VzQ2hhaW4pCiAgICAgICAgID8gS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcyA6IEtleWJv
YXJkQWNjZXNzRGVmYXVsdDsKIH0KIApAQCAtNDA3LDExICszODYsMTAgQEAgSW50UmVjdCBDaHJv
bWVDbGllbnRRdDo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAogICAgIGlmICghcGFnZUNsaWVu
dCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIFFXaWRnZXQqIG93bmVyV2lkZ2V0
ID0gcGFnZUNsaWVudC0+b3duZXJXaWRnZXQoKTsKLSAgICBpZiAoIW93bmVyV2lkZ2V0KQorICAg
IFFXaW5kb3cqIHRvcExldmVsV2lkZ2V0ID0gcGFnZUNsaWVudC0+b3duZXJXaW5kb3coKTsKKyAg
ICBpZiAoIXRvcExldmVsV2lkZ2V0KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAg
UVdpZGdldCogdG9wTGV2ZWxXaWRnZXQgPSBvd25lcldpZGdldC0+d2luZG93KCk7CiAgICAgUVJl
Y3QgdG9wTGV2ZWxHZW9tZXRyeSh0b3BMZXZlbFdpZGdldC0+Z2VvbWV0cnkoKSk7CiAKICAgICAv
LyBUaGVyZSdzIG5vIEFQSSBpbiBRdCB0byBxdWVyeSBmb3IgdGhlIHNpemUgb2YgdGhlIHJlc2l6
ZXIsIHNvIHdlIGFzc3VtZQpAQCAtNDIzLDEyICs0MDEsMTMgQEAgSW50UmVjdCBDaHJvbWVDbGll
bnRRdDo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAogICAgIC8vIGl0IG1pZ2h0IGV2ZW4gYmUg
b24gdGhlIGxvd2VyIGxlZnQgc2lkZSBvZiB0aGUgd2luZG93LCBidXQgaW4gV2ViS2l0IHdlCiAg
ICAgLy8gYWx3YXlzIGRyYXcgc2Nyb2xsYmFycyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlLCBzbyB3
ZSBhc3N1bWUgdGhpcyB0byBiZSB0aGUKICAgICAvLyBsb2NhdGlvbiB3aGVuIGNvbXB1dGluZyB0
aGUgcmVzaXplIHJlY3QgdG8gcmVzZXJ2ZSBmb3IgV2ViS2l0LgotICAgIFFQb2ludCByZXNpemVD
b3JuZXJUb3BMZWZ0ID0gb3duZXJXaWRnZXQtPm1hcEZyb20odG9wTGV2ZWxXaWRnZXQsCi0gICAg
ICAgICAgICBRUG9pbnQodG9wTGV2ZWxHZW9tZXRyeS53aWR0aCgpLCB0b3BMZXZlbEdlb21ldHJ5
LmhlaWdodCgpKQotICAgICAgICAgICAgLSBRUG9pbnQoc2NvbGxiYXJUaGlja25lc3MsIHNjb2xs
YmFyVGhpY2tuZXNzKSk7CisgICAgUVBvaW50IHJlc2l6ZUNvcm5lclRvcExlZnQgPSBRUG9pbnQo
dG9wTGV2ZWxHZW9tZXRyeS53aWR0aCgpLCB0b3BMZXZlbEdlb21ldHJ5LmhlaWdodCgpKQorICAg
ICAgICAtIFFQb2ludChzY29sbGJhclRoaWNrbmVzcywgc2NvbGxiYXJUaGlja25lc3MpKQorICAg
ICAgICAtIG1fd2ViUGFnZS0+dmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkudG9wTGVmdCgpOwog
CiAgICAgUVJlY3QgcmVzaXplQ29ybmVyUmVjdCA9IFFSZWN0KHJlc2l6ZUNvcm5lclRvcExlZnQs
IFFTaXplKHNjb2xsYmFyVGhpY2tuZXNzLCBzY29sbGJhclRoaWNrbmVzcykpOwogICAgIHJldHVy
biByZXNpemVDb3JuZXJSZWN0LmludGVyc2VjdGVkKHBhZ2VDbGllbnQtPmdlb21ldHJ5UmVsYXRp
dmVUb093bmVyV2lkZ2V0KCkpOworCiAjZWxzZQogICAgIHJldHVybiBJbnRSZWN0KCk7CiAjZW5k
aWYKQEAgLTQzOCw3ICs0MTcsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjppbnZhbGlkYXRlUm9v
dFZpZXcoY29uc3QgSW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCkKIHsKICNpZiBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKICAgICBpZiAocGxhdGZvcm1QYWdlQ2xpZW50KCkpIHsKLSAgICAgICAg
V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IFFXZWJGcmFtZVByaXZh
dGU6OmNvcmUobV93ZWJQYWdlLT5tYWluRnJhbWUoKSktPnRpbGVkQmFja2luZ1N0b3JlKCk7Cisg
ICAgICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX3dlYlBh
Z2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCk7CiAgICAg
ICAgIGlmICghYmFja2luZ1N0b3JlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBiYWNr
aW5nU3RvcmUtPmludmFsaWRhdGUod2luZG93UmVjdCk7CkBAIC00NDgsNyArNDI3LDcgQEAgdm9p
ZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHdpbmRv
d1JlY3QsIGJvb2wpCiAjZW5kaWYKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRRdDo6aW52YWxpZGF0
ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCBpbW1l
ZGlhdGUpCit2b2lkIENocm9tZUNsaWVudFF0OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmll
dyhjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sKQogewogICAgIC8vIE5vIGRvdWJsZSBi
dWZmZXIsIHNvIG9ubHkgdXBkYXRlIHRoZSBRV2lkZ2V0IGlmIGNvbnRlbnQgY2hhbmdlZC4KICAg
ICBpZiAocGxhdGZvcm1QYWdlQ2xpZW50KCkpIHsKQEAgLTQ1Nyw5ICs0MzYsOSBAQCB2b2lkIENo
cm9tZUNsaWVudFF0OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0
JiB3aW5kb3dSZWN0LCBibwogICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcGxhdGZvcm1QYWdlQ2xpZW50KCktPnVwZGF0ZShyZWN0KTsKICAgICB9Ci0gICAgUU1ldGFP
YmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UsICJyZXBhaW50UmVxdWVzdGVkIiwgUXQ6OlF1
ZXVlZENvbm5lY3Rpb24sIFFfQVJHKFFSZWN0LCB3aW5kb3dSZWN0KSk7CisgICAgUU1ldGFPYmpl
Y3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UtPmhhbmRsZSgpLCAicmVwYWludFJlcXVlc3RlZCIs
IFF0OjpRdWV1ZWRDb25uZWN0aW9uLCBRX0FSRyhRUmVjdCwgd2luZG93UmVjdCkpOwogCi0gICAg
Ly8gRklYTUU6IFRoZXJlIGlzIG5vICJpbW1lZGlhdGUiIHN1cHBvcnQgZm9yIHdpbmRvdyBwYWlu
dGluZy4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgYWx3YXlzIHdoZW5ldmVyIHRoZSBmbGFnCisgICAg
Ly8gRklYTUU6IFRoZXJlIGlzIG5vICJpbW1lZGlhdGUiIHN1cHBvcnQgZm9yIHdpbmRvdyBwYWlu
dGluZy4gVGhpcyBzaG91bGQgYmUgZG9uZSBhbHdheXMgd2hlbmV2ZXIgdGhlIGZsYWcKICAgICAv
LyBpcyBzZXQuCiB9CiAKQEAgLTQ3MiwxNCArNDUxLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1Jl
Y3QsCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQogICAgICAgICBwbGF0Zm9ybVBh
Z2VDbGllbnQoKS0+c2Nyb2xsKGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdodCgpLCBzY3JvbGxW
aWV3UmVjdCk7Ci0gICAgZW1pdCBtX3dlYlBhZ2UtPnNjcm9sbFJlcXVlc3RlZChkZWx0YS53aWR0
aCgpLCBkZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QpOworICAgIFFNZXRhT2JqZWN0Ojpp
bnZva2VNZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJH
KGludCwgZGVsdGEud2lkdGgoKSksIFFfQVJHKGludCwgZGVsdGEuaGVpZ2h0KCkpLCBRX0FSRyhR
UmVjdCwgc2Nyb2xsVmlld1JlY3QpKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQogdm9pZCBDaHJvbWVDbGllbnRRdDo6ZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IElu
dFBvaW50JiBwb2ludCkKIHsKLSAgICBRUG9pbnQgY3VycmVudFBvc2l0aW9uKG1fd2ViUGFnZS0+
bWFpbkZyYW1lKCktPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGVtaXQgbV93ZWJQYWdlLT5zY3Jv
bGxSZXF1ZXN0ZWQocG9pbnQueCgpIC0gY3VycmVudFBvc2l0aW9uLngoKSwgcG9pbnQueSgpIC0g
Y3VycmVudFBvc2l0aW9uLnkoKSwgUVJlY3QoUVBvaW50KDAsIDApLCBtX3dlYlBhZ2UtPnZpZXdw
b3J0U2l6ZSgpKSk7CisKKyAgICBJbnRTaXplIGN1cnJlbnRQb3NpdGlvbiA9IG1fd2ViUGFnZS0+
bWFpbkZyYW1lQWRhcHRlcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGludCB4ID0gcG9pbnQu
eCgpIC0gY3VycmVudFBvc2l0aW9uLndpZHRoKCk7CisgICAgaW50IHkgPSBwb2ludC55KCkgLSBj
dXJyZW50UG9zaXRpb24uaGVpZ2h0KCk7CisgICAgY29uc3QgUVJlY3QgcmVjdChRUG9pbnQoMCwg
MCksIG1fd2ViUGFnZS0+dmlld3BvcnRTaXplKCkpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VN
ZXRob2QobV93ZWJQYWdlLT5oYW5kbGUoKSwgInNjcm9sbFJlcXVlc3RlZCIsIFFfQVJHKGludCwg
eCksIFFfQVJHKGludCwgeSksIFFfQVJHKFFSZWN0LCByZWN0KSk7CiB9CiAjZW5kaWYKIApAQCAt
NDg5LDEyICs0NzIsMTIgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6cm9vdFZpZXdUb1NjcmVl
bihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkKICAgICAg
ICAgcmV0dXJuIHJlY3Q7CiAKLSAgICBRV2lkZ2V0KiBvd25lcldpZGdldCA9IHBhZ2VDbGllbnQt
Pm93bmVyV2lkZ2V0KCk7Ci0gICAgaWYgKCFvd25lcldpZGdldCkKLSAgICAgICByZXR1cm4gcmVj
dDsKKyAgICBRV2luZG93KiBvd25lcldpbmRvdyA9IHBhZ2VDbGllbnQtPm93bmVyV2luZG93KCk7
CisgICAgaWYgKCFvd25lcldpbmRvdykKKyAgICAgICAgcmV0dXJuIHJlY3Q7CiAKICAgICBRUmVj
dCBzY3JlZW5SZWN0KHJlY3QpOwotICAgIHNjcmVlblJlY3QudHJhbnNsYXRlKG93bmVyV2lkZ2V0
LT5tYXBUb0dsb2JhbChRUG9pbnQoMCwgMCkpKTsKKyAgICBzY3JlZW5SZWN0LnRyYW5zbGF0ZShv
d25lcldpbmRvdy0+bWFwVG9HbG9iYWwobV93ZWJQYWdlLT52aWV3UmVjdFJlbGF0aXZlVG9XaW5k
b3coKS50b3BMZWZ0KCkpKTsKIAogICAgIHJldHVybiBzY3JlZW5SZWN0OwogfQpAQCAtNTA1LDIy
ICs0ODgsMjIgQEAgSW50UG9pbnQgQ2hyb21lQ2xpZW50UXQ6OnNjcmVlblRvUm9vdFZpZXcoY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgIGlmICghcGFnZUNsaWVudCkKICAgICAgICAg
cmV0dXJuIHBvaW50OwogCi0gICAgUVdpZGdldCogb3duZXJXaWRnZXQgPSBwYWdlQ2xpZW50LT5v
d25lcldpZGdldCgpOwotICAgIGlmICghb3duZXJXaWRnZXQpCisgICAgUVdpbmRvdyogb3duZXJX
aW5kb3cgPSBwYWdlQ2xpZW50LT5vd25lcldpbmRvdygpOworICAgIGlmICghb3duZXJXaW5kb3cp
CiAgICAgICAgIHJldHVybiBwb2ludDsKIAotICAgIHJldHVybiBvd25lcldpZGdldC0+bWFwRnJv
bUdsb2JhbChwb2ludCk7CisgICAgcmV0dXJuIG93bmVyV2luZG93LT5tYXBGcm9tR2xvYmFsKHBv
aW50KSAtIG1fd2ViUGFnZS0+dmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkudG9wTGVmdCgpOwog
fQogCiBQbGF0Zm9ybVBhZ2VDbGllbnQgQ2hyb21lQ2xpZW50UXQ6OnBsYXRmb3JtUGFnZUNsaWVu
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+Y2xpZW50LmdldCgpOworICAg
IHJldHVybiBtX3dlYlBhZ2UtPmNsaWVudC5kYXRhKCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50
UXQ6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXpl
KSBjb25zdAogewogICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkp
Ci0gICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSktPmNvbnRlbnRzU2l6ZUNoYW5n
ZWQoc2l6ZSk7CisgICAgICAgIFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmcmFtZSktPmNvbnRlbnRz
U2l6ZURpZENoYW5nZShzaXplKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKQEAg
LTUzMiwzMyArNTE1LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6Om1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduCiAgICAgICAgIGxhc3RI
b3ZlclVSTCA9IHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICAgICAgbGFzdEhvdmVyVGl0
bGUgPSByZXN1bHQudGl0bGUoZGlyKTsKICAgICAgICAgbGFzdEhvdmVyQ29udGVudCA9IHJlc3Vs
dC50ZXh0Q29udGVudCgpOwotICAgICAgICBlbWl0IG1fd2ViUGFnZS0+bGlua0hvdmVyZWQobGFz
dEhvdmVyVVJMLnN0cmluZygpLAotICAgICAgICAgICAgICAgIGxhc3RIb3ZlclRpdGxlLCBsYXN0
SG92ZXJDb250ZW50KTsKKyAgICAgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBh
Z2UtPmhhbmRsZSgpLCAibGlua0hvdmVyZWQiLCBRX0FSRyhRU3RyaW5nLCBsYXN0SG92ZXJVUkwu
c3RyaW5nKCkpLAorICAgICAgICAgICAgUV9BUkcoUVN0cmluZywgbGFzdEhvdmVyVGl0bGUpLCBR
X0FSRyhRU3RyaW5nLCBsYXN0SG92ZXJDb250ZW50KSk7CiAgICAgfQogfQogCiB2b2lkIENocm9t
ZUNsaWVudFF0OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyAmdGlwLCBUZXh0RGlyZWN0aW9uKQog
ewotI2lmbmRlZiBRVF9OT19UT09MVElQCi0gICAgUVdpZGdldCogdmlldyA9IG1fd2ViUGFnZS0+
dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRpcC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgdmlldy0+c2V0VG9vbFRpcChRU3RyaW5nKCkpOwotICAgICAg
ICBRVG9vbFRpcDo6aGlkZVRleHQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBRU3RyaW5nIGR0
aXAgPSBRTGF0aW4xU3RyaW5nKCI8cD4iKSArIFFTdHJpbmcodGlwKS50b0h0bWxFc2NhcGVkKCkg
KyBRTGF0aW4xU3RyaW5nKCI8L3A+Iik7Ci0gICAgICAgIHZpZXctPnNldFRvb2xUaXAoZHRpcCk7
Ci0gICAgfQotI2Vsc2UKLSAgICBRX1VOVVNFRCh0aXApOwotI2VuZGlmCisgICAgbV93ZWJQYWdl
LT5zZXRUb29sVGlwKHRpcCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnByaW50KEZyYW1l
KiBmcmFtZSkKIHsKLSAgICBlbWl0IG1fd2ViUGFnZS0+cHJpbnRSZXF1ZXN0ZWQoUVdlYkZyYW1l
UHJpdmF0ZTo6a2l0KGZyYW1lKSk7CisgICAgZW1pdCBtX3dlYlBhZ2UtPnByaW50UmVxdWVzdGVk
KFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmcmFtZSkpOwogfQogCiAjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKQEAgLTU2OSw3ICs1MzgsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpleGNlZWRlZERh
dGFiYXNlUXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTgogICAgIGlm
ICghRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuaGFzRW50cnlGb3JPcmlnaW4oZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5zZXRRdW90YShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgcXVv
dGEpOwogCi0gICAgZW1pdCBtX3dlYlBhZ2UtPmRhdGFiYXNlUXVvdGFFeGNlZWRlZChRV2ViRnJh
bWVQcml2YXRlOjpraXQoZnJhbWUpLCBkYXRhYmFzZU5hbWUpOworICAgIG1fd2ViUGFnZS0+ZGF0
YWJhc2VRdW90YUV4Y2VlZGVkKFFXZWJGcmFtZUFkYXB0ZXI6OmtpdChmcmFtZSksIGRhdGFiYXNl
TmFtZSk7CiB9CiAjZW5kaWYKIApAQCAtNTg4LDcgKzU1Nyw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50
UXQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwKICAgICBRV2ViU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gbmV3IFFXZWJT
ZWN1cml0eU9yaWdpbihwcml2KTsKIAogICAgIGlmICghV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCku
Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBxdW90YSkpCi0gICAgICAgV2ViQ29yZTo6
Y2FjaGVTdG9yYWdlKCkuc3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBkZWZhdWx0
T3JpZ2luUXVvdGEpOworICAgICAgICBXZWJDb3JlOjpjYWNoZVN0b3JhZ2UoKS5zdG9yZVVwZGF0
ZWRRdW90YUZvck9yaWdpbihvcmlnaW4sIGRlZmF1bHRPcmlnaW5RdW90YSk7CiAKICAgICBlbWl0
IG1fd2ViUGFnZS0+YXBwbGljYXRpb25DYWNoZVF1b3RhRXhjZWVkZWQoc2VjdXJpdHlPcmlnaW4s
IGRlZmF1bHRPcmlnaW5RdW90YSwgc3RhdGljX2Nhc3Q8cXVpbnQ2ND4odG90YWxTcGFjZU5lZWRl
ZCkpOwogfQpAQCAtNTk2LDcgKzU2NSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlYWNoZWRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwKICNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIFBhc3NPd25QdHI8Q29sb3JDaG9vc2VyPiBDaHJvbWVD
bGllbnRRdDo6Y3JlYXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCogY2xpZW50LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgY29uc3QgUUNvbG9yIHNlbGVjdGVkQ29sb3IgPSBt
X3dlYlBhZ2UtPmQtPmNvbG9yU2VsZWN0aW9uUmVxdWVzdGVkKFFDb2xvcihjb2xvcikpOworICAg
IGNvbnN0IFFDb2xvciBzZWxlY3RlZENvbG9yID0gbV93ZWJQYWdlLT5jb2xvclNlbGVjdGlvblJl
cXVlc3RlZChRQ29sb3IoY29sb3IpKTsKICAgICBjbGllbnQtPmRpZENob29zZUNvbG9yKHNlbGVj
dGVkQ29sb3IpOwogICAgIGNsaWVudC0+ZGlkRW5kQ2hvb3NlcigpOwogICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNjA2LDMyICs1NzUsMjIgQEAgUGFzc093blB0cjxDb2xvckNob29zZXI+IENocm9t
ZUNsaWVudFF0OjpjcmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xpZW50Kgogdm9pZCBD
aHJvbWVDbGllbnRRdDo6cnVuT3BlblBhbmVsKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxGaWxl
Q2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBmaWxl
Q2hvb3NlciA9IHBycEZpbGVDaG9vc2VyOwotICAgIGJvb2wgc3VwcG9ydE11bHRpID0gbV93ZWJQ
YWdlLT5zdXBwb3J0c0V4dGVuc2lvbihRV2ViUGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVu
c2lvbik7Ci0KLSAgICBpZiAoZmlsZUNob29zZXItPnNldHRpbmdzKCkuYWxsb3dzTXVsdGlwbGVG
aWxlcyAmJiBzdXBwb3J0TXVsdGkpIHsKLSAgICAgICAgUVdlYlBhZ2U6OkNob29zZU11bHRpcGxl
RmlsZXNFeHRlbnNpb25PcHRpb24gb3B0aW9uOwotICAgICAgICBvcHRpb24ucGFyZW50RnJhbWUg
PSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOwogCi0gICAgICAgIGlmICghZmlsZUNob29z
ZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsZUNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBvcHRpb24uc3VnZ2VzdGVkRmlsZU5hbWVz
ICs9IGZpbGVDaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXNbaV07CisgICAgUVN0cmlu
Z0xpc3Qgc3VnZ2VzdGVkRmlsZU5hbWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
aWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzLnNpemUoKTsgKytpKQorICAgICAg
ICBzdWdnZXN0ZWRGaWxlTmFtZXMgKz0gZmlsZUNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRG
aWxlc1tpXTsKIAotICAgICAgICBRV2ViUGFnZTo6Q2hvb3NlTXVsdGlwbGVGaWxlc0V4dGVuc2lv
blJldHVybiBvdXRwdXQ7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZXh0ZW5zaW9uKFFXZWJQYWdlOjpD
aG9vc2VNdWx0aXBsZUZpbGVzRXh0ZW5zaW9uLCAmb3B0aW9uLCAmb3V0cHV0KTsKKyAgICBjb25z
dCBib29sIGFsbG93TXVsdGlwbGUgPSBmaWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxvd3NNdWx0
aXBsZUZpbGVzOwogCi0gICAgICAgIGlmICghb3V0cHV0LmZpbGVOYW1lcy5pc0VtcHR5KCkpIHsK
KyAgICBRU3RyaW5nTGlzdCByZXN1bHQgPSBtX3dlYlBhZ2UtPmNob29zZUZpbGVzKFFXZWJGcmFt
ZUFkYXB0ZXI6OmtpdChmcmFtZSksIGFsbG93TXVsdGlwbGUsIHN1Z2dlc3RlZEZpbGVOYW1lcyk7
CisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChhbGxvd011bHRpcGxl
KSB7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgb3V0cHV0LmZpbGVOYW1lcy5jb3VudCgpOyArK2kpCi0gICAgICAgICAg
ICAgICAgbmFtZXMuYXBwZW5kKG91dHB1dC5maWxlTmFtZXMuYXQoaSkpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQuY291bnQoKTsgKytpKQorICAgICAgICAgICAgICAg
IG5hbWVzLmFwcGVuZChyZXN1bHQuYXQoaSkpOwogICAgICAgICAgICAgZmlsZUNob29zZXItPmNo
b29zZUZpbGVzKG5hbWVzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFFTdHJp
bmcgc3VnZ2VzdGVkRmlsZTsKLSAgICAgICAgaWYgKCFmaWxlQ2hvb3Nlci0+c2V0dGluZ3MoKS5z
ZWxlY3RlZEZpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN1Z2dlc3RlZEZpbGUgPSBmaWxl
Q2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzWzBdOwotICAgICAgICBRU3RyaW5nIGZp
bGUgPSBtX3dlYlBhZ2UtPmNob29zZUZpbGUoUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKSwg
c3VnZ2VzdGVkRmlsZSk7Ci0gICAgICAgIGlmICghZmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBmaWxlQ2hvb3Nlci0+Y2hvb3NlRmlsZShmaWxlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBmaWxlQ2hvb3Nlci0+Y2hvb3NlRmlsZShyZXN1bHQuZmlyc3QoKSk7CiAgICAgfQogfQog
CkBAIC02NjIsNyArNjIxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2NoZWR1bGVBbmltYXRp
b24oKQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKCkK
IHsKLSAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5kLT5mcmFtZS0+dmlldygpLT5zZXJ2aWNl
U2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRp
bWUoKSkpOworICAgIG1fd2ViUGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5mcmFtZS0+dmlldygp
LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAo
Y3VycmVudFRpbWUoKSkpOwogfQogI2VuZGlmCiAKQEAgLTcwMyw4ICs2NjIsMTAgQEAgSW50UmVj
dCBDaHJvbWVDbGllbnRRdDo6dmlzaWJsZVJlY3RGb3JUaWxlZEJhY2tpbmdTdG9yZSgpIGNvbnN0
CiAgICAgaWYgKCFwbGF0Zm9ybVBhZ2VDbGllbnQoKSB8fCAhbV93ZWJQYWdlKQogICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwogCi0gICAgaWYgKCFwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+dmlld1Jl
c2l6ZXNUb0NvbnRlbnRzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gUVJlY3QobV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+c2Nyb2xsUG9zaXRpb24oKSwgbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+
Z2VvbWV0cnkoKS5zaXplKCkpOworICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCktPnZpZXdS
ZXNpemVzVG9Db250ZW50c0VuYWJsZWQoKSkgeworICAgICAgICBJbnRTaXplIG9mZnNldCA9IG1f
d2ViUGFnZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBy
ZXR1cm4gUVJlY3QoUVBvaW50KG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCBtX3dl
YlBhZ2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyAgICB9CiAK
ICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocGxhdGZvcm1QYWdlQ2xpZW50
KCktPmdyYXBoaWNzSXRlbVZpc2libGVSZWN0KCkpKTsKIH0KQEAgLTc1MSw3ICs3MTIsNyBAQCBQ
YXNzT3duUHRyPFFXZWJTZWxlY3RNZXRob2Q+IENocm9tZUNsaWVudFF0OjpjcmVhdGVTZWxlY3RQ
b3B1cCgpIGNvbnN0CiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogCiAjaWYgIWRl
ZmluZWQoUVRfTk9fQ09NQk9CT1gpCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBRdEZhbGxiYWNr
V2ViUG9wdXAodGhpcykpOworICAgIHJldHVybiBhZG9wdFB0cihtX3dlYlBhZ2UtPmNyZWF0ZVNl
bGVjdFBvcHVwKCkpOwogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgpAQCAtNzU5
LDggKzcyMCwxOCBAQCBQYXNzT3duUHRyPFFXZWJTZWxlY3RNZXRob2Q+IENocm9tZUNsaWVudFF0
OjpjcmVhdGVTZWxlY3RQb3B1cCgpIGNvbnN0CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmRpc3Bh
dGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJikg
Y29uc3QKIHsKLSAgICBlbWl0IG1fd2ViUGFnZS0+dmlld3BvcnRDaGFuZ2VSZXF1ZXN0ZWQoKTsK
KyAgICBtX3dlYlBhZ2UtPmVtaXRWaWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpOworfQorCisjaWYg
VVNFKFFUX01VTFRJTUVESUEpCitRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciogQ2hyb21lQ2xp
ZW50UXQ6OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQoreworICAgIFFXZWJGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKiBoYW5kbGVyID0gbV9wbGF0Zm9ybVBsdWdpbi5jcmVhdGVGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCkubGVha1B0cigpOworICAgIGlmICghaGFuZGxlcikKKyAgICAgICAg
aGFuZGxlciA9IG1fd2ViUGFnZS0+Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAg
IHJldHVybiBoYW5kbGVyOwogfQorI2VuZGlmCiAKIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OnNlbGVj
dEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKIHsKQEAgLTc5NCw3ICs3NjUsNyBAQCB2
b2lkIENocm9tZUNsaWVudFF0Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCiAgICAgLy8gaW4gYSBz
ZXBhcmF0ZSBkYXRhYmFzZQogICAgIGlmIChkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKSB7CiAg
ICAgICAgIHByaW50ZigiQXNrZWQgdG8gcG9wdWxhdGUgdmlzaXRlZCBsaW5rcyBmb3IgV2ViVmll
dyBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgcVByaW50YWJsZShtX3dlYlBhZ2UtPm1haW5G
cmFtZSgpLT51cmwoKS50b1N0cmluZygpKSk7CisgICAgICAgICAgICBxUHJpbnRhYmxlKFFVcmwo
bV93ZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPnVybCkudG9TdHJpbmcoKSkpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5oCmluZGV4IGY3MzU5ZDJlMjg3NGE3NTUxOWMyZjUzODc2ODEzMjk4MGFlNGI5Y2QuLjk2ZDg2
MjVjMDUwMTNmMjdlYWIyOTc0MjM0ZmVlYjdhOGQzYWZmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKQEAgLTQyLDYgKzQyLDggQEAg
Y2xhc3MgUUV2ZW50TG9vcDsKIFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3MgUVdlYlBhZ2U7Citj
bGFzcyBRV2ViUGFnZUFkYXB0ZXI7CitjbGFzcyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OSw3ICs2MSw3IEBAIGNsYXNzIEZ1bGxTY3Jl
ZW5WaWRlb1F0OwogCiBjbGFzcyBDaHJvbWVDbGllbnRRdCA6IHB1YmxpYyBDaHJvbWVDbGllbnQg
ewogcHVibGljOgotICAgIENocm9tZUNsaWVudFF0KFFXZWJQYWdlKik7CisgICAgQ2hyb21lQ2xp
ZW50UXQoUVdlYlBhZ2VBZGFwdGVyKik7CiAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50UXQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAKQEAgLTk4LDcgKzEwMCw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNpemFibGUoYm9vbCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlSUQpOwogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbCgpOwogICAgIHZpcnR1YWwgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSopOwpAQCAtMTU2LDcgKzE1OCw3IEBAIHB1YmxpYzoK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVu
dHMoYm9vbCkgeyB9CiAjZW5kaWYKLSAKKwogI2lmIEVOQUJMRShWSURFTykgJiYgKFVTRShHU1RS
RUFNRVIpIHx8IFVTRShRVF9NVUxUSU1FRElBKSB8fCBVU0UoUVRLSVQpKQogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CkBAIC0xNjksOCArMTcxLDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgUGFzc093blB0cjxDb2xvckNob29zZXI+IGNyZWF0ZUNvbG9y
Q2hvb3NlcihDb2xvckNob29zZXJDbGllbnQqLCBjb25zdCBDb2xvciYpOwogI2VuZGlmCiAKLSAg
ICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29z
ZXI+KTsKLSAgICAgdmlydHVhbCB2b2lkIGxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBGaWxlSWNvbkxvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
RnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRJ
Y29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlSWNvbkxvYWRlciopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikgeyB9CiAKQEAg
LTE5OCw3ICsyMDAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJh
bmRJbkRpcmVjdGlvbihXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNp
Z25lZCkgeyB9CiAKLSAgICBRV2ViUGFnZSogbV93ZWJQYWdlOworICAgIFFXZWJGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyKiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisKKyAgICBRV2Vi
UGFnZUFkYXB0ZXIqIG1fd2ViUGFnZTsKICAgICBLVVJMIGxhc3RIb3ZlclVSTDsKICAgICBTdHJp
bmcgbGFzdEhvdmVyVGl0bGU7CiAgICAgU3RyaW5nIGxhc3RIb3ZlckNvbnRlbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50UXQu
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0
LmNwcAppbmRleCAyOTE4MGUwNjI4NGMxOWJmNzdjMWExOWU5MjZjZjExMTljMzJkOGIzLi5kMjk4
NGMzZDRmMDY4ZGY5NmZiMDVlMGQ3ZjYwOTg0MTE1MDk0OGFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRRdC5jcHAKQEAg
LTMwLDkgKzMwLDggQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50UXQuaAppbmRleCAwNDIwZjhkNGE5Y2Fk
NjM5MjAwZDJlMTk0NWQyMTJiNDFkOGZlMjFjLi5lYWJhYzFiMWE0ZjEwMzBhZDZmMDNlYzJhYTAx
NGYyOGUyNmRiZjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50UXQuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJ
dGVtcyhDb250ZXh0TWVudSopOwogICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopOwogCi0gICAgdmlydHVh
bCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IEtVUkwmIHVybCk7CisgICAgdmlydHVhbCB2b2lkIGRv
d25sb2FkVVJMKGNvbnN0IEtVUkwmKTsKICAgICB2aXJ0dWFsIHZvaWQgbG9va1VwSW5EaWN0aW9u
YXJ5KEZyYW1lKik7CiAgICAgdmlydHVhbCB2b2lkIHNwZWFrKGNvbnN0IFN0cmluZyYpOwogICAg
IHZpcnR1YWwgYm9vbCBpc1NwZWFraW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBmZTI0ZThiZDUyMzUyNWJhYzliYTgyMjQ5ODdhM2I2YzZjZTE3ZDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1
bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmYXVsdEZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIuaCIKKworI2lmIFVTRShRVF9NVUxUSU1FRElBKQorCisjaW5jbHVkZSAi
RnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2Jv
b2wgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnNfc2hvdWxkRm9yY2VGdWxsU2NyZWVu
VmlkZW9QbGF5YmFjayA9IGZhbHNlOworCitEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6
RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgIDogUVdlYkZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXIoKQorICAgICwgbV9mdWxsU2NyZWVuV2lkZ2V0KG5ldyBGdWxsU2NyZWVuVmlkZW9X
aWRnZXQpCit7CisgICAgY29ubmVjdChtX2Z1bGxTY3JlZW5XaWRnZXQsIFNJR05BTChkaWRFeGl0
RnVsbFNjcmVlbigpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIG1f
ZnVsbFNjcmVlbldpZGdldC0+aGlkZSgpOworCisgICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5jbG9z
ZSgpOworfQorCitEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6fkRlZmF1bHRGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyKCkKK3sKKyAgICBkZWxldGUgbV9mdWxsU2NyZWVuV2lkZ2V0OworfQor
Citib29sIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3JlZW5G
b3JWaWRlb1BsYXliYWNrKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBmb3Jj
ZUZ1bGxTY3JlZW4gPSBxZ2V0ZW52KCJRVF9XRUJLSVRfRk9SQ0VfRlVMTFNDUkVFTl9WSURFTyIp
OworICAgICAgICBpZiAoIWZvcmNlRnVsbFNjcmVlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBz
X3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2sgPSB0cnVlOworCisgICAgICAgIGlu
aXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc19zaG91bGRGb3JjZUZ1bGxT
Y3JlZW5WaWRlb1BsYXliYWNrOworfQorCit2b2lkIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgbV9mdWxs
U2NyZWVuV2lkZ2V0LT5zaG93KHBsYXllcik7Cit9CisKK3ZvaWQgRGVmYXVsdEZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX2Z1bGxTY3JlZW5XaWRnZXQt
PmNsb3NlKCk7Cit9CisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTk0M2M1NWU0NDAwODIyNTA4NWYzYTE2ODllNDlkZjIzODlmNGFkNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRGVmYXVsdEZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
I2lmbmRlZiBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcl9oCisjZGVmaW5lIERlZmF1bHRG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyX2gKKworI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRnVsbFNjcmVlblZpZGVvV2lkZ2V0
OworCisvLyBXZSBkbyBub3QgdXNlIEVOQUJMRSBvciBVU0UgYmVjYXVzZSBtb2MgZG9lcyBub3Qg
ZXhwYW5kIHRoZXNlIG1hY3Jvcy4KKyNpZiBkZWZpbmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkg
JiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCitjbGFzcyBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFu
ZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAgIHZpcnR1
YWwgfkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1aXJlc0Z1
bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgorICAg
IHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXllciopOworICAgIHZvaWQgZXhpdEZ1bGxT
Y3JlZW4oKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZEZvcmNlRnVsbFNj
cmVlblZpZGVvUGxheWJhY2s7CisgICAgRnVsbFNjcmVlblZpZGVvV2lkZ2V0ICptX2Z1bGxTY3Jl
ZW5XaWRnZXQ7Cit9OworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCmluZGV4IGNiNjMyODM0MDA5ODk0Y2M5
NTYzNjI2MDM4NWQ0MDBhMDU3MzBmNDcuLjJlMGQwNWVkMTIzNDhmMDRlZjc5NGYwNTJhYjNhZTY5
YTEyOTM0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRRdC5jcHAKQEAgLTI2LDE2ICsyNiwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkRyYWdDbGllbnRRdC5oIgogCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ2xpcGJvYXJkUXQuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAKICNpbmNsdWRlIDxRRHJhZz4KICNpbmNs
dWRlIDxRTWltZURhdGE+Ci0KKyNpbmNsdWRlIDxRV2ViUGFnZUNsaWVudC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBEcmFnQ2xpZW50UXQ6OnN0YXJ0
RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFAK
ICNpZm5kZWYgUVRfTk9fRFJBR0FORERST1AKICAgICBRTWltZURhdGEqIGNsaXBib2FyZERhdGEg
PSBzdGF0aWNfY2FzdDxDbGlwYm9hcmRRdCo+KGNsaXBib2FyZCktPmNsaXBib2FyZERhdGEoKTsK
ICAgICBzdGF0aWNfY2FzdDxDbGlwYm9hcmRRdCo+KGNsaXBib2FyZCktPmludmFsaWRhdGVXcml0
YWJsZURhdGEoKTsKLSAgICBRV2lkZ2V0KiB2aWV3ID0gbV93ZWJQYWdlLT52aWV3KCk7CisgICAg
UU9iamVjdCogdmlldyA9IG1fY2hyb21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+b3du
ZXJXaWRnZXQoKTsKICAgICBpZiAodmlldykgewogICAgICAgICBRRHJhZyogZHJhZyA9IG5ldyBR
RHJhZyh2aWV3KTsKICAgICAgICAgaWYgKGRyYWdJbWFnZSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2
b2lkIERyYWdDbGllbnRRdDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0
IEludFBvaW50JiwgY29uc3QgSW50UAogICAgICAgICBRdDo6RHJvcEFjdGlvbiBhY3R1YWxEcm9w
QWN0aW9uID0gZHJhZy0+ZXhlYyhkcmFnT3BlcmF0aW9uc1RvRHJvcEFjdGlvbnMoZHJhZ09wZXJh
dGlvbk1hc2spKTsKIAogICAgICAgICAvLyBTZW5kIGRyYWdFbmQgZXZlbnQKLSAgICAgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50IG1lKG1fd2ViUGFnZS0+dmlldygpLT5tYXBGcm9tR2xvYmFsKFFDdXJz
b3I6OnBvcygpKSwgUUN1cnNvcjo6cG9zKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1v
dXNlTW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKKyAgICAgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50IG1lKG1fY2hyb21lQ2xpZW50LT5zY3JlZW5Ub1Jvb3RWaWV3KFFDdXJz
b3I6OnBvcygpKSwgUUN1cnNvcjo6cG9zKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1v
dXNlTW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5kcmFnU291cmNlRW5kZWRBdChtZSwgZHJvcEFjdGlvblRvRHJh
Z09wZXJhdGlvbihhY3R1YWxEcm9wQWN0aW9uKSk7CiAgICAgfQogICAgIGZyYW1lLT5wYWdlKCkt
PmRyYWdDb250cm9sbGVyKCktPmRyYWdFbmRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmgKaW5kZXggMTU3MjRmMWUxNDg1NjNmM2U2ZWUwMTg1
NTNhN2VkM2VjODRjYzE1OC4uYWE4YjgwODViODE1MGYwYTE2NDM0ZGMzNjQ1NWZhYzUxZDdjMmUz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5o
CkBAIC0yOCwxMyArMjgsMTMgQEAKIAogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKIAotY2xhc3Mg
UVdlYlBhZ2U7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2hyb21lQ2xpZW50Owor
CiBjbGFzcyBEcmFnQ2xpZW50UXQgOiBwdWJsaWMgRHJhZ0NsaWVudCB7CiBwdWJsaWM6Ci0gICAg
RHJhZ0NsaWVudFF0KFFXZWJQYWdlKiB3ZWJQYWdlKSA6IG1fd2ViUGFnZSh3ZWJQYWdlKSB7fTsK
KyAgICBEcmFnQ2xpZW50UXQoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQpIDogbV9jaHJvbWVD
bGllbnQoY2hyb21lQ2xpZW50KSB7IH07CiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKTsKICAg
ICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0
YSopOwogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwpAQCAtNDIs
NyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopOyAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9p
bnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQq
LCBGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxzZSk7CiBwcml2YXRlOgotICAgIFFXZWJQYWdl
KiBtX3dlYlBhZ2U7CisgICAgQ2hyb21lQ2xpZW50KiBtX2Nocm9tZUNsaWVudDsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5jcHAKaW5kZXggZWRmMjBhNDYwNTAzMzE3NjRkNzlkYmZmMGQzM2Jj
OTA3YmNiZjY3Yy4uOGQwOGM0YTEwZGRiMjBkOWRkMzVjZDM5NzI5YTc2OGY1Yjk0NzU3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5jcHAKQEAgLTQzLDggKzQzLDYgQEAKICNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR0NDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCi0jaW5jbHVkZSAicXRfcnVudGltZS5oIgog
I2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGll
bnRNb2NrLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCkBAIC01Myw4ICs1
MSw4IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5jbHVkZSAiSW5pdFdlYkNv
cmVRdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJKU05v
ZGUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNjMsNiArNjEsOCBAQAogI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCiAjaW5jbHVk
ZSAiUHJpbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1
ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCkBA
IC03NiwxNSArNzYsMTAgQEAKICNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCiAjaW5j
bHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0j
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KKyNpbmNsdWRlICJxdF9ydW50aW1lLmgiCiAj
aW5jbHVkZSAicXdlYmVsZW1lbnQuaCIKLSNpbmNsdWRlICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRl
ICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5LmgiCiAjaW5jbHVkZSAicXdl
Ymhpc3RvcnlfcC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2Vf
cC5oIgogI2luY2x1ZGUgInF3ZWJzY3JpcHR3b3JsZC5oIgogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBVU0UoUVRfTVVMVElNRURJQSkKQEAgLTkyLDkgKzg3LDggQEAKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRdC5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxRQWN0aW9uPgotI2luY2x1ZGUg
PFFNZW51PgogI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTAzLDE1ICs5NywxNSBAQCBRTWFw
PGludCwgUVdlYlNjcmlwdFdvcmxkKj4gbV93b3JsZE1hcDsKICNpZiBFTkFCTEUoR0VPTE9DQVRJ
T04pCiBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIHRvR2VvbG9jYXRpb25DbGllbnRNb2NrKEdlb2xv
Y2F0aW9uQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgIEFTU0VSVChRV2ViUGFnZVByaXZhdGU6OmRy
dFJ1bik7Ci0gICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZW9sb2NhdGlvbkNsaWVudE1vY2sqPihj
bGllbnQpOworICAgIEFTU0VSVChRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1bik7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KGNsaWVudCk7CiB9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiBEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dE1vY2sqIHRvRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKERldmljZU9yaWVudGF0aW9uQ2xp
ZW50KiBjbGllbnQpCiB7Ci0gICAgQVNTRVJUKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuKTsKKyAg
ICBBU1NFUlQoUVdlYlBhZ2VBZGFwdGVyOjpkcnRSdW4pOwogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqPihjbGllbnQpOwogfQogI2VuZGlmCkBAIC0x
OTgsNyArMTkyLDYgQEAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6On5EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdCgpCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluaXRpYWxpemUoKQog
ewotICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsKICAgICBRdERSVE5vZGVSdW50
aW1lOjppbml0aWFsaXplKCk7CiB9CiAKQEAgLTIyNSw1OCArMjE4LDU4IEBAIGludCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6d29ya2VyVGhyZWFkQ291bnQoKQogCiB2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXREdW1wUmVuZGVyVHJlZU1vZGVFbmFibGVkKGJvb2wgYikKIHsKLSAg
ICBRV2ViUGFnZVByaXZhdGU6OmRydFJ1biA9IGI7CisgICAgUVdlYlBhZ2VBZGFwdGVyOjpkcnRS
dW4gPSBiOwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiBkZWZpbmVkKFhQX1VO
SVgpCiAgICAgLy8gUGx1Z2luVmlld1F0IChYMTEpIG5lZWRzIGEgZmV3IHdvcmthcm91bmRzIHdo
ZW4gcnVubmluZyB1bmRlciBEUlQKICAgICBQbHVnaW5WaWV3OjpzZXRJc1J1bm5pbmdVbmRlckRS
VChiKTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRGcmFt
ZUZsYXR0ZW5pbmdFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJsZWQpCit2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKFFXZWJQYWdl
QWRhcHRlciogYWRhcHRlciwgYm9vbCBlbmFibGVkKQogewotICAgIFFXZWJQYWdlUHJpdmF0ZTo6
Y29yZShwYWdlKS0+c2V0dGluZ3MoKS0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGVk
KTsKKyAgICBhZGFwdGVyLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFi
bGVkKGVuYWJsZWQpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdl
U2V0R3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBncm91cE5hbWUpCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKFFXZWJQYWdl
QWRhcHRlciAqYWRhcHRlciwgY29uc3QgUVN0cmluZyYgZ3JvdXBOYW1lKQogewotICAgIHBhZ2Ut
PmhhbmRsZSgpLT5wYWdlLT5zZXRHcm91cE5hbWUoZ3JvdXBOYW1lKTsKKyAgICBhZGFwdGVyLT5w
YWdlLT5zZXRHcm91cE5hbWUoZ3JvdXBOYW1lKTsKIH0KIAotUVN0cmluZyBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZShRV2ViUGFnZSogcGFnZSkKK1FTdHJpbmcgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VHcm91cE5hbWUoUVdlYlBhZ2VBZGFwdGVyKiBh
ZGFwdGVyKQogewotICAgIHJldHVybiBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Z3JvdXBOYW1lKCk7
CisgICAgcmV0dXJuIGFkYXB0ZXItPnBhZ2UtPmdyb3VwTmFtZSgpOwogfQogCi12b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRlU2NyaXB0KFFXZWJQYWdlKiBw
YWdlLCBsb25nIGNhbGxJZCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQordm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlwdChRV2ViUGFnZUFkYXB0ZXIq
IGFkYXB0ZXIsIGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoIXBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkpCisgICAgaWYgKCFhZGFwdGVyLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNhbGxJZCwgc2NyaXB0KTsK
KyAgICBhZGFwdGVyLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY2FsbElkLCBzY3JpcHQpOwogI2VuZGlmCiB9CiAKLXZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKFFXZWJQYWdlKiBwYWdlKQordm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yU2hvdyhRV2ViUGFnZUFkYXB0ZXIq
IGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoIXBhZ2UtPmhhbmRs
ZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgaWYgKCFhZGFwdGVyLT5wYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwYWdlLT5oYW5k
bGUoKS0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOworICAgIGFkYXB0ZXIt
PnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2hvdygpOwogI2VuZGlmCiB9CiAKLXZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3coUVdlYlBhZ2UqIHBhZ2Up
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JDbG9zZShRV2ViUGFn
ZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoIXBh
Z2UtPmhhbmRsZSgpLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgaWYgKCFhZGFw
dGVyLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBw
YWdlLT5oYW5kbGUoKS0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zaG93KCk7CisgICAg
YWRhcHRlci0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOwogI2VuZGlmCiB9
CiAKLWJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Omhhc0RvY3VtZW50RWxlbWVudChRV2Vi
RnJhbWUqIGZyYW1lKQorYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9jdW1lbnRF
bGVtZW50KFFXZWJGcmFtZUFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0gICAgcmV0dXJuIFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUoZnJhbWUpLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAg
ICByZXR1cm4gYWRhcHRlci0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwog
fQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRvZmlsbGVkKGNvbnN0IFFX
ZWJFbGVtZW50JiBlbGVtZW50LCBib29sIGlzQXV0b2ZpbGxlZCkKQEAgLTMwNiw5ICsyOTksOSBA
QCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdl
YkVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0CiAvLyBQYXVzZSBhIGdpdmVuIENTUyBhbmltYXRpb24g
b3IgdHJhbnNpdGlvbiBvbiB0aGUgdGFyZ2V0IG5vZGUgYXQgYSBzcGVjaWZpYyB0aW1lLgogLy8g
SWYgdGhlIGFuaW1hdGlvbiBvciB0cmFuc2l0aW9uIGlzIGFscmVhZHkgcGF1c2VkLCBpdCB3aWxs
IHVwZGF0ZSBpdHMgcGF1c2UgdGltZS4KIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW50ZW5kZWQg
dG8gYmUgdXNlZCBmb3IgdGVzdGluZyB0aGUgQ1NTIGFuaW1hdGlvbiBhbmQgdHJhbnNpdGlvbiBz
eXN0ZW0uCi1ib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihRV2Vi
RnJhbWUgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwg
Y29uc3QgUVN0cmluZyAmZWxlbWVudElkKQorYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
cGF1c2VBbmltYXRpb24oUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRlciwgY29uc3QgUVN0cmluZyAm
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcgJmVsZW1lbnRJZCkKIHsK
LSAgICBGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmICghY29yZUZyYW1l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMyNiw5ICszMTksOSBAQCBib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihRV2ViRnJhbWUgKmZyYW1lLCBjb25z
dCBRU3RyaW5nICZhbgogICAgIHJldHVybiBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbkF0VGlt
ZShjb3JlTm9kZS0+cmVuZGVyZXIoKSwgYW5pbWF0aW9uTmFtZSwgdGltZSk7CiB9CiAKLWJvb2wg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoUVdlYkZy
YW1lICpmcmFtZSwgY29uc3QgUVN0cmluZyAmcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29u
c3QgUVN0cmluZyAmZWxlbWVudElkKQorYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1
c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShRV2ViRnJhbWVBZGFwdGVyICphZGFwdGVyLCBjb25zdCBR
U3RyaW5nICZwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nICZlbGVtZW50
SWQpCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJh
bWUpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBpZiAoIWNv
cmVGcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNDcsOSArMzQwLDkgQEAgYm9v
bCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShRV2Vi
RnJhbWUgKmZyYW1lLCBjb25zdAogfQogCiAvLyBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Yg
Y3VycmVudGx5IHJ1bm5pbmcgYW5pbWF0aW9ucyAoaW5jbHVkZXMgYm90aCBDU1MgdHJhbnNpdGlv
bnMgYW5kIENTUyBhbmltYXRpb25zKS4KLWludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKFFXZWJGcmFtZSAqZnJhbWUpCitpbnQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhRV2ViRnJhbWVBZGFwdGVyICph
ZGFwdGVyKQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgaWYg
KCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzYwLDkgKzM1Myw5IEBA
IGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFFX
ZWJGcmFtZSAqZnJhbWUpCiAgICAgcmV0dXJuIGNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyhjb3JlRnJhbWUtPmRvY3VtZW50KCkpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpjbGVhckZyYW1lTmFtZShRV2ViRnJhbWUqIGZyYW1lKQordm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJGcmFtZU5hbWUoUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRl
cikKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFt
ZSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGNvcmVGcmFt
ZS0+dHJlZSgpLT5jbGVhck5hbWUoKTsKIH0KIApAQCAtMzgxLDI0ICszNzQsNiBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRl
VGhyZWFkKGJvb2wgd2FpdAogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0T25BbHRl
cm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcod2FpdFVudGlsRG9uZSk7CiB9CiAKLS8vIFN1c3BlbmQg
YWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUuCi12b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKLSAgICBp
ZiAoY29yZUZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlv
biBzaG91bGQgYmUgY2hhbmdlZCB0YWtlIGEgUmVhc29uRm9yU3VzcGVuc2lvbiBwYXJhbWV0ZXIg
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTcz
MgotICAgICAgICBjb3JlRnJhbWUtPmRvY3VtZW50KCktPnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KEFjdGl2ZURPTU9iamVjdDo6SmF2YVNjcmlwdERlYnVnZ2VyUGF1c2VkKTsKLX0KLQotLy8gUmVz
dW1lIGFjdGl2ZSBET00gb2JqZWN0cyBpbiB0aGlzIGZyYW1lLgotdm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKLSAg
ICBpZiAoY29yZUZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBjb3JlRnJhbWUtPmRvY3VtZW50
KCktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKTsKLX0KLQogdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihjb25zdCBRU3RyaW5nJiBzb3VyY2VP
cmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcm
IGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKICAg
ICBTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKlNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZU9yaWdpbiksIGRlc3RpbmF0aW9uUHJvdG9j
b2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwpAQCAtNDE5
LDM5ICszOTQsMzkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RG9tYWluUmVs
YXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmIKICAgICBTY2hlbWVSZWdpc3Ry
eTo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHNj
aGVtZSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldENhcmV0QnJvd3Np
bmdFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBib29sIHZhbHVlKQordm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFw
dGVyLCBib29sIHZhbHVlKQogewotICAgIHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5zZXR0aW5ncygp
LT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZCh2YWx1ZSk7CisgICAgYWRhcHRlci0+cGFnZS0+c2V0
dGluZ3MoKS0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQodmFsdWUpOwogfQogCi12b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChRV2ViUGFn
ZSogcGFnZSwgYm9vbCB2YWx1ZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFFXZWJQYWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCB2
YWx1ZSkKIHsKLSAgICBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+c2V0dGluZ3MoKS0+c2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQodmFsdWUpOworICAgIGFkYXB0ZXItPnBhZ2UtPnNldHRpbmdz
KCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKHZhbHVlKTsKIH0KIAotdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKFFXZWJQYWdl
KiBwYWdlLCBib29sIGVuYWJsZWQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRT
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyICphZGFwdGVyLCBib29sIGVu
YWJsZWQpCiB7Ci0gICAgcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkID0gZW5hYmxl
ZDsKKyAgICBzdGF0aWNfY2FzdDxFZGl0b3JDbGllbnRRdCo+KGFkYXB0ZXItPnBhZ2UtPmVkaXRv
ckNsaWVudCgpKS0+c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGVuYWJsZWQpOwogfQogCiAK
LXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoUVdlYlBhZ2VB
ZGFwdGVyICphZGFwdGVyLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgcGFnZS0+ZC0+c2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgc3RhdGljX2Nhc3Q8RWRpdG9y
Q2xpZW50UXQqPihhZGFwdGVyLT5wYWdlLT5lZGl0b3JDbGllbnQoKSktPnNldFNlbGVjdFRyYWls
aW5nV2hpdGVzcGFjZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIAotdm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKFFXZWJQYWdlKiBwYWdlLCBjb25z
dCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShRV2ViUGFnZUFkYXB0ZXIqIGFk
YXB0ZXIsIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQogewotICAg
IHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCktPmVkaXRvcigpLT5jb21tYW5kKG5hbWUpLmV4ZWN1dGUodmFsdWUpOworICAgIGFkYXB0
ZXItPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9y
KCktPmNvbW1hbmQobmFtZSkuZXhlY3V0ZSh2YWx1ZSk7CiB9CiAKLWJvb2wgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJp
bmcmIG5hbWUpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc0NvbW1hbmRFbmFibGVk
KFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlciwgY29uc3QgUVN0cmluZyYgbmFtZSkKIHsKLSAgICBy
ZXR1cm4gcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuaXNFbmFibGVkKCk7CisgICAgcmV0
dXJuIGFkYXB0ZXItPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuaXNFbmFibGVkKCk7CiB9CiAKLWJvb2wgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmZpbmRTdHJpbmcoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJp
bmcmIHN0cmluZywgY29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFycmF5KQorYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6ZmluZFN0cmluZyhRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGNv
bnN0IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFycmF5KQogewog
ICAgIC8vIDEuIFBhcnNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGFycmF5CiAgICAgV2ViQ29yZTo6
RmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7CkBAIC00NzMsNyArNDQ4LDcgQEAgYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6ZmluZFN0cmluZyhRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmlu
ZyYgc3RyaW5nLAogICAgIH0KIAogICAgIC8vIDIuIGZpbmQgdGhlIHN0cmluZwotICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IHBhZ2UtPmhhbmRsZSgpLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gYWRh
cHRlci0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAg
IHJldHVybiBmcmFtZSAmJiBmcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBvcHRp
b25zKTsKIH0KIApAQCAtNTE0LDkgKzQ4OSw5IEBAIFFWYXJpYW50TWFwIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29uc3QgUVdlCiAg
ICAgcmV0dXJuIHJlczsKIH0KIAotUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZWxlY3RlZFJhbmdlKFFXZWJQYWdlKiBwYWdlKQorUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZWxlY3RlZFJhbmdlKFFXZWJQYWdlQWRhcHRlciAqYWRhcHRlcikKIHsK
LSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBwYWdlLT5oYW5kbGUoKS0+cGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBm
cmFtZSA9IGFkYXB0ZXItPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKICAgICBRVmFyaWFudExpc3Qgc2VsZWN0ZWRSYW5nZTsKICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpOwog
CkBAIC01MzgsOSArNTEzLDkgQEAgUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZWxlY3RlZFJhbmdlKFFXZWJQYWdlKiBwYWdlKQogCiB9CiAKLVFWYXJpYW50TGlzdCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoUVdlYlBhZ2Uq
IHBhZ2UsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkKK1FWYXJpYW50TGlzdCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoUVdlYlBhZ2VBZGFwdGVy
ICphZGFwdGVyLCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCiB7Ci0gICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBhZGFwdGVyLT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgUVZhcmlh
bnRMaXN0IHJlY3Q7CiAKICAgICBpZiAoKGxvY2F0aW9uICsgbGVuZ3RoIDwgbG9jYXRpb24pICYm
IChsb2NhdGlvbiArIGxlbmd0aCkpCkBAIC01NTYsOSArNTMxLDkgQEAgUVZhcmlhbnRMaXN0IER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShRV2ViUGFn
ZSogcGFnZSwKICAgICByZXR1cm4gcmVjdDsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFXZWJGcmFtZSog
ZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChRV2ViRnJhbWVB
ZGFwdGVyICphZGFwdGVyLCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpCiB7Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC01NzQsOSArNTQ5LDkgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFXZWJGcmFt
ZSoKICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpICYmICFpbnB1dEVsZW1l
bnQtPmlzUGFzc3dvcmRGaWVsZCgpICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXV0b2NvbXBsZXRl
KCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbmRvd3NCZWhhdmlv
ckFzRWRpdGluZ0JlaGF2aW9yKFFXZWJQYWdlKiBwYWdlKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0V2luZG93c0JlaGF2aW9yQXNFZGl0aW5nQmVoYXZpb3IoUVdlYlBhZ2VBZGFw
dGVyKiBhZGFwdGVyKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpj
b3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBpZiAo
IWNvcmVQYWdlKQogICAgICAgICByZXR1cm47CiAgICAgY29yZVBhZ2UtPnNldHRpbmdzKCktPnNl
dEVkaXRpbmdCZWhhdmlvclR5cGUoRWRpdGluZ1dpbmRvd3NCZWhhdmlvcik7CkBAIC02NzYsMTUg
KzY1MSwxNSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpY2F0aW9u
KGJvb2wgYikKICNlbmRpZgogfQogCi1RU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp2
aWV3cG9ydEFzVGV4dChRV2ViUGFnZSogcGFnZSwgaW50IGRldmljZURQSSwgY29uc3QgUVNpemUm
IGRldmljZVNpemUsIGNvbnN0IFFTaXplJiBhdmFpbGFibGVTaXplKQorUVN0cmluZyBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dmlld3BvcnRBc1RleHQoUVdlYlBhZ2VBZGFwdGVyKiBhZGFwdGVy
LCBpbnQgZGV2aWNlRFBJLCBjb25zdCBRU2l6ZSYgZGV2aWNlU2l6ZSwgY29uc3QgUVNpemUmIGF2
YWlsYWJsZVNpemUpCiB7Ci0gICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJncyA9IHBh
Z2UtPmQtPnZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMgYXJncyA9IGFkYXB0ZXItPnZpZXdwb3J0QXJndW1lbnRzKCk7CiAKICAgICBmbG9hdCBkZXZp
Y2VQaXhlbFJhdGlvID0gZGV2aWNlRFBJIC8gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OmRl
cHJlY2F0ZWRUYXJnZXREUEk7CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGNvbmYg
PSBXZWJDb3JlOjpjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3MsCi0gICAgICAgIC8qIGRl
c2t0b3Atd2lkdGggICAgKi8gOTgwLAotICAgICAgICAvKiBkZXZpY2Utd2lkdGggICAgICovIGRl
dmljZVNpemUud2lkdGgoKSwKLSAgICAgICAgLyogZGV2aWNlLWhlaWdodCAgICAqLyBkZXZpY2VT
aXplLmhlaWdodCgpLAorICAgICAgICAvKiBkZXNrdG9wLXdpZHRoICAgICovOTgwLAorICAgICAg
ICAvKiBkZXZpY2Utd2lkdGggICAgICovZGV2aWNlU2l6ZS53aWR0aCgpLAorICAgICAgICAvKiBk
ZXZpY2UtaGVpZ2h0ICAgICovZGV2aWNlU2l6ZS5oZWlnaHQoKSwKICAgICAgICAgZGV2aWNlUGl4
ZWxSYXRpbywKICAgICAgICAgYXZhaWxhYmxlU2l6ZSk7CiAgICAgV2ViQ29yZTo6cmVzdHJpY3RN
aW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6ZShjb25mLCBhdmFpbGFibGVTaXplLCBkZXZp
Y2VQaXhlbFJhdGlvKTsKQEAgLTY5Miw3MiArNjY3LDcyIEBAIFFTdHJpbmcgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnZpZXdwb3J0QXNUZXh0KFFXZWJQYWdlKiBwYWdlLCBpbnQgZGV2aWNlRFBJ
LCBjCiAKICAgICBRU3RyaW5nIHJlczsKICAgICByZXMgPSByZXMuc3ByaW50Zigidmlld3BvcnQg
c2l6ZSAlZHglZCBzY2FsZSAlZiB3aXRoIGxpbWl0cyBbJWYsICVmXSBhbmQgdXNlclNjYWxhYmxl
ICVmXG4iLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb25mLmxheW91dFNpemUud2lk
dGgoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvbmYubGF5b3V0U2l6ZS5oZWln
aHQoKSksCi0gICAgICAgICAgICBjb25mLmluaXRpYWxTY2FsZSwKLSAgICAgICAgICAgIGNvbmYu
bWluaW11bVNjYWxlLAotICAgICAgICAgICAgY29uZi5tYXhpbXVtU2NhbGUsCi0gICAgICAgICAg
ICBjb25mLnVzZXJTY2FsYWJsZSk7CisgICAgICAgIHN0YXRpY19jYXN0PGludD4oY29uZi5sYXlv
dXRTaXplLndpZHRoKCkpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGNvbmYubGF5b3V0U2l6
ZS5oZWlnaHQoKSksCisgICAgICAgIGNvbmYuaW5pdGlhbFNjYWxlLAorICAgICAgICBjb25mLm1p
bmltdW1TY2FsZSwKKyAgICAgICAgY29uZi5tYXhpbXVtU2NhbGUsCisgICAgICAgIGNvbmYudXNl
clNjYWxhYmxlKTsKIAogICAgIHJldHVybiByZXM7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnNjYWxlUGFnZUJ5KFFXZWJGcmFtZSogZnJhbWUsIGZsb2F0IHNjYWxlZmFjdG9y
LCBjb25zdCBRUG9pbnQmIG9yaWdpbikKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNj
YWxlUGFnZUJ5KFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIsIGZsb2F0IHNjYWxlZmFjdG9yLCBj
b25zdCBRUG9pbnQmIG9yaWdpbikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0g
UVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVG
cmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5w
YWdlKCkpCiAgICAgICAgIHBhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZWZhY3Rvciwgb3Jp
Z2luKTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0RldmljZU9y
aWVudGF0aW9uKFFXZWJQYWdlKiBwYWdlLCBib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFs
cGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2Ft
bWEsIGRvdWJsZSBnYW1tYSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgY2FuUHJvdmlk
ZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBi
b29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogI2lmIEVOQUJMRShERVZJQ0Vf
T1JJRU5UQVRJT04pCi0gICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUo
cGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBhZGFwdGVyLT5wYWdlOwogICAgIERldmljZU9y
aWVudGF0aW9uQ2xpZW50TW9jayogbW9ja0NsaWVudCA9IHRvRGV2aWNlT3JpZW50YXRpb25DbGll
bnRNb2NrKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6ZnJvbShjb3JlUGFnZSktPmRldmlj
ZU9yaWVudGF0aW9uQ2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNldE9yaWVudGF0aW9uKERl
dmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblBy
b3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKSk7CiAjZW5kaWYKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2soUVdlYlBh
Z2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEdlb2xvY2F0aW9u
TW9jayhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9O
KQotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAg
IFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVudE1v
Y2sqIG1vY2tDbGllbnQgPSB0b0dlb2xvY2F0aW9uQ2xpZW50TW9jayhHZW9sb2NhdGlvbkNvbnRy
b2xsZXI6OmZyb20oY29yZVBhZ2UpLT5jbGllbnQoKSk7CiAgICAgbW9ja0NsaWVudC0+cmVzZXQo
KTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2Vv
bG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQYWdlKiBwYWdlLCBib29sIGFsbG93ZWQpCit2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKFFXZWJQ
YWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCBhbGxvd2VkKQogewogI2lmIEVOQUJMRShHRU9MT0NB
VElPTikKLSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsK
KyAgICBQYWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGll
bnRNb2NrKiBtb2NrQ2xpZW50ID0gdG9HZW9sb2NhdGlvbkNsaWVudE1vY2soR2VvbG9jYXRpb25D
b250cm9sbGVyOjpmcm9tKGNvcmVQYWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGllbnQtPnNl
dFBlcm1pc3Npb24oYWxsb3dlZCk7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oUVdlYlBhZ2UqIHBhZ2UsIGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQordm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oUVdlYlBhZ2VB
ZGFwdGVyKiBhZGFwdGVyLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSkKIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUGFnZSogY29yZVBh
Z2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7CisgICAgUGFnZSogY29yZVBhZ2UgPSBh
ZGFwdGVyLT5wYWdlOwogICAgIEdlb2xvY2F0aW9uQ2xpZW50TW9jayogbW9ja0NsaWVudCA9IHRv
R2VvbG9jYXRpb25DbGllbnRNb2NrKEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShjb3JlUGFn
ZSktPmNsaWVudCgpKTsKICAgICBtb2NrQ2xpZW50LT5zZXRQb3NpdGlvbihHZW9sb2NhdGlvblBv
c2l0aW9uOjpjcmVhdGUoY3VycmVudFRpbWUoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJh
Y3kpKTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0
IFFTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoUVdlYlBhZ2VBZGFwdGVyKiBhZGFw
dGVyLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQogewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
LSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKyAgICBQ
YWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25DbGllbnRNb2Nr
KiBtb2NrQ2xpZW50ID0gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25DbGllbnRNb2NrKj4oR2VvbG9j
YXRpb25Db250cm9sbGVyOjpmcm9tKGNvcmVQYWdlKS0+Y2xpZW50KCkpOwogICAgIG1vY2tDbGll
bnQtPnNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlKTsKICNlbmRpZgogfQogCi1p
bnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKFFXZWJQYWdlKiBwYWdlKQoraW50IER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhRV2ViUGFn
ZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFBhZ2Uq
IGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQ
YWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVudE1vY2sqIG1vY2tDbGll
bnQgPSB0b0dlb2xvY2F0aW9uQ2xpZW50TW9jayhHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20o
Y29yZVBhZ2UpLT5jbGllbnQoKSk7CiAgICAgcmV0dXJuIG1vY2tDbGllbnQtPm51bWJlck9mUGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cygpOwogI2Vsc2UKQEAgLTc5NCw5ICs3NjksOSBAQCBRTWFw
PFFTdHJpbmcsIFFXZWJIaXN0b3J5SXRlbT4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdldENo
aWxkSGlzdG9yeUl0ZW1zKGNvbgogICAgIHJldHVybiBraWRzOwogfQogCi1ib29sIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShRV2ViRnJhbWUqIGZyYW1lKQorYm9vbCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2hvdWxkQ2xvc2UoUVdlYkZyYW1lQWRhcHRlciAqYWRhcHRl
cikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZy
YW1lOwogICAgIHJldHVybiBjb3JlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRDbG9zZSgpOwogfQog
CkBAIC04MDUsNyArNzgwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJT
Y3JpcHRXb3JsZHMoKQogICAgIG1fd29ybGRNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoUVdlYkZyYW1l
KiBmcmFtZSwgaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKFFXZWJGcmFt
ZUFkYXB0ZXIgKmFkYXB0ZXIsIGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7
CiAgICAgUVdlYlNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZDsKICAgICBpZiAoIXdvcmxkSUQpIHsK
QEAgLTgxNiw3ICs3OTEsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbgogICAgIH0gZWxzZQog
ICAgICAgICBzY3JpcHRXb3JsZCA9IG1fd29ybGRNYXAudmFsdWUod29ybGRJRCk7CiAKLSAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogCiAgICAg
U2NyaXB0Q29udHJvbGxlciogcHJveHkgPSBjb3JlRnJhbWUtPnNjcmlwdCgpOwogCkBAIC04MjUs
MTQgKzgwMCwxNCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChRV2ViRnJhbWUqIGZyYW1lLCBpbgogICAgIHByb3h5LT5leGVjdXRl
U2NyaXB0SW5Xb3JsZChzY3JpcHRXb3JsZC0+d29ybGQoKSwgc2NyaXB0LCB0cnVlKTsKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQoUVdlYlBhZ2Uq
IHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGNvbnN0
IFFTdHJpbmcmIHNvdXJjZUNvZGUpCiB7Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmdyb3Vw
KCkuYWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzb3Vy
Y2VDb2RlLCBRVXJsKCksIFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIFdlYkNv
cmU6OkluamVjdEluQWxsRnJhbWVzKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5ncm91cCgpLmFkZFVz
ZXJTdHlsZVNoZWV0VG9Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgc291cmNlQ29kZSwg
UVVybCgpLCBWZWN0b3I8U3RyaW5nPigpLCBWZWN0b3I8U3RyaW5nPigpLCBXZWJDb3JlOjpJbmpl
Y3RJbkFsbEZyYW1lcyk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92
ZVVzZXJTdHlsZVNoZWV0cyhRV2ViUGFnZSogcGFnZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7
Ci0gICAgcGFnZS0+aGFuZGxlKCktPnBhZ2UtPmdyb3VwKCkucmVtb3ZlVXNlclN0eWxlU2hlZXRz
RnJvbVdvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBhZGFwdGVyLT5wYWdlLT5n
cm91cCgpLnJlbW92ZVVzZXJTdHlsZVNoZWV0c0Zyb21Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNpbXVsYXRlRGVza3Rv
cE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRpdGxlKQpAQCAtODQyLDMxICs4MTcs
MzEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2ltdWxhdGVEZXNrdG9wTm90aWZp
Y2F0aW9uQ2xpY2soY29uc3QgUVN0cmluZyYgdGkKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKFFXZWJQYWdlKiBwYWdlLCBib29sIGZs
YWcpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKFFXZWJQ
YWdlQWRhcHRlciogYWRhcHRlciwgYm9vbCBmbGFnKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0g
UVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRl
ci0+cGFnZTsKICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQYWdlLT5zZXREZWZlcnNM
b2FkaW5nKGZsYWcpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2so
UVdlYlBhZ2UqIHBhZ2UpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpnb0JhY2soUVdl
YlBhZ2VBZGFwdGVyKiBhZGFwdGVyKQogewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQ
cml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsK
ICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQYWdlLT5nb0JhY2soKTsKIH0KIAogLy8g
QVBJIENhbmRpZGF0ZT8KLVFTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc3BvbnNl
TWltZVR5cGUoUVdlYkZyYW1lKiBmcmFtZSkKK1FTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnJlc3BvbnNlTWltZVR5cGUoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRlcikKIHsKLSAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIgPSBjb3JlRnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpOwogICAgIHJldHVybiBkb2NMb2FkZXItPnJlc3BvbnNlTUlNRVR5cGUo
KTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIoUVdlYkZy
YW1lKiBmcmFtZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyT3BlbmVyKFFX
ZWJGcmFtZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFt
ZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBj
b3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5zZXRP
cGVuZXIoMCk7CiB9CiAKQEAgLTg3NSw0MCArODUwLDE2IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmFkZFVSTFRvUmVkaXJlY3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBjb25zdCBR
U3RyCiAgICAgRnJhbWVMb2FkZXJDbGllbnRRdDo6VVJMc1RvUmVkaXJlY3Rbb3JpZ2luXSA9IGRl
c3RpbmF0aW9uOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRJbnRlcmFj
dGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChRV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGUpCit2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9u
RW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFBh
Z2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAgIFBhZ2UqIGNv
cmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICBpZiAoY29yZVBhZ2UpCiAgICAgICAgIGNvcmVQ
YWdlLT5zZXR0aW5ncygpLT5zZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChlbmFi
bGUpOwogfQogCi0jaWZuZGVmIFFUX05PX01FTlUKLXN0YXRpYyBRU3RyaW5nTGlzdCBpdGVyYXRl
Q29udGV4dE1lbnUoUU1lbnUqIG1lbnUpCi17Ci0gICAgaWYgKCFtZW51KQotICAgICAgICByZXR1
cm4gUVN0cmluZ0xpc3QoKTsKLQotICAgIFFTdHJpbmdMaXN0IGl0ZW1zOwotICAgIFFMaXN0PFFB
Y3Rpb24gKj4gYWN0aW9ucyA9IG1lbnUtPmFjdGlvbnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFjdGlvbnMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhY3Rpb25zLmF0KGkpLT5p
c1NlcGFyYXRvcigpKQotICAgICAgICAgICAgaXRlbXMgPDwgUUxhdGluMVN0cmluZygiPHNlcGFy
YXRvcj4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXRlbXMgPDwgYWN0aW9ucy5hdChp
KS0+dGV4dCgpOwotICAgICAgICBpZiAoYWN0aW9ucy5hdChpKS0+bWVudSgpKQotICAgICAgICAg
ICAgaXRlbXMgPDwgaXRlcmF0ZUNvbnRleHRNZW51KGFjdGlvbnMuYXQoaSktPm1lbnUoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBpdGVtczsKLX0KLSNlbmRpZgotCi1RU3RyaW5nTGlzdCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Y29udGV4dE1lbnUoUVdlYlBhZ2UqIHBhZ2UpCitRU3RyaW5nTGlz
dCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29udGV4dE1lbnUoUVdlYlBhZ2VBZGFwdGVyKiBw
YWdlKQogewotI2lmbmRlZiBRVF9OT19DT05URVhUTUVOVQotICAgIHJldHVybiBpdGVyYXRlQ29u
dGV4dE1lbnUocGFnZS0+ZC0+Y3VycmVudENvbnRleHRNZW51LmRhdGEoKSk7Ci0jZWxzZQotICAg
IHJldHVybiBRU3RyaW5nTGlzdCgpOwotI2VuZGlmCisgICAgcmV0dXJuIHBhZ2UtPm1lbnVBY3Rp
b25zQXNUZXh0KCk7CiB9CiAKIGRvdWJsZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVmYXVs
dE1pbmltdW1UaW1lckludGVydmFsKCkKQEAgLTkxNiwxOCArODY3LDE4IEBAIGRvdWJsZSBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVmYXVsdE1pbmltdW1UaW1lckludGVydmFsKCkKICAgICBy
ZXR1cm4gU2V0dGluZ3M6OmRlZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CiB9CiAKLXZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFsKFFXZWJQYWdl
KiBwYWdlLCBkb3VibGUgaW50ZXJ2YWwpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRNaW5pbXVtVGltZXJJbnRlcnZhbChRV2ViUGFnZUFkYXB0ZXIqIGFkYXB0ZXIsIGRvdWJsZSBp
bnRlcnZhbCkKIHsKLSAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShw
YWdlKTsKKyAgICBQYWdlKiBjb3JlUGFnZSA9IGFkYXB0ZXItPnBhZ2U7CiAgICAgaWYgKCFjb3Jl
UGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29yZVBhZ2UtPnNldHRpbmdzKCktPnNldE1p
bkRPTVRpbWVySW50ZXJ2YWwoaW50ZXJ2YWwpOwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKFFXZWJQYWdlICpwYWdlLCBjb25z
dCBRVXJsJiB1cmwsIGNvbnN0IFFVcmwmIGZpcnN0UGFydHlVcmwpCitib29sIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dzKFFXZWJQYWdlQWRhcHRl
ciAqYWRhcHRlciwgY29uc3QgUVVybCYgdXJsLCBjb25zdCBRVXJsJiBmaXJzdFBhcnR5VXJsKQog
ewotICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBhZ2UpOworICAg
IFBhZ2UqIGNvcmVQYWdlID0gYWRhcHRlci0+cGFnZTsKICAgICByZXR1cm4gdGhpcmRQYXJ0eUNv
b2tpZVBvbGljeVBlcm1pdHMoY29yZVBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bmV0d29y
a2luZ0NvbnRleHQoKSwgdXJsLCBmaXJzdFBhcnR5VXJsKTsKIH0KIApAQCAtOTM2LDEyICs4ODcs
MTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZW5hYmxlTW9ja1Njcm9sbGJhcnMo
KQogICAgIFNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQodHJ1ZSk7CiB9CiAKLVFV
cmwgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKK1FVcmwgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6Om1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFXZWJGcmFtZUFkYXB0
ZXIqIGFkYXB0ZXIsIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKIHsKICAgICBRVXJsIHJlczsK
IAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCi0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuIHJlczsKIApAQCAtOTY3LDEwICs5MTgsMTAgQEAgUVVybCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6bWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QK
IH0KIAogLy8gQVBJIENhbmRpZGF0ZT8KLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29u
c3QgUVVybCYgYmFzZVVybCwgY29uc3QgUVVybCYgZmFpbGluZ1VybCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lQWRhcHRlciogYWRhcHRl
ciwgY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYgYmFzZVVybCwgY29uc3QgUVVybCYg
ZmFpbGluZ1VybCkKIHsKICAgICBLVVJMIGt1cmwoYmFzZVVybCk7Ci0gICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOworICAgIFdlYkNv
cmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBhZGFwdGVyLT5mcmFtZTsKICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChrdXJsKTsKICAgICBjb25zdCBRQnl0ZUFycmF5IHV0ZjggPSBo
dG1sLnRvVXRmOCgpOwogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0
YSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHV0ZjguY29uc3REYXRhKCksIHV0Zjgu
bGVuZ3RoKCkpOwpAQCAtOTc4LDkgKzkyOSw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldEFsdGVybmF0ZUh0bWwoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYKICAg
ICBjb3JlRnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxz
ZSk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlv
bihRV2ViUGFnZSogcGFnZSwgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihRV2ViUGFnZUFkYXB0ZXIgKmFkYXB0ZXIsIGNv
bnN0IGNoYXIqIHRleHQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFnZS0+aGFuZGxlKCktPnBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBhZGFwdGVyLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OTcsMTUgKzk0
OCw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihR
V2ViUGFnZSogcGFnZSwgY29uc3QgY2hhciogdGV4CiAgICAgICAgIGVkaXRvci0+aW5zZXJ0VGV4
dChTdHJpbmc6OmZyb21VVEY4KHRleHQpLCAwKTsKIH0KIAotUVN0cmluZyBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6bGF5ZXJUcmVlQXNUZXh0KFFXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgV2Vi
Q29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwot
ICAgIHJldHVybiBjb3JlRnJhbWUtPmxheWVyVHJlZUFzVGV4dCgpOwotfQotCi12b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1lKiBmcmFt
ZSkKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChR
V2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJh
bWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSog
Y29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRv
SlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9B
U1NFUlQod2luZG93KTsKIApAQCAtMTAyMiw5ICs5NjcsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiAg
ICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiB9
CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KFFX
ZWJGcmFtZSogZnJhbWUpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVy
bmFsc09iamVjdChRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyKQogewotICAgIFdlYkNvcmU6OkZy
YW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBXZWJD
b3JlOjpGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7CiAgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIApAQCAtMTA0MSw5ICs5ODYsOSBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNv
bnRleHQpOwogfQogCi1RSW1hZ2UgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhaW50UGFnZXNX
aXRoQm91bmRhcmllcyhRV2ViRnJhbWUqIHFmcmFtZSkKK1FJbWFnZSBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cGFpbnRQYWdlc1dpdGhCb3VuZGFyaWVzKFFXZWJGcmFtZUFkYXB0ZXIqIGFkYXB0
ZXIpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxZnJhbWUp
OworICAgIEZyYW1lKiBmcmFtZSA9IGFkYXB0ZXItPmZyYW1lOwogICAgIFByaW50Q29udGV4dCBw
cmludENvbnRleHQoZnJhbWUpOwogCiAgICAgUVJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCktPmZy
YW1lUmVjdCgpOwpAQCAtMTA4NCwxMTkgKzEwMjksMjEgQEAgUUltYWdlIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpwYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMoUVdlYkZyYW1lKiBxZnJhbWUpCiAg
ICAgcmV0dXJuIGltYWdlOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRU
cmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWUqIGZyYW1lLCBib29sIGVuYWJsZSkKK3ZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZUFkYXB0
ZXIqIGFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpLT52aWV3KCktPnNldFRyYWNrc1JlcGFpbnRzKGVuYWJsZSk7CisgICAgYWRhcHRlci0+
ZnJhbWUtPnZpZXcoKS0+c2V0VHJhY2tzUmVwYWludHMoZW5hYmxlKTsKIH0KIAotYm9vbCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6dHJhY2tSZXBhaW50UmVjdHMoUVdlYkZyYW1lKiBmcmFtZSkK
K2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFt
ZUFkYXB0ZXIqIGFkYXB0ZXIpCiB7Ci0gICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpLT52aWV3KCktPmlzVHJhY2tpbmdSZXBhaW50cygpOworICAgIHJldHVybiBhZGFwdGVy
LT5mcmFtZS0+dmlldygpLT5pc1RyYWNraW5nUmVwYWludHMoKTsKIH0KIAotdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Z2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWUqIGZyYW1l
LCBRVmVjdG9yPFFSZWN0PiYgcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
Z2V0VHJhY2tlZFJlcGFpbnRSZWN0cyhRV2ViRnJhbWVBZGFwdGVyKiBhZGFwdGVyLCBRVmVjdG9y
PFFSZWN0PiYgcmVzdWx0KQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKGZyYW1lKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gYWRhcHRlci0+ZnJhbWU7
CiAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IGNvcmVGcmFtZS0+dmlldygpLT50
cmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgcmVzdWx0LnJlc2l6ZShyZWN0cy5zaXplKCkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVjdHNbaV0pOwogfQotCi0vLyBQcm92aWRlIGEgYmFja3dhcmQgY29tcGF0
aWJpbGl0eSB3aXRoIHByZXZpb3VzbHkgZXhwb3J0ZWQgcHJpdmF0ZSBzeW1ib2xzIGFzIG9mIFF0
V2ViS2l0IDQuNiByZWxlYXNlCi0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfcmVzdW1lQWN0aXZl
RE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VY
UE9SVCBxdF9zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhRV2ViRnJhbWUqIGZyYW1lKQotewotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhmcmFtZSk7
Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHJ0X2NsZWFyRnJhbWVOYW1lKFFXZWJGcmFt
ZSogZnJhbWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNsZWFyRnJhbWVOYW1l
KGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfZ2FyYmFnZUNvbGxlY3Rv
cl9jb2xsZWN0KCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2FyYmFnZUNvbGxl
Y3RvckNvbGxlY3QoKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfZ2FyYmFnZUNv
bGxlY3Rvcl9jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0
ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwotfQotCi1pbnQgUVdFQktJVF9FWFBPUlQgcXRf
ZHJ0X2phdmFTY3JpcHRPYmplY3RzQ291bnQoKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpOwotfQotCi1pbnQgUVdFQktJVF9F
WFBPUlQgcXRfZHJ0X251bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhRV2ViRnJhbWUqIGZyYW1lKQot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmlt
YXRpb25zKGZyYW1lKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfb3ZlcndyaXRl
UGx1Z2luRGlyZWN0b3JpZXMoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpvdmVy
d3JpdGVQbHVnaW5EaXJlY3RvcmllcygpOwotfQotCi1ib29sIFFXRUJLSVRfRVhQT1JUIHF0X2Ry
dF9wYXVzZUFuaW1hdGlvbihRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQotewotICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUsIGFuaW1h
dGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Ci19Ci0KLWJvb2wgUVdFQktJVF9FWFBPUlQgcXRf
ZHJ0X3BhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0
cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyAmZWxlbWVudElk
KQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VUcmFuc2l0aW9u
T2ZQcm9wZXJ0eShmcmFtZSwgcHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQpOwotfQotCi12
b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2RydF9yZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKQot
ewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlz
dHMoKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfcnVuKGJvb2wgYikKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZChi
KTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfd2hpdGVMaXN0QWNjZXNzRnJvbU9y
aWdpbihjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0
aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucykKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2hp
dGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW4sIGRlc3RpbmF0aW9uUHJvdG9jb2ws
IGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQotCi1RU3Ry
aW5nIFFXRUJLSVRfRVhQT1JUIHF0X3dlYnBhZ2VfZ3JvdXBOYW1lKFFXZWJQYWdlKiBwYWdlKQot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZShw
YWdlKTsKLX0KLQotdm9pZCBRV0VCS0lUX0VYUE9SVCBxdF93ZWJwYWdlX3NldEdyb3VwTmFtZShR
V2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgZ3JvdXBOYW1lKQotewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHBhZ2UsIGdyb3VwTmFtZSk7Ci19
Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9mcmFtZV9sb2FkZXIoYm9vbCBiKQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIoYik7Ci19Ci0KLXZv
aWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9yZXNvdXJjZV9sb2FkX2NhbGxiYWNrcyhib29sIGIp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFj
a3MoYik7Ci19Ci0KLXZvaWQgUVdFQktJVF9FWFBPUlQgcXRfZHVtcF9lZGl0aW5nX2NhbGxiYWNr
cyhib29sIGIpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKGIpOwotfQotCi12b2lkIFFXRUJLSVRfRVhQT1JUIHF0X2R1bXBfc2V0X2FjY2VwdHNf
ZWRpdGluZyhib29sIGIpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBTZXRB
Y2NlcHRzRWRpdGluZyhiKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCmluZGV4IGQwNjAwZmZhN2Rh
ZTQ0OWYxODEwNTIyYTljNjA5ZjgzNDIxYTYzYzkuLjcyNTA1YjhkMzUyMGM3OTQ4ZDc0NjhiMmQ2
Y2I3YThlNjQ3YWU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKQEAgLTQzLDcgKzQzLDggQEAgY2xh
c3MgUXREUlROb2RlUnVudGltZTsKIAogY2xhc3MgUVdlYkVsZW1lbnQ7CiBjbGFzcyBRV2ViRnJh
bWU7Ci1jbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXI7CitjbGFzcyBRV2Vi
UGFnZUFkYXB0ZXI7CiBjbGFzcyBRV2ViSGlzdG9yeUl0ZW07CiBjbGFzcyBRV2ViU2NyaXB0V29y
bGQ7CiAKQEAgLTg5LDI1ICs5MCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUoUVdl
YlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0NvbW1hbmRFbmFibGVkKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBR
U3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBmaW5kU3RyaW5nKFFXZWJQYWdlKiBwYWdl
LCBjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJpbmdMaXN0JiBvcHRpb25BcnJheSk7
Ci0gICAgc3RhdGljIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKFFXZWJQYWdlKiBw
YWdlLCBib29sIGVuYWJsZWQpOwotICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQoUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCk7Ci0gICAgc3RhdGlj
IFFWYXJpYW50TGlzdCBzZWxlY3RlZFJhbmdlKFFXZWJQYWdlKiBwYWdlKTsKLSAgICBzdGF0aWMg
UVZhcmlhbnRMaXN0IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKFFXZWJQYWdlKiBwYWdlLCBp
bnQgbG9jYXRpb24sIGludCBsZW5ndGgpOwotICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1Db21wb3Np
dGlvbihRV2ViUGFnZSosIGNvbnN0IGNoYXIqIHRleHQpOworICAgIHN0YXRpYyB2b2lkIGV4ZWN1
dGVDb3JlQ29tbWFuZEJ5TmFtZShRV2ViUGFnZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBuYW1l
LCBjb25zdCBRU3RyaW5nJiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgaXNDb21tYW5kRW5hYmxl
ZChRV2ViUGFnZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBuYW1lKTsKKyAgICBzdGF0aWMgYm9v
bCBmaW5kU3RyaW5nKFFXZWJQYWdlQWRhcHRlciosIGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3Ry
aW5nTGlzdCYgb3B0aW9uQXJyYXkpOworICAgIHN0YXRpYyB2b2lkIHNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqLCBib29sIGVuYWJsZWQpOworICAgIHN0YXRpYyB2
b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoUVdlYlBhZ2VBZGFwdGVyKiwg
Ym9vbCBlbmFibGVkKTsKKyAgICBzdGF0aWMgUVZhcmlhbnRMaXN0IHNlbGVjdGVkUmFuZ2UoUVdl
YlBhZ2VBZGFwdGVyKik7CisgICAgc3RhdGljIFFWYXJpYW50TGlzdCBmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZShRV2ViUGFnZUFkYXB0ZXIqLCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpOwor
ICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihRV2ViUGFnZUFkYXB0ZXIqLCBjb25z
dCBjaGFyKiB0ZXh0KTsKIAotICAgIHN0YXRpYyBib29sIHBhdXNlQW5pbWF0aW9uKFFXZWJGcmFt
ZSosIGNvbnN0IFFTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBRU3RyaW5nJiBlbGVt
ZW50SWQpOwotICAgIHN0YXRpYyBib29sIHBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoUVdlYkZy
YW1lKiwgY29uc3QgUVN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcmIGVs
ZW1lbnRJZCk7Ci0gICAgc3RhdGljIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoUVdlYkZy
YW1lKiBmcmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhRV2Vi
RnJhbWUqIGZyYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBwYXVzZUFuaW1hdGlvbihRV2ViRnJhbWVB
ZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcm
IGVsZW1lbnRJZCk7CisgICAgc3RhdGljIGJvb2wgcGF1c2VUcmFuc2l0aW9uT2ZQcm9wZXJ0eShR
V2ViRnJhbWVBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0
IFFTdHJpbmcmIGVsZW1lbnRJZCk7CiAKICAgICBzdGF0aWMgdm9pZCBzZXREb21haW5SZWxheGF0
aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBjb25zdCBRU3RyaW5nJiBz
Y2hlbWUpOwotICAgIHN0YXRpYyB2b2lkIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoUVdlYlBh
Z2UqLCBib29sKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChRV2Vi
UGFnZSogcGFnZSwgYm9vbCB2YWx1ZSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoUVdlYlBhZ2UqLCBib29sKTsKLSAgICBzdGF0aWMgdm9pZCBzZXREdW1w
UmVuZGVyVHJlZU1vZGVFbmFibGVkKGJvb2wgYik7CisgICAgc3RhdGljIHZvaWQgc2V0RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqLCBib29sKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqLCBib29sIHZhbHVlKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChRV2ViUGFnZUFk
YXB0ZXIqLCBib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXREdW1wUmVuZGVyVHJlZU1vZGVFbmFi
bGVkKGJvb2wpOwogCiAgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsK
ICAgICBzdGF0aWMgdm9pZCBnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFk
KGJvb2wgd2FpdFVudGlsRG9uZSk7CkBAIC0xMTUsMjAgKzExNCwyMCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IFFXZWJFbGVtZW50JiwgY29uc3QgUVN0
cmluZyYgdmFsdWUpOwogICAgIHN0YXRpYyBpbnQgamF2YVNjcmlwdE9iamVjdHNDb3VudCgpOwog
ICAgIHN0YXRpYyB2b2lkIGNsZWFyU2NyaXB0V29ybGRzKCk7Ci0gICAgc3RhdGljIHZvaWQgZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoUVdlYkZyYW1lKiBmcmFtZSwgaW50IHdvcmxkSUQs
IGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CisgICAgc3RhdGljIHZvaWQgZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoUVdlYkZyYW1lQWRhcHRlciosIGludCB3b3JsZElELCBjb25zdCBRU3Ry
aW5nJiBzY3JpcHQpOwogCi0gICAgc3RhdGljIHZvaWQgd2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlw
dChRV2ViUGFnZSogcGFnZSwgbG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7Ci0g
ICAgc3RhdGljIHZvaWQgd2ViSW5zcGVjdG9yU2hvdyhRV2ViUGFnZSogcGFnZSk7Ci0gICAgc3Rh
dGljIHZvaWQgd2ViSW5zcGVjdG9yQ2xvc2UoUVdlYlBhZ2UqIHBhZ2UpOworICAgIHN0YXRpYyB2
b2lkIHdlYkluc3BlY3RvckV4ZWN1dGVTY3JpcHQoUVdlYlBhZ2VBZGFwdGVyKiwgbG9uZyBjYWxs
SWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CisgICAgc3RhdGljIHZvaWQgd2ViSW5zcGVjdG9y
U2hvdyhRV2ViUGFnZUFkYXB0ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCB3ZWJJbnNwZWN0b3JDbG9z
ZShRV2ViUGFnZUFkYXB0ZXIqKTsKIAotICAgIHN0YXRpYyBRU3RyaW5nIHdlYlBhZ2VHcm91cE5h
bWUoUVdlYlBhZ2UgKnBhZ2UpOwotICAgIHN0YXRpYyB2b2lkIHdlYlBhZ2VTZXRHcm91cE5hbWUo
UVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIGdyb3VwTmFtZSk7Ci0gICAgc3RhdGljIHZv
aWQgY2xlYXJGcmFtZU5hbWUoUVdlYkZyYW1lKiBmcmFtZSk7CisgICAgc3RhdGljIFFTdHJpbmcg
d2ViUGFnZUdyb3VwTmFtZShRV2ViUGFnZUFkYXB0ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCB3ZWJQ
YWdlU2V0R3JvdXBOYW1lKFFXZWJQYWdlQWRhcHRlciosIGNvbnN0IFFTdHJpbmcmIGdyb3VwTmFt
ZSk7CisgICAgc3RhdGljIHZvaWQgY2xlYXJGcmFtZU5hbWUoUVdlYkZyYW1lQWRhcHRlciopOwog
ICAgIHN0YXRpYyB2b2lkIG92ZXJ3cml0ZVBsdWdpbkRpcmVjdG9yaWVzKCk7Ci0gICAgc3RhdGlj
IGludCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoUVdlYkZyYW1lKik7Ci0gICAgc3RhdGljIGJv
b2wgaGFzRG9jdW1lbnRFbGVtZW50KFFXZWJGcmFtZSogZnJhbWUpOwotICAgIHN0YXRpYyBib29s
IGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChRV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOwotICAgIHN0YXRpYyB2b2lkIHNldFdpbmRvd3NC
ZWhhdmlvckFzRWRpdGluZ0JlaGF2aW9yKFFXZWJQYWdlKik7CisgICAgc3RhdGljIGludCBudW1i
ZXJPZkFjdGl2ZUFuaW1hdGlvbnMoUVdlYkZyYW1lQWRhcHRlciopOworICAgIHN0YXRpYyBib29s
IGhhc0RvY3VtZW50RWxlbWVudChRV2ViRnJhbWVBZGFwdGVyKik7CisgICAgc3RhdGljIGJvb2wg
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKFFXZWJGcmFtZUFkYXB0ZXIq
LCBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOworICAgIHN0YXRpYyB2b2lkIHNldFdpbmRvd3NC
ZWhhdmlvckFzRWRpdGluZ0JlaGF2aW9yKFFXZWJQYWdlQWRhcHRlciopOwogCiAgICAgc3RhdGlj
IHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwogCkBAIC0xMzYsODYgKzEzNSw4NCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlV2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdp
bihjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9u
UHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3Rp
bmF0aW9uU3ViZG9tYWlucyk7CiAgICAgc3RhdGljIHZvaWQgcmVzZXRPcmlnaW5BY2Nlc3NXaGl0
ZUxpc3RzKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oUVdl
YlBhZ2UqLCBib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3Zp
ZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7
CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKFFXZWJQYWdlQWRhcHRl
ciosIGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJl
dGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHJlc2V0R2VvbG9jYXRpb25Nb2NrKFFXZWJQYWdlKik7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbihRV2ViUGFnZSosIGJvb2wgYWxs
b3dlZCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oUVdlYlBh
Z2UqLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSk7
Ci0gICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVy
cm9yKFFXZWJQYWdlKiwgY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7Ci0gICAgc3RhdGljIGludCBu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhRV2ViUGFnZSopOwor
ICAgIHN0YXRpYyB2b2lkIHJlc2V0R2VvbG9jYXRpb25Nb2NrKFFXZWJQYWdlQWRhcHRlciopOwor
ICAgIHN0YXRpYyB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24oUVdlYlBhZ2VBZGFw
dGVyKiwgYm9vbCBhbGxvd2VkKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbihRV2ViUGFnZUFkYXB0ZXIqLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSk7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFFXZWJQYWdlQWRhcHRlciosIGNvbnN0IFFTdHJpbmcm
IG1lc3NhZ2UpOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMoUVdlYlBhZ2VBZGFwdGVyKik7CiAKICAgICBzdGF0aWMgaW50IHdvcmtl
clRocmVhZENvdW50KCk7CiAKICAgICBzdGF0aWMgUVN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0
ZW0oY29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKTsKLSAgICBzdGF0aWMgUVZhcmlhbnRNYXAg
Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVt
ZW50KTsKKyAgICBzdGF0aWMgUVZhcmlhbnRNYXAgY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKGNvbnN0IFFXZWJFbGVtZW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBkdW1wRnJhbWVM
b2FkZXIoYm9vbCBiKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wRnJhbWVMb2FkZXIoYm9vbCk7CiAg
ICAgc3RhdGljIHZvaWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhib29sKTsKLSAgICBz
dGF0aWMgdm9pZCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyKGJvb2wgYik7Ci0gICAgc3Rh
dGljIHZvaWQgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyhib29sIGIpOwotICAgIHN0YXRpYyB2
b2lkIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGJvb2wgYik7CisgICAgc3RhdGljIHZv
aWQgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlcihib29sKTsKKyAgICBzdGF0aWMgdm9pZCBk
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIGR1bXBSZXNv
dXJjZVJlc3BvbnNlTUlNRVR5cGVzKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIGR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3NQYXRoKGNvbnN0IFFTdHJpbmcmIHBhdGgpOwogICAgIHN0YXRpYyB2b2lk
IGR1bXBXaWxsQ2FjaGVSZXNwb25zZUNhbGxiYWNrcyhib29sKTsKLSAgICBzdGF0aWMgdm9pZCBz
ZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoYm9vbCBiKTsKLSAgICBzdGF0
aWMgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGIpOwotICAgIHN0YXRp
YyB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVycyhjb25zdCBRU3RyaW5nTGlzdCYg
aGVhZGVycyk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEhpc3RvcnlDYWxsYmFja3MoYm9vbCBiKTsK
LSAgICBzdGF0aWMgdm9pZCBkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKGJvb2wgYik7CisgICAg
c3RhdGljIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wp
OworICAgIHN0YXRpYyB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGJvb2wpOwor
ICAgIHN0YXRpYyB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVycyhjb25zdCBRU3Ry
aW5nTGlzdCYpOworICAgIHN0YXRpYyB2b2lkIGR1bXBIaXN0b3J5Q2FsbGJhY2tzKGJvb2wpOwor
ICAgIHN0YXRpYyB2b2lkIGR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3MoYm9vbCk7CiAKLSAgICBz
dGF0aWMgdm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wgYik7CisgICAgc3Rh
dGljIHZvaWQgc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29sKTsKIAotICAgIHN0YXRp
YyB2b2lkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKGJvb2wgYik7Ci0gICAgc3RhdGljIHZvaWQgZHVt
cFNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYik7CisgICAgc3RhdGljIHZvaWQgZHVtcEVkaXRpbmdD
YWxsYmFja3MoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgZHVtcFNldEFjY2VwdHNFZGl0aW5nKGJv
b2wpOwogCi0gICAgc3RhdGljIHZvaWQgZHVtcE5vdGlmaWNhdGlvbihib29sIGIpOworICAgIHN0
YXRpYyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCk7CisgICAgc3RhdGljIFFTdHJpbmcgdmll
d3BvcnRBc1RleHQoUVdlYlBhZ2VBZGFwdGVyKiwgaW50IGRldmljZURQSSwgY29uc3QgUVNpemUm
IGRldmljZVNpemUsIGNvbnN0IFFTaXplJiBhdmFpbGFibGVTaXplKTsKIAotICAgIHN0YXRpYyBR
TWFwPFFTdHJpbmcsIFFXZWJIaXN0b3J5SXRlbT4gZ2V0Q2hpbGRIaXN0b3J5SXRlbXMoY29uc3Qg
UVdlYkhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSk7Ci0gICAgc3RhdGljIGJvb2wgaXNUYXJnZXRJ
dGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pOwotICAgIHN0YXRpYyBRU3Ry
aW5nIGhpc3RvcnlJdGVtVGFyZ2V0KGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0p
OworICAgIHN0YXRpYyBRTWFwPFFTdHJpbmcsIFFXZWJIaXN0b3J5SXRlbT4gZ2V0Q2hpbGRIaXN0
b3J5SXRlbXMoY29uc3QgUVdlYkhpc3RvcnlJdGVtJik7CisgICAgc3RhdGljIGJvb2wgaXNUYXJn
ZXRJdGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYpOworICAgIHN0YXRpYyBRU3RyaW5nIGhpc3Rv
cnlJdGVtVGFyZ2V0KGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYpOwogCi0gICAgc3RhdGljIGJvb2wg
c2hvdWxkQ2xvc2UoUVdlYkZyYW1lKiBmcmFtZSk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkQ2xv
c2UoUVdlYkZyYW1lQWRhcHRlciopOwogCiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUG9saWN5
RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpOwogCi0gICAgc3RhdGljIHZv
aWQgYWRkVXNlclN0eWxlU2hlZXQoUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHNvdXJj
ZUNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0cyhRV2ViUGFnZSop
OworICAgIHN0YXRpYyB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KFFXZWJQYWdlQWRhcHRlciosIGNv
bnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhRV2ViUGFnZUFkYXB0ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBzaW11bGF0ZURlc2t0
b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIFFT
dHJpbmcgdmlld3BvcnRBc1RleHQoUVdlYlBhZ2UqLCBpbnQgZGV2aWNlRFBJLCBjb25zdCBRU2l6
ZSYgZGV2aWNlU2l6ZSwgY29uc3QgUVNpemUmIGF2YWlsYWJsZVNpemUpOwogCi0gICAgc3RhdGlj
IHZvaWQgc2NhbGVQYWdlQnkoUVdlYkZyYW1lKiwgZmxvYXQgc2NhbGUsIGNvbnN0IFFQb2ludCYg
b3JpZ2luKTsKKyAgICBzdGF0aWMgdm9pZCBzY2FsZVBhZ2VCeShRV2ViRnJhbWVBZGFwdGVyKiwg
ZmxvYXQgc2NhbGUsIGNvbnN0IFFQb2ludCYgb3JpZ2luKTsKIAotICAgIHN0YXRpYyBRU3RyaW5n
IHJlc3BvbnNlTWltZVR5cGUoUVdlYkZyYW1lKik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJPcGVu
ZXIoUVdlYkZyYW1lKik7CisgICAgc3RhdGljIFFTdHJpbmcgcmVzcG9uc2VNaW1lVHlwZShRV2Vi
RnJhbWVBZGFwdGVyKik7CisgICAgc3RhdGljIHZvaWQgY2xlYXJPcGVuZXIoUVdlYkZyYW1lQWRh
cHRlciopOwogICAgIHN0YXRpYyB2b2lkIGFkZFVSTFRvUmVkaXJlY3QoY29uc3QgUVN0cmluZyYg
b3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbik7Ci0gICAgc3RhdGljIFFTdHJpbmdM
aXN0IGNvbnRleHRNZW51KFFXZWJQYWdlKik7CisgICAgc3RhdGljIFFTdHJpbmdMaXN0IGNvbnRl
eHRNZW51KFFXZWJQYWdlQWRhcHRlciopOwogCiAgICAgc3RhdGljIGRvdWJsZSBkZWZhdWx0TWlu
aW11bVRpbWVySW50ZXJ2YWwoKTsgLy8gTm90IHJlYWxseSB0aWVkIHRvIFdlYlZpZXcKLSAgICBz
dGF0aWMgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChRV2ViUGFnZSosIGRvdWJsZSk7Cisg
ICAgc3RhdGljIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoUVdlYlBhZ2VBZGFwdGVyKiwg
ZG91YmxlKTsKIAotICAgIHN0YXRpYyBRVXJsIG1lZGlhQ29udGVudFVybEJ5RWxlbWVudElkKFFX
ZWJGcmFtZSosIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0
QWx0ZXJuYXRlSHRtbChRV2ViRnJhbWUqLCBjb25zdCBRU3RyaW5nJiBodG1sLCBjb25zdCBRVXJs
JiBiYXNlVXJsLCBjb25zdCBRVXJsJiBmYWlsaW5nVXJsKTsKKyAgICBzdGF0aWMgUVVybCBtZWRp
YUNvbnRlbnRVcmxCeUVsZW1lbnRJZChRV2ViRnJhbWVBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYg
ZWxlbWVudElkKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRBbHRlcm5hdGVIdG1sKFFXZWJGcmFtZUFk
YXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBodG1sLCBjb25zdCBRVXJsJiBiYXNlVXJsLCBjb25zdCBR
VXJsJiBmYWlsaW5nVXJsKTsKIAotICAgIHN0YXRpYyBRU3RyaW5nIGxheWVyVHJlZUFzVGV4dChR
V2ViRnJhbWUqKTsKLQotICAgIHN0YXRpYyB2b2lkIGluamVjdEludGVybmFsc09iamVjdChRV2Vi
RnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoUVdlYkZyYW1l
QWRhcHRlciopOwogICAgIHN0YXRpYyB2b2lkIGluamVjdEludGVybmFsc09iamVjdChKU0NvbnRl
eHRSZWYpOwotICAgIHN0YXRpYyB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFtZSop
OworICAgIHN0YXRpYyB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KFFXZWJGcmFtZUFkYXB0ZXIq
KTsKICAgICBzdGF0aWMgdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYpOwog
Ci0gICAgc3RhdGljIHZvaWQgc2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQoUVdl
YlBhZ2UqLCBib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0
aW9uRW5hYmxlZChRV2ViUGFnZUFkYXB0ZXIqLCBib29sKTsKIAotICAgIHN0YXRpYyB2b2lkIHNl
dERlZmVyc0xvYWRpbmcoUVdlYlBhZ2UqLCBib29sIGZsYWcpOwotICAgIHN0YXRpYyB2b2lkIGdv
QmFjayhRV2ViUGFnZSopOworICAgIHN0YXRpYyB2b2lkIHNldERlZmVyc0xvYWRpbmcoUVdlYlBh
Z2VBZGFwdGVyKiwgYm9vbCBmbGFnKTsKKyAgICBzdGF0aWMgdm9pZCBnb0JhY2soUVdlYlBhZ2VB
ZGFwdGVyKik7CiAKLSAgICBzdGF0aWMgYm9vbCB0aGlyZFBhcnR5Q29va2llUG9saWN5QWxsb3dz
KFFXZWJQYWdlKiwgY29uc3QgUVVybCYsIGNvbnN0IFFVcmwmIGZpcnN0UGFydHlVcmwpOworICAg
IHN0YXRpYyBib29sIHRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MoUVdlYlBhZ2VBZGFwdGVy
KiwgY29uc3QgUVVybCYsIGNvbnN0IFFVcmwmIGZpcnN0UGFydHlVcmwpOwogCiAgICAgc3RhdGlj
IHZvaWQgZW5hYmxlTW9ja1Njcm9sbGJhcnMoKTsKIAotICAgIHN0YXRpYyBRSW1hZ2UgcGFpbnRQ
YWdlc1dpdGhCb3VuZGFyaWVzKFFXZWJGcmFtZSopOworICAgIHN0YXRpYyBRSW1hZ2UgcGFpbnRQ
YWdlc1dpdGhCb3VuZGFyaWVzKFFXZWJGcmFtZUFkYXB0ZXIqKTsKIAotICAgIHN0YXRpYyB2b2lk
IHNldFRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZSosIGJvb2wgZW5hYmxlKTsKLSAgICBzdGF0
aWMgYm9vbCB0cmFja1JlcGFpbnRSZWN0cyhRV2ViRnJhbWUqKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRUcmFja2VkUmVwYWludFJlY3RzKFFXZWJGcmFtZSosIFFWZWN0b3I8UVJlY3Q+JiByZXN1bHQp
OworICAgIHN0YXRpYyB2b2lkIHNldFRyYWNrUmVwYWludFJlY3RzKFFXZWJGcmFtZUFkYXB0ZXIq
LCBib29sIGVuYWJsZSk7CisgICAgc3RhdGljIGJvb2wgdHJhY2tSZXBhaW50UmVjdHMoUVdlYkZy
YW1lQWRhcHRlciopOworICAgIHN0YXRpYyB2b2lkIGdldFRyYWNrZWRSZXBhaW50UmVjdHMoUVdl
YkZyYW1lQWRhcHRlciosIFFWZWN0b3I8UVJlY3Q+JiByZXN1bHQpOwogfTsKIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3Bw
CmluZGV4IGViNzNjOWU5ZDQ1NTE2YzFjOTc3YjRiM2NiN2MwOTVjZmQ1ZWY1Y2QuLjc4YzM2ZjJi
OWJhMWViYTM1MTM4YzA5Yjg2NTcxOWE0MWNlMzRjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50UXQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiVW5kb1N0ZXBRdC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00NCw2ICs0Myw3IEBACiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKICNpbmNs
dWRlICJRV2ViUGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKQEAgLTUxLDExICs1MSwxMCBAQAogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQu
aCIKICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgInFndWlhcHBs
aWNhdGlvbi5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2VfcC5o
IgogCiAjaW5jbHVkZSA8UUNsaXBib2FyZD4KLSNpbmNsdWRlIDxRVW5kb1N0YWNrPgorI2luY2x1
ZGUgPFFLZXlFdmVudD4KKyNpbmNsdWRlIDxRS2V5U2VxdWVuY2U+CiAjaW5jbHVkZSA8c3RkaW8u
aD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTgwLDggKzc5LDggQEAgc3RhdGljIFFT
dHJpbmcgZHVtcFJhbmdlKFdlYkNvcmU6OlJhbmdlICpyYW5nZSkKICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGNvZGU7CiAKICAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
InJhbmdlIGZyb20gJTEgb2YgJTIgdG8gJTMgb2YgJTQiKQotICAgICAgICAgICAgLmFyZyhyYW5n
ZS0+c3RhcnRPZmZzZXQoY29kZSkpLmFyZyhkdW1wUGF0aChyYW5nZS0+c3RhcnRDb250YWluZXIo
Y29kZSkpKQotICAgICAgICAgICAgLmFyZyhyYW5nZS0+ZW5kT2Zmc2V0KGNvZGUpKS5hcmcoZHVt
cFBhdGgocmFuZ2UtPmVuZENvbnRhaW5lcihjb2RlKSkpOworICAgICAgICAuYXJnKHJhbmdlLT5z
dGFydE9mZnNldChjb2RlKSkuYXJnKGR1bXBQYXRoKHJhbmdlLT5zdGFydENvbnRhaW5lcihjb2Rl
KSkpCisgICAgICAgIC5hcmcocmFuZ2UtPmVuZE9mZnNldChjb2RlKSkuYXJnKGR1bXBQYXRoKHJh
bmdlLT5lbmRDb250YWluZXIoY29kZSkpKTsKIAogICAgIHJldHVybiBzdHI7CiB9CkBAIC0xMDQs
NyArMTAzLDcgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
IHJhbmdlKQogCiBib29sIEVkaXRvckNsaWVudFF0OjpzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNl
KEhUTUxFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChRV2ViUGFnZVByaXZhdGU6OmRydFJ1
bikKKyAgICBpZiAoUVdlYlBhZ2VBZGFwdGVyOjpkcnRSdW4pCiAgICAgICAgIHJldHVybiBlbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSAibmVlZHNEZWxldGlvblVJIjsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDgsNyArMTQ3LDcgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6
c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0cmluZywgUmFuZ2UqIHJhbmdlLCBFZGl0
b3IKICAgICAgICAgfTsKIAogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydFRleHQ6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rpb246JXNcbiIsCi0g
ICAgICAgICAgICAgICBRU3RyaW5nKHN0cmluZykudG9VdGY4KCkuY29uc3REYXRhKCksIGR1bXBS
YW5nZShyYW5nZSkudG9VdGY4KCkuY29uc3REYXRhKCksIGluc2VydGFjdGlvbnN0cmluZ1thY3Rp
b25dKTsKKyAgICAgICAgICAgIFFTdHJpbmcoc3RyaW5nKS50b1V0ZjgoKS5jb25zdERhdGEoKSwg
ZHVtcFJhbmdlKHJhbmdlKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgaW5zZXJ0YWN0aW9uc3RyaW5n
W2FjdGlvbl0pOwogICAgIH0KICAgICByZXR1cm4gYWNjZXB0c0VkaXRpbmc7CiB9CkBAIC0xNjYs
MTkgKzE2NSwxOCBAQCBib29sIEVkaXRvckNsaWVudFF0OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKFJhbmdlKiBjdXJyZW50UmFuZ2UsIFJhbmdlKiBwcm9wbwogICAgICAgICB9OwogCiAgICAg
ICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5n
ZTolcyB0b0RPTVJhbmdlOiVzIGFmZmluaXR5OiVzIHN0aWxsU2VsZWN0aW5nOiVzXG4iLAotICAg
ICAgICAgICAgICAgZHVtcFJhbmdlKGN1cnJlbnRSYW5nZSkudG9VdGY4KCkuY29uc3REYXRhKCks
Ci0gICAgICAgICAgICAgICBkdW1wUmFuZ2UocHJvcG9zZWRSYW5nZSkudG9VdGY4KCkuY29uc3RE
YXRhKCksCi0gICAgICAgICAgICAgICBhZmZpbml0eXN0cmluZ1tzZWxlY3Rpb25BZmZpbml0eV0s
IGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsKKyAgICAgICAgICAgIGR1bXBSYW5nZShjdXJy
ZW50UmFuZ2UpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLAorICAgICAgICAgICAgZHVtcFJhbmdlKHBy
b3Bvc2VkUmFuZ2UpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLAorICAgICAgICAgICAgYWZmaW5pdHlz
dHJpbmdbc2VsZWN0aW9uQWZmaW5pdHldLCBib29sc3RyaW5nW3N0aWxsU2VsZWN0aW5nXSk7CiAg
ICAgfQogICAgIHJldHVybiBhY2NlcHRzRWRpdGluZzsKIH0KIAotYm9vbCBFZGl0b3JDbGllbnRR
dDo6c2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdl
KQorYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVBy
b3BlcnR5U2V0KiBzdHlsZSwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewogICAgIGlmIChkdW1w
RWRpdGluZ0NhbGxiYWNrcykKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRBcHBseVN0eWxlOiVzIHRvRWxlbWVudHNJbkRPTVJhbmdlOiVzXG4iLAotICAgICAgICAgICAg
ICAgUVN0cmluZyhzdHlsZS0+YXNUZXh0KCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLCBkdW1wUmFu
Z2UocmFuZ2UpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgICAgIFFTdHJpbmcoc3R5
bGUtPmFzVGV4dCgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgZHVtcFJhbmdlKHJhbmdlKS50b1V0
ZjgoKS5jb25zdERhdGEoKSk7CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQogCkBAIC0x
OTksOSArMTk3LDggQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCkKIHsKICAgICBpZiAoZHVtcEVkaXRpbmdDYWxsYmFja3MpCiAgICAgICAgIHByaW50Zigi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uXG4iKTsKLSAgICBtX3BhZ2UtPmQtPnVwZGF0ZUVkaXRvckFjdGlvbnMoKTsKIAotICAg
IGVtaXQgbV9wYWdlLT5jb250ZW50c0NoYW5nZWQoKTsKKyAgICBtX3BhZ2UtPnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cygpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKQEAgLTIyMCw4ICsyMTcsNyBAQCB2b2lkIEVkaXRv
ckNsaWVudFF0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAg
ICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+c2V0U2VsZWN0aW9uTW9kZShvbGRT
ZWxlY3Rpb25Nb2RlKTsKICAgICB9CiAKLSAgICBtX3BhZ2UtPmQtPnVwZGF0ZUVkaXRvckFjdGlv
bnMoKTsKLSAgICBlbWl0IG1fcGFnZS0+c2VsZWN0aW9uQ2hhbmdlZCgpOworICAgIG1fcGFnZS0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5p
Z25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpKQogICAgICAgICBlbWl0IG1fcGFnZS0+
bWljcm9Gb2N1c0NoYW5nZWQoKTsKIH0KQEAgLTI1MCwxMCArMjQ2LDEwIEBAIGJvb2wgRWRpdG9y
Q2xpZW50UXQ6OnNlbGVjdFdvcmRCZWZvcmVNZW51RXZlbnQoKQogdm9pZCBFZGl0b3JDbGllbnRR
dDo6cmVnaXN0ZXJVbmRvU3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+IHN0
ZXApCiB7CiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAg
IEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpOwogICAgIGlmIChtX2luVW5kb1JlZG8gfHwgKGZyYW1lICYmICFmcmFtZS0+
ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpIC8qIEhBQ0shISBEb24ndCByZWNyZWF0ZSB1bmRv
cyAqLykpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3BhZ2UtPnVuZG9TdGFjaygpLT5wdXNoKG5l
dyBVbmRvU3RlcFF0KHN0ZXApKTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyVW5kb1N0ZXAoc3RlcCk7
CiAjZW5kaWYgLy8gUVRfTk9fVU5ET1NUQUNLCiB9CiAKQEAgLTI2NCw3ICsyNjAsNyBAQCB2b2lk
IEVkaXRvckNsaWVudFF0OjpyZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpVbmRvU3RlcD4pCiB2b2lkIEVkaXRvckNsaWVudFF0OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9u
cygpCiB7CiAjaWZuZGVmIFFUX05PX1VORE9TVEFDSwotICAgIHJldHVybiBtX3BhZ2UtPnVuZG9T
dGFjaygpLT5jbGVhcigpOworICAgIHJldHVybiBtX3BhZ2UtPmNsZWFyVW5kb1N0YWNrKCk7CiAj
ZW5kaWYKIH0KIApAQCAtMjgzLDcgKzI3OSw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmNhblVu
ZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VORE9TVEFDSwogICAgIHJldHVybiBmYWxzZTsKICNl
bHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5kb1N0YWNrKCktPmNhblVuZG8oKTsKKyAgICByZXR1
cm4gbV9wYWdlLT5jYW5VbmRvKCk7CiAjZW5kaWYKIH0KIApAQCAtMjkyLDcgKzI4OCw3IEBAIGJv
b2wgRWRpdG9yQ2xpZW50UXQ6OmNhblJlZG8oKSBjb25zdAogI2lmZGVmIFFUX05PX1VORE9TVEFD
SwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fcGFnZS0+dW5kb1N0YWNr
KCktPmNhblJlZG8oKTsKKyAgICByZXR1cm4gbV9wYWdlLT5jYW5SZWRvKCk7CiAjZW5kaWYKIH0K
IApAQCAtMzAwLDcgKzI5Niw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVuZG8oKQogewogI2lm
bmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBtX2luVW5kb1JlZG8gPSB0cnVlOwotICAgIG1fcGFn
ZS0+dW5kb1N0YWNrKCktPnVuZG8oKTsKKyAgICBtX3BhZ2UtPnVuZG8oKTsKICAgICBtX2luVW5k
b1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpAQCAtMzA5LDcgKzMwNSw3IEBAIHZvaWQgRWRpdG9y
Q2xpZW50UXQ6OnJlZG8oKQogewogI2lmbmRlZiBRVF9OT19VTkRPU1RBQ0sKICAgICBtX2luVW5k
b1JlZG8gPSB0cnVlOwotICAgIG1fcGFnZS0+dW5kb1N0YWNrKCktPnJlZG8oKTsKKyAgICBtX3Bh
Z2UtPnJlZG8oKTsKICAgICBtX2luVW5kb1JlZG8gPSBmYWxzZTsKICNlbmRpZgogfQpAQCAtMzI0
LDcgKzMyMCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSog
bm9kZSwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3RpCiAgICAgICAgIH07CiAKICAgICAg
ICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiVzIHJlcGxhY2lu
Z0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLCBkdW1wUGF0aChub2RlKS50b1V0ZjgoKS5j
b25zdERhdGEoKSwKLSAgICAgICAgICAgICAgIGR1bXBSYW5nZShyYW5nZSkudG9VdGY4KCkuY29u
c3REYXRhKCksIGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKKyAgICAgICAgICAgIGR1bXBS
YW5nZShyYW5nZSkudG9VdGY4KCkuY29uc3REYXRhKCksIGluc2VydGFjdGlvbnN0cmluZ1thY3Rp
b25dKTsKICAgICB9CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQpAQCAtMzM2LDE4ICsz
MzIsMTggQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6cGFnZURlc3Ryb3llZCgpCiAKIGJvb2wgRWRp
dG9yQ2xpZW50UXQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1f
cGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkOworICAgIHJldHVybiBtX3NtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZDsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xlU21hcnRJ
bnNlcnREZWxldGUoKQogewotICAgIGJvb2wgY3VycmVudCA9IG1fcGFnZS0+ZC0+c21hcnRJbnNl
cnREZWxldGVFbmFibGVkOwotICAgIG1fcGFnZS0+ZC0+c21hcnRJbnNlcnREZWxldGVFbmFibGVk
ID0gIWN1cnJlbnQ7CisgICAgYm9vbCBjdXJyZW50ID0gbV9zbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQ7CisgICAgbV9zbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSAhY3VycmVudDsKIH0KIAogYm9v
bCBFZGl0b3JDbGllbnRRdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKIHsK
LSAgICByZXR1cm4gbV9wYWdlLT5kLT5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkOwor
ICAgIHJldHVybiBtX3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7CiB9CiAKIHZvaWQg
RWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKQEAgLTQxNiw3
ICs0MTIsNyBAQCBjb25zdCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yS2V5RG93bkV2ZW50KGNvbnN0
IEtleWJvYXJkRXZlbnQqIGV2ZW50KQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpoYW5kbGVLZXli
b2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+ZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NDQ0LDIwICs0NDAsMTkgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAgICAgfQogCiAjaWZuZGVmIFFUX05PX1NIT1JU
Q1VUCi0gICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gUVdlYlBhZ2VQcml2YXRl
OjplZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQoKSk7Ci0gICAgICAgIGlm
IChhY3Rpb24gIT0gUVdlYlBhZ2U6Ok5vV2ViQWN0aW9uICYmICFkb1NwYXRpYWxOYXZpZ2F0aW9u
KSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjbWQgPSBRV2ViUGFnZVByaXZhdGU6OmVkaXRv
ckNvbW1hbmRGb3JXZWJBY3Rpb25zKGFjdGlvbik7CisgICAgICAgIGNvbnN0IGNoYXIqIGNtZCA9
IG1fcGFnZS0+ZWRpdG9yQ29tbWFuZEZvcktleUV2ZW50KGtldmVudC0+cXRFdmVudCgpKTsKKyAg
ICAgICAgaWYgKGNtZCAmJiAhZG9TcGF0aWFsTmF2aWdhdGlvbikgewogICAgICAgICAgICAgLy8g
V2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNp
ZGUgaG93IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2aWEgRWRp
dG9yIHNob3VsZCBiZSB0cmVhdGVkLAogICAgICAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdXBv
biBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhh
dCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKICAg
ICAgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVyLCBvciBF
bnRlcikuCi0gICAgICAgICAgICBpZiAoY21kICYmIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChj
bWQpLmlzVGV4dEluc2VydGlvbigpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5j
b21tYW5kKGNtZCkuaXNUZXh0SW5zZXJ0aW9uKCkKICAgICAgICAgICAgICAgICAmJiBrZXZlbnQt
PnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlvbik7CisgICAg
ICAgICAgICBtX3BhZ2UtPnRyaWdnZXJBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQo
KSk7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIAorICAgICAgICB9CiAjZW5kaWYgLy8gUVRfTk9fU0hP
UlRDVVQKICAgICAgICAgewogICAgICAgICAgICAgU3RyaW5nIGNvbW1hbmROYW1lID0gZWRpdG9y
Q29tbWFuZEZvcktleURvd25FdmVudChldmVudCk7CkBAIC01MDEsNyArNDk2LDcgQEAgdm9pZCBF
ZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkK
ICAgICB9CiAKICAgICAvLyBOb24gZWRpdGFibGUgY29udGVudC4KLSAgICBpZiAobV9wYWdlLT5o
YW5kbGUoKS0+cGFnZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKSkgeworICAg
IGlmIChtX3BhZ2UtPnBhZ2UtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpIHsK
ICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CiAgICAg
ICAgIGNhc2UgVktfTEVGVDoKICAgICAgICAgY2FzZSBWS19SSUdIVDoKQEAgLTUxMSwxNSArNTA2
LDEzIEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRF
dmVudCogZXZlbnQpCiAgICAgICAgIGNhc2UgVktfRU5EOgogICAgICAgICAgICAgewogI2lmbmRl
ZiBRVF9OT19TSE9SVENVVAotICAgICAgICAgICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0
aW9uID0gUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0
RXZlbnQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGFjdGlvbiAhPSBRV2ViUGFnZTo6Tm9X
ZWJBY3Rpb24pOwotICAgICAgICAgICAgICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbihhY3Rpb24p
OworICAgICAgICAgICAgICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbkZvcktleUV2ZW50KGtldmVu
dC0+cXRFdmVudCgpKTsKICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBWS19QUklPUjogLy8gUGFnZVVwCi0gICAgICAgIGNhc2UgVktfTkVYVDogIC8vIFBh
Z2VEb3duCisgICAgICAgIGNhc2UgVktfTkVYVDogLy8gUGFnZURvd24KICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBTdHJpbmcgY29tbWFuZE5hbWUgPSBlZGl0b3JDb21tYW5kRm9yS2V5
RG93bkV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWNvbW1hbmROYW1lLmlz
RW1wdHkoKSk7CkBAIC01MzIsNyArNTI1LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIAogI2lmbmRlZiBRVF9OT19TSE9S
VENVVAogICAgIGlmIChrZXZlbnQtPnF0RXZlbnQoKSA9PSBRS2V5U2VxdWVuY2U6OkNvcHkpIHsK
LSAgICAgICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpDb3B5KTsKKyAgICAgICAg
bV9wYWdlLT50cmlnZ2VyQ29weUFjdGlvbigpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU0Myw4ICs1MzYsMTIgQEAgdm9p
ZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQq
KQogewogfQogCi1FZGl0b3JDbGllbnRRdDo6RWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2UqIHBhZ2Up
Ci0gICAgOiBtX3BhZ2UocGFnZSksIG1fZWRpdGluZyhmYWxzZSksIG1faW5VbmRvUmVkbyhmYWxz
ZSkKK0VkaXRvckNsaWVudFF0OjpFZGl0b3JDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIqIHBhZ2VB
ZGFwdGVyKQorICAgIDogbV9wYWdlKHBhZ2VBZGFwdGVyKQorICAgICwgbV9lZGl0aW5nKGZhbHNl
KQorICAgICwgbV9pblVuZG9SZWRvKGZhbHNlKQorICAgICwgbV9zbWFydEluc2VydERlbGV0ZUVu
YWJsZWQodHJ1ZSkKKyAgICAsIG1fc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxz
ZSkKIHsKIH0KIApAQCAtNjA3LDEyICs2MDQsMTIgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6d2ls
bFNldElucHV0TWV0aG9kU3RhdGUoKQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpzZXRJbnB1dE1l
dGhvZFN0YXRlKGJvb2wgYWN0aXZlKQogewotICAgIFFXZWJQYWdlQ2xpZW50KiB3ZWJQYWdlQ2xp
ZW50ID0gbV9wYWdlLT5kLT5jbGllbnQuZ2V0KCk7CisgICAgUVdlYlBhZ2VDbGllbnQqIHdlYlBh
Z2VDbGllbnQgPSBtX3BhZ2UtPmNsaWVudC5kYXRhKCk7CiAgICAgaWYgKHdlYlBhZ2VDbGllbnQp
IHsKICAgICAgICAgUXQ6OklucHV0TWV0aG9kSGludHMgaGludHM7CiAKICAgICAgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gMDsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5kLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmRvY3VtZW50
KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpCiAgICAgICAgICAgICBpZiAo
ZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
bnB1dFRhZykpCiAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAppbmRleCA4
NjNjNjdiNzE4N2RmZDY1MDNmNjBjYzZkOTc0NmVlMTA2ZWU0MjA2Li5jNDliZTRhNDAzNzM2ZWYw
YWM4MDYyYjMxYjkwZGUyMTg5NWQyMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCkBAIC0zNiwxMiArMzYsMTMgQEAKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBjbGFzcyBRV2ViUGFnZTsKK2NsYXNzIFFXZWJQYWdlQWRh
cHRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFZGl0b3JDbGllbnRRdCA6IHB1
YmxpYyBFZGl0b3JDbGllbnQgewogcHVibGljOgotICAgIEVkaXRvckNsaWVudFF0KFFXZWJQYWdl
KiBwYWdlKTsKKyAgICBFZGl0b3JDbGllbnRRdChRV2ViUGFnZUFkYXB0ZXIqKTsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVdp
bGxEZXRhY2hQYWdlKEZyYW1lKikgeyB9CkBAIC0xMDksMTQgKzExMCwxOSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzRWRpdGluZygpIGNvbnN0OwogCisgICAgdm9pZCBzZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoYm9vbCBiKSB7IG1fc21hcnRJbnNlcnREZWxldGVFbmFibGVkID0gYjsgfQor
ICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGIpIHsgbV9z
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkID0gYjsgfQorCiAgICAgc3RhdGljIGJvb2wg
ZHVtcEVkaXRpbmdDYWxsYmFja3M7CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmc7CiAK
IHByaXZhdGU6CiAgICAgVGV4dENoZWNrZXJDbGllbnRRdCBtX3RleHRDaGVja2VyQ2xpZW50Owot
ICAgIFFXZWJQYWdlKiBtX3BhZ2U7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiBtX3BhZ2U7CiAgICAg
Ym9vbCBtX2VkaXRpbmc7CiAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0YWNr
IHdvcmtzIGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCisgICAgYm9vbCBtX3NtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZDsKKyAgICBib29sIG1fc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IDA3MzFkOTMxNThhMTZmOTczMGU4NDFl
MjA4MTdhODgyMmI0ZTYxNDguLjdhMjNlZTI2ODNjMDhiMjQzMDZjYTQ3YzA0NjQ3YTZkYjI2NzA3
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmNwcApAQCAtNTksNyArNTksMTAgQEAKICNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlFOZXR3
b3JrUmVwbHlIYW5kbGVyLmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1
ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5j
bHVkZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oIgpAQCAtNjksMzQgKzcyLDMwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5o
IgotCi0jaW5jbHVkZSAicXdlYmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKKyNp
bmNsdWRlICJxd2ViaGlzdG9yeS5oIgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5X3AuaCIKICNpbmNs
dWRlICJxd2ViaGlzdG9yeWludGVyZmFjZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5j
bHVkZSAicXdlYnBhZ2VfcC5oIgogI2luY2x1ZGUgInF3ZWJwbHVnaW5mYWN0b3J5LmgiCiAKICNp
bmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxR
RmlsZUluZm8+Ci0jaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmU+Ci0jaW5jbHVkZSA8UUdyYXBoaWNz
V2lkZ2V0PgorI2luY2x1ZGUgPFFNb3VzZUV2ZW50PgogI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+
CiAjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgogI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIHN0YXRpYyBRTWFwPHVuc2lnbmVkIGxvbmcsIFFTdHJpbmc+IGR1bXBBc3NpZ25lZFVybHM7
CiAKIC8vIENvbXBhcmUgd2l0aCB0aGUgZmlsZSAiV2ViS2l0L1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbSIuCiBzdGF0aWMgUVN0cmluZyBkcnREZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChXZWJDb3JlOjpGcmFtZSogd2ViQ29yZUZyYW1lKQogewot
ICAgIFFXZWJGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQod2ViQ29yZUZyYW1l
KTsKLSAgICBRU3RyaW5nIG5hbWUgPSBmcmFtZS0+ZnJhbWVOYW1lKCk7CisgICAgUVdlYkZyYW1l
QWRhcHRlciogZnJhbWUgPSBRV2ViRnJhbWVBZGFwdGVyOjpraXQod2ViQ29yZUZyYW1lKTsKKyAg
ICBRU3RyaW5nIG5hbWUgPSB3ZWJDb3JlRnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpOwogCi0g
ICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lID09IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgp
OworICAgIGJvb2wgaXNNYWluRnJhbWUgPSBmcmFtZSA9PSBmcmFtZS0+cGFnZUFkYXB0ZXItPm1h
aW5GcmFtZUFkYXB0ZXIoKTsKICAgICBpZiAoaXNNYWluRnJhbWUpIHsKICAgICAgICAgaWYgKCFu
YW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJt
YWluIGZyYW1lIFwiJTFcIiIpLmFyZyhuYW1lKTsKQEAgLTIxNiwyNCArMjE1LDI0IEBAIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6On5GcmFtZUxvYWRlckNsaWVudFF0KCkKIHsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFF0OjpzZXRGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBGcmFtZSogZnJh
bWUpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnNldEZyYW1lKFFXZWJGcmFtZUFkYXB0ZXIq
IHdlYkZyYW1lLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgbV93ZWJGcmFtZSA9IHdlYkZyYW1lOwog
ICAgIG1fZnJhbWUgPSBmcmFtZTsKIAotICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJGcmFt
ZS0+cGFnZSgpKSB7CisgICAgaWYgKCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5wYWdlQWRh
cHRlcikgewogICAgICAgICBxV2FybmluZygiRnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0RnJhbWUg
ZnJhbWUgd2l0aG91dCBQYWdlISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgY29u
bmVjdCh0aGlzLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkpLAotICAgICAgICAgICAgbV93ZWJG
cmFtZS0+cGFnZSgpLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkpKTsKKyAgICAgICAgbV93ZWJG
cmFtZS0+cGFnZUFkYXB0ZXItPmhhbmRsZSgpLCBTSUdOQUwobG9hZFByb2dyZXNzKGludCkpKTsK
IAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29ya1Jl
cGx5KikpLAotICAgICAgICAgICAgbV93ZWJGcmFtZS0+cGFnZSgpLCBTSUdOQUwodW5zdXBwb3J0
ZWRDb250ZW50KFFOZXR3b3JrUmVwbHkqKSkpOworICAgICAgICBtX3dlYkZyYW1lLT5wYWdlQWRh
cHRlci0+aGFuZGxlKCksIFNJR05BTCh1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSop
KSk7CiAKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLAot
ICAgICAgICAgICAgbV93ZWJGcmFtZSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSkpOwor
ICAgICAgICBtX3dlYkZyYW1lLT5oYW5kbGUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5n
KSkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbGxQb2xpY3lGdW5jdGlvbihG
cmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKQpAQCAtMjYx
LDExICsyNjAsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21t
aXR0ZWRGb3JOZXdQYWdlKCkKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKG1fd2Vi
RnJhbWUpOwogCi0gICAgUUJydXNoIGJydXNoID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wYWxldHRl
KCkuYnJ1c2goUVBhbGV0dGU6OkJhc2UpOworICAgIFFPYmplY3QqIHFXZWJQYWdlID0gbV93ZWJG
cmFtZS0+cGFnZUFkYXB0ZXItPmhhbmRsZSgpOworICAgIFFCcnVzaCBicnVzaCA9IHFXZWJQYWdl
LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQYWxldHRlPigpLmJydXNoKFFQYWxldHRlOjpC
YXNlKTsKICAgICBRQ29sb3IgYmFja2dyb3VuZENvbG9yID0gYnJ1c2guc3R5bGUoKSA9PSBRdDo6
U29saWRQYXR0ZXJuID8gYnJ1c2guY29sb3IoKSA6IFFDb2xvcigpOwogCi0gICAgUVdlYlBhZ2Uq
IHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgY29uc3QgUVNpemUgcHJlZmVycmVkTGF5
b3V0U2l6ZSA9IHBhZ2UtPnByZWZlcnJlZENvbnRlbnRzU2l6ZSgpOworICAgIGNvbnN0IFFTaXpl
IHByZWZlcnJlZExheW91dFNpemUgPSBxV2ViUGFnZS0+cHJvcGVydHkoInByZWZlcnJlZENvbnRl
bnRzU2l6ZSIpLnRvU2l6ZSgpOwogCiAgICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsYmFyID0gKFNj
cm9sbGJhck1vZGUpIG1fd2ViRnJhbWUtPnNjcm9sbEJhclBvbGljeShRdDo6SG9yaXpvbnRhbCk7
CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyID0gKFNjcm9sbGJhck1vZGUpIG1fd2ViRnJh
bWUtPnNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwpOwpAQCAtMjc1LDE3ICsyNzQsMTggQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdl
KCkKICAgICAvLyBUaGUgSGlzdG9yeUNvbnRyb2xsZXIgd2lsbCB1cGRhdGUgdGhlIHNjcm9sbCBw
b3NpdGlvbiBsYXRlciBpZiBuZWVkZWQuCiAgICAgSW50UmVjdCBjdXJyZW50VmlzaWJsZUNvbnRl
bnRSZWN0ID0gbV9mcmFtZS0+dmlldygpID8gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2Zy
YW1lLT52aWV3KCktPmZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKSA6IEludFJlY3Qo
KTsKIAotICAgIG1fZnJhbWUtPmNyZWF0ZVZpZXcobV93ZWJGcmFtZS0+cGFnZSgpLT52aWV3cG9y
dFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciwgIWJhY2tn
cm91bmRDb2xvci5hbHBoYSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkTGF5
b3V0U2l6ZS5pc1ZhbGlkKCkgPyBJbnRTaXplKHByZWZlcnJlZExheW91dFNpemUpIDogSW50U2l6
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpc2libGVDb250ZW50UmVjdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZExheW91dFNpemUuaXNWYWxpZCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgaFNjcm9sbGJhciwgaExvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2U2Nyb2xsYmFyLCB2TG9jayk7CisgICAgbV9mcmFtZS0+Y3JlYXRlVmlldyhx
V2ViUGFnZS0+cHJvcGVydHkoInZpZXdwb3J0U2l6ZSIpLnRvU2l6ZSgpLAorICAgICAgICBiYWNr
Z3JvdW5kQ29sb3IsICFiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSwKKyAgICAgICAgcHJlZmVycmVk
TGF5b3V0U2l6ZS5pc1ZhbGlkKCkgPyBJbnRTaXplKHByZWZlcnJlZExheW91dFNpemUpIDogSW50
U2l6ZSgpLAorICAgICAgICBjdXJyZW50VmlzaWJsZUNvbnRlbnRSZWN0LAorICAgICAgICBwcmVm
ZXJyZWRMYXlvdXRTaXplLmlzVmFsaWQoKSwKKyAgICAgICAgaFNjcm9sbGJhciwgaExvY2ssCisg
ICAgICAgIHZTY3JvbGxiYXIsIHZMb2NrKTsKIAogICAgIGJvb2wgaXNNYWluRnJhbWUgPSBtX2Zy
YW1lID09IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKGlzTWFpbkZyYW1l
ICYmIHBhZ2UtPmQtPmNsaWVudCkgewotICAgICAgICBib29sIHJlc2l6ZXNUb0NvbnRlbnRzID0g
cGFnZS0+ZC0+Y2xpZW50LT52aWV3UmVzaXplc1RvQ29udGVudHNFbmFibGVkKCk7CisgICAgaWYg
KGlzTWFpbkZyYW1lICYmbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNsaWVudCkgeworICAgICAg
ICBib29sIHJlc2l6ZXNUb0NvbnRlbnRzID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNsaWVu
dC0+dmlld1Jlc2l6ZXNUb0NvbnRlbnRzRW5hYmxlZCgpOworCiAgICAgICAgIG1fZnJhbWUtPnZp
ZXcoKS0+c2V0UGFpbnRzRW50aXJlQ29udGVudHMocmVzaXplc1RvQ29udGVudHMpOwogICAgICAg
ICBtX2ZyYW1lLT52aWV3KCktPnNldERlbGVnYXRlc1Njcm9sbGluZyhyZXNpemVzVG9Db250ZW50
cyk7CiAgICAgfQpAQCAtMzkyLDggKzM5Miw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKQogICAgIGlmICghbV93ZWJGcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJGcmFtZS0+ZC0+ZW1pdFVybENoYW5nZWQo
KTsKLSAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7
CisgICAgbV93ZWJGcmFtZS0+ZW1pdFVybENoYW5nZWQoKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdl
QWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKIH0KIAogCkBAIC00NDAsNyArNDQw
LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkKCkKICAgICAgICAgcmV0dXJuOwogICAgIGVtaXRMb2FkU3RhcnRlZCgpOwogICAgIHBv
c3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpOwotICAgIGVtaXQgbV93ZWJG
cmFtZS0+cHJvdmlzaW9uYWxMb2FkKCk7CisgICAgbV93ZWJGcmFtZS0+ZGlkU3RhcnRQcm92aXNp
b25hbExvYWQoKTsKIH0KIAogCkBAIC00NzgsOCArNDc4LDggQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQogICAgIGlmIChtX2ZyYW1lLT50cmVlKCkt
PnBhcmVudCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYkZy
YW1lLT5kLT5lbWl0VXJsQ2hhbmdlZCgpOwotICAgIG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+dXBk
YXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKKyAgICBtX3dlYkZyYW1lLT5lbWl0VXJsQ2hhbmdlZCgp
OworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygp
OwogCiAgICAgLy8gV2Ugc2hvdWxkIGFzc3VtZSBmaXJzdCB0aGUgZnJhbWUgaGFzIG5vIHRpdGxl
LiBJZiBpdCBoYXMsIHRoZW4gdGhlIGFib3ZlIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKCkKICAg
ICAvLyB3aWxsIGJlIGNhbGxlZCB2ZXJ5IHNvb24gd2l0aCB0aGUgY29ycmVjdCB0aXRsZS4KQEAg
LTQ5MCw3ICs0OTAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkQ29t
bWl0TG9hZCgpCiAgICAgaWYgKCFpc01haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVkKCk7CisgICAg
ZW1pdCBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1pdFZpZXdwb3J0Q2hhbmdlUmVxdWVzdGVk
KCk7CiB9CiAKIApAQCAtNDk5LDcgKzQ5OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogICAgIGlmIChkdW1wRnJhbWVMb2FkZXJD
YWxsYmFja3MpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZVxuIiwgcVByaW50YWJsZShkcnREZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCht
X2ZyYW1lKSkpOwogCi0gICAgaWYgKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuKSB7CisgICAgaWYg
KFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKSB7CiAgICAgICAgIGludCB1bmxvYWRFdmVudENvdW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnBlbmRpbmdVbmxvYWRFdmVudExp
c3RlbmVycygpOwogICAgICAgICBpZiAodW5sb2FkRXZlbnRDb3VudCkKICAgICAgICAgICAgIHBy
aW50ZigiJXMgLSBoYXMgJXUgb251bmxvYWQgaGFuZGxlcihzKVxuIiwgcVByaW50YWJsZShkcnRE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChtX2ZyYW1lKSksIHVubG9hZEV2ZW50Q291
bnQpOwpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0
Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVu
dCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYkZyYW1lLT5w
YWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+cGFn
ZUFkYXB0ZXItPnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7CiB9CiAKIApAQCAtNTIwLDcgKzUy
MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkK
ICAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViRnJhbWUt
PnBhZ2UoKS0+ZC0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKKyAgICBtX3dlYkZyYW1lLT5w
YWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsKICAgICBlbWl0TG9hZEZpbmlz
aGVkKHRydWUpOwogfQogCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChtaWxlc3RvbmVzICYgRGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmluaXRpYWxMYXlvdXRDb21wbGV0
ZWQoKTsKKyAgICAgICAgbV93ZWJGcmFtZS0+ZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaFNob3coKQpAQCAtNTQ1LDgg
KzU0NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsUG9saWN5Q2hlY2soKQog
fQogCiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShG
cmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9u
IGZ1bmN0aW9uLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBzdXJlbHkgdG9vIHNpbXBsZS4KQEAgLTU2MCw3ICs1
NTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3Rp
ZmljYXRpb24oKQogICAgICAgICBtX2lzT3JpZ2luYXRpbmdMb2FkID0gdHJ1ZTsKICAgICBpZiAo
bV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSB8fCAhbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsK
KyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+dXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5n
ZWROb3RpZmljYXRpb24oKQpAQCAtNTc3LDE0ICs1NzYsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudFF0Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiAgICAgLy8gU2VuZCBh
IG1vdXNlbW92ZSBldmVudCB0bzoKICAgICAvLyAoMSkgdXBkYXRlIHRoZSBjdXJzb3IgdG8gY2hh
bmdlIGFjY29yZGluZyB0byB3aGF0ZXZlciBpcyB1bmRlcm5lYXRoIHRoZSBtb3VzZSBjdXJzb3Ig
cmlnaHQgbm93OwogICAgIC8vICgyKSBkaXNwbGF5IHRoZSB0b29sIHRpcCBpZiB0aGUgbW91c2Ug
aG92ZXJzIGEgbm9kZSB3aGljaCBoYXMgYSB0b29sIHRpcC4KLSAgICBpZiAobV9mcmFtZSAmJiBt
X2ZyYW1lLT5ldmVudEhhbmRsZXIoKSAmJiBtX3dlYkZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAg
UVdpZGdldCogdmlldyA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+dmlldygpOwotICAgICAgICBpZiAo
dmlldyAmJiB2aWV3LT5oYXNGb2N1cygpKSB7Ci0gICAgICAgICAgICBRUG9pbnQgbG9jYWxQb3Mg
PSB2aWV3LT5tYXBGcm9tR2xvYmFsKFFDdXJzb3I6OnBvcygpKTsKLSAgICAgICAgICAgIGlmICh2
aWV3LT5yZWN0KCkuY29udGFpbnMobG9jYWxQb3MpKSB7Ci0gICAgICAgICAgICAgICAgUU1vdXNl
RXZlbnQgZXZlbnQoUUV2ZW50OjpNb3VzZU1vdmUsIGxvY2FsUG9zLCBRdDo6Tm9CdXR0b24sIFF0
OjpOb0J1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOwotICAgICAgICAgICAgICAgIG1fZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGNvbnZlcnRNb3VzZUV2ZW50KCZldmVudCwgMCkpOwot
ICAgICAgICAgICAgfQorICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmV2ZW50SGFuZGxlcigp
ICYmIG1fd2ViRnJhbWUpIHsKKyAgICAgICAgUVBvaW50IGxvY2FsUG9zOworICAgICAgICBpZiAo
bV93ZWJGcmFtZS0+aGFuZGxlUHJvZ3Jlc3NGaW5pc2hlZCgmbG9jYWxQb3MpKSB7CisgICAgICAg
ICAgICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlTW92ZSwgbG9jYWxQb3MsIFF0OjpO
b0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7CisgICAgICAgICAgICBtX2Zy
YW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChjb252ZXJ0TW91c2VFdmVudCgmZXZlbnQs
IDApKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTY1NSw3ICs2NTEsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZENvbXBsZXRlZCgpCiAgICAgLy8gTm90ZSB0aGF0IHRo
aXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KICAgICBpZiAoIW1fd2ViRnJhbWUpCiAg
ICAgICAgIHJldHVybjsKLSAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQtPnVwZGF0ZU5hdmlnYXRp
b25BY3Rpb25zKCk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPnVwZGF0ZU5hdmlnYXRp
b25BY3Rpb25zKCk7CiB9CiAKIApAQCAtNjYzLDcgKzY1OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRRdDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiB7CiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAg
ICAgICByZXR1cm47Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnJlc3RvcmVGcmFtZVN0
YXRlUmVxdWVzdGVkKG1fd2ViRnJhbWUpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5l
bWl0UmVzdG9yZUZyYW1lU3RhdGVSZXF1ZXN0ZWQobV93ZWJGcmFtZSk7CiB9CiAKIApAQCAtNzAw
LDIxICs2OTYsMjMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRUaXRsZShjb25zdCBT
dHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwgY29uc3QgS1VSTCYKIAogU3RyaW5nIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYgKG1fd2Vi
RnJhbWUpIHsKLSAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50Rm9y
VXJsKHVybCkucmVtb3ZlKFFMYXRpbjFDaGFyKCdcbicpKS5yZW1vdmUoUUxhdGluMUNoYXIoJ1xy
JykpOwotICAgIH0KKyAgICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fd2ViRnJh
bWUtPnBhZ2VBZGFwdGVyLT51c2VyQWdlbnRGb3JVcmwodXJsKS5yZW1vdmUoUUxhdGluMUNoYXIo
J1xuJykpLnJlbW92ZShRTGF0aW4xQ2hhcignXHInKSk7CiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQog
ewogICAgIGlmIChtX3dlYkZyYW1lKQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmljb25DaGFu
Z2VkKCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmVtaXRJY29uQ2hhbmdlZCgpOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKIHsKLSAgICBkZWxl
dGUgbV93ZWJGcmFtZTsKKyAgICAvLyBEZWxldGUgUVdlYkZyYW1lIChoYW5kbGUoKSksIHdoaWNo
IG93bnMgUVdlYkZyYW1lUHJpdmF0ZSwgd2hpY2gKKyAgICAvLyBfaXNfIGEgUVdlYkZyYW1lQWRh
cHRlci4KKyAgICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgZGVsZXRlIG1fd2ViRnJhbWUtPmhh
bmRsZSgpOwogICAgIG1fZnJhbWUgPSAwOwogICAgIG1fd2ViRnJhbWUgPSAwOwogCkBAIC03MzIs
NyArNzMwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHcKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fd2ViRnJhbWUpCi0gICAgICAgIG1fd2ViRnJhbWUtPmQtPmRpZENsZWFyV2luZG93
T2JqZWN0KCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmRpZENsZWFyV2luZG93T2JqZWN0KCk7CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkK
QEAgLTc0NCw3ICs3NDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpZFBlcmZvcm1G
aXJzdE5hdmlnYXRpb24oKSBjb25zdAogewogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVu
dCgpIHx8ICFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgbV93ZWJGcmFtZS0+cGFn
ZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOworICAgIG1fd2ViRnJhbWUtPnBhZ2VB
ZGFwdGVyLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIHNob3VsZFJlZ2lzdGVy
KQpAQCAtNzYwLDggKzc1OCw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6cmVnaXN0ZXJG
b3JJY29uTm90aWZpY2F0aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6Om9uSWNvbkxvYWRlZEZvclBhZ2VVUkwoY29uc3QgUVN0cmluZyYgdXJsKQogewog
I2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCi0gICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFt
ZS0+dXJsKCkgPT0gdXJsKQotICAgICAgICBlbWl0IG1fd2ViRnJhbWUtPmljb25DaGFuZ2VkKCk7
CisgICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+dXJsID09IHVybCkKKyAgICAgICAg
bV93ZWJGcmFtZS0+ZW1pdEljb25DaGFuZ2VkKCk7CiAjZW5kaWYKIH0KIApAQCAtNzk5LDE2ICs3
OTcsMTYgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp1cGRhdGVHbG9iYWxIaXN0b3J5UmVk
aXJlY3RMaW5rcygpCiAgICAgaWYgKCFsb2FkZXItPmNsaWVudFJlZGlyZWN0U291cmNlRm9ySGlz
dG9yeSgpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChkdW1wSGlzdG9yeUNhbGxiYWNrcykgewog
ICAgICAgICAgICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdCBm
cm9tIFwiJXNcIiB0byBcIiVzXCIuXG4iLAotICAgICAgICAgICAgICAgICAgcVByaW50YWJsZShR
U3RyaW5nKGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkpKSwKLSAgICAg
ICAgICAgICAgICAgIHFQcmludGFibGUoUVN0cmluZyhsb2FkZXItPmNsaWVudFJlZGlyZWN0RGVz
dGluYXRpb25Gb3JIaXN0b3J5KCkpKSk7CisgICAgICAgICAgICAgICAgcVByaW50YWJsZShRU3Ry
aW5nKGxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5KCkpKSwKKyAgICAgICAg
ICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcobG9hZGVyLT5jbGllbnRSZWRpcmVjdERlc3RpbmF0
aW9uRm9ySGlzdG9yeSgpKSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFsb2FkZXIt
PnNlcnZlclJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlm
IChkdW1wSGlzdG9yeUNhbGxiYWNrcykgewogICAgICAgICAgICAgcHJpbnRmKCJXZWJWaWV3IHBl
cmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCBmcm9tIFwiJXNcIiB0byBcIiVzXCIuXG4iLAotICAg
ICAgICAgICAgICAgICAgcVByaW50YWJsZShRU3RyaW5nKGxvYWRlci0+c2VydmVyUmVkaXJlY3RT
b3VyY2VGb3JIaXN0b3J5KCkpKSwKLSAgICAgICAgICAgICAgICAgIHFQcmludGFibGUoUVN0cmlu
Zyhsb2FkZXItPnNlcnZlclJlZGlyZWN0RGVzdGluYXRpb25Gb3JIaXN0b3J5KCkpKSk7CisgICAg
ICAgICAgICAgICAgcVByaW50YWJsZShRU3RyaW5nKGxvYWRlci0+c2VydmVyUmVkaXJlY3RTb3Vy
Y2VGb3JIaXN0b3J5KCkpKSwKKyAgICAgICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcobG9h
ZGVyLT5zZXJ2ZXJSZWRpcmVjdERlc3RpbmF0aW9uRm9ySGlzdG9yeSgpKSkpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtODUwLDcgKzg0OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZGlkRGV0ZWN0WFNTKGNvbnN0IEtVUkwmLCBib29sKQogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0
OjpzYXZlVmlld1N0YXRlVG9JdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQogewogICAg
IFFXZWJIaXN0b3J5SXRlbSBoaXN0b3J5SXRlbShuZXcgUVdlYkhpc3RvcnlJdGVtUHJpdmF0ZShp
dGVtKSk7Ci0gICAgZW1pdCBtX3dlYkZyYW1lLT5wYWdlKCktPnNhdmVGcmFtZVN0YXRlUmVxdWVz
dGVkKG1fd2ViRnJhbWUsICZoaXN0b3J5SXRlbSk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0
ZXItPmVtaXRTYXZlRnJhbWVTdGF0ZVJlcXVlc3RlZChtX3dlYkZyYW1lLCAmaGlzdG9yeUl0ZW0p
OwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbkNhY2hlUGFnZSgpIGNvbnN0CkBA
IC04OTYsNyArODk0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpjb21taXR0ZWRMb2Fk
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGMKIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIFJlc291cmNlRXJyb3IgZXJyb3Ig
PSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5OjpPcGVyYXRpb25DYW5j
ZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAotICAgICAgICAgICAgUUNvcmVBcHBs
aWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiUmVxdWVzdCBjYW5jZWxsZWQiLCAwKSk7
CisgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJlcXVl
c3QgY2FuY2VsbGVkIiwgMCkpOwogICAgIGVycm9yLnNldElzQ2FuY2VsbGF0aW9uKHRydWUpOwog
ICAgIHJldHVybiBlcnJvcjsKIH0KQEAgLTkxNiwzOCArOTE0LDM4IEBAIGVudW0gewogV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0OjpibG9ja2VkRXJyb3IoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKCJXZWJLaXRFcnJvckRvbWFpbiIsIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3Rl
ZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksCi0gICAgICAgICAgICBRQ29yZUFwcGxpY2F0
aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJSZXF1ZXN0IGJsb2NrZWQiLCAwKSk7CisgICAg
ICAgIFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJlcXVlc3QgYmxv
Y2tlZCIsIDApKTsKIH0KIAogCiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIldlYktpdEVycm9yRG9tYWlu
IiwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAotICAg
ICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiQ2Fubm90
IHNob3cgVVJMIiwgMCkpOworICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFX
ZWJGcmFtZSIsICJDYW5ub3Qgc2hvdyBVUkwiLCAwKSk7CiB9CiAKIFdlYkNvcmU6OlJlc291cmNl
RXJyb3IgRnJhbWVMb2FkZXJDbGllbnRRdDo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoIldlYktpdEVycm9yRG9tYWluIiwgV2ViS2l0RXJyb3JGcmFtZUxvYWRJ
bnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAotICAgICAg
ICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiRnJhbWUgbG9h
ZCBpbnRlcnJ1cHRlZCBieSBwb2xpY3kgY2hhbmdlIiwgMCkpOworICAgICAgICBRQ29yZUFwcGxp
Y2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJGcmFtZSBsb2FkIGludGVycnVwdGVkIGJ5
IHBvbGljeSBjaGFuZ2UiLCAwKSk7CiB9CiAKIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIldl
YktpdEVycm9yRG9tYWluIiwgV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUsIHJlc3BvbnNl
LnVybCgpLnN0cmluZygpLAotICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRl
KCJRV2ViRnJhbWUiLCAiQ2Fubm90IHNob3cgbWltZXR5cGUiLCAwKSk7CisgICAgICAgIFFDb3Jl
QXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIkNhbm5vdCBzaG93IG1pbWV0eXBl
IiwgMCkpOwogfQogCiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKIHsKICAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiUXROZXR3b3JrIiwgUU5ldHdv
cmtSZXBseTo6Q29udGVudE5vdEZvdW5kRXJyb3IsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLAot
ICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiRmls
ZSBkb2VzIG5vdCBleGlzdCIsIDApKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNs
YXRlKCJRV2ViRnJhbWUiLCAiRmlsZSBkb2VzIG5vdCBleGlzdCIsIDApKTsKIH0KIAogV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0OjpwbHVnaW5XaWxsSGFuZGxlTG9h
ZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAg
IHJldHVybiBSZXNvdXJjZUVycm9yKCJXZWJLaXQiLCBXZWJLaXRFcnJvclBsdWdpbldpbGxIYW5k
bGVMb2FkLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJMb2FkaW5nIGlzIGhh
bmRsZWQgYnkgdGhlIG1lZGlhIGVuZ2luZSIsIDApKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlv
bjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiTG9hZGluZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZWRp
YSBlbmdpbmUiLCAwKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6c2hvdWxkRmFs
bEJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC05OTEsOCArOTg5
LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpkb3dubG9hZChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlLCBjb25zdCBXZWJDb3IKICAgICBRTmV0d29ya1JlcGx5SGFuZGxlciog
aGFuZGxlciA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2I7CiAgICAgUU5ldHdvcmtSZXBs
eSogcmVwbHkgPSBoYW5kbGVyLT5yZWxlYXNlKCk7CiAgICAgaWYgKHJlcGx5KSB7Ci0gICAgICAg
IFFXZWJQYWdlKiBwYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwotICAgICAgICBpZiAocGFnZS0+
Zm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudCgpKQorICAgICAgICBpZiAobV93ZWJGcmFtZS0+cGFn
ZUFkYXB0ZXItPmZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQpCiAgICAgICAgICAgICBlbWl0IHVu
c3VwcG9ydGVkQ29udGVudChyZXBseSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcGx5
LT5hYm9ydCgpOwpAQCAtMTAyNCw5ICsxMDIxLDkgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0
OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2kK
IHsKICAgICBpZiAoZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICAgICAgcHJpbnRmKCIl
cyAtIHdpbGxTZW5kUmVxdWVzdCAlcyByZWRpcmVjdFJlc3BvbnNlICVzXG4iLAotICAgICAgICAg
ICAgICAgcVByaW50YWJsZShkdW1wQXNzaWduZWRVcmxzW2lkZW50aWZpZXJdKSwKLSAgICAgICAg
ICAgICAgIHFQcmludGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQobmV3
UmVxdWVzdCkpLAotICAgICAgICAgICAgICAgKHJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpID8g
IihudWxsKSIgOiBxUHJpbnRhYmxlKGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHJlZGlyZWN0UmVzcG9uc2UpKSk7CisgICAgICAgICAgICBxUHJpbnRhYmxlKGR1bXBBc3NpZ25l
ZFVybHNbaWRlbnRpZmllcl0pLAorICAgICAgICAgICAgcVByaW50YWJsZShkcnREZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChuZXdSZXF1ZXN0KSksCisgICAgICAgICAgICAocmVkaXJl
Y3RSZXNwb25zZS5pc051bGwoKSkgPyAiKG51bGwpIiA6IHFQcmludGFibGUoZHJ0RGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVkaXJlY3RSZXNwb25zZSkpKTsKIAogICAgIGlmIChz
ZW5kUmVxdWVzdFJldHVybnNOdWxsKSB7CiAgICAgICAgIGJsb2NrUmVxdWVzdChuZXdSZXF1ZXN0
KTsKQEAgLTEwNDMsMTEgKzEwNDAsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNw
YXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2kKICAgICBR
U3RyaW5nIGhvc3QgPSB1cmwuaG9zdCgpOwogICAgIFFTdHJpbmcgdXJsU2NoZW1lID0gdXJsLnNj
aGVtZSgpLnRvTG93ZXIoKTsKIAotICAgIGlmIChRV2ViUGFnZVByaXZhdGU6OmRydFJ1bgorICAg
IGlmIChRV2ViUGFnZUFkYXB0ZXI6OmRydFJ1bgogICAgICAgICAmJiAhaG9zdC5pc0VtcHR5KCkK
ICAgICAgICAgJiYgKHVybFNjaGVtZSA9PSBRTGF0aW4xU3RyaW5nKCJodHRwIikgfHwgdXJsU2No
ZW1lID09IFFMYXRpbjFTdHJpbmcoImh0dHBzIikpKSB7CiAKLSAgICAgICAgUVVybCB0ZXN0VVJM
ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+cmVxdWVzdGVkVXJsKCk7CisgICAg
ICAgIFFVcmwgdGVzdFVSTCA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyLT5tYWluRnJhbWVBZGFw
dGVyKCktPmZyYW1lTG9hZGVyQ2xpZW50LT5sYXN0UmVxdWVzdGVkVXJsKCk7CiAgICAgICAgIFFT
dHJpbmcgdGVzdEhvc3QgPSB0ZXN0VVJMLmhvc3QoKTsKICAgICAgICAgUVN0cmluZyB0ZXN0VVJM
U2NoZW1lID0gdGVzdFVSTC5zY2hlbWUoKS50b0xvd2VyKCk7CiAKQEAgLTEwNjEsOSArMTA1OCw5
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpCiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzZW5kUmVxdWVzdENsZWFySGVhZGVycy5zaXplKCk7ICsraSkKLSAgICAgICAgICBuZXdS
ZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChzZW5kUmVxdWVzdENsZWFySGVhZGVycy5hdChpKS50
b0xvY2FsOEJpdCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKCkpOworICAgICAgICBuZXdSZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChzZW5kUmVxdWVzdENsZWFySGVhZGVycy5hdChpKS50b0xvY2Fs
OEJpdCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKCkpOwogCi0gICAgaWYgKFFXZWJQYWdlUHJpdmF0
ZTo6ZHJ0UnVuKSB7CisgICAgaWYgKFFXZWJQYWdlQWRhcHRlcjo6ZHJ0UnVuKSB7CiAgICAgICAg
IFFNYXA8UVN0cmluZywgUVN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gVVJMc1RvUmVkaXJl
Y3QuY29uc3RGaW5kKHVybC50b1N0cmluZygpKTsKICAgICAgICAgaWYgKGl0ICE9IFVSTHNUb1Jl
ZGlyZWN0LmNvbnN0RW5kKCkpCiAgICAgICAgICAgICBuZXdSZXF1ZXN0LnNldFVSTChRVXJsKGl0
LnZhbHVlKCkpKTsKQEAgLTEwOTQsMTcgKzEwOTEsMTcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpEb2N1bWVudExvYWRlcios
IHUKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgaWYgKGR1bXBXaWxsQ2FjaGVSZXNw
b25zZUNhbGxiYWNrcykKICAgICAgICAgcHJpbnRmKCIlcyAtIHdpbGxDYWNoZVJlc3BvbnNlOiBj
YWxsZWRcbiIsCi0gICAgICAgICAgICAgICBxUHJpbnRhYmxlKGR1bXBBc3NpZ25lZFVybHNbaWRl
bnRpZmllcl0pKTsKKyAgICAgICAgICAgIHFQcmludGFibGUoZHVtcEFzc2lnbmVkVXJsc1tpZGVu
dGlmaWVyXSkpOwogCiAgICAgaWYgKGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiAgICAgICAg
IHByaW50ZigiJXMgLSBkaWRSZWNlaXZlUmVzcG9uc2UgJXNcbiIsCi0gICAgICAgICAgICAgICBx
UHJpbnRhYmxlKGR1bXBBc3NpZ25lZFVybHNbaWRlbnRpZmllcl0pLAotICAgICAgICAgICAgICAg
cVByaW50YWJsZShkcnREZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSkp
KTsKKyAgICAgICAgICAgIHFQcmludGFibGUoZHVtcEFzc2lnbmVkVXJsc1tpZGVudGlmaWVyXSks
CisgICAgICAgICAgICBxUHJpbnRhYmxlKGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHJlc3BvbnNlKSkpOwogCiAgICAgaWYgKGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
KSB7CiAgICAgICAgIHByaW50ZigiJXMgaGFzIE1JTUUgdHlwZSAlc1xuIiwKLSAgICAgICAgICAg
ICAgIHFQcmludGFibGUoUVN0cmluZyhyZXNwb25zZS51cmwoKS5sYXN0UGF0aENvbXBvbmVudCgp
KSksCi0gICAgICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcocmVzcG9uc2UubWltZVR5cGUo
KSkpKTsKKyAgICAgICAgICAgIHFQcmludGFibGUoUVN0cmluZyhyZXNwb25zZS51cmwoKS5sYXN0
UGF0aENvbXBvbmVudCgpKSksCisgICAgICAgICAgICBxUHJpbnRhYmxlKFFTdHJpbmcocmVzcG9u
c2UubWltZVR5cGUoKSkpKTsKICAgICB9CiB9CiAKQEAgLTExMTYsMTUgKzExMTMsMTUgQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqLCB1bnMKIHsKICAgICBpZiAoZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cykKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZpbmlzaExvYWRpbmdcbiIsCi0gICAgICAgICAg
ICAgICAoZHVtcEFzc2lnbmVkVXJscy5jb250YWlucyhpZGVudGlmaWVyKSA/IHFQcmludGFibGUo
ZHVtcEFzc2lnbmVkVXJsc1tpZGVudGlmaWVyXSkgOiAiPHVua25vd24+IikpOworICAgICAgICAg
ICAgKGR1bXBBc3NpZ25lZFVybHMuY29udGFpbnMoaWRlbnRpZmllcikgPyBxUHJpbnRhYmxlKGR1
bXBBc3NpZ25lZFVybHNbaWRlbnRpZmllcl0pIDogIjx1bmtub3duPiIpKTsKIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgaWYgKGR1bXBSZXNvdXJjZUxvYWRDYWxs
YmFja3MpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogJXNc
biIsCi0gICAgICAgICAgICAgICAoZHVtcEFzc2lnbmVkVXJscy5jb250YWlucyhpZGVudGlmaWVy
KSA/IHFQcmludGFibGUoZHVtcEFzc2lnbmVkVXJsc1tpZGVudGlmaWVyXSkgOiAiPHVua25vd24+
IiksCi0gICAgICAgICAgICAgICBxUHJpbnRhYmxlKGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KGVycm9yKSkpOworICAgICAgICAgICAgKGR1bXBBc3NpZ25lZFVybHMuY29udGFp
bnMoaWRlbnRpZmllcikgPyBxUHJpbnRhYmxlKGR1bXBBc3NpZ25lZFVybHNbaWRlbnRpZmllcl0p
IDogIjx1bmtub3duPiIpLAorICAgICAgICAgICAgcVByaW50YWJsZShkcnREZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChlcnJvcikpKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpEb2N1
bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmLCBpbnQpCkBAIC0xMTM1LDI3ICsxMTMyLDE5IEBAIGJvb2wg
RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoV2ViQ29yZTo6RG9jdW1lCiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FsbEVycm9y
UGFnZUV4dGVuc2lvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAg
ICBRV2ViUGFnZSogcGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UtPnN1
cHBvcnRzRXh0ZW5zaW9uKFFXZWJQYWdlOjpFcnJvclBhZ2VFeHRlbnNpb24pKQorICAgIFFXZWJQ
YWdlQWRhcHRlciogcGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFwdGVyOworICAgIGlmICghcGFn
ZS0+c3VwcG9ydHNFcnJvclBhZ2VFeHRlbnNpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvbk9wdGlvbiBvcHRpb247Ci0gICAgaWYg
KGVycm9yLmRvbWFpbigpID09ICJRdE5ldHdvcmsiKQotICAgICAgICBvcHRpb24uZG9tYWluID0g
UVdlYlBhZ2U6OlF0TmV0d29yazsKLSAgICBlbHNlIGlmIChlcnJvci5kb21haW4oKSA9PSAiSFRU
UCIpCi0gICAgICAgIG9wdGlvbi5kb21haW4gPSBRV2ViUGFnZTo6SHR0cDsKLSAgICBlbHNlIGlm
IChlcnJvci5kb21haW4oKSA9PSAiV2ViS2l0IikKLSAgICAgICAgb3B0aW9uLmRvbWFpbiA9IFFX
ZWJQYWdlOjpXZWJLaXQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBR
V2ViUGFnZUFkYXB0ZXI6OkVycm9yUGFnZU9wdGlvbiBvcHRpb247CiAgICAgb3B0aW9uLnVybCA9
IFFVcmwoZXJyb3IuZmFpbGluZ1VSTCgpKTsKICAgICBvcHRpb24uZnJhbWUgPSBtX3dlYkZyYW1l
OworICAgIG9wdGlvbi5kb21haW4gPSBlcnJvci5kb21haW4oKTsKICAgICBvcHRpb24uZXJyb3Ig
PSBlcnJvci5lcnJvckNvZGUoKTsKICAgICBvcHRpb24uZXJyb3JTdHJpbmcgPSBlcnJvci5sb2Nh
bGl6ZWREZXNjcmlwdGlvbigpOwogCi0gICAgUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvblJl
dHVybiBvdXRwdXQ7Ci0gICAgaWYgKCFwYWdlLT5leHRlbnNpb24oUVdlYlBhZ2U6OkVycm9yUGFn
ZUV4dGVuc2lvbiwgJm9wdGlvbiwgJm91dHB1dCkpCisgICAgUVdlYlBhZ2VBZGFwdGVyOjpFcnJv
clBhZ2VSZXR1cm4gb3V0cHV0OworCisgICAgaWYgKCFwYWdlLT5lcnJvclBhZ2VFeHRlbnNpb24o
Jm9wdGlvbiwgJm91dHB1dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEtVUkwgYmFz
ZVVybChvdXRwdXQuYmFzZVVybCk7CkBAIC0xMjAwLDEwICsxMTg5LDEwIEBAIFdlYkNvcmU6OkZy
YW1lKiBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgV2ViQ29y
ZTo6TmF2aWdhdGlvCiB7CiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBRV2ViUGFnZSAqbmV3UGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+Y3JlYXRlV2luZG93
KFFXZWJQYWdlOjpXZWJCcm93c2VyV2luZG93KTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIG5ld1Bh
Z2UgPSBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Y3JlYXRlV2luZG93KC8qIG1vZGFsRGlhbG9n
ID0gKi8gZmFsc2UpOwogICAgIGlmICghbmV3UGFnZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIG5ld1BhZ2UtPm1haW5GcmFtZSgpLT5kLT5mcmFtZTsKKyAgICByZXR1cm4gbmV3UGFn
ZS0+bWFpbkZyYW1lQWRhcHRlcigpLT5mcmFtZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKEZyYW1lUG9saWN5RnVuY3Rpb24g
ZnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQpAQCAtMTIzMCw5ICsxMjE5LDggQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bihGcmFtZVBvbGljeUZ1bmMKIHsKICAgICBRX0FTU0VSVChtX3dlYkZyYW1lKTsKICAgICBRTmV0
d29ya1JlcXVlc3QgcihyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9mcmFtZS0+bG9hZGVyKCkt
Pm5ldHdvcmtpbmdDb250ZXh0KCkpKTsKLSAgICBRV2ViUGFnZSogcGFnZSA9IG1fd2ViRnJhbWUt
PnBhZ2UoKTsKIAotICAgIGlmICghcGFnZS0+ZC0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoMCwg
ciwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlKGFjdGlvbi50eXBlKCkpKSkgeworICAgIGlmICgh
bV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KDAsIHIsIChp
bnQpYWN0aW9uLnR5cGUoKSkpIHsKICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gTmF2aWdh
dGlvblR5cGVGb3JtU3VibWl0dGVkIHx8IGFjdGlvbi50eXBlKCkgPT0gTmF2aWdhdGlvblR5cGVG
b3JtUmVzdWJtaXR0ZWQpCiAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cmVzZXRNdWx0
aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwogCkBAIC0xMjUxLDcgKzEyMzksNiBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihGcmFtZVBvbGljeUZ1bgogewogICAgIFFfQVNTRVJUKG1fd2ViRnJhbWUpOwogICAg
IFFOZXR3b3JrUmVxdWVzdCByKHJlcXVlc3QudG9OZXR3b3JrUmVxdWVzdChtX2ZyYW1lLT5sb2Fk
ZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSkpOwotICAgIFFXZWJQYWdlKnBhZ2UgPSBtX3dlYkZy
YW1lLT5wYWdlKCk7CiAgICAgUG9saWN5QWN0aW9uIHJlc3VsdDsKIAogICAgIC8vIEN1cnJlbnRs
eSwgdGhpcyBpcyBvbmx5IGVuYWJsZWQgYnkgRFJULgpAQCAtMTI2MCwyNyArMTI0NywyNyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihGcmFtZVBvbGljeUZ1bgogICAgICAgICBmb3IgKGNvbnN0IEV2ZW50KiBldmVudCA9
IGFjdGlvbi5ldmVudCgpOyBldmVudDsgZXZlbnQgPSBldmVudC0+dW5kZXJseWluZ0V2ZW50KCkp
IHsKICAgICAgICAgICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKICAgICAgICAgICAg
ICAgICBjb25zdCBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gIHN0YXRpY19jYXN0PGNvbnN0IE1v
dXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IFFXZWJGcmFtZVByaXZh
dGU6OmNvcmUobV93ZWJGcmFtZSktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2lu
dCgKKyAgICAgICAgICAgICAgICBub2RlID0gbV93ZWJGcmFtZS0+ZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludCgKICAgICAgICAgICAgICAgICAgICAgbW91c2VFdmVu
dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSkuaW5uZXJOb25TaGFyZWROb2RlKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBw
cmludGYoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICVzIHdpdGggbmF2aWdhdGlv
biB0eXBlICclcyclc1xuIiwKLSAgICAgICAgICAgICAgIHFQcmludGFibGUoZHJ0RGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC51cmwoKSkpLCBuYXZpZ2F0aW9uVHlwZVRv
U3RyaW5nKGFjdGlvbi50eXBlKCkpLAotICAgICAgICAgICAgICAgKG5vZGUpID8gcVByaW50YWJs
ZShRU3RyaW5nOjpmcm9tTGF0aW4xKCIgb3JpZ2luYXRpbmcgZnJvbSAiKSArIGRydERlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KG5vZGUsIDApKSA6ICIiKTsKKyAgICAgICAgICAgIHFQ
cmludGFibGUoZHJ0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC51cmwo
KSkpLCBuYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKGFjdGlvbi50eXBlKCkpLAorICAgICAgICAgICAg
KG5vZGUpID8gcVByaW50YWJsZShRU3RyaW5nOjpmcm9tTGF0aW4xKCIgb3JpZ2luYXRpbmcgZnJv
bSAiKSArIGRydERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KG5vZGUsIDApKSA6ICIi
KTsKIAogICAgICAgICBpZiAocG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlKQogICAgICAgICAgICAg
cmVzdWx0ID0gUG9saWN5VXNlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBQ
b2xpY3lJZ25vcmU7CiAKLSAgICAgICAgcGFnZS0+ZC0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3Qo
bV93ZWJGcmFtZSwgciwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBlKGFjdGlvbi50eXBlKCkpKTsK
KyAgICAgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0
KG1fd2ViRnJhbWUsIHIsIChpbnQpYWN0aW9uLnR5cGUoKSk7CiAgICAgICAgIGNhbGxQb2xpY3lG
dW5jdGlvbihmdW5jdGlvbiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghcGFnZS0+ZC0+YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QobV93ZWJGcmFtZSwgciwgUVdl
YlBhZ2U6Ok5hdmlnYXRpb25UeXBlKGFjdGlvbi50eXBlKCkpKSkgeworICAgIGlmICghbV93ZWJG
cmFtZS0+cGFnZUFkYXB0ZXItPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KG1fd2ViRnJhbWUsIHIs
IChpbnQpYWN0aW9uLnR5cGUoKSkpIHsKICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gTmF2
aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkIHx8IGFjdGlvbi50eXBlKCkgPT0gTmF2aWdhdGlvblR5
cGVGb3JtUmVzdWJtaXR0ZWQpCiAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cmVzZXRN
dWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwogCkBAIC0xMzA1LDQwICsxMjkyLDM5
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBlbWl0IG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZG93bmxvYWRSZXF1ZXN0
ZWQocmVxdWVzdC50b05ldHdvcmtSZXF1ZXN0KG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5n
Q29udGV4dCgpKSk7CisgICAgbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmVtaXREb3dubG9hZFJl
cXVlc3RlZChyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdv
cmtpbmdDb250ZXh0KCkpKTsKIH0KIAotUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGll
bnRRdDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Ny
b2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCitQYXNzUmVmUHRyPEZy
YW1lPiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lk
dGgsIGludCBtYXJnaW5IZWlnaHQpCiB7CiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFFXZWJGcmFtZURhdGEgZnJhbWVEYXRhKG1fZnJhbWUtPnBhZ2UoKSwg
bV9mcmFtZSwgb3duZXJFbGVtZW50LCBuYW1lKTsKIAotICAgIGlmICh1cmwuaXNFbXB0eSgpKQot
ICAgICAgICBmcmFtZURhdGEudXJsID0gYmxhbmtVUkwoKTsKLSAgICBlbHNlCi0gICAgICAgIGZy
YW1lRGF0YS51cmwgPSB1cmw7Ci0KICAgICBmcmFtZURhdGEucmVmZXJyZXIgPSByZWZlcnJlcjsK
ICAgICBmcmFtZURhdGEuYWxsb3dzU2Nyb2xsaW5nID0gYWxsb3dzU2Nyb2xsaW5nOwogICAgIGZy
YW1lRGF0YS5tYXJnaW5XaWR0aCA9IG1hcmdpbldpZHRoOwogICAgIGZyYW1lRGF0YS5tYXJnaW5I
ZWlnaHQgPSBtYXJnaW5IZWlnaHQ7CiAKLSAgICBRUG9pbnRlcjxRV2ViRnJhbWU+IHdlYkZyYW1l
ID0gbmV3IFFXZWJGcmFtZShtX3dlYkZyYW1lLCAmZnJhbWVEYXRhKTsKKyAgICBRV2ViRnJhbWVB
ZGFwdGVyKiBjaGlsZFdlYkZyYW1lID0gbV93ZWJGcmFtZS0+Y3JlYXRlQ2hpbGRGcmFtZSgmZnJh
bWVEYXRhKTsKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1biBh
cmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJlYWR5
LgotICAgIGlmICghd2ViRnJhbWUuZGF0YSgpLT5kLT5mcmFtZS0+cGFnZSgpKSB7CisgICAgaWYg
KCFjaGlsZFdlYkZyYW1lLT5mcmFtZS0+cGFnZSgpKSB7CisgICAgICAgIFFQb2ludGVyPFFPYmpl
Y3Q+IHFXZWJGcmFtZSA9IGNoaWxkV2ViRnJhbWUtPmhhbmRsZSgpOwogICAgICAgICBmcmFtZURh
dGEuZnJhbWUucmVsZWFzZSgpOwotICAgICAgICBBU1NFUlQod2ViRnJhbWUuaXNOdWxsKCkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHFXZWJGcmFtZSwgIXFXZWJGcmFtZSk7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIGVtaXQgbV93ZWJGcmFtZS0+cGFnZSgpLT5mcmFtZUNyZWF0
ZWQod2ViRnJhbWUuZGF0YSgpKTsKKyAgICBtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+ZW1pdEZy
YW1lQ3JlYXRlZChjaGlsZFdlYkZyYW1lKTsKIAogICAgIC8vIEZJWE1FOiBTZXQgb3ZlcnJpZGUg
ZW5jb2RpbmcgaWYgd2UgaGF2ZSBvbmUuCiAKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFVS
TEludG9DaGlsZEZyYW1lKGZyYW1lRGF0YS51cmwsIGZyYW1lRGF0YS5yZWZlcnJlciwgZnJhbWVE
YXRhLmZyYW1lLmdldCgpKTsKKyAgICBLVVJMIHVybFRvTG9hZCA9IHVybDsKKyAgICBpZiAodXJs
VG9Mb2FkLmlzRW1wdHkoKSkKKyAgICAgICAgdXJsVG9Mb2FkID0gYmxhbmtVUkwoKTsKKworICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsVG9Mb2FkLCBmcmFt
ZURhdGEucmVmZXJyZXIsIGZyYW1lRGF0YS5mcmFtZS5nZXQoKSk7CiAKICAgICAvLyBUaGUgZnJh
bWUncyBvbmxvYWQgaGFuZGxlciBtYXkgaGF2ZSByZW1vdmVkIGl0IGZyb20gdGhlIGRvY3VtZW50
LgogICAgIGlmICghZnJhbWVEYXRhLmZyYW1lLT50cmVlKCktPnBhcmVudCgpKQpAQCAtMTM5OSw0
NCArMTM4NSw0NSBAQCBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBxc3R5bGVTaGVldFByb3Bl
cnRpZXNbXSA9IHsKIAogY29uc3QgdW5zaWduZWQgbnVtcVN0eWxlU2hlZXRQcm9wZXJ0aWVzID0g
c2l6ZW9mKHFzdHlsZVNoZWV0UHJvcGVydGllcykgLyBzaXplb2YocXN0eWxlU2hlZXRQcm9wZXJ0
aWVzWzBdKTsKIAotY2xhc3MgUXRQbHVnaW5XaWRnZXQ6IHB1YmxpYyBXaWRnZXQKLXsKK2NsYXNz
IFF0UGx1Z2luV2lkZ2V0OiBwdWJsaWMgV2lkZ2V0IHsKIHB1YmxpYzoKLSAgICBRdFBsdWdpbldp
ZGdldChRV2lkZ2V0KiB3ID0gMCk6IFdpZGdldCh3KSB7fQorICAgIFF0UGx1Z2luV2lkZ2V0KFF0
UGx1Z2luV2lkZ2V0QWRhcHRlciogdykKKyAgICAgICAgOiBXaWRnZXQody0+aGFuZGxlKCkpCisg
ICAgICAgICwgbV9hZGFwdGVyKHcpCisgICAgeworICAgICAgICBzZXRCaW5kaW5nT2JqZWN0KHct
PmhhbmRsZSgpKTsKKyAgICB9CisKICAgICB+UXRQbHVnaW5XaWRnZXQoKQogICAgIHsKLSAgICAg
ICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5k
ZWxldGVMYXRlcigpOworICAgICAgICBkZWxldGUgbV9hZGFwdGVyOwogICAgIH0KKworICAgIGlu
bGluZSBRdFBsdWdpbldpZGdldEFkYXB0ZXIqIHdpZGdldEFkYXB0ZXIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYWRhcHRlcjsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICB7IAogICAgICAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVdp
ZGdldCgpKS0+dXBkYXRlKHIpOworICAgICAgICAgICAgd2lkZ2V0QWRhcHRlcigpLT51cGRhdGUo
cik7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpCiAgICAgewot
ICAgICAgICBRV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1X
aWRnZXQoKSk7CisgICAgICAgIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciogd2lkZ2V0ID0gd2lkZ2V0
QWRhcHRlcigpOwogICAgICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBJbnRSZWN0IHdpbmRvd1JlY3QgPSBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KElu
dFJlY3QoMCwgMCwgZnJhbWVSZWN0KCkud2lkdGgoKSwgZnJhbWVSZWN0KCkuaGVpZ2h0KCkpKTsK
LSAgICAgICAgd2lkZ2V0LT5zZXRHZW9tZXRyeSh3aW5kb3dSZWN0KTsKKyAgICAgICAgUVJlY3Qg
d2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVjdCgwLCAwLCBmcmFt
ZVJlY3QoKS53aWR0aCgpLCBmcmFtZVJlY3QoKS5oZWlnaHQoKSkpOwogCiAgICAgICAgIFNjcm9s
bFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnRT
Y3JvbGxWaWV3KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFTU0VSVChwYXJlbnRT
Y3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdChzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnRTY3JvbGxWaWV3KS0+d2luZG93Q2xpcFJlY3QoKSk7
Ci0gICAgICAgIGNsaXBSZWN0Lm1vdmUoLXdpbmRvd1JlY3QueCgpLCAtd2luZG93UmVjdC55KCkp
OwotICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3Qod2lkZ2V0LT5yZWN0KCkpOwotCi0gICAgICAg
IFFSZWdpb24gY2xpcFJlZ2lvbiA9IFFSZWdpb24oY2xpcFJlY3QpOwotICAgICAgICB3aWRnZXQt
PnNldE1hc2soY2xpcFJlZ2lvbik7Ci0KLSAgICAgICAgaGFuZGxlVmlzaWJpbGl0eSgpOwotCi0g
ICAgICAgIHdpZGdldC0+dXBkYXRlKCk7CisgICAgICAgIFFSZWN0IGNsaXBSZWN0OworICAgICAg
ICBpZiAocGFyZW50U2Nyb2xsVmlldykgeworICAgICAgICAgICAgQVNTRVJUKHBhcmVudFNjcm9s
bFZpZXctPmlzRnJhbWVWaWV3KCkpOworICAgICAgICAgICAgY2xpcFJlY3QgPSBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPihwYXJlbnRTY3JvbGxWaWV3KS0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICAg
ICAgICAgIGNsaXBSZWN0LnRyYW5zbGF0ZSgtd2luZG93UmVjdC54KCksIC13aW5kb3dSZWN0Lnko
KSk7CisgICAgICAgIH0KKyAgICAgICAgd2lkZ2V0LT5zZXRHZW9tZXRyeUFuZENsaXAod2luZG93
UmVjdCwgY2xpcFJlY3QsIGlzVmlzaWJsZSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2hvdygpCkBAIC0xNDQ0LDc1ICsxNDMxLDI1IEBAIHB1YmxpYzoKICAgICAgICAgV2lkZ2V0Ojpz
aG93KCk7CiAgICAgICAgIGhhbmRsZVZpc2liaWxpdHkoKTsKICAgICB9CisgICAgdmlydHVhbCB2
b2lkIGhpZGUoKQorICAgIHsKKyAgICAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAg
ICAgICB3aWRnZXRBZGFwdGVyKCktPnNldFZpc2libGUoZmFsc2UpOworICAgIH0KIAogcHJpdmF0
ZToKKyAgICBRdFBsdWdpbldpZGdldEFkYXB0ZXIqIG1fYWRhcHRlcjsKKwogICAgIHZvaWQgaGFu
ZGxlVmlzaWJpbGl0eSgpCiAgICAgewogICAgICAgICBpZiAoIWlzVmlzaWJsZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFFXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PFFX
aWRnZXQqPihwbGF0Zm9ybVdpZGdldCgpKTsKLSAgICAgICAgLy8gSWYgc2V0TWFzayBpcyBzZXQg
d2l0aCBhbiBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgICAgIC8vIGJlIHBl
cmZvcm1lZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsYXRmb3JtV2lkZ2V0LgotICAg
ICAgICBRUmVnaW9uIG1hc2sgPSB3aWRnZXQtPm1hc2soKTsKLSAgICAgICAgd2lkZ2V0LT5zZXRW
aXNpYmxlKCFtYXNrLmlzRW1wdHkoKSk7CisgICAgICAgIHdpZGdldEFkYXB0ZXIoKS0+c2V0Vmlz
aWJsZSh0cnVlKTsKICAgICB9CiB9OwogCi0jaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVX
KQotY2xhc3MgUXRQbHVnaW5HcmFwaGljc1dpZGdldDogcHVibGljIFdpZGdldAotewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWZQdHI8UXRQbHVnaW5HcmFwaGljc1dpZGdldD4gY3JlYXRlKFFHcmFw
aGljc1dpZGdldCogdyA9IDApCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFF0
UGx1Z2luR3JhcGhpY3NXaWRnZXQodykpOwotICAgIH0KIAotICAgIH5RdFBsdWdpbkdyYXBoaWNz
V2lkZ2V0KCkKLSAgICB7Ci0gICAgICAgIGlmIChncmFwaGljc1dpZGdldCkKLSAgICAgICAgICAg
IGdyYXBoaWNzV2lkZ2V0LT5kZWxldGVMYXRlcigpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKLSAgICB7Ci0gICAgICAgIFFHcmFwaGlj
c1NjZW5lKiBzY2VuZSA9IGdyYXBoaWNzV2lkZ2V0ID8gZ3JhcGhpY3NXaWRnZXQtPnNjZW5lKCkg
OiAwOwotICAgICAgICBpZiAoc2NlbmUpCi0gICAgICAgICAgICBzY2VuZS0+dXBkYXRlKFFSZWN0
KHIpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkKLSAgICB7
Ci0gICAgICAgIGlmICghZ3JhcGhpY3NXaWRnZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRS
ZWN0KDAsIDAsIGZyYW1lUmVjdCgpLndpZHRoKCksIGZyYW1lUmVjdCgpLmhlaWdodCgpKSk7Ci0g
ICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5zZXRHZW9tZXRyeShRUmVjdCh3aW5kb3dSZWN0KSk7Ci0K
LSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlIGNvZGUgaGFuZGxlIGNsaXBwaW5nIG9mIGdyYXBo
aWNzIHdpZGdldHMuCi0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkKLSAgICB7Ci0gICAg
ICAgIGlmIChncmFwaGljc1dpZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5zaG93
KCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBoaWRlKCkKLSAgICB7Ci0gICAgICAgIGlmIChn
cmFwaGljc1dpZGdldCkKLSAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5oaWRlKCk7Ci0gICAg
fQotcHJpdmF0ZToKLSAgICBRdFBsdWdpbkdyYXBoaWNzV2lkZ2V0KFFHcmFwaGljc1dpZGdldCog
dyA9IDApCi0gICAgICAgIDogV2lkZ2V0KDApCi0gICAgICAgICwgZ3JhcGhpY3NXaWRnZXQodykK
LSAgICB7Ci0gICAgICAgIHNldEJpbmRpbmdPYmplY3QoZ3JhcGhpY3NXaWRnZXQpOwotICAgIH0K
LQotICAgIFFHcmFwaGljc1dpZGdldCogZ3JhcGhpY3NXaWRnZXQ7Ci19OwotI2VuZGlmIC8vIFFU
X05PX0dSQVBISUNTVklFVwotCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEhUTUxQbHVnSW5FbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSkKK1Bhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudFF0Ojpj
cmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgSFRNTFBsdWdJbkVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAgICAgLy8gcURlYnVnKCk8PCItLS0tLS0gQ3Jl
YXRpbmcgcGx1Z2luIGluIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbiBmb3IgIjw8
dXJsLnN0cmluZygpIDw8IG1pbWVUeXBlOwogICAgIC8vIHFEZWJ1ZygpPDwiLS0tLS0tXHQgdXJs
ID0gIjw8dXJsLnN0cmluZygpOwpAQCAtMTUzNSw3MiArMTQ3Miw1NSBAQCBQYXNzUmVmUHRyPFdp
ZGdldD4gRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBs
dWdpblNpemUsCiAgICAgUVN0cmluZyB1cmxTdHIodXJsLnN0cmluZygpKTsKICAgICBRVXJsIHF1
cmwgPSB1cmxTdHI7CiAKLSAgICBRT2JqZWN0KiBvYmplY3QgPSAwOworICAgIFFPYmplY3QqIHBs
dWdpbkFkYXB0ZXIgPSAwOwogCiAgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXF0
LXBsdWdpbiIgfHwgbWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtcXQtc3R5bGVkLXdpZGdldCIp
IHsKLSAgICAgICAgb2JqZWN0ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5jcmVhdGVQbHVnaW4oY2xh
c3NpZCwgcXVybCwgcGFyYW1zLCB2YWx1ZXMpOworICAgICAgICBwbHVnaW5BZGFwdGVyID0gbV93
ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNyZWF0ZVBsdWdpbihjbGFzc2lkLCBxdXJsLCBwYXJhbXMs
IHZhbHVlcyk7CiAjaWZuZGVmIFFUX05PX1NUWUxFX1NUWUxFU0hFRVQKLSAgICAgICAgUVdpZGdl
dCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPihvYmplY3QpOworICAgICAgICBRdFBs
dWdpbldpZGdldEFkYXB0ZXIqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRdFBsdWdpbldpZGdldEFk
YXB0ZXIqPihwbHVnaW5BZGFwdGVyKTsKICAgICAgICAgaWYgKHdpZGdldCAmJiBtaW1lVHlwZSA9
PSAiYXBwbGljYXRpb24veC1xdC1zdHlsZWQtd2lkZ2V0IikgewogCi0gICAgICAgICAgICBRU3Ry
aW5nIHN0eWxlU2hlZXQgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CisgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyIHN0eWxlU2hlZXQ7CisgICAgICAgICAgICBzdHlsZVNoZWV0LmFw
cGVuZChlbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIikpOwogICAgICAgICAgICAgaWYgKCFz
dHlsZVNoZWV0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0ICs9IFFMYXRp
bjFDaGFyKCc7Jyk7CisgICAgICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoJzsnKTsKIAog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bXFTdHlsZVNoZWV0UHJvcGVy
dGllczsgKytpKSB7CiAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IHFz
dHlsZVNoZWV0UHJvcGVydGllc1tpXTsKIAotICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQgKz0g
UVN0cmluZzo6ZnJvbUxhdGluMShnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkpKTsKLSAgICAgICAg
ICAgICAgICBzdHlsZVNoZWV0ICs9IFFMYXRpbjFDaGFyKCc6Jyk7Ci0gICAgICAgICAgICAgICAg
c3R5bGVTaGVldCArPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShlbGVtZW50
KS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgc3R5bGVTaGVl
dCArPSBRTGF0aW4xQ2hhcignOycpOworICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQuYXBwZW5k
KGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSkpOworICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQu
YXBwZW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgc3R5bGVTaGVldC5hcHBlbmQoQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCktPmdldFByb3BlcnR5VmFsdWUocHJv
cGVydHkpKTsKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0LmFwcGVuZCgnOycpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB3aWRnZXQtPnNldFN0eWxlU2hlZXQoc3R5bGVTaGVldCk7
CisgICAgICAgICAgICB3aWRnZXQtPnNldFN0eWxlU2hlZXQoc3R5bGVTaGVldC50b1N0cmluZygp
KTsKICAgICAgICAgfQogI2VuZGlmIC8vIFFUX05PX1NUWUxFX1NUWUxFU0hFRVQKICAgICB9CiAK
LSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBRV2ViUGx1Z2luRmFjdG9yeSogZmFjdG9yeSA9
IG1fd2ViRnJhbWUtPnBhZ2UoKS0+cGx1Z2luRmFjdG9yeSgpOworICAgIGlmICghcGx1Z2luQWRh
cHRlcikgeworICAgICAgICBRV2ViUGx1Z2luRmFjdG9yeSogZmFjdG9yeSA9IG1fd2ViRnJhbWUt
PnBhZ2VBZGFwdGVyLT5wbHVnaW5GYWN0b3J5OwogICAgICAgICBpZiAoZmFjdG9yeSkKLSAgICAg
ICAgICAgIG9iamVjdCA9IGZhY3RvcnktPmNyZWF0ZShtaW1lVHlwZSwgcXVybCwgcGFyYW1zLCB2
YWx1ZXMpOworICAgICAgICAgICAgcGx1Z2luQWRhcHRlciA9IG1fd2ViRnJhbWUtPnBhZ2VBZGFw
dGVyLT5hZGFwdGVyRm9yV2lkZ2V0KGZhY3RvcnktPmNyZWF0ZShtaW1lVHlwZSwgcXVybCwgcGFy
YW1zLCB2YWx1ZXMpKTsKICAgICB9Ci0KLSAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgIFFXaWRn
ZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4ob2JqZWN0KTsKKyAgICBpZiAocGx1
Z2luQWRhcHRlcikgeworICAgICAgICBRdFBsdWdpbldpZGdldEFkYXB0ZXIqIHdpZGdldCA9IHFv
YmplY3RfY2FzdDxRdFBsdWdpbldpZGdldEFkYXB0ZXIqPihwbHVnaW5BZGFwdGVyKTsKICAgICAg
ICAgaWYgKHdpZGdldCkgewotICAgICAgICAgICAgUVdpZGdldCogcGFyZW50V2lkZ2V0ID0gMDsK
LSAgICAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5wYWdlKCktPmQtPmNsaWVudCkKLSAgICAgICAg
ICAgICAgICBwYXJlbnRXaWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KG1fd2ViRnJhbWUt
PnBhZ2UoKS0+ZC0+Y2xpZW50LT5wbHVnaW5QYXJlbnQoKSk7CisgICAgICAgICAgICBRT2JqZWN0
KiBwYXJlbnRXaWRnZXQgPSAwOworICAgICAgICAgICAgaWYgKG1fd2ViRnJhbWUtPnBhZ2VBZGFw
dGVyLT5jbGllbnQpCisgICAgICAgICAgICAgICAgcGFyZW50V2lkZ2V0ID0gbV93ZWJGcmFtZS0+
cGFnZUFkYXB0ZXItPmNsaWVudC0+cGx1Z2luUGFyZW50KCk7CiAgICAgICAgICAgICBpZiAocGFy
ZW50V2lkZ2V0KSAvLyBEb24ndCByZXBhcmVudCB0byBub3RoaW5nIChpLmUuIGtlZXAgd2hhdGV2
ZXIgcGFyZW50IFFXZWJQYWdlOjpjcmVhdGVQbHVnaW4oKSBjaG9zZS4KLSAgICAgICAgICAgICAg
ICB3aWRnZXQtPnNldFBhcmVudChwYXJlbnRXaWRnZXQpOwotICAgICAgICAgICAgd2lkZ2V0LT5o
aWRlKCk7Ci0gICAgICAgICAgICBSZWZQdHI8UXRQbHVnaW5XaWRnZXQ+IHcgPSBhZG9wdFJlZihu
ZXcgUXRQbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgICAgICB3LT5zZXRQbGF0Zm9ybVdpZGdldCh3
aWRnZXQpOworICAgICAgICAgICAgICAgIHdpZGdldC0+c2V0V2lkZ2V0UGFyZW50KHBhcmVudFdp
ZGdldCk7CisgICAgICAgICAgICB3aWRnZXQtPnNldFZpc2libGUoZmFsc2UpOworICAgICAgICAg
ICAgUmVmUHRyPFF0UGx1Z2luV2lkZ2V0PiB3ID0gYWRvcHRSZWYobmV3IFF0UGx1Z2luV2lkZ2V0
KHdpZGdldCkpOwogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGl0J3MgaW52aXNpYmxlIHVudGls
IHByb3Blcmx5IHBsYWNlZCBpbnRvIHRoZSBsYXlvdXQuCiAgICAgICAgICAgICB3LT5zZXRGcmFt
ZVJlY3QoSW50UmVjdCgwLCAwLCAwLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gdzsKICAgICAg
ICAgfQogCi0jaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotICAgICAgICBRR3JhcGhp
Y3NXaWRnZXQqIGdyYXBoaWNzV2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFHcmFwaGljc1dpZGdldCo+
KG9iamVjdCk7Ci0gICAgICAgIGlmIChncmFwaGljc1dpZGdldCkgewotICAgICAgICAgICAgUUdy
YXBoaWNzT2JqZWN0KiBwYXJlbnRXaWRnZXQgPSAwOwotICAgICAgICAgICAgaWYgKG1fd2ViRnJh
bWUtPnBhZ2UoKS0+ZC0+Y2xpZW50KQotICAgICAgICAgICAgICAgIHBhcmVudFdpZGdldCA9IHFv
YmplY3RfY2FzdDxRR3JhcGhpY3NPYmplY3QqPihtX3dlYkZyYW1lLT5wYWdlKCktPmQtPmNsaWVu
dC0+cGx1Z2luUGFyZW50KCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NXaWRnZXQtPmhpZGUoKTsK
LSAgICAgICAgICAgIGlmIChwYXJlbnRXaWRnZXQpIC8vIERvbid0IHJlcGFyZW50IHRvIG5vdGhp
bmcgKGkuZS4ga2VlcCB3aGF0ZXZlciBwYXJlbnQgUVdlYlBhZ2U6OmNyZWF0ZVBsdWdpbigpIGNo
b3NlLgotICAgICAgICAgICAgICAgIGdyYXBoaWNzV2lkZ2V0LT5zZXRQYXJlbnRJdGVtKHBhcmVu
dFdpZGdldCk7Ci0gICAgICAgICAgICBSZWZQdHI8UXRQbHVnaW5HcmFwaGljc1dpZGdldD4gdyA9
IFF0UGx1Z2luR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZShncmFwaGljc1dpZGdldCk7Ci0gICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgaXQncyBpbnZpc2libGUgdW50aWwgcHJvcGVybHkgcGxhY2VkIGlu
dG8gdGhlIGxheW91dC4KLSAgICAgICAgICAgIHctPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAs
IDAsIDApKTsKLSAgICAgICAgICAgIHJldHVybiB3OwotICAgICAgICB9Ci0jZW5kaWYgLy8gUVRf
Tk9fR1JBUEhJQ1NWSUVXCi0KICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpbmdzIHdvcmsgZm9y
IHdpZGdldGxlc3MgcGx1Z2lucyBhcyB3ZWxsLgotICAgICAgICBkZWxldGUgb2JqZWN0OworICAg
ICAgICBkZWxldGUgcGx1Z2luQWRhcHRlcjsKICAgICB9CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgZWxzZSB7IC8vIE5QQVBJIFBsdWdpbnMKQEAgLTE2MzIsOCArMTU1Miw3
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0
KiBwbHVnaW5XaWRnZXQpCiAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxz
ZTsKIH0KIAotUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUph
dmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgSFRNTEFwcGxldEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQorUGFzc1JlZlB0cjxXaWRnZXQ+
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6
ZSYgcGx1Z2luU2l6ZSwgSFRNTEFwcGxldEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKIHsKICAgICByZXR1cm4gY3JlYXRlUGx1Z2luKHBsdWdpblNpemUsIGVs
ZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJhcHBsaWNhdGlvbi94LWphdmEt
YXBwbGV0IiwgdHJ1ZSk7CiB9CkBAIC0xNjQ1LDIzICsxNTY0LDI2IEBAIFN0cmluZyBGcmFtZUxv
YWRlckNsaWVudFF0OjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0CiAKIFFTdHJpbmcgRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y2hvb3NlRmlsZShjb25zdCBRU3RyaW5nJiBvbGRGaWxlKQogewotICAg
IHJldHVybiBtX3dlYkZyYW1lLT5wYWdlKCktPmNob29zZUZpbGUobV93ZWJGcmFtZSwgb2xkRmls
ZSk7CisgICAgUVN0cmluZ0xpc3QgcmVzdWx0ID0gbV93ZWJGcmFtZS0+cGFnZUFkYXB0ZXItPmNo
b29zZUZpbGVzKG1fd2ViRnJhbWUsIC8qYWxsb3dNdWx0aSovIGZhbHNlLCAoUVN0cmluZ0xpc3Qo
KSA8PCBvbGRGaWxlKSk7CisgICAgcmV0dXJuIHJlc3VsdC5pc0VtcHR5KCkgPyBRU3RyaW5nKCkg
OiByZXN1bHQuZmlyc3QoKTsKIH0KIAogUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0
PiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCiB7Ci0gICAg
UVZhcmlhbnQgdmFsdWUgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnByb3BlcnR5KCJfcV9NSU1FU25p
ZmZpbmdEaXNhYmxlZCIpOworICAgIFFWYXJpYW50IHZhbHVlID0gbV93ZWJGcmFtZS0+cGFnZUFk
YXB0ZXItPmhhbmRsZSgpLT5wcm9wZXJ0eSgiX3FfTUlNRVNuaWZmaW5nRGlzYWJsZWQiKTsKICAg
ICBib29sIE1JTUVTbmlmZmluZ0Rpc2FibGVkID0gdmFsdWUuaXNWYWxpZCgpICYmIHZhbHVlLnRv
Qm9vbCgpOwogCi0gICAgcmV0dXJuIEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6Y3JlYXRlKG1f
ZnJhbWUsIG1fd2ViRnJhbWUsICFNSU1FU25pZmZpbmdEaXNhYmxlZCwgbV93ZWJGcmFtZS0+cGFn
ZSgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpKTsKKyAgICByZXR1cm4gRnJhbWVOZXR3b3JraW5n
Q29udGV4dFF0OjpjcmVhdGUobV9mcmFtZSwgbV93ZWJGcmFtZS0+aGFuZGxlKCksICFNSU1FU25p
ZmZpbmdEaXNhYmxlZCk7Cit9CisKK1FXZWJGcmFtZUFkYXB0ZXIqIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OndlYkZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJGcmFtZTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0OjplbWl0TG9hZFN0YXJ0ZWQoKQogewotICAgIFFXZWJQYWdl
KiB3ZWJQYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwotICAgIGlmIChtX2lzT3JpZ2luYXRpbmdM
b2FkICYmIHdlYlBhZ2UpCi0gICAgICAgIGVtaXQgd2ViUGFnZS0+bG9hZFN0YXJ0ZWQoKTsKLSAg
ICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRTdGFydGVkKCk7CisgICAgbV93ZWJGcmFtZS0+ZW1pdExv
YWRTdGFydGVkKG1faXNPcmlnaW5hdGluZ0xvYWQpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBvaykKQEAgLTE2NzAsMTAgKzE1OTIsNyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoZWQoYm9vbCBvaykKICAgICBj
b25zdCBib29sIHdhc09yaWdpbmF0aW5nTG9hZCA9IG1faXNPcmlnaW5hdGluZ0xvYWQ7CiAgICAg
bV9pc09yaWdpbmF0aW5nTG9hZCA9IGZhbHNlOwogCi0gICAgUVdlYlBhZ2UqIHdlYlBhZ2UgPSBt
X3dlYkZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKHdhc09yaWdpbmF0aW5nTG9hZCAmJiB3ZWJQYWdl
KQotICAgICAgICBlbWl0IHdlYlBhZ2UtPmxvYWRGaW5pc2hlZChvayk7Ci0gICAgZW1pdCBtX3dl
YkZyYW1lLT5sb2FkRmluaXNoZWQob2spOworICAgIG1fd2ViRnJhbWUtPmVtaXRMb2FkRmluaXNo
ZWQod2FzT3JpZ2luYXRpbmdMb2FkLCBvayk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKaW5kZXggMDMxMDJk
ZTNlMmIzYWNmYzY4NzRiMGVlOGJhMTU1MGNkYTRiYTMyYy4uYTk2NWRlMGZiYjdhNmUyODdjNjAz
M2ZkNjFkNzkzOTY3YjEwN2VhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKQEAgLTMwLDE0ICszMCwxMyBAQAogI2lm
bmRlZiBGcmFtZUxvYWRlckNsaWVudFF0X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9o
CiAKLQogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaCIKICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPHFvYmplY3QuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDksNiArNDgsNyBAQCBjbGFzcyBRTmV0d29ya1Jl
cGx5OwogUVRfRU5EX05BTUVTUEFDRQogCiBjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBRV2ViRnJh
bWVBZGFwdGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDggKzY1LDggQEAgc3Ry
dWN0IExvYWRFcnJvclJlc2V0VG9rZW47CiBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0IDogcHVi
bGljIFFPYmplY3QsIHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgUV9PQkpFQ1QKIAot
ICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJGcmFtZTsKLSAgICB2b2lkIGNhbGxQb2xpY3lGdW5jdGlv
bihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKTsKKyAg
ICBmcmllbmQgY2xhc3MgOjpRV2ViRnJhbWVBZGFwdGVyOworICAgIHZvaWQgY2FsbFBvbGljeUZ1
bmN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBvbGljeUFjdGlvbik7CiAgICAgYm9vbCBjYWxs
RXJyb3JQYWdlRXh0ZW5zaW9uKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogUV9TSUdOQUxTOgpA
QCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgfkZyYW1lTG9hZGVyQ2xpZW50UXQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsKIAotICAgIHZvaWQgc2V0RnJh
bWUoUVdlYkZyYW1lKiB3ZWJGcmFtZSwgRnJhbWUqIGZyYW1lKTsKKyAgICB2b2lkIHNldEZyYW1l
KFFXZWJGcmFtZUFkYXB0ZXIqLCBGcmFtZSopOwogCiAgICAgdmlydHVhbCBib29sIGhhc1dlYlZp
ZXcoKSBjb25zdDsgLy8gbWFpbmx5IGZvciBhc3NlcnRpb25zCiAKQEAgLTEyOCw5ICsxMjgsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdl
KGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hTaG93KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JS
ZXNwb25zZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9s
aWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNv
bnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JSZXNwb25zZShGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1l
UG9saWN5RnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFdU
Rjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0
aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+KTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUG9saWN5Q2hlY2soKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImKTsKQEAgLTIwNCw4ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkb3dubG9h
ZChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKIAotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Ny
b2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9v
bCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdpZGdldD4gY3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUm
LCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHJlY3JlYXRlUGx1Z2luKFdpZGdldCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZWRp
cmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCk7CkBAIC0yMjcsNiArMjI2LDgg
QEAgcHVibGljOgogCiAgICAgY29uc3QgS1VSTCYgbGFzdFJlcXVlc3RlZFVybCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdFJlcXVlc3RlZFVybDsgfQogCisgICAgUVdlYkZyYW1lQWRhcHRlciogd2Vi
RnJhbWUoKSBjb25zdDsKKwogICAgIHN0YXRpYyBib29sIGR1bXBGcmFtZUxvYWRlckNhbGxiYWNr
czsKICAgICBzdGF0aWMgYm9vbCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwogICAgIHN0
YXRpYyBib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkZXJDYWxsYmFja3M7CkBAIC0yNTEs
NyArMjUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRMb2FkRmluaXNoZWQoYm9vbCBvayk7
CiAKICAgICBGcmFtZSAqbV9mcmFtZTsKLSAgICBRV2ViRnJhbWUgKm1fd2ViRnJhbWU7CisgICAg
UVdlYkZyYW1lQWRhcHRlciAqbV93ZWJGcmFtZTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVz
cG9uc2U7CiAKICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRl
eHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2lu
Z0NvbnRleHRRdC5jcHAKaW5kZXggN2U5OTYyNGI1ODM5NjMxMDRjMjA2MDY2MTZlZjlmZGVlMGUw
MGZjYS4uMDc0NWExYTM2ZTI2MzRjOWE4OTFkY2Q1NTk5MGI5MGJkNDAxMzQzZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFF0LmNwcApAQCAtMTgsMjkgKzE4LDI3IEBACiAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0KICNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuaCIKIAotI2luY2x1
ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCi0jaW5jbHVkZSAicXdl
YnBhZ2UuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKKyNpbmNsdWRlICJxd2Vic2V0
dGluZ3MuaCIKKwogI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KICNpbmNsdWRlIDxR
TmV0d29ya0Nvb2tpZT4KICNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZUphcj4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6OkZyYW1lTmV0d29ya2luZ0Nv
bnRleHRRdChGcmFtZSogZnJhbWUsIFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1p
bWVTbmlmZmluZ0VuYWJsZWQsIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vzc01h
bmFnZXIpCitGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRR
dChGcmFtZSogZnJhbWUsIFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1pbWVTbmlm
ZmluZ0VuYWJsZWQpCiAgICAgOiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZyYW1lKQogICAgICwg
bV9vcmlnaW5hdGluZ09iamVjdChvcmlnaW5hdGluZ09iamVjdCkKLSAgICAsIG1fbmV0d29ya0Fj
Y2Vzc01hbmFnZXIobmV0d29ya0FjY2Vzc01hbmFnZXIpCiAgICAgLCBtX21pbWVTbmlmZmluZ0Vu
YWJsZWQobWltZVNuaWZmaW5nRW5hYmxlZCkKIHsKIH0KIAotUGFzc1JlZlB0cjxGcmFtZU5ldHdv
cmtpbmdDb250ZXh0UXQ+IEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdDo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgUU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxl
ZCwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcikKK1Bhc3NSZWZQ
dHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0PiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6OmNy
ZWF0ZShGcmFtZSogZnJhbWUsIFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0LCBib29sIG1pbWVT
bmlmZmluZ0VuYWJsZWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtp
bmdDb250ZXh0UXQoZnJhbWUsIG9yaWdpbmF0aW5nT2JqZWN0LCBtaW1lU25pZmZpbmdFbmFibGVk
LCBuZXR3b3JrQWNjZXNzTWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVO
ZXR3b3JraW5nQ29udGV4dFF0KGZyYW1lLCBvcmlnaW5hdGluZ09iamVjdCwgbWltZVNuaWZmaW5n
RW5hYmxlZCkpOwogfQogCiBRT2JqZWN0KiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQ6Om9yaWdp
bmF0aW5nT2JqZWN0KCkgY29uc3QKQEAgLTUwLDcgKzQ4LDcgQEAgUU9iamVjdCogRnJhbWVOZXR3
b3JraW5nQ29udGV4dFF0OjpvcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0CiAKIFFOZXR3b3JrQWNj
ZXNzTWFuYWdlciogRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0OjpuZXR3b3JrQWNjZXNzTWFuYWdl
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChxb2JqZWN0X2Nhc3Q8UVdlYkZyYW1lKj4obV9vcmln
aW5hdGluZ09iamVjdCkpLT5wYWdlKCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7CisgICAgcmV0
dXJuIFFXZWJQYWdlQWRhcHRlcjo6a2l0KGZyYW1lKCktPnBhZ2UoKSktPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCk7CiB9CiAKIGJvb2wgRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0OjptaW1lU25pZmZp
bmdFbmFibGVkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRRdC5oCmluZGV4IGM5NWU2MzBhYzIxNGRk
ZGM5ZDY4OGE5MzNjMGM3OWVmNjk4ODRkMGEuLmI1OGFiZTQ4ZDliOGJlN2ZmOWEzYWI1NmRkMDcw
MzUwNmY1MGNmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQuaApAQCAtMjYsMTAgKzI2LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWVOZXR3b3JraW5nQ29udGV4dFF0IDogcHVi
bGljIEZyYW1lTmV0d29ya2luZ0NvbnRleHQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHRRdD4gY3JlYXRlKEZyYW1lKiwgUU9iamVjdCogb3Jp
Z2luYXRpbmdPYmplY3QsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCwgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dFF0
PiBjcmVhdGUoRnJhbWUqLCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25p
ZmZpbmdFbmFibGVkKTsKIAogcHJpdmF0ZToKLSAgICBGcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQo
RnJhbWUqLCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZpbmdFbmFi
bGVkLCBRTmV0d29ya0FjY2Vzc01hbmFnZXIqKTsKKyAgICBGcmFtZU5ldHdvcmtpbmdDb250ZXh0
UXQoRnJhbWUqLCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCwgYm9vbCBtaW1lU25pZmZpbmdF
bmFibGVkKTsKIAogICAgIHZpcnR1YWwgUU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vzc01hbmFn
ZXIoKSBjb25zdDsKQEAgLTM3LDcgKzM3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pc3Npb24oY29uc3QgUVVybCYpIGNvbnN0OwogCiAg
ICAgUU9iamVjdCogbV9vcmlnaW5hdGluZ09iamVjdDsKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFn
ZXIqIG1fbmV0d29ya0FjY2Vzc01hbmFnZXI7CiAgICAgYm9vbCBtX21pbWVTbmlmZmluZ0VuYWJs
ZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1
bGxTY3JlZW5WaWRlb1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVs
bFNjcmVlblZpZGVvUXQuY3BwCmluZGV4IDNiMjQ0YzY1NzMzMmY5ODI5MDc4NjFkNWU0NzRkODRm
N2ExMTRhZDIuLjI1ZTM1N2FiYTUyZDQyZWM2YTFkZWJlNzNhMjkwZTg3YjlkNDM2NGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVv
UXQuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgog
I2lmIFVTRShRVF9NVUxUSU1FRElBKQotI2luY2x1ZGUgIkZ1bGxTY3JlZW5WaWRlb1dpZGdldC5o
IgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCiAjZW5kaWYKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKQEAgLTQwLDEwICszOSw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShRVF9NVUxU
SU1FRElBKQotI2luY2x1ZGUgPFFHcmFwaGljc1ZpZGVvSXRlbT4KICNpbmNsdWRlIDxRTWVkaWFQ
bGF5ZXI+CiAjZW5kaWYKLSNpbmNsdWRlIDxRV2lkZ2V0PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTkwLDQ5ICs4Nyw2IEBAIHZvaWQgR1N0cmVhbWVyRnVsbFNjcmVlblZpZGVvSGFuZGxl
cjo6ZXhpdEZ1bGxTY3JlZW4oKQogfQogI2VuZGlmCiAKLSNpZiBVU0UoUVRfTVVMVElNRURJQSkK
LWJvb2wgRGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnNfc2hvdWxkRm9yY2VGdWxsU2Ny
ZWVuVmlkZW9QbGF5YmFjayA9IGZhbHNlOwotCi1EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxl
cjo6RGVmYXVsdEZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQotICAgIDogUVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIoKQotICAgICwgbV9mdWxsU2NyZWVuV2lkZ2V0KG5ldyBGdWxsU2NyZWVuVmlk
ZW9XaWRnZXQpCi17Ci0gICAgY29ubmVjdChtX2Z1bGxTY3JlZW5XaWRnZXQsIFNJR05BTChkaWRF
eGl0RnVsbFNjcmVlbigpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOwotICAg
IG1fZnVsbFNjcmVlbldpZGdldC0+aGlkZSgpOwotCi0gICAgbV9mdWxsU2NyZWVuV2lkZ2V0LT5j
bG9zZSgpOwotfQotCi1EZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6fkRlZmF1bHRGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyKCkKLXsKLSAgICBkZWxldGUgbV9mdWxsU2NyZWVuV2lkZ2V0Owot
fQotCi1ib29sIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpyZXF1aXJlc0Z1bGxTY3Jl
ZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZCA9IGZhbHNlOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgUUJ5dGVBcnJheSBm
b3JjZUZ1bGxTY3JlZW4gPSBxZ2V0ZW52KCJRVF9XRUJLSVRfRk9SQ0VfRlVMTFNDUkVFTl9WSURF
TyIpOwotICAgICAgICBpZiAoIWZvcmNlRnVsbFNjcmVlbi5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2sgPSB0cnVlOwotCi0gICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc19zaG91bGRGb3JjZUZ1
bGxTY3JlZW5WaWRlb1BsYXliYWNrOwotfQotCi12b2lkIERlZmF1bHRGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyKiBwbGF5ZXIpCi17Ci0gICAgbV9m
dWxsU2NyZWVuV2lkZ2V0LT5zaG93KHBsYXllcik7Ci19Ci0KLXZvaWQgRGVmYXVsdEZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBtX2Z1bGxTY3JlZW5XaWRn
ZXQtPmNsb3NlKCk7Ci19Ci0jZW5kaWYKLQogRnVsbFNjcmVlblZpZGVvUXQ6OkZ1bGxTY3JlZW5W
aWRlb1F0KENocm9tZUNsaWVudFF0KiBjaHJvbWVDbGllbnQpCiAgICAgOiBtX2Nocm9tZUNsaWVu
dChjaHJvbWVDbGllbnQpCiAgICAgLCBtX3ZpZGVvRWxlbWVudCgwKQpAQCAtMTQwLDEwICs5NCw3
IEBAIEZ1bGxTY3JlZW5WaWRlb1F0OjpGdWxsU2NyZWVuVmlkZW9RdChDaHJvbWVDbGllbnRRdCog
Y2hyb21lQ2xpZW50KQogICAgIFFfQVNTRVJUKG1fY2hyb21lQ2xpZW50KTsKIAogI2lmIFVTRShR
VF9NVUxUSU1FRElBKQotICAgIG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlciA9IG1fY2hyb21lQ2xp
ZW50LT5tX3BsYXRmb3JtUGx1Z2luLmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKS5sZWFr
UHRyKCk7Ci0gICAgaWYgKCFtX0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXIpCi0gICAgICAgIG1fRnVs
bFNjcmVlblZpZGVvSGFuZGxlciA9IG5ldyBEZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlcjsK
LQorICAgIG1fRnVsbFNjcmVlblZpZGVvSGFuZGxlciA9IG1fY2hyb21lQ2xpZW50LT5jcmVhdGVG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CiAgICAgaWYgKG1fRnVsbFNjcmVlblZpZGVvSGFuZGxl
cikKICAgICAgICAgY29ubmVjdChtX0Z1bGxTY3JlZW5WaWRlb0hhbmRsZXIsIFNJR05BTChmdWxs
U2NyZWVuQ2xvc2VkKCkpLCB0aGlzLCBTTE9UKGFib3V0VG9DbG9zZSgpKSk7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVv
UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvUXQu
aAppbmRleCAzNGJjOTBjMGQ4YzkzY2VhNTZkZmQwNGZkODE4YmE2NDVmNzQxYTE5Li44MWEyODhk
YTU3MmQzMmUxNmNhZWI3ZjU2MzRhODg5YWVjM2I2YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1F0LmgKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9RdC5oCkBAIC02NSwyNSArNjUs
NiBAQCBwcml2YXRlOgogfTsKICNlbmRpZgogCi0vLyBXZSBkbyBub3QgdXNlIEVOQUJMRSBvciBV
U0UgYmVjYXVzZSBtb2MgZG9lcyBub3QgZXhwYW5kIHRoZXNlIG1hY3Jvcy4KLSNpZiBkZWZpbmVk
KFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCi1jbGFzcyBE
ZWZhdWx0RnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVlblZpZGVv
SGFuZGxlciB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBEZWZhdWx0RnVsbFNjcmVlblZp
ZGVvSGFuZGxlcigpOwotICAgIHZpcnR1YWwgfkRlZmF1bHRGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KCk7Ci0gICAgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3Q7
Ci0KLXB1YmxpYyBRX1NMT1RTOgotICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXll
ciopOwotICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMg
Ym9vbCBzX3Nob3VsZEZvcmNlRnVsbFNjcmVlblZpZGVvUGxheWJhY2s7Ci0gICAgRnVsbFNjcmVl
blZpZGVvV2lkZ2V0ICptX2Z1bGxTY3JlZW5XaWRnZXQ7Ci19OwotI2VuZGlmCi0KIGNsYXNzIEZ1
bGxTY3JlZW5WaWRlb1F0IDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5W
aWRlb1dpZGdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3Jl
ZW5WaWRlb1dpZGdldC5jcHAKaW5kZXggYmI1ZTJiOWY2MTJmNjU1MGNiZmVkMTJmZDgzYmIzYzA3
ZTc1NzQ0Yi4uNDEwNWQwMmM2MjI1N2M1NDk5MDZmZWM1MTVmNGY3NmQ0ZWE4YjdkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRn
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZp
ZGVvV2lkZ2V0LmNwcApAQCAtMjUsNiArMjUsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgiCiAK
ICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CkBAIC0zNSw3ICszNiw3IEBACiAKIHN0YXRpYyBjb25z
dCBpbnQgZ0hpZGVNb3VzZUN1cnNvckRlbGF5ID0gMzAwMDsKIAotbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIFdlYktpdCB7CiAKIEZ1bGxTY3JlZW5WaWRlb1dpZGdldDo6RnVsbFNjcmVl
blZpZGVvV2lkZ2V0KCkKICAgICA6IFFWaWRlb1dpZGdldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GdWxsU2NyZWVuVmlkZW9XaWRnZXQuaAppbmRleCA3
ZTdmOGRmMWM2ZTFjMDI3MDAzMTgzZmI2MjNjYmUxODAxMmNkOWRiLi4yMDFjYzQ5ZDFlNDEyZTk4
N2I2ZTQxY2M1MDNkZDIyZTNkNDc2YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Z1bGxTY3JlZW5WaWRlb1dpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnVsbFNjcmVlblZpZGVvV2lkZ2V0LmgKQEAgLTM1LDcgKzM1LDcg
QEAgUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRTWVkaWFQbGF5ZXI7CiBRVF9FTkRfTkFNRVNQ
QUNFCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBG
dWxsU2NyZWVuVmlkZW9XaWRnZXQgOiBwdWJsaWMgUVZpZGVvV2lkZ2V0IHsKICAgICBRX09CSkVD
VApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlv
bkNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRp
b25DbGllbnRRdC5jcHAKaW5kZXggYjZiNGQ3MGJkMTBhODdjODMxOWZlMTk3OGM3NjlkMTJiNjk5
OTM4Ni4uMjZkMWI0MDdhOGNiMDNiZTE1NWZjODE4ZmU5Mjg2Y2M4NjUzYTNkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50
UXQuY3BwCkBAIC0zMywxMCArMzMsOCBAQAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24u
aCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAicXdlYmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKLSNpbmNsdWRlICJx
d2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJRV2ViRnJhbWVB
ZGFwdGVyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCiAKICNpbmNsdWRlIDxRdExv
Y2F0aW9uL1FHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+CiAKQEAgLTQ0LDggKzQyLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciBmYWlsZWRUb1N0YXJ0U2VydmljZUVy
cm9yTWVzc2FnZVtdID0gIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIjsKIAot
R2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdChjb25zdCBRV2ViUGFnZSog
cGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQorR2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRp
b25DbGllbnRRdChjb25zdCBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uo
cGFnZSkKICAgICAsIG1fbGFzdFBvc2l0aW9uKDApCiAgICAgLCBtX2xvY2F0aW9uKDApCiB7CkBA
IC04NSwxMiArODMsOSBAQCB2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnBvc2l0aW9uVXBkYXRl
ZChjb25zdCBRR2VvUG9zaXRpb25JbmZvJiBnZW9Qb3NpdGlvbikKIAogICAgIGRvdWJsZSB0aW1l
U3RhbXBJblNlY29uZHMgPSBnZW9Qb3NpdGlvbi50aW1lc3RhbXAoKS50b01TZWNzU2luY2VFcG9j
aCgpIC8gMTAwMDsKIAotICAgIG1fbGFzdFBvc2l0aW9uID0gR2VvbG9jYXRpb25Qb3NpdGlvbjo6
Y3JlYXRlKHRpbWVTdGFtcEluU2Vjb25kcywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeSwgcHJvdmlk
ZXNBbHRpdHVkZSwgYWx0aXR1ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Zp
ZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworICAgIG1fbGFzdFBv
c2l0aW9uID0gR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3JlYXRlKHRpbWVTdGFtcEluU2Vjb25kcywg
bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRl
LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVh
ZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOwogCi0gICAgV2ViQ29yZTo6UGFn
ZSogcGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShtX3BhZ2UpOworICAgIFdlYkNvcmU6OlBh
Z2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPnBhZ2U7CiAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyOjpm
cm9tKHBhZ2UpLT5wb3NpdGlvbkNoYW5nZWQobV9sYXN0UG9zaXRpb24uZ2V0KCkpOwogfQogCkBA
IC0xMDAsNyArOTUsNyBAQCB2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0YXJ0VXBkYXRpbmco
KQogICAgICAgICBjb25uZWN0KG1fbG9jYXRpb24sIFNJR05BTChwb3NpdGlvblVwZGF0ZWQoUUdl
b1Bvc2l0aW9uSW5mbykpLCB0aGlzLCBTTE9UKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRpb25J
bmZvKSkpOwogCiAgICAgaWYgKCFtX2xvY2F0aW9uKSB7Ci0gICAgICAgIFdlYkNvcmU6OlBhZ2Uq
IHBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUobV9wYWdlKTsKKyAgICAgICAgV2ViQ29yZTo6
UGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+cGFnZTsKICAgICAgICAgUmVmUHRyPFdlYkNvcmU6Okdl
b2xvY2F0aW9uRXJyb3I+IGVycm9yID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKEdlb2xvY2F0
aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JN
ZXNzYWdlKTsKICAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyOjpmcm9tKHBhZ2UpLT5lcnJv
ck9jY3VycmVkKGVycm9yLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTI0LDE0ICsxMTks
MTQgQEAgdm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9v
bCkKIHZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oR2VvbG9jYXRp
b24qIGdlb2xvY2F0aW9uKQogewogICAgIEFTU0VSVChnZW9sb2NhdGlvbik7Ci0gICAgUVdlYkZy
YW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+ZnJhbWUo
KSk7CisgICAgUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBRV2ViRnJhbWVBZGFwdGVyOjpr
aXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKIHZvaWQgR2VvbG9j
YXRpb25DbGllbnRRdDo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uKQogewogICAgIEFTU0VSVChnZW9sb2NhdGlvbik7Ci0gICAgUVdlYkZyYW1lKiB3ZWJG
cmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+ZnJhbWUoKSk7CisgICAg
UVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUgPSBRV2ViRnJhbWVBZGFwdGVyOjpraXQoZ2VvbG9j
YXRpb24tPmZyYW1lKCkpOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKaW5kZXgg
MmU5NGJkZWJjMmJkNTc4ZDVmMWY0MWZjZjZiMWIwMzMwMzgzMmFmMi4uYzIyODc4NjdmYmU5MGQ5
Y2Y0NzYxMDNhMzZjN2UyMzgzYmQzNjRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKQEAgLTI4LDE2ICsyOCwxNiBA
QAogCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnQuaCIKIAorI2luY2x1ZGUgPFFHZW9Qb3Np
dGlvbkluZm8+CiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
LSNpbmNsdWRlIDxRdExvY2F0aW9uL1FHZW9Qb3NpdGlvbkluZm8+CiBRVF9CRUdJTl9OQU1FU1BB
Q0UKIGNsYXNzIFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U7CiBRVF9FTkRfTkFNRVNQQUNFCiAKIAot
Y2xhc3MgUVdlYlBhZ2U7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBHZW9sb2NhdGlvbkNsaWVudFF0IDogcHVi
bGljIFFPYmplY3QsIHB1YmxpYyBHZW9sb2NhdGlvbkNsaWVudCB7CiAgICAgUV9PQkpFQ1QKIAog
cHVibGljOgotICAgIEdlb2xvY2F0aW9uQ2xpZW50UXQoY29uc3QgUVdlYlBhZ2UqKTsKKyAgICBH
ZW9sb2NhdGlvbkNsaWVudFF0KGNvbnN0IFFXZWJQYWdlQWRhcHRlciopOwogICAgIHZpcnR1YWwg
fkdlb2xvY2F0aW9uQ2xpZW50UXQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvbkRl
c3Ryb3llZCgpOwpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlIFFfU0xPVFM6CiAgICAgdm9pZCBw
b3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyYpOwogCiBwcml2YXRlOgotICAg
IGNvbnN0IFFXZWJQYWdlKiBtX3BhZ2U7CisgICAgY29uc3QgUVdlYlBhZ2VBZGFwdGVyKiBtX3dl
YlBhZ2U7CiAgICAgUmVmUHRyPEdlb2xvY2F0aW9uUG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOwog
ICAgIFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRpb247CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0LmNwcAppbmRleCA3NTAwZTk5M2ZkYjlmZmJlZTEwYTNmODZhMDY4YzUz
ZmQ4M2Q4ODlmLi4wNGU0NzY4OGE2MDAyMDkxYTRhOTAxNzhmZjE3MzVmMWQ3YjM3MjQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dl
b2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcApAQCAtMzIsMTAgKzMyLDkgQEAKICNpbmNs
dWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogCiAjaW5jbHVkZSAiR2VvbG9j
YXRpb24uaCIKLQotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgIlFXZWJGcmFtZUFk
YXB0ZXIuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJxd2Via2l0
Z2xvYmFsLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC02MCwzNiArNTksMzAgQEAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6On5HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpCiB7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShRV2Vi
RnJhbWUqIHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVuZXIpCit2b2lkIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUo
UVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUsIEdlb2xvY2F0aW9uKiBsaXN0ZW5lcikKIHsKICAg
ICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5zZXJ0KHdlYkZyYW1lLCBsaXN0ZW5lcik7
CiAKLSAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7Ci0gICAgZW1pdCBwYWdl
LT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZCh3ZWJGcmFtZSwgUVdlYlBhZ2U6Okdlb2xvY2F0
aW9uKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFkYXB0ZXI6OmtpdCh3
ZWJGcmFtZS0+ZnJhbWUtPnBhZ2UoKSk7CisgICAgcGFnZS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdGVkKHdlYkZyYW1lKTsKIH0KIAogCi12b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoUVdlYkZy
YW1lKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQordm9pZCBHZW9sb2NhdGlvblBl
cm1pc3Npb25DbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKFFXZWJGcmFtZUFkYXB0ZXIqIHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVuZXIpCiB7
CiAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJGcmFtZSk7CiAKLSAg
ICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7Ci0gICAgZW1pdCBwYWdlLT5mZWF0
dXJlUGVybWlzc2lvblJlcXVlc3RDYW5jZWxlZCh3ZWJGcmFtZSwgUVdlYlBhZ2U6Okdlb2xvY2F0
aW9uKTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFkYXB0ZXI6OmtpdCh3
ZWJGcmFtZS0+ZnJhbWUtPnBhZ2UoKSk7CisgICAgcGFnZS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdENhbmNlbGxlZCh3ZWJGcmFtZSk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24oUVdlYkZyYW1lKiB3ZWJGcmFtZSwgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Qb2xpY3kgcGVybWlzc2lvbikKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQ6OnNldFBlcm1pc3Npb24oUVdlYkZyYW1lQWRhcHRlciogd2ViRnJhbWUsIGJvb2wg
Z3JhbnRlZCkKIHsgIAogICAgIGlmICghbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmNvbnRh
aW5zKHdlYkZyYW1lKSkgCiAgICAgICAgIHJldHVybjsKIAogICAgIEdlb2xvY2F0aW9uKiBsaXN0
ZW5lciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy52YWx1ZSh3ZWJGcmFtZSk7Ci0KLSAg
ICBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpCi0g
ICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQodHJ1ZSk7Ci0gICAgZWxzZSBpZiAocGVybWlz
c2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkRlbmllZEJ5VXNlcikKLSAgICAgICAgbGlzdGVu
ZXItPnNldElzQWxsb3dlZChmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47CisgICAg
bGlzdGVuZXItPnNldElzQWxsb3dlZChncmFudGVkKTsKIAogICAgIG1fcGVuZGluZ1Blcm1pc3Np
b25SZXF1ZXN0cy5yZW1vdmUod2ViRnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRR
dC5oCmluZGV4IDFiNDU0MGQ4N2I2NDRiNzZiYWM1MGNiZGMwOTAyZjEwN2RkY2M1N2EuLjcxMTgz
YjQ5N2ZhOTc4Y2M1MDBjYzU1ODc2NjFlOTc3YTA0MDk1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0LmgKQEAgLTM0LDEyICszNCwxMSBAQAogI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
IAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKIAogI2lu
Y2x1ZGUgPFFIYXNoPgogCi1jbGFzcyBRV2ViRnJhbWU7Ci1jbGFzcyBRV2ViUGFnZTsKK2NsYXNz
IFFXZWJGcmFtZUFkYXB0ZXI7CitjbGFzcyBRV2ViUGFnZUFkYXB0ZXI7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDgsMTMgKzQ3LDEzIEBAIHB1YmxpYzoKICAgICBHZW9sb2NhdGlvblBl
cm1pc3Npb25DbGllbnRRdCgpOwogICAgIH5HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgp
OwogCi0gICAgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZy
YW1lKiwgR2VvbG9jYXRpb24qKTsKLSAgICB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbiopOwotICAgIHZvaWQgc2V0
UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSk7CisgICAg
dm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1lQWRhcHRl
ciosIEdlb2xvY2F0aW9uKik7CisgICAgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0Rm9yRnJhbWUoUVdlYkZyYW1lQWRhcHRlciosIEdlb2xvY2F0aW9uKik7CisgICAgdm9p
ZCBzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZUFkYXB0ZXIqLCBib29sIC8qZ3JhbnRlZCovKTsKIAog
ICAgIHN0YXRpYyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogZ2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50KCk7CiBwcml2YXRlOgotICAgIFFIYXNoPFFXZWJGcmFtZSosIEdlb2xvY2F0
aW9uKj4gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzOworICAgIFFIYXNoPFFXZWJGcmFtZUFk
YXB0ZXIqLCBHZW9sb2NhdGlvbio+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNv
cmVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQu
Y3BwCmluZGV4IGQ2MDY1YzE0ZTVhNjQyMTljYzExNDk1MGFjOWM3NmM3MmQ5NTRhMTUuLmU3NWI4
NTJmZTE4ZjhjYzc3OTNiYWM1YjAxZWRiMTgwNDI0N2UxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApAQCAtNDQsMTkgKzQ0LDMx
IEBACiAKICNpbmNsdWRlICJxd2ViZWxlbWVudF9wLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgotI2luY2x1ZGUgPFFTdHlsZT4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotLy8gQ2FsbGVkIGFsc28gZnJvbSBXZWJLaXQyJ3MgV2ViUHJvY2Vz
cy4KLVFfREVDTF9FWFBPUlQgdm9pZCBpbml0aWFsaXplV2ViS2l0MlRoZW1lKCkKK3N0YXRpYyBR
dFN0eWxlRmFjdG9yeUZ1bmN0aW9uIGluaXRDYWxsYmFjayA9IDA7CisKK3ZvaWQgc2V0V2ViS2l0
V2lkZ2V0c0luaXRDYWxsYmFjayhRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uIGNhbGxiYWNrKQogewot
ICAgIGlmIChxZ2V0ZW52KCJRVF9XRUJLSVRfVEhFTUVfTkFNRSIpID09ICJxc3R5bGUiKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRTdHlsZUZhY3RvcnlGdW5jdGlv
bihXZWJLaXQ6OlFTdHlsZUZhY2FkZUltcDo6Y3JlYXRlKTsKKyAgICBpbml0Q2FsbGJhY2sgPSBj
YWxsYmFjazsKK30KKworLy8gQ2FsbGVkIGFsc28gZnJvbSBXZWJLaXQyJ3MgV2ViUHJvY2Vzcwor
UV9ERUNMX0VYUE9SVCB2b2lkIGluaXRpYWxpemVXZWJLaXRRdCgpCit7CisgICAgaWYgKGluaXRD
YWxsYmFjaykgeworICAgICAgICBXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVG
YWN0b3J5RnVuY3Rpb24oaW5pdENhbGxiYWNrKTsKICAgICAgICAgV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6c2V0Q3VzdG9tVGhlbWUoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZSwg
bmV3IFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxlKTsKICAgICB9CisKKyAgICBXZWJDb3Jl
Ojppbml0aWFsaXplV2ViQ29yZVF0KCk7Cit9CisKK1FfREVDTF9FWFBPUlQgdm9pZCBzZXRJbWFn
ZVBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgUVBpeG1hcCYgcGl4bWFw
KQoreworICAgIFdlYkNvcmU6OkltYWdlOjpzZXRQbGF0Zm9ybVJlc291cmNlKG5hbWUsIHBpeG1h
cCk7CiB9CiAKIH0KQEAgLTc5LDE4ICs5MSwxMCBAQCB2b2lkIGluaXRpYWxpemVXZWJDb3JlUXQo
KQogICAgIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojppbml0aWFsaXplKCk7CiAgICAgUXRXZWJFbGVt
ZW50UnVudGltZTo6aW5pdGlhbGl6ZSgpOwogCi0gICAgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0
eWxlRmFjdG9yeUZ1bmN0aW9uKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpjcmVhdGUpOwotICAg
IFJlbmRlclRoZW1lUXQ6OnNldEN1c3RvbVRoZW1lKFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUs
IG5ldyBTY3JvbGxiYXJUaGVtZVFTdHlsZSk7Ci0KICNpZiBVU0UoUVRLSVQpCiAgICAgSW5pdFdl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UoKTsKICNlbmRpZgogCi0gICAgLy8gUVdlYlNldHRpbmdzOjpT
ZWFyY2hDYW5jZWxCdXR0b25HcmFwaGljCi0gICAgSW1hZ2U6OnNldFBsYXRmb3JtUmVzb3VyY2Uo
InNlYXJjaENhbmNlbEJ1dHRvbiIsIFFBcHBsaWNhdGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRQaXht
YXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1dHRvbikpOwotICAgIC8vIFFXZWJTZXR0aW5nczo6
U2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZEdyYXBoaWMKLSAgICBJbWFnZTo6c2V0UGxhdGZvcm1S
ZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZCIsIFFBcHBsaWNhdGlvbjo6c3R5bGUo
KS0+c3RhbmRhcmRQaXhtYXAoUVN0eWxlOjpTUF9EaWFsb2dDbG9zZUJ1dHRvbikpOwotCiAgICAg
aW5pdGlhbGl6ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvSW5pdFdlYkNvcmVRdC5oCmluZGV4IGRmMWFhZjc3NjI3MWZmYjc4YWYwMjA3NDMzZGNi
YmE1Zjc0ZDhiZGMuLmU4NGUwZGFkMmVkNTUxYjllY2M4MjY5ZWQ4OGE1OTlkZTFiZjc4YWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5oCkBA
IC0zMCw2ICszMCwyMiBAQAogI2lmbmRlZiBJbml0V2ViQ29yZVF0X2gKICNkZWZpbmUgSW5pdFdl
YkNvcmVRdF9oCiAKKyNpbmNsdWRlICJxaW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUGFnZTsKK2NsYXNzIFFTdHlsZUZhY2FkZTsKK30KK3R5cGVkZWYgV2ViQ29yZTo6UVN0
eWxlRmFjYWRlKiAoKlF0U3R5bGVGYWN0b3J5RnVuY3Rpb24pKFdlYkNvcmU6OlBhZ2UqKTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgc2V0V2ViS2l0V2lkZ2V0c0luaXRDYWxsYmFjayhR
dFN0eWxlRmFjdG9yeUZ1bmN0aW9uKTsKK3ZvaWQgaW5pdGlhbGl6ZVdlYktpdFF0KCk7Cit2b2lk
IHNldEltYWdlUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiAvKiBuYW1lICovLCBjb25zdCBR
UGl4bWFwJik7CisKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIGluaXRpYWxpemVX
ZWJDb3JlUXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5pdFdlYktpdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdl
YktpdFF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTg4NjAzN2RhNWY4YzEyNWY2NTA1NGNmZThjZmYxNzcx
NGRlNGUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9Jbml0V2ViS2l0UXQuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbml0V2ViS2l0UXQuaCIKKworI2luY2x1ZGUgIkluaXRX
ZWJDb3JlUXQuaCIKKworI2luY2x1ZGUgIlFTdHlsZUZhY2FkZUltcC5oIgorCisjaW5jbHVkZSA8
UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFTdHlsZT4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1FfREVDTF9FWFBPUlQgdm9pZCBpbml0aWFsaXplV2ViS2l0V2lkZ2V0cygpCit7CisgICAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNldFdlYktpdFdpZGdldHNJbml0Q2FsbGJhY2soUVN0eWxlRmFj
YWRlSW1wOjpjcmVhdGUpOworICAgIGluaXRpYWxpemVXZWJLaXRRdCgpOworCisgICAgLy8gUVdl
YlNldHRpbmdzOjpTZWFyY2hDYW5jZWxCdXR0b25HcmFwaGljCisgICAgc2V0SW1hZ2VQbGF0Zm9y
bVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b24iLCBRQXBwbGljYXRpb246OnN0eWxlKCktPnN0
YW5kYXJkUGl4bWFwKFFTdHlsZTo6U1BfRGlhbG9nQ2xvc2VCdXR0b24pKTsKKyAgICAvLyBRV2Vi
U2V0dGluZ3M6OlNlYXJjaENhbmNlbEJ1dHRvblByZXNzZWRHcmFwaGljCisgICAgc2V0SW1hZ2VQ
bGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIiwgUUFwcGxpY2F0aW9u
OjpzdHlsZSgpLT5zdGFuZGFyZFBpeG1hcChRU3R5bGU6OlNQX0RpYWxvZ0Nsb3NlQnV0dG9uKSk7
CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYktpdFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJLaXRRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyZjU3MTFhODEzODEx
ZjI3MWE2ODc3ZTZiNTFkYmRkMGExODUxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJLaXRRdC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgSW5pdFdlYktpdFF0X2gKKyNkZWZpbmUgSW5pdFdlYktpdFF0X2gK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgaW5pdGlhbGl6ZVdlYktpdFdpZGdldHMoKTsK
KworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50UXQuY3BwCmluZGV4IDAyNWFkNjU5ZGEwMzJhMzI4YzYxYWM2ZWY0OTE0
ODA0MDAzODk4ZmMuLjFiZmFhN2I3MDc4ZmYwZDc2OTE4YWY5ZTYyNDExMTcyODc3NzcyZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50UXQuY3BwCkBAIC0zOCw2MiArMzgsMjIgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JTZXJ2ZXJR
dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlFXZWJGcmFtZUFkYXB0ZXIuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgotI2luY2x1ZGUgInF3ZWJpbnNwZWN0b3Iu
aCIKLSNpbmNsdWRlICJxd2ViaW5zcGVjdG9yX3AuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgot
I2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxd2Vidmlldy5oIgorI2luY2x1ZGUg
PFFDb3JlQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UU5ldHdvcmtS
ZXF1ZXN0PgorI2luY2x1ZGUgPFFTZXR0aW5ncz4KKyNpbmNsdWRlIDxRVXJsPgorI2luY2x1ZGUg
PFFWYXJpYW50PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxRdENv
cmUvUUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRdENvcmUvUUZpbGU+Ci0jaW5jbHVkZSA8
UXRDb3JlL1FTZXR0aW5ncz4KLSNpbmNsdWRlIDxRdENvcmUvUVZhcmlhbnQ+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IFFMYXRpbjFTdHJpbmcgc2V0dGluZ1N0b3JhZ2VQ
cmVmaXgoIlF0L1F0V2ViS2l0L1FXZWJJbnNwZWN0b3IvIik7CiBzdGF0aWMgY29uc3QgUUxhdGlu
MVN0cmluZyBzZXR0aW5nU3RvcmFnZVR5cGVTdWZmaXgoIi50eXBlIik7CiAKLWNsYXNzIEluc3Bl
Y3RvckNsaWVudFdlYlBhZ2UgOiBwdWJsaWMgUVdlYlBhZ2UgewotICAgIFFfT0JKRUNUCi0gICAg
ZnJpZW5kIGNsYXNzIEluc3BlY3RvckNsaWVudFF0OwotcHVibGljOgotICAgIEluc3BlY3RvckNs
aWVudFdlYlBhZ2UoUU9iamVjdCogcGFyZW50ID0gMCkKLSAgICAgICAgOiBRV2ViUGFnZShwYXJl
bnQpCi0gICAgewotICAgICAgICBjb25uZWN0KG1haW5GcmFtZSgpLCBTSUdOQUwoamF2YVNjcmlw
dFdpbmRvd09iamVjdENsZWFyZWQoKSksIFNMT1QoamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFy
ZWQoKSkpOwotICAgIH0KLQotICAgIFFXZWJQYWdlKiBjcmVhdGVXaW5kb3coUVdlYlBhZ2U6Oldl
YldpbmRvd1R5cGUpCi0gICAgewotICAgICAgICBRV2ViVmlldyogdmlldyA9IG5ldyBRV2ViVmll
dzsKLSAgICAgICAgUVdlYlBhZ2UqIHBhZ2UgPSBuZXcgUVdlYlBhZ2U7Ci0gICAgICAgIHZpZXct
PnNldFBhZ2UocGFnZSk7Ci0gICAgICAgIHZpZXctPnNldEF0dHJpYnV0ZShRdDo6V0FfRGVsZXRl
T25DbG9zZSk7Ci0gICAgICAgIHJldHVybiBwYWdlOwotICAgIH0KLQotcHVibGljIFFfU0xPVFM6
Ci0gICAgdm9pZCBqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpIAotICAgIHsKLSNpZm5k
ZWYgUVRfTk9fUFJPUEVSVElFUwotICAgICAgICBRVmFyaWFudCBpbnNwZWN0b3JKYXZhU2NyaXB0
V2luZG93T2JqZWN0cyA9IHByb3BlcnR5KCJfcV9pbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93T2Jq
ZWN0cyIpOwotICAgICAgICBpZiAoIWluc3BlY3RvckphdmFTY3JpcHRXaW5kb3dPYmplY3RzLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgUU1hcDxRU3RyaW5nLCBRVmFy
aWFudD4gamF2YVNjcmlwdE5hbWVPYmplY3RNYXAgPSBpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93
T2JqZWN0cy50b01hcCgpOwotICAgICAgICBRV2ViRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7
Ci0gICAgICAgIFFNYXA8UVN0cmluZywgUVZhcmlhbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGph
dmFTY3JpcHROYW1lT2JqZWN0TWFwLmNvbnN0QmVnaW4oKTsKLSAgICAgICAgZm9yICggOyBpdCAh
PSBqYXZhU2NyaXB0TmFtZU9iamVjdE1hcC5jb25zdEVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAg
ICBRU3RyaW5nIG5hbWUgPSBpdC5rZXkoKTsKLSAgICAgICAgICAgIFFWYXJpYW50IHZhbHVlID0g
aXQudmFsdWUoKTsKLSAgICAgICAgICAgIFFPYmplY3QqIG9iaiA9IHZhbHVlLnZhbHVlPFFPYmpl
Y3QqPigpOwotICAgICAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChu
YW1lLCBvYmopOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci19OwotCiBuYW1lc3BhY2Ugewog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKQEAgLTExMiw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKHFzZXR0aW5ncy5zdGF0dXMoKSA9PSBRU2V0dGluZ3M6OkFjY2Vzc0Vycm9yKSB7CiAg
ICAgICAgICAgICAvLyBRQ29yZUFwcGxpY2F0aW9uOjpzZXRPcmdhbml6YXRpb25OYW1lIGFuZCBR
Q29yZUFwcGxpY2F0aW9uOjpzZXRBcHBsaWNhdGlvbk5hbWUgaGF2ZW4ndCBiZWVuIGNhbGxlZAog
ICAgICAgICAgICAgcVdhcm5pbmcoIlFXZWJJbnNwZWN0b3I6IFFTZXR0aW5ncyBjb3VsZG4ndCBy
ZWFkIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBbJXNdLiIsCi0gICAgICAgICAgICAgICAgICAgICBx
UHJpbnRhYmxlKHN0YXRpY19jYXN0PFFTdHJpbmc+KG5hbWUpKSk7CisgICAgICAgICAgICAgICAg
cVByaW50YWJsZShzdGF0aWNfY2FzdDxRU3RyaW5nPihuYW1lKSkpOwogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgICAgICB9CiAKQEAgLTEzNCw3ICs5NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUVNldHRpbmdzIHFzZXR0aW5nczsKICAgICAgICAgaWYgKHFzZXR0aW5ncy5zdGF0dXMo
KSA9PSBRU2V0dGluZ3M6OkFjY2Vzc0Vycm9yKSB7CiAgICAgICAgICAgICBxV2FybmluZygiUVdl
Ykluc3BlY3RvcjogUVNldHRpbmdzIGNvdWxkbid0IHBlcnNpc3QgY29uZmlndXJhdGlvbiBzZXR0
aW5nIFslc10uIiwKLSAgICAgICAgICAgICAgICAgICAgIHFQcmludGFibGUoc3RhdGljX2Nhc3Q8
UVN0cmluZz4obmFtZSkpKTsKKyAgICAgICAgICAgICAgICBxUHJpbnRhYmxlKHN0YXRpY19jYXN0
PFFTdHJpbmc+KG5hbWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
MTc1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAKIH0KIAotSW5zcGVjdG9yQ2xpZW50UXQ6Okluc3Bl
Y3RvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKQorSW5zcGVjdG9yQ2xpZW50UXQ6Okluc3BlY3Rv
ckNsaWVudFF0KFFXZWJQYWdlQWRhcHRlciogcGFnZSkKICAgICA6IG1faW5zcGVjdGVkV2ViUGFn
ZShwYWdlKQogICAgICwgbV9mcm9udGVuZFdlYlBhZ2UoMCkKICAgICAsIG1fZnJvbnRlbmRDbGll
bnQoMCkKQEAgLTIwNCwxMiArMTY0LDEyIEBAIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogSW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDCiB7CiAg
ICAgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSAw
OwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JW
aWV3ID0gYWRvcHRQdHIobmV3IFFXZWJWaWV3KTsKLSAgICAvLyBGSVhNRTogV2hlcmUgZG9lcyBp
bnNwZWN0b3JQYWdlIGdldCBkZWxldGVkPwotICAgIEluc3BlY3RvckNsaWVudFdlYlBhZ2UqIGlu
c3BlY3RvclBhZ2UgPSBuZXcgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0b3JWaWV3Lmdl
dCgpKTsKLSAgICBpbnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOworICAgIFFP
YmplY3QqIHZpZXcgPSAwOworICAgIFFXZWJQYWdlQWRhcHRlciogaW5zcGVjdG9yUGFnZSA9IDA7
CisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5jcmVhdGVXZWJJbnNwZWN0b3IoJnZpZXcsICZpbnNw
ZWN0b3JQYWdlKTsKKyAgICBPd25QdHI8UU9iamVjdD4gaW5zcGVjdG9yVmlldyA9IGFkb3B0UHRy
KHZpZXcpOwogCi0gICAgUVdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRXZWJQ
YWdlLT5kLT5nZXRPckNyZWF0ZUluc3BlY3RvcigpOworICAgIFFPYmplY3QqIGluc3BlY3RvciA9
IG1faW5zcGVjdGVkV2ViUGFnZS0+aW5zcGVjdG9ySGFuZGxlKCk7CiAgICAgLy8gUmVtb3RlIGZy
b250ZW5kIHdhcyBhdHRhY2hlZC4KICAgICBpZiAobV9yZW1vdGVGcm9udEVuZENoYW5uZWwpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMjI4LDIxICsxODgsMjAgQEAgV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5k
KFdlYkMKICNpZm5kZWYgUVRfTk9fUFJPUEVSVElFUwogICAgIFFWYXJpYW50IGluc3BlY3Rvckph
dmFTY3JpcHRXaW5kb3dPYmplY3RzID0gaW5zcGVjdG9yLT5wcm9wZXJ0eSgiX3FfaW5zcGVjdG9y
SmF2YVNjcmlwdFdpbmRvd09iamVjdHMiKTsKICAgICBpZiAoaW5zcGVjdG9ySmF2YVNjcmlwdFdp
bmRvd09iamVjdHMuaXNWYWxpZCgpKQotICAgICAgICBpbnNwZWN0b3JQYWdlLT5zZXRQcm9wZXJ0
eSgiX3FfaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiLCBpbnNwZWN0b3JKYXZhU2Ny
aXB0V2luZG93T2JqZWN0cyk7CisgICAgICAgIGluc3BlY3RvclBhZ2UtPmhhbmRsZSgpLT5zZXRQ
cm9wZXJ0eSgiX3FfaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMiLCBpbnNwZWN0b3JK
YXZhU2NyaXB0V2luZG93T2JqZWN0cyk7CiAjZW5kaWYKLSAgICBpbnNwZWN0b3JWaWV3LT5wYWdl
KCktPm1haW5GcmFtZSgpLT5sb2FkKGluc3BlY3RvclVybCk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJQ
YWdlLT5kLT5pbnNwZWN0b3JGcm9udGVuZCA9IGluc3BlY3RvclZpZXcuZ2V0KCk7Ci0gICAgaW5z
cGVjdG9yLT5kLT5zZXRGcm9udGVuZChpbnNwZWN0b3JWaWV3LmdldCgpKTsKKyAgICBpbnNwZWN0
b3JQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmxvYWQoUU5ldHdvcmtSZXF1ZXN0KGluc3BlY3Rv
clVybCkpOworICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+c2V0SW5zcGVjdG9yRnJvbnRlbmQoaW5z
cGVjdG9yVmlldy5nZXQoKSk7CiAKICAgICAvLyBJcyAnY29udHJvbGxlcicgdGhlIHNhbWUgb2Jq
ZWN0IGFzICdpbnNwZWN0b3JDb250cm9sbGVyJyAod2hpY2ggYXBwZWFycyB0byBiZSB1bnVzZWQp
PwotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBpbnNwZWN0b3JWaWV3LT5w
YWdlKCktPmQtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBPd25QdHI8SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdD4gZnJvbnRlbmRDbGllbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcucmVs
ZWFzZSgpLCB0aGlzKSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IGlu
c3BlY3RvclBhZ2UtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBPd25QdHI8SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdD4gZnJvbnRlbmRDbGllbnQgPSBhZG9wdFB0cihuZXcgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcu
cmVsZWFzZSgpLCBpbnNwZWN0b3JQYWdlLT5wYWdlLCB0aGlzKSk7CiAgICAgbV9mcm9udGVuZENs
aWVudCA9IGZyb250ZW5kQ2xpZW50LmdldCgpOwogICAgIGNvbnRyb2xsZXItPnNldEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KGZyb250ZW5kQ2xpZW50LnJlbGVhc2UoKSk7CiAgICAgbV9mcm9udGVu
ZFdlYlBhZ2UgPSBpbnNwZWN0b3JQYWdlOwogCiAgICAgLy8gV2ViIEluc3BlY3RvciBzaG91bGQg
bm90IGJlbG9uZyB0byBhbnkgb3RoZXIgcGFnZSBncm91cHMgc2luY2UgaXQgaXMgYSBzcGVjaWFs
aXplZCBkZWJ1Z2dlciB3aW5kb3cuCi0gICAgbV9mcm9udGVuZFdlYlBhZ2UtPmhhbmRsZSgpLT5w
YWdlLT5zZXRHcm91cE5hbWUoIl9fV2ViSW5zcGVjdG9yUGFnZUdyb3VwX18iKTsKKyAgICBtX2Zy
b250ZW5kV2ViUGFnZS0+cGFnZS0+c2V0R3JvdXBOYW1lKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91
cF9fIik7CiAgICAgZnJvbnRlbmRDaGFubmVsID0gdGhpczsKICNlbmRpZgogICAgIHJldHVybiBm
cm9udGVuZENoYW5uZWw7CkBAIC0yNzMsNyArMjMyLDcgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRR
dDo6YXR0YWNoQW5kUmVwbGFjZVJlbW90ZUZyb250ZW5kKEluc3BlY3RvclNlcnZlclJlcXVlc3RI
YW4KIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIG1fcmVtb3RlRnJvbnRFbmRDaGFubmVs
ID0gY2hhbm5lbDsKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+Y29ubmVjdEZyb250ZW5kKHRoaXMpOworICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+cGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jb25uZWN0RnJvbnRlbmQodGhpcyk7CiAjZW5kaWYK
IH0KIApAQCAtMjgxLDcgKzI0MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmRldGFjaFJl
bW90ZUZyb250ZW5kKCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIG1fcmVtb3RlRnJv
bnRFbmRDaGFubmVsID0gMDsKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CisgICAgbV9pbnNwZWN0ZWRXZWJQYWdl
LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9udGVuZCgpOwogI2Vu
ZGlmCiB9CiAKQEAgLTI5Miw5ICsyNTEsOSBAQCB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdo
bGlnaHQoKQogCiB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWRlSGlnaGxpZ2h0KCkKIHsKLSAg
ICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPnBhZ2UtPm1h
aW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG1faW5zcGVjdGVkV2ViUGFn
ZS0+cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIFFSZWN0IHJl
Y3QgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPm1haW5GcmFtZSgpLT5nZW9tZXRyeSgpOworICAgICAg
ICBRUmVjdCByZWN0ID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5tYWluRnJhbWVBZGFwdGVyKCktPmZy
YW1lUmVjdCgpOwogICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgZnJh
bWUtPnZpZXcoKS0+aW52YWxpZGF0ZVJlY3QocmVjdCk7CiAgICAgfQpAQCAtMzExLDcgKzI3MCw3
IEBAIGJvb2wgSW5zcGVjdG9yQ2xpZW50UXQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiAgICAgaWYgKCFtX2Zyb250ZW5kV2ViUGFnZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgUGFnZSogZnJvbnRlbmRQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpj
b3JlKG1fZnJvbnRlbmRXZWJQYWdlKTsKKyAgICBQYWdlKiBmcm9udGVuZFBhZ2UgPSBtX2Zyb250
ZW5kV2ViUGFnZS0+cGFnZTsKICAgICByZXR1cm4gZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5k
UGFnZShmcm9udGVuZFBhZ2UsIG1lc3NhZ2UpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMTksOCArMjc4LDggQEAgYm9vbCBJbnNwZWN0b3JDbGllbnRRdDo6c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci1JbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFX
ZWJQYWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JW
aWV3LCBJbnNwZWN0b3JDbGllbnRRdCogaW5zcGVjdG9yQ2xpZW50KQotICAgIDogSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRXZWJQYWdlLT5kLT5wYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCksIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZSwgYWRvcHRQdHIobmV3
IEluc3BlY3RvckZyb250ZW5kU2V0dGluZ3NRdCgpKSkKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50
UXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2VBZGFwdGVyKiBpbnNwZWN0ZWRX
ZWJQYWdlLCBQYXNzT3duUHRyPFFPYmplY3Q+IGluc3BlY3RvclZpZXcsIFdlYkNvcmU6OlBhZ2Uq
IGluc3BlY3RvclBhZ2UsIEluc3BlY3RvckNsaWVudFF0KiBpbnNwZWN0b3JDbGllbnQpCisgICAg
OiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RlZFdlYlBhZ2UtPnBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSwgaW5zcGVjdG9yUGFnZSwgYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckZyb250ZW5kU2V0dGluZ3NRdCgpKSkKICAgICAsIG1faW5zcGVjdGVkV2ViUGFnZShpbnNwZWN0
ZWRXZWJQYWdlKQogICAgICwgbV9pbnNwZWN0b3JWaWV3KGluc3BlY3RvclZpZXcpCiAgICAgLCBt
X2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KGZhbHNlKQpAQCAtMzg2LDEwICszNDUsOCBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBuZXdVUkwpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6dXBkYXRlV2lu
ZG93VGl0bGUoKQogewotICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvcikg
ewotICAgICAgICBRU3RyaW5nIGNhcHRpb24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUo
IlFXZWJQYWdlIiwgIldlYiBJbnNwZWN0b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7Ci0g
ICAgICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShj
YXB0aW9uKTsKLSAgICB9CisgICAgUVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6
dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0
ZWRVUkwpOworICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+c2V0SW5zcGVjdG9yV2luZG93VGl0bGUo
Y2FwdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGVzdHJveUlu
c3BlY3RvclZpZXcoYm9vbCBub3RpZnlJbnNwZWN0b3JDb250cm9sbGVyKQpAQCAtMzk5LDIwICsz
NTYsMjAgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpkZXN0cm95SW5zcGVjdG9y
Vmlldyhib29sIG5vdGlmeUluc3BlY3RvckNvbnRyb2wKICAgICBtX2Rlc3Ryb3lpbmdJbnNwZWN0
b3JWaWV3ID0gdHJ1ZTsKIAogICAgIC8vIEluc3BlY3RlZCBwYWdlIG1heSBoYXZlIGFscmVhZHkg
YmVlbiBkZXN0cm95ZWQuCi0gICAgaWYgKG1faW5zcGVjdGVkV2ViUGFnZSAmJiBtX2luc3BlY3Rl
ZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgeworICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UpIHsK
ICAgICAgICAgLy8gQ2xlYXIgcmVmZXJlbmNlIGZyb20gUVdlYkluc3BlY3RvciB0byB0aGUgZnJv
bnRlbmQgdmlldy4KLSAgICAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3ItPmQt
PnNldEZyb250ZW5kKDApOworICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPnNldEluc3BlY3Rv
ckZyb250ZW5kKDApOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG5v
dGlmeUluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKKyAgICAgICAgbV9p
bnNwZWN0ZWRXZWJQYWdlLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RG
cm9udGVuZCgpOwogI2VuZGlmCiAgICAgaWYgKG1faW5zcGVjdG9yQ2xpZW50KQogICAgICAgICBt
X2luc3BlY3RvckNsaWVudC0+cmVsZWFzZUZyb250ZW5kUGFnZSgpOwogCiAgICAgLy8gQ2xlYXIg
cG9pbnRlciBiZWZvcmUgZGVsZXRpbmcgV2ViVmlldyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMg
dG8gaXRzIGRlc3RydWN0b3IuCi0gICAgT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3ID0g
bV9pbnNwZWN0b3JWaWV3LnJlbGVhc2UoKTsKKyAgICBPd25QdHI8UU9iamVjdD4gaW5zcGVjdG9y
VmlldyA9IG1faW5zcGVjdG9yVmlldy5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDo6aW5zcGVjdG9yQ2xpZW50RGVzdHJveWVkKCkKQEAgLTQyNCw0ICszODEs
MyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3RvckNsaWVudERlc3Ry
b3llZCgpCiAjZW5kaWYKIH0KIAotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFF0Lm1vYyIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQu
aAppbmRleCA0OWJhMDAwYWQxYTBkZWRmYzQ1ZmE0ZThlZTMyOGVmYWJlODdhNzM2Li5jNmRhNGQ2
MWM1NzQyN2Q4NGI3NWNhN2I4NzBjNmJlMzFhYWNkNDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCkBAIC0zMywxMSArMzMs
MTQgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmgiCi0jaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2lu
Y2x1ZGUgPFFTdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAorY2xhc3MgUVdlYlBhZ2VB
ZGFwdGVyOwogY2xhc3MgUVdlYlBhZ2U7CiBjbGFzcyBRV2ViVmlldzsKIApAQCAtNDgsNyArNTEs
NyBAQCBjbGFzcyBQYWdlOwogCiBjbGFzcyBJbnNwZWN0b3JDbGllbnRRdCA6IHB1YmxpYyBJbnNw
ZWN0b3JDbGllbnQsIHB1YmxpYyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgewogcHVibGljOgot
ICAgIEluc3BlY3RvckNsaWVudFF0KFFXZWJQYWdlKik7CisgICAgSW5zcGVjdG9yQ2xpZW50UXQo
UVdlYlBhZ2VBZGFwdGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVk
KCk7CiAKQEAgLTY3LDggKzcwLDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoUmVtb3RlRnJv
bnRlbmQoKTsKIAogcHJpdmF0ZToKLSAgICBRV2ViUGFnZSogbV9pbnNwZWN0ZWRXZWJQYWdlOwot
ICAgIFFXZWJQYWdlKiBtX2Zyb250ZW5kV2ViUGFnZTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIG1f
aW5zcGVjdGVkV2ViUGFnZTsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIG1fZnJvbnRlbmRXZWJQYWdl
OwogICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQqIG1fZnJvbnRlbmRDbGllbnQ7CiAgICAg
Ym9vbCBtX3JlbW90ZUluc3BlY3RvcjsKICAgICBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxl
clF0KiBtX3JlbW90ZUZyb250RW5kQ2hhbm5lbDsKQEAgLTc4LDcgKzgxLDcgQEAgcHJpdmF0ZToK
IAogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCA6IHB1YmxpYyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsIHsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0
KFFXZWJQYWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0
b3JWaWV3LCBJbnNwZWN0b3JDbGllbnRRdCogaW5zcGVjdG9yQ2xpZW50KTsKKyAgICBJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0KFFXZWJQYWdlQWRhcHRlciogaW5zcGVjdGVkV2ViUGFnZSwgUGFz
c093blB0cjxRT2JqZWN0PiBpbnNwZWN0b3JWaWV3LCBXZWJDb3JlOjpQYWdlKiBpbnNwZWN0b3JQ
YWdlLCBJbnNwZWN0b3JDbGllbnRRdCopOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5k
Q2xpZW50UXQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOwpAQCAtOTMs
NyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwogICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7CiAKQEAgLTEwMiw4ICsxMDUsOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKTsKICAgICB2
b2lkIGRlc3Ryb3lJbnNwZWN0b3JWaWV3KGJvb2wgbm90aWZ5SW5zcGVjdG9yQ29udHJvbGxlcik7
Ci0gICAgUVdlYlBhZ2UqIG1faW5zcGVjdGVkV2ViUGFnZTsKLSAgICBPd25QdHI8UVdlYlZpZXc+
IG1faW5zcGVjdG9yVmlldzsKKyAgICBRV2ViUGFnZUFkYXB0ZXIqIG1faW5zcGVjdGVkV2ViUGFn
ZTsKKyAgICBPd25QdHI8UU9iamVjdD4gbV9pbnNwZWN0b3JWaWV3OwogICAgIFFTdHJpbmcgbV9p
bnNwZWN0ZWRVUkw7CiAgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogICAgIElu
c3BlY3RvckNsaWVudFF0KiBtX2luc3BlY3RvckNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdlYlBhZ2UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRjNDczMGIzMjk1ODU4NzhjMDUyZTRhZmIxOTg1YmEwNGJlMzc0M2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFdlYlBhZ2UuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50V2ViUGFnZS5oIgorCisjaW5jbHVkZSA8
cXdlYmZyYW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0luc3BlY3RvckNsaWVu
dFdlYlBhZ2U6Okluc3BlY3RvckNsaWVudFdlYlBhZ2UoKQoreworICAgIFFXZWJWaWV3KiB2aWV3
ID0gbmV3IFFXZWJWaWV3OworICAgIHZpZXctPnNldFBhZ2UodGhpcyk7CisgICAgc2V0UGFyZW50
KHZpZXcpOworICAgIGNvbm5lY3QobWFpbkZyYW1lKCksIFNJR05BTChqYXZhU2NyaXB0V2luZG93
T2JqZWN0Q2xlYXJlZCgpKSwgU0xPVChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSk7
Cit9CisKK1FXZWJQYWdlKiBJbnNwZWN0b3JDbGllbnRXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdl
YlBhZ2U6OldlYldpbmRvd1R5cGUpCit7CisgICAgUVdlYlZpZXcqIHZpZXcgPSBuZXcgUVdlYlZp
ZXc7CisgICAgUVdlYlBhZ2UqIHBhZ2UgPSBuZXcgUVdlYlBhZ2U7CisgICAgdmlldy0+c2V0UGFn
ZShwYWdlKTsKKyAgICB2aWV3LT5zZXRBdHRyaWJ1dGUoUXQ6OldBX0RlbGV0ZU9uQ2xvc2UpOwor
ICAgIHJldHVybiBwYWdlOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudFdlYlBhZ2U6OmphdmFT
Y3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICBRVmFyaWFudCBpbnNwZWN0b3JKYXZh
U2NyaXB0V2luZG93T2JqZWN0cyA9IHByb3BlcnR5KCJfcV9pbnNwZWN0b3JKYXZhU2NyaXB0V2lu
ZG93T2JqZWN0cyIpOworICAgIGlmICghaW5zcGVjdG9ySmF2YVNjcmlwdFdpbmRvd09iamVjdHMu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgUU1hcDxRU3RyaW5nLCBRVmFyaWFudD4g
amF2YVNjcmlwdE5hbWVPYmplY3RNYXAgPSBpbnNwZWN0b3JKYXZhU2NyaXB0V2luZG93T2JqZWN0
cy50b01hcCgpOworICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsKKyAgICBRTWFw
PFFTdHJpbmcsIFFWYXJpYW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqYXZhU2NyaXB0TmFtZU9i
amVjdE1hcC5jb25zdEJlZ2luKCk7CisgICAgZm9yICggOyBpdCAhPSBqYXZhU2NyaXB0TmFtZU9i
amVjdE1hcC5jb25zdEVuZCgpOyArK2l0KSB7CisgICAgICAgIFFTdHJpbmcgbmFtZSA9IGl0Lmtl
eSgpOworICAgICAgICBRVmFyaWFudCB2YWx1ZSA9IGl0LnZhbHVlKCk7CisgICAgICAgIFFPYmpl
Y3QqIG9iaiA9IHZhbHVlLnZhbHVlPFFPYmplY3QqPigpOworICAgICAgICBmcmFtZS0+YWRkVG9K
YXZhU2NyaXB0V2luZG93T2JqZWN0KG5hbWUsIG9iaik7CisgICAgfQorfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2ViUGFn
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg4N2YyOWIwY2Y1MjE5ZGZhYTA0ZmIzZThmYzU3OGZkZGFlYTA4YWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFdlYlBhZ2UuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSW5z
cGVjdG9yQ2xpZW50V2ViUGFnZV9oCisjZGVmaW5lIEluc3BlY3RvckNsaWVudFdlYlBhZ2VfaAor
CisjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KKyNpbmNsdWRlIDxxd2Vidmlldy5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSA6IHB1YmxpYyBRV2Vi
UGFnZSB7CisgICAgUV9PQkpFQ1QKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSgpOworCisgICAgUVdlYlBhZ2Uq
IGNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSk7CisKK3B1YmxpYyBRX1NMT1RT
OgorICAgIHZvaWQgamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSW5zcGVjdG9yQ2xpZW50V2ViUGFnZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZl
clF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVy
UXQuY3BwCmluZGV4IDY1YmJhZDBmMDk0MGQ3ZGRmZGI1NjVkNzY4NzE5ZjRiMDQ1MGI5MGMuLmFi
ZjljM2Y3ODcwMmYyZTEzNWRhYWE2NzMxNTNjZDQ5OWE1NWZhMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwCkBAIC0y
MywxNiArMjMsMTUgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUVdl
YkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgogI2luY2x1ZGUg
InFodHRwaGVhZGVyX3AuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotI2luY2x1ZGUgInF3ZWJw
YWdlX3AuaCIKICNpbmNsdWRlIDxRRmlsZT4KICNpbmNsdWRlIDxRU3RyaW5nPgogI2luY2x1ZGUg
PFFTdHJpbmdMaXN0PgogI2luY2x1ZGUgPFFUY3BTZXJ2ZXI+CiAjaW5jbHVkZSA8UVRjcFNvY2tl
dD4KICNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPFFXaWRnZXQ+CiAjaW5jbHVkZSA8cWVuZGlh
bi5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
CkBAIC0yMjQsMTIgKzIyMywxMSBAQCB2b2lkIEluc3BlY3RvclNlcnZlclJlcXVlc3RIYW5kbGVy
UXQ6OnRjcFJlYWR5UmVhZCgpCiAgICAgICAgIC8vIElmIG5vIHBhdGggaXMgc3BlY2lmaWVkLCBn
ZW5lcmF0ZSBhbiBpbmRleCBwYWdlLgogICAgICAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSB8fCAo
bV9wYXRoID09IFFTdHJpbmcoUUxhdGluMUNoYXIoJy8nKSkpKSB7CiAgICAgICAgICAgICBRU3Ry
aW5nIGluZGV4SHRtbCA9IFFMYXRpbjFTdHJpbmcoIjxodG1sPjxoZWFkPjx0aXRsZT5SZW1vdGUg
V2ViIEluc3BlY3RvcjwvdGl0bGU+PC9oZWFkPjxib2R5Pjx1bD5cbiIpOwotICAgICAgICAgICAg
Zm9yIChRTWFwPGludCwgSW5zcGVjdG9yQ2xpZW50UXQqID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9zZXJ2ZXItPm1faW5zcGVjdG9yQ2xpZW50cy5iZWdpbigpOwotICAgICAgICAgICAgICAgICBp
dCAhPSBtX3NlcnZlci0+bV9pbnNwZWN0b3JDbGllbnRzLmVuZCgpOyAKLSAgICAgICAgICAgICAg
ICAgKytpdCkgeworICAgICAgICAgICAgZm9yIChRTWFwPGludCwgSW5zcGVjdG9yQ2xpZW50UXQq
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zZXJ2ZXItPm1faW5zcGVjdG9yQ2xpZW50cy5iZWdp
bigpOyBpdCAhPSBtX3NlcnZlci0+bV9pbnNwZWN0b3JDbGllbnRzLmVuZCgpOyArK2l0KSB7CisK
ICAgICAgICAgICAgICAgICBpbmRleEh0bWwuYXBwZW5kKFFTdHJpbmc6OmZyb21MYXRpbjEoIjxs
aT48YSBocmVmPVwiL3dlYmtpdC9pbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWw/cGFnZT0lMVwiPiUy
PC9saT5cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKGl0LmtleSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhpdC52YWx1ZSgpLT5tX2lu
c3BlY3RlZFdlYlBhZ2UtPm1haW5GcmFtZSgpLT51cmwoKS50b1N0cmluZygpKSk7CisgICAgICAg
ICAgICAgICAgICAgIC5hcmcoaXQua2V5KCkpCisgICAgICAgICAgICAgICAgICAgIC5hcmcoUVVy
bChpdC52YWx1ZSgpLT5tX2luc3BlY3RlZFdlYlBhZ2UtPm1haW5GcmFtZUFkYXB0ZXIoKS0+dXJs
KS50b1N0cmluZygpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbmRleEh0bWwuYXBw
ZW5kKFFMYXRpbjFTdHJpbmcoIjwvdWw+PC9ib2R5PjwvaHRtbD4iKSk7CiAgICAgICAgICAgICBy
ZXNwb25zZSA9IGluZGV4SHRtbC50b0xhdGluMSgpOwpAQCAtMzU2LDggKzM1NCw4IEBAIHZvaWQg
SW5zcGVjdG9yU2VydmVyUmVxdWVzdEhhbmRsZXJRdDo6d2ViU29ja2V0UmVhZHlSZWFkKCkKICAg
ICAgICAgCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgaWYgKG1faW5zcGVjdG9yQ2xp
ZW50KSB7Ci0gICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciA9IG1faW5zcGVjdG9yQ2xpZW50LT5tX2luc3BlY3RlZFdlYlBhZ2UtPmQtPnBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKLSAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaXNwYXRj
aE1lc3NhZ2VGcm9tRnJvbnRlbmQoUVN0cmluZzo6ZnJvbVV0ZjgocGF5bG9hZCkpOworICAgICAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IG1faW5zcGVj
dG9yQ2xpZW50LT5tX2luc3BlY3RlZFdlYlBhZ2UtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KTsKKyAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpc3BhdGNoTWVzc2FnZUZyb21G
cm9udGVuZChRU3RyaW5nOjpmcm9tVXRmOChwYXlsb2FkKSk7CiAgICAgICAgIH0KICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNl
cnZlclF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZl
clF0LmgKaW5kZXggYjBiYjBjNzlkNThjMTk1MjhmYzQ4OGNiMDk0ODViOTAyMzc4NWJhNS4uMjc1
NGI1OGQ5MDdmOTUzZmMyZDcyMDU4ZDRmYjEwODg4NThhNmI3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuaApAQCAtNDUsOCAr
NDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGxpc3RlbihxdWludDE2IHBvcnQpOwogCi0gICAg
dm9pZCByZWdpc3RlckNsaWVudChJbnNwZWN0b3JDbGllbnRRdCogY2xpZW50KTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJDbGllbnQoSW5zcGVjdG9yQ2xpZW50UXQqIGNsaWVudCk7CisgICAgdm9pZCBy
ZWdpc3RlckNsaWVudChJbnNwZWN0b3JDbGllbnRRdCopOworICAgIHZvaWQgdW5yZWdpc3RlckNs
aWVudChJbnNwZWN0b3JDbGllbnRRdCopOwogCiAgICAgdm9pZCBjbG9zZSgpOwogICAgIEluc3Bl
Y3RvckNsaWVudFF0KiBpbnNwZWN0b3JDbGllbnRGb3JQYWdlKGludCBwYWdlTnVtKTsKQEAgLTcw
LDcgKzcwLDcgQEAgY2xhc3MgSW5zcGVjdG9yU2VydmVyUmVxdWVzdEhhbmRsZXJRdCA6IHB1Ymxp
YyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogcHVibGljOgogCi0gICAgSW5zcGVjdG9yU2VydmVy
UmVxdWVzdEhhbmRsZXJRdChRVGNwU29ja2V0ICp0Y3BDb25uZWN0aW9uLCBJbnNwZWN0b3JTZXJ2
ZXJRdCAqc2VydmVyKTsKKyAgICBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxlclF0KFFUY3BT
b2NrZXQqIHRjcENvbm5lY3Rpb24sIEluc3BlY3RvclNlcnZlclF0Kik7CiAgICAgdmlydHVhbCB+
SW5zcGVjdG9yU2VydmVyUmVxdWVzdEhhbmRsZXJRdCgpOwogICAgIHZpcnR1YWwgaW50IHdlYlNv
Y2tldFNlbmQoY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7CiAgICAgdmlydHVhbCBpbnQgd2ViU29j
a2V0U2VuZChjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdC5jcHAKaW5kZXggNTZlZDBiNGNiN2NlMjY1YjZiYmNjYWEzMzhmNmNk
N2QzZjQ0NWNhMC4uMDY4NDBjNDU1Yjg4NTA5Mjk2NjE2NDRkZjNjMGM4YjllODY4MzA0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9O
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAKQEAgLTMzLDE4ICszMywxNiBAQAogI2lu
Y2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgiCiAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgog
I2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJVc2VyR2Vz
dHVyZUluZGljYXRvci5oIgotCi0jaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC03MiwxMCArNzAsNiBAQCBOb3RpZmljYXRpb25XcmFwcGVyOjpOb3RpZmljYXRp
b25XcmFwcGVyKCkKICAgICAsIG1fZGlzcGxheUV2ZW50VGltZXIodGhpcywgJk5vdGlmaWNhdGlv
bldyYXBwZXI6OnNlbmREaXNwbGF5RXZlbnQpCiB7CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMp
IHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLQotI2lmbmRlZiBRVF9OT19TWVNURU1U
UkFZSUNPTgotICAgIG1fbm90aWZpY2F0aW9uSWNvbiA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBt
X3ByZXNlbnRlciA9IG51bGxwdHI7CiAjZW5kaWYKIH0KQEAgLTIwOSw3ICsyMDMsNiBAQCB2b2lk
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90aWZpY2F0aW9uKE5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aQogI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgogICAgICAg
ICBpZiAoIWR1bXBOb3RpZmljYXRpb24pCiAgICAgICAgICAgICB3cmFwcGVyLT5tX2Nsb3NlVGlt
ZXIuc3RhcnRPbmVTaG90KG5vdGlmaWNhdGlvblRpbWVvdXQpOwotICAgICAgICAgICAgd3JhcHBl
ci0+bV9ub3RpZmljYXRpb25JY29uID0gYWRvcHRQdHIobmV3IFFTeXN0ZW1UcmF5SWNvbigpKTsK
ICNlbmRpZgogICAgIH0KIApAQCAtMjI3LDkgKzIyMCw5IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OmRpc3BsYXlOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uKiBub3RpZmlj
YXRpCiAgICAgfQogCiAjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCi0gICAgd3JhcHBlci0+
Y29ubmVjdCh3cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24uZ2V0KCksIFNJR05BTChtZXNzYWdl
Q2xpY2tlZCgpKSwgd3JhcHBlciwgU0xPVChub3RpZmljYXRpb25DbGlja2VkKCkpKTsKLSAgICB3
cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24tPnNob3coKTsKLSAgICB3cmFwcGVyLT5tX25vdGlm
aWNhdGlvbkljb24tPnNob3dNZXNzYWdlKG5vdGlmaWNhdGlvbi0+dGl0bGUoKSwgbm90aWZpY2F0
aW9uLT5ib2R5KCkpOworICAgIHdyYXBwZXItPmNvbm5lY3QobV9zeXN0ZW1UcmF5SWNvbi5kYXRh
KCksIFNJR05BTChtZXNzYWdlQ2xpY2tlZCgpKSwgd3JhcHBlciwgU0xPVChub3RpZmljYXRpb25D
bGlja2VkKCkpKTsKKyAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1fc3lzdGVtVHJheUlj
b24uZGF0YSgpLCAic2hvdyIpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV9zeXN0
ZW1UcmF5SWNvbi5kYXRhKCksICJzaG93TWVzc2FnZSIsIFFfQVJHKFFTdHJpbmcsIG5vdGlmaWNh
dGlvbi0+dGl0bGUoKSksIFFfQVJHKFFTdHJpbmcsIG5vdGlmaWNhdGlvbi0+Ym9keSgpKSk7CiAj
ZW5kaWYKIH0KIApAQCAtMzI0LDExICszMTcsMTAgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28K
ICAgICAgICAgQ2FsbGJhY2tzSW5mbyBpbmZvOwogICAgICAgICBpbmZvLm1fZnJhbWUgPSB0b0Zy
YW1lKGNvbnRleHQpOwogICAgICAgICBpbmZvLm1fY2FsbGJhY2tzLmFwcGVuZChjYik7Ci0gICAg
ICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQoY29udGV4dCwgaW5mbyk7CiAK
ICAgICAgICAgaWYgKHRvUGFnZShjb250ZXh0KSAmJiB0b0ZyYW1lKGNvbnRleHQpKSB7CiAgICAg
ICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5zZXJ0KGNvbnRleHQsIGluZm8p
OwotICAgICAgICAgICAgZW1pdCB0b1BhZ2UoY29udGV4dCktPmZlYXR1cmVQZXJtaXNzaW9uUmVx
dWVzdGVkKHRvRnJhbWUoY29udGV4dCksIFFXZWJQYWdlOjpOb3RpZmljYXRpb25zKTsKKyAgICAg
ICAgICAgIHRvUGFnZShjb250ZXh0KS0+bm90aWZpY2F0aW9uc1Blcm1pc3Npb25SZXF1ZXN0ZWQo
dG9GcmFtZShjb250ZXh0KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNDYsMTAgKzMzOCwx
MCBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQwogICAgIGlmIChpdGVyID09IG1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVdlYkZyYW1l
KiBmcmFtZSA9IGl0ZXIudmFsdWUoKS5tX2ZyYW1lOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGZy
YW1lID0gaXRlci52YWx1ZSgpLm1fZnJhbWU7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwotICAgIFFXZWJQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBRV2ViUGFnZUFk
YXB0ZXIqIHBhZ2UgPSBRV2ViUGFnZUFkYXB0ZXI6OmtpdChmcmFtZS0+ZnJhbWUtPnBhZ2UoKSk7
CiAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLmVyYXNlKGl0ZXIpOwogCiAgICAgaWYg
KCFwYWdlKQpAQCAtMzU4LDcgKzM1MCw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25DCiAgICAg
aWYgKGR1bXBOb3RpZmljYXRpb24pCiAgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJ
T04gUEVSTUlTU0lPTiBSRVFVRVNUIENBTkNFTExFRDogJXNcbiIsIFFTdHJpbmcoY29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCkpOwogCi0g
ICAgZW1pdCBwYWdlLT5mZWF0dXJlUGVybWlzc2lvblJlcXVlc3RDYW5jZWxlZChmcmFtZSwgUVdl
YlBhZ2U6Ok5vdGlmaWNhdGlvbnMpOworICAgIHBhZ2UtPm5vdGlmaWNhdGlvbnNQZXJtaXNzaW9u
UmVxdWVzdENhbmNlbGxlZChmcmFtZSk7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
Q2xpZW50UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQpAQCAtNDM2
LDEzICs0MjgsMTMgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZHVtcFNo
b3dUZXh0KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgICAgICBwcmludGYoIkRFU0tU
T1AgTk9USUZJQ0FUSU9OOiBjb250ZW50cyBhdCAlc1xuIiwgUVN0cmluZyhub3RpZmljYXRpb24t
PnVybCgpLnN0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT046JXMgaWNvbiAlcywgdGl0bGUgJXMsIHRl
eHQgJXNcbiIsCi0gICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAicnRsIiA/
ICIoUlRMKSIgOiAiIiwKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbi0+ZGlyKCkgPT0gInJ0bCIg
PyAiKFJUTCkiIDogIiIsCiAgICAgICAgICAgICBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+aWNvblVS
TCgpLnN0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgUVN0cmluZyhub3RpZmljYXRpb24t
PnRpdGxlKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLAogICAgICAgICAgICAgUVN0cmluZyhub3Rp
ZmljYXRpb24tPmJvZHkoKSkudG9VdGY4KCkuY29uc3REYXRhKCkpOwogICAgIH0KIH0KIAotUVdl
YlBhZ2UqIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojp0b1BhZ2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKK1FXZWJQYWdlQWRhcHRlciogTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OnRvUGFnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewog
ICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC00NTMsMTAgKzQ0NSwxMCBAQCBRV2ViUGFnZSogTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OnRvUGFnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ICAgIGlmICghcGFnZSB8fCAhcGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgcmV0dXJuIFFXZWJGcmFtZVByaXZhdGU6OmtpdChwYWdlLT5tYWluRnJhbWUoKSktPnBh
Z2UoKTsKKyAgICByZXR1cm4gUVdlYlBhZ2VBZGFwdGVyOjpraXQocGFnZSk7CiB9CiAKLVFXZWJG
cmFtZSogTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnRvRnJhbWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKK1FXZWJGcmFtZUFkYXB0ZXIqIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0Ojp0b0ZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTQ2NSw3ICs0NTcsNyBAQCBRV2ViRnJhbWUqIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0Ojp0b0ZyYW1lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleAog
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBRV2ViRnJhbWVQcml2YXRlOjpraXQoZG9jdW1lbnQtPmZyYW1lKCkp
OworICAgIHJldHVybiBRV2ViRnJhbWVBZGFwdGVyOjpraXQoZG9jdW1lbnQtPmZyYW1lKCkpOwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9U
SUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAppbmRleCA1ODE5YjRkODAx
M2M0MDg2ZDAxZTcyNjE2YmFmNGZlYTdkYTY4OWI3Li43ODY2OGYzNWY1NzY0YjFkOTcxYmFlODlh
Y2Y0Y2UzYjkzYmFlM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCkBAIC0zNiwx
NCArMzYsMTMgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJR
dFBsYXRmb3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLQogI2luY2x1ZGUgInF3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oIgogCiAjaW5jbHVkZSA8UU11bHRpSGFzaD4KLSNpbmNsdWRlIDxR
U3lzdGVtVHJheUljb24+CisjaW5jbHVkZSA8UVNjb3BlZFBvaW50ZXI+CiAKLWNsYXNzIFFXZWJG
cmFtZTsKLWNsYXNzIFFXZWJQYWdlOworY2xhc3MgUVdlYkZyYW1lQWRhcHRlcjsKK2NsYXNzIFFX
ZWJQYWdlQWRhcHRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSw3ICs1NCw3IEBA
IGNsYXNzIE5vdGlmaWNhdGlvbldyYXBwZXIgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJO
b3RpZmljYXRpb25EYXRhIHsKICAgICBRX09CSkVDVAogcHVibGljOgogICAgIE5vdGlmaWNhdGlv
bldyYXBwZXIoKTsKLSAgICB+Tm90aWZpY2F0aW9uV3JhcHBlcigpIHt9CisgICAgfk5vdGlmaWNh
dGlvbldyYXBwZXIoKSB7IH0KIAogICAgIHZvaWQgY2xvc2UoKTsKICAgICB2b2lkIGNsb3NlKFRp
bWVyPE5vdGlmaWNhdGlvbldyYXBwZXI+Kik7CkBAIC02OSwxNCArNjgsMTIgQEAgcHVibGljIFFf
U0xPVFM6CiAgICAgdm9pZCBub3RpZmljYXRpb25DbG9zZWQoKTsKICAgICB2b2lkIG5vdGlmaWNh
dGlvbkNsaWNrZWQoKTsKIAotcHVibGljOgotI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgot
ICAgIE93blB0cjxRU3lzdGVtVHJheUljb24+IG1fbm90aWZpY2F0aW9uSWNvbjsKLSNlbmRpZgot
Citwcml2YXRlOgogICAgIE93blB0cjxRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyPiBtX3ByZXNl
bnRlcjsKICAgICBUaW1lcjxOb3RpZmljYXRpb25XcmFwcGVyPiBtX2Nsb3NlVGltZXI7CiAgICAg
VGltZXI8Tm90aWZpY2F0aW9uV3JhcHBlcj4gbV9kaXNwbGF5RXZlbnRUaW1lcjsKKworICAgIGZy
aWVuZCBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKIH07CiAKICNpZiBFTkFC
TEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQpAQCAtMTA5
LDYgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNhdGlvbjsK
IAogICAgIHZvaWQgYWRkQ2xpZW50KCkgeyBtX2NsaWVudENvdW50Kys7IH0KKyNpZm5kZWYgUVRf
Tk9fU1lTVEVNVFJBWUlDT04KKyAgICBib29sIGhhc1N5c3RlbVRyYXlJY29uKCkgY29uc3QgeyBy
ZXR1cm4gIW1fc3lzdGVtVHJheUljb24uaXNOdWxsKCk7IH0KKyAgICB2b2lkIHNldFN5c3RlbVRy
YXlJY29uKFFPYmplY3QqIGljb24pIHsgbV9zeXN0ZW1UcmF5SWNvbi5yZXNldChpY29uKTsgfQor
I2VuZGlmCiAgICAgdm9pZCByZW1vdmVDbGllbnQoKTsKICAgICBzdGF0aWMgTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogCkBAIC0xMjQsMTIg
KzEyNSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGV0YWNoTm90aWZpY2F0aW9uKE5vdGlmaWNh
dGlvbiopOwogICAgIHZvaWQgZHVtcFJlcGxhY2VkSWRUZXh0KE5vdGlmaWNhdGlvbiopOwogICAg
IHZvaWQgZHVtcFNob3dUZXh0KE5vdGlmaWNhdGlvbiopOwotICAgIFFXZWJQYWdlKiB0b1BhZ2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIFFXZWJGcmFtZSogdG9GcmFtZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CisgICAgUVdlYlBhZ2VBZGFwdGVyKiB0b1BhZ2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworICAgIFFXZWJGcmFtZUFkYXB0ZXIqIHRvRnJhbWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOwogCiAgICAgaW50IG1fY2xpZW50Q291bnQ7CiAgICAgc3RydWN0IENh
bGxiYWNrc0luZm8gewotICAgICAgICBRV2ViRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFFXZWJG
cmFtZUFkYXB0ZXIqIG1fZnJhbWU7CiAgICAgICAgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+
ID4gbV9jYWxsYmFja3M7CiAgICAgfTsKICAgICBRSGFzaDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgIENhbGxiYWNrc0luZm8gPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHM7CkBAIC0xMzcs
MTAgKzEzOCwxMyBAQCBwcml2YXRlOgogCiAgICAgTm90aWZpY2F0aW9uc1F1ZXVlIG1fbm90aWZp
Y2F0aW9uczsKICAgICBRdFBsYXRmb3JtUGx1Z2luIG1fcGxhdGZvcm1QbHVnaW47CisjaWZuZGVm
IFFUX05PX1NZU1RFTVRSQVlJQ09OCisgICAgUVNjb3BlZFBvaW50ZXI8UU9iamVjdD4gbV9zeXN0
ZW1UcmF5SWNvbjsKKyNlbmRpZgogfTsKIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKE5PVElG
SUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKIAogfQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggMTQxZjk4ZTMw
ODJjMjEyN2M2Zjk0MWUxZDkyMGNlNzdlMDkyOWEwNS4uOTJhYjg0YjY0YTVlODQ0YmRlOTg5ZTBm
M2Y0MWMxMDVlMmJiNDE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUGFnZUNsaWVudFF0LmNwcApAQCAtMzUsOCArMzUsNyBAQAogI2lmIFVTRSgzRF9HUkFQSElD
UykKICNpbmNsdWRlIDxRV2luZG93PgogCi1zdGF0aWMgdm9pZCBjcmVhdGVQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNERnJvbVdpZGdldChRV2lkZ2V0KiB3aWRnZXQsIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLCBRT2Jq
ZWN0Kiogc3VyZmFjZU93bmVyKQorc3RhdGljIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzREZyb21XaWRnZXQoUVdpZGdldCogd2lkZ2V0LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNlLCBRT2JqZWN0
Kiogc3VyZmFjZU93bmVyKQogewogI2lmZGVmIFFUX09QRU5HTF9MSUIKICAgICAqY29udGV4dCA9
IDA7CkBAIC03Myw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0RGcm9tV2lkZ2V0KFFXaWRnZXQqIHdpZGdldCwgUGxhdGZvcm1HCiAKIFFXaW5kb3cq
IFFXZWJQYWdlQ2xpZW50Ojpvd25lcldpbmRvdygpIGNvbnN0CiB7Ci0gICAgUVdpZGdldCogd2lk
Z2V0ID0gb3duZXJXaWRnZXQoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8
UVdpZGdldCo+KG93bmVyV2lkZ2V0KCkpOwogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1
cm4gMDsKICAgICBpZiAoUVdpbmRvdyAqd2luZG93ID0gd2lkZ2V0LT53aW5kb3dIYW5kbGUoKSkK
QEAgLTIwNCw3ICsyMDMsNyBAQCBpbnQgUGFnZUNsaWVudFFXaWRnZXQ6OnNjcmVlbk51bWJlcigp
IGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVFXaWRnZXQqIFBhZ2VDbGllbnRRV2lkZ2V0Ojpv
d25lcldpZGdldCgpIGNvbnN0CitRT2JqZWN0KiBQYWdlQ2xpZW50UVdpZGdldDo6b3duZXJXaWRn
ZXQoKSBjb25zdAogewogICAgIHJldHVybiB2aWV3OwogfQpAQCAtMjM4LDkgKzIzNyw3IEBAIHZv
aWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFdpZGdldFZpc2libGUoV2lkZ2V0KiB3aWRnZXQsIGJv
b2wgdmlzaWJsZSkKIH0KIAogI2lmIFVTRSgzRF9HUkFQSElDUykKLXZvaWQgUGFnZUNsaWVudFFX
aWRnZXQ6OmNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCogc3VyZmFjZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU9i
amVjdCoqIHN1cmZhY2VPd25lcikKK3ZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OmNyZWF0ZVBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
UGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCogc3VyZmFjZSwgUU9iamVjdCoqIHN1cmZhY2VPd25l
cikKIHsKICAgICBjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJvbVdpZGdldCh2aWV3
LCBjb250ZXh0LCBzdXJmYWNlLCBzdXJmYWNlT3duZXIpOwogfQpAQCAtMzYzLDcgKzM2MCw3IEBA
IGludCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIoKSBjb25zdAogICAg
IHJldHVybiAwOwogfQogCi1RV2lkZ2V0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25l
cldpZGdldCgpIGNvbnN0CitRT2JqZWN0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25l
cldpZGdldCgpIGNvbnN0CiB7CiAgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZpZXct
PnNjZW5lKCkpIHsKICAgICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0g
c2NlbmUtPnZpZXdzKCk7CkBAIC00MjgsMTEgKzQyNSw5IEBAIFFSZWN0RiBQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0Ojp3aW5kb3dSZWN0KCkgY29uc3QKICNlbmRpZiAvLyBRVF9OT19HUkFQSElD
U1ZJRVcKIAogI2lmIFVTRSgzRF9HUkFQSElDUykKLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6Y3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlM0QqIHN1cmZh
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUU9iamVjdCoqIHN1cmZhY2VPd25lcikKK3ZvaWQgUGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6Y3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKiBzdXJmYWNl
LCBRT2JqZWN0Kiogc3VyZmFjZU93bmVyKQogewotICAgIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0RGcm9tV2lkZ2V0KG93bmVyV2lkZ2V0KCksIGNvbnRleHQsIHN1cmZhY2UsIHN1cmZh
Y2VPd25lcik7CisgICAgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzREZyb21XaWRnZXQo
cW9iamVjdF9jYXN0PFFXaWRnZXQqPihvd25lcldpZGdldCgpKSwgY29udGV4dCwgc3VyZmFjZSwg
c3VyZmFjZU93bmVyKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuaAppbmRleCBlNmI5ZTE2OTRkNDZhNDJjZTMyMjQ3OTI4ZDY5
ODlkZGJlNTk4N2VlLi43MmRjYTQyYzE1YmVhYzIwMzhiODBjMTk2YzAwN2JkZTcxODMyZjI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAg
LTMxLDE1ICszMSwxNCBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicXdl
YnBhZ2UuaCIKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCisjaW5jbHVkZSA8U2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDxxZ3JhcGhpY3NzY2VuZS5oPgogI2luY2x1ZGUgPHFncmFwaGljc3ZpZXcuaD4K
ICNpbmNsdWRlIDxxZ3JhcGhpY3N3aWRnZXQuaD4KKyNpbmNsdWRlIDxxbWV0YW9iamVjdC5oPgog
I2luY2x1ZGUgPHFzY3JvbGxiYXIuaD4KICNpbmNsdWRlIDxxc3R5bGVvcHRpb24uaD4KICNpbmNs
dWRlIDxxd2lkZ2V0Lmg+Ci0jaW5jbHVkZSA8UXRDb3JlL3FtZXRhb2JqZWN0Lmg+Ci0KLSNpbmNs
dWRlIDxTZXR0aW5ncy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc1LDE4ICs3NCwx
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGludCBkeCwgaW50IGR5LCBj
b25zdCBRUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QmIGRpcnR5
UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVuYWJs
ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sKTsKICAgICB2
aXJ0dWFsIGJvb2wgaW5wdXRNZXRob2RFbmFibGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHNldElucHV0TWV0aG9kSGludHMoUXQ6OklucHV0TWV0aG9kSGludHMgaGludHMpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZEhpbnRzKFF0OjpJbnB1dE1ldGhvZEhpbnRzKTsKIAog
I2lmbmRlZiBRVF9OT19DVVJTT1IKICAgICB2aXJ0dWFsIFFDdXJzb3IgY3Vyc29yKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBjdXJzb3IpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJzb3IoY29uc3QgUUN1cnNvciYpOwogI2VuZGlmCiAK
ICAgICB2aXJ0dWFsIFFQYWxldHRlIHBhbGV0dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBz
Y3JlZW5OdW1iZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFFXaWRnZXQqIG93bmVyV2lkZ2V0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBRT2JqZWN0KiBvd25lcldpZGdldCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgUVJlY3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgUU9iamVjdCogcGx1Z2luUGFyZW50KCkgY29uc3Q7CkBAIC0xMDAsOSArOTksNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFdpZGdldFZpc2libGUoV2lkZ2V0KiwgYm9v
bCB2aXNpYmxlKTsKIAogI2lmIFVTRSgzRF9HUkFQSElDUykKLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9y
bUdyYXBoaWNzU3VyZmFjZTNEKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBRT2JqZWN0KiopOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybUdy
YXBoaWNzU3VyZmFjZTNEKiwgUU9iamVjdCoqKTsKICNlbmRpZgogCiAgICAgUVdpZGdldCogdmll
dzsKQEAgLTEzMiw5ICsxMjksOSBAQCBwdWJsaWM6CiBjbGFzcyBRR3JhcGhpY3NJdGVtT3Zlcmxh
eSA6IHB1YmxpYyBRR3JhcGhpY3NPYmplY3QgewogICAgIHB1YmxpYzoKICAgICBRR3JhcGhpY3NJ
dGVtT3ZlcmxheShRR3JhcGhpY3NXaWRnZXQqIHZpZXcsIFFXZWJQYWdlKiBwKQotICAgICAgICAg
ICAgOlFHcmFwaGljc09iamVjdCh2aWV3KQotICAgICAgICAgICAgLCBxKHZpZXcpCi0gICAgICAg
ICAgICAsIHBhZ2UocCkKKyAgICAgICAgOiBRR3JhcGhpY3NPYmplY3QodmlldykKKyAgICAgICAg
LCBxKHZpZXcpCisgICAgICAgICwgcGFnZShwKQogICAgIHsKICAgICAgICAgc2V0UG9zKDAsIDAp
OwogICAgICAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9w
dGlvbiwgdHJ1ZSk7CkBAIC0xNzIsNyArMTY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAg
ICwgb3ZlcmxheSgwKQogICAgIHsKLSAgICAgICBRX0FTU0VSVCh2aWV3KTsKKyAgICAgICAgUV9B
U1NFUlQodmlldyk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAgICAv
LyB0aGUgb3ZlcmxheSBhbmQgc3RheXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZgogICAgICAg
ICAvLyB0aGlzIFFHcmFwaGljc1dlYlZpZXcgYXMgdGhlIHNjcm9sbGJhcnMgYXJlIG5lZWRlZCB3
aGVuIHRoZXJlJ3Mgbm8gY29tcG9zaXRpbmcKQEAgLTE4NiwxOCArMTgzLDE4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0Jik7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShjb25zdCBRUmVjdCYgZGlydHlSZWN0KTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgYm9vbCBp
bnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRo
b2RIaW50cyhRdDo6SW5wdXRNZXRob2RIaW50cyBoaW50cyk7CisgICAgdmlydHVhbCB2b2lkIHNl
dElucHV0TWV0aG9kSGludHMoUXQ6OklucHV0TWV0aG9kSGludHMpOwogCiAjaWZuZGVmIFFUX05P
X0NVUlNPUgogICAgIHZpcnR1YWwgUUN1cnNvciBjdXJzb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImIGN1cnNvcik7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBRQ3Vyc29yJik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwg
UVBhbGV0dGUgcGFsZXR0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJlcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgUVdpZGdldCogb3duZXJXaWRnZXQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFFPYmplY3QqIG93bmVyV2lkZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBRUmVjdCBn
ZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdldCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBRT2Jq
ZWN0KiBwbHVnaW5QYXJlbnQoKSBjb25zdDsKQEAgLTIwOSw5ICsyMDYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNldFdpZGdldFZpc2libGUoV2lkZ2V0KiwgYm9vbCk7CiAKICNpZiBV
U0UoM0RfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU9iamVj
dCoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCosIFFP
YmplY3QqKik7CiAjZW5kaWYKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1F0LmNwcAppbmRleCBjMzFkOWIwMDc1MDc3ZDkwMTY5YjY3Njc5MTRhZGFkMjlhZjZhZTFjLi41
ZDllNzU1ZDAyZjE1OWEzZmMzYjZlZWI1Mzc1ZmYyYmJjMDE5NGUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNw
cApAQCAtMzIsMTYgKzMyLDE3IEBACiAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJD
aHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQWRhcHRlci5oIgorI2luY2x1ZGUg
InF3ZWJoaXN0b3J5aW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIK
KwogI2luY2x1ZGUgPEludFNpemUuaD4KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgPE5vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8UGFnZS5oPgogI2luY2x1ZGUgPFBh
Z2VHcm91cC5oPgogI2luY2x1ZGUgPFBsdWdpbkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8UUNvcmVB
cHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRTG9jYWxlPgotI2luY2x1ZGUgPHF3ZWJoaXN0b3J5aW50
ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8cXdlYnBhZ2UuaD4KLSNpbmNsdWRlIDxxd2VicGx1Z2luZmFj
dG9yeS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwpAQCAtOTksOSArMTAwLDkgQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6cmVm
cmVzaFBsdWdpbnMoKQogCiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZv
KGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiYg
b3V0UGx1Z2lucykKIHsKLSAgICBRV2ViUGFnZSogcVBhZ2UgPSBzdGF0aWNfY2FzdDxDaHJvbWVD
bGllbnRRdCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPm1fd2ViUGFnZTsKKyAgICBRV2Vi
UGFnZUFkYXB0ZXIqIHFQYWdlID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50UXQqPihwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CiAgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZh
Y3Rvcnk7Ci0gICAgaWYgKHFQYWdlICYmIChmYWN0b3J5ID0gcVBhZ2UtPnBsdWdpbkZhY3Rvcnko
KSkpIHsKKyAgICBpZiAocVBhZ2UgJiYgKGZhY3RvcnkgPSBxUGFnZS0+cGx1Z2luRmFjdG9yeSkp
IHsKIAogICAgICAgICBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBxcGx1Z2lucyA9
IGZhY3RvcnktPnBsdWdpbnMoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxcGx1Z2lu
cy5jb3VudCgpOyArK2kpIHsKQEAgLTExNyw3ICsxMTgsNyBAQCB2b2lkIFBsYXRmb3JtU3RyYXRl
Z2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxX
ZWJDbwogICAgICAgICAgICAgICAgIG1pbWVJbmZvLnR5cGUgPSBtaW1lVHlwZS5uYW1lOwogICAg
ICAgICAgICAgICAgIG1pbWVJbmZvLmRlc2MgPSBtaW1lVHlwZS5kZXNjcmlwdGlvbjsKICAgICAg
ICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmNv
dW50KCk7ICsraykKLSAgICAgICAgICAgICAgICAgIG1pbWVJbmZvLmV4dGVuc2lvbnMuYXBwZW5k
KG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmF0KGspKTsKKyAgICAgICAgICAgICAgICAgICAgbWlt
ZUluZm8uZXh0ZW5zaW9ucy5hcHBlbmQobWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXQoaykpOwog
CiAgICAgICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUluZm8pOwogICAgICAgICAg
ICAgfQpAQCAtMTMwLDcgKzEzMSw3IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldFBs
dWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9yPFdlYkNvCiAKICAgICBv
dXRQbHVnaW5zLnJlc2l6ZShwbHVnaW5zLnNpemUoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUGx1Z2luSW5mbyBpbmZvOwogICAg
ICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAppbmRleCAyOWU0NjI0ZWJk
M2UyMTRjNWZmYTc2ZDYwZjY0MmY3ZjYwZGI4YTE0Li43MmQwODNmMzQ1YzI2YjY1MDQ1OWUzNDQ0
MDdmZDE4NjMyZmY3OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudVF0LmNwcApAQCAtMjksMTIgKzI5LDExIEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGll
bnQuaCIKLQogI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogCiBjbGFzcyBTZWxl
Y3REYXRhIDogcHVibGljIFFXZWJTZWxlY3REYXRhIHsKIHB1YmxpYzoKLSAgICBTZWxlY3REYXRh
KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudComIGRhdGEpIDogZChkYXRhKSB7fQorICAgIFNlbGVj
dERhdGEoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiYgZGF0YSkgOiBkKGRhdGEpIHsgfQogCiAg
ICAgdmlydHVhbCBJdGVtVHlwZSBpdGVtVHlwZShpbnQpIGNvbnN0OwogICAgIHZpcnR1YWwgUVN0
cmluZyBpdGVtVGV4dChpbnQgaWR4KSBjb25zdCB7IHJldHVybiBRU3RyaW5nKGQgPyBkLT5pdGVt
VGV4dChpZHgpIDogIiIpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MTM3OTMzYTBmYWFlNzRkNTI3ZTE5NzczMzhkZTM2NWEyMzc1NWRmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5J
bXBsLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lh
IFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbC5oIgorCisjaW5jbHVkZSA8UUdy
YXBoaWNzU2NlbmU+CisjaW5jbHVkZSA8UUdyYXBoaWNzV2lkZ2V0PgorCisjaWZuZGVmIFFUX05P
X0dSQVBISUNTVklFVworCitRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjp+UUdyYXBoaWNzV2lk
Z2V0UGx1Z2luSW1wbCgpCit7CisgICAgbV9ncmFwaGljc1dpZGdldC0+ZGVsZXRlTGF0ZXIoKTsK
K30KKwordm9pZCBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsOjp1cGRhdGUoY29uc3QgUVJlY3Qg
JnJlY3QpCit7CisgICAgUUdyYXBoaWNzU2NlbmUqIHNjZW5lID0gbV9ncmFwaGljc1dpZGdldC0+
c2NlbmUoKTsKKyAgICBpZiAoc2NlbmUpCisgICAgICAgIHNjZW5lLT51cGRhdGUocmVjdCk7Cit9
CisKK3ZvaWQgUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbDo6c2V0R2VvbWV0cnlBbmRDbGlwKGNv
bnN0IFFSZWN0ICZnZW9tZXRyeSwgY29uc3QgUVJlY3QgJiwgYm9vbCkKK3sKKyAgICBtX2dyYXBo
aWNzV2lkZ2V0LT5zZXRHZW9tZXRyeShnZW9tZXRyeSk7CisgICAgLy8gRklYTUU6IE1ha2UgdGhl
IGNvZGUgaGFuZGxlIGNsaXBwaW5nIG9mIGdyYXBoaWNzIHdpZGdldHMuCit9CisKK3ZvaWQgUUdy
YXBoaWNzV2lkZ2V0UGx1Z2luSW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAg
bV9ncmFwaGljc1dpZGdldC0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKK30KKwordm9pZCBRR3JhcGhp
Y3NXaWRnZXRQbHVnaW5JbXBsOjpzZXRXaWRnZXRQYXJlbnQoUU9iamVjdCogcGFyZW50KQorewor
ICAgIFFHcmFwaGljc09iamVjdCogcGFyZW50SXRlbSA9IHFvYmplY3RfY2FzdDxRR3JhcGhpY3NP
YmplY3QqPihwYXJlbnQpOworICAgIGlmIChwYXJlbnRJdGVtKQorICAgICAgICBtX2dyYXBoaWNz
V2lkZ2V0LT5zZXRQYXJlbnRJdGVtKHBhcmVudEl0ZW0pOworfQorCitRT2JqZWN0KiBRR3JhcGhp
Y3NXaWRnZXRQbHVnaW5JbXBsOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2dyYXBo
aWNzV2lkZ2V0OworfQorCisjaW5jbHVkZSAibW9jX1FHcmFwaGljc1dpZGdldFBsdWdpbkltcGwu
Y3BwIgorCisjZW5kaWYgLy8gIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5J
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FHcmFwaGljc1dpZGdldFBs
dWdpbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Zjc1ODIyNmM0ZjgwZjNiZjQwYTU1ZGZiNjk5YzVlODRm
YmE5MjNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KyNpZm5kZWYgUUdyYXBoaWNzV2lkZ2V0UGx1Z2luSW1wbF9oCisjZGVmaW5lIFFHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGxfaAorCisjaWZuZGVmIFFUX05PX0dSQVBISUNTVklFVworCisjaW5jbHVk
ZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgiCisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3Mg
UUdyYXBoaWNzV2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBRR3JhcGhpY3NXaWRn
ZXRQbHVnaW5JbXBsIDogcHVibGljIFF0UGx1Z2luV2lkZ2V0QWRhcHRlciB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBRR3JhcGhpY3NXaWRnZXRQbHVnaW5JbXBsKFFHcmFwaGljc1dpZGdl
dCAqdykgOiBtX2dyYXBoaWNzV2lkZ2V0KHcpIHsgfQorICAgIHZpcnR1YWwgflFHcmFwaGljc1dp
ZGdldFBsdWdpbkltcGwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0IFFSZWN0ICYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeUFuZENsaXAoY29uc3QgUVJl
Y3QmLCBjb25zdCBRUmVjdCYsIGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFFTdHJp
bmcmKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0UGFyZW50KFFPYmpl
Y3QqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGhhbmRsZSgpIGNvbnN0IE9WRVJS
SURFOworcHJpdmF0ZToKKyAgICBRR3JhcGhpY3NXaWRnZXQgKm1fZ3JhcGhpY3NXaWRnZXQ7Cit9
OworI2VuZGlmIC8vICFkZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKKworI2VuZGlmIC8vIFFH
cmFwaGljc1dpZGdldFBsdWdpbkltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg2NDEzY2YwNWRh
OGUyODAyYzUxMzIyZWY0YmUwN2RkNzBhMDFlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5jcHAKQEAgLTAsMCArMSwy
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRV2ViRnJh
bWVBZGFwdGVyLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50UXQuaCIKKyNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKKyNpZiBFTkFCTEUoR0VT
VFVSRV9FVkVOVFMpCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKKyNpbmNsdWRl
ICJXZWJFdmVudENvbnZlcnNpb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8UUZpbGVJbmZvPgor
I2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K3N0YXRpYyBpbmxpbmUgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVMb2FkQ29udHJv
bFRvQ2FjaGVQb2xpY3kodWludCBjYWNoZUxvYWRDb250cm9sKQoreworICAgIHN3aXRjaCAoY2Fj
aGVMb2FkQ29udHJvbCkgeworICAgIGNhc2UgUU5ldHdvcmtSZXF1ZXN0OjpBbHdheXNOZXR3b3Jr
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7CisgICAg
Y2FzZSBRTmV0d29ya1JlcXVlc3Q6OlByZWZlckNhY2hlOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ7CisgICAgY2FzZSBRTmV0d29ya1JlcXVlc3Q6OkFs
d2F5c0NhY2hlOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRG9udExv
YWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBXZWJD
b3JlOjpVc2VQcm90b2NvbENhY2hlUG9saWN5OworfQorCitRV2ViRnJhbWVEYXRhOjpRV2ViRnJh
bWVEYXRhKFdlYkNvcmU6OlBhZ2UqIHBhcmVudFBhZ2UsIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRG
cmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckZyYW1lRWxlbWVudCwg
Y29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSkKKyAgICA6IG5hbWUoZnJhbWVOYW1lKQorICAg
ICwgb3duZXJFbGVtZW50KG93bmVyRnJhbWVFbGVtZW50KQorICAgICwgcGFnZShwYXJlbnRQYWdl
KQorICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCisgICAgLCBtYXJnaW5XaWR0aCgwKQorICAg
ICwgbWFyZ2luSGVpZ2h0KDApCit7CisgICAgZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcgRnJhbWVM
b2FkZXJDbGllbnRRdCgpOworICAgIGZyYW1lID0gRnJhbWU6OmNyZWF0ZShwYWdlLCBvd25lckVs
ZW1lbnQsIGZyYW1lTG9hZGVyQ2xpZW50KTsKKworICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlIGJl
bG93IHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCBvdmVyIGludG8gV2ViQ29yZQorICAgIGZyYW1l
LT50cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgaWYgKHBhcmVudEZyYW1lKQorICAgICAgICBw
YXJlbnRGcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChmcmFtZSk7Cit9CisKK1FXZWJGcmFtZUFk
YXB0ZXI6OlFXZWJGcmFtZUFkYXB0ZXIoKQorICAgIDogcGFnZUFkYXB0ZXIoMCkKKyAgICAsIGFs
bG93c1Njcm9sbGluZyh0cnVlKQorICAgICwgbWFyZ2luV2lkdGgoLTEpCisgICAgLCBtYXJnaW5I
ZWlnaHQoLTEpCisgICAgLCBmcmFtZSgwKQorICAgICwgZnJhbWVMb2FkZXJDbGllbnQoMCkKK3sK
K30KKworUVdlYkZyYW1lQWRhcHRlcjo6flFXZWJGcmFtZUFkYXB0ZXIoKQoreworICAgIGlmIChm
cmFtZUxvYWRlckNsaWVudCkKKyAgICAgICAgZnJhbWVMb2FkZXJDbGllbnQtPm1fd2ViRnJhbWUg
PSAwOworfQorCit2b2lkIFFXZWJGcmFtZUFkYXB0ZXI6OmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1
ZXN0JiByZXEsIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJhdGlvbiwgY29u
c3QgUUJ5dGVBcnJheSYgYm9keSkKK3sKKyAgICBpZiAoZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkp
CisgICAgICAgIHBhZ2VBZGFwdGVyLT5pbnNpZGVPcGVuQ2FsbCA9IHRydWU7CisKKyAgICBRVXJs
IHVybCA9IGVuc3VyZUFic29sdXRlVXJsKHJlcS51cmwoKSk7CisKKyAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOworCisgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAg
ICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6SGVhZE9wZXJhdGlvbjoKKyAgICAgICAgcmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJIRUFEIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb246CisgICAgICAgIHJlcXVlc3Quc2V0SFRU
UE1ldGhvZCgiR0VUIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyOjpQdXRPcGVyYXRpb246CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUFVU
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQb3N0
T3BlcmF0aW9uOgorICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkRlbGV0ZU9wZXJhdGlv
bjoKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJERUxFVEUiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkN1c3RvbU9wZXJhdGlvbjoKKyAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKHJlcS5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0
OjpDdXN0b21WZXJiQXR0cmlidXRlKS50b0J5dGVBcnJheSgpLmNvbnN0RGF0YSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRp
b246CisgICAgICAgIC8vIGVoPworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBRVmFyaWFu
dCBjYWNoZUxvYWQgPSByZXEuYXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6Q2FjaGVMb2FkQ29u
dHJvbEF0dHJpYnV0ZSk7CisgICAgaWYgKGNhY2hlTG9hZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
Ym9vbCBvazsKKyAgICAgICAgdWludCBjYWNoZUxvYWRWYWx1ZSA9IGNhY2hlTG9hZC50b1VJbnQo
Jm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGlj
eShjYWNoZUxvYWRDb250cm9sVG9DYWNoZVBvbGljeShjYWNoZUxvYWRWYWx1ZSkpOworICAgIH0K
KworICAgIFFMaXN0PFFCeXRlQXJyYXk+IGh0dHBIZWFkZXJzID0gcmVxLnJhd0hlYWRlckxpc3Qo
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGh0dHBIZWFkZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IFFCeXRlQXJyYXkgJmhlYWRlck5hbWUgPSBodHRwSGVhZGVycy5hdChpKTsK
KyAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGQoUVN0cmluZzo6ZnJvbUxhdGluMSho
ZWFkZXJOYW1lKSwgUVN0cmluZzo6ZnJvbUxhdGluMShyZXEucmF3SGVhZGVyKGhlYWRlck5hbWUp
KSk7CisgICAgfQorCisgICAgaWYgKCFib2R5LmlzRW1wdHkoKSkKKyAgICAgICAgcmVxdWVzdC5z
ZXRIVFRQQm9keShXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKGJvZHkuY29uc3REYXRhKCksIGJv
ZHkuc2l6ZSgpKSk7CisKKyAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgZmFsc2Up
OworCisgICAgaWYgKGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQorICAgICAgICBwYWdlQWRhcHRl
ci0+aW5zaWRlT3BlbkNhbGwgPSBmYWxzZTsKK30KKworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK3ZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KFFHZXN0dXJlRXZl
bnRGYWNhZGUqIGdlc3R1cmVFdmVudCkKK3sKKyAgICBBU1NFUlQoaGFzVmlldygpKTsKKyAgICBz
d2l0Y2ggKGdlc3R1cmVFdmVudC0+dHlwZSkgeworICAgIGNhc2UgUXQ6OlRhcEdlc3R1cmU6Cisg
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnZlcnRH
ZXN0dXJlKGdlc3R1cmVFdmVudCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0OjpUYXBB
bmRIb2xkR2VzdHVyZToKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4
dE1lbnVFdmVudEZvckdlc3R1cmUoY29udmVydEdlc3R1cmUoZ2VzdHVyZUV2ZW50KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKyNlbmRpZgorCitXZWJDb3JlOjpJbnRTaXplIFFXZWJGcmFtZUFkYXB0ZXI6OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc1ZpZXcoKSkKKyAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7
Cit9CisKK0ludFJlY3QgUVdlYkZyYW1lQWRhcHRlcjo6ZnJhbWVSZWN0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIWhhc1ZpZXcoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4g
ZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCk7Cit9CisKK3ZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6
aW5pdChRV2ViUGFnZUFkYXB0ZXIqIHBhZ2VBZGFwdGVyKQoreworICAgIFFXZWJGcmFtZURhdGEg
ZnJhbWVEYXRhKHBhZ2VBZGFwdGVyLT5wYWdlKTsKKyAgICBpbml0KHBhZ2VBZGFwdGVyLCAmZnJh
bWVEYXRhKTsKK30KKwordm9pZCBRV2ViRnJhbWVBZGFwdGVyOjppbml0KFFXZWJQYWdlQWRhcHRl
ciogcGFnZUFkYXB0ZXIsIFFXZWJGcmFtZURhdGEqIGZyYW1lRGF0YSkKK3sKKyAgICB0aGlzLT5w
YWdlQWRhcHRlciA9IHBhZ2VBZGFwdGVyOworICAgIGFsbG93c1Njcm9sbGluZyA9IGZyYW1lRGF0
YS0+YWxsb3dzU2Nyb2xsaW5nOworICAgIG1hcmdpbldpZHRoID0gZnJhbWVEYXRhLT5tYXJnaW5X
aWR0aDsKKyAgICBtYXJnaW5IZWlnaHQgPSBmcmFtZURhdGEtPm1hcmdpbkhlaWdodDsKKyAgICBm
cmFtZSA9IGZyYW1lRGF0YS0+ZnJhbWUuZ2V0KCk7CisgICAgZnJhbWVMb2FkZXJDbGllbnQgPSBm
cmFtZURhdGEtPmZyYW1lTG9hZGVyQ2xpZW50OworICAgIGZyYW1lTG9hZGVyQ2xpZW50LT5zZXRG
cmFtZSh0aGlzLCBmcmFtZSk7CisKKyAgICBmcmFtZS0+aW5pdCgpOworfQorCitRV2ViRnJhbWVB
ZGFwdGVyKiBRV2ViRnJhbWVBZGFwdGVyOjpraXQoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKSktPndlYkZyYW1lKCk7Cit9CisKK1FVcmwgUVdlYkZyYW1lQWRhcHRlcjo6ZW5z
dXJlQWJzb2x1dGVVcmwoY29uc3QgUVVybCYgdXJsKQoreworICAgIGlmICghdXJsLmlzVmFsaWQo
KSB8fCAhdXJsLmlzUmVsYXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIHVybDsKKworICAgIC8vIFRo
aXMgY29udGFpbnMgdGhlIFVSTCB3aXRoIGFic29sdXRlIHBhdGggYnV0IHdpdGhvdXQKKyAgICAv
LyB0aGUgcXVlcnkgYW5kIHRoZSBmcmFnbWVudCBwYXJ0LgorICAgIFFVcmwgYmFzZVVybCA9IFFV
cmw6OmZyb21Mb2NhbEZpbGUoUUZpbGVJbmZvKHVybC50b0xvY2FsRmlsZSgpKS5hYnNvbHV0ZUZp
bGVQYXRoKCkpOworCisgICAgLy8gVGhlIHBhdGggaXMgcmVtb3ZlZCBzbyB0aGUgcXVlcnkgYW5k
IHRoZSBmcmFnbWVudCBwYXJ0cyBhcmUgdGhlcmUuCisgICAgUVN0cmluZyBwYXRoUmVtb3ZlZCA9
IHVybC50b1N0cmluZyhRVXJsOjpSZW1vdmVQYXRoKTsKKyAgICBRVXJsIHRvUmVzb2x2ZShwYXRo
UmVtb3ZlZCk7CisKKyAgICByZXR1cm4gYmFzZVVybC5yZXNvbHZlZCh0b1Jlc29sdmUpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFw
dGVyLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xN2M0MWQ1MzkzNWVhYmM0MjE5M2JjMWZiNzQyODVmYTE0NjBiMGNjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJh
bWVBZGFwdGVyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
RGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFFXZWJGcmFt
ZUFkYXB0ZXJfaAorI2RlZmluZSBRV2ViRnJhbWVBZGFwdGVyX2gKKworI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUV2ZW50LmgiCisKKyNpbmNsdWRl
IDxGcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8SW50U2l6ZS5o
PgorI2luY2x1ZGUgPEtVUkwuaD4KKworI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4K
KyNpbmNsdWRlIDxRU2l6ZT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWU7Cit9
CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVBvaW50OworUVRfRU5EX05BTUVTUEFDRQor
CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUUdlc3R1cmVFdmVudEZhY2FkZTsK
KyNlbmRpZgorY2xhc3MgUVdlYkZyYW1lOworY2xhc3MgUVdlYlBhZ2VBZGFwdGVyOworCitjbGFz
cyBRV2ViRnJhbWVEYXRhIHsKK3B1YmxpYzoKKyAgICBRV2ViRnJhbWVEYXRhKFdlYkNvcmU6OlBh
Z2UqLCBXZWJDb3JlOjpGcmFtZSogcGFyZW50RnJhbWUgPSAwLCBXZWJDb3JlOjpIVE1MRnJhbWVP
d25lckVsZW1lbnQqID0gMCwgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSA9IFdURjo6U3Ry
aW5nKCkpOworCisgICAgV1RGOjpTdHJpbmcgbmFtZTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudDsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZnJhbWU7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdCogZnJhbWVMb2FkZXJDbGllbnQ7CisKKyAgICBXVEY6OlN0cmluZyByZWZlcnJlcjsK
KyAgICBib29sIGFsbG93c1Njcm9sbGluZzsKKyAgICBpbnQgbWFyZ2luV2lkdGg7CisgICAgaW50
IG1hcmdpbkhlaWdodDsKK307CisKK2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBRVXJsIGVuc3VyZUFic29sdXRlVXJsKGNvbnN0IFFVcmwmKTsKKworICAgIFFX
ZWJGcmFtZUFkYXB0ZXIoKTsKKyAgICB2aXJ0dWFsIH5RV2ViRnJhbWVBZGFwdGVyKCk7CisKKyAg
ICB2aXJ0dWFsIFFXZWJGcmFtZSogYXBpSGFuZGxlKCkgPSAwOworICAgIHZpcnR1YWwgUU9iamVj
dCogaGFuZGxlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVEaWRDaGFuZ2Uo
Y29uc3QgUVNpemUmKSA9IDA7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsQmFyUG9saWN5KFF0OjpP
cmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0VXJsQ2hhbmdlZCgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVQcm9ncmVzc0ZpbmlzaGVkKFFQb2ludCopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW1pdEluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVt
aXRJY29uQ2hhbmdlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1pdExvYWRTdGFydGVkKGJv
b2wgb3JpZ2luYXRpbmdMb2FkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVtaXRMb2FkRmluaXNo
ZWQoYm9vbCBvcmlnaW5hdGluZ0xvYWQsIGJvb2wgb2spID0gMDsKKyAgICB2aXJ0dWFsIFFXZWJG
cmFtZUFkYXB0ZXIqIGNyZWF0ZUNoaWxkRnJhbWUoUVdlYkZyYW1lRGF0YSopID0gMDsKKworICAg
IHZvaWQgbG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRTmV0d29ya0FjY2Vzc01hbmFnZXI6
Ok9wZXJhdGlvbiA9IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uLCBjb25zdCBR
Qnl0ZUFycmF5JiBib2R5ID0gUUJ5dGVBcnJheSgpKTsKKyAgICBpbmxpbmUgYm9vbCBoYXNWaWV3
KCkgY29uc3QgeyByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnZpZXcoKTsgfQorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChRR2VzdHVyZUV2ZW50
RmFjYWRlKik7CisjZW5kaWYKKyAgICBRV2ViRnJhbWVBZGFwdGVyKiBjcmVhdGVGcmFtZShRV2Vi
RnJhbWVEYXRhKik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNjcm9sbFBvc2l0aW9uKCkgY29u
c3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsKKyAgICBRV2ViUGFn
ZUFkYXB0ZXIqIHBhZ2VBZGFwdGVyOworCisvLyBwcm90ZWN0ZWQ6CisgICAgYm9vbCBhbGxvd3NT
Y3JvbGxpbmc7CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGludCBtYXJnaW5IZWlnaHQ7CisK
Ky8vIHByaXZhdGU6CisgICAgdm9pZCBpbml0KFFXZWJQYWdlQWRhcHRlciopOworICAgIHZvaWQg
aW5pdChRV2ViUGFnZUFkYXB0ZXIqLCBRV2ViRnJhbWVEYXRhKik7CisKKyAgICBXZWJDb3JlOjpG
cmFtZSAqZnJhbWU7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdCAqZnJhbWVMb2Fk
ZXJDbGllbnQ7CisgICAgV2ViQ29yZTo6S1VSTCB1cmw7CisKKyAgICBzdGF0aWMgUVdlYkZyYW1l
QWRhcHRlcioga2l0KGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CisKKy8vICAgIGZyaWVuZCBjbGFz
cyBDaHJvbWVDbGllbnRRdDsKK307CisKKyNlbmRpZiAvLyBRV2ViRnJhbWVBZGFwdGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlBhZ2VBZGFwdGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlBhZ2VBZGFwdGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zZDYzOWQ5OWE4NjBmYTI0MDU1MGQ1MTZlNjJjYTRmZGI1NjYyNTE4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFn
ZUFkYXB0ZXIuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VBZGFwdGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUu
aCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAiUVdlYkZyYW1lQWRhcHRlci5oIgorI2luY2x1
ZGUgIlVuZG9TdGVwUXQuaCIKKyNpbmNsdWRlICJxd2VicGx1Z2luZmFjdG9yeS5oIgorI2luY2x1
ZGUgInF3ZWJzZXR0aW5ncy5oIgorI2luY2x1ZGUgPFBhZ2UuaD4KKyNpbmNsdWRlIDxRTmV0d29y
a0FjY2Vzc01hbmFnZXI+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitib29sIFFXZWJQ
YWdlQWRhcHRlcjo6ZHJ0UnVuID0gZmFsc2U7CisKK1FXZWJQYWdlQWRhcHRlcjo6UVdlYlBhZ2VB
ZGFwdGVyKCkKKyAgICA6IHNldHRpbmdzKDApCisgICAgLCBwYWdlKDApCisgICAgLCBwbHVnaW5G
YWN0b3J5KDApCisgICAgLCBmb3J3YXJkVW5zdXBwb3J0ZWRDb250ZW50KGZhbHNlKQorICAgICwg
aW5zaWRlT3BlbkNhbGwoZmFsc2UpCisgICAgLCBuZXR3b3JrTWFuYWdlcigwKQoreworfQorCitR
V2ViUGFnZUFkYXB0ZXI6On5RV2ViUGFnZUFkYXB0ZXIoKQoreworICAgIGRlbGV0ZSBwYWdlOwor
ICAgIGRlbGV0ZSBzZXR0aW5nczsKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFC
TEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5yZW1vdmVDbGllbnQoKTsKKyNlbmRpZgorfQor
Cit2b2lkIFFXZWJQYWdlQWRhcHRlcjo6aW5pdChQYWdlKiBwYWdlKQoreworICAgIHRoaXMtPnBh
Z2UgPSBwYWdlOworICAgIHNldHRpbmdzID0gbmV3IFFXZWJTZXR0aW5ncyhwYWdlLT5zZXR0aW5n
cygpKTsKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElG
SUNBVElPTlMpCisgICAgV2ViQ29yZTo6cHJvdmlkZU5vdGlmaWNhdGlvbihwYWdlLCBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCkpOworI2VuZGlm
Cit9CisKK3ZvaWQgUVdlYlBhZ2VBZGFwdGVyOjpkZWxldGVQYWdlKCkKK3sKKyAgICBkZWxldGUg
cGFnZTsKKyAgICBwYWdlID0gMDsKK30KKworUVdlYlBhZ2VBZGFwdGVyKiBRV2ViUGFnZUFkYXB0
ZXI6OmtpdChQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDaHJvbWVDbGll
bnRRdCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPm1fd2ViUGFnZTsKK30KKworVmlld3Bv
cnRBcmd1bWVudHMgUVdlYlBhZ2VBZGFwdGVyOjp2aWV3cG9ydEFyZ3VtZW50cygpCit7CisgICAg
cmV0dXJuIHBhZ2UgPyBwYWdlLT52aWV3cG9ydEFyZ3VtZW50cygpIDogV2ViQ29yZTo6Vmlld3Bv
cnRBcmd1bWVudHMoKTsKK30KKworCit2b2lkIFFXZWJQYWdlQWRhcHRlcjo6cmVnaXN0ZXJVbmRv
U3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+IHN0ZXApCit7CisgICAgY3Jl
YXRlVW5kb1N0ZXAoUVNoYXJlZFBvaW50ZXI8VW5kb1N0ZXBRdD4obmV3IFVuZG9TdGVwUXQoc3Rl
cCkpKTsKK30KKwordm9pZCBRV2ViUGFnZUFkYXB0ZXI6OnNldE5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBpZiAobWFuYWdlciA9PSBu
ZXR3b3JrTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChuZXR3b3JrTWFuYWdlciAm
JiBuZXR3b3JrTWFuYWdlci0+cGFyZW50KCkgPT0gaGFuZGxlKCkpCisgICAgICAgIGRlbGV0ZSBu
ZXR3b3JrTWFuYWdlcjsKKyAgICBuZXR3b3JrTWFuYWdlciA9IG1hbmFnZXI7Cit9CisKK1FOZXR3
b3JrQWNjZXNzTWFuYWdlciogUVdlYlBhZ2VBZGFwdGVyOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigp
Cit7CisgICAgaWYgKCFuZXR3b3JrTWFuYWdlcikKKyAgICAgICAgbmV0d29ya01hbmFnZXIgPSBu
ZXcgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKGhhbmRsZSgpKTsKKyAgICByZXR1cm4gbmV0d29ya01h
bmFnZXI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FX
ZWJQYWdlQWRhcHRlci5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViUGFn
ZUFkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmQ2MjQ3MDk1ZWM4N2Q3OWZiZmY0MGJhNjRkNTkzYWUz
MTFiY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RV2ViUGFnZUFkYXB0ZXIuaApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYg
UVdlYlBhZ2VBZGFwdGVyX2gKKyNkZWZpbmUgUVdlYlBhZ2VBZGFwdGVyX2gKKworI2luY2x1ZGUg
IlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKKworI2lu
Y2x1ZGUgPHFuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUgPHFyZWN0Lmg+CisjaW5jbHVkZSA8
cXNjb3BlZHBvaW50ZXIuaD4KKyNpbmNsdWRlIDxxc2hhcmVkcG9pbnRlci5oPgorI2luY2x1ZGUg
PHFzdHJpbmcuaD4KKyNpbmNsdWRlIDxxdXJsLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xh
c3MgUUtleUV2ZW50OworY2xhc3MgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOworUVRfRU5EX05BTUVT
UEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOworY2xhc3MgQ2hyb21lQ2xp
ZW50UXQ7CitjbGFzcyBHZW9sb2NhdGlvbkNsaWVudFF0OworY2xhc3MgVW5kb1N0ZXA7Cit9CisK
K2NsYXNzIFF0UGx1Z2luV2lkZ2V0QWRhcHRlcjsKK2NsYXNzIFFXZWJGcmFtZUFkYXB0ZXI7Citj
bGFzcyBRV2ViSGlzdG9yeUl0ZW07CitjbGFzcyBRV2ViUGFnZUNsaWVudDsKK2NsYXNzIFFXZWJQ
bHVnaW5GYWN0b3J5OworY2xhc3MgUVdlYlNlY3VyaXR5T3JpZ2luOworY2xhc3MgUVdlYlNlbGVj
dE1ldGhvZDsKK2NsYXNzIFFXZWJTZXR0aW5nczsKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyOworY2xhc3MgVW5kb1N0ZXBRdDsKKworCitjbGFzcyBRV2ViUGFnZUFkYXB0ZXIgewor
cHVibGljOgorICAgIFFXZWJQYWdlQWRhcHRlcigpOworICAgIHZpcnR1YWwgflFXZWJQYWdlQWRh
cHRlcigpOworCisgICAgdm9pZCBpbml0KFdlYkNvcmU6OlBhZ2UqKTsKKyAgICAvLyBDYWxsZWQg
bWFudWFsbHkgZnJvbSB+UVdlYlBhZ2UgZGVzdHJ1Y3RvciB0byBlbnN1cmUgdGhhdAorICAgIC8v
IHRoZSBRV2ViUGFnZUFkYXB0ZXIgYW5kIHRoZSBRV2ViUGFnZVByaXZhdGUgYXJlIGludGFjdCB3
aGVuCisgICAgLy8gdmFyaW91cyBkZXN0cnVjdGlvbiBjYWxsYmFja3MgZnJvbSBXZWJDb3JlOjpQ
YWdlOjp+UGFnZSgpIGhpdCB1cy4KKyAgICB2b2lkIGRlbGV0ZVBhZ2UoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzaG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93
UmVjdChjb25zdCBRUmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIFFTaXplIHZpZXdwb3J0U2l6ZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFXZWJQYWdlQWRhcHRlciogY3JlYXRlV2luZG93KGJv
b2wgLypkaWFsb2cqLykgPSAwOworICAgIHZpcnR1YWwgUU9iamVjdCogaGFuZGxlKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgUVN0cmluZyYg
bWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUlEKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGphdmFTY3JpcHRBbGVydChRV2ViRnJhbWVBZGFwdGVyKiwgY29uc3Qg
UVN0cmluZyYgbXNnKSA9IDA7CisgICAgdmlydHVhbCBib29sIGphdmFTY3JpcHRDb25maXJtKFFX
ZWJGcmFtZUFkYXB0ZXIqLCBjb25zdCBRU3RyaW5nJiBtc2cpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgamF2YVNjcmlwdFByb21wdChRV2ViRnJhbWVBZGFwdGVyKiwgY29uc3QgUVN0cmluZyYgbXNn
LCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJpbmcqIHJlc3VsdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwcmludFJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkYXRhYmFzZVF1b3RhRXhjZWVkZWQoUVdlYkZyYW1lQWRhcHRlciosIGNv
bnN0IFFTdHJpbmcmIGRhdGFiYXNlTmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBsaWNh
dGlvbkNhY2hlUXVvdGFFeGNlZWRlZChRV2ViU2VjdXJpdHlPcmlnaW4qLCBxdWludDY0IGRlZmF1
bHRPcmlnaW5RdW90YSwgcXVpbnQ2NCB0b3RhbFNwYWNlTmVlZGVkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFRvb2xUaXAoY29uc3QgUVN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJp
bmdMaXN0IGNob29zZUZpbGVzKFFXZWJGcmFtZUFkYXB0ZXIqLCBib29sIGFsbG93TXVsdGlwbGUs
IGNvbnN0IFFTdHJpbmdMaXN0JiBzdWdnZXN0ZWRGaWxlTmFtZXMpID0gMDsKKyAgICB2aXJ0dWFs
IFFDb2xvciBjb2xvclNlbGVjdGlvblJlcXVlc3RlZChjb25zdCBRQ29sb3ImIHNlbGVjdGVkQ29s
b3IpID0gMDsKKyAgICB2aXJ0dWFsIFFXZWJTZWxlY3RNZXRob2QqIGNyZWF0ZVNlbGVjdFBvcHVw
KCkgPSAwOworICAgIHZpcnR1YWwgUVJlY3Qgdmlld1JlY3RSZWxhdGl2ZVRvV2luZG93KCkgPSAw
OworCisjaWYgVVNFKFFUX01VTFRJTUVESUEpCisgICAgdmlydHVhbCBRV2ViRnVsbFNjcmVlblZp
ZGVvSGFuZGxlciogY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpID0gMDsKKyNlbmRpZgor
ICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1l
QWRhcHRlciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdENhbmNlbGxlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBu
b3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25zUGVybWlzc2lvblJlcXVlc3RDYW5jZWxsZWQo
UVdlYkZyYW1lQWRhcHRlciopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFu
Z2VkQ29udGVudHMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1pY3JvRm9jdXNDaGFuZ2VkKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB0cmlnZ2VyQ29weUFjdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdHJpZ2dlckFjdGlvbkZvcktleUV2ZW50KFFLZXlFdmVudCopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJVbmRvU3RhY2soKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNhblVuZG8oKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGNhblJlZG8oKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVuZG8oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZG8oKSA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBlZGl0b3JDb21tYW5kRm9yS2V5RXZlbnQoUUtleUV2ZW50Kikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVbmRvU3RlcChRU2hhcmVkUG9pbnRlcjxVbmRv
U3RlcFF0PikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25z
KCkgPSAwOworCisgICAgdmlydHVhbCBRV2ViRnJhbWVBZGFwdGVyKiBtYWluRnJhbWVBZGFwdGVy
KCkgPSAwOworCisgICAgdmlydHVhbCBRT2JqZWN0KiBpbnNwZWN0b3JIYW5kbGUoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kKFFPYmplY3QqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldEluc3BlY3RvcldpbmRvd1RpdGxlKGNvbnN0IFFTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdlYkluc3BlY3RvcihRT2JqZWN0KiogaW5zcGVjdG9y
VmlldywgUVdlYlBhZ2VBZGFwdGVyKiogaW5zcGVjdG9yUGFnZSkgPSAwOworICAgIHZpcnR1YWwg
UVN0cmluZ0xpc3QgbWVudUFjdGlvbnNBc1RleHQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVt
aXRWaWV3cG9ydENoYW5nZVJlcXVlc3RlZCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZXB0
TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lQWRhcHRlciosIGNvbnN0IFFOZXR3b3JrUmVxdWVz
dCYsIGludCB0eXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVtaXRSZXN0b3JlRnJhbWVTdGF0
ZVJlcXVlc3RlZChRV2ViRnJhbWVBZGFwdGVyICopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW1p
dFNhdmVGcmFtZVN0YXRlUmVxdWVzdGVkKFFXZWJGcmFtZUFkYXB0ZXIgKiwgUVdlYkhpc3RvcnlJ
dGVtKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0RG93bmxvYWRSZXF1ZXN0ZWQoY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbWl0RnJhbWVDcmVhdGVk
KFFXZWJGcmFtZUFkYXB0ZXIqKSA9IDA7CisgICAgdmlydHVhbCBRU3RyaW5nIHVzZXJBZ2VudEZv
clVybChjb25zdCBRVXJsJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Vy
cm9yUGFnZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKKyAgICBzdHJ1Y3QgRXJyb3JQYWdlT3B0aW9u
IHsKKyAgICAgICAgUVVybCB1cmw7CisgICAgICAgIFFXZWJGcmFtZUFkYXB0ZXIqIGZyYW1lOwor
ICAgICAgICBRU3RyaW5nIGRvbWFpbjsKKyAgICAgICAgaW50IGVycm9yOworICAgICAgICBRU3Ry
aW5nIGVycm9yU3RyaW5nOworICAgIH07CisgICAgc3RydWN0IEVycm9yUGFnZVJldHVybiB7Cisg
ICAgICAgIFFTdHJpbmcgY29udGVudFR5cGU7CisgICAgICAgIFFTdHJpbmcgZW5jb2Rpbmc7Cisg
ICAgICAgIFFVcmwgYmFzZVVybDsKKyAgICAgICAgUUJ5dGVBcnJheSBjb250ZW50OworICAgIH07
CisgICAgdmlydHVhbCBib29sIGVycm9yUGFnZUV4dGVuc2lvbihFcnJvclBhZ2VPcHRpb24qLCBF
cnJvclBhZ2VSZXR1cm4qKSA9IDA7CisgICAgdmlydHVhbCBRdFBsdWdpbldpZGdldEFkYXB0ZXIq
IGNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nJiwgY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmdM
aXN0JiwgY29uc3QgUVN0cmluZ0xpc3QmKSA9IDA7CisgICAgdmlydHVhbCBRdFBsdWdpbldpZGdl
dEFkYXB0ZXIqIGFkYXB0ZXJGb3JXaWRnZXQoUU9iamVjdCopIGNvbnN0ID0gMDsKKworCisgICAg
c3RhdGljIFFXZWJQYWdlQWRhcHRlcioga2l0KFdlYkNvcmU6OlBhZ2UqKTsKKyAgICBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cygpOworICAgIHZvaWQgcmVnaXN0
ZXJVbmRvU3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+KTsKKworICAgIHZv
aWQgc2V0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKik7CisgICAg
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpOworCisgICAgUVdl
YlNldHRpbmdzICpzZXR0aW5nczsKKworICAgIFdlYkNvcmU6OlBhZ2UgKnBhZ2U7CisgICAgUVNj
b3BlZFBvaW50ZXI8UVdlYlBhZ2VDbGllbnQ+IGNsaWVudDsKKworICAgIFFXZWJQbHVnaW5GYWN0
b3J5ICpwbHVnaW5GYWN0b3J5OworCisgICAgYm9vbCBmb3J3YXJkVW5zdXBwb3J0ZWRDb250ZW50
OworICAgIGJvb2wgaW5zaWRlT3BlbkNhbGw7CisKK3ByaXZhdGU6CisgICAgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyICpuZXR3b3JrTWFuYWdlcjsKKworcHVibGljOgorICAgIHN0YXRpYyBib29sIGRy
dFJ1bjsKKworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKKyAgICBm
cmllbmQgY2xhc3MgV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDsKK307CisKKyNlbmRpZiAv
LyBRV2ViUGFnZUFkYXB0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RV2ViVW5kb0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9RV2ViVW5kb0NvbW1hbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExOTZkZjUwZDc0NWQwNDY5Mjk4
OWIwODRkZDc4ZTRmYWJjNmRkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1FXZWJVbmRvQ29tbWFuZC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRV2ViVW5kb0NvbW1hbmQuaCIK
KworI2luY2x1ZGUgIlVuZG9TdGVwUXQuaCIKKworI2lmbmRlZiBRVF9OT19VTkRPQ09NTUFORAor
UVdlYlVuZG9Db21tYW5kOjpRV2ViVW5kb0NvbW1hbmQoUVNoYXJlZFBvaW50ZXI8VW5kb1N0ZXBR
dD4gdW5kb1N0ZXAsIFFVbmRvQ29tbWFuZCogcGFyZW50KQorICAgIDogUVVuZG9Db21tYW5kKHBh
cmVudCkKKyAgICAsIG1fc3RlcCh1bmRvU3RlcCkKK3sKKyAgICBRX0FTU0VSVCh1bmRvU3RlcCk7
CisgICAgc2V0VGV4dChtX3N0ZXAtPnRleHQoKSk7Cit9CisKK3ZvaWQgUVdlYlVuZG9Db21tYW5k
Ojp1bmRvKCkKK3sKKyAgICBtX3N0ZXAtPnVuZG8oKTsKK30KKwordm9pZCBRV2ViVW5kb0NvbW1h
bmQ6OnJlZG8oKQoreworICAgIG1fc3RlcC0+cmVkbygpOworfQorCisjZW5kaWYgLy8gUVRfTk9f
VU5ET0NPTU1BTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UVdlYlVuZG9Db21tYW5kLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJV
bmRvQ29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlNjEyMWFkYzI5MTEwYmYwMzQ5MTdmMmYwZGNhYWNk
NGNlNjRmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1FXZWJVbmRvQ29tbWFuZC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVm
IFFXZWJVbmRvQ29tbWFuZF9oCisjZGVmaW5lIFFXZWJVbmRvQ29tbWFuZF9oCisKKyNpbmNsdWRl
IDxxc2hhcmVkcG9pbnRlci5oPgorI2luY2x1ZGUgPHF1bmRvc3RhY2suaD4KKworY2xhc3MgVW5k
b1N0ZXBRdDsKKworI2lmbmRlZiBRVF9OT19VTkRPQ09NTUFORAorCitjbGFzcyBRV2ViVW5kb0Nv
bW1hbmQgOiBwdWJsaWMgUVVuZG9Db21tYW5kIHsKK3B1YmxpYzoKKyAgICBRV2ViVW5kb0NvbW1h
bmQoUVNoYXJlZFBvaW50ZXI8VW5kb1N0ZXBRdD4sIFFVbmRvQ29tbWFuZCAqcGFyZW50ID0gMCk7
CisKKyAgICB2b2lkIHVuZG8oKTsKKyAgICB2b2lkIHJlZG8oKTsKKworcHJpdmF0ZToKKyAgICBR
U2hhcmVkUG9pbnRlcjxVbmRvU3RlcFF0PiBtX3N0ZXA7Cit9OworCisjZW5kaWYgLy8gUVRfTk9f
VU5ET0NPTU1BTkQKKworI2VuZGlmIC8vIFFXZWJVbmRvQ29tbWFuZF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5JbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdpbkltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJiZWFiZjFkMDg1ODZjZDU1MzQzOGI3MjA4ZmE4YTMxNWZiZTE5YjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXaWRnZXRQbHVnaW5J
bXBsLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lh
IFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUVdpZGdldFBsdWdpbkltcGwuaCIKKworI2luY2x1ZGUgPFFXaWRnZXQ+CisK
K1FXaWRnZXRQbHVnaW5JbXBsOjp+UVdpZGdldFBsdWdpbkltcGwoKQoreworICAgIG1fd2lkZ2V0
LT5kZWxldGVMYXRlcigpOworfQorCit2b2lkIFFXaWRnZXRQbHVnaW5JbXBsOjp1cGRhdGUoY29u
c3QgUVJlY3QgJnJlY3QpCit7CisgICAgbV93aWRnZXQtPnVwZGF0ZShyZWN0KTsKK30KKwordm9p
ZCBRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0R2VvbWV0cnlBbmRDbGlwKGNvbnN0IFFSZWN0ICZnZW9t
ZXRyeSwgY29uc3QgUVJlY3QgJmNsaXBSZWN0LCBib29sIGlzVmlzaWJsZSkKK3sKKyAgICBtX3dp
ZGdldC0+c2V0R2VvbWV0cnkoZ2VvbWV0cnkpOworICAgIGlmICghY2xpcFJlY3QuaXNOdWxsKCkp
IHsKKyAgICAgICAgUVJlY3QgY2xpcChjbGlwUmVjdC5pbnRlcnNlY3RlZChtX3dpZGdldC0+cmVj
dCgpKSk7CisgICAgICAgIG1fd2lkZ2V0LT5zZXRNYXNrKFFSZWdpb24oY2xpcCkpOworICAgIH0K
KyAgICBtX3dpZGdldC0+dXBkYXRlKCk7CisgICAgc2V0VmlzaWJsZShpc1Zpc2libGUpOworfQor
Cit2b2lkIFFXaWRnZXRQbHVnaW5JbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAg
ICAvLyBJZiBzZXRNYXNrIGlzIHNldCB3aXRoIGFuIGVtcHR5IFFSZWdpb24sIG5vIGNsaXBwaW5n
IHdpbGwKKyAgICAvLyBiZSBwZXJmb3JtZWQsIHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRlIHRoZSBw
bGF0Zm9ybVdpZGdldC4KKyAgICBRUmVnaW9uIG1hc2sgPSBtX3dpZGdldC0+bWFzaygpOworICAg
IG1fd2lkZ2V0LT5zZXRWaXNpYmxlKHZpc2libGUgJiYgIW1hc2suaXNFbXB0eSgpKTsKK30KKwor
dm9pZCBRV2lkZ2V0UGx1Z2luSW1wbDo6c2V0U3R5bGVTaGVldChjb25zdCBRU3RyaW5nICZzdHls
ZXNoZWV0KQoreworICAgIG1fd2lkZ2V0LT5zZXRTdHlsZVNoZWV0KHN0eWxlc2hlZXQpOworfQor
Cit2b2lkIFFXaWRnZXRQbHVnaW5JbXBsOjpzZXRXaWRnZXRQYXJlbnQoUU9iamVjdCAqcGFyZW50
KQoreworICAgIGlmICghcGFyZW50LT5pc1dpZGdldFR5cGUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fd2lkZ2V0LT5zZXRQYXJlbnQocW9iamVjdF9jYXN0PFFXaWRnZXQqPihwYXJlbnQpKTsK
K30KKworUU9iamVjdCogUVdpZGdldFBsdWdpbkltcGw6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fd2lkZ2V0OworfQorCisjaW5jbHVkZSAibW9jX1FXaWRnZXRQbHVnaW5JbXBsLmNw
cCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBs
dWdpbkltcGwuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdpZGdldFBsdWdp
bkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NDU5YjdlZmY1ODcwMTNmM2FmMjQ4ZjdjMmM5MTI4NmNmNzQ5
OWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
V2lkZ2V0UGx1Z2luSW1wbC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFFX
aWRnZXRQbHVnaW5JbXBsX2gKKyNkZWZpbmUgUVdpZGdldFBsdWdpbkltcGxfaAorCisjaW5jbHVk
ZSAiUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgiCisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3Mg
UVdpZGdldDsKK1FUX0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVdpZGdldFBsdWdpbkltcGwgOiBw
dWJsaWMgUXRQbHVnaW5XaWRnZXRBZGFwdGVyIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAg
IFFXaWRnZXRQbHVnaW5JbXBsKFFXaWRnZXQgKncpIDogbV93aWRnZXQodykgeyB9CisgICAgdmly
dHVhbCB+UVdpZGdldFBsdWdpbkltcGwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0
IFFSZWN0ICYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeUFuZENsaXAo
Y29uc3QgUVJlY3QmLCBjb25zdCBRUmVjdCYsIGJvb2wgaXNWaXNpYmxlKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U3R5bGVTaGVldChjb25zdCBRU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldFdpZGdldFBhcmVudChRT2JqZWN0ICopIE9WRVJSSURFOworICAgIHZpcnR1YWwgUU9i
amVjdCogaGFuZGxlKCkgY29uc3QgT1ZFUlJJREU7Citwcml2YXRlOgorICAgIFFXaWRnZXQgKm1f
d2lkZ2V0OworfTsKKworI2VuZGlmIC8vIFFXaWRnZXRQbHVnaW5JbXBsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcApp
bmRleCBjZGM2ZWUwYzk5NmQwNjMyNmQxNTU3NTFkZDU4OTU5NWFkZTQ1MjliLi5iMmZiZjYyNGFh
OTViYWRkMDQ4MGFmNTM3YjVhNGZkYTJkOTI3MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3BwCkBAIC0yMywxOCAr
MjMsMTggQEAKIAogI2lmbmRlZiBRVF9OT19DT01CT0JPWAogCi0jaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50UXQuaCIKLSNpbmNsdWRlICJRdFdlYkNvbWJvQm94LmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VB
ZGFwdGVyLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJRdFdlYkNv
bWJvQm94LmgiCiAjaW5jbHVkZSAicWdyYXBoaWNzd2Vidmlldy5oIgogI2luY2x1ZGUgPFFHcmFw
aGljc1Byb3h5V2lkZ2V0PgogI2luY2x1ZGUgPFF0R3VpL1FTdGFuZGFyZEl0ZW1Nb2RlbD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1RdEZhbGxiYWNrV2ViUG9wdXA6OlF0RmFsbGJhY2tXZWJQ
b3B1cChjb25zdCBDaHJvbWVDbGllbnRRdCogY2hyb21lQ2xpZW50KQorUXRGYWxsYmFja1dlYlBv
cHVwOjpRdEZhbGxiYWNrV2ViUG9wdXAoY29uc3QgUVdlYlBhZ2VBZGFwdGVyKiBwYWdlKQogICAg
IDogbV9jb21ibygwKQotICAgICwgbV9jaHJvbWVDbGllbnQoY2hyb21lQ2xpZW50KQorICAgICwg
bV9wYWdlKHBhZ2UpCiB7CiB9CiAKQEAgLTYzLDkgKzYzLDggQEAgdm9pZCBRdEZhbGxiYWNrV2Vi
UG9wdXA6OnNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCiAgICAgICAgIHByb3h5LT5z
ZXRXaWRnZXQobV9jb21ibyk7CiAgICAgICAgIHByb3h5LT5zZXRHZW9tZXRyeShyZWN0KTsKICAg
ICB9IGVsc2UgewotICAgICAgICBtX2NvbWJvLT5zZXRQYXJlbnQocGFnZUNsaWVudCgpLT5vd25l
cldpZGdldCgpKTsKLSAgICAgICAgbV9jb21iby0+c2V0R2VvbWV0cnkoUVJlY3QocmVjdC5sZWZ0
KCksIHJlY3QudG9wKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0
aCgpLCBtX2NvbWJvLT5zaXplSGludCgpLmhlaWdodCgpKSk7CisgICAgICAgIG1fY29tYm8tPnNl
dFBhcmVudChxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHBhZ2VDbGllbnQoKS0+b3duZXJXaWRnZXQo
KSkpOworICAgICAgICBtX2NvbWJvLT5zZXRHZW9tZXRyeShRUmVjdChyZWN0LmxlZnQoKSwgcmVj
dC50b3AoKSwgcmVjdC53aWR0aCgpLCBtX2NvbWJvLT5zaXplSGludCgpLmhlaWdodCgpKSk7CiAg
ICAgfQogCiAgICAgbV9jb21iby0+c2hvd1BvcHVwQXRDdXJzb3JQb3NpdGlvbigpOwpAQCAtMTMx
LDcgKzEzMCw3IEBAIHZvaWQgUXRGYWxsYmFja1dlYlBvcHVwOjpkZWxldGVDb21ib0JveCgpCiAK
IFFXZWJQYWdlQ2xpZW50KiBRdEZhbGxiYWNrV2ViUG9wdXA6OnBhZ2VDbGllbnQoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2Nocm9tZUNsaWVudC0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAg
cmV0dXJuIG1fcGFnZS0+Y2xpZW50LmRhdGEoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuaCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmgKaW5kZXggZjc1MzM3
M2JlNDM1ZGM5M2U5YzRkZTYwYjQ3NGRiMTE5NDgzMjQ0ZC4uNjliNDliZGJmODg1MTg2YWY1NDVm
NmVkYmEzOTBjNjU3NTU1ZjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oCkBAIC0yMyw4ICsyMyw2IEBACiAjaW5jbHVk
ZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAK
LSNpbmNsdWRlIDxRQ29tYm9Cb3g+Ci0KICNpZm5kZWYgUVRfTk9fQ09NQk9CT1gKIAogUVRfQkVH
SU5fTkFNRVNQQUNFCkBAIC0zMiwxNiArMzAsMTYgQEAgY2xhc3MgUUdyYXBoaWNzUHJveHlXaWRn
ZXQ7CiBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFXZWJQYWdlQ2xpZW50OworY2xhc3MgUVdl
YlBhZ2VBZGFwdGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENocm9tZUNsaWVu
dFF0OwogY2xhc3MgUXRXZWJDb21ib0JveDsKIAogY2xhc3MgUXRGYWxsYmFja1dlYlBvcHVwIDog
cHVibGljIFFXZWJTZWxlY3RNZXRob2QgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6Ci0gICAgUXRG
YWxsYmFja1dlYlBvcHVwKGNvbnN0IENocm9tZUNsaWVudFF0Kik7CisgICAgUXRGYWxsYmFja1dl
YlBvcHVwKGNvbnN0IFFXZWJQYWdlQWRhcHRlciopOwogICAgIH5RdEZhbGxiYWNrV2ViUG9wdXAo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJik7CkBAIC01
OSw3ICs1Nyw3IEBAIHByaXZhdGUgUV9TTE9UUzoKIAogcHJpdmF0ZToKICAgICBRdFdlYkNvbWJv
Qm94KiBtX2NvbWJvOwotICAgIGNvbnN0IENocm9tZUNsaWVudFF0KiBtX2Nocm9tZUNsaWVudDsK
KyAgICBjb25zdCBRV2ViUGFnZUFkYXB0ZXIqIG1fcGFnZTsKICAgICBRUmVjdCBtX2dlb21ldHJ5
OwogICAgIFFGb250IG1fZm9udDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RdFBsdWdpbldpZGdldEFkYXB0ZXIuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQ5NGQzZGIy
YTk4NTVmNzRiYThhOTdmYzViY2QzM2E1M2U5MjRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbHVnaW5XaWRnZXRBZGFwdGVyLmgKQEAgLTAs
MCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUXRQbHVnaW5XaWRnZXRBZGFwdGVyX2gKKyNk
ZWZpbmUgUXRQbHVnaW5XaWRnZXRBZGFwdGVyX2gKKworI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5j
bHVkZSA8UVJlY3Q+CisjaW5jbHVkZSA8UVN0cmluZz4KKworY2xhc3MgUXRQbHVnaW5XaWRnZXRB
ZGFwdGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZShjb25zdCBRUmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
R2VvbWV0cnlBbmRDbGlwKGNvbnN0IFFSZWN0JiwgY29uc3QgUVJlY3QmLCBib29sIGlzVmlzaWJs
ZSA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldFdpZGdldFBhcmVudChRT2JqZWN0KikgPSAwOworICAgIHZpcnR1YWwg
UU9iamVjdCogaGFuZGxlKCkgY29uc3QgPSAwOworfTsKKworI2VuZGlmIC8vIFF0UGx1Z2luV2lk
Z2V0QWRhcHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1F0V2ViQ29tYm9Cb3guY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdl
YkNvbWJvQm94LmNwcAppbmRleCBmNTI0NjVmMGRjODNkMzQzY2FmYzZlYmMyNTNiY2M5OTVjYmNm
ZDZmLi4yYzIyY2Q0NzZjNmQ1OWIzODAyMGJmYmQzMDJkNTc1MmQwMjNlN2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRXZWJDb21ib0JveC5jcHAKQEAgLTQx
LDggKzQxLDcgQEAgUXRXZWJDb21ib0JveDo6UXRXZWJDb21ib0JveCgpCiAKIHZvaWQgUXRXZWJD
b21ib0JveDo6c2hvd1BvcHVwQXRDdXJzb3JQb3NpdGlvbigpCiB7Ci0gICAgUU1vdXNlRXZlbnQg
ZXZlbnQoUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzLCBRQ3Vyc29yOjpwb3MoKSwgUXQ6OkxlZnRC
dXR0b24sCi0gICAgICAgICAgICAgICAgICAgICAgUXQ6OkxlZnRCdXR0b24sIFF0OjpOb01vZGlm
aWVyKTsKKyAgICBRTW91c2VFdmVudCBldmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3MsIFFD
dXJzb3I6OnBvcygpLCBRdDo6TGVmdEJ1dHRvbiwgUXQ6OkxlZnRCdXR0b24sIFF0OjpOb01vZGlm
aWVyKTsKICAgICBRQ29yZUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQodGhpcywgJmV2ZW50KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFdlYkNvbWJv
Qm94LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guaApp
bmRleCA0MjY0NzU3NjY3ODIyNGI0NThjYjYwNjkxNTU1ZTdjYjBlZGRkMzk5Li5lMzI0MjdlZGY0
ZDRiN2Y5N2RlZGViOGU4ZWU0ZTAyNjA0ZWRjNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guaApAQCAtMjEsOSArMjEsOCBAQAogI2lmbmRl
ZiBRdFdlYkNvbWJvQm94X2gKICNkZWZpbmUgUXRXZWJDb21ib0JveF9oCiAKLSNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KLQogI2luY2x1ZGUgPFFDb21ib0JveD4KKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KIAogI2lmbmRlZiBRVF9OT19DT01CT0JPWAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmggYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmgKaW5kZXggMTFhOTY0MTA1
MjhmMDExNWUyYzI3MmMyMGQzOWEwOGFkZGRhNmEzYi4uNGFlODU4MmEzZjA0MGRiYTA5ZTEzNTY2
MzI4NmU3MTU2OTI5MDkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaApAQCAtMjcsNyArMjcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFNlYXJjaFBvcHVwTWVudVF0IDogcHVibGljIFNlYXJjaFBvcHVwTWVu
dSB7CiBwdWJsaWM6Ci0gICAgU2VhcmNoUG9wdXBNZW51UXQoUGFzc1JlZlB0cjxQb3B1cE1lbnU+
IHBvcHVwKTsKKyAgICBTZWFyY2hQb3B1cE1lbnVRdChQYXNzUmVmUHRyPFBvcHVwTWVudT4pOwog
CiAgICAgdmlydHVhbCBQb3B1cE1lbnUqIHBvcHVwTWVudSgpOwogICAgIHZpcnR1YWwgdm9pZCBz
YXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9VbmRvU3RlcFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvVW5kb1N0ZXBRdC5jcHAKaW5kZXggMTVkZjJlZTUwMmM2MWYxYzE0OGRiY2U3MzBhNDM5MDlk
NjkyNmVkZC4uNmUyZDU0Zjc4NDY2ZTNmNTZkNTRhNzNlNGRlZDg0NWQ1MmI4MDAyMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1VuZG9TdGVwUXQuY3BwCkBAIC0yMCw5
ICsyMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlVuZG9TdGVwUXQuaCIK
IAorI2luY2x1ZGUgPHFvYmplY3QuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNp
Zm5kZWYgUVRfTk9fVU5ET0NPTU1BTkQKIHN0YXRpYyBRU3RyaW5nIHVuZG9OYW1lRm9yRWRpdEFj
dGlvbihjb25zdCBFZGl0QWN0aW9uIGVkaXRBY3Rpb24pCiB7CiAgICAgc3dpdGNoIChlZGl0QWN0
aW9uKSB7CkBAIC0xMDYsMjYgKzEwNywxOCBAQCBzdGF0aWMgUVN0cmluZyB1bmRvTmFtZUZvckVk
aXRBY3Rpb24oY29uc3QgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQogICAgIHJldHVybiBRU3RyaW5n
KCk7CiB9CiAKLVVuZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+IHN0
ZXAsIFFVbmRvQ29tbWFuZCAqcGFyZW50KQotICAgIDogUVVuZG9Db21tYW5kKHBhcmVudCkKLSAg
ICAsIG1fc3RlcChzdGVwKQotICAgICwgbV9maXJzdCh0cnVlKQotewotICAgIHNldFRleHQodW5k
b05hbWVGb3JFZGl0QWN0aW9uKHN0ZXAtPmVkaXRpbmdBY3Rpb24oKSkpOwotfQotI2Vsc2UKIFVu
ZG9TdGVwUXQ6OlVuZG9TdGVwUXQoV1RGOjpSZWZQdHI8VW5kb1N0ZXA+IHN0ZXApCiAgICAgOiBt
X3N0ZXAoc3RlcCkKICAgICAsIG1fZmlyc3QodHJ1ZSkKIHsKKyAgICBtX3RleHQgPSB1bmRvTmFt
ZUZvckVkaXRBY3Rpb24oc3RlcC0+ZWRpdGluZ0FjdGlvbigpKTsKIH0KLSNlbmRpZgorCiAKIFVu
ZG9TdGVwUXQ6On5VbmRvU3RlcFF0KCkKIHsKIH0KIAotCiB2b2lkIFVuZG9TdGVwUXQ6OnJlZG8o
KQogewogICAgIGlmIChtX2ZpcnN0KSB7CkBAIC0xNDMsNSArMTM2LDkgQEAgdm9pZCBVbmRvU3Rl
cFF0Ojp1bmRvKCkKICAgICAgICAgbV9zdGVwLT51bmFwcGx5KCk7CiB9CiAKK1FTdHJpbmcgVW5k
b1N0ZXBRdDo6dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dDsKK30KIAogLy8gdmlt
OiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvVW5kb1N0ZXBRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3Rl
cFF0LmgKaW5kZXggM2MxNDM0MDNhNzdkZjI4ZGI5MTRjMmNmMzg5ODQzZWU2M2UxMWMxZi4uODVk
Nzk5MWMzNzkzZjQzOGFmMTI4YmNiMmFmOGFhOGM0YmQ0NDJlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgKKysrIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9VbmRvU3RlcFF0LmgKQEAgLTIwLDI5ICsyMCwyNCBAQAogI2lm
bmRlZiBVbmRvU3RlcFF0X2gKICNkZWZpbmUgVW5kb1N0ZXBRdF9oCiAKLSNpbmNsdWRlIDxRVW5k
b0NvbW1hbmQ+CiAjaW5jbHVkZSA8VW5kb1N0ZXAuaD4KKworI2luY2x1ZGUgPHFzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLWNsYXNzIFVuZG9TdGVwUXQKLSNpZm5kZWYgUVRf
Tk9fVU5ET0NPTU1BTkQKLSAgICA6IHB1YmxpYyBRVW5kb0NvbW1hbmQKLSNlbmRpZgoteworY2xh
c3MgVW5kb1N0ZXBRdCB7CiAgICAgcHVibGljOgotI2lmbmRlZiBRVF9OT19VTkRPQ09NTUFORAot
ICAgICAgICBVbmRvU3RlcFF0KFdURjo6UmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwLCBR
VW5kb0NvbW1hbmQgKnBhcmVudCA9IDApOwotI2Vsc2UKLSAgICAgICAgVW5kb1N0ZXBRdChXVEY6
OlJlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4gc3RlcCk7Ci0jZW5kaWYKKyAgICAgICAgVW5kb1N0
ZXBRdChXVEY6OlJlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pOwogICAgICAgICB+VW5kb1N0ZXBR
dCgpOwogCiAgICAgICAgIHZvaWQgcmVkbygpOwogICAgICAgICB2b2lkIHVuZG8oKTsKKyAgICAg
ICAgUVN0cmluZyB0ZXh0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBXVEY6OlJl
ZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4gbV9zdGVwOwogICAgICAgICBib29sIG1fZmlyc3Q7Cisg
ICAgICAgIFFTdHJpbmcgbV90ZXh0OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZDYx
NTkyNDFlNGZjNjRlOTdmNzU3MGI1ZTA0MzJhYjNjMjQzNDkwMy4uNDQ0OWMxNTU3MGVlZGIzYTll
OGZlZTQ5Njk2MDMwNGU0MWMzOGU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcApAQCAtMjcsMTMgKzI3LDggQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVRvdWNo
UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlIDxRQXBw
bGljYXRpb24+Ci0jaW5jbHVkZSA8UUdlc3R1cmU+Ci0jaW5jbHVkZSA8UUdlc3R1cmVFdmVudD4K
LSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+CiAjaW5jbHVkZSA8UVRvdWNoRXZl
bnQ+CiAjaW5jbHVkZSA8UVdoZWVsRXZlbnQ+Ci0jaW5jbHVkZSA8UVdpZGdldD4KICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsNTQgKzQ4
LDI4IEBAIHN0YXRpYyB2b2lkIG1vdXNlRXZlbnRNb2RpZmllcnNGcm9tUXRLZXlib2FyZE1vZGlm
aWVycyhRdDo6S2V5Ym9hcmRNb2RpZmllcnMga2V5CiAKIHN0YXRpYyB2b2lkIG1vdXNlRXZlbnRU
eXBlQW5kTW91c2VCdXR0b25Gcm9tUUV2ZW50KGNvbnN0IFFFdmVudCogZXZlbnQsIFBsYXRmb3Jt
RXZlbnQ6OlR5cGUmIG1vdXNlRXZlbnRUeXBlLCBNb3VzZUJ1dHRvbiYgbW91c2VCdXR0b24pCiB7
Ci0gICAgZW51bSB7IE1vdXNlRXZlbnQsIEdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50IH0gZnJhbWV3
b3JrTW91c2VFdmVudFR5cGU7CiAgICAgc3dpdGNoIChldmVudC0+dHlwZSgpKSB7CiAgICAgY2Fz
ZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2s6CiAgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0
dG9uUHJlc3M6Ci0gICAgICAgIGZyYW1ld29ya01vdXNlRXZlbnRUeXBlID0gTW91c2VFdmVudDsK
ICAgICAgICAgbW91c2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U6Ci0gICAg
ICAgIGZyYW1ld29ya01vdXNlRXZlbnRUeXBlID0gTW91c2VFdmVudDsKICAgICAgICAgbW91c2VF
dmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFFFdmVudDo6TW91c2VNb3ZlOgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50
VHlwZSA9IE1vdXNlRXZlbnQ7Ci0gICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVu
dDo6TW91c2VNb3ZlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OkdyYXBoaWNz
U2NlbmVNb3VzZURvdWJsZUNsaWNrOgotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5lTW91
c2VQcmVzczoKLSAgICAgICAgZnJhbWV3b3JrTW91c2VFdmVudFR5cGUgPSBHcmFwaGljc1NjZW5l
TW91c2VFdmVudDsKLSAgICAgICAgbW91c2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3Vz
ZVByZXNzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGljc1NjZW5l
TW91c2VSZWxlYXNlOgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IEdyYXBoaWNz
U2NlbmVNb3VzZUV2ZW50OwotICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3JtRXZlbnQ6
Ok1vdXNlUmVsZWFzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUV2ZW50OjpHcmFwaGlj
c1NjZW5lTW91c2VNb3ZlOgotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IEdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50OwogICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFBsYXRmb3JtRXZl
bnQ6Ok1vdXNlTW92ZWQ7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSA9IE1v
dXNlRXZlbnQ7CiAgICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VN
b3ZlZDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgUXQ6Ok1vdXNlQnV0dG9ucyBtb3Vz
ZUJ1dHRvbnM7Ci0gICAgc3dpdGNoIChmcmFtZXdvcmtNb3VzZUV2ZW50VHlwZSkgewotICAgIGNh
c2UgTW91c2VFdmVudDogewotICAgICAgICBjb25zdCBRTW91c2VFdmVudCogbW91c2VFdmVudCA9
IHN0YXRpY19jYXN0PGNvbnN0IFFNb3VzZUV2ZW50Kj4oZXZlbnQpOwotICAgICAgICBtb3VzZUJ1
dHRvbnMgPSBtb3VzZUV2ZW50VHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkID8gbW91
c2VFdmVudC0+YnV0dG9ucygpIDogbW91c2VFdmVudC0+YnV0dG9uKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50OiB7Ci0gICAgICAgIGNv
bnN0IFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PGNv
bnN0IFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgbW91c2VCdXR0
b25zID0gbW91c2VFdmVudFR5cGUgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCA/IG1vdXNl
RXZlbnQtPmJ1dHRvbnMoKSA6IG1vdXNlRXZlbnQtPmJ1dHRvbigpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgfQorCisgICAgY29uc3QgUU1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0
aWNfY2FzdDxjb25zdCBRTW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICBtb3VzZUJ1dHRvbnMgPSBt
b3VzZUV2ZW50VHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkID8gbW91c2VFdmVudC0+
YnV0dG9ucygpIDogbW91c2VFdmVudC0+YnV0dG9uKCk7CisKIAogICAgIGlmIChtb3VzZUJ1dHRv
bnMgJiBRdDo6TGVmdEJ1dHRvbikKICAgICAgICAgbW91c2VCdXR0b24gPSBMZWZ0QnV0dG9uOwpA
QCAtMTE0LDI3ICs4Myw5IEBAIHN0YXRpYyB2b2lkIG1vdXNlRXZlbnRUeXBlQW5kTW91c2VCdXR0
b25Gcm9tUUV2ZW50KGNvbnN0IFFFdmVudCogZXZlbnQsIFBsYXRmb3JtCiAKIGNsYXNzIFdlYktp
dFBsYXRmb3JtTW91c2VFdmVudCA6IHB1YmxpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgewogcHVibGlj
OgotICAgIFdlYktpdFBsYXRmb3JtTW91c2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQq
LCBpbnQgY2xpY2tDb3VudCk7CiAgICAgV2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50KFFJbnB1dEV2
ZW50KiwgaW50IGNsaWNrQ291bnQpOwogfTsKIAotV2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50OjpX
ZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCwg
aW50IGNsaWNrQ291bnQpCi17Ci0gICAgbV90aW1lc3RhbXAgPSBXVEY6OmN1cnJlbnRUaW1lKCk7
Ci0KLSAgICAvLyBGSVhNRTogV2h5IGRvbid0IHdlIGhhbmRsZSBhIGNvbnRleHQgbWVudSBldmVu
dCBoZXJlIGFzIHdlIGRvIGluIFBsYXRmb3JtTW91c2VFdmVudChRSW5wdXRFdmVudCosIGludCk/
Ci0gICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA3
Mjg+LgotICAgIFBsYXRmb3JtRXZlbnQ6OlR5cGUgdHlwZTsKLSAgICBtb3VzZUV2ZW50VHlwZUFu
ZE1vdXNlQnV0dG9uRnJvbVFFdmVudChldmVudCwgdHlwZSwgbV9idXR0b24pOwotCi0gICAgbV90
eXBlID0gdHlwZTsKLSAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoZXZlbnQtPnBvcygpLnRvUG9p
bnQoKSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KGV2ZW50LT5zY3JlZW5Qb3Mo
KSk7Ci0KLSAgICBtX2NsaWNrQ291bnQgPSBjbGlja0NvdW50OwotICAgIG1vdXNlRXZlbnRNb2Rp
ZmllcnNGcm9tUXRLZXlib2FyZE1vZGlmaWVycyhldmVudC0+bW9kaWZpZXJzKCksIG1fbW9kaWZp
ZXJzKTsKLX0KLQogV2ViS2l0UGxhdGZvcm1Nb3VzZUV2ZW50OjpXZWJLaXRQbGF0Zm9ybU1vdXNl
RXZlbnQoUUlucHV0RXZlbnQqIGV2ZW50LCBpbnQgY2xpY2tDb3VudCkKIHsKICAgICBtX3RpbWVz
dGFtcCA9IFdURjo6Y3VycmVudFRpbWUoKTsKQEAgLTE2OSwyMSArMTIwLDE1IEBAIFBsYXRmb3Jt
TW91c2VFdmVudCBjb252ZXJ0TW91c2VFdmVudChRSW5wdXRFdmVudCogZXZlbnQsIGludCBjbGlj
a0NvdW50KQogICAgIHJldHVybiBXZWJLaXRQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIGNsaWNr
Q291bnQpOwogfQogCi1QbGF0Zm9ybU1vdXNlRXZlbnQgY29udmVydE1vdXNlRXZlbnQoUUdyYXBo
aWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCwgaW50IGNsaWNrQ291bnQpCi17Ci0gICAgcmV0dXJu
IFdlYktpdFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgY2xpY2tDb3VudCk7Ci19Ci0KIGNsYXNz
IFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBQbGF0Zm9ybVdoZWVsRXZlbnQgewog
cHVibGljOgotICAgIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudChRR3JhcGhpY3NTY2VuZVdoZWVs
RXZlbnQqKTsKLSAgICBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKKyAg
ICBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqLCBpbnQgd2hlZWxTY3JvbGxM
aW5lcyk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBseURlbHRhKGludCBkZWx0YSwgUXQ6Ok9y
aWVudGF0aW9uKTsKKyAgICB2b2lkIGFwcGx5RGVsdGEoaW50IGRlbHRhLCBRdDo6T3JpZW50YXRp
b24sIGludCB3aGVlbFNjcm9sbExpbmVzKTsKIH07CiAKLXZvaWQgV2ViS2l0UGxhdGZvcm1XaGVl
bEV2ZW50OjphcHBseURlbHRhKGludCBkZWx0YSwgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQordm9pZCBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQ6OmFwcGx5RGVsdGEoaW50IGRlbHRhLCBR
dDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24sIGludCB3aGVlbFNjcm9sbExpbmVzKQogewogICAg
IGlmIChvcmllbnRhdGlvbiA9PSBRdDo6SG9yaXpvbnRhbCkgewogICAgICAgICBtX2RlbHRhWCA9
IGRlbHRhOwpAQCAtMTk4LDIyICsxNDMsMTEgQEAgdm9pZCBXZWJLaXRQbGF0Zm9ybVdoZWVsRXZl
bnQ6OmFwcGx5RGVsdGEoaW50IGRlbHRhLCBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24KICAg
ICAvLyBTaW5jZSB3ZSByZXF1ZXN0IHRoZSBzY3JvbGwgZGVsdGEgYnkgdGhlIHBpeGVsLCBjb252
ZXJ0IHRoZSB3aGVlbCBkZWx0YSB0byBwaXhlbCBkZWx0YSB1c2luZyB0aGUgc3RhbmRhcmQgc2Ny
b2xsIHN0ZXAuCiAgICAgLy8gVXNlIHRoZSBzYW1lIHNpbmdsZSBzY3JvbGwgc3RlcCBhcyBRVGV4
dEVkaXQgKGluIFFUZXh0RWRpdFByaXZhdGU6OmluaXQgW2gsdl1iYXItPnNldFNpbmdsZVN0ZXAp
CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGNEZWZhdWx0UXRTY3JvbGxTdGVwID0gMjAuZjsKLSAg
ICBtX2RlbHRhWCA9IG1fd2hlZWxUaWNrc1ggKiBRQXBwbGljYXRpb246OndoZWVsU2Nyb2xsTGlu
ZXMoKSAqIGNEZWZhdWx0UXRTY3JvbGxTdGVwOwotICAgIG1fZGVsdGFZID0gbV93aGVlbFRpY2tz
WSAqIFFBcHBsaWNhdGlvbjo6d2hlZWxTY3JvbGxMaW5lcygpICogY0RlZmF1bHRRdFNjcm9sbFN0
ZXA7CisgICAgbV9kZWx0YVggPSBtX3doZWVsVGlja3NYICogd2hlZWxTY3JvbGxMaW5lcyAqIGNE
ZWZhdWx0UXRTY3JvbGxTdGVwOworICAgIG1fZGVsdGFZID0gbV93aGVlbFRpY2tzWSAqIHdoZWVs
U2Nyb2xsTGluZXMgKiBjRGVmYXVsdFF0U2Nyb2xsU3RlcDsKIH0KIAotV2ViS2l0UGxhdGZvcm1X
aGVlbEV2ZW50OjpXZWJLaXRQbGF0Zm9ybVdoZWVsRXZlbnQoUUdyYXBoaWNzU2NlbmVXaGVlbEV2
ZW50KiBlKQotewotICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJyZW50VGltZSgpOwotICAgIG1v
dXNlRXZlbnRNb2RpZmllcnNGcm9tUXRLZXlib2FyZE1vZGlmaWVycyhlLT5tb2RpZmllcnMoKSwg
bV9tb2RpZmllcnMpOwotICAgIG1fcG9zaXRpb24gPSBlLT5wb3MoKS50b1BvaW50KCk7Ci0gICAg
bV9nbG9iYWxQb3NpdGlvbiA9IGUtPnNjcmVlblBvcygpOwotICAgIG1fZ3JhbnVsYXJpdHkgPSBT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKLSAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmlj
ZSA9IGZhbHNlOwotICAgIGFwcGx5RGVsdGEoZS0+ZGVsdGEoKSwgZS0+b3JpZW50YXRpb24oKSk7
Ci19Ci0KLVdlYktpdFBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50
KFFXaGVlbEV2ZW50KiBlKQorV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50OjpXZWJLaXRQbGF0Zm9y
bVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGUsIGludCB3aGVlbFNjcm9sbExpbmVzKQogewogICAg
IG1fdGltZXN0YW1wID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIG1vdXNlRXZlbnRNb2RpZmll
cnNGcm9tUXRLZXlib2FyZE1vZGlmaWVycyhlLT5tb2RpZmllcnMoKSwgbV9tb2RpZmllcnMpOwpA
QCAtMjIxLDcgKzE1NSw3IEBAIFdlYktpdFBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0UGxhdGZv
cm1XaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBlKQogICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBlLT5n
bG9iYWxQb3MoKTsKICAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7
CiAgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBmYWxzZTsKLSAgICBhcHBseURl
bHRhKGUtPmRlbHRhKCksIGUtPm9yaWVudGF0aW9uKCkpOworICAgIGFwcGx5RGVsdGEoZS0+ZGVs
dGEoKSwgZS0+b3JpZW50YXRpb24oKSwgd2hlZWxTY3JvbGxMaW5lcyk7CiB9CiAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzA5LDQzICsyNDMsMzUgQEAgV2ViS2l0UGxhdGZvcm1Ub3Vj
aFBvaW50OjpXZWJLaXRQbGF0Zm9ybVRvdWNoUG9pbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNo
UG9pbnQKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiBjbGFzcyBXZWJLaXRQbGF0Zm9ybUdl
c3R1cmVFdmVudCA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVFdmVudCB7CiBwdWJsaWM6Ci0gICAg
V2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQoY29uc3QgUUdlc3R1cmVFdmVudCosIGNvbnN0IFFH
ZXN0dXJlKik7CisgICAgV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQoUUdlc3R1cmVFdmVudEZh
Y2FkZSopOwogfTsKIAotV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OldlYktpdFBsYXRmb3Jt
R2VzdHVyZUV2ZW50KGNvbnN0IFFHZXN0dXJlRXZlbnQqIGV2ZW50LCBjb25zdCBRR2VzdHVyZSog
Z2VzdHVyZSkKK3N0YXRpYyBpbmxpbmUgUGxhdGZvcm1FdmVudDo6VHlwZSB0b1BsYXRmb3JtRXZl
bnRUeXBlKFF0OjpHZXN0dXJlVHlwZSB0eXBlKQogewotICAgIHN3aXRjaCAoZ2VzdHVyZS0+Z2Vz
dHVyZVR5cGUoKSkgewotICAgIGNhc2UgUXQ6OlRhcEdlc3R1cmU6IHsKLSAgICAgICAgbV90eXBl
ID0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcDsKLSAgICAgICAgUVBvaW50RiBnbG9iYWxQb3Mg
PSBzdGF0aWNfY2FzdDxjb25zdCBRVGFwR2VzdHVyZSo+KGdlc3R1cmUpLT5wb3NpdGlvbigpOwot
ICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9zLnRvUG9pbnQoKTsKLSAgICAgICAg
bV9wb3NpdGlvbiA9IGV2ZW50LT53aWRnZXQoKS0+bWFwRnJvbUdsb2JhbChnbG9iYWxQb3MudG9Q
b2ludCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUXQ6OlRhcEFuZEhvbGRH
ZXN0dXJlOiB7Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVMb25nUHJl
c3M7Ci0gICAgICAgIFFQb2ludEYgZ2xvYmFsUG9zID0gc3RhdGljX2Nhc3Q8Y29uc3QgUVRhcEFu
ZEhvbGRHZXN0dXJlKj4oZ2VzdHVyZSktPnBvc2l0aW9uKCk7Ci0gICAgICAgIG1fZ2xvYmFsUG9z
aXRpb24gPSBnbG9iYWxQb3MudG9Qb2ludCgpOwotICAgICAgICBtX3Bvc2l0aW9uID0gZXZlbnQt
PndpZGdldCgpLT5tYXBGcm9tR2xvYmFsKGdsb2JhbFBvcy50b1BvaW50KCkpOwotICAgICAgICBi
cmVhazsKLSAgICB9CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBRdDo6VGFwR2VzdHVy
ZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA7CisgICAgY2FzZSBR
dDo6VGFwQW5kSG9sZEdlc3R1cmU6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpHZXN0
dXJlTG9uZ1ByZXNzOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZTsK
ICAgICB9Ci0gICAgbV90aW1lc3RhbXAgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CiB9CiAKLSNlbmRp
ZgotCi1QbGF0Zm9ybVdoZWVsRXZlbnQgY29udmVydFdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGV2
ZW50KQorV2ViS2l0UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OldlYktpdFBsYXRmb3JtR2VzdHVyZUV2
ZW50KFFHZXN0dXJlRXZlbnRGYWNhZGUqIGV2ZW50KQogewotICAgIHJldHVybiBXZWJLaXRQbGF0
Zm9ybVdoZWVsRXZlbnQoZXZlbnQpOworICAgIG1fdHlwZSA9IHRvUGxhdGZvcm1FdmVudFR5cGUo
ZXZlbnQtPnR5cGUpOworICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBldmVudC0+Z2xvYmFsUG9zOwor
ICAgIG1fcG9zaXRpb24gPSBldmVudC0+cG9zOworICAgIG1fdGltZXN0YW1wID0gV1RGOjpjdXJy
ZW50VGltZSgpOwogfQogCi1QbGF0Zm9ybVdoZWVsRXZlbnQgY29udmVydFdoZWVsRXZlbnQoUUdy
YXBoaWNzU2NlbmVXaGVlbEV2ZW50KiBldmVudCkKKyNlbmRpZgorCitQbGF0Zm9ybVdoZWVsRXZl
bnQgY29udmVydFdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGV2ZW50LCBpbnQgd2hlZWxTY3JvbGxM
aW5lcykKIHsKLSAgICByZXR1cm4gV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KGV2ZW50KTsKKyAg
ICByZXR1cm4gV2ViS2l0UGxhdGZvcm1XaGVlbEV2ZW50KGV2ZW50LCB3aGVlbFNjcm9sbExpbmVz
KTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC0zNTYsMTAgKzI4Miw5IEBAIFBs
YXRmb3JtVG91Y2hFdmVudCBjb252ZXJ0VG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKLVBsYXRmb3JtR2VzdHVyZUV2ZW50
IGNvbnZlcnRHZXN0dXJlKFFHZXN0dXJlRXZlbnQqIGV2ZW50LCBRR2VzdHVyZSogZ2VzdHVyZSkK
K1BsYXRmb3JtR2VzdHVyZUV2ZW50IGNvbnZlcnRHZXN0dXJlKFFHZXN0dXJlRXZlbnRGYWNhZGUq
IGV2ZW50KQogewotICAgIHJldHVybiBXZWJLaXRQbGF0Zm9ybUdlc3R1cmVFdmVudChldmVudCwg
Z2VzdHVyZSk7CisgICAgcmV0dXJuIFdlYktpdFBsYXRmb3JtR2VzdHVyZUV2ZW50KGV2ZW50KTsK
IH0KICNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1dlYkV2ZW50Q29udmVyc2lvbi5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9XZWJFdmVudENvbnZlcnNpb24uaAppbmRleCAzMjI0ZWVlOTA5NmZlZDRlNTQyN2E3Y2RlNTAy
NTMxMGJlMGMyZGJjLi4wY2Y4Y2Q4NDk2MDZlZGNjZDc1YmRkNGEzNDNhMWJiNjMzZTMwZjBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVy
c2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252
ZXJzaW9uLmgKQEAgLTE5LDI3ICsxOSwzMCBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogKi8KIAotI2luY2x1ZGUgPHFnbG9iYWwuaD4KKyNpZm5kZWYgV2ViRXZlbnRDb252ZXJz
aW9uX2gKKyNkZWZpbmUgV2ViRXZlbnRDb252ZXJzaW9uX2gKKworI2luY2x1ZGUgPFFQb2ludD4K
IAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRSW5wdXRFdmVudDsKLWNsYXNzIFFHcmFwaGlj
c1NjZW5lTW91c2VFdmVudDsKIGNsYXNzIFFXaGVlbEV2ZW50OwotY2xhc3MgUUdyYXBoaWNzU2Nl
bmVXaGVlbEV2ZW50OwogY2xhc3MgUVRvdWNoRXZlbnQ7Ci1jbGFzcyBRR2VzdHVyZTsKLWNsYXNz
IFFHZXN0dXJlRXZlbnQ7CiBRVF9FTkRfTkFNRVNQQUNFCiAKK3N0cnVjdCBRR2VzdHVyZUV2ZW50
RmFjYWRlIHsKKyAgICBRdDo6R2VzdHVyZVR5cGUgdHlwZTsKKyAgICBRUG9pbnQgZ2xvYmFsUG9z
OworICAgIFFQb2ludCBwb3M7Cit9OworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBs
YXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIAogUGxhdGZvcm1N
b3VzZUV2ZW50IGNvbnZlcnRNb3VzZUV2ZW50KFFJbnB1dEV2ZW50KiwgaW50IGNsaWNrQ291bnQp
OwotUGxhdGZvcm1Nb3VzZUV2ZW50IGNvbnZlcnRNb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91
c2VFdmVudCosIGludCBjbGlja0NvdW50KTsKLVBsYXRmb3JtV2hlZWxFdmVudCBjb252ZXJ0V2hl
ZWxFdmVudChRV2hlZWxFdmVudCopOwotUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZlcnRXaGVlbEV2
ZW50KFFHcmFwaGljc1NjZW5lV2hlZWxFdmVudCopOworUGxhdGZvcm1XaGVlbEV2ZW50IGNvbnZl
cnRXaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiwgaW50IHdoZWVsU2Nyb2xsTGluZXMpOwogCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKQEAgLTQ4LDYg
KzUxLDggQEAgUGxhdGZvcm1Ub3VjaEV2ZW50IGNvbnZlcnRUb3VjaEV2ZW50KFFUb3VjaEV2ZW50
Kik7CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVF
dmVudDsKLVBsYXRmb3JtR2VzdHVyZUV2ZW50IGNvbnZlcnRHZXN0dXJlKFFHZXN0dXJlRXZlbnQq
LCBRR2VzdHVyZSopOworUGxhdGZvcm1HZXN0dXJlRXZlbnQgY29udmVydEdlc3R1cmUoUUdlc3R1
cmVFdmVudEZhY2FkZSopOwogI2VuZGlmCiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLmgKaW5kZXggNDY3YjVi
YTM3NGY1Y2MxMzM5ZTEwODQ1ODZjMmI3Y2ZmZGI3MjI4Ni4uOWIwM2Q0YWZjYjJmODI0OTAxMDZk
YjA0NDAyZDlhODhmYWFlOWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5oCkBAIC0yNiw2ICsyNiwxMSBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCisjaWZuZGVmIFdlYlN5c3RlbUludGVyZmFjZV9oCisjZGVmaW5lIFdlYlN5
c3RlbUludGVyZmFjZV9oCisKICNpbmNsdWRlIDxzdGRpbnQuaD4KIAogdm9pZCBJbml0V2ViQ29y
ZVN5c3RlbUludGVyZmFjZSgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcAppbmRleCBmZjQwYjU1ZjAzOWJhNzUyMmE5YWYz
MzJiMWRkZjM3OTc4ZTkzNmM3Li5mZDgyYzI4NzYxNGM5MWVhNjc5MjUxOGY4Njc5NWU3MjIzNDFi
YWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2Vi
cGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBh
Z2UuY3BwCkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6OmxvYWRIdG1sNVZp
ZGVvKCkKICAgICBRQnl0ZUFycmF5IHVybCgiaHR0cDovL2RvZXMubm90L2V4aXN0P2E9MSUyQ2I9
MiIpOwogICAgIG1fdmlldy0+c2V0SHRtbCgiPHA+PHZpZGVvIGlkID0ndmlkZW8nIHNyYz0nIiAr
IHVybCArICInIGF1dG9wbGF5Lz48L3A+Iik7CiAgICAgUVRlc3Q6OnFXYWl0KDIwMDApOwotICAg
IFFVcmwgbVVybCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjptZWRpYUNvbnRlbnRVcmxCeUVs
ZW1lbnRJZChtX3BhZ2UtPm1haW5GcmFtZSgpLCAidmlkZW8iKTsKKyAgICBRVXJsIG1VcmwgPSBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bWVkaWFDb250ZW50VXJsQnlFbGVtZW50SWQobV9wYWdl
LT5tYWluRnJhbWUoKS0+aGFuZGxlKCksICJ2aWRlbyIpOwogICAgIFFFWFBFQ1RfRkFJTCgiIiwg
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ1MiIsIENvbnRpbnVl
KTsKICAgICBRQ09NUEFSRShtVXJsLnRvRW5jb2RlZCgpLCB1cmwpOwogI2Vsc2UKQEAgLTEwMjYs
MTIgKzEwMjYsMTIgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6Om11bHRpcGxlUGFnZUdyb3Vwc0FuZExv
Y2FsU3RvcmFnZSgpCiAKICAgICB2aWV3MS5wYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3RvcmFnZUVuYWJsZWQsIHRydWUpOwogICAgIHZpZXcxLnBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0TG9jYWxTdG9yYWdlUGF0aChRRGlyOjp0b05hdGl2ZVNlcGFy
YXRvcnModG1wRGlyUGF0aCgpICsgIi9wYXRoMSIpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZSh2aWV3MS5wYWdlKCksICJncm91cDEiKTsKKyAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZSh2aWV3MS5wYWdlKCkt
PmhhbmRsZSgpLCAiZ3JvdXAxIik7CiAgICAgdmlldzIucGFnZSgpLT5zZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbFN0b3JhZ2VFbmFibGVkLCB0cnVlKTsgICAgCiAg
ICAgdmlldzIucGFnZSgpLT5zZXR0aW5ncygpLT5zZXRMb2NhbFN0b3JhZ2VQYXRoKFFEaXI6OnRv
TmF0aXZlU2VwYXJhdG9ycyh0bXBEaXJQYXRoKCkgKyAiL3BhdGgyIikpOwotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBOYW1lKHZpZXcyLnBhZ2UoKSwgImdyb3Vw
MiIpOwotICAgIFFDT01QQVJFKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBO
YW1lKHZpZXcxLnBhZ2UoKSksIFFTdHJpbmcoImdyb3VwMSIpKTsKLSAgICBRQ09NUEFSRShEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZUdyb3VwTmFtZSh2aWV3Mi5wYWdlKCkpLCBRU3Ry
aW5nKCJncm91cDIiKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYlBhZ2VTZXRH
cm91cE5hbWUodmlldzIucGFnZSgpLT5oYW5kbGUoKSwgImdyb3VwMiIpOworICAgIFFDT01QQVJF
KER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlR3JvdXBOYW1lKHZpZXcxLnBhZ2UoKS0+
aGFuZGxlKCkpLCBRU3RyaW5nKCJncm91cDEiKSk7CisgICAgUUNPTVBBUkUoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OndlYlBhZ2VHcm91cE5hbWUodmlldzIucGFnZSgpLT5oYW5kbGUoKSksIFFT
dHJpbmcoImdyb3VwMiIpKTsKIAogCiAgICAgdmlldzEuc2V0SHRtbChRU3RyaW5nKCI8aHRtbD48
Ym9keT4gPC9ib2R5PjwvaHRtbD4iKSwgUVVybCgiaHR0cDovL3d3dy5teWV4YW1wbGUuY29tIikp
OwpAQCAtMzA2MiwzNSArMzA2MiwzNSBAQCB2b2lkIHRzdF9RV2ViUGFnZTo6dGhpcmRQYXJ0eUNv
b2tpZVBvbGljeSgpCiAgICAgUVZFUklGWShtX3BhZ2UtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpKTsKIAogICAgIC8vIFRoZXNlIGFyZSBhbGwgZmlyc3QtcGFydHkgY29va2ll
cywgc28gc2hvdWxkIHBhc3MuCi0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhh
bmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLCBRVXJs
KCJodHRwOi8vZXhhbXBsZS5jb20iKSkpOwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlko
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9w
YWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20i
KSwgUVVybCgiaHR0cDovL2RvYy5leGFtcGxlLmNvbSIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisg
ICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2FhYS53
d3cuZXhhbXBsZS5jb20iKSwgUVVybCgiaHR0cDovL2RvYy5leGFtcGxlLmNvbSIpKSk7Ci0gICAg
UVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFs
bG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVy
bCgiaHR0cDovL2V4YW1wbGUuY29tIiksIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKSkp
OwotICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQ
b2xpY3lBbGxvd3MobV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAg
ICAgIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZXhhbXBs
ZS5jby51ayIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWShEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgp
LAogICAgICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5leGFtcGxlLmNvLnVrIiksIFFVcmwoImh0
dHA6Ly9kb2MuZXhhbXBsZS5jby51ayIpKSk7Ci0gICAgUVZFUklGWShEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklG
WShEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyht
X3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAgUVVybCgiaHR0cDovL2FhYS53d3cuZXhhbXBs
ZS5jby51ayIpLCBRVXJsKCJodHRwOi8vZG9jLmV4YW1wbGUuY28udWsiKSkpOwotICAgIFFWRVJJ
RlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3Mo
bV9wYWdlLAorICAgIFFWRVJJRlkoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlD
b29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0
dHA6Ly9leGFtcGxlLmNvLnVrIiksIFFVcmwoImh0dHA6Ly93d3cuZXhhbXBsZS5jby51ayIpKSk7
CiAKICAgICAvLyBUaGVzZSBhcmUgYWxsIHRoaXJkLXBhcnR5IGNvb2tpZXMsIHNvIHNob3VsZCBm
YWlsLgotICAgIFFWRVJJRlkoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29v
a2llUG9saWN5QWxsb3dzKG1fcGFnZSwKKyAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAg
ICAgICAgICAgUVVybCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRwOi8vc2xh
c2hkb3Qub3JnIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhp
cmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5k
bGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9leGFtcGxlLmNvbSIpLCBRVXJsKCJodHRw
Oi8vYW5vdGhlcmV4YW1wbGUuY29tIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklG
WSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3Mo
bV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9hbm90aGVyZXhhbXBs
ZS5jb20iKSwgUVVybCgiaHR0cDovL2V4YW1wbGUuY29tIikpKTsKLSAgICBRVkVSSUZZKCFEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2Us
CisgICAgUVZFUklGWSghRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQ
b2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUoKSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly93
d3cuZXhhbXBsZS5jby51ayIpLCBRVXJsKCJodHRwOi8vc2xhc2hkb3QuY28udWsiKSkpOwotICAg
IFFWRVJJRlkoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0aGlyZFBhcnR5Q29va2llUG9saWN5
QWxsb3dzKG1fcGFnZSwKKyAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhp
cmRQYXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UtPmhhbmRsZSgpLAogICAgICAgICAgICAg
UVVybCgiaHR0cDovL2V4YW1wbGUuY28udWsiKSwgUVVybCgiaHR0cDovL2Fub3RoZXJleGFtcGxl
LmNvLnVrIikpKTsKLSAgICBRVkVSSUZZKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6dGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeUFsbG93cyhtX3BhZ2UsCisgICAgUVZFUklGWSghRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnRoaXJkUGFydHlDb29raWVQb2xpY3lBbGxvd3MobV9wYWdlLT5oYW5kbGUo
KSwKICAgICAgICAgICAgIFFVcmwoImh0dHA6Ly9hbm90aGVyZXhhbXBsZS5jby51ayIpLCBRVXJs
KCJodHRwOi8vZXhhbXBsZS5jby51ayIpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL3F0L01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCmluZGV4IDFl
MWNlMmIzZDAxNWFkMzgwNTJjOWVmNTA2MTg4ZGUzOTRhYzQ1MzYuLjA5OTBjMDFmODcyNDhmNWMw
NTQyMjBjYWJiMTg5ZDc0NGEyMzYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL3F0L01h
aW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcApAQCAtNDIsOSArNDIs
MTAgQEAgdHlwZWRlZiBRQXBwbGljYXRpb24gQXBwbGljYXRpb25UeXBlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIFFfREVDTF9JTVBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0
aW9uKik7Ci0jaWYgZGVmaW5lZChIQVZFX1dFQktJVDEpCi1RX0RFQ0xfSU1QT1JUIHZvaWQgaW5p
dGlhbGl6ZVdlYktpdDJUaGVtZSgpOworI2lmICFkZWZpbmVkKFFUX05PX1dJREdFVFMpCitRX0RF
Q0xfSU1QT1JUIHZvaWQgaW5pdGlhbGl6ZVdlYktpdFdpZGdldHMoKTsKICNlbmRpZgorUV9ERUNM
X0lNUE9SVCB2b2lkIGluaXRpYWxpemVXZWJLaXRRdCgpOwogfQogCiAjaWYgIWRlZmluZWQoTkRF
QlVHKSAmJiBkZWZpbmVkKFFfT1NfVU5JWCkKQEAgLTgyLDE1ICs4MywyMyBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVf
V0VCS0lUMSkKLSAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXQyVGhlbWUoKTsKLSNlbmRpZgot
CiAgICAgLy8gSGFzIHRvIGJlIGRvbmUgYmVmb3JlIFFBcHBsaWNhdGlvbiBpcyBjb25zdHJ1Y3Rl
ZCBpbiBjYXNlCiAgICAgLy8gUUFwcGxpY2F0aW9uIGl0c2VsZiBwcm9kdWNlcyBkZWJ1ZyBvdXRw
dXQuCiAgICAgUUJ5dGVBcnJheSBzdXBwcmVzc091dHB1dCA9IHFnZXRlbnYoIlFUX1dFQktJVF9T
VVBQUkVTU19XRUJfUFJPQ0VTU19PVVRQVVQiKTsKICAgICBpZiAoIXN1cHByZXNzT3V0cHV0Lmlz
RW1wdHkoKSAmJiBzdXBwcmVzc091dHB1dCAhPSAiMCIpCiAgICAgICAgIHFJbnN0YWxsTWVzc2Fn
ZUhhbmRsZXIobWVzc2FnZUhhbmRsZXIpOwogCi0gICAgcmV0dXJuIFdlYktpdDo6V2ViUHJvY2Vz
c01haW5RdChuZXcgQXBwbGljYXRpb25UeXBlKGFyZ2MsIGFyZ3YpKTsKKyAgICAvLyBRQXBwbGlj
YXRpb24gbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB3ZSBjYWxsIGluaXRpYWxpemVXZWJLaXRXaWRn
ZXRzKCkgc28gdGhhdAorICAgIC8vIHRoZSBzdGFuZGFyZCBwaXhtYXBzIGNhbiBiZSBmZXRjaGVk
IGZyb20gdGhlIHN0eWxlLgorICAgIEFwcGxpY2F0aW9uVHlwZSogYXBwSW5zdGFuY2UgPSBuZXcg
QXBwbGljYXRpb25UeXBlKGFyZ2MsIGFyZ3YpOworCisjaWYgIWRlZmluZWQoUVRfTk9fV0lER0VU
UykKKyAgICBpZiAocWdldGVudigiUVRfV0VCS0lUX1RIRU1FX05BTUUiKSA9PSAicXN0eWxlIikK
KyAgICAgICAgV2ViS2l0Ojppbml0aWFsaXplV2ViS2l0V2lkZ2V0cygpOworICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRRdCgpOworCisKKyAgICByZXR1
cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KGFwcEluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9hcGkucHJpIGIvU291cmNlL2FwaS5wcmkKaW5kZXggYTQ3YjczNTlkZThmOGI3OWMx
Yjc5MDNjYzBjOTA4NTU5ZDI5YWFiYi4uZjZjM2MzYzc1Zjc2ZjIwZGVlMTUzZDhjNDYyMDU5NDYz
OGYxNDA2OSAxMDA2NDQKLS0tIGEvU291cmNlL2FwaS5wcmkKKysrIGIvU291cmNlL2FwaS5wcmkK
QEAgLTE0LDEyICsxNCwxNSBAQCBXRUJLSVRfREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9s
aWIKIAogV0VCS0lUICs9IHd0ZiBqYXZhc2NyaXB0Y29yZSB3ZWJjb3JlCiAKLWJ1aWxkPyh3ZWJr
aXQxKTogV0VCS0lUICs9IHdlYmtpdDEKK2J1aWxkPyh3ZWJraXQxKTogV0VCS0lUICs9IHdlYmtp
dHdpZGdldHMgd2Via2l0MQogYnVpbGQ/KHdlYmtpdDIpOiBXRUJLSVQgKz0gd2Via2l0MgogCiAj
IEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhlIFdlYktpdDEgYW5kIFdlYktpdDIgQVBJIHdpbGwg
dHJpZ2dlciBhIHFtYWtlIG9mIHRoaXMKICMgZmlsZSwgd2hpY2ggaW4gdHVybiBydW5zIHN5bmNx
dCB0byB1cGRhdGUgdGhlIGZvcndhcmRpbmcgaGVhZGVycy4KLWJ1aWxkPyh3ZWJraXQxKTogUU1B
S0VfSU5URVJOQUxfSU5DTFVERURfRklMRVMgKj0gV2ViS2l0L1dlYktpdDEucHJvCitidWlsZD8o
d2Via2l0MSk6IHsKKyAgICBRTUFLRV9JTlRFUk5BTF9JTkNMVURFRF9GSUxFUyAqPSBXZWJLaXQv
V2ViS2l0MS5wcm8KKyAgICBRTUFLRV9JTlRFUk5BTF9JTkNMVURFRF9GSUxFUyAqPSBXZWJLaXQv
V2ViS2l0V2lkZ2V0cy5wcm8KK30KIGJ1aWxkPyh3ZWJraXQyKTogUU1BS0VfSU5URVJOQUxfSU5D
TFVERURfRklMRVMgKj0gV2ViS2l0Mi9UYXJnZXQucHJpCiAKIHVzZT8oM0RfR1JBUEhJQ1MpOiBX
RUJLSVQgKz0gYW5nbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA2ZTY1OWJiMDQ2NjU5Mzg3M2FkYzBjYWEzN2JkNDczNzBkNjUyMjMxLi5mNTdi
MDIwY2ZiYTY0YzdiZjU4NTQwNmViOTVkZDVkMzI2MTAyOGFiIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIwMTItMTEt
MjIgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgorCisgICAgICAg
IFtRdF0gU2VwYXJhdGUgUVdpZGdldCBkZXBlbmRhbnQgY29kZSBpbnRvIHNlcGFyYXRlIFdlYktp
dFdpZGdldHMgc3RhdGljIGxpYnJhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMjgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggc2VwYXJhdGVzIGNvZGUgdGhhdCBuZWVkcyB0byB1
c2UgUVdpZGdldCByZWxhdGVkIEFQSXMgaW4KKyAgICAgICAgV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0IGFuZCBBcGkgZnJvbSBjb2RlIHRoYXQgZG9lc24ndC4gVGhpcyBtZWFucyBmb3IKKyAgICAg
ICAgZXhhbXBsZSBGcmFtZUxvYWRlckNsaWVudFF0LmNwcCByZW1haW5zIGluIHRoZSBXZWJLaXQx
IHN0YXRpYyBsaWJyYXJ5LAorICAgICAgICB3aGlsZSBxd2VicGFnZS5jcHAgYW5kIHF3ZWJmcmFt
ZS5jcHAgYmVjb21lIHBhcnQgb2YgdGhlIFdlYktpdFdpZGdldHMKKyAgICAgICAgc3RhdGljIGxp
YnJhcnkuIFdlYktpdDEgaXMgY29tcGlsZWQgd2l0aG91dCBRVCArPSB3aWRnZXRzIGFuZCB0aGVy
ZWZvcmUKKyAgICAgICAgYW55IHdpZGdldCByZWxhdGVkIGRlcGVuZGVuY3kgaGFzIGJlZW4gbW92
ZWQgInVwIiBhbmQgb3V0IG9mIFdlYktpdDEgaW50bworICAgICAgICB0aGUgV2ViS2l0V2lkZ2V0
cyBsaWJyYXJ5LgorCisgICAgICAgIEJldHdlZW4gdGhlIGNvZGUgaW4gV2ViS2l0LmEgYW5kIFdl
YktpdFdpZGdldHMuYSBuZXcgYWRhcHRlcnMgYW5kCisgICAgICAgIGludGVyZmFjZXMgaGF2ZSBi
ZWVuIGludHJvZHVjZWQsIHN1Y2ggYXMgUVdlYlBhZ2VBZGFwdGVyIGFuZAorICAgICAgICBRV2Vi
RnJhbWVBZGFwdGVyLiBRV2ViUGFnZUFkYXB0ZXIsIHdoZW4gdXNlZCBmcm9tIFdlYktpdDEsIGlz
IGEgd2F5IHRvCisgICAgICAgIGNhbGwgb3V0IGludG8gdGhlIEFQSSBsYXllciwgaW1wbGVtZW50
ZWQgYnkgUVdlYlBhZ2UgKFFXZWJQYWdlUHJpdmF0ZSkuCisgICAgICAgIFRoZSBvdGhlciB3YXkg
YXJvdW5kIGlmIFFXZWJQYWdlIHdhbnRzIHRvIGFjY2VzcyBXZWJDb3JlIG9yCisgICAgICAgIFdl
YkNvcmVTdXBwb3J0IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSwgaXQgd2lsbCBnbyB0aHJvdWdoCisg
ICAgICAgIFFXZWJQYWdlQWRhcGF0ZXIgKGFzIGJhc2UgY2xhc3MpLiBUaGUgc2VwYXJhdGlvbiBp
biB0aGUgZGlyZWN0aW9uIHVwCisgICAgICAgIGludG8gdGhlIEFQSSBsYXllciBpcyBjb21wbGV0
ZSB3aXRoIHRoaXMgcGF0Y2gsIG5vIGNvZGUgaW4gV2ViS2l0MQorICAgICAgICBkZXBlbmRzIG9u
IFF0V2lkZ2V0cy4gVGhlIHNlcGFyYXRpb24gdGhlIG90aGVyIHdheSBhcm91bmQsIGNvZGUgaW4g
dGhlCisgICAgICAgIEFQSSBsYXllciBub3QgdXNpbmcgYW55IFdlYkNvcmUgdHlwZXMsIGlzIG5v
dCBjb21wbGV0ZSB5ZXQuCisKKyAgICAgICAgU29tZSBjbGFzc2VzIHN1Y2ggYXMgUVdlYlNldHRp
bmdzLCBRV2ViRWxlbWVudCBvcgorICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdCByZW1h
aW4gaW4gV2ViS2l0MS4gV2hpbGUgdGhleSBhcmUgQVBJIGxheWVyLAorICAgICAgICB0aGV5IGRv
IG5vdCBkZXBlbmQgb24gd2lkZ2V0IHJlbGF0ZWQgUXQgQVBJcyBhbmQgdGhleSBtYWtlIG11Y2gg
bW9yZQorICAgICAgICB1c2Ugb2YgV2ViQ29yZSBpbnRlcm5hbCBBUElzIGFuZCB0aGVyZWZvcmUg
YXJlIGVhc2llciB0byBrZWVwIGluCisgICAgICAgIFdlYktpdDEuCisKKyAgICAgICAgSW4gdGhl
IGZ1dHVyZSB3ZSBwbGFuIHRvIHBsYWNlIGEgcmVhbCBzaGFyZWQgbGlicmFyeSBib3VuZGFyeSBi
ZXR3ZWVuCisgICAgICAgIFdlYktpdDEgYW5kIFdlYktpdFdpZGdldHMsIGJ5IGtlZXBpbmcgdGhl
IFdlYktpdDEgc3RhdGljIGxpYnJhcnkgYXMKKyAgICAgICAgcGFydCBvZiB0aGUgUXRXZWJLaXQg
c2hhcmVkIGxpYnJhcnkgYW5kIGJ5IHR1cm5pbmcgdGhlIFdlYktpdFdpZGdldHMKKyAgICAgICAg
c3RhdGljIGxpYnJhcnkgaW50byBhIHNoYXJlZCBvbmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6
OnJlc2V0U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6Y3JlYXRlV2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJl
Zm9yZVRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OmluaXRKU09i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OmR1bXBGcmFtZVNjcm9s
bFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpkdW1wRnJhbWVz
QXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6RHVtcFJlbmRlclRyZWU6OnBhZ2VBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6Om1haW5GcmFtZUFkYXB0ZXIpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0
LmNwcDoKKyAgICAgICAgKEV2ZW50U2VuZGVyOjpjb250ZXh0Q2xpY2spOgorICAgICAgICAoRXZl
bnRTZW5kZXI6OnNjYWxlUGFnZUJ5KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9UZXN0
UnVubmVyUXQuY3BwOgorICAgICAgICAoVGVzdFJ1bm5lcjo6cmVzZXQpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6ZGlzcGxheSk6CisgICAgICAgIChUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3Rv
cik6CisgICAgICAgIChUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKToKKyAgICAgICAgKFRl
c3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6
c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpnb0JhY2sp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChUZXN0
UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChU
ZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAg
ICAoVGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKFRlc3RS
dW5uZXI6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldyk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRTbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKFRlc3RSdW5u
ZXI6OmZpbmRTdHJpbmcpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29t
cGxldGVGb3JFbGVtZW50V2l0aElkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE1vY2tEZXZp
Y2VPcmllbnRhdGlvbik6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24pOgorICAgICAgICAoVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwOgorICAg
ICAgICAoVGV4dElucHV0Q29udHJvbGxlcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChUZXh0
SW5wdXRDb250cm9sbGVyOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgIChU
ZXh0SW5wdXRDb250cm9sbGVyOjp1bm1hcmtUZXh0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9xdC9Xb3JrUXVldWVJdGVtUXQuY3BwOgorICAgICAgICAoTG9hZEFsdGVybmF0ZUhUTUxTdHJp
bmdJdGVtOjppbnZva2UpOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVmYXVs
dF9wb3N0LnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3Byb2R1Y3Rpb25f
YnVpbGQucHJmOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Via2l0X21vZHVs
ZXMucHJmOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvbW9kdWxlcy93ZWJraXR3aWRnZXRzLnBy
ZjogQWRkZWQuCisKIDIwMTItMTEtMjIgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtRdF1bV1RSXSBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRp
bCBzaG91bGQgbm90IGRvIGJ1c3kgd2FpdGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmNwcAppbmRleCAzNGVlNWFkNGExZTUyM2U1OGEzN2YzMDEyMGI5MDdm
Nzk5YjJhODY1Li4xNmMyMzc4NjZlMTc1YWM4ZDJlOTg4Yzk2MjVkYzU0NDcwYzU5MDljIDEwMDc1
NQotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcApAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCiAjaW5jbHVkZSAi
RXZlbnRTZW5kZXJRdC5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlclF0LmgiCisjaW5jbHVkZSAi
SW5pdFdlYktpdFF0LmgiCiAjaW5jbHVkZSAiUXRUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIlRl
c3RSdW5uZXJRdC5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXJRdC5oIgpAQCAtNjIs
MTkgKzYzLDE0IEBACiAjaW5jbHVkZSA8UVByb2dyZXNzQmFyPgogI2luY2x1ZGUgPFFVbmRvU3Rh
Y2s+CiAjaW5jbHVkZSA8UVVybD4KLQotI2luY2x1ZGUgPHF3ZWJzZXR0aW5ncy5oPgotI2luY2x1
ZGUgPHF3ZWJzZWN1cml0eW9yaWdpbi5oPgotCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVk
ZSA8bG9jYWxlLmg+Ci0KKyNpbmNsdWRlIDxxd2Vic2VjdXJpdHlvcmlnaW4uaD4KKyNpbmNsdWRl
IDxxd2Vic2V0dGluZ3MuaD4KICNpZm5kZWYgUV9PU19XSU4KICNpbmNsdWRlIDx1bmlzdGQuaD4K
ICNlbmRpZgogCi0jaW5jbHVkZSA8cWRlYnVnLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y29uc3QgaW50IGRhdGFiYXNlRGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwpAQCAtMjA2
LDE0ICsyMDIsMTQgQEAgdm9pZCBXZWJQYWdlOjpyZXNldFNldHRpbmdzKCkKICAgICBRV2ViU2V0
dGluZ3M6OnNldE1heGltdW1QYWdlc0luQ2FjaGUoMCk7IC8vIHJlc2V0IHRvIGRlZmF1bHQKICAg
ICBzZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOyAvLyByZXNldCB0byBk
ZWZhdWx0CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50
ZXJ2YWwodGhpcywgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRlZmF1bHRNaW5pbXVtVGltZXJJ
bnRlcnZhbCgpKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVy
SW50ZXJ2YWwoaGFuZGxlKCksIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWZhdWx0TWluaW11
bVRpbWVySW50ZXJ2YWwoKSk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJ
bnRlcm5hbHNPYmplY3QobWFpbkZyYW1lKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpyZXNldEludGVybmFsc09iamVjdChtYWluRnJhbWUoKS0+aGFuZGxlKCkpOwogCiAgICAgbV9w
ZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5jbGVhcigpOwogfQogCi1RV2ViUGFnZSAqV2ViUGFn
ZTo6Y3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlKQorUVdlYlBhZ2UqIFdlYlBh
Z2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSkKIHsKICAgICByZXR1cm4g
bV9kcnQtPmNyZWF0ZVdpbmRvdygpOwogfQpAQCAtMzk5LDYgKzM5NSw3IEBAIER1bXBSZW5kZXJU
cmVlOjpEdW1wUmVuZGVyVHJlZSgpCiAgICAgaWYgKHZpZXdNb2RlID09ICJncmFwaGljcyIpCiAg
ICAgICAgIHNldEdyYXBoaWNzQmFzZWQodHJ1ZSk7CiAKKyAgICBXZWJLaXQ6OmluaXRpYWxpemVX
ZWJLaXRXaWRnZXRzKCk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluaXRpYWxpemUo
KTsKIAogICAgIC8vIFNldCBydW5uaW5nIGluIERSVCBtb2RlIGZvciBxd2VicGFnZSB0byBjcmVh
dGUgdGVzdGFibGUgb2JqZWN0cy4KQEAgLTQyMSw3ICs0MTgsNyBAQCBEdW1wUmVuZGVyVHJlZTo6
RHVtcFJlbmRlclRyZWUoKQogICAgIH0KICAgICAvLyBVc2UgYSBmcmFtZSBncm91cCBuYW1lIGZv
ciBhbGwgcGFnZXMgY3JlYXRlZCBieSBEdW1wUmVuZGVyVHJlZSB0byBhbGxvdwogICAgIC8vIHRl
c3Rpbmcgb2YgY3Jvc3MtcGFnZSBmcmFtZSBsb29rdXAuCi0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OndlYlBhZ2VTZXRHcm91cE5hbWUobV9wYWdlLCAib3JnLndlYmtpdC5xdC5EdW1wUmVu
ZGVyVHJlZSIpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBO
YW1lKHBhZ2VBZGFwdGVyKCksICJvcmcud2Via2l0LnF0LkR1bXBSZW5kZXJUcmVlIik7CiAKICAg
ICBtX21haW5WaWV3LT5zZXRDb250ZXh0TWVudVBvbGljeShRdDo6Tm9Db250ZXh0TWVudSk7CiAg
ICAgbV9tYWluVmlldy0+cmVzaXplKFFTaXplKFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aCwgVGVz
dFJ1bm5lcjo6bWF4Vmlld0hlaWdodCkpOwpAQCAtNDcwLDcgKzQ2Nyw3IEBAIER1bXBSZW5kZXJU
cmVlOjpEdW1wUmVuZGVyVHJlZSgpCiAgICAgUU9iamVjdDo6Y29ubmVjdCh0aGlzLCBTSUdOQUwo
cXVpdCgpKSwgcUFwcCwgU0xPVChxdWl0KCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CiAKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RHVtcFJlbmRlclRyZWVNb2RlRW5hYmxlZCh0
cnVlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0SW50ZXJhY3RpdmVGb3JtVmFs
aWRhdGlvbkVuYWJsZWQod2ViUGFnZSgpLCB0cnVlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQocGFnZUFkYXB0ZXIoKSwg
dHJ1ZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVuYWJsZU1vY2tTY3JvbGxiYXJz
KCk7CiAKICAgICBRRm9jdXNFdmVudCBldmVudChRRXZlbnQ6OkZvY3VzSW4sIFF0OjpBY3RpdmVX
aW5kb3dGb2N1c1JlYXNvbik7CkBAIC01NDEsOSArNTM4LDkgQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3QgUVVybCYgdXJsKQog
I2VuZGlmCiAKICAgICBjbGVhckhpc3RvcnkobV9wYWdlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2NhbGVQYWdlQnkobV9wYWdlLT5tYWluRnJhbWUoKSwgMSwgUVBvaW50KDAsIDAp
KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJGcmFtZU5hbWUobV9wYWdlLT5t
YWluRnJhbWUoKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhtX3BhZ2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzY2FsZVBhZ2VC
eShtYWluRnJhbWVBZGFwdGVyKCksIDEsIFFQb2ludCgwLCAwKSk7CisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmNsZWFyRnJhbWVOYW1lKG1haW5GcmFtZUFkYXB0ZXIoKSk7CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhwYWdlQWRhcHRlcigp
KTsKIAogICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVy
dGljYWwsIFF0OjpTY3JvbGxCYXJBc05lZWRlZCk7CiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+
c2V0U2Nyb2xsQmFyUG9saWN5KFF0OjpIb3Jpem9udGFsLCBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQp
OwpAQCAtNTYxLDcgKzU1OCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0
ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0IFFVcmwmIHVybCkKIAogICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKTsKIAotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaW5kb3dzQmVoYXZpb3JBc0VkaXRpbmdCZWhhdmlvciht
X3BhZ2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaW5kb3dzQmVoYXZpb3JB
c0VkaXRpbmdCZWhhdmlvcihwYWdlQWRhcHRlcigpKTsKIAogICAgIFFMb2NhbGU6OnNldERlZmF1
bHQoUUxvY2FsZTo6YygpKTsKIApAQCAtNTcwLDcgKzU2Nyw3IEBAIHZvaWQgRHVtcFJlbmRlclRy
ZWU6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0IFFVcmwmIHVybCkK
ICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAjZW5kaWYKIAotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpjbGVhck9wZW5lcihtX3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJPcGVuZXIobWFpbkZyYW1lQWRhcHRlcigpKTsKIH0KIAog
c3RhdGljIGJvb2wgaXNHbG9iYWxIaXN0b3J5VGVzdChjb25zdCBRVXJsJiB1cmwpCkBAIC03Mzks
NyArNzM2LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6aW5pdEpTT2JqZWN0cygpCiAgICAgZnJh
bWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChRTGF0aW4xU3RyaW5nKCJldmVudFNlbmRl
ciIpLCBtX2V2ZW50U2VuZGVyKTsKICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2Jq
ZWN0KFFMYXRpbjFTdHJpbmcoInRleHRJbnB1dENvbnRyb2xsZXIiKSwgbV90ZXh0SW5wdXRDb250
cm9sbGVyKTsKICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KFFMYXRpbjFT
dHJpbmcoIkdDQ29udHJvbGxlciIpLCBtX2djQ29udHJvbGxlcik7Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChmcmFtZSk7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChmcmFtZS0+aGFuZGxlKCkpOwog
fQogCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpzaG93UGFnZSgpCkBAIC03NTcsNyArNzU0LDcgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZTo6aGlkZVBhZ2UoKQogCiBRU3RyaW5nIER1bXBSZW5kZXJUcmVl
OjpkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihRV2ViRnJhbWUqIGZyYW1lKQogewotICAgIGlmICgh
ZnJhbWUgfHwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpoYXNEb2N1bWVudEVsZW1lbnQoZnJh
bWUpKQorICAgIGlmICghZnJhbWUgfHwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpoYXNEb2N1
bWVudEVsZW1lbnQoZnJhbWUtPmhhbmRsZSgpKSkKICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsK
IAogICAgIFFTdHJpbmcgcmVzdWx0OwpAQCAtNzc5LDcgKzc3Niw3IEBAIFFTdHJpbmcgRHVtcFJl
bmRlclRyZWU6OmR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpCiAKIFFT
dHJpbmcgRHVtcFJlbmRlclRyZWU6OmR1bXBGcmFtZXNBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSkK
IHsKLSAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aGFzRG9jdW1l
bnRFbGVtZW50KGZyYW1lKSkKKyAgICBpZiAoIWZyYW1lIHx8ICFEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6aGFzRG9jdW1lbnRFbGVtZW50KGZyYW1lLT5oYW5kbGUoKSkpCiAgICAgICAgIHJldHVy
biBRU3RyaW5nKCk7CiAKICAgICBRU3RyaW5nIHJlc3VsdDsKQEAgLTkwNyw3ICs5MDQsNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlOjpkdW1wKCkKICAgICAgICAgZnByaW50ZihzdGRvdXQsICJTb3Vy
Y2U6XG5cbiVzXG4iLCBtYXJrdXAudG9VdGY4KCkuY29uc3REYXRhKCkpOwogICAgIH0KIAotICAg
IFFTdHJpbmcgbWltZVR5cGUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzcG9uc2VNaW1l
VHlwZShtYWluRnJhbWUpOworICAgIFFTdHJpbmcgbWltZVR5cGUgPSBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cmVzcG9uc2VNaW1lVHlwZShtYWluRnJhbWUtPmhhbmRsZSgpKTsKICAgICBpZiAo
bWltZVR5cGUgPT0gInRleHQvcGxhaW4iKQogICAgICAgICBtX2NvbnRyb2xsZXItPmR1bXBBc1Rl
eHQoKTsKIApAQCAtOTQ3LDExICs5NDQsMTEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgp
CiAgICAgICAgICAgICBtYWluRnJhbWUtPnJlbmRlcigmcGFpbnRlcik7CiAgICAgICAgICAgICBw
YWludGVyLmVuZCgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGltYWdlID0gRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnBhaW50UGFnZXNXaXRoQm91bmRhcmllcyhtYWluRnJhbWUpOwor
ICAgICAgICAgICAgaW1hZ2UgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFpbnRQYWdlc1dp
dGhCb3VuZGFyaWVzKG1haW5GcmFtZS0+aGFuZGxlKCkpOwogCi0gICAgICAgIGlmIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6dHJhY2tSZXBhaW50UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKSkp
IHsKKyAgICAgICAgaWYgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp0cmFja1JlcGFpbnRSZWN0
cyhtYWluRnJhbWVBZGFwdGVyKCkpKSB7CiAgICAgICAgICAgICBRVmVjdG9yPFFSZWN0PiByZXBh
aW50UmVjdHM7Ci0gICAgICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2V0VHJhY2tl
ZFJlcGFpbnRSZWN0cyhtX3BhZ2UtPm1haW5GcmFtZSgpLCByZXBhaW50UmVjdHMpOworICAgICAg
ICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdldFRyYWNrZWRSZXBhaW50UmVjdHMobWFp
bkZyYW1lQWRhcHRlcigpLCByZXBhaW50UmVjdHMpOwogICAgICAgICAgICAgUUltYWdlIG1hc2so
aW1hZ2Uuc2l6ZSgpLCBpbWFnZS5mb3JtYXQoKSk7CiAgICAgICAgICAgICBtYXNrLmZpbGwoUUNv
bG9yKDAsIDAsIDAsIDAuNjYgKiAyNTUpKTsKIApAQCAtOTYzLDcgKzk2MCw3IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWU6OmR1bXAoKQogICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmaW1hZ2Up
OwogICAgICAgICAgICAgcGFpbnRlci5kcmF3SW1hZ2UoaW1hZ2UucmVjdCgpLCBtYXNrKTsKIAot
ICAgICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFRyYWNrUmVwYWludFJlY3Rz
KG1fcGFnZS0+bWFpbkZyYW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRUcmFja1JlcGFpbnRSZWN0cyhtYWluRnJhbWVBZGFwdGVyKCksIGZhbHNl
KTsKICAgICAgICAgfQogCiAgICAgICAgIFFDcnlwdG9ncmFwaGljSGFzaCBoYXNoKFFDcnlwdG9n
cmFwaGljSGFzaDo6TWQ1KTsKQEAgLTEwOTgsNyArMTA5NSw3IEBAIFFXZWJQYWdlICpEdW1wUmVu
ZGVyVHJlZTo6Y3JlYXRlV2luZG93KCkKIAogICAgIC8vIFVzZSBhIGZyYW1lIGdyb3VwIG5hbWUg
Zm9yIGFsbCBwYWdlcyBjcmVhdGVkIGJ5IER1bXBSZW5kZXJUcmVlIHRvIGFsbG93CiAgICAgLy8g
dGVzdGluZyBvZiBjcm9zcy1wYWdlIGZyYW1lIGxvb2t1cC4KLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZShwYWdlLCAib3JnLndlYmtpdC5xdC5EdW1wUmVu
ZGVyVHJlZSIpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJQYWdlU2V0R3JvdXBO
YW1lKHBhZ2UtPmhhbmRsZSgpLCAib3JnLndlYmtpdC5xdC5EdW1wUmVuZGVyVHJlZSIpOwogCiAg
ICAgcmV0dXJuIHBhZ2U7CiB9CkBAIC0xMTM0LDYgKzExMzEsMTYgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZTo6c3dpdGNoRm9jdXMoYm9vbCBmb2N1c2VkKQogCiB9CiAKK1FXZWJQYWdlQWRhcHRlciog
RHVtcFJlbmRlclRyZWU6OnBhZ2VBZGFwdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdl
LT5oYW5kbGUoKTsKK30KKworUVdlYkZyYW1lQWRhcHRlciogRHVtcFJlbmRlclRyZWU6Om1haW5G
cmFtZUFkYXB0ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZSgpLT5o
YW5kbGUoKTsKK30KKwogUUxpc3Q8V2ViUGFnZSo+IER1bXBSZW5kZXJUcmVlOjpnZXRBbGxQYWdl
cygpIGNvbnN0CiB7CiAgICAgUUxpc3Q8V2ViUGFnZSo+IHBhZ2VzOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCmluZGV4IDk4NDI5YzQ0ZWM5MzExMzIwMDdlNGQ4
ZjNhYWNhZTRkYzlmOTY2NzguLjViODhiNTI3NjYyODJjYTQwNjA4ODBiNGI3Y2VlZjQyNTM2NGEw
ZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKQEAgLTUz
LDcgKzUzLDggQEAgY2xhc3MgUVVybDsKIGNsYXNzIFFGaWxlOwogUVRfRU5EX05BTUVTUEFDRQog
Ci1jbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBRV2ViRnJhbWVBZGFwdGVyOworY2xhc3MgUVdlYlBh
Z2VBZGFwdGVyOwogCiBjbGFzcyBUZXN0UnVubmVyOwogY2xhc3MgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ7CkBAIC05Nyw2ICs5OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3aXRjaEZvY3VzKGJv
b2wgZm9jdXNlZCk7CiAKICAgICBXZWJQYWdlICp3ZWJQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlOyB9CisgICAgUVdlYlBhZ2VBZGFwdGVyICpwYWdlQWRhcHRlcigpIGNvbnN0OworICAgIFFX
ZWJGcmFtZUFkYXB0ZXIgKm1haW5GcmFtZUFkYXB0ZXIoKSBjb25zdDsKKwogICAgIFFMaXN0PFdl
YlBhZ2UqPiBnZXRBbGxQYWdlcygpIGNvbnN0OwogCiAgICAgdm9pZCBwcm9jZXNzQXJnc0xpbmUo
Y29uc3QgUVN0cmluZ0xpc3QmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0V2ZW50U2VuZGVyUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJR
dC5jcHAKaW5kZXggZGNmOWYxYmIyMTBlOWMwMWZjNTU5YmJjNDgzZGEyYzQ1Y2Y5MGE0MC4uODBi
ZTEzMTc4OGQyYjliMjA4ZjUzZjhkZDY1NTc3NDQxYThjYWQxMiAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCBRU3RyaW5nTGlz
dCBFdmVudFNlbmRlcjo6Y29udGV4dENsaWNrKCkKICAgICAgICAgUUNvbnRleHRNZW51RXZlbnQg
Y3R4RXZlbnQoUUNvbnRleHRNZW51RXZlbnQ6Ok1vdXNlLCBtX21vdXNlUG9zKTsKICAgICAgICAg
c2VuZEV2ZW50KG1fcGFnZS0+dmlldygpLCAmY3R4RXZlbnQpOwogICAgIH0KLSAgICByZXR1cm4g
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbnRleHRNZW51KG1fcGFnZSk7CisgICAgcmV0dXJu
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb250ZXh0TWVudShtX3BhZ2UtPmhhbmRsZSgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCkBAIC02
MTYsNyArNjE2LDcgQEAgdm9pZCBFdmVudFNlbmRlcjo6dGV4dFpvb21PdXQoKQogdm9pZCBFdmVu
dFNlbmRlcjo6c2NhbGVQYWdlQnkoZmxvYXQgc2NhbGVGYWN0b3IsIGZsb2F0IHgsIGZsb2F0IHkp
CiB7CiAgICAgaWYgKFFXZWJGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpKQotICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2NhbGVQYWdlQnkoZnJhbWUsIHNjYWxlRmFj
dG9yLCBRUG9pbnQoeCwgeSkpOworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2Nh
bGVQYWdlQnkoZnJhbWUtPmhhbmRsZSgpLCBzY2FsZUZhY3RvciwgUVBvaW50KHgsIHkpKTsKIH0K
IAogUVdlYkZyYW1lKiBFdmVudFNlbmRlcjo6ZnJhbWVVbmRlck1vdXNlKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwCmluZGV4IDYwNjc1MTRmMDU1MDk1ZWI3
MjNhNGU4NDExYTIyZGFiNjJlYmQ4ZjEuLmQ5MzUwNWZjNWZhZjVmYzEzZmE0MWZlZmVmOTZhNWEw
ODM2NDU5MWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJR
dC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcApAQCAt
OTIsNyArOTIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0KCkKICAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZmFsc2UsIGZhbHNlKTsKICAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEhpc3RvcnlDYWxsYmFja3MoZmFsc2UpOwogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKGZhbHNl
KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRHZW9sb2NhdGlvbk1vY2sobV9k
cnQtPndlYlBhZ2UoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0R2VvbG9j
YXRpb25Nb2NrKG1fZHJ0LT5wYWdlQWRhcHRlcigpKTsKICAgICBzZXRJY29uRGF0YWJhc2VFbmFi
bGVkKGZhbHNlKTsKICAgICBjbGVhckFsbERhdGFiYXNlcygpOwogICAgIC8vIFRoZSBkZWZhdWx0
IHN0YXRlIGZvciBEUlQgaXMgdG8gYmxvY2sgdGhpcmQtcGFydHkgY29va2llcywgbWltaWNpbmcg
dGhlIE1hYyBwb3J0CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0
ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRpdGxlKQogCiB2b2lk
IFRlc3RSdW5uZXI6OmRpc3BsYXkoKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRUcmFja1JlcGFpbnRSZWN0cyhtX3RvcExvYWRpbmdGcmFtZSwgdHJ1ZSk7CisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldFRyYWNrUmVwYWludFJlY3RzKG1fdG9wTG9hZGluZ0ZyYW1l
LT5oYW5kbGUoKSwgdHJ1ZSk7CiAgICAgZW1pdCBzaG93UGFnZSgpOwogfQogCkBAIC00MTcsNyAr
NDE3LDcgQEAgUVN0cmluZyBUZXN0UnVubmVyOjpkZWNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5n
JiBob3N0KQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UobV9kcnQtPndlYlBhZ2Uo
KSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKG1fZHJ0
LT5wYWdlQWRhcHRlcigpKTsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBmYWxzZSk7CiB9
CiAKQEAgLTQzNCwyNyArNDM0LDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3Bl
Y3RvcigpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgdHJ1ZSk7Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3cobV9kcnQtPndlYlBhZ2UoKSk7Cisg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3cobV9kcnQtPnBhZ2VB
ZGFwdGVyKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
bG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlwdChtX2RydC0+d2ViUGFnZSgpLCBj
YWxsSWQsIHNjcmlwdCk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3Rv
ckV4ZWN1dGVTY3JpcHQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIGNhbGxJZCwgc2NyaXB0KTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RnJhbWVGbGF0dGVuaW5nRW5h
YmxlZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGVkKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgZW5h
YmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6Z29CYWNrKG1fZHJ0LT53ZWJQYWdlKCkpOworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0Ojpnb0JhY2sobV9kcnQtPnBhZ2VBZGFwdGVyKCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBmbGFnKQogewotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKG1fZHJ0LT53ZWJQYWdlKCksIGZsYWcpOwor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlcnNMb2FkaW5nKG1fZHJ0LT5wYWdl
QWRhcHRlcigpLCBmbGFnKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNh
bEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCkBAIC01NDQsNyArNTQ0LDcgQEAgYm9v
bCBUZXN0UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBR
U3RyaW5nJiBhbmltYXRpb25OYW0KIHsKICAgICBRV2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndl
YlBhZ2UoKS0+bWFpbkZyYW1lKCk7CiAgICAgUV9BU1NFUlQoZnJhbWUpOwotICAgIHJldHVybiBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VBbmltYXRpb24oZnJhbWUsIGFuaW1hdGlvbk5h
bWUsIHRpbWUsIGVsZW1lbnRJZCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpwYXVzZUFuaW1hdGlvbihmcmFtZS0+aGFuZGxlKCksIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVs
ZW1lbnRJZCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwKQEAgLTU1MywxNCArNTUz
LDE0IEBAIGJvb2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtCiB7CiAgICAgUVdlYkZyYW1lKiBmcmFtZSA9
IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJUKGZyYW1lKTsKLSAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlVHJhbnNpdGlvbk9mUHJvcGVy
dHkoZnJhbWUsIHByb3BlcnR5TmFtZSwgdGltZSwgZWxlbWVudElkKTsKKyAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNlVHJhbnNpdGlvbk9mUHJvcGVydHkoZnJhbWUtPmhh
bmRsZSgpLCBwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7CiB9CiAKIHVuc2lnbmVkIFRl
c3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgUVdlYkZy
YW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJU
KGZyYW1lKTsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyhmcmFtZSk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUtPmhhbmRsZSgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKQEAgLTY5OCwxMiArNjk4LDEyIEBAIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJiB1
cmwpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCB2YWx1
ZSkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQobV9kcnQtPndlYlBhZ2UoKSwgdmFsdWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgdmFsdWUpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wg
dmFsdWUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIHZhbHVlKTsKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQobV9kcnQtPnBhZ2VBZGFw
dGVyKCksIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVu
YWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNzI4LDcgKzcyOCw3IEBAIGludCBUZXN0UnVubmVyOjp3
b3JrZXJUaHJlYWRDb3VudCgpCiAKIGJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25X
ZWJWaWV3KCkKIHsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNob3VsZENs
b3NlKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNob3VsZENsb3NlKG1fZHJ0LT5tYWluRnJhbWVBZGFwdGVyKCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNjcm9sbGJhclBvbGljeShjb25zdCBRU3RyaW5nJiBv
cmllbnRhdGlvbiwgY29uc3QgUVN0cmluZyYgcG9saWN5KQpAQCAtNzU3LDI3ICs3NTcsMjcgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgUVN0cmluZyYgb3JpZW50
YXRpb24sIGNvbnN0IFFTdHJpbmcmIHAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQoYm9vbCBlbmFibGUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGUp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQobV9kcnQtPnBhZ2VBZGFwdGVyKCksIGVuYWJsZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGVuYWJsZSkKIHsKLSAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKG1fZHJ0LT5wYWdlQWRhcHRlcigp
LCBlbmFibGUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKGNvbnN0IFFTdHJp
bmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQogewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUobV9kcnQtPndlYlBhZ2UoKSwgbmFtZSwg
dmFsdWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRC
eU5hbWUobV9kcnQtPnBhZ2VBZGFwdGVyKCksIG5hbWUsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0
UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppc0NvbW1hbmRFbmFibGVkKG1fZHJ0
LT53ZWJQYWdlKCksIG5hbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
aXNDb21tYW5kRW5hYmxlZChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgbmFtZSk7CiB9CiAKIGJvb2wg
VGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJp
bmdMaXN0JiBvcHRpb25BcnJheSkKIHsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OmZpbmRTdHJpbmcobV9kcnQtPndlYlBhZ2UoKSwgc3RyaW5nLCBvcHRpb25BcnJheSk7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5kU3RyaW5nKG1fZHJ0LT5wYWdl
QWRhcHRlcigpLCBzdHJpbmcsIG9wdGlvbkFycmF5KTsKIH0KIAogUVN0cmluZyBUZXN0UnVubmVy
OjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKQpAQCAt
NzkyLDcgKzc5Miw3IEBAIFFWYXJpYW50TWFwIFRlc3RSdW5uZXI6OmNvbXB1dGVkU3R5bGVJbmNs
dWRpbmdWaXNpdGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxlCiAKIGJvb2wgVGVzdFJ1bm5l
cjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcm
IGVsZW1lbnRJZCkKIHsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVsZW1l
bnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChtX2RydC0+d2ViUGFnZSgpLT5tYWlu
RnJhbWUoKSwgZWxlbWVudElkKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChtX2RydC0+bWFpbkZyYW1l
QWRhcHRlcigpLCBlbGVtZW50SWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRpY2F0
ZVNlc3Npb24oY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJikK
QEAgLTgxMiw3ICs4MTIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRh
dGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBibwogewogICAgIFFMaXN0
PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwogICAgIGZv
cmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKHBhZ2UsIGNhblByb3ZpZGVB
bHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1h
KTsKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VPcmllbnRh
dGlvbihwYWdlLT5oYW5kbGUoKSwgY2FuUHJvdmlkZUFscGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJl
dGEsIGJldGEsIGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQpAQCAtODIwLDcgKzgyMCw3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiAg
ICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKICAgICBRTGlzdDxXZWJD
b3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNo
IChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24ocGFnZSwgYWxsb3cpOworICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lv
bihwYWdlLT5oYW5kbGUoKSwgYWxsb3cpOwogfQogCiBpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQ
ZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQpAQCAtODI4LDcgKzgyOCw3IEBA
IGludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cygpCiAgICAgaW50IHBlbmRpbmdQZXJtaXNzaW9uQ291bnQgPSAwOwogICAgIFFMaXN0PFdl
YkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwogICAgIGZvcmVh
Y2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBwZW5kaW5nUGVybWlz
c2lvbkNvdW50ICs9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhwYWdlKTsKKyAgICAgICAgcGVuZGluZ1Blcm1pc3Np
b25Db3VudCArPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMocGFnZS0+aGFuZGxlKCkpOwogCiAgICAgcmV0dXJuIHBl
bmRpbmdQZXJtaXNzaW9uQ291bnQ7CiB9CkBAIC04NDMsMTQgKzg0MywxNCBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBR
U3RyaW5nJiBtZXNzYQogewogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1f
ZHJ0LT5nZXRBbGxQYWdlcygpOwogICAgIGZvcmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2Us
IHBhZ2VzKQotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHBhZ2UsIG1lc3NhZ2UpOworICAgICAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJs
ZUVycm9yKHBhZ2UtPmhhbmRsZSgpLCBtZXNzYWdlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFn
ZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdl
KiBwYWdlLCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKHBhZ2UsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5KTsK
KyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKHBhZ2UtPmhhbmRsZSgpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcm
IHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKQpAQCAt
ODc4LDEyICs4NzgsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKGludCB3b3JsZElELCBjb25zdAogCiB2b2lkIFRlc3RSdW5u
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3Ry
aW5nJiBzY3JpcHQpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElE
LCBzY3JpcHQpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZChtX2RydC0+bWFpbkZyYW1lQWRhcHRlcigpLCB3b3JsZElELCBzY3JpcHQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcm
IHNvdXJjZUNvZGUpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVzZXJTdHls
ZVNoZWV0KG1fZHJ0LT53ZWJQYWdlKCksIHNvdXJjZUNvZGUpOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChtX2RydC0+cGFnZUFkYXB0ZXIoKSwgc291cmNl
Q29kZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKQEAg
LTkwMCw3ICs5MDAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZFVSTFRvUmVkaXJlY3QoY29uc3Qg
UVN0cmluZyYgb3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdAogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkK
IHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwo
bV9kcnQtPndlYlBhZ2UoKSwgbWluaW11bVRpbWVySW50ZXJ2YWwpOworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtX2RydC0+cGFnZUFkYXB0ZXIo
KSwgbWluaW11bVRpbWVySW50ZXJ2YWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rl
eHRJbnB1dENvbnRyb2xsZXJRdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXh0SW5w
dXRDb250cm9sbGVyUXQuY3BwCmluZGV4IGQ1NjQ1YTUyM2U5MmRjOWQ1MzY2MmM2OWM0ZTBiY2Iw
NGZhMDY3ZmMuLjM4ZTQ4OWQ3OGY3MzZmMzI0MGI1MDEyMzEyZmY3MDVjZGM3NDVmMTQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1RleHRJbnB1dENvbnRyb2xsZXJRdC5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGV4dElucHV0Q29udHJvbGxlclF0LmNwcApA
QCAtMTQ5LDE1ICsxNDksMTUgQEAgdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjppbnNlcnRUZXh0
KGNvbnN0IFFTdHJpbmcmIHN0cmluZykKIAogUVZhcmlhbnRMaXN0IFRleHRJbnB1dENvbnRyb2xs
ZXI6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2VsZWN0ZWRSYW5nZShxb2JqZWN0X2Nhc3Q8UVdlYlBhZ2UqPihwYXJlbnQoKSkpOworICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2VsZWN0ZWRSYW5nZShxb2JqZWN0X2Nh
c3Q8UVdlYlBhZ2UqPihwYXJlbnQoKSktPmhhbmRsZSgpKTsKIH0KIAogUVZhcmlhbnRMaXN0IFRl
eHRJbnB1dENvbnRyb2xsZXI6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGludCBsb2NhdGlv
biwgaW50IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHBhcmVudCgp
KSwgbG9jYXRpb24sIGxlbmd0aCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShxb2JqZWN0X2Nhc3Q8UVdlYlBhZ2UqPihwYXJl
bnQoKSktPmhhbmRsZSgpLCBsb2NhdGlvbiwgbGVuZ3RoKTsKIH0KIAogdm9pZCBUZXh0SW5wdXRD
b250cm9sbGVyOjp1bm1hcmtUZXh0KCkKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
Y29uZmlybUNvbXBvc2l0aW9uKHFvYmplY3RfY2FzdDxRV2ViUGFnZSo+KHBhcmVudCgpKSwgMCk7
CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbmZpcm1Db21wb3NpdGlvbihxb2JqZWN0
X2Nhc3Q8UVdlYlBhZ2UqPihwYXJlbnQoKSktPmhhbmRsZSgpLCAwKTsKIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1dvcmtRdWV1ZUl0ZW1RdC5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9Xb3JrUXVldWVJdGVtUXQuY3BwCmluZGV4IGIwOTMzNjY2NzYwNjg2M2M4
Nzc0YTliNDkzZWYyOGIwMzU4ZjY5ZWEuLjdjZjlmY2FmMTAyZTBmNjBhMDBkNmYwN2U2MjA1Zjc1
OWViMGRjZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1dvcmtRdWV1ZUl0
ZW1RdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvV29ya1F1ZXVlSXRlbVF0LmNw
cApAQCAtODEsNyArODEsNyBAQCBib29sIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nSXRlbTo6aW52
b2tlKCkgY29uc3QKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QWx0ZXJuYXRlSHRtbChmcmFtZSwgbV9jb250
ZW50LCBRVXJsKG1fYmFzZVVSTCksIFFVcmwobV9mYWlsaW5nVVJMKSk7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldEFsdGVybmF0ZUh0bWwoZnJhbWUtPmhhbmRsZSgpLCBtX2NvbnRl
bnQsIFFVcmwobV9iYXNlVVJMKSwgUVVybChtX2ZhaWxpbmdVUkwpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0
X3Bvc3QucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJm
CmluZGV4IDQ3NzZkMWQ5MjA5ZDI1ZmJkYWY5YTk0YWEwYWNjYzM1NWIyZWZmZmYuLjljMGYzMjMy
ZjliZGI2MDNkODkzYTRhN2E3MGM3MzQ4ZjZiZmZhZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtl
L21rc3BlY3MvZmVhdHVyZXMvZGVmYXVsdF9wb3N0LnByZgorKysgYi9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKQEAgLTE3Nyw3ICsxNzcsNyBAQCBjb250YWlu
cyhRVCwgd2Via2l0d2lkZ2V0cykgewogICAgICMgbmVlZCB0byBsaW5rIHRvIGFueSBpbnRlcm1l
ZGlhdGUgc2hhcmVkIGxpYnJhcmllcy4KICAgICBmb3JjZV9zdGF0aWNfbGlic19hc19zaGFyZWQg
ewogICAgICAgICBXRUJLSVQgKz0gd3RmIGphdmFzY3JpcHRjb3JlIHdlYmNvcmUKLSAgICAgICAg
YnVpbGQ/KHdlYmtpdDEpOiBXRUJLSVQgKz0gd2Via2l0MQorICAgICAgICBidWlsZD8od2Via2l0
MSk6IFdFQktJVCArPSB3ZWJraXR3aWRnZXRzIHdlYmtpdDEKICAgICAgICAgYnVpbGQ/KHdlYmtp
dDIpOiBXRUJLSVQgKz0gd2Via2l0MgogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9wcm9kdWN0aW9uX2J1aWxkLnByZiBiL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvcHJvZHVjdGlvbl9idWlsZC5wcmYKaW5kZXggYjNmMzZhYmI0ODUzOTQxM2Zj
MjdiNjY5YWYyNjE1YjY3MDczOTU0ZC4uNDIzNTEwMjY4YjM4YTEzN2YxODRlNmI2NGEzZmI4Yzk0
NDQyYmQxNSAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9wcm9kdWN0
aW9uX2J1aWxkLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3Byb2R1Y3Rp
b25fYnVpbGQucHJmCkBAIC03LDggKzcsOCBAQCBDT05GSUcgKj0gdXNlX2FsbF9pbl9vbmVfZmls
ZXMKICMgcmVzdWx0aW5nIGluIHRoZSBuZWVkIG9mIHNldmVyYWwgZ2lnYWJ5dGVzIG9mIG1lbW9y
eSBhdCBsaW5rLXRpbWUuIFJlZHVjZSB0aGUgcHJlc3N1cmUKICMgYnkgY29tcGlsaW5nIGFueSBz
dGF0aWMgbGlicmFyeSBsaWtlIFdURiBvciBKU0Mgd2l0aCByZWxlYXNlIGZsYWdzIGluc3RlYWQg
YW5kIGtlZXAgZGVidWcKICMgc3ltYm9scyBmb3IgdGhlIHN0YXRpYyBsaWJyYXJpZXMgdGhhdCBp
bXBsZW1lbnQgQVBJLgotbGludXgtKnx3aW4zMi1nKysqOmlmKENPTkZJRyhkZWJ1ZywgZGVidWd8
cmVsZWFzZSl8Y29udGFpbnMoUVRfQ09ORklHLHNlcGFyYXRlX2RlYnVnX2luZm8pKTpjb250YWlu
cyhURU1QTEFURSwgbGliKTpzdGF0aWNsaWIgewotICAgICFlcXVhbHMoVEFSR0VULCBXZWJLaXQy
KTohZXF1YWxzKFRBUkdFVCwgV2ViS2l0MSkgeworbGludXgtKnx3aW4zMi1nKysqOkNPTkZJRyhk
ZWJ1ZywgZGVidWd8cmVsZWFzZSk6Y29udGFpbnMoVEVNUExBVEUsIGxpYik6c3RhdGljbGliIHsK
KyAgICAhZXF1YWxzKFRBUkdFVCwgV2ViS2l0Mik6IWVxdWFscyhUQVJHRVQsIFdlYktpdFdpZGdl
dHMpIHsKICAgICAgICAgQ09ORklHICs9IG5vX2RlYnVnX2luZm8KICAgICAgICAgQ09ORklHIC09
IHNlcGFyYXRlX2RlYnVnX2luZm8KICAgICAgICAgUU1BS0VfQ0ZMQUdTICs9ICQkUU1BS0VfQ0ZM
QUdTX1JFTEVBU0UKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Vi
a2l0X21vZHVsZXMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJraXRfbW9k
dWxlcy5wcmYKaW5kZXggYjJmMzM1MzY0OGQ3MDhmYjE2MmI1OTE1MDYwMWIzY2FmZGY1OWFkMi4u
NTA1YjgyNjU4ZTIxOGQ2MjY2MGZkMjgxYmY1NmFlOWIxNzY5MzBhMyAxMDA2NDQKLS0tIGEvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJraXRfbW9kdWxlcy5wcmYKKysrIGIvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJraXRfbW9kdWxlcy5wcmYKQEAgLTcsNyArNyw3IEBA
CiAKICMgUmVvcmRlciBsaWJyYXJpZXMgc28gdGhhdCB0aGUgbGluayBhbmQgaW5jbHVkZSBvcmRl
ciBpcyBjb3JyZWN0LAogIyBhbmQgbWFrZSBzdXJlIHRoZSBjYXNlIG1hdGNoZXMgdGhlIG9yaWdp
bmFsIGNhc2UuCi1saWJyYXJpZXMgPSBXZWJLaXQxIFdlYktpdDIgV2ViQ29yZSBBTkdMRSBKYXZh
U2NyaXB0Q29yZSBXVEYKK2xpYnJhcmllcyA9IFdlYktpdFdpZGdldHMgV2ViS2l0MSBXZWJLaXQy
IFdlYkNvcmUgQU5HTEUgSmF2YVNjcmlwdENvcmUgV1RGCiBmb3IobGlicmFyeSwgbGlicmFyaWVz
KSB7CiAgICAgY29udGFpbnMoV0VCS0lULCAkJGxvd2VyKCQkbGlicmFyeSkpIHsKICAgICAgICAg
V0VCS0lUIC09ICQkbG93ZXIoJCRsaWJyYXJ5KQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtz
cGVjcy9tb2R1bGVzL3dlYmtpdHdpZGdldHMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1
bGVzL3dlYmtpdHdpZGdldHMucHJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhMTY0M2M4ZGYwMDEwZGZhZDI3NWEz
NGQzYjYxOGI5YWZmYmQxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNz
L21vZHVsZXMvd2Via2l0d2lkZ2V0cy5wcmYKQEAgLTAsMCArMSw5IEBACisjIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyMgTW9kdWxlIGZpbGUgZm9yIFdlYktpdFdpZGdldCwgdXNlZCBieSB0YXJnZXRzIHRoYXQgZGVw
ZW5kIG9uIFdlYktpdFdpZGdldAorIworIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFu
IG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXRUJLSVQud2Vi
a2l0d2lkZ2V0cy5yb290X3NvdXJjZV9kaXIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9X
ZWJLaXQKKworaW5jbHVkZSgkJHtXRUJLSVQud2Via2l0d2lkZ2V0cy5yb290X3NvdXJjZV9kaXJ9
L1dlYktpdFdpZGdldHMucHJpKQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmlu
ZGV4IDgxNGE4YmM3OTRlNzlmMDEwYzkwZGQ2ZjhkNWViMmJjNjYxMGJkY2QuLjQ2NzMzYjE3Zjdm
M2Y3ZDJkMzZhY2JmNDM2Y2ZkYzE4MzY3M2YzOTkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysg
Yi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0xMS0yMiAgU2ltb24gSGF1c21hbm4g
IDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBTZXBhcmF0ZSBRV2lk
Z2V0IGRlcGVuZGFudCBjb2RlIGludG8gc2VwYXJhdGUgV2ViS2l0V2lkZ2V0cyBzdGF0aWMgbGli
cmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAy
ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBzZXBhcmF0ZXMgY29kZSB0aGF0IG5lZWRzIHRvIHVzZSBRV2lkZ2V0IHJlbGF0ZWQg
QVBJcyBpbgorICAgICAgICBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQgYW5kIEFwaSBmcm9tIGNv
ZGUgdGhhdCBkb2Vzbid0LiBUaGlzIG1lYW5zIGZvcgorICAgICAgICBleGFtcGxlIEZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwIHJlbWFpbnMgaW4gdGhlIFdlYktpdDEgc3RhdGljIGxpYnJhcnksCisg
ICAgICAgIHdoaWxlIHF3ZWJwYWdlLmNwcCBhbmQgcXdlYmZyYW1lLmNwcCBiZWNvbWUgcGFydCBv
ZiB0aGUgV2ViS2l0V2lkZ2V0cworICAgICAgICBzdGF0aWMgbGlicmFyeS4gV2ViS2l0MSBpcyBj
b21waWxlZCB3aXRob3V0IFFUICs9IHdpZGdldHMgYW5kIHRoZXJlZm9yZQorICAgICAgICBhbnkg
d2lkZ2V0IHJlbGF0ZWQgZGVwZW5kZW5jeSBoYXMgYmVlbiBtb3ZlZCAidXAiIGFuZCBvdXQgb2Yg
V2ViS2l0MSBpbnRvCisgICAgICAgIHRoZSBXZWJLaXRXaWRnZXRzIGxpYnJhcnkuCisKKyAgICAg
ICAgQmV0d2VlbiB0aGUgY29kZSBpbiBXZWJLaXQuYSBhbmQgV2ViS2l0V2lkZ2V0cy5hIG5ldyBh
ZGFwdGVycyBhbmQKKyAgICAgICAgaW50ZXJmYWNlcyBoYXZlIGJlZW4gaW50cm9kdWNlZCwgc3Vj
aCBhcyBRV2ViUGFnZUFkYXB0ZXIgYW5kCisgICAgICAgIFFXZWJGcmFtZUFkYXB0ZXIuIFFXZWJQ
YWdlQWRhcHRlciwgd2hlbiB1c2VkIGZyb20gV2ViS2l0MSwgaXMgYSB3YXkgdG8KKyAgICAgICAg
Y2FsbCBvdXQgaW50byB0aGUgQVBJIGxheWVyLCBpbXBsZW1lbnRlZCBieSBRV2ViUGFnZSAoUVdl
YlBhZ2VQcml2YXRlKS4KKyAgICAgICAgVGhlIG90aGVyIHdheSBhcm91bmQgaWYgUVdlYlBhZ2Ug
d2FudHMgdG8gYWNjZXNzIFdlYkNvcmUgb3IKKyAgICAgICAgV2ViQ29yZVN1cHBvcnQgcmVsYXRl
ZCBmdW5jdGlvbmFsaXR5LCBpdCB3aWxsIGdvIHRocm91Z2gKKyAgICAgICAgUVdlYlBhZ2VBZGFw
YXRlciAoYXMgYmFzZSBjbGFzcykuIFRoZSBzZXBhcmF0aW9uIGluIHRoZSBkaXJlY3Rpb24gdXAK
KyAgICAgICAgaW50byB0aGUgQVBJIGxheWVyIGlzIGNvbXBsZXRlIHdpdGggdGhpcyBwYXRjaCwg
bm8gY29kZSBpbiBXZWJLaXQxCisgICAgICAgIGRlcGVuZHMgb24gUXRXaWRnZXRzLiBUaGUgc2Vw
YXJhdGlvbiB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgY29kZSBpbiB0aGUKKyAgICAgICAgQVBJIGxh
eWVyIG5vdCB1c2luZyBhbnkgV2ViQ29yZSB0eXBlcywgaXMgbm90IGNvbXBsZXRlIHlldC4KKwor
ICAgICAgICBTb21lIGNsYXNzZXMgc3VjaCBhcyBRV2ViU2V0dGluZ3MsIFFXZWJFbGVtZW50IG9y
CisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0IHJlbWFpbiBpbiBXZWJLaXQxLiBXaGls
ZSB0aGV5IGFyZSBBUEkgbGF5ZXIsCisgICAgICAgIHRoZXkgZG8gbm90IGRlcGVuZCBvbiB3aWRn
ZXQgcmVsYXRlZCBRdCBBUElzIGFuZCB0aGV5IG1ha2UgbXVjaCBtb3JlCisgICAgICAgIHVzZSBv
ZiBXZWJDb3JlIGludGVybmFsIEFQSXMgYW5kIHRoZXJlZm9yZSBhcmUgZWFzaWVyIHRvIGtlZXAg
aW4KKyAgICAgICAgV2ViS2l0MS4KKworICAgICAgICBJbiB0aGUgZnV0dXJlIHdlIHBsYW4gdG8g
cGxhY2UgYSByZWFsIHNoYXJlZCBsaWJyYXJ5IGJvdW5kYXJ5IGJldHdlZW4KKyAgICAgICAgV2Vi
S2l0MSBhbmQgV2ViS2l0V2lkZ2V0cywgYnkga2VlcGluZyB0aGUgV2ViS2l0MSBzdGF0aWMgbGli
cmFyeSBhcworICAgICAgICBwYXJ0IG9mIHRoZSBRdFdlYktpdCBzaGFyZWQgbGlicmFyeSBhbmQg
YnkgdHVybmluZyB0aGUgV2ViS2l0V2lkZ2V0cworICAgICAgICBzdGF0aWMgbGlicmFyeSBpbnRv
IGEgc2hhcmVkIG9uZS4KKworCisgICAgICAgICogU291cmNlL2FwaS5wcmk6CisgICAgICAgICog
V2ViS2l0LnBybzoKKwogMjAxMi0xMS0yMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAZ21haWwu
Y29tPgogCiAgICAgICAgIFtFRkxdIFJlbW92ZSB1bm5lY2Vzc2FyeSBkZWZpbml0aW9uLCAtREVO
QUJMRV9TUEVMTENIRUNLPTEKZGlmZiAtLWdpdCBhL1dlYktpdC5wcm8gYi9XZWJLaXQucHJvCmlu
ZGV4IDg3NmQ1NTQxMjY2MzhiOGFiZGE3ZmRlOGU5MTE0NmQxYzU3ZWVmNmMuLmZiYTViOTk3YWM3
YjMyNDE4NmRlNzc1OTcxZTNkM2QwYjlhMWMwNDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcm8KKysr
IGIvV2ViS2l0LnBybwpAQCAtMzIsNiArMzIsMTAgQEAgYnVpbGQ/KHdlYmtpdDEpIHsKICAgICB3
ZWJraXQxLmZpbGUgPSBTb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCiAgICAgd2Via2l0MS5tYWtl
ZmlsZSA9IE1ha2VmaWxlLldlYktpdDEKICAgICBTVUJESVJTICs9IHdlYmtpdDEKKworICAgIHdl
YmtpdHdpZGdldHMuZmlsZSA9IFNvdXJjZS9XZWJLaXQvV2ViS2l0V2lkZ2V0cy5wcm8KKyAgICB3
ZWJraXR3aWRnZXRzLm1ha2VmaWxlID0gTWFrZWZpbGUuV2ViS2l0V2lkZ2V0cworICAgIFNVQkRJ
UlMgKz0gd2Via2l0d2lkZ2V0cwogfQogCiBidWlsZD8od2Via2l0Mikgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>